diff options
Diffstat (limited to 'src/wasm.h')
-rw-r--r-- | src/wasm.h | 66 |
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()) { |