summaryrefslogtreecommitdiff
path: root/src/wasm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm.h')
-rw-r--r--src/wasm.h66
1 files changed, 59 insertions, 7 deletions
diff --git a/src/wasm.h b/src/wasm.h
index 6e7ca18ce..fc0337700 100644
--- a/src/wasm.h
+++ b/src/wasm.h
@@ -791,13 +791,29 @@ enum UnaryOp {
};
enum BinaryOp {
- Add, Sub, Mul, // int or float
- DivS, DivU, RemS, RemU, And, Or, Xor, Shl, ShrU, ShrS, RotL, RotR, // int
- Div, CopySign, Min, Max, // float
+ AddInt32, SubInt32, MulInt32, // int or float
+ DivSInt32, DivUInt32, RemSInt32, RemUInt32, AndInt32, OrInt32, XorInt32, ShlInt32, ShrUInt32, ShrSInt32, RotLInt32, RotRInt32, // int
// relational ops
- Eq, Ne, // int or float
- LtS, LtU, LeS, LeU, GtS, GtU, GeS, GeU, // int
- Lt, Le, Gt, Ge // float
+ EqInt32, NeInt32, // int or float
+ LtSInt32, LtUInt32, LeSInt32, LeUInt32, GtSInt32, GtUInt32, GeSInt32, GeUInt32, // int
+
+ AddInt64, SubInt64, MulInt64, // int or float
+ DivSInt64, DivUInt64, RemSInt64, RemUInt64, AndInt64, OrInt64, XorInt64, ShlInt64, ShrUInt64, ShrSInt64, RotLInt64, RotRInt64, // int
+ // relational ops
+ EqInt64, NeInt64, // int or float
+ LtSInt64, LtUInt64, LeSInt64, LeUInt64, GtSInt64, GtUInt64, GeSInt64, GeUInt64, // int
+
+ AddFloat32, SubFloat32, MulFloat32, // int or float
+ DivFloat32, CopySignFloat32, MinFloat32, MaxFloat32, // float
+ // relational ops
+ EqFloat32, NeFloat32, // int or float
+ LtFloat32, LeFloat32, GtFloat32, GeFloat32, // float
+
+ AddFloat64, SubFloat64, MulFloat64, // int or float
+ DivFloat64, CopySignFloat64, MinFloat64, MaxFloat64, // float
+ // relational ops
+ EqFloat64, NeFloat64, // int or float
+ LtFloat64, LeFloat64, GtFloat64, GeFloat64, // float
};
enum HostOp {
@@ -1182,7 +1198,43 @@ public:
// the type is always the type of the operands,
// except for relationals
- bool isRelational() { return op >= Eq; }
+ bool isRelational() {
+ switch (op) {
+ case EqFloat64:
+ case NeFloat64:
+ case LtFloat64:
+ case LeFloat64:
+ case GtFloat64:
+ case GeFloat64:
+ case EqInt32:
+ case NeInt32:
+ case LtSInt32:
+ case LtUInt32:
+ case LeSInt32:
+ case LeUInt32:
+ case GtSInt32:
+ case GtUInt32:
+ case GeSInt32:
+ case GeUInt32:
+ case EqInt64:
+ case NeInt64:
+ case LtSInt64:
+ case LtUInt64:
+ case LeSInt64:
+ case LeUInt64:
+ case GtSInt64:
+ case GtUInt64:
+ case GeSInt64:
+ case GeUInt64:
+ case EqFloat32:
+ case NeFloat32:
+ case LtFloat32:
+ case LeFloat32:
+ case GtFloat32:
+ case GeFloat32: return true;
+ default: return false;
+ }
+ }
void finalize() {
if (isRelational()) {