diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-08-29 16:27:19 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-08-29 16:27:19 -0700 |
commit | 2d206b313f2c2292f8b365ac22132d4d13af391e (patch) | |
tree | 5138a2c65bada89bd7922f95e4ea9df695e44bef | |
parent | ffc362f182bffb1f355508847da3f1074efecdd4 (diff) |
fix extension of non-i32s to >i32s
-rw-r--r-- | src/analyzer.js | 2 | ||||
-rwxr-xr-x | tests/runner.py | 16 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/analyzer.js b/src/analyzer.js index 9bf93c86..69b811f0 100644 --- a/src/analyzer.js +++ b/src/analyzer.js @@ -561,7 +561,7 @@ function analyzer(data, sidePass) { var whole = shifts >= 0 ? Math.floor(shifts/32) : Math.ceil(shifts/32); var fraction = Math.abs(shifts % 32); if (signed) { - var signedFill = '((' + sourceElements[sourceElements.length-1].ident + '|0) < 0 ? -1 : 0)'; + var signedFill = '(' + makeSignOp(sourceElements[sourceElements.length-1].ident, 'i' + sourceElements[sourceElements.length-1].bits, 're', 1, 1) + ' < 0 ? -1 : 0)'; var signedKeepAlive = { intertype: 'value', ident: sourceElements[sourceElements.length-1].ident, type: 'i32' }; } for (var j = 0; j < targetElements.length; j++) { diff --git a/tests/runner.py b/tests/runner.py index 563f6bc1..18c9bc0f 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -953,6 +953,22 @@ m_divisor is 1091269979 ''' self.do_run(src, 'zero 2, 104', ['hallo']) + def test_i64_i16(self): + if Settings.USE_TYPED_ARRAYS != 2: return self.skip('full i64 stuff only in ta2') + + src = r''' + #include <stdio.h> + int main(int argc, char ** argv){ + int y=-133; + __int64_t x= ((__int64_t)((short)(y)))*(100 + argc); + if(x>0) + printf(">0\n"); + else + printf("<=0\n"); + } + ''' + self.do_run(src, '<=0') + def test_i32_mul_precise(self): if self.emcc_args == None: return self.skip('needs ta2') |