Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/arm/vfp.md @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | b7f97abdc517 |
comparison
equal
deleted
inserted
replaced
52:c156f1bd5cd9 | 55:77e2b8dfacca |
---|---|
49 ;; SImode moves | 49 ;; SImode moves |
50 ;; ??? For now do not allow loading constants into vfp regs. This causes | 50 ;; ??? For now do not allow loading constants into vfp regs. This causes |
51 ;; problems because small constants get converted into adds. | 51 ;; problems because small constants get converted into adds. |
52 (define_insn "*arm_movsi_vfp" | 52 (define_insn "*arm_movsi_vfp" |
53 [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m ,*t,r,*t,*t, *Uv") | 53 [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m ,*t,r,*t,*t, *Uv") |
54 (match_operand:SI 1 "general_operand" "rk, I,K,N,mi,rk,r,*t,*t,*Uvi,*t"))] | 54 (match_operand:SI 1 "general_operand" "rk, I,K,j,mi,rk,r,*t,*t,*Uvi,*t"))] |
55 "TARGET_ARM && TARGET_VFP && TARGET_HARD_FLOAT | 55 "TARGET_ARM && TARGET_VFP && TARGET_HARD_FLOAT |
56 && ( s_register_operand (operands[0], SImode) | 56 && ( s_register_operand (operands[0], SImode) |
57 || s_register_operand (operands[1], SImode))" | 57 || s_register_operand (operands[1], SImode))" |
58 "* | 58 "* |
59 switch (which_alternative) | 59 switch (which_alternative) |
86 (set_attr "neg_pool_range" "*,*,*,*,4084,*,*,*,*,1008,*")] | 86 (set_attr "neg_pool_range" "*,*,*,*,4084,*,*,*,*,1008,*")] |
87 ) | 87 ) |
88 | 88 |
89 (define_insn "*thumb2_movsi_vfp" | 89 (define_insn "*thumb2_movsi_vfp" |
90 [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m,*t,r, *t,*t, *Uv") | 90 [(set (match_operand:SI 0 "nonimmediate_operand" "=rk,r,r,r,rk,m,*t,r, *t,*t, *Uv") |
91 (match_operand:SI 1 "general_operand" "rk, I,K,N,mi,rk,r,*t,*t,*Uvi,*t"))] | 91 (match_operand:SI 1 "general_operand" "rk, I,K,j,mi,rk,r,*t,*t,*Uvi,*t"))] |
92 "TARGET_THUMB2 && TARGET_VFP && TARGET_HARD_FLOAT | 92 "TARGET_THUMB2 && TARGET_VFP && TARGET_HARD_FLOAT |
93 && ( s_register_operand (operands[0], SImode) | 93 && ( s_register_operand (operands[0], SImode) |
94 || s_register_operand (operands[1], SImode))" | 94 || s_register_operand (operands[1], SImode))" |
95 "* | 95 "* |
96 switch (which_alternative) | 96 switch (which_alternative) |
143 case 3: | 143 case 3: |
144 return \"fmdrr%?\\t%P0, %Q1, %R1\\t%@ int\"; | 144 return \"fmdrr%?\\t%P0, %Q1, %R1\\t%@ int\"; |
145 case 4: | 145 case 4: |
146 return \"fmrrd%?\\t%Q0, %R0, %P1\\t%@ int\"; | 146 return \"fmrrd%?\\t%Q0, %R0, %P1\\t%@ int\"; |
147 case 5: | 147 case 5: |
148 return \"fcpyd%?\\t%P0, %P1\\t%@ int\"; | 148 if (TARGET_VFP_SINGLE) |
149 return \"fcpys%?\\t%0, %1\\t%@ int\;fcpys%?\\t%p0, %p1\\t%@ int\"; | |
150 else | |
151 return \"fcpyd%?\\t%P0, %P1\\t%@ int\"; | |
149 case 6: case 7: | 152 case 6: case 7: |
150 return output_move_vfp (operands); | 153 return output_move_vfp (operands); |
151 default: | 154 default: |
152 gcc_unreachable (); | 155 gcc_unreachable (); |
153 } | 156 } |
154 " | 157 " |
155 [(set_attr "type" "*,load2,store2,r_2_f,f_2_r,ffarithd,f_loadd,f_stored") | 158 [(set_attr "type" "*,load2,store2,r_2_f,f_2_r,ffarithd,f_loadd,f_stored") |
156 (set_attr "length" "8,8,8,4,4,4,4,4") | 159 (set (attr "length") (cond [(eq_attr "alternative" "0,1,2") (const_int 8) |
160 (eq_attr "alternative" "5") | |
161 (if_then_else | |
162 (eq (symbol_ref "TARGET_VFP_SINGLE") | |
163 (const_int 1)) | |
164 (const_int 8) | |
165 (const_int 4))] | |
166 (const_int 4))) | |
167 (set_attr "predicable" "yes") | |
157 (set_attr "pool_range" "*,1020,*,*,*,*,1020,*") | 168 (set_attr "pool_range" "*,1020,*,*,*,*,1020,*") |
158 (set_attr "neg_pool_range" "*,1008,*,*,*,*,1008,*")] | 169 (set_attr "neg_pool_range" "*,1008,*,*,*,*,1008,*")] |
159 ) | 170 ) |
160 | 171 |
161 (define_insn "*thumb2_movdi_vfp" | 172 (define_insn "*thumb2_movdi_vfp" |
170 case 3: | 181 case 3: |
171 return \"fmdrr%?\\t%P0, %Q1, %R1\\t%@ int\"; | 182 return \"fmdrr%?\\t%P0, %Q1, %R1\\t%@ int\"; |
172 case 4: | 183 case 4: |
173 return \"fmrrd%?\\t%Q0, %R0, %P1\\t%@ int\"; | 184 return \"fmrrd%?\\t%Q0, %R0, %P1\\t%@ int\"; |
174 case 5: | 185 case 5: |
175 return \"fcpyd%?\\t%P0, %P1\\t%@ int\"; | 186 if (TARGET_VFP_SINGLE) |
187 return \"fcpys%?\\t%0, %1\\t%@ int\;fcpys%?\\t%p0, %p1\\t%@ int\"; | |
188 else | |
189 return \"fcpyd%?\\t%P0, %P1\\t%@ int\"; | |
176 case 6: case 7: | 190 case 6: case 7: |
177 return output_move_vfp (operands); | 191 return output_move_vfp (operands); |
178 default: | 192 default: |
179 abort (); | 193 abort (); |
180 } | 194 } |
181 " | 195 " |
182 [(set_attr "type" "*,load2,store2,r_2_f,f_2_r,ffarithd,f_load,f_store") | 196 [(set_attr "type" "*,load2,store2,r_2_f,f_2_r,ffarithd,f_load,f_store") |
183 (set_attr "length" "8,8,8,4,4,4,4,4") | 197 (set (attr "length") (cond [(eq_attr "alternative" "0,1,2") (const_int 8) |
198 (eq_attr "alternative" "5") | |
199 (if_then_else | |
200 (eq (symbol_ref "TARGET_VFP_SINGLE") | |
201 (const_int 1)) | |
202 (const_int 8) | |
203 (const_int 4))] | |
204 (const_int 4))) | |
184 (set_attr "pool_range" "*,4096,*,*,*,*,1020,*") | 205 (set_attr "pool_range" "*,4096,*,*,*,*,1020,*") |
185 (set_attr "neg_pool_range" "*, 0,*,*,*,*,1008,*")] | 206 (set_attr "neg_pool_range" "*, 0,*,*,*,*,1008,*")] |
207 ) | |
208 | |
209 ;; HFmode moves | |
210 (define_insn "*movhf_vfp_neon" | |
211 [(set (match_operand:HF 0 "nonimmediate_operand" "= t,Um,r,m,t,r,t,r,r") | |
212 (match_operand:HF 1 "general_operand" " Um, t,m,r,t,r,r,t,F"))] | |
213 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_NEON_FP16 | |
214 && ( s_register_operand (operands[0], HFmode) | |
215 || s_register_operand (operands[1], HFmode))" | |
216 "* | |
217 switch (which_alternative) | |
218 { | |
219 case 0: /* S register from memory */ | |
220 return \"vld1.16\\t{%z0}, %A1\"; | |
221 case 1: /* memory from S register */ | |
222 return \"vst1.16\\t{%z1}, %A0\"; | |
223 case 2: /* ARM register from memory */ | |
224 return \"ldrh\\t%0, %1\\t%@ __fp16\"; | |
225 case 3: /* memory from ARM register */ | |
226 return \"strh\\t%1, %0\\t%@ __fp16\"; | |
227 case 4: /* S register from S register */ | |
228 return \"fcpys\\t%0, %1\"; | |
229 case 5: /* ARM register from ARM register */ | |
230 return \"mov\\t%0, %1\\t%@ __fp16\"; | |
231 case 6: /* S register from ARM register */ | |
232 return \"fmsr\\t%0, %1\"; | |
233 case 7: /* ARM register from S register */ | |
234 return \"fmrs\\t%0, %1\"; | |
235 case 8: /* ARM register from constant */ | |
236 { | |
237 REAL_VALUE_TYPE r; | |
238 long bits; | |
239 rtx ops[4]; | |
240 | |
241 REAL_VALUE_FROM_CONST_DOUBLE (r, operands[1]); | |
242 bits = real_to_target (NULL, &r, HFmode); | |
243 ops[0] = operands[0]; | |
244 ops[1] = GEN_INT (bits); | |
245 ops[2] = GEN_INT (bits & 0xff00); | |
246 ops[3] = GEN_INT (bits & 0x00ff); | |
247 | |
248 if (arm_arch_thumb2) | |
249 output_asm_insn (\"movw\\t%0, %1\", ops); | |
250 else | |
251 output_asm_insn (\"mov\\t%0, %2\;orr\\t%0, %0, %3\", ops); | |
252 return \"\"; | |
253 } | |
254 default: | |
255 gcc_unreachable (); | |
256 } | |
257 " | |
258 [(set_attr "conds" "unconditional") | |
259 (set_attr "type" "*,*,load1,store1,fcpys,*,r_2_f,f_2_r,*") | |
260 (set_attr "neon_type" "neon_vld1_1_2_regs,neon_vst1_1_2_regs_vst2_2_regs,*,*,*,*,*,*,*") | |
261 (set_attr "length" "4,4,4,4,4,4,4,4,8")] | |
262 ) | |
263 | |
264 ;; FP16 without element load/store instructions. | |
265 (define_insn "*movhf_vfp" | |
266 [(set (match_operand:HF 0 "nonimmediate_operand" "=r,m,t,r,t,r,r") | |
267 (match_operand:HF 1 "general_operand" " m,r,t,r,r,t,F"))] | |
268 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_FP16 && !TARGET_NEON_FP16 | |
269 && ( s_register_operand (operands[0], HFmode) | |
270 || s_register_operand (operands[1], HFmode))" | |
271 "* | |
272 switch (which_alternative) | |
273 { | |
274 case 0: /* ARM register from memory */ | |
275 return \"ldrh\\t%0, %1\\t%@ __fp16\"; | |
276 case 1: /* memory from ARM register */ | |
277 return \"strh\\t%1, %0\\t%@ __fp16\"; | |
278 case 2: /* S register from S register */ | |
279 return \"fcpys\\t%0, %1\"; | |
280 case 3: /* ARM register from ARM register */ | |
281 return \"mov\\t%0, %1\\t%@ __fp16\"; | |
282 case 4: /* S register from ARM register */ | |
283 return \"fmsr\\t%0, %1\"; | |
284 case 5: /* ARM register from S register */ | |
285 return \"fmrs\\t%0, %1\"; | |
286 case 6: /* ARM register from constant */ | |
287 { | |
288 REAL_VALUE_TYPE r; | |
289 long bits; | |
290 rtx ops[4]; | |
291 | |
292 REAL_VALUE_FROM_CONST_DOUBLE (r, operands[1]); | |
293 bits = real_to_target (NULL, &r, HFmode); | |
294 ops[0] = operands[0]; | |
295 ops[1] = GEN_INT (bits); | |
296 ops[2] = GEN_INT (bits & 0xff00); | |
297 ops[3] = GEN_INT (bits & 0x00ff); | |
298 | |
299 if (arm_arch_thumb2) | |
300 output_asm_insn (\"movw\\t%0, %1\", ops); | |
301 else | |
302 output_asm_insn (\"mov\\t%0, %2\;orr\\t%0, %0, %3\", ops); | |
303 return \"\"; | |
304 } | |
305 default: | |
306 gcc_unreachable (); | |
307 } | |
308 " | |
309 [(set_attr "conds" "unconditional") | |
310 (set_attr "type" "load1,store1,fcpys,*,r_2_f,f_2_r,*") | |
311 (set_attr "length" "4,4,4,4,4,4,8")] | |
186 ) | 312 ) |
187 | 313 |
188 | 314 |
189 ;; SFmode moves | 315 ;; SFmode moves |
190 ;; Disparage the w<->r cases because reloading an invalid address is | 316 ;; Disparage the w<->r cases because reloading an invalid address is |
265 | 391 |
266 ;; DFmode moves | 392 ;; DFmode moves |
267 | 393 |
268 (define_insn "*movdf_vfp" | 394 (define_insn "*movdf_vfp" |
269 [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,r, m,w ,Uv,w,r") | 395 [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,r, m,w ,Uv,w,r") |
270 (match_operand:DF 1 "soft_df_operand" " ?r,w,Dv,mF,r,UvF,w, w,r"))] | 396 (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,mF,r,UvF,w, w,r"))] |
271 "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP | 397 "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP |
272 && ( register_operand (operands[0], DFmode) | 398 && ( register_operand (operands[0], DFmode) |
273 || register_operand (operands[1], DFmode))" | 399 || register_operand (operands[1], DFmode))" |
274 "* | 400 "* |
275 { | 401 { |
278 case 0: | 404 case 0: |
279 return \"fmdrr%?\\t%P0, %Q1, %R1\"; | 405 return \"fmdrr%?\\t%P0, %Q1, %R1\"; |
280 case 1: | 406 case 1: |
281 return \"fmrrd%?\\t%Q0, %R0, %P1\"; | 407 return \"fmrrd%?\\t%Q0, %R0, %P1\"; |
282 case 2: | 408 case 2: |
409 gcc_assert (TARGET_VFP_DOUBLE); | |
283 return \"fconstd%?\\t%P0, #%G1\"; | 410 return \"fconstd%?\\t%P0, #%G1\"; |
284 case 3: case 4: | 411 case 3: case 4: |
285 return output_move_double (operands); | 412 return output_move_double (operands); |
286 case 5: case 6: | 413 case 5: case 6: |
287 return output_move_vfp (operands); | 414 return output_move_vfp (operands); |
288 case 7: | 415 case 7: |
289 return \"fcpyd%?\\t%P0, %P1\"; | 416 if (TARGET_VFP_SINGLE) |
417 return \"fcpys%?\\t%0, %1\;fcpys%?\\t%p0, %p1\"; | |
418 else | |
419 return \"fcpyd%?\\t%P0, %P1\"; | |
290 case 8: | 420 case 8: |
291 return \"#\"; | 421 return \"#\"; |
292 default: | 422 default: |
293 gcc_unreachable (); | 423 gcc_unreachable (); |
294 } | 424 } |
295 } | 425 } |
296 " | 426 " |
297 [(set_attr "type" | 427 [(set_attr "type" |
298 "r_2_f,f_2_r,fconstd,f_loadd,f_stored,load2,store2,ffarithd,*") | 428 "r_2_f,f_2_r,fconstd,f_loadd,f_stored,load2,store2,ffarithd,*") |
299 (set_attr "length" "4,4,4,8,8,4,4,4,8") | 429 (set (attr "length") (cond [(eq_attr "alternative" "3,4,8") (const_int 8) |
430 (eq_attr "alternative" "7") | |
431 (if_then_else | |
432 (eq (symbol_ref "TARGET_VFP_SINGLE") | |
433 (const_int 1)) | |
434 (const_int 8) | |
435 (const_int 4))] | |
436 (const_int 4))) | |
437 (set_attr "predicable" "yes") | |
300 (set_attr "pool_range" "*,*,*,1020,*,1020,*,*,*") | 438 (set_attr "pool_range" "*,*,*,1020,*,1020,*,*,*") |
301 (set_attr "neg_pool_range" "*,*,*,1008,*,1008,*,*,*")] | 439 (set_attr "neg_pool_range" "*,*,*,1008,*,1008,*,*,*")] |
302 ) | 440 ) |
303 | 441 |
304 (define_insn "*thumb2_movdf_vfp" | 442 (define_insn "*thumb2_movdf_vfp" |
305 [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,r, m,w ,Uv,w,r") | 443 [(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=w,?r,w ,r, m,w ,Uv,w,r") |
306 (match_operand:DF 1 "soft_df_operand" " ?r,w,Dv,mF,r,UvF,w, w,r"))] | 444 (match_operand:DF 1 "soft_df_operand" " ?r,w,Dy,mF,r,UvF,w, w,r"))] |
307 "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP" | 445 "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP" |
308 "* | 446 "* |
309 { | 447 { |
310 switch (which_alternative) | 448 switch (which_alternative) |
311 { | 449 { |
312 case 0: | 450 case 0: |
313 return \"fmdrr%?\\t%P0, %Q1, %R1\"; | 451 return \"fmdrr%?\\t%P0, %Q1, %R1\"; |
314 case 1: | 452 case 1: |
315 return \"fmrrd%?\\t%Q0, %R0, %P1\"; | 453 return \"fmrrd%?\\t%Q0, %R0, %P1\"; |
316 case 2: | 454 case 2: |
455 gcc_assert (TARGET_VFP_DOUBLE); | |
317 return \"fconstd%?\\t%P0, #%G1\"; | 456 return \"fconstd%?\\t%P0, #%G1\"; |
318 case 3: case 4: case 8: | 457 case 3: case 4: case 8: |
319 return output_move_double (operands); | 458 return output_move_double (operands); |
320 case 5: case 6: | 459 case 5: case 6: |
321 return output_move_vfp (operands); | 460 return output_move_vfp (operands); |
322 case 7: | 461 case 7: |
323 return \"fcpyd%?\\t%P0, %P1\"; | 462 if (TARGET_VFP_SINGLE) |
463 return \"fcpys%?\\t%0, %1\;fcpys%?\\t%p0, %p1\"; | |
464 else | |
465 return \"fcpyd%?\\t%P0, %P1\"; | |
324 default: | 466 default: |
325 abort (); | 467 abort (); |
326 } | 468 } |
327 } | 469 } |
328 " | 470 " |
329 [(set_attr "type" | 471 [(set_attr "type" |
330 "r_2_f,f_2_r,fconstd,load2,store2,f_load,f_store,ffarithd,*") | 472 "r_2_f,f_2_r,fconstd,load2,store2,f_load,f_store,ffarithd,*") |
331 (set_attr "length" "4,4,4,8,8,4,4,4,8") | 473 (set (attr "length") (cond [(eq_attr "alternative" "3,4,8") (const_int 8) |
474 (eq_attr "alternative" "7") | |
475 (if_then_else | |
476 (eq (symbol_ref "TARGET_VFP_SINGLE") | |
477 (const_int 1)) | |
478 (const_int 8) | |
479 (const_int 4))] | |
480 (const_int 4))) | |
332 (set_attr "pool_range" "*,*,*,4096,*,1020,*,*,*") | 481 (set_attr "pool_range" "*,*,*,4096,*,1020,*,*,*") |
333 (set_attr "neg_pool_range" "*,*,*,0,*,1008,*,*,*")] | 482 (set_attr "neg_pool_range" "*,*,*,0,*,1008,*,*,*")] |
334 ) | 483 ) |
335 | 484 |
336 | 485 |
387 (if_then_else:DF | 536 (if_then_else:DF |
388 (match_operator 3 "arm_comparison_operator" | 537 (match_operator 3 "arm_comparison_operator" |
389 [(match_operand 4 "cc_register" "") (const_int 0)]) | 538 [(match_operand 4 "cc_register" "") (const_int 0)]) |
390 (match_operand:DF 1 "s_register_operand" "0,w,w,0,?r,?r,0,w,w") | 539 (match_operand:DF 1 "s_register_operand" "0,w,w,0,?r,?r,0,w,w") |
391 (match_operand:DF 2 "s_register_operand" "w,0,w,?r,0,?r,w,0,w")))] | 540 (match_operand:DF 2 "s_register_operand" "w,0,w,?r,0,?r,w,0,w")))] |
392 "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP" | 541 "TARGET_ARM && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
393 "@ | 542 "@ |
394 fcpyd%D3\\t%P0, %P2 | 543 fcpyd%D3\\t%P0, %P2 |
395 fcpyd%d3\\t%P0, %P1 | 544 fcpyd%d3\\t%P0, %P1 |
396 fcpyd%D3\\t%P0, %P2\;fcpyd%d3\\t%P0, %P1 | 545 fcpyd%D3\\t%P0, %P2\;fcpyd%d3\\t%P0, %P1 |
397 fmdrr%D3\\t%P0, %Q2, %R2 | 546 fmdrr%D3\\t%P0, %Q2, %R2 |
410 (if_then_else:DF | 559 (if_then_else:DF |
411 (match_operator 3 "arm_comparison_operator" | 560 (match_operator 3 "arm_comparison_operator" |
412 [(match_operand 4 "cc_register" "") (const_int 0)]) | 561 [(match_operand 4 "cc_register" "") (const_int 0)]) |
413 (match_operand:DF 1 "s_register_operand" "0,w,w,0,?r,?r,0,w,w") | 562 (match_operand:DF 1 "s_register_operand" "0,w,w,0,?r,?r,0,w,w") |
414 (match_operand:DF 2 "s_register_operand" "w,0,w,?r,0,?r,w,0,w")))] | 563 (match_operand:DF 2 "s_register_operand" "w,0,w,?r,0,?r,w,0,w")))] |
415 "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP" | 564 "TARGET_THUMB2 && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
416 "@ | 565 "@ |
417 it\\t%D3\;fcpyd%D3\\t%P0, %P2 | 566 it\\t%D3\;fcpyd%D3\\t%P0, %P2 |
418 it\\t%d3\;fcpyd%d3\\t%P0, %P1 | 567 it\\t%d3\;fcpyd%d3\\t%P0, %P1 |
419 ite\\t%D3\;fcpyd%D3\\t%P0, %P2\;fcpyd%d3\\t%P0, %P1 | 568 ite\\t%D3\;fcpyd%D3\\t%P0, %P2\;fcpyd%d3\\t%P0, %P1 |
420 it\t%D3\;fmdrr%D3\\t%P0, %Q2, %R2 | 569 it\t%D3\;fmdrr%D3\\t%P0, %Q2, %R2 |
441 ) | 590 ) |
442 | 591 |
443 (define_insn "*absdf2_vfp" | 592 (define_insn "*absdf2_vfp" |
444 [(set (match_operand:DF 0 "s_register_operand" "=w") | 593 [(set (match_operand:DF 0 "s_register_operand" "=w") |
445 (abs:DF (match_operand:DF 1 "s_register_operand" "w")))] | 594 (abs:DF (match_operand:DF 1 "s_register_operand" "w")))] |
446 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 595 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
447 "fabsd%?\\t%P0, %P1" | 596 "fabsd%?\\t%P0, %P1" |
448 [(set_attr "predicable" "yes") | 597 [(set_attr "predicable" "yes") |
449 (set_attr "type" "ffarithd")] | 598 (set_attr "type" "ffarithd")] |
450 ) | 599 ) |
451 | 600 |
461 ) | 610 ) |
462 | 611 |
463 (define_insn_and_split "*negdf2_vfp" | 612 (define_insn_and_split "*negdf2_vfp" |
464 [(set (match_operand:DF 0 "s_register_operand" "=w,?r,?r") | 613 [(set (match_operand:DF 0 "s_register_operand" "=w,?r,?r") |
465 (neg:DF (match_operand:DF 1 "s_register_operand" "w,0,r")))] | 614 (neg:DF (match_operand:DF 1 "s_register_operand" "w,0,r")))] |
466 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 615 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
467 "@ | 616 "@ |
468 fnegd%?\\t%P0, %P1 | 617 fnegd%?\\t%P0, %P1 |
469 # | 618 # |
470 #" | 619 #" |
471 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP && reload_completed | 620 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE && reload_completed |
472 && arm_general_register_operand (operands[0], DFmode)" | 621 && arm_general_register_operand (operands[0], DFmode)" |
473 [(set (match_dup 0) (match_dup 1))] | 622 [(set (match_dup 0) (match_dup 1))] |
474 " | 623 " |
475 if (REGNO (operands[0]) == REGNO (operands[1])) | 624 if (REGNO (operands[0]) == REGNO (operands[1])) |
476 { | 625 { |
521 | 670 |
522 (define_insn "*adddf3_vfp" | 671 (define_insn "*adddf3_vfp" |
523 [(set (match_operand:DF 0 "s_register_operand" "=w") | 672 [(set (match_operand:DF 0 "s_register_operand" "=w") |
524 (plus:DF (match_operand:DF 1 "s_register_operand" "w") | 673 (plus:DF (match_operand:DF 1 "s_register_operand" "w") |
525 (match_operand:DF 2 "s_register_operand" "w")))] | 674 (match_operand:DF 2 "s_register_operand" "w")))] |
526 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 675 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
527 "faddd%?\\t%P0, %P1, %P2" | 676 "faddd%?\\t%P0, %P1, %P2" |
528 [(set_attr "predicable" "yes") | 677 [(set_attr "predicable" "yes") |
529 (set_attr "type" "faddd")] | 678 (set_attr "type" "faddd")] |
530 ) | 679 ) |
531 | 680 |
542 | 691 |
543 (define_insn "*subdf3_vfp" | 692 (define_insn "*subdf3_vfp" |
544 [(set (match_operand:DF 0 "s_register_operand" "=w") | 693 [(set (match_operand:DF 0 "s_register_operand" "=w") |
545 (minus:DF (match_operand:DF 1 "s_register_operand" "w") | 694 (minus:DF (match_operand:DF 1 "s_register_operand" "w") |
546 (match_operand:DF 2 "s_register_operand" "w")))] | 695 (match_operand:DF 2 "s_register_operand" "w")))] |
547 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 696 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
548 "fsubd%?\\t%P0, %P1, %P2" | 697 "fsubd%?\\t%P0, %P1, %P2" |
549 [(set_attr "predicable" "yes") | 698 [(set_attr "predicable" "yes") |
550 (set_attr "type" "faddd")] | 699 (set_attr "type" "faddd")] |
551 ) | 700 ) |
552 | 701 |
565 | 714 |
566 (define_insn "*divdf3_vfp" | 715 (define_insn "*divdf3_vfp" |
567 [(set (match_operand:DF 0 "s_register_operand" "+w") | 716 [(set (match_operand:DF 0 "s_register_operand" "+w") |
568 (div:DF (match_operand:DF 1 "s_register_operand" "w") | 717 (div:DF (match_operand:DF 1 "s_register_operand" "w") |
569 (match_operand:DF 2 "s_register_operand" "w")))] | 718 (match_operand:DF 2 "s_register_operand" "w")))] |
570 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 719 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
571 "fdivd%?\\t%P0, %P1, %P2" | 720 "fdivd%?\\t%P0, %P1, %P2" |
572 [(set_attr "predicable" "yes") | 721 [(set_attr "predicable" "yes") |
573 (set_attr "type" "fdivd")] | 722 (set_attr "type" "fdivd")] |
574 ) | 723 ) |
575 | 724 |
588 | 737 |
589 (define_insn "*muldf3_vfp" | 738 (define_insn "*muldf3_vfp" |
590 [(set (match_operand:DF 0 "s_register_operand" "+w") | 739 [(set (match_operand:DF 0 "s_register_operand" "+w") |
591 (mult:DF (match_operand:DF 1 "s_register_operand" "w") | 740 (mult:DF (match_operand:DF 1 "s_register_operand" "w") |
592 (match_operand:DF 2 "s_register_operand" "w")))] | 741 (match_operand:DF 2 "s_register_operand" "w")))] |
593 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 742 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
594 "fmuld%?\\t%P0, %P1, %P2" | 743 "fmuld%?\\t%P0, %P1, %P2" |
595 [(set_attr "predicable" "yes") | 744 [(set_attr "predicable" "yes") |
596 (set_attr "type" "fmuld")] | 745 (set_attr "type" "fmuld")] |
597 ) | 746 ) |
598 | 747 |
609 | 758 |
610 (define_insn "*muldf3negdf_vfp" | 759 (define_insn "*muldf3negdf_vfp" |
611 [(set (match_operand:DF 0 "s_register_operand" "+w") | 760 [(set (match_operand:DF 0 "s_register_operand" "+w") |
612 (mult:DF (neg:DF (match_operand:DF 1 "s_register_operand" "w")) | 761 (mult:DF (neg:DF (match_operand:DF 1 "s_register_operand" "w")) |
613 (match_operand:DF 2 "s_register_operand" "w")))] | 762 (match_operand:DF 2 "s_register_operand" "w")))] |
614 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 763 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
615 "fnmuld%?\\t%P0, %P1, %P2" | 764 "fnmuld%?\\t%P0, %P1, %P2" |
616 [(set_attr "predicable" "yes") | 765 [(set_attr "predicable" "yes") |
617 (set_attr "type" "fmuld")] | 766 (set_attr "type" "fmuld")] |
618 ) | 767 ) |
619 | 768 |
635 (define_insn "*muldf3adddf_vfp" | 784 (define_insn "*muldf3adddf_vfp" |
636 [(set (match_operand:DF 0 "s_register_operand" "=w") | 785 [(set (match_operand:DF 0 "s_register_operand" "=w") |
637 (plus:DF (mult:DF (match_operand:DF 2 "s_register_operand" "w") | 786 (plus:DF (mult:DF (match_operand:DF 2 "s_register_operand" "w") |
638 (match_operand:DF 3 "s_register_operand" "w")) | 787 (match_operand:DF 3 "s_register_operand" "w")) |
639 (match_operand:DF 1 "s_register_operand" "0")))] | 788 (match_operand:DF 1 "s_register_operand" "0")))] |
640 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 789 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
641 "fmacd%?\\t%P0, %P2, %P3" | 790 "fmacd%?\\t%P0, %P2, %P3" |
642 [(set_attr "predicable" "yes") | 791 [(set_attr "predicable" "yes") |
643 (set_attr "type" "fmacd")] | 792 (set_attr "type" "fmacd")] |
644 ) | 793 ) |
645 | 794 |
658 (define_insn "*muldf3subdf_vfp" | 807 (define_insn "*muldf3subdf_vfp" |
659 [(set (match_operand:DF 0 "s_register_operand" "=w") | 808 [(set (match_operand:DF 0 "s_register_operand" "=w") |
660 (minus:DF (mult:DF (match_operand:DF 2 "s_register_operand" "w") | 809 (minus:DF (mult:DF (match_operand:DF 2 "s_register_operand" "w") |
661 (match_operand:DF 3 "s_register_operand" "w")) | 810 (match_operand:DF 3 "s_register_operand" "w")) |
662 (match_operand:DF 1 "s_register_operand" "0")))] | 811 (match_operand:DF 1 "s_register_operand" "0")))] |
663 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 812 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
664 "fmscd%?\\t%P0, %P2, %P3" | 813 "fmscd%?\\t%P0, %P2, %P3" |
665 [(set_attr "predicable" "yes") | 814 [(set_attr "predicable" "yes") |
666 (set_attr "type" "fmacd")] | 815 (set_attr "type" "fmacd")] |
667 ) | 816 ) |
668 | 817 |
681 (define_insn "*fmuldf3negdfadddf_vfp" | 830 (define_insn "*fmuldf3negdfadddf_vfp" |
682 [(set (match_operand:DF 0 "s_register_operand" "=w") | 831 [(set (match_operand:DF 0 "s_register_operand" "=w") |
683 (minus:DF (match_operand:DF 1 "s_register_operand" "0") | 832 (minus:DF (match_operand:DF 1 "s_register_operand" "0") |
684 (mult:DF (match_operand:DF 2 "s_register_operand" "w") | 833 (mult:DF (match_operand:DF 2 "s_register_operand" "w") |
685 (match_operand:DF 3 "s_register_operand" "w"))))] | 834 (match_operand:DF 3 "s_register_operand" "w"))))] |
686 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 835 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
687 "fnmacd%?\\t%P0, %P2, %P3" | 836 "fnmacd%?\\t%P0, %P2, %P3" |
688 [(set_attr "predicable" "yes") | 837 [(set_attr "predicable" "yes") |
689 (set_attr "type" "fmacd")] | 838 (set_attr "type" "fmacd")] |
690 ) | 839 ) |
691 | 840 |
707 [(set (match_operand:DF 0 "s_register_operand" "=w") | 856 [(set (match_operand:DF 0 "s_register_operand" "=w") |
708 (minus:DF (mult:DF | 857 (minus:DF (mult:DF |
709 (neg:DF (match_operand:DF 2 "s_register_operand" "w")) | 858 (neg:DF (match_operand:DF 2 "s_register_operand" "w")) |
710 (match_operand:DF 3 "s_register_operand" "w")) | 859 (match_operand:DF 3 "s_register_operand" "w")) |
711 (match_operand:DF 1 "s_register_operand" "0")))] | 860 (match_operand:DF 1 "s_register_operand" "0")))] |
712 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 861 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
713 "fnmscd%?\\t%P0, %P2, %P3" | 862 "fnmscd%?\\t%P0, %P2, %P3" |
714 [(set_attr "predicable" "yes") | 863 [(set_attr "predicable" "yes") |
715 (set_attr "type" "fmacd")] | 864 (set_attr "type" "fmacd")] |
716 ) | 865 ) |
717 | 866 |
719 ;; Conversion routines | 868 ;; Conversion routines |
720 | 869 |
721 (define_insn "*extendsfdf2_vfp" | 870 (define_insn "*extendsfdf2_vfp" |
722 [(set (match_operand:DF 0 "s_register_operand" "=w") | 871 [(set (match_operand:DF 0 "s_register_operand" "=w") |
723 (float_extend:DF (match_operand:SF 1 "s_register_operand" "t")))] | 872 (float_extend:DF (match_operand:SF 1 "s_register_operand" "t")))] |
724 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 873 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
725 "fcvtds%?\\t%P0, %1" | 874 "fcvtds%?\\t%P0, %1" |
726 [(set_attr "predicable" "yes") | 875 [(set_attr "predicable" "yes") |
727 (set_attr "type" "f_cvt")] | 876 (set_attr "type" "f_cvt")] |
728 ) | 877 ) |
729 | 878 |
730 (define_insn "*truncdfsf2_vfp" | 879 (define_insn "*truncdfsf2_vfp" |
731 [(set (match_operand:SF 0 "s_register_operand" "=t") | 880 [(set (match_operand:SF 0 "s_register_operand" "=t") |
732 (float_truncate:SF (match_operand:DF 1 "s_register_operand" "w")))] | 881 (float_truncate:SF (match_operand:DF 1 "s_register_operand" "w")))] |
733 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 882 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
734 "fcvtsd%?\\t%0, %P1" | 883 "fcvtsd%?\\t%0, %P1" |
884 [(set_attr "predicable" "yes") | |
885 (set_attr "type" "f_cvt")] | |
886 ) | |
887 | |
888 (define_insn "extendhfsf2" | |
889 [(set (match_operand:SF 0 "s_register_operand" "=t") | |
890 (float_extend:SF (match_operand:HF 1 "s_register_operand" "t")))] | |
891 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_FP16" | |
892 "vcvtb%?.f32.f16\\t%0, %1" | |
893 [(set_attr "predicable" "yes") | |
894 (set_attr "type" "f_cvt")] | |
895 ) | |
896 | |
897 (define_insn "truncsfhf2" | |
898 [(set (match_operand:HF 0 "s_register_operand" "=t") | |
899 (float_truncate:HF (match_operand:SF 1 "s_register_operand" "t")))] | |
900 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_FP16" | |
901 "vcvtb%?.f16.f32\\t%0, %1" | |
735 [(set_attr "predicable" "yes") | 902 [(set_attr "predicable" "yes") |
736 (set_attr "type" "f_cvt")] | 903 (set_attr "type" "f_cvt")] |
737 ) | 904 ) |
738 | 905 |
739 (define_insn "*truncsisf2_vfp" | 906 (define_insn "*truncsisf2_vfp" |
746 ) | 913 ) |
747 | 914 |
748 (define_insn "*truncsidf2_vfp" | 915 (define_insn "*truncsidf2_vfp" |
749 [(set (match_operand:SI 0 "s_register_operand" "=t") | 916 [(set (match_operand:SI 0 "s_register_operand" "=t") |
750 (fix:SI (fix:DF (match_operand:DF 1 "s_register_operand" "w"))))] | 917 (fix:SI (fix:DF (match_operand:DF 1 "s_register_operand" "w"))))] |
751 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 918 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
752 "ftosizd%?\\t%0, %P1" | 919 "ftosizd%?\\t%0, %P1" |
753 [(set_attr "predicable" "yes") | 920 [(set_attr "predicable" "yes") |
754 (set_attr "type" "f_cvt")] | 921 (set_attr "type" "f_cvt")] |
755 ) | 922 ) |
756 | 923 |
765 ) | 932 ) |
766 | 933 |
767 (define_insn "fixuns_truncdfsi2" | 934 (define_insn "fixuns_truncdfsi2" |
768 [(set (match_operand:SI 0 "s_register_operand" "=t") | 935 [(set (match_operand:SI 0 "s_register_operand" "=t") |
769 (unsigned_fix:SI (fix:DF (match_operand:DF 1 "s_register_operand" "t"))))] | 936 (unsigned_fix:SI (fix:DF (match_operand:DF 1 "s_register_operand" "t"))))] |
770 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 937 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
771 "ftouizd%?\\t%0, %P1" | 938 "ftouizd%?\\t%0, %P1" |
772 [(set_attr "predicable" "yes") | 939 [(set_attr "predicable" "yes") |
773 (set_attr "type" "f_cvt")] | 940 (set_attr "type" "f_cvt")] |
774 ) | 941 ) |
775 | 942 |
784 ) | 951 ) |
785 | 952 |
786 (define_insn "*floatsidf2_vfp" | 953 (define_insn "*floatsidf2_vfp" |
787 [(set (match_operand:DF 0 "s_register_operand" "=w") | 954 [(set (match_operand:DF 0 "s_register_operand" "=w") |
788 (float:DF (match_operand:SI 1 "s_register_operand" "t")))] | 955 (float:DF (match_operand:SI 1 "s_register_operand" "t")))] |
789 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 956 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
790 "fsitod%?\\t%P0, %1" | 957 "fsitod%?\\t%P0, %1" |
791 [(set_attr "predicable" "yes") | 958 [(set_attr "predicable" "yes") |
792 (set_attr "type" "f_cvt")] | 959 (set_attr "type" "f_cvt")] |
793 ) | 960 ) |
794 | 961 |
803 ) | 970 ) |
804 | 971 |
805 (define_insn "floatunssidf2" | 972 (define_insn "floatunssidf2" |
806 [(set (match_operand:DF 0 "s_register_operand" "=w") | 973 [(set (match_operand:DF 0 "s_register_operand" "=w") |
807 (unsigned_float:DF (match_operand:SI 1 "s_register_operand" "t")))] | 974 (unsigned_float:DF (match_operand:SI 1 "s_register_operand" "t")))] |
808 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 975 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
809 "fuitod%?\\t%P0, %1" | 976 "fuitod%?\\t%P0, %1" |
810 [(set_attr "predicable" "yes") | 977 [(set_attr "predicable" "yes") |
811 (set_attr "type" "f_cvt")] | 978 (set_attr "type" "f_cvt")] |
812 ) | 979 ) |
813 | 980 |
824 ) | 991 ) |
825 | 992 |
826 (define_insn "*sqrtdf2_vfp" | 993 (define_insn "*sqrtdf2_vfp" |
827 [(set (match_operand:DF 0 "s_register_operand" "=w") | 994 [(set (match_operand:DF 0 "s_register_operand" "=w") |
828 (sqrt:DF (match_operand:DF 1 "s_register_operand" "w")))] | 995 (sqrt:DF (match_operand:DF 1 "s_register_operand" "w")))] |
829 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 996 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
830 "fsqrtd%?\\t%P0, %P1" | 997 "fsqrtd%?\\t%P0, %P1" |
831 [(set_attr "predicable" "yes") | 998 [(set_attr "predicable" "yes") |
832 (set_attr "type" "fdivd")] | 999 (set_attr "type" "fdivd")] |
833 ) | 1000 ) |
834 | 1001 |
876 | 1043 |
877 (define_insn_and_split "*cmpdf_split_vfp" | 1044 (define_insn_and_split "*cmpdf_split_vfp" |
878 [(set (reg:CCFP CC_REGNUM) | 1045 [(set (reg:CCFP CC_REGNUM) |
879 (compare:CCFP (match_operand:DF 0 "s_register_operand" "w") | 1046 (compare:CCFP (match_operand:DF 0 "s_register_operand" "w") |
880 (match_operand:DF 1 "vfp_compare_operand" "wG")))] | 1047 (match_operand:DF 1 "vfp_compare_operand" "wG")))] |
881 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 1048 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
882 "#" | 1049 "#" |
883 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 1050 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
884 [(set (reg:CCFP VFPCC_REGNUM) | 1051 [(set (reg:CCFP VFPCC_REGNUM) |
885 (compare:CCFP (match_dup 0) | 1052 (compare:CCFP (match_dup 0) |
886 (match_dup 1))) | 1053 (match_dup 1))) |
887 (set (reg:CCFP CC_REGNUM) | 1054 (set (reg:CCFP CC_REGNUM) |
888 (reg:CCFPE VFPCC_REGNUM))] | 1055 (reg:CCFP VFPCC_REGNUM))] |
889 "" | 1056 "" |
890 ) | 1057 ) |
891 | 1058 |
892 (define_insn_and_split "*cmpdf_trap_split_vfp" | 1059 (define_insn_and_split "*cmpdf_trap_split_vfp" |
893 [(set (reg:CCFPE CC_REGNUM) | 1060 [(set (reg:CCFPE CC_REGNUM) |
894 (compare:CCFPE (match_operand:DF 0 "s_register_operand" "w") | 1061 (compare:CCFPE (match_operand:DF 0 "s_register_operand" "w") |
895 (match_operand:DF 1 "vfp_compare_operand" "wG")))] | 1062 (match_operand:DF 1 "vfp_compare_operand" "wG")))] |
896 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 1063 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
897 "#" | 1064 "#" |
898 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 1065 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
899 [(set (reg:CCFPE VFPCC_REGNUM) | 1066 [(set (reg:CCFPE VFPCC_REGNUM) |
900 (compare:CCFPE (match_dup 0) | 1067 (compare:CCFPE (match_dup 0) |
901 (match_dup 1))) | 1068 (match_dup 1))) |
902 (set (reg:CCFPE CC_REGNUM) | 1069 (set (reg:CCFPE CC_REGNUM) |
903 (reg:CCFPE VFPCC_REGNUM))] | 1070 (reg:CCFPE VFPCC_REGNUM))] |
933 | 1100 |
934 (define_insn "*cmpdf_vfp" | 1101 (define_insn "*cmpdf_vfp" |
935 [(set (reg:CCFP VFPCC_REGNUM) | 1102 [(set (reg:CCFP VFPCC_REGNUM) |
936 (compare:CCFP (match_operand:DF 0 "s_register_operand" "w,w") | 1103 (compare:CCFP (match_operand:DF 0 "s_register_operand" "w,w") |
937 (match_operand:DF 1 "vfp_compare_operand" "w,G")))] | 1104 (match_operand:DF 1 "vfp_compare_operand" "w,G")))] |
938 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 1105 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
939 "@ | 1106 "@ |
940 fcmpd%?\\t%P0, %P1 | 1107 fcmpd%?\\t%P0, %P1 |
941 fcmpzd%?\\t%P0" | 1108 fcmpzd%?\\t%P0" |
942 [(set_attr "predicable" "yes") | 1109 [(set_attr "predicable" "yes") |
943 (set_attr "type" "fcmpd")] | 1110 (set_attr "type" "fcmpd")] |
945 | 1112 |
946 (define_insn "*cmpdf_trap_vfp" | 1113 (define_insn "*cmpdf_trap_vfp" |
947 [(set (reg:CCFPE VFPCC_REGNUM) | 1114 [(set (reg:CCFPE VFPCC_REGNUM) |
948 (compare:CCFPE (match_operand:DF 0 "s_register_operand" "w,w") | 1115 (compare:CCFPE (match_operand:DF 0 "s_register_operand" "w,w") |
949 (match_operand:DF 1 "vfp_compare_operand" "w,G")))] | 1116 (match_operand:DF 1 "vfp_compare_operand" "w,G")))] |
950 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" | 1117 "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP_DOUBLE" |
951 "@ | 1118 "@ |
952 fcmped%?\\t%P0, %P1 | 1119 fcmped%?\\t%P0, %P1 |
953 fcmpezd%?\\t%P0" | 1120 fcmpezd%?\\t%P0" |
954 [(set_attr "predicable" "yes") | 1121 [(set_attr "predicable" "yes") |
955 (set_attr "type" "fcmpd")] | 1122 (set_attr "type" "fcmpd")] |