2004-07-28 19:02:24 -04:00
|
|
|
#define FIXNUM_MAX (LONG_MAX >> TAG_BITS)
|
|
|
|
#define FIXNUM_MIN (LONG_MIN >> TAG_BITS)
|
|
|
|
|
|
|
|
#define FIXNUM long int /* unboxed */
|
2004-07-27 22:52:35 -04:00
|
|
|
|
|
|
|
INLINE FIXNUM untag_fixnum_fast(CELL tagged)
|
|
|
|
{
|
|
|
|
return ((FIXNUM)tagged) >> TAG_BITS;
|
|
|
|
}
|
2004-07-16 02:26:21 -04:00
|
|
|
|
|
|
|
INLINE CELL tag_fixnum(FIXNUM untagged)
|
|
|
|
{
|
|
|
|
return RETAG(untagged << TAG_BITS,FIXNUM_TYPE);
|
|
|
|
}
|
|
|
|
|
2004-08-05 15:18:31 -04:00
|
|
|
FIXNUM to_fixnum(CELL tagged);
|
|
|
|
void primitive_to_fixnum(void);
|
|
|
|
|
2004-08-27 02:09:24 -04:00
|
|
|
CELL number_eq_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL add_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL subtract_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL multiply_fixnum(FIXNUM x, FIXNUM y);
|
2004-08-05 15:18:31 -04:00
|
|
|
FIXNUM gcd_fixnum(FIXNUM x, FIXNUM y);
|
2004-08-27 02:09:24 -04:00
|
|
|
CELL divide_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL divint_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL divfloat_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL divmod_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL mod_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL and_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL or_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL xor_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL shift_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL less_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL lesseq_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL greater_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL greatereq_fixnum(FIXNUM x, FIXNUM y);
|
|
|
|
CELL not_fixnum(FIXNUM n);
|