Merge commit from fork

* fix: remove SIMD prefix handling from interpreter and update opcode definitions

* test: add case for classic interpreter handling of unsupported SIMD opcodes
This commit is contained in:
liang.he 2025-11-24 14:37:46 +08:00 committed by GitHub
parent ea7ac262a3
commit de1d635efb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 30 additions and 10 deletions

View File

@ -6572,12 +6572,10 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
HANDLE_OP(WASM_OP_CATCH_ALL)
HANDLE_OP(EXT_OP_TRY)
#endif
#if WASM_ENABLE_JIT != 0 && WASM_ENABLE_SIMD != 0
/* SIMD isn't supported by interpreter, but when JIT is
enabled, `iwasm --interp <wasm_file>` may be run to
trigger the SIMD opcode in interpreter */
HANDLE_OP(WASM_OP_SIMD_PREFIX)
#endif
HANDLE_OP(WASM_OP_UNUSED_0x16)
HANDLE_OP(WASM_OP_UNUSED_0x17)
HANDLE_OP(WASM_OP_UNUSED_0x27)

View File

@ -790,13 +790,6 @@ typedef enum WASMAtomicEXTOpcode {
#endif
#define SET_GOTO_TABLE_ELEM(opcode) [opcode] = HANDLE_OPCODE(opcode)
#if WASM_ENABLE_SIMDE != 0
#define SET_GOTO_TABLE_SIMD_PREFIX_ELEM() \
SET_GOTO_TABLE_ELEM(WASM_OP_SIMD_PREFIX),
#else
#define SET_GOTO_TABLE_SIMD_PREFIX_ELEM()
#endif
#if WASM_ENABLE_SIMDE != 0
#define DEF_EXT_V128_HANDLE() \
SET_GOTO_TABLE_ELEM(EXT_OP_SET_LOCAL_FAST_V128), /* 0xdd */ \
@ -1038,7 +1031,7 @@ typedef enum WASMAtomicEXTOpcode {
HANDLE_OPCODE(EXT_OP_TRY), /* 0xdb */ \
SET_GOTO_TABLE_ELEM(WASM_OP_GC_PREFIX), /* 0xfb */ \
SET_GOTO_TABLE_ELEM(WASM_OP_MISC_PREFIX), /* 0xfc */ \
SET_GOTO_TABLE_SIMD_PREFIX_ELEM() /* 0xfd */ \
SET_GOTO_TABLE_ELEM(WASM_OP_SIMD_PREFIX), /* 0xfd */ \
SET_GOTO_TABLE_ELEM(WASM_OP_ATOMIC_PREFIX), /* 0xfe */ \
DEF_DEBUG_BREAK_HANDLE() DEF_EXT_V128_HANDLE() \
};

View File

@ -0,0 +1,13 @@
(module
(type (;0;) (func))
(func (;0;) (type 0)
i32.const 0
i32.const 16
v128.load
i32.const 32
v128.load
i64x2.eq
v128.store)
(memory (;0;) 1 1)
(export "mem" (memory 0))
(export "main" (func 0)))

View File

@ -1770,6 +1770,22 @@
"stdout content": "Exception: unreachable",
"description": "no 'frame offset overflow'"
}
},
{
"deprecated": false,
"ids": [
980001
],
"runtime": "iwasm-llvm-jit",
"file": "v128.wasm",
"mode": "classic-interp",
"options": "-f main",
"argument": "",
"expected return": {
"ret code": 1,
"stdout content": "Exception: unsupported opcode",
"description": "classic-interp will exit gracefully when meeting simd opcodes"
}
}
]
}