public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/11965] New: On SPARC, gcc produces invalid assembler code for a shift << 32 operation
@ 2003-08-18 12:41 jk at tools dot de
  2003-08-18 17:35 ` [Bug c/11965] " falk at debian dot org
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: jk at tools dot de @ 2003-08-18 12:41 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11965

           Summary: On SPARC, gcc produces invalid assembler code for a
                    shift << 32 operation
           Product: gcc
           Version: 3.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jk at tools dot de
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: sparc-sun-solaris2.8
  GCC host triplet: sparc-sun-solaris2.8
GCC target triplet: sparc-sun-solaris2.8

GCC 3.3 on Solaris SPARC produces invalid assembler code, for shift operator
shifting 32 bits.

GCC 3.3 is compiled to use the system's assembler, /usr/ccs/bin/as


To reproduce the issue (admitted, this code has undefined behaviour):

% cat shift.c

#if __GNUC__
#define ATTR_ALWAYS_INLINE __attribute__ ((__always_inline__))
#else
#define ATTR_ALWAYS_INLINE
#endif


static ATTR_ALWAYS_INLINE unsigned
put_bits(int n, unsigned int value)
{
        return value << n;
}

main()
{
        unsigned val = 1;
        int i;

        for (i = 0; i < 4; i++)
                val = put_bits(32, val);

        printf("val=%x\n", val);
}

% gcc -O3 -mcpu=ultrasparc -o shift shift.c
/usr/ccs/bin/as: "/tmp/cc0VFu29.s", line 20: error: shift count negative or too
big: 32


Looking at the generated assembler source...

% gcc -O3 -mcpu=ultrasparc -S shift.c

... there's a shift instruction with a constant shift count of 32, where the
immediate shift count is restricted to the range 0 .. 31 on SPARC:

       sll     %o1, 32, %o1


The same code used to compile with gcc 3.2 and erlier, and it does compile with
gcc 3.3 at optimization level -O2 or when option -mcpu=ultrasparc is not used.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c/11965] On SPARC, gcc produces invalid assembler code for a shift << 32 operation
  2003-08-18 12:41 [Bug c/11965] New: On SPARC, gcc produces invalid assembler code for a shift << 32 operation jk at tools dot de
@ 2003-08-18 17:35 ` falk at debian dot org
  2003-08-19 20:04 ` martin at netbsd dot org
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: falk at debian dot org @ 2003-08-18 17:35 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11965


falk at debian dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|                            |1


------- Additional Comments From falk at debian dot org  2003-08-18 17:35 -------
I can reproduce this on Sparc Linux with gcc 3.3.1 20030728 (Debian prerelease).


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c/11965] On SPARC, gcc produces invalid assembler code for a shift << 32 operation
  2003-08-18 12:41 [Bug c/11965] New: On SPARC, gcc produces invalid assembler code for a shift << 32 operation jk at tools dot de
  2003-08-18 17:35 ` [Bug c/11965] " falk at debian dot org
@ 2003-08-19 20:04 ` martin at netbsd dot org
  2003-08-23  1:22 ` dhazeghi at yahoo dot com
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: martin at netbsd dot org @ 2003-08-19 20:04 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11965


martin at netbsd dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |martin at netbsd dot org


------- Additional Comments From martin at netbsd dot org  2003-08-19 20:04 -------
Forgot to mention: I used gcc version 3.3.1.
I initially left out the 32bit changes (since that cases currently seem to not
be triggered), but Ian L. Taylor told me you can not rely on that and pointed to
the mips backends way of handling it.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug c/11965] On SPARC, gcc produces invalid assembler code for a shift << 32 operation
  2003-08-18 12:41 [Bug c/11965] New: On SPARC, gcc produces invalid assembler code for a shift << 32 operation jk at tools dot de
  2003-08-18 17:35 ` [Bug c/11965] " falk at debian dot org
  2003-08-19 20:04 ` martin at netbsd dot org
