* c-ada-spec.c (dump_number): Add FLOAT_P parameter.
[official-gcc.git] / gcc / config / arc / fpu.md
blob5c56f76c67996ac542974fc2347b4d46bda2025c
1 ;; ::::::::::::::::::::
2 ;; ::
3 ;; :: 32-bit floating point arithmetic
4 ;; ::
5 ;; ::::::::::::::::::::
7 ;; Addition
8 (define_insn "*addsf3_fpu"
9   [(set (match_operand:SF 0 "register_operand"           "=r,r,r,r,r")
10         (plus:SF (match_operand:SF 1 "nonmemory_operand" "%0,r,0,r,F")
11                  (match_operand:SF 2 "nonmemory_operand"  "r,r,F,F,r")))]
12   "TARGET_FP_SP_BASE
13    && (register_operand (operands[1], SFmode)
14        || register_operand (operands[2], SFmode))"
15   "fsadd%? %0,%1,%2"
16   [(set_attr "length" "4,4,8,8,8")
17    (set_attr "iscompact" "false")
18    (set_attr "type" "fpu")
19    (set_attr "predicable" "yes,no,yes,no,no")
20    (set_attr "cond" "canuse,nocond,canuse_limm,nocond,nocond")
21    ])
23 ;; Subtraction
24 (define_insn "*subsf3_fpu"
25   [(set (match_operand:SF 0 "register_operand"           "=r,r,r,r,r")
26         (minus:SF (match_operand:SF 1 "nonmemory_operand" "0,r,0,r,F")
27                   (match_operand:SF 2 "nonmemory_operand" "r,r,F,F,r")))]
28   "TARGET_FP_SP_BASE
29    && (register_operand (operands[1], SFmode)
30        || register_operand (operands[2], SFmode))"
31   "fssub%? %0,%1,%2"
32   [(set_attr "length" "4,4,8,8,8")
33    (set_attr "iscompact" "false")
34    (set_attr "type" "fpu")
35    (set_attr "predicable" "yes,no,yes,no,no")
36    (set_attr "cond" "canuse,nocond,canuse_limm,nocond,nocond")
37    ])
39 ;; Multiplication
40 (define_insn "*mulsf3_fpu"
41   [(set (match_operand:SF 0 "register_operand"           "=r,r,r,r,r")
42         (mult:SF (match_operand:SF 1 "nonmemory_operand" "%0,r,0,r,F")
43                  (match_operand:SF 2 "nonmemory_operand"  "r,r,F,F,r")))]
44   "TARGET_FP_SP_BASE
45    && (register_operand (operands[1], SFmode)
46        || register_operand (operands[2], SFmode))"
47   "fsmul%? %0,%1,%2"
48   [(set_attr "length" "4,4,8,8,8")
49    (set_attr "iscompact" "false")
50    (set_attr "type" "fpu")
51    (set_attr "predicable" "yes,no,yes,no,no")
52    (set_attr "cond" "canuse,nocond,canuse_limm,nocond,nocond")
53    ])
55 ;; Multiplication with addition/subtraction
56 (define_expand "fmasf4"
57   [(set (match_operand:SF 0 "register_operand" "")
58         (fma:SF (match_operand:SF 1 "nonmemory_operand" "")
59                 (match_operand:SF 2 "nonmemory_operand" "")
60                 (match_operand:SF 3 "nonmemory_operand" "")))]
61   "TARGET_FP_SP_FUSED"
62   "{
63    rtx tmp;
64    tmp = gen_rtx_REG (SFmode, ACCL_REGNO);
65    emit_move_insn (tmp, operands[3]);
66    operands[3] = tmp;
67    }")
69 (define_expand "fnmasf4"
70   [(set (match_operand:SF 0 "register_operand" "")
71         (fma:SF (neg:SF (match_operand:SF 1 "nonmemory_operand" ""))
72                 (match_operand:SF 2 "nonmemory_operand"         "")
73                 (match_operand:SF 3 "nonmemory_operand"         "")))]
74   "TARGET_FP_SP_FUSED"
75   "{
76    rtx tmp;
77    tmp = gen_rtx_REG (SFmode, ACCL_REGNO);
78    emit_move_insn (tmp, operands[3]);
79    operands[3] = tmp;
80 }")
82 (define_insn "fmasf4_fpu"
83   [(set (match_operand:SF 0 "register_operand"          "=r,r,r,r,r")
84         (fma:SF (match_operand:SF 1 "nonmemory_operand" "%0,r,0,r,F")
85                 (match_operand:SF 2 "nonmemory_operand"  "r,r,F,F,r")
86                 (match_operand:SF 3 "mlo_operand" "")))]
87   "TARGET_FP_SP_FUSED
88    && (register_operand (operands[1], SFmode)
89        || register_operand (operands[2], SFmode))"
90   "fsmadd%? %0,%1,%2"
91   [(set_attr "length" "4,4,8,8,8")
92    (set_attr "predicable" "yes,no,yes,no,no")
93    (set_attr "cond" "canuse,nocond,canuse_limm,nocond,nocond")
94    (set_attr "iscompact" "false")
95    (set_attr "type" "fpu")])
97 (define_insn "fnmasf4_fpu"
98   [(set (match_operand:SF 0 "register_operand"                  "=r,r,r,r,r")
99         (fma:SF (neg:SF (match_operand:SF 1 "nonmemory_operand" "%0,r,0,r,F"))
100                 (match_operand:SF 2 "nonmemory_operand"          "r,r,F,F,r")
101                 (match_operand:SF 3 "mlo_operand" "")))]
102   "TARGET_FP_SP_FUSED
103    && (register_operand (operands[1], SFmode)
104        || register_operand (operands[2], SFmode))"
105   "fsmsub%? %0,%1,%2"
106   [(set_attr "length" "4,4,8,8,8")
107    (set_attr "predicable" "yes,no,yes,no,no")
108    (set_attr "cond" "canuse,nocond,canuse_limm,nocond,nocond")
109    (set_attr "iscompact" "false")
110    (set_attr "type" "fpu")])
112 (define_expand "fmadf4"
113   [(match_operand:DF 0 "even_register_operand" "")
114    (match_operand:DF 1 "even_register_operand" "")
115    (match_operand:DF 2 "even_register_operand" "")
116    (match_operand:DF 3 "even_register_operand" "")]
117   "TARGET_FP_DP_FUSED"
118   "{
119    emit_insn (gen_fmadf4_split (operands[0], operands[1], operands[2], operands[3]));
120    DONE;
121    }")
123 (define_insn_and_split "fmadf4_split"
124   [(set (match_operand:DF 0 "even_register_operand"        "")
125         (fma:DF (match_operand:DF 1 "even_register_operand" "")
126                 (match_operand:DF 2 "even_register_operand" "")
127                 (match_operand:DF 3 "even_register_operand" "")))
128    (clobber (reg:DF ARCV2_ACC))]
129   "TARGET_FP_DP_FUSED"
130   "#"
131   "TARGET_FP_DP_FUSED"
132   [(const_int 0)]
133   "{
134    rtx acc_reg = gen_rtx_REG (DFmode, ACC_REG_FIRST);
135    emit_move_insn (acc_reg, operands[3]);
136    emit_insn (gen_fmadf4_fpu (operands[0], operands[1], operands[2]));
137    DONE;
138   }"
141 (define_expand "fnmadf4"
142   [(match_operand:DF 0 "even_register_operand" "")
143    (match_operand:DF 1 "even_register_operand" "")
144    (match_operand:DF 2 "even_register_operand" "")
145    (match_operand:DF 3 "even_register_operand" "")]
146   "TARGET_FP_DP_FUSED"
147   "{
148    emit_insn (gen_fnmadf4_split (operands[0], operands[1], operands[2], operands[3]));
149    DONE;
150    }")
152 (define_insn_and_split "fnmadf4_split"
153   [(set (match_operand:DF 0 "even_register_operand"                 "")
154         (fma:DF (neg:DF (match_operand:DF 1 "even_register_operand" ""))
155                 (match_operand:DF 2 "even_register_operand"         "")
156                 (match_operand:DF 3 "even_register_operand"         "")))
157    (clobber (reg:DF ARCV2_ACC))]
158   "TARGET_FP_DP_FUSED"
159   "#"
160   "TARGET_FP_DP_FUSED"
161   [(const_int 0)]
162   "{
163    rtx acc_reg = gen_rtx_REG (DFmode, ACC_REG_FIRST);
164    emit_move_insn (acc_reg, operands[3]);
165    emit_insn (gen_fnmadf4_fpu (operands[0], operands[1], operands[2]));
166    DONE;
167   }")
169 (define_insn "fmadf4_fpu"
170   [(set (match_operand:DF 0 "even_register_operand"         "=r,r")
171         (fma:DF (match_operand:DF 1 "even_register_operand" "%0,r")
172                 (match_operand:DF 2 "even_register_operand"  "r,r")
173                 (reg:DF ARCV2_ACC)))]
174   "TARGET_FP_DP_FUSED"
175   "fdmadd%? %0,%1,%2"
176   [(set_attr "length" "4,4")
177    (set_attr "predicable" "yes,no")
178    (set_attr "cond" "canuse,nocond")
179    (set_attr "iscompact" "false")
180    (set_attr "type" "fpu")])
182 (define_insn "fnmadf4_fpu"
183   [(set (match_operand:DF 0 "even_register_operand"                 "=r,r")
184         (fma:DF (neg:DF (match_operand:DF 1 "even_register_operand" "%0,r"))
185                 (match_operand:DF 2 "even_register_operand"          "r,r")
186                 (reg:DF ARCV2_ACC)))]
187   "TARGET_FP_DP_FUSED"
188   "fdmsub%? %0,%1,%2"
189   [(set_attr "length" "4,4")
190    (set_attr "predicable" "yes,no")
191    (set_attr "cond" "canuse,nocond")
192    (set_attr "iscompact" "false")
193    (set_attr "type" "fpu")])
195 ;; Division
196 (define_insn "*divsf3_fpu"
197   [(set (match_operand:SF 0 "register_operand"         "=r,r,r,r,r")
198         (div:SF (match_operand:SF 1 "nonmemory_operand" "0,r,0,r,F")
199                 (match_operand:SF 2 "nonmemory_operand" "r,r,F,F,r")))]
200   "TARGET_FP_SP_SQRT
201    && (register_operand (operands[1], SFmode)
202        || register_operand (operands[2], SFmode))"
203   "fsdiv%? %0,%1,%2"
204   [(set_attr "length" "4,4,8,8,8")
205    (set_attr "iscompact" "false")
206    (set_attr "type" "fpu")
207    (set_attr "predicable" "yes,no,yes,no,no")
208    (set_attr "cond" "canuse,nocond,canuse_limm,nocond,nocond")
209    ])
211 ;; Negation
212 ;; see pattern in arc.md
214 ;; Absolute value
215 ;; see pattern in arc.md
217 ;; Square root
218 (define_insn "sqrtsf2_fpu"
219   [(set (match_operand:SF 0 "register_operand"           "=r,r")
220         (sqrt:SF (match_operand:SF 1 "nonmemory_operand"  "r,F")))]
221   "TARGET_FP_SP_SQRT"
222   "fssqrt %0,%1"
223   [(set_attr "length" "4,8")
224    (set_attr "type" "fpu")])
226 ;; Comparison
227 (define_insn "*cmpsf_fpu"
228   [(set (reg:CC_FPU CC_REG)
229         (compare:CC_FPU (match_operand:SF 0 "register_operand"  "r,r")
230                         (match_operand:SF 1 "nonmemory_operand" "r,F")))]
231   "TARGET_FP_SP_BASE"
232   "fscmp%? %0, %1"
233   [(set_attr "length" "4,8")
234    (set_attr "iscompact" "false")
235    (set_attr "cond" "set")
236    (set_attr "type" "fpu")
237    (set_attr "predicable" "yes,yes")])
239 (define_insn "*cmpsf_fpu_uneq"
240   [(set (reg:CC_FPU_UNEQ CC_REG)
241         (compare:CC_FPU_UNEQ
242          (match_operand:SF 0 "register_operand"  "r,r")
243          (match_operand:SF 1 "nonmemory_operand" "r,F")))]
244   "TARGET_FP_SP_BASE"
245   "fscmp %0, %1\\n\\tmov.v.f 0,0\\t;set Z flag"
246   [(set_attr "length" "8,12")
247    (set_attr "iscompact" "false")
248    (set_attr "cond" "set")
249    (set_attr "type" "fpu")])
251 ;; ::::::::::::::::::::
252 ;; ::
253 ;; :: 64-bit floating point arithmetic
254 ;; ::
255 ;; ::::::::::::::::::::
257 ;; Addition
258 (define_insn "*adddf3_fpu"
259   [(set (match_operand:DF 0 "even_register_operand"           "=r,r")
260         (plus:DF (match_operand:DF 1 "even_register_operand"  "%0,r")
261                  (match_operand:DF 2 "even_register_operand"   "r,r")))]
262   "TARGET_FP_DP_BASE"
263   "fdadd%? %0,%1,%2"
264   [(set_attr "length" "4,4")
265    (set_attr "iscompact" "false")
266    (set_attr "type" "fpu")
267    (set_attr "predicable" "yes,no")
268    (set_attr "cond" "canuse,nocond")
269    ])
272 ;; Subtraction
273 (define_insn "*subdf3_fpu"
274   [(set (match_operand:DF 0 "even_register_operand"           "=r,r")
275         (minus:DF (match_operand:DF 1 "even_register_operand"  "0,r")
276                   (match_operand:DF 2 "even_register_operand"  "r,r")))]
277   "TARGET_FP_DP_BASE"
278   "fdsub%? %0,%1,%2"
279   [(set_attr "length" "4,4")
280    (set_attr "iscompact" "false")
281    (set_attr "type" "fpu")
282    (set_attr "predicable" "yes,no")
283    (set_attr "cond" "canuse,nocond")
284    ])
286 ;; Multiplication
287 (define_insn "*muldf3_fpu"
288   [(set (match_operand:DF 0 "even_register_operand"           "=r,r")
289         (mult:DF (match_operand:DF 1 "even_register_operand"  "%0,r")
290                  (match_operand:DF 2 "even_register_operand"   "r,r")))]
291   "TARGET_FP_DP_BASE"
292   "fdmul%? %0,%1,%2"
293   [(set_attr "length" "4,4")
294    (set_attr "iscompact" "false")
295    (set_attr "type" "fpu")
296    (set_attr "predicable" "yes,no")
297    (set_attr "cond" "canuse,nocond")
298    ])
300 ;; Division
301 (define_insn "divdf3"
302   [(set (match_operand:DF 0 "even_register_operand"         "=r,r")
303         (div:DF (match_operand:DF 1 "even_register_operand"  "0,r")
304                 (match_operand:DF 2 "even_register_operand"  "r,r")))]
305   "TARGET_FP_DP_SQRT"
306   "fddiv%? %0,%1,%2"
307   [(set_attr "length" "4,4")
308    (set_attr "iscompact" "false")
309    (set_attr "type" "fpu")
310    (set_attr "predicable" "yes,no")
311    (set_attr "cond" "canuse,nocond")
312    ])
314 ;; Square root
315 (define_insn "sqrtdf2"
316   [(set (match_operand:DF 0 "even_register_operand"          "=r")
317         (sqrt:DF (match_operand:DF 1 "even_register_operand"  "r")))]
318   "TARGET_FP_DP_SQRT"
319   "fdsqrt %0,%1"
320   [(set_attr "length" "4")
321    (set_attr "type" "fpu")])
323 ;; Comparison
324 (define_insn "*cmpdf_fpu"
325   [(set (reg:CC_FPU CC_REG)
326         (compare:CC_FPU (match_operand:DF 0 "even_register_operand"  "r")
327                         (match_operand:DF 1 "even_register_operand"  "r")))]
328   "TARGET_FP_DP_BASE"
329   "fdcmp%? %0, %1"
330   [(set_attr "length" "4")
331    (set_attr "iscompact" "false")
332    (set_attr "cond" "set")
333    (set_attr "type" "fpu")
334    (set_attr "predicable" "yes")])
336 (define_insn "*cmpdf_fpu_uneq"
337   [(set (reg:CC_FPU_UNEQ CC_REG)
338         (compare:CC_FPU_UNEQ
339          (match_operand:DF 0 "even_register_operand"  "r")
340          (match_operand:DF 1 "even_register_operand"  "r")))]
341   "TARGET_FP_DP_BASE"
342   "fdcmp %0, %1\\n\\tmov.v.f 0,0\\t;set Z flag"
343   [(set_attr "length" "8")
344    (set_attr "iscompact" "false")
345    (set_attr "cond" "set")
346    (set_attr "type" "fpu")])
348 ;; ::::::::::::::::::::
349 ;; ::
350 ;; :: Conversion routines
351 ;; ::
352 ;; ::::::::::::::::::::
354 ;; SF->DF
355 (define_insn "extendsfdf2"
356   [(set (match_operand:DF 0 "even_register_operand"             "=r,r")
357         (float_extend:DF (match_operand:SF 1 "register_operand"  "0,r")))]
358   "TARGET_FP_DP_CONV"
359   "fcvt32_64%? %0,%1,0x04\\t;fs2d %0,%1"
360   [(set_attr "length" "4,4")
361    (set_attr "iscompact" "false")
362    (set_attr "type" "fpu")
363    (set_attr "predicable" "yes,no")]
366 ;; SI->DF
367 (define_insn "floatsidf2"
368   [(set (match_operand:DF 0 "even_register_operand"      "=r,r")
369         (float:DF (match_operand:SI 1 "register_operand"  "0,r")))]
370   "TARGET_FP_DP_CONV"
371   "fcvt32_64%? %0,%1,0x02\\t;fint2d %0,%1"
372   [(set_attr "length" "4,4")
373    (set_attr "iscompact" "false")
374    (set_attr "type" "fpu")
375    (set_attr "predicable" "yes,no")]
378 ;; uSI->DF
379 (define_insn "floatunssidf2"
380   [(set (match_operand:DF 0 "even_register_operand"               "=r,r")
381         (unsigned_float:DF (match_operand:SI 1 "register_operand"  "0,r")))]
382   "TARGET_FP_DP_CONV"
383   "fcvt32_64%? %0,%1,0x00\\t;fuint2d %0,%1"
384   [(set_attr "length" "4,4")
385    (set_attr "iscompact" "false")
386    (set_attr "type" "fpu")
387    (set_attr "predicable" "yes,no")]
390 ;; SF->uDI (using rounding towards zero)
391 (define_insn "fixuns_truncsfdi2"
392   [(set (match_operand:DI 0 "even_register_operand"                    "=r,r")
393         (unsigned_fix:DI (fix:SF (match_operand:SF 1 "register_operand" "0,r"))))]
394   "TARGET_FP_DP_CONV"
395   "fcvt32_64%? %0,%1,0x09\\t;fs2ul_rz %0,%1"
396   [(set_attr "length" "4,4")
397    (set_attr "iscompact" "false")
398    (set_attr "type" "fpu")
399    (set_attr "predicable" "yes,no")]
402 ;; SF->DI (using rounding towards zero)
403 (define_insn "fix_truncsfdi2"
404   [(set (match_operand:DI 0 "even_register_operand"           "=r,r")
405         (fix:DI (fix:SF (match_operand:SF 1 "register_operand" "0,r"))))]
406   "TARGET_FP_DP_CONV"
407   "fcvt32_64%? %0,%1,0x0B\\t;fs2l_rz %0,%1"
408   [(set_attr "length" "4,4")
409    (set_attr "iscompact" "false")
410    (set_attr "type" "fpu")
411    (set_attr "predicable" "yes,no")]
414 ;; SI->SF
415 (define_insn "floatsisf2_fpu"
416   [(set (match_operand:SF 0 "register_operand"           "=r,r")
417         (float:SF (match_operand:SI 1 "register_operand"  "0,r")))]
418   "TARGET_FP_SP_CONV"
419   "fcvt32%? %0,%1,0x02\\t;fint2s %0,%1"
420   [(set_attr "length" "4,4")
421    (set_attr "iscompact" "false")
422    (set_attr "type" "fpu")
423    (set_attr "predicable" "yes,no")]
426 ;; uSI->SF
427 (define_insn "floatunssisf2"
428   [(set (match_operand:SF 0 "register_operand"                    "=r,r")
429         (unsigned_float:SF (match_operand:SI 1 "register_operand"  "0,r")))]
430   "TARGET_FP_SP_CONV"
431   "fcvt32%? %0,%1,0x00\\t;fuint2s %0,%1"
432   [(set_attr "length" "4,4")
433    (set_attr "iscompact" "false")
434    (set_attr "type" "fpu")
435    (set_attr "predicable" "yes,no")]
438 ;; SF->uSI (using rounding towards zero)
439 (define_insn "fixuns_truncsfsi2"
440   [(set (match_operand:SI 0 "register_operand"                         "=r,r")
441         (unsigned_fix:SI (fix:SF (match_operand:SF 1 "register_operand" "0,r"))))]
442   "TARGET_FP_SP_CONV"
443   "fcvt32%? %0,%1,0x09\\t;fs2uint_rz %0,%1"
444   [(set_attr "length" "4,4")
445    (set_attr "iscompact" "false")
446    (set_attr "type" "fpu")
447    (set_attr "predicable" "yes,no")]
450 ;; SF->SI (using rounding towards zero)
451 (define_insn "fix_truncsfsi2_fpu"
452   [(set (match_operand:SI 0 "register_operand"                "=r,r")
453         (fix:SI (fix:SF (match_operand:SF 1 "register_operand" "0,r"))))]
454   "TARGET_FP_SP_CONV"
455   "fcvt32%? %0,%1,0x0B\\t;fs2int_rz %0,%1"
456   [(set_attr "length" "4,4")
457    (set_attr "iscompact" "false")
458    (set_attr "type" "fpu")
459    (set_attr "predicable" "yes,no")]
462 ;; DI->DF
463 (define_insn "floatdidf2"
464   [(set (match_operand:DF 0 "even_register_operand"          "=r,r")
465         (float:DF (match_operand:DI 1 "even_register_operand" "0,r")))]
466   "TARGET_FP_DP_CONV"
467   "fcvt64%? %0,%1,0x02\\t;fl2d %0,%1"
468   [(set_attr "length" "4,4")
469    (set_attr "iscompact" "false")
470    (set_attr "type" "fpu")
471    (set_attr "predicable" "yes,no")]
474 ;; uDI->DF
475 (define_insn "floatunsdidf2"
476   [(set (match_operand:DF 0 "even_register_operand"                   "=r,r")
477         (unsigned_float:DF (match_operand:DI 1 "even_register_operand" "0,r")))]
478   "TARGET_FP_DP_CONV"
479   "fcvt64%? %0,%1,0x00\\t;ful2d %0,%1"
480   [(set_attr "length" "4,4")
481    (set_attr "iscompact" "false")
482    (set_attr "type" "fpu")
483    (set_attr "predicable" "yes,no")]
486 ;; DF->uDI (using rounding towards zero)
487 (define_insn "fixuns_truncdfdi2"
488   [(set (match_operand:DI 0 "even_register_operand"                         "=r,r")
489         (unsigned_fix:DI (fix:DF (match_operand:DF 1 "even_register_operand" "0,r"))))]
490   "TARGET_FP_DP_CONV"
491   "fcvt64%? %0,%1,0x09\\t;fd2ul_rz %0,%1"
492   [(set_attr "length" "4,4")
493    (set_attr "iscompact" "false")
494    (set_attr "type" "fpu")
495    (set_attr "predicable" "yes,no")]
498 ;; DF->DI (using rounding towards zero)
499 (define_insn "fix_truncdfdi2"
500   [(set (match_operand:DI 0 "even_register_operand"                "=r,r")
501         (fix:DI (fix:DF (match_operand:DF 1 "even_register_operand" "0,r"))))]
502   "TARGET_FP_DP_CONV"
503   "fcvt64%? %0,%1,0x0B\\t;fd2l_rz %0,%1"
504   [(set_attr "length" "4,4")
505    (set_attr "iscompact" "false")
506    (set_attr "type" "fpu")
507    (set_attr "predicable" "yes,no")]
510 ;; DF->SF
511 (define_insn "truncdfsf2"
512   [(set (match_operand:SF 0 "register_operand"                        "=r,r")
513         (float_truncate:SF (match_operand:DF 1 "even_register_operand" "0,r")))]
514   "TARGET_FP_DP_CONV"
515   "fcvt64_32%? %0,%1,0x04\\t;fd2s %0,%1"
516   [(set_attr "length" "4,4")
517    (set_attr "iscompact" "false")
518    (set_attr "type" "fpu")
519    (set_attr "predicable" "yes,no")]
522 ;; DI->SF
523 (define_insn "floatdisf2"
524   [(set (match_operand:SF 0 "register_operand"               "=r,r")
525         (float:SF (match_operand:DI 1 "even_register_operand" "0,r")))]
526   "TARGET_FP_DP_CONV"
527   "fcvt64_32%? %0,%1,0x02\\t;fl2s %0,%1"
528   [(set_attr "length" "4,4")
529    (set_attr "iscompact" "false")
530    (set_attr "type" "fpu")
531    (set_attr "predicable" "yes,no")]
534 ;; uDI->SF
535 (define_insn "floatunsdisf2"
536   [(set (match_operand:SF 0 "register_operand"                        "=r,r")
537         (unsigned_float:SF (match_operand:DI 1 "even_register_operand" "0,r")))]
538   "TARGET_FP_DP_CONV"
539   "fcvt64_32%? %0,%1,0x00\\t;ful2s %0,%1"
540   [(set_attr "length" "4,4")
541    (set_attr "iscompact" "false")
542    (set_attr "type" "fpu")
543    (set_attr "predicable" "yes,no")]
546 ;; DF->uSI (using rounding towards zero)
547 (define_insn "fixuns_truncdfsi2"
548   [(set (match_operand:SI 0 "register_operand"                              "=r,r")
549         (unsigned_fix:SI (fix:DF (match_operand:DF 1 "even_register_operand" "0,r"))))]
550   "TARGET_FP_DP_CONV"
551   "fcvt64_32%? %0,%1,0x09\\t;fd2uint_rz %0,%1"
552   [(set_attr "length" "4,4")
553    (set_attr "iscompact" "false")
554    (set_attr "type" "fpu")
555    (set_attr "predicable" "yes,no")]
558 ;; DF->SI (using rounding towards zero)
559 (define_insn "fix_truncdfsi2"
560   [(set (match_operand:SI 0 "register_operand"                     "=r,r")
561         (fix:SI (fix:DF (match_operand:DF 1 "even_register_operand" "0,r"))))]
562   "TARGET_FP_DP_CONV"
563   "fcvt64_32%? %0,%1,0x0B\\t;fd2int_rz %0,%1"
564   [(set_attr "length" "4,4")
565    (set_attr "iscompact" "false")
566    (set_attr "type" "fpu")
567    (set_attr "predicable" "yes,no")]