diff options
author | Jan Hubicka <jh@suse.cz> | 2001-01-14 09:14:03 +0000 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2001-01-14 09:14:03 +0000 |
commit | a61edcba8893cf92af47dbf16996c9dd20067a43 (patch) | |
tree | ef4ee7257a074a8c3351697865670bbd0a49b8bd /gcc/config/i386/i386.md | |
parent | 52348542bd79265e551ce417fc9c04471f8c7143 (diff) |
* i386.c (ix86_expand_compare): Add bypass_test and second_test
parameters.
(ix86_expand_branch): Update.
(ix86_expand_setcc): Update to handle multiple test conditions.
(expand_int_movcc): Likewise.
(expand_fp_movcc): Likewise.
* i386-protos.h (ix86_expand_compare): New.
* i386.md (andqi_?_slp, orqi_?_slp): New.
(conditional trap expander): Update call to ix86_expand_compare.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@39005 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/i386/i386.md')
-rw-r--r-- | gcc/config/i386/i386.md | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 12d7e39de2a..5e53f14895c 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -6263,6 +6263,16 @@ [(set_attr "type" "alu") (set_attr "mode" "QI,QI,SI")]) +(define_insn "*andqi_1_slp" + [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+qm,q")) + (and:QI (match_dup 0) + (match_operand:QI 1 "general_operand" "qi,qmi"))) + (clobber (reg:CC 17))] + "" + "and{b}\\t{%1, %0|%0, %1}" + [(set_attr "type" "alu1") + (set_attr "mode" "QI")]) + (define_insn "*andqi_2" [(set (reg 17) (compare (and:QI @@ -6280,6 +6290,19 @@ [(set_attr "type" "alu") (set_attr "mode" "QI,QI,SI")]) +(define_insn "*andqi_2_slp" + [(set (reg 17) + (compare (and:QI + (match_operand:QI 0 "nonimmediate_operand" "+q,qm") + (match_operand:QI 1 "nonimmediate_operand" "qmi,qi")) + (const_int 0))) + (set (strict_low_part (match_dup 0)) + (and:QI (match_dup 0) (match_dup 1)))] + "ix86_match_ccmode (insn, CCNOmode)" + "and{b}\\t{%1, %0|%0, %1}" + [(set_attr "type" "alu1") + (set_attr "mode" "QI")]) + ;; ??? A bug in recog prevents it from recognizing a const_int as an ;; operand to zero_extend in andqi_ext_1. It was checking explicitly ;; for a QImode operand, which of course failed. @@ -6479,6 +6502,16 @@ or{b}\\t{%2, %0|%0, %2} or{l}\\t{%k2, %k0|%k0, %k2}" [(set_attr "type" "alu") + (set_attr "mode" "QI,QI,SI")]) + +(define_insn "*iorqi_1_slp" + [(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+q,m")) + (ior:QI (match_dup 0) + (match_operand:QI 1 "general_operand" "qmi,qi"))) + (clobber (reg:CC 17))] + "" + "or{b}\\t{%1, %0|%0, %1}" + [(set_attr "type" "alu1") (set_attr "mode" "QI")]) (define_insn "*iorqi_2" @@ -6494,6 +6527,18 @@ [(set_attr "type" "alu") (set_attr "mode" "QI")]) +(define_insn "*iorqi_2_slp" + [(set (reg 17) + (compare (ior:QI (match_operand:QI 0 "nonimmediate_operand" "+q,qm") + (match_operand:QI 1 "general_operand" "qim,qi")) + (const_int 0))) + (set (strict_low_part (match_dup 0)) + (ior:QI (match_dup 0) (match_dup 1)))] + "ix86_match_ccmode (insn, CCNOmode)" + "or{b}\\t{%1, %0|%0, %1}" + [(set_attr "type" "alu1") + (set_attr "mode" "QI")]) + (define_insn "*iorqi_3" [(set (reg 17) (compare (ior:QI (match_operand:QI 1 "nonimmediate_operand" "%0") @@ -12496,7 +12541,8 @@ " { emit_insn (gen_rtx_TRAP_IF (VOIDmode, - ix86_expand_compare (GET_CODE (operands[0])), + ix86_expand_compare (GET_CODE (operands[0]), + NULL_RTX, NULL_RTX), operands[1])); DONE; }") |