]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RISC-V-Qemu-sifive_e-FreedomStudio/freedom-e-sdk/env/entry.S
Recreate the RISC-V-Qemu demo using Vanilla Eclipse in place of Freedom Studio as...
[freertos] / FreeRTOS / Demo / RISC-V-Qemu-sifive_e-FreedomStudio / freedom-e-sdk / env / entry.S
1 // See LICENSE for license details\r
2 \r
3 #ifndef ENTRY_S\r
4 #define ENTRY_S\r
5 \r
6 #include "encoding.h"\r
7 #include "sifive/bits.h"\r
8 \r
9   .section      .text.entry     \r
10   .align 2\r
11   .weak trap_entry\r
12   .global trap_entry\r
13 trap_entry:\r
14   addi sp, sp, -32*REGBYTES\r
15 \r
16   STORE x1, 1*REGBYTES(sp)\r
17   STORE x2, 2*REGBYTES(sp)\r
18   STORE x3, 3*REGBYTES(sp)\r
19   STORE x4, 4*REGBYTES(sp)\r
20   STORE x5, 5*REGBYTES(sp)\r
21   STORE x6, 6*REGBYTES(sp)\r
22   STORE x7, 7*REGBYTES(sp)\r
23   STORE x8, 8*REGBYTES(sp)\r
24   STORE x9, 9*REGBYTES(sp)\r
25   STORE x10, 10*REGBYTES(sp)\r
26   STORE x11, 11*REGBYTES(sp)\r
27   STORE x12, 12*REGBYTES(sp)\r
28   STORE x13, 13*REGBYTES(sp)\r
29   STORE x14, 14*REGBYTES(sp)\r
30   STORE x15, 15*REGBYTES(sp)\r
31   STORE x16, 16*REGBYTES(sp)\r
32   STORE x17, 17*REGBYTES(sp)\r
33   STORE x18, 18*REGBYTES(sp)\r
34   STORE x19, 19*REGBYTES(sp)\r
35   STORE x20, 20*REGBYTES(sp)\r
36   STORE x21, 21*REGBYTES(sp)\r
37   STORE x22, 22*REGBYTES(sp)\r
38   STORE x23, 23*REGBYTES(sp)\r
39   STORE x24, 24*REGBYTES(sp)\r
40   STORE x25, 25*REGBYTES(sp)\r
41   STORE x26, 26*REGBYTES(sp)\r
42   STORE x27, 27*REGBYTES(sp)\r
43   STORE x28, 28*REGBYTES(sp)\r
44   STORE x29, 29*REGBYTES(sp)\r
45   STORE x30, 30*REGBYTES(sp)\r
46   STORE x31, 31*REGBYTES(sp)\r
47 \r
48   csrr a0, mcause\r
49   csrr a1, mepc\r
50   mv a2, sp\r
51   call handle_trap\r
52   csrw mepc, a0\r
53 \r
54   # Remain in M-mode after mret\r
55   li t0, MSTATUS_MPP\r
56   csrs mstatus, t0\r
57 \r
58   LOAD x1, 1*REGBYTES(sp)\r
59   LOAD x2, 2*REGBYTES(sp)\r
60   LOAD x3, 3*REGBYTES(sp)\r
61   LOAD x4, 4*REGBYTES(sp)\r
62   LOAD x5, 5*REGBYTES(sp)\r
63   LOAD x6, 6*REGBYTES(sp)\r
64   LOAD x7, 7*REGBYTES(sp)\r
65   LOAD x8, 8*REGBYTES(sp)\r
66   LOAD x9, 9*REGBYTES(sp)\r
67   LOAD x10, 10*REGBYTES(sp)\r
68   LOAD x11, 11*REGBYTES(sp)\r
69   LOAD x12, 12*REGBYTES(sp)\r
70   LOAD x13, 13*REGBYTES(sp)\r
71   LOAD x14, 14*REGBYTES(sp)\r
72   LOAD x15, 15*REGBYTES(sp)\r
73   LOAD x16, 16*REGBYTES(sp)\r
74   LOAD x17, 17*REGBYTES(sp)\r
75   LOAD x18, 18*REGBYTES(sp)\r
76   LOAD x19, 19*REGBYTES(sp)\r
77   LOAD x20, 20*REGBYTES(sp)\r
78   LOAD x21, 21*REGBYTES(sp)\r
79   LOAD x22, 22*REGBYTES(sp)\r
80   LOAD x23, 23*REGBYTES(sp)\r
81   LOAD x24, 24*REGBYTES(sp)\r
82   LOAD x25, 25*REGBYTES(sp)\r
83   LOAD x26, 26*REGBYTES(sp)\r
84   LOAD x27, 27*REGBYTES(sp)\r
85   LOAD x28, 28*REGBYTES(sp)\r
86   LOAD x29, 29*REGBYTES(sp)\r
87   LOAD x30, 30*REGBYTES(sp)\r
88   LOAD x31, 31*REGBYTES(sp)\r
89 \r
90   addi sp, sp, 32*REGBYTES\r
91   mret\r
92 \r
93 .weak handle_trap\r
94 handle_trap:\r
95 1:\r
96   j 1b\r
97         \r
98 #endif\r