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 1612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1623 | 1623 |
1624 | 1624 |
1625 //--------Coprocessor-instructions---------------- | 1625 //--------Coprocessor-instructions---------------- |
1626 | 1626 |
1627 // Load, store, move. | 1627 // Load, store, move. |
1628 void Assembler::lwc1(FPURegister fd, const MemOperand& src) { | 1628 void Assembler::lwc1(FPURegister fd, const MemOperand& src) { |
1629 GenInstrImmediate(LWC1, src.rm(), fd, src.offset_); | 1629 GenInstrImmediate(LWC1, src.rm(), fd, src.offset_); |
1630 } | 1630 } |
1631 | 1631 |
1632 | 1632 |
1633 void Assembler::ldc1(FPURegister fd, const MemOperand& src) { | 1633 void Assembler::ldc1(FPURegister fd, const MemOperand& src, bool aligned) { |
1634 // Workaround for non-8-byte alignment of HeapNumber, convert 64-bit | 1634 // Workaround for non-8-byte alignment of HeapNumber, convert 64-bit |
1635 // load to two 32-bit loads. | 1635 // load to two 32-bit loads. |
1636 GenInstrImmediate(LWC1, src.rm(), fd, src.offset_); | 1636 if (aligned) { |
1637 FPURegister nextfpreg; | 1637 GenInstrImmediate(LDC1, src.rm(), fd, src.offset_); |
1638 nextfpreg.setcode(fd.code() + 1); | 1638 } else { |
1639 GenInstrImmediate(LWC1, src.rm(), nextfpreg, src.offset_ + 4); | 1639 GenInstrImmediate(LWC1, src.rm(), fd, src.offset_); |
| 1640 FPURegister nextfpreg; |
| 1641 nextfpreg.setcode(fd.code() + 1); |
| 1642 GenInstrImmediate(LWC1, src.rm(), nextfpreg, src.offset_ + 4); |
| 1643 } |
1640 } | 1644 } |
1641 | 1645 |
1642 | 1646 |
1643 void Assembler::swc1(FPURegister fd, const MemOperand& src) { | 1647 void Assembler::swc1(FPURegister fd, const MemOperand& src) { |
1644 GenInstrImmediate(SWC1, src.rm(), fd, src.offset_); | 1648 GenInstrImmediate(SWC1, src.rm(), fd, src.offset_); |
1645 } | 1649 } |
1646 | 1650 |
1647 | 1651 |
1648 void Assembler::sdc1(FPURegister fd, const MemOperand& src) { | 1652 void Assembler::sdc1(FPURegister fd, const MemOperand& src, bool aligned) { |
1649 // Workaround for non-8-byte alignment of HeapNumber, convert 64-bit | 1653 // Workaround for non-8-byte alignment of HeapNumber, convert 64-bit |
1650 // store to two 32-bit stores. | 1654 // store to two 32-bit stores. |
1651 GenInstrImmediate(SWC1, src.rm(), fd, src.offset_); | 1655 if (aligned) { |
1652 FPURegister nextfpreg; | 1656 GenInstrImmediate(SDC1, src.rm(), fd, src.offset_); |
1653 nextfpreg.setcode(fd.code() + 1); | 1657 } else { |
1654 GenInstrImmediate(SWC1, src.rm(), nextfpreg, src.offset_ + 4); | 1658 GenInstrImmediate(SWC1, src.rm(), fd, src.offset_); |
| 1659 FPURegister nextfpreg; |
| 1660 nextfpreg.setcode(fd.code() + 1); |
| 1661 GenInstrImmediate(SWC1, src.rm(), nextfpreg, src.offset_ + 4); |
| 1662 } |
1655 } | 1663 } |
1656 | 1664 |
1657 | 1665 |
1658 void Assembler::mtc1(Register rt, FPURegister fs) { | 1666 void Assembler::mtc1(Register rt, FPURegister fs) { |
1659 GenInstrRegister(COP1, MTC1, rt, fs, f0); | 1667 GenInstrRegister(COP1, MTC1, rt, fs, f0); |
1660 } | 1668 } |
1661 | 1669 |
1662 | 1670 |
1663 void Assembler::mfc1(Register rt, FPURegister fs) { | 1671 void Assembler::mfc1(Register rt, FPURegister fs) { |
1664 GenInstrRegister(COP1, MFC1, rt, fs, f0); | 1672 GenInstrRegister(COP1, MFC1, rt, fs, f0); |
(...skipping 628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2293 } | 2301 } |
2294 | 2302 |
2295 if (patched) { | 2303 if (patched) { |
2296 CPU::FlushICache(pc+2, sizeof(Address)); | 2304 CPU::FlushICache(pc+2, sizeof(Address)); |
2297 } | 2305 } |
2298 } | 2306 } |
2299 | 2307 |
2300 } } // namespace v8::internal | 2308 } } // namespace v8::internal |
2301 | 2309 |
2302 #endif // V8_TARGET_ARCH_MIPS | 2310 #endif // V8_TARGET_ARCH_MIPS |
OLD | NEW |