Mercurial > hg > truffle
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; |