* rs6000.h: ... to here.
* rs6000.md (movtf, extenddftf2, extendsftf2, trunctfdf2,
trunctfsf2, floatditf2, floatsitf2, fix_trunctfdi2,
- fix_trunctfsi2, negtf2, abstf2, nabstf2): New patterns.
+ fix_trunctfsi2, negtf2, abstf2, nabstf2, cmptf): New patterns.
Tue Nov 20 06:41:38 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
DONE;
}")
+(define_expand "cmptf"
+ [(set (cc0) (compare (match_operand:DF 0 "gpc_reg_operand" "")
+ (match_operand:DF 1 "gpc_reg_operand" "")))]
+
+ "DEFAULT_ABI == ABI_AIX && TARGET_HARD_FLOAT && TARGET_LONG_DOUBLE_128"
+ "
+{
+ rs6000_compare_op0 = operands[0];
+ rs6000_compare_op1 = operands[1];
+ rs6000_compare_fp_p = 1;
+ DONE;
+}")
+
(define_expand "beq"
[(use (match_operand 0 "" ""))]
""
"TARGET_HARD_FLOAT"
"fcmpu %0,%1,%2"
[(set_attr "type" "fpcompare")])
+
+;; Only need to compare second words if first words equal
+(define_insn "*cmptf_internal1"
+ [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
+ (compare:CCFP (match_operand:TF 1 "gpc_reg_operand" "f")
+ (match_operand:TF 2 "gpc_reg_operand" "f")))]
+ "DEFAULT_ABI == ABI_AIX && TARGET_HARD_FLOAT && TARGET_LONG_DOUBLE_128"
+ "fcmpu %0,%1,%2\;bne %0,%$+4\;fcmpu %0,%L1,%L2"
+ [(set_attr "type" "fpcompare")
+ (set_attr "length" "12")])
\f
;; Now we have the scc insns. We can do some combinations because of the
;; way the machine works.