s390/nospec: move to single register thunks
Assembler generated expoline thunks were in a form __s390_indirect_jump_rXuse_rX when exrl instruction has not been available. Now with z10 as minimum supported machine generation there is no need for 2 register thunks, always generate __s390_indirect_jump_rX versions. Acked-by: Heiko Carstens <hca@linux.ibm.com> Acked-by: Sumanth Korikkar <sumanthk@linux.ibm.com> Acked-by: Ilya Leoshkevich <iii@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
parent
4efd417f29
commit
bedc96698f
|
@ -37,28 +37,41 @@
|
||||||
.popsection
|
.popsection
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro __THUNK_PROLOG_BR r1,r2
|
.macro __THUNK_PROLOG_BR r1
|
||||||
__THUNK_PROLOG_NAME __s390_indirect_jump_r\r1
|
__THUNK_PROLOG_NAME __s390_indirect_jump_r\r1
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro __THUNK_EPILOG_BR r1,r2
|
.macro __THUNK_EPILOG_BR r1
|
||||||
__THUNK_EPILOG_NAME __s390_indirect_jump_r\r1
|
__THUNK_EPILOG_NAME __s390_indirect_jump_r\r1
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro __THUNK_BR r1,r2
|
.macro __THUNK_BR r1
|
||||||
jg __s390_indirect_jump_r\r1
|
jg __s390_indirect_jump_r\r1
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro __THUNK_BRASL r1,r2,r3
|
.macro __THUNK_BRASL r1,r2
|
||||||
brasl \r1,__s390_indirect_jump_r\r2
|
brasl \r1,__s390_indirect_jump_r\r2
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro __DECODE_RR expand,reg,ruse
|
.macro __DECODE_R expand,reg
|
||||||
.set __decode_fail,1
|
.set __decode_fail,1
|
||||||
.irp r1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
.irp r1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
||||||
.ifc \reg,%r\r1
|
.ifc \reg,%r\r1
|
||||||
|
\expand \r1
|
||||||
|
.set __decode_fail,0
|
||||||
|
.endif
|
||||||
|
.endr
|
||||||
|
.if __decode_fail == 1
|
||||||
|
.error "__DECODE_R failed"
|
||||||
|
.endif
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro __DECODE_RR expand,rsave,rtarget
|
||||||
|
.set __decode_fail,1
|
||||||
|
.irp r1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
||||||
|
.ifc \rsave,%r\r1
|
||||||
.irp r2,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
.irp r2,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
||||||
.ifc \ruse,%r\r2
|
.ifc \rtarget,%r\r2
|
||||||
\expand \r1,\r2
|
\expand \r1,\r2
|
||||||
.set __decode_fail,0
|
.set __decode_fail,0
|
||||||
.endif
|
.endif
|
||||||
|
@ -70,68 +83,47 @@
|
||||||
.endif
|
.endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro __DECODE_RRR expand,rsave,rtarget,ruse
|
.macro __THUNK_EX_BR reg
|
||||||
.set __decode_fail,1
|
|
||||||
.irp r1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
|
||||||
.ifc \rsave,%r\r1
|
|
||||||
.irp r2,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
|
||||||
.ifc \rtarget,%r\r2
|
|
||||||
.irp r3,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
|
|
||||||
.ifc \ruse,%r\r3
|
|
||||||
\expand \r1,\r2,\r3
|
|
||||||
.set __decode_fail,0
|
|
||||||
.endif
|
|
||||||
.endr
|
|
||||||
.endif
|
|
||||||
.endr
|
|
||||||
.endif
|
|
||||||
.endr
|
|
||||||
.if __decode_fail == 1
|
|
||||||
.error "__DECODE_RRR failed"
|
|
||||||
.endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro __THUNK_EX_BR reg,ruse
|
|
||||||
exrl 0,555f
|
exrl 0,555f
|
||||||
j .
|
j .
|
||||||
555: br \reg
|
555: br \reg
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#ifdef CONFIG_EXPOLINE_EXTERN
|
#ifdef CONFIG_EXPOLINE_EXTERN
|
||||||
.macro GEN_BR_THUNK reg,ruse=%r1
|
.macro GEN_BR_THUNK reg
|
||||||
.endm
|
.endm
|
||||||
.macro GEN_BR_THUNK_EXTERN reg,ruse=%r1
|
.macro GEN_BR_THUNK_EXTERN reg
|
||||||
#else
|
#else
|
||||||
.macro GEN_BR_THUNK reg,ruse=%r1
|
.macro GEN_BR_THUNK reg
|
||||||
#endif
|
#endif
|
||||||
__DECODE_RR __THUNK_PROLOG_BR,\reg,\ruse
|
__DECODE_R __THUNK_PROLOG_BR,\reg
|
||||||
__THUNK_EX_BR \reg,\ruse
|
__THUNK_EX_BR \reg
|
||||||
__DECODE_RR __THUNK_EPILOG_BR,\reg,\ruse
|
__DECODE_R __THUNK_EPILOG_BR,\reg
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro BR_EX reg,ruse=%r1
|
.macro BR_EX reg
|
||||||
557: __DECODE_RR __THUNK_BR,\reg,\ruse
|
557: __DECODE_R __THUNK_BR,\reg
|
||||||
.pushsection .s390_indirect_branches,"a",@progbits
|
.pushsection .s390_indirect_branches,"a",@progbits
|
||||||
.long 557b-.
|
.long 557b-.
|
||||||
.popsection
|
.popsection
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro BASR_EX rsave,rtarget,ruse=%r1
|
.macro BASR_EX rsave,rtarget
|
||||||
559: __DECODE_RRR __THUNK_BRASL,\rsave,\rtarget,\ruse
|
559: __DECODE_RR __THUNK_BRASL,\rsave,\rtarget
|
||||||
.pushsection .s390_indirect_branches,"a",@progbits
|
.pushsection .s390_indirect_branches,"a",@progbits
|
||||||
.long 559b-.
|
.long 559b-.
|
||||||
.popsection
|
.popsection
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#else
|
#else
|
||||||
.macro GEN_BR_THUNK reg,ruse=%r1
|
.macro GEN_BR_THUNK reg
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro BR_EX reg,ruse=%r1
|
.macro BR_EX reg
|
||||||
br \reg
|
br \reg
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro BASR_EX rsave,rtarget,ruse=%r1
|
.macro BASR_EX rsave,rtarget
|
||||||
basr \rsave,\rtarget
|
basr \rsave,\rtarget
|
||||||
.endm
|
.endm
|
||||||
#endif /* CC_USING_EXPOLINE */
|
#endif /* CC_USING_EXPOLINE */
|
||||||
|
|
Loading…
Reference in New Issue