Index: src/mips/macro-assembler-mips.cc |
diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc |
index c7f727bef604e1e0eff71ff0987b00b57f5d2c56..606b41db28fd42850fa9cb7cc3d371b4a490b0e1 100644 |
--- a/src/mips/macro-assembler-mips.cc |
+++ b/src/mips/macro-assembler-mips.cc |
@@ -752,6 +752,64 @@ void MacroAssembler::MultiPopReversed(RegList regs) { |
} |
+void MacroAssembler::MultiPushFPU(RegList regs) { |
+ CpuFeatures::Scope scope(FPU); |
+ int16_t NumSaved = 0; |
+ int16_t NumToPush = NumberOfBitsSet(regs); |
+ |
+ addiu(sp, sp, -8 * NumToPush); |
+ for (int16_t i = kNumRegisters; i > 0; i--) { |
+ if ((regs & (1 << i)) != 0) { |
+ sdc1(FPURegister::from_code(i), |
+ MemOperand(sp, 8 * (NumToPush - ++NumSaved))); |
+ } |
+ } |
Yang
2011/08/31 12:38:44
Consider - for readability - introducing a stack_o
Paul Lind
2011/09/01 06:50:27
Nice suggestion, the code looks much cleaner now.
|
+} |
+ |
+ |
+void MacroAssembler::MultiPushReversedFPU(RegList regs) { |
+ CpuFeatures::Scope scope(FPU); |
+ int16_t NumSaved = 0; |
+ int16_t NumToPush = NumberOfBitsSet(regs); |
+ |
+ addiu(sp, sp, -8 * NumToPush); |
+ for (int16_t i = 0; i < kNumRegisters; i++) { |
+ if ((regs & (1 << i)) != 0) { |
+ sdc1(FPURegister::from_code(i), |
+ MemOperand(sp, 8 * (NumToPush - ++NumSaved))); |
+ } |
+ } |
+} |
+ |
+ |
+void MacroAssembler::MultiPopFPU(RegList regs) { |
+ CpuFeatures::Scope scope(FPU); |
+ int16_t NumSaved = 0; |
+ |
+ for (int16_t i = 0; i < kNumRegisters; i++) { |
+ if ((regs & (1 << i)) != 0) { |
+ ldc1(FPURegister::from_code(i), |
+ MemOperand(sp, 8 * (NumSaved++))); |
+ } |
+ } |
+ addiu(sp, sp, 8 * NumSaved); |
+} |
+ |
+ |
+void MacroAssembler::MultiPopReversedFPU(RegList regs) { |
+ CpuFeatures::Scope scope(FPU); |
+ int16_t NumSaved = 0; |
+ |
+ for (int16_t i = kNumRegisters; i > 0; i--) { |
+ if ((regs & (1 << i)) != 0) { |
+ ldc1(FPURegister::from_code(i), |
+ MemOperand(sp, 8 * (NumSaved++))); |
+ } |
+ } |
+ addiu(sp, sp, 8 * NumSaved); |
+} |
+ |
+ |
void MacroAssembler::Ext(Register rt, |
Register rs, |
uint16_t pos, |