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