Index: runtime/vm/assembler_mips.h |
=================================================================== |
--- runtime/vm/assembler_mips.h (revision 24063) |
+++ runtime/vm/assembler_mips.h (working copy) |
@@ -67,6 +67,9 @@ |
return Utils::IsInt(kImmBits, offset); |
} |
+ Register base() const { return base_; } |
+ int32_t offset() const { return offset_; } |
+ |
private: |
Register base_; |
int32_t offset_; |
@@ -439,6 +442,12 @@ |
EmitRType(SPECIAL2, rs, rd, rd, 0, CLZ); |
} |
+ // Convert a 32-bit float in fs to a 64-bit double in dd. |
+ void cvtds(DRegister dd, FRegister fs) { |
+ FRegister fd = static_cast<FRegister>(dd * 2); |
+ EmitFpuRType(COP1, FMT_S, F0, fs, fd, COP1_CVT_D); |
+ } |
+ |
// Converts a 32-bit signed int in fs to a double in fd. |
void cvtdw(DRegister dd, FRegister fs) { |
FRegister fd = static_cast<FRegister>(dd * 2); |
@@ -553,10 +562,20 @@ |
EmitFpuRType(COP1, FMT_D, F0, fs, fd, COP1_MOV); |
} |
+ // Move if floating point false. |
+ void movf(Register rd, Register rs) { |
+ EmitRType(SPECIAL, rs, R0, rd, 0, MOVCI); |
+ } |
+ |
void movn(Register rd, Register rs, Register rt) { |
EmitRType(SPECIAL, rs, rt, rd, 0, MOVN); |
} |
+ // Move if floating point true. |
+ void movt(Register rd, Register rs) { |
+ EmitRType(SPECIAL, rs, R1, rd, 0, MOVCI); |
+ } |
+ |
void movz(Register rd, Register rs, Register rt) { |
EmitRType(SPECIAL, rs, rt, rd, 0, MOVZ); |
} |
@@ -972,6 +991,20 @@ |
sra(reg, reg, kSmiTagSize); |
} |
+ void StoreDToOffset(DRegister reg, Register base, int32_t offset) { |
+ FRegister lo = static_cast<FRegister>(reg * 2); |
+ FRegister hi = static_cast<FRegister>(reg * 2 + 1); |
+ swc1(lo, Address(base, offset)); |
+ swc1(hi, Address(base, offset + kWordSize)); |
+ } |
+ |
+ void LoadDFromOffset(DRegister reg, Register base, int32_t offset) { |
+ FRegister lo = static_cast<FRegister>(reg * 2); |
+ FRegister hi = static_cast<FRegister>(reg * 2 + 1); |
+ lwc1(lo, Address(base, offset)); |
+ lwc1(hi, Address(base, offset + kWordSize)); |
+ } |
+ |
void ReserveAlignedFrameSpace(intptr_t frame_space); |
// Create a frame for calling into runtime that preserves all volatile |