Title: [106879] trunk/Source/_javascript_Core
Revision
106879
Author
[email protected]
Date
2012-02-06 17:07:32 -0800 (Mon, 06 Feb 2012)

Log Message

ValueToNumber and ValueToDouble nodes don't do anything and should be removed
https://bugs.webkit.org/show_bug.cgi?id=77855
<rdar://problem/10811325>

Reviewed by Gavin Barraclough.
        
Removed ValueToNumber and ValueToDouble, because the only thing they were doing
was wasting registers.
        
This looks like a 1% win on V8 (with a 5% win on crypto) and a 2-3% win on Kraken,
mostly due to a >10% win on gaussian-blur. No win anywhere else.

* dfg/DFGAbstractState.cpp:
(JSC::DFG::AbstractState::execute):
* dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::getToInt32):
(ByteCodeParser):
(JSC::DFG::ByteCodeParser::handleMinMax):
(JSC::DFG::ByteCodeParser::handleIntrinsic):
(JSC::DFG::ByteCodeParser::parseBlock):
* dfg/DFGNode.h:
(DFG):
(JSC::DFG::Node::hasArithNodeFlags):
* dfg/DFGPropagator.cpp:
(JSC::DFG::Propagator::propagateArithNodeFlags):
(JSC::DFG::Propagator::propagateNodePredictions):
(JSC::DFG::Propagator::vote):
(JSC::DFG::Propagator::doRoundOfDoubleVoting):
(Propagator):
(JSC::DFG::Propagator::fixupNode):
(JSC::DFG::Propagator::canonicalize):
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
* dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::compile):
* dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::compile):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (106878 => 106879)


--- trunk/Source/_javascript_Core/ChangeLog	2012-02-07 00:55:15 UTC (rev 106878)
+++ trunk/Source/_javascript_Core/ChangeLog	2012-02-07 01:07:32 UTC (rev 106879)
@@ -1,3 +1,43 @@
+2012-02-06  Filip Pizlo  <[email protected]>
+
+        ValueToNumber and ValueToDouble nodes don't do anything and should be removed
+        https://bugs.webkit.org/show_bug.cgi?id=77855
+        <rdar://problem/10811325>
+
+        Reviewed by Gavin Barraclough.
+        
+        Removed ValueToNumber and ValueToDouble, because the only thing they were doing
+        was wasting registers.
+        
+        This looks like a 1% win on V8 (with a 5% win on crypto) and a 2-3% win on Kraken,
+        mostly due to a >10% win on gaussian-blur. No win anywhere else.
+
+        * dfg/DFGAbstractState.cpp:
+        (JSC::DFG::AbstractState::execute):
+        * dfg/DFGByteCodeParser.cpp:
+        (JSC::DFG::ByteCodeParser::getToInt32):
+        (ByteCodeParser):
+        (JSC::DFG::ByteCodeParser::handleMinMax):
+        (JSC::DFG::ByteCodeParser::handleIntrinsic):
+        (JSC::DFG::ByteCodeParser::parseBlock):
+        * dfg/DFGNode.h:
+        (DFG):
+        (JSC::DFG::Node::hasArithNodeFlags):
+        * dfg/DFGPropagator.cpp:
+        (JSC::DFG::Propagator::propagateArithNodeFlags):
+        (JSC::DFG::Propagator::propagateNodePredictions):
+        (JSC::DFG::Propagator::vote):
+        (JSC::DFG::Propagator::doRoundOfDoubleVoting):
+        (Propagator):
+        (JSC::DFG::Propagator::fixupNode):
+        (JSC::DFG::Propagator::canonicalize):
+        * dfg/DFGSpeculativeJIT.cpp:
+        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
+        * dfg/DFGSpeculativeJIT32_64.cpp:
+        (JSC::DFG::SpeculativeJIT::compile):
+        * dfg/DFGSpeculativeJIT64.cpp:
+        (JSC::DFG::SpeculativeJIT::compile):
+
 2012-02-06  Patrick Gansterer  <[email protected]>
 
         Unreviewed WinCE build fix after r106197.

