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