diff options
-rw-r--r-- | src/parseTools.js | 2 | ||||
-rwxr-xr-x | tests/runner.py | 26 |
2 files changed, 27 insertions, 1 deletions
diff --git a/src/parseTools.js b/src/parseTools.js index 7387bf31..4a76a9a2 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -1750,7 +1750,7 @@ function processMathop(item) { } } } - case 'uitofp': case 'sitofp': return low1 + ' + ' + high1 + '*4294967296'; + case 'uitofp': case 'sitofp': return RuntimeGenerator.makeBigInt(low1, high1, op[0] == 'u'); case 'fptoui': case 'fptosi': return finish(splitI64(idents[0])); case 'icmp': { switch (variant) { diff --git a/tests/runner.py b/tests/runner.py index 08dec7b3..1480afe7 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -1083,6 +1083,32 @@ m_divisor is 1091269979 ''' self.do_run(src, '<=0') + def test_i64_qdouble(self): + if Settings.USE_TYPED_ARRAYS != 2: return self.skip('full i64 stuff only in ta2') + + src = r''' + #include <stdio.h> + typedef long long qint64; /* 64 bit signed */ + typedef double qreal; + + + int main(int argc, char **argv) + { + qreal c = 111; + qint64 d = -111 + (argc - 1); + c += d; + if (c < -1 || c > 1) + { + printf("Failed!\n"); + } + else + { + printf("Succeeded!\n"); + } + }; + ''' + self.do_run(src, 'Succeeded!') + def test_i32_mul_precise(self): if self.emcc_args == None: return self.skip('needs ta2') |