cpu-as-$(CONFIG_4xx)           += -Wa,-m405
 cpu-as-$(CONFIG_ALTIVEC)       += $(call as-option,-Wa$(comma)-maltivec)
 cpu-as-$(CONFIG_E200)          += -Wa,-me200
+cpu-as-$(CONFIG_PPC_BOOK3S_64) += -Wa,-mpower4
 
 KBUILD_AFLAGS += $(cpu-as-y)
 KBUILD_CFLAGS += $(cpu-as-y)
 
 
 /* The following stops all load and store data streams associated with stream
  * ID (ie. streams created explicitly).  The embedded and server mnemonics for
- * dcbt are different so we use machine "power4" here explicitly.
+ * dcbt are different so this must only be used for server.
  */
-#define DCBT_STOP_ALL_STREAM_IDS(scratch)      \
-.machine push ;                                        \
-.machine "power4" ;                            \
-       lis     scratch,0x60000000@h;           \
-       dcbt    0,scratch,0b01010;              \
-.machine pop
+#define DCBT_BOOK3S_STOP_ALL_STREAM_IDS(scratch)       \
+       lis     scratch,0x60000000@h;                   \
+       dcbt    0,scratch,0b01010
 
 /*
  * toreal/fromreal/tophys/tovirt macros. 32-bit BookE makes them
 
 /* Cancel all explict user streams as they will have no use after context
  * switch and will stop the HW from creating streams itself
  */
-       DCBT_STOP_ALL_STREAM_IDS(r6)
+       DCBT_BOOK3S_STOP_ALL_STREAM_IDS(r6)
 #endif
 
        addi    r6,r4,-THREAD   /* Convert THREAD to 'current' */
 
 
        bne     cr4,1f          /* returning to kernel */
 
-.machine       push
-.machine       "power4"
        mtcrf   0x80,r9
        mtcrf   0x08,r9         /* MSR[PR] indication is in cr4 */
        mtcrf   0x04,r9         /* MSR[RI] indication is in cr5 */
        mtcrf   0x02,r9         /* I/D indication is in cr6 */
        mtcrf   0x01,r9         /* slb_allocate uses cr0 and cr7 */
-.machine       pop
 
        RESTORE_CTR(r9, PACA_EXSLB)
        RESTORE_PPR_PACA(PACA_EXSLB, r9)
        RFI_TO_USER
        b       .       /* prevent speculative execution */
 1:
-.machine       push
-.machine       "power4"
        mtcrf   0x80,r9
        mtcrf   0x08,r9         /* MSR[PR] indication is in cr4 */
        mtcrf   0x04,r9         /* MSR[RI] indication is in cr5 */
        mtcrf   0x02,r9         /* I/D indication is in cr6 */
        mtcrf   0x01,r9         /* slb_allocate uses cr0 and cr7 */
-.machine       pop
 
        RESTORE_CTR(r9, PACA_EXSLB)
        RESTORE_PPR_PACA(PACA_EXSLB, r9)
        ld      r11,PACA_L1D_FLUSH_SIZE(r13)
        srdi    r11,r11,(7 + 3) /* 128 byte lines, unrolled 8x */
        mtctr   r11
-       DCBT_STOP_ALL_STREAM_IDS(r11) /* Stop prefetch streams */
+       DCBT_BOOK3S_STOP_ALL_STREAM_IDS(r11) /* Stop prefetch streams */
 
        /* order ld/st prior to dcbt stop all streams with flushing */
        sync
        ld      r11,PACA_L1D_FLUSH_SIZE(r13)
        srdi    r11,r11,(7 + 3) /* 128 byte lines, unrolled 8x */
        mtctr   r11
-       DCBT_STOP_ALL_STREAM_IDS(r11) /* Stop prefetch streams */
+       DCBT_BOOK3S_STOP_ALL_STREAM_IDS(r11) /* Stop prefetch streams */
 
        /* order ld/st prior to dcbt stop all streams with flushing */
        sync
 
 extra-$(CONFIG_PPC64)  += crtsavres.o
 endif
 
+obj-$(CONFIG_PPC_BOOK3S_64) += copyuser_power7.o copypage_power7.o \
+                              memcpy_power7.o
+
 obj64-y        += copypage_64.o copyuser_64.o mem_64.o hweight_64.o \
-          copyuser_power7.o string_64.o copypage_power7.o memcpy_power7.o \
-          memcpy_64.o memcmp_64.o pmem.o
+          string_64.o memcpy_64.o memcmp_64.o pmem.o
 
 obj64-$(CONFIG_SMP)    += locks.o
 obj64-$(CONFIG_ALTIVEC)        += vmx-helper.o
 
 BEGIN_FTR_SECTION
        lis     r5,PAGE_SIZE@h
 FTR_SECTION_ELSE
+#ifdef CONFIG_PPC_BOOK3S_64
        b       copypage_power7
+#endif
 ALT_FTR_SECTION_END_IFCLR(CPU_FTR_VMX_COPY)
        ori     r5,r5,PAGE_SIZE@l
 BEGIN_FTR_SECTION
 
        lis     r8,0x8000       /* GO=1 */
        clrldi  r8,r8,32
 
-.machine push
-.machine "power4"
        /* setup read stream 0  */
        dcbt    0,r4,0b01000    /* addr from */
        dcbt    0,r7,0b01010   /* length and depth from */
        dcbtst  0,r10,0b01010  /* length and depth to */
        eieio
        dcbt    0,r8,0b01010    /* all streams GO */
-.machine pop
 
 #ifdef CONFIG_ALTIVEC
        mflr    r0
 
 
        .align  7
 _GLOBAL_TOC(__copy_tofrom_user)
+#ifdef CONFIG_PPC_BOOK3S_64
 BEGIN_FTR_SECTION
        nop
 FTR_SECTION_ELSE
        b       __copy_tofrom_user_power7
 ALT_FTR_SECTION_END_IFCLR(CPU_FTR_VMX_COPY)
+#endif
 _GLOBAL(__copy_tofrom_user_base)
        /* first check for a whole page copy on a page boundary */
        cmpldi  cr1,r5,16
 
        lis     r8,0x8000       /* GO=1 */
        clrldi  r8,r8,32
 
-.machine push
-.machine "power4"
        /* setup read stream 0 */
        dcbt    0,r6,0b01000   /* addr from */
        dcbt    0,r7,0b01010   /* length and depth from */
        dcbtst  0,r10,0b01010  /* length and depth to */
        eieio
        dcbt    0,r8,0b01010    /* all streams GO */
-.machine pop
 
        beq     cr1,.Lunwind_stack_nonvmx_copy
 
 
        std     r3,-STACKFRAMESIZE+STK_REG(R31)(r1)     /* save destination pointer for return value */
 #endif
 FTR_SECTION_ELSE
+#ifdef CONFIG_PPC_BOOK3S_64
 #ifndef SELFTEST
        b       memcpy_power7
 #endif
+#endif
 ALT_FTR_SECTION_END_IFCLR(CPU_FTR_VMX_COPY)
 #ifdef __LITTLE_ENDIAN__
        /* dumb little-endian memcpy that will get replaced at runtime */
 
        lis     r8,0x8000       /* GO=1 */
        clrldi  r8,r8,32
 
-.machine push
-.machine "power4"
        dcbt    0,r6,0b01000
        dcbt    0,r7,0b01010
        dcbtst  0,r9,0b01000
        dcbtst  0,r10,0b01010
        eieio
        dcbt    0,r8,0b01010    /* GO */
-.machine pop
 
        beq     cr1,.Lunwind_stack_nonvmx_copy