From c8337c44f88fd14a8280b95e48bf03fc18292ce1 Mon Sep 17 00:00:00 2001 From: Vova Date: Mon, 1 Nov 2021 13:19:59 +0200 Subject: [PATCH] Align opcodes --- source/m3_config_platforms.h | 14 ++++++-------- source/m3_exec_defs.h | 7 ++++++- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/source/m3_config_platforms.h b/source/m3_config_platforms.h index b3b8e8b..0c34591 100644 --- a/source/m3_config_platforms.h +++ b/source/m3_config_platforms.h @@ -110,32 +110,30 @@ typedef int8_t i8; # if defined (M3_COMPILER_MSVC) # define vectorcall // For MSVC, better not to specify any call convention +# elif defined(__x86_64__) +# define vectorcall __attribute__((aligned(32))) # elif defined(__MINGW32__) # define vectorcall # elif defined(WIN32) # define vectorcall __vectorcall # elif defined (ESP8266) # include -# define op_section //ICACHE_FLASH_ATTR +# define vectorcall //ICACHE_FLASH_ATTR # elif defined (ESP32) # if defined(M3_IN_IRAM) // the interpreter is in IRAM, attribute not needed -# define op_section +# define vectorcall # else # include "esp_system.h" -# define op_section IRAM_ATTR +# define vectorcall IRAM_ATTR # endif # elif defined (FOMU) -# define op_section __attribute__((section(".ramtext"))) +# define vectorcall __attribute__((section(".ramtext"))) # endif #ifndef vectorcall #define vectorcall #endif -#ifndef op_section -#define op_section -#endif - /* * Device-specific defaults diff --git a/source/m3_exec_defs.h b/source/m3_exec_defs.h index 991ce59..c156ecc 100644 --- a/source/m3_exec_defs.h +++ b/source/m3_exec_defs.h @@ -45,7 +45,7 @@ d_m3BeginExternC typedef m3ret_t (vectorcall * IM3Operation) (d_m3OpSig); #define d_m3RetSig static inline m3ret_t vectorcall -#define d_m3Op(NAME) M3_NO_UBSAN op_section d_m3RetSig op_##NAME (d_m3OpSig) +#define d_m3Op(NAME) M3_NO_UBSAN d_m3RetSig op_##NAME (d_m3OpSig) #define nextOpImpl() ((IM3Operation)(* _pc))(_pc + 1, d_m3OpArgs) #define jumpOpImpl(PC) ((IM3Operation)(* PC))( PC + 1, d_m3OpArgs) @@ -53,6 +53,11 @@ typedef m3ret_t (vectorcall * IM3Operation) (d_m3OpSig); #define nextOpDirect() return nextOpImpl() #define jumpOpDirect(PC) return jumpOpImpl((pc_t)(PC)) +d_m3RetSig RunCode (d_m3OpSig) +{ + nextOpDirect(); +} + d_m3EndExternC #endif // m3_exec_defs_h