Skip to content

Commit

Permalink
Allow to set segue flags for wasm-c-api JIT (bytecodealliance#2926)
Browse files Browse the repository at this point in the history
Add an API to set segue flags for wasm-c-api LLVM JIT mode:
```C
wasm_config_t *
wasm_config_set_segue_flags(wasm_config_t *config, uint32 segue_flags);
```
  • Loading branch information
wenyongh authored Jan 2, 2024
1 parent 8da75c7 commit a8e8507
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 2 deletions.
13 changes: 12 additions & 1 deletion core/iwasm/common/wasm_c_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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)
{
Expand Down Expand Up @@ -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");
Expand Down
2 changes: 1 addition & 1 deletion core/iwasm/common/wasm_runtime_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
12 changes: 12 additions & 0 deletions core/iwasm/include/wasm_c_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -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*/
};
Expand All @@ -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)
Expand Down

0 comments on commit a8e8507

Please sign in to comment.