From cad8c3abaac3848f46ba9d1b21f79fab87098da2 Mon Sep 17 00:00:00 2001 From: Heiko Carstens Date: Sat, 3 Feb 2024 11:45:16 +0100 Subject: s390/fpu: let fpu_vlm() and fpu_vstm() return number of registers Let fpu_vlm() and fpu_vstm() macros return the number of registers saved / loaded. This is helpful to read easy to read code in case there are several subsequent fpu_vlm() or fpu_vstm() calls: __vector128 *vxrs = .... vxrs += fpu_vstm(0, 15, vxrs); vxrs += fpu_vstm(16, 31, vxrs); Reviewed-by: Claudio Imbrenda Signed-off-by: Heiko Carstens --- arch/s390/include/asm/fpu-insn.h | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'arch/s390/include/asm') diff --git a/arch/s390/include/asm/fpu-insn.h b/arch/s390/include/asm/fpu-insn.h index 538201864a47..803ce4e2aab4 100644 --- a/arch/s390/include/asm/fpu-insn.h +++ b/arch/s390/include/asm/fpu-insn.h @@ -110,7 +110,8 @@ static __always_inline void fpu_stfpc(unsigned int *fpc) #ifdef CONFIG_CC_IS_CLANG -#define fpu_vlm(_v1, _v3, _vxrs) do { \ +#define fpu_vlm(_v1, _v3, _vxrs) \ +({ \ unsigned int size = ((_v3) - (_v1) + 1) * sizeof(__vector128); \ struct { \ __vector128 _v[(_v3) - (_v1) + 1]; \ @@ -124,11 +125,13 @@ static __always_inline void fpu_stfpc(unsigned int *fpc) : [vxrs] "R" (*_v), \ [v1] "I" (_v1), [v3] "I" (_v3) \ : "memory", "1"); \ -} while (0) + (_v3) - (_v1) + 1; \ +}) #else /* CONFIG_CC_IS_CLANG */ -#define fpu_vlm(_v1, _v3, _vxrs) do { \ +#define fpu_vlm(_v1, _v3, _vxrs) \ +({ \ unsigned int size = ((_v3) - (_v1) + 1) * sizeof(__vector128); \ struct { \ __vector128 _v[(_v3) - (_v1) + 1]; \ @@ -140,13 +143,15 @@ static __always_inline void fpu_stfpc(unsigned int *fpc) : [vxrs] "Q" (*_v), \ [v1] "I" (_v1), [v3] "I" (_v3) \ : "memory"); \ -} while (0) + (_v3) - (_v1) + 1; \ +}) #endif /* CONFIG_CC_IS_CLANG */ #ifdef CONFIG_CC_IS_CLANG -#define fpu_vstm(_v1, _v3, _vxrs) do { \ +#define fpu_vstm(_v1, _v3, _vxrs) \ +({ \ unsigned int size = ((_v3) - (_v1) + 1) * sizeof(__vector128); \ struct { \ __vector128 _v[(_v3) - (_v1) + 1]; \ @@ -159,11 +164,13 @@ static __always_inline void fpu_stfpc(unsigned int *fpc) : [vxrs] "=R" (*_v) \ : [v1] "I" (_v1), [v3] "I" (_v3) \ : "memory", "1"); \ -} while (0) + (_v3) - (_v1) + 1; \ +}) #else /* CONFIG_CC_IS_CLANG */ -#define fpu_vstm(_v1, _v3, _vxrs) do { \ +#define fpu_vstm(_v1, _v3, _vxrs) \ +({ \ unsigned int size = ((_v3) - (_v1) + 1) * sizeof(__vector128); \ struct { \ __vector128 _v[(_v3) - (_v1) + 1]; \ @@ -174,7 +181,8 @@ static __always_inline void fpu_stfpc(unsigned int *fpc) : [vxrs] "=Q" (*_v) \ : [v1] "I" (_v1), [v3] "I" (_v3) \ : "memory"); \ -} while (0) + (_v3) - (_v1) + 1; \ +}) #endif /* CONFIG_CC_IS_CLANG */ -- cgit v1.2.3