aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/include/asm/ppc_asm.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h
index f595b98079ee..1279c59624ed 100644
--- a/arch/powerpc/include/asm/ppc_asm.h
+++ b/arch/powerpc/include/asm/ppc_asm.h
@@ -295,6 +295,11 @@ n:
295 * you want to access various offsets within it). On ppc32 this is 295 * you want to access various offsets within it). On ppc32 this is
296 * identical to LOAD_REG_IMMEDIATE. 296 * identical to LOAD_REG_IMMEDIATE.
297 * 297 *
298 * LOAD_REG_ADDR_PIC(rn, name)
299 * Loads the address of label 'name' into register 'run'. Use this when
300 * the kernel doesn't run at the linked or relocated address. Please
301 * note that this macro will clobber the lr register.
302 *
298 * LOAD_REG_ADDRBASE(rn, name) 303 * LOAD_REG_ADDRBASE(rn, name)
299 * ADDROFF(name) 304 * ADDROFF(name)
300 * LOAD_REG_ADDRBASE loads part of the address of label 'name' into 305 * LOAD_REG_ADDRBASE loads part of the address of label 'name' into
@@ -305,6 +310,14 @@ n:
305 * LOAD_REG_ADDRBASE(rX, name) 310 * LOAD_REG_ADDRBASE(rX, name)
306 * ld rY,ADDROFF(name)(rX) 311 * ld rY,ADDROFF(name)(rX)
307 */ 312 */
313
314/* Be careful, this will clobber the lr register. */
315#define LOAD_REG_ADDR_PIC(reg, name) \
316 bl 0f; \
3170: mflr reg; \
318 addis reg,reg,(name - 0b)@ha; \
319 addi reg,reg,(name - 0b)@l;
320
308#ifdef __powerpc64__ 321#ifdef __powerpc64__
309#define LOAD_REG_IMMEDIATE(reg,expr) \ 322#define LOAD_REG_IMMEDIATE(reg,expr) \
310 lis reg,(expr)@highest; \ 323 lis reg,(expr)@highest; \