xref: /linux/arch/s390/include/asm/insn-common-asm.h (revision 0eaed89c18aeedf0898baf2dbf5ff027c6795152)
1*495bc70aSHeiko Carstens /* SPDX-License-Identifier: GPL-2.0 */
2*495bc70aSHeiko Carstens /*
3*495bc70aSHeiko Carstens  * Assembler helper macros to generate .byte/.word code for instructions
4*495bc70aSHeiko Carstens  * that are unknown to older binutils versions.
5*495bc70aSHeiko Carstens  */
6*495bc70aSHeiko Carstens 
7*495bc70aSHeiko Carstens #ifndef __ASM_S390_INSN_COMMON_ASM_H
8*495bc70aSHeiko Carstens #define __ASM_S390_INSN_COMMON_ASM_H
9*495bc70aSHeiko Carstens 
10*495bc70aSHeiko Carstens #ifdef __ASSEMBLER__
11*495bc70aSHeiko Carstens 
12*495bc70aSHeiko Carstens /*
13*495bc70aSHeiko Carstens  * GR_NUM - Retrieve general-purpose register number
14*495bc70aSHeiko Carstens  *
15*495bc70aSHeiko Carstens  * @opd:	Operand to store register number
16*495bc70aSHeiko Carstens  * @gr:		String designation register in the format "%rN"
17*495bc70aSHeiko Carstens  */
18*495bc70aSHeiko Carstens .macro	GR_NUM	opd gr
19*495bc70aSHeiko Carstens 	\opd = 255
20*495bc70aSHeiko Carstens 	.irp rs,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
21*495bc70aSHeiko Carstens 	.ifc \gr,%r\rs
22*495bc70aSHeiko Carstens 		\opd = \rs
23*495bc70aSHeiko Carstens 	.endif
24*495bc70aSHeiko Carstens 	.endr
25*495bc70aSHeiko Carstens 	.if \opd == 255
26*495bc70aSHeiko Carstens 		\opd = \gr
27*495bc70aSHeiko Carstens 	.endif
28*495bc70aSHeiko Carstens .endm
29*495bc70aSHeiko Carstens 
30*495bc70aSHeiko Carstens /*
31*495bc70aSHeiko Carstens  * VX_NUM - Retrieve vector register number
32*495bc70aSHeiko Carstens  *
33*495bc70aSHeiko Carstens  * @opd:	Operand to store register number
34*495bc70aSHeiko Carstens  * @vxr:	String designation register in the format "%vN"
35*495bc70aSHeiko Carstens  *
36*495bc70aSHeiko Carstens  * The vector register number is used for as input number to the
37*495bc70aSHeiko Carstens  * instruction and, as well as, to compute the RXB field of the
38*495bc70aSHeiko Carstens  * instruction.
39*495bc70aSHeiko Carstens  */
40*495bc70aSHeiko Carstens .macro	VX_NUM	opd vxr
41*495bc70aSHeiko Carstens 	\opd = 255
42*495bc70aSHeiko Carstens 	.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
43*495bc70aSHeiko Carstens 	.ifc \vxr,%v\vs
44*495bc70aSHeiko Carstens 		\opd = \vs
45*495bc70aSHeiko Carstens 	.endif
46*495bc70aSHeiko Carstens 	.endr
47*495bc70aSHeiko Carstens 	.if \opd == 255
48*495bc70aSHeiko Carstens 		\opd = \vxr
49*495bc70aSHeiko Carstens 	.endif
50*495bc70aSHeiko Carstens .endm
51*495bc70aSHeiko Carstens 
52*495bc70aSHeiko Carstens #endif	/* __ASSEMBLER__ */
53*495bc70aSHeiko Carstens #endif	/* __ASM_S390_INSN_COMMON_ASM_H */
54