File Index
Files and directories
Sign in
FILE

nospec-insn.h

File preview with syntax highlighting.

linux-6.19.14/arch/s390/include/asm/nospec-insn.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef _ASM_S390_NOSPEC_ASM_H
  3#define _ASM_S390_NOSPEC_ASM_H
  4
  5#include <linux/linkage.h>
  6#include <linux/export.h>
  7#include <asm/dwarf.h>
  8
  9#ifdef __ASSEMBLER__
 10
 11#ifdef CC_USING_EXPOLINE
 12
 13/*
 14 * The expoline macros are used to create thunks in the same format
 15 * as gcc generates them. The 'comdat' section flag makes sure that
 16 * the various thunks are merged into a single copy.
 17 */
 18	.macro __THUNK_PROLOG_NAME name
 19#ifdef CONFIG_EXPOLINE_EXTERN
 20	SYM_CODE_START(\name)
 21#else
 22	.pushsection .text..\name,"axG",@progbits,\name,comdat
 23	.globl \name
 24	.hidden \name
 25	.type \name,@function
 26\name:
 27	CFI_STARTPROC
 28#endif
 29	.endm
 30
 31	.macro __THUNK_EPILOG_NAME name
 32#ifdef CONFIG_EXPOLINE_EXTERN
 33	SYM_CODE_END(\name)
 34	EXPORT_SYMBOL(\name)
 35#else
 36	CFI_ENDPROC
 37	.popsection
 38#endif
 39	.endm
 40
 41	.macro __THUNK_PROLOG_BR r1
 42	__THUNK_PROLOG_NAME __s390_indirect_jump_r\r1
 43	.endm
 44
 45	.macro __THUNK_EPILOG_BR r1
 46	__THUNK_EPILOG_NAME __s390_indirect_jump_r\r1
 47	.endm
 48
 49	.macro __THUNK_BR r1
 50	jg	__s390_indirect_jump_r\r1
 51	.endm
 52
 53	.macro __THUNK_BRASL r1,r2
 54	brasl	\r1,__s390_indirect_jump_r\r2
 55	.endm
 56
 57	.macro	__DECODE_R expand,reg
 58	.set .L__decode_fail,1
 59	.irp r1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
 60	.ifc \reg,%r\r1
 61	\expand \r1
 62	.set .L__decode_fail,0
 63	.endif
 64	.endr
 65	.if .L__decode_fail == 1
 66	.error "__DECODE_R failed"
 67	.endif
 68	.endm
 69
 70	.macro	__DECODE_RR expand,rsave,rtarget
 71	.set .L__decode_fail,1
 72	.irp r1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
 73	.ifc \rsave,%r\r1
 74	.irp r2,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
 75	.ifc \rtarget,%r\r2
 76	\expand \r1,\r2
 77	.set .L__decode_fail,0
 78	.endif
 79	.endr
 80	.endif
 81	.endr
 82	.if .L__decode_fail == 1
 83	.error "__DECODE_RR failed"
 84	.endif
 85	.endm
 86
 87	.macro __THUNK_EX_BR reg
 88	exrl	0,555f
 89	j	.
 90555:	br	\reg
 91	.endm
 92
 93#ifdef CONFIG_EXPOLINE_EXTERN
 94	.macro GEN_BR_THUNK reg
 95	.endm
 96	.macro GEN_BR_THUNK_EXTERN reg
 97#else
 98	.macro GEN_BR_THUNK reg
 99#endif
100	__DECODE_R __THUNK_PROLOG_BR,\reg
101	__THUNK_EX_BR \reg
102	__DECODE_R __THUNK_EPILOG_BR,\reg
103	.endm
104
105	.macro BR_EX reg
106557:	__DECODE_R __THUNK_BR,\reg
107	.pushsection .s390_indirect_branches,"a",@progbits
108	.long	557b-.
109	.popsection
110	.endm
111
112	.macro BASR_EX rsave,rtarget
113559:	__DECODE_RR __THUNK_BRASL,\rsave,\rtarget
114	.pushsection .s390_indirect_branches,"a",@progbits
115	.long	559b-.
116	.popsection
117	.endm
118
119#else
120	.macro GEN_BR_THUNK reg
121	.endm
122
123	 .macro BR_EX reg
124	br	\reg
125	.endm
126
127	.macro BASR_EX rsave,rtarget
128	basr	\rsave,\rtarget
129	.endm
130#endif /* CC_USING_EXPOLINE */
131
132#endif /* __ASSEMBLER__ */
133
134#endif /* _ASM_S390_NOSPEC_ASM_H */
~/ Read-only file preview.