@ 2003-08-23  1:22 ` dhazeghi at yahoo dot com
  2003-08-23 14:24 ` [Bug target/11965] [3.3/3.4 Regression] " pinskia at gcc dot gnu dot org
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: dhazeghi at yahoo dot com @ 2003-08-23  1:22 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11965


dhazeghi at yahoo dot com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code
   Target Milestone|3.4                         |---


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug target/11965] [3.3/3.4 Regression] On SPARC, gcc produces invalid assembler code for a shift << 32 operation
  2003-08-18 12:41 [Bug c/11965] New: On SPARC, gcc produces invalid assembler code for a shift << 32 operation jk at tools dot de
                   ` (2 preceding siblings ...)
  2003-08-23  1:22 ` dhazeghi at yahoo dot com
@ 2003-08-23 14:24 ` pinskia at gcc dot gnu dot org
  2003-09-09 14:51 ` [Bug target/11965] [3.3/3.4 Regression] " ebotcazou at gcc dot gnu dot org
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2003-08-23 14:24 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11965


pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|c                           |target
            Summary|On SPARC, gcc produces      |[3.3/3.4 Regression] On
                   |invalid assembler code for a|SPARC, gcc produces invalid
                   |shift << 32 operation       |assembler code for a shift
                   |                            |<< 32 operation
   Target Milestone|---                         |3.3.2


------- Additional Comments From pinskia at gcc dot gnu dot org  2003-08-23 14:24 -------
This is a regression from 3.2.3 and there is even a patch.


Martin can you send the patch to gcc-patches saying this fixes this PR?


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug target/11965] [3.3/3.4 Regression] invalid assembler code for a shift << 32 operation
  2003-08-18 12:41 [Bug c/11965] New: On SPARC, gcc produces invalid assembler code for a shift << 32 operation jk at tools dot de
                   ` (3 preceding siblings ...)
  2003-08-23 14:24 ` [Bug target/11965] [3.3/3.4 Regression] " pinskia at gcc dot gnu dot org
@ 2003-09-09 14:51 ` ebotcazou at gcc dot gnu dot org
  2003-09-10 12:59 ` cvs-commit at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: ebotcazou at gcc dot gnu dot org @ 2003-09-09 14:51 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11965


ebotcazou at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |ebotcazou at gcc dot gnu dot
                   |dot org                     |org
             Status|NEW                         |ASSIGNED


------- Additional Comments From ebotcazou at gcc dot gnu dot org  2003-09-09 14:51 -------
I'll bootstrap/regtest it for SPARC and SPARC64 on the 3.3 branch and install it.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug target/11965] [3.3/3.4 Regression] invalid assembler code for a shift << 32 operation
  2003-08-18 12:41 [Bug c/11965] New: On SPARC, gcc produces invalid assembler code for a shift << 32 operation jk at tools dot de
                   ` (4 preceding siblings ...)
  2003-09-09 14:51 ` [Bug target/11965] [3.3/3.4 Regression] " ebotcazou at gcc dot gnu dot org
