OLD | NEW |
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
2 // All Rights Reserved. | 2 // All Rights Reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
10 // | 10 // |
(...skipping 1301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1312 | 1312 |
1313 | 1313 |
1314 void Assembler::srav(Register rd, Register rt, Register rs) { | 1314 void Assembler::srav(Register rd, Register rt, Register rs) { |
1315 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SRAV); | 1315 GenInstrRegister(SPECIAL, rs, rt, rd, 0, SRAV); |
1316 } | 1316 } |
1317 | 1317 |
1318 | 1318 |
1319 void Assembler::rotr(Register rd, Register rt, uint16_t sa) { | 1319 void Assembler::rotr(Register rd, Register rt, uint16_t sa) { |
1320 // Should be called via MacroAssembler::Ror. | 1320 // Should be called via MacroAssembler::Ror. |
1321 ASSERT(rd.is_valid() && rt.is_valid() && is_uint5(sa)); | 1321 ASSERT(rd.is_valid() && rt.is_valid() && is_uint5(sa)); |
1322 ASSERT(mips32r2); | 1322 ASSERT(kArchVariant == kMips32r2); |
1323 Instr instr = SPECIAL | (1 << kRsShift) | (rt.code() << kRtShift) | 1323 Instr instr = SPECIAL | (1 << kRsShift) | (rt.code() << kRtShift) |
1324 | (rd.code() << kRdShift) | (sa << kSaShift) | SRL; | 1324 | (rd.code() << kRdShift) | (sa << kSaShift) | SRL; |
1325 emit(instr); | 1325 emit(instr); |
1326 } | 1326 } |
1327 | 1327 |
1328 | 1328 |
1329 void Assembler::rotrv(Register rd, Register rt, Register rs) { | 1329 void Assembler::rotrv(Register rd, Register rt, Register rs) { |
1330 // Should be called via MacroAssembler::Ror. | 1330 // Should be called via MacroAssembler::Ror. |
1331 ASSERT(rd.is_valid() && rt.is_valid() && rs.is_valid() ); | 1331 ASSERT(rd.is_valid() && rt.is_valid() && rs.is_valid() ); |
1332 ASSERT(mips32r2); | 1332 ASSERT(kArchVariant == kMips32r2); |
1333 Instr instr = SPECIAL | (rs.code() << kRsShift) | (rt.code() << kRtShift) | 1333 Instr instr = SPECIAL | (rs.code() << kRsShift) | (rt.code() << kRtShift) |
1334 | (rd.code() << kRdShift) | (1 << kSaShift) | SRLV; | 1334 | (rd.code() << kRdShift) | (1 << kSaShift) | SRLV; |
1335 emit(instr); | 1335 emit(instr); |
1336 } | 1336 } |
1337 | 1337 |
1338 | 1338 |
1339 //------------Memory-instructions------------- | 1339 //------------Memory-instructions------------- |
1340 | 1340 |
1341 // Helper for base-reg + offset, when offset is larger than int16. | 1341 // Helper for base-reg + offset, when offset is larger than int16. |
1342 void Assembler::LoadRegPlusOffsetToAt(const MemOperand& src) { | 1342 void Assembler::LoadRegPlusOffsetToAt(const MemOperand& src) { |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1597 // Bit twiddling. | 1597 // Bit twiddling. |
1598 void Assembler::clz(Register rd, Register rs) { | 1598 void Assembler::clz(Register rd, Register rs) { |
1599 // Clz instr requires same GPR number in 'rd' and 'rt' fields. | 1599 // Clz instr requires same GPR number in 'rd' and 'rt' fields. |
1600 GenInstrRegister(SPECIAL2, rs, rd, rd, 0, CLZ); | 1600 GenInstrRegister(SPECIAL2, rs, rd, rd, 0, CLZ); |
1601 } | 1601 } |
1602 | 1602 |
1603 | 1603 |
1604 void Assembler::ins_(Register rt, Register rs, uint16_t pos, uint16_t size) { | 1604 void Assembler::ins_(Register rt, Register rs, uint16_t pos, uint16_t size) { |
1605 // Should be called via MacroAssembler::Ins. | 1605 // Should be called via MacroAssembler::Ins. |
1606 // Ins instr has 'rt' field as dest, and two uint5: msb, lsb. | 1606 // Ins instr has 'rt' field as dest, and two uint5: msb, lsb. |
1607 ASSERT(mips32r2); | 1607 ASSERT(kArchVariant == kMips32r2); |
1608 GenInstrRegister(SPECIAL3, rs, rt, pos + size - 1, pos, INS); | 1608 GenInstrRegister(SPECIAL3, rs, rt, pos + size - 1, pos, INS); |
1609 } | 1609 } |
1610 | 1610 |
1611 | 1611 |
1612 void Assembler::ext_(Register rt, Register rs, uint16_t pos, uint16_t size) { | 1612 void Assembler::ext_(Register rt, Register rs, uint16_t pos, uint16_t size) { |
1613 // Should be called via MacroAssembler::Ext. | 1613 // Should be called via MacroAssembler::Ext. |
1614 // Ext instr has 'rt' field as dest, and two uint5: msb, lsb. | 1614 // Ext instr has 'rt' field as dest, and two uint5: msb, lsb. |
1615 ASSERT(mips32r2); | 1615 ASSERT(kArchVariant == kMips32r2); |
1616 GenInstrRegister(SPECIAL3, rs, rt, size - 1, pos, EXT); | 1616 GenInstrRegister(SPECIAL3, rs, rt, size - 1, pos, EXT); |
1617 } | 1617 } |
1618 | 1618 |
1619 | 1619 |
1620 //--------Coprocessor-instructions---------------- | 1620 //--------Coprocessor-instructions---------------- |
1621 | 1621 |
1622 // Load, store, move. | 1622 // Load, store, move. |
1623 void Assembler::lwc1(FPURegister fd, const MemOperand& src) { | 1623 void Assembler::lwc1(FPURegister fd, const MemOperand& src) { |
1624 GenInstrImmediate(LWC1, src.rm(), fd, src.offset_); | 1624 GenInstrImmediate(LWC1, src.rm(), fd, src.offset_); |
1625 } | 1625 } |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1765 GenInstrRegister(COP1, S, f0, fs, fd, CEIL_W_S); | 1765 GenInstrRegister(COP1, S, f0, fs, fd, CEIL_W_S); |
1766 } | 1766 } |
1767 | 1767 |
1768 | 1768 |
1769 void Assembler::ceil_w_d(FPURegister fd, FPURegister fs) { | 1769 void Assembler::ceil_w_d(FPURegister fd, FPURegister fs) { |
1770 GenInstrRegister(COP1, D, f0, fs, fd, CEIL_W_D); | 1770 GenInstrRegister(COP1, D, f0, fs, fd, CEIL_W_D); |
1771 } | 1771 } |
1772 | 1772 |
1773 | 1773 |
1774 void Assembler::cvt_l_s(FPURegister fd, FPURegister fs) { | 1774 void Assembler::cvt_l_s(FPURegister fd, FPURegister fs) { |
1775 ASSERT(mips32r2); | 1775 ASSERT(kArchVariant == kMips32r2); |
1776 GenInstrRegister(COP1, S, f0, fs, fd, CVT_L_S); | 1776 GenInstrRegister(COP1, S, f0, fs, fd, CVT_L_S); |
1777 } | 1777 } |
1778 | 1778 |
1779 | 1779 |
1780 void Assembler::cvt_l_d(FPURegister fd, FPURegister fs) { | 1780 void Assembler::cvt_l_d(FPURegister fd, FPURegister fs) { |
1781 ASSERT(mips32r2); | 1781 ASSERT(kArchVariant == kMips32r2); |
1782 GenInstrRegister(COP1, D, f0, fs, fd, CVT_L_D); | 1782 GenInstrRegister(COP1, D, f0, fs, fd, CVT_L_D); |
1783 } | 1783 } |
1784 | 1784 |
1785 | 1785 |
1786 void Assembler::trunc_l_s(FPURegister fd, FPURegister fs) { | 1786 void Assembler::trunc_l_s(FPURegister fd, FPURegister fs) { |
1787 ASSERT(mips32r2); | 1787 ASSERT(kArchVariant == kMips32r2); |
1788 GenInstrRegister(COP1, S, f0, fs, fd, TRUNC_L_S); | 1788 GenInstrRegister(COP1, S, f0, fs, fd, TRUNC_L_S); |
1789 } | 1789 } |
1790 | 1790 |
1791 | 1791 |
1792 void Assembler::trunc_l_d(FPURegister fd, FPURegister fs) { | 1792 void Assembler::trunc_l_d(FPURegister fd, FPURegister fs) { |
1793 ASSERT(mips32r2); | 1793 ASSERT(kArchVariant == kMips32r2); |
1794 GenInstrRegister(COP1, D, f0, fs, fd, TRUNC_L_D); | 1794 GenInstrRegister(COP1, D, f0, fs, fd, TRUNC_L_D); |
1795 } | 1795 } |
1796 | 1796 |
1797 | 1797 |
1798 void Assembler::round_l_s(FPURegister fd, FPURegister fs) { | 1798 void Assembler::round_l_s(FPURegister fd, FPURegister fs) { |
1799 GenInstrRegister(COP1, S, f0, fs, fd, ROUND_L_S); | 1799 GenInstrRegister(COP1, S, f0, fs, fd, ROUND_L_S); |
1800 } | 1800 } |
1801 | 1801 |
1802 | 1802 |
1803 void Assembler::round_l_d(FPURegister fd, FPURegister fs) { | 1803 void Assembler::round_l_d(FPURegister fd, FPURegister fs) { |
(...skipping 20 matching lines...) Expand all Loading... |
1824 GenInstrRegister(COP1, D, f0, fs, fd, CEIL_L_D); | 1824 GenInstrRegister(COP1, D, f0, fs, fd, CEIL_L_D); |
1825 } | 1825 } |
1826 | 1826 |
1827 | 1827 |
1828 void Assembler::cvt_s_w(FPURegister fd, FPURegister fs) { | 1828 void Assembler::cvt_s_w(FPURegister fd, FPURegister fs) { |
1829 GenInstrRegister(COP1, W, f0, fs, fd, CVT_S_W); | 1829 GenInstrRegister(COP1, W, f0, fs, fd, CVT_S_W); |
1830 } | 1830 } |
1831 | 1831 |
1832 | 1832 |
1833 void Assembler::cvt_s_l(FPURegister fd, FPURegister fs) { | 1833 void Assembler::cvt_s_l(FPURegister fd, FPURegister fs) { |
1834 ASSERT(mips32r2); | 1834 ASSERT(kArchVariant == kMips32r2); |
1835 GenInstrRegister(COP1, L, f0, fs, fd, CVT_S_L); | 1835 GenInstrRegister(COP1, L, f0, fs, fd, CVT_S_L); |
1836 } | 1836 } |
1837 | 1837 |
1838 | 1838 |
1839 void Assembler::cvt_s_d(FPURegister fd, FPURegister fs) { | 1839 void Assembler::cvt_s_d(FPURegister fd, FPURegister fs) { |
1840 GenInstrRegister(COP1, D, f0, fs, fd, CVT_S_D); | 1840 GenInstrRegister(COP1, D, f0, fs, fd, CVT_S_D); |
1841 } | 1841 } |
1842 | 1842 |
1843 | 1843 |
1844 void Assembler::cvt_d_w(FPURegister fd, FPURegister fs) { | 1844 void Assembler::cvt_d_w(FPURegister fd, FPURegister fs) { |
1845 GenInstrRegister(COP1, W, f0, fs, fd, CVT_D_W); | 1845 GenInstrRegister(COP1, W, f0, fs, fd, CVT_D_W); |
1846 } | 1846 } |
1847 | 1847 |
1848 | 1848 |
1849 void Assembler::cvt_d_l(FPURegister fd, FPURegister fs) { | 1849 void Assembler::cvt_d_l(FPURegister fd, FPURegister fs) { |
1850 ASSERT(mips32r2); | 1850 ASSERT(kArchVariant == kMips32r2); |
1851 GenInstrRegister(COP1, L, f0, fs, fd, CVT_D_L); | 1851 GenInstrRegister(COP1, L, f0, fs, fd, CVT_D_L); |
1852 } | 1852 } |
1853 | 1853 |
1854 | 1854 |
1855 void Assembler::cvt_d_s(FPURegister fd, FPURegister fs) { | 1855 void Assembler::cvt_d_s(FPURegister fd, FPURegister fs) { |
1856 GenInstrRegister(COP1, S, f0, fs, fd, CVT_D_S); | 1856 GenInstrRegister(COP1, S, f0, fs, fd, CVT_D_S); |
1857 } | 1857 } |
1858 | 1858 |
1859 | 1859 |
1860 // Conditions. | 1860 // Conditions. |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2271 } | 2271 } |
2272 | 2272 |
2273 if (patched) { | 2273 if (patched) { |
2274 CPU::FlushICache(pc+2, sizeof(Address)); | 2274 CPU::FlushICache(pc+2, sizeof(Address)); |
2275 } | 2275 } |
2276 } | 2276 } |
2277 | 2277 |
2278 } } // namespace v8::internal | 2278 } } // namespace v8::internal |
2279 | 2279 |
2280 #endif // V8_TARGET_ARCH_MIPS | 2280 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |