1 ;; MIPS Paired-Single Floating and MIPS-3D Instructions.
2 ;; Copyright (C) 2004 Free Software Foundation, Inc.
4 ;; This file is part of GCC.
6 ;; GCC is free software; you can redistribute it and/or modify
7 ;; it under the terms of the GNU General Public License as published by
8 ;; the Free Software Foundation; either version 2, or (at your option)
11 ;; GCC is distributed in the hope that it will be useful,
12 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ;; GNU General Public License for more details.
16 ;; You should have received a copy of the GNU General Public License
17 ;; along with GCC; see the file COPYING. If not, write to
18 ;; the Free Software Foundation, 59 Temple Place - Suite 330,
19 ;; Boston, MA 02111-1307, USA.
21 (define_insn "*movcc_v2sf_<mode>"
22 [(set (match_operand:V2SF 0 "register_operand" "=f,f")
24 (match_operator:GPR 4 "equality_operator"
25 [(match_operand:GPR 1 "register_operand" "d,d")
27 (match_operand:V2SF 2 "register_operand" "f,0")
28 (match_operand:V2SF 3 "register_operand" "0,f")))]
29 "TARGET_PAIRED_SINGLE_FLOAT"
33 [(set_attr "type" "condmove")
34 (set_attr "mode" "SF")])
36 (define_insn "mips_cond_move_tf_ps"
37 [(set (match_operand:V2SF 0 "register_operand" "=f,f")
38 (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "f,0")
39 (match_operand:V2SF 2 "register_operand" "0,f")
40 (match_operand:CCV2 3 "register_operand" "z,z")]
42 "TARGET_PAIRED_SINGLE_FLOAT"
46 [(set_attr "type" "condmove")
47 (set_attr "mode" "SF")])
49 (define_expand "movv2sfcc"
50 [(set (match_dup 4) (match_operand 1 "comparison_operator"))
51 (set (match_operand:V2SF 0 "register_operand")
52 (if_then_else:V2SF (match_dup 5)
53 (match_operand:V2SF 2 "register_operand")
54 (match_operand:V2SF 3 "register_operand")))]
55 "TARGET_PAIRED_SINGLE_FLOAT"
57 /* We can only support MOVN.PS and MOVZ.PS.
58 NOTE: MOVT.PS and MOVF.PS have different semantics from MOVN.PS and
59 MOVZ.PS. MOVT.PS and MOVF.PS depend on two CC values and move
60 each item independently. */
62 if (GET_MODE_CLASS (GET_MODE (cmp_operands[0])) != MODE_INT)
65 gen_conditional_move (operands);
69 ; pul.ps - Pair Upper Lower
70 (define_insn "mips_pul_ps"
71 [(set (match_operand:V2SF 0 "register_operand" "=f")
73 (match_operand:V2SF 1 "register_operand" "f")
74 (match_operand:V2SF 2 "register_operand" "f")
76 "TARGET_PAIRED_SINGLE_FLOAT"
78 [(set_attr "type" "fmove")
79 (set_attr "mode" "SF")])
81 ; puu.ps - Pair upper upper
82 (define_insn "mips_puu_ps"
83 [(set (match_operand:V2SF 0 "register_operand" "=f")
85 (match_operand:V2SF 1 "register_operand" "f")
86 (vec_select:V2SF (match_operand:V2SF 2 "register_operand" "f")
87 (parallel [(const_int 1)
90 "TARGET_PAIRED_SINGLE_FLOAT"
92 [(set_attr "type" "fmove")
93 (set_attr "mode" "SF")])
95 ; pll.ps - Pair Lower Lower
96 (define_insn "mips_pll_ps"
97 [(set (match_operand:V2SF 0 "register_operand" "=f")
99 (vec_select:V2SF (match_operand:V2SF 1 "register_operand" "f")
100 (parallel [(const_int 1)
102 (match_operand:V2SF 2 "register_operand" "f")
104 "TARGET_PAIRED_SINGLE_FLOAT"
106 [(set_attr "type" "fmove")
107 (set_attr "mode" "SF")])
109 ; plu.ps - Pair Lower Upper
110 (define_insn "mips_plu_ps"
111 [(set (match_operand:V2SF 0 "register_operand" "=f")
113 (vec_select:V2SF (match_operand:V2SF 1 "register_operand" "f")
114 (parallel [(const_int 1)
116 (vec_select:V2SF (match_operand:V2SF 2 "register_operand" "f")
117 (parallel [(const_int 1)
120 "TARGET_PAIRED_SINGLE_FLOAT"
122 [(set_attr "type" "fmove")
123 (set_attr "mode" "SF")])
126 (define_expand "vec_initv2sf"
127 [(match_operand:V2SF 0 "register_operand")
128 (match_operand:V2SF 1 "")]
129 "TARGET_PAIRED_SINGLE_FLOAT"
131 rtx op0 = force_reg (SFmode, XVECEXP (operands[1], 0, 0));
132 rtx op1 = force_reg (SFmode, XVECEXP (operands[1], 0, 1));
133 emit_insn (gen_vec_initv2sf_internal (operands[0], op0, op1));
137 (define_insn "vec_initv2sf_internal"
138 [(set (match_operand:V2SF 0 "register_operand" "=f")
140 (match_operand:SF 1 "register_operand" "f")
141 (match_operand:SF 2 "register_operand" "f")))]
142 "TARGET_PAIRED_SINGLE_FLOAT"
144 if (BYTES_BIG_ENDIAN)
145 return "cvt.ps.s\t%0,%1,%2";
147 return "cvt.ps.s\t%0,%2,%1";
149 [(set_attr "type" "fcvt")
150 (set_attr "mode" "SF")])
152 ;; ??? This is only generated if we perform a vector operation that has to be
153 ;; emulated. There is no other way to get a vector mode bitfield extract
156 (define_insn "vec_extractv2sf"
157 [(set (match_operand:SF 0 "register_operand" "=f")
158 (vec_select:SF (match_operand:V2SF 1 "register_operand" "f")
160 [(match_operand 2 "const_0_or_1_operand" "")])))]
161 "TARGET_PAIRED_SINGLE_FLOAT"
163 if (INTVAL (operands[2]) == !BYTES_BIG_ENDIAN)
164 return "cvt.s.pu\t%0,%1";
166 return "cvt.s.pl\t%0,%1";
168 [(set_attr "type" "fcvt")
169 (set_attr "mode" "SF")])
171 ;; ??? This is only generated if we disable the vec_init pattern. There is
172 ;; no other way to get a vector mode bitfield store currently.
174 (define_expand "vec_setv2sf"
175 [(match_operand:V2SF 0 "register_operand")
176 (match_operand:SF 1 "register_operand")
177 (match_operand 2 "const_0_or_1_operand")]
178 "TARGET_PAIRED_SINGLE_FLOAT"
182 /* We don't have an insert instruction, so we duplicate the float, and
183 then use a PUL instruction. */
184 temp = gen_reg_rtx (V2SFmode);
185 emit_insn (gen_mips_cvt_ps_s (temp, operands[1], operands[1]));
186 if (INTVAL (operands[2]) == !BYTES_BIG_ENDIAN)
187 emit_insn (gen_mips_pul_ps (operands[0], temp, operands[0]));
189 emit_insn (gen_mips_pul_ps (operands[0], operands[0], temp));
193 ; cvt.ps.s - Floating Point Convert Pair to Paired Single
194 (define_expand "mips_cvt_ps_s"
195 [(match_operand:V2SF 0 "register_operand")
196 (match_operand:SF 1 "register_operand")
197 (match_operand:SF 2 "register_operand")]
198 "TARGET_PAIRED_SINGLE_FLOAT"
200 if (BYTES_BIG_ENDIAN)
201 emit_insn (gen_vec_initv2sf_internal (operands[0], operands[1],
204 emit_insn (gen_vec_initv2sf_internal (operands[0], operands[2],
209 ; cvt.s.pl - Floating Point Convert Pair Lower to Single Floating Point
210 (define_expand "mips_cvt_s_pl"
211 [(set (match_operand:SF 0 "register_operand")
212 (vec_select:SF (match_operand:V2SF 1 "register_operand")
213 (parallel [(match_dup 2)])))]
214 "TARGET_PAIRED_SINGLE_FLOAT"
215 { operands[2] = GEN_INT (BYTES_BIG_ENDIAN); })
217 ; cvt.s.pu - Floating Point Convert Pair Upper to Single Floating Point
218 (define_expand "mips_cvt_s_pu"
219 [(set (match_operand:SF 0 "register_operand")
220 (vec_select:SF (match_operand:V2SF 1 "register_operand")
221 (parallel [(match_dup 2)])))]
222 "TARGET_PAIRED_SINGLE_FLOAT"
223 { operands[2] = GEN_INT (!BYTES_BIG_ENDIAN); })
225 ; alnv.ps - Floating Point Align Variable
226 (define_insn "mips_alnv_ps"
227 [(set (match_operand:V2SF 0 "register_operand" "=f")
228 (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "f")
229 (match_operand:V2SF 2 "register_operand" "f")
230 (match_operand:SI 3 "register_operand" "d")]
232 "TARGET_PAIRED_SINGLE_FLOAT"
233 "alnv.ps\t%0,%1,%2,%3"
234 [(set_attr "type" "fmove")
235 (set_attr "mode" "SF")])
237 ; addr.ps - Floating Point Reduction Add
238 (define_insn "mips_addr_ps"
239 [(set (match_operand:V2SF 0 "register_operand" "=f")
240 (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "f")
241 (match_operand:V2SF 2 "register_operand" "f")]
245 [(set_attr "type" "fadd")
246 (set_attr "mode" "SF")])
248 ; cvt.pw.ps - Floating Point Convert Paired Single to Paired Word
249 (define_insn "mips_cvt_pw_ps"
250 [(set (match_operand:V2SF 0 "register_operand" "=f")
251 (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "f")]
255 [(set_attr "type" "fcvt")
256 (set_attr "mode" "SF")])
258 ; cvt.ps.pw - Floating Point Convert Paired Word to Paired Single
259 (define_insn "mips_cvt_ps_pw"
260 [(set (match_operand:V2SF 0 "register_operand" "=f")
261 (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "f")]
265 [(set_attr "type" "fcvt")
266 (set_attr "mode" "SF")])
268 ; mulr.ps - Floating Point Reduction Multiply
269 (define_insn "mips_mulr_ps"
270 [(set (match_operand:V2SF 0 "register_operand" "=f")
271 (unspec:V2SF [(match_operand:V2SF 1 "register_operand" "f")
272 (match_operand:V2SF 2 "register_operand" "f")]
276 [(set_attr "type" "fmul")
277 (set_attr "mode" "SF")])
279 ;----------------------------------------------------------------------------
280 ; Floating Point Absolute Comparisions for Singles
281 ;----------------------------------------------------------------------------
283 (define_insn "mips_cabs_f_s"
284 [(set (match_operand:CC 0 "register_operand" "=z")
285 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
286 (match_operand:SF 2 "register_operand" "f")]
289 "cabs.f.s\t%Q0,%1,%2"
290 [(set_attr "type" "fcmp")
291 (set_attr "mode" "FPSW")])
293 (define_insn "mips_cabs_un_s"
294 [(set (match_operand:CC 0 "register_operand" "=z")
295 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
296 (match_operand:SF 2 "register_operand" "f")]
299 "cabs.un.s\t%Q0,%1,%2"
300 [(set_attr "type" "fcmp")
301 (set_attr "mode" "FPSW")])
303 (define_insn "mips_cabs_eq_s"
304 [(set (match_operand:CC 0 "register_operand" "=z")
305 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
306 (match_operand:SF 2 "register_operand" "f")]
309 "cabs.eq.s\t%Q0,%1,%2"
310 [(set_attr "type" "fcmp")
311 (set_attr "mode" "FPSW")])
313 (define_insn "mips_cabs_ueq_s"
314 [(set (match_operand:CC 0 "register_operand" "=z")
315 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
316 (match_operand:SF 2 "register_operand" "f")]
319 "cabs.ueq.s\t%Q0,%1,%2"
320 [(set_attr "type" "fcmp")
321 (set_attr "mode" "FPSW")])
323 (define_insn "mips_cabs_olt_s"
324 [(set (match_operand:CC 0 "register_operand" "=z")
325 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
326 (match_operand:SF 2 "register_operand" "f")]
329 "cabs.olt.s\t%Q0,%1,%2"
330 [(set_attr "type" "fcmp")
331 (set_attr "mode" "FPSW")])
333 (define_insn "mips_cabs_ult_s"
334 [(set (match_operand:CC 0 "register_operand" "=z")
335 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
336 (match_operand:SF 2 "register_operand" "f")]
339 "cabs.ult.s\t%Q0,%1,%2"
340 [(set_attr "type" "fcmp")
341 (set_attr "mode" "FPSW")])
343 (define_insn "mips_cabs_ole_s"
344 [(set (match_operand:CC 0 "register_operand" "=z")
345 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
346 (match_operand:SF 2 "register_operand" "f")]
349 "cabs.ole.s\t%Q0,%1,%2"
350 [(set_attr "type" "fcmp")
351 (set_attr "mode" "FPSW")])
353 (define_insn "mips_cabs_ule_s"
354 [(set (match_operand:CC 0 "register_operand" "=z")
355 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
356 (match_operand:SF 2 "register_operand" "f")]
359 "cabs.ule.s\t%Q0,%1,%2"
360 [(set_attr "type" "fcmp")
361 (set_attr "mode" "FPSW")])
363 (define_insn "mips_cabs_sf_s"
364 [(set (match_operand:CC 0 "register_operand" "=z")
365 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
366 (match_operand:SF 2 "register_operand" "f")]
369 "cabs.sf.s\t%Q0,%1,%2"
370 [(set_attr "type" "fcmp")
371 (set_attr "mode" "FPSW")])
373 (define_insn "mips_cabs_ngle_s"
374 [(set (match_operand:CC 0 "register_operand" "=z")
375 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
376 (match_operand:SF 2 "register_operand" "f")]
379 "cabs.ngle.s\t%Q0,%1,%2"
380 [(set_attr "type" "fcmp")
381 (set_attr "mode" "FPSW")])
383 (define_insn "mips_cabs_seq_s"
384 [(set (match_operand:CC 0 "register_operand" "=z")
385 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
386 (match_operand:SF 2 "register_operand" "f")]
389 "cabs.seq.s\t%Q0,%1,%2"
390 [(set_attr "type" "fcmp")
391 (set_attr "mode" "FPSW")])
393 (define_insn "mips_cabs_ngl_s"
394 [(set (match_operand:CC 0 "register_operand" "=z")
395 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
396 (match_operand:SF 2 "register_operand" "f")]
399 "cabs.ngl.s\t%Q0,%1,%2"
400 [(set_attr "type" "fcmp")
401 (set_attr "mode" "FPSW")])
403 (define_insn "mips_cabs_lt_s"
404 [(set (match_operand:CC 0 "register_operand" "=z")
405 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
406 (match_operand:SF 2 "register_operand" "f")]
409 "cabs.lt.s\t%Q0,%1,%2"
410 [(set_attr "type" "fcmp")
411 (set_attr "mode" "FPSW")])
413 (define_insn "mips_cabs_nge_s"
414 [(set (match_operand:CC 0 "register_operand" "=z")
415 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
416 (match_operand:SF 2 "register_operand" "f")]
419 "cabs.nge.s\t%Q0,%1,%2"
420 [(set_attr "type" "fcmp")
421 (set_attr "mode" "FPSW")])
423 (define_insn "mips_cabs_le_s"
424 [(set (match_operand:CC 0 "register_operand" "=z")
425 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
426 (match_operand:SF 2 "register_operand" "f")]
429 "cabs.le.s\t%Q0,%1,%2"
430 [(set_attr "type" "fcmp")
431 (set_attr "mode" "FPSW")])
433 (define_insn "mips_cabs_ngt_s"
434 [(set (match_operand:CC 0 "register_operand" "=z")
435 (unspec:CC [(match_operand:SF 1 "register_operand" "f")
436 (match_operand:SF 2 "register_operand" "f")]
439 "cabs.ngt.s\t%Q0,%1,%2"
440 [(set_attr "type" "fcmp")
441 (set_attr "mode" "FPSW")])
443 ;----------------------------------------------------------------------------
444 ; Floating Point Absolute Comparisions for Doubles
445 ;----------------------------------------------------------------------------
446 (define_insn "mips_cabs_f_d"
447 [(set (match_operand:CC 0 "register_operand" "=z")
448 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
449 (match_operand:DF 2 "register_operand" "f")]
452 "cabs.f.d\t%Q0,%1,%2"
453 [(set_attr "type" "fcmp")
454 (set_attr "mode" "FPSW")])
456 (define_insn "mips_cabs_un_d"
457 [(set (match_operand:CC 0 "register_operand" "=z")
458 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
459 (match_operand:DF 2 "register_operand" "f")]
462 "cabs.un.d\t%Q0,%1,%2"
463 [(set_attr "type" "fcmp")
464 (set_attr "mode" "FPSW")])
466 (define_insn "mips_cabs_eq_d"
467 [(set (match_operand:CC 0 "register_operand" "=z")
468 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
469 (match_operand:DF 2 "register_operand" "f")]
472 "cabs.eq.d\t%Q0,%1,%2"
473 [(set_attr "type" "fcmp")
474 (set_attr "mode" "FPSW")])
476 (define_insn "mips_cabs_ueq_d"
477 [(set (match_operand:CC 0 "register_operand" "=z")
478 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
479 (match_operand:DF 2 "register_operand" "f")]
482 "cabs.ueq.d\t%Q0,%1,%2"
483 [(set_attr "type" "fcmp")
484 (set_attr "mode" "FPSW")])
486 (define_insn "mips_cabs_olt_d"
487 [(set (match_operand:CC 0 "register_operand" "=z")
488 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
489 (match_operand:DF 2 "register_operand" "f")]
492 "cabs.olt.d\t%Q0,%1,%2"
493 [(set_attr "type" "fcmp")
494 (set_attr "mode" "FPSW")])
496 (define_insn "mips_cabs_ult_d"
497 [(set (match_operand:CC 0 "register_operand" "=z")
498 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
499 (match_operand:DF 2 "register_operand" "f")]
502 "cabs.ult.d\t%Q0,%1,%2"
503 [(set_attr "type" "fcmp")
504 (set_attr "mode" "FPSW")])
506 (define_insn "mips_cabs_ole_d"
507 [(set (match_operand:CC 0 "register_operand" "=z")
508 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
509 (match_operand:DF 2 "register_operand" "f")]
512 "cabs.ole.d\t%Q0,%1,%2"
513 [(set_attr "type" "fcmp")
514 (set_attr "mode" "FPSW")])
516 (define_insn "mips_cabs_ule_d"
517 [(set (match_operand:CC 0 "register_operand" "=z")
518 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
519 (match_operand:DF 2 "register_operand" "f")]
522 "cabs.ule.d\t%Q0,%1,%2"
523 [(set_attr "type" "fcmp")
524 (set_attr "mode" "FPSW")])
526 (define_insn "mips_cabs_sf_d"
527 [(set (match_operand:CC 0 "register_operand" "=z")
528 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
529 (match_operand:DF 2 "register_operand" "f")]
532 "cabs.sf.d\t%Q0,%1,%2"
533 [(set_attr "type" "fcmp")
534 (set_attr "mode" "FPSW")])
536 (define_insn "mips_cabs_ngle_d"
537 [(set (match_operand:CC 0 "register_operand" "=z")
538 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
539 (match_operand:DF 2 "register_operand" "f")]
542 "cabs.ngle.d\t%Q0,%1,%2"
543 [(set_attr "type" "fcmp")
544 (set_attr "mode" "FPSW")])
546 (define_insn "mips_cabs_seq_d"
547 [(set (match_operand:CC 0 "register_operand" "=z")
548 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
549 (match_operand:DF 2 "register_operand" "f")]
552 "cabs.seq.d\t%Q0,%1,%2"
553 [(set_attr "type" "fcmp")
554 (set_attr "mode" "FPSW")])
556 (define_insn "mips_cabs_ngl_d"
557 [(set (match_operand:CC 0 "register_operand" "=z")
558 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
559 (match_operand:DF 2 "register_operand" "f")]
562 "cabs.ngl.d\t%Q0,%1,%2"
563 [(set_attr "type" "fcmp")
564 (set_attr "mode" "FPSW")])
566 (define_insn "mips_cabs_lt_d"
567 [(set (match_operand:CC 0 "register_operand" "=z")
568 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
569 (match_operand:DF 2 "register_operand" "f")]
572 "cabs.lt.d\t%Q0,%1,%2"
573 [(set_attr "type" "fcmp")
574 (set_attr "mode" "FPSW")])
576 (define_insn "mips_cabs_nge_d"
577 [(set (match_operand:CC 0 "register_operand" "=z")
578 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
579 (match_operand:DF 2 "register_operand" "f")]
582 "cabs.nge.d\t%Q0,%1,%2"
583 [(set_attr "type" "fcmp")
584 (set_attr "mode" "FPSW")])
586 (define_insn "mips_cabs_le_d"
587 [(set (match_operand:CC 0 "register_operand" "=z")
588 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
589 (match_operand:DF 2 "register_operand" "f")]
592 "cabs.le.d\t%Q0,%1,%2"
593 [(set_attr "type" "fcmp")
594 (set_attr "mode" "FPSW")])
596 (define_insn "mips_cabs_ngt_d"
597 [(set (match_operand:CC 0 "register_operand" "=z")
598 (unspec:CC [(match_operand:DF 1 "register_operand" "f")
599 (match_operand:DF 2 "register_operand" "f")]
602 "cabs.ngt.d\t%Q0,%1,%2"
603 [(set_attr "type" "fcmp")
604 (set_attr "mode" "FPSW")])
606 ;----------------------------------------------------------------------------
607 ; Floating Point Comparisions for Four Singles
608 ;----------------------------------------------------------------------------
610 (define_insn "mips_c_f_4s"
611 [(set (match_operand:CCV4 0 "register_operand" "=z")
612 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
613 (match_operand:V2SF 2 "register_operand" "f")
614 (match_operand:V2SF 3 "register_operand" "f")
615 (match_operand:V2SF 4 "register_operand" "f")]
617 "TARGET_PAIRED_SINGLE_FLOAT"
618 "c.f.ps\t%v0,%1,%2\n\tc.f.ps\t%V0,%3,%4"
619 [(set_attr "type" "fcmp")
620 (set_attr "length" "8")
621 (set_attr "mode" "FPSW")])
623 (define_insn "mips_c_un_4s"
624 [(set (match_operand:CCV4 0 "register_operand" "=z")
625 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
626 (match_operand:V2SF 2 "register_operand" "f")
627 (match_operand:V2SF 3 "register_operand" "f")
628 (match_operand:V2SF 4 "register_operand" "f")]
630 "TARGET_PAIRED_SINGLE_FLOAT"
631 "c.un.ps\t%v0,%1,%2\n\tc.un.ps\t%V0,%3,%4"
632 [(set_attr "type" "fcmp")
633 (set_attr "length" "8")
634 (set_attr "mode" "FPSW")])
636 (define_insn "mips_c_eq_4s"
637 [(set (match_operand:CCV4 0 "register_operand" "=z")
638 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
639 (match_operand:V2SF 2 "register_operand" "f")
640 (match_operand:V2SF 3 "register_operand" "f")
641 (match_operand:V2SF 4 "register_operand" "f")]
643 "TARGET_PAIRED_SINGLE_FLOAT"
644 "c.eq.ps\t%v0,%1,%2\n\tc.eq.ps\t%V0,%3,%4"
645 [(set_attr "type" "fcmp")
646 (set_attr "length" "8")
647 (set_attr "mode" "FPSW")])
649 (define_insn "mips_c_ueq_4s"
650 [(set (match_operand:CCV4 0 "register_operand" "=z")
651 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
652 (match_operand:V2SF 2 "register_operand" "f")
653 (match_operand:V2SF 3 "register_operand" "f")
654 (match_operand:V2SF 4 "register_operand" "f")]
656 "TARGET_PAIRED_SINGLE_FLOAT"
657 "c.ueq.ps\t%v0,%1,%2\n\tc.ueq.ps\t%V0,%3,%4"
658 [(set_attr "type" "fcmp")
659 (set_attr "length" "8")
660 (set_attr "mode" "FPSW")])
662 (define_insn "mips_c_olt_4s"
663 [(set (match_operand:CCV4 0 "register_operand" "=z")
664 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
665 (match_operand:V2SF 2 "register_operand" "f")
666 (match_operand:V2SF 3 "register_operand" "f")
667 (match_operand:V2SF 4 "register_operand" "f")]
669 "TARGET_PAIRED_SINGLE_FLOAT"
670 "c.olt.ps\t%v0,%1,%2\n\tc.olt.ps\t%V0,%3,%4"
671 [(set_attr "type" "fcmp")
672 (set_attr "length" "8")
673 (set_attr "mode" "FPSW")])
675 (define_insn "mips_c_ult_4s"
676 [(set (match_operand:CCV4 0 "register_operand" "=z")
677 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
678 (match_operand:V2SF 2 "register_operand" "f")
679 (match_operand:V2SF 3 "register_operand" "f")
680 (match_operand:V2SF 4 "register_operand" "f")]
682 "TARGET_PAIRED_SINGLE_FLOAT"
683 "c.ult.ps\t%v0,%1,%2\n\tc.ult.ps\t%V0,%3,%4"
684 [(set_attr "type" "fcmp")
685 (set_attr "length" "8")
686 (set_attr "mode" "FPSW")])
688 (define_insn "mips_c_ole_4s"
689 [(set (match_operand:CCV4 0 "register_operand" "=z")
690 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
691 (match_operand:V2SF 2 "register_operand" "f")
692 (match_operand:V2SF 3 "register_operand" "f")
693 (match_operand:V2SF 4 "register_operand" "f")]
695 "TARGET_PAIRED_SINGLE_FLOAT"
696 "c.ole.ps\t%v0,%1,%2\n\tc.ole.ps\t%V0,%3,%4"
697 [(set_attr "type" "fcmp")
698 (set_attr "length" "8")
699 (set_attr "mode" "FPSW")])
701 (define_insn "mips_c_ule_4s"
702 [(set (match_operand:CCV4 0 "register_operand" "=z")
703 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
704 (match_operand:V2SF 2 "register_operand" "f")
705 (match_operand:V2SF 3 "register_operand" "f")
706 (match_operand:V2SF 4 "register_operand" "f")]
708 "TARGET_PAIRED_SINGLE_FLOAT"
709 "c.ule.ps\t%v0,%1,%2\n\tc.ule.ps\t%V0,%3,%4"
710 [(set_attr "type" "fcmp")
711 (set_attr "length" "8")
712 (set_attr "mode" "FPSW")])
714 (define_insn "mips_c_sf_4s"
715 [(set (match_operand:CCV4 0 "register_operand" "=z")
716 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
717 (match_operand:V2SF 2 "register_operand" "f")
718 (match_operand:V2SF 3 "register_operand" "f")
719 (match_operand:V2SF 4 "register_operand" "f")]
721 "TARGET_PAIRED_SINGLE_FLOAT"
722 "c.sf.ps\t%v0,%1,%2\n\tc.sf.ps\t%V0,%3,%4"
723 [(set_attr "type" "fcmp")
724 (set_attr "length" "8")
725 (set_attr "mode" "FPSW")])
727 (define_insn "mips_c_ngle_4s"
728 [(set (match_operand:CCV4 0 "register_operand" "=z")
729 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
730 (match_operand:V2SF 2 "register_operand" "f")
731 (match_operand:V2SF 3 "register_operand" "f")
732 (match_operand:V2SF 4 "register_operand" "f")]
734 "TARGET_PAIRED_SINGLE_FLOAT"
735 "c.ngle.ps\t%v0,%1,%2\n\tc.ngle.ps\t%V0,%3,%4"
736 [(set_attr "type" "fcmp")
737 (set_attr "length" "8")
738 (set_attr "mode" "FPSW")])
740 (define_insn "mips_c_seq_4s"
741 [(set (match_operand:CCV4 0 "register_operand" "=z")
742 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
743 (match_operand:V2SF 2 "register_operand" "f")
744 (match_operand:V2SF 3 "register_operand" "f")
745 (match_operand:V2SF 4 "register_operand" "f")]
747 "TARGET_PAIRED_SINGLE_FLOAT"
748 "c.seq.ps\t%v0,%1,%2\n\tc.seq.ps\t%V0,%3,%4"
749 [(set_attr "type" "fcmp")
750 (set_attr "length" "8")
751 (set_attr "mode" "FPSW")])
753 (define_insn "mips_c_ngl_4s"
754 [(set (match_operand:CCV4 0 "register_operand" "=z")
755 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
756 (match_operand:V2SF 2 "register_operand" "f")
757 (match_operand:V2SF 3 "register_operand" "f")
758 (match_operand:V2SF 4 "register_operand" "f")]
760 "TARGET_PAIRED_SINGLE_FLOAT"
761 "c.ngl.ps\t%v0,%1,%2\n\tc.ngl.ps\t%V0,%3,%4"
762 [(set_attr "type" "fcmp")
763 (set_attr "length" "8")
764 (set_attr "mode" "FPSW")])
766 (define_insn "mips_c_lt_4s"
767 [(set (match_operand:CCV4 0 "register_operand" "=z")
768 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
769 (match_operand:V2SF 2 "register_operand" "f")
770 (match_operand:V2SF 3 "register_operand" "f")
771 (match_operand:V2SF 4 "register_operand" "f")]
773 "TARGET_PAIRED_SINGLE_FLOAT"
774 "c.lt.ps\t%v0,%1,%2\n\tc.lt.ps\t%V0,%3,%4"
775 [(set_attr "type" "fcmp")
776 (set_attr "length" "8")
777 (set_attr "mode" "FPSW")])
779 (define_insn "mips_c_nge_4s"
780 [(set (match_operand:CCV4 0 "register_operand" "=z")
781 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
782 (match_operand:V2SF 2 "register_operand" "f")
783 (match_operand:V2SF 3 "register_operand" "f")
784 (match_operand:V2SF 4 "register_operand" "f")]
786 "TARGET_PAIRED_SINGLE_FLOAT"
787 "c.nge.ps\t%v0,%1,%2\n\tc.nge.ps\t%V0,%3,%4"
788 [(set_attr "type" "fcmp")
789 (set_attr "length" "8")
790 (set_attr "mode" "FPSW")])
792 (define_insn "mips_c_le_4s"
793 [(set (match_operand:CCV4 0 "register_operand" "=z")
794 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
795 (match_operand:V2SF 2 "register_operand" "f")
796 (match_operand:V2SF 3 "register_operand" "f")
797 (match_operand:V2SF 4 "register_operand" "f")]
799 "TARGET_PAIRED_SINGLE_FLOAT"
800 "c.le.ps\t%v0,%1,%2\n\tc.le.ps\t%V0,%3,%4"
801 [(set_attr "type" "fcmp")
802 (set_attr "length" "8")
803 (set_attr "mode" "FPSW")])
805 (define_insn "mips_c_ngt_4s"
806 [(set (match_operand:CCV4 0 "register_operand" "=z")
807 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
808 (match_operand:V2SF 2 "register_operand" "f")
809 (match_operand:V2SF 3 "register_operand" "f")
810 (match_operand:V2SF 4 "register_operand" "f")]
812 "TARGET_PAIRED_SINGLE_FLOAT"
813 "c.ngt.ps\t%v0,%1,%2\n\tc.ngt.ps\t%V0,%3,%4"
814 [(set_attr "type" "fcmp")
815 (set_attr "length" "8")
816 (set_attr "mode" "FPSW")])
818 ;----------------------------------------------------------------------------
819 ; Floating Point Absolute Comparisions for Four Singles
820 ;----------------------------------------------------------------------------
821 (define_insn "mips_cabs_f_4s"
822 [(set (match_operand:CCV4 0 "register_operand" "=z")
823 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
824 (match_operand:V2SF 2 "register_operand" "f")
825 (match_operand:V2SF 3 "register_operand" "f")
826 (match_operand:V2SF 4 "register_operand" "f")]
829 "cabs.f.ps\t%v0,%1,%2\n\tcabs.f.ps\t%V0,%3,%4"
830 [(set_attr "type" "fcmp")
831 (set_attr "length" "8")
832 (set_attr "mode" "FPSW")])
834 (define_insn "mips_cabs_un_4s"
835 [(set (match_operand:CCV4 0 "register_operand" "=z")
836 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
837 (match_operand:V2SF 2 "register_operand" "f")
838 (match_operand:V2SF 3 "register_operand" "f")
839 (match_operand:V2SF 4 "register_operand" "f")]
842 "cabs.un.ps\t%v0,%1,%2\n\tcabs.un.ps\t%V0,%3,%4"
843 [(set_attr "type" "fcmp")
844 (set_attr "length" "8")
845 (set_attr "mode" "FPSW")])
847 (define_insn "mips_cabs_eq_4s"
848 [(set (match_operand:CCV4 0 "register_operand" "=z")
849 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
850 (match_operand:V2SF 2 "register_operand" "f")
851 (match_operand:V2SF 3 "register_operand" "f")
852 (match_operand:V2SF 4 "register_operand" "f")]
855 "cabs.eq.ps\t%v0,%1,%2\n\tcabs.eq.ps\t%V0,%3,%4"
856 [(set_attr "type" "fcmp")
857 (set_attr "length" "8")
858 (set_attr "mode" "FPSW")])
860 (define_insn "mips_cabs_ueq_4s"
861 [(set (match_operand:CCV4 0 "register_operand" "=z")
862 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
863 (match_operand:V2SF 2 "register_operand" "f")
864 (match_operand:V2SF 3 "register_operand" "f")
865 (match_operand:V2SF 4 "register_operand" "f")]
868 "cabs.ueq.ps\t%v0,%1,%2\n\tcabs.ueq.ps\t%V0,%3,%4"
869 [(set_attr "type" "fcmp")
870 (set_attr "length" "8")
871 (set_attr "mode" "FPSW")])
873 (define_insn "mips_cabs_olt_4s"
874 [(set (match_operand:CCV4 0 "register_operand" "=z")
875 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
876 (match_operand:V2SF 2 "register_operand" "f")
877 (match_operand:V2SF 3 "register_operand" "f")
878 (match_operand:V2SF 4 "register_operand" "f")]
881 "cabs.olt.ps\t%v0,%1,%2\n\tcabs.olt.ps\t%V0,%3,%4"
882 [(set_attr "type" "fcmp")
883 (set_attr "length" "8")
884 (set_attr "mode" "FPSW")])
886 (define_insn "mips_cabs_ult_4s"
887 [(set (match_operand:CCV4 0 "register_operand" "=z")
888 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
889 (match_operand:V2SF 2 "register_operand" "f")
890 (match_operand:V2SF 3 "register_operand" "f")
891 (match_operand:V2SF 4 "register_operand" "f")]
894 "cabs.ult.ps\t%v0,%1,%2\n\tcabs.ult.ps\t%V0,%3,%4"
895 [(set_attr "type" "fcmp")
896 (set_attr "length" "8")
897 (set_attr "mode" "FPSW")])
899 (define_insn "mips_cabs_ole_4s"
900 [(set (match_operand:CCV4 0 "register_operand" "=z")
901 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
902 (match_operand:V2SF 2 "register_operand" "f")
903 (match_operand:V2SF 3 "register_operand" "f")
904 (match_operand:V2SF 4 "register_operand" "f")]
907 "cabs.ole.ps\t%v0,%1,%2\n\tcabs.ole.ps\t%V0,%3,%4"
908 [(set_attr "type" "fcmp")
909 (set_attr "length" "8")
910 (set_attr "mode" "FPSW")])
912 (define_insn "mips_cabs_ule_4s"
913 [(set (match_operand:CCV4 0 "register_operand" "=z")
914 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
915 (match_operand:V2SF 2 "register_operand" "f")
916 (match_operand:V2SF 3 "register_operand" "f")
917 (match_operand:V2SF 4 "register_operand" "f")]
920 "cabs.ule.ps\t%v0,%1,%2\n\tcabs.ule.ps\t%V0,%3,%4"
921 [(set_attr "type" "fcmp")
922 (set_attr "length" "8")
923 (set_attr "mode" "FPSW")])
925 (define_insn "mips_cabs_sf_4s"
926 [(set (match_operand:CCV4 0 "register_operand" "=z")
927 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
928 (match_operand:V2SF 2 "register_operand" "f")
929 (match_operand:V2SF 3 "register_operand" "f")
930 (match_operand:V2SF 4 "register_operand" "f")]
933 "cabs.sf.ps\t%v0,%1,%2\n\tcabs.sf.ps\t%V0,%3,%4"
934 [(set_attr "type" "fcmp")
935 (set_attr "length" "8")
936 (set_attr "mode" "FPSW")])
938 (define_insn "mips_cabs_ngle_4s"
939 [(set (match_operand:CCV4 0 "register_operand" "=z")
940 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
941 (match_operand:V2SF 2 "register_operand" "f")
942 (match_operand:V2SF 3 "register_operand" "f")
943 (match_operand:V2SF 4 "register_operand" "f")]
946 "cabs.ngle.ps\t%v0,%1,%2\n\tcabs.ngle.ps\t%V0,%3,%4"
947 [(set_attr "type" "fcmp")
948 (set_attr "length" "8")
949 (set_attr "mode" "FPSW")])
951 (define_insn "mips_cabs_seq_4s"
952 [(set (match_operand:CCV4 0 "register_operand" "=z")
953 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
954 (match_operand:V2SF 2 "register_operand" "f")
955 (match_operand:V2SF 3 "register_operand" "f")
956 (match_operand:V2SF 4 "register_operand" "f")]
959 "cabs.seq.ps\t%v0,%1,%2\n\tcabs.seq.ps\t%V0,%3,%4"
960 [(set_attr "type" "fcmp")
961 (set_attr "length" "8")
962 (set_attr "mode" "FPSW")])
964 (define_insn "mips_cabs_ngl_4s"
965 [(set (match_operand:CCV4 0 "register_operand" "=z")
966 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
967 (match_operand:V2SF 2 "register_operand" "f")
968 (match_operand:V2SF 3 "register_operand" "f")
969 (match_operand:V2SF 4 "register_operand" "f")]
972 "cabs.ngl.ps\t%v0,%1,%2\n\tcabs.ngl.ps\t%V0,%3,%4"
973 [(set_attr "type" "fcmp")
974 (set_attr "length" "8")
975 (set_attr "mode" "FPSW")])
977 (define_insn "mips_cabs_lt_4s"
978 [(set (match_operand:CCV4 0 "register_operand" "=z")
979 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
980 (match_operand:V2SF 2 "register_operand" "f")
981 (match_operand:V2SF 3 "register_operand" "f")
982 (match_operand:V2SF 4 "register_operand" "f")]
985 "cabs.lt.ps\t%v0,%1,%2\n\tcabs.lt.ps\t%V0,%3,%4"
986 [(set_attr "type" "fcmp")
987 (set_attr "length" "8")
988 (set_attr "mode" "FPSW")])
990 (define_insn "mips_cabs_nge_4s"
991 [(set (match_operand:CCV4 0 "register_operand" "=z")
992 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
993 (match_operand:V2SF 2 "register_operand" "f")
994 (match_operand:V2SF 3 "register_operand" "f")
995 (match_operand:V2SF 4 "register_operand" "f")]
998 "cabs.nge.ps\t%v0,%1,%2\n\tcabs.nge.ps\t%V0,%3,%4"
999 [(set_attr "type" "fcmp")
1000 (set_attr "length" "8")
1001 (set_attr "mode" "FPSW")])
1003 (define_insn "mips_cabs_le_4s"
1004 [(set (match_operand:CCV4 0 "register_operand" "=z")
1005 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
1006 (match_operand:V2SF 2 "register_operand" "f")
1007 (match_operand:V2SF 3 "register_operand" "f")
1008 (match_operand:V2SF 4 "register_operand" "f")]
1011 "cabs.le.ps\t%v0,%1,%2\n\tcabs.le.ps\t%V0,%3,%4"
1012 [(set_attr "type" "fcmp")
1013 (set_attr "length" "8")
1014 (set_attr "mode" "FPSW")])
1016 (define_insn "mips_cabs_ngt_4s"
1017 [(set (match_operand:CCV4 0 "register_operand" "=z")
1018 (unspec:CCV4 [(match_operand:V2SF 1 "register_operand" "f")
1019 (match_operand:V2SF 2 "register_operand" "f")
1020 (match_operand:V2SF 3 "register_operand" "f")
1021 (match_operand:V2SF 4 "register_operand" "f")]
1024 "cabs.ngt.ps\t%v0,%1,%2\n\tcabs.ngt.ps\t%V0,%3,%4"
1025 [(set_attr "type" "fcmp")
1026 (set_attr "length" "8")
1027 (set_attr "mode" "FPSW")])
1029 ;----------------------------------------------------------------------------
1030 ; Floating Point Comparisions for Paired Singles
1031 ;----------------------------------------------------------------------------
1032 (define_insn "mips_c_f_ps"
1033 [(set (match_operand:CCV2 0 "register_operand" "=z")
1034 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1035 (match_operand:V2SF 2 "register_operand" "f")]
1037 "TARGET_PAIRED_SINGLE_FLOAT"
1039 [(set_attr "type" "fcmp")
1040 (set_attr "mode" "FPSW")])
1042 (define_insn "mips_c_un_ps"
1043 [(set (match_operand:CCV2 0 "register_operand" "=z")
1044 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1045 (match_operand:V2SF 2 "register_operand" "f")]
1047 "TARGET_PAIRED_SINGLE_FLOAT"
1049 [(set_attr "type" "fcmp")
1050 (set_attr "mode" "FPSW")])
1052 (define_insn "mips_c_eq_ps"
1053 [(set (match_operand:CCV2 0 "register_operand" "=z")
1054 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1055 (match_operand:V2SF 2 "register_operand" "f")]
1057 "TARGET_PAIRED_SINGLE_FLOAT"
1059 [(set_attr "type" "fcmp")
1060 (set_attr "mode" "FPSW")])
1062 (define_insn "mips_c_ueq_ps"
1063 [(set (match_operand:CCV2 0 "register_operand" "=z")
1064 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1065 (match_operand:V2SF 2 "register_operand" "f")]
1067 "TARGET_PAIRED_SINGLE_FLOAT"
1068 "c.ueq.ps\t%Z0%1,%2"
1069 [(set_attr "type" "fcmp")
1070 (set_attr "mode" "FPSW")])
1072 (define_insn "mips_c_olt_ps"
1073 [(set (match_operand:CCV2 0 "register_operand" "=z")
1074 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1075 (match_operand:V2SF 2 "register_operand" "f")]
1077 "TARGET_PAIRED_SINGLE_FLOAT"
1078 "c.olt.ps\t%Z0%1,%2"
1079 [(set_attr "type" "fcmp")
1080 (set_attr "mode" "FPSW")])
1082 (define_insn "mips_c_ult_ps"
1083 [(set (match_operand:CCV2 0 "register_operand" "=z")
1084 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1085 (match_operand:V2SF 2 "register_operand" "f")]
1087 "TARGET_PAIRED_SINGLE_FLOAT"
1088 "c.ult.ps\t%Z0%1,%2"
1089 [(set_attr "type" "fcmp")
1090 (set_attr "mode" "FPSW")])
1092 (define_insn "mips_c_ole_ps"
1093 [(set (match_operand:CCV2 0 "register_operand" "=z")
1094 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1095 (match_operand:V2SF 2 "register_operand" "f")]
1097 "TARGET_PAIRED_SINGLE_FLOAT"
1098 "c.ole.ps\t%Z0%1,%2"
1099 [(set_attr "type" "fcmp")
1100 (set_attr "mode" "FPSW")])
1102 (define_insn "mips_c_ule_ps"
1103 [(set (match_operand:CCV2 0 "register_operand" "=z")
1104 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1105 (match_operand:V2SF 2 "register_operand" "f")]
1107 "TARGET_PAIRED_SINGLE_FLOAT"
1108 "c.ule.ps\t%Z0%1,%2"
1109 [(set_attr "type" "fcmp")
1110 (set_attr "mode" "FPSW")])
1112 (define_insn "mips_c_sf_ps"
1113 [(set (match_operand:CCV2 0 "register_operand" "=z")
1114 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1115 (match_operand:V2SF 2 "register_operand" "f")]
1117 "TARGET_PAIRED_SINGLE_FLOAT"
1119 [(set_attr "type" "fcmp")
1120 (set_attr "mode" "FPSW")])
1122 (define_insn "mips_c_ngle_ps"
1123 [(set (match_operand:CCV2 0 "register_operand" "=z")
1124 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1125 (match_operand:V2SF 2 "register_operand" "f")]
1127 "TARGET_PAIRED_SINGLE_FLOAT"
1128 "c.ngle.ps\t%Z0%1,%2"
1129 [(set_attr "type" "fcmp")
1130 (set_attr "mode" "FPSW")])
1132 (define_insn "mips_c_seq_ps"
1133 [(set (match_operand:CCV2 0 "register_operand" "=z")
1134 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1135 (match_operand:V2SF 2 "register_operand" "f")]
1137 "TARGET_PAIRED_SINGLE_FLOAT"
1138 "c.seq.ps\t%Z0%1,%2"
1139 [(set_attr "type" "fcmp")
1140 (set_attr "mode" "FPSW")])
1142 (define_insn "mips_c_ngl_ps"
1143 [(set (match_operand:CCV2 0 "register_operand" "=z")
1144 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1145 (match_operand:V2SF 2 "register_operand" "f")]
1147 "TARGET_PAIRED_SINGLE_FLOAT"
1148 "c.ngl.ps\t%Z0%1,%2"
1149 [(set_attr "type" "fcmp")
1150 (set_attr "mode" "FPSW")])
1152 (define_insn "mips_c_lt_ps"
1153 [(set (match_operand:CCV2 0 "register_operand" "=z")
1154 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1155 (match_operand:V2SF 2 "register_operand" "f")]
1157 "TARGET_PAIRED_SINGLE_FLOAT"
1159 [(set_attr "type" "fcmp")
1160 (set_attr "mode" "FPSW")])
1162 (define_insn "mips_c_nge_ps"
1163 [(set (match_operand:CCV2 0 "register_operand" "=z")
1164 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1165 (match_operand:V2SF 2 "register_operand" "f")]
1167 "TARGET_PAIRED_SINGLE_FLOAT"
1168 "c.nge.ps\t%Z0%1,%2"
1169 [(set_attr "type" "fcmp")
1170 (set_attr "mode" "FPSW")])
1172 (define_insn "mips_c_le_ps"
1173 [(set (match_operand:CCV2 0 "register_operand" "=z")
1174 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1175 (match_operand:V2SF 2 "register_operand" "f")]
1177 "TARGET_PAIRED_SINGLE_FLOAT"
1179 [(set_attr "type" "fcmp")
1180 (set_attr "mode" "FPSW")])
1182 (define_insn "mips_c_ngt_ps"
1183 [(set (match_operand:CCV2 0 "register_operand" "=z")
1184 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1185 (match_operand:V2SF 2 "register_operand" "f")]
1187 "TARGET_PAIRED_SINGLE_FLOAT"
1188 "c.ngt.ps\t%Z0%1,%2"
1189 [(set_attr "type" "fcmp")
1190 (set_attr "mode" "FPSW")])
1192 ;----------------------------------------------------------------------------
1193 ; Floating Point Absolute Comparisions for Paired Singles
1194 ;----------------------------------------------------------------------------
1195 (define_insn "mips_cabs_f_ps"
1196 [(set (match_operand:CCV2 0 "register_operand" "=z")
1197 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1198 (match_operand:V2SF 2 "register_operand" "f")]
1201 "cabs.f.ps\t%Q0,%1,%2"
1202 [(set_attr "type" "fcmp")
1203 (set_attr "mode" "FPSW")])
1205 (define_insn "mips_cabs_un_ps"
1206 [(set (match_operand:CCV2 0 "register_operand" "=z")
1207 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1208 (match_operand:V2SF 2 "register_operand" "f")]
1211 "cabs.un.ps\t%Q0,%1,%2"
1212 [(set_attr "type" "fcmp")
1213 (set_attr "mode" "FPSW")])
1215 (define_insn "mips_cabs_eq_ps"
1216 [(set (match_operand:CCV2 0 "register_operand" "=z")
1217 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1218 (match_operand:V2SF 2 "register_operand" "f")]
1221 "cabs.eq.ps\t%Q0,%1,%2"
1222 [(set_attr "type" "fcmp")
1223 (set_attr "mode" "FPSW")])
1225 (define_insn "mips_cabs_ueq_ps"
1226 [(set (match_operand:CCV2 0 "register_operand" "=z")
1227 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1228 (match_operand:V2SF 2 "register_operand" "f")]
1231 "cabs.ueq.ps\t%Q0,%1,%2"
1232 [(set_attr "type" "fcmp")
1233 (set_attr "mode" "FPSW")])
1235 (define_insn "mips_cabs_olt_ps"
1236 [(set (match_operand:CCV2 0 "register_operand" "=z")
1237 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1238 (match_operand:V2SF 2 "register_operand" "f")]
1241 "cabs.olt.ps\t%Q0,%1,%2"
1242 [(set_attr "type" "fcmp")
1243 (set_attr "mode" "FPSW")])
1245 (define_insn "mips_cabs_ult_ps"
1246 [(set (match_operand:CCV2 0 "register_operand" "=z")
1247 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1248 (match_operand:V2SF 2 "register_operand" "f")]
1251 "cabs.ult.ps\t%Q0,%1,%2"
1252 [(set_attr "type" "fcmp")
1253 (set_attr "mode" "FPSW")])
1255 (define_insn "mips_cabs_ole_ps"
1256 [(set (match_operand:CCV2 0 "register_operand" "=z")
1257 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1258 (match_operand:V2SF 2 "register_operand" "f")]
1261 "cabs.ole.ps\t%Q0,%1,%2"
1262 [(set_attr "type" "fcmp")
1263 (set_attr "mode" "FPSW")])
1265 (define_insn "mips_cabs_ule_ps"
1266 [(set (match_operand:CCV2 0 "register_operand" "=z")
1267 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1268 (match_operand:V2SF 2 "register_operand" "f")]
1271 "cabs.ule.ps\t%Q0,%1,%2"
1272 [(set_attr "type" "fcmp")
1273 (set_attr "mode" "FPSW")])
1275 (define_insn "mips_cabs_sf_ps"
1276 [(set (match_operand:CCV2 0 "register_operand" "=z")
1277 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1278 (match_operand:V2SF 2 "register_operand" "f")]
1281 "cabs.sf.ps\t%Q0,%1,%2"
1282 [(set_attr "type" "fcmp")
1283 (set_attr "mode" "FPSW")])
1285 (define_insn "mips_cabs_ngle_ps"
1286 [(set (match_operand:CCV2 0 "register_operand" "=z")
1287 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1288 (match_operand:V2SF 2 "register_operand" "f")]
1291 "cabs.ngle.ps\t%Q0,%1,%2"
1292 [(set_attr "type" "fcmp")
1293 (set_attr "mode" "FPSW")])
1295 (define_insn "mips_cabs_seq_ps"
1296 [(set (match_operand:CCV2 0 "register_operand" "=z")
1297 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1298 (match_operand:V2SF 2 "register_operand" "f")]
1301 "cabs.seq.ps\t%Q0,%1,%2"
1302 [(set_attr "type" "fcmp")
1303 (set_attr "mode" "FPSW")])
1305 (define_insn "mips_cabs_ngl_ps"
1306 [(set (match_operand:CCV2 0 "register_operand" "=z")
1307 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1308 (match_operand:V2SF 2 "register_operand" "f")]
1311 "cabs.ngl.ps\t%Q0,%1,%2"
1312 [(set_attr "type" "fcmp")
1313 (set_attr "mode" "FPSW")])
1315 (define_insn "mips_cabs_lt_ps"
1316 [(set (match_operand:CCV2 0 "register_operand" "=z")
1317 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1318 (match_operand:V2SF 2 "register_operand" "f")]
1321 "cabs.lt.ps\t%Q0,%1,%2"
1322 [(set_attr "type" "fcmp")
1323 (set_attr "mode" "FPSW")])
1325 (define_insn "mips_cabs_nge_ps"
1326 [(set (match_operand:CCV2 0 "register_operand" "=z")
1327 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1328 (match_operand:V2SF 2 "register_operand" "f")]
1331 "cabs.nge.ps\t%Q0,%1,%2"
1332 [(set_attr "type" "fcmp")
1333 (set_attr "mode" "FPSW")])
1335 (define_insn "mips_cabs_le_ps"
1336 [(set (match_operand:CCV2 0 "register_operand" "=z")
1337 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1338 (match_operand:V2SF 2 "register_operand" "f")]
1341 "cabs.le.ps\t%Q0,%1,%2"
1342 [(set_attr "type" "fcmp")
1343 (set_attr "mode" "FPSW")])
1345 (define_insn "mips_cabs_ngt_ps"
1346 [(set (match_operand:CCV2 0 "register_operand" "=z")
1347 (unspec:CCV2 [(match_operand:V2SF 1 "register_operand" "f")
1348 (match_operand:V2SF 2 "register_operand" "f")]
1351 "cabs.ngt.ps\t%Q0,%1,%2"
1352 [(set_attr "type" "fcmp")
1353 (set_attr "mode" "FPSW")])
1355 ;----------------------------------------------------------------------------
1356 ; Floating Point Branch Instructions.
1357 ;----------------------------------------------------------------------------
1359 ; Branch on Any of Four Floating Point Condition Codes True
1360 (define_insn "bc1any4t"
1362 (if_then_else (ne:CCV4 (match_operand:CCV4 0 "register_operand" "z")
1364 (label_ref (match_operand 1 "" ""))
1367 "%*bc1any4t\t%Q0,%1%/"
1368 [(set_attr "type" "branch")
1369 (set_attr "mode" "none")])
1371 ; Branch on Any of Four Floating Point Condition Codes False
1372 (define_insn "bc1any4f"
1374 (if_then_else (ne:CCV4 (match_operand:CCV4 0 "register_operand" "z")
1376 (label_ref (match_operand 1 "" ""))
1379 "%*bc1any4f\t%Q0,%1%/"
1380 [(set_attr "type" "branch")
1381 (set_attr "mode" "none")])
1383 ; Branch on Any of Two Floating Point Condition Codes True
1384 (define_insn "bc1any2t"
1386 (if_then_else (ne:CCV2 (match_operand:CCV2 0 "register_operand" "z")
1388 (label_ref (match_operand 1 "" ""))
1391 "%*bc1any2t\t%Q0,%1%/"
1392 [(set_attr "type" "branch")
1393 (set_attr "mode" "none")])
1395 ; Branch on Any of Two Floating Point Condition Codes False
1396 (define_insn "bc1any2f"
1398 (if_then_else (ne:CCV2 (match_operand:CCV2 0 "register_operand" "z")
1400 (label_ref (match_operand 1 "" ""))
1403 "%*bc1any2f\t%Q0,%1%/"
1404 [(set_attr "type" "branch")
1405 (set_attr "mode" "none")])
1407 ;----------------------------------------------------------------------------
1408 ; Floating Point Reduced Precision Reciprocal Square Root Instructions.
1409 ;----------------------------------------------------------------------------
1411 (define_insn "mips_rsqrt1_<fmt>"
1412 [(set (match_operand:ANYF 0 "register_operand" "=f")
1413 (unspec:ANYF [(match_operand:ANYF 1 "register_operand" "f")]
1416 "rsqrt1.<fmt>\t%0,%1"
1417 [(set_attr "type" "frsqrt")
1418 (set_attr "mode" "<UNITMODE>")])
1420 (define_insn "mips_rsqrt2_<fmt>"
1421 [(set (match_operand:ANYF 0 "register_operand" "=f")
1422 (unspec:ANYF [(match_operand:ANYF 1 "register_operand" "f")
1423 (match_operand:ANYF 2 "register_operand" "f")]
1426 "rsqrt2.<fmt>\t%0,%1,%2"
1427 [(set_attr "type" "frsqrt")
1428 (set_attr "mode" "<UNITMODE>")])
1430 (define_insn "mips_recip1_<fmt>"
1431 [(set (match_operand:ANYF 0 "register_operand" "=f")
1432 (unspec:ANYF [(match_operand:ANYF 1 "register_operand" "f")]
1435 "recip1.<fmt>\t%0,%1"
1436 [(set_attr "type" "frdiv")
1437 (set_attr "mode" "<UNITMODE>")])
1439 (define_insn "mips_recip2_<fmt>"
1440 [(set (match_operand:ANYF 0 "register_operand" "=f")
1441 (unspec:ANYF [(match_operand:ANYF 1 "register_operand" "f")
1442 (match_operand:ANYF 2 "register_operand" "f")]
1445 "recip2.<fmt>\t%0,%1,%2"
1446 [(set_attr "type" "frdiv")
1447 (set_attr "mode" "<UNITMODE>")])