diff options
author | Daniel Wirtz <dcode@dcode.io> | 2017-11-13 22:25:19 +0100 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2017-11-13 13:25:19 -0800 |
commit | 29963c3088ec829e9ad4f889cc13fd21e3ce45f7 (patch) | |
tree | 03932cb57194ef94305c52913742855b27506f4a /src/js | |
parent | 7261008d021723d8e88b410b7d0c410631677196 (diff) | |
download | binaryen-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.js | 180 |
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); |