diff --git a/core/iwasm/common/wasm_c_api.c b/core/iwasm/common/wasm_c_api.c index 594d1ed962..ff88fae50b 100644 --- a/core/iwasm/common/wasm_c_api.c +++ b/core/iwasm/common/wasm_c_api.c @@ -299,6 +299,7 @@ wasm_config_new(void) memset(config, 0, sizeof(wasm_config_t)); config->mem_alloc_type = Alloc_With_System_Allocator; + return config; } @@ -334,6 +335,16 @@ wasm_config_set_linux_perf_opt(wasm_config_t *config, bool enable) return config; } +wasm_config_t * +wasm_config_set_segue_flags(wasm_config_t *config, uint32 segue_flags) +{ + if (!config) + return NULL; + + config->segue_flags = segue_flags; + return config; +} + static void wasm_engine_delete_internal(wasm_engine_t *engine) { @@ -380,8 +391,8 @@ wasm_engine_new_internal(wasm_config_t *config) init_args.mem_alloc_type = config->mem_alloc_type; memcpy(&init_args.mem_alloc_option, &config->mem_alloc_option, sizeof(MemAllocOption)); - init_args.enable_linux_perf = config->enable_linux_perf; + init_args.segue_flags = config->segue_flags; if (!wasm_runtime_full_init(&init_args)) { LOG_DEBUG("wasm_runtime_full_init failed"); diff --git a/core/iwasm/common/wasm_runtime_common.h b/core/iwasm/common/wasm_runtime_common.h index 64162a3f89..b113ec0d7f 100644 --- a/core/iwasm/common/wasm_runtime_common.h +++ b/core/iwasm/common/wasm_runtime_common.h @@ -438,7 +438,7 @@ typedef struct wasm_frame_t { const char *func_name_wp; } WASMCApiFrame; -#ifdef WASM_ENABLE_JIT +#if WASM_ENABLE_JIT != 0 typedef struct LLVMJITOptions { uint32 opt_level; uint32 size_level; diff --git a/core/iwasm/include/wasm_c_api.h b/core/iwasm/include/wasm_c_api.h index 2bd17bf368..d13a712c45 100644 --- a/core/iwasm/include/wasm_c_api.h +++ b/core/iwasm/include/wasm_c_api.h @@ -181,6 +181,7 @@ typedef union MemAllocOption { struct wasm_config_t { mem_alloc_type_t mem_alloc_type; MemAllocOption mem_alloc_option; + uint32_t segue_flags; bool enable_linux_perf; /*TODO: wasi args*/ }; @@ -200,6 +201,17 @@ wasm_config_set_mem_alloc_opt(wasm_config_t *, mem_alloc_type_t, MemAllocOption WASM_API_EXTERN own wasm_config_t* wasm_config_set_linux_perf_opt(wasm_config_t *, bool); +/** + * Enable using GS register as the base address of linear memory in linux x86_64, + * which may speedup the linear memory access for LLVM AOT/JIT: + * bit0 to bit4 denotes i32.load, i64.load, f32.load, f64.load, v128.load + * bit8 to bit12 denotes i32.store, i64.store, f32.store, f64.store, v128.store + * For example, 0x01 enables i32.load, 0x0100 enables i32.store. + * To enable all load/store operations, use 0x1F1F + */ +WASM_API_EXTERN wasm_config_t* +wasm_config_set_segue_flags(wasm_config_t *config, uint32_t segue_flags); + // Engine WASM_DECLARE_OWN(engine)