Changeset 47530 in webkit for trunk/JavaScriptCore/jit/JITArithmetic.cpp
- Timestamp:
- Aug 19, 2009, 5:02:24 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JITArithmetic.cpp
r46598 r47530 1054 1054 1055 1055 if (isOperandConstantImmediateInt(op2) && getConstantOperand(op2).asInt32() != 0) { 1056 emitLoad(op1, X86 ::edx, X86::eax);1057 move(Imm32(getConstantOperand(op2).asInt32()), X86 ::ecx);1058 addSlowCase(branch32(NotEqual, X86 ::edx, Imm32(JSValue::Int32Tag)));1056 emitLoad(op1, X86Registers::edx, X86Registers::eax); 1057 move(Imm32(getConstantOperand(op2).asInt32()), X86Registers::ecx); 1058 addSlowCase(branch32(NotEqual, X86Registers::edx, Imm32(JSValue::Int32Tag))); 1059 1059 if (getConstantOperand(op2).asInt32() == -1) 1060 addSlowCase(branch32(Equal, X86 ::eax, Imm32(0x80000000))); // -2147483648 / -1 => EXC_ARITHMETIC1060 addSlowCase(branch32(Equal, X86Registers::eax, Imm32(0x80000000))); // -2147483648 / -1 => EXC_ARITHMETIC 1061 1061 } else { 1062 emitLoad2(op1, X86 ::edx, X86::eax, op2, X86::ebx, X86::ecx);1063 addSlowCase(branch32(NotEqual, X86 ::edx, Imm32(JSValue::Int32Tag)));1064 addSlowCase(branch32(NotEqual, X86 ::ebx, Imm32(JSValue::Int32Tag)));1065 1066 addSlowCase(branch32(Equal, X86 ::eax, Imm32(0x80000000))); // -2147483648 / -1 => EXC_ARITHMETIC1067 addSlowCase(branch32(Equal, X86 ::ecx, Imm32(0))); // divide by 01068 } 1069 1070 move(X86 ::eax, X86::ebx); // Save dividend payload, in case of 0.1062 emitLoad2(op1, X86Registers::edx, X86Registers::eax, op2, X86Registers::ebx, X86Registers::ecx); 1063 addSlowCase(branch32(NotEqual, X86Registers::edx, Imm32(JSValue::Int32Tag))); 1064 addSlowCase(branch32(NotEqual, X86Registers::ebx, Imm32(JSValue::Int32Tag))); 1065 1066 addSlowCase(branch32(Equal, X86Registers::eax, Imm32(0x80000000))); // -2147483648 / -1 => EXC_ARITHMETIC 1067 addSlowCase(branch32(Equal, X86Registers::ecx, Imm32(0))); // divide by 0 1068 } 1069 1070 move(X86Registers::eax, X86Registers::ebx); // Save dividend payload, in case of 0. 1071 1071 m_assembler.cdq(); 1072 m_assembler.idivl_r(X86 ::ecx);1072 m_assembler.idivl_r(X86Registers::ecx); 1073 1073 1074 1074 // If the remainder is zero and the dividend is negative, the result is -0. 1075 Jump storeResult1 = branchTest32(NonZero, X86 ::edx);1076 Jump storeResult2 = branchTest32(Zero, X86 ::ebx, Imm32(0x80000000)); // not negative1075 Jump storeResult1 = branchTest32(NonZero, X86Registers::edx); 1076 Jump storeResult2 = branchTest32(Zero, X86Registers::ebx, Imm32(0x80000000)); // not negative 1077 1077 emitStore(dst, jsNumber(m_globalData, -0.0)); 1078 1078 Jump end = jump(); … … 1080 1080 storeResult1.link(this); 1081 1081 storeResult2.link(this); 1082 emitStoreInt32(dst, X86 ::edx, (op1 == dst || op2 == dst));1082 emitStoreInt32(dst, X86Registers::edx, (op1 == dst || op2 == dst)); 1083 1083 end.link(this); 1084 1084 } … … 1848 1848 unsigned op2 = currentInstruction[3].u.operand; 1849 1849 1850 emitGetVirtualRegisters(op1, X86 ::eax, op2, X86::ecx);1851 emitJumpSlowCaseIfNotImmediateInteger(X86 ::eax);1852 emitJumpSlowCaseIfNotImmediateInteger(X86 ::ecx);1853 #if USE(JSVALUE64) 1854 addSlowCase(branchPtr(Equal, X86 ::ecx, ImmPtr(JSValue::encode(jsNumber(m_globalData, 0)))));1850 emitGetVirtualRegisters(op1, X86Registers::eax, op2, X86Registers::ecx); 1851 emitJumpSlowCaseIfNotImmediateInteger(X86Registers::eax); 1852 emitJumpSlowCaseIfNotImmediateInteger(X86Registers::ecx); 1853 #if USE(JSVALUE64) 1854 addSlowCase(branchPtr(Equal, X86Registers::ecx, ImmPtr(JSValue::encode(jsNumber(m_globalData, 0))))); 1855 1855 m_assembler.cdq(); 1856 m_assembler.idivl_r(X86 ::ecx);1857 #else 1858 emitFastArithDeTagImmediate(X86 ::eax);1859 addSlowCase(emitFastArithDeTagImmediateJumpIfZero(X86 ::ecx));1856 m_assembler.idivl_r(X86Registers::ecx); 1857 #else 1858 emitFastArithDeTagImmediate(X86Registers::eax); 1859 addSlowCase(emitFastArithDeTagImmediateJumpIfZero(X86Registers::ecx)); 1860 1860 m_assembler.cdq(); 1861 m_assembler.idivl_r(X86 ::ecx);1862 signExtend32ToPtr(X86 ::edx, X86::edx);1863 #endif 1864 emitFastArithReTagImmediate(X86 ::edx, X86::eax);1861 m_assembler.idivl_r(X86Registers::ecx); 1862 signExtend32ToPtr(X86Registers::edx, X86Registers::edx); 1863 #endif 1864 emitFastArithReTagImmediate(X86Registers::edx, X86Registers::eax); 1865 1865 emitPutVirtualRegister(result); 1866 1866 } … … 1878 1878 Jump notImm2 = getSlowCase(iter); 1879 1879 linkSlowCase(iter); 1880 emitFastArithReTagImmediate(X86 ::eax, X86::eax);1881 emitFastArithReTagImmediate(X86 ::ecx, X86::ecx);1880 emitFastArithReTagImmediate(X86Registers::eax, X86Registers::eax); 1881 emitFastArithReTagImmediate(X86Registers::ecx, X86Registers::ecx); 1882 1882 notImm1.link(this); 1883 1883 notImm2.link(this); 1884 1884 #endif 1885 1885 JITStubCall stubCall(this, cti_op_mod); 1886 stubCall.addArgument(X86 ::eax);1887 stubCall.addArgument(X86 ::ecx);1886 stubCall.addArgument(X86Registers::eax); 1887 stubCall.addArgument(X86Registers::ecx); 1888 1888 stubCall.call(result); 1889 1889 }
Note:
See TracChangeset
for help on using the changeset viewer.