diff options
-rw-r--r-- | src/library.js | 2 | ||||
-rw-r--r-- | src/parseTools.js | 2 | ||||
-rw-r--r-- | tests/runner.py | 5 |
3 files changed, 5 insertions, 4 deletions
diff --git a/src/library.js b/src/library.js index 4bb74001..624e8550 100644 --- a/src/library.js +++ b/src/library.js @@ -2209,7 +2209,7 @@ LibraryManager.library = { } else if (type == 'i64') { ret = [{{{ makeGetValue('varargs', 'argIndex', 'i32', undefined, undefined, true) }}}, {{{ makeGetValue('varargs', 'argIndex+4', 'i32', undefined, undefined, true) }}}]; - ret = ret[0] + ret[1]*Math.pow(2, 32); // XXX - loss of precision + ret = unSign(ret[0], 32) + unSign(ret[1], 32)*Math.pow(2, 32); // XXX - loss of precision #endif } else { ret = {{{ makeGetValue('varargs', 'argIndex', 'i32', undefined, undefined, true) }}}; diff --git a/src/parseTools.js b/src/parseTools.js index 7fde34fb..39e76307 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -581,7 +581,7 @@ function parseI64Constant(str) { } function subtract(v, w) { // v -= w. we assume v >= w - while (v.length > w.length) w.push(0); + while (v.length > w.length) w.splice(0, 0, 0); for (var i = 0; i < v.length; i++) { v[i] -= w[i]; if (v[i] < 0) { diff --git a/tests/runner.py b/tests/runner.py index 002d9376..36c86bb7 100644 --- a/tests/runner.py +++ b/tests/runner.py @@ -365,6 +365,7 @@ if 'benchmark' not in str(sys.argv): self.do_run(src, output, force_c=True) def test_i64(self): + #for i64_mode in []: for i64_mode in [0,1]: if i64_mode == 0 and Settings.USE_TYPED_ARRAYS != 0: continue # Typed arrays truncate i64 Settings.I64_MODE = i64_mode @@ -422,7 +423,7 @@ if 'benchmark' not in str(sys.argv): printf("*%Ld*\n", returner2(30)); int64_t maxx = -1ULL; - //printf("*%Ld*\n", maxx); + printf("*%Lu*\n", maxx); // Make sure params are not modified if they shouldn't be int64_t t = 123; @@ -435,7 +436,7 @@ if 'benchmark' not in str(sys.argv): return 0; } ''' - self.do_run(src, '*1311918518731868200\n0,0,0,1,1\n1,0,1,0,1*\n*245127260211081*\n*245127260209443*\n' + + self.do_run(src, '*1311918518731868200\n0,0,0,1,1\n1,0,1,0,1*\n*245127260211081*\n*245127260209443*\n*18446744073709552000*\n' + 'm1: 127\n*123*\n*127*\n') |