0001
0002 #ifndef _ASM_S390_NOSPEC_ASM_H
0003 #define _ASM_S390_NOSPEC_ASM_H
0004
0005 #include <asm/dwarf.h>
0006
0007 #ifdef __ASSEMBLY__
0008
0009 #ifdef CC_USING_EXPOLINE
0010
0011
0012
0013
0014
0015
0016 .macro __THUNK_PROLOG_NAME name
0017 #ifdef CONFIG_EXPOLINE_EXTERN
0018 .pushsection .text,"ax",@progbits
0019 .align 16,0x07
0020 #else
0021 .pushsection .text.\name,"axG",@progbits,\name,comdat
0022 #endif
0023 .globl \name
0024 .hidden \name
0025 .type \name,@function
0026 \name:
0027 CFI_STARTPROC
0028 .endm
0029
0030 .macro __THUNK_EPILOG_NAME name
0031 CFI_ENDPROC
0032 #ifdef CONFIG_EXPOLINE_EXTERN
0033 .size \name, .-\name
0034 #endif
0035 .popsection
0036 .endm
0037
0038 .macro __THUNK_PROLOG_BR r1
0039 __THUNK_PROLOG_NAME __s390_indirect_jump_r\r1
0040 .endm
0041
0042 .macro __THUNK_EPILOG_BR r1
0043 __THUNK_EPILOG_NAME __s390_indirect_jump_r\r1
0044 .endm
0045
0046 .macro __THUNK_BR r1
0047 jg __s390_indirect_jump_r\r1
0048 .endm
0049
0050 .macro __THUNK_BRASL r1,r2
0051 brasl \r1,__s390_indirect_jump_r\r2
0052 .endm
0053
0054 .macro __DECODE_R expand,reg
0055 .set .L__decode_fail,1
0056 .irp r1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
0057 .ifc \reg,%r\r1
0058 \expand \r1
0059 .set .L__decode_fail,0
0060 .endif
0061 .endr
0062 .if .L__decode_fail == 1
0063 .error "__DECODE_R failed"
0064 .endif
0065 .endm
0066
0067 .macro __DECODE_RR expand,rsave,rtarget
0068 .set .L__decode_fail,1
0069 .irp r1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
0070 .ifc \rsave,%r\r1
0071 .irp r2,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
0072 .ifc \rtarget,%r\r2
0073 \expand \r1,\r2
0074 .set .L__decode_fail,0
0075 .endif
0076 .endr
0077 .endif
0078 .endr
0079 .if .L__decode_fail == 1
0080 .error "__DECODE_RR failed"
0081 .endif
0082 .endm
0083
0084 .macro __THUNK_EX_BR reg
0085 exrl 0,555f
0086 j .
0087 555: br \reg
0088 .endm
0089
0090 #ifdef CONFIG_EXPOLINE_EXTERN
0091 .macro GEN_BR_THUNK reg
0092 .endm
0093 .macro GEN_BR_THUNK_EXTERN reg
0094 #else
0095 .macro GEN_BR_THUNK reg
0096 #endif
0097 __DECODE_R __THUNK_PROLOG_BR,\reg
0098 __THUNK_EX_BR \reg
0099 __DECODE_R __THUNK_EPILOG_BR,\reg
0100 .endm
0101
0102 .macro BR_EX reg
0103 557: __DECODE_R __THUNK_BR,\reg
0104 .pushsection .s390_indirect_branches,"a",@progbits
0105 .long 557b-.
0106 .popsection
0107 .endm
0108
0109 .macro BASR_EX rsave,rtarget
0110 559: __DECODE_RR __THUNK_BRASL,\rsave,\rtarget
0111 .pushsection .s390_indirect_branches,"a",@progbits
0112 .long 559b-.
0113 .popsection
0114 .endm
0115
0116 #else
0117 .macro GEN_BR_THUNK reg
0118 .endm
0119
0120 .macro BR_EX reg
0121 br \reg
0122 .endm
0123
0124 .macro BASR_EX rsave,rtarget
0125 basr \rsave,\rtarget
0126 .endm
0127 #endif
0128
0129 #endif
0130
0131 #endif