Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/test/compiler/6340864/TestIntVect.java
32285 views
/*1* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324/**25* @test26* @bug 634086427* @summary Implement vectorization optimizations in hotspot-server28*29* @run main/othervm/timeout=400 -Xbatch -Xmx64m TestIntVect30*/3132public class TestIntVect {33private static final int ARRLEN = 997;34private static final int ITERS = 11000;35private static final int ADD_INIT = Integer.MAX_VALUE-500;36private static final int BIT_MASK = 0xEC80F731;37private static final int VALUE = 15;38private static final int SHIFT = 32;3940public static void main(String args[]) {41System.out.println("Testing Integer vectors");42int errn = test();43if (errn > 0) {44System.err.println("FAILED: " + errn + " errors");45System.exit(97);46}47System.out.println("PASSED");48}4950static int test() {51int[] a0 = new int[ARRLEN];52int[] a1 = new int[ARRLEN];53int[] a2 = new int[ARRLEN];54int[] a3 = new int[ARRLEN];55int[] a4 = new int[ARRLEN];56long[] p2 = new long[ARRLEN/2];57// Initialize58int gold_sum = 0;59for (int i=0; i<ARRLEN; i++) {60int val = (int)(ADD_INIT+i);61gold_sum += val;62a1[i] = val;63a2[i] = (int)VALUE;64a3[i] = (int)-VALUE;65a4[i] = (int)BIT_MASK;66}67System.out.println("Warmup");68for (int i=0; i<ITERS; i++) {69test_sum(a1);70test_addc(a0, a1);71test_addv(a0, a1, (int)VALUE);72test_adda(a0, a1, a2);73test_subc(a0, a1);74test_subv(a0, a1, (int)VALUE);75test_suba(a0, a1, a2);7677test_mulc(a0, a1);78test_mulv(a0, a1, (int)VALUE);79test_mula(a0, a1, a2);80test_divc(a0, a1);81test_divv(a0, a1, (int)VALUE);82test_diva(a0, a1, a2);83test_mulc_n(a0, a1);84test_mulv(a0, a1, (int)-VALUE);85test_mula(a0, a1, a3);86test_divc_n(a0, a1);87test_divv(a0, a1, (int)-VALUE);88test_diva(a0, a1, a3);8990test_andc(a0, a1);91test_andv(a0, a1, (int)BIT_MASK);92test_anda(a0, a1, a4);93test_orc(a0, a1);94test_orv(a0, a1, (int)BIT_MASK);95test_ora(a0, a1, a4);96test_xorc(a0, a1);97test_xorv(a0, a1, (int)BIT_MASK);98test_xora(a0, a1, a4);99100test_sllc(a0, a1);101test_sllv(a0, a1, VALUE);102test_srlc(a0, a1);103test_srlv(a0, a1, VALUE);104test_srac(a0, a1);105test_srav(a0, a1, VALUE);106107test_sllc_n(a0, a1);108test_sllv(a0, a1, -VALUE);109test_srlc_n(a0, a1);110test_srlv(a0, a1, -VALUE);111test_srac_n(a0, a1);112test_srav(a0, a1, -VALUE);113114test_sllc_o(a0, a1);115test_sllv(a0, a1, SHIFT);116test_srlc_o(a0, a1);117test_srlv(a0, a1, SHIFT);118test_srac_o(a0, a1);119test_srav(a0, a1, SHIFT);120121test_sllc_on(a0, a1);122test_sllv(a0, a1, -SHIFT);123test_srlc_on(a0, a1);124test_srlv(a0, a1, -SHIFT);125test_srac_on(a0, a1);126test_srav(a0, a1, -SHIFT);127128test_sllc_add(a0, a1);129test_sllv_add(a0, a1, ADD_INIT);130test_srlc_add(a0, a1);131test_srlv_add(a0, a1, ADD_INIT);132test_srac_add(a0, a1);133test_srav_add(a0, a1, ADD_INIT);134135test_sllc_and(a0, a1);136test_sllv_and(a0, a1, BIT_MASK);137test_srlc_and(a0, a1);138test_srlv_and(a0, a1, BIT_MASK);139test_srac_and(a0, a1);140test_srav_and(a0, a1, BIT_MASK);141142test_pack2(p2, a1);143test_unpack2(a0, p2);144test_pack2_swap(p2, a1);145test_unpack2_swap(a0, p2);146}147// Test and verify results148System.out.println("Verification");149int errn = 0;150{151int sum = test_sum(a1);152if (sum != gold_sum) {153System.err.println("test_sum: " + sum + " != " + gold_sum);154errn++;155}156157test_addc(a0, a1);158for (int i=0; i<ARRLEN; i++) {159errn += verify("test_addc: ", i, a0[i], (int)((int)(ADD_INIT+i)+VALUE));160}161test_addv(a0, a1, (int)VALUE);162for (int i=0; i<ARRLEN; i++) {163errn += verify("test_addv: ", i, a0[i], (int)((int)(ADD_INIT+i)+VALUE));164}165test_adda(a0, a1, a2);166for (int i=0; i<ARRLEN; i++) {167errn += verify("test_adda: ", i, a0[i], (int)((int)(ADD_INIT+i)+VALUE));168}169170test_subc(a0, a1);171for (int i=0; i<ARRLEN; i++) {172errn += verify("test_subc: ", i, a0[i], (int)((int)(ADD_INIT+i)-VALUE));173}174test_subv(a0, a1, (int)VALUE);175for (int i=0; i<ARRLEN; i++) {176errn += verify("test_subv: ", i, a0[i], (int)((int)(ADD_INIT+i)-VALUE));177}178test_suba(a0, a1, a2);179for (int i=0; i<ARRLEN; i++) {180errn += verify("test_suba: ", i, a0[i], (int)((int)(ADD_INIT+i)-VALUE));181}182183test_mulc(a0, a1);184for (int i=0; i<ARRLEN; i++) {185errn += verify("test_mulc: ", i, a0[i], (int)((int)(ADD_INIT+i)*VALUE));186}187test_mulv(a0, a1, (int)VALUE);188for (int i=0; i<ARRLEN; i++) {189errn += verify("test_mulv: ", i, a0[i], (int)((int)(ADD_INIT+i)*VALUE));190}191test_mula(a0, a1, a2);192for (int i=0; i<ARRLEN; i++) {193errn += verify("test_mula: ", i, a0[i], (int)((int)(ADD_INIT+i)*VALUE));194}195196test_divc(a0, a1);197for (int i=0; i<ARRLEN; i++) {198errn += verify("test_divc: ", i, a0[i], (int)((int)(ADD_INIT+i)/VALUE));199}200test_divv(a0, a1, (int)VALUE);201for (int i=0; i<ARRLEN; i++) {202errn += verify("test_divv: ", i, a0[i], (int)((int)(ADD_INIT+i)/VALUE));203}204test_diva(a0, a1, a2);205for (int i=0; i<ARRLEN; i++) {206errn += verify("test_diva: ", i, a0[i], (int)((int)(ADD_INIT+i)/VALUE));207}208209test_mulc_n(a0, a1);210for (int i=0; i<ARRLEN; i++) {211errn += verify("test_mulc_n: ", i, a0[i], (int)((int)(ADD_INIT+i)*(-VALUE)));212}213test_mulv(a0, a1, (int)-VALUE);214for (int i=0; i<ARRLEN; i++) {215errn += verify("test_mulv_n: ", i, a0[i], (int)((int)(ADD_INIT+i)*(-VALUE)));216}217test_mula(a0, a1, a3);218for (int i=0; i<ARRLEN; i++) {219errn += verify("test_mula_n: ", i, a0[i], (int)((int)(ADD_INIT+i)*(-VALUE)));220}221222test_divc_n(a0, a1);223for (int i=0; i<ARRLEN; i++) {224errn += verify("test_divc_n: ", i, a0[i], (int)((int)(ADD_INIT+i)/(-VALUE)));225}226test_divv(a0, a1, (int)-VALUE);227for (int i=0; i<ARRLEN; i++) {228errn += verify("test_divv_n: ", i, a0[i], (int)((int)(ADD_INIT+i)/(-VALUE)));229}230test_diva(a0, a1, a3);231for (int i=0; i<ARRLEN; i++) {232errn += verify("test_diva_n: ", i, a0[i], (int)((int)(ADD_INIT+i)/(-VALUE)));233}234235test_andc(a0, a1);236for (int i=0; i<ARRLEN; i++) {237errn += verify("test_andc: ", i, a0[i], (int)((int)(ADD_INIT+i)&BIT_MASK));238}239test_andv(a0, a1, (int)BIT_MASK);240for (int i=0; i<ARRLEN; i++) {241errn += verify("test_andv: ", i, a0[i], (int)((int)(ADD_INIT+i)&BIT_MASK));242}243test_anda(a0, a1, a4);244for (int i=0; i<ARRLEN; i++) {245errn += verify("test_anda: ", i, a0[i], (int)((int)(ADD_INIT+i)&BIT_MASK));246}247248test_orc(a0, a1);249for (int i=0; i<ARRLEN; i++) {250errn += verify("test_orc: ", i, a0[i], (int)((int)(ADD_INIT+i)|BIT_MASK));251}252test_orv(a0, a1, (int)BIT_MASK);253for (int i=0; i<ARRLEN; i++) {254errn += verify("test_orv: ", i, a0[i], (int)((int)(ADD_INIT+i)|BIT_MASK));255}256test_ora(a0, a1, a4);257for (int i=0; i<ARRLEN; i++) {258errn += verify("test_ora: ", i, a0[i], (int)((int)(ADD_INIT+i)|BIT_MASK));259}260261test_xorc(a0, a1);262for (int i=0; i<ARRLEN; i++) {263errn += verify("test_xorc: ", i, a0[i], (int)((int)(ADD_INIT+i)^BIT_MASK));264}265test_xorv(a0, a1, (int)BIT_MASK);266for (int i=0; i<ARRLEN; i++) {267errn += verify("test_xorv: ", i, a0[i], (int)((int)(ADD_INIT+i)^BIT_MASK));268}269test_xora(a0, a1, a4);270for (int i=0; i<ARRLEN; i++) {271errn += verify("test_xora: ", i, a0[i], (int)((int)(ADD_INIT+i)^BIT_MASK));272}273274test_sllc(a0, a1);275for (int i=0; i<ARRLEN; i++) {276errn += verify("test_sllc: ", i, a0[i], (int)((int)(ADD_INIT+i)<<VALUE));277}278test_sllv(a0, a1, VALUE);279for (int i=0; i<ARRLEN; i++) {280errn += verify("test_sllv: ", i, a0[i], (int)((int)(ADD_INIT+i)<<VALUE));281}282283test_srlc(a0, a1);284for (int i=0; i<ARRLEN; i++) {285errn += verify("test_srlc: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>VALUE));286}287test_srlv(a0, a1, VALUE);288for (int i=0; i<ARRLEN; i++) {289errn += verify("test_srlv: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>VALUE));290}291292test_srac(a0, a1);293for (int i=0; i<ARRLEN; i++) {294errn += verify("test_srac: ", i, a0[i], (int)((int)(ADD_INIT+i)>>VALUE));295}296test_srav(a0, a1, VALUE);297for (int i=0; i<ARRLEN; i++) {298errn += verify("test_srav: ", i, a0[i], (int)((int)(ADD_INIT+i)>>VALUE));299}300301test_sllc_n(a0, a1);302for (int i=0; i<ARRLEN; i++) {303errn += verify("test_sllc_n: ", i, a0[i], (int)((int)(ADD_INIT+i)<<(-VALUE)));304}305test_sllv(a0, a1, -VALUE);306for (int i=0; i<ARRLEN; i++) {307errn += verify("test_sllv_n: ", i, a0[i], (int)((int)(ADD_INIT+i)<<(-VALUE)));308}309310test_srlc_n(a0, a1);311for (int i=0; i<ARRLEN; i++) {312errn += verify("test_srlc_n: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>(-VALUE)));313}314test_srlv(a0, a1, -VALUE);315for (int i=0; i<ARRLEN; i++) {316errn += verify("test_srlv_n: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>(-VALUE)));317}318319test_srac_n(a0, a1);320for (int i=0; i<ARRLEN; i++) {321errn += verify("test_srac_n: ", i, a0[i], (int)((int)(ADD_INIT+i)>>(-VALUE)));322}323test_srav(a0, a1, -VALUE);324for (int i=0; i<ARRLEN; i++) {325errn += verify("test_srav_n: ", i, a0[i], (int)((int)(ADD_INIT+i)>>(-VALUE)));326}327328test_sllc_o(a0, a1);329for (int i=0; i<ARRLEN; i++) {330errn += verify("test_sllc_o: ", i, a0[i], (int)((int)(ADD_INIT+i)<<SHIFT));331}332test_sllv(a0, a1, SHIFT);333for (int i=0; i<ARRLEN; i++) {334errn += verify("test_sllv_o: ", i, a0[i], (int)((int)(ADD_INIT+i)<<SHIFT));335}336337test_srlc_o(a0, a1);338for (int i=0; i<ARRLEN; i++) {339errn += verify("test_srlc_o: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>SHIFT));340}341test_srlv(a0, a1, SHIFT);342for (int i=0; i<ARRLEN; i++) {343errn += verify("test_srlv_o: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>SHIFT));344}345346test_srac_o(a0, a1);347for (int i=0; i<ARRLEN; i++) {348errn += verify("test_srac_o: ", i, a0[i], (int)((int)(ADD_INIT+i)>>SHIFT));349}350test_srav(a0, a1, SHIFT);351for (int i=0; i<ARRLEN; i++) {352errn += verify("test_srav_o: ", i, a0[i], (int)((int)(ADD_INIT+i)>>SHIFT));353}354355test_sllc_on(a0, a1);356for (int i=0; i<ARRLEN; i++) {357errn += verify("test_sllc_on: ", i, a0[i], (int)((int)(ADD_INIT+i)<<(-SHIFT)));358}359test_sllv(a0, a1, -SHIFT);360for (int i=0; i<ARRLEN; i++) {361errn += verify("test_sllv_on: ", i, a0[i], (int)((int)(ADD_INIT+i)<<(-SHIFT)));362}363364test_srlc_on(a0, a1);365for (int i=0; i<ARRLEN; i++) {366errn += verify("test_srlc_on: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>(-SHIFT)));367}368test_srlv(a0, a1, -SHIFT);369for (int i=0; i<ARRLEN; i++) {370errn += verify("test_srlv_on: ", i, a0[i], (int)((int)(ADD_INIT+i)>>>(-SHIFT)));371}372373test_srac_on(a0, a1);374for (int i=0; i<ARRLEN; i++) {375errn += verify("test_srac_on: ", i, a0[i], (int)((int)(ADD_INIT+i)>>(-SHIFT)));376}377test_srav(a0, a1, -SHIFT);378for (int i=0; i<ARRLEN; i++) {379errn += verify("test_srav_on: ", i, a0[i], (int)((int)(ADD_INIT+i)>>(-SHIFT)));380}381382test_sllc_add(a0, a1);383for (int i=0; i<ARRLEN; i++) {384errn += verify("test_sllc_add: ", i, a0[i], (int)(((int)(ADD_INIT+i) + ADD_INIT)<<VALUE));385}386test_sllv_add(a0, a1, ADD_INIT);387for (int i=0; i<ARRLEN; i++) {388errn += verify("test_sllv_add: ", i, a0[i], (int)(((int)(ADD_INIT+i) + ADD_INIT)<<VALUE));389}390391test_srlc_add(a0, a1);392for (int i=0; i<ARRLEN; i++) {393errn += verify("test_srlc_add: ", i, a0[i], (int)(((int)(ADD_INIT+i) + ADD_INIT)>>>VALUE));394}395test_srlv_add(a0, a1, ADD_INIT);396for (int i=0; i<ARRLEN; i++) {397errn += verify("test_srlv_add: ", i, a0[i], (int)(((int)(ADD_INIT+i) + ADD_INIT)>>>VALUE));398}399400test_srac_add(a0, a1);401for (int i=0; i<ARRLEN; i++) {402errn += verify("test_srac_add: ", i, a0[i], (int)(((int)(ADD_INIT+i) + ADD_INIT)>>VALUE));403}404test_srav_add(a0, a1, ADD_INIT);405for (int i=0; i<ARRLEN; i++) {406errn += verify("test_srav_add: ", i, a0[i], (int)(((int)(ADD_INIT+i) + ADD_INIT)>>VALUE));407}408409test_sllc_and(a0, a1);410for (int i=0; i<ARRLEN; i++) {411errn += verify("test_sllc_and: ", i, a0[i], (int)(((int)(ADD_INIT+i) & BIT_MASK)<<VALUE));412}413test_sllv_and(a0, a1, BIT_MASK);414for (int i=0; i<ARRLEN; i++) {415errn += verify("test_sllv_and: ", i, a0[i], (int)(((int)(ADD_INIT+i) & BIT_MASK)<<VALUE));416}417418test_srlc_and(a0, a1);419for (int i=0; i<ARRLEN; i++) {420errn += verify("test_srlc_and: ", i, a0[i], (int)(((int)(ADD_INIT+i) & BIT_MASK)>>>VALUE));421}422test_srlv_and(a0, a1, BIT_MASK);423for (int i=0; i<ARRLEN; i++) {424errn += verify("test_srlv_and: ", i, a0[i], (int)(((int)(ADD_INIT+i) & BIT_MASK)>>>VALUE));425}426427test_srac_and(a0, a1);428for (int i=0; i<ARRLEN; i++) {429errn += verify("test_srac_and: ", i, a0[i], (int)(((int)(ADD_INIT+i) & BIT_MASK)>>VALUE));430}431test_srav_and(a0, a1, BIT_MASK);432for (int i=0; i<ARRLEN; i++) {433errn += verify("test_srav_and: ", i, a0[i], (int)(((int)(ADD_INIT+i) & BIT_MASK)>>VALUE));434}435436test_pack2(p2, a1);437for (int i=0; i<ARRLEN/2; i++) {438errn += verify("test_pack2: ", i, p2[i], ((long)(ADD_INIT+2*i) & 0xFFFFFFFFl) | ((long)(ADD_INIT+2*i+1) << 32));439}440for (int i=0; i<ARRLEN; i++) {441a0[i] = -1;442}443test_unpack2(a0, p2);444for (int i=0; i<(ARRLEN&(-2)); i++) {445errn += verify("test_unpack2: ", i, a0[i], (ADD_INIT+i));446}447448test_pack2_swap(p2, a1);449for (int i=0; i<ARRLEN/2; i++) {450errn += verify("test_pack2_swap: ", i, p2[i], ((long)(ADD_INIT+2*i+1) & 0xFFFFFFFFl) | ((long)(ADD_INIT+2*i) << 32));451}452for (int i=0; i<ARRLEN; i++) {453a0[i] = -1;454}455test_unpack2_swap(a0, p2);456for (int i=0; i<(ARRLEN&(-2)); i++) {457errn += verify("test_unpack2_swap: ", i, a0[i], (ADD_INIT+i));458}459460}461462if (errn > 0)463return errn;464465System.out.println("Time");466long start, end;467468start = System.currentTimeMillis();469for (int i=0; i<ITERS; i++) {470test_sum(a1);471}472end = System.currentTimeMillis();473System.out.println("test_sum: " + (end - start));474475start = System.currentTimeMillis();476for (int i=0; i<ITERS; i++) {477test_addc(a0, a1);478}479end = System.currentTimeMillis();480System.out.println("test_addc: " + (end - start));481start = System.currentTimeMillis();482for (int i=0; i<ITERS; i++) {483test_addv(a0, a1, (int)VALUE);484}485end = System.currentTimeMillis();486System.out.println("test_addv: " + (end - start));487start = System.currentTimeMillis();488for (int i=0; i<ITERS; i++) {489test_adda(a0, a1, a2);490}491end = System.currentTimeMillis();492System.out.println("test_adda: " + (end - start));493494start = System.currentTimeMillis();495for (int i=0; i<ITERS; i++) {496test_subc(a0, a1);497}498end = System.currentTimeMillis();499System.out.println("test_subc: " + (end - start));500start = System.currentTimeMillis();501for (int i=0; i<ITERS; i++) {502test_subv(a0, a1, (int)VALUE);503}504end = System.currentTimeMillis();505System.out.println("test_subv: " + (end - start));506start = System.currentTimeMillis();507for (int i=0; i<ITERS; i++) {508test_suba(a0, a1, a2);509}510end = System.currentTimeMillis();511System.out.println("test_suba: " + (end - start));512513start = System.currentTimeMillis();514for (int i=0; i<ITERS; i++) {515test_mulc(a0, a1);516}517end = System.currentTimeMillis();518System.out.println("test_mulc: " + (end - start));519start = System.currentTimeMillis();520for (int i=0; i<ITERS; i++) {521test_mulv(a0, a1, (int)VALUE);522}523end = System.currentTimeMillis();524System.out.println("test_mulv: " + (end - start));525start = System.currentTimeMillis();526for (int i=0; i<ITERS; i++) {527test_mula(a0, a1, a2);528}529end = System.currentTimeMillis();530System.out.println("test_mula: " + (end - start));531532start = System.currentTimeMillis();533for (int i=0; i<ITERS; i++) {534test_divc(a0, a1);535}536end = System.currentTimeMillis();537System.out.println("test_divc: " + (end - start));538start = System.currentTimeMillis();539for (int i=0; i<ITERS; i++) {540test_divv(a0, a1, (int)VALUE);541}542end = System.currentTimeMillis();543System.out.println("test_divv: " + (end - start));544start = System.currentTimeMillis();545for (int i=0; i<ITERS; i++) {546test_diva(a0, a1, a2);547}548end = System.currentTimeMillis();549System.out.println("test_diva: " + (end - start));550551start = System.currentTimeMillis();552for (int i=0; i<ITERS; i++) {553test_mulc_n(a0, a1);554}555end = System.currentTimeMillis();556System.out.println("test_mulc_n: " + (end - start));557start = System.currentTimeMillis();558for (int i=0; i<ITERS; i++) {559test_mulv(a0, a1, (int)-VALUE);560}561end = System.currentTimeMillis();562System.out.println("test_mulv_n: " + (end - start));563start = System.currentTimeMillis();564for (int i=0; i<ITERS; i++) {565test_mula(a0, a1, a3);566}567end = System.currentTimeMillis();568System.out.println("test_mula_n: " + (end - start));569570start = System.currentTimeMillis();571for (int i=0; i<ITERS; i++) {572test_divc_n(a0, a1);573}574end = System.currentTimeMillis();575System.out.println("test_divc_n: " + (end - start));576start = System.currentTimeMillis();577for (int i=0; i<ITERS; i++) {578test_divv(a0, a1, (int)-VALUE);579}580end = System.currentTimeMillis();581System.out.println("test_divv_n: " + (end - start));582start = System.currentTimeMillis();583for (int i=0; i<ITERS; i++) {584test_diva(a0, a1, a3);585}586end = System.currentTimeMillis();587System.out.println("test_diva_n: " + (end - start));588589start = System.currentTimeMillis();590for (int i=0; i<ITERS; i++) {591test_andc(a0, a1);592}593end = System.currentTimeMillis();594System.out.println("test_andc: " + (end - start));595start = System.currentTimeMillis();596for (int i=0; i<ITERS; i++) {597test_andv(a0, a1, (int)BIT_MASK);598}599end = System.currentTimeMillis();600System.out.println("test_andv: " + (end - start));601start = System.currentTimeMillis();602for (int i=0; i<ITERS; i++) {603test_anda(a0, a1, a4);604}605end = System.currentTimeMillis();606System.out.println("test_anda: " + (end - start));607608start = System.currentTimeMillis();609for (int i=0; i<ITERS; i++) {610test_orc(a0, a1);611}612end = System.currentTimeMillis();613System.out.println("test_orc: " + (end - start));614start = System.currentTimeMillis();615for (int i=0; i<ITERS; i++) {616test_orv(a0, a1, (int)BIT_MASK);617}618end = System.currentTimeMillis();619System.out.println("test_orv: " + (end - start));620start = System.currentTimeMillis();621for (int i=0; i<ITERS; i++) {622test_ora(a0, a1, a4);623}624end = System.currentTimeMillis();625System.out.println("test_ora: " + (end - start));626627start = System.currentTimeMillis();628for (int i=0; i<ITERS; i++) {629test_xorc(a0, a1);630}631end = System.currentTimeMillis();632System.out.println("test_xorc: " + (end - start));633start = System.currentTimeMillis();634for (int i=0; i<ITERS; i++) {635test_xorv(a0, a1, (int)BIT_MASK);636}637end = System.currentTimeMillis();638System.out.println("test_xorv: " + (end - start));639start = System.currentTimeMillis();640for (int i=0; i<ITERS; i++) {641test_xora(a0, a1, a4);642}643end = System.currentTimeMillis();644System.out.println("test_xora: " + (end - start));645646start = System.currentTimeMillis();647for (int i=0; i<ITERS; i++) {648test_sllc(a0, a1);649}650end = System.currentTimeMillis();651System.out.println("test_sllc: " + (end - start));652start = System.currentTimeMillis();653for (int i=0; i<ITERS; i++) {654test_sllv(a0, a1, VALUE);655}656end = System.currentTimeMillis();657System.out.println("test_sllv: " + (end - start));658659start = System.currentTimeMillis();660for (int i=0; i<ITERS; i++) {661test_srlc(a0, a1);662}663end = System.currentTimeMillis();664System.out.println("test_srlc: " + (end - start));665start = System.currentTimeMillis();666for (int i=0; i<ITERS; i++) {667test_srlv(a0, a1, VALUE);668}669end = System.currentTimeMillis();670System.out.println("test_srlv: " + (end - start));671672start = System.currentTimeMillis();673for (int i=0; i<ITERS; i++) {674test_srac(a0, a1);675}676end = System.currentTimeMillis();677System.out.println("test_srac: " + (end - start));678start = System.currentTimeMillis();679for (int i=0; i<ITERS; i++) {680test_srav(a0, a1, VALUE);681}682end = System.currentTimeMillis();683System.out.println("test_srav: " + (end - start));684685start = System.currentTimeMillis();686for (int i=0; i<ITERS; i++) {687test_sllc_n(a0, a1);688}689end = System.currentTimeMillis();690System.out.println("test_sllc_n: " + (end - start));691start = System.currentTimeMillis();692for (int i=0; i<ITERS; i++) {693test_sllv(a0, a1, -VALUE);694}695end = System.currentTimeMillis();696System.out.println("test_sllv_n: " + (end - start));697698start = System.currentTimeMillis();699for (int i=0; i<ITERS; i++) {700test_srlc_n(a0, a1);701}702end = System.currentTimeMillis();703System.out.println("test_srlc_n: " + (end - start));704start = System.currentTimeMillis();705for (int i=0; i<ITERS; i++) {706test_srlv(a0, a1, -VALUE);707}708end = System.currentTimeMillis();709System.out.println("test_srlv_n: " + (end - start));710711start = System.currentTimeMillis();712for (int i=0; i<ITERS; i++) {713test_srac_n(a0, a1);714}715end = System.currentTimeMillis();716System.out.println("test_srac_n: " + (end - start));717start = System.currentTimeMillis();718for (int i=0; i<ITERS; i++) {719test_srav(a0, a1, -VALUE);720}721end = System.currentTimeMillis();722System.out.println("test_srav_n: " + (end - start));723724start = System.currentTimeMillis();725for (int i=0; i<ITERS; i++) {726test_sllc_o(a0, a1);727}728end = System.currentTimeMillis();729System.out.println("test_sllc_o: " + (end - start));730start = System.currentTimeMillis();731for (int i=0; i<ITERS; i++) {732test_sllv(a0, a1, SHIFT);733}734end = System.currentTimeMillis();735System.out.println("test_sllv_o: " + (end - start));736737start = System.currentTimeMillis();738for (int i=0; i<ITERS; i++) {739test_srlc_o(a0, a1);740}741end = System.currentTimeMillis();742System.out.println("test_srlc_o: " + (end - start));743start = System.currentTimeMillis();744for (int i=0; i<ITERS; i++) {745test_srlv(a0, a1, SHIFT);746}747end = System.currentTimeMillis();748System.out.println("test_srlv_o: " + (end - start));749750start = System.currentTimeMillis();751for (int i=0; i<ITERS; i++) {752test_srac_o(a0, a1);753}754end = System.currentTimeMillis();755System.out.println("test_srac_o: " + (end - start));756start = System.currentTimeMillis();757for (int i=0; i<ITERS; i++) {758test_srav(a0, a1, SHIFT);759}760end = System.currentTimeMillis();761System.out.println("test_srav_o: " + (end - start));762763start = System.currentTimeMillis();764for (int i=0; i<ITERS; i++) {765test_sllc_on(a0, a1);766}767end = System.currentTimeMillis();768System.out.println("test_sllc_on: " + (end - start));769start = System.currentTimeMillis();770for (int i=0; i<ITERS; i++) {771test_sllv(a0, a1, -SHIFT);772}773end = System.currentTimeMillis();774System.out.println("test_sllv_on: " + (end - start));775776start = System.currentTimeMillis();777for (int i=0; i<ITERS; i++) {778test_srlc_on(a0, a1);779}780end = System.currentTimeMillis();781System.out.println("test_srlc_on: " + (end - start));782start = System.currentTimeMillis();783for (int i=0; i<ITERS; i++) {784test_srlv(a0, a1, -SHIFT);785}786end = System.currentTimeMillis();787System.out.println("test_srlv_on: " + (end - start));788789start = System.currentTimeMillis();790for (int i=0; i<ITERS; i++) {791test_srac_on(a0, a1);792}793end = System.currentTimeMillis();794System.out.println("test_srac_on: " + (end - start));795start = System.currentTimeMillis();796for (int i=0; i<ITERS; i++) {797test_srav(a0, a1, -SHIFT);798}799end = System.currentTimeMillis();800System.out.println("test_srav_on: " + (end - start));801802start = System.currentTimeMillis();803for (int i=0; i<ITERS; i++) {804test_sllc_add(a0, a1);805}806end = System.currentTimeMillis();807System.out.println("test_sllc_add: " + (end - start));808start = System.currentTimeMillis();809for (int i=0; i<ITERS; i++) {810test_sllv_add(a0, a1, ADD_INIT);811}812end = System.currentTimeMillis();813System.out.println("test_sllv_add: " + (end - start));814815start = System.currentTimeMillis();816for (int i=0; i<ITERS; i++) {817test_srlc_add(a0, a1);818}819end = System.currentTimeMillis();820System.out.println("test_srlc_add: " + (end - start));821start = System.currentTimeMillis();822for (int i=0; i<ITERS; i++) {823test_srlv_add(a0, a1, ADD_INIT);824}825end = System.currentTimeMillis();826System.out.println("test_srlv_add: " + (end - start));827828start = System.currentTimeMillis();829for (int i=0; i<ITERS; i++) {830test_srac_add(a0, a1);831}832end = System.currentTimeMillis();833System.out.println("test_srac_add: " + (end - start));834start = System.currentTimeMillis();835for (int i=0; i<ITERS; i++) {836test_srav_add(a0, a1, ADD_INIT);837}838end = System.currentTimeMillis();839System.out.println("test_srav_add: " + (end - start));840841start = System.currentTimeMillis();842for (int i=0; i<ITERS; i++) {843test_sllc_and(a0, a1);844}845end = System.currentTimeMillis();846System.out.println("test_sllc_and: " + (end - start));847start = System.currentTimeMillis();848for (int i=0; i<ITERS; i++) {849test_sllv_and(a0, a1, BIT_MASK);850}851end = System.currentTimeMillis();852System.out.println("test_sllv_and: " + (end - start));853854start = System.currentTimeMillis();855for (int i=0; i<ITERS; i++) {856test_srlc_and(a0, a1);857}858end = System.currentTimeMillis();859System.out.println("test_srlc_and: " + (end - start));860start = System.currentTimeMillis();861for (int i=0; i<ITERS; i++) {862test_srlv_and(a0, a1, BIT_MASK);863}864end = System.currentTimeMillis();865System.out.println("test_srlv_and: " + (end - start));866867start = System.currentTimeMillis();868for (int i=0; i<ITERS; i++) {869test_srac_and(a0, a1);870}871end = System.currentTimeMillis();872System.out.println("test_srac_and: " + (end - start));873start = System.currentTimeMillis();874for (int i=0; i<ITERS; i++) {875test_srav_and(a0, a1, BIT_MASK);876}877end = System.currentTimeMillis();878System.out.println("test_srav_and: " + (end - start));879880start = System.currentTimeMillis();881for (int i=0; i<ITERS; i++) {882test_pack2(p2, a1);883}884end = System.currentTimeMillis();885System.out.println("test_pack2: " + (end - start));886start = System.currentTimeMillis();887for (int i=0; i<ITERS; i++) {888test_unpack2(a0, p2);889}890end = System.currentTimeMillis();891System.out.println("test_unpack2: " + (end - start));892start = System.currentTimeMillis();893for (int i=0; i<ITERS; i++) {894test_pack2_swap(p2, a1);895}896end = System.currentTimeMillis();897System.out.println("test_pack2_swap: " + (end - start));898start = System.currentTimeMillis();899for (int i=0; i<ITERS; i++) {900test_unpack2_swap(a0, p2);901}902end = System.currentTimeMillis();903System.out.println("test_unpack2_swap: " + (end - start));904905return errn;906}907908static int test_sum(int[] a1) {909int sum = 0;910for (int i = 0; i < a1.length; i+=1) {911sum += a1[i];912}913return sum;914}915916static void test_addc(int[] a0, int[] a1) {917for (int i = 0; i < a0.length; i+=1) {918a0[i] = (int)(a1[i]+VALUE);919}920}921static void test_addv(int[] a0, int[] a1, int b) {922for (int i = 0; i < a0.length; i+=1) {923a0[i] = (int)(a1[i]+b);924}925}926static void test_adda(int[] a0, int[] a1, int[] a2) {927for (int i = 0; i < a0.length; i+=1) {928a0[i] = (int)(a1[i]+a2[i]);929}930}931932static void test_subc(int[] a0, int[] a1) {933for (int i = 0; i < a0.length; i+=1) {934a0[i] = (int)(a1[i]-VALUE);935}936}937static void test_subv(int[] a0, int[] a1, int b) {938for (int i = 0; i < a0.length; i+=1) {939a0[i] = (int)(a1[i]-b);940}941}942static void test_suba(int[] a0, int[] a1, int[] a2) {943for (int i = 0; i < a0.length; i+=1) {944a0[i] = (int)(a1[i]-a2[i]);945}946}947948static void test_mulc(int[] a0, int[] a1) {949for (int i = 0; i < a0.length; i+=1) {950a0[i] = (int)(a1[i]*VALUE);951}952}953static void test_mulc_n(int[] a0, int[] a1) {954for (int i = 0; i < a0.length; i+=1) {955a0[i] = (int)(a1[i]*(-VALUE));956}957}958static void test_mulv(int[] a0, int[] a1, int b) {959for (int i = 0; i < a0.length; i+=1) {960a0[i] = (int)(a1[i]*b);961}962}963static void test_mula(int[] a0, int[] a1, int[] a2) {964for (int i = 0; i < a0.length; i+=1) {965a0[i] = (int)(a1[i]*a2[i]);966}967}968969static void test_divc(int[] a0, int[] a1) {970for (int i = 0; i < a0.length; i+=1) {971a0[i] = (int)(a1[i]/VALUE);972}973}974static void test_divc_n(int[] a0, int[] a1) {975for (int i = 0; i < a0.length; i+=1) {976a0[i] = (int)(a1[i]/(-VALUE));977}978}979static void test_divv(int[] a0, int[] a1, int b) {980for (int i = 0; i < a0.length; i+=1) {981a0[i] = (int)(a1[i]/b);982}983}984static void test_diva(int[] a0, int[] a1, int[] a2) {985for (int i = 0; i < a0.length; i+=1) {986a0[i] = (int)(a1[i]/a2[i]);987}988}989990static void test_andc(int[] a0, int[] a1) {991for (int i = 0; i < a0.length; i+=1) {992a0[i] = (int)(a1[i]&BIT_MASK);993}994}995static void test_andv(int[] a0, int[] a1, int b) {996for (int i = 0; i < a0.length; i+=1) {997a0[i] = (int)(a1[i]&b);998}999}1000static void test_anda(int[] a0, int[] a1, int[] a2) {1001for (int i = 0; i < a0.length; i+=1) {1002a0[i] = (int)(a1[i]&a2[i]);1003}1004}10051006static void test_orc(int[] a0, int[] a1) {1007for (int i = 0; i < a0.length; i+=1) {1008a0[i] = (int)(a1[i]|BIT_MASK);1009}1010}1011static void test_orv(int[] a0, int[] a1, int b) {1012for (int i = 0; i < a0.length; i+=1) {1013a0[i] = (int)(a1[i]|b);1014}1015}1016static void test_ora(int[] a0, int[] a1, int[] a2) {1017for (int i = 0; i < a0.length; i+=1) {1018a0[i] = (int)(a1[i]|a2[i]);1019}1020}10211022static void test_xorc(int[] a0, int[] a1) {1023for (int i = 0; i < a0.length; i+=1) {1024a0[i] = (int)(a1[i]^BIT_MASK);1025}1026}1027static void test_xorv(int[] a0, int[] a1, int b) {1028for (int i = 0; i < a0.length; i+=1) {1029a0[i] = (int)(a1[i]^b);1030}1031}1032static void test_xora(int[] a0, int[] a1, int[] a2) {1033for (int i = 0; i < a0.length; i+=1) {1034a0[i] = (int)(a1[i]^a2[i]);1035}1036}10371038static void test_sllc(int[] a0, int[] a1) {1039for (int i = 0; i < a0.length; i+=1) {1040a0[i] = (int)(a1[i]<<VALUE);1041}1042}1043static void test_sllc_n(int[] a0, int[] a1) {1044for (int i = 0; i < a0.length; i+=1) {1045a0[i] = (int)(a1[i]<<(-VALUE));1046}1047}1048static void test_sllc_o(int[] a0, int[] a1) {1049for (int i = 0; i < a0.length; i+=1) {1050a0[i] = (int)(a1[i]<<SHIFT);1051}1052}1053static void test_sllc_on(int[] a0, int[] a1) {1054for (int i = 0; i < a0.length; i+=1) {1055a0[i] = (int)(a1[i]<<(-SHIFT));1056}1057}1058static void test_sllv(int[] a0, int[] a1, int b) {1059for (int i = 0; i < a0.length; i+=1) {1060a0[i] = (int)(a1[i]<<b);1061}1062}1063static void test_sllc_add(int[] a0, int[] a1) {1064for (int i = 0; i < a0.length; i+=1) {1065a0[i] = (int)((a1[i] + ADD_INIT)<<VALUE);1066}1067}1068static void test_sllv_add(int[] a0, int[] a1, int b) {1069for (int i = 0; i < a0.length; i+=1) {1070a0[i] = (int)((a1[i] + b)<<VALUE);1071}1072}1073static void test_sllc_and(int[] a0, int[] a1) {1074for (int i = 0; i < a0.length; i+=1) {1075a0[i] = (int)((a1[i] & BIT_MASK)<<VALUE);1076}1077}1078static void test_sllv_and(int[] a0, int[] a1, int b) {1079for (int i = 0; i < a0.length; i+=1) {1080a0[i] = (int)((a1[i] & b)<<VALUE);1081}1082}10831084static void test_srlc(int[] a0, int[] a1) {1085for (int i = 0; i < a0.length; i+=1) {1086a0[i] = (int)(a1[i]>>>VALUE);1087}1088}1089static void test_srlc_n(int[] a0, int[] a1) {1090for (int i = 0; i < a0.length; i+=1) {1091a0[i] = (int)(a1[i]>>>(-VALUE));1092}1093}1094static void test_srlc_o(int[] a0, int[] a1) {1095for (int i = 0; i < a0.length; i+=1) {1096a0[i] = (int)(a1[i]>>>SHIFT);1097}1098}1099static void test_srlc_on(int[] a0, int[] a1) {1100for (int i = 0; i < a0.length; i+=1) {1101a0[i] = (int)(a1[i]>>>(-SHIFT));1102}1103}1104static void test_srlv(int[] a0, int[] a1, int b) {1105for (int i = 0; i < a0.length; i+=1) {1106a0[i] = (int)(a1[i]>>>b);1107}1108}1109static void test_srlc_add(int[] a0, int[] a1) {1110for (int i = 0; i < a0.length; i+=1) {1111a0[i] = (int)((a1[i] + ADD_INIT)>>>VALUE);1112}1113}1114static void test_srlv_add(int[] a0, int[] a1, int b) {1115for (int i = 0; i < a0.length; i+=1) {1116a0[i] = (int)((a1[i] + b)>>>VALUE);1117}1118}1119static void test_srlc_and(int[] a0, int[] a1) {1120for (int i = 0; i < a0.length; i+=1) {1121a0[i] = (int)((a1[i] & BIT_MASK)>>>VALUE);1122}1123}1124static void test_srlv_and(int[] a0, int[] a1, int b) {1125for (int i = 0; i < a0.length; i+=1) {1126a0[i] = (int)((a1[i] & b)>>>VALUE);1127}1128}11291130static void test_srac(int[] a0, int[] a1) {1131for (int i = 0; i < a0.length; i+=1) {1132a0[i] = (int)(a1[i]>>VALUE);1133}1134}1135static void test_srac_n(int[] a0, int[] a1) {1136for (int i = 0; i < a0.length; i+=1) {1137a0[i] = (int)(a1[i]>>(-VALUE));1138}1139}1140static void test_srac_o(int[] a0, int[] a1) {1141for (int i = 0; i < a0.length; i+=1) {1142a0[i] = (int)(a1[i]>>SHIFT);1143}1144}1145static void test_srac_on(int[] a0, int[] a1) {1146for (int i = 0; i < a0.length; i+=1) {1147a0[i] = (int)(a1[i]>>(-SHIFT));1148}1149}1150static void test_srav(int[] a0, int[] a1, int b) {1151for (int i = 0; i < a0.length; i+=1) {1152a0[i] = (int)(a1[i]>>b);1153}1154}1155static void test_srac_add(int[] a0, int[] a1) {1156for (int i = 0; i < a0.length; i+=1) {1157a0[i] = (int)((a1[i] + ADD_INIT)>>VALUE);1158}1159}1160static void test_srav_add(int[] a0, int[] a1, int b) {1161for (int i = 0; i < a0.length; i+=1) {1162a0[i] = (int)((a1[i] + b)>>VALUE);1163}1164}1165static void test_srac_and(int[] a0, int[] a1) {1166for (int i = 0; i < a0.length; i+=1) {1167a0[i] = (int)((a1[i] & BIT_MASK)>>VALUE);1168}1169}1170static void test_srav_and(int[] a0, int[] a1, int b) {1171for (int i = 0; i < a0.length; i+=1) {1172a0[i] = (int)((a1[i] & b)>>VALUE);1173}1174}11751176static void test_pack2(long[] p2, int[] a1) {1177if (p2.length*2 > a1.length) return;1178for (int i = 0; i < p2.length; i+=1) {1179long l0 = (long)a1[i*2+0];1180long l1 = (long)a1[i*2+1];1181p2[i] = (l1 << 32) | (l0 & 0xFFFFFFFFl);1182}1183}1184static void test_unpack2(int[] a0, long[] p2) {1185if (p2.length*2 > a0.length) return;1186for (int i = 0; i < p2.length; i+=1) {1187long l = p2[i];1188a0[i*2+0] = (int)(l & 0xFFFFFFFFl);1189a0[i*2+1] = (int)(l >> 32);1190}1191}1192static void test_pack2_swap(long[] p2, int[] a1) {1193if (p2.length*2 > a1.length) return;1194for (int i = 0; i < p2.length; i+=1) {1195long l0 = (long)a1[i*2+0];1196long l1 = (long)a1[i*2+1];1197p2[i] = (l0 << 32) | (l1 & 0xFFFFFFFFl);1198}1199}1200static void test_unpack2_swap(int[] a0, long[] p2) {1201if (p2.length*2 > a0.length) return;1202for (int i = 0; i < p2.length; i+=1) {1203long l = p2[i];1204a0[i*2+0] = (int)(l >> 32);1205a0[i*2+1] = (int)(l & 0xFFFFFFFFl);1206}1207}12081209static int verify(String text, int i, int elem, int val) {1210if (elem != val) {1211System.err.println(text + "[" + i + "] = " + elem + " != " + val);1212return 1;1213}1214return 0;1215}12161217static int verify(String text, int i, long elem, long val) {1218if (elem != val) {1219System.err.println(text + "[" + i + "] = " + Long.toHexString(elem) + " != " + Long.toHexString(val));1220return 1;1221}1222return 0;1223}1224}122512261227