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

asmmacro.h (6970B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
      4 */
      5#ifndef _ASM_ASMMACRO_H
      6#define _ASM_ASMMACRO_H
      7
      8#include <asm/asm-offsets.h>
      9#include <asm/regdef.h>
     10#include <asm/fpregdef.h>
     11#include <asm/loongarch.h>
     12
     13	.macro	parse_v var val
     14	\var	= \val
     15	.endm
     16
     17	.macro	parse_r var r
     18	\var	= -1
     19	.ifc	\r, $r0
     20	\var	= 0
     21	.endif
     22	.ifc	\r, $r1
     23	\var	= 1
     24	.endif
     25	.ifc	\r, $r2
     26	\var	= 2
     27	.endif
     28	.ifc	\r, $r3
     29	\var	= 3
     30	.endif
     31	.ifc	\r, $r4
     32	\var	= 4
     33	.endif
     34	.ifc	\r, $r5
     35	\var	= 5
     36	.endif
     37	.ifc	\r, $r6
     38	\var	= 6
     39	.endif
     40	.ifc	\r, $r7
     41	\var	= 7
     42	.endif
     43	.ifc	\r, $r8
     44	\var	= 8
     45	.endif
     46	.ifc	\r, $r9
     47	\var	= 9
     48	.endif
     49	.ifc	\r, $r10
     50	\var	= 10
     51	.endif
     52	.ifc	\r, $r11
     53	\var	= 11
     54	.endif
     55	.ifc	\r, $r12
     56	\var	= 12
     57	.endif
     58	.ifc	\r, $r13
     59	\var	= 13
     60	.endif
     61	.ifc	\r, $r14
     62	\var	= 14
     63	.endif
     64	.ifc	\r, $r15
     65	\var	= 15
     66	.endif
     67	.ifc	\r, $r16
     68	\var	= 16
     69	.endif
     70	.ifc	\r, $r17
     71	\var	= 17
     72	.endif
     73	.ifc	\r, $r18
     74	\var	= 18
     75	.endif
     76	.ifc	\r, $r19
     77	\var	= 19
     78	.endif
     79	.ifc	\r, $r20
     80	\var	= 20
     81	.endif
     82	.ifc	\r, $r21
     83	\var	= 21
     84	.endif
     85	.ifc	\r, $r22
     86	\var	= 22
     87	.endif
     88	.ifc	\r, $r23
     89	\var	= 23
     90	.endif
     91	.ifc	\r, $r24
     92	\var	= 24
     93	.endif
     94	.ifc	\r, $r25
     95	\var	= 25
     96	.endif
     97	.ifc	\r, $r26
     98	\var	= 26
     99	.endif
    100	.ifc	\r, $r27
    101	\var	= 27
    102	.endif
    103	.ifc	\r, $r28
    104	\var	= 28
    105	.endif
    106	.ifc	\r, $r29
    107	\var	= 29
    108	.endif
    109	.ifc	\r, $r30
    110	\var	= 30
    111	.endif
    112	.ifc	\r, $r31
    113	\var	= 31
    114	.endif
    115	.iflt	\var
    116	.error	"Unable to parse register name \r"
    117	.endif
    118	.endm
    119
    120	.macro	cpu_save_nonscratch thread
    121	stptr.d	s0, \thread, THREAD_REG23
    122	stptr.d	s1, \thread, THREAD_REG24
    123	stptr.d	s2, \thread, THREAD_REG25
    124	stptr.d	s3, \thread, THREAD_REG26
    125	stptr.d	s4, \thread, THREAD_REG27
    126	stptr.d	s5, \thread, THREAD_REG28
    127	stptr.d	s6, \thread, THREAD_REG29
    128	stptr.d	s7, \thread, THREAD_REG30
    129	stptr.d	s8, \thread, THREAD_REG31
    130	stptr.d	sp, \thread, THREAD_REG03
    131	stptr.d	fp, \thread, THREAD_REG22
    132	.endm
    133
    134	.macro	cpu_restore_nonscratch thread
    135	ldptr.d	s0, \thread, THREAD_REG23
    136	ldptr.d	s1, \thread, THREAD_REG24
    137	ldptr.d	s2, \thread, THREAD_REG25
    138	ldptr.d	s3, \thread, THREAD_REG26
    139	ldptr.d	s4, \thread, THREAD_REG27
    140	ldptr.d	s5, \thread, THREAD_REG28
    141	ldptr.d	s6, \thread, THREAD_REG29
    142	ldptr.d	s7, \thread, THREAD_REG30
    143	ldptr.d	s8, \thread, THREAD_REG31
    144	ldptr.d	ra, \thread, THREAD_REG01
    145	ldptr.d	sp, \thread, THREAD_REG03
    146	ldptr.d	fp, \thread, THREAD_REG22
    147	.endm
    148
    149	.macro fpu_save_csr thread tmp
    150	movfcsr2gr	\tmp, fcsr0
    151	stptr.w	\tmp, \thread, THREAD_FCSR
    152	.endm
    153
    154	.macro fpu_restore_csr thread tmp
    155	ldptr.w	\tmp, \thread, THREAD_FCSR
    156	movgr2fcsr	fcsr0, \tmp
    157	.endm
    158
    159	.macro fpu_save_cc thread tmp0 tmp1
    160	movcf2gr	\tmp0, $fcc0
    161	move	\tmp1, \tmp0
    162	movcf2gr	\tmp0, $fcc1
    163	bstrins.d	\tmp1, \tmp0, 15, 8
    164	movcf2gr	\tmp0, $fcc2
    165	bstrins.d	\tmp1, \tmp0, 23, 16
    166	movcf2gr	\tmp0, $fcc3
    167	bstrins.d	\tmp1, \tmp0, 31, 24
    168	movcf2gr	\tmp0, $fcc4
    169	bstrins.d	\tmp1, \tmp0, 39, 32
    170	movcf2gr	\tmp0, $fcc5
    171	bstrins.d	\tmp1, \tmp0, 47, 40
    172	movcf2gr	\tmp0, $fcc6
    173	bstrins.d	\tmp1, \tmp0, 55, 48
    174	movcf2gr	\tmp0, $fcc7
    175	bstrins.d	\tmp1, \tmp0, 63, 56
    176	stptr.d		\tmp1, \thread, THREAD_FCC
    177	.endm
    178
    179	.macro fpu_restore_cc thread tmp0 tmp1
    180	ldptr.d	\tmp0, \thread, THREAD_FCC
    181	bstrpick.d	\tmp1, \tmp0, 7, 0
    182	movgr2cf	$fcc0, \tmp1
    183	bstrpick.d	\tmp1, \tmp0, 15, 8
    184	movgr2cf	$fcc1, \tmp1
    185	bstrpick.d	\tmp1, \tmp0, 23, 16
    186	movgr2cf	$fcc2, \tmp1
    187	bstrpick.d	\tmp1, \tmp0, 31, 24
    188	movgr2cf	$fcc3, \tmp1
    189	bstrpick.d	\tmp1, \tmp0, 39, 32
    190	movgr2cf	$fcc4, \tmp1
    191	bstrpick.d	\tmp1, \tmp0, 47, 40
    192	movgr2cf	$fcc5, \tmp1
    193	bstrpick.d	\tmp1, \tmp0, 55, 48
    194	movgr2cf	$fcc6, \tmp1
    195	bstrpick.d	\tmp1, \tmp0, 63, 56
    196	movgr2cf	$fcc7, \tmp1
    197	.endm
    198
    199	.macro	fpu_save_double thread tmp
    200	li.w	\tmp, THREAD_FPR0
    201	PTR_ADD \tmp, \tmp, \thread
    202	fst.d	$f0, \tmp, THREAD_FPR0  - THREAD_FPR0
    203	fst.d	$f1, \tmp, THREAD_FPR1  - THREAD_FPR0
    204	fst.d	$f2, \tmp, THREAD_FPR2  - THREAD_FPR0
    205	fst.d	$f3, \tmp, THREAD_FPR3  - THREAD_FPR0
    206	fst.d	$f4, \tmp, THREAD_FPR4  - THREAD_FPR0
    207	fst.d	$f5, \tmp, THREAD_FPR5  - THREAD_FPR0
    208	fst.d	$f6, \tmp, THREAD_FPR6  - THREAD_FPR0
    209	fst.d	$f7, \tmp, THREAD_FPR7  - THREAD_FPR0
    210	fst.d	$f8, \tmp, THREAD_FPR8  - THREAD_FPR0
    211	fst.d	$f9, \tmp, THREAD_FPR9  - THREAD_FPR0
    212	fst.d	$f10, \tmp, THREAD_FPR10 - THREAD_FPR0
    213	fst.d	$f11, \tmp, THREAD_FPR11 - THREAD_FPR0
    214	fst.d	$f12, \tmp, THREAD_FPR12 - THREAD_FPR0
    215	fst.d	$f13, \tmp, THREAD_FPR13 - THREAD_FPR0
    216	fst.d	$f14, \tmp, THREAD_FPR14 - THREAD_FPR0
    217	fst.d	$f15, \tmp, THREAD_FPR15 - THREAD_FPR0
    218	fst.d	$f16, \tmp, THREAD_FPR16 - THREAD_FPR0
    219	fst.d	$f17, \tmp, THREAD_FPR17 - THREAD_FPR0
    220	fst.d	$f18, \tmp, THREAD_FPR18 - THREAD_FPR0
    221	fst.d	$f19, \tmp, THREAD_FPR19 - THREAD_FPR0
    222	fst.d	$f20, \tmp, THREAD_FPR20 - THREAD_FPR0
    223	fst.d	$f21, \tmp, THREAD_FPR21 - THREAD_FPR0
    224	fst.d	$f22, \tmp, THREAD_FPR22 - THREAD_FPR0
    225	fst.d	$f23, \tmp, THREAD_FPR23 - THREAD_FPR0
    226	fst.d	$f24, \tmp, THREAD_FPR24 - THREAD_FPR0
    227	fst.d	$f25, \tmp, THREAD_FPR25 - THREAD_FPR0
    228	fst.d	$f26, \tmp, THREAD_FPR26 - THREAD_FPR0
    229	fst.d	$f27, \tmp, THREAD_FPR27 - THREAD_FPR0
    230	fst.d	$f28, \tmp, THREAD_FPR28 - THREAD_FPR0
    231	fst.d	$f29, \tmp, THREAD_FPR29 - THREAD_FPR0
    232	fst.d	$f30, \tmp, THREAD_FPR30 - THREAD_FPR0
    233	fst.d	$f31, \tmp, THREAD_FPR31 - THREAD_FPR0
    234	.endm
    235
    236	.macro	fpu_restore_double thread tmp
    237	li.w	\tmp, THREAD_FPR0
    238	PTR_ADD \tmp, \tmp, \thread
    239	fld.d	$f0, \tmp, THREAD_FPR0  - THREAD_FPR0
    240	fld.d	$f1, \tmp, THREAD_FPR1  - THREAD_FPR0
    241	fld.d	$f2, \tmp, THREAD_FPR2  - THREAD_FPR0
    242	fld.d	$f3, \tmp, THREAD_FPR3  - THREAD_FPR0
    243	fld.d	$f4, \tmp, THREAD_FPR4  - THREAD_FPR0
    244	fld.d	$f5, \tmp, THREAD_FPR5  - THREAD_FPR0
    245	fld.d	$f6, \tmp, THREAD_FPR6  - THREAD_FPR0
    246	fld.d	$f7, \tmp, THREAD_FPR7  - THREAD_FPR0
    247	fld.d	$f8, \tmp, THREAD_FPR8  - THREAD_FPR0
    248	fld.d	$f9, \tmp, THREAD_FPR9  - THREAD_FPR0
    249	fld.d	$f10, \tmp, THREAD_FPR10 - THREAD_FPR0
    250	fld.d	$f11, \tmp, THREAD_FPR11 - THREAD_FPR0
    251	fld.d	$f12, \tmp, THREAD_FPR12 - THREAD_FPR0
    252	fld.d	$f13, \tmp, THREAD_FPR13 - THREAD_FPR0
    253	fld.d	$f14, \tmp, THREAD_FPR14 - THREAD_FPR0
    254	fld.d	$f15, \tmp, THREAD_FPR15 - THREAD_FPR0
    255	fld.d	$f16, \tmp, THREAD_FPR16 - THREAD_FPR0
    256	fld.d	$f17, \tmp, THREAD_FPR17 - THREAD_FPR0
    257	fld.d	$f18, \tmp, THREAD_FPR18 - THREAD_FPR0
    258	fld.d	$f19, \tmp, THREAD_FPR19 - THREAD_FPR0
    259	fld.d	$f20, \tmp, THREAD_FPR20 - THREAD_FPR0
    260	fld.d	$f21, \tmp, THREAD_FPR21 - THREAD_FPR0
    261	fld.d	$f22, \tmp, THREAD_FPR22 - THREAD_FPR0
    262	fld.d	$f23, \tmp, THREAD_FPR23 - THREAD_FPR0
    263	fld.d	$f24, \tmp, THREAD_FPR24 - THREAD_FPR0
    264	fld.d	$f25, \tmp, THREAD_FPR25 - THREAD_FPR0
    265	fld.d	$f26, \tmp, THREAD_FPR26 - THREAD_FPR0
    266	fld.d	$f27, \tmp, THREAD_FPR27 - THREAD_FPR0
    267	fld.d	$f28, \tmp, THREAD_FPR28 - THREAD_FPR0
    268	fld.d	$f29, \tmp, THREAD_FPR29 - THREAD_FPR0
    269	fld.d	$f30, \tmp, THREAD_FPR30 - THREAD_FPR0
    270	fld.d	$f31, \tmp, THREAD_FPR31 - THREAD_FPR0
    271	.endm
    272
    273.macro not dst src
    274	nor	\dst, \src, zero
    275.endm
    276
    277.macro bgt r0 r1 label
    278	blt	\r1, \r0, \label
    279.endm
    280
    281.macro bltz r0 label
    282	blt	\r0, zero, \label
    283.endm
    284
    285.macro bgez r0 label
    286	bge	\r0, zero, \label
    287.endm
    288
    289#endif /* _ASM_ASMMACRO_H */