Summary: | Opcodes should use eax as their destination register whenever possible | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | Cameron Zwarich (cpst) <zwarich> | ||||||
Component: | JavaScriptCore | Assignee: | Cameron Zwarich (cpst) <zwarich> | ||||||
Status: | RESOLVED FIXED | ||||||||
Severity: | Normal | ||||||||
Priority: | P2 | ||||||||
Version: | 528+ (Nightly build) | ||||||||
Hardware: | All | ||||||||
OS: | All | ||||||||
Attachments: |
|
Description
Cameron Zwarich (cpst)
2008-10-30 13:15:43 PDT
Created attachment 24778 [details]
Proposed patch
Created attachment 24779 [details]
Revised proposed patch
I forgot to remove one of the explicit uses of eax. Here is a new patch.
Comment on attachment 24779 [details]
Revised proposed patch
r=me
Comment on attachment 24778 [details] Proposed patch r=me > Index: ChangeLog > =================================================================== > --- ChangeLog (revision 38005) > +++ ChangeLog (working copy) > @@ -1,3 +1,17 @@ > +2008-10-30 Cameron Zwarich <zwarich@apple.com> > + > + Reviewed by NOBODY (OOPS!). > + > + Bug 21985: Opcodes should use eax as their destination register whenever possible > + <https://bugs.webkit.org/show_bug.cgi?id=21985> > + > + Change more opcodes to use eax as the register for their final result, > + and change calls to emitPutResult() that pass eax to rely on the default > + value of eax. > + > + * VM/CTI.cpp: > + (JSC::CTI::privateCompileMainPass): > + > 2008-10-30 Alp Toker <alp@nuanti.com> > > Build fix attempt for older gcc on the trunk-mac-intel build bot > Index: VM/CTI.cpp > =================================================================== > --- VM/CTI.cpp (revision 38001) > +++ VM/CTI.cpp (working copy) > @@ -1011,10 +1011,10 @@ void CTI::privateCompileMainPass() > case op_mov: { > unsigned src = instruction[i + 2].u.operand; > if (isConstant(src)) > - m_jit.movl_i32r(asInteger(getConstant(m_callFrame, src)), X86::edx); > + m_jit.movl_i32r(asInteger(getConstant(m_callFrame, src)), X86::eax); > else > - emitGetArg(src, X86::edx); > - emitPutResult(instruction[i + 1].u.operand, X86::edx); > + emitGetArg(src, X86::eax); > + emitPutResult(instruction[i + 1].u.operand); > i += 3; > break; > } > @@ -1071,7 +1071,7 @@ void CTI::privateCompileMainPass() > emitJumpSlowCaseIfNotImmNum(X86::eax, i); > m_jit.addl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), X86::eax); > m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJo(), i)); > - emitPutResult(srcDst, X86::eax); > + emitPutResult(srcDst); > i += 2; > break; > } > @@ -1305,7 +1305,7 @@ void CTI::privateCompileMainPass() > JSVariableObject* globalObject = static_cast<JSVariableObject*>(instruction[i + 2].u.jsCell); > m_jit.movl_i32r(asInteger(globalObject), X86::eax); > emitGetVariableObjectRegister(X86::eax, instruction[i + 3].u.operand, X86::eax); > - emitPutResult(instruction[i + 1].u.operand, X86::eax); > + emitPutResult(instruction[i + 1].u.operand); > i += 4; > break; > } > @@ -1407,8 +1407,8 @@ void CTI::privateCompileMainPass() > X86Assembler::JmpSrc isObject = m_jit.emitUnlinkedJe(); > > m_jit.link(isImmediate, m_jit.label()); > - emitGetArg(instruction[i + 2].u.operand, X86::ecx); > - emitPutResult(instruction[i + 1].u.operand, X86::ecx); > + emitGetArg(instruction[i + 2].u.operand, X86::eax); > + emitPutResult(instruction[i + 1].u.operand, X86::eax); > m_jit.link(isObject, m_jit.label()); > > i += 3; > @@ -1603,7 +1603,7 @@ void CTI::privateCompileMainPass() > emitJumpSlowCaseIfNotImmNum(X86::eax, i); > m_jit.subl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), X86::eax); > m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJo(), i)); > - emitPutResult(srcDst, X86::eax); > + emitPutResult(srcDst); > i += 2; > break; > } |