Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(517)

Side by Side Diff: runtime/vm/constants_arm.h

Issue 1417433002: Don't touch x18 on ARM64 - it is globally reserved on iOS. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | runtime/vm/constants_arm64.h » ('j') | runtime/vm/simulator_arm64.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/globals.h" 8 #include "platform/globals.h"
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 10
11 namespace dart { 11 namespace dart {
12 12
13 // We support both VFPv3-D16 and VFPv3-D32 profiles, but currently only one at 13 // We support both VFPv3-D16 and VFPv3-D32 profiles, but currently only one at
14 // a time. 14 // a time.
15 #if defined(__ARM_ARCH_7A__) 15 #if defined(__ARM_ARCH_7A__)
16 #define VFPv3_D32 16 #define VFPv3_D32
17 #elif defined(TARGET_ARCH_ARM) && !defined(HOST_ARCH_ARM) 17 #elif defined(TARGET_ARCH_ARM) && !defined(HOST_ARCH_ARM)
18 // If we're running in the simulator, use all 32. 18 // If we're running in the simulator, use all 32.
19 #define VFPv3_D32 19 #define VFPv3_D32
20 #else 20 #else
21 #define VFPv3_D16 21 #define VFPv3_D16
22 #endif 22 #endif
23 #if defined(VFPv3_D16) == defined(VFPv3_D32) 23 #if defined(VFPv3_D16) == defined(VFPv3_D32)
24 #error "Exactly one of VFPv3_D16 or VFPv3_D32 can be defined at a time." 24 #error "Exactly one of VFPv3_D16 or VFPv3_D32 can be defined at a time."
25 #endif 25 #endif
26 26
27 27
28 enum Register { 28 enum Register {
29 kNoRegister = -1,
30 kFirstFreeCpuRegister = 0,
31 R0 = 0, 29 R0 = 0,
32 R1 = 1, 30 R1 = 1,
33 R2 = 2, 31 R2 = 2,
34 R3 = 3, 32 R3 = 3,
35 R4 = 4, 33 R4 = 4,
36 R5 = 5, 34 R5 = 5,
37 R6 = 6, 35 R6 = 6,
38 R7 = 7, 36 R7 = 7,
39 R8 = 8, 37 R8 = 8, // THR
40 R9 = 9, 38 R9 = 9, // PP
41 R10 = 10, 39 R10 = 10, // CTX
42 R11 = 11, 40 R11 = 11, // FP
43 R12 = 12, 41 R12 = 12, // IP aka TMP
44 R13 = 13, 42 R13 = 13, // SP
45 R14 = 14, 43 R14 = 14, // LR
46 kLastFreeCpuRegister = 14, 44 R15 = 15, // PC
47 R15 = 15, 45 kNumberOfCpuRegisters = 16,
46 kNoRegister = -1, // Signals an illegal register.
47
48 // Aliases.
48 FP = R11, 49 FP = R11,
49 IP = R12, 50 IP = R12,
50 SP = R13, 51 SP = R13,
51 LR = R14, 52 LR = R14,
52 PC = R15, 53 PC = R15,
53 kNumberOfCpuRegisters = 16,
54 }; 54 };
55 55
56 56
57 // Values for single-precision floating point registers. 57 // Values for single-precision floating point registers.
58 enum SRegister { 58 enum SRegister {
59 kNoSRegister = -1, 59 kNoSRegister = -1,
60 S0 = 0, 60 S0 = 0,
61 S1 = 1, 61 S1 = 1,
62 S2 = 2, 62 S2 = 2,
63 S3 = 3, 63 S3 = 3,
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 const RegList kAbiArgumentCpuRegs = 262 const RegList kAbiArgumentCpuRegs =
263 (1 << R0) | (1 << R1) | (1 << R2) | (1 << R3); 263 (1 << R0) | (1 << R1) | (1 << R2) | (1 << R3);
264 const RegList kAbiPreservedCpuRegs = 264 const RegList kAbiPreservedCpuRegs =
265 (1 << R4) | (1 << R5) | (1 << R6) | (1 << R7) | 265 (1 << R4) | (1 << R5) | (1 << R6) | (1 << R7) |
266 (1 << R8) | (1 << R9) | (1 << R10); 266 (1 << R8) | (1 << R9) | (1 << R10);
267 const int kAbiPreservedCpuRegCount = 7; 267 const int kAbiPreservedCpuRegCount = 7;
268 const QRegister kAbiFirstPreservedFpuReg = Q4; 268 const QRegister kAbiFirstPreservedFpuReg = Q4;
269 const QRegister kAbiLastPreservedFpuReg = Q7; 269 const QRegister kAbiLastPreservedFpuReg = Q7;
270 const int kAbiPreservedFpuRegCount = 4; 270 const int kAbiPreservedFpuRegCount = 4;
271 271
272 const RegList kReservedCpuRegisters =
273 (1 << SPREG) |
274 (1 << FPREG) |
275 (1 << TMP) |
276 (1 << PP) |
277 (1 << THR) |
278 (1 << PC);
272 // CPU registers available to Dart allocator. 279 // CPU registers available to Dart allocator.
273 const RegList kDartAvailableCpuRegs = 280 const RegList kDartAvailableCpuRegs =
274 (1 << R0) | (1 << R1) | (1 << R2) | (1 << R3) | 281 kAllCpuRegistersList & ~kReservedCpuRegisters;
275 (1 << R4) | (1 << R5) | (1 << R6) | (1 << R7) |
276 (1 << R8) | (1 << R14);
277
278 // Registers available to Dart that are not preserved by runtime calls. 282 // Registers available to Dart that are not preserved by runtime calls.
279 const RegList kDartVolatileCpuRegs = 283 const RegList kDartVolatileCpuRegs =
280 kDartAvailableCpuRegs & ~kAbiPreservedCpuRegs; 284 kDartAvailableCpuRegs & ~kAbiPreservedCpuRegs;
281 const int kDartVolatileCpuRegCount = 5; 285 const int kDartVolatileCpuRegCount = 5;
282 const QRegister kDartFirstVolatileFpuReg = Q0; 286 const QRegister kDartFirstVolatileFpuReg = Q0;
283 const QRegister kDartLastVolatileFpuReg = Q3; 287 const QRegister kDartLastVolatileFpuReg = Q3;
284 const int kDartVolatileFpuRegCount = 4; 288 const int kDartVolatileFpuRegCount = 4;
285 289
286 290
287 // Values for the condition field as defined in section A3.2. 291 // Values for the condition field as defined in section A3.2.
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 static Instr* At(uword pc) { return reinterpret_cast<Instr*>(pc); } 711 static Instr* At(uword pc) { return reinterpret_cast<Instr*>(pc); }
708 712
709 private: 713 private:
710 DISALLOW_ALLOCATION(); 714 DISALLOW_ALLOCATION();
711 DISALLOW_IMPLICIT_CONSTRUCTORS(Instr); 715 DISALLOW_IMPLICIT_CONSTRUCTORS(Instr);
712 }; 716 };
713 717
714 } // namespace dart 718 } // namespace dart
715 719
716 #endif // VM_CONSTANTS_ARM_H_ 720 #endif // VM_CONSTANTS_ARM_H_
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/constants_arm64.h » ('j') | runtime/vm/simulator_arm64.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698