From 8add210a380df6219baebdbb2475acfeec54d2cd Mon Sep 17 00:00:00 2001 From: Harald Wolff Date: Mon, 22 Mar 2021 23:41:08 +0100 Subject: [PATCH] Fix big_cmp, big_divmod --- big.impl/Makefile | 6 ++--- big.impl/bigint.c | 64 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/big.impl/Makefile b/big.impl/Makefile index 68685d3..ebe1a3d 100644 --- a/big.impl/Makefile +++ b/big.impl/Makefile @@ -10,12 +10,10 @@ all: linux Darwin clean: rm -f ../ln.biginteger/libbigint.so ../ln.biginteger/libbigint.dylib ../ln.biginteger/libbigint.dll -distribute: ../ln.biginteger/libbigint.so - linux: ../ln.biginteger/libbigint.so ../ln.biginteger/libbigint.so: $(SRC) - gcc -shared -o ../ln.biginteger/libbigint.so $(SRC) + gcc -shared -o ../ln.biginteger/libbigint.so $(SRC) -fPIC Darwin: ../ln.biginteger/libbigint.dylib ../ln.biginteger/libbigint.dylib: $(SRC) - gcc -shared -o ../ln.biginteger/libbigint.dylib $(SRC) + gcc -shared -o ../ln.biginteger/libbigint.dylib $(SRC) -fPIC diff --git a/big.impl/bigint.c b/big.impl/bigint.c index 2dbe046..a0d29fa 100644 --- a/big.impl/bigint.c +++ b/big.impl/bigint.c @@ -9,7 +9,15 @@ int32_t max(int32_t a,int32_t b) return a>b ? a : b; } -#define DUMP(op,l) for (int ___p = 0; ___p < l; ___p++) printf("0x%08x", op[___p]); printf("\n"); +int32_t big_is_zero( uint32_t* op, int32_t length) +{ + for (int n=0;n= 0; ___p--) printf("%08x", op[___p]); printf("\n"); int32_t big_get_bitlength(uint32_t *op, int32_t length) { @@ -62,24 +70,6 @@ int32_t big_sign(uint32_t *op, int32_t length) // } // } -int32_t big_cmp(uint32_t* op_a, int32_t length_a, uint32_t* op_b, int32_t length_b) -{ - int l = max(length_a, length_b); - for (int n=l-1; n >= 0; n--) - { - int a = n < length_a ? op_a[n] : 0; - int b = n < length_b ? op_b[n] : 0; - - int d = a - b; - - if (d > 0) - return 1; - else if (d < 0) - return -1; - } - return 0; -} - void big_shl(uint32_t *op, int32_t length, int32_t n) { if (n > 0) @@ -151,7 +141,7 @@ void big_add(uint32_t* op_a, int32_t length_a, uint32_t* op_b, int32_t length_b) } void big_sub(uint32_t* op_a, int32_t length_a, uint32_t* op_b, int32_t length_b) { - uint64_t c = 0; + int64_t c = 0; for (int n=0;n