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