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/compiler/instruction-selector-impl.h" | 5 #include "src/compiler/instruction-selector-impl.h" |
6 #include "src/compiler/node-matchers.h" | 6 #include "src/compiler/node-matchers.h" |
7 #include "src/compiler/node-properties.h" | 7 #include "src/compiler/node-properties.h" |
8 | 8 |
9 namespace v8 { | 9 namespace v8 { |
10 namespace internal { | 10 namespace internal { |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 } | 384 } |
385 } | 385 } |
386 | 386 |
387 | 387 |
388 void InstructionSelector::VisitStore(Node* node) { | 388 void InstructionSelector::VisitStore(Node* node) { |
389 Arm64OperandGenerator g(this); | 389 Arm64OperandGenerator g(this); |
390 Node* base = node->InputAt(0); | 390 Node* base = node->InputAt(0); |
391 Node* index = node->InputAt(1); | 391 Node* index = node->InputAt(1); |
392 Node* value = node->InputAt(2); | 392 Node* value = node->InputAt(2); |
393 | 393 |
394 StoreRepresentation store_rep = OpParameter<StoreRepresentation>(node); | 394 StoreRepresentation store_rep = StoreRepresentationOf(node->op()); |
395 WriteBarrierKind write_barrier_kind = store_rep.write_barrier_kind(); | 395 WriteBarrierKind write_barrier_kind = store_rep.write_barrier_kind(); |
396 MachineRepresentation rep = store_rep.machine_type().representation(); | 396 MachineRepresentation rep = store_rep.representation(); |
397 | 397 |
398 // TODO(arm64): I guess this could be done in a better way. | 398 // TODO(arm64): I guess this could be done in a better way. |
399 if (write_barrier_kind != kNoWriteBarrier) { | 399 if (write_barrier_kind != kNoWriteBarrier) { |
400 DCHECK_EQ(MachineRepresentation::kTagged, rep); | 400 DCHECK_EQ(MachineRepresentation::kTagged, rep); |
401 InstructionOperand inputs[3]; | 401 InstructionOperand inputs[3]; |
402 size_t input_count = 0; | 402 size_t input_count = 0; |
403 inputs[input_count++] = g.UseUniqueRegister(base); | 403 inputs[input_count++] = g.UseUniqueRegister(base); |
404 inputs[input_count++] = g.UseUniqueRegister(index); | 404 inputs[input_count++] = g.UseUniqueRegister(index); |
405 inputs[input_count++] = (write_barrier_kind == kMapWriteBarrier) | 405 inputs[input_count++] = (write_barrier_kind == kMapWriteBarrier) |
406 ? g.UseRegister(value) | 406 ? g.UseRegister(value) |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 default: | 499 default: |
500 UNREACHABLE(); | 500 UNREACHABLE(); |
501 return; | 501 return; |
502 } | 502 } |
503 Emit(opcode, g.DefineAsRegister(node), g.UseRegister(buffer), | 503 Emit(opcode, g.DefineAsRegister(node), g.UseRegister(buffer), |
504 g.UseRegister(offset), g.UseOperand(length, kArithmeticImm)); | 504 g.UseRegister(offset), g.UseOperand(length, kArithmeticImm)); |
505 } | 505 } |
506 | 506 |
507 | 507 |
508 void InstructionSelector::VisitCheckedStore(Node* node) { | 508 void InstructionSelector::VisitCheckedStore(Node* node) { |
509 MachineRepresentation rep = | 509 MachineRepresentation rep = CheckedStoreRepresentationOf(node->op()); |
510 CheckedStoreRepresentationOf(node->op()).representation(); | |
511 Arm64OperandGenerator g(this); | 510 Arm64OperandGenerator g(this); |
512 Node* const buffer = node->InputAt(0); | 511 Node* const buffer = node->InputAt(0); |
513 Node* const offset = node->InputAt(1); | 512 Node* const offset = node->InputAt(1); |
514 Node* const length = node->InputAt(2); | 513 Node* const length = node->InputAt(2); |
515 Node* const value = node->InputAt(3); | 514 Node* const value = node->InputAt(3); |
516 ArchOpcode opcode; | 515 ArchOpcode opcode; |
517 switch (rep) { | 516 switch (rep) { |
518 case MachineRepresentation::kWord8: | 517 case MachineRepresentation::kWord8: |
519 opcode = kCheckedStoreWord8; | 518 opcode = kCheckedStoreWord8; |
520 break; | 519 break; |
(...skipping 1636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2157 MachineOperatorBuilder::kFloat32RoundTiesEven | | 2156 MachineOperatorBuilder::kFloat32RoundTiesEven | |
2158 MachineOperatorBuilder::kFloat64RoundTiesEven | | 2157 MachineOperatorBuilder::kFloat64RoundTiesEven | |
2159 MachineOperatorBuilder::kWord32ShiftIsSafe | | 2158 MachineOperatorBuilder::kWord32ShiftIsSafe | |
2160 MachineOperatorBuilder::kInt32DivIsSafe | | 2159 MachineOperatorBuilder::kInt32DivIsSafe | |
2161 MachineOperatorBuilder::kUint32DivIsSafe; | 2160 MachineOperatorBuilder::kUint32DivIsSafe; |
2162 } | 2161 } |
2163 | 2162 |
2164 } // namespace compiler | 2163 } // namespace compiler |
2165 } // namespace internal | 2164 } // namespace internal |
2166 } // namespace v8 | 2165 } // namespace v8 |
OLD | NEW |