Title: [97117] trunk/Source/_javascript_Core
Revision
97117
Author
barraclo...@apple.com
Date
2011-10-10 18:01:30 -0700 (Mon, 10 Oct 2011)

Log Message

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:

Modified Paths

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.
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to