[JSC] Make ArithClz32 work with Cell arguments
[WebKit-https.git] / Source / JavaScriptCore / dfg / DFGSpeculativeJIT.cpp
index 87fe277..df23fe7 100644 (file)
@@ -3932,12 +3932,22 @@ void SpeculativeJIT::compileArithAbs(Node* node)
 
 void SpeculativeJIT::compileArithClz32(Node* node)
 {
-    ASSERT_WITH_MESSAGE(node->child1().useKind() == Int32Use || node->child1().useKind() == KnownInt32Use, "The Fixup phase should have enforced a Int32 operand.");
-    SpeculateInt32Operand value(this, node->child1());
-    GPRTemporary result(this, Reuse, value);
-    GPRReg valueReg = value.gpr();
+    if (node->child1().useKind() == Int32Use || node->child1().useKind() == KnownInt32Use) {
+        SpeculateInt32Operand value(this, node->child1());
+        GPRTemporary result(this, Reuse, value);
+        GPRReg valueReg = value.gpr();
+        GPRReg resultReg = result.gpr();
+        m_jit.countLeadingZeros32(valueReg, resultReg);
+        int32Result(resultReg, node);
+        return;
+    }
+    JSValueOperand op1(this, node->child1());
+    JSValueRegs op1Regs = op1.jsValueRegs();
+    GPRTemporary result(this);
     GPRReg resultReg = result.gpr();
-    m_jit.countLeadingZeros32(valueReg, resultReg);
+    flushRegisters();
+    callOperation(operationArithClz32, resultReg, op1Regs);
+    m_jit.exceptionCheck();
     int32Result(resultReg, node);
 }