--- Ed L Cashin <ecashin@uga.edu> wrote: > Hi. That sounds like a question about the C > language, but assuming > that you only care about gcc (since this is > kernelnewbies), why not > just check and see? > > ecashin@marblerye tmp$ cat test.c > #include <stdio.h> > > long long f(void) > { > long long i = 0x0123456789abcdefLL; > > return i; > } > > int main(void) > { > long long i = f(); > > printf("0x%Lx\n", i); > return 0; > } The assembly equivalent of this code is enlightening. 64 bit values are returned through the %eax and %edx registers rather than through %eax alone. Relevant portions are attached.. .globl f .type f,@function f: pushl %ebp movl %esp, %ebp subl $8, %esp movl $-1985229329, -8(%ebp) movl $19088743, -4(%ebp) movl -8(%ebp), %eax <--------- copy to eax movl -4(%ebp), %edx <--------- and edx to return it leave ret ---------- .globl main .type main,@function main: pushl %ebp movl %esp, %ebp subl $8, %esp andl $-16, %esp movl $0, %eax subl %eax, %esp call f movl %eax, -8(%ebp)<--------- take up the movl %edx, -4(%ebp)<--------- return value subl $4, %esp pushl -4(%ebp) pushl -8(%ebp) pushl $.LC0 call printf -------- ===== Regards, Kiran Kumar Immidi __________________________________ Do you Yahoo!? Protect your identity with Yahoo! Mail AddressGuard http://antispam.yahoo.com/whatsnewfree -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/