2 * asmmacro.h: Assembler macros to make things easier to read.
4 * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com)
5 * Copyright (C) 1998 Ralf Baechle
7 #ifndef _ASM_ASMMACRO_H
8 #define _ASM_ASMMACRO_H
10 #include <linux/config.h>
11 #include <asm/offset.h>
14 #define FPU_ENABLE_HAZARD \
23 #define FPU_ENABLE_HAZARD
26 #define FPU_SAVE_DOUBLE(thread, tmp) \
28 sdc1 $f0, (THREAD_FPU + 0x000)(thread); \
29 sdc1 $f2, (THREAD_FPU + 0x010)(thread); \
30 sdc1 $f4, (THREAD_FPU + 0x020)(thread); \
31 sdc1 $f6, (THREAD_FPU + 0x030)(thread); \
32 sdc1 $f8, (THREAD_FPU + 0x040)(thread); \
33 sdc1 $f10, (THREAD_FPU + 0x050)(thread); \
34 sdc1 $f12, (THREAD_FPU + 0x060)(thread); \
35 sdc1 $f14, (THREAD_FPU + 0x070)(thread); \
36 sdc1 $f16, (THREAD_FPU + 0x080)(thread); \
37 sdc1 $f18, (THREAD_FPU + 0x090)(thread); \
38 sdc1 $f20, (THREAD_FPU + 0x0a0)(thread); \
39 sdc1 $f22, (THREAD_FPU + 0x0b0)(thread); \
40 sdc1 $f24, (THREAD_FPU + 0x0c0)(thread); \
41 sdc1 $f26, (THREAD_FPU + 0x0d0)(thread); \
42 sdc1 $f28, (THREAD_FPU + 0x0e0)(thread); \
43 sdc1 $f30, (THREAD_FPU + 0x0f0)(thread); \
44 sw tmp, (THREAD_FPU + 0x100)(thread)
46 #if defined (__MIPSEL__)
47 #define FPU_SAVE_SINGLE(thread,tmp) \
49 swc1 $f0, (THREAD_FPU + 0x000)(thread); \
50 swc1 $f1, (THREAD_FPU + 0x004)(thread); \
51 swc1 $f2, (THREAD_FPU + 0x010)(thread); \
52 swc1 $f3, (THREAD_FPU + 0x014)(thread); \
53 swc1 $f4, (THREAD_FPU + 0x020)(thread); \
54 swc1 $f5, (THREAD_FPU + 0x024)(thread); \
55 swc1 $f6, (THREAD_FPU + 0x030)(thread); \
56 swc1 $f7, (THREAD_FPU + 0x034)(thread); \
57 swc1 $f8, (THREAD_FPU + 0x040)(thread); \
58 swc1 $f9, (THREAD_FPU + 0x044)(thread); \
59 swc1 $f10, (THREAD_FPU + 0x050)(thread); \
60 swc1 $f11, (THREAD_FPU + 0x054)(thread); \
61 swc1 $f12, (THREAD_FPU + 0x060)(thread); \
62 swc1 $f13, (THREAD_FPU + 0x064)(thread); \
63 swc1 $f14, (THREAD_FPU + 0x070)(thread); \
64 swc1 $f15, (THREAD_FPU + 0x074)(thread); \
65 swc1 $f16, (THREAD_FPU + 0x080)(thread); \
66 swc1 $f17, (THREAD_FPU + 0x084)(thread); \
67 swc1 $f18, (THREAD_FPU + 0x090)(thread); \
68 swc1 $f19, (THREAD_FPU + 0x094)(thread); \
69 swc1 $f20, (THREAD_FPU + 0x0a0)(thread); \
70 swc1 $f21, (THREAD_FPU + 0x0a4)(thread); \
71 swc1 $f22, (THREAD_FPU + 0x0b0)(thread); \
72 swc1 $f23, (THREAD_FPU + 0x0b4)(thread); \
73 swc1 $f24, (THREAD_FPU + 0x0c0)(thread); \
74 swc1 $f25, (THREAD_FPU + 0x0c4)(thread); \
75 swc1 $f26, (THREAD_FPU + 0x0d0)(thread); \
76 swc1 $f27, (THREAD_FPU + 0x0d4)(thread); \
77 swc1 $f28, (THREAD_FPU + 0x0e0)(thread); \
78 swc1 $f29, (THREAD_FPU + 0x0e4)(thread); \
79 swc1 $f30, (THREAD_FPU + 0x0f0)(thread); \
80 swc1 $f31, (THREAD_FPU + 0x0f4)(thread); \
81 sw tmp, (THREAD_FPU + 0x100)(thread)
82 #elif defined (__MIPSEB__)
83 #define FPU_SAVE_SINGLE(thread,tmp) \
85 swc1 $f0, (THREAD_FPU + 0x004)(thread); \
86 swc1 $f1, (THREAD_FPU + 0x000)(thread); \
87 swc1 $f2, (THREAD_FPU + 0x014)(thread); \
88 swc1 $f3, (THREAD_FPU + 0x010)(thread); \
89 swc1 $f4, (THREAD_FPU + 0x024)(thread); \
90 swc1 $f5, (THREAD_FPU + 0x020)(thread); \
91 swc1 $f6, (THREAD_FPU + 0x034)(thread); \
92 swc1 $f7, (THREAD_FPU + 0x030)(thread); \
93 swc1 $f8, (THREAD_FPU + 0x044)(thread); \
94 swc1 $f9, (THREAD_FPU + 0x040)(thread); \
95 swc1 $f10, (THREAD_FPU + 0x054)(thread); \
96 swc1 $f11, (THREAD_FPU + 0x050)(thread); \
97 swc1 $f12, (THREAD_FPU + 0x064)(thread); \
98 swc1 $f13, (THREAD_FPU + 0x060)(thread); \
99 swc1 $f14, (THREAD_FPU + 0x074)(thread); \
100 swc1 $f15, (THREAD_FPU + 0x070)(thread); \
101 swc1 $f16, (THREAD_FPU + 0x084)(thread); \
102 swc1 $f17, (THREAD_FPU + 0x080)(thread); \
103 swc1 $f18, (THREAD_FPU + 0x094)(thread); \
104 swc1 $f19, (THREAD_FPU + 0x090)(thread); \
105 swc1 $f20, (THREAD_FPU + 0x0a4)(thread); \
106 swc1 $f21, (THREAD_FPU + 0x0a0)(thread); \
107 swc1 $f22, (THREAD_FPU + 0x0b4)(thread); \
108 swc1 $f23, (THREAD_FPU + 0x0b0)(thread); \
109 swc1 $f24, (THREAD_FPU + 0x0c4)(thread); \
110 swc1 $f25, (THREAD_FPU + 0x0c0)(thread); \
111 swc1 $f26, (THREAD_FPU + 0x0d4)(thread); \
112 swc1 $f27, (THREAD_FPU + 0x0d0)(thread); \
113 swc1 $f28, (THREAD_FPU + 0x0e4)(thread); \
114 swc1 $f29, (THREAD_FPU + 0x0e0)(thread); \
115 swc1 $f30, (THREAD_FPU + 0x0f4)(thread); \
116 swc1 $f31, (THREAD_FPU + 0x0f0)(thread); \
117 sw tmp, (THREAD_FPU + 0x100)(thread)
119 #error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???"
122 #define FPU_RESTORE_DOUBLE(thread, tmp) \
123 lw tmp, (THREAD_FPU + 0x100)(thread); \
124 ldc1 $f0, (THREAD_FPU + 0x000)(thread); \
125 ldc1 $f2, (THREAD_FPU + 0x010)(thread); \
126 ldc1 $f4, (THREAD_FPU + 0x020)(thread); \
127 ldc1 $f6, (THREAD_FPU + 0x030)(thread); \
128 ldc1 $f8, (THREAD_FPU + 0x040)(thread); \
129 ldc1 $f10, (THREAD_FPU + 0x050)(thread); \
130 ldc1 $f12, (THREAD_FPU + 0x060)(thread); \
131 ldc1 $f14, (THREAD_FPU + 0x070)(thread); \
132 ldc1 $f16, (THREAD_FPU + 0x080)(thread); \
133 ldc1 $f18, (THREAD_FPU + 0x090)(thread); \
134 ldc1 $f20, (THREAD_FPU + 0x0a0)(thread); \
135 ldc1 $f22, (THREAD_FPU + 0x0b0)(thread); \
136 ldc1 $f24, (THREAD_FPU + 0x0c0)(thread); \
137 ldc1 $f26, (THREAD_FPU + 0x0d0)(thread); \
138 ldc1 $f28, (THREAD_FPU + 0x0e0)(thread); \
139 ldc1 $f30, (THREAD_FPU + 0x0f0)(thread); \
142 #if defined (__MIPSEL__)
143 #define FPU_RESTORE_SINGLE(thread,tmp) \
144 lw tmp, (THREAD_FPU + 0x100)(thread); \
145 lwc1 $f0, (THREAD_FPU + 0x000)(thread); \
146 lwc1 $f1, (THREAD_FPU + 0x004)(thread); \
147 lwc1 $f2, (THREAD_FPU + 0x010)(thread); \
148 lwc1 $f3, (THREAD_FPU + 0x014)(thread); \
149 lwc1 $f4, (THREAD_FPU + 0x020)(thread); \
150 lwc1 $f5, (THREAD_FPU + 0x024)(thread); \
151 lwc1 $f6, (THREAD_FPU + 0x030)(thread); \
152 lwc1 $f7, (THREAD_FPU + 0x034)(thread); \
153 lwc1 $f8, (THREAD_FPU + 0x040)(thread); \
154 lwc1 $f9, (THREAD_FPU + 0x044)(thread); \
155 lwc1 $f10, (THREAD_FPU + 0x050)(thread); \
156 lwc1 $f11, (THREAD_FPU + 0x054)(thread); \
157 lwc1 $f12, (THREAD_FPU + 0x060)(thread); \
158 lwc1 $f13, (THREAD_FPU + 0x064)(thread); \
159 lwc1 $f14, (THREAD_FPU + 0x070)(thread); \
160 lwc1 $f15, (THREAD_FPU + 0x074)(thread); \
161 lwc1 $f16, (THREAD_FPU + 0x080)(thread); \
162 lwc1 $f17, (THREAD_FPU + 0x084)(thread); \
163 lwc1 $f18, (THREAD_FPU + 0x090)(thread); \
164 lwc1 $f19, (THREAD_FPU + 0x094)(thread); \
165 lwc1 $f20, (THREAD_FPU + 0x0a0)(thread); \
166 lwc1 $f21, (THREAD_FPU + 0x0a4)(thread); \
167 lwc1 $f22, (THREAD_FPU + 0x0b0)(thread); \
168 lwc1 $f23, (THREAD_FPU + 0x0b4)(thread); \
169 lwc1 $f24, (THREAD_FPU + 0x0c0)(thread); \
170 lwc1 $f25, (THREAD_FPU + 0x0c4)(thread); \
171 lwc1 $f26, (THREAD_FPU + 0x0d0)(thread); \
172 lwc1 $f27, (THREAD_FPU + 0x0d4)(thread); \
173 lwc1 $f28, (THREAD_FPU + 0x0e0)(thread); \
174 lwc1 $f29, (THREAD_FPU + 0x0e4)(thread); \
175 lwc1 $f30, (THREAD_FPU + 0x0f0)(thread); \
176 lwc1 $f31, (THREAD_FPU + 0x0f4)(thread); \
178 #elif defined (__MIPSEB__)
179 #define FPU_RESTORE_SINGLE(thread,tmp) \
180 lw tmp, (THREAD_FPU + 0x100)(thread); \
181 lwc1 $f0, (THREAD_FPU + 0x004)(thread); \
182 lwc1 $f1, (THREAD_FPU + 0x000)(thread); \
183 lwc1 $f2, (THREAD_FPU + 0x014)(thread); \
184 lwc1 $f3, (THREAD_FPU + 0x010)(thread); \
185 lwc1 $f4, (THREAD_FPU + 0x024)(thread); \
186 lwc1 $f5, (THREAD_FPU + 0x020)(thread); \
187 lwc1 $f6, (THREAD_FPU + 0x034)(thread); \
188 lwc1 $f7, (THREAD_FPU + 0x030)(thread); \
189 lwc1 $f8, (THREAD_FPU + 0x044)(thread); \
190 lwc1 $f9, (THREAD_FPU + 0x040)(thread); \
191 lwc1 $f10, (THREAD_FPU + 0x054)(thread); \
192 lwc1 $f11, (THREAD_FPU + 0x050)(thread); \
193 lwc1 $f12, (THREAD_FPU + 0x064)(thread); \
194 lwc1 $f13, (THREAD_FPU + 0x060)(thread); \
195 lwc1 $f14, (THREAD_FPU + 0x074)(thread); \
196 lwc1 $f15, (THREAD_FPU + 0x070)(thread); \
197 lwc1 $f16, (THREAD_FPU + 0x084)(thread); \
198 lwc1 $f17, (THREAD_FPU + 0x080)(thread); \
199 lwc1 $f18, (THREAD_FPU + 0x094)(thread); \
200 lwc1 $f19, (THREAD_FPU + 0x090)(thread); \
201 lwc1 $f20, (THREAD_FPU + 0x0a4)(thread); \
202 lwc1 $f21, (THREAD_FPU + 0x0a0)(thread); \
203 lwc1 $f22, (THREAD_FPU + 0x0b4)(thread); \
204 lwc1 $f23, (THREAD_FPU + 0x0b0)(thread); \
205 lwc1 $f24, (THREAD_FPU + 0x0c4)(thread); \
206 lwc1 $f25, (THREAD_FPU + 0x0c0)(thread); \
207 lwc1 $f26, (THREAD_FPU + 0x0d4)(thread); \
208 lwc1 $f27, (THREAD_FPU + 0x0d0)(thread); \
209 lwc1 $f28, (THREAD_FPU + 0x0e4)(thread); \
210 lwc1 $f29, (THREAD_FPU + 0x0e0)(thread); \
211 lwc1 $f30, (THREAD_FPU + 0x0f4)(thread); \
212 lwc1 $f31, (THREAD_FPU + 0x0f0)(thread); \
215 #error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???"
218 #define CPU_SAVE_NONSCRATCH(thread) \
219 sw s0, THREAD_REG16(thread); \
220 sw s1, THREAD_REG17(thread); \
221 sw s2, THREAD_REG18(thread); \
222 sw s3, THREAD_REG19(thread); \
223 sw s4, THREAD_REG20(thread); \
224 sw s5, THREAD_REG21(thread); \
225 sw s6, THREAD_REG22(thread); \
226 sw s7, THREAD_REG23(thread); \
227 sw sp, THREAD_REG29(thread); \
228 sw fp, THREAD_REG30(thread)
230 #define CPU_RESTORE_NONSCRATCH(thread) \
231 lw s0, THREAD_REG16(thread); \
232 lw s1, THREAD_REG17(thread); \
233 lw s2, THREAD_REG18(thread); \
234 lw s3, THREAD_REG19(thread); \
235 lw s4, THREAD_REG20(thread); \
236 lw s5, THREAD_REG21(thread); \
237 lw s6, THREAD_REG22(thread); \
238 lw s7, THREAD_REG23(thread); \
239 lw sp, THREAD_REG29(thread); \
240 lw fp, THREAD_REG30(thread); \
241 lw ra, THREAD_REG31(thread)
243 #endif /* _ASM_ASMMACRO_H */