[LLVMbugs] [Bug 6796] New: Varargs on amd64 generates very strange code

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Tue Apr 6 09:51:59 PDT 2010


http://llvm.org/bugs/show_bug.cgi?id=6796

           Summary: Varargs on amd64 generates very strange code
           Product: libraries
           Version: trunk
          Platform: Macintosh
        OS/Version: FreeBSD
            Status: NEW
          Severity: normal
          Priority: P
         Component: Backend: X86
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: ed at 80386.nl
                CC: llvmbugs at cs.uiuc.edu


The following code generates very different code when using GCC 4.2.1/Clang
SVN. The generated code also makes little sense.

int
foo(int a, ...)
{
    int r;
    __builtin_va_list va;

    __builtin_va_start(va, a);
    r = __builtin_va_arg(va, int);
    __builtin_va_end(va);
    return (r);
}

GCC:

0000000000000000 <foo>:
   0:    48 83 ec 60              sub    $0x60,%rsp
   4:    48 8d 44 24 68           lea    0x68(%rsp),%rax
   9:    48 89 74 24 b0           mov    %rsi,0xffffffffffffffb0(%rsp)
   e:    c7 44 24 88 10 00 00     movl   $0x10,0xffffffffffffff88(%rsp)
  15:    00 
  16:    48 89 44 24 90           mov    %rax,0xffffffffffffff90(%rsp)
  1b:    48 8d 44 24 a8           lea    0xffffffffffffffa8(%rsp),%rax
  20:    48 89 44 24 98           mov    %rax,0xffffffffffffff98(%rsp)
  25:    48 83 c0 08              add    $0x8,%rax
  29:    8b 00                    mov    (%rax),%eax
  2b:    48 83 c4 60              add    $0x60,%rsp
  2f:    c3                       retq   

Clang:

0000000000000000 <foo>:
   0:    55                       push   %rbp
   1:    48 89 e5                 mov    %rsp,%rbp
   4:    48 83 ec 50              sub    $0x50,%rsp
   8:    84 c0                    test   %al,%al
   a:    74 26                    je     32 <foo+0x32>
   c:    0f 29 85 60 ff ff ff     movaps %xmm0,0xffffffffffffff60(%rbp)
  13:    0f 29 8d 70 ff ff ff     movaps %xmm1,0xffffffffffffff70(%rbp)
  1a:    0f 29 55 80              movaps %xmm2,0xffffffffffffff80(%rbp)
  1e:    0f 29 5d 90              movaps %xmm3,0xffffffffffffff90(%rbp)
  22:    0f 29 65 a0              movaps %xmm4,0xffffffffffffffa0(%rbp)
  26:    0f 29 6d b0              movaps %xmm5,0xffffffffffffffb0(%rbp)
  2a:    0f 29 75 c0              movaps %xmm6,0xffffffffffffffc0(%rbp)
  2e:    0f 29 7d d0              movaps %xmm7,0xffffffffffffffd0(%rbp)
  32:    4c 89 8d 58 ff ff ff     mov    %r9,0xffffffffffffff58(%rbp)
  39:    4c 89 85 50 ff ff ff     mov    %r8,0xffffffffffffff50(%rbp)
  40:    48 89 8d 48 ff ff ff     mov    %rcx,0xffffffffffffff48(%rbp)
  47:    48 89 95 40 ff ff ff     mov    %rdx,0xffffffffffffff40(%rbp)
  4e:    48 89 b5 38 ff ff ff     mov    %rsi,0xffffffffffffff38(%rbp)
  55:    48 8d 85 30 ff ff ff     lea    0xffffffffffffff30(%rbp),%rax
  5c:    48 89 45 f8              mov    %rax,0xfffffffffffffff8(%rbp)
  60:    48 8d 45 10              lea    0x10(%rbp),%rax
  64:    48 89 45 f0              mov    %rax,0xfffffffffffffff0(%rbp)
  68:    c7 45 ec 30 00 00 00     movl   $0x30,0xffffffffffffffec(%rbp)
  6f:    c7 45 e8 08 00 00 00     movl   $0x8,0xffffffffffffffe8(%rbp)
  76:    48 63 45 e8              movslq 0xffffffffffffffe8(%rbp),%rax
  7a:    48 83 f8 28              cmp    $0x28,%rax
  7e:    77 0f                    ja     8f <foo+0x8f>
  80:    48 89 c1                 mov    %rax,%rcx
  83:    48 03 4d f8              add    0xfffffffffffffff8(%rbp),%rcx
  87:    83 c0 08                 add    $0x8,%eax
  8a:    89 45 e8                 mov    %eax,0xffffffffffffffe8(%rbp)
  8d:    eb 0c                    jmp    9b <foo+0x9b>
  8f:    48 8b 4d f0              mov    0xfffffffffffffff0(%rbp),%rcx
  93:    48 8d 41 08              lea    0x8(%rcx),%rax
  97:    48 89 45 f0              mov    %rax,0xfffffffffffffff0(%rbp)
  9b:    8b 01                    mov    (%rcx),%eax
  9d:    48 83 c4 50              add    $0x50,%rsp
  a1:    5d                       pop    %rbp
  a2:    c3                       retq

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list