summaryrefslogtreecommitdiff
path: root/kernel/strap.s
blob: 079c5796de360ceccba17f8ad5b944c790cc07b3 (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
.option norvc
.section .text

.global ktrap

.set FRAME_SIZE, 4 * 31

.global strap
strap:
    addi        sp, sp, -FRAME_SIZE

    sw          x1,  (0  * 4)(sp)
    sw          x2,  (1  * 4)(sp)
    sw          x3,  (2  * 4)(sp)
    sw          x4,  (3  * 4)(sp)
    sw          x5,  (4  * 4)(sp)
    sw          x6,  (5  * 4)(sp)
    sw          x7,  (6  * 4)(sp)
    sw          x8,  (7  * 4)(sp)
    sw          x9,  (8  * 4)(sp)
    sw          x10, (9  * 4)(sp)
    sw          x11, (10 * 4)(sp)
    sw          x12, (11 * 4)(sp)
    sw          x13, (12 * 4)(sp)
    sw          x14, (13 * 4)(sp)
    sw          x15, (14 * 4)(sp)
    sw          x16, (15 * 4)(sp)
    sw          x17, (16 * 4)(sp)
    sw          x18, (17 * 4)(sp)
    sw          x19, (18 * 4)(sp)
    sw          x20, (19 * 4)(sp)
    sw          x21, (20 * 4)(sp)
    sw          x22, (21 * 4)(sp)
    sw          x23, (22 * 4)(sp)
    sw          x24, (23 * 4)(sp)
    sw          x25, (24 * 4)(sp)
    sw          x26, (25 * 4)(sp)
    sw          x27, (26 * 4)(sp)
    sw          x28, (27 * 4)(sp)
    sw          x29, (28 * 4)(sp)
    sw          x30, (29 * 4)(sp)
    sw          x31, (30 * 4)(sp)
        
    csrr        a0, scause
    call        ktrap

    lw          x1,  (0  * 4)(sp)
    lw          x2,  (1  * 4)(sp)
    lw          x3,  (2  * 4)(sp)
    lw          x4,  (3  * 4)(sp)
    lw          x5,  (4  * 4)(sp)
    lw          x6,  (5  * 4)(sp)
    lw          x7,  (6  * 4)(sp)
    lw          x8,  (7  * 4)(sp)
    lw          x9,  (8  * 4)(sp)
    lw          x10, (9  * 4)(sp)
    lw          x11, (10 * 4)(sp)
    lw          x12, (11 * 4)(sp)
    lw          x13, (12 * 4)(sp)
    lw          x14, (13 * 4)(sp)
    lw          x15, (14 * 4)(sp)
    lw          x16, (15 * 4)(sp)
    lw          x17, (16 * 4)(sp)
    lw          x18, (17 * 4)(sp)
    lw          x19, (18 * 4)(sp)
    lw          x20, (19 * 4)(sp)
    lw          x21, (20 * 4)(sp)
    lw          x22, (21 * 4)(sp)
    lw          x23, (22 * 4)(sp)
    lw          x24, (23 * 4)(sp)
    lw          x25, (24 * 4)(sp)
    lw          x26, (25 * 4)(sp)
    lw          x27, (26 * 4)(sp)
    lw          x28, (27 * 4)(sp)
    lw          x29, (28 * 4)(sp)
    lw          x30, (29 * 4)(sp)
    lw          x31, (30 * 4)(sp)
    
    addi        sp, sp, FRAME_SIZE
    
    sret