Blackfin: change global data register from P5 to P3
authorRobin Getz <robin.getz@analog.com>
Mon, 17 Aug 2009 15:23:02 +0000 (15:23 +0000)
committerMike Frysinger <vapier@gentoo.org>
Wed, 2 Sep 2009 09:14:02 +0000 (05:14 -0400)
Since the Blackfin ABI favors higher scratch registers by default, use the
last scratch register (P3) for global data rather than the first (P5).
This allows the compiler's register allocator to use higher number scratch
P registers, which in turn better matches the Blackfin instruction set,
which reduces the size of U-Boot by more than 1024 bytes...

Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
README
doc/README.standalone
examples/standalone/stubs.c
include/asm-blackfin/global_data.h
lib_blackfin/config.mk

diff --git a/README b/README
index 246ae2badca47cefc8106de76bc2adfbbee859e4..c90f6ee2d9dea89b8ca50b5563d6eaffc701342d 100644 (file)
--- a/README
+++ b/README
@@ -3912,10 +3912,10 @@ For PowerPC, the following registers have specific use:
     average for all boards 752 bytes for the whole U-Boot image,
     624 text + 127 data).
 
-On Blackfin, the normal C ABI (except for P5) is followed as documented here:
+On Blackfin, the normal C ABI (except for P3) is followed as documented here:
        http://docs.blackfin.uclinux.org/doku.php?id=application_binary_interface
 
-    ==> U-Boot will use P5 to hold a pointer to the global data
+    ==> U-Boot will use P3 to hold a pointer to the global data
 
 On ARM, the following registers are used:
 
index 81b949a0aaad4ccdf9d1115add30dc27b9fb6abe..885c92fb3a27d969c0b60bbbf2174dedcb2deccb 100644 (file)
@@ -21,7 +21,7 @@ Design Notes on Exporting U-Boot Functions to Standalone Applications:
 2. The pointer to the jump table is passed to the application in a
    machine-dependent way. PowerPC, ARM, MIPS and Blackfin architectures
    use a dedicated register to hold the pointer to the 'global_data'
-   structure: r2 on PowerPC, r8 on ARM, k0 on MIPS, and P5 on Blackfin.
+   structure: r2 on PowerPC, r8 on ARM, k0 on MIPS, and P3 on Blackfin.
    The x86 architecture does not use such a register; instead, the
    pointer to the 'global_data' structure is passed as 'argv[-1]'
    pointer.
index a8cb954282139a9b80ad6f1baef05a59084cc0d2..339bbf9b56dc9725f3b71f4f7e43c8e5d806d4e7 100644 (file)
@@ -127,14 +127,14 @@ gd_t *global_data;
        : : "i"(offsetof(gd_t, jt)), "i"(XF_ ## x * sizeof(void *)) : "r5");
 #elif defined(CONFIG_BLACKFIN)
 /*
- * P5 holds the pointer to the global_data, P0 is a call-clobbered
+ * P3 holds the pointer to the global_data, P0 is a call-clobbered
  * register
  */
 #define EXPORT_FUNC(x)                 \
        asm volatile (                  \
 "      .globl _" #x "\n_"              \
 #x ":\n"                               \
-"      P0 = [P5 + %0]\n"               \
+"      P0 = [P3 + %0]\n"               \
 "      P0 = [P0 + %1]\n"               \
 "      JUMP (P0)\n"                    \
        : : "i"(offsetof(gd_t, jt)), "i"(XF_ ## x * sizeof(void *)) : "P0");
index 5c9903bb150228e1a0d1c963b6ddfdb61cd62a59..3194b72a537105337b8aac7e1b85b760cb71a118 100644 (file)
@@ -66,6 +66,6 @@ typedef struct global_data {
 #define        GD_FLG_LOGINIT  0x00020 /* Log Buf has been initialized  */
 #define GD_FLG_DISABLE_CONSOLE 0x00040         /* Disable console (in & out)    */
 
-#define DECLARE_GLOBAL_DATA_PTR     register gd_t * volatile gd asm ("P5")
+#define DECLARE_GLOBAL_DATA_PTR     register gd_t * volatile gd asm ("P3")
 
 #endif
index a7e3658c3efebf1a2c73624c7a87a31746615e01..34b53e6903b6df055323ff50d9a0e96f206e65f4 100644 (file)
@@ -28,7 +28,7 @@ CONFIG_BFIN_BOOT_MODE := $(strip $(subst ",,$(CONFIG_BFIN_BOOT_MODE)))
 CONFIG_ENV_OFFSET := $(strip $(subst ",,$(CONFIG_ENV_OFFSET)))
 CONFIG_ENV_SIZE := $(strip $(subst ",,$(CONFIG_ENV_SIZE)))
 
-PLATFORM_RELFLAGS += -ffixed-P5 -fomit-frame-pointer -mno-fdpic
+PLATFORM_RELFLAGS += -ffixed-P3 -fomit-frame-pointer -mno-fdpic
 PLATFORM_CPPFLAGS += -DCONFIG_BLACKFIN
 
 LDFLAGS += --gc-sections