2004-08-29 03:20:19 -04:00
|
|
|
CELL bignum_zero;
|
|
|
|
CELL bignum_pos_one;
|
|
|
|
CELL bignum_neg_one;
|
|
|
|
|
2004-08-25 02:00:52 -04:00
|
|
|
INLINE ARRAY* untag_bignum(CELL tagged)
|
2004-07-27 22:52:35 -04:00
|
|
|
{
|
|
|
|
type_check(BIGNUM_TYPE,tagged);
|
2004-08-25 02:00:52 -04:00
|
|
|
return (ARRAY*)UNTAG(tagged);
|
2004-07-27 22:52:35 -04:00
|
|
|
}
|
|
|
|
|
2004-08-25 02:00:52 -04:00
|
|
|
ARRAY* to_bignum(CELL tagged);
|
2004-08-05 15:18:31 -04:00
|
|
|
void primitive_to_bignum(void);
|
2004-08-25 02:00:52 -04:00
|
|
|
CELL number_eq_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL add_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL subtract_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL multiply_bignum(ARRAY* x, ARRAY* y);
|
2004-08-25 20:51:19 -04:00
|
|
|
CELL gcd_bignum(ARRAY* x, ARRAY* y);
|
2004-08-25 02:00:52 -04:00
|
|
|
CELL divide_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL divint_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL divfloat_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL divmod_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL mod_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL and_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL or_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL xor_bignum(ARRAY* x, ARRAY* y);
|
2004-08-26 19:37:22 -04:00
|
|
|
CELL shift_bignum(ARRAY* x, FIXNUM y);
|
2004-08-25 02:00:52 -04:00
|
|
|
CELL less_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL lesseq_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL greater_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL greatereq_bignum(ARRAY* x, ARRAY* y);
|
|
|
|
CELL not_bignum(ARRAY* x);
|
|
|
|
void copy_bignum_constants(void);
|