This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/38469] New: Wrong code for a function with long long argument returning int.
- From: "niva at niisi dot msk dot ru" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 10 Dec 2008 10:26:12 -0000
- Subject: [Bug c/38469] New: Wrong code for a function with long long argument returning int.
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
We used the snapshot gcc-4.1-20080630.
The command line is:
mips64-none-elf-gcc-4.1.3 -O1 -mabi=o64 lltst.c -fverbose-asm -S
The source file is:
int equ(unsigned long long rc)
{
if ((rc & 0x00000000ffffffffULL) == 0x00000000ULL)
return 1;
return 0;
}
The assembler code generated is such that the result of the "equ" function
depends on the high part of the argument while it shouldn't:
equ:
.frame $sp,0,$31 # vars= 0, regs= 0/0, args= 0, gp= 0
.mask 0x00000000,0
.fmask 0x00000000,0
.set noreorder
.set nomacro
j $31
sltu $2,$4,1 # <result>, rc
.set macro
.set reorder
.end equ
It seems that the wrong code is produced after the "combine" RTL pass.
--
Summary: Wrong code for a function with long long argument
returning int.
Product: gcc
Version: 4.1.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: niva at niisi dot msk dot ru
GCC build triplet: i386-redhat-linux
GCC host triplet: i386-redhat-linux
GCC target triplet: mips64-none-elf
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38469