Modified: trunk/Source/_javascript_Core/dfg/DFGAbstractState.cpp (106878 => 106879)


--- trunk/Source/_javascript_Core/dfg/DFGAbstractState.cpp	2012-02-07 00:55:15 UTC (rev 106878)
+++ trunk/Source/_javascript_Core/dfg/DFGAbstractState.cpp	2012-02-07 01:07:32 UTC (rev 106879)
@@ -262,22 +262,6 @@
         forNode(nodeIndex).set(PredictInt32);
         break;
             
-    case ValueToNumber:
-        if (m_graph[node.child1()].shouldNotSpeculateInteger()) {
-            forNode(node.child1()).filter(PredictNumber);
-            forNode(nodeIndex).set(PredictDouble);
-            break;
-        }
-            
-        forNode(node.child1()).filter(PredictInt32);
-        forNode(nodeIndex).set(PredictInt32);
-        break;
-            
-    case ValueToDouble:
-        forNode(node.child1()).filter(PredictNumber);
-        forNode(nodeIndex).set(PredictDouble);
-        break;
-            
     case ValueAdd:
     case ArithAdd: {
         if (m_graph.addShouldSpeculateInteger(node, m_codeBlock)) {

Modified: trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp (106878 => 106879)


--- trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp	2012-02-07 00:55:15 UTC (rev 106878)
+++ trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp	2012-02-07 01:07:32 UTC (rev 106879)
@@ -313,10 +313,6 @@
     {
         return toInt32(get(operand));
     }
-    NodeIndex getToNumber(int operand)
-    {
-        return toNumber(get(operand));
-    }
 
     // Perform an ES5 ToInt32 operation - returns a node of type NodeResultInt32.
     NodeIndex toInt32(NodeIndex index)
@@ -341,23 +337,6 @@
         return addToGraph(ValueToInt32, index);
     }
 
-    // Perform an ES5 ToNumber operation - returns a node of type NodeResultDouble.
-    NodeIndex toNumber(NodeIndex index)
-    {
-        Node& node = m_graph[index];
-
-        if (node.hasNumberResult())
-            return index;
-
-        if (node.op == JSConstant) {
-            JSValue v = valueOfJSConstant(index);
-            if (v.isNumber())
-                return getJSConstant(node.constantNumber());
-        }
-
-        return addToGraph(ValueToNumber, OpInfo(NodeUseBottom), index);
-    }
-    
     NodeIndex getJSConstantForValue(JSValue constantValue)
     {
         unsigned constantIndex = m_codeBlock->addOrFindConstant(constantValue);
@@ -1198,12 +1177,12 @@
     }
      
     if (argumentCountIncludingThis == 2) { // Math.min(x)
-        set(resultOperand, getToNumber(registerOffset + argumentToOperand(1)));
+        set(resultOperand, get(registerOffset + argumentToOperand(1)));
         return true;
     }
     
     if (argumentCountIncludingThis == 3) { // Math.min(x, y)
-        set(resultOperand, addToGraph(op, OpInfo(NodeUseBottom), getToNumber(registerOffset + argumentToOperand(1)), getToNumber(registerOffset + argumentToOperand(2))));
+        set(resultOperand, addToGraph(op, OpInfo(NodeUseBottom), get(registerOffset + argumentToOperand(1)), get(registerOffset + argumentToOperand(2))));
         return true;
     }
     
@@ -1231,7 +1210,7 @@
         if (!MacroAssembler::supportsFloatingPointAbs())
             return false;
 
-        NodeIndex nodeIndex = addToGraph(ArithAbs, OpInfo(NodeUseBottom), getToNumber(registerOffset + argumentToOperand(1)));
+        NodeIndex nodeIndex = addToGraph(ArithAbs, OpInfo(NodeUseBottom), get(registerOffset + argumentToOperand(1)));
         if (m_inlineStackTop->m_exitProfile.hasExitSite(m_currentIndex, Overflow))
             m_graph[nodeIndex].mergeArithNodeFlags(NodeMayOverflow);
         set(resultOperand, nodeIndex);
@@ -1256,7 +1235,7 @@
         if (!MacroAssembler::supportsFloatingPointSqrt())
             return false;
         
-        set(resultOperand, addToGraph(ArithSqrt, getToNumber(registerOffset + argumentToOperand(1))));
+        set(resultOperand, addToGraph(ArithSqrt, get(registerOffset + argumentToOperand(1))));
         return true;
     }
         
