]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/testsuite/gdb.arch/i386-sse.c
run copyright.sh for 2011.
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.arch / i386-sse.c
CommitLineData
83ecb59f
JB
1/* Test program for SSE registers.
2
7b6bb8da 3 Copyright 2004, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
83ecb59f
JB
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
83ecb59f 10 (at your option) any later version.
a9762ec7 11
83ecb59f
JB
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
a9762ec7 16
83ecb59f 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
83ecb59f
JB
19
20#include <stdio.h>
21#include "i386-cpuid.h"
22
23typedef struct {
24 float f[4];
25} v4sf_t;
26
27
701e355d 28v4sf_t data[] =
83ecb59f 29 {
701e355d
DE
30 { { 0.0, 0.25, 0.50, 0.75 } },
31 { { 1.0, 1.25, 1.50, 1.75 } },
32 { { 2.0, 2.25, 2.50, 2.75 } },
33 { { 3.0, 3.25, 3.50, 3.75 } },
34 { { 4.0, 4.25, 4.50, 4.75 } },
35 { { 5.0, 5.25, 5.50, 5.75 } },
36 { { 6.0, 6.25, 6.50, 6.75 } },
37 { { 7.0, 7.25, 7.50, 7.75 } },
38#ifdef __x86_64__
39 { { 8.0, 8.25, 8.50, 8.75 } },
40 { { 9.0, 9.25, 9.50, 9.75 } },
41 { { 10.0, 10.25, 10.50, 10.75 } },
42 { { 11.0, 11.25, 11.50, 11.75 } },
43 { { 12.0, 12.25, 12.50, 12.75 } },
44 { { 13.0, 13.25, 13.50, 13.75 } },
45 { { 14.0, 14.25, 14.50, 14.75 } },
46 { { 15.0, 15.25, 15.50, 15.75 } },
47#endif
83ecb59f
JB
48 };
49
50
51int
52have_sse (void)
53{
54 int edx = i386_cpuid ();
55
56 if (edx & bit_SSE)
57 return 1;
58 else
59 return 0;
60}
61
62int
63main (int argc, char **argv)
64{
65 if (have_sse ())
66 {
67 asm ("movaps 0(%0), %%xmm0\n\t"
68 "movaps 16(%0), %%xmm1\n\t"
69 "movaps 32(%0), %%xmm2\n\t"
70 "movaps 48(%0), %%xmm3\n\t"
71 "movaps 64(%0), %%xmm4\n\t"
72 "movaps 80(%0), %%xmm5\n\t"
73 "movaps 96(%0), %%xmm6\n\t"
74 "movaps 112(%0), %%xmm7\n\t"
75 : /* no output operands */
76 : "r" (data)
77 : "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7");
701e355d
DE
78#ifdef __x86_64__
79 asm ("movaps 128(%0), %%xmm8\n\t"
80 "movaps 144(%0), %%xmm9\n\t"
81 "movaps 160(%0), %%xmm10\n\t"
82 "movaps 176(%0), %%xmm11\n\t"
83 "movaps 192(%0), %%xmm12\n\t"
84 "movaps 208(%0), %%xmm13\n\t"
85 "movaps 224(%0), %%xmm14\n\t"
86 "movaps 240(%0), %%xmm15\n\t"
87 : /* no output operands */
88 : "r" (data)
89 : "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15");
90#endif
83ecb59f 91
ff4ab08d 92 asm ("nop"); /* first breakpoint here */
83ecb59f
JB
93
94 asm (
95 "movaps %%xmm0, 0(%0)\n\t"
96 "movaps %%xmm1, 16(%0)\n\t"
97 "movaps %%xmm2, 32(%0)\n\t"
98 "movaps %%xmm3, 48(%0)\n\t"
99 "movaps %%xmm4, 64(%0)\n\t"
100 "movaps %%xmm5, 80(%0)\n\t"
101 "movaps %%xmm6, 96(%0)\n\t"
102 "movaps %%xmm7, 112(%0)\n\t"
103 : /* no output operands */
104 : "r" (data)
105 : "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7");
701e355d
DE
106#ifdef __x86_64__
107 asm (
108 "movaps %%xmm8, 128(%0)\n\t"
109 "movaps %%xmm9, 144(%0)\n\t"
110 "movaps %%xmm10, 160(%0)\n\t"
111 "movaps %%xmm11, 176(%0)\n\t"
112 "movaps %%xmm12, 192(%0)\n\t"
113 "movaps %%xmm13, 208(%0)\n\t"
114 "movaps %%xmm14, 224(%0)\n\t"
115 "movaps %%xmm15, 240(%0)\n\t"
116 : /* no output operands */
117 : "r" (data)
118 : "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15");
119#endif
83ecb59f
JB
120
121 puts ("Bye!"); /* second breakpoint here */
122 }
123
124 return 0;
125}