mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 824863 - Fix regalloc bug in JM ionCompileHelper. r=bhackett
This commit is contained in:
parent
77ba1c307d
commit
4ae98f0d6e
53
js/src/jit-test/tests/ion/bug824863.js
Normal file
53
js/src/jit-test/tests/ion/bug824863.js
Normal file
@ -0,0 +1,53 @@
|
||||
Module = {};
|
||||
var Runtime = {
|
||||
alignMemory: function alignMemory(size, quantum) {
|
||||
return Math.ceil((size) / (quantum ? quantum : 4)) * (quantum ? quantum : 4);
|
||||
},
|
||||
}
|
||||
function assert(condition, text) {
|
||||
throw text;
|
||||
}
|
||||
STACK_ROOT = STACKTOP = Runtime.alignMemory(1);
|
||||
function _main() {
|
||||
var __stackBase__ = STACKTOP;
|
||||
var label;
|
||||
label = 2;
|
||||
while (1) {
|
||||
switch (label) {
|
||||
case 2:
|
||||
var $f = __stackBase__;
|
||||
var $1 = __stackBase__ + 12;
|
||||
var $2 = __stackBase__ + 24;
|
||||
var $3 = $f | 0;
|
||||
var $4 = $f + 4 | 0;
|
||||
var $5 = $f + 8 | 0;
|
||||
var $_0 = $1 | 0;
|
||||
var $_1 = $1 + 4 | 0;
|
||||
var $_2 = $1 + 8 | 0;
|
||||
var $j_012 = 0;
|
||||
label = 4;
|
||||
break;
|
||||
case 4:
|
||||
assertEq($_2, 24);
|
||||
if (($j_012 | 0) != 110) {
|
||||
var $j_012 = $j_012 + 1;
|
||||
break;
|
||||
}
|
||||
var $23 = $i_014 + 1 | 0;
|
||||
if (($23 | 0) != 110) {
|
||||
var $i_014 = $23;
|
||||
var $j_012 = 0;
|
||||
label = 4;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
assert(0, "bad label: " + label);
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
_main(0, [], 0);
|
||||
assertEq(0, 1);
|
||||
} catch(e) {
|
||||
assertEq(e, "bad label: 4");
|
||||
}
|
@ -4025,6 +4025,12 @@ mjit::Compiler::ionCompileHelper()
|
||||
|
||||
void *ionScriptAddress = &script_->ion;
|
||||
|
||||
#ifdef JS_CPU_X64
|
||||
// Allocate a temp register. Note that we have to do this before calling
|
||||
// syncExitAndJump below.
|
||||
RegisterID reg = frame.allocReg();
|
||||
#endif
|
||||
|
||||
InternalCompileTrigger trigger;
|
||||
trigger.pc = PC;
|
||||
trigger.stubLabel = stubcc.syncExitAndJump(Uses(0));
|
||||
@ -4052,7 +4058,6 @@ mjit::Compiler::ionCompileHelper()
|
||||
Imm32(0));
|
||||
#elif defined(JS_CPU_X64)
|
||||
/* Handle processors that can't load from absolute addresses. */
|
||||
RegisterID reg = frame.allocReg();
|
||||
masm.move(ImmPtr(useCountAddress), reg);
|
||||
trigger.inlineJump = masm.branch32(Assembler::GreaterThanOrEqual,
|
||||
Address(reg),
|
||||
|
Loading…
Reference in New Issue
Block a user