lkml.org 
[lkml]   [2019]   [Feb]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 4/5] ARM: use unified assembler in c files
    Date
    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>
    ---
    Changes in v2:
    - Force unified syntax for inline assembler using .syntax unified
    Changes in v3:
    - Describe reason for adding ".syntax unified"

    arch/arm/mm/copypage-v4mc.c | 3 ++-
    arch/arm/mm/copypage-v4wb.c | 3 ++-
    arch/arm/mm/copypage-v4wt.c | 3 ++-
    3 files changed, 6 insertions(+), 3 deletions(-)

    diff --git a/arch/arm/mm/copypage-v4mc.c b/arch/arm/mm/copypage-v4mc.c
    index b03202cddddb..f74cdce6d4da 100644
    --- a/arch/arm/mm/copypage-v4mc.c
    +++ b/arch/arm/mm/copypage-v4mc.c
    @@ -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)
    diff --git a/arch/arm/mm/copypage-v4wb.c b/arch/arm/mm/copypage-v4wb.c
    index cd3e165afeed..6d336740aae4 100644
    --- a/arch/arm/mm/copypage-v4wb.c
    +++ b/arch/arm/mm/copypage-v4wb.c
    @@ -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)
    diff --git a/arch/arm/mm/copypage-v4wt.c b/arch/arm/mm/copypage-v4wt.c
    index 8614572e1296..3851bb396442 100644
    --- a/arch/arm/mm/copypage-v4wt.c
    +++ b/arch/arm/mm/copypage-v4wt.c
    @@ -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)
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-02-12 21:02    [W:2.159 / U:0.012 seconds]
    ©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site