| /* 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 */ |