#define LOAD_REG_IMMEDIATE(reg, expr) __LOAD_REG_IMMEDIATE reg, expr
 
-#define LOAD_REG_IMMEDIATE_SYM(reg,expr)       \
-       lis     reg,(expr)@highest;             \
-       ori     reg,reg,(expr)@higher;  \
-       rldicr  reg,reg,32,31;          \
-       oris    reg,reg,(expr)@__AS_ATHIGH;     \
-       ori     reg,reg,(expr)@l;
+#define LOAD_REG_IMMEDIATE_SYM(reg, tmp, expr) \
+       lis     tmp, (expr)@highest;            \
+       lis     reg, (expr)@__AS_ATHIGH;        \
+       ori     tmp, tmp, (expr)@higher;        \
+       ori     reg, reg, (expr)@l;             \
+       rldimi  reg, tmp, 32, 0
 
 #define LOAD_REG_ADDR(reg,name)                        \
        ld      reg,name@got(r2)
 
        ld      r15,PACATOC(r13)
        ld      r14,interrupt_base_book3e@got(r15)
        ld      r15,__end_interrupts@got(r15)
-#else
-       LOAD_REG_IMMEDIATE_SYM(r14,interrupt_base_book3e)
-       LOAD_REG_IMMEDIATE_SYM(r15,__end_interrupts)
-#endif
        cmpld   cr0,r10,r14
        cmpld   cr1,r10,r15
+#else
+       LOAD_REG_IMMEDIATE_SYM(r14, r15, interrupt_base_book3e)
+       cmpld   cr0, r10, r14
+       LOAD_REG_IMMEDIATE_SYM(r14, r15, __end_interrupts)
+       cmpld   cr1, r10, r14
+#endif
        blt+    cr0,1f
        bge+    cr1,1f
 
        ld      r15,PACATOC(r13)
        ld      r14,interrupt_base_book3e@got(r15)
        ld      r15,__end_interrupts@got(r15)
-#else
-       LOAD_REG_IMMEDIATE_SYM(r14,interrupt_base_book3e)
-       LOAD_REG_IMMEDIATE_SYM(r15,__end_interrupts)
-#endif
        cmpld   cr0,r10,r14
        cmpld   cr1,r10,r15
+#else
+       LOAD_REG_IMMEDIATE_SYM(r14, r15, interrupt_base_book3e)
+       cmpld   cr0, r10, r14
+       LOAD_REG_IMMEDIATE_SYM(r14, r15,__end_interrupts)
+       cmpld   cr1, r10, r14
+#endif
        blt+    cr0,1f
        bge+    cr1,1f
 
 a2_tlbinit_after_linear_map:
 
        /* Now we branch the new virtual address mapped by this entry */
-       LOAD_REG_IMMEDIATE_SYM(r3,1f)
+       LOAD_REG_IMMEDIATE_SYM(r3, r5, 1f)
        mtctr   r3
        bctr
 
 
        sub     r5,r5,r11
 #else
        /* just copy interrupts */
-       LOAD_REG_IMMEDIATE_SYM(r5, FIXED_SYMBOL_ABS_ADDR(__end_interrupts))
+       LOAD_REG_IMMEDIATE_SYM(r5, r11, FIXED_SYMBOL_ABS_ADDR(__end_interrupts))
 #endif
        b       5f
 3: