aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/i386/i386.md
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2001-01-14 09:14:03 +0000
committerJan Hubicka <jh@suse.cz>2001-01-14 09:14:03 +0000
commita61edcba8893cf92af47dbf16996c9dd20067a43 (patch)
treeef4ee7257a074a8c3351697865670bbd0a49b8bd /gcc/config/i386/i386.md
parent52348542bd79265e551ce417fc9c04471f8c7143 (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.md48
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;
}")