aboutsummaryrefslogtreecommitdiff
path: root/src/library.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-03-14 12:52:50 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-03-14 12:52:50 -0700
commit83db455d3c69971e1d109fdb8f92e91b7ee667d8 (patch)
tree8f255689c0429984a70f8ae06f1564ec110b887b /src/library.js
parente28105b8e3767ac6691bd6410a484d0fb0a6437e (diff)
move dynamic 64-bit shifts into asm library calls
Diffstat (limited to 'src/library.js')
-rw-r--r--src/library.js52
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) {