comparison gcc/config/rs6000/dfp.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
103 [(set_attr "type" "*,mtjmpr,*,mfjmpr,load,store,*,*,*,*,*,*") 103 [(set_attr "type" "*,mtjmpr,*,mfjmpr,load,store,*,*,*,*,*,*")
104 (set_attr "length" "4,4,4,4,4,4,4,4,4,4,8,4")]) 104 (set_attr "length" "4,4,4,4,4,4,4,4,4,4,8,4")])
105 105
106 (define_insn "movsd_store" 106 (define_insn "movsd_store"
107 [(set (match_operand:DD 0 "nonimmediate_operand" "=m") 107 [(set (match_operand:DD 0 "nonimmediate_operand" "=m")
108 (unspec:DD [(match_operand:SD 1 "input_operand" "f")] 108 (unspec:DD [(match_operand:SD 1 "input_operand" "d")]
109 UNSPEC_MOVSD_STORE))] 109 UNSPEC_MOVSD_STORE))]
110 "(gpc_reg_operand (operands[0], DDmode) 110 "(gpc_reg_operand (operands[0], DDmode)
111 || gpc_reg_operand (operands[1], SDmode)) 111 || gpc_reg_operand (operands[1], SDmode))
112 && TARGET_HARD_FLOAT && TARGET_FPRS" 112 && TARGET_HARD_FLOAT && TARGET_FPRS"
113 "stfd%U0%X0 %1,%0" 113 "stfd%U0%X0 %1,%0"
126 (set_attr "length" "4")]) 126 (set_attr "length" "4")])
127 127
128 ;; Hardware support for decimal floating point operations. 128 ;; Hardware support for decimal floating point operations.
129 129
130 (define_insn "extendsddd2" 130 (define_insn "extendsddd2"
131 [(set (match_operand:DD 0 "gpc_reg_operand" "=f") 131 [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
132 (float_extend:DD (match_operand:SD 1 "gpc_reg_operand" "f")))] 132 (float_extend:DD (match_operand:SD 1 "gpc_reg_operand" "f")))]
133 "TARGET_DFP" 133 "TARGET_DFP"
134 "dctdp %0,%1" 134 "dctdp %0,%1"
135 [(set_attr "type" "fp")]) 135 [(set_attr "type" "fp")])
136 136
137 (define_expand "extendsdtd2" 137 (define_expand "extendsdtd2"
138 [(set (match_operand:TD 0 "gpc_reg_operand" "=f") 138 [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
139 (float_extend:TD (match_operand:SD 1 "gpc_reg_operand" "f")))] 139 (float_extend:TD (match_operand:SD 1 "gpc_reg_operand" "d")))]
140 "TARGET_DFP" 140 "TARGET_DFP"
141 { 141 {
142 rtx tmp = gen_reg_rtx (DDmode); 142 rtx tmp = gen_reg_rtx (DDmode);
143 emit_insn (gen_extendsddd2 (tmp, operands[1])); 143 emit_insn (gen_extendsddd2 (tmp, operands[1]));
144 emit_insn (gen_extendddtd2 (operands[0], tmp)); 144 emit_insn (gen_extendddtd2 (operands[0], tmp));
145 DONE; 145 DONE;
146 }) 146 })
147 147
148 (define_insn "truncddsd2" 148 (define_insn "truncddsd2"
149 [(set (match_operand:SD 0 "gpc_reg_operand" "=f") 149 [(set (match_operand:SD 0 "gpc_reg_operand" "=f")
150 (float_truncate:SD (match_operand:DD 1 "gpc_reg_operand" "f")))] 150 (float_truncate:SD (match_operand:DD 1 "gpc_reg_operand" "d")))]
151 "TARGET_DFP" 151 "TARGET_DFP"
152 "drsp %0,%1" 152 "drsp %0,%1"
153 [(set_attr "type" "fp")]) 153 [(set_attr "type" "fp")])
154 154
155 (define_expand "negdd2" 155 (define_expand "negdd2"
157 (neg:DD (match_operand:DD 1 "gpc_reg_operand" "")))] 157 (neg:DD (match_operand:DD 1 "gpc_reg_operand" "")))]
158 "TARGET_HARD_FLOAT && TARGET_FPRS" 158 "TARGET_HARD_FLOAT && TARGET_FPRS"
159 "") 159 "")
160 160
161 (define_insn "*negdd2_fpr" 161 (define_insn "*negdd2_fpr"
162 [(set (match_operand:DD 0 "gpc_reg_operand" "=f") 162 [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
163 (neg:DD (match_operand:DD 1 "gpc_reg_operand" "f")))] 163 (neg:DD (match_operand:DD 1 "gpc_reg_operand" "d")))]
164 "TARGET_HARD_FLOAT && TARGET_FPRS" 164 "TARGET_HARD_FLOAT && TARGET_FPRS"
165 "fneg %0,%1" 165 "fneg %0,%1"
166 [(set_attr "type" "fp")]) 166 [(set_attr "type" "fp")])
167 167
168 (define_expand "absdd2" 168 (define_expand "absdd2"
170 (abs:DD (match_operand:DD 1 "gpc_reg_operand" "")))] 170 (abs:DD (match_operand:DD 1 "gpc_reg_operand" "")))]
171 "TARGET_HARD_FLOAT && TARGET_FPRS" 171 "TARGET_HARD_FLOAT && TARGET_FPRS"
172 "") 172 "")
173 173
174 (define_insn "*absdd2_fpr" 174 (define_insn "*absdd2_fpr"
175 [(set (match_operand:DD 0 "gpc_reg_operand" "=f") 175 [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
176 (abs:DD (match_operand:DD 1 "gpc_reg_operand" "f")))] 176 (abs:DD (match_operand:DD 1 "gpc_reg_operand" "d")))]
177 "TARGET_HARD_FLOAT && TARGET_FPRS" 177 "TARGET_HARD_FLOAT && TARGET_FPRS"
178 "fabs %0,%1" 178 "fabs %0,%1"
179 [(set_attr "type" "fp")]) 179 [(set_attr "type" "fp")])
180 180
181 (define_insn "*nabsdd2_fpr" 181 (define_insn "*nabsdd2_fpr"
182 [(set (match_operand:DD 0 "gpc_reg_operand" "=f") 182 [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
183 (neg:DD (abs:DD (match_operand:DF 1 "gpc_reg_operand" "f"))))] 183 (neg:DD (abs:DD (match_operand:DD 1 "gpc_reg_operand" "d"))))]
184 "TARGET_HARD_FLOAT && TARGET_FPRS" 184 "TARGET_HARD_FLOAT && TARGET_FPRS"
185 "fnabs %0,%1" 185 "fnabs %0,%1"
186 [(set_attr "type" "fp")]) 186 [(set_attr "type" "fp")])
187 187
188 (define_expand "movdd" 188 (define_expand "movdd"
279 ;; a non-offsettable memref, but also it is less efficient than loading 279 ;; a non-offsettable memref, but also it is less efficient than loading
280 ;; the constant into an FP register, since it will probably be used there. 280 ;; the constant into an FP register, since it will probably be used there.
281 ;; The "??" is a kludge until we can figure out a more reasonable way 281 ;; The "??" is a kludge until we can figure out a more reasonable way
282 ;; of handling these non-offsettable values. 282 ;; of handling these non-offsettable values.
283 (define_insn "*movdd_hardfloat32" 283 (define_insn "*movdd_hardfloat32"
284 [(set (match_operand:DD 0 "nonimmediate_operand" "=!r,??r,m,f,f,m,!r,!r,!r") 284 [(set (match_operand:DD 0 "nonimmediate_operand" "=!r,??r,m,d,d,m,!r,!r,!r")
285 (match_operand:DD 1 "input_operand" "r,m,r,f,m,f,G,H,F"))] 285 (match_operand:DD 1 "input_operand" "r,m,r,d,m,d,G,H,F"))]
286 "! TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS 286 "! TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS
287 && (gpc_reg_operand (operands[0], DDmode) 287 && (gpc_reg_operand (operands[0], DDmode)
288 || gpc_reg_operand (operands[1], DDmode))" 288 || gpc_reg_operand (operands[1], DDmode))"
289 "* 289 "*
290 { 290 {
415 (set_attr "length" "8,8,8,8,12,16")]) 415 (set_attr "length" "8,8,8,8,12,16")])
416 416
417 ; ld/std require word-aligned displacements -> 'Y' constraint. 417 ; ld/std require word-aligned displacements -> 'Y' constraint.
418 ; List Y->r and r->Y before r->r for reload. 418 ; List Y->r and r->Y before r->r for reload.
419 (define_insn "*movdd_hardfloat64_mfpgpr" 419 (define_insn "*movdd_hardfloat64_mfpgpr"
420 [(set (match_operand:DD 0 "nonimmediate_operand" "=Y,r,!r,f,f,m,*c*l,!r,*h,!r,!r,!r,r,f") 420 [(set (match_operand:DD 0 "nonimmediate_operand" "=Y,r,!r,d,d,m,*c*l,!r,*h,!r,!r,!r,r,d")
421 (match_operand:DD 1 "input_operand" "r,Y,r,f,m,f,r,h,0,G,H,F,f,r"))] 421 (match_operand:DD 1 "input_operand" "r,Y,r,d,m,d,r,h,0,G,H,F,d,r"))]
422 "TARGET_POWERPC64 && TARGET_MFPGPR && TARGET_HARD_FLOAT && TARGET_FPRS 422 "TARGET_POWERPC64 && TARGET_MFPGPR && TARGET_HARD_FLOAT && TARGET_FPRS
423 && (gpc_reg_operand (operands[0], DDmode) 423 && (gpc_reg_operand (operands[0], DDmode)
424 || gpc_reg_operand (operands[1], DDmode))" 424 || gpc_reg_operand (operands[1], DDmode))"
425 "@ 425 "@
426 std%U0%X0 %1,%0 426 std%U0%X0 %1,%0
441 (set_attr "length" "4,4,4,4,4,4,4,4,4,8,12,16,4,4")]) 441 (set_attr "length" "4,4,4,4,4,4,4,4,4,8,12,16,4,4")])
442 442
443 ; ld/std require word-aligned displacements -> 'Y' constraint. 443 ; ld/std require word-aligned displacements -> 'Y' constraint.
444 ; List Y->r and r->Y before r->r for reload. 444 ; List Y->r and r->Y before r->r for reload.
445 (define_insn "*movdd_hardfloat64" 445 (define_insn "*movdd_hardfloat64"
446 [(set (match_operand:DD 0 "nonimmediate_operand" "=Y,r,!r,f,f,m,*c*l,!r,*h,!r,!r,!r") 446 [(set (match_operand:DD 0 "nonimmediate_operand" "=Y,r,!r,d,d,m,*c*l,!r,*h,!r,!r,!r")
447 (match_operand:DD 1 "input_operand" "r,Y,r,f,m,f,r,h,0,G,H,F"))] 447 (match_operand:DD 1 "input_operand" "r,Y,r,d,m,d,r,h,0,G,H,F"))]
448 "TARGET_POWERPC64 && !TARGET_MFPGPR && TARGET_HARD_FLOAT && TARGET_FPRS 448 "TARGET_POWERPC64 && !TARGET_MFPGPR && TARGET_HARD_FLOAT && TARGET_FPRS
449 && (gpc_reg_operand (operands[0], DDmode) 449 && (gpc_reg_operand (operands[0], DDmode)
450 || gpc_reg_operand (operands[1], DDmode))" 450 || gpc_reg_operand (operands[1], DDmode))"
451 "@ 451 "@
452 std%U0%X0 %1,%0 452 std%U0%X0 %1,%0
488 (neg:TD (match_operand:TD 1 "gpc_reg_operand" "")))] 488 (neg:TD (match_operand:TD 1 "gpc_reg_operand" "")))]
489 "TARGET_HARD_FLOAT && TARGET_FPRS" 489 "TARGET_HARD_FLOAT && TARGET_FPRS"
490 "") 490 "")
491 491
492 (define_insn "*negtd2_fpr" 492 (define_insn "*negtd2_fpr"
493 [(set (match_operand:TD 0 "gpc_reg_operand" "=f") 493 [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
494 (neg:TD (match_operand:TD 1 "gpc_reg_operand" "f")))] 494 (neg:TD (match_operand:TD 1 "gpc_reg_operand" "d")))]
495 "TARGET_HARD_FLOAT && TARGET_FPRS" 495 "TARGET_HARD_FLOAT && TARGET_FPRS"
496 "fneg %0,%1" 496 "fneg %0,%1"
497 [(set_attr "type" "fp")]) 497 [(set_attr "type" "fp")])
498 498
499 (define_expand "abstd2" 499 (define_expand "abstd2"
501 (abs:TD (match_operand:TD 1 "gpc_reg_operand" "")))] 501 (abs:TD (match_operand:TD 1 "gpc_reg_operand" "")))]
502 "TARGET_HARD_FLOAT && TARGET_FPRS" 502 "TARGET_HARD_FLOAT && TARGET_FPRS"
503 "") 503 "")
504 504
505 (define_insn "*abstd2_fpr" 505 (define_insn "*abstd2_fpr"
506 [(set (match_operand:TD 0 "gpc_reg_operand" "=f") 506 [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
507 (abs:TD (match_operand:TD 1 "gpc_reg_operand" "f")))] 507 (abs:TD (match_operand:TD 1 "gpc_reg_operand" "d")))]
508 "TARGET_HARD_FLOAT && TARGET_FPRS" 508 "TARGET_HARD_FLOAT && TARGET_FPRS"
509 "fabs %0,%1" 509 "fabs %0,%1"
510 [(set_attr "type" "fp")]) 510 [(set_attr "type" "fp")])
511 511
512 (define_insn "*nabstd2_fpr" 512 (define_insn "*nabstd2_fpr"
513 [(set (match_operand:TD 0 "gpc_reg_operand" "=f") 513 [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
514 (neg:TD (abs:TD (match_operand:DF 1 "gpc_reg_operand" "f"))))] 514 (neg:TD (abs:TD (match_operand:TD 1 "gpc_reg_operand" "d"))))]
515 "TARGET_HARD_FLOAT && TARGET_FPRS" 515 "TARGET_HARD_FLOAT && TARGET_FPRS"
516 "fnabs %0,%1" 516 "fnabs %0,%1"
517 [(set_attr "type" "fp")]) 517 [(set_attr "type" "fp")])
518 518
519 (define_expand "movtd" 519 (define_expand "movtd"
524 524
525 ; It's important to list the o->f and f->o moves before f->f because 525 ; It's important to list the o->f and f->o moves before f->f because
526 ; otherwise reload, given m->f, will try to pick f->f and reload it, 526 ; otherwise reload, given m->f, will try to pick f->f and reload it,
527 ; which doesn't make progress. Likewise r->Y must be before r->r. 527 ; which doesn't make progress. Likewise r->Y must be before r->r.
528 (define_insn_and_split "*movtd_internal" 528 (define_insn_and_split "*movtd_internal"
529 [(set (match_operand:TD 0 "nonimmediate_operand" "=o,f,f,r,Y,r") 529 [(set (match_operand:TD 0 "nonimmediate_operand" "=o,d,d,r,Y,r")
530 (match_operand:TD 1 "input_operand" "f,o,f,YGHF,r,r"))] 530 (match_operand:TD 1 "input_operand" "d,o,d,YGHF,r,r"))]
531 "TARGET_HARD_FLOAT && TARGET_FPRS 531 "TARGET_HARD_FLOAT && TARGET_FPRS
532 && (gpc_reg_operand (operands[0], TDmode) 532 && (gpc_reg_operand (operands[0], TDmode)
533 || gpc_reg_operand (operands[1], TDmode))" 533 || gpc_reg_operand (operands[1], TDmode))"
534 "#" 534 "#"
535 "&& reload_completed" 535 "&& reload_completed"
538 [(set_attr "length" "8,8,8,20,20,16")]) 538 [(set_attr "length" "8,8,8,20,20,16")])
539 539
540 ;; Hardware support for decimal floating point operations. 540 ;; Hardware support for decimal floating point operations.
541 541
542 (define_insn "extendddtd2" 542 (define_insn "extendddtd2"
543 [(set (match_operand:TD 0 "gpc_reg_operand" "=f") 543 [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
544 (float_extend:TD (match_operand:DD 1 "gpc_reg_operand" "f")))] 544 (float_extend:TD (match_operand:DD 1 "gpc_reg_operand" "d")))]
545 "TARGET_DFP" 545 "TARGET_DFP"
546 "dctqpq %0,%1" 546 "dctqpq %0,%1"
547 [(set_attr "type" "fp")]) 547 [(set_attr "type" "fp")])
548 548
549 ;; The result of drdpq is an even/odd register pair with the converted 549 ;; The result of drdpq is an even/odd register pair with the converted
550 ;; value in the even register and zero in the odd register. 550 ;; value in the even register and zero in the odd register.
551 ;; FIXME: Avoid the register move by using a reload constraint to ensure 551 ;; FIXME: Avoid the register move by using a reload constraint to ensure
552 ;; that the result is the first of the pair receiving the result of drdpq. 552 ;; that the result is the first of the pair receiving the result of drdpq.
553 553
554 (define_insn "trunctddd2" 554 (define_insn "trunctddd2"
555 [(set (match_operand:DD 0 "gpc_reg_operand" "=f") 555 [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
556 (float_truncate:DD (match_operand:TD 1 "gpc_reg_operand" "f"))) 556 (float_truncate:DD (match_operand:TD 1 "gpc_reg_operand" "d")))
557 (clobber (match_scratch:TD 2 "=f"))] 557 (clobber (match_scratch:TD 2 "=d"))]
558 "TARGET_DFP" 558 "TARGET_DFP"
559 "drdpq %2,%1\;fmr %0,%2" 559 "drdpq %2,%1\;fmr %0,%2"
560 [(set_attr "type" "fp")]) 560 [(set_attr "type" "fp")])
561 561
562 (define_insn "adddd3" 562 (define_insn "adddd3"
563 [(set (match_operand:DD 0 "gpc_reg_operand" "=f") 563 [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
564 (plus:DD (match_operand:DD 1 "gpc_reg_operand" "%f") 564 (plus:DD (match_operand:DD 1 "gpc_reg_operand" "%d")
565 (match_operand:DD 2 "gpc_reg_operand" "f")))] 565 (match_operand:DD 2 "gpc_reg_operand" "d")))]
566 "TARGET_DFP" 566 "TARGET_DFP"
567 "dadd %0,%1,%2" 567 "dadd %0,%1,%2"
568 [(set_attr "type" "fp")]) 568 [(set_attr "type" "fp")])
569 569
570 (define_insn "addtd3" 570 (define_insn "addtd3"
571 [(set (match_operand:TD 0 "gpc_reg_operand" "=f") 571 [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
572 (plus:TD (match_operand:TD 1 "gpc_reg_operand" "%f") 572 (plus:TD (match_operand:TD 1 "gpc_reg_operand" "%d")
573 (match_operand:TD 2 "gpc_reg_operand" "f")))] 573 (match_operand:TD 2 "gpc_reg_operand" "d")))]
574 "TARGET_DFP" 574 "TARGET_DFP"
575 "daddq %0,%1,%2" 575 "daddq %0,%1,%2"
576 [(set_attr "type" "fp")]) 576 [(set_attr "type" "fp")])
577 577
578 (define_insn "subdd3" 578 (define_insn "subdd3"
579 [(set (match_operand:DD 0 "gpc_reg_operand" "=f") 579 [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
580 (minus:DD (match_operand:DD 1 "gpc_reg_operand" "f") 580 (minus:DD (match_operand:DD 1 "gpc_reg_operand" "d")
581 (match_operand:DD 2 "gpc_reg_operand" "f")))] 581 (match_operand:DD 2 "gpc_reg_operand" "d")))]
582 "TARGET_DFP" 582 "TARGET_DFP"
583 "dsub %0,%1,%2" 583 "dsub %0,%1,%2"
584 [(set_attr "type" "fp")]) 584 [(set_attr "type" "fp")])
585 585
586 (define_insn "subtd3" 586 (define_insn "subtd3"
587 [(set (match_operand:TD 0 "gpc_reg_operand" "=f") 587 [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
588 (minus:TD (match_operand:TD 1 "gpc_reg_operand" "f") 588 (minus:TD (match_operand:TD 1 "gpc_reg_operand" "d")
589 (match_operand:TD 2 "gpc_reg_operand" "f")))] 589 (match_operand:TD 2 "gpc_reg_operand" "d")))]
590 "TARGET_DFP" 590 "TARGET_DFP"
591 "dsubq %0,%1,%2" 591 "dsubq %0,%1,%2"
592 [(set_attr "type" "fp")]) 592 [(set_attr "type" "fp")])
593 593
594 (define_insn "muldd3" 594 (define_insn "muldd3"
595 [(set (match_operand:DD 0 "gpc_reg_operand" "=f") 595 [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
596 (mult:DD (match_operand:DD 1 "gpc_reg_operand" "%f") 596 (mult:DD (match_operand:DD 1 "gpc_reg_operand" "%d")
597 (match_operand:DD 2 "gpc_reg_operand" "f")))] 597 (match_operand:DD 2 "gpc_reg_operand" "d")))]
598 "TARGET_DFP" 598 "TARGET_DFP"
599 "dmul %0,%1,%2" 599 "dmul %0,%1,%2"
600 [(set_attr "type" "fp")]) 600 [(set_attr "type" "fp")])
601 601
602 (define_insn "multd3" 602 (define_insn "multd3"
603 [(set (match_operand:TD 0 "gpc_reg_operand" "=f") 603 [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
604 (mult:TD (match_operand:TD 1 "gpc_reg_operand" "%f") 604 (mult:TD (match_operand:TD 1 "gpc_reg_operand" "%d")
605 (match_operand:TD 2 "gpc_reg_operand" "f")))] 605 (match_operand:TD 2 "gpc_reg_operand" "d")))]
606 "TARGET_DFP" 606 "TARGET_DFP"
607 "dmulq %0,%1,%2" 607 "dmulq %0,%1,%2"
608 [(set_attr "type" "fp")]) 608 [(set_attr "type" "fp")])
609 609
610 (define_insn "divdd3" 610 (define_insn "divdd3"
611 [(set (match_operand:DD 0 "gpc_reg_operand" "=f") 611 [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
612 (div:DD (match_operand:DD 1 "gpc_reg_operand" "f") 612 (div:DD (match_operand:DD 1 "gpc_reg_operand" "d")
613 (match_operand:DD 2 "gpc_reg_operand" "f")))] 613 (match_operand:DD 2 "gpc_reg_operand" "d")))]
614 "TARGET_DFP" 614 "TARGET_DFP"
615 "ddiv %0,%1,%2" 615 "ddiv %0,%1,%2"
616 [(set_attr "type" "fp")]) 616 [(set_attr "type" "fp")])
617 617
618 (define_insn "divtd3" 618 (define_insn "divtd3"
619 [(set (match_operand:TD 0 "gpc_reg_operand" "=f") 619 [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
620 (div:TD (match_operand:TD 1 "gpc_reg_operand" "f") 620 (div:TD (match_operand:TD 1 "gpc_reg_operand" "d")
621 (match_operand:TD 2 "gpc_reg_operand" "f")))] 621 (match_operand:TD 2 "gpc_reg_operand" "d")))]
622 "TARGET_DFP" 622 "TARGET_DFP"
623 "ddivq %0,%1,%2" 623 "ddivq %0,%1,%2"
624 [(set_attr "type" "fp")]) 624 [(set_attr "type" "fp")])
625 625
626 (define_insn "*cmpdd_internal1" 626 (define_insn "*cmpdd_internal1"
627 [(set (match_operand:CCFP 0 "cc_reg_operand" "=y") 627 [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
628 (compare:CCFP (match_operand:DD 1 "gpc_reg_operand" "f") 628 (compare:CCFP (match_operand:DD 1 "gpc_reg_operand" "d")
629 (match_operand:DD 2 "gpc_reg_operand" "f")))] 629 (match_operand:DD 2 "gpc_reg_operand" "d")))]
630 "TARGET_DFP" 630 "TARGET_DFP"
631 "dcmpu %0,%1,%2" 631 "dcmpu %0,%1,%2"
632 [(set_attr "type" "fpcompare")]) 632 [(set_attr "type" "fpcompare")])
633 633
634 (define_insn "*cmptd_internal1" 634 (define_insn "*cmptd_internal1"
635 [(set (match_operand:CCFP 0 "cc_reg_operand" "=y") 635 [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
636 (compare:CCFP (match_operand:TD 1 "gpc_reg_operand" "f") 636 (compare:CCFP (match_operand:TD 1 "gpc_reg_operand" "d")
637 (match_operand:TD 2 "gpc_reg_operand" "f")))] 637 (match_operand:TD 2 "gpc_reg_operand" "d")))]
638 "TARGET_DFP" 638 "TARGET_DFP"
639 "dcmpuq %0,%1,%2" 639 "dcmpuq %0,%1,%2"
640 [(set_attr "type" "fpcompare")]) 640 [(set_attr "type" "fpcompare")])
641 641
642 (define_insn "floatditd2" 642 (define_insn "floatditd2"
643 [(set (match_operand:TD 0 "gpc_reg_operand" "=f") 643 [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
644 (float:TD (match_operand:DI 1 "gpc_reg_operand" "f")))] 644 (float:TD (match_operand:DI 1 "gpc_reg_operand" "d")))]
645 "TARGET_DFP" 645 "TARGET_DFP"
646 "dcffixq %0,%1" 646 "dcffixq %0,%1"
647 [(set_attr "type" "fp")]) 647 [(set_attr "type" "fp")])
648 648
649 ;; Convert a decimal64 to a decimal64 whose value is an integer. 649 ;; Convert a decimal64 to a decimal64 whose value is an integer.
650 ;; This is the first stage of converting it to an integer type. 650 ;; This is the first stage of converting it to an integer type.
651 651
652 (define_insn "ftruncdd2" 652 (define_insn "ftruncdd2"
653 [(set (match_operand:DD 0 "gpc_reg_operand" "=f") 653 [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
654 (fix:DD (match_operand:DD 1 "gpc_reg_operand" "f")))] 654 (fix:DD (match_operand:DD 1 "gpc_reg_operand" "d")))]
655 "TARGET_DFP" 655 "TARGET_DFP"
656 "drintn. 0,%0,%1,1" 656 "drintn. 0,%0,%1,1"
657 [(set_attr "type" "fp")]) 657 [(set_attr "type" "fp")])
658 658
659 ;; Convert a decimal64 whose value is an integer to an actual integer. 659 ;; Convert a decimal64 whose value is an integer to an actual integer.
660 ;; This is the second stage of converting decimal float to integer type. 660 ;; This is the second stage of converting decimal float to integer type.
661 661
662 (define_insn "fixdddi2" 662 (define_insn "fixdddi2"
663 [(set (match_operand:DI 0 "gpc_reg_operand" "=f") 663 [(set (match_operand:DI 0 "gpc_reg_operand" "=d")
664 (fix:DI (match_operand:DD 1 "gpc_reg_operand" "f")))] 664 (fix:DI (match_operand:DD 1 "gpc_reg_operand" "d")))]
665 "TARGET_DFP" 665 "TARGET_DFP"
666 "dctfix %0,%1" 666 "dctfix %0,%1"
667 [(set_attr "type" "fp")]) 667 [(set_attr "type" "fp")])
668 668
669 ;; Convert a decimal128 to a decimal128 whose value is an integer. 669 ;; Convert a decimal128 to a decimal128 whose value is an integer.
670 ;; This is the first stage of converting it to an integer type. 670 ;; This is the first stage of converting it to an integer type.
671 671
672 (define_insn "ftrunctd2" 672 (define_insn "ftrunctd2"
673 [(set (match_operand:TD 0 "gpc_reg_operand" "=f") 673 [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
674 (fix:TD (match_operand:TD 1 "gpc_reg_operand" "f")))] 674 (fix:TD (match_operand:TD 1 "gpc_reg_operand" "d")))]
675 "TARGET_DFP" 675 "TARGET_DFP"
676 "drintnq. 0,%0,%1,1" 676 "drintnq. 0,%0,%1,1"
677 [(set_attr "type" "fp")]) 677 [(set_attr "type" "fp")])
678 678
679 ;; Convert a decimal128 whose value is an integer to an actual integer. 679 ;; Convert a decimal128 whose value is an integer to an actual integer.
680 ;; This is the second stage of converting decimal float to integer type. 680 ;; This is the second stage of converting decimal float to integer type.
681 681
682 (define_insn "fixtddi2" 682 (define_insn "fixtddi2"
683 [(set (match_operand:DI 0 "gpc_reg_operand" "=f") 683 [(set (match_operand:DI 0 "gpc_reg_operand" "=d")
684 (fix:DI (match_operand:TD 1 "gpc_reg_operand" "f")))] 684 (fix:DI (match_operand:TD 1 "gpc_reg_operand" "d")))]
685 "TARGET_DFP" 685 "TARGET_DFP"
686 "dctfixq %0,%1" 686 "dctfixq %0,%1"
687 [(set_attr "type" "fp")]) 687 [(set_attr "type" "fp")])