Title: [197653] trunk/Source/_javascript_Core
Revision
197653
Author
benja...@webkit.org
Date
2016-03-06 18:42:43 -0800 (Sun, 06 Mar 2016)

Log Message

[JSC] Use 3 operands Add in more places
https://bugs.webkit.org/show_bug.cgi?id=155082

Reviewed by Filip Pizlo.

* assembler/MacroAssembler.h:
(JSC::MacroAssembler::addPtr):
(JSC::MacroAssembler::add32):
* assembler/MacroAssemblerARMv7.h:
(JSC::MacroAssemblerARMv7::add32):
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileArithAdd):
The case with child1 constant is useless.
The canonical form will have the constant as child2.

Also add register reuse for the fast-add.
Registers are a scarce resource on x86.

* jit/CCallHelpers.h:
(JSC::CCallHelpers::prepareForTailCallSlow):
* yarr/YarrJIT.cpp:
(JSC::Yarr::YarrGenerator::generate):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (197652 => 197653)


--- trunk/Source/_javascript_Core/ChangeLog	2016-03-07 02:40:16 UTC (rev 197652)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-03-07 02:42:43 UTC (rev 197653)
@@ -1,3 +1,28 @@
+2016-03-06  Benjamin Poulain  <benja...@webkit.org>
+
+        [JSC] Use 3 operands Add in more places
+        https://bugs.webkit.org/show_bug.cgi?id=155082
+
+        Reviewed by Filip Pizlo.
+
+        * assembler/MacroAssembler.h:
+        (JSC::MacroAssembler::addPtr):
+        (JSC::MacroAssembler::add32):
+        * assembler/MacroAssemblerARMv7.h:
+        (JSC::MacroAssemblerARMv7::add32):
+        * dfg/DFGSpeculativeJIT.cpp:
+        (JSC::DFG::SpeculativeJIT::compileArithAdd):
+        The case with child1 constant is useless.
+        The canonical form will have the constant as child2.
+
+        Also add register reuse for the fast-add.
+        Registers are a scarce resource on x86.
+
+        * jit/CCallHelpers.h:
+        (JSC::CCallHelpers::prepareForTailCallSlow):
+        * yarr/YarrJIT.cpp:
+        (JSC::Yarr::YarrGenerator::generate):
+
 2016-03-06  Benjamin Poulain  <bpoul...@apple.com>
 
         [JSC] Improve codegen of Compare and Test

Modified: trunk/Source/_javascript_Core/assembler/MacroAssembler.h (197652 => 197653)


--- trunk/Source/_javascript_Core/assembler/MacroAssembler.h	2016-03-07 02:40:16 UTC (rev 197652)
+++ trunk/Source/_javascript_Core/assembler/MacroAssembler.h	2016-03-07 02:42:43 UTC (rev 197653)
@@ -521,6 +521,11 @@
         add32(src, dest);
     }
 
+    void addPtr(RegisterID left, RegisterID right, RegisterID dest)
+    {
+        add32(left, right, dest);
+    }
+
     void addPtr(TrustedImm32 imm, RegisterID srcDest)
     {
         add32(imm, srcDest);
@@ -793,6 +798,11 @@
     {
         add64(src, dest);
     }
+
+    void addPtr(RegisterID left, RegisterID right, RegisterID dest)
+    {
+        add64(left, right, dest);
+    }
     
     void addPtr(Address src, RegisterID dest)
     {
@@ -1457,6 +1467,16 @@
         } else
             add32(imm.asTrustedImm32(), dest);
     }
+
+    void add32(Imm32 imm, RegisterID src, RegisterID dest)
+    {
+        if (shouldBlind(imm)) {
+            BlindedImm32 key = additionBlindedConstant(imm);
+            add32(key.value1, src, dest);
+            add32(key.value2, dest);
+        } else
+            add32(imm.asTrustedImm32(), src, dest);
+    }
     
     void addPtr(Imm32 imm, RegisterID dest)
     {

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h (197652 => 197653)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h	2016-03-07 02:40:16 UTC (rev 197652)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h	2016-03-07 02:42:43 UTC (rev 197653)
@@ -155,6 +155,11 @@
         m_assembler.add(dest, dest, src);
     }
 
