]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/testsuite/gdb.opencl/operators.exp
Update copyright year range in header of all files managed by GDB
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.opencl / operators.exp
CommitLineData
1d506c26 1# Copyright 2010-2024 Free Software Foundation, Inc.
f4b8a18d
KW
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# Contributed by Ken Werner <ken.werner@de.ibm.com>.
17#
18# Tests GDBs support for OpenCL operators.
19
f4b8a18d
KW
20load_lib opencl.exp
21
afb75473 22require allow_opencl_tests
f4b8a18d
KW
23
24set testfile "operators"
25set clprogram [remote_download target ${srcdir}/${subdir}/${testfile}.cl]
26
27# Compile the generic OpenCL host app
28if { [gdb_compile_opencl_hostapp "${clprogram}" "${testfile}" "" ] != "" } {
5b362f04 29 untested "failed to compile"
f4b8a18d
KW
30 return -1
31}
32
33# Load the OpenCL app
34clean_restart ${testfile}
35
36# Set breakpoint at the OpenCL kernel
b2030fb5 37gdb_test "tbreak testkernel" \
d468832a
KW
38 "" \
39 "Set pending breakpoint" \
40 ".*Function \"testkernel\" not defined.*Make breakpoint pending.*y or \\\[n\\\]. $" \
41 "y"
f4b8a18d
KW
42
43gdb_run_cmd
b2030fb5 44gdb_test "" ".*reakpoint.*1.*testkernel.*" "run"
f4b8a18d 45
d468832a
KW
46# Continue to the marker
47gdb_breakpoint [gdb_get_line_number "marker" "${clprogram}"]
48gdb_continue_to_breakpoint "marker"
49
f4b8a18d
KW
50# Retrieve some information about availability of OpenCL extensions
51set have_cl_khr_fp64 [get_integer_valueof "have_cl_khr_fp64" 0]
52set have_cl_khr_fp16 [get_integer_valueof "have_cl_khr_fp16" 0]
53
54proc check_basic { name type isfloat } {
55 gdb_test "print/d ${name}a" " = 2"
56 gdb_test "print/d ${name}b" " = 1"
57 gdb_test "print/d ${name}4a" " = \\{2, 4, 8, 16\\}"
58 gdb_test "print/d ${name}4b" " = \\{1, 2, 8, 4\\}"
59
60 gdb_test "ptype ${name}a" "type = ${type}"
61 gdb_test "ptype ${name}b" "type = ${type}"
ea5e6b0e
UW
62 gdb_test "ptype ${name}4a" "type = ${type}4"
63 gdb_test "ptype ${name}4b" "type = ${type}4"
f4b8a18d
KW
64
65 if { ! ${isfloat} } {
66 gdb_test "print/d u${name}a" " = 2"
67 gdb_test "print/d u${name}b" " = 1"
68 gdb_test "print/d u${name}4a" " = \\{2, 4, 8, 16\\}"
69 gdb_test "print/d u${name}4b" " = \\{1, 2, 8, 4\\}"
70 gdb_test "ptype u${name}a" "type = (unsigned ${type}|u${type})"
71 gdb_test "ptype u${name}b" "type = (unsigned ${type}|u${type})"
ea5e6b0e
UW
72 gdb_test "ptype u${name}4a" "type = u${type}4"
73 gdb_test "ptype u${name}4b" "type = u${type}4"
f4b8a18d
KW
74 }
75}
76
77# Arithmetic operators
78proc check_arithmetic_ops { name type isfloat size } {
79 # scalar with scalar
80 gdb_test "print/d ${name}a + ${name}b" " = 3"
81 gdb_test "print/d ${name}a - ${name}b" " = 1"
82 gdb_test "print/d ${name}a * ${name}b" " = 2"
83 gdb_test "print/d ${name}a / ${name}b" " = 2"
84 # scalar with vector
85 gdb_test "print/d ${name}a + ${name}4b" " = \\{3, 4, 10, 6\\}"
86 gdb_test "print/d ${name}4a - ${name}b" " = \\{1, 3, 7, 15\\}"
87 gdb_test "print/d ${name}4a * ${name}b" " = \\{2, 4, 8, 16\\}"
88 gdb_test "print/d ${name}a / ${name}4b" " = \\{2, 1, 0, 0\\}"
89 # vector with vector
90 gdb_test "print/d ${name}4a + ${name}4b" " = \\{3, 6, 16, 20\\}"
91 gdb_test "print/d ${name}4a - ${name}4b" " = \\{1, 2, 0, 12\\}"
92 gdb_test "print/d ${name}4a * ${name}4b" " = \\{2, 8, 64, 64\\}"
93 gdb_test "print/d ${name}4a / ${name}4b" " = \\{2, 2, 1, 4\\}"
94
95 # scalar
96 gdb_test "print/d ${name}a++" " = 2"
97 gdb_test "print/d ++${name}a" " = 4"
98 gdb_test "print/d ${name}a--" " = 4"
99 gdb_test "print/d --${name}a" " = 2"
100 gdb_test "print/d +${name}a" " = 2"
101 gdb_test "print/d -${name}a" " = -2"
102 # vector
103 gdb_test "print/d ${name}4a++" " = \\{2, 4, 8, 16\\}"
104 gdb_test "print/d ++${name}4a" " = \\{4, 6, 10, 18\\}"
105 gdb_test "print/d ${name}4a--" " = \\{4, 6, 10, 18\\}"
106 gdb_test "print/d --${name}4a" " = \\{2, 4, 8, 16\\}"
107 gdb_test "print/d +${name}4a" " = \\{2, 4, 8, 16\\}"
108 gdb_test "print/d -${name}4a" " = \\{-2, -4, -8, -16\\}"
109
110 # scalar with vector
ea5e6b0e
UW
111 gdb_test "ptype ${name}a + ${name}4b" "type = ${type}4"
112 gdb_test "ptype ${name}4a - ${name}b" "type = ${type}4"
113 gdb_test "ptype ${name}a * ${name}4b" "type = ${type}4"
114 gdb_test "ptype ${name}4a / ${name}b" "type = ${type}4"
f4b8a18d 115 # vector with vector
ea5e6b0e
UW
116 gdb_test "ptype ${name}4a + ${name}4b" "type = ${type}4"
117 gdb_test "ptype ${name}4a - ${name}4b" "type = ${type}4"
118 gdb_test "ptype ${name}4a * ${name}4b" "type = ${type}4"
119 gdb_test "ptype ${name}4a / ${name}4b" "type = ${type}4"
f4b8a18d
KW
120
121 # scalar
122 gdb_test "ptype ${name}a++" "type = ${type}"
123 gdb_test "ptype ++${name}a" "type = ${type}"
124 gdb_test "ptype ${name}a--" "type = ${type}"
125 gdb_test "ptype --${name}a" "type = ${type}"
126 # vector
ea5e6b0e
UW
127 gdb_test "ptype ${name}4a++" "type = ${type}4"
128 gdb_test "ptype ++${name}4a" "type = ${type}4"
129 gdb_test "ptype ${name}4a--" "type = ${type}4"
130 gdb_test "ptype --${name}4a" "type = ${type}4"
131 gdb_test "ptype +${name}4a" "type = ${type}4"
132 gdb_test "ptype -${name}4a" "type = ${type}4"
f4b8a18d
KW
133
134 if { ${isfloat} } {
135 # scalar with scalar
136 gdb_test "ptype ${name}a + ${name}b" "type = ${type}"
137 gdb_test "ptype ${name}a - ${name}b" "type = ${type}"
138 gdb_test "ptype ${name}a * ${name}b" "type = ${type}"
139 gdb_test "ptype ${name}a / ${name}b" "type = ${type}"
140 # scalar
141 gdb_test "ptype +${name}a" "type = ${type}"
142 gdb_test "ptype -${name}a" "type = ${type}"
143 } else {
144 # scalar with scalar
145 gdb_test "print/d ${name}a % ${name}b" " = 0"
146 # scalar with vector
147 gdb_test "print/d ${name}4a % ${name}b" " = \\{0, 0, 0, 0\\}"
148 # vector with vector
149 gdb_test "print/d ${name}4a % ${name}b" " = \\{0, 0, 0, 0\\}"
150
151 # scalar with scalar
152 gdb_test "print/d u${name}a + u${name}b" " = 3"
153 gdb_test "print/d u${name}a - u${name}b" " = 1"
154 gdb_test "print/d u${name}a * u${name}b" " = 2"
155 gdb_test "print/d u${name}a / u${name}b" " = 2"
156 gdb_test "print/d u${name}a % u${name}b" " = 0"
157 # scalar with vector
158 gdb_test "print/d u${name}a + u${name}4b" " = \\{3, 4, 10, 6\\}"
159 gdb_test "print/d u${name}4a - u${name}b" " = \\{1, 3, 7, 15\\}"
160 gdb_test "print/d u${name}4a * u${name}b" " = \\{2, 4, 8, 16\\}"
161 gdb_test "print/d u${name}a / u${name}4b" " = \\{2, 1, 0, 0\\}"
162 gdb_test "print/d u${name}4a % u${name}b" " = \\{0, 0, 0, 0\\}"
163 # vector with vector
164 gdb_test "print/d u${name}4a + u${name}4b" " = \\{3, 6, 16, 20\\}"
165 gdb_test "print/d u${name}4a - u${name}4b" " = \\{1, 2, 0, 12\\}"
166 gdb_test "print/d u${name}4a * u${name}4b" " = \\{2, 8, 64, 64\\}"
167 gdb_test "print/d u${name}4a / u${name}4b" " = \\{2, 2, 1, 4\\}"
168 gdb_test "print/d u${name}4a % u${name}4b" " = \\{0, 0, 0, 0\\}"
169
170 # scalar
171 gdb_test "print/d u${name}a++" " = 2"
172 gdb_test "print/d ++u${name}a" " = 4"
173 gdb_test "print/d u${name}a--" " = 4"
174 gdb_test "print/d --u${name}a" " = 2"
175 gdb_test "print/d +u${name}a" " = 2"
176 gdb_test "print/x -u${name}a" " = 0x.*fe"
177 # vector
178 gdb_test "print/d u${name}4a++" " = \\{2, 4, 8, 16\\}"
179 gdb_test "print/d ++u${name}4a" " = \\{4, 6, 10, 18\\}"
180 gdb_test "print/d u${name}4a--" " = \\{4, 6, 10, 18\\}"
181 gdb_test "print/d --u${name}4a" " = \\{2, 4, 8, 16\\}"
182 gdb_test "print/d +u${name}4a" " = \\{2, 4, 8, 16\\}"
183 gdb_test "print/x -u${name}4a" " = \\{0x.*fe, 0x.*fc, 0x.*f8, 0x.*f0\\}"
184
185 # scalar with scalar
186 if { ${size} < 4 } {
187 gdb_test "ptype ${name}a + ${name}b" "type = int"
188 gdb_test "ptype ${name}a - ${name}b" "type = int"
189 gdb_test "ptype ${name}a * ${name}b" "type = int"
190 gdb_test "ptype ${name}a / ${name}b" "type = int"
191 gdb_test "ptype ${name}a % ${name}b" "type = int"
192 gdb_test "ptype +${name}a" "type = int"
193 gdb_test "ptype -${name}a" "type = int"
194 gdb_test "ptype u${name}a + u${name}b" "type = int"
195 gdb_test "ptype u${name}a - u${name}b" "type = int"
196 gdb_test "ptype u${name}a * u${name}b" "type = int"
197 gdb_test "ptype u${name}a / u${name}b" "type = int"
198 gdb_test "ptype u${name}a % u${name}b" "type = int"
199 gdb_test "ptype +u${name}a" "type = int"
200 gdb_test "ptype -u${name}a" "type = int"
201 } elseif { ${size} == 4 } {
202 gdb_test "ptype ${name}a + ${name}b" "type = int"
203 gdb_test "ptype ${name}a - ${name}b" "type = int"
204 gdb_test "ptype ${name}a * ${name}b" "type = int"
205 gdb_test "ptype ${name}a / ${name}b" "type = int"
206 gdb_test "ptype ${name}a % ${name}b" "type = int"
207 gdb_test "ptype +${name}a" "type = int"
208 gdb_test "ptype -${name}a" "type = int"
209 gdb_test "ptype u${name}a + u${name}b" "type = (unsigned int|uint)"
210 gdb_test "ptype u${name}a - u${name}b" "type = (unsigned int|uint)"
211 gdb_test "ptype u${name}a * u${name}b" "type = (unsigned int|uint)"
212 gdb_test "ptype u${name}a / u${name}b" "type = (unsigned int|uint)"
213 gdb_test "ptype u${name}a % u${name}b" "type = (unsigned int|uint)"
214 gdb_test "ptype +u${name}a" "type = (unsigned int|uint)"
215 gdb_test "ptype -u${name}a" "type = (unsigned int|uint)"
216 } else { # ${size} == 8
217 gdb_test "ptype ${name}a + ${name}b" "type = long"
218 gdb_test "ptype ${name}a - ${name}b" "type = long"
219 gdb_test "ptype ${name}a * ${name}b" "type = long"
220 gdb_test "ptype ${name}a / ${name}b" "type = long"
221 gdb_test "ptype ${name}a % ${name}b" "type = long"
222 gdb_test "ptype +${name}a" "type = long"
223 gdb_test "ptype -${name}a" "type = long"
224 gdb_test "ptype u${name}a + u${name}b" "type = (unsigned long|ulong)"
225 gdb_test "ptype u${name}a - u${name}b" "type = (unsigned long|ulong)"
226 gdb_test "ptype u${name}a * u${name}b" "type = (unsigned long|ulong)"
227 gdb_test "ptype u${name}a / u${name}b" "type = (unsigned long|ulong)"
228 gdb_test "ptype u${name}a % u${name}b" "type = (unsigned long|ulong)"
229 # scalar
230 gdb_test "ptype +u${name}a" "type = (unsigned long|ulong)"
231 gdb_test "ptype -u${name}a" "type = (unsigned long|ulong)"
232 }
233 gdb_test "ptype u${name}a++" "type = (unsigned ${type}|u${type})"
234 gdb_test "ptype ++u${name}a" "type = (unsigned ${type}|u${type})"
235 gdb_test "ptype u${name}a--" "type = (unsigned ${type}|u${type})"
236 gdb_test "ptype --u${name}a" "type = (unsigned ${type}|u${type})"
237 # scalar with vector
ea5e6b0e
UW
238 gdb_test "ptype ${name}a % ${name}4b" "type = ${type}4"
239 gdb_test "ptype u${name}a + u${name}4b" "type = u${type}4"
240 gdb_test "ptype u${name}4a - u${name}b" "type = u${type}4"
241 gdb_test "ptype u${name}a * u${name}4b" "type = u${type}4"
242 gdb_test "ptype u${name}4a / u${name}b" "type = u${type}4"
243 gdb_test "ptype u${name}a % u${name}4b" "type = u${type}4"
f4b8a18d 244 # vector with vector
ea5e6b0e
UW
245 gdb_test "ptype ${name}4a % ${name}4b" "type = ${type}4"
246 gdb_test "ptype u${name}4a + u${name}4b" "type = u${type}4"
247 gdb_test "ptype u${name}4a - u${name}4b" "type = u${type}4"
248 gdb_test "ptype u${name}4a * u${name}4b" "type = u${type}4"
249 gdb_test "ptype u${name}4a / u${name}4b" "type = u${type}4"
250 gdb_test "ptype u${name}4a % u${name}4b" "type = u${type}4"
251 gdb_test "ptype u${name}4a++" "type = u${type}4"
252 gdb_test "ptype ++u${name}4a" "type = u${type}4"
253 gdb_test "ptype u${name}4a--" "type = u${type}4"
254 gdb_test "ptype --u${name}4a" "type = u${type}4"
255 gdb_test "ptype +u${name}4a" "type = u${type}4"
256 gdb_test "ptype -u${name}4a" "type = u${type}4"
f4b8a18d
KW
257 }
258}
259
260# Relational operators
261proc check_relational_ops { name type isfloat size } {
262 # scalar with scalar
263 gdb_test "print/d ${name}a > ${name}b" " = 1"
264 gdb_test "print/d ${name}b < ${name}a" " = 1"
265 gdb_test "print/d ${name}b >= ${name}a" " = 0"
266 gdb_test "print/d ${name}a <= ${name}b" " = 0"
267 # scalar with vector
268 gdb_test "print/d ${name}4a > ${name}b" " = \\{-1, -1, -1, -1\\}"
269 gdb_test "print/d ${name}a < ${name}4b" " = \\{0, 0, -1, -1\\}"
270 gdb_test "print/d ${name}4a >= ${name}b" " = \\{-1, -1, -1, -1\\}"
271 gdb_test "print/d ${name}a <= ${name}4b" " = \\{0, -1, -1, -1\\}"
272 # vector with vector
273 gdb_test "print/d ${name}4a > ${name}4b" " = \\{-1, -1, 0, -1\\}"
274 gdb_test "print/d ${name}4b < ${name}4a" " = \\{-1, -1, 0, -1\\}"
275 gdb_test "print/d ${name}4b >= ${name}4a" " = \\{0, 0, -1, 0\\}"
276 gdb_test "print/d ${name}4a <= ${name}4b" " = \\{0, 0, -1, 0\\}"
277
278 # result type should be int for scalars
279 gdb_test "ptype ${name}a < ${name}b" "type = int"
280 gdb_test "ptype ${name}a > ${name}b" "type = int"
281 gdb_test "ptype ${name}a <= ${name}b" "type = int"
282 gdb_test "ptype ${name}a >= ${name}b" "type = int"
283
284 if { ${isfloat} } {
285 if { ${size} == 2 } {
286 # result type should be short for half precision floating point vectors
287 # scalar with vector
ea5e6b0e
UW
288 gdb_test "ptype ${name}4a > ${name}b" "type = short4"
289 gdb_test "ptype ${name}a < ${name}4b" "type = short4"
290 gdb_test "ptype ${name}4a >= ${name}b" "type = short4"
291 gdb_test "ptype ${name}a <= ${name}4b" "type = short4"
f4b8a18d 292 # vector with vector
ea5e6b0e
UW
293 gdb_test "ptype ${name}4a > ${name}4b" "type = short4"
294 gdb_test "ptype ${name}4a < ${name}4b" "type = short4"
295 gdb_test "ptype ${name}4a >= ${name}4b" "type = short4"
296 gdb_test "ptype ${name}4a <= ${name}4b" "type = short4"
f4b8a18d
KW
297 } elseif { ${size} == 4 } {
298 # result type should be int for single precision floating point vectors
299 # scalar with vector
ea5e6b0e
UW
300 gdb_test "ptype ${name}4a > ${name}b" "type = int4"
301 gdb_test "ptype ${name}a < ${name}4b" "type = int4"
302 gdb_test "ptype ${name}4a >= ${name}b" "type = int4"
303 gdb_test "ptype ${name}a <= ${name}4b" "type = int4"
f4b8a18d 304 # vector with vector
ea5e6b0e
UW
305 gdb_test "ptype ${name}4a > ${name}4b" "type = int4"
306 gdb_test "ptype ${name}4a < ${name}4b" "type = int4"
307 gdb_test "ptype ${name}4a >= ${name}4b" "type = int4"
308 gdb_test "ptype ${name}4a <= ${name}4b" "type = int4"
f4b8a18d
KW
309 } else { # ${size} == 8
310 # result type should be long for double precision floating point vectors
311 # scalar with vector
ea5e6b0e
UW
312 gdb_test "ptype ${name}4a > ${name}b" "type = long4"
313 gdb_test "ptype ${name}a < ${name}4b" "type = long4"
314 gdb_test "ptype ${name}4a >= ${name}b" "type = long4"
315 gdb_test "ptype ${name}a <= ${name}4b" "type = long4"
f4b8a18d 316 # vector with vector
ea5e6b0e
UW
317 gdb_test "ptype ${name}4a > ${name}4b" "type = long4"
318 gdb_test "ptype ${name}4a < ${name}4b" "type = long4"
319 gdb_test "ptype ${name}4a >= ${name}4b" "type = long4"
320 gdb_test "ptype ${name}4a <= ${name}4b" "type = long4"
f4b8a18d
KW
321 }
322 } else {
323 # scalar with scalar
324 gdb_test "print/d u${name}a > u${name}b" " = 1"
325 gdb_test "print/d u${name}b < u${name}a" " = 1"
326 gdb_test "print/d u${name}b >= u${name}a" " = 0"
327 gdb_test "print/d u${name}a <= u${name}b" " = 0"
328 # scalar with vector
329 gdb_test "print/d u${name}4a > u${name}b" " = \\{-1, -1, -1, -1\\}"
330 gdb_test "print/d u${name}a < u${name}4b" " = \\{0, 0, -1, -1\\}"
331 gdb_test "print/d u${name}4a >= u${name}b" " = \\{-1, -1, -1, -1\\}"
332 gdb_test "print/d u${name}a <= u${name}4b" " = \\{0, -1, -1, -1\\}"
333 # vector with vector
334 gdb_test "print/d u${name}4a > u${name}4b" " = \\{-1, -1, 0, -1\\}"
335 gdb_test "print/d u${name}4b < u${name}4a" " = \\{-1, -1, 0, -1\\}"
336 gdb_test "print/d u${name}4b >= u${name}4a" " = \\{0, 0, -1, 0\\}"
337 gdb_test "print/d u${name}4a <= u${name}4b" " = \\{0, 0, -1, 0\\}"
338
339 # result type for unsigned operands is signed
340 # scalar with scalar
341 gdb_test "ptype u${name}a < u${name}b" "type = int"
342 gdb_test "ptype u${name}a > u${name}b" "type = int"
343 gdb_test "ptype u${name}a <= u${name}b" "type = int"
344 gdb_test "ptype u${name}a >= u${name}b" "type = int"
345 # scalar with vector
ea5e6b0e
UW
346 gdb_test "ptype u${name}4a > u${name}b" "type = ${type}4"
347 gdb_test "ptype u${name}a < u${name}4b" "type = ${type}4"
348 gdb_test "ptype u${name}4a >= u${name}b" "type = ${type}4"
349 gdb_test "ptype u${name}a <= u${name}4b" "type = ${type}4"
f4b8a18d 350 # vector with vector
ea5e6b0e
UW
351 gdb_test "ptype u${name}4a > u${name}4b" "type = ${type}4"
352 gdb_test "ptype u${name}4a < u${name}4b" "type = ${type}4"
353 gdb_test "ptype u${name}4a >= u${name}4b" "type = ${type}4"
354 gdb_test "ptype u${name}4a <= u${name}4b" "type = ${type}4"
f4b8a18d
KW
355 }
356}
357
358# Equality operators
359proc check_equality_ops { name type isfloat size } {
360 # scalar with scalar
361 gdb_test "print/d ${name}a == ${name}b" " = 0"
362 gdb_test "print/d ${name}a != ${name}b" " = 1"
363 # scalar with vector
364 gdb_test "print/d ${name}4a == ${name}b" " = \\{0, 0, 0, 0\\}"
365 gdb_test "print/d ${name}a != ${name}4b" " = \\{-1, 0, -1, -1\\}"
366 # vector with vector
367 gdb_test "print/d ${name}4a == ${name}4b" " = \\{0, 0, -1, 0\\}"
368 gdb_test "print/d ${name}4a != ${name}4b" " = \\{-1, -1, 0, -1\\}"
369
370 # scalar with scalar
371 gdb_test "ptype ${name}a == ${name}b" "type = int"
372 gdb_test "ptype ${name}a != ${name}b" "type = int"
373
374 if { ${isfloat} } {
375 if { ${size} == 2 } {
376 # result type should be short for half precision floating point vectors
377 # scalar with vector
ea5e6b0e
UW
378 gdb_test "ptype ${name}4a == ${name}b" "type = short4"
379 gdb_test "ptype ${name}a != ${name}4b" "type = short4"
f4b8a18d 380 # vector with vector
ea5e6b0e
UW
381 gdb_test "ptype ${name}4a == ${name}4b" "type = short4"
382 gdb_test "ptype ${name}4a != ${name}4b" "type = short4"
f4b8a18d
KW
383 } elseif { ${size} == 4 } {
384 # result type should be int for single precision floating point vectors
385 # scalar with vector
ea5e6b0e
UW
386 gdb_test "ptype ${name}4a == ${name}b" "type = int4"
387 gdb_test "ptype ${name}a != ${name}4b" "type = int4"
f4b8a18d 388 # vector with vector
ea5e6b0e
UW
389 gdb_test "ptype ${name}4a == ${name}4b" "type = int4"
390 gdb_test "ptype ${name}4a != ${name}4b" "type = int4"
f4b8a18d
KW
391 } else { # ${size} == 8
392 # result type should be long for double precision floating point vectors
393 # scalar with vector
ea5e6b0e
UW
394 gdb_test "ptype ${name}4a == ${name}b" "type = long4"
395 gdb_test "ptype ${name}a != ${name}4b" "type = long4"
f4b8a18d 396 # vector with vector
ea5e6b0e
UW
397 gdb_test "ptype ${name}4a == ${name}4b" "type = long4"
398 gdb_test "ptype ${name}4a != ${name}4b" "type = long4"
f4b8a18d
KW
399 }
400 } else {
401 # scalar with scalar
402 gdb_test "print/d u${name}a == u${name}b" " = 0"
403 gdb_test "print/d u${name}a != u${name}b" " = 1"
404 # scalar with vector
405 gdb_test "print/d u${name}4a == u${name}b" " = \\{0, 0, 0, 0\\}"
406 gdb_test "print/d u${name}a != u${name}4b" " = \\{-1, 0, -1, -1\\}"
407 # vector with vector
408 gdb_test "print/d u${name}4a == u${name}4b" " = \\{0, 0, -1, 0\\}"
409 gdb_test "print/d u${name}4b != u${name}4a" " = \\{-1, -1, 0, -1\\}"
410
411 # result type for unsigned operands is signed
412 # scalar with scalar
413 gdb_test "ptype u${name}a == u${name}b" "type = int"
414 gdb_test "ptype u${name}a != u${name}b" "type = int"
415 # scalar with vector
ea5e6b0e
UW
416 gdb_test "ptype u${name}4a == u${name}b" "type = ${type}4"
417 gdb_test "ptype u${name}a != u${name}4b" "type = ${type}4"
f4b8a18d 418 # vector with vector
ea5e6b0e
UW
419 gdb_test "ptype u${name}4a == u${name}4b" "type = ${type}4"
420 gdb_test "ptype u${name}4a != u${name}4b" "type = ${type}4"
f4b8a18d
KW
421 }
422}
423
424# Shift operators
425proc check_shift_ops { name type size } {
426 # scalar with scalar
427 gdb_test "print/d ${name}a << ${name}b" " = 4"
428 gdb_test "print/d ${name}a >> ${name}b" " = 1"
429 gdb_test "print/d u${name}a << u${name}b" " = 4"
430 gdb_test "print/d u${name}a >> u${name}b" " = 1"
431 # scalar with vector
432 gdb_test "print/d ${name}4a << ${name}b" " = \\{4, 8, 16, 32\\}"
433 gdb_test "print/d ${name}4a >> ${name}b" " = \\{1, 2, 4, 8\\}"
434 gdb_test "print/d u${name}4a << u${name}b" " = \\{4, 8, 16, 32\\}"
435 gdb_test "print/d u${name}4a >> u${name}b" " = \\{1, 2, 4, 8\\}"
436 # vector with vector
437 if { ${size} == 1 } {
438 gdb_test "print/d ${name}4a << ${name}4b" " = \\{4, 16, 0, 0\\}"
439 gdb_test "print/d u${name}4a << u${name}4b" " = \\{4, 16, 0, 0\\}"
440 } else {
441 gdb_test "print/d ${name}4a << ${name}4b" " = \\{4, 16, 2048, 256\\}"
442 gdb_test "print/d u${name}4a << u${name}4b" " = \\{4, 16, 2048, 256\\}"
443 }
444 gdb_test "print/d ${name}4a >> ${name}4b" " = \\{1, 1, 0, 1\\}"
445 gdb_test "print/d u${name}4a >> u${name}4b" " = \\{1, 1, 0, 1\\}"
446
447 # scalar with scalar
448 if { ${size} < 4 } {
449 gdb_test "ptype ${name}a << ${name}b" "type = int"
450 gdb_test "ptype ${name}a >> ${name}b" "type = int"
451 gdb_test "ptype u${name}a << u${name}b" "type = int"
452 gdb_test "ptype u${name}a >> u${name}b" "type = int"
453 } elseif { ${size} == 4 } {
454 gdb_test "ptype ${name}a << ${name}b" "type = int"
455 gdb_test "ptype ${name}a >> ${name}b" "type = int"
456 gdb_test "ptype u${name}a << u${name}b" "type = (unsigned int|uint)"
457 gdb_test "ptype u${name}a >> u${name}b" "type = (unsigned int|uint)"
458 } else { # ${size} == 8
459 gdb_test "ptype ${name}a << ${name}b" "type = long"
460 gdb_test "ptype ${name}a >> ${name}b" "type = long"
461 gdb_test "ptype u${name}a << u${name}b" "type = (unsigned long|ulong)"
462 gdb_test "ptype u${name}a >> u${name}b" "type = (unsigned long|ulong)"
463 }
464 # scalar with vector
ea5e6b0e
UW
465 gdb_test "ptype ${name}4a << ${name}b" "type = ${type}4"
466 gdb_test "ptype ${name}4a >> ${name}b" "type = ${type}4"
467 gdb_test "ptype u${name}4a << u${name}b" "type = u${type}4"
468 gdb_test "ptype u${name}4a >> u${name}b" "type = u${type}4"
f4b8a18d 469 # vector with vector
ea5e6b0e
UW
470 gdb_test "ptype ${name}4a << ${name}4b" "type = ${type}4"
471 gdb_test "ptype ${name}4a >> ${name}4b" "type = ${type}4"
472 gdb_test "ptype u${name}4a << u${name}4b" "type = u${type}4"
473 gdb_test "ptype u${name}4a >> u${name}4b" "type = u${type}4"
f4b8a18d
KW
474}
475
476# Bitwise operators
477proc check_bitwise_ops { name type size } {
478 # scalar with scalar
479 gdb_test "print/d ${name}a & ${name}b" " = 0"
480 gdb_test "print/d ${name}a | ${name}b" " = 3"
481 gdb_test "print/d ${name}a ^ ${name}b" " = 3"
482 gdb_test "print/d u${name}a & u${name}b" " = 0"
483 gdb_test "print/d u${name}a | u${name}b" " = 3"
484 gdb_test "print/d u${name}a ^ u${name}b" " = 3"
485 # scalar with vector
486 gdb_test "print/d ${name}4a & ${name}b" " = \\{0, 0, 0, 0\\}"
487 gdb_test "print/d ${name}a | ${name}4b" " = \\{3, 2, 10, 6\\}"
488 gdb_test "print/d ${name}4a ^ ${name}b" " = \\{3, 5, 9, 17\\}"
489 gdb_test "print/d u${name}4a & u${name}b" " = \\{0, 0, 0, 0\\}"
490 gdb_test "print/d u${name}a | u${name}4b" " = \\{3, 2, 10, 6\\}"
491 gdb_test "print/d u${name}4a ^ u${name}b" " = \\{3, 5, 9, 17\\}"
492 # vector with vector
493 gdb_test "print/d ${name}4a & ${name}4b" " = \\{0, 0, 8, 0\\}"
494 gdb_test "print/d ${name}4a | ${name}4b" " = \\{3, 6, 8, 20\\}"
495 gdb_test "print/d ${name}4a ^ ${name}4b" " = \\{3, 6, 0, 20\\}"
496 gdb_test "print/d u${name}4a & u${name}4b" " = \\{0, 0, 8, 0\\}"
497 gdb_test "print/d u${name}4a | u${name}4b" " = \\{3, 6, 8, 20\\}"
498 gdb_test "print/d u${name}4a ^ u${name}4b" " = \\{3, 6, 0, 20\\}"
499
500 # scalar with scalar
501 if { ${size} < 4 } {
502 gdb_test "ptype ${name}a & ${name}b" "type = int"
503 gdb_test "ptype ${name}a | ${name}b" "type = int"
504 gdb_test "ptype ${name}a ^ ${name}b" "type = int"
505 gdb_test "ptype u${name}a & u${name}b" "type = int"
506 gdb_test "ptype u${name}a | u${name}b" "type = int"
507 gdb_test "ptype u${name}a ^ u${name}b" "type = int"
508 } elseif { ${size} == 4 } {
509 gdb_test "ptype ${name}a & ${name}b" "type = int"
510 gdb_test "ptype ${name}a | ${name}b" "type = int"
511 gdb_test "ptype ${name}a ^ ${name}b" "type = int"
512 gdb_test "ptype u${name}a & u${name}b" "type = (unsigned int|uint)"
513 gdb_test "ptype u${name}a | u${name}b" "type = (unsigned int|uint)"
514 gdb_test "ptype u${name}a ^ u${name}b" "type = (unsigned int|uint)"
515 } else { # ${size} == 8
516 gdb_test "ptype ${name}a & ${name}b" "type = long"
517 gdb_test "ptype ${name}a | ${name}b" "type = long"
518 gdb_test "ptype ${name}a ^ ${name}b" "type = long"
519 gdb_test "ptype u${name}a & u${name}b" "type = (unsigned long|ulong)"
520 gdb_test "ptype u${name}a | u${name}b" "type = (unsigned long|ulong)"
521 gdb_test "ptype u${name}a ^ u${name}b" "type = (unsigned long|ulong)"
522 }
523 # scalar with vector
ea5e6b0e
UW
524 gdb_test "ptype ${name}4a & ${name}b" "type = ${type}4"
525 gdb_test "ptype ${name}a | ${name}4b" "type = ${type}4"
526 gdb_test "ptype ${name}4a ^ ${name}b" "type = ${type}4"
527 gdb_test "ptype u${name}4a & u${name}b" "type = u${type}4"
528 gdb_test "ptype u${name}a | u${name}4b" "type = u${type}4"
529 gdb_test "ptype u${name}4a ^ u${name}b" "type = u${type}4"
f4b8a18d 530 # vector with vector
ea5e6b0e
UW
531 gdb_test "ptype ${name}4a & ${name}4b" "type = ${type}4"
532 gdb_test "ptype ${name}4a | ${name}4b" "type = ${type}4"
533 gdb_test "ptype ${name}4a ^ ${name}4b" "type = ${type}4"
534 gdb_test "ptype u${name}4a & u${name}4b" "type = u${type}4"
535 gdb_test "ptype u${name}4a | u${name}4b" "type = u${type}4"
536 gdb_test "ptype u${name}4a ^ u${name}4b" "type = u${type}4"
f4b8a18d
KW
537
538 # scalar
539 if { ${size} < 8 } {
540 gdb_test "print/x ~${name}a" " = 0xfffffffd"
541 gdb_test "print/x ~u${name}a" " = 0xfffffffd"
542 } else {
543 gdb_test "print/x ~${name}a" " = 0xfffffffffffffffd"
544 gdb_test "print/x ~u${name}a" " = 0xfffffffffffffffd"
545 }
546 # vector
547 if { ${size} == 1 } {
548 gdb_test "print/x ~${name}4a" " = \\{0xfd, 0xfb, 0xf7, 0xef\\}"
549 gdb_test "print/x ~u${name}4a" " = \\{0xfd, 0xfb, 0xf7, 0xef\\}"
550 } elseif { ${size} == 2 } {
551 gdb_test "print/x ~${name}4a" " = \\{0xfffd, 0xfffb, 0xfff7, 0xffef\\}"
552 gdb_test "print/x ~u${name}4a" " = \\{0xfffd, 0xfffb, 0xfff7, 0xffef\\}"
553 } elseif { ${size} == 4 } {
554 gdb_test "print/x ~${name}4a" " = \\{0xfffffffd, 0xfffffffb, 0xfffffff7, 0xffffffef\\}"
555 gdb_test "print/x ~u${name}4a" " = \\{0xfffffffd, 0xfffffffb, 0xfffffff7, 0xffffffef\\}"
556 } else { # ${size} == 8
557 gdb_test "print/x ~${name}4a" " = \\{0xfffffffffffffffd, 0xfffffffffffffffb, 0xfffffffffffffff7, 0xffffffffffffffef\\}"
558 gdb_test "print/x ~u${name}4a" " = \\{0xfffffffffffffffd, 0xfffffffffffffffb, 0xfffffffffffffff7, 0xffffffffffffffef\\}"
559 }
560 # scalar
561 if { ${size} < 4 } {
562 gdb_test "ptype ~${name}a" "type = int"
563 gdb_test "ptype ~u${name}a" "type = int"
564 } elseif { ${size} == 4 } {
565 gdb_test "ptype ~${name}a" "type = int"
566 gdb_test "ptype ~u${name}a" "type = (unsigned int|uint)"
567 } else { # ${size} == 8
568 gdb_test "ptype ~${name}a" "type = long"
569 gdb_test "ptype ~u${name}a" "type = (unsigned long|ulong)"
570 }
571 # vector
ea5e6b0e
UW
572 gdb_test "ptype ~${name}4a" "type = ${type}4"
573 gdb_test "ptype ~u${name}4a" "type = u${type}4"
f4b8a18d
KW
574}
575
576# Logical operators
577proc check_logical_ops { name type isfloat size } {
578 # scalar
579 gdb_test "print/d !${name}a " " = 0"
580 gdb_test "print/d !!${name}a " " = 1"
581 # vector
582 gdb_test "print/d !${name}4a " " = \\{0, 0, 0, 0\\}"
583 gdb_test "print/d !!${name}4a " " = \\{-1, -1, -1, -1\\}"
584
585 # scalar with scalar
586 gdb_test "print/d ${name}a && ${name}b" " = 1"
587 gdb_test "print/d ${name}a && !${name}b" " = 0"
588 gdb_test "print/d ${name}a || ${name}b" " = 1"
589 gdb_test "print/d ${name}a || !${name}b" " = 1"
590 gdb_test "print/d !${name}a || !${name}b" " = 0"
591
592 # scalar with vector
593 gdb_test "print/d ${name}4a && ${name}b" " = \\{-1, -1, -1, -1\\}"
594 gdb_test "print/d ${name}4a && !${name}b" " = \\{0, 0, 0, 0\\}"
595 gdb_test "print/d ${name}a || ${name}4b" " = \\{-1, -1, -1, -1\\}"
596 gdb_test "print/d ${name}a || !${name}4b" " = \\{-1, -1, -1, -1\\}"
597 gdb_test "print/d !${name}4a || !${name}b" " = \\{0, 0, 0, 0\\}"
598 # vector with vector
599 gdb_test "print/d ${name}4a && ${name}4b" " = \\{-1, -1, -1, -1\\}"
600 gdb_test "print/d ${name}4a || ${name}4b" " = \\{-1, -1, -1, -1\\}"
601
602 # result type should be int for scalars
603 gdb_test "ptype !${name}a" "type = int"
604 gdb_test "ptype ${name}a && ${name}b" "type = int"
605 gdb_test "ptype ${name}a || ${name}b" "type = int"
606
607 if { ${isfloat} } {
608 if { ${size} == 2 } {
609 # result type should be short for half precision floating point vectors
610 # scalar with vector
ea5e6b0e
UW
611 gdb_test "ptype ${name}4a && ${name}b" "type = short4"
612 gdb_test "ptype ${name}a || ${name}4b" "type = short4"
f4b8a18d 613 # vector with vector
ea5e6b0e
UW
614 gdb_test "ptype !${name}4a" "type = short4"
615 gdb_test "ptype ${name}4a && ${name}4b" "type = short4"
616 gdb_test "ptype ${name}4a || ${name}4b" "type = short4"
f4b8a18d
KW
617 } elseif { ${size} == 4 } {
618 # result type should be int for single precision floating point vectors
619 # scalar with vector
ea5e6b0e
UW
620 gdb_test "ptype ${name}4a && ${name}b" "type = int4"
621 gdb_test "ptype ${name}a || ${name}4b" "type = int4"
f4b8a18d 622 # vector with vector
ea5e6b0e
UW
623 gdb_test "ptype !${name}4a" "type = int4"
624 gdb_test "ptype ${name}4a && ${name}4b" "type = int4"
625 gdb_test "ptype ${name}4a || ${name}4b" "type = int4"
f4b8a18d
KW
626 } else { # ${size} == 8
627 # result type should be long for double precision floating point vectors
628 # scalar with vector
ea5e6b0e
UW
629 gdb_test "ptype ${name}4a && ${name}b" "type = long4"
630 gdb_test "ptype ${name}a || ${name}4b" "type = long4"
f4b8a18d 631 # vector with vector
ea5e6b0e
UW
632 gdb_test "ptype !${name}4a" "type = long4"
633 gdb_test "ptype ${name}4a && ${name}4b" "type = long4"
634 gdb_test "ptype ${name}4a || ${name}4b" "type = long4"
f4b8a18d
KW
635 }
636 } else {
637 # unsigned scalar
638 gdb_test "print/d !u${name}a " " = 0"
639 gdb_test "print/d !!u${name}a " " = 1"
640 # unsigned vector
641 gdb_test "print/d !u${name}4a " " = \\{0, 0, 0, 0\\}"
642 gdb_test "print/d !!u${name}4a " " = \\{-1, -1, -1, -1\\}"
643
644 # scalar with scalar
645 gdb_test "print/d u${name}a && u${name}b" " = 1"
646 gdb_test "print/d u${name}a || u${name}b" " = 1"
647 # scalar with vector
648 gdb_test "print/d u${name}4a && u${name}b" " = \\{-1, -1, -1, -1\\}"
649 gdb_test "print/d u${name}a || u${name}4b" " = \\{-1, -1, -1, -1\\}"
650 # vector with vector
651 gdb_test "print/d u${name}4a && u${name}4b" " = \\{-1, -1, -1, -1\\}"
652 gdb_test "print/d u${name}4a || u${name}4b" " = \\{-1, -1, -1, -1\\}"
653
654 # scalar
655 gdb_test "ptype !u${name}a" "type = int"
656 # vector
ea5e6b0e
UW
657 gdb_test "ptype !${name}4a" "type = ${type}4"
658 gdb_test "ptype !u${name}4a" "type = ${type}4"
f4b8a18d
KW
659
660 # scalar with vector
ea5e6b0e
UW
661 gdb_test "ptype ${name}4a && ${name}b" "type = ${type}4"
662 gdb_test "ptype ${name}a || ${name}4b" "type = ${type}4"
f4b8a18d 663 # result type for unsigned vector operand is signed
ea5e6b0e
UW
664 gdb_test "ptype u${name}4a && u${name}b" "type = ${type}4"
665 gdb_test "ptype u${name}a || u${name}4b" "type = ${type}4"
f4b8a18d 666 # vector with vector
ea5e6b0e
UW
667 gdb_test "ptype ${name}4a && ${name}4b" "type = ${type}4"
668 gdb_test "ptype ${name}4a || ${name}4b" "type = ${type}4"
f4b8a18d 669 # result type for unsigned vector operand is signed
ea5e6b0e
UW
670 gdb_test "ptype u${name}4a && u${name}4b" "type = ${type}4"
671 gdb_test "ptype u${name}4a || u${name}4b" "type = ${type}4"
f4b8a18d
KW
672 }
673}
674
675# Conditional operator
676proc check_conditional_op { name type isfloat } {
677 # scalar with scalar
678 gdb_test "print/d ${name}a ? ${name}b : ${name}a" " = 1"
679 gdb_test "print/d !${name}a ? ${name}b : ${name}a" " = 2"
680 # scalar with vector
681 gdb_test "print/d ${name}4a ? ${name}4b : ${name}a" " = \\{1, 2, 8, 4\\}"
682 gdb_test "print/d ${name}4a ? ${name}b : ${name}4a" " = \\{1, 1, 1, 1\\}"
683 gdb_test "print/d ${name}4a > 4 ? 1 : ${name}4a" " = \\{2, 4, 1, 1\\}"
684 gdb_test "print/d ${name}4a > 4 ? ${name}4b : ${name}a" " = \\{2, 2, 8, 4\\}"
685 # vector with vector
686 gdb_test "print/d ${name}4a ? ${name}4b : ${name}4a" " = \\{1, 2, 8, 4\\}"
687 gdb_test "print/d ${name}4a > 4 ? ${name}4b : ${name}4a" " = \\{2, 4, 8, 4\\}"
688
689 # scalar with scalar
690 gdb_test "ptype ${name}a ? ${name}b : ${name}a" "type = ${type}"
691 # scalar with vector
ea5e6b0e
UW
692 gdb_test "ptype ${name}4a ? ${name}4b : ${name}a" "type = ${type}4"
693 gdb_test "ptype ${name}4a ? ${name}b : ${name}4a" "type = ${type}4"
f4b8a18d 694 # vector with vector
ea5e6b0e 695 gdb_test "ptype ${name}4a ? ${name}4b : ${name}4a" "type = ${type}4"
f4b8a18d
KW
696
697 if { !${isfloat} } {
698 # scalar with scalar
699 gdb_test "print/d u${name}a ? u${name}b : u${name}a" " = 1"
700 gdb_test "print/d !u${name}a ? u${name}b : u${name}a" " = 2"
701 # scalar with vector
702 gdb_test "print/d u${name}4a ? u${name}4b : u${name}a" " = \\{1, 2, 8, 4\\}"
703 gdb_test "print/d u${name}4a ? u${name}b : u${name}4a" " = \\{1, 1, 1, 1\\}"
704 gdb_test "print/d u${name}4a > 4 ? 1 : u${name}4a" " = \\{2, 4, 1, 1\\}"
705 gdb_test "print/d u${name}4a > 4 ? u${name}4b : u${name}a" " = \\{2, 2, 8, 4\\}"
706 # vector with vector
707 gdb_test "print/d u${name}4a ? u${name}4b : u${name}4a" " = \\{1, 2, 8, 4\\}"
708 gdb_test "print/d u${name}4a > 4 ? u${name}4b : u${name}4a" " = \\{2, 4, 8, 4\\}"
709
710 # scalar with scalar
711 gdb_test "ptype u${name}a ? u${name}b : u${name}a" "type = (unsigned ${type}|u${type})"
712 # scalar with vector
ea5e6b0e
UW
713 gdb_test "ptype u${name}4a ? u${name}4b : u${name}a" "type = u${type}4"
714 gdb_test "ptype u${name}4a ? u${name}b : u${name}4a" "type = u${type}4"
f4b8a18d 715 # vector with vector
ea5e6b0e 716 gdb_test "ptype u${name}4a ? u${name}4b : u${name}4a" "type = u${type}4"
f4b8a18d
KW
717 }
718}
719
720# Assignment operators
721proc check_assignment_ops { name type isfloat size } {
722 # scalar with scalar
723 gdb_test "print/d ${name}a = ${name}b" " = 1"
724 gdb_test "print/d ${name}a = 2" " = 2"
725 gdb_test "print/d ${name}a += ${name}b" " = 3"
726 gdb_test "print/d ${name}a -= ${name}b" " = 2"
727 gdb_test "print/d ${name}b *= ${name}a" " = 2"
728 gdb_test "print/d ${name}b /= ${name}a" " = 1"
729 # scalar with vector
730 gdb_test "print/d ${name}4a = ${name}b" " = \\{1, 1, 1, 1\\}"
731 gdb_test "print/d ${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
732 gdb_test "print/d ${name}4a += ${name}b" " = \\{3, 5, 9, 17\\}"
733 gdb_test "print/d ${name}4a -= ${name}b" " = \\{2, 4, 8, 16\\}"
734 gdb_test "print/d ${name}4b *= ${name}a" " = \\{2, 4, 16, 8\\}"
735 gdb_test "print/d ${name}4b /= ${name}a" " = \\{1, 2, 8, 4\\}"
736 # vector with vector
737 gdb_test "print/d ${name}4a = ${name}4b" " = \\{1, 2, 8, 4\\}"
738 gdb_test "print/d ${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
739 gdb_test "print/d ${name}4a += ${name}4b" " = \\{3, 6, 16, 20\\}"
740 gdb_test "print/d ${name}4a -= ${name}4b" " = \\{2, 4, 8, 16\\}"
741 gdb_test "print/d ${name}4b *= ${name}4a" " = \\{2, 8, 64, 64\\}"
742 gdb_test "print/d ${name}4b /= ${name}4a" " = \\{1, 2, 8, 4\\}"
743
744 # scalar with scalar
745 gdb_test "ptype ${name}a = ${name}b" "type = ${type}"
746 gdb_test "ptype ${name}a += ${name}b" "type = ${type}"
747 gdb_test "ptype ${name}a -= ${name}b" "type = ${type}"
748 gdb_test "ptype ${name}a *= ${name}b" "type = ${type}"
749 gdb_test "ptype ${name}a /= ${name}b" "type = ${type}"
750 # scalar with vector
ea5e6b0e
UW
751 gdb_test "ptype ${name}4a = ${name}b" "type = ${type}4"
752 gdb_test "ptype ${name}4a += ${name}b" "type = ${type}4"
753 gdb_test "ptype ${name}4a -= ${name}b" "type = ${type}4"
754 gdb_test "ptype ${name}4b *= ${name}a" "type = ${type}4"
755 gdb_test "ptype ${name}4b /= ${name}a" "type = ${type}4"
f4b8a18d 756 # vector with vector
ea5e6b0e
UW
757 gdb_test "ptype ${name}4a = ${name}4b" "type = ${type}4"
758 gdb_test "ptype ${name}4a += ${name}4b" "type = ${type}4"
759 gdb_test "ptype ${name}4a -= ${name}4b" "type = ${type}4"
760 gdb_test "ptype ${name}4b *= ${name}4a" "type = ${type}4"
761 gdb_test "ptype ${name}4b /= ${name}4a" "type = ${type}4"
f4b8a18d
KW
762
763 if { !${isfloat} } {
764 # scalar with scalar
765 gdb_test "print/d ${name}a %= ${name}b" " = 0"
766 gdb_test "print/d ${name}a = 2" " = 2"
767 gdb_test "print/d ${name}a <<= ${name}b" " = 4"
768 gdb_test "print/d ${name}a = 2" " = 2"
769 gdb_test "print/d ${name}a >>= ${name}b" " = 1"
770 gdb_test "print/d ${name}a = 2" " = 2"
771 gdb_test "print/d ${name}a &= ${name}b" " = 0"
772 gdb_test "print/d ${name}a = 2" " = 2"
773 gdb_test "print/d ${name}a |= ${name}b" " = 3"
774 gdb_test "print/d ${name}a = 2" " = 2"
775 gdb_test "print/d ${name}a ^= ${name}b" " = 3"
776 gdb_test "print/d ${name}a = 2" " = 2"
777 # scalar with vector
778 gdb_test "print/d ${name}4b %= ${name}a" " = \\{1, 0, 0, 0\\}"
779 gdb_test "print/d ${name}4b = \{1, 2, 8, 4\}" " = \\{1, 2, 8, 4\\}"
780 gdb_test "print/d ${name}4a <<= ${name}b" " = \\{4, 8, 16, 32\\}"
781 gdb_test "print/d ${name}4a >>= ${name}b" " = \\{2, 4, 8, 16\\}"
782 gdb_test "print/d ${name}4a &= ${name}b" " = \\{0, 0, 0, 0\\}"
783 gdb_test "print/d ${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
784 gdb_test "print/d ${name}4a |= ${name}b" " = \\{3, 5, 9, 17\\}"
785 gdb_test "print/d ${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
786 gdb_test "print/d ${name}4a ^= ${name}b" " = \\{3, 5, 9, 17\\}"
787 gdb_test "print/d ${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
788 # vector with vector
789 gdb_test "print/d ${name}4b %= ${name}4a" " = \\{1, 2, 0, 4\\}"
790 gdb_test "print/d ${name}4b = \{1, 2, 8, 4\}" " = \\{1, 2, 8, 4\\}"
791 if { ${size} == 1 } {
792 gdb_test "print/d ${name}4a <<= ${name}4b" " = \\{4, 16, 0, 0\\}"
793 gdb_test "print/d ${name}4a >>= ${name}4b" " = \\{2, 4, 0, 0\\}"
794 gdb_test "print/d ${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
795 } else {
796 gdb_test "print/d ${name}4a <<= ${name}4b" " = \\{4, 16, 2048, 256\\}"
797 gdb_test "print/d ${name}4a >>= ${name}4b" " = \\{2, 4, 8, 16\\}"
798 }
799 gdb_test "print/d ${name}4a &= ${name}4b" " = \\{0, 0, 8, 0\\}"
800 gdb_test "print/d ${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
801 gdb_test "print/d ${name}4a |= ${name}4b" " = \\{3, 6, 8, 20\\}"
802 gdb_test "print/d ${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
803 gdb_test "print/d ${name}4a ^= ${name}4b" " = \\{3, 6, 0, 20\\}"
804 gdb_test "print/d ${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
805
806 # scalar with scalar
807 gdb_test "ptype ${name}a %= ${name}b" "type = ${type}"
808 gdb_test "ptype ${name}a <<= ${name}b" "type = ${type}"
809 gdb_test "ptype ${name}a >>= ${name}b" "type = ${type}"
810 gdb_test "ptype ${name}a &= ${name}b" "type = ${type}"
811 gdb_test "ptype ${name}a |= ${name}b" "type = ${type}"
812 gdb_test "ptype ${name}a ^= ${name}b" "type = ${type}"
813 # scalar with vector
ea5e6b0e
UW
814 gdb_test "ptype ${name}4a %= ${name}b" "type = ${type}4"
815 gdb_test "ptype ${name}4a <<= ${name}b" "type = ${type}4"
816 gdb_test "ptype ${name}4a >>= ${name}b" "type = ${type}4"
817 gdb_test "ptype ${name}4a &= ${name}b" "type = ${type}4"
818 gdb_test "ptype ${name}4a |= ${name}b" "type = ${type}4"
819 gdb_test "ptype ${name}4a ^= ${name}b" "type = ${type}4"
f4b8a18d 820 # vector with vector
ea5e6b0e
UW
821 gdb_test "ptype ${name}4a %= ${name}4b" "type = ${type}4"
822 gdb_test "ptype ${name}4a <<= ${name}4b" "type = ${type}4"
823 gdb_test "ptype ${name}4a >>= ${name}4b" "type = ${type}4"
824 gdb_test "ptype ${name}4a &= ${name}4b" "type = ${type}4"
825 gdb_test "ptype ${name}4a |= ${name}4b" "type = ${type}4"
826 gdb_test "ptype ${name}4a ^= ${name}4b" "type = ${type}4"
f4b8a18d
KW
827
828 # scalar with scalar
829 gdb_test "print/d u${name}a = u${name}b" " = 1"
830 gdb_test "print/d u${name}a = 2" " = 2"
831 gdb_test "print/d u${name}a += u${name}b" " = 3"
832 gdb_test "print/d u${name}a -= u${name}b" " = 2"
833 gdb_test "print/d u${name}b *= u${name}a" " = 2"
834 gdb_test "print/d u${name}b /= u${name}a" " = 1"
835 gdb_test "print/d u${name}a %= u${name}b" " = 0"
836 gdb_test "print/d u${name}a = 2" " = 2"
837 gdb_test "print/d u${name}a <<= u${name}b" " = 4"
838 gdb_test "print/d u${name}a = 2" " = 2"
839 gdb_test "print/d u${name}a >>= u${name}b" " = 1"
840 gdb_test "print/d u${name}a = 2" " = 2"
841 gdb_test "print/d u${name}a &= u${name}b" " = 0"
842 gdb_test "print/d u${name}a = 2" " = 2"
843 gdb_test "print/d u${name}a |= u${name}b" " = 3"
844 gdb_test "print/d u${name}a = 2" " = 2"
845 gdb_test "print/d u${name}a ^= u${name}b" " = 3"
846 gdb_test "print/d u${name}a = 2" " = 2"
847 # scalar with vector
848 gdb_test "print/d u${name}4a = u${name}b" " = \\{1, 1, 1, 1\\}"
849 gdb_test "print/d u${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
850 gdb_test "print/d u${name}4a += u${name}b" " = \\{3, 5, 9, 17\\}"
851 gdb_test "print/d u${name}4a -= u${name}b" " = \\{2, 4, 8, 16\\}"
852 gdb_test "print/d u${name}4b *= u${name}a" " = \\{2, 4, 16, 8\\}"
853 gdb_test "print/d u${name}4b /= u${name}a" " = \\{1, 2, 8, 4\\}"
854 gdb_test "print/d u${name}4b %= u${name}a" " = \\{1, 0, 0, 0\\}"
855 gdb_test "print/d u${name}4b = \{1, 2, 8, 4\}" " = \\{1, 2, 8, 4\\}"
856 gdb_test "print/d u${name}4a <<= u${name}b" " = \\{4, 8, 16, 32\\}"
857 gdb_test "print/d u${name}4a >>= u${name}b" " = \\{2, 4, 8, 16\\}"
858 gdb_test "print/d u${name}4a &= u${name}b" " = \\{0, 0, 0, 0\\}"
859 gdb_test "print/d u${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
860 gdb_test "print/d u${name}4a |= u${name}b" " = \\{3, 5, 9, 17\\}"
861 gdb_test "print/d u${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
862 gdb_test "print/d u${name}4a ^= u${name}b" " = \\{3, 5, 9, 17\\}"
863 gdb_test "print/d u${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
864 # vector with vector
865 gdb_test "print/d u${name}4a = u${name}4b" " = \\{1, 2, 8, 4\\}"
866 gdb_test "print/d u${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
867 gdb_test "print/d u${name}4a += u${name}4b" " = \\{3, 6, 16, 20\\}"
868 gdb_test "print/d u${name}4a -= u${name}4b" " = \\{2, 4, 8, 16\\}"
869 gdb_test "print/d u${name}4b *= u${name}4a" " = \\{2, 8, 64, 64\\}"
870 gdb_test "print/d u${name}4b /= u${name}4a" " = \\{1, 2, 8, 4\\}"
871 gdb_test "print/d u${name}4b %= u${name}4a" " = \\{1, 2, 0, 4\\}"
872 gdb_test "print/d u${name}4b = \{1, 2, 8, 4\}" " = \\{1, 2, 8, 4\\}"
873 if { ${size} == 1 } {
874 gdb_test "print/d u${name}4a <<= u${name}4b" " = \\{4, 16, 0, 0\\}"
875 gdb_test "print/d u${name}4a >>= u${name}4b" " = \\{2, 4, 0, 0\\}"
876 gdb_test "print/d u${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
877 } else {
878 gdb_test "print/d u${name}4a <<= u${name}4b" " = \\{4, 16, 2048, 256\\}"
879 gdb_test "print/d u${name}4a >>= u${name}4b" " = \\{2, 4, 8, 16\\}"
880 }
881 gdb_test "print/d u${name}4a &= u${name}4b" " = \\{0, 0, 8, 0\\}"
882 gdb_test "print/d u${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
883 gdb_test "print/d u${name}4a |= u${name}4b" " = \\{3, 6, 8, 20\\}"
884 gdb_test "print/d u${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
885 gdb_test "print/d u${name}4a ^= u${name}4b" " = \\{3, 6, 0, 20\\}"
886 gdb_test "print/d u${name}4a = \{2, 4, 8, 16\}" " = \\{2, 4, 8, 16\\}"
887
888 # scalar with scalar
889 gdb_test "ptype u${name}a = u${name}b" "type = (unsigned ${type}|u${type})"
890 gdb_test "ptype u${name}a += u${name}b" "type = (unsigned ${type}|u${type})"
891 gdb_test "ptype u${name}a -= u${name}b" "type = (unsigned ${type}|u${type})"
892 gdb_test "ptype u${name}a *= u${name}b" "type = (unsigned ${type}|u${type})"
893 gdb_test "ptype u${name}a /= u${name}b" "type = (unsigned ${type}|u${type})"
894 gdb_test "ptype u${name}a %= u${name}b" "type = (unsigned ${type}|u${type})"
895 gdb_test "ptype u${name}a <<= u${name}b" "type = (unsigned ${type}|u${type})"
896 gdb_test "ptype u${name}a >>= u${name}b" "type = (unsigned ${type}|u${type})"
897 gdb_test "ptype u${name}a &= u${name}b" "type = (unsigned ${type}|u${type})"
898 gdb_test "ptype u${name}a |= u${name}b" "type = (unsigned ${type}|u${type})"
899 gdb_test "ptype u${name}a ^= u${name}b" "type = (unsigned ${type}|u${type})"
900 # scalar with vector
ea5e6b0e
UW
901 gdb_test "ptype u${name}4a = u${name}b" "type = u${type}4"
902 gdb_test "ptype u${name}4a += u${name}b" "type = u${type}4"
903 gdb_test "ptype u${name}4a -= u${name}b" "type = u${type}4"
904 gdb_test "ptype u${name}4b *= u${name}a" "type = u${type}4"
905 gdb_test "ptype u${name}4b /= u${name}a" "type = u${type}4"
906 gdb_test "ptype u${name}4a %= u${name}b" "type = u${type}4"
907 gdb_test "ptype u${name}4a <<= u${name}b" "type = u${type}4"
908 gdb_test "ptype u${name}4a >>= u${name}b" "type = u${type}4"
909 gdb_test "ptype u${name}4a &= u${name}b" "type = u${type}4"
910 gdb_test "ptype u${name}4a |= u${name}b" "type = u${type}4"
911 gdb_test "ptype u${name}4a ^= u${name}b" "type = u${type}4"
f4b8a18d 912 # vector with vector
ea5e6b0e
UW
913 gdb_test "ptype u${name}4a = u${name}4b" "type = u${type}4"
914 gdb_test "ptype u${name}4a += u${name}4b" "type = u${type}4"
915 gdb_test "ptype u${name}4a -= u${name}4b" "type = u${type}4"
916 gdb_test "ptype u${name}4b *= u${name}4a" "type = u${type}4"
917 gdb_test "ptype u${name}4b /= u${name}4a" "type = u${type}4"
918 gdb_test "ptype u${name}4a %= u${name}4b" "type = u${type}4"
919 gdb_test "ptype u${name}4a <<= u${name}4b" "type = u${type}4"
920 gdb_test "ptype u${name}4a >>= u${name}4b" "type = u${type}4"
921 gdb_test "ptype u${name}4a &= u${name}4b" "type = u${type}4"
922 gdb_test "ptype u${name}4a |= u${name}4b" "type = u${type}4"
923 gdb_test "ptype u${name}4a ^= u${name}4b" "type = u${type}4"
f4b8a18d
KW
924 }
925}
926
927proc do_check { name type isfloat size } {
928 check_basic ${name} ${type} ${isfloat}
929 check_arithmetic_ops ${name} ${type} ${isfloat} ${size}
930 check_relational_ops ${name} ${type} ${isfloat} ${size}
931 check_equality_ops ${name} ${type} ${isfloat} ${size}
932 if { !${isfloat} } {
933 check_shift_ops ${name} ${type} ${size}
934 check_bitwise_ops ${name} ${type} ${size}
935 }
936 check_logical_ops ${name} ${type} ${isfloat} ${size}
937 check_conditional_op ${name} ${type} ${isfloat}
938 check_assignment_ops ${name} ${type} ${isfloat} ${size}
939}
940
941do_check "c" "char" 0 1
942do_check "s" "short" 0 2
943do_check "i" "int" 0 4
944do_check "l" "long" 0 8
945if { ${have_cl_khr_fp16} } {
946 do_check "h" "half" 1 2
947}
948do_check "f" "float" 1 4
949if { ${have_cl_khr_fp64} } {
950 do_check "d" "double" 1 8
951}
952# Delete the OpenCL program source
953remote_file target delete ${clprogram}