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