From d70401eb2fc86f75d6a8ad6eda48386292b4a856 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 17 Jan 2001 13:32:49 +0100 Subject: [PATCH] i386.md (cmpqi_minus_1): Use q constraints instead of r. * config/i386/i386.md (cmpqi_minus_1): Use q constraints instead of r. * gcc.c-torture/compile/20010117-2.c: New test. From-SVN: r39093 --- gcc/ChangeLog | 1 + gcc/config/i386/i386.md | 4 ++-- gcc/testsuite/ChangeLog | 1 + .../gcc.c-torture/compile/20010117-2.c | 20 +++++++++++++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/20010117-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2ab5dce2ccd..37baa52a7eb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,7 @@ 2001-01-17 Jakub Jelinek * config/i386/i386.md (cmpqi_minus_1): Use {b} for QImode operation. + Use q constraints instead of r. Tue Jan 16 22:23:04 2001 Alan Modra (alan@linuxcare.com.au) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 99111acee47..125b9fc6a5d 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -1154,8 +1154,8 @@ (define_insn "*cmpqi_minus_1" [(set (reg 17) - (compare (minus:QI (match_operand:QI 0 "nonimmediate_operand" "rm,r") - (match_operand:QI 1 "general_operand" "ri,mr")) + (compare (minus:QI (match_operand:QI 0 "nonimmediate_operand" "qm,q") + (match_operand:QI 1 "general_operand" "qi,mq")) (const_int 0)))] "ix86_match_ccmode (insn, CCGOCmode)" "cmp{b}\\t{%1, %0|%0, %1}" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7ff22a20a8a..4dc5f061b31 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,7 @@ 2001-01-17 Jakub Jelinek * gcc.c-torture/compile/20010117-1.c: New test. + * gcc.c-torture/compile/20010117-2.c: New test. 2001-01-15 Toon Moene diff --git a/gcc/testsuite/gcc.c-torture/compile/20010117-2.c b/gcc/testsuite/gcc.c-torture/compile/20010117-2.c new file mode 100644 index 00000000000..813468b56b2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20010117-2.c @@ -0,0 +1,20 @@ +unsigned char a, b; + +void baz (void) +{ + if (b & 0x08) + { + int g = 0; + int c = (b & 0x01); + int d = a - g - c; + int e = (a & 0x0f) - (g & 0x0f); + int f = (a & 0xf0) - (g & 0xf0); + int h = (a & 0x0f) - (g & 0x0f); + + if ((a ^ g) & (a ^ d) & 0x80) b |= 0x40; + if ((d & 0xff00) == 0) b |= 0x01; + if (!((a - h - c) & 0xff)) b |= 0x02; + if ((a - g - c) & 0x80) b |= 0x80; + a = (e & 0x0f) | (f & 0xf0); + } +} -- 2.30.2