From: Matt Birkholz Date: Sun, 19 Jul 2015 01:20:31 +0000 (-0700) Subject: Make the svm1 interpreter's state thread-local. X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=38d6ebeaf97b4349ffdfad5d2de069247875044a;p=mit-scheme.git Make the svm1 interpreter's state thread-local. --- diff --git a/src/microcode/svm1-interp.c b/src/microcode/svm1-interp.c index 454c87c08..1d6b3d913 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)