summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/binaryen-c.cpp26
-rw-r--r--src/binaryen-c.h8
-rw-r--r--src/gen-s-parser.inc29
-rw-r--r--src/ir/ExpressionAnalyzer.cpp2
-rw-r--r--src/ir/ExpressionManipulator.cpp4
-rw-r--r--src/ir/ReFinalize.cpp2
-rw-r--r--src/ir/effects.h4
-rw-r--r--src/ir/utils.h4
-rw-r--r--src/js/binaryen.js-post.js12
-rw-r--r--src/passes/DeadCodeElimination.cpp2
-rw-r--r--src/passes/Precompute.cpp2
-rw-r--r--src/passes/Print.cpp10
-rw-r--r--src/passes/RemoveUnusedModuleElements.cpp2
-rw-r--r--src/tools/fuzzing.h2
-rw-r--r--src/wasm-binary.h4
-rw-r--r--src/wasm-builder.h14
-rw-r--r--src/wasm-interpreter.h6
-rw-r--r--src/wasm-module-building.h20
-rw-r--r--src/wasm-s-parser.h2
-rw-r--r--src/wasm-stack.h10
-rw-r--r--src/wasm-traversal.h20
-rw-r--r--src/wasm.h10
-rw-r--r--src/wasm/wasm-binary.cpp14
-rw-r--r--src/wasm/wasm-s-parser.cpp6
-rw-r--r--src/wasm/wasm-validator.cpp10
-rw-r--r--src/wasm/wasm.cpp6
26 files changed, 113 insertions, 118 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp
index 71cd92da4..72544d5d7 100644
--- a/src/binaryen-c.cpp
+++ b/src/binaryen-c.cpp
@@ -261,7 +261,7 @@ BinaryenExpressionId BinaryenUnreachableId(void) { return Expression::Id::Unreac
BinaryenExpressionId BinaryenAtomicCmpxchgId(void) { return Expression::Id::AtomicCmpxchgId; }
BinaryenExpressionId BinaryenAtomicRMWId(void) { return Expression::Id::AtomicRMWId; }
BinaryenExpressionId BinaryenAtomicWaitId(void) { return Expression::Id::AtomicWaitId; }
-BinaryenExpressionId BinaryenAtomicWakeId(void) { return Expression::Id::AtomicWakeId; }
+BinaryenExpressionId BinaryenAtomicNotifyId(void) { return Expression::Id::AtomicNotifyId; }
BinaryenExpressionId BinaryenSIMDExtractId(void) { return Expression::Id::SIMDExtractId; }
BinaryenExpressionId BinaryenSIMDReplaceId(void) { return Expression::Id::SIMDReplaceId; }
BinaryenExpressionId BinaryenSIMDShuffleId(void) { return Expression::Id::SIMDShuffleId; }
@@ -1022,11 +1022,11 @@ BinaryenExpressionRef BinaryenAtomicWait(BinaryenModuleRef module, BinaryenExpre
return static_cast<Expression*>(ret);
}
-BinaryenExpressionRef BinaryenAtomicWake(BinaryenModuleRef module, BinaryenExpressionRef ptr, BinaryenExpressionRef wakeCount) {
- auto* ret = Builder(*((Module*)module)).makeAtomicWake((Expression*)ptr, (Expression*)wakeCount, 0);
+BinaryenExpressionRef BinaryenAtomicNotify(BinaryenModuleRef module, BinaryenExpressionRef ptr, BinaryenExpressionRef notifyCount) {
+ auto* ret = Builder(*((Module*)module)).makeAtomicNotify((Expression*)ptr, (Expression*)notifyCount, 0);
if (tracing) {
- traceExpression(ret, "BinaryenAtomicWake", ptr, wakeCount);
+ traceExpression(ret, "BinaryenAtomicNotify", ptr, notifyCount);
}
return static_cast<Expression*>(ret);
@@ -1849,24 +1849,24 @@ BinaryenType BinaryenAtomicWaitGetExpectedType(BinaryenExpressionRef expr) {
assert(expression->is<AtomicWait>());
return static_cast<AtomicWait*>(expression)->expectedType;
}
-// AtomicWake
-BinaryenExpressionRef BinaryenAtomicWakeGetPtr(BinaryenExpressionRef expr) {
+// AtomicNotify
+BinaryenExpressionRef BinaryenAtomicNotifyGetPtr(BinaryenExpressionRef expr) {
if (tracing) {
- std::cout << " BinaryenAtomicWakeGetPtr(expressions[" << expressions[expr] << "]);\n";
+ std::cout << " BinaryenAtomicNotifyGetPtr(expressions[" << expressions[expr] << "]);\n";
}
auto* expression = (Expression*)expr;
- assert(expression->is<AtomicWake>());
- return static_cast<AtomicWake*>(expression)->ptr;
+ assert(expression->is<AtomicNotify>());
+ return static_cast<AtomicNotify*>(expression)->ptr;
}
-BinaryenExpressionRef BinaryenAtomicWakeGetWakeCount(BinaryenExpressionRef expr) {
+BinaryenExpressionRef BinaryenAtomicNotifyGetNotifyCount(BinaryenExpressionRef expr) {
if (tracing) {
- std::cout << " BinaryenAtomicWakeGetWakeCount(expressions[" << expressions[expr] << "]);\n";
+ std::cout << " BinaryenAtomicNotifyGetNotifyCount(expressions[" << expressions[expr] << "]);\n";
}
auto* expression = (Expression*)expr;
- assert(expression->is<AtomicWake>());
- return static_cast<AtomicWake*>(expression)->wakeCount;
+ assert(expression->is<AtomicNotify>());
+ return static_cast<AtomicNotify*>(expression)->notifyCount;
}
// SIMDExtract
BinaryenOp BinaryenSIMDExtractGetOp(BinaryenExpressionRef expr) {
diff --git a/src/binaryen-c.h b/src/binaryen-c.h
index 787bfb242..5bc95e0f8 100644
--- a/src/binaryen-c.h
+++ b/src/binaryen-c.h
@@ -116,7 +116,7 @@ BinaryenExpressionId BinaryenUnreachableId(void);
BinaryenExpressionId BinaryenAtomicCmpxchgId(void);
BinaryenExpressionId BinaryenAtomicRMWId(void);
BinaryenExpressionId BinaryenAtomicWaitId(void);
-BinaryenExpressionId BinaryenAtomicWakeId(void);
+BinaryenExpressionId BinaryenAtomicNotifyId(void);
BinaryenExpressionId BinaryenSIMDExtractId(void);
BinaryenExpressionId BinaryenSIMDReplaceId(void);
BinaryenExpressionId BinaryenSIMDShuffleId(void);
@@ -538,7 +538,7 @@ BinaryenExpressionRef BinaryenAtomicStore(BinaryenModuleRef module, uint32_t byt
BinaryenExpressionRef BinaryenAtomicRMW(BinaryenModuleRef module, BinaryenOp op, BinaryenIndex bytes, BinaryenIndex offset, BinaryenExpressionRef ptr, BinaryenExpressionRef value, BinaryenType type);
BinaryenExpressionRef BinaryenAtomicCmpxchg(BinaryenModuleRef module, BinaryenIndex bytes, BinaryenIndex offset, BinaryenExpressionRef ptr, BinaryenExpressionRef expected, BinaryenExpressionRef replacement, BinaryenType type);
BinaryenExpressionRef BinaryenAtomicWait(BinaryenModuleRef module, BinaryenExpressionRef ptr, BinaryenExpressionRef expected, BinaryenExpressionRef timeout, BinaryenType type);
-BinaryenExpressionRef BinaryenAtomicWake(BinaryenModuleRef module, BinaryenExpressionRef ptr, BinaryenExpressionRef wakeCount);
+BinaryenExpressionRef BinaryenAtomicNotify(BinaryenModuleRef module, BinaryenExpressionRef ptr, BinaryenExpressionRef notifyCount);
BinaryenExpressionRef BinaryenSIMDExtract(BinaryenModuleRef module, BinaryenOp op, BinaryenExpressionRef vec, uint8_t index);
BinaryenExpressionRef BinaryenSIMDReplace(BinaryenModuleRef module, BinaryenOp op, BinaryenExpressionRef vec, uint8_t index, BinaryenExpressionRef value);
BinaryenExpressionRef BinaryenSIMDShuffle(BinaryenModuleRef module, BinaryenExpressionRef left, BinaryenExpressionRef right, const uint8_t mask[16]);
@@ -652,8 +652,8 @@ BinaryenExpressionRef BinaryenAtomicWaitGetExpected(BinaryenExpressionRef expr);
BinaryenExpressionRef BinaryenAtomicWaitGetTimeout(BinaryenExpressionRef expr);
BinaryenType BinaryenAtomicWaitGetExpectedType(BinaryenExpressionRef expr);
-BinaryenExpressionRef BinaryenAtomicWakeGetPtr(BinaryenExpressionRef expr);
-BinaryenExpressionRef BinaryenAtomicWakeGetWakeCount(BinaryenExpressionRef expr);
+BinaryenExpressionRef BinaryenAtomicNotifyGetPtr(BinaryenExpressionRef expr);
+BinaryenExpressionRef BinaryenAtomicNotifyGetNotifyCount(BinaryenExpressionRef expr);
BinaryenOp BinaryenSIMDExtractGetOp(BinaryenExpressionRef expr);
BinaryenExpressionRef BinaryenSIMDExtractGetVec(BinaryenExpressionRef expr);
diff --git a/src/gen-s-parser.inc b/src/gen-s-parser.inc
index 710f0d829..c9daba100 100644
--- a/src/gen-s-parser.inc
+++ b/src/gen-s-parser.inc
@@ -5,6 +5,9 @@
char op[27] = {'\0'};
strncpy(op, s[0]->c_str(), 26);
switch (op[0]) {
+ case 'a':
+ if (strcmp(op, "atomic.notify") == 0) return makeAtomicNotify(s);
+ goto parse_error;
case 'b': {
switch (op[1]) {
case 'l':
@@ -946,6 +949,9 @@ switch (op[0]) {
default: goto parse_error;
}
}
+ case 'w':
+ if (strcmp(op, "i32.atomic.wait") == 0) return makeAtomicWait(s, i32);
+ goto parse_error;
default: goto parse_error;
}
}
@@ -1235,17 +1241,9 @@ switch (op[0]) {
default: goto parse_error;
}
}
- case 'w': {
- switch (op[5]) {
- case 'a':
- if (strcmp(op, "i32.wait") == 0) return makeAtomicWait(s, i32);
- goto parse_error;
- case 'r':
- if (strcmp(op, "i32.wrap_i64") == 0) return makeUnary(s, UnaryOp::WrapInt64);
- goto parse_error;
- default: goto parse_error;
- }
- }
+ case 'w':
+ if (strcmp(op, "i32.wrap_i64") == 0) return makeUnary(s, UnaryOp::WrapInt64);
+ goto parse_error;
case 'x':
if (strcmp(op, "i32.xor") == 0) return makeBinary(s, BinaryOp::XorInt32);
goto parse_error;
@@ -1594,6 +1592,9 @@ switch (op[0]) {
default: goto parse_error;
}
}
+ case 'w':
+ if (strcmp(op, "i64.atomic.wait") == 0) return makeAtomicWait(s, i64);
+ goto parse_error;
default: goto parse_error;
}
}
@@ -1911,9 +1912,6 @@ switch (op[0]) {
default: goto parse_error;
}
}
- case 'w':
- if (strcmp(op, "i64.wait") == 0) return makeAtomicWait(s, i64);
- goto parse_error;
case 'x':
if (strcmp(op, "i64.xor") == 0) return makeBinary(s, BinaryOp::XorInt64);
goto parse_error;
@@ -2257,9 +2255,6 @@ switch (op[0]) {
default: goto parse_error;
}
}
- case 'w':
- if (strcmp(op, "wake") == 0) return makeAtomicWake(s);
- goto parse_error;
default: goto parse_error;
}
parse_error:
diff --git a/src/ir/ExpressionAnalyzer.cpp b/src/ir/ExpressionAnalyzer.cpp
index fecee0cce..fcbd29665 100644
--- a/src/ir/ExpressionAnalyzer.cpp
+++ b/src/ir/ExpressionAnalyzer.cpp
@@ -171,7 +171,7 @@ void visitImmediates(Expression* curr, T& visitor) {
visitor.visitAddress(curr->offset);
visitor.visitType(curr->expectedType);
}
- void visitAtomicWake(AtomicWake* curr) {
+ void visitAtomicNotify(AtomicNotify* curr) {
visitor.visitAddress(curr->offset);
}
void visitSIMDExtract(SIMDExtract* curr) {
diff --git a/src/ir/ExpressionManipulator.cpp b/src/ir/ExpressionManipulator.cpp
index 32ee442b7..578d35e3f 100644
--- a/src/ir/ExpressionManipulator.cpp
+++ b/src/ir/ExpressionManipulator.cpp
@@ -111,8 +111,8 @@ Expression* flexibleCopy(Expression* original, Module& wasm, CustomCopier custom
Expression* visitAtomicWait(AtomicWait* curr) {
return builder.makeAtomicWait(copy(curr->ptr), copy(curr->expected), copy(curr->timeout), curr->expectedType, curr->offset);
}
- Expression* visitAtomicWake(AtomicWake* curr) {
- return builder.makeAtomicWake(copy(curr->ptr), copy(curr->wakeCount), curr->offset);
+ Expression* visitAtomicNotify(AtomicNotify* curr) {
+ return builder.makeAtomicNotify(copy(curr->ptr), copy(curr->notifyCount), curr->offset);
}
Expression* visitSIMDExtract(SIMDExtract* curr) {
return builder.makeSIMDExtract(curr->op, copy(curr->vec), curr->index);
diff --git a/src/ir/ReFinalize.cpp b/src/ir/ReFinalize.cpp
index 3f374265c..e4d5180d1 100644
--- a/src/ir/ReFinalize.cpp
+++ b/src/ir/ReFinalize.cpp
@@ -136,7 +136,7 @@ void ReFinalize::visitStore(Store* curr) { curr->finalize(); }
void ReFinalize::visitAtomicRMW(AtomicRMW* curr) { curr->finalize(); }
void ReFinalize::visitAtomicCmpxchg(AtomicCmpxchg* curr) { curr->finalize(); }
void ReFinalize::visitAtomicWait(AtomicWait* curr) { curr->finalize(); }
-void ReFinalize::visitAtomicWake(AtomicWake* curr) { curr->finalize(); }
+void ReFinalize::visitAtomicNotify(AtomicNotify* curr) { curr->finalize(); }
void ReFinalize::visitSIMDExtract(SIMDExtract* curr) { curr->finalize(); }
void ReFinalize::visitSIMDReplace(SIMDReplace* curr) { curr->finalize(); }
void ReFinalize::visitSIMDShuffle(SIMDShuffle* curr) { curr->finalize(); }
diff --git a/src/ir/effects.h b/src/ir/effects.h
index 394bf0116..401232fa1 100644
--- a/src/ir/effects.h
+++ b/src/ir/effects.h
@@ -230,8 +230,8 @@ struct EffectAnalyzer : public PostWalker<EffectAnalyzer> {
isAtomic = true;
if (!ignoreImplicitTraps) implicitTrap = true;
}
- void visitAtomicWake(AtomicWake* curr) {
- // AtomicWake doesn't strictly write memory, but it does modify the waiters
+ void visitAtomicNotify(AtomicNotify* curr) {
+ // AtomicNotify doesn't strictly write memory, but it does modify the waiters
// list associated with the specified address, which we can think of as a
// write.
readsMemory = true;
diff --git a/src/ir/utils.h b/src/ir/utils.h
index db437875d..c91698124 100644
--- a/src/ir/utils.h
+++ b/src/ir/utils.h
@@ -128,7 +128,7 @@ struct ReFinalize : public WalkerPass<PostWalker<ReFinalize, OverriddenVisitor<R
void visitAtomicRMW(AtomicRMW* curr);
void visitAtomicCmpxchg(AtomicCmpxchg* curr);
void visitAtomicWait(AtomicWait* curr);
- void visitAtomicWake(AtomicWake* curr);
+ void visitAtomicNotify(AtomicNotify* curr);
void visitSIMDExtract(SIMDExtract* curr);
void visitSIMDReplace(SIMDReplace* curr);
void visitSIMDShuffle(SIMDShuffle* curr);
@@ -184,7 +184,7 @@ struct ReFinalizeNode : public OverriddenVisitor<ReFinalizeNode> {
void visitAtomicRMW(AtomicRMW* curr) { curr->finalize(); }
void visitAtomicCmpxchg(AtomicCmpxchg* curr) { curr->finalize(); }
void visitAtomicWait(AtomicWait* curr) { curr->finalize(); }
- void visitAtomicWake(AtomicWake* curr) { curr->finalize(); }
+ void visitAtomicNotify(AtomicNotify* curr) { curr->finalize(); }
void visitSIMDExtract(SIMDExtract* curr) { curr->finalize(); }
void visitSIMDReplace(SIMDReplace* curr) { curr->finalize(); }
void visitSIMDShuffle(SIMDShuffle* curr) { curr->finalize(); }
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index aee41255c..1796080fc 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -67,7 +67,7 @@ Module['UnreachableId'] = Module['_BinaryenUnreachableId']();
Module['AtomicCmpxchgId'] = Module['_BinaryenAtomicCmpxchgId']();
Module['AtomicRMWId'] = Module['_BinaryenAtomicRMWId']();
Module['AtomicWaitId'] = Module['_BinaryenAtomicWaitId']();
-Module['AtomicWakeId'] = Module['_BinaryenAtomicWakeId']();
+Module['AtomicNotifyId'] = Module['_BinaryenAtomicNotifyId']();
Module['SIMDExtractId'] = Module['_BinaryenSIMDExtractId']();
Module['SIMDReplaceId'] = Module['_BinaryenSIMDReplaceId']();
Module['SIMDShuffleId'] = Module['_BinaryenSIMDShuffleId']();
@@ -1728,8 +1728,8 @@ function wrapModule(module, self) {
self['unreachable'] = function() {
return Module['_BinaryenUnreachable'](module);
};
- self['wake'] = function(ptr, wakeCount) {
- return Module['_BinaryenAtomicWake'](module, ptr, wakeCount);
+ self['notify'] = function(ptr, notifyCount) {
+ return Module['_BinaryenAtomicNotify'](module, ptr, notifyCount);
};
// 'Module' operations
@@ -2208,12 +2208,12 @@ Module['getExpressionInfo'] = function(expr) {
'timeout': Module['_BinaryenAtomicWaitGetTimeout'](expr),
'expectedType': Module['_BinaryenAtomicWaitGetExpectedType'](expr)
};
- case Module['AtomicWakeId']:
+ case Module['AtomicNotifyId']:
return {
'id': id,
'type': type,
- 'ptr': Module['_BinaryenAtomicWakeGetPtr'](expr),
- 'wakeCount': Module['_BinaryenAtomicWakeGetWakeCount'](expr)
+ 'ptr': Module['_BinaryenAtomicNotifyGetPtr'](expr),
+ 'notifyCount': Module['_BinaryenAtomicNotifyGetNotifyCount'](expr)
};
case Module['SIMDExtractId']:
return {
diff --git a/src/passes/DeadCodeElimination.cpp b/src/passes/DeadCodeElimination.cpp
index a6b20a7ba..a56c88929 100644
--- a/src/passes/DeadCodeElimination.cpp
+++ b/src/passes/DeadCodeElimination.cpp
@@ -256,7 +256,7 @@ struct DeadCodeElimination : public WalkerPass<PostWalker<DeadCodeElimination>>
case Expression::Id::AtomicCmpxchgId: DELEGATE(AtomicCmpxchg);
case Expression::Id::AtomicRMWId: DELEGATE(AtomicRMW);
case Expression::Id::AtomicWaitId: DELEGATE(AtomicWait);
- case Expression::Id::AtomicWakeId: DELEGATE(AtomicWake);
+ case Expression::Id::AtomicNotifyId: DELEGATE(AtomicNotify);
case Expression::Id::SIMDExtractId: DELEGATE(SIMDExtract);
case Expression::Id::SIMDReplaceId: DELEGATE(SIMDReplace);
case Expression::Id::SIMDShuffleId: DELEGATE(SIMDShuffle);
diff --git a/src/passes/Precompute.cpp b/src/passes/Precompute.cpp
index 5e9d9c9ea..6f59fceb7 100644
--- a/src/passes/Precompute.cpp
+++ b/src/passes/Precompute.cpp
@@ -119,7 +119,7 @@ public:
Flow visitAtomicWait(AtomicWait *curr) {
return Flow(NOTPRECOMPUTABLE_FLOW);
}
- Flow visitAtomicWake(AtomicWake *curr) {
+ Flow visitAtomicNotify(AtomicNotify *curr) {
return Flow(NOTPRECOMPUTABLE_FLOW);
}
Flow visitHost(Host *curr) {
diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp
index fd0bf17dc..6d7d512ff 100644
--- a/src/passes/Print.cpp
+++ b/src/passes/Print.cpp
@@ -228,13 +228,13 @@ struct PrintExpressionContents : public Visitor<PrintExpressionContents> {
}
void visitAtomicWait(AtomicWait* curr) {
prepareColor(o);
- o << printType(curr->expectedType) << ".wait";
+ o << printType(curr->expectedType) << ".atomic.wait";
if (curr->offset) {
o << " offset=" << curr->offset;
}
}
- void visitAtomicWake(AtomicWake* curr) {
- printMedium(o, "wake");
+ void visitAtomicNotify(AtomicNotify* curr) {
+ printMedium(o, "atomic.notify");
if (curr->offset) {
o << " offset=" << curr->offset;
}
@@ -904,12 +904,12 @@ struct PrintSExpression : public Visitor<PrintSExpression> {
printFullLine(curr->timeout);
decIndent();
}
- void visitAtomicWake(AtomicWake* curr) {
+ void visitAtomicNotify(AtomicNotify* curr) {
o << '(';
PrintExpressionContents(currFunction, o).visit(curr);
incIndent();
printFullLine(curr->ptr);
- printFullLine(curr->wakeCount);
+ printFullLine(curr->notifyCount);
decIndent();
}
void visitSIMDExtract(SIMDExtract* curr) {
diff --git a/src/passes/RemoveUnusedModuleElements.cpp b/src/passes/RemoveUnusedModuleElements.cpp
index 069137ff6..b9c8d5150 100644
--- a/src/passes/RemoveUnusedModuleElements.cpp
+++ b/src/passes/RemoveUnusedModuleElements.cpp
@@ -114,7 +114,7 @@ struct ReachabilityAnalyzer : public PostWalker<ReachabilityAnalyzer> {
void visitAtomicWait(AtomicWait* curr) {
usesMemory = true;
}
- void visitAtomicWake(AtomicWake* curr) {
+ void visitAtomicNotify(AtomicNotify* curr) {
usesMemory = true;
}
void visitHost(Host* curr) {
diff --git a/src/tools/fuzzing.h b/src/tools/fuzzing.h
index f16d0ecad..6aa0764f1 100644
--- a/src/tools/fuzzing.h
+++ b/src/tools/fuzzing.h
@@ -1618,7 +1618,7 @@ private:
} else {
auto* ptr = makePointer();
auto* count = make(i32);
- return builder.makeAtomicWake(ptr, count, logify(get()));
+ return builder.makeAtomicNotify(ptr, count, logify(get()));
}
}
Index bytes;
diff --git a/src/wasm-binary.h b/src/wasm-binary.h
index 66c95299e..8b449192a 100644
--- a/src/wasm-binary.h
+++ b/src/wasm-binary.h
@@ -557,7 +557,7 @@ enum ASTNodes {
};
enum AtomicOpcodes {
- AtomicWake = 0x00,
+ AtomicNotify = 0x00,
I32AtomicWait = 0x01,
I64AtomicWait = 0x02,
@@ -1108,7 +1108,7 @@ public:
bool maybeVisitAtomicRMW(Expression*& out, uint8_t code);
bool maybeVisitAtomicCmpxchg(Expression*& out, uint8_t code);
bool maybeVisitAtomicWait(Expression*& out, uint8_t code);
- bool maybeVisitAtomicWake(Expression*& out, uint8_t code);
+ bool maybeVisitAtomicNotify(Expression*& out, uint8_t code);
bool maybeVisitConst(Expression*& out, uint8_t code);
bool maybeVisitUnary(Expression*& out, uint8_t code);
bool maybeVisitBinary(Expression*& out, uint8_t code);
diff --git a/src/wasm-builder.h b/src/wasm-builder.h
index eee4e3b79..8c50ff2dc 100644
--- a/src/wasm-builder.h
+++ b/src/wasm-builder.h
@@ -247,13 +247,13 @@ public:
wait->finalize();
return wait;
}
- AtomicWake* makeAtomicWake(Expression* ptr, Expression* wakeCount, Address offset) {
- auto* wake = allocator.alloc<AtomicWake>();
- wake->offset = offset;
- wake->ptr = ptr;
- wake->wakeCount = wakeCount;
- wake->finalize();
- return wake;
+ AtomicNotify* makeAtomicNotify(Expression* ptr, Expression* notifyCount, Address offset) {
+ auto* notify = allocator.alloc<AtomicNotify>();
+ notify->offset = offset;
+ notify->ptr = ptr;
+ notify->notifyCount = notifyCount;
+ notify->finalize();
+ return notify;
}
Store* makeStore(unsigned bytes, uint32_t offset, unsigned align, Expression *ptr, Expression *value, Type type) {
auto* ret = allocator.alloc<Store>();
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h
index c584f0ea7..ae9494d1c 100644
--- a/src/wasm-interpreter.h
+++ b/src/wasm-interpreter.h
@@ -1124,12 +1124,12 @@ public:
// for now, just assume we are woken up
return Literal(int32_t(0)); // woken up
}
- Flow visitAtomicWake(AtomicWake *curr) {
- NOTE_ENTER("AtomicWake");
+ Flow visitAtomicNotify(AtomicNotify *curr) {
+ NOTE_ENTER("AtomicNotify");
Flow ptr = this->visit(curr->ptr);
if (ptr.breaking()) return ptr;
NOTE_EVAL1(ptr);
- auto count = this->visit(curr->wakeCount);
+ auto count = this->visit(curr->notifyCount);
NOTE_EVAL1(count);
if (count.breaking()) return count;
// TODO: add threads support!
diff --git a/src/wasm-module-building.h b/src/wasm-module-building.h
index e92436952..d1f8f5504 100644
--- a/src/wasm-module-building.h
+++ b/src/wasm-module-building.h
@@ -65,7 +65,7 @@ static std::mutex debug;
// * workers transform functions into nullptrs, and optimize them
// * we keep an atomic count of the number of active workers and
// the number of optimized functions.
-// * after adding a function, the main thread wakes up workers if
+// * after adding a function, the main thread notifys up workers if
// it calculates there is work for them.
// * a lock is used for going to sleep and waking up.
// Locking should be rare, as optimization is
@@ -156,10 +156,10 @@ public:
wasm->addFunction(func);
if (!useWorkers()) return; // we optimize at the end in that case
queueFunction(func);
- // wake workers if needed
- auto wake = availableFuncs.load();
- for (uint32_t i = 0; i < wake; i++) {
- wakeWorker();
+ // notify workers if needed
+ auto notify = availableFuncs.load();
+ for (uint32_t i = 0; i < notify; i++) {
+ notifyWorker();
}
}
@@ -180,7 +180,7 @@ public:
} else {
DEBUG_THREAD("finish()ing");
assert(nextFunction == numFunctions);
- wakeAllWorkers();
+ notifyAllWorkers();
waitUntilAllFinished();
}
// TODO: clear side thread allocators from module allocator, as these threads were transient
@@ -192,14 +192,14 @@ private:
threads.emplace_back(make_unique<std::thread>(workerMain, this));
}
- void wakeWorker() {
- DEBUG_THREAD("wake a worker");
+ void notifyWorker() {
+ DEBUG_THREAD("notify a worker");
std::lock_guard<std::mutex> lock(mutex);
condition.notify_one();
}
- void wakeAllWorkers() {
- DEBUG_THREAD("wake all workers");
+ void notifyAllWorkers() {
+ DEBUG_THREAD("notify all workers");
std::lock_guard<std::mutex> lock(mutex);
condition.notify_all();
}
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h
index 07de235a2..c80fa8b83 100644
--- a/src/wasm-s-parser.h
+++ b/src/wasm-s-parser.h
@@ -191,7 +191,7 @@ private:
Expression* makeAtomicRMW(Element& s, Type type, uint8_t bytes, const char* extra);
Expression* makeAtomicCmpxchg(Element& s, Type type, uint8_t bytes, const char* extra);
Expression* makeAtomicWait(Element& s, Type type);
- Expression* makeAtomicWake(Element& s);
+ Expression* makeAtomicNotify(Element& s);
Expression* makeSIMDExtract(Element& s, SIMDExtractOp op, size_t lanes);
Expression* makeSIMDReplace(Element& s, SIMDReplaceOp op, size_t lanes);
Expression* makeSIMDShuffle(Element& s);
diff --git a/src/wasm-stack.h b/src/wasm-stack.h
index f0995497a..afef2632b 100644
--- a/src/wasm-stack.h
+++ b/src/wasm-stack.h
@@ -134,7 +134,7 @@ public:
void visitAtomicRMW(AtomicRMW* curr);
void visitAtomicCmpxchg(AtomicCmpxchg* curr);
void visitAtomicWait(AtomicWait* curr);
- void visitAtomicWake(AtomicWake* curr);
+ void visitAtomicNotify(AtomicNotify* curr);
void visitSIMDExtract(SIMDExtract* curr);
void visitSIMDReplace(SIMDReplace* curr);
void visitSIMDShuffle(SIMDShuffle* curr);
@@ -890,15 +890,15 @@ void StackWriter<Mode, Parent>::visitAtomicWait(AtomicWait* curr) {
}
template<StackWriterMode Mode, typename Parent>
-void StackWriter<Mode, Parent>::visitAtomicWake(AtomicWake* curr) {
+void StackWriter<Mode, Parent>::visitAtomicNotify(AtomicNotify* curr) {
visitChild(curr->ptr);
// stop if the rest isn't reachable anyhow
if (curr->ptr->type == unreachable) return;
- visitChild(curr->wakeCount);
- if (curr->wakeCount->type == unreachable) return;
+ visitChild(curr->notifyCount);
+ if (curr->notifyCount->type == unreachable) return;
if (justAddToStack(curr)) return;
- o << int8_t(BinaryConsts::AtomicPrefix) << int8_t(BinaryConsts::AtomicWake);
+ o << int8_t(BinaryConsts::AtomicPrefix) << int8_t(BinaryConsts::AtomicNotify);
emitMemoryAccess(4, 4, 0);
}
diff --git a/src/wasm-traversal.h b/src/wasm-traversal.h
index 541490418..6259bf271 100644
--- a/src/wasm-traversal.h
+++ b/src/wasm-traversal.h
@@ -54,7 +54,7 @@ struct Visitor {
ReturnType visitAtomicRMW(AtomicRMW* curr) { return ReturnType(); }
ReturnType visitAtomicCmpxchg(AtomicCmpxchg* curr) { return ReturnType(); }
ReturnType visitAtomicWait(AtomicWait* curr) { return ReturnType(); }
- ReturnType visitAtomicWake(AtomicWake* curr) { return ReturnType(); }
+ ReturnType visitAtomicNotify(AtomicNotify* curr) { return ReturnType(); }
ReturnType visitSIMDExtract(SIMDExtract* curr) { return ReturnType(); }
ReturnType visitSIMDReplace(SIMDReplace* curr) { return ReturnType(); }
ReturnType visitSIMDShuffle(SIMDShuffle* curr) { return ReturnType(); }
@@ -106,7 +106,7 @@ struct Visitor {
case Expression::Id::AtomicRMWId: DELEGATE(AtomicRMW);
case Expression::Id::AtomicCmpxchgId: DELEGATE(AtomicCmpxchg);
case Expression::Id::AtomicWaitId: DELEGATE(AtomicWait);
- case Expression::Id::AtomicWakeId: DELEGATE(AtomicWake);
+ case Expression::Id::AtomicNotifyId: DELEGATE(AtomicNotify);
case Expression::Id::SIMDExtractId: DELEGATE(SIMDExtract);
case Expression::Id::SIMDReplaceId: DELEGATE(SIMDReplace);
case Expression::Id::SIMDShuffleId: DELEGATE(SIMDShuffle);
@@ -160,7 +160,7 @@ struct OverriddenVisitor {
UNIMPLEMENTED(AtomicRMW);
UNIMPLEMENTED(AtomicCmpxchg);
UNIMPLEMENTED(AtomicWait);
- UNIMPLEMENTED(AtomicWake);
+ UNIMPLEMENTED(AtomicNotify);
UNIMPLEMENTED(SIMDExtract);
UNIMPLEMENTED(SIMDReplace);
UNIMPLEMENTED(SIMDShuffle);
@@ -213,7 +213,7 @@ struct OverriddenVisitor {
case Expression::Id::AtomicRMWId: DELEGATE(AtomicRMW);
case Expression::Id::AtomicCmpxchgId: DELEGATE(AtomicCmpxchg);
case Expression::Id::AtomicWaitId: DELEGATE(AtomicWait);
- case Expression::Id::AtomicWakeId: DELEGATE(AtomicWake);
+ case Expression::Id::AtomicNotifyId: DELEGATE(AtomicNotify);
case Expression::Id::SIMDExtractId: DELEGATE(SIMDExtract);
case Expression::Id::SIMDReplaceId: DELEGATE(SIMDReplace);
case Expression::Id::SIMDShuffleId: DELEGATE(SIMDShuffle);
@@ -265,7 +265,7 @@ struct UnifiedExpressionVisitor : public Visitor<SubType, ReturnType> {
ReturnType visitAtomicRMW(AtomicRMW* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
ReturnType visitAtomicCmpxchg(AtomicCmpxchg* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
ReturnType visitAtomicWait(AtomicWait* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
- ReturnType visitAtomicWake(AtomicWake* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
+ ReturnType visitAtomicNotify(AtomicNotify* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
ReturnType visitSIMDExtract(SIMDExtract* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
ReturnType visitSIMDReplace(SIMDReplace* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
ReturnType visitSIMDShuffle(SIMDShuffle* curr) { return static_cast<SubType*>(this)->visitExpression(curr); }
@@ -473,7 +473,7 @@ struct Walker : public VisitorType {
static void doVisitAtomicRMW(SubType* self, Expression** currp) { self->visitAtomicRMW((*currp)->cast<AtomicRMW>()); }
static void doVisitAtomicCmpxchg(SubType* self, Expression** currp){ self->visitAtomicCmpxchg((*currp)->cast<AtomicCmpxchg>()); }
static void doVisitAtomicWait(SubType* self, Expression** currp) { self->visitAtomicWait((*currp)->cast<AtomicWait>()); }
- static void doVisitAtomicWake(SubType* self, Expression** currp) { self->visitAtomicWake((*currp)->cast<AtomicWake>()); }
+ static void doVisitAtomicNotify(SubType* self, Expression** currp) { self->visitAtomicNotify((*currp)->cast<AtomicNotify>()); }
static void doVisitSIMDExtract(SubType* self, Expression** currp) { self->visitSIMDExtract((*currp)->cast<SIMDExtract>()); }
static void doVisitSIMDReplace(SubType* self, Expression** currp) { self->visitSIMDReplace((*currp)->cast<SIMDReplace>()); }
static void doVisitSIMDShuffle(SubType* self, Expression** currp) { self->visitSIMDShuffle((*currp)->cast<SIMDShuffle>()); }
@@ -617,10 +617,10 @@ struct PostWalker : public Walker<SubType, VisitorType> {
self->pushTask(SubType::scan, &curr->cast<AtomicWait>()->ptr);
break;
}
- case Expression::Id::AtomicWakeId: {
- self->pushTask(SubType::doVisitAtomicWake, currp);
- self->pushTask(SubType::scan, &curr->cast<AtomicWake>()->wakeCount);
- self->pushTask(SubType::scan, &curr->cast<AtomicWake>()->ptr);
+ case Expression::Id::AtomicNotifyId: {
+ self->pushTask(SubType::doVisitAtomicNotify, currp);
+ self->pushTask(SubType::scan, &curr->cast<AtomicNotify>()->notifyCount);
+ self->pushTask(SubType::scan, &curr->cast<AtomicNotify>()->ptr);
break;
}
case Expression::Id::SIMDExtractId: {
diff --git a/src/wasm.h b/src/wasm.h
index ab9d7c816..12071fdb4 100644
--- a/src/wasm.h
+++ b/src/wasm.h
@@ -206,7 +206,7 @@ public:
AtomicRMWId,
AtomicCmpxchgId,
AtomicWaitId,
- AtomicWakeId,
+ AtomicNotifyId,
SIMDExtractId,
SIMDReplaceId,
SIMDShuffleId,
@@ -512,14 +512,14 @@ class AtomicWait : public SpecificExpression<Expression::AtomicWaitId> {
void finalize();
};
-class AtomicWake : public SpecificExpression<Expression::AtomicWakeId> {
+class AtomicNotify : public SpecificExpression<Expression::AtomicNotifyId> {
public:
- AtomicWake() = default;
- AtomicWake(MixedArena& allocator) : AtomicWake() {}
+ AtomicNotify() = default;
+ AtomicNotify(MixedArena& allocator) : AtomicNotify() {}
Address offset;
Expression* ptr;
- Expression* wakeCount;
+ Expression* notifyCount;
void finalize();
};
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index 18bd48e2a..643f69dde 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -1703,7 +1703,7 @@ BinaryConsts::ASTNodes WasmBinaryBuilder::readExpression(Expression*& curr) {
if (maybeVisitAtomicRMW(curr, code)) break;
if (maybeVisitAtomicCmpxchg(curr, code)) break;
if (maybeVisitAtomicWait(curr, code)) break;
- if (maybeVisitAtomicWake(curr, code)) break;
+ if (maybeVisitAtomicNotify(curr, code)) break;
throwError("invalid code after atomic prefix: " + std::to_string(code));
break;
}
@@ -2215,17 +2215,17 @@ bool WasmBinaryBuilder::maybeVisitAtomicWait(Expression*& out, uint8_t code) {
return true;
}
-bool WasmBinaryBuilder::maybeVisitAtomicWake(Expression*& out, uint8_t code) {
- if (code != BinaryConsts::AtomicWake) return false;
- auto* curr = allocator.alloc<AtomicWake>();
- if (debug) std::cerr << "zz node: AtomicWake" << std::endl;
+bool WasmBinaryBuilder::maybeVisitAtomicNotify(Expression*& out, uint8_t code) {
+ if (code != BinaryConsts::AtomicNotify) return false;
+ auto* curr = allocator.alloc<AtomicNotify>();
+ if (debug) std::cerr << "zz node: AtomicNotify" << std::endl;
curr->type = i32;
- curr->wakeCount = popNonVoidExpression();
+ curr->notifyCount = popNonVoidExpression();
curr->ptr = popNonVoidExpression();
Address readAlign;
readMemoryAccess(readAlign, curr->offset);
- if (readAlign != getTypeSize(curr->type)) throwError("Align of AtomicWake must match size");
+ if (readAlign != getTypeSize(curr->type)) throwError("Align of AtomicNotify must match size");
curr->finalize();
out = curr;
return true;
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp
index 1067264f7..ddda991cd 100644
--- a/src/wasm/wasm-s-parser.cpp
+++ b/src/wasm/wasm-s-parser.cpp
@@ -1071,11 +1071,11 @@ Expression* SExpressionWasmBuilder::makeAtomicWait(Element& s, Type type) {
return ret;
}
-Expression* SExpressionWasmBuilder::makeAtomicWake(Element& s) {
- auto ret = allocator.alloc<AtomicWake>();
+Expression* SExpressionWasmBuilder::makeAtomicNotify(Element& s) {
+ auto ret = allocator.alloc<AtomicNotify>();
ret->type = i32;
ret->ptr = parseExpression(s[1]);
- ret->wakeCount = parseExpression(s[2]);
+ ret->notifyCount = parseExpression(s[2]);
ret->finalize();
return ret;
}
diff --git a/src/wasm/wasm-validator.cpp b/src/wasm/wasm-validator.cpp
index 5c0e0d542..6d4490982 100644
--- a/src/wasm/wasm-validator.cpp
+++ b/src/wasm/wasm-validator.cpp
@@ -245,7 +245,7 @@ public:
void visitAtomicRMW(AtomicRMW* curr);
void visitAtomicCmpxchg(AtomicCmpxchg* curr);
void visitAtomicWait(AtomicWait* curr);
- void visitAtomicWake(AtomicWake* curr);
+ void visitAtomicNotify(AtomicNotify* curr);
void visitSIMDExtract(SIMDExtract* curr);
void visitSIMDReplace(SIMDReplace* curr);
void visitSIMDShuffle(SIMDShuffle* curr);
@@ -576,12 +576,12 @@ void FunctionValidator::visitAtomicWait(AtomicWait* curr) {
shouldBeEqualOrFirstIsUnreachable(curr->timeout->type, i64, curr, "AtomicWait timeout type must be i64");
}
-void FunctionValidator::visitAtomicWake(AtomicWake* curr) {
+void FunctionValidator::visitAtomicNotify(AtomicNotify* curr) {
shouldBeTrue(info.features.hasAtomics(), curr, "Atomic operation (atomics are disabled)");
shouldBeFalse(!getModule()->memory.shared, curr, "Atomic operation with non-shared memory");
- shouldBeEqualOrFirstIsUnreachable(curr->type, i32, curr, "AtomicWake must have type i32");
- shouldBeEqualOrFirstIsUnreachable(curr->ptr->type, i32, curr, "AtomicWake pointer type must be i32");
- shouldBeEqualOrFirstIsUnreachable(curr->wakeCount->type, i32, curr, "AtomicWake wakeCount type must be i32");
+ shouldBeEqualOrFirstIsUnreachable(curr->type, i32, curr, "AtomicNotify must have type i32");
+ shouldBeEqualOrFirstIsUnreachable(curr->ptr->type, i32, curr, "AtomicNotify pointer type must be i32");
+ shouldBeEqualOrFirstIsUnreachable(curr->notifyCount->type, i32, curr, "AtomicNotify notifyCount type must be i32");
}
void FunctionValidator::visitSIMDExtract(SIMDExtract* curr) {
diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp
index c99bb0994..e135ba750 100644
--- a/src/wasm/wasm.cpp
+++ b/src/wasm/wasm.cpp
@@ -105,7 +105,7 @@ const char* getExpressionName(Expression* curr) {
case Expression::Id::AtomicCmpxchgId: return "atomic_cmpxchg";
case Expression::Id::AtomicRMWId: return "atomic_rmw";
case Expression::Id::AtomicWaitId: return "atomic_wait";
- case Expression::Id::AtomicWakeId: return "atomic_wake";
+ case Expression::Id::AtomicNotifyId: return "atomic_notify";
case Expression::Id::SIMDExtractId: return "simd_extract";
case Expression::Id::SIMDReplaceId: return "simd_replace";
case Expression::Id::SIMDShuffleId: return "simd_shuffle";
@@ -420,9 +420,9 @@ void AtomicWait::finalize() {
}
}
-void AtomicWake::finalize() {
+void AtomicNotify::finalize() {
type = i32;
- if (ptr->type == unreachable || wakeCount->type == unreachable) {
+ if (ptr->type == unreachable || notifyCount->type == unreachable) {
type = unreachable;
}
}