OLD | NEW |
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 686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
697 case IceType_v8i1: | 697 case IceType_v8i1: |
698 case IceType_v16i1: | 698 case IceType_v16i1: |
699 case IceType_v16i8: | 699 case IceType_v16i8: |
700 case IceType_v8i16: | 700 case IceType_v8i16: |
701 case IceType_v4i32: | 701 case IceType_v4i32: |
702 Asm->vandq(Dest, getSrc(0), getSrc(1)); | 702 Asm->vandq(Dest, getSrc(0), getSrc(1)); |
703 } | 703 } |
704 assert(!Asm->needsTextFixup()); | 704 assert(!Asm->needsTextFixup()); |
705 } | 705 } |
706 | 706 |
| 707 template <> void InstARM32Vbsl::emitIAS(const Cfg *Func) const { |
| 708 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); |
| 709 const Variable *Dest = getDest(); |
| 710 switch (Dest->getType()) { |
| 711 default: |
| 712 llvm::report_fatal_error("Vbsl not defined on type " + |
| 713 typeStdString(Dest->getType())); |
| 714 case IceType_v4i1: |
| 715 case IceType_v8i1: |
| 716 case IceType_v16i1: |
| 717 case IceType_v16i8: |
| 718 case IceType_v8i16: |
| 719 case IceType_v4i32: |
| 720 Asm->vbslq(Dest, getSrc(0), getSrc(1)); |
| 721 } |
| 722 assert(!Asm->needsTextFixup()); |
| 723 } |
| 724 |
707 template <> void InstARM32Vdiv::emitIAS(const Cfg *Func) const { | 725 template <> void InstARM32Vdiv::emitIAS(const Cfg *Func) const { |
708 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); | 726 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); |
709 const Variable *Dest = getDest(); | 727 const Variable *Dest = getDest(); |
710 switch (Dest->getType()) { | 728 switch (Dest->getType()) { |
711 default: | 729 default: |
712 // TODO(kschimpf) Figure if more cases are needed. | 730 // TODO(kschimpf) Figure if more cases are needed. |
713 Asm->setNeedsTextFixup(); | 731 Asm->setNeedsTextFixup(); |
714 break; | 732 break; |
715 case IceType_f32: | 733 case IceType_f32: |
716 Asm->vdivs(getDest(), getSrc(0), getSrc(1), CondARM32::AL); | 734 Asm->vdivs(getDest(), getSrc(0), getSrc(1), CondARM32::AL); |
(...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1489 template <> const char *InstARM32Orr::Opcode = "orr"; | 1507 template <> const char *InstARM32Orr::Opcode = "orr"; |
1490 template <> const char *InstARM32Rsb::Opcode = "rsb"; | 1508 template <> const char *InstARM32Rsb::Opcode = "rsb"; |
1491 template <> const char *InstARM32Rsc::Opcode = "rsc"; | 1509 template <> const char *InstARM32Rsc::Opcode = "rsc"; |
1492 template <> const char *InstARM32Sbc::Opcode = "sbc"; | 1510 template <> const char *InstARM32Sbc::Opcode = "sbc"; |
1493 template <> const char *InstARM32Sdiv::Opcode = "sdiv"; | 1511 template <> const char *InstARM32Sdiv::Opcode = "sdiv"; |
1494 template <> const char *InstARM32Sub::Opcode = "sub"; | 1512 template <> const char *InstARM32Sub::Opcode = "sub"; |
1495 template <> const char *InstARM32Udiv::Opcode = "udiv"; | 1513 template <> const char *InstARM32Udiv::Opcode = "udiv"; |
1496 // FP | 1514 // FP |
1497 template <> const char *InstARM32Vadd::Opcode = "vadd"; | 1515 template <> const char *InstARM32Vadd::Opcode = "vadd"; |
1498 template <> const char *InstARM32Vand::Opcode = "vand"; | 1516 template <> const char *InstARM32Vand::Opcode = "vand"; |
| 1517 template <> const char *InstARM32Vbsl::Opcode = "vbsl"; |
1499 template <> const char *InstARM32Vdiv::Opcode = "vdiv"; | 1518 template <> const char *InstARM32Vdiv::Opcode = "vdiv"; |
1500 template <> const char *InstARM32Veor::Opcode = "veor"; | 1519 template <> const char *InstARM32Veor::Opcode = "veor"; |
1501 template <> const char *InstARM32Vmla::Opcode = "vmla"; | 1520 template <> const char *InstARM32Vmla::Opcode = "vmla"; |
1502 template <> const char *InstARM32Vmls::Opcode = "vmls"; | 1521 template <> const char *InstARM32Vmls::Opcode = "vmls"; |
1503 template <> const char *InstARM32Vmul::Opcode = "vmul"; | 1522 template <> const char *InstARM32Vmul::Opcode = "vmul"; |
1504 template <> const char *InstARM32Vorr::Opcode = "vorr"; | 1523 template <> const char *InstARM32Vorr::Opcode = "vorr"; |
1505 template <> const char *InstARM32UnaryopFP<InstARM32::Vneg>::Opcode = "vneg"; | 1524 template <> const char *InstARM32UnaryopFP<InstARM32::Vneg>::Opcode = "vneg"; |
1506 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vshl>::Opcode = "vshl"; | 1525 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vshl>::Opcode = "vshl"; |
1507 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vshr>::Opcode = "vshr"; | 1526 template <> const char *InstARM32ThreeAddrFP<InstARM32::Vshr>::Opcode = "vshr"; |
1508 template <> const char *InstARM32Vsub::Opcode = "vsub"; | 1527 template <> const char *InstARM32Vsub::Opcode = "vsub"; |
(...skipping 1482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2991 | 3010 |
2992 template class InstARM32FourAddrGPR<InstARM32::Mla>; | 3011 template class InstARM32FourAddrGPR<InstARM32::Mla>; |
2993 template class InstARM32FourAddrGPR<InstARM32::Mls>; | 3012 template class InstARM32FourAddrGPR<InstARM32::Mls>; |
2994 | 3013 |
2995 template class InstARM32CmpLike<InstARM32::Cmn>; | 3014 template class InstARM32CmpLike<InstARM32::Cmn>; |
2996 template class InstARM32CmpLike<InstARM32::Cmp>; | 3015 template class InstARM32CmpLike<InstARM32::Cmp>; |
2997 template class InstARM32CmpLike<InstARM32::Tst>; | 3016 template class InstARM32CmpLike<InstARM32::Tst>; |
2998 | 3017 |
2999 } // end of namespace ARM32 | 3018 } // end of namespace ARM32 |
3000 } // end of namespace Ice | 3019 } // end of namespace Ice |
OLD | NEW |