2004-08-29 03:20:19 -04:00
|
|
|
CELL bignum_zero;
|
|
|
|
CELL bignum_pos_one;
|
|
|
|
CELL bignum_neg_one;
|
|
|
|
|
2004-12-18 20:24:46 -05:00
|
|
|
INLINE F_ARRAY* untag_bignum_fast(CELL tagged)
|
|
|
|
{
|
|
|
|
return (F_ARRAY*)UNTAG(tagged);
|
|
|
|
}
|
|
|
|
|
2005-01-16 17:58:28 -05:00
|
|
|
INLINE CELL tag_bignum(F_ARRAY* bignum)
|
|
|
|
{
|
|
|
|
return RETAG(bignum,BIGNUM_TYPE);
|
|
|
|
}
|
|
|
|
|
2004-12-22 22:16:46 -05:00
|
|
|
CELL to_cell(CELL x);
|
2004-12-10 21:46:42 -05:00
|
|
|
F_ARRAY* to_bignum(CELL tagged);
|
2004-08-05 15:18:31 -04:00
|
|
|
void primitive_to_bignum(void);
|
2004-09-19 00:33:40 -04:00
|
|
|
void primitive_bignum_eq(void);
|
|
|
|
void primitive_bignum_add(void);
|
|
|
|
void primitive_bignum_subtract(void);
|
|
|
|
void primitive_bignum_multiply(void);
|
|
|
|
void primitive_bignum_divint(void);
|
|
|
|
void primitive_bignum_divfloat(void);
|
|
|
|
void primitive_bignum_divmod(void);
|
|
|
|
void primitive_bignum_mod(void);
|
|
|
|
void primitive_bignum_and(void);
|
|
|
|
void primitive_bignum_or(void);
|
|
|
|
void primitive_bignum_xor(void);
|
|
|
|
void primitive_bignum_shift(void);
|
|
|
|
void primitive_bignum_less(void);
|
|
|
|
void primitive_bignum_lesseq(void);
|
|
|
|
void primitive_bignum_greater(void);
|
|
|
|
void primitive_bignum_greatereq(void);
|
|
|
|
void primitive_bignum_not(void);
|
2004-08-25 02:00:52 -04:00
|
|
|
void copy_bignum_constants(void);
|
2004-09-19 17:39:28 -04:00
|
|
|
|
2004-12-10 21:46:42 -05:00
|
|
|
INLINE CELL tag_integer(F_FIXNUM x)
|
2004-09-19 17:39:28 -04:00
|
|
|
{
|
|
|
|
if(x < FIXNUM_MIN || x > FIXNUM_MAX)
|
2005-01-16 17:58:28 -05:00
|
|
|
return tag_bignum(s48_long_to_bignum(x));
|
2004-09-19 17:39:28 -04:00
|
|
|
else
|
|
|
|
return tag_fixnum(x);
|
|
|
|
}
|
|
|
|
|
|
|
|
INLINE CELL tag_cell(CELL x)
|
|
|
|
{
|
|
|
|
if(x > FIXNUM_MAX)
|
2005-01-16 17:58:28 -05:00
|
|
|
return tag_bignum(s48_ulong_to_bignum(x));
|
2004-09-19 17:39:28 -04:00
|
|
|
else
|
|
|
|
return tag_fixnum(x);
|
|
|
|
}
|
2005-03-28 23:45:13 -05:00
|
|
|
|
|
|
|
/* FFI calls this */
|
2005-04-03 17:38:57 -04:00
|
|
|
DLLEXPORT void box_signed_cell(F_FIXNUM integer);
|
2005-03-28 23:45:13 -05:00
|
|
|
DLLEXPORT F_FIXNUM unbox_signed_cell(void);
|
|
|
|
|
|
|
|
DLLEXPORT void box_unsigned_cell(CELL cell);
|
|
|
|
DLLEXPORT F_FIXNUM unbox_unsigned_cell(void);
|
|
|
|
|
|
|
|
DLLEXPORT void box_signed_4(s32 n);
|
|
|
|
DLLEXPORT s32 unbox_signed_4(void);
|
|
|
|
|
|
|
|
DLLEXPORT void box_unsigned_4(u32 n);
|
|
|
|
DLLEXPORT u32 unbox_unsigned_4(void);
|
|
|
|
|
|
|
|
DLLEXPORT void box_signed_8(s64 n);
|
|
|
|
DLLEXPORT s64 unbox_signed_8(void);
|
|
|
|
|
|
|
|
DLLEXPORT void box_unsigned_8(u64 n);
|
|
|
|
DLLEXPORT u64 unbox_unsigned_8(void);
|