Changeset 201170 in webkit


Ignore:
Timestamp:
May 19, 2016 10:27:11 AM (8 years ago)
Author:
commit-queue@webkit.org
Message:

JSC: DFG::SpeculativeJIT::compile special case for MIPS for PutByValWithThis
https://bugs.webkit.org/show_bug.cgi?id=157741

Patch by Guillaume Emont <guijemont@igalia.com> on 2016-05-19
Reviewed by Saam Barati.

The PutByValWithThis case needs a special case for MIPS because we
don't have enough registers. The special case needs to be different
from the x86 one because we have a different ABI.

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

Location:
trunk/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r201168 r201170  
     12016-05-19  Guillaume Emont  <guijemont@igalia.com>
     2
     3        JSC: DFG::SpeculativeJIT::compile special case for MIPS for PutByValWithThis
     4        https://bugs.webkit.org/show_bug.cgi?id=157741
     5
     6        Reviewed by Saam Barati.
     7
     8        The PutByValWithThis case needs a special case for MIPS because we
     9        don't have enough registers. The special case needs to be different
     10        from the x86 one because we have a different ABI.
     11
     12        * dfg/DFGSpeculativeJIT32_64.cpp:
     13        (JSC::DFG::SpeculativeJIT::compile):
     14
    1152016-05-19  Brian Burg  <bburg@apple.com>
    216
  • trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp

    r201049 r201170  
    29252925        appendCall(m_jit.isStrictModeFor(node->origin.semantic) ? operationPutByValWithThisStrict : operationPutByValWithThis);
    29262926        m_jit.exceptionCheck();
     2927#elif CPU(MIPS)
     2928        // We don't have enough registers on MIPS either but the ABI is a little different.
     2929        unsigned index = 4;
     2930        m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
     2931        {
     2932            JSValueOperand base(this, m_jit.graph().varArgChild(node, 0));
     2933            GPRReg baseTag = base.tagGPR();
     2934            GPRReg basePayload = base.payloadGPR();
     2935
     2936            JSValueOperand thisValue(this, m_jit.graph().varArgChild(node, 1));
     2937            GPRReg thisValueTag = thisValue.tagGPR();
     2938            GPRReg thisValuePayload = thisValue.payloadGPR();
     2939
     2940            JSValueOperand property(this, m_jit.graph().varArgChild(node, 2));
     2941            GPRReg propertyTag = property.tagGPR();
     2942            GPRReg propertyPayload = property.payloadGPR();
     2943
     2944            // for operationPutByValWithThis[Strict](), base is a 64 bits
     2945            // argument, so it should be double word aligned on the stack.
     2946            // This requirement still applies when it's in argument registers
     2947            // instead of on the stack.
     2948            m_jit.move(basePayload, GPRInfo::argumentGPR2);
     2949            m_jit.move(baseTag, GPRInfo::argumentGPR3);
     2950
     2951            m_jit.poke(thisValuePayload, index++);
     2952            m_jit.poke(thisValueTag, index++);
     2953
     2954            m_jit.poke(propertyPayload, index++);
     2955            m_jit.poke(propertyTag, index++);
     2956
     2957            flushRegisters();
     2958        }
     2959
     2960        JSValueOperand value(this, m_jit.graph().varArgChild(node, 3));
     2961        GPRReg valueTag = value.tagGPR();
     2962        GPRReg valuePayload = value.payloadGPR();
     2963        m_jit.poke(valuePayload, index++);
     2964        m_jit.poke(valueTag, index++);
     2965
     2966        flushRegisters();
     2967        appendCall(m_jit.isStrictModeFor(node->origin.semantic) ? operationPutByValWithThisStrict : operationPutByValWithThis);
     2968        m_jit.exceptionCheck();
    29272969#else
    29282970        static_assert(GPRInfo::numberOfRegisters >= 8, "We are assuming we have enough registers to make this call without incrementally setting up the arguments.");
Note: See TracChangeset for help on using the changeset viewer.