Index: runtime/vm/constants_arm64.h |
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h |
index ab76fd16b9c433fb055da7f951df57882f71f34b..b14ce5533515bfc00bd3419083aa1cc39d1d1215 100644 |
--- a/runtime/vm/constants_arm64.h |
+++ b/runtime/vm/constants_arm64.h |
@@ -10,7 +10,6 @@ |
namespace dart { |
enum Register { |
- kFirstFreeCpuRegister = 0, |
R0 = 0, |
R1 = 1, |
R2 = 2, |
@@ -29,16 +28,15 @@ enum Register { |
R15 = 15, |
R16 = 16, // IP0 aka TMP |
R17 = 17, // IP1 aka TMP2 |
- R18 = 18, // SP in Dart code. |
- R19 = 19, |
- R20 = 20, |
+ R18 = 18, // "platform register" on iOS. |
+ R19 = 19, // SP in Dart code. |
+ R20 = 20, // THR |
R21 = 21, |
R22 = 22, |
R23 = 23, |
R24 = 24, |
R25 = 25, |
R26 = 26, |
- kLastFreeCpuRegister = 26, |
R27 = 27, // PP |
R28 = 28, // CTX |
R29 = 29, // FP |
@@ -55,11 +53,12 @@ enum Register { |
// Aliases. |
IP0 = R16, |
IP1 = R17, |
- SP = R18, |
+ SP = R19, |
FP = R29, |
LR = R30, |
}; |
+ |
enum VRegister { |
V0 = 0, |
V1 = 1, |
@@ -113,12 +112,13 @@ const Register CTX = R28; // Location of current context at method entry. |
const Register PP = R27; // Caches object pool pointer in generated code. |
const Register CODE_REG = R24; |
const Register FPREG = FP; // Frame pointer register. |
-const Register SPREG = R18; // Stack pointer register. |
+const Register SPREG = R19; // Stack pointer register. |
const Register LRREG = LR; // Link register. |
const Register ICREG = R5; // IC data register. |
const Register ARGS_DESC_REG = R4; // Arguments descriptor register. |
const Register THR = R20; // Caches current thread in generated code. |
+ |
// Exception object is passed in this register to the catch handlers when an |
// exception is thrown. |
const Register kExceptionObjectReg = R0; |
@@ -143,25 +143,31 @@ const RegList kAbiArgumentCpuRegs = |
(1 << R0) | (1 << R1) | (1 << R2) | (1 << R3) | |
(1 << R4) | (1 << R5) | (1 << R6) | (1 << R7); |
const RegList kAbiPreservedCpuRegs = |
- (1 << R19) | (1 << R20) | (1 << R21) | (1 << R22) | |
- (1 << R23) | (1 << R24) | (1 << R25) | (1 << R26) | |
- (1 << R27) | (1 << R28); |
-const Register kAbiFirstPreservedCpuReg = R19; |
+ (1 << R20) | (1 << R21) | (1 << R22) | (1 << R23) | |
+ (1 << R24) | (1 << R25) | (1 << R26) | (1 << R27) | |
+ (1 << R28); |
+const Register kAbiFirstPreservedCpuReg = R20; |
const Register kAbiLastPreservedCpuReg = R28; |
-const int kAbiPreservedCpuRegCount = 10; |
+const int kAbiPreservedCpuRegCount = 9; |
const VRegister kAbiFirstPreservedFpuReg = V8; |
const VRegister kAbiLastPreservedFpuReg = V15; |
const int kAbiPreservedFpuRegCount = 8; |
+const intptr_t kReservedCpuRegisters = |
+ (1 << SPREG) | // Dart SP |
+ (1 << FPREG) | |
+ (1 << TMP) | |
+ (1 << TMP2) | |
+ (1 << PP) | |
+ (1 << THR) | |
+ (1 << LR) | |
+ (1 << R31) | // C++ SP |
+ (1 << CTX) | |
+ (1 << R18); // iOS platform register. |
+ // TODO(rmacnak): Only reserve on Mac & iOS. |
// CPU registers available to Dart allocator. |
const RegList kDartAvailableCpuRegs = |
- (1 << R0) | (1 << R1) | (1 << R2) | (1 << R3) | |
- (1 << R4) | (1 << R5) | (1 << R6) | (1 << R7) | |
- (1 << R8) | (1 << R9) | (1 << R10) | (1 << R11) | |
- (1 << R12) | (1 << R13) | (1 << R14) | (1 << R15) | |
- (1 << R19) | (1 << R20) | (1 << R21) | (1 << R22) | |
- (1 << R23) | (1 << R24) | (1 << R25) | (1 << R26); |
- |
+ kAllCpuRegistersList & ~kReservedCpuRegisters; |
// Registers available to Dart that are not preserved by runtime calls. |
const RegList kDartVolatileCpuRegs = |
kDartAvailableCpuRegs & ~kAbiPreservedCpuRegs; |