s390/ebcdic: Use exrl instead of ex
authorSven Schnelle <svens@linux.ibm.com>
Wed, 8 Jan 2025 14:27:04 +0000 (15:27 +0100)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Mon, 13 Jan 2025 08:50:18 +0000 (09:50 +0100)
exrl is present in all machines currently supported, therefore prefer
it over ex. This saves one instruction and doesn't need an additional
register to hold the address of the target instruction.

Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/include/asm/ebcdic.h

index efb50fc6866cd0a60362bede8e713693b861d4b9..cfa34055232826168b18d1b34c4f20a69fb96f5f 100644 (file)
@@ -25,15 +25,15 @@ codepage_convert(const __u8 *codepage, volatile char *addr, unsigned long nr)
        if (nr-- <= 0)
                return;
        asm volatile(
-               "       bras    1,1f\n"
-               "       tr      0(1,%0),0(%2)\n"
-               "0:     tr      0(256,%0),0(%2)\n"
+               "       j       2f\n"
+               "0:     tr      0(1,%0),0(%2)\n"
+               "1:     tr      0(256,%0),0(%2)\n"
                "       la      %0,256(%0)\n"
-               "1:     ahi     %1,-256\n"
-               "       jnm     0b\n"
-               "       ex      %1,0(1)"
+               "2:     ahi     %1,-256\n"
+               "       jnm     1b\n"
+               "       exrl    %1,0b"
                : "+&a" (addr), "+&a" (nr)
-               : "a" (codepage) : "cc", "memory", "1");
+               : "a" (codepage) : "cc", "memory");
 }
 
 #define ASCEBC(addr,nr) codepage_convert(_ascebc, addr, nr)