From 79ea9ec02c5918b885cf75e7f263902c03d32180 Mon Sep 17 00:00:00 2001 From: dzaima Date: Mon, 25 Mar 2024 15:32:33 +0200 Subject: [PATCH] ensure desired updating order between envCurr and its pointed-to data --- src/vm.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/vm.h b/src/vm.h index 989e4c4d..fdcbf02b 100644 --- a/src/vm.h +++ b/src/vm.h @@ -223,16 +223,19 @@ extern GLOBAL Env* envCurr; extern GLOBAL Env* envStart; extern GLOBAL Env* envEnd; extern GLOBAL u64 envPrevHeight; // envStart+prevEnvHeight gives envCurr+1 from before the error +#define PROFILER_FENCE __asm__ volatile("" ::: "memory") static inline void pushEnv(Scope* sc, u32* bc) { if (envCurr+1==envEnd) thrM("Stack overflow"); Env* e = envCurr+1; e->sc = sc; e->pos = ptr2u64(bc); + PROFILER_FENCE; envCurr = e; } static inline void popEnv() { assert(envCurr>=envStart); envCurr--; + PROFILER_FENCE; } FORCE_INLINE i32 argCount(u8 ty, bool imm) { return (imm?0:3) + ty + (ty>0); } FORCE_INLINE i32 blockGivenVars(Block* bl) { return argCount(bl->ty, bl->imm); }