From 6b1860af655eca49572255f085b6f36d9f9fbe59 Mon Sep 17 00:00:00 2001 From: Abdulaziz Ghuloum Date: Thu, 13 Sep 2007 00:47:41 -0400 Subject: [PATCH] * sll now works for all arguments. --- bin/ikarus | Bin 72380 -> 72380 bytes bin/ikarus-numerics.c | 39 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/bin/ikarus b/bin/ikarus index f2e814631b90e2fa8e9ba68cf70d076af16bec9e..6ccad4e461989f1ffb79fbe223a8aa5eabea63cb 100755 GIT binary patch delta 9442 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 delta 8973 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 diff --git a/bin/ikarus-numerics.c b/bin/ikarus-numerics.c index 03d3d7c..197bb96 100644 --- a/bin/ikarus-numerics.c +++ b/bin/ikarus-numerics.c @@ -1148,6 +1148,19 @@ copy_bits_shifting_right(unsigned int* src, unsigned int* dst, int n, int m){ dst[n-1] = carry; } +static void +copy_bits_shifting_left(unsigned int* src, unsigned int* dst, int n, int m){ + unsigned int carry = 0; + int i; + for(i=0; i> (32-m); + } + dst[n] = carry; +} + + @@ -1246,8 +1259,30 @@ ikrt_fixnum_shift_left(ikp x, ikp y, ikpcb* pcb){ ikp ikrt_bignum_shift_left(ikp x, ikp y, ikpcb* pcb){ - fprintf(stderr, "bignum_shift_left is not supported yet\n"); - exit(-1); + int m = unfix(y); + ikp fst = ref(x, -vector_tag); + int n = ((unsigned int) fst) >> bignum_length_shift; + int whole_limb_shift = m >> 5; /* FIXME: 5 are the bits in 32-bit num */ + int bit_shift = m & 31; + if(bit_shift == 0){ + int limb_count = n + whole_limb_shift; + ikp r = ik_alloc(pcb, align(disp_bignum_data + limb_count * wordsize)); + unsigned int* s = (unsigned int*)(r+disp_bignum_data); + bzero(s, whole_limb_shift*wordsize); + memcpy(s+whole_limb_shift, x+off_bignum_data, n*wordsize); + return normalize_bignum(limb_count, (unsigned int)fst & bignum_sign_mask, r); + } else { + int limb_count = n + whole_limb_shift + 1; + ikp r = ik_alloc(pcb, align(disp_bignum_data + limb_count * wordsize)); + unsigned int* s = (unsigned int*)(r+disp_bignum_data); + bzero(s, whole_limb_shift*wordsize); + copy_bits_shifting_left( + (unsigned int*)(x+off_bignum_data), + s+whole_limb_shift, + n, + bit_shift); + return normalize_bignum(limb_count, (unsigned int)fst & bignum_sign_mask, r); + } }