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

Unified Diff: runtime/vm/constants_arm.h

Issue 1982613003: Don't assume we want the iOS ABI if running simarm on Mac and the EABI otherwise. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/platform/globals.h ('k') | runtime/vm/dart.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/constants_arm.h
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index 5764745447b72662c9cc8a544d80c0be4870be2e..5639af52a9460207d754faa0d1a9e7dd83fe6b64 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -25,6 +25,41 @@ namespace dart {
#endif
+// The Linux/Android ABI and the iOS ABI differ in their choice of frame
+// pointer, their treatment of R9, and the interproduceral stack alignment.
+
+// EABI (Linux, Android)
+// See "Procedure Call Standard for the ARM Architecture".
+// R0-R1: Argument / result / volatile
+// R2-R3: Argument / volatile
+// R4-R10: Preserved
+// R11: Frame pointer
+// R12: Volatile
+// R13: Stack pointer
+// R14: Link register
+// R15: Program counter
+// Stack alignment: 4 bytes always, 8 bytes at public interfaces
+
+// Linux (Debian armhf) and Android also differ in whether floating point
+// arguments are passed in registers. Linux uses hardfp and Android uses
+// softfp. See TargetCPUFeatures::hardfp_supported().
+
+// iOS ABI
+// See "iOS ABI Function Call Guide"
+// R0-R1: Argument / result / volatile
+// R2-R3: Argument / volatile
+// R4-R6: Preserved
+// R7: Frame pointer
+// R8-R9: Preserved
+// R12: Volatile
+// R13: Stack pointer
+// R14: Link register
+// R15: Program counter
+// Stack alignment: 4 bytes always, 4 bytes at public interfaces
+
+// iOS passes floating point arguments in registers (hardfp)
+
+
enum Register {
R0 = 0,
R1 = 1,
@@ -46,12 +81,14 @@ enum Register {
kNoRegister = -1, // Signals an illegal register.
// Aliases.
-#if defined(TARGET_OS_MACOS)
+#if defined(TARGET_ABI_IOS)
FP = R7,
NOTFP = R11,
-#else
+#elif defined(TARGET_ABI_EABI)
FP = R11,
NOTFP = R7,
+#else
+#error Unknown ABI
#endif
IP = R12,
SP = R13,
@@ -268,16 +305,18 @@ const RegList kAllCpuRegistersList = 0xFFFF;
// C++ ABI call registers.
const RegList kAbiArgumentCpuRegs =
(1 << R0) | (1 << R1) | (1 << R2) | (1 << R3);
-#if defined(TARGET_OS_MACOS)
+#if defined(TARGET_ABI_IOS)
const RegList kAbiPreservedCpuRegs =
(1 << R4) | (1 << R5) | (1 << R6) | (1 << R8) |
(1 << R10) | (1 << R11);
const int kAbiPreservedCpuRegCount = 6;
-#else
+#elif defined(TARGET_ABI_EABI)
const RegList kAbiPreservedCpuRegs =
(1 << R4) | (1 << R5) | (1 << R6) | (1 << R7) |
(1 << R8) | (1 << R9) | (1 << R10);
const int kAbiPreservedCpuRegCount = 7;
+#else
+#error Unknown ABI
#endif
const QRegister kAbiFirstPreservedFpuReg = Q4;
const QRegister kAbiLastPreservedFpuReg = Q7;
@@ -296,9 +335,9 @@ const RegList kDartAvailableCpuRegs =
// Registers available to Dart that are not preserved by runtime calls.
const RegList kDartVolatileCpuRegs =
kDartAvailableCpuRegs & ~kAbiPreservedCpuRegs;
-#if defined(TARGET_OS_MACOS)
+#if defined(TARGET_ABI_IOS)
const int kDartVolatileCpuRegCount = 6;
-#else
+#elif defined(TARGET_ABI_EABI)
const int kDartVolatileCpuRegCount = 5;
#endif
const QRegister kDartFirstVolatileFpuReg = Q0;
« no previous file with comments | « runtime/platform/globals.h ('k') | runtime/vm/dart.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698