This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/18528] New: miscompilation of inline assembler with -fweb
- From: "janne at hybrid dot fi" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 17 Nov 2004 13:47:01 -0000
- Subject: [Bug c/18528] New: miscompilation of inline assembler with -fweb
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
On arm-elf-gcc, I encountered a miscompilation of inline assembly. The
miscompilation only occurs when compiled with -fweb. -fno-web makes the sample
compile correctly even with -O3 (and -fnew-ra).
Here is the configuration:
Reading specs from /home/build/gnu/lib/gcc/arm-elf/3.4.3/specs
Configured with: ../gcc-3.4.3/configure --prefix=/home/build/gnu
--target=arm-elf --disable-shared --enable-multilib --enable-interwork
--enable-languages=c --with-headers=../newlib-1.12.0/newlib/libc/include
--with-newlib
Thread model: single
gcc version 3.4.3
The bug occurs on both Cygwin and Linux hosts.
The sample case is attached inline below.
To compile the case, but the sample in test.c and run the following:
$ arm-elf-gcc -O -fweb test.c
Without -fweb:
$ arm-elf-gcc -O test.c
main() function returns zero in case of correct compilation, 2 otherwise.
ciao,
janne
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "test.c"
typedef signed int HGint32;
typedef signed long long int HGint64;
typedef union
{
struct
{
HGint32 h, l;
} c;
HGint64 r;
} HGint64_s;
HGint64 hgMax64 (HGint64 a, HGint64 b)
{
HGint64_s aa,bb;
HGint32 tmp;
aa.r = a;
bb.r = b;
asm ("subs %[tmp],%[al], %[bl]\n\t" "sbcs %[tmp],%[ah], %[bh]\n\t" "movlt
%[ah], %[bh]\n\t" "movlt %[al], %[bl]\n\t" :
[tmp] "=r&" (tmp),
[ah] "+r" (aa.c.h),
[al] "+r" (aa.c.l) :
[bh] "r" (bb.c.h),
[bl] "r" (bb.c.l) :
"cc");
return aa.r;
}
int main(void)
{
HGint64 a = 400;
HGint64 b = 100;
if(a != hgMax64(a, b))
return 2;
return 0;
}
--
Summary: miscompilation of inline assembler with -fweb
Product: gcc
Version: 3.4.3
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: janne at hybrid dot fi
CC: gcc-bugs at gcc dot gnu dot org
GCC target triplet: arm-elf
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18528