summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/assembler/MacroAssemblerSH4.h
diff options
context:
space:
mode:
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>2013-11-04 18:21:37 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-20 15:02:14 +0100
commit966168b00e96a42391090037bd1fc1af13634dea (patch)
tree98891462a3fc2f7dfa5690663a4d31a90c97deee /Source/JavaScriptCore/assembler/MacroAssemblerSH4.h
parentcd3b33ac489a22c23d2d0a94c8df2b87a8b34eb9 (diff)
downloadqtwebkit-966168b00e96a42391090037bd1fc1af13634dea.tar.gz
[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 <jbriance@cisco.com> 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 <allan.jensen@digia.com>
Diffstat (limited to 'Source/JavaScriptCore/assembler/MacroAssemblerSH4.h')
-rw-r--r--Source/JavaScriptCore/assembler/MacroAssemblerSH4.h25
1 files changed, 10 insertions, 15 deletions
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)