Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow to set segue flags for wasm-c-api JIT #2926

Merged
merged 6 commits into from
Jan 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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);
wenyongh marked this conversation as resolved.
Show resolved Hide resolved

// Engine

WASM_DECLARE_OWN(engine)
Expand Down