Support table64 extension in classic-interp and AOT running modes (#3811)
Add table64 extension(in Memory64 proposal) support in classic-interp and AOT running modes, currently still use uint32 to represent table's initial and maximum size to keep AOT ABI unchanged.
This commit is contained in:
@ -19,6 +19,37 @@ wasm_loader_set_error_buf(char *error_buf, uint32 error_buf_size,
|
||||
}
|
||||
}
|
||||
|
||||
#if WASM_ENABLE_MEMORY64 != 0
|
||||
bool
|
||||
check_memory64_flags_consistency(WASMModule *module, char *error_buf,
|
||||
uint32 error_buf_size, bool is_aot)
|
||||
{
|
||||
uint32 i;
|
||||
bool wasm64_flag, all_wasm64 = true, none_wasm64 = true;
|
||||
|
||||
for (i = 0; i < module->import_memory_count; ++i) {
|
||||
wasm64_flag =
|
||||
module->import_memories[i].u.memory.mem_type.flags & MEMORY64_FLAG;
|
||||
all_wasm64 &= wasm64_flag;
|
||||
none_wasm64 &= !wasm64_flag;
|
||||
}
|
||||
|
||||
for (i = 0; i < module->memory_count; ++i) {
|
||||
wasm64_flag = module->memories[i].flags & MEMORY64_FLAG;
|
||||
all_wasm64 &= wasm64_flag;
|
||||
none_wasm64 &= !wasm64_flag;
|
||||
}
|
||||
|
||||
if (!(all_wasm64 || none_wasm64)) {
|
||||
wasm_loader_set_error_buf(
|
||||
error_buf, error_buf_size,
|
||||
"inconsistent limits wasm64 flags for memory sections", is_aot);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool
|
||||
wasm_memory_check_flags(const uint8 mem_flag, char *error_buf,
|
||||
uint32 error_buf_size, bool is_aot)
|
||||
@ -60,6 +91,37 @@ wasm_memory_check_flags(const uint8 mem_flag, char *error_buf,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
wasm_table_check_flags(const uint8 table_flag, char *error_buf,
|
||||
uint32 error_buf_size, bool is_aot)
|
||||
{
|
||||
/* Check whether certain features indicated by mem_flag are enabled in
|
||||
* runtime */
|
||||
if (table_flag > MAX_TABLE_SIZE_FLAG) {
|
||||
if (table_flag & SHARED_TABLE_FLAG) {
|
||||
wasm_loader_set_error_buf(error_buf, error_buf_size,
|
||||
"tables cannot be shared", is_aot);
|
||||
}
|
||||
#if WASM_ENABLE_MEMORY64 == 0
|
||||
if (table_flag & TABLE64_FLAG) {
|
||||
wasm_loader_set_error_buf(error_buf, error_buf_size,
|
||||
"invalid limits flags(table64 flag was "
|
||||
"found, please enable memory64)",
|
||||
is_aot);
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (table_flag > MAX_TABLE_SIZE_FLAG + TABLE64_FLAG) {
|
||||
wasm_loader_set_error_buf(error_buf, error_buf_size,
|
||||
"invalid limits flags", is_aot);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* compare with a bigger type set in `wasm_value_type_size_internal()`,
|
||||
* this function will only cover global value type, function's param
|
||||
|
||||
Reference in New Issue
Block a user