.macro          do_alias        spc,tmp,tmp1,va,pte,prot,fault,patype
        cmpib,COND(<>),n 0,\spc,\fault
        ldil            L%(TMPALIAS_MAP_START),\tmp
-#if defined(CONFIG_64BIT) && (TMPALIAS_MAP_START >= 0x80000000)
-       /* on LP64, ldi will sign extend into the upper 32 bits,
-        * which is behaviour we don't want */
-       depdi           0,31,32,\tmp
-#endif
        copy            \va,\tmp1
        depi_safe       0,31,TMPALIAS_SIZE_BITS+1,\tmp1
        cmpb,COND(<>),n \tmp,\tmp1,\fault
         * OK, it is in the temp alias region, check whether "from" or "to".
         * Check "subtle" note in pacache.S re: r23/r26.
         */
-#ifdef CONFIG_64BIT
-       extrd,u,*=      \va,63-TMPALIAS_SIZE_BITS,1,%r0
-#else
        extrw,u,=       \va,31-TMPALIAS_SIZE_BITS,1,%r0
-#endif
        or,COND(tr)     %r23,%r0,\pte
        or              %r26,%r0,\pte
+
+       /* convert phys addr in \pte (from r23 or r26) to tlb insert format */
+       SHRREG          \pte,PAGE_SHIFT+PAGE_ADD_SHIFT-5, \pte
+       depi_safe       _PAGE_SIZE_ENCODING_DEFAULT, 31,5, \pte
        .endm 
 
 
 
  *       miss on the translation, the dtlb miss handler inserts the
  *       translation into the tlb using these values:
  *
- *          %r26 physical page (shifted for tlb insert) of "to" translation
- *          %r23 physical page (shifted for tlb insert) of "from" translation
+ *          %r26 physical address of "to" translation
+ *          %r23 physical address of "from" translation
  */
 
-        /* Drop prot bits and convert to page addr for iitlbt and idtlbt */
-        #define PAGE_ADD_SHIFT  (PAGE_SHIFT-12)
-        .macro          convert_phys_for_tlb_insert20  phys
-        extrd,u         \phys, 56-PAGE_ADD_SHIFT, 32-PAGE_ADD_SHIFT, \phys
-#if _PAGE_SIZE_ENCODING_DEFAULT
-        depdi           _PAGE_SIZE_ENCODING_DEFAULT, 63, (63-58), \phys
-#endif
-       .endm
-
        /*
         * copy_user_page_asm() performs a page copy using mappings
         * equivalent to the user page mappings.  It can be used to
        sub             %r25, %r1, %r23
 
        ldil            L%(TMPALIAS_MAP_START), %r28
-#ifdef CONFIG_64BIT
-#if (TMPALIAS_MAP_START >= 0x80000000)
-       depdi           0, 31,32, %r28          /* clear any sign extension */
-#endif
-       convert_phys_for_tlb_insert20 %r26      /* convert phys addr to tlb insert format */
-       convert_phys_for_tlb_insert20 %r23      /* convert phys addr to tlb insert format */
-       depd            %r24,63,TMPALIAS_SIZE_BITS, %r28        /* Form aliased virtual address 'to' */
-       depdi           0, 63,PAGE_SHIFT, %r28  /* Clear any offset bits */
-       copy            %r28, %r29
-       depdi           1, 63-TMPALIAS_SIZE_BITS,1, %r29        /* Form aliased virtual address 'from' */
-#else
-       extrw,u         %r26, 24,25, %r26       /* convert phys addr to tlb insert format */
-       extrw,u         %r23, 24,25, %r23       /* convert phys addr to tlb insert format */
-       depw            %r24, 31,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
-       depwi           0, 31,PAGE_SHIFT, %r28  /* Clear any offset bits */
+       dep_safe        %r24, 31,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
+       depi_safe       0, 31,PAGE_SHIFT, %r28                  /* Clear any offset bits */
        copy            %r28, %r29
-       depwi           1, 31-TMPALIAS_SIZE_BITS,1, %r29        /* Form aliased virtual address 'from' */
-#endif
+       depi_safe       1, 31-TMPALIAS_SIZE_BITS,1, %r29        /* Form aliased virtual address 'from' */
 
        /* Purge any old translations */
 
        tophys_r1       %r26
 
        ldil            L%(TMPALIAS_MAP_START), %r28
