xref: /haiku/headers/private/kernel/arch/riscv64/arch_traps.h (revision 268f99dd7dc4bd7474a8bd2742d3f1ec1de6752a)
1f0e1bca0SX512 /*
2f0e1bca0SX512  * Copyright 2021, Haiku, Inc.
3f0e1bca0SX512  * Distributed under the terms of the MIT License.
4f0e1bca0SX512  */
5f0e1bca0SX512 
6f0e1bca0SX512 
7f0e1bca0SX512 #ifndef _ARCH_TRAPS_H_
8f0e1bca0SX512 #define _ARCH_TRAPS_H_
9f0e1bca0SX512 
10f0e1bca0SX512 
11f0e1bca0SX512 # NOTE: this macro don't save SP, it should be saved manually
12*8ca0f03dSX512 .macro PushTrapFrame extSize
13*8ca0f03dSX512 	addi sp, sp, -(\extSize + 256)
14f0e1bca0SX512 
15*8ca0f03dSX512 	sd ra,  \extSize +  0*8(sp)
16*8ca0f03dSX512 	sd t6,  \extSize +  1*8(sp)
17*8ca0f03dSX512 #	sd sp,  \extSize +  2*8(sp) # sp
18*8ca0f03dSX512 	sd gp,  \extSize +  3*8(sp)
19*8ca0f03dSX512 	sd tp,  \extSize +  4*8(sp)
20*8ca0f03dSX512 	sd t0,  \extSize +  5*8(sp)
21*8ca0f03dSX512 	sd t1,  \extSize +  6*8(sp)
22*8ca0f03dSX512 	sd t2,  \extSize +  7*8(sp)
23*8ca0f03dSX512 	sd t5,  \extSize +  8*8(sp)
24*8ca0f03dSX512 	sd s1,  \extSize +  9*8(sp)
25*8ca0f03dSX512 	sd a0,  \extSize + 10*8(sp)
26*8ca0f03dSX512 	sd a1,  \extSize + 11*8(sp)
27*8ca0f03dSX512 	sd a2,  \extSize + 12*8(sp)
28*8ca0f03dSX512 	sd a3,  \extSize + 13*8(sp)
29*8ca0f03dSX512 	sd a4,  \extSize + 14*8(sp)
30*8ca0f03dSX512 	sd a5,  \extSize + 15*8(sp)
31*8ca0f03dSX512 	sd a6,  \extSize + 16*8(sp)
32*8ca0f03dSX512 	sd a7,  \extSize + 17*8(sp)
33*8ca0f03dSX512 	sd s2,  \extSize + 18*8(sp)
34*8ca0f03dSX512 	sd s3,  \extSize + 19*8(sp)
35*8ca0f03dSX512 	sd s4,  \extSize + 20*8(sp)
36*8ca0f03dSX512 	sd s5,  \extSize + 21*8(sp)
37*8ca0f03dSX512 	sd s6,  \extSize + 22*8(sp)
38*8ca0f03dSX512 	sd s7,  \extSize + 23*8(sp)
39*8ca0f03dSX512 	sd s8,  \extSize + 24*8(sp)
40*8ca0f03dSX512 	sd s9,  \extSize + 25*8(sp)
41*8ca0f03dSX512 	sd s10, \extSize + 26*8(sp)
42*8ca0f03dSX512 	sd s11, \extSize + 27*8(sp)
43*8ca0f03dSX512 	sd t3,  \extSize + 28*8(sp)
44*8ca0f03dSX512 	sd t4,  \extSize + 29*8(sp)
45*8ca0f03dSX512 	sd fp,  \extSize + 30*8(sp)
46f0e1bca0SX512 
47*8ca0f03dSX512 	addi fp, sp, \extSize + 256
48f0e1bca0SX512 .endm
49f0e1bca0SX512 
50f0e1bca0SX512 
51*8ca0f03dSX512 .macro PopTrapFrame extSize
52*8ca0f03dSX512 	ld ra,  \extSize +  0*8(sp)
53*8ca0f03dSX512 	ld t6,  \extSize +  1*8(sp)
54*8ca0f03dSX512 #	ld sp,  \extSize +  2*8(sp) restore later
55*8ca0f03dSX512 	ld gp,  \extSize +  3*8(sp)
56*8ca0f03dSX512 #	ld tp,  \extSize +  4*8(sp)
57*8ca0f03dSX512 	ld t0,  \extSize +  5*8(sp)
58*8ca0f03dSX512 	ld t1,  \extSize +  6*8(sp)
59*8ca0f03dSX512 	ld t2,  \extSize +  7*8(sp)
60*8ca0f03dSX512 	ld t5,  \extSize +  8*8(sp)
61*8ca0f03dSX512 	ld s1,  \extSize +  9*8(sp)
62*8ca0f03dSX512 	ld a0,  \extSize + 10*8(sp)
63*8ca0f03dSX512 	ld a1,  \extSize + 11*8(sp)
64*8ca0f03dSX512 	ld a2,  \extSize + 12*8(sp)
65*8ca0f03dSX512 	ld a3,  \extSize + 13*8(sp)
66*8ca0f03dSX512 	ld a4,  \extSize + 14*8(sp)
67*8ca0f03dSX512 	ld a5,  \extSize + 15*8(sp)
68*8ca0f03dSX512 	ld a6,  \extSize + 16*8(sp)
69*8ca0f03dSX512 	ld a7,  \extSize + 17*8(sp)
70*8ca0f03dSX512 	ld s2,  \extSize + 18*8(sp)
71*8ca0f03dSX512 	ld s3,  \extSize + 19*8(sp)
72*8ca0f03dSX512 	ld s4,  \extSize + 20*8(sp)
73*8ca0f03dSX512 	ld s5,  \extSize + 21*8(sp)
74*8ca0f03dSX512 	ld s6,  \extSize + 22*8(sp)
75*8ca0f03dSX512 	ld s7,  \extSize + 23*8(sp)
76*8ca0f03dSX512 	ld s8,  \extSize + 24*8(sp)
77*8ca0f03dSX512 	ld s9,  \extSize + 25*8(sp)
78*8ca0f03dSX512 	ld s10, \extSize + 26*8(sp)
79*8ca0f03dSX512 	ld s11, \extSize + 27*8(sp)
80*8ca0f03dSX512 	ld t3,  \extSize + 28*8(sp)
81*8ca0f03dSX512 	ld t4,  \extSize + 29*8(sp)
82*8ca0f03dSX512 	ld fp,  \extSize + 30*8(sp)
83f0e1bca0SX512 
84*8ca0f03dSX512 	ld sp,  \extSize +  2*8(sp)
85f0e1bca0SX512 .endm
86f0e1bca0SX512 
87f0e1bca0SX512 
88f0e1bca0SX512 #endif	// _ARCH_TRAPS_H_
89