/* Copyright 2012-2020 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
/*
gcc -S -o gdb.arch/i386-sse-stack-align.{S,c} -Wall -m32 -msse
*/
.file "i386-sse-stack-align.c"
.text
.type foo, @function
foo:
.LFB0:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
subl $40, %esp
movaps %xmm0, -24(%ebp)
movaps %xmm1, -40(%ebp)
movaps -24(%ebp), %xmm0
movaps -40(%ebp), %xmm1
mulps %xmm1, %xmm0
addps -24(%ebp), %xmm0
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE0:
.size foo, .-foo
.type f, @function
f:
.LFB1:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
subl $40, %esp
movaps .LC0, %xmm0
movaps %xmm0, -24(%ebp)
movaps -24(%ebp), %xmm1
movaps -24(%ebp), %xmm0
call foo
movaps %xmm0, -40(%ebp)
leal -40(%ebp), %eax
movss (%eax), %xmm0
cvttss2si %xmm0, %eax
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE1:
.size f, .-f
.type g0, @function
g0:
.LFB2:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
subl $8, %esp
call f
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE2:
.size g0, .-g0
.type g1, @function
g1:
.LFB3:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
subl $8, %esp
call f
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE3:
.size g1, .-g1
.type g2, @function
g2:
.LFB4:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
subl $8, %esp
call f
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE4:
.size g2, .-g2
.type g3, @function
g3:
.LFB5:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
subl $8, %esp
call f
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE5:
.size g3, .-g3
.type g4, @function
g4:
.LFB6:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
subl $8, %esp
call f
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE6:
.size g4, .-g4
.globl main
.type main, @function
main:
.LFB7:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
pushl %ebx
andl $-16, %esp
subl $16, %esp
.cfi_offset 3, -12
call g0
movl %eax, %ebx
movl $1, (%esp)
call g1
addl %eax, %ebx
movl $2, 4(%esp)
movl $1, (%esp)
call g2
addl %eax, %ebx
movl $3, 8(%esp)
movl $2, 4(%esp)
movl $1, (%esp)
call g3
addl %eax, %ebx
movl $4, 12(%esp)
movl $3, 8(%esp)
movl $2, 4(%esp)
movl $1, (%esp)
call g4
addl %ebx, %eax
movl -4(%ebp), %ebx
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
.cfi_restore 3
ret
.cfi_endproc
.LFE7:
.size main, .-main
.section .rodata
.align 16
.LC0:
.long 1065353216
.long 1073741824
.long 1077936128
.long 1082130432
.ident "GCC: (GNU) 4.6.4 20120612 (prerelease)"
.section .note.GNU-stack,"",@progbits