WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
122903.patch (text/plain), 22.28 KB, created by
Michael Saboff
on 2013-10-16 16:03:46 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Michael Saboff
Created:
2013-10-16 16:03:46 PDT
Size:
22.28 KB
patch
obsolete
>Index: Source/JavaScriptCore/ChangeLog >=================================================================== >--- Source/JavaScriptCore/ChangeLog (revision 157530) >+++ Source/JavaScriptCore/ChangeLog (working copy) >@@ -1,3 +1,29 @@ >+2013-10-16 Michael Saboff <msaboff@apple.com> >+ >+ transition void cti_op_put_by_val* stubs to JIT operations >+ https://bugs.webkit.org/show_bug.cgi?id=122903 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Transitioned cti_op_put_by_val and cti_op_put_by_val_generic to operationPutByVal and >+ operationPutByValGeneric. >+ >+ * jit/CCallHelpers.h: >+ (JSC::CCallHelpers::setupArgumentsWithExecState): >+ * jit/JIT.h: >+ * jit/JITInlines.h: >+ (JSC::JIT::callOperation): >+ * jit/JITOperations.cpp: >+ * jit/JITOperations.h: >+ * jit/JITPropertyAccess.cpp: >+ (JSC::JIT::emitSlow_op_put_by_val): >+ (JSC::JIT::privateCompilePutByVal): >+ * jit/JITPropertyAccess32_64.cpp: >+ (JSC::JIT::emitSlow_op_put_by_val): >+ * jit/JITStubs.cpp: >+ * jit/JITStubs.h: >+ * jit/JSInterfaceJIT.h: >+ > 2013-10-16 Julien Brianceau <jbriance@cisco.com> > > Remove unused JIT::restoreArgumentReferenceForTrampoline function. >Index: Source/JavaScriptCore/jit/CCallHelpers.h >=================================================================== >--- Source/JavaScriptCore/jit/CCallHelpers.h (revision 157530) >+++ Source/JavaScriptCore/jit/CCallHelpers.h (working copy) >@@ -401,7 +401,7 @@ public: > addCallArgument(arg4); > } > >-ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, GPRReg arg3, GPRReg arg4, GPRReg arg5) >+ ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, GPRReg arg3, GPRReg arg4, GPRReg arg5) > { > resetCallArguments(); > addCallArgument(GPRInfo::callFrameRegister); >@@ -456,6 +456,18 @@ ALWAYS_INLINE void setupArgumentsWithExe > addCallArgument(arg5); > } > >+ ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, GPRReg arg3, GPRReg arg4, GPRReg arg5, GPRReg arg6) >+ { >+ resetCallArguments(); >+ addCallArgument(GPRInfo::callFrameRegister); >+ addCallArgument(arg1); >+ addCallArgument(arg2); >+ addCallArgument(arg3); >+ addCallArgument(arg4); >+ addCallArgument(arg5); >+ addCallArgument(arg6); >+ } >+ > ALWAYS_INLINE void setupArgumentsWithExecState(FPRReg arg1, GPRReg arg2) > { > resetCallArguments(); >@@ -1231,6 +1243,14 @@ ALWAYS_INLINE void setupArgumentsWithExe > setupArgumentsWithExecState(arg1, arg2, arg3); > } > >+ ALWAYS_INLINE void setupArgumentsWithExecState(GRPReg arg1, GPRReg arg2, GPRReg arg3, GPRReg arg4, GPRReg arg5 GPRReg arg6) >+ { >+ poke(arg6, POKE_ARGUMENT_OFFSET + 2); >+ poke(arg5, POKE_ARGUMENT_OFFSET + 1); >+ poke(arg4, POKE_ARGUMENT_OFFSET); >+ setupArgumentsWithExecState(arg1, arg2, arg3); >+ } >+ > ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, TrustedImm32 arg3, GPRReg arg4, GPRReg arg5, TrustedImm32 arg6) > { > poke(arg6, POKE_ARGUMENT_OFFSET + 2); >@@ -1254,6 +1274,23 @@ ALWAYS_INLINE void setupArgumentsWithExe > setupArgumentsWithExecState(arg1, arg2, arg3); > } > >+ ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, GPRReg arg2, GPRReg arg3, GPRReg arg4, GPRReg arg5 GPRReg arg6, GRPReg arg7) >+ { >+ poke(arg7, POKE_ARGUMENT_OFFSET + 3); >+ poke(arg6, POKE_ARGUMENT_OFFSET + 2); >+ poke(arg5, POKE_ARGUMENT_OFFSET + 1); >+ poke(arg4, POKE_ARGUMENT_OFFSET); >+ setupArgumentsWithExecState(arg1, arg2, arg3); >+ } >+ >+ ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, TrustedImm32 arg3, GPRReg arg4, GPRReg arg5 GPRReg arg6, GRPReg arg7) >+ { >+ poke(arg7, POKE_ARGUMENT_OFFSET + 3); >+ poke(arg6, POKE_ARGUMENT_OFFSET + 2); >+ poke(arg5, POKE_ARGUMENT_OFFSET + 1); >+ poke(arg4, POKE_ARGUMENT_OFFSET); >+ setupArgumentsWithExecState(arg1, arg2, arg3); >+ } > #endif // NUMBER_OF_ARGUMENT_REGISTERS == 4 > > #if NUMBER_OF_ARGUMENT_REGISTERS >= 5 >Index: Source/JavaScriptCore/jit/JIT.h >=================================================================== >--- Source/JavaScriptCore/jit/JIT.h (revision 157530) >+++ Source/JavaScriptCore/jit/JIT.h (working copy) >@@ -803,6 +803,7 @@ namespace JSC { > #else > MacroAssembler::Call callOperation(V_JITOperation_EJJI, RegisterID, RegisterID, RegisterID, RegisterID, StringImpl*); > #endif >+ MacroAssembler::Call callOperation(V_JITOperation_EJJJ, RegisterID, RegisterID, RegisterID); > MacroAssembler::Call callOperation(V_JITOperation_EJZJ, RegisterID, int32_t, RegisterID); > MacroAssembler::Call callOperation(V_JITOperation_EJZ, RegisterID, int32_t); > MacroAssembler::Call callOperation(V_JITOperation_EPc, Instruction*); >@@ -821,6 +822,7 @@ namespace JSC { > MacroAssembler::Call callOperation(S_JITOperation_EJJ, RegisterID, RegisterID, RegisterID, RegisterID); > MacroAssembler::Call callOperation(V_JITOperation_EIdJZ, const Identifier*, RegisterID, RegisterID, int32_t); > MacroAssembler::Call callOperation(V_JITOperation_EJ, RegisterID, RegisterID); >+ MacroAssembler::Call callOperation(V_JITOperation_EJJJ, RegisterID, RegisterID, RegisterID, RegisterID, RegisterID, RegisterID); > MacroAssembler::Call callOperation(V_JITOperation_EJZ, RegisterID, RegisterID, int32_t); > MacroAssembler::Call callOperation(V_JITOperation_EJZJ, RegisterID, RegisterID, int32_t, RegisterID, RegisterID); > #endif >Index: Source/JavaScriptCore/jit/JITInlines.h >=================================================================== >--- Source/JavaScriptCore/jit/JITInlines.h (revision 157530) >+++ Source/JavaScriptCore/jit/JITInlines.h (working copy) >@@ -206,6 +206,12 @@ ALWAYS_INLINE MacroAssembler::Call JIT:: > return appendCallWithExceptionCheck(operation); > } > >+ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(V_JITOperation_EJJJ operation, RegisterID regOp1, RegisterID regOp2, RegisterID regOp3) >+{ >+ setupArgumentsWithExecState(regOp1, regOp2, regOp3); >+ return appendCallWithExceptionCheck(operation); >+} >+ > ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(JIT::WithProfileTag, J_JITOperation_EJI operation, int dst, GPRReg arg1, StringImpl* uid) > { > setupArgumentsWithExecState(arg1, TrustedImmPtr(uid)); >@@ -500,6 +506,12 @@ ALWAYS_INLINE MacroAssembler::Call JIT:: > return appendCallWithExceptionCheck(operation); > } > >+ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(V_JITOperation_EJJJ operation, RegisterID regOp1Payload, RegisterID regOp1Tag, RegisterID regOp2Payload, RegisterID regOp2Tag, RegisterID regOp3Payload, RegisterID regOp3Tag) >+{ >+ setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG regOp1Payload, regOp1Tag, SH4_32BIT_DUMMY_ARG regOp2Payload, regOp2Tag, regOp3Payload, regOp3Tag); >+ return appendCallWithExceptionCheck(operation); >+} >+ > ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(V_JITOperation_EJZ operation, RegisterID regOp1Tag, RegisterID regOp1Payload, int32_t op2) > { > setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG regOp1Payload, regOp1Tag, TrustedImm32(op2)); >Index: Source/JavaScriptCore/jit/JITOperations.cpp >=================================================================== >--- Source/JavaScriptCore/jit/JITOperations.cpp (revision 157530) >+++ Source/JavaScriptCore/jit/JITOperations.cpp (working copy) >@@ -37,6 +37,7 @@ > #include "Error.h" > #include "GetterSetter.h" > #include "HostCallReturnValue.h" >+#include "JIT.h" > #include "JITOperationWrappers.h" > #include "JITToDFGDeferredCompilationCallback.h" > #include "JSGlobalObjectFunctions.h" >@@ -46,6 +47,7 @@ > #include "ObjectConstructor.h" > #include "Operations.h" > #include "Repatch.h" >+#include "RepatchBuffer.h" > > namespace JSC { > >@@ -471,6 +473,89 @@ void JIT_OPERATION operationReallocateSt > base->putDirect(vm, offset, JSValue::decode(value)); > } > >+static void putByVal(CallFrame* callFrame, JSValue baseValue, JSValue subscript, JSValue value) >+{ >+ if (LIKELY(subscript.isUInt32())) { >+ uint32_t i = subscript.asUInt32(); >+ if (baseValue.isObject()) { >+ JSObject* object = asObject(baseValue); >+ if (object->canSetIndexQuickly(i)) >+ object->setIndexQuickly(callFrame->vm(), i, value); >+ else >+ object->methodTable()->putByIndex(object, callFrame, i, value, callFrame->codeBlock()->isStrictMode()); >+ } else >+ baseValue.putByIndex(callFrame, i, value, callFrame->codeBlock()->isStrictMode()); >+ } else if (isName(subscript)) { >+ PutPropertySlot slot(callFrame->codeBlock()->isStrictMode()); >+ baseValue.put(callFrame, jsCast<NameInstance*>(subscript.asCell())->privateName(), value, slot); >+ } else { >+ Identifier property(callFrame, subscript.toString(callFrame)->value(callFrame)); >+ if (!callFrame->vm().exception()) { // Don't put to an object if toString threw an exception. >+ PutPropertySlot slot(callFrame->codeBlock()->isStrictMode()); >+ baseValue.put(callFrame, property, value, slot); >+ } >+ } >+} >+ >+void JIT_OPERATION operationPutByVal(ExecState* exec, EncodedJSValue encodedBaseValue, EncodedJSValue encodedSubscript, EncodedJSValue encodedValue) >+{ >+ VM& vm = exec->vm(); >+ NativeCallFrameTracer tracer(&vm, exec); >+ >+ JSValue baseValue = JSValue::decode(encodedBaseValue); >+ JSValue subscript = JSValue::decode(encodedSubscript); >+ JSValue value = JSValue::decode(encodedValue); >+ >+ if (baseValue.isObject() && subscript.isInt32()) { >+ // See if it's worth optimizing at all. >+ JSObject* object = asObject(baseValue); >+ bool didOptimize = false; >+ >+ unsigned bytecodeOffset = exec->locationAsBytecodeOffset(); >+ ASSERT(bytecodeOffset); >+ ByValInfo& byValInfo = exec->codeBlock()->getByValInfo(bytecodeOffset - 1); >+ ASSERT(!byValInfo.stubRoutine); >+ >+ if (hasOptimizableIndexing(object->structure())) { >+ // Attempt to optimize. >+ JITArrayMode arrayMode = jitArrayModeForStructure(object->structure()); >+ if (arrayMode != byValInfo.arrayMode) { >+ JIT::compilePutByVal(&vm, exec->codeBlock(), &byValInfo, ReturnAddressPtr(OUR_RETURN_ADDRESS), arrayMode); >+ didOptimize = true; >+ } >+ } >+ >+ if (!didOptimize) { >+ // If we take slow path more than 10 times without patching then make sure we >+ // never make that mistake again. Or, if we failed to patch and we have some object >+ // that intercepts indexed get, then don't even wait until 10 times. For cases >+ // where we see non-index-intercepting objects, this gives 10 iterations worth of >+ // opportunity for us to observe that the get_by_val may be polymorphic. >+ if (++byValInfo.slowPathCount >= 10 >+ || object->structure()->typeInfo().interceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero()) { >+ // Don't ever try to optimize. >+ RepatchBuffer repatchBuffer(exec->codeBlock()); >+ repatchBuffer.relinkCallerToFunction(ReturnAddressPtr(OUR_RETURN_ADDRESS), FunctionPtr(operationPutByValGeneric)); >+ } >+ } >+ } >+ >+ putByVal(exec, baseValue, subscript, value); >+ >+} >+ >+void JIT_OPERATION operationPutByValGeneric(ExecState* exec, EncodedJSValue encodedBaseValue, EncodedJSValue encodedSubscript, EncodedJSValue encodedValue) >+{ >+ VM& vm = exec->vm(); >+ NativeCallFrameTracer tracer(&vm, exec); >+ >+ JSValue baseValue = JSValue::decode(encodedBaseValue); >+ JSValue subscript = JSValue::decode(encodedSubscript); >+ JSValue value = JSValue::decode(encodedValue); >+ >+ putByVal(exec, baseValue, subscript, value); >+} >+ > EncodedJSValue JIT_OPERATION operationCallEval(ExecState* execCallee) > { > CallFrame* callerFrame = execCallee->callerFrame(); >Index: Source/JavaScriptCore/jit/JITOperations.h >=================================================================== >--- Source/JavaScriptCore/jit/JITOperations.h (revision 157530) >+++ Source/JavaScriptCore/jit/JITOperations.h (working copy) >@@ -232,6 +232,8 @@ void JIT_OPERATION operationPutByIdNonSt > void JIT_OPERATION operationPutByIdDirectStrictBuildList(ExecState*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, StringImpl*) WTF_INTERNAL; > void JIT_OPERATION operationPutByIdDirectNonStrictBuildList(ExecState*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, StringImpl*) WTF_INTERNAL; > void JIT_OPERATION operationReallocateStorageAndFinishPut(ExecState*, JSObject*, Structure*, PropertyOffset, EncodedJSValue) WTF_INTERNAL; >+void JIT_OPERATION operationPutByVal(ExecState*, EncodedJSValue, EncodedJSValue, EncodedJSValue) WTF_INTERNAL; >+void JIT_OPERATION operationPutByValGeneric(ExecState*, EncodedJSValue, EncodedJSValue, EncodedJSValue) WTF_INTERNAL; > EncodedJSValue JIT_OPERATION operationCallEval(ExecState*) WTF_INTERNAL; > char* JIT_OPERATION operationVirtualCall(ExecState*) WTF_INTERNAL; > char* JIT_OPERATION operationLinkCall(ExecState*) WTF_INTERNAL; >Index: Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp >=================================================================== >--- Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp (revision 157530) >+++ Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp (working copy) >@@ -437,13 +437,32 @@ void JIT::emitSlow_op_put_by_val(Instruc > skipProfiling.link(this); > > Label slowPath = label(); >- >- JITStubCall stubPutByValCall(this, cti_op_put_by_val); >- stubPutByValCall.addArgument(base); >- stubPutByValCall.addArgument(property); >- stubPutByValCall.addArgument(value); >- Call call = stubPutByValCall.call(); >- >+ >+#if CPU(X86) >+ // FIXME: We only have 5 temp registers, but need 6 to make this call, therefore we materialize >+ // our own call. When we finish moving JSC to the C call stack, we'll get another register so >+ // we can use the normal case. >+ resetCallArguments(); >+ addCallArgument(GPRInfo::callFrameRegister); >+ emitLoad(base, regT0, regT1); >+ addCallArgument(regT1); >+ addCallArgument(regT0); >+ emitLoad(property, regT0, regT1); >+ addCallArgument(regT1); >+ addCallArgument(regT0); >+ emitLoad(value, regT0, regT1); >+ addCallArgument(regT1); >+ addCallArgument(regT0); >+ Call call = appendCallWithExceptionCheck(operationPutByVal); >+#else >+ // The register selection below is chosen to reduce register swapping on ARM. >+ // Swapping shouldn't happen on other platforms. >+ emitLoad(base, regT2, regT1); >+ emitLoad(property, regT3, regT0); >+ emitLoad(value, regT5, regT4); >+ Call call = callOperation(operationPutByVal, regT2, regT1, regT3, regT0, regT5, regT4); >+#endif >+ > m_byValCompilationInfo[m_byValInstructionIndex].slowPathTarget = slowPath; > m_byValCompilationInfo[m_byValInstructionIndex].returnAddress = call; > m_byValInstructionIndex++; >Index: Source/JavaScriptCore/jit/JITPropertyAccess.cpp >=================================================================== >--- Source/JavaScriptCore/jit/JITPropertyAccess.cpp (revision 157530) >+++ Source/JavaScriptCore/jit/JITPropertyAccess.cpp (working copy) >@@ -476,11 +476,9 @@ void JIT::emitSlow_op_put_by_val(Instruc > > Label slowPath = label(); > >- JITStubCall stubPutByValCall(this, cti_op_put_by_val); >- stubPutByValCall.addArgument(regT0); >- stubPutByValCall.addArgument(property, regT2); >- stubPutByValCall.addArgument(value, regT2); >- Call call = stubPutByValCall.call(); >+ emitGetVirtualRegister(property, regT1); >+ emitGetVirtualRegister(value, regT2); >+ Call call = callOperation(operationPutByVal, regT0, regT1, regT2); > > m_byValCompilationInfo[m_byValInstructionIndex].slowPathTarget = slowPath; > m_byValCompilationInfo[m_byValInstructionIndex].returnAddress = call; >@@ -1041,7 +1039,7 @@ void JIT::privateCompilePutByVal(ByValIn > > RepatchBuffer repatchBuffer(m_codeBlock); > repatchBuffer.relink(byValInfo->badTypeJump, CodeLocationLabel(byValInfo->stubRoutine->code().code())); >- repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(cti_op_put_by_val_generic)); >+ repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(operationPutByValGeneric)); > } > > JIT::JumpList JIT::emitIntTypedArrayGetByVal(Instruction*, PatchableJump& badType, TypedArrayType type) >Index: Source/JavaScriptCore/jit/JITStubs.cpp >=================================================================== >--- Source/JavaScriptCore/jit/JITStubs.cpp (revision 157530) >+++ Source/JavaScriptCore/jit/JITStubs.cpp (working copy) >@@ -405,94 +405,6 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_ > return JSValue::encode(result); > } > >-static void putByVal(CallFrame* callFrame, JSValue baseValue, JSValue subscript, JSValue value) >-{ >- if (LIKELY(subscript.isUInt32())) { >- uint32_t i = subscript.asUInt32(); >- if (baseValue.isObject()) { >- JSObject* object = asObject(baseValue); >- if (object->canSetIndexQuickly(i)) >- object->setIndexQuickly(callFrame->vm(), i, value); >- else >- object->methodTable()->putByIndex(object, callFrame, i, value, callFrame->codeBlock()->isStrictMode()); >- } else >- baseValue.putByIndex(callFrame, i, value, callFrame->codeBlock()->isStrictMode()); >- } else if (isName(subscript)) { >- PutPropertySlot slot(callFrame->codeBlock()->isStrictMode()); >- baseValue.put(callFrame, jsCast<NameInstance*>(subscript.asCell())->privateName(), value, slot); >- } else { >- Identifier property(callFrame, subscript.toString(callFrame)->value(callFrame)); >- if (!callFrame->vm().exception()) { // Don't put to an object if toString threw an exception. >- PutPropertySlot slot(callFrame->codeBlock()->isStrictMode()); >- baseValue.put(callFrame, property, value, slot); >- } >- } >-} >- >-DEFINE_STUB_FUNCTION(void, op_put_by_val) >-{ >- STUB_INIT_STACK_FRAME(stackFrame); >- >- CallFrame* callFrame = stackFrame.callFrame; >- >- JSValue baseValue = stackFrame.args[0].jsValue(); >- JSValue subscript = stackFrame.args[1].jsValue(); >- JSValue value = stackFrame.args[2].jsValue(); >- >- if (baseValue.isObject() && subscript.isInt32()) { >- // See if it's worth optimizing at all. >- JSObject* object = asObject(baseValue); >- bool didOptimize = false; >- >- unsigned bytecodeOffset = callFrame->locationAsBytecodeOffset(); >- ASSERT(bytecodeOffset); >- ByValInfo& byValInfo = callFrame->codeBlock()->getByValInfo(bytecodeOffset - 1); >- ASSERT(!byValInfo.stubRoutine); >- >- if (hasOptimizableIndexing(object->structure())) { >- // Attempt to optimize. >- JITArrayMode arrayMode = jitArrayModeForStructure(object->structure()); >- if (arrayMode != byValInfo.arrayMode) { >- JIT::compilePutByVal(&callFrame->vm(), callFrame->codeBlock(), &byValInfo, STUB_RETURN_ADDRESS, arrayMode); >- didOptimize = true; >- } >- } >- >- if (!didOptimize) { >- // If we take slow path more than 10 times without patching then make sure we >- // never make that mistake again. Or, if we failed to patch and we have some object >- // that intercepts indexed get, then don't even wait until 10 times. For cases >- // where we see non-index-intercepting objects, this gives 10 iterations worth of >- // opportunity for us to observe that the get_by_val may be polymorphic. >- if (++byValInfo.slowPathCount >= 10 >- || object->structure()->typeInfo().interceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero()) { >- // Don't ever try to optimize. >- RepatchBuffer repatchBuffer(callFrame->codeBlock()); >- repatchBuffer.relinkCallerToFunction(STUB_RETURN_ADDRESS, FunctionPtr(cti_op_put_by_val_generic)); >- } >- } >- } >- >- putByVal(callFrame, baseValue, subscript, value); >- >- CHECK_FOR_EXCEPTION_AT_END(); >-} >- >-DEFINE_STUB_FUNCTION(void, op_put_by_val_generic) >-{ >- STUB_INIT_STACK_FRAME(stackFrame); >- >- CallFrame* callFrame = stackFrame.callFrame; >- >- JSValue baseValue = stackFrame.args[0].jsValue(); >- JSValue subscript = stackFrame.args[1].jsValue(); >- JSValue value = stackFrame.args[2].jsValue(); >- >- putByVal(callFrame, baseValue, subscript, value); >- >- CHECK_FOR_EXCEPTION_AT_END(); >-} >- > DEFINE_STUB_FUNCTION(void*, op_throw) > { > STUB_INIT_STACK_FRAME(stackFrame); >Index: Source/JavaScriptCore/jit/JITStubs.h >=================================================================== >--- Source/JavaScriptCore/jit/JITStubs.h (revision 157530) >+++ Source/JavaScriptCore/jit/JITStubs.h (working copy) >@@ -359,8 +359,6 @@ EncodedJSValue JIT_STUB cti_op_get_by_id > EncodedJSValue JIT_STUB cti_op_get_by_val(STUB_ARGS_DECLARATION) WTF_INTERNAL; > EncodedJSValue JIT_STUB cti_op_get_by_val_generic(STUB_ARGS_DECLARATION) WTF_INTERNAL; > EncodedJSValue JIT_STUB cti_op_get_by_val_string(STUB_ARGS_DECLARATION) WTF_INTERNAL; >-void JIT_STUB cti_op_put_by_val(STUB_ARGS_DECLARATION) WTF_INTERNAL; >-void JIT_STUB cti_op_put_by_val_generic(STUB_ARGS_DECLARATION) WTF_INTERNAL; > void JIT_STUB cti_op_throw_static_error(STUB_ARGS_DECLARATION) WTF_INTERNAL; > void* JIT_STUB cti_op_throw(STUB_ARGS_DECLARATION) WTF_INTERNAL; > void* JIT_STUB cti_vm_throw(STUB_ARGS_DECLARATION) REFERENCED_FROM_ASM WTF_INTERNAL; >Index: Source/JavaScriptCore/jit/JSInterfaceJIT.h >=================================================================== >--- Source/JavaScriptCore/jit/JSInterfaceJIT.h (revision 157530) >+++ Source/JavaScriptCore/jit/JSInterfaceJIT.h (working copy) >@@ -124,6 +124,7 @@ namespace JSC { > static const RegisterID regT2 = ARMRegisters::r2; > static const RegisterID regT3 = ARMRegisters::r4; > static const RegisterID regT4 = ARMRegisters::r7; >+ static const RegisterID regT5 = ARMRegisters::r8; > > // Update ctiTrampoline in JITStubs.cpp if these values are changed! > static const RegisterID callFrameRegister = ARMRegisters::r5; >@@ -178,6 +179,7 @@ namespace JSC { > static const RegisterID regT3 = MIPSRegisters::s2; > > static const RegisterID regT4 = MIPSRegisters::s3; >+ static const RegisterID regT5 = MIPSRegisters::s4; > > static const RegisterID callFrameRegister = MIPSRegisters::s0; >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
fpizlo
:
review+
eflews.bot
:
commit-queue-
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 122903
:
214400
|
214410