Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / score / include / asm / asmmacro.h
1 #ifndef _ASM_SCORE_ASMMACRO_H
2 #define _ASM_SCORE_ASMMACRO_H
3
4 #include <asm/asm-offsets.h>
5
6 #ifdef __ASSEMBLY__
7
8 .macro  SAVE_ALL
9         mfcr    r30, cr0
10         mv      r31, r0
11         nop
12         /* if UMs == 1, change stack. */
13         slli.c  r30, r30, 28
14         bpl     1f
15         la      r31, kernelsp
16         lw      r31, [r31]
17 1:
18         mv      r30, r0
19         addri   r0, r31, -PT_SIZE
20
21         sw      r30, [r0, PT_R0]
22         .set    r1
23         sw      r1, [r0, PT_R1]
24         .set    nor1
25         sw      r2, [r0, PT_R2]
26         sw      r3, [r0, PT_R3]
27         sw      r4, [r0, PT_R4]
28         sw      r5, [r0, PT_R5]
29         sw      r6, [r0, PT_R6]
30         sw      r7, [r0, PT_R7]
31
32         sw      r8, [r0, PT_R8]
33         sw      r9, [r0, PT_R9]
34         sw      r10, [r0, PT_R10]
35         sw      r11, [r0, PT_R11]
36         sw      r12, [r0, PT_R12]
37         sw      r13, [r0, PT_R13]
38         sw      r14, [r0, PT_R14]
39         sw      r15, [r0, PT_R15]
40
41         sw      r16, [r0, PT_R16]
42         sw      r17, [r0, PT_R17]
43         sw      r18, [r0, PT_R18]
44         sw      r19, [r0, PT_R19]
45         sw      r20, [r0, PT_R20]
46         sw      r21, [r0, PT_R21]
47         sw      r22, [r0, PT_R22]
48         sw      r23, [r0, PT_R23]
49
50         sw      r24, [r0, PT_R24]
51         sw      r25, [r0, PT_R25]
52         sw      r25, [r0, PT_R25]
53         sw      r26, [r0, PT_R26]
54         sw      r27, [r0, PT_R27]
55
56         sw      r28, [r0, PT_R28]
57         sw      r29, [r0, PT_R29]
58         orri    r28, r0, 0x1fff
59         li      r31, 0x00001fff
60         xor     r28, r28, r31
61
62         mfcehl  r30, r31
63         sw      r30, [r0, PT_CEH]
64         sw      r31, [r0, PT_CEL]
65
66         mfcr    r31, cr0
67         sw      r31, [r0, PT_PSR]
68
69         mfcr    r31, cr1
70         sw      r31, [r0, PT_CONDITION]
71
72         mfcr    r31, cr2
73         sw      r31, [r0, PT_ECR]
74         
75         mfcr    r31, cr5
76         srli    r31, r31, 1
77         slli    r31, r31, 1
78         sw      r31, [r0, PT_EPC]
79 .endm
80
81 .macro  RESTORE_ALL_AND_RET
82         mfcr    r30, cr0
83         srli    r30, r30, 1
84         slli    r30, r30, 1
85         mtcr    r30, cr0
86         nop
87         nop
88         nop
89         nop
90         nop
91
92         .set    r1
93         ldis    r1, 0x00ff
94         and     r30, r30, r1
95         not     r1, r1
96         lw      r31, [r0, PT_PSR]
97         and     r31, r31, r1
98         .set    nor1
99         or      r31, r31, r30
100         mtcr    r31, cr0
101         nop
102         nop
103         nop
104         nop
105         nop
106
107         lw      r30, [r0, PT_CONDITION]
108         mtcr    r30, cr1
109         nop
110         nop
111         nop
112         nop
113         nop
114
115         lw      r30, [r0, PT_CEH]
116         lw      r31, [r0, PT_CEL]
117         mtcehl  r30, r31
118
119         .set    r1
120         lw      r1, [r0, PT_R1]
121         .set    nor1
122         lw      r2, [r0, PT_R2]
123         lw      r3, [r0, PT_R3]
124         lw      r4, [r0, PT_R4]
125         lw      r5, [r0, PT_R5]
126         lw      r6, [r0, PT_R6]
127         lw      r7, [r0, PT_R7]
128
129         lw      r8, [r0, PT_R8]
130         lw      r9, [r0, PT_R9]
131         lw      r10, [r0, PT_R10]
132         lw      r11, [r0, PT_R11]
133         lw      r12, [r0, PT_R12]
134         lw      r13, [r0, PT_R13]
135         lw      r14, [r0, PT_R14]
136         lw      r15, [r0, PT_R15]
137
138         lw      r16, [r0, PT_R16]
139         lw      r17, [r0, PT_R17]
140         lw      r18, [r0, PT_R18]
141         lw      r19, [r0, PT_R19]
142         lw      r20, [r0, PT_R20]
143         lw      r21, [r0, PT_R21]
144         lw      r22, [r0, PT_R22]
145         lw      r23, [r0, PT_R23]
146
147         lw      r24, [r0, PT_R24]
148         lw      r25, [r0, PT_R25]
149         lw      r26, [r0, PT_R26]
150         lw      r27, [r0, PT_R27]
151         lw      r28, [r0, PT_R28]
152         lw      r29, [r0, PT_R29]
153
154         lw      r30, [r0, PT_EPC]
155         lw      r0, [r0, PT_R0]
156         mtcr    r30, cr5
157         rte
158 .endm
159
160 #endif /* __ASSEMBLY__ */
161 #endif /* _ASM_SCORE_ASMMACRO_H */