-#ifdef CONFIG_64BIT
-#if (TMPALIAS_MAP_START >= 0x80000000)
-       depdi           0, 31,32, %r28          /* clear any sign extension */
-#endif
-       convert_phys_for_tlb_insert20 %r26      /* convert phys addr to tlb insert format */
-       depd            %r25, 63,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
-       depdi           0, 63,PAGE_SHIFT, %r28  /* Clear any offset bits */
-#else
-       extrw,u         %r26, 24,25, %r26       /* convert phys addr to tlb insert format */
-       depw            %r25, 31,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
-       depwi           0, 31,PAGE_SHIFT, %r28  /* Clear any offset bits */
-#endif
+       dep_safe        %r25, 31,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
+       depi_safe       0, 31,PAGE_SHIFT, %r28                  /* Clear any offset bits */
 
        /* Purge any old translation */
 
 
 ENTRY_CFI(flush_dcache_page_asm)
        ldil            L%(TMPALIAS_MAP_START), %r28
-#ifdef CONFIG_64BIT
-#if (TMPALIAS_MAP_START >= 0x80000000)
-       depdi           0, 31,32, %r28          /* clear any sign extension */
-#endif
-       convert_phys_for_tlb_insert20 %r26      /* convert phys addr to tlb insert format */
-       depd            %r25, 63,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
-       depdi           0, 63,PAGE_SHIFT, %r28  /* Clear any offset bits */
-#else
-       extrw,u         %r26, 24,25, %r26       /* convert phys addr to tlb insert format */
-       depw            %r25, 31,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
-       depwi           0, 31,PAGE_SHIFT, %r28  /* Clear any offset bits */
-#endif
+       dep_safe        %r25, 31,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
+       depi_safe       0, 31,PAGE_SHIFT, %r28                  /* Clear any offset bits */
 
        /* Purge any old translation */
 
 
 ENTRY_CFI(purge_dcache_page_asm)
        ldil            L%(TMPALIAS_MAP_START), %r28
-#ifdef CONFIG_64BIT
-#if (TMPALIAS_MAP_START >= 0x80000000)
-       depdi           0, 31,32, %r28          /* clear any sign extension */
-#endif
-       convert_phys_for_tlb_insert20 %r26      /* convert phys addr to tlb insert format */
-       depd            %r25, 63,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
-       depdi           0, 63,PAGE_SHIFT, %r28  /* Clear any offset bits */
-#else
-       extrw,u         %r26, 24,25, %r26       /* convert phys addr to tlb insert format */
-       depw            %r25, 31,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
-       depwi           0, 31,PAGE_SHIFT, %r28  /* Clear any offset bits */
-#endif
+       dep_safe        %r25, 31,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
+       depi_safe       0, 31,PAGE_SHIFT, %r28                  /* Clear any offset bits */
 
        /* Purge any old translation */
 
 
 ENTRY_CFI(flush_icache_page_asm)
        ldil            L%(TMPALIAS_MAP_START), %r28
-#ifdef CONFIG_64BIT
-#if (TMPALIAS_MAP_START >= 0x80000000)
-       depdi           0, 31,32, %r28          /* clear any sign extension */
-#endif
-       convert_phys_for_tlb_insert20 %r26      /* convert phys addr to tlb insert format */
-       depd            %r25, 63,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
-       depdi           0, 63,PAGE_SHIFT, %r28  /* Clear any offset bits */
-#else
-       extrw,u         %r26, 24,25, %r26       /* convert phys addr to tlb insert format */
-       depw            %r25, 31,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
-       depwi           0, 31,PAGE_SHIFT, %r28  /* Clear any offset bits */
-#endif
+       dep_safe        %r25, 31,TMPALIAS_SIZE_BITS, %r28       /* Form aliased virtual address 'to' */
+       depi_safe       0, 31,PAGE_SHIFT, %r28                  /* Clear any offset bits */
 
        /* Purge any old translation.  Note that the FIC instruction
         * may use either the instruction or data TLB.  Given that we