test/compiler/6340864/TestFloatVect.java

Wed, 21 May 2014 10:56:41 -0700

author
katleman
date
Wed, 21 May 2014 10:56:41 -0700
changeset 6672
fb9d124d9192
parent 0
f90c822e73f8
permissions
-rw-r--r--

Added tag jdk8u20-b15 for changeset 8c785f9bde6f

aoqi@0 1 /*
aoqi@0 2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
aoqi@0 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@0 4 *
aoqi@0 5 * This code is free software; you can redistribute it and/or modify it
aoqi@0 6 * under the terms of the GNU General Public License version 2 only, as
aoqi@0 7 * published by the Free Software Foundation.
aoqi@0 8 *
aoqi@0 9 * This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@0 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@0 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@0 12 * version 2 for more details (a copy is included in the LICENSE file that
aoqi@0 13 * accompanied this code).
aoqi@0 14 *
aoqi@0 15 * You should have received a copy of the GNU General Public License version
aoqi@0 16 * 2 along with this work; if not, write to the Free Software Foundation,
aoqi@0 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@0 18 *
aoqi@0 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@0 20 * or visit www.oracle.com if you need additional information or have any
aoqi@0 21 * questions.
aoqi@0 22 *
aoqi@0 23 */
aoqi@0 24
aoqi@0 25 /**
aoqi@0 26 * @test
aoqi@0 27 * @bug 6340864
aoqi@0 28 * @summary Implement vectorization optimizations in hotspot-server
aoqi@0 29 *
aoqi@0 30 * @run main/othervm/timeout=400 -Xbatch -Xmx64m TestFloatVect
aoqi@0 31 */
aoqi@0 32
aoqi@0 33 public class TestFloatVect {
aoqi@0 34 private static final int ARRLEN = 997;
aoqi@0 35 private static final int ITERS = 11000;
aoqi@0 36 private static final float ADD_INIT = -7500.f;
aoqi@0 37 private static final float VALUE = 15.f;
aoqi@0 38
aoqi@0 39 public static void main(String args[]) {
aoqi@0 40 System.out.println("Testing Float vectors");
aoqi@0 41 int errn = test();
aoqi@0 42 if (errn > 0) {
aoqi@0 43 System.err.println("FAILED: " + errn + " errors");
aoqi@0 44 System.exit(97);
aoqi@0 45 }
aoqi@0 46 System.out.println("PASSED");
aoqi@0 47 }
aoqi@0 48
aoqi@0 49 static int test() {
aoqi@0 50 float[] a0 = new float[ARRLEN];
aoqi@0 51 float[] a1 = new float[ARRLEN];
aoqi@0 52 float[] a2 = new float[ARRLEN];
aoqi@0 53 float[] a3 = new float[ARRLEN];
aoqi@0 54 // Initialize
aoqi@0 55 float gold_sum = 0;
aoqi@0 56 for (int i=0; i<ARRLEN; i++) {
aoqi@0 57 float val = ADD_INIT+(float)i;
aoqi@0 58 gold_sum += val;
aoqi@0 59 a1[i] = val;
aoqi@0 60 a2[i] = VALUE;
aoqi@0 61 a3[i] = -VALUE;
aoqi@0 62 }
aoqi@0 63
aoqi@0 64 System.out.println("Warmup");
aoqi@0 65 for (int i=0; i<ITERS; i++) {
aoqi@0 66 test_sum(a1);
aoqi@0 67 test_addc(a0, a1);
aoqi@0 68 test_addv(a0, a1, VALUE);
aoqi@0 69 test_adda(a0, a1, a2);
aoqi@0 70 test_subc(a0, a1);
aoqi@0 71 test_subv(a0, a1, VALUE);
aoqi@0 72 test_suba(a0, a1, a2);
aoqi@0 73 test_mulc(a0, a1);
aoqi@0 74 test_mulv(a0, a1, VALUE);
aoqi@0 75 test_mula(a0, a1, a2);
aoqi@0 76 test_divc(a0, a1);
aoqi@0 77 test_divv(a0, a1, VALUE);
aoqi@0 78 test_diva(a0, a1, a2);
aoqi@0 79 test_mulc_n(a0, a1);
aoqi@0 80 test_mulv(a0, a1, -VALUE);
aoqi@0 81 test_mula(a0, a1, a3);
aoqi@0 82 test_divc_n(a0, a1);
aoqi@0 83 test_divv(a0, a1, -VALUE);
aoqi@0 84 test_diva(a0, a1, a3);
aoqi@0 85 }
aoqi@0 86 // Test and verify results
aoqi@0 87 System.out.println("Verification");
aoqi@0 88 int errn = 0;
aoqi@0 89 {
aoqi@0 90 float sum = test_sum(a1);
aoqi@0 91 if (sum != gold_sum) {
aoqi@0 92 System.err.println("test_sum: " + sum + " != " + gold_sum);
aoqi@0 93 errn++;
aoqi@0 94 }
aoqi@0 95 // Overwrite with NaN values
aoqi@0 96 a1[0] = Float.NaN;
aoqi@0 97 a1[1] = Float.POSITIVE_INFINITY;
aoqi@0 98 a1[2] = Float.NEGATIVE_INFINITY;
aoqi@0 99 a1[3] = Float.MAX_VALUE;
aoqi@0 100 a1[4] = Float.MIN_VALUE;
aoqi@0 101 a1[5] = Float.MIN_NORMAL;
aoqi@0 102
aoqi@0 103 a2[6] = a1[0];
aoqi@0 104 a2[7] = a1[1];
aoqi@0 105 a2[8] = a1[2];
aoqi@0 106 a2[9] = a1[3];
aoqi@0 107 a2[10] = a1[4];
aoqi@0 108 a2[11] = a1[5];
aoqi@0 109
aoqi@0 110 a3[6] = -a2[6];
aoqi@0 111 a3[7] = -a2[7];
aoqi@0 112 a3[8] = -a2[8];
aoqi@0 113 a3[9] = -a2[9];
aoqi@0 114 a3[10] = -a2[10];
aoqi@0 115 a3[11] = -a2[11];
aoqi@0 116
aoqi@0 117 test_addc(a0, a1);
aoqi@0 118 errn += verify("test_addc: ", 0, a0[0], (Float.NaN+VALUE));
aoqi@0 119 errn += verify("test_addc: ", 1, a0[1], (Float.POSITIVE_INFINITY+VALUE));
aoqi@0 120 errn += verify("test_addc: ", 2, a0[2], (Float.NEGATIVE_INFINITY+VALUE));
aoqi@0 121 errn += verify("test_addc: ", 3, a0[3], (Float.MAX_VALUE+VALUE));
aoqi@0 122 errn += verify("test_addc: ", 4, a0[4], (Float.MIN_VALUE+VALUE));
aoqi@0 123 errn += verify("test_addc: ", 5, a0[5], (Float.MIN_NORMAL+VALUE));
aoqi@0 124 for (int i=6; i<ARRLEN; i++) {
aoqi@0 125 errn += verify("test_addc: ", i, a0[i], ((ADD_INIT+i)+VALUE));
aoqi@0 126 }
aoqi@0 127 test_addv(a0, a1, VALUE);
aoqi@0 128 errn += verify("test_addv: ", 0, a0[0], (Float.NaN+VALUE));
aoqi@0 129 errn += verify("test_addv: ", 1, a0[1], (Float.POSITIVE_INFINITY+VALUE));
aoqi@0 130 errn += verify("test_addv: ", 2, a0[2], (Float.NEGATIVE_INFINITY+VALUE));
aoqi@0 131 errn += verify("test_addv: ", 3, a0[3], (Float.MAX_VALUE+VALUE));
aoqi@0 132 errn += verify("test_addv: ", 4, a0[4], (Float.MIN_VALUE+VALUE));
aoqi@0 133 errn += verify("test_addv: ", 5, a0[5], (Float.MIN_NORMAL+VALUE));
aoqi@0 134 for (int i=6; i<ARRLEN; i++) {
aoqi@0 135 errn += verify("test_addv: ", i, a0[i], ((ADD_INIT+i)+VALUE));
aoqi@0 136 }
aoqi@0 137 test_adda(a0, a1, a2);
aoqi@0 138 errn += verify("test_adda: ", 0, a0[0], (Float.NaN+VALUE));
aoqi@0 139 errn += verify("test_adda: ", 1, a0[1], (Float.POSITIVE_INFINITY+VALUE));
aoqi@0 140 errn += verify("test_adda: ", 2, a0[2], (Float.NEGATIVE_INFINITY+VALUE));
aoqi@0 141 errn += verify("test_adda: ", 3, a0[3], (Float.MAX_VALUE+VALUE));
aoqi@0 142 errn += verify("test_adda: ", 4, a0[4], (Float.MIN_VALUE+VALUE));
aoqi@0 143 errn += verify("test_adda: ", 5, a0[5], (Float.MIN_NORMAL+VALUE));
aoqi@0 144 errn += verify("test_adda: ", 6, a0[6], ((ADD_INIT+6)+Float.NaN));
aoqi@0 145 errn += verify("test_adda: ", 7, a0[7], ((ADD_INIT+7)+Float.POSITIVE_INFINITY));
aoqi@0 146 errn += verify("test_adda: ", 8, a0[8], ((ADD_INIT+8)+Float.NEGATIVE_INFINITY));
aoqi@0 147 errn += verify("test_adda: ", 9, a0[9], ((ADD_INIT+9)+Float.MAX_VALUE));
aoqi@0 148 errn += verify("test_adda: ", 10, a0[10], ((ADD_INIT+10)+Float.MIN_VALUE));
aoqi@0 149 errn += verify("test_adda: ", 11, a0[11], ((ADD_INIT+11)+Float.MIN_NORMAL));
aoqi@0 150 for (int i=12; i<ARRLEN; i++) {
aoqi@0 151 errn += verify("test_adda: ", i, a0[i], ((ADD_INIT+i)+VALUE));
aoqi@0 152 }
aoqi@0 153
aoqi@0 154 test_subc(a0, a1);
aoqi@0 155 errn += verify("test_subc: ", 0, a0[0], (Float.NaN-VALUE));
aoqi@0 156 errn += verify("test_subc: ", 1, a0[1], (Float.POSITIVE_INFINITY-VALUE));
aoqi@0 157 errn += verify("test_subc: ", 2, a0[2], (Float.NEGATIVE_INFINITY-VALUE));
aoqi@0 158 errn += verify("test_subc: ", 3, a0[3], (Float.MAX_VALUE-VALUE));
aoqi@0 159 errn += verify("test_subc: ", 4, a0[4], (Float.MIN_VALUE-VALUE));
aoqi@0 160 errn += verify("test_subc: ", 5, a0[5], (Float.MIN_NORMAL-VALUE));
aoqi@0 161 for (int i=6; i<ARRLEN; i++) {
aoqi@0 162 errn += verify("test_subc: ", i, a0[i], ((ADD_INIT+i)-VALUE));
aoqi@0 163 }
aoqi@0 164 test_subv(a0, a1, VALUE);
aoqi@0 165 errn += verify("test_subv: ", 0, a0[0], (Float.NaN-VALUE));
aoqi@0 166 errn += verify("test_subv: ", 1, a0[1], (Float.POSITIVE_INFINITY-VALUE));
aoqi@0 167 errn += verify("test_subv: ", 2, a0[2], (Float.NEGATIVE_INFINITY-VALUE));
aoqi@0 168 errn += verify("test_subv: ", 3, a0[3], (Float.MAX_VALUE-VALUE));
aoqi@0 169 errn += verify("test_subv: ", 4, a0[4], (Float.MIN_VALUE-VALUE));
aoqi@0 170 errn += verify("test_subv: ", 5, a0[5], (Float.MIN_NORMAL-VALUE));
aoqi@0 171 for (int i=6; i<ARRLEN; i++) {
aoqi@0 172 errn += verify("test_subv: ", i, a0[i], ((ADD_INIT+i)-VALUE));
aoqi@0 173 }
aoqi@0 174 test_suba(a0, a1, a2);
aoqi@0 175 errn += verify("test_suba: ", 0, a0[0], (Float.NaN-VALUE));
aoqi@0 176 errn += verify("test_suba: ", 1, a0[1], (Float.POSITIVE_INFINITY-VALUE));
aoqi@0 177 errn += verify("test_suba: ", 2, a0[2], (Float.NEGATIVE_INFINITY-VALUE));
aoqi@0 178 errn += verify("test_suba: ", 3, a0[3], (Float.MAX_VALUE-VALUE));
aoqi@0 179 errn += verify("test_suba: ", 4, a0[4], (Float.MIN_VALUE-VALUE));
aoqi@0 180 errn += verify("test_suba: ", 5, a0[5], (Float.MIN_NORMAL-VALUE));
aoqi@0 181 errn += verify("test_suba: ", 6, a0[6], ((ADD_INIT+6)-Float.NaN));
aoqi@0 182 errn += verify("test_suba: ", 7, a0[7], ((ADD_INIT+7)-Float.POSITIVE_INFINITY));
aoqi@0 183 errn += verify("test_suba: ", 8, a0[8], ((ADD_INIT+8)-Float.NEGATIVE_INFINITY));
aoqi@0 184 errn += verify("test_suba: ", 9, a0[9], ((ADD_INIT+9)-Float.MAX_VALUE));
aoqi@0 185 errn += verify("test_suba: ", 10, a0[10], ((ADD_INIT+10)-Float.MIN_VALUE));
aoqi@0 186 errn += verify("test_suba: ", 11, a0[11], ((ADD_INIT+11)-Float.MIN_NORMAL));
aoqi@0 187 for (int i=12; i<ARRLEN; i++) {
aoqi@0 188 errn += verify("test_suba: ", i, a0[i], ((ADD_INIT+i)-VALUE));
aoqi@0 189 }
aoqi@0 190
aoqi@0 191 test_mulc(a0, a1);
aoqi@0 192 errn += verify("test_mulc: ", 0, a0[0], (Float.NaN*VALUE));
aoqi@0 193 errn += verify("test_mulc: ", 1, a0[1], (Float.POSITIVE_INFINITY*VALUE));
aoqi@0 194 errn += verify("test_mulc: ", 2, a0[2], (Float.NEGATIVE_INFINITY*VALUE));
aoqi@0 195 errn += verify("test_mulc: ", 3, a0[3], (Float.MAX_VALUE*VALUE));
aoqi@0 196 errn += verify("test_mulc: ", 4, a0[4], (Float.MIN_VALUE*VALUE));
aoqi@0 197 errn += verify("test_mulc: ", 5, a0[5], (Float.MIN_NORMAL*VALUE));
aoqi@0 198 for (int i=6; i<ARRLEN; i++) {
aoqi@0 199 errn += verify("test_mulc: ", i, a0[i], ((ADD_INIT+i)*VALUE));
aoqi@0 200 }
aoqi@0 201 test_mulv(a0, a1, VALUE);
aoqi@0 202 errn += verify("test_mulv: ", 0, a0[0], (Float.NaN*VALUE));
aoqi@0 203 errn += verify("test_mulv: ", 1, a0[1], (Float.POSITIVE_INFINITY*VALUE));
aoqi@0 204 errn += verify("test_mulv: ", 2, a0[2], (Float.NEGATIVE_INFINITY*VALUE));
aoqi@0 205 errn += verify("test_mulv: ", 3, a0[3], (Float.MAX_VALUE*VALUE));
aoqi@0 206 errn += verify("test_mulv: ", 4, a0[4], (Float.MIN_VALUE*VALUE));
aoqi@0 207 errn += verify("test_mulv: ", 5, a0[5], (Float.MIN_NORMAL*VALUE));
aoqi@0 208 for (int i=6; i<ARRLEN; i++) {
aoqi@0 209 errn += verify("test_mulv: ", i, a0[i], ((ADD_INIT+i)*VALUE));
aoqi@0 210 }
aoqi@0 211 test_mula(a0, a1, a2);
aoqi@0 212 errn += verify("test_mula: ", 0, a0[0], (Float.NaN*VALUE));
aoqi@0 213 errn += verify("test_mula: ", 1, a0[1], (Float.POSITIVE_INFINITY*VALUE));
aoqi@0 214 errn += verify("test_mula: ", 2, a0[2], (Float.NEGATIVE_INFINITY*VALUE));
aoqi@0 215 errn += verify("test_mula: ", 3, a0[3], (Float.MAX_VALUE*VALUE));
aoqi@0 216 errn += verify("test_mula: ", 4, a0[4], (Float.MIN_VALUE*VALUE));
aoqi@0 217 errn += verify("test_mula: ", 5, a0[5], (Float.MIN_NORMAL*VALUE));
aoqi@0 218 errn += verify("test_mula: ", 6, a0[6], ((ADD_INIT+6)*Float.NaN));
aoqi@0 219 errn += verify("test_mula: ", 7, a0[7], ((ADD_INIT+7)*Float.POSITIVE_INFINITY));
aoqi@0 220 errn += verify("test_mula: ", 8, a0[8], ((ADD_INIT+8)*Float.NEGATIVE_INFINITY));
aoqi@0 221 errn += verify("test_mula: ", 9, a0[9], ((ADD_INIT+9)*Float.MAX_VALUE));
aoqi@0 222 errn += verify("test_mula: ", 10, a0[10], ((ADD_INIT+10)*Float.MIN_VALUE));
aoqi@0 223 errn += verify("test_mula: ", 11, a0[11], ((ADD_INIT+11)*Float.MIN_NORMAL));
aoqi@0 224 for (int i=12; i<ARRLEN; i++) {
aoqi@0 225 errn += verify("test_mula: ", i, a0[i], ((ADD_INIT+i)*VALUE));
aoqi@0 226 }
aoqi@0 227
aoqi@0 228 test_divc(a0, a1);
aoqi@0 229 errn += verify("test_divc: ", 0, a0[0], (Float.NaN/VALUE));
aoqi@0 230 errn += verify("test_divc: ", 1, a0[1], (Float.POSITIVE_INFINITY/VALUE));
aoqi@0 231 errn += verify("test_divc: ", 2, a0[2], (Float.NEGATIVE_INFINITY/VALUE));
aoqi@0 232 errn += verify("test_divc: ", 3, a0[3], (Float.MAX_VALUE/VALUE));
aoqi@0 233 errn += verify("test_divc: ", 4, a0[4], (Float.MIN_VALUE/VALUE));
aoqi@0 234 errn += verify("test_divc: ", 5, a0[5], (Float.MIN_NORMAL/VALUE));
aoqi@0 235 for (int i=6; i<ARRLEN; i++) {
aoqi@0 236 errn += verify("test_divc: ", i, a0[i], ((ADD_INIT+i)/VALUE));
aoqi@0 237 }
aoqi@0 238 test_divv(a0, a1, VALUE);
aoqi@0 239 errn += verify("test_divv: ", 0, a0[0], (Float.NaN/VALUE));
aoqi@0 240 errn += verify("test_divv: ", 1, a0[1], (Float.POSITIVE_INFINITY/VALUE));
aoqi@0 241 errn += verify("test_divv: ", 2, a0[2], (Float.NEGATIVE_INFINITY/VALUE));
aoqi@0 242 errn += verify("test_divv: ", 3, a0[3], (Float.MAX_VALUE/VALUE));
aoqi@0 243 errn += verify("test_divv: ", 4, a0[4], (Float.MIN_VALUE/VALUE));
aoqi@0 244 errn += verify("test_divv: ", 5, a0[5], (Float.MIN_NORMAL/VALUE));
aoqi@0 245 for (int i=6; i<ARRLEN; i++) {
aoqi@0 246 errn += verify("test_divv: ", i, a0[i], ((ADD_INIT+i)/VALUE));
aoqi@0 247 }
aoqi@0 248 test_diva(a0, a1, a2);
aoqi@0 249 errn += verify("test_diva: ", 0, a0[0], (Float.NaN/VALUE));
aoqi@0 250 errn += verify("test_diva: ", 1, a0[1], (Float.POSITIVE_INFINITY/VALUE));
aoqi@0 251 errn += verify("test_diva: ", 2, a0[2], (Float.NEGATIVE_INFINITY/VALUE));
aoqi@0 252 errn += verify("test_diva: ", 3, a0[3], (Float.MAX_VALUE/VALUE));
aoqi@0 253 errn += verify("test_diva: ", 4, a0[4], (Float.MIN_VALUE/VALUE));
aoqi@0 254 errn += verify("test_diva: ", 5, a0[5], (Float.MIN_NORMAL/VALUE));
aoqi@0 255 errn += verify("test_diva: ", 6, a0[6], ((ADD_INIT+6)/Float.NaN));
aoqi@0 256 errn += verify("test_diva: ", 7, a0[7], ((ADD_INIT+7)/Float.POSITIVE_INFINITY));
aoqi@0 257 errn += verify("test_diva: ", 8, a0[8], ((ADD_INIT+8)/Float.NEGATIVE_INFINITY));
aoqi@0 258 errn += verify("test_diva: ", 9, a0[9], ((ADD_INIT+9)/Float.MAX_VALUE));
aoqi@0 259 errn += verify("test_diva: ", 10, a0[10], ((ADD_INIT+10)/Float.MIN_VALUE));
aoqi@0 260 errn += verify("test_diva: ", 11, a0[11], ((ADD_INIT+11)/Float.MIN_NORMAL));
aoqi@0 261 for (int i=12; i<ARRLEN; i++) {
aoqi@0 262 errn += verify("test_diva: ", i, a0[i], ((ADD_INIT+i)/VALUE));
aoqi@0 263 }
aoqi@0 264
aoqi@0 265 test_mulc_n(a0, a1);
aoqi@0 266 errn += verify("test_mulc_n: ", 0, a0[0], (Float.NaN*(-VALUE)));
aoqi@0 267 errn += verify("test_mulc_n: ", 1, a0[1], (Float.POSITIVE_INFINITY*(-VALUE)));
aoqi@0 268 errn += verify("test_mulc_n: ", 2, a0[2], (Float.NEGATIVE_INFINITY*(-VALUE)));
aoqi@0 269 errn += verify("test_mulc_n: ", 3, a0[3], (Float.MAX_VALUE*(-VALUE)));
aoqi@0 270 errn += verify("test_mulc_n: ", 4, a0[4], (Float.MIN_VALUE*(-VALUE)));
aoqi@0 271 errn += verify("test_mulc_n: ", 5, a0[5], (Float.MIN_NORMAL*(-VALUE)));
aoqi@0 272 for (int i=6; i<ARRLEN; i++) {
aoqi@0 273 errn += verify("test_mulc_n: ", i, a0[i], ((ADD_INIT+i)*(-VALUE)));
aoqi@0 274 }
aoqi@0 275 test_mulv(a0, a1, -VALUE);
aoqi@0 276 errn += verify("test_mulv_n: ", 0, a0[0], (Float.NaN*(-VALUE)));
aoqi@0 277 errn += verify("test_mulv_n: ", 1, a0[1], (Float.POSITIVE_INFINITY*(-VALUE)));
aoqi@0 278 errn += verify("test_mulv_n: ", 2, a0[2], (Float.NEGATIVE_INFINITY*(-VALUE)));
aoqi@0 279 errn += verify("test_mulv_n: ", 3, a0[3], (Float.MAX_VALUE*(-VALUE)));
aoqi@0 280 errn += verify("test_mulv_n: ", 4, a0[4], (Float.MIN_VALUE*(-VALUE)));
aoqi@0 281 errn += verify("test_mulv_n: ", 5, a0[5], (Float.MIN_NORMAL*(-VALUE)));
aoqi@0 282 for (int i=6; i<ARRLEN; i++) {
aoqi@0 283 errn += verify("test_mulv_n: ", i, a0[i], ((ADD_INIT+i)*(-VALUE)));
aoqi@0 284 }
aoqi@0 285 test_mula(a0, a1, a3);
aoqi@0 286 errn += verify("test_mula_n: ", 0, a0[0], (Float.NaN*(-VALUE)));
aoqi@0 287 errn += verify("test_mula_n: ", 1, a0[1], (Float.POSITIVE_INFINITY*(-VALUE)));
aoqi@0 288 errn += verify("test_mula_n: ", 2, a0[2], (Float.NEGATIVE_INFINITY*(-VALUE)));
aoqi@0 289 errn += verify("test_mula_n: ", 3, a0[3], (Float.MAX_VALUE*(-VALUE)));
aoqi@0 290 errn += verify("test_mula_n: ", 4, a0[4], (Float.MIN_VALUE*(-VALUE)));
aoqi@0 291 errn += verify("test_mula_n: ", 5, a0[5], (Float.MIN_NORMAL*(-VALUE)));
aoqi@0 292 errn += verify("test_mula_n: ", 6, a0[6], ((ADD_INIT+6)*(-Float.NaN)));
aoqi@0 293 errn += verify("test_mula_n: ", 7, a0[7], ((ADD_INIT+7)*(-Float.POSITIVE_INFINITY)));
aoqi@0 294 errn += verify("test_mula_n: ", 8, a0[8], ((ADD_INIT+8)*(-Float.NEGATIVE_INFINITY)));
aoqi@0 295 errn += verify("test_mula_n: ", 9, a0[9], ((ADD_INIT+9)*(-Float.MAX_VALUE)));
aoqi@0 296 errn += verify("test_mula_n: ", 10, a0[10], ((ADD_INIT+10)*(-Float.MIN_VALUE)));
aoqi@0 297 errn += verify("test_mula_n: ", 11, a0[11], ((ADD_INIT+11)*(-Float.MIN_NORMAL)));
aoqi@0 298 for (int i=12; i<ARRLEN; i++) {
aoqi@0 299 errn += verify("test_mula_n: ", i, a0[i], ((ADD_INIT+i)*(-VALUE)));
aoqi@0 300 }
aoqi@0 301
aoqi@0 302 test_divc_n(a0, a1);
aoqi@0 303 errn += verify("test_divc_n: ", 0, a0[0], (Float.NaN/(-VALUE)));
aoqi@0 304 errn += verify("test_divc_n: ", 1, a0[1], (Float.POSITIVE_INFINITY/(-VALUE)));
aoqi@0 305 errn += verify("test_divc_n: ", 2, a0[2], (Float.NEGATIVE_INFINITY/(-VALUE)));
aoqi@0 306 errn += verify("test_divc_n: ", 3, a0[3], (Float.MAX_VALUE/(-VALUE)));
aoqi@0 307 errn += verify("test_divc_n: ", 4, a0[4], (Float.MIN_VALUE/(-VALUE)));
aoqi@0 308 errn += verify("test_divc_n: ", 5, a0[5], (Float.MIN_NORMAL/(-VALUE)));
aoqi@0 309 for (int i=6; i<ARRLEN; i++) {
aoqi@0 310 errn += verify("test_divc_n: ", i, a0[i], ((ADD_INIT+i)/(-VALUE)));
aoqi@0 311 }
aoqi@0 312 test_divv(a0, a1, -VALUE);
aoqi@0 313 errn += verify("test_divv_n: ", 0, a0[0], (Float.NaN/(-VALUE)));
aoqi@0 314 errn += verify("test_divv_n: ", 1, a0[1], (Float.POSITIVE_INFINITY/(-VALUE)));
aoqi@0 315 errn += verify("test_divv_n: ", 2, a0[2], (Float.NEGATIVE_INFINITY/(-VALUE)));
aoqi@0 316 errn += verify("test_divv_n: ", 3, a0[3], (Float.MAX_VALUE/(-VALUE)));
aoqi@0 317 errn += verify("test_divv_n: ", 4, a0[4], (Float.MIN_VALUE/(-VALUE)));
aoqi@0 318 errn += verify("test_divv_n: ", 5, a0[5], (Float.MIN_NORMAL/(-VALUE)));
aoqi@0 319 for (int i=6; i<ARRLEN; i++) {
aoqi@0 320 errn += verify("test_divv_n: ", i, a0[i], ((ADD_INIT+i)/(-VALUE)));
aoqi@0 321 }
aoqi@0 322 test_diva(a0, a1, a3);
aoqi@0 323 errn += verify("test_diva_n: ", 0, a0[0], (Float.NaN/(-VALUE)));
aoqi@0 324 errn += verify("test_diva_n: ", 1, a0[1], (Float.POSITIVE_INFINITY/(-VALUE)));
aoqi@0 325 errn += verify("test_diva_n: ", 2, a0[2], (Float.NEGATIVE_INFINITY/(-VALUE)));
aoqi@0 326 errn += verify("test_diva_n: ", 3, a0[3], (Float.MAX_VALUE/(-VALUE)));
aoqi@0 327 errn += verify("test_diva_n: ", 4, a0[4], (Float.MIN_VALUE/(-VALUE)));
aoqi@0 328 errn += verify("test_diva_n: ", 5, a0[5], (Float.MIN_NORMAL/(-VALUE)));
aoqi@0 329 errn += verify("test_diva_n: ", 6, a0[6], ((ADD_INIT+6)/(-Float.NaN)));
aoqi@0 330 errn += verify("test_diva_n: ", 7, a0[7], ((ADD_INIT+7)/(-Float.POSITIVE_INFINITY)));
aoqi@0 331 errn += verify("test_diva_n: ", 8, a0[8], ((ADD_INIT+8)/(-Float.NEGATIVE_INFINITY)));
aoqi@0 332 errn += verify("test_diva_n: ", 9, a0[9], ((ADD_INIT+9)/(-Float.MAX_VALUE)));
aoqi@0 333 errn += verify("test_diva_n: ", 10, a0[10], ((ADD_INIT+10)/(-Float.MIN_VALUE)));
aoqi@0 334 errn += verify("test_diva_n: ", 11, a0[11], ((ADD_INIT+11)/(-Float.MIN_NORMAL)));
aoqi@0 335 for (int i=12; i<ARRLEN; i++) {
aoqi@0 336 errn += verify("test_diva_n: ", i, a0[i], ((ADD_INIT+i)/(-VALUE)));
aoqi@0 337 }
aoqi@0 338
aoqi@0 339 }
aoqi@0 340
aoqi@0 341 if (errn > 0)
aoqi@0 342 return errn;
aoqi@0 343
aoqi@0 344 System.out.println("Time");
aoqi@0 345 long start, end;
aoqi@0 346
aoqi@0 347 start = System.currentTimeMillis();
aoqi@0 348 for (int i=0; i<ITERS; i++) {
aoqi@0 349 test_sum(a1);
aoqi@0 350 }
aoqi@0 351 end = System.currentTimeMillis();
aoqi@0 352 System.out.println("test_sum: " + (end - start));
aoqi@0 353
aoqi@0 354 start = System.currentTimeMillis();
aoqi@0 355 for (int i=0; i<ITERS; i++) {
aoqi@0 356 test_addc(a0, a1);
aoqi@0 357 }
aoqi@0 358 end = System.currentTimeMillis();
aoqi@0 359 System.out.println("test_addc: " + (end - start));
aoqi@0 360 start = System.currentTimeMillis();
aoqi@0 361 for (int i=0; i<ITERS; i++) {
aoqi@0 362 test_addv(a0, a1, VALUE);
aoqi@0 363 }
aoqi@0 364 end = System.currentTimeMillis();
aoqi@0 365 System.out.println("test_addv: " + (end - start));
aoqi@0 366 start = System.currentTimeMillis();
aoqi@0 367 for (int i=0; i<ITERS; i++) {
aoqi@0 368 test_adda(a0, a1, a2);
aoqi@0 369 }
aoqi@0 370 end = System.currentTimeMillis();
aoqi@0 371 System.out.println("test_adda: " + (end - start));
aoqi@0 372
aoqi@0 373 start = System.currentTimeMillis();
aoqi@0 374 for (int i=0; i<ITERS; i++) {
aoqi@0 375 test_subc(a0, a1);
aoqi@0 376 }
aoqi@0 377 end = System.currentTimeMillis();
aoqi@0 378 System.out.println("test_subc: " + (end - start));
aoqi@0 379 start = System.currentTimeMillis();
aoqi@0 380 for (int i=0; i<ITERS; i++) {
aoqi@0 381 test_subv(a0, a1, VALUE);
aoqi@0 382 }
aoqi@0 383 end = System.currentTimeMillis();
aoqi@0 384 System.out.println("test_subv: " + (end - start));
aoqi@0 385 start = System.currentTimeMillis();
aoqi@0 386 for (int i=0; i<ITERS; i++) {
aoqi@0 387 test_suba(a0, a1, a2);
aoqi@0 388 }
aoqi@0 389 end = System.currentTimeMillis();
aoqi@0 390 System.out.println("test_suba: " + (end - start));
aoqi@0 391
aoqi@0 392 start = System.currentTimeMillis();
aoqi@0 393 for (int i=0; i<ITERS; i++) {
aoqi@0 394 test_mulc(a0, a1);
aoqi@0 395 }
aoqi@0 396 end = System.currentTimeMillis();
aoqi@0 397 System.out.println("test_mulc: " + (end - start));
aoqi@0 398 start = System.currentTimeMillis();
aoqi@0 399 for (int i=0; i<ITERS; i++) {
aoqi@0 400 test_mulv(a0, a1, VALUE);
aoqi@0 401 }
aoqi@0 402 end = System.currentTimeMillis();
aoqi@0 403 System.out.println("test_mulv: " + (end - start));
aoqi@0 404 start = System.currentTimeMillis();
aoqi@0 405 for (int i=0; i<ITERS; i++) {
aoqi@0 406 test_mula(a0, a1, a2);
aoqi@0 407 }
aoqi@0 408 end = System.currentTimeMillis();
aoqi@0 409 System.out.println("test_mula: " + (end - start));
aoqi@0 410
aoqi@0 411 start = System.currentTimeMillis();
aoqi@0 412 for (int i=0; i<ITERS; i++) {
aoqi@0 413 test_divc(a0, a1);
aoqi@0 414 }
aoqi@0 415 end = System.currentTimeMillis();
aoqi@0 416 System.out.println("test_divc: " + (end - start));
aoqi@0 417 start = System.currentTimeMillis();
aoqi@0 418 for (int i=0; i<ITERS; i++) {
aoqi@0 419 test_divv(a0, a1, VALUE);
aoqi@0 420 }
aoqi@0 421 end = System.currentTimeMillis();
aoqi@0 422 System.out.println("test_divv: " + (end - start));
aoqi@0 423 start = System.currentTimeMillis();
aoqi@0 424 for (int i=0; i<ITERS; i++) {
aoqi@0 425 test_diva(a0, a1, a2);
aoqi@0 426 }
aoqi@0 427 end = System.currentTimeMillis();
aoqi@0 428 System.out.println("test_diva: " + (end - start));
aoqi@0 429
aoqi@0 430 start = System.currentTimeMillis();
aoqi@0 431 for (int i=0; i<ITERS; i++) {
aoqi@0 432 test_mulc_n(a0, a1);
aoqi@0 433 }
aoqi@0 434 end = System.currentTimeMillis();
aoqi@0 435 System.out.println("test_mulc_n: " + (end - start));
aoqi@0 436 start = System.currentTimeMillis();
aoqi@0 437 for (int i=0; i<ITERS; i++) {
aoqi@0 438 test_mulv(a0, a1, -VALUE);
aoqi@0 439 }
aoqi@0 440 end = System.currentTimeMillis();
aoqi@0 441 System.out.println("test_mulv_n: " + (end - start));
aoqi@0 442 start = System.currentTimeMillis();
aoqi@0 443 for (int i=0; i<ITERS; i++) {
aoqi@0 444 test_mula(a0, a1, a3);
aoqi@0 445 }
aoqi@0 446 end = System.currentTimeMillis();
aoqi@0 447 System.out.println("test_mula_n: " + (end - start));
aoqi@0 448
aoqi@0 449 start = System.currentTimeMillis();
aoqi@0 450 for (int i=0; i<ITERS; i++) {
aoqi@0 451 test_divc_n(a0, a1);
aoqi@0 452 }
aoqi@0 453 end = System.currentTimeMillis();
aoqi@0 454 System.out.println("test_divc_n: " + (end - start));
aoqi@0 455 start = System.currentTimeMillis();
aoqi@0 456 for (int i=0; i<ITERS; i++) {
aoqi@0 457 test_divv(a0, a1, -VALUE);
aoqi@0 458 }
aoqi@0 459 end = System.currentTimeMillis();
aoqi@0 460 System.out.println("test_divv_n: " + (end - start));
aoqi@0 461 start = System.currentTimeMillis();
aoqi@0 462 for (int i=0; i<ITERS; i++) {
aoqi@0 463 test_diva(a0, a1, a3);
aoqi@0 464 }
aoqi@0 465 end = System.currentTimeMillis();
aoqi@0 466 System.out.println("test_diva_n: " + (end - start));
aoqi@0 467
aoqi@0 468 return errn;
aoqi@0 469 }
aoqi@0 470
aoqi@0 471 static float test_sum(float[] a1) {
aoqi@0 472 float sum = 0;
aoqi@0 473 for (int i = 0; i < a1.length; i+=1) {
aoqi@0 474 sum += a1[i];
aoqi@0 475 }
aoqi@0 476 return sum;
aoqi@0 477 }
aoqi@0 478
aoqi@0 479 static void test_addc(float[] a0, float[] a1) {
aoqi@0 480 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 481 a0[i] = (a1[i]+VALUE);
aoqi@0 482 }
aoqi@0 483 }
aoqi@0 484 static void test_addv(float[] a0, float[] a1, float b) {
aoqi@0 485 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 486 a0[i] = (a1[i]+b);
aoqi@0 487 }
aoqi@0 488 }
aoqi@0 489 static void test_adda(float[] a0, float[] a1, float[] a2) {
aoqi@0 490 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 491 a0[i] = (a1[i]+a2[i]);
aoqi@0 492 }
aoqi@0 493 }
aoqi@0 494
aoqi@0 495 static void test_subc(float[] a0, float[] a1) {
aoqi@0 496 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 497 a0[i] = (a1[i]-VALUE);
aoqi@0 498 }
aoqi@0 499 }
aoqi@0 500 static void test_subv(float[] a0, float[] a1, float b) {
aoqi@0 501 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 502 a0[i] = (a1[i]-b);
aoqi@0 503 }
aoqi@0 504 }
aoqi@0 505 static void test_suba(float[] a0, float[] a1, float[] a2) {
aoqi@0 506 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 507 a0[i] = (a1[i]-a2[i]);
aoqi@0 508 }
aoqi@0 509 }
aoqi@0 510
aoqi@0 511 static void test_mulc(float[] a0, float[] a1) {
aoqi@0 512 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 513 a0[i] = (a1[i]*VALUE);
aoqi@0 514 }
aoqi@0 515 }
aoqi@0 516 static void test_mulc_n(float[] a0, float[] a1) {
aoqi@0 517 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 518 a0[i] = (a1[i]*(-VALUE));
aoqi@0 519 }
aoqi@0 520 }
aoqi@0 521 static void test_mulv(float[] a0, float[] a1, float b) {
aoqi@0 522 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 523 a0[i] = (a1[i]*b);
aoqi@0 524 }
aoqi@0 525 }
aoqi@0 526 static void test_mula(float[] a0, float[] a1, float[] a2) {
aoqi@0 527 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 528 a0[i] = (a1[i]*a2[i]);
aoqi@0 529 }
aoqi@0 530 }
aoqi@0 531
aoqi@0 532 static void test_divc(float[] a0, float[] a1) {
aoqi@0 533 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 534 a0[i] = (a1[i]/VALUE);
aoqi@0 535 }
aoqi@0 536 }
aoqi@0 537 static void test_divc_n(float[] a0, float[] a1) {
aoqi@0 538 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 539 a0[i] = (a1[i]/(-VALUE));
aoqi@0 540 }
aoqi@0 541 }
aoqi@0 542 static void test_divv(float[] a0, float[] a1, float b) {
aoqi@0 543 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 544 a0[i] = (a1[i]/b);
aoqi@0 545 }
aoqi@0 546 }
aoqi@0 547 static void test_diva(float[] a0, float[] a1, float[] a2) {
aoqi@0 548 for (int i = 0; i < a0.length; i+=1) {
aoqi@0 549 a0[i] = (a1[i]/a2[i]);
aoqi@0 550 }
aoqi@0 551 }
aoqi@0 552
aoqi@0 553 static int verify(String text, int i, float elem, float val) {
aoqi@0 554 if (elem != val && !(Float.isNaN(elem) && Float.isNaN(val))) {
aoqi@0 555 System.err.println(text + "[" + i + "] = " + elem + " != " + val);
aoqi@0 556 return 1;
aoqi@0 557 }
aoqi@0 558 return 0;
aoqi@0 559 }
aoqi@0 560 }

mercurial