summaryrefslogtreecommitdiff
path: root/src/wasm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm.h')
-rw-r--r--src/wasm.h31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/wasm.h b/src/wasm.h
index 286604848..e98c4db63 100644
--- a/src/wasm.h
+++ b/src/wasm.h
@@ -130,6 +130,10 @@ enum HostOp {
PageSize, CurrentMemory, GrowMemory, HasFeature
};
+enum AtomicRMWOp {
+ Add, Sub, And, Or, Xor, Xchg,
+};
+
//
// Expressions
//
@@ -177,6 +181,7 @@ public:
HostId,
NopId,
UnreachableId,
+ AtomicCmpxchgId,
AtomicRMWId,
NumExpressionIds
};
@@ -423,6 +428,25 @@ public:
void finalize();
};
+class AtomicRMW : public SpecificExpression<Expression::AtomicRMWId> {
+ public:
+ AtomicRMW() = default;
+ AtomicRMW(MixedArena& allocator) : AtomicRMW() {}
+
+ AtomicRMWOp op;
+ uint8_t bytes;
+ Address offset;
+ Expression* ptr;
+ Expression* value;
+
+ void finalize();
+};
+
+class AtomicCmpxchg : public SpecificExpression<Expression::AtomicCmpxchgId> {
+ public:
+ AtomicCmpxchg() = default;
+};
+
class Const : public SpecificExpression<Expression::ConstId> {
public:
Const() {}
@@ -514,13 +538,6 @@ public:
Unreachable(MixedArena& allocator) : Unreachable() {}
};
-class AtomicRMW : public SpecificExpression<Expression::AtomicRMWId> {
- public:
- AtomicRMW() {}
- AtomicRMW(MixedArena& allocator) : AtomicRMW() {}
- bool finalize();
-};
-
// Globals
class Function {