[Bug target/20263] New: Incorrect asm for global register vars on sparc64
gcc-bugzilla at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Tue Mar 1 16:45:00 GMT 2005
Using a global variable tied to register g7 generates invalid assembly
code on sparc64.
Consider:
register void *tp __asm__("%g7");
void set_tp() {
tp = 0;
}
Compiling this file produces an error and a warning from the assembler:
/usr/ccs/bin/as: "/var/tmp//ccLsIpQg.s", line 2: error: statement syntax
/usr/ccs/bin/as: "/var/tmp//ccLsIpQg.s", line 10: warning: detect global register use not covered .register pseudo-op
Environment:
System: SunOS plg2.math 5.8 Generic_117350-18 sun4u sparc SUNW,Sun-Fire-880
Architecture: sun4
host: sparc64-sun-solaris2.8
build: sparc64-sun-solaris2.8
target: sparc64-sun-solaris2.8
configured with: ../gcc/configure --prefix=/u/rcbilson/software/gcc --enable-languages=c,c++ sparc64-sun-solaris2.8
How-To-Repeat:
Attempt to compile the above program fragment.
------- Additional Comments From rcbilson at plg dot uwaterloo dot ca 2005-03-01 16:45 -------
Fix:
Examining the -S output shows that the .register op generated by the
compiler is
.register %g7, %g7
The second operand seems to be incorrect -- it ought to be a plain
name, not a register name. Replacing this op with
.register %g7, g7
allows the code to assemble, eliminating both the error and the
warning.
I don't know enough about .register to be confident in suggesting an
appropriate identifier to use for the second operand.
--
Summary: Incorrect asm for global register vars on sparc64
Product: gcc
Version: 1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rcbilson at plg dot uwaterloo dot ca
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: sparc64-sun-solaris2.8
GCC host triplet: sparc64-sun-solaris2.8
GCC target triplet: sparc64-sun-solaris2.8
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20263
More information about the Gcc-bugs
mailing list