Index: gdb/testsuite/gdb.arch/i386-sse-stack-align.S |
diff --git a/gdb/testsuite/gdb.arch/i386-sse-stack-align.S b/gdb/testsuite/gdb.arch/i386-sse-stack-align.S |
new file mode 100644 |
index 0000000000000000000000000000000000000000..18cffdcd1bbadc7f433b48f583bf4d109afd06c3 |
--- /dev/null |
+++ b/gdb/testsuite/gdb.arch/i386-sse-stack-align.S |
@@ -0,0 +1,214 @@ |
+/* Copyright 2012 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 |