@@ -6391,14 +6391,8 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
63916391 break ;
63926392 }
63936393
6394- #define SIMD_LOAD_LANE_OP ( register , width ) \
6394+ #define SIMD_LOAD_LANE_COMMON ( vec , register , lane , width ) \
63956395 do { \
6396- uint32 offset, addr; \
6397- offset = read_uint32(frame_ip); \
6398- V128 vec = POP_V128(); \
6399- int32 base = POP_I32(); \
6400- offset += base; \
6401- int lane = *frame_ip++; \
64026396 addr = GET_OPERAND(uint32, I32, 0); \
64036397 addr_ret = GET_OFFSET(); \
64046398 CHECK_MEMORY_OVERFLOW(width / 8); \
@@ -6411,6 +6405,17 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
64116405 PUT_V128_TO_ADDR(frame_lp + addr_ret, vec); \
64126406 } while (0)
64136407
6408+ #define SIMD_LOAD_LANE_OP (register , width ) \
6409+ do { \
6410+ uint32 offset, addr; \
6411+ offset = read_uint32(frame_ip); \
6412+ V128 vec = POP_V128(); \
6413+ int32 base = POP_I32(); \
6414+ offset += base; \
6415+ int lane = *frame_ip++; \
6416+ SIMD_LOAD_LANE_COMMON(vec, register, lane, width); \
6417+ } while (0)
6418+
64146419 case SIMD_v128_load8_lane :
64156420 {
64166421 SIMD_LOAD_LANE_OP (i8x16 , 8 );
@@ -6435,10 +6440,29 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
64356440 case SIMD_v128_store16_lane :
64366441 case SIMD_v128_store32_lane :
64376442 case SIMD_v128_store64_lane :
6443+ {
6444+ wasm_set_exception (module , "unsupported SIMD opcode" );
6445+ break ;
6446+ }
6447+ #define SIMD_LOAD_ZERO_OP (register , width ) \
6448+ do { \
6449+ uint32 offset, addr; \
6450+ offset = read_uint32(frame_ip); \
6451+ int32 base = POP_I32(); \
6452+ offset += base; \
6453+ int32 lane = 0; \
6454+ V128 vec = { 0 }; \
6455+ SIMD_LOAD_LANE_COMMON(vec, register, lane, width); \
6456+ } while (0)
6457+
64386458 case SIMD_v128_load32_zero :
6459+ {
6460+ SIMD_LOAD_ZERO_OP (i32x4 , 32 );
6461+ break ;
6462+ }
64396463 case SIMD_v128_load64_zero :
64406464 {
6441- wasm_set_exception ( module , "unsupported SIMD opcode" );
6465+ SIMD_LOAD_ZERO_OP ( i64x2 , 64 );
64426466 break ;
64436467 }
64446468
0 commit comments