@@ -308,6 +308,12 @@ BinaryenOp BinaryenPageSize(void) { return PageSize; }
308308BinaryenOp BinaryenCurrentMemory (void ) { return CurrentMemory; }
309309BinaryenOp BinaryenGrowMemory (void ) { return GrowMemory; }
310310BinaryenOp BinaryenHasFeature (void ) { return HasFeature; }
311+ BinaryenOp BinaryenAtomicRMWAdd (void ) { return AtomicRMWOp::Add; }
312+ BinaryenOp BinaryenAtomicRMWSub (void ) { return AtomicRMWOp::Sub; }
313+ BinaryenOp BinaryenAtomicRMWAnd (void ) { return AtomicRMWOp::And; }
314+ BinaryenOp BinaryenAtomicRMWOr (void ) { return AtomicRMWOp::Or; }
315+ BinaryenOp BinaryenAtomicRMWXor (void ) { return AtomicRMWOp::Xor; }
316+ BinaryenOp BinaryenAtomicRMWXchg (void ) { return AtomicRMWOp::Xchg; }
311317
312318BinaryenExpressionRef BinaryenBlock (BinaryenModuleRef module , const char * name, BinaryenExpressionRef* children, BinaryenIndex numChildren, BinaryenType type) {
313319 auto * ret = ((Module*)module )->allocator .alloc <Block>();
@@ -659,7 +665,7 @@ BinaryenExpressionRef BinaryenReturn(BinaryenModuleRef module, BinaryenExpressio
659665 std::cout << " expressions[" << id << " ] = BinaryenReturn(the_module, expressions[" << expressions[value] << " ]);\n " ;
660666 }
661667
662- return static_cast <Expression*>(ret);
668+ return static_cast <Expression*>(ret);
663669}
664670BinaryenExpressionRef BinaryenHost (BinaryenModuleRef module , BinaryenOp op, const char * name, BinaryenExpressionRef* operands, BinaryenIndex numOperands) {
665671 if (tracing) {
@@ -695,6 +701,46 @@ BinaryenExpressionRef BinaryenUnreachable(BinaryenModuleRef module) {
695701
696702 return static_cast <Expression*>(ret);
697703}
704+ BinaryenExpressionRef BinaryenAtomicRMW (BinaryenModuleRef module , BinaryenOp op, BinaryenIndex bytes, BinaryenIndex offset, BinaryenExpressionRef ptr, BinaryenExpressionRef value, BinaryenType type) {
705+ auto * ret = Builder (*((Module*)module )).makeAtomicRMW (AtomicRMWOp (op), bytes, offset, (Expression*)ptr, (Expression*)value, WasmType (type));
706+
707+ if (tracing) {
708+ auto id = noteExpression (ret);
709+ std::cout << " expressions[" << id << " ] = BinaryenAtomicRMW(the_module, " << op << " , " << bytes << " , " << offset << " , expressions[" << expressions[ptr] << " ], expressions[" << expressions[value] << " ], " << type << " );\n " ;
710+ }
711+
712+ return static_cast <Expression*>(ret);
713+ }
714+ BinaryenExpressionRef BinaryenAtomicCmpxchg (BinaryenModuleRef module , BinaryenIndex bytes, BinaryenIndex offset, BinaryenExpressionRef ptr, BinaryenExpressionRef expected, BinaryenExpressionRef replacement, BinaryenType type) {
715+ auto * ret = Builder (*((Module*)module )).makeAtomicCmpxchg (bytes, offset, (Expression*)ptr, (Expression*)expected, (Expression*)replacement, WasmType (type));
716+
717+ if (tracing) {
718+ auto id = noteExpression (ret);
719+ std::cout << " expressions[" << id << " ] = BinaryenAtomicCmpxchg(the_module, " << bytes << " , " << offset << " , expressions[" << expressions[ptr] << " ], expressions[" << expressions[expected] << " ], expressions[" << expressions[replacement] << " ], " << type << " );\n " ;
720+ }
721+
722+ return static_cast <Expression*>(ret);
723+ }
724+ BinaryenExpressionRef BinaryenAtomicWait (BinaryenModuleRef module , BinaryenExpressionRef ptr, BinaryenExpressionRef expected, BinaryenExpressionRef timeout, BinaryenType expectedType) {
725+ auto * ret = Builder (*((Module*)module )).makeAtomicWait ((Expression*)ptr, (Expression*)expected, (Expression*)timeout, WasmType (expectedType));
726+
727+ if (tracing) {
728+ auto id = noteExpression (ret);
729+ std::cout << " expressions[" << id << " ] = BinaryenAtomicWait(the_module, expressions[" << expressions[ptr] << " ], expressions[" << expressions[expected] << " ], expressions[" << expressions[timeout] << " ], " << expectedType << " );\n " ;
730+ }
731+
732+ return static_cast <Expression*>(ret);
733+ }
734+ BinaryenExpressionRef BinaryenAtomicWake (BinaryenModuleRef module , BinaryenExpressionRef ptr, BinaryenExpressionRef wakeCount) {
735+ auto * ret = Builder (*((Module*)module )).makeAtomicWake ((Expression*)ptr, (Expression*)wakeCount);
736+
737+ if (tracing) {
738+ auto id = noteExpression (ret);
739+ std::cout << " expressions[" << id << " ] = BinaryenAtomicWake(the_module, expressions[" << expressions[ptr] << " ], expressions[" << expressions[wakeCount] << " ]);\n " ;
740+ }
741+
742+ return static_cast <Expression*>(ret);
743+ }
698744
699745void BinaryenExpressionPrint (BinaryenExpressionRef expr) {
700746 if (tracing) {
0 commit comments