s390/time: Convert to use flag output macros

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>
This commit is contained in:
Heiko Carstens 2024-11-07 16:11:35 +01:00
parent 34c4812366
commit 81c54fc570

View 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)