@@ -1274,12 +1274,9 @@ _GLOBAL(do_stab_bolted)
* check for bad kernel/user address
* (ea & ~REGION_MASK) >= PGTABLE_RANGE
*/
- clrldi r9,r11,4
- li r10,-1
- clrldi r10,r10,(64 - 46)
- cmpld cr7,r9,r10
+ rldicr. r9,r11,4,(64 - 46 - 4)
li r9,0 /* VSID = 0 for bad address */
- bgt cr7,0f
+ bne- 0f
/*
* Calculate VSID:
@@ -35,16 +35,14 @@ _GLOBAL(slb_allocate_realmode)
* check for bad kernel/user address
* (ea & ~REGION_MASK) >= PGTABLE_RANGE
*/
- clrldi r9,r3,4
- li r10,-1
- clrldi r10,r10,(64 - 46)
- cmpld cr7,r9,r10
- bgt cr7,8f
+ rldicr. r9,r3,4,(64 - 46 - 4)
+ bne- 8f
srdi r9,r3,60 /* get region */
+ srdi r10,r3,SID_SHIFT /* get esid */
cmpldi cr7,r9,0xc /* cmp PAGE_OFFSET for later use */
- /* r3 = address, cr7 = <> PAGE_OFFSET */
+ /* r3 = address, r10 = esid, cr7 = <> PAGE_OFFSET */
blt cr7,0f /* user or kernel? */
/* kernel address: proto-VSID = ESID */
@@ -66,11 +64,10 @@ _GLOBAL(slb_miss_kernel_load_linear)
/*
* context = (MAX_USER_CONTEXT) + ((ea >> 60) - 0xc) + 1
*/
- srdi r9,r3,60
- subi r9,r9,(0xc + 4)
- lis r10, 8
- add r9,r9,r10
- srdi r10,r3,SID_SHIFT /* get esid */
+ rldicl r9,r3,4,62
+ addis r9,r9,8
+ subi r9,r9,4
+
/*
* for 1T we shift 12 bits more. slb_finish_load_1T will do
* the necessary adjustment
@@ -82,7 +79,6 @@ END_MMU_FTR_SECTION_IFCLR(MMU_FTR_1T_SEGMENT)
b slb_finish_load_1T
1:
- srdi r10,r3,SID_SHIFT /* get esid */
#ifdef CONFIG_SPARSEMEM_VMEMMAP
/* Check virtual memmap region. To be patches at kernel boot */
cmpldi cr0,r9,0xf
@@ -109,11 +105,9 @@ _GLOBAL(slb_miss_kernel_load_vmemmap)
/*
* context = (MAX_USER_CONTEXT) + ((ea >> 60) - 0xc) + 1
*/
- srdi r9,r3,60
- subi r9,r9,(0xc + 4)
- lis r10,8
- add r9,r9,r10
- srdi r10,r3,SID_SHIFT
+ rldicl r9,r3,4,62
+ addis r9,r9,8
+ subi r9,r9,4
/*
* for 1T we shift 12 bits more. slb_finish_load_1T will do
* the necessary adjustment
@@ -125,8 +119,6 @@ END_MMU_FTR_SECTION_IFCLR(MMU_FTR_1T_SEGMENT)
b slb_finish_load_1T
0:
- srdi r10,r3,SID_SHIFT /* get esid */
-
/* when using slices, we extract the psize off the slice bitmaps
* and then we need to get the sllp encoding off the mmu_psize_defs
* array.