lkml.org 
[lkml]   [2021]   [Nov]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 046/154] powerpc/dcr: Use cmplwi instead of 3-argument cmpli
    Date
    From: Michael Ellerman <mpe@ellerman.id.au>

    [ Upstream commit fef071be57dc43679a32d5b0e6ee176d6f12e9f2 ]

    In dcr-low.S we use cmpli with three arguments, instead of four
    arguments as defined in the ISA:

    cmpli cr0,r3,1024

    This appears to be a PPC440-ism, looking at the "PPC440x5 CPU Core
    User’s Manual" it shows cmpli having no L field, but implied to be 0 due
    to the core being 32-bit. It mentions that the ISA defines four
    arguments and recommends using cmplwi.

    It also corresponds to the old POWER instruction set, which had no L
    field there, a reserved bit instead.

    dcr-low.S is only built 32-bit, because it is only built when
    DCR_NATIVE=y, which is only selected by 40x and 44x. Looking at the
    generated code (with gcc/gas) we see cmplwi as expected.

    Although gas is happy with the 3-argument version when building for
    32-bit, the LLVM assembler is not and errors out with:

    arch/powerpc/sysdev/dcr-low.S:27:10: error: invalid operand for instruction
    cmpli 0,%r3,1024; ...
    ^

    Switch to the cmplwi extended opcode, which avoids any confusion when
    reading the ISA, fixes the issue with the LLVM assembler, and also means
    the code could be built 64-bit in future (though that's very unlikely).

    Reported-by: Nick Desaulniers <ndesaulniers@google.com>
    Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    BugLink: https://github.com/ClangBuiltLinux/linux/issues/1419
    Link: https://lore.kernel.org/r/20211014024424.528848-1-mpe@ellerman.id.au
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/powerpc/sysdev/dcr-low.S | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/arch/powerpc/sysdev/dcr-low.S b/arch/powerpc/sysdev/dcr-low.S
    index efeeb1b885a17..329b9c4ae5429 100644
    --- a/arch/powerpc/sysdev/dcr-low.S
    +++ b/arch/powerpc/sysdev/dcr-low.S
    @@ -11,7 +11,7 @@
    #include <asm/export.h>

    #define DCR_ACCESS_PROLOG(table) \
    - cmpli cr0,r3,1024; \
    + cmplwi cr0,r3,1024; \
    rlwinm r3,r3,4,18,27; \
    lis r5,table@h; \
    ori r5,r5,table@l; \
    --
    2.33.0


    \
     
     \ /
      Last update: 2021-11-24 14:32    [W:2.734 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site