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_CONSTANTS_ARM_H_ | 5 #ifndef VM_CONSTANTS_ARM_H_ |
| 6 #define VM_CONSTANTS_ARM_H_ | 6 #define VM_CONSTANTS_ARM_H_ |
| 7 | 7 |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 | 9 |
| 10 namespace dart { | 10 namespace dart { |
| 11 | 11 |
| 12 // We support both VFPv3-D16 and VFPv3-D32 profiles, but currently only one at | 12 // We support both VFPv3-D16 and VFPv3-D32 profiles, but currently only one at |
| 13 // a time. | 13 // a time. |
| 14 // TODO(zra): Detect number of registers at runtime by querying /proc/cpuinfo. | 14 // TODO(zra): Detect number of registers at runtime by querying /proc/cpuinfo. |
| 15 #define VFPv3_D32 | 15 #define VFPv3_D16 |
|
regis
2013/07/22 22:47:11
After you figure out the issue on the hardware, yo
| |
| 16 #if defined(VFPv3_D16) == defined(VFPv3_D32) | 16 #if defined(VFPv3_D16) == defined(VFPv3_D32) |
| 17 #error "Exactly one of VFPv3_D16 or VFPv3_D32 can be defined at a time." | 17 #error "Exactly one of VFPv3_D16 or VFPv3_D32 can be defined at a time." |
| 18 #endif | 18 #endif |
| 19 | 19 |
| 20 | 20 |
| 21 enum Register { | 21 enum Register { |
| 22 kFirstFreeCpuRegister = 0, | 22 kFirstFreeCpuRegister = 0, |
| 23 R0 = 0, | 23 R0 = 0, |
| 24 R1 = 1, | 24 R1 = 1, |
| 25 R2 = 2, | 25 R2 = 2, |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 158 | 158 |
| 159 static inline DRegister EvenDRegisterOf(QRegister q) { | 159 static inline DRegister EvenDRegisterOf(QRegister q) { |
| 160 return static_cast<DRegister>(q * 2); | 160 return static_cast<DRegister>(q * 2); |
| 161 } | 161 } |
| 162 | 162 |
| 163 static inline DRegister OddDRegisterOf(QRegister q) { | 163 static inline DRegister OddDRegisterOf(QRegister q) { |
| 164 return static_cast<DRegister>((q * 2) + 1); | 164 return static_cast<DRegister>((q * 2) + 1); |
| 165 } | 165 } |
| 166 | 166 |
| 167 | 167 |
| 168 static inline SRegister EvenSRegisterOf(DRegister d) { | 168 static inline SRegister EvenSRegisterOf(DRegister d) { |
|
regis
2013/07/22 22:47:11
Assert that d is in range. It could be out of rang
zra
2013/07/22 23:20:09
I've added an assert under VFPv3_D32.
| |
| 169 return static_cast<SRegister>(d * 2); | 169 return static_cast<SRegister>(d * 2); |
| 170 } | 170 } |
| 171 | 171 |
| 172 static inline SRegister OddSRegisterOf(DRegister d) { | 172 static inline SRegister OddSRegisterOf(DRegister d) { |
|
regis
2013/07/22 22:47:11
ditto
zra
2013/07/22 23:20:09
Same.
| |
| 173 return static_cast<SRegister>((d * 2) + 1); | 173 return static_cast<SRegister>((d * 2) + 1); |
| 174 } | 174 } |
| 175 | 175 |
| 176 | 176 |
| 177 // Register aliases for floating point scratch registers. | 177 // Register aliases for floating point scratch registers. |
| 178 const QRegister QTMP = Q7; // Overlaps with DTMP, STMP. | 178 const QRegister QTMP = Q7; // Overlaps with DTMP, STMP. |
| 179 const DRegister DTMP = EvenDRegisterOf(QTMP); // Overlaps with STMP. | 179 const DRegister DTMP = EvenDRegisterOf(QTMP); // Overlaps with STMP. |
| 180 const SRegister STMP = EvenSRegisterOf(DTMP); | 180 const SRegister STMP = EvenSRegisterOf(DTMP); |
| 181 | 181 |
| 182 // Architecture independent aliases. | 182 // Architecture independent aliases. |
| (...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 650 static Instr* At(uword pc) { return reinterpret_cast<Instr*>(pc); } | 650 static Instr* At(uword pc) { return reinterpret_cast<Instr*>(pc); } |
| 651 | 651 |
| 652 private: | 652 private: |
| 653 DISALLOW_ALLOCATION(); | 653 DISALLOW_ALLOCATION(); |
| 654 DISALLOW_IMPLICIT_CONSTRUCTORS(Instr); | 654 DISALLOW_IMPLICIT_CONSTRUCTORS(Instr); |
| 655 }; | 655 }; |
| 656 | 656 |
| 657 } // namespace dart | 657 } // namespace dart |
| 658 | 658 |
| 659 #endif // VM_CONSTANTS_ARM_H_ | 659 #endif // VM_CONSTANTS_ARM_H_ |
| OLD | NEW |