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