Changeset 50531 in webkit for trunk/JavaScriptCore/jit/JITArithmetic.cpp
- Timestamp:
- Nov 4, 2009, 3:59:14 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JITArithmetic.cpp
r49409 r50531 830 830 case op_jnless: 831 831 emitLoadDouble(op1, fpRegT2); 832 addJump(branchDouble(DoubleLessThanOrEqual , fpRegT0, fpRegT2), dst);832 addJump(branchDouble(DoubleLessThanOrEqualOrUnordered, fpRegT0, fpRegT2), dst); 833 833 break; 834 834 case op_jnlesseq: 835 835 emitLoadDouble(op1, fpRegT2); 836 addJump(branchDouble(DoubleLessThan , fpRegT0, fpRegT2), dst);836 addJump(branchDouble(DoubleLessThanOrUnordered, fpRegT0, fpRegT2), dst); 837 837 break; 838 838 default: … … 883 883 case op_jnless: 884 884 emitLoadDouble(op2, fpRegT1); 885 addJump(branchDouble(DoubleLessThanOrEqual , fpRegT1, fpRegT0), dst);885 addJump(branchDouble(DoubleLessThanOrEqualOrUnordered, fpRegT1, fpRegT0), dst); 886 886 break; 887 887 case op_jnlesseq: 888 888 emitLoadDouble(op2, fpRegT1); 889 addJump(branchDouble(DoubleLessThan , fpRegT1, fpRegT0), dst);889 addJump(branchDouble(DoubleLessThanOrUnordered, fpRegT1, fpRegT0), dst); 890 890 break; 891 891 default: … … 1001 1001 1002 1002 JumpList doubleResult; 1003 if (!isOperandConstantImmediateInt(op1) || getConstantOperand(op1).asInt32() > 1) { 1004 m_assembler.cvttsd2si_rr(fpRegT0, regT0); 1005 convertInt32ToDouble(regT0, fpRegT1); 1006 m_assembler.ucomisd_rr(fpRegT1, fpRegT0); 1007 1008 doubleResult.append(m_assembler.jne()); 1009 doubleResult.append(m_assembler.jp()); 1010 1011 doubleResult.append(branchTest32(Zero, regT0)); 1012 1013 // Int32 result. 1014 emitStoreInt32(dst, regT0, (op1 == dst || op2 == dst)); 1015 end.append(jump()); 1016 } 1003 branchConvertDoubleToInt32(fpRegT0, regT0, doubleResult, fpRegT1); 1004 1005 // Int32 result. 1006 emitStoreInt32(dst, regT0, (op1 == dst || op2 == dst)); 1007 end.append(jump()); 1017 1008 1018 1009 // Double result. … … 1366 1357 convertInt32ToDouble(regT1, fpRegT1); 1367 1358 1368 emitJumpSlowToHot(branchDouble(DoubleLessThanOrEqual , fpRegT1, fpRegT0), target);1359 emitJumpSlowToHot(branchDouble(DoubleLessThanOrEqualOrUnordered, fpRegT1, fpRegT0), target); 1369 1360 1370 1361 emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_jnless)); … … 1407 1398 convertInt32ToDouble(regT0, fpRegT0); 1408 1399 1409 emitJumpSlowToHot(branchDouble(DoubleLessThanOrEqual , fpRegT1, fpRegT0), target);1400 emitJumpSlowToHot(branchDouble(DoubleLessThanOrEqualOrUnordered, fpRegT1, fpRegT0), target); 1410 1401 1411 1402 emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_jnless)); … … 1453 1444 #endif 1454 1445 1455 emitJumpSlowToHot(branchDouble(DoubleLessThanOrEqual , fpRegT1, fpRegT0), target);1446 emitJumpSlowToHot(branchDouble(DoubleLessThanOrEqualOrUnordered, fpRegT1, fpRegT0), target); 1456 1447 1457 1448 emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_jnless)); … … 1551 1542 convertInt32ToDouble(regT1, fpRegT1); 1552 1543 1553 emitJumpSlowToHot(branchDouble(DoubleLessThan , fpRegT1, fpRegT0), target);1544 emitJumpSlowToHot(branchDouble(DoubleLessThanOrUnordered, fpRegT1, fpRegT0), target); 1554 1545 1555 1546 emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_jnlesseq)); … … 1592 1583 convertInt32ToDouble(regT0, fpRegT0); 1593 1584 1594 emitJumpSlowToHot(branchDouble(DoubleLessThan , fpRegT1, fpRegT0), target);1585 emitJumpSlowToHot(branchDouble(DoubleLessThanOrUnordered, fpRegT1, fpRegT0), target); 1595 1586 1596 1587 emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_jnlesseq)); … … 1638 1629 #endif 1639 1630 1640 emitJumpSlowToHot(branchDouble(DoubleLessThan , fpRegT1, fpRegT0), target);1631 emitJumpSlowToHot(branchDouble(DoubleLessThanOrUnordered, fpRegT1, fpRegT0), target); 1641 1632 1642 1633 emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_jnlesseq)); … … 2161 2152 divDouble(fpRegT1, fpRegT0); 2162 2153 2163 JumpList doubleResult;2164 Jump end;2165 bool attemptIntConversion = (!isOperandConstantImmediateInt(op1) || getConstantOperand(op1).asInt32() > 1) && isOperandConstantImmediateInt(op2);2166 if (attemptIntConversion) {2167 m_assembler.cvttsd2si_rr(fpRegT0, regT0);2168 doubleResult.append(branchTest32(Zero, regT0));2169 m_assembler.ucomisd_rr(fpRegT1, fpRegT0);2170 2171 doubleResult.append(m_assembler.jne());2172 doubleResult.append(m_assembler.jp());2173 emitFastArithIntToImmNoCheck(regT0, regT0);2174 end = jump();2175 }2176 2177 2154 // Double result. 2178 doubleResult.link(this);2179 2155 moveDoubleToPtr(fpRegT0, regT0); 2180 2156 subPtr(tagTypeNumberRegister, regT0); 2181 2157 2182 if (attemptIntConversion)2183 end.link(this);2184 2158 emitPutVirtualRegister(dst, regT0); 2185 2159 }
Note:
See TracChangeset
for help on using the changeset viewer.