m68k.md (sordered, [...]): New patterns.

* config/m68k/m68k.md (sordered, sordered_1, sunordered, sunordered_1,
        suneq, suneq_1, sunge, sunge_1, sungt, sungt_1, sunle, sunle_1,
        sunlt, sunlt_1, sltgt, sltgt_1, fsogt_1, fsoge_1, fsolt_1, fsole_1,
        bordered, bunordered, buneq, bunge, bungt, bunle, bunlt, bltgt,
        bordered_rev, bunordered_rev, buneq_rev, bunge_rev, bungt_rev,
        bunle_rev, bunlt_rev, bltgt_rev): New patterns.

From-SVN: r45219
This commit is contained in:
Richard Henderson 2001-08-27 17:51:40 -07:00 committed by Richard Henderson
parent 83e7315b5f
commit c05148e841
2 changed files with 437 additions and 0 deletions

View File

@ -1,3 +1,12 @@
2001-08-27 Richard Henderson <rth@redhat.com>
* config/m68k/m68k.md (sordered, sordered_1, sunordered, sunordered_1,
suneq, suneq_1, sunge, sunge_1, sungt, sungt_1, sunle, sunle_1,
sunlt, sunlt_1, sltgt, sltgt_1, fsogt_1, fsoge_1, fsolt_1, fsole_1,
bordered, bunordered, buneq, bunge, bungt, bunle, bunlt, bltgt,
bordered_rev, bunordered_rev, buneq_rev, bunge_rev, bungt_rev,
bunle_rev, bunlt_rev, bltgt_rev): New patterns.
2001-08-27 Roman Zippel <zippel@linux-m68k.org>
* config/m68k/m68k.md (subreghi1ashrdi_const32, bsetmemqi,

View File

@ -5885,6 +5885,194 @@
"*
cc_status = cc_prev_status;
return \"sls %0\"; ")
(define_expand "sordered"
[(set (match_operand:QI 0 "register_operand" "")
(ordered:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
if (! m68k_last_compare_had_fp_operands)
abort ();
m68k_last_compare_had_fp_operands = 0;
})
(define_insn "*sordered_1"
[(set (match_operand:QI 0 "register_operand" "=d")
(ordered:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
cc_status = cc_prev_status;
return "fsor %0";
})
(define_expand "sunordered"
[(set (match_operand:QI 0 "register_operand" "")
(unordered:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
if (! m68k_last_compare_had_fp_operands)
abort ();
m68k_last_compare_had_fp_operands = 0;
})
(define_insn "*sunordered_1"
[(set (match_operand:QI 0 "register_operand" "=d")
(unordered:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
cc_status = cc_prev_status;
return "fsun %0";
})
(define_expand "suneq"
[(set (match_operand:QI 0 "register_operand" "")
(uneq:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
if (! m68k_last_compare_had_fp_operands)
abort ();
m68k_last_compare_had_fp_operands = 0;
})
(define_insn "*suneq_1"
[(set (match_operand:QI 0 "register_operand" "=d")
(uneq:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
cc_status = cc_prev_status;
return "fsueq %0";
})
(define_expand "sunge"
[(set (match_operand:QI 0 "register_operand" "")
(unge:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
if (! m68k_last_compare_had_fp_operands)
abort ();
m68k_last_compare_had_fp_operands = 0;
})
(define_insn "*sunge_1"
[(set (match_operand:QI 0 "register_operand" "=d")
(unge:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
cc_status = cc_prev_status;
return "fsuge %0";
})
(define_expand "sungt"
[(set (match_operand:QI 0 "register_operand" "")
(ungt:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
if (! m68k_last_compare_had_fp_operands)
abort ();
m68k_last_compare_had_fp_operands = 0;
})
(define_insn "*sungt_1"
[(set (match_operand:QI 0 "register_operand" "=d")
(ungt:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
cc_status = cc_prev_status;
return "fsugt %0";
})
(define_expand "sunle"
[(set (match_operand:QI 0 "register_operand" "")
(unle:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
if (! m68k_last_compare_had_fp_operands)
abort ();
m68k_last_compare_had_fp_operands = 0;
})
(define_insn "*sunle_1"
[(set (match_operand:QI 0 "register_operand" "=d")
(unle:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
cc_status = cc_prev_status;
return "fsule %0";
})
(define_expand "sunlt"
[(set (match_operand:QI 0 "register_operand" "")
(unlt:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
if (! m68k_last_compare_had_fp_operands)
abort ();
m68k_last_compare_had_fp_operands = 0;
})
(define_insn "*sunlt_1"
[(set (match_operand:QI 0 "register_operand" "=d")
(unlt:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
cc_status = cc_prev_status;
return "fsult %0";
})
(define_expand "sltgt"
[(set (match_operand:QI 0 "register_operand" "")
(ltgt:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
if (! m68k_last_compare_had_fp_operands)
abort ();
m68k_last_compare_had_fp_operands = 0;
})
(define_insn "*sltgt_1"
[(set (match_operand:QI 0 "register_operand" "=d")
(ltgt:QI (cc0) (const_int 0)))]
"TARGET_68881 && !TARGET_68060"
{
cc_status = cc_prev_status;
return "fsogl %0";
})
(define_insn "*fsogt_1"
[(set (match_operand:QI 0 "register_operand" "=d")
(not:QI (unle:QI (cc0) (const_int 0))))]
"TARGET_68881 && !TARGET_68060"
{
cc_status = cc_prev_status;
return "fsogt %0";
})
(define_insn "*fsoge_1"
[(set (match_operand:QI 0 "register_operand" "=d")
(not:QI (unlt:QI (cc0) (const_int 0))))]
"TARGET_68881 && !TARGET_68060"
{
cc_status = cc_prev_status;
return "fsoge %0";
})
(define_insn "*fsolt_1"
[(set (match_operand:QI 0 "register_operand" "=d")
(not:QI (unge:QI (cc0) (const_int 0))))]
"TARGET_68881 && !TARGET_68060"
{
cc_status = cc_prev_status;
return "fsolt %0";
})
(define_insn "*fsole_1"
[(set (match_operand:QI 0 "register_operand" "=d")
(not:QI (ungt:QI (cc0) (const_int 0))))]
"TARGET_68881 && !TARGET_68060"
{
cc_status = cc_prev_status;
return "fsole %0";
})
;; Basic conditional jump instructions.
@ -6305,6 +6493,134 @@
return \"jls %l0\";
#endif
")
(define_insn "bordered"
[(set (pc)
(if_then_else (ordered (cc0) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbor %l0";
#else
return "fjor %l0";
#endif
})
(define_insn "bunordered"
[(set (pc)
(if_then_else (unordered (cc0) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbun %l0";
#else
return "fjun %l0";
#endif
})
(define_insn "buneq"
[(set (pc)
(if_then_else (uneq (cc0) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbueq %l0";
#else
return "fjueq %l0";
#endif
})
(define_insn "bunge"
[(set (pc)
(if_then_else (unge (cc0) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbuge %l0";
#else
return "fjuge %l0";
#endif
})
(define_insn "bungt"
[(set (pc)
(if_then_else (ungt (cc0) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbugt %l0";
#else
return "fjugt %l0";
#endif
})
(define_insn "bunle"
[(set (pc)
(if_then_else (unle (cc0) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbule %l0";
#else
return "fjule %l0";
#endif
})
(define_insn "bunlt"
[(set (pc)
(if_then_else (unlt (cc0) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbult %l0";
#else
return "fjult %l0";
#endif
})
(define_insn "bltgt"
[(set (pc)
(if_then_else (ltgt (cc0) (const_int 0))
(label_ref (match_operand 0 "" ""))
(pc)))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbogl %l0";
#else
return "fjogl %l0";
#endif
})
;; Negated conditional jump instructions.
@ -6459,6 +6775,118 @@
return \"jhi %l0\";
#endif
")
(define_insn "*bordered_rev"
[(set (pc)
(if_then_else (ordered (cc0) (const_int 0))
(pc)
(label_ref (match_operand 0 "" ""))))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbun %l0";
#else
return "fjun %l0";
#endif
})
(define_insn "*bunordered_rev"
[(set (pc)
(if_then_else (unordered (cc0) (const_int 0))
(pc)
(label_ref (match_operand 0 "" ""))))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbor %l0";
#else
return "fjor %l0";
#endif
})
(define_insn "*buneq_rev"
[(set (pc)
(if_then_else (uneq (cc0) (const_int 0))
(pc)
(label_ref (match_operand 0 "" ""))))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbogl %l0";
#else
return "fjogl %l0";
#endif
})
(define_insn "*bunge_rev"
[(set (pc)
(if_then_else (unge (cc0) (const_int 0))
(pc)
(label_ref (match_operand 0 "" ""))))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbolt %l0";
#else
return "fjolt %l0";
#endif
})
(define_insn "*bunle_rev"
[(set (pc)
(if_then_else (unle (cc0) (const_int 0))
(pc)
(label_ref (match_operand 0 "" ""))))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbogt %l0";
#else
return "fjogt %l0";
#endif
})
(define_insn "*bunlt_rev"
[(set (pc)
(if_then_else (unlt (cc0) (const_int 0))
(pc)
(label_ref (match_operand 0 "" ""))))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fboge %l0";
#else
return "fjoge %l0";
#endif
})
(define_insn "*bltgt_rev"
[(set (pc)
(if_then_else (ltgt (cc0) (const_int 0))
(pc)
(label_ref (match_operand 0 "" ""))))]
"TARGET_68881"
{
if (!(cc_prev_status.flags & CC_IN_68881))
abort ();
#ifdef MOTOROLA
return "fbueq %l0";
#else
return "fjueq %l0";
#endif
})
;; Unconditional and other jump instructions
(define_insn "jump"