Path: blob/master/test/hotspot/jtreg/compiler/codegen/TestBooleanVect.java
41149 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*/2223/**24* @test25* @bug 711964426* @summary Increase superword's vector size up to 256 bits27*28* @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions29* -XX:-TieredCompilation -XX:-OptimizeFill30* compiler.codegen.TestBooleanVect31*/3233package compiler.codegen;3435public class TestBooleanVect {36private static final int ARRLEN = 997;37private static final int ITERS = 11000;38private static final int OFFSET = 3;39private static final int SCALE = 2;40private static final int ALIGN_OFF = 8;41private static final int UNALIGN_OFF = 5;4243public static void main(String args[]) {44System.out.println("Testing Boolean vectors");45int errn = test();46if (errn > 0) {47System.err.println("FAILED: " + errn + " errors");48System.exit(97);49}50System.out.println("PASSED");51}5253static int test() {54boolean[] a1 = new boolean[ARRLEN];55boolean[] a2 = new boolean[ARRLEN];56System.out.println("Warmup");57for (int i=0; i<ITERS; i++) {58test_ci(a1);59test_vi(a2, true);60test_cp(a1, a2);61test_2ci(a1, a2);62test_2vi(a1, a2, true, true);63test_ci_neg(a1);64test_vi_neg(a2, true);65test_cp_neg(a1, a2);66test_2ci_neg(a1, a2);67test_2vi_neg(a1, a2, true, true);68test_ci_oppos(a1);69test_vi_oppos(a2, true);70test_cp_oppos(a1, a2);71test_2ci_oppos(a1, a2);72test_2vi_oppos(a1, a2, true, true);73test_ci_off(a1);74test_vi_off(a2, true);75test_cp_off(a1, a2);76test_2ci_off(a1, a2);77test_2vi_off(a1, a2, true, true);78test_ci_inv(a1, OFFSET);79test_vi_inv(a2, true, OFFSET);80test_cp_inv(a1, a2, OFFSET);81test_2ci_inv(a1, a2, OFFSET);82test_2vi_inv(a1, a2, true, true, OFFSET);83test_ci_scl(a1);84test_vi_scl(a2, true);85test_cp_scl(a1, a2);86test_2ci_scl(a1, a2);87test_2vi_scl(a1, a2, true, true);88test_cp_alndst(a1, a2);89test_cp_alnsrc(a1, a2);90test_2ci_aln(a1, a2);91test_2vi_aln(a1, a2, true, true);92test_cp_unalndst(a1, a2);93test_cp_unalnsrc(a1, a2);94test_2ci_unaln(a1, a2);95test_2vi_unaln(a1, a2, true, true);96}97// Initialize98for (int i=0; i<ARRLEN; i++) {99a1[i] = false;100a2[i] = false;101}102// Test and verify results103System.out.println("Verification");104int errn = 0;105{106test_ci(a1);107for (int i=0; i<ARRLEN; i++) {108errn += verify("test_ci: a1", i, a1[i], false);109}110test_vi(a2, true);111for (int i=0; i<ARRLEN; i++) {112errn += verify("test_vi: a2", i, a2[i], true);113}114test_cp(a1, a2);115for (int i=0; i<ARRLEN; i++) {116errn += verify("test_cp: a1", i, a1[i], true);117}118test_2ci(a1, a2);119for (int i=0; i<ARRLEN; i++) {120errn += verify("test_2ci: a1", i, a1[i], false);121errn += verify("test_2ci: a2", i, a2[i], false);122}123test_2vi(a1, a2, true, true);124for (int i=0; i<ARRLEN; i++) {125errn += verify("test_2vi: a1", i, a1[i], true);126errn += verify("test_2vi: a2", i, a2[i], true);127}128// Reset for negative stride129for (int i=0; i<ARRLEN; i++) {130a1[i] = false;131a2[i] = false;132}133test_ci_neg(a1);134for (int i=0; i<ARRLEN; i++) {135errn += verify("test_ci_neg: a1", i, a1[i], false);136}137test_vi_neg(a2, true);138for (int i=0; i<ARRLEN; i++) {139errn += verify("test_vi_neg: a2", i, a2[i], true);140}141test_cp_neg(a1, a2);142for (int i=0; i<ARRLEN; i++) {143errn += verify("test_cp_neg: a1", i, a1[i], true);144}145test_2ci_neg(a1, a2);146for (int i=0; i<ARRLEN; i++) {147errn += verify("test_2ci_neg: a1", i, a1[i], false);148errn += verify("test_2ci_neg: a2", i, a2[i], false);149}150test_2vi_neg(a1, a2, true, true);151for (int i=0; i<ARRLEN; i++) {152errn += verify("test_2vi_neg: a1", i, a1[i], true);153errn += verify("test_2vi_neg: a2", i, a2[i], true);154}155// Reset for opposite stride156for (int i=0; i<ARRLEN; i++) {157a1[i] = false;158a2[i] = false;159}160test_ci_oppos(a1);161for (int i=0; i<ARRLEN; i++) {162errn += verify("test_ci_oppos: a1", i, a1[i], false);163}164test_vi_oppos(a2, true);165for (int i=0; i<ARRLEN; i++) {166errn += verify("test_vi_oppos: a2", i, a2[i], true);167}168test_cp_oppos(a1, a2);169for (int i=0; i<ARRLEN; i++) {170errn += verify("test_cp_oppos: a1", i, a1[i], true);171}172test_2ci_oppos(a1, a2);173for (int i=0; i<ARRLEN; i++) {174errn += verify("test_2ci_oppos: a1", i, a1[i], false);175errn += verify("test_2ci_oppos: a2", i, a2[i], false);176}177test_2vi_oppos(a1, a2, true, true);178for (int i=0; i<ARRLEN; i++) {179errn += verify("test_2vi_oppos: a1", i, a1[i], true);180errn += verify("test_2vi_oppos: a2", i, a2[i], true);181}182// Reset for indexing with offset183for (int i=0; i<ARRLEN; i++) {184a1[i] = false;185a2[i] = false;186}187test_ci_off(a1);188for (int i=OFFSET; i<ARRLEN; i++) {189errn += verify("test_ci_off: a1", i, a1[i], false);190}191test_vi_off(a2, true);192for (int i=OFFSET; i<ARRLEN; i++) {193errn += verify("test_vi_off: a2", i, a2[i], true);194}195test_cp_off(a1, a2);196for (int i=OFFSET; i<ARRLEN; i++) {197errn += verify("test_cp_off: a1", i, a1[i], true);198}199test_2ci_off(a1, a2);200for (int i=OFFSET; i<ARRLEN; i++) {201errn += verify("test_2ci_off: a1", i, a1[i], false);202errn += verify("test_2ci_off: a2", i, a2[i], false);203}204test_2vi_off(a1, a2, true, true);205for (int i=OFFSET; i<ARRLEN; i++) {206errn += verify("test_2vi_off: a1", i, a1[i], true);207errn += verify("test_2vi_off: a2", i, a2[i], true);208}209for (int i=0; i<OFFSET; i++) {210errn += verify("test_2vi_off: a1", i, a1[i], false);211errn += verify("test_2vi_off: a2", i, a2[i], false);212}213// Reset for indexing with invariant offset214for (int i=0; i<ARRLEN; i++) {215a1[i] = false;216a2[i] = false;217}218test_ci_inv(a1, OFFSET);219for (int i=OFFSET; i<ARRLEN; i++) {220errn += verify("test_ci_inv: a1", i, a1[i], false);221}222test_vi_inv(a2, true, OFFSET);223for (int i=OFFSET; i<ARRLEN; i++) {224errn += verify("test_vi_inv: a2", i, a2[i], true);225}226test_cp_inv(a1, a2, OFFSET);227for (int i=OFFSET; i<ARRLEN; i++) {228errn += verify("test_cp_inv: a1", i, a1[i], true);229}230test_2ci_inv(a1, a2, OFFSET);231for (int i=OFFSET; i<ARRLEN; i++) {232errn += verify("test_2ci_inv: a1", i, a1[i], false);233errn += verify("test_2ci_inv: a2", i, a2[i], false);234}235test_2vi_inv(a1, a2, true, true, OFFSET);236for (int i=OFFSET; i<ARRLEN; i++) {237errn += verify("test_2vi_inv: a1", i, a1[i], true);238errn += verify("test_2vi_inv: a2", i, a2[i], true);239}240for (int i=0; i<OFFSET; i++) {241errn += verify("test_2vi_inv: a1", i, a1[i], false);242errn += verify("test_2vi_inv: a2", i, a2[i], false);243}244// Reset for indexing with scale245for (int i=0; i<ARRLEN; i++) {246a1[i] = true;247a2[i] = false;248}249test_ci_scl(a1);250for (int i=0; i<ARRLEN; i++) {251boolean val = (i%SCALE != 0);252errn += verify("test_ci_scl: a1", i, a1[i], val);253}254test_vi_scl(a2, true);255for (int i=0; i<ARRLEN; i++) {256boolean val = (i%SCALE == 0);257errn += verify("test_vi_scl: a2", i, a2[i], val);258}259test_cp_scl(a1, a2);260for (int i=0; i<ARRLEN; i++) {261errn += verify("test_cp_scl: a1", i, a1[i], true);262}263test_2ci_scl(a1, a2);264for (int i=0; i<ARRLEN; i++) {265if (i%SCALE != 0) {266errn += verify("test_2ci_scl: a1", i, a1[i], true);267} else if (i*SCALE < ARRLEN) {268errn += verify("test_2ci_scl: a1", i*SCALE, a1[i*SCALE], false);269}270if (i%SCALE != 0) {271errn += verify("test_2ci_scl: a2", i, a2[i], false);272} else if (i*SCALE < ARRLEN) {273errn += verify("test_2ci_scl: a2", i*SCALE, a2[i*SCALE], false);274}275}276test_2vi_scl(a1, a2, false, true);277for (int i=0; i<ARRLEN; i++) {278if (i%SCALE != 0) {279errn += verify("test_2vi_scl: a1", i, a1[i], true);280} else if (i*SCALE < ARRLEN) {281errn += verify("test_2vi_scl: a1", i*SCALE, a1[i*SCALE], false);282}283if (i%SCALE != 0) {284errn += verify("test_2vi_scl: a2", i, a2[i], false);285} else if (i*SCALE < ARRLEN) {286errn += verify("test_2vi_scl: a2", i*SCALE, a2[i*SCALE], true);287}288}289// Reset for 2 arrays with relative aligned offset290for (int i=0; i<ARRLEN; i++) {291a1[i] = false;292a2[i] = false;293}294test_vi(a2, true);295test_cp_alndst(a1, a2);296for (int i=0; i<ALIGN_OFF; i++) {297errn += verify("test_cp_alndst: a1", i, a1[i], false);298}299for (int i=ALIGN_OFF; i<ARRLEN; i++) {300errn += verify("test_cp_alndst: a1", i, a1[i], true);301}302test_vi(a2, false);303test_cp_alnsrc(a1, a2);304for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {305errn += verify("test_cp_alnsrc: a1", i, a1[i], false);306}307for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {308errn += verify("test_cp_alnsrc: a1", i, a1[i], true);309}310for (int i=0; i<ARRLEN; i++) {311a1[i] = false;312a2[i] = false;313}314test_2ci_aln(a1, a2);315for (int i=0; i<ALIGN_OFF; i++) {316errn += verify("test_2ci_aln: a1", i, a1[i], false);317}318for (int i=ALIGN_OFF; i<ARRLEN; i++) {319errn += verify("test_2ci_aln: a1", i, a1[i], false);320}321for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {322errn += verify("test_2ci_aln: a2", i, a2[i], false);323}324for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {325errn += verify("test_2ci_aln: a2", i, a2[i], false);326}327for (int i=0; i<ARRLEN; i++) {328a1[i] = false;329a2[i] = false;330}331test_2vi_aln(a1, a2, true, true);332for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {333errn += verify("test_2vi_aln: a1", i, a1[i], true);334}335for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {336errn += verify("test_2vi_aln: a1", i, a1[i], false);337}338for (int i=0; i<ALIGN_OFF; i++) {339errn += verify("test_2vi_aln: a2", i, a2[i], false);340}341for (int i=ALIGN_OFF; i<ARRLEN; i++) {342errn += verify("test_2vi_aln: a2", i, a2[i], true);343}344345// Reset for 2 arrays with relative unaligned offset346for (int i=0; i<ARRLEN; i++) {347a1[i] = false;348a2[i] = false;349}350test_vi(a2, true);351test_cp_unalndst(a1, a2);352for (int i=0; i<UNALIGN_OFF; i++) {353errn += verify("test_cp_unalndst: a1", i, a1[i], false);354}355for (int i=UNALIGN_OFF; i<ARRLEN; i++) {356errn += verify("test_cp_unalndst: a1", i, a1[i], true);357}358test_vi(a2, false);359test_cp_unalnsrc(a1, a2);360for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {361errn += verify("test_cp_unalnsrc: a1", i, a1[i], false);362}363for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {364errn += verify("test_cp_unalnsrc: a1", i, a1[i], true);365}366for (int i=0; i<ARRLEN; i++) {367a1[i] = false;368a2[i] = false;369}370test_2ci_unaln(a1, a2);371for (int i=0; i<UNALIGN_OFF; i++) {372errn += verify("test_2ci_unaln: a1", i, a1[i], false);373}374for (int i=UNALIGN_OFF; i<ARRLEN; i++) {375errn += verify("test_2ci_unaln: a1", i, a1[i], false);376}377for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {378errn += verify("test_2ci_unaln: a2", i, a2[i], false);379}380for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {381errn += verify("test_2ci_unaln: a2", i, a2[i], false);382}383for (int i=0; i<ARRLEN; i++) {384a1[i] = false;385a2[i] = false;386}387test_2vi_unaln(a1, a2, true, true);388for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {389errn += verify("test_2vi_unaln: a1", i, a1[i], true);390}391for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {392errn += verify("test_2vi_unaln: a1", i, a1[i], false);393}394for (int i=0; i<UNALIGN_OFF; i++) {395errn += verify("test_2vi_unaln: a2", i, a2[i], false);396}397for (int i=UNALIGN_OFF; i<ARRLEN; i++) {398errn += verify("test_2vi_unaln: a2", i, a2[i], true);399}400401// Reset for aligned overlap initialization402for (int i=0; i<ALIGN_OFF; i++) {403a1[i] = (i > 0);404}405for (int i=ALIGN_OFF; i<ARRLEN; i++) {406a1[i] = false;407}408test_cp_alndst(a1, a1);409for (int i=0; i<ARRLEN; i++) {410boolean v = (i%ALIGN_OFF > 0);411errn += verify("test_cp_alndst_overlap: a1", i, a1[i], v);412}413for (int i=0; i<ALIGN_OFF; i++) {414a1[i+ALIGN_OFF] = false;415}416test_cp_alnsrc(a1, a1);417for (int i=0; i<ALIGN_OFF; i++) {418errn += verify("test_cp_alnsrc_overlap: a1", i, a1[i], false);419}420for (int i=ALIGN_OFF; i<ARRLEN; i++) {421boolean v = (i%ALIGN_OFF > 0);422errn += verify("test_cp_alnsrc_overlap: a1", i, a1[i], v);423}424for (int i=0; i<ARRLEN; i++) {425a1[i] = false;426}427test_2ci_aln(a1, a1);428for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {429errn += verify("test_2ci_aln_overlap: a1", i, a1[i], false);430}431for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {432errn += verify("test_2ci_aln_overlap: a1", i, a1[i], false);433}434for (int i=0; i<ARRLEN; i++) {435a1[i] = false;436}437test_2vi_aln(a1, a1, true, true);438for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {439errn += verify("test_2vi_aln_overlap: a1", i, a1[i], true);440}441for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {442errn += verify("test_2vi_aln_overlap: a1", i, a1[i], true);443}444445// Reset for unaligned overlap initialization446for (int i=0; i<UNALIGN_OFF; i++) {447a1[i] = (i > 0);448}449for (int i=UNALIGN_OFF; i<ARRLEN; i++) {450a1[i] = false;451}452test_cp_unalndst(a1, a1);453for (int i=0; i<ARRLEN; i++) {454boolean v = (i%UNALIGN_OFF > 0);455errn += verify("test_cp_unalndst_overlap: a1", i, a1[i], v);456}457for (int i=0; i<UNALIGN_OFF; i++) {458a1[i+UNALIGN_OFF] = false;459}460test_cp_unalnsrc(a1, a1);461for (int i=0; i<UNALIGN_OFF; i++) {462errn += verify("test_cp_unalnsrc_overlap: a1", i, a1[i], false);463}464for (int i=UNALIGN_OFF; i<ARRLEN; i++) {465boolean v = (i%UNALIGN_OFF > 0);466errn += verify("test_cp_unalnsrc_overlap: a1", i, a1[i], v);467}468for (int i=0; i<ARRLEN; i++) {469a1[i] = false;470}471test_2ci_unaln(a1, a1);472for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {473errn += verify("test_2ci_unaln_overlap: a1", i, a1[i], false);474}475for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {476errn += verify("test_2ci_unaln_overlap: a1", i, a1[i], false);477}478for (int i=0; i<ARRLEN; i++) {479a1[i] = false;480}481test_2vi_unaln(a1, a1, true, true);482for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {483errn += verify("test_2vi_unaln_overlap: a1", i, a1[i], true);484}485for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {486errn += verify("test_2vi_unaln_overlap: a1", i, a1[i], true);487}488489}490491if (errn > 0)492return errn;493494System.out.println("Time");495long start, end;496start = System.currentTimeMillis();497for (int i=0; i<ITERS; i++) {498test_ci(a1);499}500end = System.currentTimeMillis();501System.out.println("test_ci: " + (end - start));502start = System.currentTimeMillis();503for (int i=0; i<ITERS; i++) {504test_vi(a2, true);505}506end = System.currentTimeMillis();507System.out.println("test_vi: " + (end - start));508start = System.currentTimeMillis();509for (int i=0; i<ITERS; i++) {510test_cp(a1, a2);511}512end = System.currentTimeMillis();513System.out.println("test_cp: " + (end - start));514start = System.currentTimeMillis();515for (int i=0; i<ITERS; i++) {516test_2ci(a1, a2);517}518end = System.currentTimeMillis();519System.out.println("test_2ci: " + (end - start));520start = System.currentTimeMillis();521for (int i=0; i<ITERS; i++) {522test_2vi(a1, a2, true, true);523}524end = System.currentTimeMillis();525System.out.println("test_2vi: " + (end - start));526527start = System.currentTimeMillis();528for (int i=0; i<ITERS; i++) {529test_ci_neg(a1);530}531end = System.currentTimeMillis();532System.out.println("test_ci_neg: " + (end - start));533start = System.currentTimeMillis();534for (int i=0; i<ITERS; i++) {535test_vi_neg(a2, true);536}537end = System.currentTimeMillis();538System.out.println("test_vi_neg: " + (end - start));539start = System.currentTimeMillis();540for (int i=0; i<ITERS; i++) {541test_cp_neg(a1, a2);542}543end = System.currentTimeMillis();544System.out.println("test_cp_neg: " + (end - start));545start = System.currentTimeMillis();546for (int i=0; i<ITERS; i++) {547test_2ci_neg(a1, a2);548}549end = System.currentTimeMillis();550System.out.println("test_2ci_neg: " + (end - start));551start = System.currentTimeMillis();552for (int i=0; i<ITERS; i++) {553test_2vi_neg(a1, a2, true, true);554}555end = System.currentTimeMillis();556System.out.println("test_2vi_neg: " + (end - start));557558start = System.currentTimeMillis();559for (int i=0; i<ITERS; i++) {560test_ci_oppos(a1);561}562end = System.currentTimeMillis();563System.out.println("test_ci_oppos: " + (end - start));564start = System.currentTimeMillis();565for (int i=0; i<ITERS; i++) {566test_vi_oppos(a2, true);567}568end = System.currentTimeMillis();569System.out.println("test_vi_oppos: " + (end - start));570start = System.currentTimeMillis();571for (int i=0; i<ITERS; i++) {572test_cp_oppos(a1, a2);573}574end = System.currentTimeMillis();575System.out.println("test_cp_oppos: " + (end - start));576start = System.currentTimeMillis();577for (int i=0; i<ITERS; i++) {578test_2ci_oppos(a1, a2);579}580end = System.currentTimeMillis();581System.out.println("test_2ci_oppos: " + (end - start));582start = System.currentTimeMillis();583for (int i=0; i<ITERS; i++) {584test_2vi_oppos(a1, a2, true, true);585}586end = System.currentTimeMillis();587System.out.println("test_2vi_oppos: " + (end - start));588589start = System.currentTimeMillis();590for (int i=0; i<ITERS; i++) {591test_ci_off(a1);592}593end = System.currentTimeMillis();594System.out.println("test_ci_off: " + (end - start));595start = System.currentTimeMillis();596for (int i=0; i<ITERS; i++) {597test_vi_off(a2, true);598}599end = System.currentTimeMillis();600System.out.println("test_vi_off: " + (end - start));601start = System.currentTimeMillis();602for (int i=0; i<ITERS; i++) {603test_cp_off(a1, a2);604}605end = System.currentTimeMillis();606System.out.println("test_cp_off: " + (end - start));607start = System.currentTimeMillis();608for (int i=0; i<ITERS; i++) {609test_2ci_off(a1, a2);610}611end = System.currentTimeMillis();612System.out.println("test_2ci_off: " + (end - start));613start = System.currentTimeMillis();614for (int i=0; i<ITERS; i++) {615test_2vi_off(a1, a2, true, true);616}617end = System.currentTimeMillis();618System.out.println("test_2vi_off: " + (end - start));619620start = System.currentTimeMillis();621for (int i=0; i<ITERS; i++) {622test_ci_inv(a1, OFFSET);623}624end = System.currentTimeMillis();625System.out.println("test_ci_inv: " + (end - start));626start = System.currentTimeMillis();627for (int i=0; i<ITERS; i++) {628test_vi_inv(a2, true, OFFSET);629}630end = System.currentTimeMillis();631System.out.println("test_vi_inv: " + (end - start));632start = System.currentTimeMillis();633for (int i=0; i<ITERS; i++) {634test_cp_inv(a1, a2, OFFSET);635}636end = System.currentTimeMillis();637System.out.println("test_cp_inv: " + (end - start));638start = System.currentTimeMillis();639for (int i=0; i<ITERS; i++) {640test_2ci_inv(a1, a2, OFFSET);641}642end = System.currentTimeMillis();643System.out.println("test_2ci_inv: " + (end - start));644start = System.currentTimeMillis();645for (int i=0; i<ITERS; i++) {646test_2vi_inv(a1, a2, true, true, OFFSET);647}648end = System.currentTimeMillis();649System.out.println("test_2vi_inv: " + (end - start));650651start = System.currentTimeMillis();652for (int i=0; i<ITERS; i++) {653test_ci_scl(a1);654}655end = System.currentTimeMillis();656System.out.println("test_ci_scl: " + (end - start));657start = System.currentTimeMillis();658for (int i=0; i<ITERS; i++) {659test_vi_scl(a2, true);660}661end = System.currentTimeMillis();662System.out.println("test_vi_scl: " + (end - start));663start = System.currentTimeMillis();664for (int i=0; i<ITERS; i++) {665test_cp_scl(a1, a2);666}667end = System.currentTimeMillis();668System.out.println("test_cp_scl: " + (end - start));669start = System.currentTimeMillis();670for (int i=0; i<ITERS; i++) {671test_2ci_scl(a1, a2);672}673end = System.currentTimeMillis();674System.out.println("test_2ci_scl: " + (end - start));675start = System.currentTimeMillis();676for (int i=0; i<ITERS; i++) {677test_2vi_scl(a1, a2, true, true);678}679end = System.currentTimeMillis();680System.out.println("test_2vi_scl: " + (end - start));681682start = System.currentTimeMillis();683for (int i=0; i<ITERS; i++) {684test_cp_alndst(a1, a2);685}686end = System.currentTimeMillis();687System.out.println("test_cp_alndst: " + (end - start));688start = System.currentTimeMillis();689for (int i=0; i<ITERS; i++) {690test_cp_alnsrc(a1, a2);691}692end = System.currentTimeMillis();693System.out.println("test_cp_alnsrc: " + (end - start));694start = System.currentTimeMillis();695for (int i=0; i<ITERS; i++) {696test_2ci_aln(a1, a2);697}698end = System.currentTimeMillis();699System.out.println("test_2ci_aln: " + (end - start));700start = System.currentTimeMillis();701for (int i=0; i<ITERS; i++) {702test_2vi_aln(a1, a2, true, true);703}704end = System.currentTimeMillis();705System.out.println("test_2vi_aln: " + (end - start));706707start = System.currentTimeMillis();708for (int i=0; i<ITERS; i++) {709test_cp_unalndst(a1, a2);710}711end = System.currentTimeMillis();712System.out.println("test_cp_unalndst: " + (end - start));713start = System.currentTimeMillis();714for (int i=0; i<ITERS; i++) {715test_cp_unalnsrc(a1, a2);716}717end = System.currentTimeMillis();718System.out.println("test_cp_unalnsrc: " + (end - start));719start = System.currentTimeMillis();720for (int i=0; i<ITERS; i++) {721test_2ci_unaln(a1, a2);722}723end = System.currentTimeMillis();724System.out.println("test_2ci_unaln: " + (end - start));725start = System.currentTimeMillis();726for (int i=0; i<ITERS; i++) {727test_2vi_unaln(a1, a2, true, true);728}729end = System.currentTimeMillis();730System.out.println("test_2vi_unaln: " + (end - start));731732return errn;733}734735static void test_ci(boolean[] a) {736for (int i = 0; i < a.length; i+=1) {737a[i] = false;738}739}740static void test_vi(boolean[] a, boolean b) {741for (int i = 0; i < a.length; i+=1) {742a[i] = b;743}744}745static void test_cp(boolean[] a, boolean[] b) {746for (int i = 0; i < a.length; i+=1) {747a[i] = b[i];748}749}750static void test_2ci(boolean[] a, boolean[] b) {751for (int i = 0; i < a.length; i+=1) {752a[i] = false;753b[i] = false;754}755}756static void test_2vi(boolean[] a, boolean[] b, boolean c, boolean d) {757for (int i = 0; i < a.length; i+=1) {758a[i] = c;759b[i] = d;760}761}762static void test_ci_neg(boolean[] a) {763for (int i = a.length-1; i >= 0; i-=1) {764a[i] = false;765}766}767static void test_vi_neg(boolean[] a, boolean b) {768for (int i = a.length-1; i >= 0; i-=1) {769a[i] = b;770}771}772static void test_cp_neg(boolean[] a, boolean[] b) {773for (int i = a.length-1; i >= 0; i-=1) {774a[i] = b[i];775}776}777static void test_2ci_neg(boolean[] a, boolean[] b) {778for (int i = a.length-1; i >= 0; i-=1) {779a[i] = false;780b[i] = false;781}782}783static void test_2vi_neg(boolean[] a, boolean[] b, boolean c, boolean d) {784for (int i = a.length-1; i >= 0; i-=1) {785a[i] = c;786b[i] = d;787}788}789static void test_ci_oppos(boolean[] a) {790int limit = a.length-1;791for (int i = 0; i < a.length; i+=1) {792a[limit-i] = false;793}794}795static void test_vi_oppos(boolean[] a, boolean b) {796int limit = a.length-1;797for (int i = limit; i >= 0; i-=1) {798a[limit-i] = b;799}800}801static void test_cp_oppos(boolean[] a, boolean[] b) {802int limit = a.length-1;803for (int i = 0; i < a.length; i+=1) {804a[i] = b[limit-i];805}806}807static void test_2ci_oppos(boolean[] a, boolean[] b) {808int limit = a.length-1;809for (int i = 0; i < a.length; i+=1) {810a[limit-i] = false;811b[i] = false;812}813}814static void test_2vi_oppos(boolean[] a, boolean[] b, boolean c, boolean d) {815int limit = a.length-1;816for (int i = limit; i >= 0; i-=1) {817a[i] = c;818b[limit-i] = d;819}820}821static void test_ci_off(boolean[] a) {822for (int i = 0; i < a.length-OFFSET; i+=1) {823a[i+OFFSET] = false;824}825}826static void test_vi_off(boolean[] a, boolean b) {827for (int i = 0; i < a.length-OFFSET; i+=1) {828a[i+OFFSET] = b;829}830}831static void test_cp_off(boolean[] a, boolean[] b) {832for (int i = 0; i < a.length-OFFSET; i+=1) {833a[i+OFFSET] = b[i+OFFSET];834}835}836static void test_2ci_off(boolean[] a, boolean[] b) {837for (int i = 0; i < a.length-OFFSET; i+=1) {838a[i+OFFSET] = false;839b[i+OFFSET] = false;840}841}842static void test_2vi_off(boolean[] a, boolean[] b, boolean c, boolean d) {843for (int i = 0; i < a.length-OFFSET; i+=1) {844a[i+OFFSET] = c;845b[i+OFFSET] = d;846}847}848static void test_ci_inv(boolean[] a, int k) {849for (int i = 0; i < a.length-k; i+=1) {850a[i+k] = false;851}852}853static void test_vi_inv(boolean[] a, boolean b, int k) {854for (int i = 0; i < a.length-k; i+=1) {855a[i+k] = b;856}857}858static void test_cp_inv(boolean[] a, boolean[] b, int k) {859for (int i = 0; i < a.length-k; i+=1) {860a[i+k] = b[i+k];861}862}863static void test_2ci_inv(boolean[] a, boolean[] b, int k) {864for (int i = 0; i < a.length-k; i+=1) {865a[i+k] = false;866b[i+k] = false;867}868}869static void test_2vi_inv(boolean[] a, boolean[] b, boolean c, boolean d, int k) {870for (int i = 0; i < a.length-k; i+=1) {871a[i+k] = c;872b[i+k] = d;873}874}875static void test_ci_scl(boolean[] a) {876for (int i = 0; i*SCALE < a.length; i+=1) {877a[i*SCALE] = false;878}879}880static void test_vi_scl(boolean[] a, boolean b) {881for (int i = 0; i*SCALE < a.length; i+=1) {882a[i*SCALE] = b;883}884}885static void test_cp_scl(boolean[] a, boolean[] b) {886for (int i = 0; i*SCALE < a.length; i+=1) {887a[i*SCALE] = b[i*SCALE];888}889}890static void test_2ci_scl(boolean[] a, boolean[] b) {891for (int i = 0; i*SCALE < a.length; i+=1) {892a[i*SCALE] = false;893b[i*SCALE] = false;894}895}896static void test_2vi_scl(boolean[] a, boolean[] b, boolean c, boolean d) {897for (int i = 0; i*SCALE < a.length; i+=1) {898a[i*SCALE] = c;899b[i*SCALE] = d;900}901}902static void test_cp_alndst(boolean[] a, boolean[] b) {903for (int i = 0; i < a.length-ALIGN_OFF; i+=1) {904a[i+ALIGN_OFF] = b[i];905}906}907static void test_cp_alnsrc(boolean[] a, boolean[] b) {908for (int i = 0; i < a.length-ALIGN_OFF; i+=1) {909a[i] = b[i+ALIGN_OFF];910}911}912static void test_2ci_aln(boolean[] a, boolean[] b) {913for (int i = 0; i < a.length-ALIGN_OFF; i+=1) {914a[i+ALIGN_OFF] = false;915b[i] = false;916}917}918static void test_2vi_aln(boolean[] a, boolean[] b, boolean c, boolean d) {919for (int i = 0; i < a.length-ALIGN_OFF; i+=1) {920a[i] = c;921b[i+ALIGN_OFF] = d;922}923}924static void test_cp_unalndst(boolean[] a, boolean[] b) {925for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) {926a[i+UNALIGN_OFF] = b[i];927}928}929static void test_cp_unalnsrc(boolean[] a, boolean[] b) {930for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) {931a[i] = b[i+UNALIGN_OFF];932}933}934static void test_2ci_unaln(boolean[] a, boolean[] b) {935for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) {936a[i+UNALIGN_OFF] = false;937b[i] = false;938}939}940static void test_2vi_unaln(boolean[] a, boolean[] b, boolean c, boolean d) {941for (int i = 0; i < a.length-UNALIGN_OFF; i+=1) {942a[i] = c;943b[i+UNALIGN_OFF] = d;944}945}946947static int verify(String text, int i, boolean elem, boolean val) {948if (elem != val) {949System.err.println(text + "[" + i + "] = " + elem + " != " + val);950return 1;951}952return 0;953}954}955956957