Skip to content

Commit

Permalink
s390/fpu: let fpu_vlm() and fpu_vstm() return number of registers
Browse files Browse the repository at this point in the history
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 <imbrenda@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
  • Loading branch information
Heiko Carstens committed Feb 16, 2024
1 parent bdbd3ac commit cad8c3a
Showing 1 changed file with 16 additions and 8 deletions.
24 changes: 16 additions & 8 deletions arch/s390/include/asm/fpu-insn.h
Original file line number Diff line number Diff line change
Expand Up @@ -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]; \
Expand All @@ -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]; \
Expand All @@ -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]; \
Expand All @@ -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]; \
Expand All @@ -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 */

Expand Down

0 comments on commit cad8c3a

Please sign in to comment.