Changeset 201170 in webkit
- Timestamp:
- May 19, 2016 10:27:11 AM (8 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r201168 r201170 1 2016-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 1 15 2016-05-19 Brian Burg <bburg@apple.com> 2 16 -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
r201049 r201170 2925 2925 appendCall(m_jit.isStrictModeFor(node->origin.semantic) ? operationPutByValWithThisStrict : operationPutByValWithThis); 2926 2926 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(); 2927 2969 #else 2928 2970 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.