This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Passing 64-bit function arguments to assembler
- From: Andrew Pinski <pinskia at gmail dot com>
- To: Mischa Baars <mjbaars1977 at gmail dot com>
- Cc: gcc at gcc dot gnu dot org
- Date: Fri, 12 Oct 2012 02:01:37 -0700
- Subject: Re: Passing 64-bit function arguments to assembler
- References: <5077DB11.7080701@cyberfiber.org>
On Fri, Oct 12, 2012 at 1:55 AM, Mischa Baars <mjbaars1977@gmail.com> wrote:
> Hi,
>
> Here's a possible bug in the compiler:
>
> As can be seen from the objdump output, 64-bit arguments are passed in
> 32-bit registers
>
> 000000000040049c <main>:
> 40049c: 55 push rbp
> 40049d: 48 89 e5 mov rbp,rsp
> 4004a0: be 44 44 00 00 mov esi,0x4444
this is the same as
mov rsi, 0x4444
As all instructions which act on the lower 32bit part of the register
are zero extended into the full 64bit register.
> 4004a5: bf 33 33 00 00 mov edi,0x3333
Likewise.
Thanks,
Andrew Pinski
PS this question is more relevant to the gcc-help mailing list than the gcc one.
> 4004aa: e8 05 00 00 00 call 4004b4 <function>
> 4004af: 90 nop
> 4004b0: 5d pop rbp
> 4004b1: c3 ret
> 4004b2: 66 90 xchg ax,ax
>
> also the opcodes on line 4004AF and 4004B2 seem obsolete.
>
> Best Regards,
> Mischa.