From bd416d7045888febce6af85110eb1e6f395b0295 Mon Sep 17 00:00:00 2001 From: uros Date: Tue, 19 Feb 2008 07:23:30 +0000 Subject: [PATCH] PR target/33555 * config/i386/i386.md (*x86_movsicc_0_m1_se): New insn pattern. (*x86_movdicc_0_m1_se): Ditto. testsuite/ChangeLog: PR target/33555 * gcc.target/i386/pr33555.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132414 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/config/i386/i386.md | 30 ++++++++++++++++++++++++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/i386/pr33555.c | 9 +++++++++ 4 files changed, 50 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr33555.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3a23574f768..e023878736e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2008-02-19 Uros Bizjak + PR target/33555 + * config/i386/i386.md (*x86_movsicc_0_m1_se): New insn pattern. + (*x86_movdicc_0_m1_se): Ditto. + +2008-02-19 Uros Bizjak + * config/i386/sfp-machine.h (__gcc_CMPtype): New typedef. (CMPtype): Define as __gcc_CMPtype. * config/rs6000/sfp-machine.h (__gcc_CMPtype): New typedef. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 1724c0df7f5..3c9c2cc8c86 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -19402,6 +19402,21 @@ (set_attr "mode" "DI") (set_attr "length_immediate" "0")]) +(define_insn "*x86_movdicc_0_m1_se" + [(set (match_operand:DI 0 "register_operand" "=r") + (sign_extract:DI (match_operand 1 "ix86_carry_flag_operator" "") + (const_int 1) + (const_int 0))) + (clobber (reg:CC FLAGS_REG))] + "" + "sbb{q}\t%0, %0" + [(set_attr "type" "alu") + (set_attr "pent_pair" "pu") + (set_attr "memory" "none") + (set_attr "imm_disp" "false") + (set_attr "mode" "DI") + (set_attr "length_immediate" "0")]) + (define_insn "*movdicc_c_rex64" [(set (match_operand:DI 0 "register_operand" "=r,r") (if_then_else:DI (match_operator 1 "ix86_comparison_operator" @@ -19445,6 +19460,21 @@ (set_attr "mode" "SI") (set_attr "length_immediate" "0")]) +(define_insn "*x86_movsicc_0_m1_se" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extract:SI (match_operand 1 "ix86_carry_flag_operator" "") + (const_int 1) + (const_int 0))) + (clobber (reg:CC FLAGS_REG))] + "" + "sbb{l}\t%0, %0" + [(set_attr "type" "alu") + (set_attr "pent_pair" "pu") + (set_attr "memory" "none") + (set_attr "imm_disp" "false") + (set_attr "mode" "SI") + (set_attr "length_immediate" "0")]) + (define_insn "*movsicc_noc" [(set (match_operand:SI 0 "register_operand" "=r,r") (if_then_else:SI (match_operator 1 "ix86_comparison_operator" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 55715a6da39..db65ae61adc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-02-19 Uros Bizjak + + PR target/33555 + * gcc.target/i386/pr33555.c: New test. + 2008-02-18 H.J. Lu PR target/35189 diff --git a/gcc/testsuite/gcc.target/i386/pr33555.c b/gcc/testsuite/gcc.target/i386/pr33555.c new file mode 100644 index 00000000000..21c56b7bde3 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr33555.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-final { scan-assembler "sbbl" } } */ + +int test(unsigned long a, unsigned long b) +{ + return -(a < b); +} + -- 2.11.0