From 38d6ebeaf97b4349ffdfad5d2de069247875044a Mon Sep 17 00:00:00 2001 From: Matt Birkholz Date: Sat, 18 Jul 2015 18:20:31 -0700 Subject: [PATCH] Make the svm1 interpreter's state thread-local. --- src/microcode/svm1-interp.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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) -- 2.25.1