OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/base/adapters.h" | 5 #include "src/base/adapters.h" |
6 #include "src/base/bits.h" | 6 #include "src/base/bits.h" |
7 #include "src/compiler/instruction-selector-impl.h" | 7 #include "src/compiler/instruction-selector-impl.h" |
8 #include "src/compiler/node-matchers.h" | 8 #include "src/compiler/node-matchers.h" |
9 #include "src/compiler/node-properties.h" | 9 #include "src/compiler/node-properties.h" |
10 | 10 |
(...skipping 2172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2183 V(Float32x4NotEqual) \ | 2183 V(Float32x4NotEqual) \ |
2184 V(Int32x4Add) \ | 2184 V(Int32x4Add) \ |
2185 V(Int32x4Sub) \ | 2185 V(Int32x4Sub) \ |
2186 V(Int32x4Mul) \ | 2186 V(Int32x4Mul) \ |
2187 V(Int32x4Min) \ | 2187 V(Int32x4Min) \ |
2188 V(Int32x4Max) \ | 2188 V(Int32x4Max) \ |
2189 V(Int32x4Equal) \ | 2189 V(Int32x4Equal) \ |
2190 V(Int32x4NotEqual) \ | 2190 V(Int32x4NotEqual) \ |
2191 V(Int32x4GreaterThan) \ | 2191 V(Int32x4GreaterThan) \ |
2192 V(Int32x4GreaterThanOrEqual) \ | 2192 V(Int32x4GreaterThanOrEqual) \ |
| 2193 V(Uint32x4Min) \ |
| 2194 V(Uint32x4Max) \ |
2193 V(Uint32x4GreaterThan) \ | 2195 V(Uint32x4GreaterThan) \ |
2194 V(Uint32x4GreaterThanOrEqual) \ | 2196 V(Uint32x4GreaterThanOrEqual) \ |
2195 V(Int16x8Add) \ | 2197 V(Int16x8Add) \ |
| 2198 V(Int16x8AddSaturate) \ |
2196 V(Int16x8Sub) \ | 2199 V(Int16x8Sub) \ |
| 2200 V(Int16x8SubSaturate) \ |
2197 V(Int16x8Mul) \ | 2201 V(Int16x8Mul) \ |
2198 V(Int16x8Min) \ | 2202 V(Int16x8Min) \ |
2199 V(Int16x8Max) \ | 2203 V(Int16x8Max) \ |
2200 V(Int16x8Equal) \ | 2204 V(Int16x8Equal) \ |
2201 V(Int16x8NotEqual) \ | 2205 V(Int16x8NotEqual) \ |
2202 V(Int16x8GreaterThan) \ | 2206 V(Int16x8GreaterThan) \ |
2203 V(Int16x8GreaterThanOrEqual) \ | 2207 V(Int16x8GreaterThanOrEqual) \ |
| 2208 V(Uint16x8AddSaturate) \ |
| 2209 V(Uint16x8SubSaturate) \ |
| 2210 V(Uint16x8Min) \ |
| 2211 V(Uint16x8Max) \ |
2204 V(Uint16x8GreaterThan) \ | 2212 V(Uint16x8GreaterThan) \ |
2205 V(Uint16x8GreaterThanOrEqual) \ | 2213 V(Uint16x8GreaterThanOrEqual) \ |
2206 V(Int8x16Add) \ | 2214 V(Int8x16Add) \ |
| 2215 V(Int8x16AddSaturate) \ |
2207 V(Int8x16Sub) \ | 2216 V(Int8x16Sub) \ |
| 2217 V(Int8x16SubSaturate) \ |
2208 V(Int8x16Mul) \ | 2218 V(Int8x16Mul) \ |
2209 V(Int8x16Min) \ | 2219 V(Int8x16Min) \ |
2210 V(Int8x16Max) \ | 2220 V(Int8x16Max) \ |
2211 V(Int8x16Equal) \ | 2221 V(Int8x16Equal) \ |
2212 V(Int8x16NotEqual) \ | 2222 V(Int8x16NotEqual) \ |
2213 V(Int8x16GreaterThan) \ | 2223 V(Int8x16GreaterThan) \ |
2214 V(Int8x16GreaterThanOrEqual) \ | 2224 V(Int8x16GreaterThanOrEqual) \ |
| 2225 V(Uint8x16AddSaturate) \ |
| 2226 V(Uint8x16SubSaturate) \ |
| 2227 V(Uint8x16Min) \ |
| 2228 V(Uint8x16Max) \ |
2215 V(Uint8x16GreaterThan) \ | 2229 V(Uint8x16GreaterThan) \ |
2216 V(Uint8x16GreaterThanOrEqual) | 2230 V(Uint8x16GreaterThanOrEqual) |
2217 | 2231 |
| 2232 #define SIMD_SHIFT_OP_LIST(V) \ |
| 2233 V(Int32x4ShiftLeftByScalar) \ |
| 2234 V(Int32x4ShiftRightByScalar) \ |
| 2235 V(Uint32x4ShiftRightByScalar) \ |
| 2236 V(Int16x8ShiftLeftByScalar) \ |
| 2237 V(Int16x8ShiftRightByScalar) \ |
| 2238 V(Uint16x8ShiftRightByScalar) \ |
| 2239 V(Int8x16ShiftLeftByScalar) \ |
| 2240 V(Int8x16ShiftRightByScalar) \ |
| 2241 V(Uint8x16ShiftRightByScalar) |
| 2242 |
2218 #define SIMD_VISIT_SPLAT(Type) \ | 2243 #define SIMD_VISIT_SPLAT(Type) \ |
2219 void InstructionSelector::VisitCreate##Type(Node* node) { \ | 2244 void InstructionSelector::VisitCreate##Type(Node* node) { \ |
2220 VisitRR(this, kArm##Type##Splat, node); \ | 2245 VisitRR(this, kArm##Type##Splat, node); \ |
2221 } | 2246 } |
2222 SIMD_TYPE_LIST(SIMD_VISIT_SPLAT) | 2247 SIMD_TYPE_LIST(SIMD_VISIT_SPLAT) |
2223 #undef SIMD_VISIT_SPLAT | 2248 #undef SIMD_VISIT_SPLAT |
2224 | 2249 |
2225 #define SIMD_VISIT_EXTRACT_LANE(Type) \ | 2250 #define SIMD_VISIT_EXTRACT_LANE(Type) \ |
2226 void InstructionSelector::Visit##Type##ExtractLane(Node* node) { \ | 2251 void InstructionSelector::Visit##Type##ExtractLane(Node* node) { \ |
2227 VisitRRI(this, kArm##Type##ExtractLane, node); \ | 2252 VisitRRI(this, kArm##Type##ExtractLane, node); \ |
(...skipping 15 matching lines...) Expand all Loading... |
2243 SIMD_UNOP_LIST(SIMD_VISIT_UNOP) | 2268 SIMD_UNOP_LIST(SIMD_VISIT_UNOP) |
2244 #undef SIMD_VISIT_UNOP | 2269 #undef SIMD_VISIT_UNOP |
2245 | 2270 |
2246 #define SIMD_VISIT_BINOP(Name) \ | 2271 #define SIMD_VISIT_BINOP(Name) \ |
2247 void InstructionSelector::Visit##Name(Node* node) { \ | 2272 void InstructionSelector::Visit##Name(Node* node) { \ |
2248 VisitRRR(this, kArm##Name, node); \ | 2273 VisitRRR(this, kArm##Name, node); \ |
2249 } | 2274 } |
2250 SIMD_BINOP_LIST(SIMD_VISIT_BINOP) | 2275 SIMD_BINOP_LIST(SIMD_VISIT_BINOP) |
2251 #undef SIMD_VISIT_BINOP | 2276 #undef SIMD_VISIT_BINOP |
2252 | 2277 |
| 2278 #define SIMD_VISIT_SHIFT_OP(Name) \ |
| 2279 void InstructionSelector::Visit##Name(Node* node) { \ |
| 2280 VisitRRI(this, kArm##Name, node); \ |
| 2281 } |
| 2282 SIMD_SHIFT_OP_LIST(SIMD_VISIT_SHIFT_OP) |
| 2283 #undef SIMD_VISIT_SHIFT_OP |
| 2284 |
2253 void InstructionSelector::VisitSimd32x4Select(Node* node) { | 2285 void InstructionSelector::VisitSimd32x4Select(Node* node) { |
2254 ArmOperandGenerator g(this); | 2286 ArmOperandGenerator g(this); |
2255 Emit(kArmSimd32x4Select, g.DefineAsRegister(node), | 2287 Emit(kArmSimd32x4Select, g.DefineAsRegister(node), |
2256 g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1)), | 2288 g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1)), |
2257 g.UseRegister(node->InputAt(2))); | 2289 g.UseRegister(node->InputAt(2))); |
2258 } | 2290 } |
2259 | 2291 |
2260 // static | 2292 // static |
2261 MachineOperatorBuilder::Flags | 2293 MachineOperatorBuilder::Flags |
2262 InstructionSelector::SupportedMachineOperatorFlags() { | 2294 InstructionSelector::SupportedMachineOperatorFlags() { |
(...skipping 27 matching lines...) Expand all Loading... |
2290 Vector<MachineType> req_aligned = Vector<MachineType>::New(2); | 2322 Vector<MachineType> req_aligned = Vector<MachineType>::New(2); |
2291 req_aligned[0] = MachineType::Float32(); | 2323 req_aligned[0] = MachineType::Float32(); |
2292 req_aligned[1] = MachineType::Float64(); | 2324 req_aligned[1] = MachineType::Float64(); |
2293 return MachineOperatorBuilder::AlignmentRequirements:: | 2325 return MachineOperatorBuilder::AlignmentRequirements:: |
2294 SomeUnalignedAccessUnsupported(req_aligned, req_aligned); | 2326 SomeUnalignedAccessUnsupported(req_aligned, req_aligned); |
2295 } | 2327 } |
2296 | 2328 |
2297 } // namespace compiler | 2329 } // namespace compiler |
2298 } // namespace internal | 2330 } // namespace internal |
2299 } // namespace v8 | 2331 } // namespace v8 |
OLD | NEW |