summaryrefslogtreecommitdiff
path: root/src/js
diff options
context:
space:
mode:
authorDaniel Wirtz <dcode@dcode.io>2017-11-13 22:25:19 +0100
committerAlon Zakai <alonzakai@gmail.com>2017-11-13 13:25:19 -0800
commit29963c3088ec829e9ad4f889cc13fd21e3ce45f7 (patch)
tree03932cb57194ef94305c52913742855b27506f4a /src/js
parent7261008d021723d8e88b410b7d0c410631677196 (diff)
downloadbinaryen-29963c3088ec829e9ad4f889cc13fd21e3ce45f7.tar.gz
binaryen-29963c3088ec829e9ad4f889cc13fd21e3ce45f7.tar.bz2
binaryen-29963c3088ec829e9ad4f889cc13fd21e3ce45f7.zip
Add atomic ops to binaryen.js (#1280)
Diffstat (limited to 'src/js')
-rw-r--r--src/js/binaryen.js-post.js180
1 files changed, 180 insertions, 0 deletions
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index e5ee24f4d..a29a035c6 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -185,6 +185,12 @@
Module['CurrentMemory'] = Module['_BinaryenCurrentMemory']();
Module['GrowMemory'] = Module['_BinaryenGrowMemory']();
Module['HasFeature'] = Module['_BinaryenHasFeature']();
+ Module['AtomicRMWAdd'] = Module['_BinaryenAtomicRMWAdd']();
+ Module['AtomicRMWSub'] = Module['_BinaryenAtomicRMWSub']();
+ Module['AtomicRMWAnd'] = Module['_BinaryenAtomicRMWAnd']();
+ Module['AtomicRMWOr'] = Module['_BinaryenAtomicRMWOr']();
+ Module['AtomicRMWXor'] = Module['_BinaryenAtomicRMWXor']();
+ Module['AtomicRMWXchg'] = Module['_BinaryenAtomicRMWXchg']();
// we provide a JS Module() object interface
Module['Module'] = function(module) {
@@ -422,6 +428,80 @@
'ge_u': function(left, right) {
return Module['_BinaryenBinary'](module, Module['GeUInt32'], left, right);
},
+ 'atomic':{
+ 'rmw': {
+ 'add': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 4, offset, ptr, value, Module['i32']);
+ },
+ 'sub': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 4, offset, ptr, value, Module['i32']);
+ },
+ 'and': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 4, offset, ptr, value, Module['i32']);
+ },
+ 'or': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 4, offset, ptr, value, Module['i32']);
+ },
+ 'xor': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 4, offset, ptr, value, Module['i32']);
+ },
+ 'xchg': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 4, offset, ptr, value, Module['i32']);
+ },
+ 'cmpxchg': function(offset, ptr, expected, replacement) {
+ return Module['_BinaryenAtomicCmpxchg'](module, 4, offset, ptr, expected, replacement, Module['i32'])
+ },
+ },
+ 'rmw8_u': {
+ 'add': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 1, offset, ptr, value, Module['i32']);
+ },
+ 'sub': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 1, offset, ptr, value, Module['i32']);
+ },
+ 'and': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 1, offset, ptr, value, Module['i32']);
+ },
+ 'or': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 1, offset, ptr, value, Module['i32']);
+ },
+ 'xor': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 1, offset, ptr, value, Module['i32']);
+ },
+ 'xchg': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 1, offset, ptr, value, Module['i32']);
+ },
+ 'cmpxchg': function(offset, ptr, expected, replacement) {
+ return Module['_BinaryenAtomicCmpxchg'](module, 1, offset, ptr, expected, replacement, Module['i32'])
+ },
+ },
+ 'rmw16_u': {
+ 'add': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 2, offset, ptr, value, Module['i32']);
+ },
+ 'sub': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 2, offset, ptr, value, Module['i32']);
+ },
+ 'and': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 2, offset, ptr, value, Module['i32']);
+ },
+ 'or': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 2, offset, ptr, value, Module['i32']);
+ },
+ 'xor': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 2, offset, ptr, value, Module['i32']);
+ },
+ 'xchg': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 2, offset, ptr, value, Module['i32']);
+ },
+ 'cmpxchg': function(offset, ptr, expected, replacement) {
+ return Module['_BinaryenAtomicCmpxchg'](module, 2, offset, ptr, expected, replacement, Module['i32'])
+ },
+ },
+ },
+ 'wait': function(ptr, expected, timeout) {
+ return Module['_BinaryenAtomicWait'](module, ptr, expected, timeout, Module['i32']);
+ },
};
this['i64'] = {
@@ -574,6 +654,103 @@
'ge_u': function(left, right) {
return Module['_BinaryenBinary'](module, Module['GeUInt64'], left, right);
},
+ 'atomic':{
+ 'rmw': {
+ 'add': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 8, offset, ptr, value, Module['i64']);
+ },
+ 'sub': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 8, offset, ptr, value, Module['i64']);
+ },
+ 'and': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 8, offset, ptr, value, Module['i64']);
+ },
+ 'or': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 8, offset, ptr, value, Module['i64']);
+ },
+ 'xor': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 8, offset, ptr, value, Module['i64']);
+ },
+ 'xchg': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 8, offset, ptr, value, Module['i64']);
+ },
+ 'cmpxchg': function(offset, ptr, expected, replacement) {
+ return Module['_BinaryenAtomicCmpxchg'](module, 8, offset, ptr, expected, replacement, Module['i64'])
+ },
+ },
+ 'rmw8_u': {
+ 'add': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 1, offset, ptr, value, Module['i64']);
+ },
+ 'sub': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 1, offset, ptr, value, Module['i64']);
+ },
+ 'and': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 1, offset, ptr, value, Module['i64']);
+ },
+ 'or': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 1, offset, ptr, value, Module['i64']);
+ },
+ 'xor': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 1, offset, ptr, value, Module['i64']);
+ },
+ 'xchg': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 1, offset, ptr, value, Module['i64']);
+ },
+ 'cmpxchg': function(offset, ptr, expected, replacement) {
+ return Module['_BinaryenAtomicCmpxchg'](module, 1, offset, ptr, expected, replacement, Module['i64'])
+ },
+ },
+ 'rmw16_u': {
+ 'add': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 2, offset, ptr, value, Module['i64']);
+ },
+ 'sub': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 2, offset, ptr, value, Module['i64']);
+ },
+ 'and': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 2, offset, ptr, value, Module['i64']);
+ },
+ 'or': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 2, offset, ptr, value, Module['i64']);
+ },
+ 'xor': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 2, offset, ptr, value, Module['i64']);
+ },
+ 'xchg': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 2, offset, ptr, value, Module['i64']);
+ },
+ 'cmpxchg': function(offset, ptr, expected, replacement) {
+ return Module['_BinaryenAtomicCmpxchg'](module, 2, offset, ptr, expected, replacement, Module['i64'])
+ },
+ },
+ 'rmw32_u': {
+ 'add': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAdd'], 4, offset, ptr, value, Module['i64']);
+ },
+ 'sub': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWSub'], 4, offset, ptr, value, Module['i64']);
+ },
+ 'and': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWAnd'], 4, offset, ptr, value, Module['i64']);
+ },
+ 'or': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWOr'], 4, offset, ptr, value, Module['i64']);
+ },
+ 'xor': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXor'], 4, offset, ptr, value, Module['i64']);
+ },
+ 'xchg': function(offset, ptr, value) {
+ return Module['_BinaryenAtomicRMW'](module, Module['AtomicRMWXchg'], 4, offset, ptr, value, Module['i64']);
+ },
+ 'cmpxchg': function(offset, ptr, expected, replacement) {
+ return Module['_BinaryenAtomicCmpxchg'](module, 4, offset, ptr, expected, replacement, Module['i64'])
+ },
+ },
+ },
+ 'wait': function(ptr, expected, timeout) {
+ return Module['_BinaryenAtomicWait'](module, ptr, expected, timeout, Module['i64']);
+ },
};
this['f32'] = {
@@ -792,6 +969,9 @@
this['unreachable'] = function() {
return Module['_BinaryenUnreachable'](module);
};
+ this['wake'] = function(ptr, wakeCount) {
+ return Module['_BinaryenAtomicWake'](module, ptr, wakeCount);
+ };
this['addFunction'] = function(name, functionType, varTypes, body) {
return preserveStack(function() {
return Module['_BinaryenAddFunction'](module, strToStack(name), functionType, i32sToStack(varTypes), varTypes.length, body);