From 966168b00e96a42391090037bd1fc1af13634dea Mon Sep 17 00:00:00 2001 From: "commit-queue@webkit.org" Date: Mon, 4 Nov 2013 18:21:37 +0000 Subject: [sh4] Refactor jumps in baseline JIT to return label after the jump. https://bugs.webkit.org/show_bug.cgi?id=123734 Patch by Julien Brianceau on 2013-11-04 Reviewed by Michael Saboff. Current implementation of jumps in sh4 baseline JIT returns a label on the jump itself and not after it. This is not correct and leads to issues like infinite loop the DFG (https://bugs.webkit.org/show_bug.cgi?id=122597 for instance). This refactor fixes this and also simplifies the link and relink procedures for sh4 jumps. * assembler/MacroAssemblerSH4.h: (JSC::MacroAssemblerSH4::branchDouble): (JSC::MacroAssemblerSH4::branchTrue): (JSC::MacroAssemblerSH4::branchFalse): * assembler/SH4Assembler.h: (JSC::SH4Assembler::jmp): (JSC::SH4Assembler::extraInstrForBranch): (JSC::SH4Assembler::jne): (JSC::SH4Assembler::je): (JSC::SH4Assembler::bra): (JSC::SH4Assembler::linkJump): (JSC::SH4Assembler::relinkJump): Change-Id: Ia31b326a1f3c41e9c913e513563ff1e6b8f8e55e git-svn-id: http://svn.webkit.org/repository/webkit/trunk@158580 268f45cc-cd09-0410-ab3c-d52691b4dbfc Reviewed-by: Allan Sandfeld Jensen --- .../JavaScriptCore/assembler/MacroAssemblerSH4.h | 25 +++++++++------------- 1 file changed, 10 insertions(+), 15 deletions(-) (limited to 'Source/JavaScriptCore/assembler/MacroAssemblerSH4.h') diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h b/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h index ad5acfaeb..c2293ed14 100644 --- a/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h +++ b/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h @@ -1452,10 +1452,9 @@ public: m_assembler.dcmppeq(right, right); takeBranch.append(Jump(m_assembler.jne(), SH4Assembler::JumpNear)); m_assembler.dcmppeq(left, right); - Jump m_jump = Jump(m_assembler.je()); + m_assembler.branch(BF_OPCODE, 2); takeBranch.link(this); - m_assembler.extraInstrForBranch(scratchReg3); - return m_jump; + return Jump(m_assembler.extraInstrForBranch(scratchReg3)); } if (cond == DoubleGreaterThanOrUnordered) { @@ -1466,10 +1465,9 @@ public: m_assembler.dcmppeq(right, right); takeBranch.append(Jump(m_assembler.jne(), SH4Assembler::JumpNear)); m_assembler.dcmppgt(right, left); - Jump m_jump = Jump(m_assembler.je()); + m_assembler.branch(BF_OPCODE, 2); takeBranch.link(this); - m_assembler.extraInstrForBranch(scratchReg3); - return m_jump; + return Jump(m_assembler.extraInstrForBranch(scratchReg3)); } if (cond == DoubleGreaterThanOrEqualOrUnordered) { @@ -1485,10 +1483,9 @@ public: m_assembler.dcmppeq(right, right); takeBranch.append(Jump(m_assembler.jne(), SH4Assembler::JumpNear)); m_assembler.dcmppgt(left, right); - Jump m_jump = Jump(m_assembler.je()); + m_assembler.branch(BF_OPCODE, 2); takeBranch.link(this); - m_assembler.extraInstrForBranch(scratchReg3); - return m_jump; + return Jump(m_assembler.extraInstrForBranch(scratchReg3)); } if (cond == DoubleLessThanOrEqualOrUnordered) { @@ -1504,17 +1501,15 @@ public: Jump branchTrue() { m_assembler.ensureSpace(m_assembler.maxInstructionSize + 6, sizeof(uint32_t)); - Jump m_jump = Jump(m_assembler.je()); - m_assembler.extraInstrForBranch(scratchReg3); - return m_jump; + m_assembler.branch(BF_OPCODE, 2); + return Jump(m_assembler.extraInstrForBranch(scratchReg3)); } Jump branchFalse() { m_assembler.ensureSpace(m_assembler.maxInstructionSize + 6, sizeof(uint32_t)); - Jump m_jump = Jump(m_assembler.jne()); - m_assembler.extraInstrForBranch(scratchReg3); - return m_jump; + m_assembler.branch(BT_OPCODE, 2); + return Jump(m_assembler.extraInstrForBranch(scratchReg3)); } Jump branch32(RelationalCondition cond, BaseIndex left, TrustedImm32 right) -- cgit v1.2.1