blob: 3ce586e90e06f519a7f4a610588f1887ae4f6673 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#ifndef __CORE_V5_H__
#define __CORE_V5_H__
#define MSTATUS_UIE 0x00000001
#define MSTATUS_SIE 0x00000002
#define MSTATUS_HIE 0x00000004
#define MSTATUS_MIE 0x00000008
#define MSTATUS_UPIE 0x00000010
#define MSTATUS_SPIE 0x00000020
#define MSTATUS_HPIE 0x00000040
#define MSTATUS_MPIE 0x00000080
#define MSTATUS_SPP 0x00000100
#define MSTATUS_HPP 0x00000600
#define MSTATUS_MPP 0x00001800
#define MSTATUS_FS 0x00006000
#define MSTATUS_XS 0x00018000
#define MSTATUS_MPRV 0x00020000
#define MSTATUS_PUM 0x00040000
#define MSTATUS_MXR 0x00080000
#define MSTATUS_VM 0x1F000000
#define MSTATUS32_SD 0x80000000
#define MSTATUS64_SD 0x8000000000000000
#if __riscv_xlen == 64
#define MCAUSE_INT 0x8000000000000000UL
#define MCAUSE_CAUSE 0x7FFFFFFFFFFFFFFFUL
#else
#define MCAUSE_INT 0x80000000UL
#define MCAUSE_CAUSE 0x7FFFFFFFUL
#endif
#define IRQ_S_SOFT 1
#define IRQ_H_SOFT 2
#define IRQ_M_SOFT 3
#define IRQ_S_TIMER 5
#define IRQ_H_TIMER 6
#define IRQ_M_TIMER 7
#define IRQ_S_EXT 9
#define IRQ_H_EXT 10
#define IRQ_M_EXT 11
#define IRQ_COP 12
#define IRQ_HOST 13
/* Machine mode MCAUSE */
#define TRAP_M_I_ACC_FAULT 1 /* Instruction access fault */
#define TRAP_M_L_ACC_FAULT 5 /* Data load access fault */
#define TRAP_M_S_ACC_FAULT 7 /* Data store access fault */
#define TRAP_U_ECALL 8
#define TRAP_S_ECALL 9
#define TRAP_H_ECALL 10
#define TRAP_M_ECALL 11
#define TRAP_M_I_PAGE_FAULT 12 /* Instruction page fault */
#define TRAP_M_L_PAGE_FAULT 13 /* Data load page fault */
#define TRAP_M_S_PAGE_FAULT 15 /* Data store page fault */
#define TRAP_M_STACKOVF 32
#define TRAP_M_STACKUDF 33
/* Supervisor mode SCAUSE */
#define TRAP_S_I_ACC_FAULT 1 /* Instruction access fault */
#define TRAP_S_L_ACC_FAULT 5 /* Data load access fault */
#define TRAP_S_S_ACC_FAULT 7 /* Data store access fault */
#define TRAP_S_I_PAGE_FAULT 12 /* Instruction page fault */
#define TRAP_S_L_PAGE_FAULT 13 /* Data load page fault */
#define TRAP_S_S_PAGE_FAULT 15 /* Data store page fault */
#define MIP_SSIP (1 << IRQ_S_SOFT)
#define MIP_HSIP (1 << IRQ_H_SOFT)
#define MIP_MSIP (1 << IRQ_M_SOFT)
#define MIP_STIP (1 << IRQ_S_TIMER)
#define MIP_HTIP (1 << IRQ_H_TIMER)
#define MIP_MTIP (1 << IRQ_M_TIMER)
#define MIP_SEIP (1 << IRQ_S_EXT)
#define MIP_HEIP (1 << IRQ_H_EXT)
#define MIP_MEIP (1 << IRQ_M_EXT)
/* MILMB and MDLMB */
#define MILMB_IEN (0x1UL)
#define MDLMB_DEN (0x1UL)
#if __riscv_xlen == 64
# define SLL32 sllw
# define STORE sd
# define LOAD ld
# define LWU lwu
# define LOG_REGBYTES 3
#else
# define SLL32 sll
# define STORE sw
# define LOAD lw
# define LWU lw
# define LOG_REGBYTES 2
#endif
#define REGBYTES (1 << LOG_REGBYTES)
#if __riscv_flen == 64
# define FPSTORE fsd
# define FPLOAD fld
# define LOG_FPREGBYTES 3
#else
# define FPSTORE fsw
# define FPLOAD flw
# define LOG_FPREGBYTES 2
#endif
#define FPREGBYTES (1 << LOG_FPREGBYTES)
#define STR(S) #S
#define XSTR(S) STR(S)
#define PUSH XSTR(STORE)
#define POP XSTR(LOAD)
#define REGSIZE XSTR(REGBYTES)
#define FPPUSH XSTR(FPSTORE)
#define FPPOP XSTR(FPLOAD)
#define FPREGSIZE XSTR(FPREGBYTES)
#ifndef __ASSEMBLER__
#define read_csr(reg) __nds__csrr(reg)
#define write_csr(reg, val) __nds__csrw(val, reg)
#define swap_csr(reg, val) __nds__csrrw(val, reg)
#define set_csr(reg, bit) __nds__csrrs(bit, reg)
#define clear_csr(reg, bit) __nds__csrrc(bit, reg)
#endif
#endif // __CORE_V5_H__
|