Bug 893364: in asm.js mode, correctly compute ranges for add and sub;

This commit is contained in:
Benjamin Bouvier 2013-07-15 14:41:36 -07:00
parent 104a165a17
commit 403eebae36
2 changed files with 20 additions and 0 deletions

View File

@ -917,6 +917,9 @@ MAdd::computeRange()
Range right(getOperand(1));
Range *next = Range::add(&left, &right);
setRange(next);
if (isTruncated() && !range()->isInt32())
setRange(new Range(INT32_MIN, INT32_MAX));
}
void
@ -928,6 +931,9 @@ MSub::computeRange()
Range right(getOperand(1));
Range *next = Range::sub(&left, &right);
setRange(next);
if (isTruncated() && !range()->isInt32())
setRange(new Range(INT32_MIN, INT32_MAX));
}
void

View File

@ -0,0 +1,14 @@
function m()
{
"use asm";
function f()
{
var x = 0;
var y = 0;
x = (((0x77777777 - 0xcccccccc) | 0) % -1) | 0;
y = (((0x7FFFFFFF + 0x7FFFFFFF) | 0) % -1) | 0;
return (x+y)|0;
}
return f;
}
assertEq(m()(), 0)