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);