powerpc/64s: Use .machine power4 around dcbt
authorMichael Ellerman <mpe@ellerman.id.au>
Thu, 29 Feb 2024 12:25:18 +0000 (23:25 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Sun, 3 Mar 2024 12:05:21 +0000 (23:05 +1100)
There are multiple decodings for the "dcbt" mnemonic, so the assembler
has to pick one.

That requires passing -many to the assembler, which is not recommended.

Without -many the clang 14 / binutils 2.38 build fails with:

  arch/powerpc/kernel/exceptions-64s.S:2976: Error: junk at end of line: `0b01010'
  clang: error: assembler command failed with exit code 1 (use -v to see invocation)

Fix it by adding .machine directives around the use of dcbt to specify
which encoding is desired.

Acked-by: Segher Boessenkool <segher@kernel.crashing.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240229122521.762431-2-mpe@ellerman.id.au
arch/powerpc/include/asm/ppc_asm.h

index 78c7548..1d1018c 100644 (file)
@@ -508,11 +508,16 @@ END_FTR_SECTION_NESTED(CPU_FTR_CELL_TB_BUG, CPU_FTR_CELL_TB_BUG, 96)
  */
 #define DCBT_BOOK3S_STOP_ALL_STREAM_IDS(scratch)       \
        lis     scratch,0x60000000@h;                   \
-       dcbt    0,scratch,0b01010
+       .machine push;                                  \
+       .machine power4;                                        \
+       dcbt    0,scratch,0b01010;                      \
+       .machine pop;
 
 #define DCBT_SETUP_STREAMS(from, from_parms, to, to_parms, scratch)    \
        lis     scratch,0x8000; /* GO=1 */                              \
        clrldi  scratch,scratch,32;                                     \
+       .machine push;                                                  \
+       .machine power4;                                                \
        /* setup read stream 0 */                                       \
        dcbt    0,from,0b01000;         /* addr from */                 \
        dcbt    0,from_parms,0b01010;   /* length and depth from */     \
@@ -520,7 +525,8 @@ END_FTR_SECTION_NESTED(CPU_FTR_CELL_TB_BUG, CPU_FTR_CELL_TB_BUG, 96)
        dcbtst  0,to,0b01000;           /* addr to */                   \
        dcbtst  0,to_parms,0b01010;     /* length and depth to */       \
        eieio;                                                          \
-       dcbt    0,scratch,0b01010;      /* all streams GO */
+       dcbt    0,scratch,0b01010;      /* all streams GO */            \
+       .machine pop;
 
 /*
  * toreal/fromreal/tophys/tovirt macros. 32-bit BookE makes them