[Bug target/39090] MIPS: wrong-code with 64-bit values and register asm constraints with o32 ABI.
nemet at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Tue Feb 3 18:37:00 GMT 2009
------- Comment #1 from nemet at gcc dot gnu dot org 2009-02-03 18:36 -------
> Register $3 (v1) returns with uninitialized garbage. This is the high part of
> the 64 bit return value.
>
> I am not sure what should happen here. Really the "d" asm constraint should
> not match a 64 bit variable for the o32 ABI.
No, I think it should. You just need to use high-part and low-part operand
codes to refer to the 32-bit parts:
unsigned long long bar(unsigned long long l)
{
unsigned long long rv;
asm volatile ("#fill %L0; #fill %M0" : "=d" (rv));
return rv;
}
#APP
# 4 "s.c" 1
#fill $5; #fill $4
# 0 "" 2
#NO_APP
move $2,$4
.set noreorder
.set nomacro
j $31
move $3,$5
.set macro
.set reorder
--
nemet at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |nemet at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39090
More information about the Gcc-bugs
mailing list