+    void add32(RegisterID left, RegisterID right, RegisterID dest)
+    {
+        m_assembler.add(dest, left, right);
+    }
+
     void add32(TrustedImm32 imm, RegisterID dest)
     {
         add32(imm, dest, dest);

Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp (197652 => 197653)


--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2016-03-07 02:40:16 UTC (rev 197652)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2016-03-07 02:42:43 UTC (rev 197653)
@@ -3256,33 +3256,21 @@
     switch (node->binaryUseKind()) {
     case Int32Use: {
         ASSERT(!shouldCheckNegativeZero(node->arithMode()));
-        
-        if (node->child1()->isInt32Constant()) {
-            int32_t imm1 = node->child1()->asInt32();
-            SpeculateInt32Operand op2(this, node->child2());
-            GPRTemporary result(this);
 
-            if (!shouldCheckOverflow(node->arithMode())) {
-                m_jit.move(op2.gpr(), result.gpr());
-                m_jit.add32(Imm32(imm1), result.gpr());
-            } else
-                speculationCheck(Overflow, JSValueRegs(), 0, m_jit.branchAdd32(MacroAssembler::Overflow, op2.gpr(), Imm32(imm1), result.gpr()));
-
-            int32Result(result.gpr(), node);
-            return;
-        }
-        
         if (node->child2()->isInt32Constant()) {
             SpeculateInt32Operand op1(this, node->child1());
             int32_t imm2 = node->child2()->asInt32();
-            GPRTemporary result(this);
-                
+
             if (!shouldCheckOverflow(node->arithMode())) {
-                m_jit.move(op1.gpr(), result.gpr());
-                m_jit.add32(Imm32(imm2), result.gpr());
-            } else
-                speculationCheck(Overflow, JSValueRegs(), 0, m_jit.branchAdd32(MacroAssembler::Overflow, op1.gpr(), Imm32(imm2), result.gpr()));
+                GPRTemporary result(this, Reuse, op1);
+                m_jit.add32(Imm32(imm2), op1.gpr(), result.gpr());
+                int32Result(result.gpr(), node);
+                return;
+            }
 
+            GPRTemporary result(this);
+            speculationCheck(Overflow, JSValueRegs(), 0, m_jit.branchAdd32(MacroAssembler::Overflow, op1.gpr(), Imm32(imm2), result.gpr()));
+
             int32Result(result.gpr(), node);
             return;
         }
@@ -3295,14 +3283,9 @@
         GPRReg gpr2 = op2.gpr();
         GPRReg gprResult = result.gpr();
 
-        if (!shouldCheckOverflow(node->arithMode())) {
-            if (gpr1 == gprResult)
-                m_jit.add32(gpr2, gprResult);
-            else {
-                m_jit.move(gpr2, gprResult);
-                m_jit.add32(gpr1, gprResult);
-            }
-        } else {
+        if (!shouldCheckOverflow(node->arithMode()))
+            m_jit.add32(gpr1, gpr2, gprResult);
+        else {
             MacroAssembler::Jump check = m_jit.branchAdd32(MacroAssembler::Overflow, gpr1, gpr2, gprResult);
                 
             if (gpr1 == gprResult)
@@ -3329,8 +3312,7 @@
             SpeculateWhicheverInt52Operand op1(this, node->child1());
             SpeculateWhicheverInt52Operand op2(this, node->child2(), op1);
             GPRTemporary result(this, Reuse, op1);
-            m_jit.move(op1.gpr(), result.gpr());
-            m_jit.add64(op2.gpr(), result.gpr());
+            m_jit.add64(op1.gpr(), op2.gpr(), result.gpr());
             int52Result(result.gpr(), node, op1.format());
             return;
         }

Modified: trunk/Source/_javascript_Core/jit/CCallHelpers.h (197652 => 197653)


--- trunk/Source/_javascript_Core/jit/CCallHelpers.h	2016-03-07 02:40:16 UTC (rev 197652)
+++ trunk/Source/_javascript_Core/jit/CCallHelpers.h	2016-03-07 02:42:43 UTC (rev 197653)
@@ -2157,8 +2157,7 @@
 
             // The new frame pointer is at framePointer + oldFrameSize - newFrameSize
             ASSERT(newFramePointer != oldFrameSizeGPR);
-            move(framePointerRegister, newFramePointer);
-            addPtr(oldFrameSizeGPR, newFramePointer);
+            addPtr(framePointerRegister, oldFrameSizeGPR, newFramePointer);
 
             // The new frame size is just the number of arguments plus the
             // frame header size, aligned

Modified: trunk/Source/_javascript_Core/yarr/YarrJIT.cpp (197652 => 197653)


--- trunk/Source/_javascript_Core/yarr/YarrJIT.cpp	2016-03-07 02:40:16 UTC (rev 197652)
+++ trunk/Source/_javascript_Core/yarr/YarrJIT.cpp	2016-03-07 02:42:43 UTC (rev 197653)
@@ -1626,8 +1626,7 @@
                     if (term->quantityType == QuantifierFixedCount)
                         inputOffset -= term->parentheses.disjunction->m_minimumSize;
                     if (inputOffset) {
-                        move(index, indexTemporary);
-                        add32(Imm32(inputOffset), indexTemporary);
+                        add32(Imm32(inputOffset), index, indexTemporary);
                         setSubpatternStart(indexTemporary, term->parentheses.subpatternId);
                     } else
                         setSubpatternStart(index, term->parentheses.subpatternId);
@@ -1657,8 +1656,7 @@
                 if (term->capture() && compileMode == IncludeSubpatterns) {
                     int inputOffset = term->inputPosition - m_checked;
                     if (inputOffset) {
-                        move(index, indexTemporary);
-                        add32(Imm32(inputOffset), indexTemporary);
+                        add32(Imm32(inputOffset), index, indexTemporary);
                         setSubpatternEnd(indexTemporary, term->parentheses.subpatternId);
                     } else
                         setSubpatternEnd(index, term->parentheses.subpatternId);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to