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 <algorithm> | 5 #include <algorithm> |
6 | 6 |
7 #include "src/base/adapters.h" | 7 #include "src/base/adapters.h" |
8 #include "src/compiler/instruction-selector-impl.h" | 8 #include "src/compiler/instruction-selector-impl.h" |
9 #include "src/compiler/node-matchers.h" | 9 #include "src/compiler/node-matchers.h" |
10 #include "src/compiler/node-properties.h" | 10 #include "src/compiler/node-properties.h" |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 case MachineRepresentation::kWord16: | 126 case MachineRepresentation::kWord16: |
127 opcode = load_rep.IsSigned() ? kX64Movsxwl : kX64Movzxwl; | 127 opcode = load_rep.IsSigned() ? kX64Movsxwl : kX64Movzxwl; |
128 break; | 128 break; |
129 case MachineRepresentation::kWord32: | 129 case MachineRepresentation::kWord32: |
130 opcode = kX64Movl; | 130 opcode = kX64Movl; |
131 break; | 131 break; |
132 case MachineRepresentation::kTagged: // Fall through. | 132 case MachineRepresentation::kTagged: // Fall through. |
133 case MachineRepresentation::kWord64: | 133 case MachineRepresentation::kWord64: |
134 opcode = kX64Movq; | 134 opcode = kX64Movq; |
135 break; | 135 break; |
| 136 case MachineRepresentation::kSimd128: // Fall through. |
136 case MachineRepresentation::kNone: | 137 case MachineRepresentation::kNone: |
137 UNREACHABLE(); | 138 UNREACHABLE(); |
138 return; | 139 return; |
139 } | 140 } |
140 | 141 |
141 InstructionOperand outputs[1]; | 142 InstructionOperand outputs[1]; |
142 outputs[0] = g.DefineAsRegister(node); | 143 outputs[0] = g.DefineAsRegister(node); |
143 InstructionOperand inputs[3]; | 144 InstructionOperand inputs[3]; |
144 size_t input_count = 0; | 145 size_t input_count = 0; |
145 AddressingMode mode = | 146 AddressingMode mode = |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 case MachineRepresentation::kWord16: | 213 case MachineRepresentation::kWord16: |
213 opcode = kX64Movw; | 214 opcode = kX64Movw; |
214 break; | 215 break; |
215 case MachineRepresentation::kWord32: | 216 case MachineRepresentation::kWord32: |
216 opcode = kX64Movl; | 217 opcode = kX64Movl; |
217 break; | 218 break; |
218 case MachineRepresentation::kTagged: // Fall through. | 219 case MachineRepresentation::kTagged: // Fall through. |
219 case MachineRepresentation::kWord64: | 220 case MachineRepresentation::kWord64: |
220 opcode = kX64Movq; | 221 opcode = kX64Movq; |
221 break; | 222 break; |
| 223 case MachineRepresentation::kSimd128: // Fall through. |
222 case MachineRepresentation::kNone: | 224 case MachineRepresentation::kNone: |
223 UNREACHABLE(); | 225 UNREACHABLE(); |
224 return; | 226 return; |
225 } | 227 } |
226 InstructionOperand inputs[4]; | 228 InstructionOperand inputs[4]; |
227 size_t input_count = 0; | 229 size_t input_count = 0; |
228 AddressingMode addressing_mode = | 230 AddressingMode addressing_mode = |
229 g.GetEffectiveAddressMemoryOperand(node, inputs, &input_count); | 231 g.GetEffectiveAddressMemoryOperand(node, inputs, &input_count); |
230 InstructionCode code = | 232 InstructionCode code = |
231 opcode | AddressingModeField::encode(addressing_mode); | 233 opcode | AddressingModeField::encode(addressing_mode); |
(...skipping 25 matching lines...) Expand all Loading... |
257 break; | 259 break; |
258 case MachineRepresentation::kWord64: | 260 case MachineRepresentation::kWord64: |
259 opcode = kCheckedLoadWord64; | 261 opcode = kCheckedLoadWord64; |
260 break; | 262 break; |
261 case MachineRepresentation::kFloat32: | 263 case MachineRepresentation::kFloat32: |
262 opcode = kCheckedLoadFloat32; | 264 opcode = kCheckedLoadFloat32; |
263 break; | 265 break; |
264 case MachineRepresentation::kFloat64: | 266 case MachineRepresentation::kFloat64: |
265 opcode = kCheckedLoadFloat64; | 267 opcode = kCheckedLoadFloat64; |
266 break; | 268 break; |
267 case MachineRepresentation::kBit: | 269 case MachineRepresentation::kBit: // Fall through. |
268 case MachineRepresentation::kTagged: | 270 case MachineRepresentation::kSimd128: // Fall through. |
| 271 case MachineRepresentation::kTagged: // Fall through. |
269 case MachineRepresentation::kNone: | 272 case MachineRepresentation::kNone: |
270 UNREACHABLE(); | 273 UNREACHABLE(); |
271 return; | 274 return; |
272 } | 275 } |
273 if (offset->opcode() == IrOpcode::kInt32Add && CanCover(node, offset)) { | 276 if (offset->opcode() == IrOpcode::kInt32Add && CanCover(node, offset)) { |
274 Int32Matcher mlength(length); | 277 Int32Matcher mlength(length); |
275 Int32BinopMatcher moffset(offset); | 278 Int32BinopMatcher moffset(offset); |
276 if (mlength.HasValue() && moffset.right().HasValue() && | 279 if (mlength.HasValue() && moffset.right().HasValue() && |
277 moffset.right().Value() >= 0 && | 280 moffset.right().Value() >= 0 && |
278 mlength.Value() >= moffset.right().Value()) { | 281 mlength.Value() >= moffset.right().Value()) { |
(...skipping 30 matching lines...) Expand all Loading... |
309 break; | 312 break; |
310 case MachineRepresentation::kWord64: | 313 case MachineRepresentation::kWord64: |
311 opcode = kCheckedStoreWord64; | 314 opcode = kCheckedStoreWord64; |
312 break; | 315 break; |
313 case MachineRepresentation::kFloat32: | 316 case MachineRepresentation::kFloat32: |
314 opcode = kCheckedStoreFloat32; | 317 opcode = kCheckedStoreFloat32; |
315 break; | 318 break; |
316 case MachineRepresentation::kFloat64: | 319 case MachineRepresentation::kFloat64: |
317 opcode = kCheckedStoreFloat64; | 320 opcode = kCheckedStoreFloat64; |
318 break; | 321 break; |
319 case MachineRepresentation::kBit: | 322 case MachineRepresentation::kBit: // Fall through. |
320 case MachineRepresentation::kTagged: | 323 case MachineRepresentation::kSimd128: // Fall through. |
| 324 case MachineRepresentation::kTagged: // Fall through. |
321 case MachineRepresentation::kNone: | 325 case MachineRepresentation::kNone: |
322 UNREACHABLE(); | 326 UNREACHABLE(); |
323 return; | 327 return; |
324 } | 328 } |
325 InstructionOperand value_operand = | 329 InstructionOperand value_operand = |
326 g.CanBeImmediate(value) ? g.UseImmediate(value) : g.UseRegister(value); | 330 g.CanBeImmediate(value) ? g.UseImmediate(value) : g.UseRegister(value); |
327 if (offset->opcode() == IrOpcode::kInt32Add && CanCover(node, offset)) { | 331 if (offset->opcode() == IrOpcode::kInt32Add && CanCover(node, offset)) { |
328 Int32Matcher mlength(length); | 332 Int32Matcher mlength(length); |
329 Int32BinopMatcher moffset(offset); | 333 Int32BinopMatcher moffset(offset); |
330 if (mlength.HasValue() && moffset.right().HasValue() && | 334 if (mlength.HasValue() && moffset.right().HasValue() && |
(...skipping 1501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1832 MachineOperatorBuilder::kFloat64RoundTruncate | | 1836 MachineOperatorBuilder::kFloat64RoundTruncate | |
1833 MachineOperatorBuilder::kFloat32RoundTiesEven | | 1837 MachineOperatorBuilder::kFloat32RoundTiesEven | |
1834 MachineOperatorBuilder::kFloat64RoundTiesEven; | 1838 MachineOperatorBuilder::kFloat64RoundTiesEven; |
1835 } | 1839 } |
1836 return flags; | 1840 return flags; |
1837 } | 1841 } |
1838 | 1842 |
1839 } // namespace compiler | 1843 } // namespace compiler |
1840 } // namespace internal | 1844 } // namespace internal |
1841 } // namespace v8 | 1845 } // namespace v8 |
OLD | NEW |