@@ -1512,7 +1491,7 @@
 
         case op_pre_inc: {
             unsigned srcDst = currentInstruction[1].u.operand;
-            NodeIndex op = getToNumber(srcDst);
+            NodeIndex op = get(srcDst);
             set(srcDst, makeSafe(addToGraph(ArithAdd, OpInfo(NodeUseBottom), op, one())));
             NEXT_OPCODE(op_pre_inc);
         }
@@ -1521,7 +1500,7 @@
             unsigned result = currentInstruction[1].u.operand;
             unsigned srcDst = currentInstruction[2].u.operand;
             ASSERT(result != srcDst); // Required for assumptions we make during OSR.
-            NodeIndex op = getToNumber(srcDst);
+            NodeIndex op = get(srcDst);
             set(result, op);
             set(srcDst, makeSafe(addToGraph(ArithAdd, OpInfo(NodeUseBottom), op, one())));
             NEXT_OPCODE(op_post_inc);
@@ -1529,7 +1508,7 @@
 
         case op_pre_dec: {
             unsigned srcDst = currentInstruction[1].u.operand;
-            NodeIndex op = getToNumber(srcDst);
+            NodeIndex op = get(srcDst);
             set(srcDst, makeSafe(addToGraph(ArithSub, OpInfo(NodeUseBottom), op, one())));
             NEXT_OPCODE(op_pre_dec);
         }
@@ -1537,7 +1516,7 @@
         case op_post_dec: {
             unsigned result = currentInstruction[1].u.operand;
             unsigned srcDst = currentInstruction[2].u.operand;
-            NodeIndex op = getToNumber(srcDst);
+            NodeIndex op = get(srcDst);
             set(result, op);
             set(srcDst, makeSafe(addToGraph(ArithSub, OpInfo(NodeUseBottom), op, one())));
             NEXT_OPCODE(op_post_dec);
@@ -1549,37 +1528,37 @@
             NodeIndex op1 = get(currentInstruction[2].u.operand);
             NodeIndex op2 = get(currentInstruction[3].u.operand);
             if (m_graph[op1].hasNumberResult() && m_graph[op2].hasNumberResult())
-                set(currentInstruction[1].u.operand, makeSafe(addToGraph(ArithAdd, OpInfo(NodeUseBottom), toNumber(op1), toNumber(op2))));
+                set(currentInstruction[1].u.operand, makeSafe(addToGraph(ArithAdd, OpInfo(NodeUseBottom), op1, op2)));
             else
                 set(currentInstruction[1].u.operand, makeSafe(addToGraph(ValueAdd, OpInfo(NodeUseBottom), op1, op2)));
             NEXT_OPCODE(op_add);
         }
 
         case op_sub: {
-            NodeIndex op1 = getToNumber(currentInstruction[2].u.operand);
-            NodeIndex op2 = getToNumber(currentInstruction[3].u.operand);
+            NodeIndex op1 = get(currentInstruction[2].u.operand);
+            NodeIndex op2 = get(currentInstruction[3].u.operand);
             set(currentInstruction[1].u.operand, makeSafe(addToGraph(ArithSub, OpInfo(NodeUseBottom), op1, op2)));
             NEXT_OPCODE(op_sub);
         }
 
         case op_mul: {
             // Multiply requires that the inputs are not truncated, unfortunately.
-            NodeIndex op1 = getToNumber(currentInstruction[2].u.operand);
-            NodeIndex op2 = getToNumber(currentInstruction[3].u.operand);
+            NodeIndex op1 = get(currentInstruction[2].u.operand);
+            NodeIndex op2 = get(currentInstruction[3].u.operand);
             set(currentInstruction[1].u.operand, makeSafe(addToGraph(ArithMul, OpInfo(NodeUseBottom), op1, op2)));
             NEXT_OPCODE(op_mul);
         }
 
         case op_mod: {
-            NodeIndex op1 = getToNumber(currentInstruction[2].u.operand);
-            NodeIndex op2 = getToNumber(currentInstruction[3].u.operand);
+            NodeIndex op1 = get(currentInstruction[2].u.operand);
+            NodeIndex op2 = get(currentInstruction[3].u.operand);
             set(currentInstruction[1].u.operand, makeSafe(addToGraph(ArithMod, OpInfo(NodeUseBottom), op1, op2)));
             NEXT_OPCODE(op_mod);
         }
 
         case op_div: {
-            NodeIndex op1 = getToNumber(currentInstruction[2].u.operand);
-            NodeIndex op2 = getToNumber(currentInstruction[3].u.operand);
+            NodeIndex op1 = get(currentInstruction[2].u.operand);
+            NodeIndex op2 = get(currentInstruction[3].u.operand);
             set(currentInstruction[1].u.operand, makeDivSafe(addToGraph(ArithDiv, OpInfo(NodeUseBottom), op1, op2)));
             NEXT_OPCODE(op_div);
         }

