Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: test/cctest/wasm/test-run-wasm-simd.cc

Issue 2795143003: MIPS[64]: Support for some SIMD operations (5) (Closed)
Patch Set: Fix x64 build error Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/compiler/mips64/instruction-selector-mips64.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/assembler-inl.h" 5 #include "src/assembler-inl.h"
6 #include "test/cctest/cctest.h" 6 #include "test/cctest/cctest.h"
7 #include "test/cctest/compiler/value-helper.h" 7 #include "test/cctest/compiler/value-helper.h"
8 #include "test/cctest/wasm/wasm-run-utils.h" 8 #include "test/cctest/wasm/wasm-run-utils.h"
9 #include "test/common/wasm/wasm-macro-gen.h" 9 #include "test/common/wasm/wasm-macro-gen.h"
10 10
(...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 WASM_GET_LOCAL(new_val))), 653 WASM_GET_LOCAL(new_val))),
654 WASM_SIMD_CHECK4(I32x4, simd, I32, new_val, new_val, new_val, old_val), 654 WASM_SIMD_CHECK4(I32x4, simd, I32, new_val, new_val, new_val, old_val),
655 WASM_SET_LOCAL(simd, 655 WASM_SET_LOCAL(simd,
656 WASM_SIMD_I32x4_REPLACE_LANE(3, WASM_GET_LOCAL(simd), 656 WASM_SIMD_I32x4_REPLACE_LANE(3, WASM_GET_LOCAL(simd),
657 WASM_GET_LOCAL(new_val))), 657 WASM_GET_LOCAL(new_val))),
658 WASM_SIMD_CHECK_SPLAT4(I32x4, simd, I32, new_val), WASM_ONE); 658 WASM_SIMD_CHECK_SPLAT4(I32x4, simd, I32, new_val), WASM_ONE);
659 659
660 CHECK_EQ(1, r.Call(1, 2)); 660 CHECK_EQ(1, r.Call(1, 2));
661 } 661 }
662 662
663 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET 663 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET || \
664 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
664 WASM_EXEC_COMPILED_TEST(I16x8Splat) { 665 WASM_EXEC_COMPILED_TEST(I16x8Splat) {
665 FLAG_wasm_simd_prototype = true; 666 FLAG_wasm_simd_prototype = true;
666 667
667 WasmRunner<int32_t, int32_t> r(kExecuteCompiled); 668 WasmRunner<int32_t, int32_t> r(kExecuteCompiled);
668 byte lane_val = 0; 669 byte lane_val = 0;
669 byte simd = r.AllocateLocal(kWasmS128); 670 byte simd = r.AllocateLocal(kWasmS128);
670 BUILD(r, 671 BUILD(r,
671 WASM_SET_LOCAL(simd, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(lane_val))), 672 WASM_SET_LOCAL(simd, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(lane_val))),
672 WASM_SIMD_CHECK_SPLAT8(I16x8, simd, I32, lane_val), WASM_ONE); 673 WASM_SIMD_CHECK_SPLAT8(I16x8, simd, I32, lane_val), WASM_ONE);
673 674
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 WASM_GET_LOCAL(new_val))), 717 WASM_GET_LOCAL(new_val))),
717 WASM_SIMD_CHECK8(I16x8, simd, I32, new_val, new_val, new_val, new_val, 718 WASM_SIMD_CHECK8(I16x8, simd, I32, new_val, new_val, new_val, new_val,
718 new_val, new_val, new_val, old_val), 719 new_val, new_val, new_val, old_val),
719 WASM_SET_LOCAL(simd, 720 WASM_SET_LOCAL(simd,
720 WASM_SIMD_I16x8_REPLACE_LANE(7, WASM_GET_LOCAL(simd), 721 WASM_SIMD_I16x8_REPLACE_LANE(7, WASM_GET_LOCAL(simd),
721 WASM_GET_LOCAL(new_val))), 722 WASM_GET_LOCAL(new_val))),
722 WASM_SIMD_CHECK_SPLAT8(I16x8, simd, I32, new_val), WASM_ONE); 723 WASM_SIMD_CHECK_SPLAT8(I16x8, simd, I32, new_val), WASM_ONE);
723 724
724 CHECK_EQ(1, r.Call(1, 2)); 725 CHECK_EQ(1, r.Call(1, 2));
725 } 726 }
726 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET 727 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET ||
728 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
727 729
728 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 730 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64
729 WASM_EXEC_COMPILED_TEST(I8x16Splat) { 731 WASM_EXEC_COMPILED_TEST(I8x16Splat) {
730 FLAG_wasm_simd_prototype = true; 732 FLAG_wasm_simd_prototype = true;
731 733
732 WasmRunner<int32_t, int32_t> r(kExecuteCompiled); 734 WasmRunner<int32_t, int32_t> r(kExecuteCompiled);
733 byte lane_val = 0; 735 byte lane_val = 0;
734 byte simd = r.AllocateLocal(kWasmS128); 736 byte simd = r.AllocateLocal(kWasmS128);
735 BUILD(r, 737 BUILD(r,
736 WASM_SET_LOCAL(simd, WASM_SIMD_I8x16_SPLAT(WASM_GET_LOCAL(lane_val))), 738 WASM_SET_LOCAL(simd, WASM_SIMD_I8x16_SPLAT(WASM_GET_LOCAL(lane_val))),
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 WASM_SIMD_CHECK_SPLAT4(I32x4, simd2, I32, unpacked_unsigned), WASM_ONE); 937 WASM_SIMD_CHECK_SPLAT4(I32x4, simd2, I32, unpacked_unsigned), WASM_ONE);
936 938
937 FOR_INT16_INPUTS(i) { 939 FOR_INT16_INPUTS(i) {
938 int32_t unpacked_signed = Widen<int16_t>(*i); 940 int32_t unpacked_signed = Widen<int16_t>(*i);
939 int32_t unpacked_unsigned = UnsignedWiden<int16_t>(*i); 941 int32_t unpacked_unsigned = UnsignedWiden<int16_t>(*i);
940 CHECK_EQ(1, r.Call(*i, unpacked_signed, unpacked_unsigned)); 942 CHECK_EQ(1, r.Call(*i, unpacked_signed, unpacked_unsigned));
941 } 943 }
942 } 944 }
943 #endif // V8_TARGET_ARCH_ARM 945 #endif // V8_TARGET_ARCH_ARM
944 946
945 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET 947 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || \
948 V8_TARGET_ARCH_MIPS64
946 void RunI32x4UnOpTest(WasmOpcode simd_op, Int32UnOp expected_op) { 949 void RunI32x4UnOpTest(WasmOpcode simd_op, Int32UnOp expected_op) {
947 FLAG_wasm_simd_prototype = true; 950 FLAG_wasm_simd_prototype = true;
948 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 951 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
949 byte a = 0; 952 byte a = 0;
950 byte expected = 1; 953 byte expected = 1;
951 byte simd = r.AllocateLocal(kWasmS128); 954 byte simd = r.AllocateLocal(kWasmS128);
952 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))), 955 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I32x4_SPLAT(WASM_GET_LOCAL(a))),
953 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))), 956 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))),
954 WASM_SIMD_CHECK_SPLAT4(I32x4, simd, I32, expected), WASM_ONE); 957 WASM_SIMD_CHECK_SPLAT4(I32x4, simd, I32, expected), WASM_ONE);
955 958
956 FOR_INT32_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i))); } 959 FOR_INT32_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i))); }
957 } 960 }
958 961
959 WASM_EXEC_COMPILED_TEST(I32x4Neg) { RunI32x4UnOpTest(kExprI32x4Neg, Negate); } 962 WASM_EXEC_COMPILED_TEST(I32x4Neg) { RunI32x4UnOpTest(kExprI32x4Neg, Negate); }
963 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS ||
964 // V8_TARGET_ARCH_MIPS64
960 965
966 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
961 WASM_EXEC_COMPILED_TEST(S128Not) { RunI32x4UnOpTest(kExprS128Not, Not); } 967 WASM_EXEC_COMPILED_TEST(S128Not) { RunI32x4UnOpTest(kExprS128Not, Not); }
962 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET 968 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
963 969
964 void RunI32x4BinOpTest(WasmOpcode simd_op, Int32BinOp expected_op) { 970 void RunI32x4BinOpTest(WasmOpcode simd_op, Int32BinOp expected_op) {
965 FLAG_wasm_simd_prototype = true; 971 FLAG_wasm_simd_prototype = true;
966 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled); 972 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled);
967 byte a = 0; 973 byte a = 0;
968 byte b = 1; 974 byte b = 1;
969 byte expected = 2; 975 byte expected = 2;
970 byte simd0 = r.AllocateLocal(kWasmS128); 976 byte simd0 = r.AllocateLocal(kWasmS128);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1038 } 1044 }
1039 1045
1040 WASM_EXEC_COMPILED_TEST(I32x4Eq) { RunI32x4CompareOpTest(kExprI32x4Eq, Equal); } 1046 WASM_EXEC_COMPILED_TEST(I32x4Eq) { RunI32x4CompareOpTest(kExprI32x4Eq, Equal); }
1041 1047
1042 WASM_EXEC_COMPILED_TEST(I32x4Ne) { 1048 WASM_EXEC_COMPILED_TEST(I32x4Ne) {
1043 RunI32x4CompareOpTest(kExprI32x4Ne, NotEqual); 1049 RunI32x4CompareOpTest(kExprI32x4Ne, NotEqual);
1044 } 1050 }
1045 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET || 1051 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET ||
1046 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 1052 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1047 1053
1048 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET 1054 #if V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS || \
1055 V8_TARGET_ARCH_MIPS64
1049 WASM_EXEC_COMPILED_TEST(I32x4LtS) { 1056 WASM_EXEC_COMPILED_TEST(I32x4LtS) {
1050 RunI32x4CompareOpTest(kExprI32x4LtS, Less); 1057 RunI32x4CompareOpTest(kExprI32x4LtS, Less);
1051 } 1058 }
1052 1059
1053 WASM_EXEC_COMPILED_TEST(I32x4LeS) { 1060 WASM_EXEC_COMPILED_TEST(I32x4LeS) {
1054 RunI32x4CompareOpTest(kExprI32x4LeS, LessEqual); 1061 RunI32x4CompareOpTest(kExprI32x4LeS, LessEqual);
1055 } 1062 }
1056 1063
1057 WASM_EXEC_COMPILED_TEST(I32x4GtS) { 1064 WASM_EXEC_COMPILED_TEST(I32x4GtS) {
1058 RunI32x4CompareOpTest(kExprI32x4GtS, Greater); 1065 RunI32x4CompareOpTest(kExprI32x4GtS, Greater);
(...skipping 11 matching lines...) Expand all
1070 RunI32x4CompareOpTest(kExprI32x4LeU, UnsignedLessEqual); 1077 RunI32x4CompareOpTest(kExprI32x4LeU, UnsignedLessEqual);
1071 } 1078 }
1072 1079
1073 WASM_EXEC_COMPILED_TEST(I32x4GtU) { 1080 WASM_EXEC_COMPILED_TEST(I32x4GtU) {
1074 RunI32x4CompareOpTest(kExprI32x4GtU, UnsignedGreater); 1081 RunI32x4CompareOpTest(kExprI32x4GtU, UnsignedGreater);
1075 } 1082 }
1076 1083
1077 WASM_EXEC_COMPILED_TEST(I32x4GeU) { 1084 WASM_EXEC_COMPILED_TEST(I32x4GeU) {
1078 RunI32x4CompareOpTest(kExprI32x4GeU, UnsignedGreaterEqual); 1085 RunI32x4CompareOpTest(kExprI32x4GeU, UnsignedGreaterEqual);
1079 } 1086 }
1080 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET 1087 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_MIPS ||
1088 // V8_TARGET_ARCH_MIPS64
1081 1089
1082 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET || \ 1090 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET || \
1083 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64 1091 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1084 void RunI32x4ShiftOpTest(WasmOpcode simd_op, Int32ShiftOp expected_op, 1092 void RunI32x4ShiftOpTest(WasmOpcode simd_op, Int32ShiftOp expected_op,
1085 int shift) { 1093 int shift) {
1086 FLAG_wasm_simd_prototype = true; 1094 FLAG_wasm_simd_prototype = true;
1087 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 1095 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
1088 byte a = 0; 1096 byte a = 0;
1089 byte expected = 1; 1097 byte expected = 1;
1090 byte simd = r.AllocateLocal(kWasmS128); 1098 byte simd = r.AllocateLocal(kWasmS128);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1128 WASM_SET_LOCAL(simd2, WASM_SIMD_UNOP(kExprI16x8UConvertI8x16High, 1136 WASM_SET_LOCAL(simd2, WASM_SIMD_UNOP(kExprI16x8UConvertI8x16High,
1129 WASM_GET_LOCAL(simd0))), 1137 WASM_GET_LOCAL(simd0))),
1130 WASM_SIMD_CHECK_SPLAT8(I16x8, simd2, I32, unpacked_unsigned), WASM_ONE); 1138 WASM_SIMD_CHECK_SPLAT8(I16x8, simd2, I32, unpacked_unsigned), WASM_ONE);
1131 1139
1132 FOR_INT8_INPUTS(i) { 1140 FOR_INT8_INPUTS(i) {
1133 int32_t unpacked_signed = Widen<int8_t>(*i); 1141 int32_t unpacked_signed = Widen<int8_t>(*i);
1134 int32_t unpacked_unsigned = UnsignedWiden<int8_t>(*i); 1142 int32_t unpacked_unsigned = UnsignedWiden<int8_t>(*i);
1135 CHECK_EQ(1, r.Call(*i, unpacked_signed, unpacked_unsigned)); 1143 CHECK_EQ(1, r.Call(*i, unpacked_signed, unpacked_unsigned));
1136 } 1144 }
1137 } 1145 }
1146 #endif // V8_TARGET_ARCH_ARM
1138 1147
1148 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1139 void RunI16x8UnOpTest(WasmOpcode simd_op, Int16UnOp expected_op) { 1149 void RunI16x8UnOpTest(WasmOpcode simd_op, Int16UnOp expected_op) {
1140 FLAG_wasm_simd_prototype = true; 1150 FLAG_wasm_simd_prototype = true;
1141 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 1151 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
1142 byte a = 0; 1152 byte a = 0;
1143 byte expected = 1; 1153 byte expected = 1;
1144 byte simd = r.AllocateLocal(kWasmS128); 1154 byte simd = r.AllocateLocal(kWasmS128);
1145 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(a))), 1155 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(a))),
1146 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))), 1156 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))),
1147 WASM_SIMD_CHECK_SPLAT8(I16x8, simd, I32, expected), WASM_ONE); 1157 WASM_SIMD_CHECK_SPLAT8(I16x8, simd, I32, expected), WASM_ONE);
1148 1158
1149 FOR_INT16_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i))); } 1159 FOR_INT16_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i))); }
1150 } 1160 }
1151 1161
1152 WASM_EXEC_COMPILED_TEST(I16x8Neg) { RunI16x8UnOpTest(kExprI16x8Neg, Negate); } 1162 WASM_EXEC_COMPILED_TEST(I16x8Neg) { RunI16x8UnOpTest(kExprI16x8Neg, Negate); }
1163 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1153 1164
1165 #if V8_TARGET_ARCH_ARM
1154 // Tests both signed and unsigned conversion from I32x4 (packing). 1166 // Tests both signed and unsigned conversion from I32x4 (packing).
1155 WASM_EXEC_COMPILED_TEST(I16x8ConvertI32x4) { 1167 WASM_EXEC_COMPILED_TEST(I16x8ConvertI32x4) {
1156 FLAG_wasm_simd_prototype = true; 1168 FLAG_wasm_simd_prototype = true;
1157 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled); 1169 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled);
1158 byte a = 0; 1170 byte a = 0;
1159 byte packed_signed = 1; 1171 byte packed_signed = 1;
1160 byte packed_unsigned = 2; 1172 byte packed_unsigned = 2;
1161 byte simd0 = r.AllocateLocal(kWasmS128); 1173 byte simd0 = r.AllocateLocal(kWasmS128);
1162 byte simd1 = r.AllocateLocal(kWasmS128); 1174 byte simd1 = r.AllocateLocal(kWasmS128);
1163 byte simd2 = r.AllocateLocal(kWasmS128); 1175 byte simd2 = r.AllocateLocal(kWasmS128);
(...skipping 10 matching lines...) Expand all
1174 FOR_INT32_INPUTS(i) { 1186 FOR_INT32_INPUTS(i) {
1175 int32_t packed_signed = Narrow<int16_t>(*i); 1187 int32_t packed_signed = Narrow<int16_t>(*i);
1176 int32_t packed_unsigned = UnsignedNarrow<int16_t>(*i); 1188 int32_t packed_unsigned = UnsignedNarrow<int16_t>(*i);
1177 // Sign-extend here, since ExtractLane sign extends. 1189 // Sign-extend here, since ExtractLane sign extends.
1178 if (packed_unsigned & 0x8000) packed_unsigned |= 0xffff0000; 1190 if (packed_unsigned & 0x8000) packed_unsigned |= 0xffff0000;
1179 CHECK_EQ(1, r.Call(*i, packed_signed, packed_unsigned)); 1191 CHECK_EQ(1, r.Call(*i, packed_signed, packed_unsigned));
1180 } 1192 }
1181 } 1193 }
1182 #endif // V8_TARGET_ARCH_ARM 1194 #endif // V8_TARGET_ARCH_ARM
1183 1195
1184 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET 1196 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET || \
1197 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1185 void RunI16x8BinOpTest(WasmOpcode simd_op, Int16BinOp expected_op) { 1198 void RunI16x8BinOpTest(WasmOpcode simd_op, Int16BinOp expected_op) {
1186 FLAG_wasm_simd_prototype = true; 1199 FLAG_wasm_simd_prototype = true;
1187 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled); 1200 WasmRunner<int32_t, int32_t, int32_t, int32_t> r(kExecuteCompiled);
1188 byte a = 0; 1201 byte a = 0;
1189 byte b = 1; 1202 byte b = 1;
1190 byte expected = 2; 1203 byte expected = 2;
1191 byte simd0 = r.AllocateLocal(kWasmS128); 1204 byte simd0 = r.AllocateLocal(kWasmS128);
1192 byte simd1 = r.AllocateLocal(kWasmS128); 1205 byte simd1 = r.AllocateLocal(kWasmS128);
1193 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(a))), 1206 BUILD(r, WASM_SET_LOCAL(simd0, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(a))),
1194 WASM_SET_LOCAL(simd1, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(b))), 1207 WASM_SET_LOCAL(simd1, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(b))),
(...skipping 10 matching lines...) Expand all
1205 1218
1206 WASM_EXEC_COMPILED_TEST(I16x8AddSaturateS) { 1219 WASM_EXEC_COMPILED_TEST(I16x8AddSaturateS) {
1207 RunI16x8BinOpTest(kExprI16x8AddSaturateS, AddSaturate); 1220 RunI16x8BinOpTest(kExprI16x8AddSaturateS, AddSaturate);
1208 } 1221 }
1209 1222
1210 WASM_EXEC_COMPILED_TEST(I16x8Sub) { RunI16x8BinOpTest(kExprI16x8Sub, Sub); } 1223 WASM_EXEC_COMPILED_TEST(I16x8Sub) { RunI16x8BinOpTest(kExprI16x8Sub, Sub); }
1211 1224
1212 WASM_EXEC_COMPILED_TEST(I16x8SubSaturateS) { 1225 WASM_EXEC_COMPILED_TEST(I16x8SubSaturateS) {
1213 RunI16x8BinOpTest(kExprI16x8SubSaturateS, SubSaturate); 1226 RunI16x8BinOpTest(kExprI16x8SubSaturateS, SubSaturate);
1214 } 1227 }
1228 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET ||
1229 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1215 1230
1231 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET
1216 WASM_EXEC_COMPILED_TEST(I16x8Mul) { RunI16x8BinOpTest(kExprI16x8Mul, Mul); } 1232 WASM_EXEC_COMPILED_TEST(I16x8Mul) { RunI16x8BinOpTest(kExprI16x8Mul, Mul); }
1217 1233
1218 WASM_EXEC_COMPILED_TEST(I16x8MinS) { 1234 WASM_EXEC_COMPILED_TEST(I16x8MinS) {
1219 RunI16x8BinOpTest(kExprI16x8MinS, Minimum); 1235 RunI16x8BinOpTest(kExprI16x8MinS, Minimum);
1220 } 1236 }
1221 1237
1222 WASM_EXEC_COMPILED_TEST(I16x8MaxS) { 1238 WASM_EXEC_COMPILED_TEST(I16x8MaxS) {
1223 RunI16x8BinOpTest(kExprI16x8MaxS, Maximum); 1239 RunI16x8BinOpTest(kExprI16x8MaxS, Maximum);
1224 } 1240 }
1225 1241
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1294 1310
1295 WASM_EXEC_COMPILED_TEST(I16x8LtU) { 1311 WASM_EXEC_COMPILED_TEST(I16x8LtU) {
1296 RunI16x8CompareOpTest(kExprI16x8LtU, UnsignedLess); 1312 RunI16x8CompareOpTest(kExprI16x8LtU, UnsignedLess);
1297 } 1313 }
1298 1314
1299 WASM_EXEC_COMPILED_TEST(I16x8LeU) { 1315 WASM_EXEC_COMPILED_TEST(I16x8LeU) {
1300 RunI16x8CompareOpTest(kExprI16x8LeU, UnsignedLessEqual); 1316 RunI16x8CompareOpTest(kExprI16x8LeU, UnsignedLessEqual);
1301 } 1317 }
1302 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET 1318 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET
1303 1319
1304 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET 1320 #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET || \
1321 V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1305 void RunI16x8ShiftOpTest(WasmOpcode simd_op, Int16ShiftOp expected_op, 1322 void RunI16x8ShiftOpTest(WasmOpcode simd_op, Int16ShiftOp expected_op,
1306 int shift) { 1323 int shift) {
1307 FLAG_wasm_simd_prototype = true; 1324 FLAG_wasm_simd_prototype = true;
1308 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 1325 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
1309 byte a = 0; 1326 byte a = 0;
1310 byte expected = 1; 1327 byte expected = 1;
1311 byte simd = r.AllocateLocal(kWasmS128); 1328 byte simd = r.AllocateLocal(kWasmS128);
1312 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(a))), 1329 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I16x8_SPLAT(WASM_GET_LOCAL(a))),
1313 WASM_SET_LOCAL( 1330 WASM_SET_LOCAL(
1314 simd, WASM_SIMD_SHIFT_OP(simd_op, shift, WASM_GET_LOCAL(simd))), 1331 simd, WASM_SIMD_SHIFT_OP(simd_op, shift, WASM_GET_LOCAL(simd))),
1315 WASM_SIMD_CHECK_SPLAT8(I16x8, simd, I32, expected), WASM_ONE); 1332 WASM_SIMD_CHECK_SPLAT8(I16x8, simd, I32, expected), WASM_ONE);
1316 1333
1317 FOR_INT16_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i, shift))); } 1334 FOR_INT16_INPUTS(i) { CHECK_EQ(1, r.Call(*i, expected_op(*i, shift))); }
1318 } 1335 }
1319 1336
1320 WASM_EXEC_COMPILED_TEST(I16x8Shl) { 1337 WASM_EXEC_COMPILED_TEST(I16x8Shl) {
1321 RunI16x8ShiftOpTest(kExprI16x8Shl, LogicalShiftLeft, 1); 1338 RunI16x8ShiftOpTest(kExprI16x8Shl, LogicalShiftLeft, 1);
1322 } 1339 }
1323 1340
1324 WASM_EXEC_COMPILED_TEST(I16x8ShrS) { 1341 WASM_EXEC_COMPILED_TEST(I16x8ShrS) {
1325 RunI16x8ShiftOpTest(kExprI16x8ShrS, ArithmeticShiftRight, 1); 1342 RunI16x8ShiftOpTest(kExprI16x8ShrS, ArithmeticShiftRight, 1);
1326 } 1343 }
1327 1344
1328 WASM_EXEC_COMPILED_TEST(I16x8ShrU) { 1345 WASM_EXEC_COMPILED_TEST(I16x8ShrU) {
1329 RunI16x8ShiftOpTest(kExprI16x8ShrU, LogicalShiftRight, 1); 1346 RunI16x8ShiftOpTest(kExprI16x8ShrU, LogicalShiftRight, 1);
1330 } 1347 }
1331 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET 1348 #endif // V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_X64 || SIMD_LOWERING_TARGET ||
1349 // V8_TARGET_ARCH_MIPS || V8_TARGET_ARCH_MIPS64
1332 1350
1333 #if V8_TARGET_ARCH_ARM 1351 #if V8_TARGET_ARCH_ARM
1334 void RunI8x16UnOpTest(WasmOpcode simd_op, Int8UnOp expected_op) { 1352 void RunI8x16UnOpTest(WasmOpcode simd_op, Int8UnOp expected_op) {
1335 FLAG_wasm_simd_prototype = true; 1353 FLAG_wasm_simd_prototype = true;
1336 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled); 1354 WasmRunner<int32_t, int32_t, int32_t> r(kExecuteCompiled);
1337 byte a = 0; 1355 byte a = 0;
1338 byte expected = 1; 1356 byte expected = 1;
1339 byte simd = r.AllocateLocal(kWasmS128); 1357 byte simd = r.AllocateLocal(kWasmS128);
1340 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I8x16_SPLAT(WASM_GET_LOCAL(a))), 1358 BUILD(r, WASM_SET_LOCAL(simd, WASM_SIMD_I8x16_SPLAT(WASM_GET_LOCAL(a))),
1341 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))), 1359 WASM_SET_LOCAL(simd, WASM_SIMD_UNOP(simd_op, WASM_GET_LOCAL(simd))),
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after
2223 WASM_SIMD_I32x4_EXTRACT_LANE( 2241 WASM_SIMD_I32x4_EXTRACT_LANE(
2224 0, WASM_LOAD_MEM(MachineType::Simd128(), WASM_ZERO))); 2242 0, WASM_LOAD_MEM(MachineType::Simd128(), WASM_ZERO)));
2225 2243
2226 FOR_INT32_INPUTS(i) { 2244 FOR_INT32_INPUTS(i) {
2227 int32_t expected = *i; 2245 int32_t expected = *i;
2228 r.module().WriteMemory(&memory[0], expected); 2246 r.module().WriteMemory(&memory[0], expected);
2229 CHECK_EQ(expected, r.Call()); 2247 CHECK_EQ(expected, r.Call());
2230 } 2248 }
2231 } 2249 }
2232 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_X64 2250 #endif // V8_TARGET_ARCH_ARM || SIMD_LOWERING_TARGET || V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/compiler/mips64/instruction-selector-mips64.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698