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