ARM: 8845/1: use unified assembler in c files
authorStefan Agner <stefan@agner.ch>
Sun, 17 Feb 2019 23:58:29 +0000 (00:58 +0100)
committerRussell King <rmk+kernel@armlinux.org.uk>
Tue, 26 Feb 2019 11:26:08 +0000 (11:26 +0000)
Use unified assembler syntax (UAL) in inline assembler. Divided
syntax is considered deprecated. This will also allow to build
the kernel using LLVM's integrated assembler.

When compiling non-Thumb2 GCC always emits a ".syntax divided"
at the beginning of the inline assembly which makes the
assembler fail. Since GCC 5 there is the -masm-syntax-unified
GCC option which make GCC assume unified syntax asm and hence
emits ".syntax unified" even in ARM mode. However, the option
is broken since GCC version 6 (see GCC PR88648 [1]). Work
around by adding ".syntax unified" as part of the inline
assembly.

[0] https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html#index-masm-syntax-unified
[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88648

Signed-off-by: Stefan Agner <stefan@agner.ch>
Acked-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
arch/arm/mm/copypage-v4mc.c
arch/arm/mm/copypage-v4wb.c
arch/arm/mm/copypage-v4wt.c

index b03202cddddb2d07bf2fcfe3ee2d9d118066f846..f74cdce6d4dad47fd51ab18212e2d7979fbfc34f 100644 (file)
@@ -45,6 +45,7 @@ static void mc_copy_user_page(void *from, void *to)
        int tmp;
 
        asm volatile ("\
+       .syntax unified\n\
        ldmia   %0!, {r2, r3, ip, lr}           @ 4\n\
 1:     mcr     p15, 0, %1, c7, c6, 1           @ 1   invalidate D line\n\
        stmia   %1!, {r2, r3, ip, lr}           @ 4\n\
@@ -56,7 +57,7 @@ static void mc_copy_user_page(void *from, void *to)
        ldmia   %0!, {r2, r3, ip, lr}           @ 4\n\
        subs    %2, %2, #1                      @ 1\n\
        stmia   %1!, {r2, r3, ip, lr}           @ 4\n\
-       ldmneia %0!, {r2, r3, ip, lr}           @ 4\n\
+       ldmiane %0!, {r2, r3, ip, lr}           @ 4\n\
        bne     1b                              @ "
        : "+&r" (from), "+&r" (to), "=&r" (tmp)
        : "2" (PAGE_SIZE / 64)
index cd3e165afeedeb400c19b1dbb1b578e10b0d2400..6d336740aae49374c37946dc292cf5270dc5629a 100644 (file)
@@ -27,6 +27,7 @@ static void v4wb_copy_user_page(void *kto, const void *kfrom)
        int tmp;
 
        asm volatile ("\
+       .syntax unified\n\
        ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
 1:     mcr     p15, 0, %0, c7, c6, 1           @ 1   invalidate D line\n\
        stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
@@ -38,7 +39,7 @@ static void v4wb_copy_user_page(void *kto, const void *kfrom)
        ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
        subs    %2, %2, #1                      @ 1\n\
        stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
-       ldmneia %1!, {r3, r4, ip, lr}           @ 4\n\
+       ldmiane %1!, {r3, r4, ip, lr}           @ 4\n\
        bne     1b                              @ 1\n\
        mcr     p15, 0, %1, c7, c10, 4          @ 1   drain WB"
        : "+&r" (kto), "+&r" (kfrom), "=&r" (tmp)
index 8614572e1296ba904a018fd07b2dfe66843a5272..3851bb39644286bd49122cc0cd16b3df58ba2d07 100644 (file)
@@ -25,6 +25,7 @@ static void v4wt_copy_user_page(void *kto, const void *kfrom)
        int tmp;
 
        asm volatile ("\
+       .syntax unified\n\
        ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
 1:     stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
        ldmia   %1!, {r3, r4, ip, lr}           @ 4+1\n\
@@ -34,7 +35,7 @@ static void v4wt_copy_user_page(void *kto, const void *kfrom)
        ldmia   %1!, {r3, r4, ip, lr}           @ 4\n\
        subs    %2, %2, #1                      @ 1\n\
        stmia   %0!, {r3, r4, ip, lr}           @ 4\n\
-       ldmneia %1!, {r3, r4, ip, lr}           @ 4\n\
+       ldmiane %1!, {r3, r4, ip, lr}           @ 4\n\
        bne     1b                              @ 1\n\
        mcr     p15, 0, %2, c7, c7, 0           @ flush ID cache"
        : "+&r" (kto), "+&r" (kfrom), "=&r" (tmp)