Implement memory64 for classic interpreter (#3266)
Adding a new cmake flag (cache variable) `WAMR_BUILD_MEMORY64` to enable the memory64 feature, it can only be enabled on the 64-bit platform/target and can only use software boundary check. And when it is enabled, it can support both i32 and i64 linear memory types. The main modifications are: - wasm loader & mini-loader: loading and bytecode validating process - wasm runtime: memory instantiating process - classic-interpreter: wasm code executing process - Support memory64 memory in related runtime APIs - Modify main function type check when it's memory64 wasm file - Modify `wasm_runtime_invoke_native` and `wasm_runtime_invoke_native_raw` to handle registered native function pointer argument when memory64 is enabled - memory64 classic-interpreter spec test in `test_wamr.sh` and in CI Currently, it supports memory64 memory wasm file that uses core spec (including bulk memory proposal) opcodes and threads opcodes. ps. https://github.com/bytecodealliance/wasm-micro-runtime/issues/3091 https://github.com/bytecodealliance/wasm-micro-runtime/pull/3240 https://github.com/bytecodealliance/wasm-micro-runtime/pull/3260
This commit is contained in:
@ -90,11 +90,22 @@ extern "C" {
|
||||
*/
|
||||
#define VALUE_TYPE_GC_REF 0x43
|
||||
|
||||
#define MAX_PAGE_COUNT_FLAG 0x01
|
||||
#define SHARED_MEMORY_FLAG 0x02
|
||||
#define MEMORY64_FLAG 0x04
|
||||
|
||||
#define DEFAULT_NUM_BYTES_PER_PAGE 65536
|
||||
#define DEFAULT_MAX_PAGES 65536
|
||||
#define DEFAULT_MEM64_MAX_PAGES UINT32_MAX
|
||||
|
||||
/* Max size of linear memory */
|
||||
#define MAX_LINEAR_MEMORY_SIZE (4 * (uint64)BH_GB)
|
||||
/* Roughly 274 TB */
|
||||
#define MAX_LINEAR_MEM64_MEMORY_SIZE \
|
||||
(DEFAULT_MEM64_MAX_PAGES * (uint64)64 * (uint64)BH_KB)
|
||||
/* Macro to check memory flag and return appropriate memory size */
|
||||
#define GET_MAX_LINEAR_MEMORY_SIZE(is_memory64) \
|
||||
(is_memory64 ? MAX_LINEAR_MEM64_MEMORY_SIZE : MAX_LINEAR_MEMORY_SIZE)
|
||||
|
||||
#if WASM_ENABLE_GC == 0
|
||||
typedef uintptr_t table_elem_type_t;
|
||||
@ -484,6 +495,12 @@ typedef struct WASMTable {
|
||||
#endif
|
||||
} WASMTable;
|
||||
|
||||
#if WASM_ENABLE_MEMORY64 != 0
|
||||
typedef uint64 mem_offset_t;
|
||||
#else
|
||||
typedef uint32 mem_offset_t;
|
||||
#endif
|
||||
|
||||
typedef struct WASMMemory {
|
||||
uint32 flags;
|
||||
uint32 num_bytes_per_page;
|
||||
|
||||
Reference in New Issue
Block a user