diff options
-rw-r--r-- | src/parseTools.js | 2 | ||||
-rwxr-xr-x | tests/runner.py | 25 |
2 files changed, 26 insertions, 1 deletions
diff --git a/src/parseTools.js b/src/parseTools.js index b401c1a5..5a92335e 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -542,7 +542,7 @@ function splitI64(value) { // be slightly higher than expected. And if we get 4294967296, that will turn into a 0 if put into a // HEAP32 or |0'd, etc. if (legalizedI64s) { - return [value + '>>>0', 'Math.min(Math.floor(' + value + '/4294967296), 4294967295)']; + return [value + '>>>0', 'Math.min(Math.floor((' + value + ')/4294967296), 4294967295)']; } else { return makeInlineCalculation(makeI64('VALUE>>>0', 'Math.min(Math.floor(VALUE/4294967296), 4294967295)'), value, 'tempBigIntP'); } diff --git a/tests/runner.py b/tests/runner.py index 13679871..3d27d2c2 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -653,6 +653,31 @@ if 'benchmark' not in str(sys.argv) and 'sanity' not in str(sys.argv): self.do_run(src, '*1*\n*0*\n*0*\n') + def test_i64_b(self): + if Settings.USE_TYPED_ARRAYS != 2: return self.skip('full i64 stuff only in ta2') + + src = r''' + #include <stdio.h> + #include <sys/time.h> + + typedef long long int64; + + #define PRMJ_USEC_PER_SEC 1000000L + + int main(int argc, char * argv[]) { + int64 sec = 1329409675 + argc; + int64 usec = 2329509675; + int64 mul = int64(sec) * PRMJ_USEC_PER_SEC; + int64 add = mul + int64(usec); + int add_low = add; + int add_high = add >> 32; + printf("*%lld,%lld,%u,%u*\n", mul, add, add_low, add_high); + return 0; + } + ''' + + self.do_run(src, '*1329409676000000,1329412005509675,3663280683,309527*\n') + def test_unaligned(self): if Settings.QUANTUM_SIZE == 1: return self.skip('No meaning to unaligned addresses in q1') |