Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VM_ASSEMBLER_MIPS_H_ | 5 #ifndef VM_ASSEMBLER_MIPS_H_ |
| 6 #define VM_ASSEMBLER_MIPS_H_ | 6 #define VM_ASSEMBLER_MIPS_H_ |
| 7 | 7 |
| 8 #ifndef VM_ASSEMBLER_H_ | 8 #ifndef VM_ASSEMBLER_H_ |
| 9 #error Do not include assembler_mips.h directly; use assembler.h instead. | 9 #error Do not include assembler_mips.h directly; use assembler.h instead. |
| 10 #endif | 10 #endif |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 60 uint32_t encoding() const { | 60 uint32_t encoding() const { |
| 61 ASSERT(Utils::IsInt(kImmBits, offset_)); | 61 ASSERT(Utils::IsInt(kImmBits, offset_)); |
| 62 uint16_t imm_value = static_cast<uint16_t>(offset_); | 62 uint16_t imm_value = static_cast<uint16_t>(offset_); |
| 63 return (base_ << kRsShift) | imm_value; | 63 return (base_ << kRsShift) | imm_value; |
| 64 } | 64 } |
| 65 | 65 |
| 66 static bool CanHoldOffset(int32_t offset) { | 66 static bool CanHoldOffset(int32_t offset) { |
| 67 return Utils::IsInt(kImmBits, offset); | 67 return Utils::IsInt(kImmBits, offset); |
| 68 } | 68 } |
| 69 | 69 |
| 70 Register get_base() const { return base_; } | |
| 71 int32_t get_offset() const { return offset_; } | |
|
regis
2013/06/15 09:52:48
We usually do not write "get_" for getters:
base()
zra
2013/06/17 15:58:15
Done.
| |
| 72 | |
| 70 private: | 73 private: |
| 71 Register base_; | 74 Register base_; |
| 72 int32_t offset_; | 75 int32_t offset_; |
| 73 }; | 76 }; |
| 74 | 77 |
| 75 | 78 |
| 76 class FieldAddress : public Address { | 79 class FieldAddress : public Address { |
| 77 public: | 80 public: |
| 78 FieldAddress(Register base, int32_t disp) | 81 FieldAddress(Register base, int32_t disp) |
| 79 : Address(base, disp - kHeapObjectTag) { } | 82 : Address(base, disp - kHeapObjectTag) { } |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 432 } | 435 } |
| 433 | 436 |
| 434 void clo(Register rd, Register rs) { | 437 void clo(Register rd, Register rs) { |
| 435 EmitRType(SPECIAL2, rs, rd, rd, 0, CLO); | 438 EmitRType(SPECIAL2, rs, rd, rd, 0, CLO); |
| 436 } | 439 } |
| 437 | 440 |
| 438 void clz(Register rd, Register rs) { | 441 void clz(Register rd, Register rs) { |
| 439 EmitRType(SPECIAL2, rs, rd, rd, 0, CLZ); | 442 EmitRType(SPECIAL2, rs, rd, rd, 0, CLZ); |
| 440 } | 443 } |
| 441 | 444 |
| 445 // Convert a 32-bit float in fs to a 64-bit double in dd. | |
| 446 void cvtds(DRegister dd, FRegister fs) { | |
| 447 FRegister fd = static_cast<FRegister>(dd * 2); | |
| 448 EmitFpuRType(COP1, FMT_S, F0, fs, fd, COP1_CVT_D); | |
| 449 } | |
| 450 | |
| 442 // Converts a 32-bit signed int in fs to a double in fd. | 451 // Converts a 32-bit signed int in fs to a double in fd. |
| 443 void cvtdw(DRegister dd, FRegister fs) { | 452 void cvtdw(DRegister dd, FRegister fs) { |
| 444 FRegister fd = static_cast<FRegister>(dd * 2); | 453 FRegister fd = static_cast<FRegister>(dd * 2); |
| 445 EmitFpuRType(COP1, FMT_W, F0, fs, fd, COP1_CVT_D); | 454 EmitFpuRType(COP1, FMT_W, F0, fs, fd, COP1_CVT_D); |
| 446 } | 455 } |
| 447 | 456 |
| 448 // Converts a 64-bit signed int in fs to a double in fd. | 457 // Converts a 64-bit signed int in fs to a double in fd. |
| 449 void cvtdl(DRegister dd, DRegister ds) { | 458 void cvtdl(DRegister dd, DRegister ds) { |
| 450 FRegister fs = static_cast<FRegister>(ds * 2); | 459 FRegister fs = static_cast<FRegister>(ds * 2); |
| 451 FRegister fd = static_cast<FRegister>(dd * 2); | 460 FRegister fd = static_cast<FRegister>(dd * 2); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 546 void mov(Register rd, Register rs) { | 555 void mov(Register rd, Register rs) { |
| 547 or_(rd, rs, ZR); | 556 or_(rd, rs, ZR); |
| 548 } | 557 } |
| 549 | 558 |
| 550 void movd(DRegister dd, DRegister ds) { | 559 void movd(DRegister dd, DRegister ds) { |
| 551 FRegister fd = static_cast<FRegister>(dd * 2); | 560 FRegister fd = static_cast<FRegister>(dd * 2); |
| 552 FRegister fs = static_cast<FRegister>(ds * 2); | 561 FRegister fs = static_cast<FRegister>(ds * 2); |
| 553 EmitFpuRType(COP1, FMT_D, F0, fs, fd, COP1_MOV); | 562 EmitFpuRType(COP1, FMT_D, F0, fs, fd, COP1_MOV); |
| 554 } | 563 } |
| 555 | 564 |
| 565 // Move if floating point false. | |
| 566 void movf(Register rd, Register rs) { | |
| 567 EmitRType(SPECIAL, rs, R0, rd, 0, MOVCI); | |
| 568 } | |
| 569 | |
| 556 void movn(Register rd, Register rs, Register rt) { | 570 void movn(Register rd, Register rs, Register rt) { |
| 557 EmitRType(SPECIAL, rs, rt, rd, 0, MOVN); | 571 EmitRType(SPECIAL, rs, rt, rd, 0, MOVN); |
| 558 } | 572 } |
| 559 | 573 |
| 574 // Move if floating point true. | |
| 575 void movt(Register rd, Register rs) { | |
| 576 EmitRType(SPECIAL, rs, R1, rd, 0, MOVCI); | |
| 577 } | |
| 578 | |
| 560 void movz(Register rd, Register rs, Register rt) { | 579 void movz(Register rd, Register rs, Register rt) { |
| 561 EmitRType(SPECIAL, rs, rt, rd, 0, MOVZ); | 580 EmitRType(SPECIAL, rs, rt, rd, 0, MOVZ); |
| 562 } | 581 } |
| 563 | 582 |
| 564 void movs(FRegister fd, FRegister fs) { | 583 void movs(FRegister fd, FRegister fs) { |
| 565 EmitFpuRType(COP1, FMT_S, F0, fs, fd, COP1_MOV); | 584 EmitFpuRType(COP1, FMT_S, F0, fs, fd, COP1_MOV); |
| 566 } | 585 } |
| 567 | 586 |
| 568 void mtc1(Register rt, FRegister fs) { | 587 void mtc1(Register rt, FRegister fs) { |
| 569 Emit(COP1 << kOpcodeShift | | 588 Emit(COP1 << kOpcodeShift | |
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 965 } | 984 } |
| 966 | 985 |
| 967 void SmiTag(Register reg) { | 986 void SmiTag(Register reg) { |
| 968 sll(reg, reg, kSmiTagSize); | 987 sll(reg, reg, kSmiTagSize); |
| 969 } | 988 } |
| 970 | 989 |
| 971 void SmiUntag(Register reg) { | 990 void SmiUntag(Register reg) { |
| 972 sra(reg, reg, kSmiTagSize); | 991 sra(reg, reg, kSmiTagSize); |
| 973 } | 992 } |
| 974 | 993 |
| 994 void StoreDToOffset(DRegister reg, Register base, int32_t offset) { | |
| 995 FRegister lo = static_cast<FRegister>(reg * 2); | |
| 996 FRegister hi = static_cast<FRegister>(reg * 2 + 1); | |
| 997 swc1(lo, Address(base, offset)); | |
| 998 swc1(hi, Address(base, offset + kWordSize)); | |
| 999 } | |
| 1000 | |
| 1001 void LoadDFromOffset(DRegister reg, Register base, int32_t offset) { | |
| 1002 FRegister lo = static_cast<FRegister>(reg * 2); | |
| 1003 FRegister hi = static_cast<FRegister>(reg * 2 + 1); | |
| 1004 lwc1(lo, Address(base, offset)); | |
| 1005 lwc1(hi, Address(base, offset + kWordSize)); | |
| 1006 } | |
| 1007 | |
| 975 void ReserveAlignedFrameSpace(intptr_t frame_space); | 1008 void ReserveAlignedFrameSpace(intptr_t frame_space); |
| 976 | 1009 |
| 977 // Create a frame for calling into runtime that preserves all volatile | 1010 // Create a frame for calling into runtime that preserves all volatile |
| 978 // registers. Frame's SP is guaranteed to be correctly aligned and | 1011 // registers. Frame's SP is guaranteed to be correctly aligned and |
| 979 // frame_space bytes are reserved under it. | 1012 // frame_space bytes are reserved under it. |
| 980 void EnterCallRuntimeFrame(intptr_t frame_space); | 1013 void EnterCallRuntimeFrame(intptr_t frame_space); |
| 981 void LeaveCallRuntimeFrame(); | 1014 void LeaveCallRuntimeFrame(); |
| 982 | 1015 |
| 983 void LoadWordFromPoolOffset(Register rd, int32_t offset); | 1016 void LoadWordFromPoolOffset(Register rd, int32_t offset); |
| 984 void LoadObject(Register rd, const Object& object); | 1017 void LoadObject(Register rd, const Object& object); |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1186 Register value, | 1219 Register value, |
| 1187 Label* no_update); | 1220 Label* no_update); |
| 1188 | 1221 |
| 1189 DISALLOW_ALLOCATION(); | 1222 DISALLOW_ALLOCATION(); |
| 1190 DISALLOW_COPY_AND_ASSIGN(Assembler); | 1223 DISALLOW_COPY_AND_ASSIGN(Assembler); |
| 1191 }; | 1224 }; |
| 1192 | 1225 |
| 1193 } // namespace dart | 1226 } // namespace dart |
| 1194 | 1227 |
| 1195 #endif // VM_ASSEMBLER_MIPS_H_ | 1228 #endif // VM_ASSEMBLER_MIPS_H_ |
| OLD | NEW |