Expose MemoryOrder enums for atomic operations
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp
index 146a908..331fb9d 100644
--- a/src/binaryen-c.cpp
+++ b/src/binaryen-c.cpp
@@ -419,6 +419,18 @@
return static_cast<BinaryenExternalKind>(ExternalKind::Tag);
}
+// MemoryOrder for atomic operations
+
+BINARYEN_API BinaryenMemoryOrder BinaryenMemoryOrderUnordered(void) {
+ return static_cast<BinaryenMemoryOrder>(MemoryOrder::Unordered);
+}
+BINARYEN_API BinaryenMemoryOrder BinaryenMemoryOrderSeqCst(void) {
+ return static_cast<BinaryenMemoryOrder>(MemoryOrder::SeqCst);
+}
+BINARYEN_API BinaryenMemoryOrder BinaryenMemoryOrderAcqRel(void) {
+ return static_cast<BinaryenMemoryOrder>(MemoryOrder::AcqRel);
+}
+
// Features
BinaryenFeatures BinaryenFeatureMVP(void) {
diff --git a/src/binaryen-c.h b/src/binaryen-c.h
index f76741b..1337baf 100644
--- a/src/binaryen-c.h
+++ b/src/binaryen-c.h
@@ -203,6 +203,14 @@
BINARYEN_API BinaryenExternalKind BinaryenExternalGlobal(void);
BINARYEN_API BinaryenExternalKind BinaryenExternalTag(void);
+// MemoryOrder for atomic operations
+
+typedef uint8_t BinaryenMemoryOrder;
+
+BINARYEN_API BinaryenMemoryOrder BinaryenMemoryOrderUnordered(void);
+BINARYEN_API BinaryenMemoryOrder BinaryenMemoryOrderSeqCst(void);
+BINARYEN_API BinaryenMemoryOrder BinaryenMemoryOrderAcqRel(void);
+
// Features. Call to get the value of each; you can cache them. Use bitwise
// operators to combine and test particular features.
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index 82a6695..1fee8df 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -157,6 +157,15 @@
Module['ExternalKinds'][name] = Module['External' + name] = Module['_BinaryenExternal' + name]();
});
+ // MemoryOrder for atomic operations
+ Module['MemoryOrder'] = {};
+ [ 'Unordered',
+ 'SeqCst',
+ 'AcqRel'
+ ].forEach(name => {
+ Module['MemoryOrder'][name] = Module['_BinaryenMemoryOrder' + name]()
+ });
+
// Features
Module['Features'] = {};
[ 'MVP',
diff --git a/src/wasm.h b/src/wasm.h
index 5c36d5b..abf5297 100644
--- a/src/wasm.h
+++ b/src/wasm.h
@@ -65,7 +65,7 @@
}
};
-enum class MemoryOrder {
+enum class MemoryOrder : uint8_t {
Unordered,
SeqCst,
AcqRel,