diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-03-14 12:52:50 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-03-14 12:52:50 -0700 |
commit | 83db455d3c69971e1d109fdb8f92e91b7ee667d8 (patch) | |
tree | 8f255689c0429984a70f8ae06f1564ec110b887b /src/library.js | |
parent | e28105b8e3767ac6691bd6410a484d0fb0a6437e (diff) |
move dynamic 64-bit shifts into asm library calls
Diffstat (limited to 'src/library.js')
-rw-r--r-- | src/library.js | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/src/library.js b/src/library.js index 62ef6db2..2daef933 100644 --- a/src/library.js +++ b/src/library.js @@ -4168,7 +4168,7 @@ LibraryManager.library = { return ret; }, - memcpy__asm: 'true', + memcpy__asm: true, memcpy__sig: 'iiii', memcpy: function (dest, src, num) { dest = dest|0; src = src|0; num = num|0; @@ -4329,7 +4329,7 @@ LibraryManager.library = { } }, - strcpy__asm: 'true', + strcpy__asm: true, strcpy__sig: 'iii', strcpy: function(pdest, psrc) { pdest = pdest|0; psrc = psrc|0; @@ -4350,7 +4350,7 @@ LibraryManager.library = { return pdest + i - 1; }, - strncpy__asm: 'true', + strncpy__asm: true, strncpy__sig: 'iiii', strncpy: function(pdest, psrc, num) { pdest = pdest|0; psrc = psrc|0; num = num|0; @@ -4462,7 +4462,7 @@ LibraryManager.library = { return 0; }, - memcmp__asm: 'true', + memcmp__asm: true, memcmp__sig: 'iiii', memcmp: function(p1, p2, num) { p1 = p1|0; p2 = p2|0; num = num|0; @@ -7363,7 +7363,7 @@ LibraryManager.library = { // i64 math //============================ - i64Add__asm: 'true', + i64Add__asm: true, i64Add__sig: 'iiiii', i64Add: function(a, b, c, d) { /* @@ -7380,7 +7380,7 @@ LibraryManager.library = { } {{{ makeStructuralReturn(['l|0', 'h'], true) }}}; }, - llvm_uadd_with_overflow_i64__asm: 'true', + llvm_uadd_with_overflow_i64__asm: true, llvm_uadd_with_overflow_i64__sig: 'iiiii', llvm_uadd_with_overflow_i64: function(a, b, c, d) { a = a|0; b = b|0; c = c|0; d = d|0; @@ -7393,6 +7393,46 @@ LibraryManager.library = { } {{{ makeStructuralReturn(['l|0', 'h', 'overflow'], true) }}}; }, + + bitshift64Shl__asm: true, + bitshift64Shl__sig: 'iiii', + bitshift64Shl: function(low, high, bits) { + low = low|0; high = high|0; bits = bits|0; + var ander = 0; + ander = ((1 << bits) - 1)|0; + if ((bits|0) < 32) { + tempRet0 = (high << bits) | ((low&(ander << (32 - bits))) >>> (32 - bits)); + return low << bits; + } + tempRet0 = low << (bits - 32); + return 0; + }, + bitshift64Ashr__asm: true, + bitshift64Ashr__sig: 'iiii', + bitshift64Ashr: function(low, high, bits) { + low = low|0; high = high|0; bits = bits|0; + var ander = 0; + ander = ((1 << bits) - 1)|0; + if ((bits|0) < 32) { + tempRet0 = high >> bits; + return (low >>> bits) | ((high&ander) << (32 - bits)); + } + tempRet0 = (high|0) < 0 ? ander : 0; + return (high >> (bits - 32))|0; + }, + bitshift64Lshr__asm: true, + bitshift64Lshr__sig: 'iiii', + bitshift64Lshr: function(low, high, bits) { + low = low|0; high = high|0; bits = bits|0; + var ander = 0; + ander = ((1 << bits) - 1)|0; + if ((bits|0) < 32) { + tempRet0 = high >>> bits; + return (low >>> bits) | ((high&ander) << (32 - bits)); + } + tempRet0 = 0; + return (high >>> (bits - 32))|0; + }, }; function autoAddDeps(object, name) { |