Index: src/mips/assembler-mips.cc |
diff --git a/src/mips/assembler-mips.cc b/src/mips/assembler-mips.cc |
index 0972a8295cbe40ab049649d9035c783f3cf42e8d..362bf9eca0186284dbf8a187671fca1d3c4a3e2a 100644 |
--- a/src/mips/assembler-mips.cc |
+++ b/src/mips/assembler-mips.cc |
@@ -1630,13 +1630,17 @@ void Assembler::lwc1(FPURegister fd, const MemOperand& src) { |
} |
-void Assembler::ldc1(FPURegister fd, const MemOperand& src) { |
+void Assembler::ldc1(FPURegister fd, const MemOperand& src, bool aligned) { |
// Workaround for non-8-byte alignment of HeapNumber, convert 64-bit |
// load to two 32-bit loads. |
- GenInstrImmediate(LWC1, src.rm(), fd, src.offset_); |
- FPURegister nextfpreg; |
- nextfpreg.setcode(fd.code() + 1); |
- GenInstrImmediate(LWC1, src.rm(), nextfpreg, src.offset_ + 4); |
+ if (aligned) { |
+ GenInstrImmediate(LDC1, src.rm(), fd, src.offset_); |
+ } else { |
+ GenInstrImmediate(LWC1, src.rm(), fd, src.offset_); |
+ FPURegister nextfpreg; |
+ nextfpreg.setcode(fd.code() + 1); |
+ GenInstrImmediate(LWC1, src.rm(), nextfpreg, src.offset_ + 4); |
+ } |
} |
@@ -1645,13 +1649,17 @@ void Assembler::swc1(FPURegister fd, const MemOperand& src) { |
} |
-void Assembler::sdc1(FPURegister fd, const MemOperand& src) { |
+void Assembler::sdc1(FPURegister fd, const MemOperand& src, bool aligned) { |
// Workaround for non-8-byte alignment of HeapNumber, convert 64-bit |
// store to two 32-bit stores. |
- GenInstrImmediate(SWC1, src.rm(), fd, src.offset_); |
- FPURegister nextfpreg; |
- nextfpreg.setcode(fd.code() + 1); |
- GenInstrImmediate(SWC1, src.rm(), nextfpreg, src.offset_ + 4); |
+ if (aligned) { |
+ GenInstrImmediate(SDC1, src.rm(), fd, src.offset_); |
+ } else { |
+ GenInstrImmediate(SWC1, src.rm(), fd, src.offset_); |
+ FPURegister nextfpreg; |
+ nextfpreg.setcode(fd.code() + 1); |
+ GenInstrImmediate(SWC1, src.rm(), nextfpreg, src.offset_ + 4); |
+ } |
} |