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

Side by Side Diff: src/IceInstARM32.cpp

Issue 1661633002: Add VORR instruction to the integrated ARM assembler. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 4 years, 10 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
OLDNEW
1 //===- subzero/src/IceInstARM32.cpp - ARM32 instruction implementation ----===// 1 //===- subzero/src/IceInstARM32.cpp - ARM32 instruction implementation ----===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 /// 9 ///
10 /// \file 10 /// \file
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 Asm->udiv(getDest(), getSrc(0), getSrc(1), getPredicate()); 611 Asm->udiv(getDest(), getSrc(0), getSrc(1), getPredicate());
612 if (Asm->needsTextFixup()) 612 if (Asm->needsTextFixup())
613 emitUsingTextFixup(Func); 613 emitUsingTextFixup(Func);
614 } 614 }
615 615
616 template <> void InstARM32Vadd::emitIAS(const Cfg *Func) const { 616 template <> void InstARM32Vadd::emitIAS(const Cfg *Func) const {
617 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); 617 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
618 const Variable *Dest = getDest(); 618 const Variable *Dest = getDest();
619 Type DestTy = Dest->getType(); 619 Type DestTy = Dest->getType();
620 switch (DestTy) { 620 switch (DestTy) {
621 case IceType_void: 621 default:
622 case IceType_i1:
623 case IceType_i8:
624 case IceType_i16:
625 case IceType_i32:
626 case IceType_i64:
627 case IceType_v4i1:
628 case IceType_v8i1:
629 case IceType_v16i1:
630 case IceType_NUM:
631 llvm::report_fatal_error("Vadd not defined on type " + 622 llvm::report_fatal_error("Vadd not defined on type " +
632 typeIceString(DestTy)); 623 typeIceString(DestTy));
633 break; 624 break;
634 case IceType_v16i8: 625 case IceType_v16i8:
635 case IceType_v8i16: 626 case IceType_v8i16:
636 case IceType_v4i32: 627 case IceType_v4i32:
637 Asm->vaddqi(typeElementType(DestTy), Dest, getSrc(0), getSrc(1)); 628 Asm->vaddqi(typeElementType(DestTy), Dest, getSrc(0), getSrc(1));
638 break; 629 break;
639 case IceType_v4f32: 630 case IceType_v4f32:
640 Asm->vaddqf(Dest, getSrc(0), getSrc(1)); 631 Asm->vaddqf(Dest, getSrc(0), getSrc(1));
641 break; 632 break;
642 case IceType_f32: 633 case IceType_f32:
643 Asm->vadds(Dest, getSrc(0), getSrc(1), CondARM32::AL); 634 Asm->vadds(Dest, getSrc(0), getSrc(1), CondARM32::AL);
644 break; 635 break;
645 case IceType_f64: 636 case IceType_f64:
646 Asm->vaddd(Dest, getSrc(0), getSrc(1), CondARM32::AL); 637 Asm->vaddd(Dest, getSrc(0), getSrc(1), CondARM32::AL);
647 break; 638 break;
648 } 639 }
649 assert(!Asm->needsTextFixup()); 640 assert(!Asm->needsTextFixup());
650 } 641 }
651 642
652 template <> void InstARM32Vand::emitIAS(const Cfg *Func) const { 643 template <> void InstARM32Vand::emitIAS(const Cfg *Func) const {
653 // TODO(kschimpf): add support for these instructions
654 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); 644 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
655 const Variable *Dest = getDest(); 645 const Variable *Dest = getDest();
656 switch (Dest->getType()) { 646 switch (Dest->getType()) {
657 default: 647 default:
658 llvm::report_fatal_error("Vand not defined on type " + 648 llvm::report_fatal_error("Vand not defined on type " +
659 typeIceString(Dest->getType())); 649 typeIceString(Dest->getType()));
660 case IceType_v4i1: 650 case IceType_v4i1:
661 case IceType_v8i1: 651 case IceType_v8i1:
662 case IceType_v16i1: 652 case IceType_v16i1:
663 case IceType_v16i8: 653 case IceType_v16i8:
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 assert(!Asm->needsTextFixup()); 725 assert(!Asm->needsTextFixup());
736 return; 726 return;
737 case IceType_f64: 727 case IceType_f64:
738 Asm->vmlsd(getDest(), getSrc(1), getSrc(2), CondARM32::AL); 728 Asm->vmlsd(getDest(), getSrc(1), getSrc(2), CondARM32::AL);
739 assert(!Asm->needsTextFixup()); 729 assert(!Asm->needsTextFixup());
740 return; 730 return;
741 } 731 }
742 } 732 }
743 733
744 template <> void InstARM32Vorr::emitIAS(const Cfg *Func) const { 734 template <> void InstARM32Vorr::emitIAS(const Cfg *Func) const {
745 // TODO(kschimpf): add support for these instructions 735 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
746 emitUsingTextFixup(Func); 736 const Variable *Dest = getDest();
737 switch (Dest->getType()) {
738 default:
739 llvm::report_fatal_error("Vorr not defined on type " +
740 typeIceString(Dest->getType()));
741 case IceType_v4i1:
742 case IceType_v8i1:
743 case IceType_v16i1:
744 case IceType_v16i8:
745 case IceType_v8i16:
746 case IceType_v4i32:
747 Asm->vorrq(Dest, getSrc(0), getSrc(1));
748 }
749 assert(!Asm->needsTextFixup());
747 } 750 }
748 751
749 template <> void InstARM32Vsub::emitIAS(const Cfg *Func) const { 752 template <> void InstARM32Vsub::emitIAS(const Cfg *Func) const {
750 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); 753 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>();
751 const Variable *Dest = getDest(); 754 const Variable *Dest = getDest();
752 Type DestTy = Dest->getType(); 755 Type DestTy = Dest->getType();
753 switch (DestTy) { 756 switch (DestTy) {
754 case IceType_void: 757 default:
755 case IceType_i1:
756 case IceType_i8:
757 case IceType_i16:
758 case IceType_i32:
759 case IceType_i64:
760 case IceType_v4i1:
761 case IceType_v8i1:
762 case IceType_v16i1:
763 case IceType_NUM:
764 llvm::report_fatal_error("Vsub not defined on type " + 758 llvm::report_fatal_error("Vsub not defined on type " +
765 typeIceString(DestTy)); 759 typeIceString(DestTy));
766 case IceType_v16i8: 760 case IceType_v16i8:
767 case IceType_v8i16: 761 case IceType_v8i16:
768 case IceType_v4i32: 762 case IceType_v4i32:
769 Asm->vsubqi(typeElementType(DestTy), Dest, getSrc(0), getSrc(1)); 763 Asm->vsubqi(typeElementType(DestTy), Dest, getSrc(0), getSrc(1));
770 break; 764 break;
771 case IceType_v4f32: 765 case IceType_v4f32:
772 Asm->vsubqf(Dest, getSrc(0), getSrc(1)); 766 Asm->vsubqf(Dest, getSrc(0), getSrc(1));
773 break; 767 break;
(...skipping 1738 matching lines...) Expand 10 before | Expand all | Expand 10 after
2512 2506
2513 template class InstARM32FourAddrGPR<InstARM32::Mla>; 2507 template class InstARM32FourAddrGPR<InstARM32::Mla>;
2514 template class InstARM32FourAddrGPR<InstARM32::Mls>; 2508 template class InstARM32FourAddrGPR<InstARM32::Mls>;
2515 2509
2516 template class InstARM32CmpLike<InstARM32::Cmn>; 2510 template class InstARM32CmpLike<InstARM32::Cmn>;
2517 template class InstARM32CmpLike<InstARM32::Cmp>; 2511 template class InstARM32CmpLike<InstARM32::Cmp>;
2518 template class InstARM32CmpLike<InstARM32::Tst>; 2512 template class InstARM32CmpLike<InstARM32::Tst>;
2519 2513
2520 } // end of namespace ARM32 2514 } // end of namespace ARM32
2521 } // end of namespace Ice 2515 } // end of namespace Ice
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698