Changeset 36311 in webkit for trunk/JavaScriptCore/VM/CTI.cpp
- Timestamp:
- Sep 9, 2008, 8:22:04 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/VM/CTI.cpp
r36307 r36311 108 108 109 109 // get arg puts an arg from the SF register array into a h/w register 110 ALWAYS_INLINE void CTI::emitGetArg(unsigned src, MacroAssembler::RegisterID dst)110 ALWAYS_INLINE void CTI::emitGetArg(unsigned src, X86Assembler::RegisterID dst) 111 111 { 112 112 // TODO: we want to reuse values that are already in registers if we can - add a register allocator! … … 119 119 120 120 // get arg puts an arg from the SF register array onto the stack, as an arg to a context threaded function. 121 ALWAYS_INLINE void CTI::emitGetPutArg(unsigned src, unsigned offset, MacroAssembler::RegisterID scratch)121 ALWAYS_INLINE void CTI::emitGetPutArg(unsigned src, unsigned offset, X86Assembler::RegisterID scratch) 122 122 { 123 123 if (src < m_codeBlock->constantRegisters.size()) { … … 131 131 132 132 // puts an arg onto the stack, as an arg to a context threaded function. 133 ALWAYS_INLINE void CTI::emitPutArg( MacroAssembler::RegisterID src, unsigned offset)133 ALWAYS_INLINE void CTI::emitPutArg(X86Assembler::RegisterID src, unsigned offset) 134 134 { 135 135 m_jit.movl_rm(src, offset + sizeof(void*), X86::esp); … … 150 150 } 151 151 152 ALWAYS_INLINE void CTI::emitPutCTIParam( MacroAssembler::RegisterID from, unsigned name)152 ALWAYS_INLINE void CTI::emitPutCTIParam(X86Assembler::RegisterID from, unsigned name) 153 153 { 154 154 m_jit.movl_rm(from, name * sizeof(void*), X86::esp); 155 155 } 156 156 157 ALWAYS_INLINE void CTI::emitGetCTIParam(unsigned name, MacroAssembler::RegisterID to)157 ALWAYS_INLINE void CTI::emitGetCTIParam(unsigned name, X86Assembler::RegisterID to) 158 158 { 159 159 m_jit.movl_mr(name * sizeof(void*), X86::esp, to); 160 160 } 161 161 162 ALWAYS_INLINE void CTI::emitPutToCallFrameHeader( MacroAssembler::RegisterID from, RegisterFile::CallFrameHeaderEntry entry)162 ALWAYS_INLINE void CTI::emitPutToCallFrameHeader(X86Assembler::RegisterID from, RegisterFile::CallFrameHeaderEntry entry) 163 163 { 164 164 m_jit.movl_rm(from, -((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - entry) * sizeof(Register), X86::edi); 165 165 } 166 166 167 ALWAYS_INLINE void CTI::emitGetFromCallFrameHeader(RegisterFile::CallFrameHeaderEntry entry, MacroAssembler::RegisterID to)167 ALWAYS_INLINE void CTI::emitGetFromCallFrameHeader(RegisterFile::CallFrameHeaderEntry entry, X86Assembler::RegisterID to) 168 168 { 169 169 m_jit.movl_mr(-((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - entry) * sizeof(Register), X86::edi, to); 170 170 } 171 171 172 ALWAYS_INLINE void CTI::emitPutResult(unsigned dst, MacroAssembler::RegisterID from)172 ALWAYS_INLINE void CTI::emitPutResult(unsigned dst, X86Assembler::RegisterID from) 173 173 { 174 174 m_jit.movl_rm(from, dst * sizeof(Register), X86::edi); … … 202 202 emitGetCTIParam(CTI_ARGS_exec, X86::ecx); 203 203 m_jit.cmpl_i32m(0, OBJECT_OFFSET(ExecState, m_exception), X86::ecx); 204 MacroAssembler::JmpSrc noException = m_jit.emitUnlinkedJe();204 X86Assembler::JmpSrc noException = m_jit.emitUnlinkedJe(); 205 205 m_jit.emitInt3(); 206 206 m_jit.link(noException, m_jit.label()); … … 303 303 } 304 304 305 ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImm( MacroAssembler::RegisterID reg, unsigned opcodeIndex)305 ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImm(X86Assembler::RegisterID reg, unsigned opcodeIndex) 306 306 { 307 307 m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, reg); … … 309 309 } 310 310 311 ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImms( MacroAssembler::RegisterID reg1, MacroAssembler::RegisterID reg2, unsigned opcodeIndex)311 ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImms(X86Assembler::RegisterID reg1, X86Assembler::RegisterID reg2, unsigned opcodeIndex) 312 312 { 313 313 m_jit.movl_rr(reg1, X86::ecx); … … 322 322 } 323 323 324 ALWAYS_INLINE void CTI::emitFastArithDeTagImmediate( MacroAssembler::RegisterID reg)324 ALWAYS_INLINE void CTI::emitFastArithDeTagImmediate(X86Assembler::RegisterID reg) 325 325 { 326 326 // op_mod relies on this being a sub - setting zf if result is 0. … … 328 328 } 329 329 330 ALWAYS_INLINE void CTI::emitFastArithReTagImmediate( MacroAssembler::RegisterID reg)330 ALWAYS_INLINE void CTI::emitFastArithReTagImmediate(X86Assembler::RegisterID reg) 331 331 { 332 332 m_jit.addl_i8r(JSImmediate::TagBitTypeInteger, reg); 333 333 } 334 334 335 ALWAYS_INLINE void CTI::emitFastArithPotentiallyReTagImmediate( MacroAssembler::RegisterID reg)335 ALWAYS_INLINE void CTI::emitFastArithPotentiallyReTagImmediate(X86Assembler::RegisterID reg) 336 336 { 337 337 m_jit.orl_rr(JSImmediate::TagBitTypeInteger, reg); 338 338 } 339 339 340 ALWAYS_INLINE void CTI::emitFastArithImmToInt( MacroAssembler::RegisterID reg)340 ALWAYS_INLINE void CTI::emitFastArithImmToInt(X86Assembler::RegisterID reg) 341 341 { 342 342 m_jit.sarl_i8r(1, reg); 343 343 } 344 344 345 ALWAYS_INLINE void CTI::emitFastArithIntToImmOrSlowCase( MacroAssembler::RegisterID reg, unsigned opcodeIndex)345 ALWAYS_INLINE void CTI::emitFastArithIntToImmOrSlowCase(X86Assembler::RegisterID reg, unsigned opcodeIndex) 346 346 { 347 347 m_jit.addl_rr(reg, reg); … … 350 350 } 351 351 352 ALWAYS_INLINE void CTI::emitFastArithIntToImmNoCheck( MacroAssembler::RegisterID reg)352 ALWAYS_INLINE void CTI::emitFastArithIntToImmNoCheck(X86Assembler::RegisterID reg) 353 353 { 354 354 m_jit.addl_rr(reg, reg); … … 397 397 } 398 398 399 MacroAssembler::JmpSrc wasEval;399 X86Assembler::JmpSrc wasEval; 400 400 if (type == OpCallEval) { 401 401 emitGetPutArg(instruction[i + 2].u.operand, 0, X86::ecx); … … 418 418 // Fast check for JS function. 419 419 m_jit.testl_i32r(JSImmediate::TagMask, X86::ecx); 420 MacroAssembler::JmpSrc isNotObject = m_jit.emitUnlinkedJne();420 X86Assembler::JmpSrc isNotObject = m_jit.emitUnlinkedJne(); 421 421 m_jit.cmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsFunctionVptr), X86::ecx); 422 MacroAssembler::JmpSrc isJSFunction = m_jit.emitUnlinkedJe();422 X86Assembler::JmpSrc isJSFunction = m_jit.emitUnlinkedJe(); 423 423 m_jit.link(isNotObject, m_jit.label()); 424 424 … … 427 427 emitGetCTIParam(CTI_ARGS_r, X86::edi); // edi := r 428 428 429 MacroAssembler::JmpSrc wasNotJSFunction = m_jit.emitUnlinkedJmp();429 X86Assembler::JmpSrc wasNotJSFunction = m_jit.emitUnlinkedJmp(); 430 430 m_jit.link(isJSFunction, m_jit.label()); 431 431 … … 435 435 emitGetCTIParam(CTI_ARGS_r, X86::edi); // edi := r 436 436 437 MacroAssembler::JmpDst end = m_jit.label();437 X86Assembler::JmpDst end = m_jit.label(); 438 438 m_jit.link(wasNotJSFunction, end); 439 439 if (type == OpCallEval) … … 446 446 { 447 447 m_jit.subl_i8r(1, X86::esi); 448 MacroAssembler::JmpSrc skipTimeout = m_jit.emitUnlinkedJne();448 X86Assembler::JmpSrc skipTimeout = m_jit.emitUnlinkedJne(); 449 449 emitCall(opcodeIndex, Machine::cti_timeout_check); 450 450 … … 755 755 756 756 m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::zeroImmediate()), X86::eax); 757 MacroAssembler::JmpSrc isZero = m_jit.emitUnlinkedJe();757 X86Assembler::JmpSrc isZero = m_jit.emitUnlinkedJe(); 758 758 m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 759 759 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJne(), i + 2 + target)); … … 839 839 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJe(), i + 2 + target)); 840 840 m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 841 MacroAssembler::JmpSrc isNonZero = m_jit.emitUnlinkedJne();841 X86Assembler::JmpSrc isNonZero = m_jit.emitUnlinkedJne(); 842 842 843 843 m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::falseImmediate()), X86::eax); … … 873 873 int target = instruction[i + 2].u.operand; 874 874 m_jit.movl_i32m(0, sizeof(Register) * retAddrDst, X86::edi); 875 MacroAssembler::JmpDst addrPosition = m_jit.label();875 X86Assembler::JmpDst addrPosition = m_jit.label(); 876 876 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJmp(), i + 2 + target)); 877 MacroAssembler::JmpDst sretTarget = m_jit.label();877 X86Assembler::JmpDst sretTarget = m_jit.label(); 878 878 m_jsrSites.append(JSRInfo(addrPosition, sretTarget)); 879 879 i += 3; … … 982 982 983 983 m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::zeroImmediate()), X86::eax); 984 MacroAssembler::JmpSrc isZero = m_jit.emitUnlinkedJe();984 X86Assembler::JmpSrc isZero = m_jit.emitUnlinkedJe(); 985 985 m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 986 986 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJne(), i + 2 + target)); … … 1064 1064 emitCall(i, Machine::cti_op_next_pname); 1065 1065 m_jit.testl_rr(X86::eax, X86::eax); 1066 MacroAssembler::JmpSrc endOfIter = m_jit.emitUnlinkedJe();1066 X86Assembler::JmpSrc endOfIter = m_jit.emitUnlinkedJe(); 1067 1067 emitPutResult(instruction[i + 1].u.operand); 1068 1068 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJmp(), i + 3 + target)); … … 1284 1284 JSValue* value = m_codeBlock->constantRegisters[src2].jsValue(m_exec); 1285 1285 if (JSImmediate::isNumber(value)) { 1286 MacroAssembler::JmpSrc notImm = iter->from;1286 X86Assembler::JmpSrc notImm = iter->from; 1287 1287 m_jit.link((++iter)->from, m_jit.label()); 1288 1288 m_jit.subl_i32r(getDeTaggedConstantImmediate(value), X86::eax); … … 1299 1299 ASSERT(!(static_cast<unsigned>(instruction[i + 2].u.operand) < m_codeBlock->constantRegisters.size())); 1300 1300 1301 MacroAssembler::JmpSrc notImm = iter->from;1301 X86Assembler::JmpSrc notImm = iter->from; 1302 1302 m_jit.link((++iter)->from, m_jit.label()); 1303 1303 m_jit.subl_rr(X86::edx, X86::eax); … … 1312 1312 } 1313 1313 case op_get_by_val: { 1314 MacroAssembler::JmpSrc notImm = iter->from;1314 X86Assembler::JmpSrc notImm = iter->from; 1315 1315 m_jit.link((++iter)->from, m_jit.label()); 1316 1316 m_jit.link((++iter)->from, m_jit.label()); … … 1326 1326 } 1327 1327 case op_sub: { 1328 MacroAssembler::JmpSrc notImm = iter->from;1328 X86Assembler::JmpSrc notImm = iter->from; 1329 1329 m_jit.link((++iter)->from, m_jit.label()); 1330 1330 m_jit.addl_rr(X86::edx, X86::eax); … … 1348 1348 } 1349 1349 case op_lshift: { 1350 MacroAssembler::JmpSrc notImm1 = iter->from;1351 MacroAssembler::JmpSrc notImm2 = (++iter)->from;1350 X86Assembler::JmpSrc notImm1 = iter->from; 1351 X86Assembler::JmpSrc notImm2 = (++iter)->from; 1352 1352 m_jit.link((++iter)->from, m_jit.label()); 1353 1353 emitGetArg(instruction[i + 2].u.operand, X86::eax); … … 1388 1388 case op_pre_inc: { 1389 1389 unsigned srcDst = instruction[i + 1].u.operand; 1390 MacroAssembler::JmpSrc notImm = iter->from;1390 X86Assembler::JmpSrc notImm = iter->from; 1391 1391 m_jit.link((++iter)->from, m_jit.label()); 1392 1392 m_jit.subl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), X86::eax); … … 1399 1399 } 1400 1400 case op_put_by_val: { 1401 MacroAssembler::JmpSrc notImm = iter->from;1401 X86Assembler::JmpSrc notImm = iter->from; 1402 1402 m_jit.link((++iter)->from, m_jit.label()); 1403 1403 m_jit.link((++iter)->from, m_jit.label()); … … 1426 1426 case op_pre_dec: { 1427 1427 unsigned srcDst = instruction[i + 1].u.operand; 1428 MacroAssembler::JmpSrc notImm = iter->from;1428 X86Assembler::JmpSrc notImm = iter->from; 1429 1429 m_jit.link((++iter)->from, m_jit.label()); 1430 1430 m_jit.addl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), X86::eax); … … 1564 1564 } 1565 1565 case op_mod: { 1566 MacroAssembler::JmpSrc notImm1 = iter->from;1567 MacroAssembler::JmpSrc notImm2 = (++iter)->from;1566 X86Assembler::JmpSrc notImm1 = iter->from; 1567 X86Assembler::JmpSrc notImm2 = (++iter)->from; 1568 1568 m_jit.link((++iter)->from, m_jit.label()); 1569 1569 emitFastArithReTagImmediate(X86::eax); … … 1638 1638 // m_codeBlock->ctiReturnAddressVPCMap.grow(m_calls.size()); 1639 1639 for (Vector<CallRecord>::iterator iter = m_calls.begin(); iter != m_calls.end(); ++iter) { 1640 MacroAssembler::link(code, iter->from, iter->to);1640 X86Assembler::link(code, iter->from, iter->to); 1641 1641 m_codeBlock->ctiReturnAddressVPCMap.add(m_jit.getRelocatedAddress(code, iter->from), iter->opcodeIndex); 1642 1642 } … … 1644 1644 // Link absolute addresses for jsr 1645 1645 for (Vector<JSRInfo>::iterator iter = m_jsrSites.begin(); iter != m_jsrSites.end(); ++iter) 1646 MacroAssembler::linkAbsoluteAddress(code, iter->addrPosition, iter->target);1646 X86Assembler::linkAbsoluteAddress(code, iter->addrPosition, iter->target); 1647 1647 1648 1648 m_codeBlock->ctiCode = code; … … 1653 1653 // Check eax is an object of the right StructureID. 1654 1654 m_jit.testl_i32r(JSImmediate::TagMask, X86::eax); 1655 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();1655 X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1656 1656 m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), X86::eax); 1657 MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();1657 X86Assembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne(); 1658 1658 1659 1659 // Checks out okay! - getDirectOffset … … 1665 1665 ASSERT(code); 1666 1666 1667 MacroAssembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));1668 MacroAssembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));1667 X86Assembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail)); 1668 X86Assembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail)); 1669 1669 1670 1670 m_codeBlock->structureIDAccessStubs.append(code); … … 1683 1683 // check eax is an object of the right StructureID. 1684 1684 m_jit.testl_i32r(JSImmediate::TagMask, X86::eax); 1685 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();1685 X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1686 1686 m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), X86::eax); 1687 MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();1687 X86Assembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne(); 1688 1688 1689 1689 // Check the prototype object's StructureID had not changed. 1690 1690 StructureID** protoStructureIDAddress = &(protoObject->m_structureID); 1691 1691 m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(prototypeStructureID), static_cast<void*>(protoStructureIDAddress)); 1692 MacroAssembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJne();1692 X86Assembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJne(); 1693 1693 1694 1694 // Checks out okay! - getDirectOffset … … 1700 1700 ASSERT(code); 1701 1701 1702 MacroAssembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));1703 MacroAssembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));1704 MacroAssembler::link(code, failureCases3, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));1702 X86Assembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail)); 1703 X86Assembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail)); 1704 X86Assembler::link(code, failureCases3, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail)); 1705 1705 1706 1706 m_codeBlock->structureIDAccessStubs.append(code); … … 1713 1713 ASSERT(count); 1714 1714 1715 Vector< MacroAssembler::JmpSrc> bucketsOfFail;1715 Vector<X86Assembler::JmpSrc> bucketsOfFail; 1716 1716 1717 1717 // Check eax is an object of the right StructureID. … … 1746 1746 1747 1747 for (unsigned i = 0; i < bucketsOfFail.size(); ++i) 1748 MacroAssembler::link(code, bucketsOfFail[i], reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));1748 X86Assembler::link(code, bucketsOfFail[i], reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail)); 1749 1749 m_codeBlock->structureIDAccessStubs.append(code); 1750 1750 return code; … … 1755 1755 // check eax is an object of the right StructureID. 1756 1756 m_jit.testl_i32r(JSImmediate::TagMask, X86::eax); 1757 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();1757 X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1758 1758 m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), X86::eax); 1759 MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();1759 X86Assembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne(); 1760 1760 1761 1761 // checks out okay! - putDirectOffset … … 1767 1767 ASSERT(code); 1768 1768 1769 MacroAssembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_put_by_id_fail));1770 MacroAssembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_put_by_id_fail));1769 X86Assembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_put_by_id_fail)); 1770 X86Assembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_put_by_id_fail)); 1771 1771 1772 1772 m_codeBlock->structureIDAccessStubs.append(code); … … 1779 1779 // Check eax is an array 1780 1780 m_jit.testl_i32r(JSImmediate::TagMask, X86::eax); 1781 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();1781 X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1782 1782 m_jit.cmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsArrayVptr), X86::eax); 1783 MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();1783 X86Assembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne(); 1784 1784 1785 1785 // Checks out okay! - get the length from the storage … … 1788 1788 1789 1789 m_jit.addl_rr(X86::eax, X86::eax); 1790 MacroAssembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo();1790 X86Assembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo(); 1791 1791 m_jit.addl_i8r(1, X86::eax); 1792 1792 … … 1796 1796 ASSERT(code); 1797 1797 1798 MacroAssembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));1799 MacroAssembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));1800 MacroAssembler::link(code, failureCases3, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));1798 X86Assembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail)); 1799 X86Assembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail)); 1800 X86Assembler::link(code, failureCases3, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail)); 1801 1801 1802 1802 return code; … … 1807 1807 // Check eax is a string 1808 1808 m_jit.testl_i32r(JSImmediate::TagMask, X86::eax); 1809 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();1809 X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1810 1810 m_jit.cmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsStringVptr), X86::eax); 1811 MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();1811 X86Assembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne(); 1812 1812 1813 1813 // Checks out okay! - get the length from the Ustring. … … 1816 1816 1817 1817 m_jit.addl_rr(X86::eax, X86::eax); 1818 MacroAssembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo();1818 X86Assembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo(); 1819 1819 m_jit.addl_i8r(1, X86::eax); 1820 1820 … … 1824 1824 ASSERT(code); 1825 1825 1826 MacroAssembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));1827 MacroAssembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));1828 MacroAssembler::link(code, failureCases3, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));1826 X86Assembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail)); 1827 X86Assembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail)); 1828 X86Assembler::link(code, failureCases3, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail)); 1829 1829 1830 1830 return code; … … 1841 1841 } 1842 1842 1843 MacroAssembler jit(exec->machine()->jitCodeBuffer());1843 X86Assembler jit(exec->machine()->jitCodeBuffer()); 1844 1844 WRECParser parser(pattern, ignoreCase, multiline, jit); 1845 1845
Note:
See TracChangeset
for help on using the changeset viewer.