diff options
Diffstat (limited to 'arch/powerpc/include/asm/ppc_asm.h')
| -rw-r--r-- | arch/powerpc/include/asm/ppc_asm.h | 121 | 
1 files changed, 72 insertions, 49 deletions
diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h index 15444204a3a1..ea2a86e8ff95 100644 --- a/arch/powerpc/include/asm/ppc_asm.h +++ b/arch/powerpc/include/asm/ppc_asm.h @@ -126,26 +126,26 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)  #define REST_32VRS(n,b,base)	REST_16VRS(n,b,base); REST_16VRS(n+16,b,base)  /* Save the lower 32 VSRs in the thread VSR region */ -#define SAVE_VSR(n,b,base)	li b,THREAD_VSR0+(16*(n));  STXVD2X(n,base,b) +#define SAVE_VSR(n,b,base)	li b,THREAD_VSR0+(16*(n));  STXVD2X(n,R##base,R##b)  #define SAVE_2VSRS(n,b,base)	SAVE_VSR(n,b,base); SAVE_VSR(n+1,b,base)  #define SAVE_4VSRS(n,b,base)	SAVE_2VSRS(n,b,base); SAVE_2VSRS(n+2,b,base)  #define SAVE_8VSRS(n,b,base)	SAVE_4VSRS(n,b,base); SAVE_4VSRS(n+4,b,base)  #define SAVE_16VSRS(n,b,base)	SAVE_8VSRS(n,b,base); SAVE_8VSRS(n+8,b,base)  #define SAVE_32VSRS(n,b,base)	SAVE_16VSRS(n,b,base); SAVE_16VSRS(n+16,b,base) -#define REST_VSR(n,b,base)	li b,THREAD_VSR0+(16*(n)); LXVD2X(n,base,b) +#define REST_VSR(n,b,base)	li b,THREAD_VSR0+(16*(n)); LXVD2X(n,R##base,R##b)  #define REST_2VSRS(n,b,base)	REST_VSR(n,b,base); REST_VSR(n+1,b,base)  #define REST_4VSRS(n,b,base)	REST_2VSRS(n,b,base); REST_2VSRS(n+2,b,base)  #define REST_8VSRS(n,b,base)	REST_4VSRS(n,b,base); REST_4VSRS(n+4,b,base)  #define REST_16VSRS(n,b,base)	REST_8VSRS(n,b,base); REST_8VSRS(n+8,b,base)  #define REST_32VSRS(n,b,base)	REST_16VSRS(n,b,base); REST_16VSRS(n+16,b,base)  /* Save the upper 32 VSRs (32-63) in the thread VSX region (0-31) */ -#define SAVE_VSRU(n,b,base)	li b,THREAD_VR0+(16*(n));  STXVD2X(n+32,base,b) +#define SAVE_VSRU(n,b,base)	li b,THREAD_VR0+(16*(n));  STXVD2X(n+32,R##base,R##b)  #define SAVE_2VSRSU(n,b,base)	SAVE_VSRU(n,b,base); SAVE_VSRU(n+1,b,base)  #define SAVE_4VSRSU(n,b,base)	SAVE_2VSRSU(n,b,base); SAVE_2VSRSU(n+2,b,base)  #define SAVE_8VSRSU(n,b,base)	SAVE_4VSRSU(n,b,base); SAVE_4VSRSU(n+4,b,base)  #define SAVE_16VSRSU(n,b,base)	SAVE_8VSRSU(n,b,base); SAVE_8VSRSU(n+8,b,base)  #define SAVE_32VSRSU(n,b,base)	SAVE_16VSRSU(n,b,base); SAVE_16VSRSU(n+16,b,base) -#define REST_VSRU(n,b,base)	li b,THREAD_VR0+(16*(n)); LXVD2X(n+32,base,b) +#define REST_VSRU(n,b,base)	li b,THREAD_VR0+(16*(n)); LXVD2X(n+32,R##base,R##b)  #define REST_2VSRSU(n,b,base)	REST_VSRU(n,b,base); REST_VSRU(n+1,b,base)  #define REST_4VSRSU(n,b,base)	REST_2VSRSU(n,b,base); REST_2VSRSU(n+2,b,base)  #define REST_8VSRSU(n,b,base)	REST_4VSRSU(n,b,base); REST_4VSRSU(n+4,b,base) @@ -178,9 +178,24 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)  #define HMT_HIGH	or	3,3,3  #define HMT_EXTRA_HIGH	or	7,7,7		# power7 only +#ifdef CONFIG_PPC64 +#define ULONG_SIZE 	8 +#else +#define ULONG_SIZE	4 +#endif +#define __VCPU_GPR(n)	(VCPU_GPRS + (n * ULONG_SIZE)) +#define VCPU_GPR(n)	__VCPU_GPR(__REG_##n) +  #ifdef __KERNEL__  #ifdef CONFIG_PPC64 +#define STACKFRAMESIZE 256 +#define __STK_REG(i)   (112 + ((i)-14)*8) +#define STK_REG(i)     __STK_REG(__REG_##i) + +#define __STK_PARAM(i)	(48 + ((i)-3)*8) +#define STK_PARAM(i)	__STK_PARAM(__REG_##i) +  #define XGLUE(a,b) a##b  #define GLUE(a,b) XGLUE(a,b) @@ -295,14 +310,14 @@ n:   */  #ifdef __powerpc64__  #define LOAD_REG_IMMEDIATE(reg,expr)		\ -	lis     (reg),(expr)@highest;		\ -	ori     (reg),(reg),(expr)@higher;	\ -	rldicr  (reg),(reg),32,31;		\ -	oris    (reg),(reg),(expr)@h;		\ -	ori     (reg),(reg),(expr)@l; +	lis     reg,(expr)@highest;		\ +	ori     reg,reg,(expr)@higher;	\ +	rldicr  reg,reg,32,31;		\ +	oris    reg,reg,(expr)@h;		\ +	ori     reg,reg,(expr)@l;  #define LOAD_REG_ADDR(reg,name)			\ -	ld	(reg),name@got(r2) +	ld	reg,name@got(r2)  #define LOAD_REG_ADDRBASE(reg,name)	LOAD_REG_ADDR(reg,name)  #define ADDROFF(name)			0 @@ -313,12 +328,12 @@ n:  #else /* 32-bit */  #define LOAD_REG_IMMEDIATE(reg,expr)		\ -	lis	(reg),(expr)@ha;		\ -	addi	(reg),(reg),(expr)@l; +	lis	reg,(expr)@ha;		\ +	addi	reg,reg,(expr)@l;  #define LOAD_REG_ADDR(reg,name)		LOAD_REG_IMMEDIATE(reg, name) -#define LOAD_REG_ADDRBASE(reg, name)	lis	(reg),name@ha +#define LOAD_REG_ADDRBASE(reg, name)	lis	reg,name@ha  #define ADDROFF(name)			name@l  /* offsets for stack frame layout */ @@ -372,9 +387,9 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601)  #ifdef CONFIG_PPC64  #define MTOCRF(FXM, RS)			\  	BEGIN_FTR_SECTION_NESTED(848);	\ -	mtcrf	(FXM), (RS);		\ +	mtcrf	(FXM), RS;		\  	FTR_SECTION_ELSE_NESTED(848);	\ -	mtocrf (FXM), (RS);		\ +	mtocrf (FXM), RS;		\  	ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_NOEXECUTE, 848)  #endif @@ -463,6 +478,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601)  #ifdef CONFIG_PPC_BOOK3S_64  #define RFI		rfid  #define MTMSRD(r)	mtmsrd	r +#define MTMSR_EERI(reg)	mtmsrd	reg,1  #else  #define FIX_SRR1(ra, rb)  #ifndef CONFIG_40x @@ -471,6 +487,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601)  #define RFI		rfi; b .	/* Prevent prefetch past rfi */  #endif  #define MTMSRD(r)	mtmsr	r +#define MTMSR_EERI(reg)	mtmsr	reg  #define CLR_TOP32(r)  #endif @@ -490,40 +507,46 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601)  #define	cr7	7 -/* General Purpose Registers (GPRs) */ - -#define	r0	0 -#define	r1	1 -#define	r2	2 -#define	r3	3 -#define	r4	4 -#define	r5	5 -#define	r6	6 -#define	r7	7 -#define	r8	8 -#define	r9	9 -#define	r10	10 -#define	r11	11 -#define	r12	12 -#define	r13	13 -#define	r14	14 -#define	r15	15 -#define	r16	16 -#define	r17	17 -#define	r18	18 -#define	r19	19 -#define	r20	20 -#define	r21	21 -#define	r22	22 -#define	r23	23 -#define	r24	24 -#define	r25	25 -#define	r26	26 -#define	r27	27 -#define	r28	28 -#define	r29	29 -#define	r30	30 -#define	r31	31 +/* + * General Purpose Registers (GPRs) + * + * The lower case r0-r31 should be used in preference to the upper + * case R0-R31 as they provide more error checking in the assembler. + * Use R0-31 only when really nessesary. + */ + +#define	r0	%r0 +#define	r1	%r1 +#define	r2	%r2 +#define	r3	%r3 +#define	r4	%r4 +#define	r5	%r5 +#define	r6	%r6 +#define	r7	%r7 +#define	r8	%r8 +#define	r9	%r9 +#define	r10	%r10 +#define	r11	%r11 +#define	r12	%r12 +#define	r13	%r13 +#define	r14	%r14 +#define	r15	%r15 +#define	r16	%r16 +#define	r17	%r17 +#define	r18	%r18 +#define	r19	%r19 +#define	r20	%r20 +#define	r21	%r21 +#define	r22	%r22 +#define	r23	%r23 +#define	r24	%r24 +#define	r25	%r25 +#define	r26	%r26 +#define	r27	%r27 +#define	r28	%r28 +#define	r29	%r29 +#define	r30	%r30 +#define	r31	%r31  /* Floating Point Registers (FPRs) */  | 
