diff --git a/llvm/test/CodeGen/X86/i128-fp128-abi.ll b/llvm/test/CodeGen/X86/i128-fp128-abi.ll index be8f7923b8f98..4152dcf07f7e7 100644 --- a/llvm/test/CodeGen/X86/i128-fp128-abi.ll +++ b/llvm/test/CodeGen/X86/i128-fp128-abi.ll @@ -1,4 +1,4 @@ -; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --no_x86_scrub_sp ; Combined ABI tests for fp128 and i128 @@ -15,6 +15,154 @@ ; RUN: sed 's/PrimTy/fp128/g' %s | sed 's/Prim0/0xL0/g' | llc -mtriple=i686-pc-windows-msvc -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-MSVC32 ; RUN: sed 's/PrimTy/i128/g' %s | sed 's/Prim0/0/g' | llc -mtriple=i686-pc-windows-msvc -verify-machineinstrs | FileCheck %s --check-prefix=CHECK-MSVC32 +define void @store(PrimTy %x, ptr %p) nounwind { +; CHECK-X64-F128-LABEL: store: +; CHECK-X64-F128: # %bb.0: +; CHECK-X64-F128-NEXT: movaps %xmm0, (%rdi) +; CHECK-X64-F128-NEXT: retq +; +; CHECK-X64-I128-LABEL: store: +; CHECK-X64-I128: # %bb.0: +; CHECK-X64-I128-NEXT: movq %rsi, 8(%rdx) +; CHECK-X64-I128-NEXT: movq %rdi, (%rdx) +; CHECK-X64-I128-NEXT: retq +; +; CHECK-MSVC64-F128-LABEL: store: +; CHECK-MSVC64-F128: # %bb.0: +; CHECK-MSVC64-F128-NEXT: movaps (%rcx), %xmm0 +; CHECK-MSVC64-F128-NEXT: movaps %xmm0, (%rdx) +; CHECK-MSVC64-F128-NEXT: retq +; +; CHECK-MSVC64-I128-LABEL: store: +; CHECK-MSVC64-I128: # %bb.0: +; CHECK-MSVC64-I128-NEXT: movq %rdx, 8(%r8) +; CHECK-MSVC64-I128-NEXT: movq %rcx, (%r8) +; CHECK-MSVC64-I128-NEXT: retq +; +; CHECK-MINGW-F128-LABEL: store: +; CHECK-MINGW-F128: # %bb.0: +; CHECK-MINGW-F128-NEXT: movaps (%rcx), %xmm0 +; CHECK-MINGW-F128-NEXT: movaps %xmm0, (%rdx) +; CHECK-MINGW-F128-NEXT: retq +; +; CHECK-MINGW-I128-LABEL: store: +; CHECK-MINGW-I128: # %bb.0: +; CHECK-MINGW-I128-NEXT: movq %rdx, 8(%r8) +; CHECK-MINGW-I128-NEXT: movq %rcx, (%r8) +; CHECK-MINGW-I128-NEXT: retq +; +; CHECK-X86-LABEL: store: +; CHECK-X86: # %bb.0: +; CHECK-X86-NEXT: pushl %edi +; CHECK-X86-NEXT: pushl %esi +; CHECK-X86-NEXT: movl 12(%esp), %eax +; CHECK-X86-NEXT: movl 16(%esp), %ecx +; CHECK-X86-NEXT: movl 20(%esp), %edx +; CHECK-X86-NEXT: movl 24(%esp), %esi +; CHECK-X86-NEXT: movl 28(%esp), %edi +; CHECK-X86-NEXT: movl %esi, 12(%edi) +; CHECK-X86-NEXT: movl %edx, 8(%edi) +; CHECK-X86-NEXT: movl %ecx, 4(%edi) +; CHECK-X86-NEXT: movl %eax, (%edi) +; CHECK-X86-NEXT: popl %esi +; CHECK-X86-NEXT: popl %edi +; CHECK-X86-NEXT: retl +; +; CHECK-MSVC32-LABEL: store: +; CHECK-MSVC32: # %bb.0: +; CHECK-MSVC32-NEXT: pushl %edi +; CHECK-MSVC32-NEXT: pushl %esi +; CHECK-MSVC32-NEXT: movl 12(%esp), %eax +; CHECK-MSVC32-NEXT: movl 16(%esp), %ecx +; CHECK-MSVC32-NEXT: movl 20(%esp), %edx +; CHECK-MSVC32-NEXT: movl 24(%esp), %esi +; CHECK-MSVC32-NEXT: movl 28(%esp), %edi +; CHECK-MSVC32-NEXT: movl %esi, 12(%edi) +; CHECK-MSVC32-NEXT: movl %edx, 8(%edi) +; CHECK-MSVC32-NEXT: movl %ecx, 4(%edi) +; CHECK-MSVC32-NEXT: movl %eax, (%edi) +; CHECK-MSVC32-NEXT: popl %esi +; CHECK-MSVC32-NEXT: popl %edi +; CHECK-MSVC32-NEXT: retl + store PrimTy %x, ptr %p + ret void +} + +; Illustrate stack alignment +; FIXME(#77401): alignment on x86-32 is ABI-incorrect. +define void @store_perturbed(i8 %_0, PrimTy %x, ptr %p) nounwind { +; CHECK-X64-F128-LABEL: store_perturbed: +; CHECK-X64-F128: # %bb.0: +; CHECK-X64-F128-NEXT: movaps %xmm0, (%rsi) +; CHECK-X64-F128-NEXT: retq +; +; CHECK-X64-I128-LABEL: store_perturbed: +; CHECK-X64-I128: # %bb.0: +; CHECK-X64-I128-NEXT: movq %rdx, 8(%rcx) +; CHECK-X64-I128-NEXT: movq %rsi, (%rcx) +; CHECK-X64-I128-NEXT: retq +; +; CHECK-MSVC64-F128-LABEL: store_perturbed: +; CHECK-MSVC64-F128: # %bb.0: +; CHECK-MSVC64-F128-NEXT: movaps (%rdx), %xmm0 +; CHECK-MSVC64-F128-NEXT: movaps %xmm0, (%r8) +; CHECK-MSVC64-F128-NEXT: retq +; +; CHECK-MSVC64-I128-LABEL: store_perturbed: +; CHECK-MSVC64-I128: # %bb.0: +; CHECK-MSVC64-I128-NEXT: movq %r8, 8(%r9) +; CHECK-MSVC64-I128-NEXT: movq %rdx, (%r9) +; CHECK-MSVC64-I128-NEXT: retq +; +; CHECK-MINGW-F128-LABEL: store_perturbed: +; CHECK-MINGW-F128: # %bb.0: +; CHECK-MINGW-F128-NEXT: movaps (%rdx), %xmm0 +; CHECK-MINGW-F128-NEXT: movaps %xmm0, (%r8) +; CHECK-MINGW-F128-NEXT: retq +; +; CHECK-MINGW-I128-LABEL: store_perturbed: +; CHECK-MINGW-I128: # %bb.0: +; CHECK-MINGW-I128-NEXT: movq %r8, 8(%r9) +; CHECK-MINGW-I128-NEXT: movq %rdx, (%r9) +; CHECK-MINGW-I128-NEXT: retq +; +; CHECK-X86-LABEL: store_perturbed: +; CHECK-X86: # %bb.0: +; CHECK-X86-NEXT: pushl %edi +; CHECK-X86-NEXT: pushl %esi +; CHECK-X86-NEXT: movl 16(%esp), %eax +; CHECK-X86-NEXT: movl 20(%esp), %ecx +; CHECK-X86-NEXT: movl 24(%esp), %edx +; CHECK-X86-NEXT: movl 28(%esp), %esi +; CHECK-X86-NEXT: movl 32(%esp), %edi +; CHECK-X86-NEXT: movl %esi, 12(%edi) +; CHECK-X86-NEXT: movl %edx, 8(%edi) +; CHECK-X86-NEXT: movl %ecx, 4(%edi) +; CHECK-X86-NEXT: movl %eax, (%edi) +; CHECK-X86-NEXT: popl %esi +; CHECK-X86-NEXT: popl %edi +; CHECK-X86-NEXT: retl +; +; CHECK-MSVC32-LABEL: store_perturbed: +; CHECK-MSVC32: # %bb.0: +; CHECK-MSVC32-NEXT: pushl %edi +; CHECK-MSVC32-NEXT: pushl %esi +; CHECK-MSVC32-NEXT: movl 16(%esp), %eax +; CHECK-MSVC32-NEXT: movl 20(%esp), %ecx +; CHECK-MSVC32-NEXT: movl 24(%esp), %edx +; CHECK-MSVC32-NEXT: movl 28(%esp), %esi +; CHECK-MSVC32-NEXT: movl 32(%esp), %edi +; CHECK-MSVC32-NEXT: movl %esi, 12(%edi) +; CHECK-MSVC32-NEXT: movl %edx, 8(%edi) +; CHECK-MSVC32-NEXT: movl %ecx, 4(%edi) +; CHECK-MSVC32-NEXT: movl %eax, (%edi) +; CHECK-MSVC32-NEXT: popl %esi +; CHECK-MSVC32-NEXT: popl %edi +; CHECK-MSVC32-NEXT: retl + store PrimTy %x, ptr %p + ret void +} + define PrimTy @return(ptr %p) nounwind { ; CHECK-X64-F128-LABEL: return: ; CHECK-X64-F128: # %bb.0: @@ -53,8 +201,8 @@ define PrimTy @return(ptr %p) nounwind { ; CHECK-X86: # %bb.0: ; CHECK-X86-NEXT: pushl %edi ; CHECK-X86-NEXT: pushl %esi -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %eax -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx +; CHECK-X86-NEXT: movl 12(%esp), %eax +; CHECK-X86-NEXT: movl 16(%esp), %ecx ; CHECK-X86-NEXT: movl (%ecx), %edx ; CHECK-X86-NEXT: movl 4(%ecx), %esi ; CHECK-X86-NEXT: movl 8(%ecx), %edi @@ -71,8 +219,8 @@ define PrimTy @return(ptr %p) nounwind { ; CHECK-MSVC32: # %bb.0: ; CHECK-MSVC32-NEXT: pushl %edi ; CHECK-MSVC32-NEXT: pushl %esi -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %eax -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %ecx +; CHECK-MSVC32-NEXT: movl 12(%esp), %eax +; CHECK-MSVC32-NEXT: movl 16(%esp), %ecx ; CHECK-MSVC32-NEXT: movl (%ecx), %edx ; CHECK-MSVC32-NEXT: movl 4(%ecx), %esi ; CHECK-MSVC32-NEXT: movl 8(%ecx), %edi @@ -123,11 +271,11 @@ define PrimTy @first_arg(PrimTy %x) nounwind { ; CHECK-X86: # %bb.0: ; CHECK-X86-NEXT: pushl %edi ; CHECK-X86-NEXT: pushl %esi -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %eax -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %edx -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %esi -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %edi +; CHECK-X86-NEXT: movl 12(%esp), %eax +; CHECK-X86-NEXT: movl 16(%esp), %ecx +; CHECK-X86-NEXT: movl 20(%esp), %edx +; CHECK-X86-NEXT: movl 24(%esp), %esi +; CHECK-X86-NEXT: movl 28(%esp), %edi ; CHECK-X86-NEXT: movl %edi, 12(%eax) ; CHECK-X86-NEXT: movl %esi, 8(%eax) ; CHECK-X86-NEXT: movl %edx, 4(%eax) @@ -140,11 +288,11 @@ define PrimTy @first_arg(PrimTy %x) nounwind { ; CHECK-MSVC32: # %bb.0: ; CHECK-MSVC32-NEXT: pushl %edi ; CHECK-MSVC32-NEXT: pushl %esi -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %eax -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %edx -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %esi -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %edi +; CHECK-MSVC32-NEXT: movl 12(%esp), %eax +; CHECK-MSVC32-NEXT: movl 16(%esp), %ecx +; CHECK-MSVC32-NEXT: movl 20(%esp), %edx +; CHECK-MSVC32-NEXT: movl 24(%esp), %esi +; CHECK-MSVC32-NEXT: movl 28(%esp), %edi ; CHECK-MSVC32-NEXT: movl %edi, 12(%eax) ; CHECK-MSVC32-NEXT: movl %esi, 8(%eax) ; CHECK-MSVC32-NEXT: movl %edx, 4(%eax) @@ -155,6 +303,8 @@ define PrimTy @first_arg(PrimTy %x) nounwind { ret PrimTy %x } +; Leading args such that i128 is the last possible position where it still +; gets passed in registers. define PrimTy @leading_args(i64 %_0, i64 %_1, i64 %_2, i64 %_3, PrimTy %x) nounwind { ; CHECK-X64-F128-LABEL: leading_args: ; CHECK-X64-F128: # %bb.0: @@ -168,37 +318,37 @@ define PrimTy @leading_args(i64 %_0, i64 %_1, i64 %_2, i64 %_3, PrimTy %x) nounw ; ; CHECK-MSVC64-F128-LABEL: leading_args: ; CHECK-MSVC64-F128: # %bb.0: -; CHECK-MSVC64-F128-NEXT: movq {{[0-9]+}}(%rsp), %rax +; CHECK-MSVC64-F128-NEXT: movq 40(%rsp), %rax ; CHECK-MSVC64-F128-NEXT: movaps (%rax), %xmm0 ; CHECK-MSVC64-F128-NEXT: retq ; ; CHECK-MSVC64-I128-LABEL: leading_args: ; CHECK-MSVC64-I128: # %bb.0: -; CHECK-MSVC64-I128-NEXT: movq {{[0-9]+}}(%rsp), %rax -; CHECK-MSVC64-I128-NEXT: movq {{[0-9]+}}(%rsp), %rdx +; CHECK-MSVC64-I128-NEXT: movq 40(%rsp), %rax +; CHECK-MSVC64-I128-NEXT: movq 48(%rsp), %rdx ; CHECK-MSVC64-I128-NEXT: retq ; ; CHECK-MINGW-F128-LABEL: leading_args: ; CHECK-MINGW-F128: # %bb.0: -; CHECK-MINGW-F128-NEXT: movq {{[0-9]+}}(%rsp), %rax +; CHECK-MINGW-F128-NEXT: movq 40(%rsp), %rax ; CHECK-MINGW-F128-NEXT: movaps (%rax), %xmm0 ; CHECK-MINGW-F128-NEXT: retq ; ; CHECK-MINGW-I128-LABEL: leading_args: ; CHECK-MINGW-I128: # %bb.0: -; CHECK-MINGW-I128-NEXT: movq {{[0-9]+}}(%rsp), %rax -; CHECK-MINGW-I128-NEXT: movq {{[0-9]+}}(%rsp), %rdx +; CHECK-MINGW-I128-NEXT: movq 40(%rsp), %rax +; CHECK-MINGW-I128-NEXT: movq 48(%rsp), %rdx ; CHECK-MINGW-I128-NEXT: retq ; ; CHECK-X86-LABEL: leading_args: ; CHECK-X86: # %bb.0: ; CHECK-X86-NEXT: pushl %edi ; CHECK-X86-NEXT: pushl %esi -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %eax -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %edx -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %esi -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %edi +; CHECK-X86-NEXT: movl 12(%esp), %eax +; CHECK-X86-NEXT: movl 48(%esp), %ecx +; CHECK-X86-NEXT: movl 52(%esp), %edx +; CHECK-X86-NEXT: movl 56(%esp), %esi +; CHECK-X86-NEXT: movl 60(%esp), %edi ; CHECK-X86-NEXT: movl %edi, 12(%eax) ; CHECK-X86-NEXT: movl %esi, 8(%eax) ; CHECK-X86-NEXT: movl %edx, 4(%eax) @@ -211,11 +361,11 @@ define PrimTy @leading_args(i64 %_0, i64 %_1, i64 %_2, i64 %_3, PrimTy %x) nounw ; CHECK-MSVC32: # %bb.0: ; CHECK-MSVC32-NEXT: pushl %edi ; CHECK-MSVC32-NEXT: pushl %esi -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %eax -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %edx -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %esi -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %edi +; CHECK-MSVC32-NEXT: movl 12(%esp), %eax +; CHECK-MSVC32-NEXT: movl 48(%esp), %ecx +; CHECK-MSVC32-NEXT: movl 52(%esp), %edx +; CHECK-MSVC32-NEXT: movl 56(%esp), %esi +; CHECK-MSVC32-NEXT: movl 60(%esp), %edi ; CHECK-MSVC32-NEXT: movl %edi, 12(%eax) ; CHECK-MSVC32-NEXT: movl %esi, 8(%eax) ; CHECK-MSVC32-NEXT: movl %edx, 4(%eax) @@ -226,6 +376,7 @@ define PrimTy @leading_args(i64 %_0, i64 %_1, i64 %_2, i64 %_3, PrimTy %x) nounw ret PrimTy %x } +; The i128 of interest must be in memory. define PrimTy @many_leading_args(i64 %_0, i64 %_1, i64 %_2, i64 %_3, i64 %_4, PrimTy %_5, PrimTy %x) nounwind { ; CHECK-X64-F128-LABEL: many_leading_args: ; CHECK-X64-F128: # %bb.0: @@ -234,43 +385,43 @@ define PrimTy @many_leading_args(i64 %_0, i64 %_1, i64 %_2, i64 %_3, i64 %_4, Pr ; ; CHECK-X64-I128-LABEL: many_leading_args: ; CHECK-X64-I128: # %bb.0: -; CHECK-X64-I128-NEXT: movq {{[0-9]+}}(%rsp), %rax -; CHECK-X64-I128-NEXT: movq {{[0-9]+}}(%rsp), %rdx +; CHECK-X64-I128-NEXT: movq 24(%rsp), %rax +; CHECK-X64-I128-NEXT: movq 32(%rsp), %rdx ; CHECK-X64-I128-NEXT: retq ; ; CHECK-MSVC64-F128-LABEL: many_leading_args: ; CHECK-MSVC64-F128: # %bb.0: -; CHECK-MSVC64-F128-NEXT: movq {{[0-9]+}}(%rsp), %rax +; CHECK-MSVC64-F128-NEXT: movq 56(%rsp), %rax ; CHECK-MSVC64-F128-NEXT: movaps (%rax), %xmm0 ; CHECK-MSVC64-F128-NEXT: retq ; ; CHECK-MSVC64-I128-LABEL: many_leading_args: ; CHECK-MSVC64-I128: # %bb.0: -; CHECK-MSVC64-I128-NEXT: movq {{[0-9]+}}(%rsp), %rax -; CHECK-MSVC64-I128-NEXT: movq {{[0-9]+}}(%rsp), %rdx +; CHECK-MSVC64-I128-NEXT: movq 64(%rsp), %rax +; CHECK-MSVC64-I128-NEXT: movq 72(%rsp), %rdx ; CHECK-MSVC64-I128-NEXT: retq ; ; CHECK-MINGW-F128-LABEL: many_leading_args: ; CHECK-MINGW-F128: # %bb.0: -; CHECK-MINGW-F128-NEXT: movq {{[0-9]+}}(%rsp), %rax +; CHECK-MINGW-F128-NEXT: movq 56(%rsp), %rax ; CHECK-MINGW-F128-NEXT: movaps (%rax), %xmm0 ; CHECK-MINGW-F128-NEXT: retq ; ; CHECK-MINGW-I128-LABEL: many_leading_args: ; CHECK-MINGW-I128: # %bb.0: -; CHECK-MINGW-I128-NEXT: movq {{[0-9]+}}(%rsp), %rax -; CHECK-MINGW-I128-NEXT: movq {{[0-9]+}}(%rsp), %rdx +; CHECK-MINGW-I128-NEXT: movq 64(%rsp), %rax +; CHECK-MINGW-I128-NEXT: movq 72(%rsp), %rdx ; CHECK-MINGW-I128-NEXT: retq ; ; CHECK-X86-LABEL: many_leading_args: ; CHECK-X86: # %bb.0: ; CHECK-X86-NEXT: pushl %edi ; CHECK-X86-NEXT: pushl %esi -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %eax -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %edx -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %esi -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %edi +; CHECK-X86-NEXT: movl 12(%esp), %eax +; CHECK-X86-NEXT: movl 72(%esp), %ecx +; CHECK-X86-NEXT: movl 76(%esp), %edx +; CHECK-X86-NEXT: movl 80(%esp), %esi +; CHECK-X86-NEXT: movl 84(%esp), %edi ; CHECK-X86-NEXT: movl %edi, 12(%eax) ; CHECK-X86-NEXT: movl %esi, 8(%eax) ; CHECK-X86-NEXT: movl %edx, 4(%eax) @@ -283,11 +434,11 @@ define PrimTy @many_leading_args(i64 %_0, i64 %_1, i64 %_2, i64 %_3, i64 %_4, Pr ; CHECK-MSVC32: # %bb.0: ; CHECK-MSVC32-NEXT: pushl %edi ; CHECK-MSVC32-NEXT: pushl %esi -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %eax -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %edx -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %esi -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %edi +; CHECK-MSVC32-NEXT: movl 12(%esp), %eax +; CHECK-MSVC32-NEXT: movl 72(%esp), %ecx +; CHECK-MSVC32-NEXT: movl 76(%esp), %edx +; CHECK-MSVC32-NEXT: movl 80(%esp), %esi +; CHECK-MSVC32-NEXT: movl 84(%esp), %edi ; CHECK-MSVC32-NEXT: movl %edi, 12(%eax) ; CHECK-MSVC32-NEXT: movl %esi, 8(%eax) ; CHECK-MSVC32-NEXT: movl %edx, 4(%eax) @@ -305,43 +456,43 @@ define PrimTy @trailing_arg(i64 %_0, i64 %_1, i64 %_2, i64 %_3, i64 %_4, PrimTy ; ; CHECK-X64-I128-LABEL: trailing_arg: ; CHECK-X64-I128: # %bb.0: -; CHECK-X64-I128-NEXT: movq {{[0-9]+}}(%rsp), %rax -; CHECK-X64-I128-NEXT: movq {{[0-9]+}}(%rsp), %rdx +; CHECK-X64-I128-NEXT: movq 8(%rsp), %rax +; CHECK-X64-I128-NEXT: movq 16(%rsp), %rdx ; CHECK-X64-I128-NEXT: retq ; ; CHECK-MSVC64-F128-LABEL: trailing_arg: ; CHECK-MSVC64-F128: # %bb.0: -; CHECK-MSVC64-F128-NEXT: movq {{[0-9]+}}(%rsp), %rax +; CHECK-MSVC64-F128-NEXT: movq 48(%rsp), %rax ; CHECK-MSVC64-F128-NEXT: movaps (%rax), %xmm0 ; CHECK-MSVC64-F128-NEXT: retq ; ; CHECK-MSVC64-I128-LABEL: trailing_arg: ; CHECK-MSVC64-I128: # %bb.0: -; CHECK-MSVC64-I128-NEXT: movq {{[0-9]+}}(%rsp), %rax -; CHECK-MSVC64-I128-NEXT: movq {{[0-9]+}}(%rsp), %rdx +; CHECK-MSVC64-I128-NEXT: movq 48(%rsp), %rax +; CHECK-MSVC64-I128-NEXT: movq 56(%rsp), %rdx ; CHECK-MSVC64-I128-NEXT: retq ; ; CHECK-MINGW-F128-LABEL: trailing_arg: ; CHECK-MINGW-F128: # %bb.0: -; CHECK-MINGW-F128-NEXT: movq {{[0-9]+}}(%rsp), %rax +; CHECK-MINGW-F128-NEXT: movq 48(%rsp), %rax ; CHECK-MINGW-F128-NEXT: movaps (%rax), %xmm0 ; CHECK-MINGW-F128-NEXT: retq ; ; CHECK-MINGW-I128-LABEL: trailing_arg: ; CHECK-MINGW-I128: # %bb.0: -; CHECK-MINGW-I128-NEXT: movq {{[0-9]+}}(%rsp), %rax -; CHECK-MINGW-I128-NEXT: movq {{[0-9]+}}(%rsp), %rdx +; CHECK-MINGW-I128-NEXT: movq 48(%rsp), %rax +; CHECK-MINGW-I128-NEXT: movq 56(%rsp), %rdx ; CHECK-MINGW-I128-NEXT: retq ; ; CHECK-X86-LABEL: trailing_arg: ; CHECK-X86: # %bb.0: ; CHECK-X86-NEXT: pushl %edi ; CHECK-X86-NEXT: pushl %esi -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %eax -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %ecx -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %edx -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %esi -; CHECK-X86-NEXT: movl {{[0-9]+}}(%esp), %edi +; CHECK-X86-NEXT: movl 12(%esp), %eax +; CHECK-X86-NEXT: movl 56(%esp), %ecx +; CHECK-X86-NEXT: movl 60(%esp), %edx +; CHECK-X86-NEXT: movl 64(%esp), %esi +; CHECK-X86-NEXT: movl 68(%esp), %edi ; CHECK-X86-NEXT: movl %edi, 12(%eax) ; CHECK-X86-NEXT: movl %esi, 8(%eax) ; CHECK-X86-NEXT: movl %edx, 4(%eax) @@ -354,11 +505,11 @@ define PrimTy @trailing_arg(i64 %_0, i64 %_1, i64 %_2, i64 %_3, i64 %_4, PrimTy ; CHECK-MSVC32: # %bb.0: ; CHECK-MSVC32-NEXT: pushl %edi ; CHECK-MSVC32-NEXT: pushl %esi -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %eax -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %ecx -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %edx -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %esi -; CHECK-MSVC32-NEXT: movl {{[0-9]+}}(%esp), %edi +; CHECK-MSVC32-NEXT: movl 12(%esp), %eax +; CHECK-MSVC32-NEXT: movl 56(%esp), %ecx +; CHECK-MSVC32-NEXT: movl 60(%esp), %edx +; CHECK-MSVC32-NEXT: movl 64(%esp), %esi +; CHECK-MSVC32-NEXT: movl 68(%esp), %edi ; CHECK-MSVC32-NEXT: movl %edi, 12(%eax) ; CHECK-MSVC32-NEXT: movl %esi, 8(%eax) ; CHECK-MSVC32-NEXT: movl %edx, 4(%eax) @@ -388,8 +539,8 @@ define void @call_first_arg(PrimTy %x) nounwind { ; CHECK-MSVC64-F128: # %bb.0: ; CHECK-MSVC64-F128-NEXT: subq $56, %rsp ; CHECK-MSVC64-F128-NEXT: movaps (%rcx), %xmm0 -; CHECK-MSVC64-F128-NEXT: movaps %xmm0, {{[0-9]+}}(%rsp) -; CHECK-MSVC64-F128-NEXT: leaq {{[0-9]+}}(%rsp), %rcx +; CHECK-MSVC64-F128-NEXT: movaps %xmm0, 32(%rsp) +; CHECK-MSVC64-F128-NEXT: leaq 32(%rsp), %rcx ; CHECK-MSVC64-F128-NEXT: callq first_arg ; CHECK-MSVC64-F128-NEXT: addq $56, %rsp ; CHECK-MSVC64-F128-NEXT: retq @@ -405,8 +556,8 @@ define void @call_first_arg(PrimTy %x) nounwind { ; CHECK-MINGW-F128: # %bb.0: ; CHECK-MINGW-F128-NEXT: subq $56, %rsp ; CHECK-MINGW-F128-NEXT: movaps (%rcx), %xmm0 -; CHECK-MINGW-F128-NEXT: movaps %xmm0, {{[0-9]+}}(%rsp) -; CHECK-MINGW-F128-NEXT: leaq {{[0-9]+}}(%rsp), %rcx +; CHECK-MINGW-F128-NEXT: movaps %xmm0, 32(%rsp) +; CHECK-MINGW-F128-NEXT: leaq 32(%rsp), %rcx ; CHECK-MINGW-F128-NEXT: callq first_arg ; CHECK-MINGW-F128-NEXT: addq $56, %rsp ; CHECK-MINGW-F128-NEXT: retq @@ -421,11 +572,11 @@ define void @call_first_arg(PrimTy %x) nounwind { ; CHECK-X86-LABEL: call_first_arg: ; CHECK-X86: # %bb.0: ; CHECK-X86-NEXT: subl $40, %esp -; CHECK-X86-NEXT: leal {{[0-9]+}}(%esp), %eax -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) +; CHECK-X86-NEXT: leal 12(%esp), %eax +; CHECK-X86-NEXT: pushl 56(%esp) +; CHECK-X86-NEXT: pushl 56(%esp) +; CHECK-X86-NEXT: pushl 56(%esp) +; CHECK-X86-NEXT: pushl 56(%esp) ; CHECK-X86-NEXT: pushl %eax ; CHECK-X86-NEXT: calll first_arg@PLT ; CHECK-X86-NEXT: addl $56, %esp @@ -481,9 +632,9 @@ define void @call_leading_args(PrimTy %x) nounwind { ; CHECK-MSVC64-F128: # %bb.0: ; CHECK-MSVC64-F128-NEXT: subq $72, %rsp ; CHECK-MSVC64-F128-NEXT: movaps (%rcx), %xmm0 -; CHECK-MSVC64-F128-NEXT: movaps %xmm0, {{[0-9]+}}(%rsp) -; CHECK-MSVC64-F128-NEXT: leaq {{[0-9]+}}(%rsp), %rax -; CHECK-MSVC64-F128-NEXT: movq %rax, {{[0-9]+}}(%rsp) +; CHECK-MSVC64-F128-NEXT: movaps %xmm0, 48(%rsp) +; CHECK-MSVC64-F128-NEXT: leaq 48(%rsp), %rax +; CHECK-MSVC64-F128-NEXT: movq %rax, 32(%rsp) ; CHECK-MSVC64-F128-NEXT: xorl %ecx, %ecx ; CHECK-MSVC64-F128-NEXT: xorl %edx, %edx ; CHECK-MSVC64-F128-NEXT: xorl %r8d, %r8d @@ -495,8 +646,8 @@ define void @call_leading_args(PrimTy %x) nounwind { ; CHECK-MSVC64-I128-LABEL: call_leading_args: ; CHECK-MSVC64-I128: # %bb.0: ; CHECK-MSVC64-I128-NEXT: subq $56, %rsp -; CHECK-MSVC64-I128-NEXT: movq %rdx, {{[0-9]+}}(%rsp) -; CHECK-MSVC64-I128-NEXT: movq %rcx, {{[0-9]+}}(%rsp) +; CHECK-MSVC64-I128-NEXT: movq %rdx, 40(%rsp) +; CHECK-MSVC64-I128-NEXT: movq %rcx, 32(%rsp) ; CHECK-MSVC64-I128-NEXT: xorl %ecx, %ecx ; CHECK-MSVC64-I128-NEXT: xorl %edx, %edx ; CHECK-MSVC64-I128-NEXT: xorl %r8d, %r8d @@ -509,9 +660,9 @@ define void @call_leading_args(PrimTy %x) nounwind { ; CHECK-MINGW-F128: # %bb.0: ; CHECK-MINGW-F128-NEXT: subq $72, %rsp ; CHECK-MINGW-F128-NEXT: movaps (%rcx), %xmm0 -; CHECK-MINGW-F128-NEXT: movaps %xmm0, {{[0-9]+}}(%rsp) -; CHECK-MINGW-F128-NEXT: leaq {{[0-9]+}}(%rsp), %rax -; CHECK-MINGW-F128-NEXT: movq %rax, {{[0-9]+}}(%rsp) +; CHECK-MINGW-F128-NEXT: movaps %xmm0, 48(%rsp) +; CHECK-MINGW-F128-NEXT: leaq 48(%rsp), %rax +; CHECK-MINGW-F128-NEXT: movq %rax, 32(%rsp) ; CHECK-MINGW-F128-NEXT: xorl %ecx, %ecx ; CHECK-MINGW-F128-NEXT: xorl %edx, %edx ; CHECK-MINGW-F128-NEXT: xorl %r8d, %r8d @@ -523,8 +674,8 @@ define void @call_leading_args(PrimTy %x) nounwind { ; CHECK-MINGW-I128-LABEL: call_leading_args: ; CHECK-MINGW-I128: # %bb.0: ; CHECK-MINGW-I128-NEXT: subq $56, %rsp -; CHECK-MINGW-I128-NEXT: movq %rdx, {{[0-9]+}}(%rsp) -; CHECK-MINGW-I128-NEXT: movq %rcx, {{[0-9]+}}(%rsp) +; CHECK-MINGW-I128-NEXT: movq %rdx, 40(%rsp) +; CHECK-MINGW-I128-NEXT: movq %rcx, 32(%rsp) ; CHECK-MINGW-I128-NEXT: xorl %ecx, %ecx ; CHECK-MINGW-I128-NEXT: xorl %edx, %edx ; CHECK-MINGW-I128-NEXT: xorl %r8d, %r8d @@ -536,11 +687,11 @@ define void @call_leading_args(PrimTy %x) nounwind { ; CHECK-X86-LABEL: call_leading_args: ; CHECK-X86: # %bb.0: ; CHECK-X86-NEXT: subl $40, %esp -; CHECK-X86-NEXT: leal {{[0-9]+}}(%esp), %eax -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) +; CHECK-X86-NEXT: leal 12(%esp), %eax +; CHECK-X86-NEXT: pushl 56(%esp) +; CHECK-X86-NEXT: pushl 56(%esp) +; CHECK-X86-NEXT: pushl 56(%esp) +; CHECK-X86-NEXT: pushl 56(%esp) ; CHECK-X86-NEXT: pushl $0 ; CHECK-X86-NEXT: pushl $0 ; CHECK-X86-NEXT: pushl $0 @@ -620,12 +771,12 @@ define void @call_many_leading_args(PrimTy %x) nounwind { ; CHECK-MSVC64-F128-NEXT: subq $88, %rsp ; CHECK-MSVC64-F128-NEXT: movaps (%rcx), %xmm0 ; CHECK-MSVC64-F128-NEXT: xorps %xmm1, %xmm1 -; CHECK-MSVC64-F128-NEXT: movaps %xmm1, {{[0-9]+}}(%rsp) -; CHECK-MSVC64-F128-NEXT: movaps %xmm0, {{[0-9]+}}(%rsp) -; CHECK-MSVC64-F128-NEXT: leaq {{[0-9]+}}(%rsp), %rax -; CHECK-MSVC64-F128-NEXT: movq %rax, {{[0-9]+}}(%rsp) -; CHECK-MSVC64-F128-NEXT: leaq {{[0-9]+}}(%rsp), %rax -; CHECK-MSVC64-F128-NEXT: movq %rax, {{[0-9]+}}(%rsp) +; CHECK-MSVC64-F128-NEXT: movaps %xmm1, 64(%rsp) +; CHECK-MSVC64-F128-NEXT: movaps %xmm0, 48(%rsp) +; CHECK-MSVC64-F128-NEXT: leaq 48(%rsp), %rax +; CHECK-MSVC64-F128-NEXT: movq %rax, 40(%rsp) +; CHECK-MSVC64-F128-NEXT: leaq 64(%rsp), %rax +; CHECK-MSVC64-F128-NEXT: movq %rax, 32(%rsp) ; CHECK-MSVC64-F128-NEXT: xorl %ecx, %ecx ; CHECK-MSVC64-F128-NEXT: xorl %edx, %edx ; CHECK-MSVC64-F128-NEXT: xorl %r8d, %r8d @@ -637,10 +788,10 @@ define void @call_many_leading_args(PrimTy %x) nounwind { ; CHECK-MSVC64-I128-LABEL: call_many_leading_args: ; CHECK-MSVC64-I128: # %bb.0: ; CHECK-MSVC64-I128-NEXT: subq $72, %rsp -; CHECK-MSVC64-I128-NEXT: movq %rdx, {{[0-9]+}}(%rsp) -; CHECK-MSVC64-I128-NEXT: movq %rcx, {{[0-9]+}}(%rsp) -; CHECK-MSVC64-I128-NEXT: movq $0, {{[0-9]+}}(%rsp) -; CHECK-MSVC64-I128-NEXT: movq $0, {{[0-9]+}}(%rsp) +; CHECK-MSVC64-I128-NEXT: movq %rdx, 56(%rsp) +; CHECK-MSVC64-I128-NEXT: movq %rcx, 48(%rsp) +; CHECK-MSVC64-I128-NEXT: movq $0, 40(%rsp) +; CHECK-MSVC64-I128-NEXT: movq $0, 32(%rsp) ; CHECK-MSVC64-I128-NEXT: xorl %ecx, %ecx ; CHECK-MSVC64-I128-NEXT: xorl %edx, %edx ; CHECK-MSVC64-I128-NEXT: xorl %r8d, %r8d @@ -654,12 +805,12 @@ define void @call_many_leading_args(PrimTy %x) nounwind { ; CHECK-MINGW-F128-NEXT: subq $88, %rsp ; CHECK-MINGW-F128-NEXT: movaps (%rcx), %xmm0 ; CHECK-MINGW-F128-NEXT: xorps %xmm1, %xmm1 -; CHECK-MINGW-F128-NEXT: movaps %xmm1, {{[0-9]+}}(%rsp) -; CHECK-MINGW-F128-NEXT: movaps %xmm0, {{[0-9]+}}(%rsp) -; CHECK-MINGW-F128-NEXT: leaq {{[0-9]+}}(%rsp), %rax -; CHECK-MINGW-F128-NEXT: movq %rax, {{[0-9]+}}(%rsp) -; CHECK-MINGW-F128-NEXT: leaq {{[0-9]+}}(%rsp), %rax -; CHECK-MINGW-F128-NEXT: movq %rax, {{[0-9]+}}(%rsp) +; CHECK-MINGW-F128-NEXT: movaps %xmm1, 64(%rsp) +; CHECK-MINGW-F128-NEXT: movaps %xmm0, 48(%rsp) +; CHECK-MINGW-F128-NEXT: leaq 48(%rsp), %rax +; CHECK-MINGW-F128-NEXT: movq %rax, 40(%rsp) +; CHECK-MINGW-F128-NEXT: leaq 64(%rsp), %rax +; CHECK-MINGW-F128-NEXT: movq %rax, 32(%rsp) ; CHECK-MINGW-F128-NEXT: xorl %ecx, %ecx ; CHECK-MINGW-F128-NEXT: xorl %edx, %edx ; CHECK-MINGW-F128-NEXT: xorl %r8d, %r8d @@ -671,10 +822,10 @@ define void @call_many_leading_args(PrimTy %x) nounwind { ; CHECK-MINGW-I128-LABEL: call_many_leading_args: ; CHECK-MINGW-I128: # %bb.0: ; CHECK-MINGW-I128-NEXT: subq $72, %rsp -; CHECK-MINGW-I128-NEXT: movq %rdx, {{[0-9]+}}(%rsp) -; CHECK-MINGW-I128-NEXT: movq %rcx, {{[0-9]+}}(%rsp) -; CHECK-MINGW-I128-NEXT: movq $0, {{[0-9]+}}(%rsp) -; CHECK-MINGW-I128-NEXT: movq $0, {{[0-9]+}}(%rsp) +; CHECK-MINGW-I128-NEXT: movq %rdx, 56(%rsp) +; CHECK-MINGW-I128-NEXT: movq %rcx, 48(%rsp) +; CHECK-MINGW-I128-NEXT: movq $0, 40(%rsp) +; CHECK-MINGW-I128-NEXT: movq $0, 32(%rsp) ; CHECK-MINGW-I128-NEXT: xorl %ecx, %ecx ; CHECK-MINGW-I128-NEXT: xorl %edx, %edx ; CHECK-MINGW-I128-NEXT: xorl %r8d, %r8d @@ -686,11 +837,11 @@ define void @call_many_leading_args(PrimTy %x) nounwind { ; CHECK-X86-LABEL: call_many_leading_args: ; CHECK-X86: # %bb.0: ; CHECK-X86-NEXT: subl $40, %esp -; CHECK-X86-NEXT: leal {{[0-9]+}}(%esp), %eax -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) +; CHECK-X86-NEXT: leal 12(%esp), %eax +; CHECK-X86-NEXT: pushl 56(%esp) +; CHECK-X86-NEXT: pushl 56(%esp) +; CHECK-X86-NEXT: pushl 56(%esp) +; CHECK-X86-NEXT: pushl 56(%esp) ; CHECK-X86-NEXT: pushl $0 ; CHECK-X86-NEXT: pushl $0 ; CHECK-X86-NEXT: pushl $0 @@ -770,9 +921,9 @@ define void @call_trailing_arg(PrimTy %x) nounwind { ; CHECK-MSVC64-F128: # %bb.0: ; CHECK-MSVC64-F128-NEXT: subq $72, %rsp ; CHECK-MSVC64-F128-NEXT: movaps (%rcx), %xmm0 -; CHECK-MSVC64-F128-NEXT: movaps %xmm0, {{[0-9]+}}(%rsp) -; CHECK-MSVC64-F128-NEXT: leaq {{[0-9]+}}(%rsp), %rax -; CHECK-MSVC64-F128-NEXT: movq %rax, {{[0-9]+}}(%rsp) +; CHECK-MSVC64-F128-NEXT: movaps %xmm0, 48(%rsp) +; CHECK-MSVC64-F128-NEXT: leaq 48(%rsp), %rax +; CHECK-MSVC64-F128-NEXT: movq %rax, 32(%rsp) ; CHECK-MSVC64-F128-NEXT: xorl %ecx, %ecx ; CHECK-MSVC64-F128-NEXT: xorl %edx, %edx ; CHECK-MSVC64-F128-NEXT: xorl %r8d, %r8d @@ -784,8 +935,8 @@ define void @call_trailing_arg(PrimTy %x) nounwind { ; CHECK-MSVC64-I128-LABEL: call_trailing_arg: ; CHECK-MSVC64-I128: # %bb.0: ; CHECK-MSVC64-I128-NEXT: subq $56, %rsp -; CHECK-MSVC64-I128-NEXT: movq %rdx, {{[0-9]+}}(%rsp) -; CHECK-MSVC64-I128-NEXT: movq %rcx, {{[0-9]+}}(%rsp) +; CHECK-MSVC64-I128-NEXT: movq %rdx, 40(%rsp) +; CHECK-MSVC64-I128-NEXT: movq %rcx, 32(%rsp) ; CHECK-MSVC64-I128-NEXT: xorl %ecx, %ecx ; CHECK-MSVC64-I128-NEXT: xorl %edx, %edx ; CHECK-MSVC64-I128-NEXT: xorl %r8d, %r8d @@ -798,9 +949,9 @@ define void @call_trailing_arg(PrimTy %x) nounwind { ; CHECK-MINGW-F128: # %bb.0: ; CHECK-MINGW-F128-NEXT: subq $72, %rsp ; CHECK-MINGW-F128-NEXT: movaps (%rcx), %xmm0 -; CHECK-MINGW-F128-NEXT: movaps %xmm0, {{[0-9]+}}(%rsp) -; CHECK-MINGW-F128-NEXT: leaq {{[0-9]+}}(%rsp), %rax -; CHECK-MINGW-F128-NEXT: movq %rax, {{[0-9]+}}(%rsp) +; CHECK-MINGW-F128-NEXT: movaps %xmm0, 48(%rsp) +; CHECK-MINGW-F128-NEXT: leaq 48(%rsp), %rax +; CHECK-MINGW-F128-NEXT: movq %rax, 32(%rsp) ; CHECK-MINGW-F128-NEXT: xorl %ecx, %ecx ; CHECK-MINGW-F128-NEXT: xorl %edx, %edx ; CHECK-MINGW-F128-NEXT: xorl %r8d, %r8d @@ -812,8 +963,8 @@ define void @call_trailing_arg(PrimTy %x) nounwind { ; CHECK-MINGW-I128-LABEL: call_trailing_arg: ; CHECK-MINGW-I128: # %bb.0: ; CHECK-MINGW-I128-NEXT: subq $56, %rsp -; CHECK-MINGW-I128-NEXT: movq %rdx, {{[0-9]+}}(%rsp) -; CHECK-MINGW-I128-NEXT: movq %rcx, {{[0-9]+}}(%rsp) +; CHECK-MINGW-I128-NEXT: movq %rdx, 40(%rsp) +; CHECK-MINGW-I128-NEXT: movq %rcx, 32(%rsp) ; CHECK-MINGW-I128-NEXT: xorl %ecx, %ecx ; CHECK-MINGW-I128-NEXT: xorl %edx, %edx ; CHECK-MINGW-I128-NEXT: xorl %r8d, %r8d @@ -825,11 +976,11 @@ define void @call_trailing_arg(PrimTy %x) nounwind { ; CHECK-X86-LABEL: call_trailing_arg: ; CHECK-X86: # %bb.0: ; CHECK-X86-NEXT: subl $40, %esp -; CHECK-X86-NEXT: leal {{[0-9]+}}(%esp), %eax -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) -; CHECK-X86-NEXT: pushl {{[0-9]+}}(%esp) +; CHECK-X86-NEXT: leal 12(%esp), %eax +; CHECK-X86-NEXT: pushl 56(%esp) +; CHECK-X86-NEXT: pushl 56(%esp) +; CHECK-X86-NEXT: pushl 56(%esp) +; CHECK-X86-NEXT: pushl 56(%esp) ; CHECK-X86-NEXT: pushl $0 ; CHECK-X86-NEXT: pushl $0 ; CHECK-X86-NEXT: pushl $0