Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (97116 => 97117)
--- trunk/Source/_javascript_Core/ChangeLog 2011-10-11 00:57:11 UTC (rev 97116)
+++ trunk/Source/_javascript_Core/ChangeLog 2011-10-11 01:01:30 UTC (rev 97117)
@@ -1,5 +1,22 @@
2011-10-10 Gavin Barraclough <baraclo...@apple.com>
+ DFG JIT switch dfgConvert methods to use callOperation
+ https://bugs.webkit.org/show_bug.cgi?id=69806
+
+ Reviewed by Filip Pizlo.
+
+ * dfg/DFGJITCodeGenerator.h:
+ (JSC::DFG::callOperation):
+ * dfg/DFGJITCodeGenerator32_64.cpp:
+ (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
+ (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
+ * dfg/DFGJITCodeGenerator64.cpp:
+ (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
+ (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
+ * dfg/DFGOperations.h:
+
+2011-10-10 Gavin Barraclough <baraclo...@apple.com>
+
Remove some unused methods from the DFG JIT.
Rubber stamped by Oliver Hunt
Modified: trunk/Source/_javascript_Core/dfg/DFGJITCodeGenerator.h (97116 => 97117)
--- trunk/Source/_javascript_Core/dfg/DFGJITCodeGenerator.h 2011-10-11 00:57:11 UTC (rev 97116)
+++ trunk/Source/_javascript_Core/dfg/DFGJITCodeGenerator.h 2011-10-11 01:01:30 UTC (rev 97117)
@@ -1179,6 +1179,22 @@
return appendCallWithExceptionCheck(operation);
}
+ JITCompiler::Call callOperation(Z_DFGOperation_EJ operation, GPRReg result, GPRReg arg1)
+ {
+ m_jit.move(arg1, GPRInfo::argumentGPR1);
+ m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
+
+ return appendCallWithExceptionCheckSetResult(operation, result);
+ }
+ JITCompiler::Call callOperation(D_DFGOperation_EJ operation, FPRReg result, GPRReg arg1)
+ {
+ m_jit.move(arg1, GPRInfo::argumentGPR1);
+ m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
+
+ JITCompiler::Call call = appendCallWithExceptionCheck(operation);
+ m_jit.moveDouble(FPRInfo::returnValueFPR, result);
+ return call;
+ }
JITCompiler::Call callOperation(D_DFGOperation_DD operation, FPRReg result, FPRReg arg1, FPRReg arg2)
{
setupTwoStubArgs<FPRInfo::argumentFPR0, FPRInfo::argumentFPR1>(arg1, arg2);
@@ -1404,6 +1420,25 @@
return callOperation((V_DFGOperation_EPZJ)operation, arg1, arg2, arg3Tag, arg3Payload);
}
+ JITCompiler::Call callOperation(Z_DFGOperation_EJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload)
+ {
+ m_jit.push(arg1Tag);
+ m_jit.push(arg1Payload);
+ m_jit.push(GPRInfo::callFrameRegister);
+
+ return appendCallWithExceptionCheckSetResult(operation, result);
+ }
+ JITCompiler::Call callOperation(D_DFGOperation_EJ operation, FPRReg result, GPRReg arg1Tag, GPRReg arg1Payload)
+ {
+ m_jit.push(arg1Tag);
+ m_jit.push(arg1Payload);
+ m_jit.push(GPRInfo::callFrameRegister);
+
+ JITCompiler::Call call = appendCallWithExceptionCheck(operation);
+ m_jit.assembler().fstpl(0, JITCompiler::stackPointerRegister);
+ m_jit.loadDouble(JITCompiler::stackPointerRegister, result);
+ return call;
+ }
JITCompiler::Call callOperation(D_DFGOperation_DD operation, FPRReg result, FPRReg arg1, FPRReg arg2)
{
m_jit.subPtr(TrustedImm32(2 * sizeof(double)), JITCompiler::stackPointerRegister);
Modified: trunk/Source/_javascript_Core/dfg/DFGJITCodeGenerator32_64.cpp (97116 => 97117)
--- trunk/Source/_javascript_Core/dfg/DFGJITCodeGenerator32_64.cpp 2011-10-11 00:57:11 UTC (rev 97116)
+++ trunk/Source/_javascript_Core/dfg/DFGJITCodeGenerator32_64.cpp 2011-10-11 01:01:30 UTC (rev 97117)
@@ -346,10 +346,7 @@
// Next handle cells (& other JS immediates)
nonNumeric.link(&m_jit);
silentSpillAllRegisters(resultTagGPR, resultPayloadGPR);
- m_jit.push(tagGPR);
- m_jit.push(payloadGPR);
- m_jit.push(GPRInfo::callFrameRegister);
- appendCallWithExceptionCheck(dfgConvertJSValueToNumber);
+ callOperation(dfgConvertJSValueToNumber, FPRInfo::returnValueFPR, tagGPR, payloadGPR);
boxDouble(FPRInfo::returnValueFPR, resultTagGPR, resultPayloadGPR, at(m_compileIndex).virtualRegister());
silentFillAllRegisters(resultTagGPR, resultPayloadGPR);
JITCompiler::Jump hasCalledToNumber = m_jit.jump();
@@ -410,10 +407,7 @@
// First handle non-integers
silentSpillAllRegisters(resultGPR);
- m_jit.push(tagGPR);
- m_jit.push(payloadGPR);
- m_jit.push(GPRInfo::callFrameRegister);
- appendCallWithExceptionCheck(dfgConvertJSValueToInt32);
+ callOperation(dfgConvertJSValueToInt32, GPRInfo::returnValueGPR, tagGPR, payloadGPR);
m_jit.move(GPRInfo::returnValueGPR, resultGPR);
silentFillAllRegisters(resultGPR);
JITCompiler::Jump hasCalledToInt32 = m_jit.jump();
Modified: trunk/Source/_javascript_Core/dfg/DFGJITCodeGenerator64.cpp (97116 => 97117)
--- trunk/Source/_javascript_Core/dfg/DFGJITCodeGenerator64.cpp 2011-10-11 00:57:11 UTC (rev 97116)
+++ trunk/Source/_javascript_Core/dfg/DFGJITCodeGenerator64.cpp 2011-10-11 01:01:30 UTC (rev 97117)
@@ -350,9 +350,7 @@
// Next handle cells (& other JS immediates)
nonNumeric.link(&m_jit);
silentSpillAllRegisters(gpr);
- m_jit.move(jsValueGpr, GPRInfo::argumentGPR1);
- m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
- appendCallWithExceptionCheck(dfgConvertJSValueToNumber);
+ callOperation(dfgConvertJSValueToNumber, FPRInfo::returnValueFPR, jsValueGpr);
boxDouble(FPRInfo::returnValueFPR, gpr);
silentFillAllRegisters(gpr);
JITCompiler::Jump hasCalledToNumber = m_jit.jump();
@@ -410,9 +408,7 @@
// First handle non-integers
silentSpillAllRegisters(resultGPR);
- m_jit.move(jsValueGpr, GPRInfo::argumentGPR1);
- m_jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0);
- appendCallWithExceptionCheck(dfgConvertJSValueToInt32);
+ callOperation(dfgConvertJSValueToInt32, GPRInfo::returnValueGPR, jsValueGpr);
m_jit.zeroExtend32ToPtr(GPRInfo::returnValueGPR, resultGPR);
silentFillAllRegisters(resultGPR);
JITCompiler::Jump hasCalledToInt32 = m_jit.jump();
Modified: trunk/Source/_javascript_Core/dfg/DFGOperations.h (97116 => 97117)
--- trunk/Source/_javascript_Core/dfg/DFGOperations.h 2011-10-11 00:57:11 UTC (rev 97116)
+++ trunk/Source/_javascript_Core/dfg/DFGOperations.h 2011-10-11 01:01:30 UTC (rev 97117)
@@ -88,6 +88,8 @@
typedef void DFG_OPERATION (*V_DFGOperation_EPZJ)(ExecState*, void*, int32_t, EncodedJSValue);
typedef void DFG_OPERATION (*V_DFGOperation_EAZJ)(ExecState*, JSArray*, int32_t, EncodedJSValue);
typedef double (*D_DFGOperation_DD)(double, double); // Using default calling conventions!
+typedef double DFG_OPERATION (*D_DFGOperation_EJ)(ExecState*, EncodedJSValue);
+typedef int32_t DFG_OPERATION (*Z_DFGOperation_EJ)(ExecState*, EncodedJSValue);
typedef void* DFG_OPERATION (*P_DFGOperation_E)(ExecState*);
// These routines are provide callbacks out to C++ implementations of operations too complex to JIT.