struct {int min,max;} bigger_fixnums;
struct fixnum_struct *bigger_fixnum_table;
+#if !defined(IM_FIX_BASE) || defined(USE_SAFE_CDR)
+#define STATIC_BIGGER_FIXNUM_TABLE_BITS 10
+static struct fixnum_struct bigger_fixnum_table1[1<<(STATIC_BIGGER_FIXNUM_TABLE_BITS+1)];
+#endif
+
DEFUN_NEW("ALLOCATE-BIGGER-FIXNUM-RANGE",object,fSallocate_bigger_fixnum_range,SI,2,2,NONE,OI,IO,OO,OO,(fixnum min,fixnum max),"") {
int j;
if (min > max) FEerror("Need Min <= Max",0);
- bigger_fixnum_table=(void *)malloc(sizeof(struct fixnum_struct)*(max - min));
+
+#if !defined(IM_FIX_BASE) || defined(USE_SAFE_CDR)
+ if (min==-(1<<STATIC_BIGGER_FIXNUM_TABLE_BITS) && max==(1<<STATIC_BIGGER_FIXNUM_TABLE_BITS))
+ bigger_fixnum_table=bigger_fixnum_table1;
+ else
+#endif
+ bigger_fixnum_table=(void *)malloc(sizeof(struct fixnum_struct)*(max - min));
for (j=min ; j < max ; j=j+1) {
object x=(object)(bigger_fixnum_table+j-min);
{
#if !defined(IM_FIX_BASE) || defined(USE_SAFE_CDR)
- FFN(fSallocate_bigger_fixnum_range)(-1024,1023);
+ FFN(fSallocate_bigger_fixnum_range)(-1024,1024);
#endif
shortfloat_zero = alloc_object(t_shortfloat);