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 655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 Asm->vmlas(getDest(), getSrc(1), getSrc(2), CondARM32::AL); | 666 Asm->vmlas(getDest(), getSrc(1), getSrc(2), CondARM32::AL); |
667 assert(!Asm->needsTextFixup()); | 667 assert(!Asm->needsTextFixup()); |
668 break; | 668 break; |
669 case IceType_f64: | 669 case IceType_f64: |
670 Asm->vmlad(getDest(), getSrc(1), getSrc(2), CondARM32::AL); | 670 Asm->vmlad(getDest(), getSrc(1), getSrc(2), CondARM32::AL); |
671 assert(!Asm->needsTextFixup()); | 671 assert(!Asm->needsTextFixup()); |
672 break; | 672 break; |
673 } | 673 } |
674 } | 674 } |
675 | 675 |
| 676 template <> void InstARM32Vorr::emitIAS(const Cfg *Func) const { |
| 677 // TODO(kschimpf): add support for these instructions |
| 678 emitUsingTextFixup(Func); |
| 679 } |
| 680 |
676 template <> void InstARM32Vsub::emitIAS(const Cfg *Func) const { | 681 template <> void InstARM32Vsub::emitIAS(const Cfg *Func) const { |
677 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); | 682 auto *Asm = Func->getAssembler<ARM32::AssemblerARM32>(); |
678 const Variable *Dest = getDest(); | 683 const Variable *Dest = getDest(); |
679 switch (Dest->getType()) { | 684 switch (Dest->getType()) { |
680 default: | 685 default: |
681 // TODO(kschimpf) Figure if more cases are needed. | 686 // TODO(kschimpf) Figure if more cases are needed. |
682 emitUsingTextFixup(Func); | 687 emitUsingTextFixup(Func); |
683 break; | 688 break; |
684 case IceType_f32: | 689 case IceType_f32: |
685 Asm->vsubs(getDest(), getSrc(0), getSrc(1), CondARM32::AL); | 690 Asm->vsubs(getDest(), getSrc(0), getSrc(1), CondARM32::AL); |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1033 template <> const char *InstARM32Sub::Opcode = "sub"; | 1038 template <> const char *InstARM32Sub::Opcode = "sub"; |
1034 template <> const char *InstARM32Udiv::Opcode = "udiv"; | 1039 template <> const char *InstARM32Udiv::Opcode = "udiv"; |
1035 // FP | 1040 // FP |
1036 template <> const char *InstARM32Vadd::Opcode = "vadd"; | 1041 template <> const char *InstARM32Vadd::Opcode = "vadd"; |
1037 template <> const char *InstARM32Vand::Opcode = "vand"; | 1042 template <> const char *InstARM32Vand::Opcode = "vand"; |
1038 template <> const char *InstARM32Vdiv::Opcode = "vdiv"; | 1043 template <> const char *InstARM32Vdiv::Opcode = "vdiv"; |
1039 template <> const char *InstARM32Veor::Opcode = "veor"; | 1044 template <> const char *InstARM32Veor::Opcode = "veor"; |
1040 template <> const char *InstARM32Vmla::Opcode = "vmla"; | 1045 template <> const char *InstARM32Vmla::Opcode = "vmla"; |
1041 template <> const char *InstARM32Vmls::Opcode = "vmls"; | 1046 template <> const char *InstARM32Vmls::Opcode = "vmls"; |
1042 template <> const char *InstARM32Vmul::Opcode = "vmul"; | 1047 template <> const char *InstARM32Vmul::Opcode = "vmul"; |
| 1048 template <> const char *InstARM32Vorr::Opcode = "vorr"; |
1043 template <> const char *InstARM32Vsub::Opcode = "vsub"; | 1049 template <> const char *InstARM32Vsub::Opcode = "vsub"; |
1044 // Four-addr ops | 1050 // Four-addr ops |
1045 template <> const char *InstARM32Mla::Opcode = "mla"; | 1051 template <> const char *InstARM32Mla::Opcode = "mla"; |
1046 template <> const char *InstARM32Mls::Opcode = "mls"; | 1052 template <> const char *InstARM32Mls::Opcode = "mls"; |
1047 // Cmp-like ops | 1053 // Cmp-like ops |
1048 template <> const char *InstARM32Cmn::Opcode = "cmn"; | 1054 template <> const char *InstARM32Cmn::Opcode = "cmn"; |
1049 template <> const char *InstARM32Cmp::Opcode = "cmp"; | 1055 template <> const char *InstARM32Cmp::Opcode = "cmp"; |
1050 template <> const char *InstARM32Tst::Opcode = "tst"; | 1056 template <> const char *InstARM32Tst::Opcode = "tst"; |
1051 | 1057 |
1052 void InstARM32::dump(const Cfg *Func) const { | 1058 void InstARM32::dump(const Cfg *Func) const { |
(...skipping 1310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2363 | 2369 |
2364 template class InstARM32FourAddrGPR<InstARM32::Mla>; | 2370 template class InstARM32FourAddrGPR<InstARM32::Mla>; |
2365 template class InstARM32FourAddrGPR<InstARM32::Mls>; | 2371 template class InstARM32FourAddrGPR<InstARM32::Mls>; |
2366 | 2372 |
2367 template class InstARM32CmpLike<InstARM32::Cmn>; | 2373 template class InstARM32CmpLike<InstARM32::Cmn>; |
2368 template class InstARM32CmpLike<InstARM32::Cmp>; | 2374 template class InstARM32CmpLike<InstARM32::Cmp>; |
2369 template class InstARM32CmpLike<InstARM32::Tst>; | 2375 template class InstARM32CmpLike<InstARM32::Tst>; |
2370 | 2376 |
2371 } // end of namespace ARM32 | 2377 } // end of namespace ARM32 |
2372 } // end of namespace Ice | 2378 } // end of namespace Ice |
OLD | NEW |