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