Title: [90189] trunk/Source/_javascript_Core
Revision
90189
Author
[email protected]
Date
2011-06-30 18:04:54 -0700 (Thu, 30 Jun 2011)

Log Message

2011-06-30  Filip Pizlo  <[email protected]>

        Reviewed by Gavin Barraclough.

        DFG non-speculative JIT does not reuse registers when compiling comparisons.
        https://bugs.webkit.org/show_bug.cgi?id=63565

        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
        (JSC::DFG::NonSpeculativeJIT::basicArithOp):
        (JSC::DFG::NonSpeculativeJIT::compare):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (90188 => 90189)


--- trunk/Source/_javascript_Core/ChangeLog	2011-07-01 00:28:06 UTC (rev 90188)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-07-01 01:04:54 UTC (rev 90189)
@@ -1,3 +1,15 @@
+2011-06-30  Filip Pizlo  <[email protected]>
+
+        Reviewed by Gavin Barraclough.
+
+        DFG non-speculative JIT does not reuse registers when compiling comparisons.
+        https://bugs.webkit.org/show_bug.cgi?id=63565
+
+        * dfg/DFGNonSpeculativeJIT.cpp:
+        (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
+        (JSC::DFG::NonSpeculativeJIT::basicArithOp):
+        (JSC::DFG::NonSpeculativeJIT::compare):
+
 2011-06-30  Geoffrey Garen  <[email protected]>
 
         Reviewed by Gavin Barraclough.

Modified: trunk/Source/_javascript_Core/dfg/DFGNonSpeculativeJIT.cpp (90188 => 90189)


--- trunk/Source/_javascript_Core/dfg/DFGNonSpeculativeJIT.cpp	2011-07-01 00:28:06 UTC (rev 90188)
+++ trunk/Source/_javascript_Core/dfg/DFGNonSpeculativeJIT.cpp	2011-07-01 01:04:54 UTC (rev 90189)
@@ -173,20 +173,18 @@
         
     if (!isKnownInteger(regChild))
         notInt = m_jit.branchPtr(MacroAssembler::Below, regArgGPR, GPRInfo::tagTypeNumberRegister);
-        
-    m_jit.zeroExtend32ToPtr(regArgGPR, resultGPR); 
-        
+    
     JITCompiler::Jump overflow;
     
     switch (op) {
     case ValueAdd:
     case ArithAdd: {
-        overflow = m_jit.branchAdd32(MacroAssembler::Overflow, Imm32(imm), resultGPR);
+        overflow = m_jit.branchAdd32(MacroAssembler::Overflow, regArgGPR, Imm32(imm), resultGPR);
         break;
     }
         
     case ArithSub: {
-        overflow = m_jit.branchSub32(MacroAssembler::Overflow, Imm32(imm), resultGPR);
+        overflow = m_jit.branchSub32(MacroAssembler::Overflow, regArgGPR, Imm32(imm), resultGPR);
         break;
     }
         
@@ -273,38 +271,32 @@
     GPRReg arg1GPR = arg1.gpr();
     GPRReg arg2GPR = arg2.gpr();
     
-    GPRTemporary temp(this, arg2);
     GPRTemporary result(this);
 
-    GPRReg tempGPR = temp.gpr();
     GPRReg resultGPR = result.gpr();
     
     JITCompiler::JumpList slowPath;
-    JITCompiler::JumpList overflowSlowPath;
     
     if (!isKnownInteger(node.child1))
         slowPath.append(m_jit.branchPtr(MacroAssembler::Below, arg1GPR, GPRInfo::tagTypeNumberRegister));
     if (!isKnownInteger(node.child2))
         slowPath.append(m_jit.branchPtr(MacroAssembler::Below, arg2GPR, GPRInfo::tagTypeNumberRegister));
     
-    m_jit.zeroExtend32ToPtr(arg1GPR, resultGPR);
-    m_jit.zeroExtend32ToPtr(arg2GPR, tempGPR);
-    
     switch (op) {
     case ValueAdd:
     case ArithAdd: {
-        overflowSlowPath.append(m_jit.branchAdd32(MacroAssembler::Overflow, tempGPR, resultGPR));
+        slowPath.append(m_jit.branchAdd32(MacroAssembler::Overflow, arg1GPR, arg2GPR, resultGPR));
         break;
     }
         
     case ArithSub: {
-        overflowSlowPath.append(m_jit.branchSub32(MacroAssembler::Overflow, tempGPR, resultGPR));
+        slowPath.append(m_jit.branchSub32(MacroAssembler::Overflow, arg1GPR, arg2GPR, resultGPR));
         break;
     }
         
     case ArithMul: {
-        overflowSlowPath.append(m_jit.branchMul32(MacroAssembler::Overflow, tempGPR, resultGPR));
-        overflowSlowPath.append(m_jit.branchTest32(MacroAssembler::Zero, resultGPR));
+        slowPath.append(m_jit.branchMul32(MacroAssembler::Overflow, arg1GPR, arg2GPR, resultGPR));
+        slowPath.append(m_jit.branchTest32(MacroAssembler::Zero, resultGPR));
         break;
     }
         
@@ -316,11 +308,6 @@
         
     JITCompiler::Jump done = m_jit.jump();
     
-    overflowSlowPath.link(&m_jit);
-    
-    if (arg2GPR == tempGPR)
-        m_jit.orPtr(GPRInfo::tagTypeNumberRegister, arg2GPR);
-    
     slowPath.link(&m_jit);
     
     silentSpillAllRegisters(resultGPR, arg1GPR, arg2GPR);
@@ -364,10 +351,8 @@
     GPRReg arg1GPR = arg1.gpr();
     GPRReg arg2GPR = arg2.gpr();
     
-    GPRTemporary result(this);
-    GPRTemporary temp(this);
+    GPRTemporary result(this, arg2);
     GPRReg resultGPR = result.gpr();
-    GPRReg tempGPR = temp.gpr();
     
     JITCompiler::JumpList slowPath;
     
@@ -376,11 +361,8 @@
     if (!isKnownInteger(node.child2))
         slowPath.append(m_jit.branchPtr(MacroAssembler::Below, arg2GPR, GPRInfo::tagTypeNumberRegister));
     
-    m_jit.zeroExtend32ToPtr(arg1GPR, tempGPR);
-    m_jit.zeroExtend32ToPtr(arg2GPR, resultGPR);
+    m_jit.compare32(cond, arg1GPR, arg2GPR, resultGPR);
     
-    m_jit.compare32(cond, tempGPR, resultGPR, resultGPR);
-    
     JITCompiler::Jump haveResult = m_jit.jump();
     
     slowPath.link(&m_jit);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to