From: Matt Birkholz Date: Tue, 25 Nov 2014 15:50:37 +0000 (-0700) Subject: smp: unshare: svm1 interpreter's state X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=0deb4a7a4fe55dec96948a91b1c1051b8ce76c76;p=mit-scheme.git smp: unshare: svm1 interpreter's state --- diff --git a/src/microcode/svm1-interp.c b/src/microcode/svm1-interp.c index 0f42ad3b2..7a865ff76 100644 --- a/src/microcode/svm1-interp.c +++ b/src/microcode/svm1-interp.c @@ -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)