smp: unshare: svm1 interpreter's state
authorMatt Birkholz <puck@birchwood-abbey.net>
Tue, 25 Nov 2014 15:50:37 +0000 (08:50 -0700)
committerMatt Birkholz <puck@birchwood-abbey.net>
Sun, 21 Dec 2014 19:19:09 +0000 (12:19 -0700)
src/microcode/svm1-interp.c

index 0f42ad3b2234e4090ad57288799c36858fdbe57a..7a865ff766f274548cf4af9298d70897ff62344c 100644 (file)
@@ -65,8 +65,8 @@ typedef SCHEME_OBJECT word_t; /* convenience abbreviation */
 #  define FLOAT_REGISTER_P(b) true
 #endif
 
-static word_t word_registers [N_WORD_REGISTERS];
-static double float_registers [N_FLOAT_REGISTERS];
+static __thread word_t word_registers [N_WORD_REGISTERS];
+static __thread double float_registers [N_FLOAT_REGISTERS];
 
 #define SBYTE (sizeof (byte_t))
 #define SWORD (sizeof (word_t))
@@ -116,7 +116,7 @@ static inst_defn_t * inst_defns [256];
   return (addr);                                                       \
 } while (0)
 
-static long svm1_result;
+static __thread long svm1_result;
 
 #define EXIT_VM(code) do                                               \
 {                                                                      \
@@ -215,8 +215,8 @@ initialize_svm1 (void)
 /* Only true when the virtual machine is running, e.g. while Free is
    cached in word_registers[].  In a signal handler, the virtual
    instruction that trapped is at instruction_pointer. */
-static bool running_p = false;
-static insn_t * instruction_pointer;
+static __thread bool running_p = false;
+static __thread insn_t * instruction_pointer;
 
 long
 C_to_interface (void * address)