Преглед изворни кода

Fix incorrect memory overflow values + SIMD ifdefs

James Marsh пре 1 година
родитељ
комит
80e6c986f4
2 измењених фајлова са 14 додато и 5 уклоњено
  1. 2 2
      core/iwasm/interpreter/wasm_interp_fast.c
  2. 12 3
      core/iwasm/interpreter/wasm_loader.c

+ 2 - 2
core/iwasm/interpreter/wasm_interp_fast.c

@@ -5909,7 +5909,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
         addr = GET_OPERAND(uint32, I32, 0);            \
         frame_ip += 2;                                 \
         addr_ret = GET_OFFSET();                       \
-        CHECK_MEMORY_OVERFLOW(16);                     \
+        CHECK_MEMORY_OVERFLOW(4);                     \
                                                        \
         simde_v128_t simde_result = simde_func(maddr); \
                                                        \
@@ -5952,7 +5952,7 @@ wasm_interp_call_func_bytecode(WASMModuleInstance *module,
                         offset += base;
                         addr = GET_OPERAND(uint32, I32, 0);
 
-                        CHECK_MEMORY_OVERFLOW(32);
+                        CHECK_MEMORY_OVERFLOW(4);
                         STORE_V128(maddr, data);
                         break;
                     }

+ 12 - 3
core/iwasm/interpreter/wasm_loader.c

@@ -7300,8 +7300,10 @@ wasm_loader_find_block_addr(WASMExecEnv *exec_env, BlockAddr *block_addr_cache,
             case WASM_OP_SET_GLOBAL:
             case WASM_OP_GET_GLOBAL_64:
             case WASM_OP_SET_GLOBAL_64:
+#if WASM_ENABLE_SIMDE != 0
             case WASM_OP_GET_GLOBAL_128:
             case WASM_OP_SET_GLOBAL_128:
+#endif
             case WASM_OP_SET_GLOBAL_AUX_STACK:
                 skip_leb_uint32(p, p_end); /* local index */
                 break;
@@ -9090,6 +9092,7 @@ preserve_referenced_local(WASMLoaderContext *loader_ctx, uint8 opcode,
                           bool *preserved, char *error_buf,
                           uint32 error_buf_size)
 {
+
     uint32 i = 0;
     int16 preserved_offset = (int16)local_index;
 
@@ -9113,11 +9116,13 @@ preserve_referenced_local(WASMLoaderContext *loader_ctx, uint8 opcode,
                         loader_ctx->preserved_local_offset++;
                     emit_label(EXT_OP_COPY_STACK_TOP);
                 }
+#if WASM_ENABLE_SIMDE != 0
                 else if (local_type == VALUE_TYPE_V128) {
                     if (loader_ctx->p_code_compiled)
                         loader_ctx->preserved_local_offset += 4;
                     emit_label(EXT_OP_COPY_STACK_TOP_V128);
                 }
+#endif
                 else {
                     if (loader_ctx->p_code_compiled)
                         loader_ctx->preserved_local_offset += 2;
@@ -9790,11 +9795,12 @@ reserve_block_ret(WASMLoaderContext *loader_ctx, uint8 opcode,
             /* insert op_copy before else opcode */
             if (opcode == WASM_OP_ELSE)
                 skip_label();
-
+#if WASM_ENABLE_SIMDE != 0
             if (cell == 4) {
                 emit_label(EXT_OP_COPY_STACK_TOP_V128);
             }
-            else {
+#endif
+            if (cell <= 2) {
                 emit_label(cell == 1 ? EXT_OP_COPY_STACK_TOP
                                      : EXT_OP_COPY_STACK_TOP_I64);
             }
@@ -13115,10 +13121,12 @@ re_scan:
                         emit_label(EXT_OP_TEE_LOCAL_FAST);
                         emit_byte(loader_ctx, (uint8)local_offset);
                     }
+#if WASM_ENABLE_SIMDE != 0
                     else if (local_type == VALUE_TYPE_V128) {
                         emit_label(EXT_OP_TEE_LOCAL_FAST_V128);
                         emit_byte(loader_ctx, (uint8)local_offset);
                     }
+#endif
                     else {
                         emit_label(EXT_OP_TEE_LOCAL_FAST_I64);
                         emit_byte(loader_ctx, (uint8)local_offset);
@@ -13213,11 +13221,12 @@ re_scan:
                     skip_label();
                     emit_label(WASM_OP_GET_GLOBAL_64);
                 }
-
+#if WASM_ENABLE_SIMDE != 0
                 if (global_type == VALUE_TYPE_V128) {
                     skip_label();
                     emit_label(WASM_OP_GET_GLOBAL_128);
                 }
+#endif
 #endif /* end of WASM_ENABLE_SIMDE */
                 emit_uint32(loader_ctx, global_idx);
                 PUSH_OFFSET_TYPE(global_type);