OLD | NEW |
1 //===- subzero/src/IceTargetLoweringARM32.h - ARM32 lowering ----*- C++ -*-===// | 1 //===- subzero/src/IceTargetLoweringARM32.h - ARM32 lowering ----*- C++ -*-===// |
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 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 CondARM32::Cond Pred = CondARM32::AL) { | 394 CondARM32::Cond Pred = CondARM32::AL) { |
395 Context.insert(InstARM32Vcvt::create(Func, Dest, Src, Variant, Pred)); | 395 Context.insert(InstARM32Vcvt::create(Func, Dest, Src, Variant, Pred)); |
396 } | 396 } |
397 void _vdiv(Variable *Dest, Variable *Src0, Variable *Src1) { | 397 void _vdiv(Variable *Dest, Variable *Src0, Variable *Src1) { |
398 Context.insert(InstARM32Vdiv::create(Func, Dest, Src0, Src1)); | 398 Context.insert(InstARM32Vdiv::create(Func, Dest, Src0, Src1)); |
399 } | 399 } |
400 void _vldr(Variable *Dest, OperandARM32Mem *Src, | 400 void _vldr(Variable *Dest, OperandARM32Mem *Src, |
401 CondARM32::Cond Pred = CondARM32::AL) { | 401 CondARM32::Cond Pred = CondARM32::AL) { |
402 Context.insert(InstARM32Vldr::create(Func, Dest, Src, Pred)); | 402 Context.insert(InstARM32Vldr::create(Func, Dest, Src, Pred)); |
403 } | 403 } |
| 404 void _vcmp(Variable *Src0, Variable *Src1, |
| 405 CondARM32::Cond Pred = CondARM32::AL) { |
| 406 Context.insert(InstARM32Vcmp::create(Func, Src0, Src1, Pred)); |
| 407 } |
| 408 void _vmrs(CondARM32::Cond Pred = CondARM32::AL) { |
| 409 Context.insert(InstARM32Vmrs::create(Func, Pred)); |
| 410 } |
404 // There are a whole bunch of vmov variants, to transfer within S/D/Q | 411 // There are a whole bunch of vmov variants, to transfer within S/D/Q |
405 // registers, between core integer registers and S/D, and from small | 412 // registers, between core integer registers and S/D, and from small |
406 // immediates into S/D. For integer -> S/D/Q there is a variant which takes | 413 // immediates into S/D. For integer -> S/D/Q there is a variant which takes |
407 // two integer register to fill a D, or to fill two consecutive S registers. | 414 // two integer register to fill a D, or to fill two consecutive S registers. |
408 // Vmov can also be used to insert-element. E.g., | 415 // Vmov can also be used to insert-element. E.g., |
409 // "vmov.8 d0[1], r0" | 416 // "vmov.8 d0[1], r0" |
410 // but insert-element is a "two-address" operation where only part of the | 417 // but insert-element is a "two-address" operation where only part of the |
411 // register is modified. This cannot model that. | 418 // register is modified. This cannot model that. |
412 // | 419 // |
413 // This represents the simple single source, single dest variants only. | 420 // This represents the simple single source, single dest variants only. |
414 void _vmov(Variable *Dest, Operand *Src0) { | 421 void _vmov(Variable *Dest, Operand *Src0, |
415 constexpr CondARM32::Cond Pred = CondARM32::AL; | 422 CondARM32::Cond Pred = CondARM32::AL) { |
416 Context.insert(InstARM32Vmov::create(Func, Dest, Src0, Pred)); | 423 Context.insert(InstARM32Vmov::create(Func, Dest, Src0, Pred)); |
417 } | 424 } |
418 // This represents the single source, multi dest variant. | 425 // This represents the single source, multi dest variant. |
419 void _vmov(InstARM32Vmov::RegisterPair Dests, Variable *Src0) { | 426 void _vmov(InstARM32Vmov::RegisterPair Dests, Variable *Src0) { |
420 constexpr CondARM32::Cond Pred = CondARM32::AL; | 427 constexpr CondARM32::Cond Pred = CondARM32::AL; |
421 Context.insert(InstARM32Vmov::create(Func, Dests, Src0, Pred)); | 428 Context.insert(InstARM32Vmov::create(Func, Dests, Src0, Pred)); |
422 // The Vmov instruction created above does not define Dests._1. Therefore | 429 // The Vmov instruction created above does not define Dests._1. Therefore |
423 // we add a Dest._1 = FakeDef pseudo instruction. | 430 // we add a Dest._1 = FakeDef pseudo instruction. |
424 Context.insert(InstFakeDef::create(Func, Dests._1)); | 431 Context.insert(InstFakeDef::create(Func, Dests._1)); |
425 } | 432 } |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
552 | 559 |
553 private: | 560 private: |
554 ~TargetHeaderARM32() = default; | 561 ~TargetHeaderARM32() = default; |
555 | 562 |
556 TargetARM32Features CPUFeatures; | 563 TargetARM32Features CPUFeatures; |
557 }; | 564 }; |
558 | 565 |
559 } // end of namespace Ice | 566 } // end of namespace Ice |
560 | 567 |
561 #endif // SUBZERO_SRC_ICETARGETLOWERINGARM32_H | 568 #endif // SUBZERO_SRC_ICETARGETLOWERINGARM32_H |
OLD | NEW |