Modified: trunk/Source/_javascript_Core/dfg/DFGNode.h (106878 => 106879)


--- trunk/Source/_javascript_Core/dfg/DFGNode.h	2012-02-07 00:55:15 UTC (rev 106878)
+++ trunk/Source/_javascript_Core/dfg/DFGNode.h	2012-02-07 01:07:32 UTC (rev 106879)
@@ -211,12 +211,7 @@
     macro(ArithMin, NodeResultNumber) \
     macro(ArithMax, NodeResultNumber) \
     macro(ArithSqrt, NodeResultNumber) \
-    /* Arithmetic operators call ToNumber on their operands. */\
-    macro(ValueToNumber, NodeResultNumber | NodeMustGenerate) \
     \
-    /* A variant of ValueToNumber, which a hint that the parents will always use this as a double. */\
-    macro(ValueToDouble, NodeResultNumber | NodeMustGenerate) \
-    \
     /* Add of values may either be arithmetic, or result in string concatenation. */\
     macro(ValueAdd, NodeResultJS | NodeMustGenerate | NodeMightClobber) \
     \
@@ -522,8 +517,6 @@
     bool hasArithNodeFlags()
     {
         switch (op) {
-        case ValueToNumber:
-        case ValueToDouble:
         case UInt32ToNumber:
         case ArithAdd:
         case ArithSub:

Modified: trunk/Source/_javascript_Core/dfg/DFGPropagator.cpp (106878 => 106879)


--- trunk/Source/_javascript_Core/dfg/DFGPropagator.cpp	2012-02-07 00:55:15 UTC (rev 106878)
+++ trunk/Source/_javascript_Core/dfg/DFGPropagator.cpp	2012-02-07 01:07:32 UTC (rev 106879)
@@ -138,8 +138,6 @@
             break;
         }
             
-        case ValueToNumber:
-        case ValueToDouble:
         case UInt32ToNumber: {
             changed |= m_graph[node.child1()].mergeArithNodeFlags(flags);
             break;
@@ -363,19 +361,6 @@
             break;
         }
 
-        case ValueToNumber: {
-            PredictedType prediction = m_graph[node.child1()].prediction();
-            
-            if (prediction) {
-                if (!(prediction & PredictDouble) && nodeCanSpeculateInteger(node.arithNodeFlags()))
-                    changed |= mergePrediction(PredictInt32);
-                else
-                    changed |= mergePrediction(PredictNumber);
-            }
-            
-            break;
-        }
-
         case ValueAdd: {
             PredictedType left = m_graph[node.child1()].prediction();
             PredictedType right = m_graph[node.child2()].prediction();
@@ -597,7 +582,6 @@
             break;
         }
             
-        case ValueToDouble:
         case GetArrayLength:
         case GetByteArrayLength:
         case GetInt8ArrayLength:
@@ -679,8 +663,6 @@
     void vote(NodeUse nodeUse, VariableAccessData::Ballot ballot)
     {
         switch (m_graph[nodeUse].op) {
-        case ValueToNumber:
-        case ValueToDouble:
         case ValueToInt32:
         case UInt32ToNumber:
             nodeUse = m_graph[nodeUse].child1();
@@ -775,11 +757,6 @@
                 vote(node.child1(), VariableAccessData::VoteDouble);
                 break;
                 
-            case ValueToNumber:
-            case ValueToDouble:
-                // Don't vote.
-                break;
-                
             case SetLocal: {
                 PredictedType prediction = m_graph[node.child1()].prediction();
                 if (isDoublePrediction(prediction))
@@ -835,16 +812,6 @@
         } while (m_changed);
     }
     
-    void toDouble(NodeUse nodeUse)
-    {
-        if (m_graph[nodeUse].op == ValueToNumber) {
-#if DFG_ENABLE(DEBUG_PROPAGATION_VERBOSE)
-            printf("  @%u -> ValueToDouble", nodeUse.index());
-#endif
-            m_graph[nodeUse].op = ValueToDouble;
-        }
-    }
-
     void fixupNode(Node& node)
     {
         if (!node.shouldGenerate())
@@ -857,60 +824,6 @@
 #endif
         
         switch (op) {
-        case ValueAdd:
-        case ArithAdd:
-        case ArithSub: {
-            PredictedType left = m_graph[node.child1()].prediction();
-            PredictedType right = m_graph[node.child2()].prediction();
-            
-            if (left && right
-                && isNumberPrediction(left) && isNumberPrediction(right)
-                && !m_graph.addShouldSpeculateInteger(node, m_codeBlock)) {
-                toDouble(node.child1());
-                toDouble(node.child2());
-            }
-            break;
-        }
-            
-        case ArithMul:
-        case ArithMin:
-        case ArithMax:
-        case ArithMod:
-        case ArithDiv: {
-            if (!nodeCanSpeculateInteger(node.arithNodeFlags())) {
-                toDouble(node.child1());
-                toDouble(node.child2());
-                break;
-            }
-            
-            PredictedType left = m_graph[node.child1()].prediction();
-            PredictedType right = m_graph[node.child2()].prediction();
-            
-            if (left && right
-                && ((left & PredictDouble) || (right & PredictDouble))) {
-                toDouble(node.child1());
-                toDouble(node.child2());
-            }
-            break;
-        }
-            
-        case ArithAbs: {
-            if (!nodeCanSpeculateInteger(node.arithNodeFlags())) {
-                toDouble(node.child1());
-                break;
-            }
-            
-            PredictedType prediction = m_graph[node.child1()].prediction();
-            if (prediction & PredictDouble)
-                toDouble(node.child1());
-            break;
-        }
-            
-        case ArithSqrt: {
-            toDouble(node.child1());
-            break;
-        }
-            
         case GetById: {
             if (!isInt32Prediction(m_graph[m_compileIndex].prediction()))
                 break;
@@ -1004,9 +917,6 @@
         if (nodeIndex == NoNode)
             return NoNode;
         
-        if (m_graph[nodeIndex].op == ValueToNumber)
-            nodeIndex = m_graph[nodeIndex].child1().index();
-        
         if (m_graph[nodeIndex].op == ValueToInt32)
             nodeIndex = m_graph[nodeIndex].child1().index();
         

Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp (106878 => 106879)


--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2012-02-07 00:55:15 UTC (rev 106878)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2012-02-07 01:07:32 UTC (rev 106879)
@@ -1268,16 +1268,9 @@
             // Try to see if there is an alternate node that would contain the value we want.
             // There are four possibilities:
             //
-            // ValueToNumber: If the only live version of the value is a ValueToNumber node
-            //    then it means that all remaining uses of the value would have performed a
-            //    ValueToNumber conversion anyway. Thus, we can substitute ValueToNumber.
+            // ValueToInt32: If the only remaining live version of the value is
+            //    ValueToInt32, then we can use it.
             //
-            // ValueToInt32: Likewise, if the only remaining live version of the value is
-            //    ValueToInt32, then we can use it. But if there is both a ValueToInt32
-            //    and a ValueToNumber, then we better go with ValueToNumber because it
-            //    means that some remaining uses would have converted to number while
-            //    others would have converted to Int32.
-            //
             // UInt32ToNumber: If the only live version of the value is a UInt32ToNumber
             //    then the only remaining uses are ones that want a properly formed number
             //    rather than a UInt32 intermediate.
@@ -1297,7 +1290,6 @@
             }
         
             if (!found) {
-                NodeIndex valueToNumberIndex = NoNode;
                 NodeIndex valueToInt32Index = NoNode;
                 NodeIndex uint32ToNumberIndex = NoNode;
             
@@ -1311,10 +1303,6 @@
                     if (node.child1Unchecked() != valueSource.nodeIndex())
                         continue;
                     switch (node.op) {
-                    case ValueToNumber:
-                    case ValueToDouble:
-                        valueToNumberIndex = info.nodeIndex();
-                        break;
                     case ValueToInt32:
                         valueToInt32Index = info.nodeIndex();
                         break;
@@ -1327,9 +1315,7 @@
                 }
             
                 NodeIndex nodeIndexToUse;
-                if (valueToNumberIndex != NoNode)
-                    nodeIndexToUse = valueToNumberIndex;
-                else if (valueToInt32Index != NoNode)
+                if (valueToInt32Index != NoNode)
                     nodeIndexToUse = valueToInt32Index;
                 else if (uint32ToNumberIndex != NoNode)
                     nodeIndexToUse = uint32ToNumberIndex;

Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp (106878 => 106879)


--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp	2012-02-07 00:55:15 UTC (rev 106878)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp	2012-02-07 01:07:32 UTC (rev 106879)
@@ -1861,30 +1861,6 @@
         break;
     }
 
-    case ValueToNumber: {
-        if (at(node.child1()).shouldNotSpeculateInteger()) {
-            SpeculateDoubleOperand op1(this, node.child1());
-            FPRTemporary result(this, op1);
-            m_jit.moveDouble(op1.fpr(), result.fpr());
-            doubleResult(result.fpr(), m_compileIndex);
-            break;
-        }
-        
-        SpeculateIntegerOperand op1(this, node.child1());
-        GPRTemporary result(this, op1);
-        m_jit.move(op1.gpr(), result.gpr());
-        integerResult(result.gpr(), m_compileIndex, op1.format());
-        break;
-    }
-
-    case ValueToDouble: {
-        SpeculateDoubleOperand op1(this, node.child1());
-        FPRTemporary result(this, op1);
-        m_jit.moveDouble(op1.fpr(), result.fpr());
-        doubleResult(result.fpr(), m_compileIndex);
-        break;
-    }
-
     case ValueAdd:
     case ArithAdd:
         compileAdd(node);

Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp (106878 => 106879)


--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp	2012-02-07 00:55:15 UTC (rev 106878)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp	2012-02-07 01:07:32 UTC (rev 106879)
@@ -1940,30 +1940,6 @@
         break;
     }
 
-    case ValueToNumber: {
-        if (at(node.child1()).shouldNotSpeculateInteger()) {
-            SpeculateDoubleOperand op1(this, node.child1());
-            FPRTemporary result(this, op1);
-            m_jit.moveDouble(op1.fpr(), result.fpr());
-            doubleResult(result.fpr(), m_compileIndex);
-            break;
-        }
-        
-        SpeculateIntegerOperand op1(this, node.child1());
-        GPRTemporary result(this, op1);
-        m_jit.move(op1.gpr(), result.gpr());
-        integerResult(result.gpr(), m_compileIndex, op1.format());
-        break;
-    }
-
-    case ValueToDouble: {
-        SpeculateDoubleOperand op1(this, node.child1());
-        FPRTemporary result(this, op1);
-        m_jit.moveDouble(op1.fpr(), result.fpr());
-        doubleResult(result.fpr(), m_compileIndex);
-        break;
-    }
-
     case ValueAdd:
     case ArithAdd:
         compileAdd(node);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to