diff options
author | Stefano Babic <sbabic@denx.de> | 2014-01-26 12:11:54 +0100 |
---|---|---|
committer | Stefano Babic <sbabic@denx.de> | 2014-01-26 12:11:54 +0100 |
commit | 707acd01ded3c60a4e277f7c5432d397897b4dfd (patch) | |
tree | 5730e1e1f0bac6c1aeddc261cb412fc3d5f220fd /examples/standalone/stubs.c | |
parent | be2a3bb39adf1fdd274fc427e30ef62eb86441a1 (diff) | |
parent | c71b4dd2da0dcddabd7c29e6c3dc8a495d4bd928 (diff) |
Merge branch 'master' of git://git.denx.de/u-boot-arm
Diffstat (limited to 'examples/standalone/stubs.c')
-rw-r--r-- | examples/standalone/stubs.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/examples/standalone/stubs.c b/examples/standalone/stubs.c index 5d2ab56995..32a19ce354 100644 --- a/examples/standalone/stubs.c +++ b/examples/standalone/stubs.c @@ -39,6 +39,20 @@ gd_t *global_data; " bctr\n" \ : : "i"(offsetof(gd_t, jt)), "i"(XF_ ## x * sizeof(void *)) : "r11"); #elif defined(CONFIG_ARM) +#ifdef CONFIG_ARM64 +/* + * x18 holds the pointer to the global_data, x9 is a call-clobbered + * register + */ +#define EXPORT_FUNC(x) \ + asm volatile ( \ +" .globl " #x "\n" \ +#x ":\n" \ +" ldr x9, [x18, %0]\n" \ +" ldr x9, [x9, %1]\n" \ +" br x9\n" \ + : : "i"(offsetof(gd_t, jt)), "i"(XF_ ## x * sizeof(void *)) : "x9"); +#else /* * r9 holds the pointer to the global_data, ip is a call-clobbered * register @@ -50,6 +64,7 @@ gd_t *global_data; " ldr ip, [r9, %0]\n" \ " ldr pc, [ip, %1]\n" \ : : "i"(offsetof(gd_t, jt)), "i"(XF_ ## x * sizeof(void *)) : "ip"); +#endif #elif defined(CONFIG_MIPS) /* * k0 ($26) holds the pointer to the global_data; t9 ($25) is a call- |