]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
s390/time: Convert to use flag output macros
authorHeiko Carstens <hca@linux.ibm.com>
Thu, 7 Nov 2024 15:11:35 +0000 (16:11 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Wed, 13 Nov 2024 13:31:31 +0000 (14:31 +0100)
Use flag output macros in inline asm to allow for better code generation if
the compiler has support for the flag output constraint.

Reviewed-by: Juergen Christ <jchrist@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/include/asm/timex.h

index 640901f2fbc3ccfbcacaacaa4c8ece86bfdfe170..8fe56456feabe63c54630e5eac05c0e29828e72d 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/preempt.h>
 #include <linux/time64.h>
 #include <asm/lowcore.h>
+#include <asm/asm.h>
 
 /* The value of the TOD clock for 1.1.1970. */
 #define TOD_UNIX_EPOCH 0x7d91048bca000000ULL
@@ -44,11 +45,12 @@ static inline int set_tod_clock(__u64 time)
        int cc;
 
        asm volatile(
-               "   sck   %1\n"
-               "   ipm   %0\n"
-               "   srl   %0,28\n"
-               : "=d" (cc) : "Q" (time) : "cc");
-       return cc;
+               "       sck     %[time]\n"
+               CC_IPM(cc)
+               : CC_OUT(cc, cc)
+               : [time] "Q" (time)
+               : CC_CLOBBER);
+       return CC_TRANSFORM(cc);
 }
 
 static inline int store_tod_clock_ext_cc(union tod_clock *clk)
@@ -56,11 +58,12 @@ static inline int store_tod_clock_ext_cc(union tod_clock *clk)
        int cc;
 
        asm volatile(
-               "   stcke  %1\n"
-               "   ipm   %0\n"
-               "   srl   %0,28\n"
-               : "=d" (cc), "=Q" (*clk) : : "cc");
-       return cc;
+               "       stcke   %[clk]\n"
+               CC_IPM(cc)
+               : CC_OUT(cc, cc), [clk] "=Q" (*clk)
+               :
+               : CC_CLOBBER);
+       return CC_TRANSFORM(cc);
 }
 
 static __always_inline void store_tod_clock_ext(union tod_clock *tod)
@@ -149,12 +152,11 @@ struct ptff_qui {
                "       lgr     0,%[reg0]\n"                            \
                "       lgr     1,%[reg1]\n"                            \
                "       ptff\n"                                         \
-               "       ipm     %[rc]\n"                                \
-               "       srl     %[rc],28\n"                             \
-               : [rc] "=&d" (rc), "+m" (*(struct addrtype *)reg1)      \
+               CC_IPM(rc)                                              \
+               : CC_OUT(rc, rc), "+m" (*(struct addrtype *)reg1)       \
                : [reg0] "d" (reg0), [reg1] "d" (reg1)                  \
-               : "cc", "0", "1");                                      \
-       rc;                                                             \
+               : CC_CLOBBER_LIST("0", "1"));                           \
+       CC_TRANSFORM(rc);                                               \
 })
 
 static inline unsigned long local_tick_disable(void)