@ 2003-09-10 12:59 ` cvs-commit at gcc dot gnu dot org
  2003-09-10 13:04 ` cvs-commit at gcc dot gnu dot org
  2003-09-10 13:05 ` ebotcazou at gcc dot gnu dot org
  7 siblings, 0 replies; 9+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2003-09-10 12:59 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11965



------- Additional Comments From cvs-commit at gcc dot gnu dot org  2003-09-10 12:59 -------
Subject: Bug 11965

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	ebotcazou@gcc.gnu.org	2003-09-10 12:59:36

Modified files:
	gcc            : ChangeLog 
	gcc/config/sparc: sparc.c sparc.md 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/gcc.dg: ultrasp10.c 

Log message:
	PR target/11965
	* config/sparc/sparc.c (sparc_v8plus_shift): Protect against
	constants greater than 63.
	* config/sparc/sparc.md (ashlsi3, ashrsi3, lshrsi3): Protect
	against constants greater than 31.
	(*ashldi3_sp64, *ashrdi3_sp64, *lshrdi3_sp64): Protect against
	constants greater than 63.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.1022&r2=2.1023
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/sparc/sparc.c.diff?cvsroot=gcc&r1=1.258&r2=1.259
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/sparc/sparc.md.diff?cvsroot=gcc&r1=1.190&r2=1.191
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.3047&r2=1.3048
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.dg/ultrasp10.c.diff?cvsroot=gcc&r1=NONE&r2=1.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug target/11965] [3.3/3.4 Regression] invalid assembler code for a shift << 32 operation
  2003-08-18 12:41 [Bug c/11965] New: On SPARC, gcc produces invalid assembler code for a shift << 32 operation jk at tools dot de
                   ` (5 preceding siblings ...)
  2003-09-10 12:59 ` cvs-commit at gcc dot gnu dot org
@ 2003-09-10 13:04 ` cvs-commit at gcc dot gnu dot org
  2003-09-10 13:05 ` ebotcazou at gcc dot gnu dot org
  7 siblings, 0 replies; 9+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2003-09-10 13:04 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11965



------- Additional Comments From cvs-commit at gcc dot gnu dot org  2003-09-10 13:04 -------
Subject: Bug 11965

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-3_3-branch
Changes by:	ebotcazou@gcc.gnu.org	2003-09-10 13:04:00

Modified files:
	gcc            : ChangeLog 
	gcc/config/sparc: sparc.c sparc.md 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/gcc.dg: ultrasp10.c 

Log message:
	PR target/11965
	* config/sparc/sparc.c (sparc_v8plus_shift): Protect against
	constants greater than 63.
	* config/sparc/sparc.md (ashlsi3, ashrsi3, lshrsi3): Protect
	against constants greater than 31.
	(*ashldi3_sp64, *ashrdi3_sp64, *lshrdi3_sp64): Protect against
	constants greater than 63.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.16114.2.734&r2=1.16114.2.735
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/sparc/sparc.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.233.4.5&r2=1.233.4.6
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/sparc/sparc.md.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.181.4.6&r2=1.181.4.7
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.2261.2.276&r2=1.2261.2.277
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.dg/ultrasp10.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=NONE&r2=1.1.2.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug target/11965] [3.3/3.4 Regression] invalid assembler code for a shift << 32 operation
  2003-08-18 12:41 [Bug c/11965] New: On SPARC, gcc produces invalid assembler code for a shift << 32 operation jk at tools dot de
                   ` (6 preceding siblings ...)
  2003-09-10 13:04 ` cvs-commit at gcc dot gnu dot org
@ 2003-09-10 13:05 ` ebotcazou at gcc dot gnu dot org
  7 siblings, 0 replies; 9+ messages in thread
From: ebotcazou at gcc dot gnu dot org @ 2003-09-10 13:05 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11965


ebotcazou at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|ebotcazou at gcc dot gnu dot|
                   |org                         |
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED


------- Additional Comments From ebotcazou at gcc dot gnu dot org  2003-09-10 13:05 -------
Done.


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2003-09-10 13:05 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-08-18 12:41 [Bug c/11965] New: On SPARC, gcc produces invalid assembler code for a shift << 32 operation jk at tools dot de
2003-08-18 17:35 ` [Bug c/11965] " falk at debian dot org
2003-08-19 20:04 ` martin at netbsd dot org
2003-08-23  1:22 ` dhazeghi at yahoo dot com
2003-08-23 14:24 ` [Bug target/11965] [3.3/3.4 Regression] " pinskia at gcc dot gnu dot org
2003-09-09 14:51 ` [Bug target/11965] [3.3/3.4 Regression] " ebotcazou at gcc dot gnu dot org
2003-09-10 12:59 ` cvs-commit at gcc dot gnu dot org
2003-09-10 13:04 ` cvs-commit at gcc dot gnu dot org
2003-09-10 13:05 ` ebotcazou at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).