diff options
| author | Camille Mougey <commial@gmail.com> | 2019-02-03 12:19:24 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-02-03 12:19:24 +0100 |
| commit | 036418b586510aec464e815e8879ff558e6b3775 (patch) | |
| tree | 9f33c9a8edbc68b27e9bd23d3a62459e24195600 /miasm2/jitter/bn.c | |
| parent | 099576fba1a6ee7db63ba69e3fa484b507d4a785 (diff) | |
| parent | 898e8c40a6b4584d55711e25479b3807dac3e573 (diff) | |
| download | miasm-036418b586510aec464e815e8879ff558e6b3775.tar.gz miasm-036418b586510aec464e815e8879ff558e6b3775.zip | |
Merge pull request #952 from serpilliere/ppc_explicit_flags
PPC: Explicit flags
Diffstat (limited to '')
| -rw-r--r-- | miasm2/jitter/bn.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/miasm2/jitter/bn.c b/miasm2/jitter/bn.c index c621d102..dd4f34ef 100644 --- a/miasm2/jitter/bn.c +++ b/miasm2/jitter/bn.c @@ -579,6 +579,92 @@ int bignum_cmp(bn_t a, bn_t b) } +/* Signed compare bn */ +int bignum_cmp_signed(bn_t a, bn_t b) +{ + int i = BN_ARRAY_SIZE; + do { + i -= 1; /* Decrement first, to start with last array element */ + if ((DTYPE_SIGNED)a.array[i] > (DTYPE_SIGNED)b.array[i]) { + return LARGER; + } + else if ((DTYPE_SIGNED)a.array[i] < (DTYPE_SIGNED)b.array[i]) { + return SMALLER; + } + } + while (i != 0); + + return EQUAL; +} + + +/* Unsigned compare bn */ +int bignum_cmp_unsigned(bn_t a, bn_t b) +{ + return bignum_cmp(a, b); +} + + +/* Return 1 if a == b else 0 */ +int bignum_is_equal(bn_t a, bn_t b) +{ + int ret; + ret = bignum_cmp_unsigned(a, b); + if (ret == EQUAL) + return 1; + else + return 0; +} + + +/* Return 1 if a <u b else 0 */ +int bignum_is_inf_unsigned(bn_t a, bn_t b) +{ + int ret; + ret = bignum_cmp_unsigned(a, b); + if (ret == SMALLER) + return 1; + else + return 0; +} + + +/* Return 1 if a <=u b else 0 */ +int bignum_is_inf_equal_unsigned(bn_t a, bn_t b) +{ + int ret; + ret = bignum_cmp_unsigned(a, b); + if (ret == EQUAL || ret == SMALLER) + return 1; + else + return 0; +} + + +/* Return 1 if a <s b else 0 */ +int bignum_is_inf_signed(bn_t a, bn_t b) +{ + int ret; + ret = bignum_cmp_signed(a, b); + if (ret == SMALLER) + return 1; + else + return 0; +} + + +/* Return 1 if a <=s b else 0 */ +int bignum_is_inf_equal_signed(bn_t a, bn_t b) +{ + int ret; + ret = bignum_cmp_signed(a, b); + if (ret == EQUAL || ret == SMALLER) + return 1; + else + return 0; +} + + int bignum_is_zero(bn_t n) { //require(n, "n is null"); |