]>
Commit | Line | Data |
---|---|---|
1d506c26 | 1 | # Copyright 2014-2024 Free Software Foundation, Inc. |
01f9f808 MS |
2 | |
3 | # This program is free software; you can redistribute it and/or modify | |
4 | # it under the terms of the GNU General Public License as published by | |
5 | # the Free Software Foundation; either version 3 of the License, or | |
6 | # (at your option) any later version. | |
7 | # | |
8 | # This program is distributed in the hope that it will be useful, | |
9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | # GNU General Public License for more details. | |
12 | # | |
13 | # You should have received a copy of the GNU General Public License | |
14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
15 | ||
16 | # Please email any bugs, comments, and/or additions to this file to: | |
17 | # bug-gdb@gnu.org | |
18 | ||
19 | # This file is part of the gdb testsuite. | |
20 | ||
21 | ||
c7ccb471 | 22 | require {is_any_target i?86-*-* x86_64-*-*} |
8468e036 | 23 | require {have_compile_flag -mavx512f} |
01f9f808 MS |
24 | |
25 | standard_testfile | |
26 | ||
8b600ba2 | 27 | set comp_flags "-mavx512f -I${srcdir}/../nat" |
01f9f808 | 28 | |
5b362f04 | 29 | if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ |
01f9f808 MS |
30 | [list debug nowarnings additional_flags=${comp_flags}]] } { |
31 | return -1 | |
32 | } | |
33 | ||
34 | if ![runto_main] { | |
01f9f808 MS |
35 | return -1 |
36 | } | |
37 | ||
38 | set supports_avx512 0 | |
39 | ||
40 | set test "probe AVX512 support" | |
41 | gdb_test_multiple "print have_avx512()" $test { | |
42 | -re ".. = 1\r\n$gdb_prompt $" { | |
43 | pass $test | |
44 | set supports_avx512 1 | |
45 | } | |
46 | -re ".. = 0\r\n$gdb_prompt $" { | |
47 | pass $test | |
48 | } | |
49 | } | |
50 | ||
51 | if { !$supports_avx512 } { | |
52 | unsupported "processor does not support AVX512" | |
53 | return | |
54 | } | |
55 | ||
56 | gdb_test "break [gdb_get_line_number "first breakpoint here"]" \ | |
57 | "Breakpoint .* at .*i386-avx512.c.*" \ | |
58 | "set first breakpoint in main" | |
59 | gdb_continue_to_breakpoint "continue to first breakpoint in main" | |
60 | ||
61 | set nr_regs 8 | |
62 | ||
63 | for { set r 1 } { $r < $nr_regs } { incr r } { | |
64 | gdb_test "print/x \$k$r" \ | |
65 | ".. = 0x[format %x $r]2[format %x $r]1" \ | |
66 | "check contents of %k$r" | |
67 | } | |
68 | ||
69 | for { set r 1 } { $r < $nr_regs } { incr r } { | |
70 | gdb_test "set var \$k$r = 0x$r$r$r$r" "" "set %k$r" | |
71 | } | |
72 | ||
73 | gdb_test "break [gdb_get_line_number "second breakpoint here"]" \ | |
74 | "Breakpoint .* at .*i386-avx512.c.*" \ | |
75 | "set second breakpoint in main" | |
76 | gdb_continue_to_breakpoint "continue to second breakpoint in main" | |
77 | ||
78 | set nr_regs 7 | |
79 | ||
80 | for { set r 0 } { $r < $nr_regs } { incr r } { | |
81 | set val [expr $r + 1] | |
82 | gdb_test "print/x k_data\[$r\]" \ | |
83 | ".. = 0x$val$val$val$val" \ | |
84 | "check contents of k_data\[$r\]" | |
85 | } | |
86 | ||
87 | gdb_test "break [gdb_get_line_number "third breakpoint here"]" \ | |
88 | "Breakpoint .* at .*i386-avx512.c.*" \ | |
89 | "set third breakpoint in main" | |
90 | gdb_continue_to_breakpoint "continue to third breakpoint in main" | |
91 | ||
92 | if [is_amd64_regs_target] { | |
01f9f808 | 93 | set nr_regs 32 |
ff34e6ae SM |
94 | } else { |
95 | set nr_regs 8 | |
01f9f808 MS |
96 | } |
97 | ||
98 | for { set r 0 } { $r < $nr_regs } { incr r } { | |
99 | gdb_test "print \$zmm$r.v8_double" \ | |
100 | ".. = \\{$r, $r.125, $r.25, $r.375, $r.5, $r.625, $r.75, $r.875\\}.*" \ | |
101 | "check double contents of %zmm$r" | |
102 | gdb_test "print \$zmm$r.v32_int16" \ | |
103 | ".. = \\{(-?\[0-9\]+, ){31}-?\[0-9\]+\\}.*" \ | |
104 | "check int16 contents of %zmm$r" | |
105 | gdb_test "print \$ymm$r.v4_double" \ | |
106 | ".. = \\{$r, $r.125, $r.25, $r.375\\}.*" \ | |
107 | "check float contents of %ymm$r" | |
108 | gdb_test "print \$ymm$r.v16_int16" \ | |
109 | ".. = \\{(-?\[0-9\]+, ){15}-?\[0-9\]+\\}.*" \ | |
110 | "check int16 contents of %ymm$r" | |
111 | gdb_test "print \$xmm$r.v2_double" \ | |
112 | ".. = \\{$r, $r.125\\}.*" \ | |
113 | "check float contents of %xmm$r" | |
114 | gdb_test "print \$xmm$r.v8_int16" \ | |
115 | ".. = \\{(-?\[0-9\]+, ){7}-?\[0-9\]+\\}.*" \ | |
116 | "check int16 contents of %xmm$r" | |
117 | } | |
118 | ||
119 | for { set r 0 } { $r < $nr_regs } { incr r } { | |
120 | gdb_test "set var \$zmm$r.v8_double\[0\] = $r + 10" "" "set %zmm$r.v8_double\[0\]" | |
121 | gdb_test "set var \$zmm$r.v8_double\[1\] = $r + 10.125" "" "set %zmm$r.v8_double\[1\]" | |
122 | gdb_test "set var \$zmm$r.v8_double\[2\] = $r + 10.25" "" "set %zmm$r.v8_double\[2\]" | |
123 | gdb_test "set var \$zmm$r.v8_double\[3\] = $r + 10.375" "" "set %zmm$r.v8_double\[3\]" | |
124 | gdb_test "set var \$zmm$r.v8_double\[4\] = $r + 10.5" "" "set %zmm$r.v8_double\[4\]" | |
125 | gdb_test "set var \$zmm$r.v8_double\[5\] = $r + 10.625" "" "set %zmm$r.v8_double\[5\]" | |
126 | gdb_test "set var \$zmm$r.v8_double\[6\] = $r + 10.75" "" "set %zmm$r.v8_double\[6\]" | |
127 | gdb_test "set var \$zmm$r.v8_double\[7\] = $r + 10.875" "" "set %zmm$r.v8_double\[7\]" | |
128 | } | |
129 | ||
130 | gdb_test "break [gdb_get_line_number "fourth breakpoint here"]" \ | |
131 | "Breakpoint .* at .*i386-avx512.c.*" \ | |
132 | "set fourth breakpoint in main" | |
133 | gdb_continue_to_breakpoint "continue to fourth breakpoint in main" | |
134 | ||
135 | for { set r 0 } { $r < $nr_regs } { incr r } { | |
136 | gdb_test "print zmm_data\[$r\]" \ | |
137 | ".. = \\{f = \\{[expr $r + 10], [expr $r.125 + 10], [expr $r.25 + 10], [expr $r.375 + 10], [expr $r.5 + 10], [expr $r.625 + 10], [expr $r.75 + 10], [expr $r.875 + 10]\\}\\}.*" \ | |
138 | "check contents of zmm_data\[$r\] after writing ZMM regs" | |
139 | } | |
140 | ||
141 | for { set r 0 } { $r < $nr_regs } { incr r } { | |
142 | gdb_test "set var \$ymm$r.v4_double\[0\] = $r + 20" "" "set %ymm$r.v4_double\[0\]" | |
143 | gdb_test "set var \$ymm$r.v4_double\[1\] = $r + 20.125" "" "set %ymm$r.v4_double\[1\]" | |
144 | gdb_test "set var \$ymm$r.v4_double\[2\] = $r + 20.25" "" "set %ymm$r.v4_double\[2\]" | |
145 | gdb_test "set var \$ymm$r.v4_double\[3\] = $r + 20.375" "" "set %ymm$r.v4_double\[3\]" | |
146 | } | |
147 | ||
148 | gdb_test "break [gdb_get_line_number "fifth breakpoint here"]" \ | |
149 | "Breakpoint .* at .*i386-avx512.c.*" \ | |
150 | "set fifth breakpoint in main" | |
151 | gdb_continue_to_breakpoint "continue to fifth breakpoint in main" | |
152 | ||
153 | for { set r 0 } { $r < $nr_regs } { incr r } { | |
154 | gdb_test "print zmm_data\[$r\]" \ | |
155 | ".. = \\{f = \\{[expr $r + 20], [expr $r.125 + 20], [expr $r.25 + 20], [expr $r.375 + 20], [expr $r.5 + 10], [expr $r.625 + 10], [expr $r.75 + 10], [expr $r.875 + 10]\\}\\}.*" \ | |
156 | "check contents of zmm_data\[$r\] after writing YMM regs" | |
157 | } | |
158 | ||
159 | for { set r 0 } { $r < $nr_regs } { incr r } { | |
160 | gdb_test "set var \$xmm$r.v2_double\[0\] = $r + 30" "" "set %xmm$r.v2_double\[0\]" | |
161 | gdb_test "set var \$xmm$r.v2_double\[1\] = $r + 30.125" "" "set %xmm$r.v2_double\[1\]" | |
162 | } | |
163 | ||
164 | gdb_test "break [gdb_get_line_number "sixth breakpoint here"]" \ | |
165 | "Breakpoint .* at .*i386-avx512.c.*" \ | |
166 | "set sixth breakpoint in main" | |
167 | gdb_continue_to_breakpoint "continue to sixth breakpoint in main" | |
168 | ||
169 | for { set r 0 } { $r < $nr_regs } { incr r } { | |
170 | gdb_test "print zmm_data\[$r\]" \ | |
171 | ".. = \\{f = \\{[expr $r + 30], [expr $r.125 + 30], [expr $r.25 + 20], [expr $r.375 + 20], [expr $r.5 + 10], [expr $r.625 + 10], [expr $r.75 + 10], [expr $r.875 + 10]\\}\\}.*" \ | |
172 | "check contents of zmm_data\[$r\] after writing XMM regs" | |
173 | } | |
b5420128 JB |
174 | |
175 | gdb_test "break [gdb_get_line_number "seventh breakpoint here"]" \ | |
176 | "Breakpoint .* at .*i386-avx512.c.*" \ | |
177 | "set seventh breakpoint in main" | |
178 | gdb_continue_to_breakpoint "continue to seventh breakpoint in main" | |
179 | gdb_test "print \$zmm0.v16_int32" "= {-1, -1, -1, -1, 0 <repeats 12 times>}" | |
180 | ||
181 | if { $nr_regs >= 16 } { | |
182 | gdb_test "print \$zmm16.v16_int32" "= {-1 <repeats 16 times>}" | |
183 | } |