Skip to content

Commit 139076a

Browse files
authored
bugfix: use gcc/clang compatible overflow builtins for integer arithmetic (wasm3#450)
1 parent d28e14f commit 139076a

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

source/m3_exec.h

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,8 @@ d_m3CommutativeOpMacro(RES, REG, TYPE,NAME, OP, ##__VA_ARGS__)
152152
#define d_m3CommutativeOpMacro_f(TYPE, NAME, MACRO, ...) d_m3CommutativeOpMacro (_fp0, _fp0, TYPE, NAME, MACRO, ##__VA_ARGS__)
153153
#define d_m3OpMacro_f(TYPE, NAME, MACRO, ...) d_m3OpMacro (_fp0, _fp0, TYPE, NAME, MACRO, ##__VA_ARGS__)
154154

155-
#define M3_FUNC(RES, A, B, OP) (RES) = OP((A), (B)) // Accept functions: res = OP(a,b)
156-
#define M3_OPER(RES, A, B, OP) (RES) = ((A) OP (B)) // Accept operators: res = a OP b
155+
#define M3_FUNC(RES, A, B, OP) (RES) = OP((A), (B)) // Accept functions: res = OP(a,b)
156+
#define M3_OPER(RES, A, B, OP) (RES) = ((A) OP (B)) // Accept operators: res = a OP b
157157

158158
#define d_m3CommutativeOpFunc_i(TYPE, NAME, OP) d_m3CommutativeOpMacro_i (TYPE, NAME, M3_FUNC, OP)
159159
#define d_m3OpFunc_i(TYPE, NAME, OP) d_m3OpMacro_i (TYPE, NAME, M3_FUNC, OP)
@@ -196,10 +196,17 @@ d_m3CompareOp_f (f32, LessThanOrEqual, <=) d_m3CompareOp_f (f64, LessTh
196196
d_m3CompareOp_f (f32, GreaterThanOrEqual, >=) d_m3CompareOp_f (f64, GreaterThanOrEqual, >=)
197197
#endif
198198

199-
d_m3CommutativeOp_i (i32, Add, +) d_m3CommutativeOp_i (i64, Add, +)
200-
d_m3CommutativeOp_i (i32, Multiply, *) d_m3CommutativeOp_i (i64, Multiply, *)
199+
#define OP_ADD_32(A,B) (i32)((u32)(A) + (u32)(B))
200+
#define OP_ADD_64(A,B) (i64)((u64)(A) + (u64)(B))
201+
#define OP_SUB_32(A,B) (i32)((u32)(A) - (u32)(B))
202+
#define OP_SUB_64(A,B) (i64)((u64)(A) - (u64)(B))
203+
#define OP_MUL_32(A,B) (i32)((u32)(A) * (u32)(B))
204+
#define OP_MUL_64(A,B) (i64)((u64)(A) * (u64)(B))
201205

202-
d_m3Op_i (i32, Subtract, -) d_m3Op_i (i64, Subtract, -)
206+
d_m3CommutativeOpFunc_i (i32, Add, OP_ADD_32) d_m3CommutativeOpFunc_i (i64, Add, OP_ADD_64)
207+
d_m3CommutativeOpFunc_i (i32, Multiply, OP_MUL_32) d_m3CommutativeOpFunc_i (i64, Multiply, OP_MUL_64)
208+
209+
d_m3OpFunc_i (i32, Subtract, OP_SUB_32) d_m3OpFunc_i (i64, Subtract, OP_SUB_64)
203210

204211
#define OP_SHL_32(X,N) ((X) << ((u32)(N) % 32))
205212
#define OP_SHL_64(X,N) ((X) << ((u64)(N) % 64))

0 commit comments

Comments
 (0)