cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

nospec-insn.h (2528B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _ASM_S390_NOSPEC_ASM_H
      3#define _ASM_S390_NOSPEC_ASM_H
      4
      5#include <asm/alternative-asm.h>
      6#include <asm/asm-offsets.h>
      7#include <asm/dwarf.h>
      8
      9#ifdef __ASSEMBLY__
     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	.pushsection .text,"ax",@progbits
     21	.align 16,0x07
     22#else
     23	.pushsection .text.\name,"axG",@progbits,\name,comdat
     24#endif
     25	.globl \name
     26	.hidden \name
     27	.type \name,@function
     28\name:
     29	CFI_STARTPROC
     30	.endm
     31
     32	.macro __THUNK_EPILOG_NAME name
     33	CFI_ENDPROC
     34#ifdef CONFIG_EXPOLINE_EXTERN
     35	.size \name, .-\name
     36#endif
     37	.popsection
     38	.endm
     39
     40	.macro __THUNK_PROLOG_BR r1
     41	__THUNK_PROLOG_NAME __s390_indirect_jump_r\r1
     42	.endm
     43
     44	.macro __THUNK_EPILOG_BR r1
     45	__THUNK_EPILOG_NAME __s390_indirect_jump_r\r1
     46	.endm
     47
     48	.macro __THUNK_BR r1
     49	jg	__s390_indirect_jump_r\r1
     50	.endm
     51
     52	.macro __THUNK_BRASL r1,r2
     53	brasl	\r1,__s390_indirect_jump_r\r2
     54	.endm
     55
     56	.macro	__DECODE_R expand,reg
     57	.set .L__decode_fail,1
     58	.irp r1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
     59	.ifc \reg,%r\r1
     60	\expand \r1
     61	.set .L__decode_fail,0
     62	.endif
     63	.endr
     64	.if .L__decode_fail == 1
     65	.error "__DECODE_R failed"
     66	.endif
     67	.endm
     68
     69	.macro	__DECODE_RR expand,rsave,rtarget
     70	.set .L__decode_fail,1
     71	.irp r1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
     72	.ifc \rsave,%r\r1
     73	.irp r2,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
     74	.ifc \rtarget,%r\r2
     75	\expand \r1,\r2
     76	.set .L__decode_fail,0
     77	.endif
     78	.endr
     79	.endif
     80	.endr
     81	.if .L__decode_fail == 1
     82	.error "__DECODE_RR failed"
     83	.endif
     84	.endm
     85
     86	.macro __THUNK_EX_BR reg
     87	exrl	0,555f
     88	j	.
     89555:	br	\reg
     90	.endm
     91
     92#ifdef CONFIG_EXPOLINE_EXTERN
     93	.macro GEN_BR_THUNK reg
     94	.endm
     95	.macro GEN_BR_THUNK_EXTERN reg
     96#else
     97	.macro GEN_BR_THUNK reg
     98#endif
     99	__DECODE_R __THUNK_PROLOG_BR,\reg
    100	__THUNK_EX_BR \reg
    101	__DECODE_R __THUNK_EPILOG_BR,\reg
    102	.endm
    103
    104	.macro BR_EX reg
    105557:	__DECODE_R __THUNK_BR,\reg
    106	.pushsection .s390_indirect_branches,"a",@progbits
    107	.long	557b-.
    108	.popsection
    109	.endm
    110
    111	.macro BASR_EX rsave,rtarget
    112559:	__DECODE_RR __THUNK_BRASL,\rsave,\rtarget
    113	.pushsection .s390_indirect_branches,"a",@progbits
    114	.long	559b-.
    115	.popsection
    116	.endm
    117
    118#else
    119	.macro GEN_BR_THUNK reg
    120	.endm
    121
    122	 .macro BR_EX reg
    123	br	\reg
    124	.endm
    125
    126	.macro BASR_EX rsave,rtarget
    127	basr	\rsave,\rtarget
    128	.endm
    129#endif /* CC_USING_EXPOLINE */
    130
    131#endif /* __ASSEMBLY__ */
    132
    133#endif /* _ASM_S390_NOSPEC_ASM_H */