Mercurial > hg > truffle
comparison test/compiler/8004867/TestIntAtomicCAS.java @ 8079:ad736b4683b4
8004867: VM crashing with assert "share/vm/opto/node.hpp:357 - assert(i < _max) failed: oob"
Summary: Added few checks and early bailout from Superword optimization to avoid such cases in a future.
Reviewed-by: roland, twisti
author | kvn |
---|---|
date | Mon, 18 Feb 2013 16:47:15 -0800 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
8078:a2bc322ca273 | 8079:ad736b4683b4 |
---|---|
1 /* | |
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. | |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
20 * or visit www.oracle.com if you need additional information or have any | |
21 * questions. | |
22 * | |
23 */ | |
24 | |
25 /** | |
26 * @test | |
27 * @bug 8004867 | |
28 * @summary VM crashing with assert "share/vm/opto/node.hpp:357 - assert(i < _max) failed: oob" | |
29 * | |
30 * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntAtomicCAS | |
31 * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:+OptimizeFill TestIntAtomicCAS | |
32 */ | |
33 | |
34 import java.util.concurrent.atomic.AtomicIntegerArray; | |
35 | |
36 public class TestIntAtomicCAS { | |
37 private static final int ARRLEN = 97; | |
38 private static final int ITERS = 11000; | |
39 private static final int OFFSET = 3; | |
40 private static final int SCALE = 2; | |
41 private static final int ALIGN_OFF = 8; | |
42 private static final int UNALIGN_OFF = 5; | |
43 | |
44 public static void main(String args[]) { | |
45 System.out.println("Testing Integer array atomic CAS operations"); | |
46 int errn = test(false); | |
47 if (errn > 0) { | |
48 System.err.println("FAILED: " + errn + " errors"); | |
49 System.exit(97); | |
50 } | |
51 System.out.println("PASSED"); | |
52 } | |
53 | |
54 static int test(boolean test_only) { | |
55 AtomicIntegerArray a1 = new AtomicIntegerArray(ARRLEN); | |
56 AtomicIntegerArray a2 = new AtomicIntegerArray(ARRLEN); | |
57 // Initialize | |
58 for (int i=0; i<ARRLEN; i++) { | |
59 a1.set(i, -1); | |
60 a2.set(i, -1); | |
61 } | |
62 System.out.println("Warmup"); | |
63 for (int i=0; i<ITERS; i++) { | |
64 test_ci(a1); | |
65 test_vi(a2, 123, -1); | |
66 test_cp(a1, a2); | |
67 test_2ci(a1, a2); | |
68 test_2vi(a1, a2, 123, 103); | |
69 test_ci_neg(a1, 123); | |
70 test_vi_neg(a2, 123, 103); | |
71 test_cp_neg(a1, a2); | |
72 test_2ci_neg(a1, a2); | |
73 test_2vi_neg(a1, a2, 123, 103); | |
74 test_ci_oppos(a1, 123); | |
75 test_vi_oppos(a2, 123, 103); | |
76 test_cp_oppos(a1, a2); | |
77 test_2ci_oppos(a1, a2); | |
78 test_2vi_oppos(a1, a2, 123, 103); | |
79 test_ci_off(a1, 123); | |
80 test_vi_off(a2, 123, 103); | |
81 test_cp_off(a1, a2); | |
82 test_2ci_off(a1, a2); | |
83 test_2vi_off(a1, a2, 123, 103); | |
84 test_ci_inv(a1, OFFSET, 123); | |
85 test_vi_inv(a2, 123, OFFSET, 103); | |
86 test_cp_inv(a1, a2, OFFSET); | |
87 test_2ci_inv(a1, a2, OFFSET); | |
88 test_2vi_inv(a1, a2, 123, 103, OFFSET); | |
89 test_ci_scl(a1, 123); | |
90 test_vi_scl(a2, 123, 103); | |
91 test_cp_scl(a1, a2); | |
92 test_2ci_scl(a1, a2); | |
93 test_2vi_scl(a1, a2, 123, 103); | |
94 test_cp_alndst(a1, a2); | |
95 test_cp_alnsrc(a1, a2); | |
96 test_2ci_aln(a1, a2); | |
97 test_2vi_aln(a1, a2, 123, 103); | |
98 test_cp_unalndst(a1, a2); | |
99 test_cp_unalnsrc(a1, a2); | |
100 test_2ci_unaln(a1, a2); | |
101 test_2vi_unaln(a1, a2, 123, 103); | |
102 } | |
103 // Initialize | |
104 for (int i=0; i<ARRLEN; i++) { | |
105 a1.set(i, -1); | |
106 a2.set(i, -1); | |
107 } | |
108 // Test and verify results | |
109 System.out.println("Verification"); | |
110 int errn = 0; | |
111 { | |
112 test_ci(a1); | |
113 for (int i=0; i<ARRLEN; i++) { | |
114 errn += verify("test_ci: a1", i, a1.get(i), -123); | |
115 } | |
116 test_vi(a2, 123, -1); | |
117 for (int i=0; i<ARRLEN; i++) { | |
118 errn += verify("test_vi: a2", i, a2.get(i), 123); | |
119 } | |
120 test_cp(a1, a2); | |
121 for (int i=0; i<ARRLEN; i++) { | |
122 errn += verify("test_cp: a1", i, a1.get(i), 123); | |
123 } | |
124 test_2ci(a1, a2); | |
125 for (int i=0; i<ARRLEN; i++) { | |
126 errn += verify("test_2ci: a1", i, a1.get(i), -123); | |
127 errn += verify("test_2ci: a2", i, a2.get(i), -103); | |
128 } | |
129 test_2vi(a1, a2, 123, 103); | |
130 for (int i=0; i<ARRLEN; i++) { | |
131 errn += verify("test_2vi: a1", i, a1.get(i), 123); | |
132 errn += verify("test_2vi: a2", i, a2.get(i), 103); | |
133 } | |
134 // Reset for negative stride | |
135 for (int i=0; i<ARRLEN; i++) { | |
136 a1.set(i, -1); | |
137 a2.set(i, -1); | |
138 } | |
139 test_ci_neg(a1, -1); | |
140 for (int i=0; i<ARRLEN; i++) { | |
141 errn += verify("test_ci_neg: a1", i, a1.get(i), -123); | |
142 } | |
143 test_vi_neg(a2, 123, -1); | |
144 for (int i=0; i<ARRLEN; i++) { | |
145 errn += verify("test_vi_neg: a2", i, a2.get(i), 123); | |
146 } | |
147 test_cp_neg(a1, a2); | |
148 for (int i=0; i<ARRLEN; i++) { | |
149 errn += verify("test_cp_neg: a1", i, a1.get(i), 123); | |
150 } | |
151 test_2ci_neg(a1, a2); | |
152 for (int i=0; i<ARRLEN; i++) { | |
153 errn += verify("test_2ci_neg: a1", i, a1.get(i), -123); | |
154 errn += verify("test_2ci_neg: a2", i, a2.get(i), -103); | |
155 } | |
156 test_2vi_neg(a1, a2, 123, 103); | |
157 for (int i=0; i<ARRLEN; i++) { | |
158 errn += verify("test_2vi_neg: a1", i, a1.get(i), 123); | |
159 errn += verify("test_2vi_neg: a2", i, a2.get(i), 103); | |
160 } | |
161 // Reset for opposite stride | |
162 for (int i=0; i<ARRLEN; i++) { | |
163 a1.set(i, -1); | |
164 a2.set(i, -1); | |
165 } | |
166 test_ci_oppos(a1, -1); | |
167 for (int i=0; i<ARRLEN; i++) { | |
168 errn += verify("test_ci_oppos: a1", i, a1.get(i), -123); | |
169 } | |
170 test_vi_oppos(a2, 123, -1); | |
171 for (int i=0; i<ARRLEN; i++) { | |
172 errn += verify("test_vi_oppos: a2", i, a2.get(i), 123); | |
173 } | |
174 test_cp_oppos(a1, a2); | |
175 for (int i=0; i<ARRLEN; i++) { | |
176 errn += verify("test_cp_oppos: a1", i, a1.get(i), 123); | |
177 } | |
178 test_2ci_oppos(a1, a2); | |
179 for (int i=0; i<ARRLEN; i++) { | |
180 errn += verify("test_2ci_oppos: a1", i, a1.get(i), -123); | |
181 errn += verify("test_2ci_oppos: a2", i, a2.get(i), -103); | |
182 } | |
183 test_2vi_oppos(a1, a2, 123, 103); | |
184 for (int i=0; i<ARRLEN; i++) { | |
185 errn += verify("test_2vi_oppos: a1", i, a1.get(i), 123); | |
186 errn += verify("test_2vi_oppos: a2", i, a2.get(i), 103); | |
187 } | |
188 // Reset for indexing with offset | |
189 for (int i=0; i<ARRLEN; i++) { | |
190 a1.set(i, -1); | |
191 a2.set(i, -1); | |
192 } | |
193 test_ci_off(a1, -1); | |
194 for (int i=OFFSET; i<ARRLEN; i++) { | |
195 errn += verify("test_ci_off: a1", i, a1.get(i), -123); | |
196 } | |
197 test_vi_off(a2, 123, -1); | |
198 for (int i=OFFSET; i<ARRLEN; i++) { | |
199 errn += verify("test_vi_off: a2", i, a2.get(i), 123); | |
200 } | |
201 test_cp_off(a1, a2); | |
202 for (int i=OFFSET; i<ARRLEN; i++) { | |
203 errn += verify("test_cp_off: a1", i, a1.get(i), 123); | |
204 } | |
205 test_2ci_off(a1, a2); | |
206 for (int i=OFFSET; i<ARRLEN; i++) { | |
207 errn += verify("test_2ci_off: a1", i, a1.get(i), -123); | |
208 errn += verify("test_2ci_off: a2", i, a2.get(i), -103); | |
209 } | |
210 test_2vi_off(a1, a2, 123, 103); | |
211 for (int i=OFFSET; i<ARRLEN; i++) { | |
212 errn += verify("test_2vi_off: a1", i, a1.get(i), 123); | |
213 errn += verify("test_2vi_off: a2", i, a2.get(i), 103); | |
214 } | |
215 for (int i=0; i<OFFSET; i++) { | |
216 errn += verify("test_2vi_off: a1", i, a1.get(i), -1); | |
217 errn += verify("test_2vi_off: a2", i, a2.get(i), -1); | |
218 } | |
219 // Reset for indexing with invariant offset | |
220 for (int i=0; i<ARRLEN; i++) { | |
221 a1.set(i, -1); | |
222 a2.set(i, -1); | |
223 } | |
224 test_ci_inv(a1, OFFSET, -1); | |
225 for (int i=OFFSET; i<ARRLEN; i++) { | |
226 errn += verify("test_ci_inv: a1", i, a1.get(i), -123); | |
227 } | |
228 test_vi_inv(a2, 123, OFFSET, -1); | |
229 for (int i=OFFSET; i<ARRLEN; i++) { | |
230 errn += verify("test_vi_inv: a2", i, a2.get(i), 123); | |
231 } | |
232 test_cp_inv(a1, a2, OFFSET); | |
233 for (int i=OFFSET; i<ARRLEN; i++) { | |
234 errn += verify("test_cp_inv: a1", i, a1.get(i), 123); | |
235 } | |
236 test_2ci_inv(a1, a2, OFFSET); | |
237 for (int i=OFFSET; i<ARRLEN; i++) { | |
238 errn += verify("test_2ci_inv: a1", i, a1.get(i), -123); | |
239 errn += verify("test_2ci_inv: a2", i, a2.get(i), -103); | |
240 } | |
241 test_2vi_inv(a1, a2, 123, 103, OFFSET); | |
242 for (int i=OFFSET; i<ARRLEN; i++) { | |
243 errn += verify("test_2vi_inv: a1", i, a1.get(i), 123); | |
244 errn += verify("test_2vi_inv: a2", i, a2.get(i), 103); | |
245 } | |
246 for (int i=0; i<OFFSET; i++) { | |
247 errn += verify("test_2vi_inv: a1", i, a1.get(i), -1); | |
248 errn += verify("test_2vi_inv: a2", i, a2.get(i), -1); | |
249 } | |
250 // Reset for indexing with scale | |
251 for (int i=0; i<ARRLEN; i++) { | |
252 a1.set(i, -1); | |
253 a2.set(i, -1); | |
254 } | |
255 test_ci_scl(a1, -1); | |
256 for (int i=0; i<ARRLEN; i++) { | |
257 int val = (i%SCALE != 0) ? -1 : -123; | |
258 errn += verify("test_ci_scl: a1", i, a1.get(i), val); | |
259 } | |
260 test_vi_scl(a2, 123, -1); | |
261 for (int i=0; i<ARRLEN; i++) { | |
262 int val = (i%SCALE != 0) ? -1 : 123; | |
263 errn += verify("test_vi_scl: a2", i, a2.get(i), val); | |
264 } | |
265 test_cp_scl(a1, a2); | |
266 for (int i=0; i<ARRLEN; i++) { | |
267 int val = (i%SCALE != 0) ? -1 : 123; | |
268 errn += verify("test_cp_scl: a1", i, a1.get(i), val); | |
269 } | |
270 test_2ci_scl(a1, a2); | |
271 for (int i=0; i<ARRLEN; i++) { | |
272 if (i%SCALE != 0) { | |
273 errn += verify("test_2ci_scl: a1", i, a1.get(i), -1); | |
274 } else if (i*SCALE < ARRLEN) { | |
275 errn += verify("test_2ci_scl: a1", i*SCALE, a1.get(i*SCALE), -123); | |
276 } | |
277 if (i%SCALE != 0) { | |
278 errn += verify("test_2ci_scl: a2", i, a2.get(i), -1); | |
279 } else if (i*SCALE < ARRLEN) { | |
280 errn += verify("test_2ci_scl: a2", i*SCALE, a2.get(i*SCALE), -103); | |
281 } | |
282 } | |
283 test_2vi_scl(a1, a2, 123, 103); | |
284 for (int i=0; i<ARRLEN; i++) { | |
285 if (i%SCALE != 0) { | |
286 errn += verify("test_2vi_scl: a1", i, a1.get(i), -1); | |
287 } else if (i*SCALE < ARRLEN) { | |
288 errn += verify("test_2vi_scl: a1", i*SCALE, a1.get(i*SCALE), 123); | |
289 } | |
290 if (i%SCALE != 0) { | |
291 errn += verify("test_2vi_scl: a2", i, a2.get(i), -1); | |
292 } else if (i*SCALE < ARRLEN) { | |
293 errn += verify("test_2vi_scl: a2", i*SCALE, a2.get(i*SCALE), 103); | |
294 } | |
295 } | |
296 // Reset for 2 arrays with relative aligned offset | |
297 for (int i=0; i<ARRLEN; i++) { | |
298 a1.set(i, -1); | |
299 a2.set(i, -1); | |
300 } | |
301 test_vi(a2, 123, -1); | |
302 test_cp_alndst(a1, a2); | |
303 for (int i=0; i<ALIGN_OFF; i++) { | |
304 errn += verify("test_cp_alndst: a1", i, a1.get(i), -1); | |
305 } | |
306 for (int i=ALIGN_OFF; i<ARRLEN; i++) { | |
307 errn += verify("test_cp_alndst: a1", i, a1.get(i), 123); | |
308 } | |
309 for (int i=0; i<ALIGN_OFF; i++) { | |
310 a1.set(i, 123); | |
311 } | |
312 test_vi(a2, -123, 123); | |
313 test_cp_alnsrc(a1, a2); | |
314 for (int i=0; i<ARRLEN-ALIGN_OFF; i++) { | |
315 errn += verify("test_cp_alnsrc: a1", i, a1.get(i), -123); | |
316 } | |
317 for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) { | |
318 errn += verify("test_cp_alnsrc: a1", i, a1.get(i), 123); | |
319 } | |
320 for (int i=0; i<ARRLEN; i++) { | |
321 a1.set(i, -1); | |
322 a2.set(i, -1); | |
323 } | |
324 test_2ci_aln(a1, a2); | |
325 for (int i=0; i<ALIGN_OFF; i++) { | |
326 errn += verify("test_2ci_aln: a1", i, a1.get(i), -1); | |
327 } | |
328 for (int i=ALIGN_OFF; i<ARRLEN; i++) { | |
329 errn += verify("test_2ci_aln: a1", i, a1.get(i), -123); | |
330 } | |
331 for (int i=0; i<ARRLEN-ALIGN_OFF; i++) { | |
332 errn += verify("test_2ci_aln: a2", i, a2.get(i), -103); | |
333 } | |
334 for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) { | |
335 errn += verify("test_2ci_aln: a2", i, a2.get(i), -1); | |
336 } | |
337 for (int i=0; i<ARRLEN; i++) { | |
338 a1.set(i, -1); | |
339 a2.set(i, -1); | |
340 } | |
341 test_2vi_aln(a1, a2, 123, 103); | |
342 for (int i=0; i<ARRLEN-ALIGN_OFF; i++) { | |
343 errn += verify("test_2vi_aln: a1", i, a1.get(i), 123); | |
344 } | |
345 for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) { | |
346 errn += verify("test_2vi_aln: a1", i, a1.get(i), -1); | |
347 } | |
348 for (int i=0; i<ALIGN_OFF; i++) { | |
349 errn += verify("test_2vi_aln: a2", i, a2.get(i), -1); | |
350 } | |
351 for (int i=ALIGN_OFF; i<ARRLEN; i++) { | |
352 errn += verify("test_2vi_aln: a2", i, a2.get(i), 103); | |
353 } | |
354 | |
355 // Reset for 2 arrays with relative unaligned offset | |
356 for (int i=0; i<ARRLEN; i++) { | |
357 a1.set(i, -1); | |
358 a2.set(i, -1); | |
359 } | |
360 test_vi(a2, 123, -1); | |
361 test_cp_unalndst(a1, a2); | |
362 for (int i=0; i<UNALIGN_OFF; i++) { | |
363 errn += verify("test_cp_unalndst: a1", i, a1.get(i), -1); | |
364 } | |
365 for (int i=UNALIGN_OFF; i<ARRLEN; i++) { | |
366 errn += verify("test_cp_unalndst: a1", i, a1.get(i), 123); | |
367 } | |
368 test_vi(a2, -123, 123); | |
369 test_cp_unalnsrc(a1, a2); | |
370 for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) { | |
371 errn += verify("test_cp_unalnsrc: a1", i, a1.get(i), -123); | |
372 } | |
373 for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) { | |
374 errn += verify("test_cp_unalnsrc: a1", i, a1.get(i), 123); | |
375 } | |
376 for (int i=0; i<ARRLEN; i++) { | |
377 a1.set(i, -1); | |
378 a2.set(i, -1); | |
379 } | |
380 test_2ci_unaln(a1, a2); | |
381 for (int i=0; i<UNALIGN_OFF; i++) { | |
382 errn += verify("test_2ci_unaln: a1", i, a1.get(i), -1); | |
383 } | |
384 for (int i=UNALIGN_OFF; i<ARRLEN; i++) { | |
385 errn += verify("test_2ci_unaln: a1", i, a1.get(i), -123); | |
386 } | |
387 for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) { | |
388 errn += verify("test_2ci_unaln: a2", i, a2.get(i), -103); | |
389 } | |
390 for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) { | |
391 errn += verify("test_2ci_unaln: a2", i, a2.get(i), -1); | |
392 } | |
393 for (int i=0; i<ARRLEN; i++) { | |
394 a1.set(i, -1); | |
395 a2.set(i, -1); | |
396 } | |
397 test_2vi_unaln(a1, a2, 123, 103); | |
398 for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) { | |
399 errn += verify("test_2vi_unaln: a1", i, a1.get(i), 123); | |
400 } | |
401 for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) { | |
402 errn += verify("test_2vi_unaln: a1", i, a1.get(i), -1); | |
403 } | |
404 for (int i=0; i<UNALIGN_OFF; i++) { | |
405 errn += verify("test_2vi_unaln: a2", i, a2.get(i), -1); | |
406 } | |
407 for (int i=UNALIGN_OFF; i<ARRLEN; i++) { | |
408 errn += verify("test_2vi_unaln: a2", i, a2.get(i), 103); | |
409 } | |
410 | |
411 // Reset for aligned overlap initialization | |
412 for (int i=0; i<ALIGN_OFF; i++) { | |
413 a1.set(i, i); | |
414 } | |
415 for (int i=ALIGN_OFF; i<ARRLEN; i++) { | |
416 a1.set(i, -1); | |
417 } | |
418 test_cp_alndst(a1, a1); | |
419 for (int i=0; i<ARRLEN; i++) { | |
420 int v = i%ALIGN_OFF; | |
421 errn += verify("test_cp_alndst_overlap: a1", i, a1.get(i), v); | |
422 } | |
423 for (int i=0; i<ALIGN_OFF; i++) { | |
424 a1.set((i+ALIGN_OFF), -1); | |
425 } | |
426 test_cp_alnsrc(a1, a1); | |
427 for (int i=0; i<ALIGN_OFF; i++) { | |
428 errn += verify("test_cp_alnsrc_overlap: a1", i, a1.get(i), -1); | |
429 } | |
430 for (int i=ALIGN_OFF; i<ARRLEN; i++) { | |
431 int v = i%ALIGN_OFF; | |
432 errn += verify("test_cp_alnsrc_overlap: a1", i, a1.get(i), v); | |
433 } | |
434 for (int i=0; i<ARRLEN; i++) { | |
435 a1.set(i, -1); | |
436 } | |
437 test_2ci_aln(a1, a1); | |
438 for (int i=0; i<ARRLEN-ALIGN_OFF; i++) { | |
439 errn += verify("test_2ci_aln_overlap: a1", i, a1.get(i), -103); | |
440 } | |
441 for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) { | |
442 errn += verify("test_2ci_aln_overlap: a1", i, a1.get(i), -123); | |
443 } | |
444 for (int i=0; i<ARRLEN; i++) { | |
445 a1.set(i, -1); | |
446 } | |
447 test_2vi_aln(a1, a1, 123, 103); | |
448 for (int i=0; i<ARRLEN-ALIGN_OFF; i++) { | |
449 errn += verify("test_2vi_aln_overlap: a1", i, a1.get(i), 123); | |
450 } | |
451 for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) { | |
452 errn += verify("test_2vi_aln_overlap: a1", i, a1.get(i), 103); | |
453 } | |
454 | |
455 // Reset for unaligned overlap initialization | |
456 for (int i=0; i<UNALIGN_OFF; i++) { | |
457 a1.set(i, i); | |
458 } | |
459 for (int i=UNALIGN_OFF; i<ARRLEN; i++) { | |
460 a1.set(i, -1); | |
461 } | |
462 test_cp_unalndst(a1, a1); | |
463 for (int i=0; i<ARRLEN; i++) { | |
464 int v = i%UNALIGN_OFF; | |
465 errn += verify("test_cp_unalndst_overlap: a1", i, a1.get(i), v); | |
466 } | |
467 for (int i=0; i<UNALIGN_OFF; i++) { | |
468 a1.set((i+UNALIGN_OFF), -1); | |
469 } | |
470 test_cp_unalnsrc(a1, a1); | |
471 for (int i=0; i<UNALIGN_OFF; i++) { | |
472 errn += verify("test_cp_unalnsrc_overlap: a1", i, a1.get(i), -1); | |
473 } | |
474 for (int i=UNALIGN_OFF; i<ARRLEN; i++) { | |
475 int v = i%UNALIGN_OFF; | |
476 errn += verify("test_cp_unalnsrc_overlap: a1", i, a1.get(i), v); | |
477 } | |
478 for (int i=0; i<ARRLEN; i++) { | |
479 a1.set(i, -1); | |
480 } | |
481 test_2ci_unaln(a1, a1); | |
482 for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) { | |
483 errn += verify("test_2ci_unaln_overlap: a1", i, a1.get(i), -103); | |
484 } | |
485 for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) { | |
486 errn += verify("test_2ci_unaln_overlap: a1", i, a1.get(i), -123); | |
487 } | |
488 for (int i=0; i<ARRLEN; i++) { | |
489 a1.set(i, -1); | |
490 } | |
491 test_2vi_unaln(a1, a1, 123, 103); | |
492 for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) { | |
493 errn += verify("test_2vi_unaln_overlap: a1", i, a1.get(i), 123); | |
494 } | |
495 for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) { | |
496 errn += verify("test_2vi_unaln_overlap: a1", i, a1.get(i), 103); | |
497 } | |
498 | |
499 } | |
500 | |
501 if (errn > 0 || test_only) | |
502 return errn; | |
503 | |
504 // Initialize | |
505 for (int i=0; i<ARRLEN; i++) { | |
506 a1.set(i, -1); | |
507 a2.set(i, -1); | |
508 } | |
509 System.out.println("Time"); | |
510 long start, end; | |
511 start = System.currentTimeMillis(); | |
512 for (int i=0; i<ITERS; i++) { | |
513 test_ci(a1); | |
514 } | |
515 end = System.currentTimeMillis(); | |
516 System.out.println("test_ci: " + (end - start)); | |
517 start = System.currentTimeMillis(); | |
518 for (int i=0; i<ITERS; i++) { | |
519 test_vi(a2, 123, -1); | |
520 } | |
521 end = System.currentTimeMillis(); | |
522 System.out.println("test_vi: " + (end - start)); | |
523 start = System.currentTimeMillis(); | |
524 for (int i=0; i<ITERS; i++) { | |
525 test_cp(a1, a2); | |
526 } | |
527 end = System.currentTimeMillis(); | |
528 System.out.println("test_cp: " + (end - start)); | |
529 start = System.currentTimeMillis(); | |
530 for (int i=0; i<ITERS; i++) { | |
531 test_2ci(a1, a2); | |
532 } | |
533 end = System.currentTimeMillis(); | |
534 System.out.println("test_2ci: " + (end - start)); | |
535 start = System.currentTimeMillis(); | |
536 for (int i=0; i<ITERS; i++) { | |
537 test_2vi(a1, a2, 123, 103); | |
538 } | |
539 end = System.currentTimeMillis(); | |
540 System.out.println("test_2vi: " + (end - start)); | |
541 | |
542 start = System.currentTimeMillis(); | |
543 for (int i=0; i<ITERS; i++) { | |
544 test_ci_neg(a1, 123); | |
545 } | |
546 end = System.currentTimeMillis(); | |
547 System.out.println("test_ci_neg: " + (end - start)); | |
548 start = System.currentTimeMillis(); | |
549 for (int i=0; i<ITERS; i++) { | |
550 test_vi_neg(a2, 123, 103); | |
551 } | |
552 end = System.currentTimeMillis(); | |
553 System.out.println("test_vi_neg: " + (end - start)); | |
554 start = System.currentTimeMillis(); | |
555 for (int i=0; i<ITERS; i++) { | |
556 test_cp_neg(a1, a2); | |
557 } | |
558 end = System.currentTimeMillis(); | |
559 System.out.println("test_cp_neg: " + (end - start)); | |
560 start = System.currentTimeMillis(); | |
561 for (int i=0; i<ITERS; i++) { | |
562 test_2ci_neg(a1, a2); | |
563 } | |
564 end = System.currentTimeMillis(); | |
565 System.out.println("test_2ci_neg: " + (end - start)); | |
566 start = System.currentTimeMillis(); | |
567 for (int i=0; i<ITERS; i++) { | |
568 test_2vi_neg(a1, a2, 123, 103); | |
569 } | |
570 end = System.currentTimeMillis(); | |
571 System.out.println("test_2vi_neg: " + (end - start)); | |
572 | |
573 start = System.currentTimeMillis(); | |
574 for (int i=0; i<ITERS; i++) { | |
575 test_ci_oppos(a1, 123); | |
576 } | |
577 end = System.currentTimeMillis(); | |
578 System.out.println("test_ci_oppos: " + (end - start)); | |
579 start = System.currentTimeMillis(); | |
580 for (int i=0; i<ITERS; i++) { | |
581 test_vi_oppos(a2, 123, 103); | |
582 } | |
583 end = System.currentTimeMillis(); | |
584 System.out.println("test_vi_oppos: " + (end - start)); | |
585 start = System.currentTimeMillis(); | |
586 for (int i=0; i<ITERS; i++) { | |
587 test_cp_oppos(a1, a2); | |
588 } | |
589 end = System.currentTimeMillis(); | |
590 System.out.println("test_cp_oppos: " + (end - start)); | |
591 start = System.currentTimeMillis(); | |
592 for (int i=0; i<ITERS; i++) { | |
593 test_2ci_oppos(a1, a2); | |
594 } | |
595 end = System.currentTimeMillis(); | |
596 System.out.println("test_2ci_oppos: " + (end - start)); | |
597 start = System.currentTimeMillis(); | |
598 for (int i=0; i<ITERS; i++) { | |
599 test_2vi_oppos(a1, a2, 123, 103); | |
600 } | |
601 end = System.currentTimeMillis(); | |
602 System.out.println("test_2vi_oppos: " + (end - start)); | |
603 | |
604 start = System.currentTimeMillis(); | |
605 for (int i=0; i<ITERS; i++) { | |
606 test_ci_off(a1, 123); | |
607 } | |
608 end = System.currentTimeMillis(); | |
609 System.out.println("test_ci_off: " + (end - start)); | |
610 start = System.currentTimeMillis(); | |
611 for (int i=0; i<ITERS; i++) { | |
612 test_vi_off(a2, 123, 103); | |
613 } | |
614 end = System.currentTimeMillis(); | |
615 System.out.println("test_vi_off: " + (end - start)); | |
616 start = System.currentTimeMillis(); | |
617 for (int i=0; i<ITERS; i++) { | |
618 test_cp_off(a1, a2); | |
619 } | |
620 end = System.currentTimeMillis(); | |
621 System.out.println("test_cp_off: " + (end - start)); | |
622 start = System.currentTimeMillis(); | |
623 for (int i=0; i<ITERS; i++) { | |
624 test_2ci_off(a1, a2); | |
625 } | |
626 end = System.currentTimeMillis(); | |
627 System.out.println("test_2ci_off: " + (end - start)); | |
628 start = System.currentTimeMillis(); | |
629 for (int i=0; i<ITERS; i++) { | |
630 test_2vi_off(a1, a2, 123, 103); | |
631 } | |
632 end = System.currentTimeMillis(); | |
633 System.out.println("test_2vi_off: " + (end - start)); | |
634 | |
635 start = System.currentTimeMillis(); | |
636 for (int i=0; i<ITERS; i++) { | |
637 test_ci_inv(a1, OFFSET, 123); | |
638 } | |
639 end = System.currentTimeMillis(); | |
640 System.out.println("test_ci_inv: " + (end - start)); | |
641 start = System.currentTimeMillis(); | |
642 for (int i=0; i<ITERS; i++) { | |
643 test_vi_inv(a2, 123, OFFSET, 103); | |
644 } | |
645 end = System.currentTimeMillis(); | |
646 System.out.println("test_vi_inv: " + (end - start)); | |
647 start = System.currentTimeMillis(); | |
648 for (int i=0; i<ITERS; i++) { | |
649 test_cp_inv(a1, a2, OFFSET); | |
650 } | |
651 end = System.currentTimeMillis(); | |
652 System.out.println("test_cp_inv: " + (end - start)); | |
653 start = System.currentTimeMillis(); | |
654 for (int i=0; i<ITERS; i++) { | |
655 test_2ci_inv(a1, a2, OFFSET); | |
656 } | |
657 end = System.currentTimeMillis(); | |
658 System.out.println("test_2ci_inv: " + (end - start)); | |
659 start = System.currentTimeMillis(); | |
660 for (int i=0; i<ITERS; i++) { | |
661 test_2vi_inv(a1, a2, 123, 103, OFFSET); | |
662 } | |
663 end = System.currentTimeMillis(); | |
664 System.out.println("test_2vi_inv: " + (end - start)); | |
665 | |
666 start = System.currentTimeMillis(); | |
667 for (int i=0; i<ITERS; i++) { | |
668 test_ci_scl(a1, 123); | |
669 } | |
670 end = System.currentTimeMillis(); | |
671 System.out.println("test_ci_scl: " + (end - start)); | |
672 start = System.currentTimeMillis(); | |
673 for (int i=0; i<ITERS; i++) { | |
674 test_vi_scl(a2, 123, 103); | |
675 } | |
676 end = System.currentTimeMillis(); | |
677 System.out.println("test_vi_scl: " + (end - start)); | |
678 start = System.currentTimeMillis(); | |
679 for (int i=0; i<ITERS; i++) { | |
680 test_cp_scl(a1, a2); | |
681 } | |
682 end = System.currentTimeMillis(); | |
683 System.out.println("test_cp_scl: " + (end - start)); | |
684 start = System.currentTimeMillis(); | |
685 for (int i=0; i<ITERS; i++) { | |
686 test_2ci_scl(a1, a2); | |
687 } | |
688 end = System.currentTimeMillis(); | |
689 System.out.println("test_2ci_scl: " + (end - start)); | |
690 start = System.currentTimeMillis(); | |
691 for (int i=0; i<ITERS; i++) { | |
692 test_2vi_scl(a1, a2, 123, 103); | |
693 } | |
694 end = System.currentTimeMillis(); | |
695 System.out.println("test_2vi_scl: " + (end - start)); | |
696 | |
697 start = System.currentTimeMillis(); | |
698 for (int i=0; i<ITERS; i++) { | |
699 test_cp_alndst(a1, a2); | |
700 } | |
701 end = System.currentTimeMillis(); | |
702 System.out.println("test_cp_alndst: " + (end - start)); | |
703 start = System.currentTimeMillis(); | |
704 for (int i=0; i<ITERS; i++) { | |
705 test_cp_alnsrc(a1, a2); | |
706 } | |
707 end = System.currentTimeMillis(); | |
708 System.out.println("test_cp_alnsrc: " + (end - start)); | |
709 start = System.currentTimeMillis(); | |
710 for (int i=0; i<ITERS; i++) { | |
711 test_2ci_aln(a1, a2); | |
712 } | |
713 end = System.currentTimeMillis(); | |
714 System.out.println("test_2ci_aln: " + (end - start)); | |
715 start = System.currentTimeMillis(); | |
716 for (int i=0; i<ITERS; i++) { | |
717 test_2vi_aln(a1, a2, 123, 103); | |
718 } | |
719 end = System.currentTimeMillis(); | |
720 System.out.println("test_2vi_aln: " + (end - start)); | |
721 | |
722 start = System.currentTimeMillis(); | |
723 for (int i=0; i<ITERS; i++) { | |
724 test_cp_unalndst(a1, a2); | |
725 } | |
726 end = System.currentTimeMillis(); | |
727 System.out.println("test_cp_unalndst: " + (end - start)); | |
728 start = System.currentTimeMillis(); | |
729 for (int i=0; i<ITERS; i++) { | |
730 test_cp_unalnsrc(a1, a2); | |
731 } | |
732 end = System.currentTimeMillis(); | |
733 System.out.println("test_cp_unalnsrc: " + (end - start)); | |
734 start = System.currentTimeMillis(); | |
735 for (int i=0; i<ITERS; i++) { | |
736 test_2ci_unaln(a1, a2); | |
737 } | |
738 end = System.currentTimeMillis(); | |
739 System.out.println("test_2ci_unaln: " + (end - start)); | |
740 start = System.currentTimeMillis(); | |
741 for (int i=0; i<ITERS; i++) { | |
742 test_2vi_unaln(a1, a2, 123, 103); | |
743 } | |
744 end = System.currentTimeMillis(); | |
745 System.out.println("test_2vi_unaln: " + (end - start)); | |
746 | |
747 return errn; | |
748 } | |
749 | |
750 static void test_ci(AtomicIntegerArray a) { | |
751 for (int i = 0; i < ARRLEN; i+=1) { | |
752 a.compareAndSet(i, -1, -123); | |
753 } | |
754 } | |
755 static void test_vi(AtomicIntegerArray a, int b, int old) { | |
756 for (int i = 0; i < ARRLEN; i+=1) { | |
757 a.compareAndSet(i, old, b); | |
758 } | |
759 } | |
760 static void test_cp(AtomicIntegerArray a, AtomicIntegerArray b) { | |
761 for (int i = 0; i < ARRLEN; i+=1) { | |
762 a.compareAndSet(i, -123, b.get(i)); | |
763 } | |
764 } | |
765 static void test_2ci(AtomicIntegerArray a, AtomicIntegerArray b) { | |
766 for (int i = 0; i < ARRLEN; i+=1) { | |
767 a.compareAndSet(i, 123, -123); | |
768 b.compareAndSet(i, 123, -103); | |
769 } | |
770 } | |
771 static void test_2vi(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) { | |
772 for (int i = 0; i < ARRLEN; i+=1) { | |
773 a.compareAndSet(i, -123, c); | |
774 b.compareAndSet(i, -103, d); | |
775 } | |
776 } | |
777 static void test_ci_neg(AtomicIntegerArray a, int old) { | |
778 for (int i = ARRLEN-1; i >= 0; i-=1) { | |
779 a.compareAndSet(i, old, -123); | |
780 } | |
781 } | |
782 static void test_vi_neg(AtomicIntegerArray a, int b, int old) { | |
783 for (int i = ARRLEN-1; i >= 0; i-=1) { | |
784 a.compareAndSet(i, old, b); | |
785 } | |
786 } | |
787 static void test_cp_neg(AtomicIntegerArray a, AtomicIntegerArray b) { | |
788 for (int i = ARRLEN-1; i >= 0; i-=1) { | |
789 a.compareAndSet(i, -123, b.get(i)); | |
790 } | |
791 } | |
792 static void test_2ci_neg(AtomicIntegerArray a, AtomicIntegerArray b) { | |
793 for (int i = ARRLEN-1; i >= 0; i-=1) { | |
794 a.compareAndSet(i, 123, -123); | |
795 b.compareAndSet(i, 123, -103); | |
796 } | |
797 } | |
798 static void test_2vi_neg(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) { | |
799 for (int i = ARRLEN-1; i >= 0; i-=1) { | |
800 a.compareAndSet(i, -123, c); | |
801 b.compareAndSet(i, -103, d); | |
802 } | |
803 } | |
804 static void test_ci_oppos(AtomicIntegerArray a, int old) { | |
805 int limit = ARRLEN-1; | |
806 for (int i = 0; i < ARRLEN; i+=1) { | |
807 a.compareAndSet((limit-i), old, -123); | |
808 } | |
809 } | |
810 static void test_vi_oppos(AtomicIntegerArray a, int b, int old) { | |
811 int limit = ARRLEN-1; | |
812 for (int i = limit; i >= 0; i-=1) { | |
813 a.compareAndSet((limit-i), old, b); | |
814 } | |
815 } | |
816 static void test_cp_oppos(AtomicIntegerArray a, AtomicIntegerArray b) { | |
817 int limit = ARRLEN-1; | |
818 for (int i = 0; i < ARRLEN; i+=1) { | |
819 a.compareAndSet(i, -123, b.get(limit-i)); | |
820 } | |
821 } | |
822 static void test_2ci_oppos(AtomicIntegerArray a, AtomicIntegerArray b) { | |
823 int limit = ARRLEN-1; | |
824 for (int i = 0; i < ARRLEN; i+=1) { | |
825 a.compareAndSet((limit-i), 123, -123); | |
826 b.compareAndSet(i, 123, -103); | |
827 } | |
828 } | |
829 static void test_2vi_oppos(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) { | |
830 int limit = ARRLEN-1; | |
831 for (int i = limit; i >= 0; i-=1) { | |
832 a.compareAndSet(i, -123, c); | |
833 b.compareAndSet((limit-i), -103, d); | |
834 } | |
835 } | |
836 static void test_ci_off(AtomicIntegerArray a, int old) { | |
837 for (int i = 0; i < ARRLEN-OFFSET; i+=1) { | |
838 a.compareAndSet((i+OFFSET), old, -123); | |
839 } | |
840 } | |
841 static void test_vi_off(AtomicIntegerArray a, int b, int old) { | |
842 for (int i = 0; i < ARRLEN-OFFSET; i+=1) { | |
843 a.compareAndSet((i+OFFSET), old, b); | |
844 } | |
845 } | |
846 static void test_cp_off(AtomicIntegerArray a, AtomicIntegerArray b) { | |
847 for (int i = 0; i < ARRLEN-OFFSET; i+=1) { | |
848 a.compareAndSet((i+OFFSET), -123, b.get(i+OFFSET)); | |
849 } | |
850 } | |
851 static void test_2ci_off(AtomicIntegerArray a, AtomicIntegerArray b) { | |
852 for (int i = 0; i < ARRLEN-OFFSET; i+=1) { | |
853 a.compareAndSet((i+OFFSET), 123, -123); | |
854 b.compareAndSet((i+OFFSET), 123, -103); | |
855 } | |
856 } | |
857 static void test_2vi_off(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) { | |
858 for (int i = 0; i < ARRLEN-OFFSET; i+=1) { | |
859 a.compareAndSet((i+OFFSET), -123, c); | |
860 b.compareAndSet((i+OFFSET), -103, d); | |
861 } | |
862 } | |
863 static void test_ci_inv(AtomicIntegerArray a, int k, int old) { | |
864 for (int i = 0; i < ARRLEN-k; i+=1) { | |
865 a.compareAndSet((i+k), old, -123); | |
866 } | |
867 } | |
868 static void test_vi_inv(AtomicIntegerArray a, int b, int k, int old) { | |
869 for (int i = 0; i < ARRLEN-k; i+=1) { | |
870 a.compareAndSet((i+k), old, b); | |
871 } | |
872 } | |
873 static void test_cp_inv(AtomicIntegerArray a, AtomicIntegerArray b, int k) { | |
874 for (int i = 0; i < ARRLEN-k; i+=1) { | |
875 a.compareAndSet((i+k), -123, b.get(i+k)); | |
876 } | |
877 } | |
878 static void test_2ci_inv(AtomicIntegerArray a, AtomicIntegerArray b, int k) { | |
879 for (int i = 0; i < ARRLEN-k; i+=1) { | |
880 a.compareAndSet((i+k), 123, -123); | |
881 b.compareAndSet((i+k), 123, -103); | |
882 } | |
883 } | |
884 static void test_2vi_inv(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d, int k) { | |
885 for (int i = 0; i < ARRLEN-k; i+=1) { | |
886 a.compareAndSet((i+k), -123, c); | |
887 b.compareAndSet((i+k), -103, d); | |
888 } | |
889 } | |
890 static void test_ci_scl(AtomicIntegerArray a, int old) { | |
891 for (int i = 0; i*SCALE < ARRLEN; i+=1) { | |
892 a.compareAndSet((i*SCALE), old, -123); | |
893 } | |
894 } | |
895 static void test_vi_scl(AtomicIntegerArray a, int b, int old) { | |
896 for (int i = 0; i*SCALE < ARRLEN; i+=1) { | |
897 a.compareAndSet((i*SCALE), old, b); | |
898 } | |
899 } | |
900 static void test_cp_scl(AtomicIntegerArray a, AtomicIntegerArray b) { | |
901 for (int i = 0; i*SCALE < ARRLEN; i+=1) { | |
902 a.compareAndSet((i*SCALE), -123, b.get(i*SCALE)); | |
903 } | |
904 } | |
905 static void test_2ci_scl(AtomicIntegerArray a, AtomicIntegerArray b) { | |
906 for (int i = 0; i*SCALE < ARRLEN; i+=1) { | |
907 a.compareAndSet((i*SCALE), 123, -123); | |
908 b.compareAndSet((i*SCALE), 123, -103); | |
909 } | |
910 } | |
911 static void test_2vi_scl(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) { | |
912 for (int i = 0; i*SCALE < ARRLEN; i+=1) { | |
913 a.compareAndSet((i*SCALE), -123, c); | |
914 b.compareAndSet((i*SCALE), -103, d); | |
915 } | |
916 } | |
917 static void test_cp_alndst(AtomicIntegerArray a, AtomicIntegerArray b) { | |
918 for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) { | |
919 a.compareAndSet((i+ALIGN_OFF), -1, b.get(i)); | |
920 } | |
921 } | |
922 static void test_cp_alnsrc(AtomicIntegerArray a, AtomicIntegerArray b) { | |
923 for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) { | |
924 a.getAndSet(i, b.get(i+ALIGN_OFF)); | |
925 } | |
926 } | |
927 static void test_2ci_aln(AtomicIntegerArray a, AtomicIntegerArray b) { | |
928 for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) { | |
929 a.compareAndSet((i+ALIGN_OFF), -1, -123); | |
930 b.getAndSet(i, -103); | |
931 } | |
932 } | |
933 static void test_2vi_aln(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) { | |
934 for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) { | |
935 a.getAndSet(i, c); | |
936 b.getAndSet((i+ALIGN_OFF), d); | |
937 } | |
938 } | |
939 static void test_cp_unalndst(AtomicIntegerArray a, AtomicIntegerArray b) { | |
940 for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) { | |
941 a.compareAndSet((i+UNALIGN_OFF), -1, b.get(i)); | |
942 } | |
943 } | |
944 static void test_cp_unalnsrc(AtomicIntegerArray a, AtomicIntegerArray b) { | |
945 for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) { | |
946 a.getAndSet(i, b.get(i+UNALIGN_OFF)); | |
947 } | |
948 } | |
949 static void test_2ci_unaln(AtomicIntegerArray a, AtomicIntegerArray b) { | |
950 for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) { | |
951 a.compareAndSet((i+UNALIGN_OFF), -1, -123); | |
952 b.getAndSet(i, -103); | |
953 } | |
954 } | |
955 static void test_2vi_unaln(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) { | |
956 for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) { | |
957 a.getAndSet(i, c); | |
958 b.getAndSet((i+UNALIGN_OFF), d); | |
959 } | |
960 } | |
961 | |
962 static int verify(String text, int i, int elem, int val) { | |
963 if (elem != val) { | |
964 System.err.println(text + "[" + i + "] = " + elem + " != " + val); | |
965 return 1; | |
966 } | |
967 return 0; | |
968 } | |
969 } |