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