powerpc/8xx: DTLB Miss cleanup
authorJoakim Tjernlund <joakim.tjernlund@transmode.se>
Fri, 20 Nov 2009 00:21:11 +0000 (00:21 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 9 Dec 2009 06:10:37 +0000 (17:10 +1100)
Use symbolic constant for PRESENT and avoid branching.

Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/head_8xx.S

index f2de8e8..678f98c 100644 (file)
@@ -438,15 +438,20 @@ DataStoreTLBMiss:
         * r11 = ((r10 & PRESENT) & ((r10 & ACCESSED) >> 5));
         * r10 = (r10 & ~PRESENT) | r11;
         */
-       rlwinm  r11, r10, 32-5, 31, 31
+       rlwinm  r11, r10, 32-5, _PAGE_PRESENT
        and     r11, r11, r10
-       rlwimi  r10, r11, 0, 31, 31
+       rlwimi  r10, r11, 0, _PAGE_PRESENT
 
        /* Honour kernel RO, User NA */
-       andi.   r11, r10, _PAGE_USER | _PAGE_RW
-       bne-    cr0, 5f
-       ori     r10,r10, 0x200 /* Extended encoding, bit 22 */
-5:     xori    r10, r10, _PAGE_RW  /* invert RW bit */
+       /* 0x200 == Extended encoding, bit 22 */
+       /* r11 =  (r10 & _PAGE_USER) >> 2 */
+       rlwinm  r11, r10, 32-2, 0x200
+       or      r10, r11, r10
+       /* r11 =  (r10 & _PAGE_RW) >> 1 */
+       rlwinm  r11, r10, 32-1, 0x200
+       or      r10, r11, r10
+       /* invert RW and 0x200 bits */
+       xori    r10, r10, _PAGE_RW | 0x200
 
        /* The Linux PTE won't go exactly into the MMU TLB.
         * Software indicator bits 22 and 28 must be clear.