aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-08-29 16:27:19 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-08-29 16:27:19 -0700
commit2d206b313f2c2292f8b365ac22132d4d13af391e (patch)
tree5138a2c65bada89bd7922f95e4ea9df695e44bef
parentffc362f182bffb1f355508847da3f1074efecdd4 (diff)
fix extension of non-i32s to >i32s
-rw-r--r--src/analyzer.js2
-rwxr-xr-xtests/runner.py16
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')