New test.
[mono.git] / mono / arch / mips / mips-codegen.h
1 #ifndef __MIPS_CODEGEN_H__
2 #define __MIPS_CODEGEN_H__
3 /*
4  * Copyright (c) 2004 Novell, Inc
5  * Author: Paolo Molaro (lupus@ximian.com)
6  *
7  */
8
9 /* registers */
10 enum {
11         mips_zero,
12         mips_at, /* assembler temp */
13         mips_v0, /* return values */
14         mips_v1,
15         mips_a0, /* 4 - func arguments */
16         mips_a1,
17         mips_a2,
18         mips_a3,
19         mips_t0, /* 8 temporaries */
20         mips_t1,
21         mips_t2,
22         mips_t3,
23         mips_t4,
24         mips_t5,
25         mips_t6,
26         mips_t7,
27         mips_s0, /* 16 calle saved */
28         mips_s1,
29         mips_s2,
30         mips_s3,
31         mips_s4,
32         mips_s5,
33         mips_s6,
34         mips_s7,
35         mips_t8, /* 24 temps */
36         mips_t9,
37         mips_k0, /* 26 kernel-reserved */
38         mips_k1,
39         mips_gp, /* 28 */
40         mips_sp, /* stack pointer */
41         mips_fp, /* frame pointer */
42         mips_ra /* return address */
43 };
44
45 /* we treat the register file as containing just doubles... */
46 enum {
47         mips_f0, /* return regs */
48         mips_f2,
49         mips_f4, /* temps */
50         mips_f6,
51         mips_f8,
52         mips_f10,
53         mips_f12, /* first arg */
54         mips_f14, /* second arg */
55         mips_f16, /* temps */
56         mips_f18,
57         mips_f20, /* callee saved */
58         mips_f22,
59         mips_f24,
60         mips_f26,
61         mips_f28,
62         mips_f30
63 };
64
65 #define mips_emit32(c,x) do { *((unsigned int *) c) = x; ((unsigned int *)c)++;} while (0)
66 #define mips_format_i(code,op,rs,rt,imm) mips_emit32 ((code), (((op)<<26)|((rs)<<21)|((rt)<<16)|(imm)))
67 #define mips_format_j(code,op,imm) mips_emit32 ((code), (((op)<<26)|(imm)))
68 #define mips_format_r(code,op,rs,rt,rd,sa,func) mips_emit32 ((code), (((op)<<26)|((rs)<<21)|((rt)<<16)|((rd)<<11)|((sa)<<6)|(func)))
69 #define mips_format_divmul(code,op,src1,src2,fun) mips_emit32 ((code), (((op)<<26)|((src1)<<21)|((src2)<<16)|(fun)))
70
71 /* prefetch hints */
72 enum {
73         MIPS_FOR_LOAD,
74         MIPS_FOR_STORE,
75         MIPS_FOR_LOAD_STREAMED = 4,
76         MIPS_FOR_STORE_STREAMED,
77         MIPS_FOR_LOAD_RETAINED,
78         MIPS_FOR_STORE_RETAINED
79 };
80
81 /* coprocessors */
82 enum {
83         MIPS_COP0,
84         MIPS_COP1,
85         MIPS_COP2,
86         MIPS_COP3
87 };
88
89 enum {
90         MIPS_FMT_SINGLE = 16,
91         MIPS_FMT_DOUBLE = 17,
92         MIPS_FMT_WORD = 20,
93         MIPS_FMT_LONG = 21,
94         MIPS_FMT3_SINGLE = 0,
95         MIPS_FMT3_DOUBLE = 1
96 };
97
98 /* fpu rounding mode */
99 enum {
100         MIPS_ROUND_TO_NEAREST,
101         MIPS_ROUND_TO_ZERO,
102         MIPS_ROUND_TO_POSINF,
103         MIPS_ROUND_TO_NEGINF,
104         MIPS_ROUND_MASK = 3
105 };
106
107 /* fpu enable/cause flags, cc */
108 enum {
109         MIPS_FPU_C_MASK = 1 << 23,
110         MIPS_INEXACT = 1,
111         MIPS_UNDERFLOW = 2,
112         MIPS_OVERFLOW = 4,
113         MIPS_DIVZERO = 8,
114         MIPS_INVALID = 16,
115         MIPS_NOTIMPL = 32,
116         MIPS_FPU_FLAGS_OFFSET = 2,
117         MIPS_FPU_ENABLES_OFFSET = 7,
118         MIPS_FPU_CAUSES_OFFSET = 12
119 };
120
121 /* fpu condition values */
122 enum {
123         MIPS_FPU_FALSE, /* TRUE */
124         MIPS_FPU_UNORDERED, /* ORDERED */
125         MIPS_FPU_EQ, /* NOT_EQUAL */
126         MIPS_FPU_UNORD_EQ, /* ORDERED or NEQ */
127         MIPS_FPU_ORD_LT, /* UNORDERED or GE */
128         MIPS_FPU_UNORD_LT, /* ORDERED or GE */
129         MIPS_FPU_ORD_LE, /* UNORDERED or GT */
130         MIPS_FPU_UNORD_LE /* OREDERED or GT */
131 };
132
133 /* arithmetric ops */
134 #define mips_add(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,32)
135 #define mips_addi(c,dest,src1,imm) mips_format_i(c,8,src1,dest,imm)
136 #define mips_addu(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,33)
137 #define mips_addiu(c,dest,src1,imm) mips_format_i(c,9,src1,dest,imm)
138 #define mips_dadd(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,44)
139 #define mips_daddi(c,dest,src1,imm) mips_format_i(c,24,src1,dest,imm)
140 #define mips_daddu(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,45)
141 #define mips_daddiu(c,dest,src1,imm) mips_format_i(c,25,src1,dest,imm)
142 #define mips_dsub(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,46)
143 #define mips_dsubu(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,47)
144 #define mips_sub(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,34)
145 #define mips_subu(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,35)
146
147 /* div and mul ops */
148 #define mips_ddiv(c,src1,src2) mips_format_divmul(c,0,src1,src2,30)
149 #define mips_ddivu(c,src1,src2) mips_format_divmul(c,0,src1,src2,31)
150 #define mips_div(c,src1,src2) mips_format_divmul(c,0,src1,src2,26)
151 #define mips_divu(c,src1,src2) mips_format_divmul(c,0,src1,src2,27)
152 #define mips_dmult(c,src1,src2) mips_format_divmul(c,0,src1,src2,28)
153 #define mips_dmultu(c,src1,src2) mips_format_divmul(c,0,src1,src2,29)
154 #define mips_mult(c,src1,src2) mips_format_divmul(c,0,src1,src2,24)
155 #define mips_multu(c,src1,src2) mips_format_divmul(c,0,src1,src2,25)
156
157 /* shift ops */
158 #define mips_dsll(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,56)
159 #define mips_dsll32(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,60)
160 #define mips_dsllv(c,dest,src1,src2) mips_format_r(c,0,src2,src1,dest,0,20)
161 #define mips_dsra(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,59)
162 #define mips_dsra32(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,63)
163 #define mips_dsrav(c,dest,src1,src2) mips_format_r(c,0,src2,src1,dest,0,23)
164 #define mips_dsrl(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,58)
165 #define mips_dsrl32(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,62)
166 #define mips_dsrlv(c,dest,src1,src2) mips_format_r(c,0,src2,src1,dest,0,22)
167 #define mips_sll(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,0)
168 #define mips_sllv(c,dest,src1,src2) mips_format_r(c,0,src2,src1,dest,0,4)
169 #define mips_sra(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,3)
170 #define mips_srav(c,dest,src1,src2) mips_format_r(c,0,src2,src1,dest,0,7)
171 #define mips_srl(c,dest,src1,imm) mips_format_r(c,0,0,src1,dest,imm,2)
172 #define mips_srlv(c,dest,src1,src2) mips_format_r(c,0,src2,src1,dest,0,6)
173
174 /* logical ops */
175 #define mips_and(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,36)
176 #define mips_andi(c,dest,src1,imm) mips_format_i(c,12,src1,dest,imm)
177 #define mips_nor(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,39)
178 #define mips_or(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,37)
179 #define mips_ori(c,dest,src1,uimm) mips_format_i(c,13,src1,dest,uimm)
180 #define mips_xor(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,38)
181 #define mips_xori(c,dest,src1,uimm) mips_format_i(c,14,src1,dest,uimm)
182
183 /* compares */
184 #define mips_slt(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,42)
185 #define mips_slti(c,dest,src1,imm) mips_format_i(c,10,src1,dest,imm)
186 #define mips_sltiu(c,dest,src1,imm) mips_format_i(c,11,src1,dest,imm)
187 #define mips_sltu(c,dest,src1,src2) mips_format_r(c,0,src1,src2,dest,0,43)
188 /* missing traps: teq, teqi, tge, tgei, tgeiu, tgeu, tlt, tlti, tltiu, tltu, tne, tnei, */
189
190 /* conditional branches */
191 #define mips_beq(c,src1,src2,offset) mips_format_i(c,4,src1,src2,offset)
192 #define mips_beql(c,src1,src2,offset) mips_format_i(c,20,src1,src2,offset)
193 #define mips_bgez(c,src1,offset) mips_format_i(c,1,src1,1,offset)
194 #define mips_bgezal(c,src1,offset) mips_format_i(c,1,src1,17,offset)
195 #define mips_bgezall(c,src1,offset) mips_format_i(c,1,src1,19,offset)
196 #define mips_bgezl(c,src1,offset) mips_format_i(c,1,src1,3,offset)
197 #define mips_bgtz(c,src1,offset) mips_format_i(c,7,src1,0,offset)
198 #define mips_bgtzl(c,src1,offset) mips_format_i(c,23,src1,0,offset)
199 #define mips_blez(c,src1,offset) mips_format_i(c,6,src1,0,offset)
200 #define mips_blezl(c,src1,offset) mips_format_i(c,22,src1,0,offset)
201 #define mips_bltz(c,src1,offset) mips_format_i(c,1,src1,0,offset)
202 #define mips_bltzal(c,src1,offset) mips_format_i(c,1,src1,16,offset)
203 #define mips_bltzall(c,src1,offset) mips_format_i(c,1,src1,18,offset)
204 #define mips_bltzl(c,src1,offset) mips_format_i(c,1,src1,2,offset)
205 #define mips_bne(c,src1,src2,offset) mips_format_i(c,5,src1,src2,offset)
206 #define mips_bnel(c,src1,src2,offset) mips_format_i(c,21,src1,src2,offset)
207
208 /* uncond branches and calls */
209 #define mips_jump(c,target) mips_format_j(c,2,target)
210 #define mips_jumpl(c,target) mips_format_j(c,3,target)
211 #define mips_jalr(c,src1,retreg) mips_format_r(c,0,src1,0,retreg,0,9)
212 #define mips_jr(c,src1) mips_emit32(c,((src1)<<21)|8)
213
214 /* loads and stores */
215 #define mips_lb(c,dest,base,offset) mips_format_i(c,32,base,dest,offset)
216 #define mips_lbu(c,dest,base,offset) mips_format_i(c,36,base,dest,offset)
217 #define mips_ld(c,dest,base,offset) mips_format_i(c,55,base,dest,offset)
218 #define mips_ldl(c,dest,base,offset) mips_format_i(c,26,base,dest,offset)
219 #define mips_ldr(c,dest,base,offset) mips_format_i(c,27,base,dest,offset)
220 #define mips_lh(c,dest,base,offset) mips_format_i(c,33,base,dest,offset)
221 #define mips_lhu(c,dest,base,offset) mips_format_i(c,37,base,dest,offset)
222 #define mips_ll(c,dest,base,offset) mips_format_i(c,48,base,dest,offset)
223 #define mips_lld(c,dest,base,offset) mips_format_i(c,52,base,dest,offset)
224 #define mips_lui(c,dest,base,uimm) mips_format_i(c,15,base,dest,uimm)
225 #define mips_lw(c,dest,base,offset) mips_format_i(c,35,base,dest,offset)
226 #define mips_lwl(c,dest,base,offset) mips_format_i(c,34,base,dest,offset)
227 #define mips_lwr(c,dest,base,offset) mips_format_i(c,38,base,dest,offset)
228 #define mips_lwu(c,dest,base,offset) mips_format_i(c,39,base,dest,offset)
229 #define mips_sb(c,src,base,offset) mips_format_i(c,40,base,src,offset)
230 #define mips_sc(c,src,base,offset) mips_format_i(c,56,base,src,offset)
231 #define mips_scd(c,src,base,offset) mips_format_i(c,60,base,src,offset)
232 #define mips_sd(c,src,base,offset) mips_format_i(c,63,base,src,offset)
233 #define mips_sdl(c,src,base,offset) mips_format_i(c,44,base,src,offset)
234 #define mips_sdr(c,src,base,offset) mips_format_i(c,45,base,src,offset)
235 #define mips_sh(c,src,base,offset) mips_format_i(c,41,base,src,offset)
236 #define mips_sw(c,src,base,offset) mips_format_i(c,43,base,src,offset)
237 #define mips_swl(c,src,base,offset) mips_format_i(c,50,base,src,offset)
238 #define mips_swr(c,src,base,offset) mips_format_i(c,54,base,src,offset)
239
240 /* misc and coprocessor ops */
241 #define mips_move(c,dest,src) mips_add(c,dest,src,mips_zero)
242 #define mips_nop(c) mips_sll(c,0,0,0)
243 #define mips_break(c,code) mips_emit32(c, ((code)<<6)|13)
244 #define mips_mfhi(c,dest) mips_format_r(c,0,0,0,dest,0,16)
245 #define mips_mflo(c,dest) mips_format_r(c,0,0,0,dest,0,18)
246 #define mips_mthi(c,src) mips_format_r(c,0,src,0,0,0,17)
247 #define mips_mtlo(c,src) mips_format_r(c,0,src,0,0,0,19)
248 #define mips_movn(c,dest,src,test) mips_format_r(c,0,src,test,dest,0,11)
249 #define mips_movz(c,dest,src,test) mips_format_r(c,0,src,test,dest,0,10)
250 #define mips_pref(c,hint,base,offset) mips_format_i(c,51,base,hint,offset)
251 #define mips_prefidx(c,hint,base,idx) mips_format_r(c,19,base,idx,hint,0,15)
252 #define mips_sync(c,stype) mips_emit32(c, ((stype)<<6)|15)
253 #define mips_syscall(c,code) mips_emit32(c, ((code)<<6)|12)
254
255 #define mips_cop(c,cop,fun) mips_emit32(c, ((16|(cop))<<26)|(fun))
256 #define mips_ldc(c,cop,dest,base,offset) mips_format_i(c,(52|(cop)),base,dest,offset)
257 #define mips_lwc(c,cop,dest,base,offset) mips_format_i(c,(48|(cop)),base,dest,offset)
258 #define mips_sdc(c,cop,src,base,offset) mips_format_i(c,(60|(cop)),base,src,offset)
259 #define mips_swc(c,cop,src,base,offset) mips_format_i(c,(56|(cop)),base,src,offset)
260 #define mips_cfc1(c,dest,src) mips_format_r(c,17,2,dest,src,0,0)
261 #define mips_ctc1(c,dest,src) mips_format_r(c,17,6,dest,src,0,0)
262
263 /* fpu ops */
264 #define mips_fabss(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,5)
265 #define mips_fabsd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,5)
266 #define mips_fadds(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_SINGLE,src2,src1,dest,0)
267 #define mips_faddd(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_DOUBLE,src2,src1,dest,0)
268 #define mips_fdivs(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_SINGLE,src2,src1,dest,3)
269 #define mips_fdivd(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_DOUBLE,src2,src1,dest,3)
270 #define mips_fmuls(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_SINGLE,src2,src1,dest,2)
271 #define mips_fmuld(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_DOUBLE,src2,src1,dest,2)
272 #define mips_fnegs(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,7)
273 #define mips_fnegd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,7)
274 #define mips_fsqrts(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,4)
275 #define mips_fsqrtd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,4)
276 #define mips_fsubs(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_SINGLE,src2,src1,dest,1)
277 #define mips_fsubd(c,dest,src1,src2) mips_format_r(c,17,MIPS_FMT_DOUBLE,src2,src1,dest,1)
278 #define mips_madds(c,dest,src1,src2,srcadd) mips_format_r(c,19,srcadd,src2,src1,dest,32|MIPS_FMT_SINGLE)
279 #define mips_maddd(c,dest,src1,src2,srcadd) mips_format_r(c,19,srcadd,src2,src1,dest,32|MIPS_FMT_DOUBLE)
280 #define mips_nmadds(c,dest,src1,src2,srcadd) mips_format_r(c,19,srcadd,src2,src1,dest,48|MIPS_FMT_SINGLE)
281 #define mips_nmaddd(c,dest,src1,src2,srcadd) mips_format_r(c,19,srcadd,src2,src1,dest,48|MIPS_FMT_DOUBLE)
282 #define mips_msubs(c,dest,src1,src2,srcsub) mips_format_r(c,19,srcsub,src2,src1,dest,40|MIPS_FMT_SINGLE)
283 #define mips_msubd(c,dest,src1,src2,srcsub) mips_format_r(c,19,srcsub,src2,src1,dest,40|MIPS_FMT_DOUBLE)
284 #define mips_nmsubs(c,dest,src1,src2,srcsub) mips_format_r(c,19,srcsub,src2,src1,dest,56|MIPS_FMT_SINGLE)
285 #define mips_nmsubd(c,dest,src1,src2,srcsub) mips_format_r(c,19,srcsub,src2,src1,dest,56|MIPS_FMT_DOUBLE)
286
287 /* fp compare and branch */
288 #define mips_fcmps(c,cond,src1,src2) mips_format_r(c,17,MIPS_FMT_SINGLE,src2,src1,0,(3<<4)|(cond))
289 #define mips_fcmpd(c,cond,src1,src2) mips_format_r(c,17,MIPS_FMT_DOUBLE,src2,src1,0,(3<<4)|(cond))
290 #define mips_fbfalse(c,offset) mips_format_i(c,17,8,0,offset)
291 #define mips_fbfalsel(c,offset) mips_format_i(c,17,8,2,offset)
292 #define mips_fbtrue(c,offset) mips_format_i(c,17,8,1,offset)
293 #define mips_fbtruel(c,offset) mips_format_i(c,17,8,3,offset)
294
295 /* fp convert */
296 #define mips_ceills(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,10)
297 #define mips_ceilld(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,10)
298 #define mips_ceilws(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,14)
299 #define mips_ceilwd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,14)
300 #define mips_cvtds(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,33)
301 #define mips_cvtdw(c,dest,src) mips_format_r(c,17,MIPS_FMT_WORD,0,src,dest,33)
302 #define mips_cvtdl(c,dest,src) mips_format_r(c,17,MIPS_FMT_LONG,0,src,dest,33)
303 #define mips_cvtls(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,37)
304 #define mips_cvtld(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,37)
305 #define mips_cvtsd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,32)
306 #define mips_cvtsw(c,dest,src) mips_format_r(c,17,MIPS_FMT_WORD,0,src,dest,32)
307 #define mips_cvtsl(c,dest,src) mips_format_r(c,17,MIPS_FMT_LONG,0,src,dest,32)
308 #define mips_cvtws(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,36)
309 #define mips_cvtwd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,36)
310 #define mips_floorls(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,11)
311 #define mips_floorld(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,11)
312 #define mips_floorws(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,15)
313 #define mips_floorwd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,15)
314 #define mips_roundls(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,8)
315 #define mips_roundld(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,8)
316 #define mips_roundws(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,12)
317 #define mips_roundwd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,12)
318 #define mips_truncls(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,9)
319 #define mips_truncld(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,9)
320 #define mips_truncws(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,13)
321 #define mips_truncwd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,13)
322
323 /* fp moves, loads */
324 #define mips_fmovs(c,dest,src) mips_format_r(c,17,MIPS_FMT_SINGLE,0,src,dest,6)
325 #define mips_fmovd(c,dest,src) mips_format_r(c,17,MIPS_FMT_DOUBLE,0,src,dest,6)
326 #define mips_wmovfc1(c,dest,src) mips_format_r(c,17,0,dest,src,0,0)
327 #define mips_wmovtc1(c,dest,src) mips_format_r(c,17,4,src,dest,0,0)
328 #define mips_dmovfc1(c,dest,src) mips_format_r(c,17,1,0,dest,src,0,0)
329 #define mips_dmovtc1(c,dest,src) mips_format_r(c,17,1,0,src,dest,0,0)
330 #define mips_ldc1(c,dest,base,offset) mips_ldc(c,1,dest,base,offset)
331 #define mips_ldxc1(c,dest,base,idx) mips_format_r(c,19,base,idx,0,dest,1)
332 #define mips_lwc1(c,dest,base,offset) mips_lwc(c,1,dest,base,offset)
333 #define mips_lwxc1(c,dest,base,idx) mips_format_r(c,19,base,idx,0,dest,0)
334 #define mips_sdc1(c,src,base,offset) mips_sdc(c,1,src,base,offset)
335 #define mips_sdxc1(c,src,base,idx) mips_format_r(c,19,base,idx,src,0,9)
336 #define mips_swc1(c,src,base,offset) mips_swc(c,1,src,base,offset)
337 #define mips_swxc1(c,src,base,idx) mips_format_r(c,19,base,idx,src,0,8)
338
339 #endif /* __MIPS_CODEGEN_H__ */
340