]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
s390/fpu: Move GR_NUM / VX_NUM macros to separate header file
authorHeiko Carstens <hca@linux.ibm.com>
Tue, 26 May 2026 13:09:52 +0000 (15:09 +0200)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Wed, 3 Jun 2026 13:32:44 +0000 (15:32 +0200)
Move GR_NUM / VX_NUM macros to separate insn-common-asm.h header file
so they can be reused for non-fpu insn constructs.

Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Reviewed-by: Steffen Eiden <seiden@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/include/asm/fpu-insn-asm.h
arch/s390/include/asm/fpu-insn.h
arch/s390/include/asm/insn-common-asm.h [new file with mode: 0644]

index 8bd6dee89876d16f71648b3384587e5c24e66264..4a1bfc0f578e076c5ab33db5987a6d7c2feafaad 100644 (file)
 #error only <asm/fpu-insn.h> can be included directly
 #endif
 
-#ifdef __ASSEMBLER__
-
-/* Macros to generate vector instruction byte code */
-
-/* GR_NUM - Retrieve general-purpose register number
- *
- * @opd:       Operand to store register number
- * @r64:       String designation register in the format "%rN"
- */
-.macro GR_NUM  opd gr
-       \opd = 255
-       .irp rs,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-       .ifc \gr,%r\rs
-               \opd = \rs
-       .endif
-       .endr
-       .if \opd == 255
-               \opd = \gr
-       .endif
-.endm
+#include <asm/insn-common-asm.h>
 
-/* VX_NUM - Retrieve vector register number
- *
- * @opd:       Operand to store register number
- * @vxr:       String designation register in the format "%vN"
- *
- * The vector register number is used for as input number to the
- * instruction and, as well as, to compute the RXB field of the
- * instruction.
- */
-.macro VX_NUM  opd vxr
-       \opd = 255
-       .irp vs,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
-       .ifc \vxr,%v\vs
-               \opd = \vs
-       .endif
-       .endr
-       .if \opd == 255
-               \opd = \vxr
-       .endif
-.endm
+#ifdef __ASSEMBLER__
 
 /* RXB - Compute most significant bit used vector registers
  *
index 96727f3bd0dce0cdc42eb2ec2e9d49e6f1ca75fa..ae8b7033cfd2c3b307b608408fbf658db935b930 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/kmsan.h>
 #include <asm/asm-extable.h>
 
+asm(".include \"asm/insn-common-asm.h\"\n");
 asm(".include \"asm/fpu-insn-asm.h\"\n");
 
 /*
diff --git a/arch/s390/include/asm/insn-common-asm.h b/arch/s390/include/asm/insn-common-asm.h
new file mode 100644 (file)
index 0000000..fd9b3ca
--- /dev/null
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Assembler helper macros to generate .byte/.word code for instructions
+ * that are unknown to older binutils versions.
+ */
+
+#ifndef __ASM_S390_INSN_COMMON_ASM_H
+#define __ASM_S390_INSN_COMMON_ASM_H
+
+#ifdef __ASSEMBLER__
+
+/*
+ * GR_NUM - Retrieve general-purpose register number
+ *
+ * @opd:       Operand to store register number
+ * @gr:                String designation register in the format "%rN"
+ */
+.macro GR_NUM  opd gr
+       \opd = 255
+       .irp rs,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
+       .ifc \gr,%r\rs
+               \opd = \rs
+       .endif
+       .endr
+       .if \opd == 255
+               \opd = \gr
+       .endif
+.endm
+
+/*
+ * VX_NUM - Retrieve vector register number
+ *
+ * @opd:       Operand to store register number
+ * @vxr:       String designation register in the format "%vN"
+ *
+ * The vector register number is used for as input number to the
+ * instruction and, as well as, to compute the RXB field of the
+ * instruction.
+ */
+.macro VX_NUM  opd vxr
+       \opd = 255
+       .irp vs,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
+       .ifc \vxr,%v\vs
+               \opd = \vs
+       .endif
+       .endr
+       .if \opd == 255
+               \opd = \vxr
+       .endif
+.endm
+
+#endif /* __ASSEMBLER__ */
+#endif /* __ASM_S390_INSN_COMMON_ASM_H */