Sfoglia il codice sorgente

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
liang.he 1 mese fa
parent
commit
071e2aaed5

+ 0 - 2
core/iwasm/interpreter/wasm_interp_classic.c

@@ -6580,12 +6580,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)

+ 1 - 8
core/iwasm/interpreter/wasm_opcode.h

@@ -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()          \
     };

BIN
tests/regression/ba-issues/issues/issue-980001/v128.wasm


+ 13 - 0
tests/regression/ba-issues/issues/issue-980001/v128.wat

@@ -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)))

+ 16 - 0
tests/regression/ba-issues/running_config.json

@@ -1802,6 +1802,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"
+            }
         }
     ]
 }