aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jsifier.js9
-rw-r--r--src/library.js22
2 files changed, 22 insertions, 9 deletions
diff --git a/src/jsifier.js b/src/jsifier.js
index 84a9b5f7..34329e70 100644
--- a/src/jsifier.js
+++ b/src/jsifier.js
@@ -1349,6 +1349,15 @@ function JSify(data, functionsOnly, givenFunctions) {
} else {
args = args.map(function(arg, i) { return asmEnsureFloat(arg, argsTypes[i]) });
}
+
+ // remove unneeded arguments, which the asm sig can show us
+ var libsig = LibraryManager.library[shortident + '__sig'];
+ if (libsig) {
+ while (libsig.length - 1 < args.length) {
+ args.pop();
+ argsTypes.pop();
+ }
+ }
}
varargs = varargs.map(function(vararg, i) {
diff --git a/src/library.js b/src/library.js
index cb892251..7d0012a8 100644
--- a/src/library.js
+++ b/src/library.js
@@ -4236,16 +4236,20 @@ LibraryManager.library = {
llvm_memcpy_p0i8_p0i8_i32: 'memcpy',
llvm_memcpy_p0i8_p0i8_i64: 'memcpy',
+ memmove__sig: 'viii',
+ memmove__asm: true,
memmove__deps: ['memcpy'],
- memmove: function(dest, src, num, align) {
- if (src < dest && dest < src + num) {
- // Copy backwards in a safe manner
- src += num;
- dest += num;
- while (num--) {
- dest--;
- src--;
- {{{ makeCopyValues('dest', 'src', 1, 'null', null, 1) }}};
+ memmove: function(dest, src, num) {
+ dest = dest|0; src = src|0; num = num|0;
+ if ((src|0 < (dest|0)) & (dest|0 < ((src + num)|0))) {
+ // Unlikely case: Copy backwards in a safe manner
+ src = (src + num)|0;
+ dest = (dest + num)|0;
+ while (num|0 > 0) {
+ dest = (dest - 1)|0;
+ src = (src - 1)|0;
+ num = (num - 1)|0;
+ {{{ makeSetValueAsm('dest', 0, makeGetValueAsm('src', 0, 'i8'), 'i8') }}};
}
} else {
_memcpy(dest, src, num);