summaryrefslogtreecommitdiff
path: root/src/wasm
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm')
-rw-r--r--src/wasm/wasm-binary.cpp9
-rw-r--r--src/wasm/wasm-s-parser.cpp6
-rw-r--r--src/wasm/wasm-stack.cpp12
-rw-r--r--src/wasm/wat-parser.cpp5
4 files changed, 24 insertions, 8 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index abd51fcef..65734e68d 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -7345,12 +7345,17 @@ bool WasmBinaryBuilder::maybeVisitStringConcat(Expression*& out,
}
bool WasmBinaryBuilder::maybeVisitStringEq(Expression*& out, uint32_t code) {
- if (code != BinaryConsts::StringEq) {
+ StringEqOp op;
+ if (code == BinaryConsts::StringEq) {
+ op = StringEqEqual;
+ } else if (code == BinaryConsts::StringCompare) {
+ op = StringEqCompare;
+ } else {
return false;
}
auto* right = popNonVoidExpression();
auto* left = popNonVoidExpression();
- out = Builder(wasm).makeStringEq(left, right);
+ out = Builder(wasm).makeStringEq(op, left, right);
return true;
}
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp
index 0c413af2a..829025a2c 100644
--- a/src/wasm/wasm-s-parser.cpp
+++ b/src/wasm/wasm-s-parser.cpp
@@ -3090,9 +3090,9 @@ Expression* SExpressionWasmBuilder::makeStringConcat(Element& s) {
parseExpression(s[2]));
}
-Expression* SExpressionWasmBuilder::makeStringEq(Element& s) {
- return Builder(wasm).makeStringEq(parseExpression(s[1]),
- parseExpression(s[2]));
+Expression* SExpressionWasmBuilder::makeStringEq(Element& s, StringEqOp op) {
+ return Builder(wasm).makeStringEq(
+ op, parseExpression(s[1]), parseExpression(s[2]));
}
Expression* SExpressionWasmBuilder::makeStringAs(Element& s, StringAsOp op) {
diff --git a/src/wasm/wasm-stack.cpp b/src/wasm/wasm-stack.cpp
index 35ef12993..1f5722b59 100644
--- a/src/wasm/wasm-stack.cpp
+++ b/src/wasm/wasm-stack.cpp
@@ -2370,7 +2370,17 @@ void BinaryInstWriter::visitStringConcat(StringConcat* curr) {
}
void BinaryInstWriter::visitStringEq(StringEq* curr) {
- o << int8_t(BinaryConsts::GCPrefix) << U32LEB(BinaryConsts::StringEq);
+ o << int8_t(BinaryConsts::GCPrefix);
+ switch (curr->op) {
+ case StringEqEqual:
+ o << U32LEB(BinaryConsts::StringEq);
+ break;
+ case StringEqCompare:
+ o << U32LEB(BinaryConsts::StringCompare);
+ break;
+ default:
+ WASM_UNREACHABLE("invalid string.eq*");
+ }
}
void BinaryInstWriter::visitStringAs(StringAs* curr) {
diff --git a/src/wasm/wat-parser.cpp b/src/wasm/wat-parser.cpp
index 66bba8862..dfc2190f3 100644
--- a/src/wasm/wat-parser.cpp
+++ b/src/wasm/wat-parser.cpp
@@ -2383,7 +2383,8 @@ template<typename Ctx>
Result<typename Ctx::InstrT> makeStringEncode(Ctx&, Index, StringEncodeOp op);
template<typename Ctx>
Result<typename Ctx::InstrT> makeStringConcat(Ctx&, Index);
-template<typename Ctx> Result<typename Ctx::InstrT> makeStringEq(Ctx&, Index);
+template<typename Ctx>
+Result<typename Ctx::InstrT> makeStringEq(Ctx&, Index, StringEqOp);
template<typename Ctx>
Result<typename Ctx::InstrT> makeStringAs(Ctx&, Index, StringAsOp op);
template<typename Ctx>
@@ -3589,7 +3590,7 @@ Result<typename Ctx::InstrT> makeStringConcat(Ctx& ctx, Index pos) {
}
template<typename Ctx>
-Result<typename Ctx::InstrT> makeStringEq(Ctx& ctx, Index pos) {
+Result<typename Ctx::InstrT> makeStringEq(Ctx& ctx, Index pos, StringEqOp op) {
return ctx.in.err("unimplemented instruction");
}