|
|
@@ -39,9 +39,9 @@ typedef float64 CellType_F64;
|
|
|
goto out_of_bounds; \
|
|
|
} while (0)
|
|
|
|
|
|
-#define CHECK_ATOMIC_MEMORY_ACCESS() do { \
|
|
|
- if (((uintptr_t)maddr & ((1 << align) - 1)) != 0) \
|
|
|
- goto unaligned_atomic; \
|
|
|
+#define CHECK_ATOMIC_MEMORY_ACCESS() do { \
|
|
|
+ if (((uintptr_t)maddr & (((uintptr_t)1 << align) - 1)) != 0)\
|
|
|
+ goto unaligned_atomic; \
|
|
|
} while (0)
|
|
|
|
|
|
static inline uint32
|
|
|
@@ -189,7 +189,7 @@ read_leb(const uint8 *buf, uint32 *p_offset, uint32 maxbits, bool sign)
|
|
|
}
|
|
|
if (sign && (shift < maxbits) && (byte & 0x40)) {
|
|
|
/* Sign extend */
|
|
|
- result |= - ((uint64)1 << shift);
|
|
|
+ result |= (~((uint64)0)) << shift;
|
|
|
}
|
|
|
*p_offset = offset;
|
|
|
return result;
|
|
|
@@ -2060,31 +2060,19 @@ label_pop_csp_n:
|
|
|
|
|
|
HANDLE_OP (WASM_OP_I32_SHL):
|
|
|
{
|
|
|
-#if defined(BUILD_TARGET_X86_64) || defined(BUILD_TARGET_X86_32)
|
|
|
- DEF_OP_NUMERIC(uint32, uint32, I32, <<);
|
|
|
-#else
|
|
|
DEF_OP_NUMERIC2(uint32, uint32, I32, <<);
|
|
|
-#endif
|
|
|
HANDLE_OP_END ();
|
|
|
}
|
|
|
|
|
|
HANDLE_OP (WASM_OP_I32_SHR_S):
|
|
|
{
|
|
|
-#if defined(BUILD_TARGET_X86_64) || defined(BUILD_TARGET_X86_32)
|
|
|
- DEF_OP_NUMERIC(int32, uint32, I32, >>);
|
|
|
-#else
|
|
|
DEF_OP_NUMERIC2(int32, uint32, I32, >>);
|
|
|
-#endif
|
|
|
HANDLE_OP_END ();
|
|
|
}
|
|
|
|
|
|
HANDLE_OP (WASM_OP_I32_SHR_U):
|
|
|
{
|
|
|
-#if defined(BUILD_TARGET_X86_64) || defined(BUILD_TARGET_X86_32)
|
|
|
- DEF_OP_NUMERIC(uint32, uint32, I32, >>);
|
|
|
-#else
|
|
|
DEF_OP_NUMERIC2(uint32, uint32, I32, >>);
|
|
|
-#endif
|
|
|
HANDLE_OP_END ();
|
|
|
}
|
|
|
|
|
|
@@ -2211,31 +2199,19 @@ label_pop_csp_n:
|
|
|
|
|
|
HANDLE_OP (WASM_OP_I64_SHL):
|
|
|
{
|
|
|
-#if defined(BUILD_TARGET_X86_64) || defined(BUILD_TARGET_X86_32)
|
|
|
- DEF_OP_NUMERIC_64(uint64, uint64, I64, <<);
|
|
|
-#else
|
|
|
DEF_OP_NUMERIC2_64(uint64, uint64, I64, <<);
|
|
|
-#endif
|
|
|
HANDLE_OP_END ();
|
|
|
}
|
|
|
|
|
|
HANDLE_OP (WASM_OP_I64_SHR_S):
|
|
|
{
|
|
|
-#if defined(BUILD_TARGET_X86_64) || defined(BUILD_TARGET_X86_32)
|
|
|
- DEF_OP_NUMERIC_64(int64, uint64, I64, >>);
|
|
|
-#else
|
|
|
DEF_OP_NUMERIC2_64(int64, uint64, I64, >>);
|
|
|
-#endif
|
|
|
HANDLE_OP_END ();
|
|
|
}
|
|
|
|
|
|
HANDLE_OP (WASM_OP_I64_SHR_U):
|
|
|
{
|
|
|
-#if defined(BUILD_TARGET_X86_64) || defined(BUILD_TARGET_X86_32)
|
|
|
- DEF_OP_NUMERIC_64(uint64, uint64, I64, >>);
|
|
|
-#else
|
|
|
DEF_OP_NUMERIC2_64(uint64, uint64, I64, >>);
|
|
|
-#endif
|
|
|
HANDLE_OP_END ();
|
|
|
}
|
|
|
|
|
|
@@ -2266,12 +2242,12 @@ label_pop_csp_n:
|
|
|
|
|
|
HANDLE_OP (WASM_OP_F32_NEG):
|
|
|
{
|
|
|
- int32 i32 = (int32)frame_sp[-1];
|
|
|
- int32 sign_bit = i32 & (1 << 31);
|
|
|
+ uint32 u32 = frame_sp[-1];
|
|
|
+ uint32 sign_bit = u32 & ((uint32)1 << 31);
|
|
|
if (sign_bit)
|
|
|
- frame_sp[-1] = i32 & ~(1 << 31);
|
|
|
+ frame_sp[-1] = u32 & ~((uint32)1 << 31);
|
|
|
else
|
|
|
- frame_sp[-1] = (uint32)(i32 | (1 << 31));
|
|
|
+ frame_sp[-1] = u32 | ((uint32)1 << 31);
|
|
|
HANDLE_OP_END ();
|
|
|
}
|
|
|
|
|
|
@@ -2360,12 +2336,12 @@ label_pop_csp_n:
|
|
|
|
|
|
HANDLE_OP (WASM_OP_F64_NEG):
|
|
|
{
|
|
|
- int64 i64 = GET_I64_FROM_ADDR(frame_sp - 2);
|
|
|
- int64 sign_bit = i64 & (((int64)1) << 63);
|
|
|
+ uint64 u64 = GET_I64_FROM_ADDR(frame_sp - 2);
|
|
|
+ uint64 sign_bit = u64 & (((uint64)1) << 63);
|
|
|
if (sign_bit)
|
|
|
- PUT_I64_TO_ADDR(frame_sp - 2, ((uint64)i64 & ~(((uint64)1) << 63)));
|
|
|
+ PUT_I64_TO_ADDR(frame_sp - 2, (u64 & ~(((uint64)1) << 63)));
|
|
|
else
|
|
|
- PUT_I64_TO_ADDR(frame_sp - 2, ((uint64)i64 | (((uint64)1) << 63)));
|
|
|
+ PUT_I64_TO_ADDR(frame_sp - 2, (u64 | (((uint64)1) << 63)));
|
|
|
HANDLE_OP_END ();
|
|
|
}
|
|
|
|