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 | 7 |
8 namespace v8 { | 8 namespace v8 { |
9 namespace internal { | 9 namespace internal { |
10 namespace compiler { | 10 namespace compiler { |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 case kRepFloat32: | 383 case kRepFloat32: |
384 opcode = kCheckedLoadFloat32; | 384 opcode = kCheckedLoadFloat32; |
385 break; | 385 break; |
386 case kRepFloat64: | 386 case kRepFloat64: |
387 opcode = kCheckedLoadFloat64; | 387 opcode = kCheckedLoadFloat64; |
388 break; | 388 break; |
389 default: | 389 default: |
390 UNREACHABLE(); | 390 UNREACHABLE(); |
391 return; | 391 return; |
392 } | 392 } |
393 InstructionOperand* offset_operand = g.UseRegister(offset); | 393 Emit(opcode, g.DefineAsRegister(node), g.UseRegister(buffer), |
394 Emit(opcode | AddressingModeField::encode(kMode_MRR), | 394 g.UseRegister(offset), g.UseOperand(length, kArithmeticImm)); |
395 g.DefineAsRegister(node), offset_operand, g.UseRegister(length), | |
396 g.UseRegister(buffer), offset_operand); | |
397 } | 395 } |
398 | 396 |
399 | 397 |
400 void InstructionSelector::VisitCheckedStore(Node* node) { | 398 void InstructionSelector::VisitCheckedStore(Node* node) { |
401 MachineType rep = RepresentationOf(OpParameter<MachineType>(node)); | 399 MachineType rep = RepresentationOf(OpParameter<MachineType>(node)); |
402 Arm64OperandGenerator g(this); | 400 Arm64OperandGenerator g(this); |
403 Node* const buffer = node->InputAt(0); | 401 Node* const buffer = node->InputAt(0); |
404 Node* const offset = node->InputAt(1); | 402 Node* const offset = node->InputAt(1); |
405 Node* const length = node->InputAt(2); | 403 Node* const length = node->InputAt(2); |
406 Node* const value = node->InputAt(3); | 404 Node* const value = node->InputAt(3); |
(...skipping 11 matching lines...) Expand all Loading... |
418 case kRepFloat32: | 416 case kRepFloat32: |
419 opcode = kCheckedStoreFloat32; | 417 opcode = kCheckedStoreFloat32; |
420 break; | 418 break; |
421 case kRepFloat64: | 419 case kRepFloat64: |
422 opcode = kCheckedStoreFloat64; | 420 opcode = kCheckedStoreFloat64; |
423 break; | 421 break; |
424 default: | 422 default: |
425 UNREACHABLE(); | 423 UNREACHABLE(); |
426 return; | 424 return; |
427 } | 425 } |
428 InstructionOperand* offset_operand = g.UseRegister(offset); | 426 Emit(opcode, nullptr, g.UseRegister(buffer), g.UseRegister(offset), |
429 Emit(opcode | AddressingModeField::encode(kMode_MRR), nullptr, offset_operand, | 427 g.UseOperand(length, kArithmeticImm), g.UseRegister(value)); |
430 g.UseRegister(length), g.UseRegister(value), g.UseRegister(buffer), | |
431 offset_operand); | |
432 } | 428 } |
433 | 429 |
434 | 430 |
435 template <typename Matcher> | 431 template <typename Matcher> |
436 static void VisitLogical(InstructionSelector* selector, Node* node, Matcher* m, | 432 static void VisitLogical(InstructionSelector* selector, Node* node, Matcher* m, |
437 ArchOpcode opcode, bool left_can_cover, | 433 ArchOpcode opcode, bool left_can_cover, |
438 bool right_can_cover, ImmediateMode imm_mode) { | 434 bool right_can_cover, ImmediateMode imm_mode) { |
439 Arm64OperandGenerator g(selector); | 435 Arm64OperandGenerator g(selector); |
440 | 436 |
441 // Map instruction to equivalent operation with inverted right input. | 437 // Map instruction to equivalent operation with inverted right input. |
(...skipping 1083 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1525 MachineOperatorBuilder::kFloat64Ceil | | 1521 MachineOperatorBuilder::kFloat64Ceil | |
1526 MachineOperatorBuilder::kFloat64RoundTruncate | | 1522 MachineOperatorBuilder::kFloat64RoundTruncate | |
1527 MachineOperatorBuilder::kFloat64RoundTiesAway | | 1523 MachineOperatorBuilder::kFloat64RoundTiesAway | |
1528 MachineOperatorBuilder::kWord32ShiftIsSafe | | 1524 MachineOperatorBuilder::kWord32ShiftIsSafe | |
1529 MachineOperatorBuilder::kInt32DivIsSafe | | 1525 MachineOperatorBuilder::kInt32DivIsSafe | |
1530 MachineOperatorBuilder::kUint32DivIsSafe; | 1526 MachineOperatorBuilder::kUint32DivIsSafe; |
1531 } | 1527 } |
1532 } // namespace compiler | 1528 } // namespace compiler |
1533 } // namespace internal | 1529 } // namespace internal |
1534 } // namespace v8 | 1530 } // namespace v8 |
OLD | NEW |