Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(958)

Side by Side Diff: src/mips/assembler-mips.cc

Issue 35463002: MIPS: Enable aligned keyed stores and loads for double arrays. Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/mips/assembler-mips.h ('k') | src/mips/lithium-codegen-mips.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « src/mips/assembler-mips.h ('k') | src/mips/lithium-codegen-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698