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