Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (199682 => 199683)
--- trunk/Source/_javascript_Core/ChangeLog 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/ChangeLog 2016-04-18 20:02:24 UTC (rev 199683)
@@ -1,3 +1,53 @@
+2016-04-18 Keith Miller <[email protected]>
+
+ We should support delete in the DFG
+ https://bugs.webkit.org/show_bug.cgi?id=156607
+
+ Reviewed by Benjamin Poulain.
+
+ This patch adds support for the delete in the DFG as it appears that
+ some major frameworks use the operation in particularly hot functions.
+ As a result, even if the function rarely ever calls delete we would never
+ tier up to the DFG. This patch also changes operationDeleteById to take a
+ UniquedStringImpl and return a size_t.
+
+ * dfg/DFGAbstractInterpreterInlines.h:
+ (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCapabilities.cpp:
+ (JSC::DFG::capabilityLevel):
+ * dfg/DFGClobberize.h:
+ (JSC::DFG::clobberize):
+ * dfg/DFGDoesGC.cpp:
+ (JSC::DFG::doesGC):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::hasIdentifier):
+ * dfg/DFGNodeType.h:
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSafeToExecute.h:
+ (JSC::DFG::safeToExecute):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileDeleteById):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * jit/JIT.h:
+ * jit/JITInlines.h:
+ (JSC::JIT::callOperation):
+ * jit/JITOperations.cpp:
+ * jit/JITOperations.h:
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_del_by_id):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_del_by_id):
+
2016-04-17 Filip Pizlo <[email protected]>
FTL should pin the tag registers at inline caches
Modified: trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h 2016-04-18 20:02:24 UTC (rev 199683)
@@ -2090,6 +2090,14 @@
forNode(node).setType(SpecInt32);
break;
}
+
+ case DeleteById: {
+ // FIXME: This could decide if the delete will be successful based on the set of structures that
+ // we get from our base value. https://bugs.webkit.org/show_bug.cgi?id=156611
+ clobberWorld(node->origin.semantic, clobberLimit);
+ forNode(node).setType(SpecBoolean);
+ break;
+ }
case CheckStructure: {
AbstractValue& value = forNode(node->child1());
Modified: trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp 2016-04-18 20:02:24 UTC (rev 199683)
@@ -3973,6 +3973,13 @@
NEXT_OPCODE(op_put_getter_by_val);
}
+ case op_del_by_id: {
+ Node* base = get(VirtualRegister(currentInstruction[2].u.operand));
+ unsigned identifierNumber = m_inlineStackTop->m_identifierRemap[currentInstruction[3].u.operand];
+ addToGraph(DeleteById, OpInfo(identifierNumber), base);
+ NEXT_OPCODE(op_del_by_id);
+ }
+
case op_profile_type: {
Node* valueToProfile = get(VirtualRegister(currentInstruction[1].u.operand));
addToGraph(ProfileType, OpInfo(currentInstruction[2].u.location), valueToProfile);
Modified: trunk/Source/_javascript_Core/dfg/DFGCapabilities.cpp (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGCapabilities.cpp 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGCapabilities.cpp 2016-04-18 20:02:24 UTC (rev 199683)
@@ -161,6 +161,7 @@
case op_put_getter_setter_by_id:
case op_put_getter_by_val:
case op_put_setter_by_val:
+ case op_del_by_id:
case op_jmp:
case op_jtrue:
case op_jfalse:
Modified: trunk/Source/_javascript_Core/dfg/DFGClobberize.h (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGClobberize.h 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGClobberize.h 2016-04-18 20:02:24 UTC (rev 199683)
@@ -445,6 +445,7 @@
case PutGetterSetterById:
case PutGetterByVal:
case PutSetterByVal:
+ case DeleteById:
case ArrayPush:
case ArrayPop:
case Call:
Modified: trunk/Source/_javascript_Core/dfg/DFGDoesGC.cpp (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGDoesGC.cpp 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGDoesGC.cpp 2016-04-18 20:02:24 UTC (rev 199683)
@@ -107,6 +107,7 @@
case PutGetterSetterById:
case PutGetterByVal:
case PutSetterByVal:
+ case DeleteById:
case CheckStructure:
case GetExecutable:
case GetButterfly:
Modified: trunk/Source/_javascript_Core/dfg/DFGFixupPhase.cpp (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGFixupPhase.cpp 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGFixupPhase.cpp 2016-04-18 20:02:24 UTC (rev 199683)
@@ -1514,6 +1514,7 @@
case NewRegexp:
case ProfileWillCall:
case ProfileDidCall:
+ case DeleteById:
case IsArrayObject:
case IsJSArray:
case IsArrayConstructor:
Modified: trunk/Source/_javascript_Core/dfg/DFGNode.h (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGNode.h 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGNode.h 2016-04-18 20:02:24 UTC (rev 199683)
@@ -875,6 +875,7 @@
case PutGetterById:
case PutSetterById:
case PutGetterSetterById:
+ case DeleteById:
return true;
default:
return false;
Modified: trunk/Source/_javascript_Core/dfg/DFGNodeType.h (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGNodeType.h 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGNodeType.h 2016-04-18 20:02:24 UTC (rev 199683)
@@ -193,6 +193,7 @@
macro(PutGetterSetterById, NodeMustGenerate) \
macro(PutGetterByVal, NodeMustGenerate) \
macro(PutSetterByVal, NodeMustGenerate) \
+ macro(DeleteById, NodeResultBoolean | NodeMustGenerate) \
macro(CheckStructure, NodeMustGenerate) \
macro(GetExecutable, NodeResultJS) \
macro(PutStructure, NodeMustGenerate) \
Modified: trunk/Source/_javascript_Core/dfg/DFGPredictionPropagationPhase.cpp (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGPredictionPropagationPhase.cpp 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGPredictionPropagationPhase.cpp 2016-04-18 20:02:24 UTC (rev 199683)
@@ -411,7 +411,8 @@
changed |= mergePrediction(speculatedDoubleTypeForPrediction(child));
break;
}
-
+
+ case DeleteById:
case LogicalNot:
case CompareLess:
case CompareLessEq:
Modified: trunk/Source/_javascript_Core/dfg/DFGSafeToExecute.h (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGSafeToExecute.h 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGSafeToExecute.h 2016-04-18 20:02:24 UTC (rev 199683)
@@ -192,6 +192,7 @@
case ArithLog:
case ValueAdd:
case TryGetById:
+ case DeleteById:
case GetById:
case GetByIdFlush:
case PutById:
Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp 2016-04-18 20:02:24 UTC (rev 199683)
@@ -1066,6 +1066,23 @@
blessedBooleanResult(resultGPR, node, UseChildrenCalledExplicitly);
}
+void SpeculativeJIT::compileDeleteById(Node* node)
+{
+ JSValueOperand value(this, node->child1());
+ GPRFlushedCallResult result(this);
+
+ JSValueRegs valueRegs = value.jsValueRegs();
+ GPRReg resultGPR = result.gpr();
+
+ value.use();
+
+ flushRegisters();
+ callOperation(operationDeleteById, resultGPR, valueRegs, identifierUID(node->identifierNumber()));
+ m_jit.exceptionCheck();
+
+ unblessedBooleanResult(resultGPR, node, UseChildrenCalledExplicitly);
+}
+
bool SpeculativeJIT::nonSpeculativeCompare(Node* node, MacroAssembler::RelationalCondition cond, S_JITOperation_EJJ helperFunction)
{
unsigned branchIndexInBlock = detectPeepHoleBranch();
Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.h (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.h 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.h 2016-04-18 20:02:24 UTC (rev 199683)
@@ -714,6 +714,7 @@
void cachedPutById(CodeOrigin, GPRReg basePayloadGPR, GPRReg valueTagGPR, GPRReg valuePayloadGPR, GPRReg scratchGPR, unsigned identifierNumber, PutKind, JITCompiler::Jump slowPathTarget = JITCompiler::Jump(), SpillRegistersMode = NeedToSpill);
#endif
+ void compileDeleteById(Node*);
void compileTryGetById(Node*);
void compileIn(Node*);
@@ -1468,6 +1469,15 @@
m_jit.setupArgumentsWithExecState(arg1);
return appendCallSetResult(operation, result);
}
+ JITCompiler::Call callOperation(S_JITOperation_EJI operation, GPRReg result, GPRReg arg1, UniquedStringImpl* uid)
+ {
+ m_jit.setupArgumentsWithExecState(arg1, TrustedImmPtr(uid));
+ return appendCallSetResult(operation, result);
+ }
+ JITCompiler::Call callOperation(S_JITOperation_EJI operation, GPRReg result, JSValueRegs arg1, UniquedStringImpl* uid)
+ {
+ return callOperation(operation, result, arg1.gpr(), uid);
+ }
JITCompiler::Call callOperation(S_JITOperation_EJJ operation, GPRReg result, GPRReg arg1, GPRReg arg2)
{
m_jit.setupArgumentsWithExecState(arg1, arg2);
@@ -1882,6 +1892,17 @@
return callOperation(operation, result, arg1.tagGPR(), arg1.payloadGPR());
}
+ JITCompiler::Call callOperation(S_JITOperation_EJI operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload, UniquedStringImpl* uid)
+ {
+ m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, TrustedImmPtr(uid));
+ return appendCallSetResult(operation, result);
+ }
+
+ JITCompiler::Call callOperation(S_JITOperation_EJI operation, GPRReg result, JSValueRegs arg1Regs, UniquedStringImpl* uid)
+ {
+ return callOperation(operation, result, arg1Regs.tagGPR(), arg1Regs.payloadGPR(), uid);
+ }
+
JITCompiler::Call callOperation(S_JITOperation_EJJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload)
{
m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, SH4_32BIT_DUMMY_ARG arg2Payload, arg2Tag);
Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp 2016-04-18 20:02:24 UTC (rev 199683)
@@ -4090,6 +4090,11 @@
case GetArrayLength:
compileGetArrayLength(node);
break;
+
+ case DeleteById: {
+ compileDeleteById(node);
+ break;
+ }
case CheckCell: {
SpeculateCellOperand cell(this, node->child1());
Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp (199682 => 199683)
--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp 2016-04-18 20:02:24 UTC (rev 199683)
@@ -4131,6 +4131,11 @@
case GetArrayLength:
compileGetArrayLength(node);
break;
+
+ case DeleteById: {
+ compileDeleteById(node);
+ break;
+ }
case CheckCell: {
SpeculateCellOperand cell(this, node->child1());
Modified: trunk/Source/_javascript_Core/jit/JIT.h (199682 => 199683)
--- trunk/Source/_javascript_Core/jit/JIT.h 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/jit/JIT.h 2016-04-18 20:02:24 UTC (rev 199683)
@@ -746,7 +746,7 @@
MacroAssembler::Call callOperation(J_JITOperation_ESsiJI, int, StructureStubInfo*, GPRReg, GPRReg, UniquedStringImpl*);
MacroAssembler::Call callOperation(WithProfileTag, J_JITOperation_ESsiJI, int, StructureStubInfo*, GPRReg, GPRReg, UniquedStringImpl*);
#endif
- MacroAssembler::Call callOperation(J_JITOperation_EJIdc, int, GPRReg, const Identifier*);
+ MacroAssembler::Call callOperation(J_JITOperation_EJI, int, GPRReg, UniquedStringImpl*);
MacroAssembler::Call callOperation(J_JITOperation_EJJ, int, GPRReg, GPRReg);
MacroAssembler::Call callOperation(J_JITOperation_EJJAp, int, GPRReg, GPRReg, ArrayProfile*);
MacroAssembler::Call callOperation(J_JITOperation_EJJBy, int, GPRReg, GPRReg, ByValInfo*);
@@ -770,6 +770,7 @@
MacroAssembler::Call callOperation(P_JITOperation_EJS, GPRReg, size_t);
MacroAssembler::Call callOperation(S_JITOperation_ECC, RegisterID, RegisterID);
MacroAssembler::Call callOperation(S_JITOperation_EJ, RegisterID);
+ MacroAssembler::Call callOperation(S_JITOperation_EJI, GPRReg, UniquedStringImpl*);
MacroAssembler::Call callOperation(S_JITOperation_EJJ, RegisterID, RegisterID);
MacroAssembler::Call callOperation(S_JITOperation_EOJss, RegisterID, RegisterID);
MacroAssembler::Call callOperation(Sprt_JITOperation_EZ, int32_t);
@@ -818,13 +819,14 @@
MacroAssembler::Call callOperation(Z_JITOperation_EJZZ, GPRReg, GPRReg, int32_t, int32_t);
MacroAssembler::Call callOperation(J_JITOperation_EAapJ, int, ArrayAllocationProfile*, GPRReg, GPRReg);
MacroAssembler::Call callOperation(J_JITOperation_EJ, int, GPRReg, GPRReg);
- MacroAssembler::Call callOperation(J_JITOperation_EJIdc, int, GPRReg, GPRReg, const Identifier*);
+ MacroAssembler::Call callOperation(J_JITOperation_EJI, int, GPRReg, GPRReg, UniquedStringImpl*);
MacroAssembler::Call callOperation(J_JITOperation_EJJ, int, GPRReg, GPRReg, GPRReg, GPRReg);
MacroAssembler::Call callOperation(Z_JITOperation_EJOJ, GPRReg, GPRReg, GPRReg, GPRReg, GPRReg);
MacroAssembler::Call callOperation(J_JITOperation_EJJAp, int, GPRReg, GPRReg, GPRReg, GPRReg, ArrayProfile*);
MacroAssembler::Call callOperation(J_JITOperation_EJJBy, int, GPRReg, GPRReg, GPRReg, GPRReg, ByValInfo*);
MacroAssembler::Call callOperation(P_JITOperation_EJS, GPRReg, GPRReg, size_t);
MacroAssembler::Call callOperation(S_JITOperation_EJ, RegisterID, RegisterID);
+ MacroAssembler::Call callOperation(S_JITOperation_EJI, GPRReg, GPRReg, UniquedStringImpl*);
MacroAssembler::Call callOperation(S_JITOperation_EJJ, RegisterID, RegisterID, RegisterID, RegisterID);
MacroAssembler::Call callOperation(V_JITOperation_EZSymtabJ, int, SymbolTable*, RegisterID, RegisterID);
MacroAssembler::Call callOperation(V_JITOperation_EJ, RegisterID, RegisterID);
Modified: trunk/Source/_javascript_Core/jit/JITInlines.h (199682 => 199683)
--- trunk/Source/_javascript_Core/jit/JITInlines.h 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/jit/JITInlines.h 2016-04-18 20:02:24 UTC (rev 199683)
@@ -489,7 +489,7 @@
return appendCallWithExceptionCheckSetJSValueResult(operation, dst);
}
-ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(J_JITOperation_EJIdc operation, int dst, GPRReg arg1, const Identifier* arg2)
+ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(J_JITOperation_EJI operation, int dst, GPRReg arg1, UniquedStringImpl* arg2)
{
setupArgumentsWithExecState(arg1, TrustedImmPtr(arg2));
return appendCallWithExceptionCheckSetJSValueResult(operation, dst);
@@ -538,6 +538,14 @@
return appendCallWithExceptionCheck(operation);
}
+
+ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(S_JITOperation_EJI operation, GPRReg arg1, UniquedStringImpl* arg2)
+{
+ setupArgumentsWithExecState(arg1, TrustedImmPtr(arg2));
+ return appendCallWithExceptionCheck(operation);
+}
+
+
ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(S_JITOperation_EJJ operation, RegisterID regOp1, RegisterID regOp2)
{
setupArgumentsWithExecState(regOp1, regOp2);
@@ -660,7 +668,7 @@
return appendCallWithExceptionCheckSetJSValueResultWithProfile(operation, dst);
}
-ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(J_JITOperation_EJIdc operation, int dst, GPRReg arg1Tag, GPRReg arg1Payload, const Identifier* arg2)
+ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(J_JITOperation_EJI operation, int dst, GPRReg arg1Tag, GPRReg arg1Payload, UniquedStringImpl* arg2)
{
setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, TrustedImmPtr(arg2));
return appendCallWithExceptionCheckSetJSValueResult(operation, dst);
@@ -702,6 +710,12 @@
return appendCallWithExceptionCheck(operation);
}
+ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(S_JITOperation_EJI operation, GPRReg arg1Tag, GPRReg arg1Payload, UniquedStringImpl* arg2)
+{
+ setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, TrustedImmPtr(arg2));
+ return appendCallWithExceptionCheck(operation);
+}
+
ALWAYS_INLINE MacroAssembler::Call JIT::callOperation(S_JITOperation_EJJ operation, RegisterID arg1Tag, RegisterID arg1Payload, RegisterID arg2Tag, RegisterID arg2Payload)
{
setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, SH4_32BIT_DUMMY_ARG arg2Payload, arg2Tag);
Modified: trunk/Source/_javascript_Core/jit/JITOperations.cpp (199682 => 199683)
--- trunk/Source/_javascript_Core/jit/JITOperations.cpp 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/jit/JITOperations.cpp 2016-04-18 20:02:24 UTC (rev 199683)
@@ -1866,19 +1866,24 @@
return JSValue::encode(result);
}
-EncodedJSValue JIT_OPERATION operationDeleteById(ExecState* exec, EncodedJSValue encodedBase, const Identifier* identifier)
+EncodedJSValue JIT_OPERATION operationDeleteByIdJSResult(ExecState* exec, EncodedJSValue base, UniquedStringImpl* uid)
{
+ return JSValue::encode(jsBoolean(operationDeleteById(exec, base, uid)));
+}
+
+
+size_t JIT_OPERATION operationDeleteById(ExecState* exec, EncodedJSValue encodedBase, UniquedStringImpl* uid)
+{
VM& vm = exec->vm();
NativeCallFrameTracer tracer(&vm, exec);
JSObject* baseObj = JSValue::decode(encodedBase).toObject(exec);
if (!baseObj)
JSValue::encode(JSValue());
- bool couldDelete = baseObj->methodTable(vm)->deleteProperty(baseObj, exec, *identifier);
- JSValue result = jsBoolean(couldDelete);
+ bool couldDelete = baseObj->methodTable(vm)->deleteProperty(baseObj, exec, Identifier::fromUid(&vm, uid));
if (!couldDelete && exec->codeBlock()->isStrictMode())
vm.throwException(exec, createTypeError(exec, ASCIILiteral("Unable to delete property.")));
- return JSValue::encode(result);
+ return couldDelete;
}
EncodedJSValue JIT_OPERATION operationInstanceOf(ExecState* exec, EncodedJSValue encodedValue, EncodedJSValue encodedProto)
Modified: trunk/Source/_javascript_Core/jit/JITOperations.h (199682 => 199683)
--- trunk/Source/_javascript_Core/jit/JITOperations.h 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/jit/JITOperations.h 2016-04-18 20:02:24 UTC (rev 199683)
@@ -131,7 +131,6 @@
typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJC)(ExecState*, EncodedJSValue, JSCell*);
typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJA)(ExecState*, EncodedJSValue, JSArray*);
typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJI)(ExecState*, EncodedJSValue, UniquedStringImpl*);
-typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJIdc)(ExecState*, EncodedJSValue, const Identifier*);
typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJJ)(ExecState*, EncodedJSValue, EncodedJSValue);
typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJJJ)(ExecState*, EncodedJSValue, EncodedJSValue, EncodedJSValue);
typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJJAp)(ExecState*, EncodedJSValue, EncodedJSValue, ArrayProfile*);
@@ -209,6 +208,7 @@
typedef size_t JIT_OPERATION (*S_JITOperation_EGReoJ)(ExecState*, JSGlobalObject*, RegExpObject*, EncodedJSValue);
typedef size_t JIT_OPERATION (*S_JITOperation_EGReoJss)(ExecState*, JSGlobalObject*, RegExpObject*, JSString*);
typedef size_t JIT_OPERATION (*S_JITOperation_EJ)(ExecState*, EncodedJSValue);
+typedef size_t JIT_OPERATION (*S_JITOperation_EJI)(ExecState*, EncodedJSValue, UniquedStringImpl*);
typedef size_t JIT_OPERATION (*S_JITOperation_EJJ)(ExecState*, EncodedJSValue, EncodedJSValue);
typedef size_t JIT_OPERATION (*S_JITOperation_EOJss)(ExecState*, JSObject*, JSString*);
typedef size_t JIT_OPERATION (*S_JITOperation_EReoJ)(ExecState*, RegExpObject*, EncodedJSValue);
@@ -366,7 +366,8 @@
EncodedJSValue JIT_OPERATION operationGetByValString(ExecState*, EncodedJSValue encodedBase, EncodedJSValue encodedSubscript, ByValInfo*) WTF_INTERNAL;
EncodedJSValue JIT_OPERATION operationHasIndexedPropertyDefault(ExecState*, EncodedJSValue encodedBase, EncodedJSValue encodedSubscript, ByValInfo*) WTF_INTERNAL;
EncodedJSValue JIT_OPERATION operationHasIndexedPropertyGeneric(ExecState*, EncodedJSValue encodedBase, EncodedJSValue encodedSubscript, ByValInfo*) WTF_INTERNAL;
-EncodedJSValue JIT_OPERATION operationDeleteById(ExecState*, EncodedJSValue base, const Identifier*) WTF_INTERNAL;
+EncodedJSValue JIT_OPERATION operationDeleteByIdJSResult(ExecState*, EncodedJSValue base, UniquedStringImpl*) WTF_INTERNAL;
+size_t JIT_OPERATION operationDeleteById(ExecState*, EncodedJSValue base, UniquedStringImpl*) WTF_INTERNAL;
JSCell* JIT_OPERATION operationGetPNames(ExecState*, JSObject*) WTF_INTERNAL;
EncodedJSValue JIT_OPERATION operationInstanceOf(ExecState*, EncodedJSValue, EncodedJSValue proto) WTF_INTERNAL;
int32_t JIT_OPERATION operationSizeFrameForVarargs(ExecState*, EncodedJSValue arguments, int32_t numUsedStackSlots, int32_t firstVarArgOffset) WTF_INTERNAL;
Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp (199682 => 199683)
--- trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp 2016-04-18 20:02:24 UTC (rev 199683)
@@ -529,7 +529,7 @@
int base = currentInstruction[2].u.operand;
int property = currentInstruction[3].u.operand;
emitGetVirtualRegister(base, regT0);
- callOperation(operationDeleteById, dst, regT0, &m_codeBlock->identifier(property));
+ callOperation(operationDeleteByIdJSResult, dst, regT0, m_codeBlock->identifier(property).impl());
}
void JIT::emit_op_try_get_by_id(Instruction* currentInstruction)
Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp (199682 => 199683)
--- trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp 2016-04-18 18:49:56 UTC (rev 199682)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp 2016-04-18 20:02:24 UTC (rev 199683)
@@ -127,7 +127,7 @@
int base = currentInstruction[2].u.operand;
int property = currentInstruction[3].u.operand;
emitLoad(base, regT1, regT0);
- callOperation(operationDeleteById, dst, regT1, regT0, &m_codeBlock->identifier(property));
+ callOperation(operationDeleteByIdJSResult, dst, regT1, regT0, m_codeBlock->identifier(property).impl());
}
JIT::CodeRef JIT::stringGetByValStubGenerator(VM* vm)