comparison test/compiler/6340864/TestIntVect.java @ 6893:b2c669fd8114

8001183: incorrect results of char vectors right shift operaiton Summary: do vector right shift operation for small int types only after loads Reviewed-by: jrose, dlong
author kvn
date Tue, 23 Oct 2012 13:06:37 -0700
parents 006050192a5a
children
comparison
equal deleted inserted replaced
6892:fd1d564dd460 6893:b2c669fd8114
72 test_addv(a0, a1, (int)VALUE); 72 test_addv(a0, a1, (int)VALUE);
73 test_adda(a0, a1, a2); 73 test_adda(a0, a1, a2);
74 test_subc(a0, a1); 74 test_subc(a0, a1);
75 test_subv(a0, a1, (int)VALUE); 75 test_subv(a0, a1, (int)VALUE);
76 test_suba(a0, a1, a2); 76 test_suba(a0, a1, a2);
77
77 test_mulc(a0, a1); 78 test_mulc(a0, a1);
78 test_mulv(a0, a1, (int)VALUE); 79 test_mulv(a0, a1, (int)VALUE);
79 test_mula(a0, a1, a2); 80 test_mula(a0, a1, a2);
80 test_divc(a0, a1); 81 test_divc(a0, a1);
81 test_divv(a0, a1, (int)VALUE); 82 test_divv(a0, a1, (int)VALUE);
84 test_mulv(a0, a1, (int)-VALUE); 85 test_mulv(a0, a1, (int)-VALUE);
85 test_mula(a0, a1, a3); 86 test_mula(a0, a1, a3);
86 test_divc_n(a0, a1); 87 test_divc_n(a0, a1);
87 test_divv(a0, a1, (int)-VALUE); 88 test_divv(a0, a1, (int)-VALUE);
88 test_diva(a0, a1, a3); 89 test_diva(a0, a1, a3);
90
89 test_andc(a0, a1); 91 test_andc(a0, a1);
90 test_andv(a0, a1, (int)BIT_MASK); 92 test_andv(a0, a1, (int)BIT_MASK);
91 test_anda(a0, a1, a4); 93 test_anda(a0, a1, a4);
92 test_orc(a0, a1); 94 test_orc(a0, a1);
93 test_orv(a0, a1, (int)BIT_MASK); 95 test_orv(a0, a1, (int)BIT_MASK);
94 test_ora(a0, a1, a4); 96 test_ora(a0, a1, a4);
95 test_xorc(a0, a1); 97 test_xorc(a0, a1);
96 test_xorv(a0, a1, (int)BIT_MASK); 98 test_xorv(a0, a1, (int)BIT_MASK);
97 test_xora(a0, a1, a4); 99 test_xora(a0, a1, a4);
100
98 test_sllc(a0, a1); 101 test_sllc(a0, a1);
99 test_sllv(a0, a1, VALUE); 102 test_sllv(a0, a1, VALUE);
100 test_srlc(a0, a1); 103 test_srlc(a0, a1);
101 test_srlv(a0, a1, VALUE); 104 test_srlv(a0, a1, VALUE);
102 test_srac(a0, a1); 105 test_srac(a0, a1);
103 test_srav(a0, a1, VALUE); 106 test_srav(a0, a1, VALUE);
107
104 test_sllc_n(a0, a1); 108 test_sllc_n(a0, a1);
105 test_sllv(a0, a1, -VALUE); 109 test_sllv(a0, a1, -VALUE);
106 test_srlc_n(a0, a1); 110 test_srlc_n(a0, a1);
107 test_srlv(a0, a1, -VALUE); 111 test_srlv(a0, a1, -VALUE);
108 test_srac_n(a0, a1); 112 test_srac_n(a0, a1);
109 test_srav(a0, a1, -VALUE); 113 test_srav(a0, a1, -VALUE);
114
110 test_sllc_o(a0, a1); 115 test_sllc_o(a0, a1);
111 test_sllv(a0, a1, SHIFT); 116 test_sllv(a0, a1, SHIFT);
112 test_srlc_o(a0, a1); 117 test_srlc_o(a0, a1);
113 test_srlv(a0, a1, SHIFT); 118 test_srlv(a0, a1, SHIFT);
114 test_srac_o(a0, a1); 119 test_srac_o(a0, a1);
115 test_srav(a0, a1, SHIFT); 120 test_srav(a0, a1, SHIFT);
121
116 test_sllc_on(a0, a1); 122 test_sllc_on(a0, a1);
117 test_sllv(a0, a1, -SHIFT); 123 test_sllv(a0, a1, -SHIFT);
118 test_srlc_on(a0, a1); 124 test_srlc_on(a0, a1);
119 test_srlv(a0, a1, -SHIFT); 125 test_srlv(a0, a1, -SHIFT);
120 test_srac_on(a0, a1); 126 test_srac_on(a0, a1);
121 test_srav(a0, a1, -SHIFT); 127 test_srav(a0, a1, -SHIFT);
128
129 test_sllc_add(a0, a1);
130 test_sllv_add(a0, a1, ADD_INIT);
131 test_srlc_add(a0, a1);
132 test_srlv_add(a0, a1, ADD_INIT);
133 test_srac_add(a0, a1);
134 test_srav_add(a0, a1, ADD_INIT);
135
136 test_sllc_and(a0, a1);
137 test_sllv_and(a0, a1, BIT_MASK);
138 test_srlc_and(a0, a1);
139 test_srlv_and(a0, a1, BIT_MASK);
140 test_srac_and(a0, a1);
141 test_srav_and(a0, a1, BIT_MASK);
142
122 test_pack2(p2, a1); 143 test_pack2(p2, a1);
123 test_unpack2(a0, p2); 144 test_unpack2(a0, p2);
124 test_pack2_swap(p2, a1); 145 test_pack2_swap(p2, a1);
125 test_unpack2_swap(a0, p2); 146 test_unpack2_swap(a0, p2);
126 } 147 }
357 test_srav(a0, a1, -SHIFT); 378 test_srav(a0, a1, -SHIFT);
358 for (int i=0; i<ARRLEN; i++) { 379 for (int i=0; i<ARRLEN; i++) {
359 errn += verify("test_srav_on: ", i, a0[i], (int)((int)(ADD_INIT+i)>>(-SHIFT))); 380 errn += verify("test_srav_on: ", i, a0[i], (int)((int)(ADD_INIT+i)>>(-SHIFT)));
360 } 381 }
361 382
383 test_sllc_add(a0, a1);
384 for (int i=0; i<ARRLEN; i++) {
385 errn += verify("test_sllc_add: ", i, a0[i], (int)(((int)(ADD_INIT+i) + ADD_INIT)<<VALUE));
386 }
387 test_sllv_add(a0, a1, ADD_INIT);
388 for (int i=0; i<ARRLEN; i++) {
389 errn += verify("test_sllv_add: ", i, a0[i], (int)(((int)(ADD_INIT+i) + ADD_INIT)<<VALUE));
390 }
391
392 test_srlc_add(a0, a1);
393 for (int i=0; i<ARRLEN; i++) {
394 errn += verify("test_srlc_add: ", i, a0[i], (int)(((int)(ADD_INIT+i) + ADD_INIT)>>>VALUE));
395 }
396 test_srlv_add(a0, a1, ADD_INIT);
397 for (int i=0; i<ARRLEN; i++) {
398 errn += verify("test_srlv_add: ", i, a0[i], (int)(((int)(ADD_INIT+i) + ADD_INIT)>>>VALUE));
399 }
400
401 test_srac_add(a0, a1);
402 for (int i=0; i<ARRLEN; i++) {
403 errn += verify("test_srac_add: ", i, a0[i], (int)(((int)(ADD_INIT+i) + ADD_INIT)>>VALUE));
404 }
405 test_srav_add(a0, a1, ADD_INIT);
406 for (int i=0; i<ARRLEN; i++) {
407 errn += verify("test_srav_add: ", i, a0[i], (int)(((int)(ADD_INIT+i) + ADD_INIT)>>VALUE));
408 }
409
410 test_sllc_and(a0, a1);
411 for (int i=0; i<ARRLEN; i++) {
412 errn += verify("test_sllc_and: ", i, a0[i], (int)(((int)(ADD_INIT+i) & BIT_MASK)<<VALUE));
413 }
414 test_sllv_and(a0, a1, BIT_MASK);
415 for (int i=0; i<ARRLEN; i++) {
416 errn += verify("test_sllv_and: ", i, a0[i], (int)(((int)(ADD_INIT+i) & BIT_MASK)<<VALUE));
417 }
418
419 test_srlc_and(a0, a1);
420 for (int i=0; i<ARRLEN; i++) {
421 errn += verify("test_srlc_and: ", i, a0[i], (int)(((int)(ADD_INIT+i) & BIT_MASK)>>>VALUE));
422 }
423 test_srlv_and(a0, a1, BIT_MASK);
424 for (int i=0; i<ARRLEN; i++) {
425 errn += verify("test_srlv_and: ", i, a0[i], (int)(((int)(ADD_INIT+i) & BIT_MASK)>>>VALUE));
426 }
427
428 test_srac_and(a0, a1);
429 for (int i=0; i<ARRLEN; i++) {
430 errn += verify("test_srac_and: ", i, a0[i], (int)(((int)(ADD_INIT+i) & BIT_MASK)>>VALUE));
431 }
432 test_srav_and(a0, a1, BIT_MASK);
433 for (int i=0; i<ARRLEN; i++) {
434 errn += verify("test_srav_and: ", i, a0[i], (int)(((int)(ADD_INIT+i) & BIT_MASK)>>VALUE));
435 }
436
362 test_pack2(p2, a1); 437 test_pack2(p2, a1);
363 for (int i=0; i<ARRLEN/2; i++) { 438 for (int i=0; i<ARRLEN/2; i++) {
364 errn += verify("test_pack2: ", i, p2[i], ((long)(ADD_INIT+2*i) & 0xFFFFFFFFl) | ((long)(ADD_INIT+2*i+1) << 32)); 439 errn += verify("test_pack2: ", i, p2[i], ((long)(ADD_INIT+2*i) & 0xFFFFFFFFl) | ((long)(ADD_INIT+2*i+1) << 32));
365 } 440 }
366 for (int i=0; i<ARRLEN; i++) { 441 for (int i=0; i<ARRLEN; i++) {
722 for (int i=0; i<ITERS; i++) { 797 for (int i=0; i<ITERS; i++) {
723 test_srav(a0, a1, -SHIFT); 798 test_srav(a0, a1, -SHIFT);
724 } 799 }
725 end = System.currentTimeMillis(); 800 end = System.currentTimeMillis();
726 System.out.println("test_srav_on: " + (end - start)); 801 System.out.println("test_srav_on: " + (end - start));
802
803 start = System.currentTimeMillis();
804 for (int i=0; i<ITERS; i++) {
805 test_sllc_add(a0, a1);
806 }
807 end = System.currentTimeMillis();
808 System.out.println("test_sllc_add: " + (end - start));
809 start = System.currentTimeMillis();
810 for (int i=0; i<ITERS; i++) {
811 test_sllv_add(a0, a1, ADD_INIT);
812 }
813 end = System.currentTimeMillis();
814 System.out.println("test_sllv_add: " + (end - start));
815
816 start = System.currentTimeMillis();
817 for (int i=0; i<ITERS; i++) {
818 test_srlc_add(a0, a1);
819 }
820 end = System.currentTimeMillis();
821 System.out.println("test_srlc_add: " + (end - start));
822 start = System.currentTimeMillis();
823 for (int i=0; i<ITERS; i++) {
824 test_srlv_add(a0, a1, ADD_INIT);
825 }
826 end = System.currentTimeMillis();
827 System.out.println("test_srlv_add: " + (end - start));
828
829 start = System.currentTimeMillis();
830 for (int i=0; i<ITERS; i++) {
831 test_srac_add(a0, a1);
832 }
833 end = System.currentTimeMillis();
834 System.out.println("test_srac_add: " + (end - start));
835 start = System.currentTimeMillis();
836 for (int i=0; i<ITERS; i++) {
837 test_srav_add(a0, a1, ADD_INIT);
838 }
839 end = System.currentTimeMillis();
840 System.out.println("test_srav_add: " + (end - start));
841
842 start = System.currentTimeMillis();
843 for (int i=0; i<ITERS; i++) {
844 test_sllc_and(a0, a1);
845 }
846 end = System.currentTimeMillis();
847 System.out.println("test_sllc_and: " + (end - start));
848 start = System.currentTimeMillis();
849 for (int i=0; i<ITERS; i++) {
850 test_sllv_and(a0, a1, BIT_MASK);
851 }
852 end = System.currentTimeMillis();
853 System.out.println("test_sllv_and: " + (end - start));
854
855 start = System.currentTimeMillis();
856 for (int i=0; i<ITERS; i++) {
857 test_srlc_and(a0, a1);
858 }
859 end = System.currentTimeMillis();
860 System.out.println("test_srlc_and: " + (end - start));
861 start = System.currentTimeMillis();
862 for (int i=0; i<ITERS; i++) {
863 test_srlv_and(a0, a1, BIT_MASK);
864 }
865 end = System.currentTimeMillis();
866 System.out.println("test_srlv_and: " + (end - start));
867
868 start = System.currentTimeMillis();
869 for (int i=0; i<ITERS; i++) {
870 test_srac_and(a0, a1);
871 }
872 end = System.currentTimeMillis();
873 System.out.println("test_srac_and: " + (end - start));
874 start = System.currentTimeMillis();
875 for (int i=0; i<ITERS; i++) {
876 test_srav_and(a0, a1, BIT_MASK);
877 }
878 end = System.currentTimeMillis();
879 System.out.println("test_srav_and: " + (end - start));
727 880
728 start = System.currentTimeMillis(); 881 start = System.currentTimeMillis();
729 for (int i=0; i<ITERS; i++) { 882 for (int i=0; i<ITERS; i++) {
730 test_pack2(p2, a1); 883 test_pack2(p2, a1);
731 } 884 }
906 static void test_sllv(int[] a0, int[] a1, int b) { 1059 static void test_sllv(int[] a0, int[] a1, int b) {
907 for (int i = 0; i < a0.length; i+=1) { 1060 for (int i = 0; i < a0.length; i+=1) {
908 a0[i] = (int)(a1[i]<<b); 1061 a0[i] = (int)(a1[i]<<b);
909 } 1062 }
910 } 1063 }
1064 static void test_sllc_add(int[] a0, int[] a1) {
1065 for (int i = 0; i < a0.length; i+=1) {
1066 a0[i] = (int)((a1[i] + ADD_INIT)<<VALUE);
1067 }
1068 }
1069 static void test_sllv_add(int[] a0, int[] a1, int b) {
1070 for (int i = 0; i < a0.length; i+=1) {
1071 a0[i] = (int)((a1[i] + b)<<VALUE);
1072 }
1073 }
1074 static void test_sllc_and(int[] a0, int[] a1) {
1075 for (int i = 0; i < a0.length; i+=1) {
1076 a0[i] = (int)((a1[i] & BIT_MASK)<<VALUE);
1077 }
1078 }
1079 static void test_sllv_and(int[] a0, int[] a1, int b) {
1080 for (int i = 0; i < a0.length; i+=1) {
1081 a0[i] = (int)((a1[i] & b)<<VALUE);
1082 }
1083 }
911 1084
912 static void test_srlc(int[] a0, int[] a1) { 1085 static void test_srlc(int[] a0, int[] a1) {
913 for (int i = 0; i < a0.length; i+=1) { 1086 for (int i = 0; i < a0.length; i+=1) {
914 a0[i] = (int)(a1[i]>>>VALUE); 1087 a0[i] = (int)(a1[i]>>>VALUE);
915 } 1088 }
932 static void test_srlv(int[] a0, int[] a1, int b) { 1105 static void test_srlv(int[] a0, int[] a1, int b) {
933 for (int i = 0; i < a0.length; i+=1) { 1106 for (int i = 0; i < a0.length; i+=1) {
934 a0[i] = (int)(a1[i]>>>b); 1107 a0[i] = (int)(a1[i]>>>b);
935 } 1108 }
936 } 1109 }
1110 static void test_srlc_add(int[] a0, int[] a1) {
1111 for (int i = 0; i < a0.length; i+=1) {
1112 a0[i] = (int)((a1[i] + ADD_INIT)>>>VALUE);
1113 }
1114 }
1115 static void test_srlv_add(int[] a0, int[] a1, int b) {
1116 for (int i = 0; i < a0.length; i+=1) {
1117 a0[i] = (int)((a1[i] + b)>>>VALUE);
1118 }
1119 }
1120 static void test_srlc_and(int[] a0, int[] a1) {
1121 for (int i = 0; i < a0.length; i+=1) {
1122 a0[i] = (int)((a1[i] & BIT_MASK)>>>VALUE);
1123 }
1124 }
1125 static void test_srlv_and(int[] a0, int[] a1, int b) {
1126 for (int i = 0; i < a0.length; i+=1) {
1127 a0[i] = (int)((a1[i] & b)>>>VALUE);
1128 }
1129 }
937 1130
938 static void test_srac(int[] a0, int[] a1) { 1131 static void test_srac(int[] a0, int[] a1) {
939 for (int i = 0; i < a0.length; i+=1) { 1132 for (int i = 0; i < a0.length; i+=1) {
940 a0[i] = (int)(a1[i]>>VALUE); 1133 a0[i] = (int)(a1[i]>>VALUE);
941 } 1134 }
956 } 1149 }
957 } 1150 }
958 static void test_srav(int[] a0, int[] a1, int b) { 1151 static void test_srav(int[] a0, int[] a1, int b) {
959 for (int i = 0; i < a0.length; i+=1) { 1152 for (int i = 0; i < a0.length; i+=1) {
960 a0[i] = (int)(a1[i]>>b); 1153 a0[i] = (int)(a1[i]>>b);
1154 }
1155 }
1156 static void test_srac_add(int[] a0, int[] a1) {
1157 for (int i = 0; i < a0.length; i+=1) {
1158 a0[i] = (int)((a1[i] + ADD_INIT)>>VALUE);
1159 }
1160 }
1161 static void test_srav_add(int[] a0, int[] a1, int b) {
1162 for (int i = 0; i < a0.length; i+=1) {
1163 a0[i] = (int)((a1[i] + b)>>VALUE);
1164 }
1165 }
1166 static void test_srac_and(int[] a0, int[] a1) {
1167 for (int i = 0; i < a0.length; i+=1) {
1168 a0[i] = (int)((a1[i] & BIT_MASK)>>VALUE);
1169 }
1170 }
1171 static void test_srav_and(int[] a0, int[] a1, int b) {
1172 for (int i = 0; i < a0.length; i+=1) {
1173 a0[i] = (int)((a1[i] & b)>>VALUE);
961 } 1174 }
962 } 1175 }
963 1176
964 static void test_pack2(long[] p2, int[] a1) { 1177 static void test_pack2(long[] p2, int[] a1) {
965 if (p2.length*2 > a1.length) return; 1178 if (p2.length*2 > a1.length) return;