3 INLINE BIGNUM* fixnum_to_bignum(CELL n)
5 return bignum((BIGNUM_2)untag_fixnum_fast(n));
8 INLINE FIXNUM bignum_to_fixnum(CELL tagged)
10 return (FIXNUM)(untag_bignum(tagged)->n);
13 #define BINARY_OP(OP) \
14 void primitive_##OP(void) \
16 CELL x = dpop(), y = env.dt; \
28 switch(object_type(y)) \
31 OP##_bignum((CELL)fixnum_to_bignum(x),y); \
34 type_error(FIXNUM_TYPE,y); \
39 type_error(FIXNUM_TYPE,y); \
47 switch(object_type(x)) \
55 OP##_bignum(x,(CELL)fixnum_to_bignum(y)); \
59 switch(object_type(y)) \
65 type_error(BIGNUM_TYPE,y); \
70 type_error(BIGNUM_TYPE,y); \
77 type_error(FIXNUM_TYPE,x); \
85 type_error(FIXNUM_TYPE,x); \
90 FIXNUM to_fixnum(CELL tagged);
92 void primitive_add(void);
93 void primitive_subtract(void);
94 void primitive_multiply(void);
95 void primitive_divmod(void);
96 void primitive_less(void);
97 void primitive_lesseq(void);
98 void primitive_greater(void);
99 void primitive_greatereq(void);
100 void primitive_mod(void);
101 void primitive_and(void);
102 void primitive_or(void);
103 void primitive_xor(void);
104 void primitive_shiftleft(void);
105 void primitive_shiftright(void);