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

Side by Side Diff: src/compiler/arm64/code-generator-arm64.cc

Issue 1404093003: [turbofan] Negate with shifted input for ARM64 (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 2 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 | « no previous file | src/compiler/arm64/instruction-codes-arm64.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/code-generator.h" 5 #include "src/compiler/code-generator.h"
6 6
7 #include "src/arm64/frames-arm64.h" 7 #include "src/arm64/frames-arm64.h"
8 #include "src/arm64/macro-assembler-arm64.h" 8 #include "src/arm64/macro-assembler-arm64.h"
9 #include "src/compiler/code-generator-impl.h" 9 #include "src/compiler/code-generator-impl.h"
10 #include "src/compiler/gap-resolver.h" 10 #include "src/compiler/gap-resolver.h"
(...skipping 23 matching lines...) Expand all
34 } 34 }
35 35
36 DoubleRegister OutputFloat32Register() { return OutputDoubleRegister().S(); } 36 DoubleRegister OutputFloat32Register() { return OutputDoubleRegister().S(); }
37 37
38 DoubleRegister OutputFloat64Register() { return OutputDoubleRegister(); } 38 DoubleRegister OutputFloat64Register() { return OutputDoubleRegister(); }
39 39
40 Register InputRegister32(size_t index) { 40 Register InputRegister32(size_t index) {
41 return ToRegister(instr_->InputAt(index)).W(); 41 return ToRegister(instr_->InputAt(index)).W();
42 } 42 }
43 43
44 Register InputOrZeroRegister32(size_t index) {
45 DCHECK(instr_->InputAt(index)->IsRegister() ||
46 (instr_->InputAt(index)->IsImmediate() && (InputInt32(index) == 0)));
47 if (instr_->InputAt(index)->IsImmediate()) {
48 return wzr;
49 }
50 return InputRegister32(index);
51 }
52
44 Register InputRegister64(size_t index) { return InputRegister(index); } 53 Register InputRegister64(size_t index) { return InputRegister(index); }
45 54
55 Register InputOrZeroRegister64(size_t index) {
56 DCHECK(instr_->InputAt(index)->IsRegister() ||
57 (instr_->InputAt(index)->IsImmediate() && (InputInt64(index) == 0)));
58 if (instr_->InputAt(index)->IsImmediate()) {
59 return xzr;
60 }
61 return InputRegister64(index);
62 }
63
46 Operand InputImmediate(size_t index) { 64 Operand InputImmediate(size_t index) {
47 return ToImmediate(instr_->InputAt(index)); 65 return ToImmediate(instr_->InputAt(index));
48 } 66 }
49 67
50 Operand InputOperand(size_t index) { 68 Operand InputOperand(size_t index) {
51 return ToOperand(instr_->InputAt(index)); 69 return ToOperand(instr_->InputAt(index));
52 } 70 }
53 71
54 Operand InputOperand64(size_t index) { return InputOperand(index); } 72 Operand InputOperand64(size_t index) { return InputOperand(index); }
55 73
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 case kArm64Float64RoundTiesAway: 530 case kArm64Float64RoundTiesAway:
513 __ Frinta(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); 531 __ Frinta(i.OutputDoubleRegister(), i.InputDoubleRegister(0));
514 break; 532 break;
515 case kArm64Float64RoundTruncate: 533 case kArm64Float64RoundTruncate:
516 __ Frintz(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); 534 __ Frintz(i.OutputDoubleRegister(), i.InputDoubleRegister(0));
517 break; 535 break;
518 case kArm64Float64RoundUp: 536 case kArm64Float64RoundUp:
519 __ Frintp(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); 537 __ Frintp(i.OutputDoubleRegister(), i.InputDoubleRegister(0));
520 break; 538 break;
521 case kArm64Add: 539 case kArm64Add:
522 __ Add(i.OutputRegister(), i.InputRegister(0), i.InputOperand2_64(1)); 540 __ Add(i.OutputRegister(), i.InputOrZeroRegister64(0),
541 i.InputOperand2_64(1));
523 break; 542 break;
524 case kArm64Add32: 543 case kArm64Add32:
525 if (FlagsModeField::decode(opcode) != kFlags_none) { 544 if (FlagsModeField::decode(opcode) != kFlags_none) {
526 __ Adds(i.OutputRegister32(), i.InputRegister32(0), 545 __ Adds(i.OutputRegister32(), i.InputOrZeroRegister32(0),
527 i.InputOperand2_32(1)); 546 i.InputOperand2_32(1));
528 } else { 547 } else {
529 __ Add(i.OutputRegister32(), i.InputRegister32(0), 548 __ Add(i.OutputRegister32(), i.InputOrZeroRegister32(0),
530 i.InputOperand2_32(1)); 549 i.InputOperand2_32(1));
531 } 550 }
532 break; 551 break;
533 case kArm64And: 552 case kArm64And:
534 __ And(i.OutputRegister(), i.InputRegister(0), i.InputOperand2_64(1)); 553 __ And(i.OutputRegister(), i.InputOrZeroRegister64(0),
554 i.InputOperand2_64(1));
535 break; 555 break;
536 case kArm64And32: 556 case kArm64And32:
537 __ And(i.OutputRegister32(), i.InputRegister32(0), i.InputOperand2_32(1)); 557 __ And(i.OutputRegister32(), i.InputOrZeroRegister32(0),
558 i.InputOperand2_32(1));
538 break; 559 break;
539 case kArm64Bic: 560 case kArm64Bic:
540 __ Bic(i.OutputRegister(), i.InputRegister(0), i.InputOperand2_64(1)); 561 __ Bic(i.OutputRegister(), i.InputOrZeroRegister64(0),
562 i.InputOperand2_64(1));
541 break; 563 break;
542 case kArm64Bic32: 564 case kArm64Bic32:
543 __ Bic(i.OutputRegister32(), i.InputRegister32(0), i.InputOperand2_32(1)); 565 __ Bic(i.OutputRegister32(), i.InputOrZeroRegister32(0),
566 i.InputOperand2_32(1));
544 break; 567 break;
545 case kArm64Mul: 568 case kArm64Mul:
546 __ Mul(i.OutputRegister(), i.InputRegister(0), i.InputRegister(1)); 569 __ Mul(i.OutputRegister(), i.InputRegister(0), i.InputRegister(1));
547 break; 570 break;
548 case kArm64Mul32: 571 case kArm64Mul32:
549 __ Mul(i.OutputRegister32(), i.InputRegister32(0), i.InputRegister32(1)); 572 __ Mul(i.OutputRegister32(), i.InputRegister32(0), i.InputRegister32(1));
550 break; 573 break;
551 case kArm64Smull: 574 case kArm64Smull:
552 __ Smull(i.OutputRegister(), i.InputRegister32(0), i.InputRegister32(1)); 575 __ Smull(i.OutputRegister(), i.InputRegister32(0), i.InputRegister32(1));
553 break; 576 break;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 __ Msub(i.OutputRegister32(), temp, i.InputRegister32(1), 640 __ Msub(i.OutputRegister32(), temp, i.InputRegister32(1),
618 i.InputRegister32(0)); 641 i.InputRegister32(0));
619 break; 642 break;
620 } 643 }
621 case kArm64Not: 644 case kArm64Not:
622 __ Mvn(i.OutputRegister(), i.InputOperand(0)); 645 __ Mvn(i.OutputRegister(), i.InputOperand(0));
623 break; 646 break;
624 case kArm64Not32: 647 case kArm64Not32:
625 __ Mvn(i.OutputRegister32(), i.InputOperand32(0)); 648 __ Mvn(i.OutputRegister32(), i.InputOperand32(0));
626 break; 649 break;
627 case kArm64Neg:
628 __ Neg(i.OutputRegister(), i.InputOperand(0));
629 break;
630 case kArm64Neg32:
631 __ Neg(i.OutputRegister32(), i.InputOperand32(0));
632 break;
633 case kArm64Or: 650 case kArm64Or:
634 __ Orr(i.OutputRegister(), i.InputRegister(0), i.InputOperand2_64(1)); 651 __ Orr(i.OutputRegister(), i.InputOrZeroRegister64(0),
652 i.InputOperand2_64(1));
635 break; 653 break;
636 case kArm64Or32: 654 case kArm64Or32:
637 __ Orr(i.OutputRegister32(), i.InputRegister32(0), i.InputOperand2_32(1)); 655 __ Orr(i.OutputRegister32(), i.InputOrZeroRegister32(0),
656 i.InputOperand2_32(1));
638 break; 657 break;
639 case kArm64Orn: 658 case kArm64Orn:
640 __ Orn(i.OutputRegister(), i.InputRegister(0), i.InputOperand2_64(1)); 659 __ Orn(i.OutputRegister(), i.InputOrZeroRegister64(0),
660 i.InputOperand2_64(1));
641 break; 661 break;
642 case kArm64Orn32: 662 case kArm64Orn32:
643 __ Orn(i.OutputRegister32(), i.InputRegister32(0), i.InputOperand2_32(1)); 663 __ Orn(i.OutputRegister32(), i.InputOrZeroRegister32(0),
664 i.InputOperand2_32(1));
644 break; 665 break;
645 case kArm64Eor: 666 case kArm64Eor:
646 __ Eor(i.OutputRegister(), i.InputRegister(0), i.InputOperand2_64(1)); 667 __ Eor(i.OutputRegister(), i.InputOrZeroRegister64(0),
668 i.InputOperand2_64(1));
647 break; 669 break;
648 case kArm64Eor32: 670 case kArm64Eor32:
649 __ Eor(i.OutputRegister32(), i.InputRegister32(0), i.InputOperand2_32(1)); 671 __ Eor(i.OutputRegister32(), i.InputOrZeroRegister32(0),
672 i.InputOperand2_32(1));
650 break; 673 break;
651 case kArm64Eon: 674 case kArm64Eon:
652 __ Eon(i.OutputRegister(), i.InputRegister(0), i.InputOperand2_64(1)); 675 __ Eon(i.OutputRegister(), i.InputOrZeroRegister64(0),
676 i.InputOperand2_64(1));
653 break; 677 break;
654 case kArm64Eon32: 678 case kArm64Eon32:
655 __ Eon(i.OutputRegister32(), i.InputRegister32(0), i.InputOperand2_32(1)); 679 __ Eon(i.OutputRegister32(), i.InputOrZeroRegister32(0),
680 i.InputOperand2_32(1));
656 break; 681 break;
657 case kArm64Sub: 682 case kArm64Sub:
658 __ Sub(i.OutputRegister(), i.InputRegister(0), i.InputOperand2_64(1)); 683 __ Sub(i.OutputRegister(), i.InputOrZeroRegister64(0),
684 i.InputOperand2_64(1));
659 break; 685 break;
660 case kArm64Sub32: 686 case kArm64Sub32:
661 if (FlagsModeField::decode(opcode) != kFlags_none) { 687 if (FlagsModeField::decode(opcode) != kFlags_none) {
662 __ Subs(i.OutputRegister32(), i.InputRegister32(0), 688 __ Subs(i.OutputRegister32(), i.InputOrZeroRegister32(0),
663 i.InputOperand2_32(1)); 689 i.InputOperand2_32(1));
664 } else { 690 } else {
665 __ Sub(i.OutputRegister32(), i.InputRegister32(0), 691 __ Sub(i.OutputRegister32(), i.InputOrZeroRegister32(0),
666 i.InputOperand2_32(1)); 692 i.InputOperand2_32(1));
667 } 693 }
668 break; 694 break;
669 case kArm64Lsl: 695 case kArm64Lsl:
670 ASSEMBLE_SHIFT(Lsl, 64); 696 ASSEMBLE_SHIFT(Lsl, 64);
671 break; 697 break;
672 case kArm64Lsl32: 698 case kArm64Lsl32:
673 ASSEMBLE_SHIFT(Lsl, 32); 699 ASSEMBLE_SHIFT(Lsl, 32);
674 break; 700 break;
675 case kArm64Lsr: 701 case kArm64Lsr:
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 } 766 }
741 case kArm64PokePair: { 767 case kArm64PokePair: {
742 int slot = i.InputInt32(2) - 1; 768 int slot = i.InputInt32(2) - 1;
743 __ PokePair(i.InputRegister(1), i.InputRegister(0), slot * kPointerSize); 769 __ PokePair(i.InputRegister(1), i.InputRegister(0), slot * kPointerSize);
744 break; 770 break;
745 } 771 }
746 case kArm64Clz32: 772 case kArm64Clz32:
747 __ Clz(i.OutputRegister32(), i.InputRegister32(0)); 773 __ Clz(i.OutputRegister32(), i.InputRegister32(0));
748 break; 774 break;
749 case kArm64Cmp: 775 case kArm64Cmp:
750 __ Cmp(i.InputRegister(0), i.InputOperand(1)); 776 __ Cmp(i.InputOrZeroRegister64(0), i.InputOperand(1));
751 break; 777 break;
752 case kArm64Cmp32: 778 case kArm64Cmp32:
753 __ Cmp(i.InputRegister32(0), i.InputOperand2_32(1)); 779 __ Cmp(i.InputOrZeroRegister32(0), i.InputOperand2_32(1));
754 break; 780 break;
755 case kArm64Cmn: 781 case kArm64Cmn:
756 __ Cmn(i.InputRegister(0), i.InputOperand(1)); 782 __ Cmn(i.InputRegister(0), i.InputOperand(1));
757 break; 783 break;
758 case kArm64Cmn32: 784 case kArm64Cmn32:
759 __ Cmn(i.InputRegister32(0), i.InputOperand32(1)); 785 __ Cmn(i.InputRegister32(0), i.InputOperand32(1));
760 break; 786 break;
761 case kArm64Tst: 787 case kArm64Tst:
762 __ Tst(i.InputRegister(0), i.InputOperand(1)); 788 __ Tst(i.InputRegister(0), i.InputOperand(1));
763 break; 789 break;
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
1418 padding_size -= kInstructionSize; 1444 padding_size -= kInstructionSize;
1419 } 1445 }
1420 } 1446 }
1421 } 1447 }
1422 1448
1423 #undef __ 1449 #undef __
1424 1450
1425 } // namespace compiler 1451 } // namespace compiler
1426 } // namespace internal 1452 } // namespace internal
1427 } // namespace v8 1453 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/compiler/arm64/instruction-codes-arm64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698