svm: Fix COMPILER_TEMP_SIZE to 2.
authorMatt Birkholz <matt@birkholz.chandler.az.us>
Thu, 8 Mar 2012 03:40:02 +0000 (20:40 -0700)
committerMatt Birkholz <matt@birkholz.chandler.az.us>
Thu, 8 Mar 2012 04:47:26 +0000 (21:47 -0700)
On x86-64 sizeof(double)/sizeof(SCHEME_OBJECT) is 1, but
svm/machine.scm expects it to be 2 (as on i386).

src/microcode/cmpintmd/svm1.h
src/microcode/svm1-interp.c

index 332e754a2aa63a8fe313c3f18f40f9129839d059..656980580bcaef4d7671452d150aca056a08ec1d 100644 (file)
@@ -32,8 +32,10 @@ USA.
 #define ASM_RESET_HOOK initialize_svm1
 
 #define COMPILER_REGBLOCK_N_TEMPS 256
-#define COMPILER_TEMP_SIZE ((sizeof (double)) / (sizeof (SCHEME_OBJECT)))
-#define COMPILER_REGBLOCK_N_FIXED REGBLOCK_MINIMUM_LENGTH
+#define COMPILER_REGBLOCK_N_FIXED 14
+#define COMPILER_TEMP_SIZE 2
+/* COMPILER_TEMP_SIZE is NOT ((sizeof (double)) / (sizeof (SCHEME_OBJECT))).
+   It must not vary e.g. from 1 on x86-64 to 2 on i386. */
 
 typedef byte_t insn_t;
 
index 4df83ea41e0feb98dfcdd7ba8962826a3524a17c..72a236c8c07f513119d59f89a191742f4487691b 100644 (file)
@@ -182,9 +182,7 @@ initialize_svm1 (void)
     FREG_SET (i, 0.0);
   WREG_SET (SVM1_REG_INTERPRETER_REGISTER_BLOCK, ((word_t)Registers));
 
-  /* These are hard-coded into compiler/machines/svm/machine.scm. */
-  assert (COMPILER_TEMP_SIZE == 2);
-  assert (COMPILER_REGBLOCK_N_FIXED == 14);
+  assert (((sizeof (double)) / (sizeof (SCHEME_OBJECT))) <= COMPILER_TEMP_SIZE);
 }
 
 #define IMPORT_REGS() do                                               \