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