michael@0: michael@0: /* Handle recompilation of arithmetic operations, and on-stack int -> double conversion. */ michael@0: michael@0: function add(x, y) michael@0: { michael@0: var z = x + y; michael@0: assertEq(z, 2147483732); michael@0: assertEq(z - 10, 2147483722); michael@0: } michael@0: add(0x7ffffff0, 100); michael@0: michael@0: function mul(x, y) michael@0: { michael@0: var z = x * y; michael@0: assertEq(z, 4294967264); michael@0: } michael@0: mul(0x7ffffff0, 2); michael@0: michael@0: function div1(x, y) michael@0: { michael@0: var z = x / y; michael@0: assertEq(z + 10, 20); michael@0: } michael@0: div1(100, 10); michael@0: michael@0: function div2(x, y) michael@0: { michael@0: var z = x / y; michael@0: assertEq(z + 10, 20.5); michael@0: } michael@0: div2(105, 10); michael@0: michael@0: function uncopy(x, y) michael@0: { michael@0: var q = x; michael@0: x += y; michael@0: q++; michael@0: assertEq(q, 2147483633); michael@0: assertEq(x, 2147483732); michael@0: } michael@0: uncopy(0x7ffffff0, 100); michael@0: michael@0: function addmore(x, y) michael@0: { michael@0: var q = (x + 10) + (x + y); michael@0: assertEq(q, 4294967374); michael@0: x = q; michael@0: } michael@0: addmore(0x7ffffff0, 100);