@@ -578,9 +578,8 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
578
578
};
579
579
// clang-format on
580
580
581
- for (const auto &LC : LibraryCalls) {
581
+ for (const auto &LC : LibraryCalls)
582
582
setLibcallImpl(LC.Op, LC.Impl);
583
- }
584
583
}
585
584
}
586
585
@@ -594,131 +593,117 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
594
593
static const struct {
595
594
const RTLIB::Libcall Op;
596
595
const RTLIB::LibcallImpl Impl;
597
- const CallingConv::ID CC;
598
596
} LibraryCalls[] = {
599
597
// Double-precision floating-point arithmetic helper functions
600
598
// RTABI chapter 4.1.2, Table 2
601
- { RTLIB::ADD_F64, RTLIB::__aeabi_dadd, CallingConv::ARM_AAPCS },
602
- { RTLIB::DIV_F64, RTLIB::__aeabi_ddiv, CallingConv::ARM_AAPCS },
603
- { RTLIB::MUL_F64, RTLIB::__aeabi_dmul, CallingConv::ARM_AAPCS },
604
- { RTLIB::SUB_F64, RTLIB::__aeabi_dsub, CallingConv::ARM_AAPCS },
599
+ { RTLIB::ADD_F64, RTLIB::__aeabi_dadd },
600
+ { RTLIB::DIV_F64, RTLIB::__aeabi_ddiv },
601
+ { RTLIB::MUL_F64, RTLIB::__aeabi_dmul },
602
+ { RTLIB::SUB_F64, RTLIB::__aeabi_dsub },
605
603
606
604
// Double-precision floating-point comparison helper functions
607
605
// RTABI chapter 4.1.2, Table 3
608
- { RTLIB::OEQ_F64, RTLIB::__aeabi_dcmpeq__ne, CallingConv::ARM_AAPCS },
609
- { RTLIB::UNE_F64, RTLIB::__aeabi_dcmpeq__eq, CallingConv::ARM_AAPCS },
610
- { RTLIB::OLT_F64, RTLIB::__aeabi_dcmplt, CallingConv::ARM_AAPCS },
611
- { RTLIB::OLE_F64, RTLIB::__aeabi_dcmple, CallingConv::ARM_AAPCS },
612
- { RTLIB::OGE_F64, RTLIB::__aeabi_dcmpge, CallingConv::ARM_AAPCS },
613
- { RTLIB::OGT_F64, RTLIB::__aeabi_dcmpgt, CallingConv::ARM_AAPCS },
614
- { RTLIB::UO_F64, RTLIB::__aeabi_dcmpun, CallingConv::ARM_AAPCS },
606
+ { RTLIB::OEQ_F64, RTLIB::__aeabi_dcmpeq__ne },
607
+ { RTLIB::UNE_F64, RTLIB::__aeabi_dcmpeq__eq },
608
+ { RTLIB::OLT_F64, RTLIB::__aeabi_dcmplt },
609
+ { RTLIB::OLE_F64, RTLIB::__aeabi_dcmple },
610
+ { RTLIB::OGE_F64, RTLIB::__aeabi_dcmpge },
611
+ { RTLIB::OGT_F64, RTLIB::__aeabi_dcmpgt },
612
+ { RTLIB::UO_F64, RTLIB::__aeabi_dcmpun },
615
613
616
614
// Single-precision floating-point arithmetic helper functions
617
615
// RTABI chapter 4.1.2, Table 4
618
- { RTLIB::ADD_F32, RTLIB::__aeabi_fadd, CallingConv::ARM_AAPCS },
619
- { RTLIB::DIV_F32, RTLIB::__aeabi_fdiv, CallingConv::ARM_AAPCS },
620
- { RTLIB::MUL_F32, RTLIB::__aeabi_fmul, CallingConv::ARM_AAPCS },
621
- { RTLIB::SUB_F32, RTLIB::__aeabi_fsub, CallingConv::ARM_AAPCS },
616
+ { RTLIB::ADD_F32, RTLIB::__aeabi_fadd },
617
+ { RTLIB::DIV_F32, RTLIB::__aeabi_fdiv },
618
+ { RTLIB::MUL_F32, RTLIB::__aeabi_fmul },
619
+ { RTLIB::SUB_F32, RTLIB::__aeabi_fsub },
622
620
623
621
// Single-precision floating-point comparison helper functions
624
622
// RTABI chapter 4.1.2, Table 5
625
- { RTLIB::OEQ_F32, RTLIB::__aeabi_fcmpeq__ne, CallingConv::ARM_AAPCS },
626
- { RTLIB::UNE_F32, RTLIB::__aeabi_fcmpeq__eq, CallingConv::ARM_AAPCS },
627
- { RTLIB::OLT_F32, RTLIB::__aeabi_fcmplt, CallingConv::ARM_AAPCS },
628
- { RTLIB::OLE_F32, RTLIB::__aeabi_fcmple, CallingConv::ARM_AAPCS },
629
- { RTLIB::OGE_F32, RTLIB::__aeabi_fcmpge, CallingConv::ARM_AAPCS },
630
- { RTLIB::OGT_F32, RTLIB::__aeabi_fcmpgt, CallingConv::ARM_AAPCS },
631
- { RTLIB::UO_F32, RTLIB::__aeabi_fcmpun, CallingConv::ARM_AAPCS },
623
+ { RTLIB::OEQ_F32, RTLIB::__aeabi_fcmpeq__ne },
624
+ { RTLIB::UNE_F32, RTLIB::__aeabi_fcmpeq__eq },
625
+ { RTLIB::OLT_F32, RTLIB::__aeabi_fcmplt},
626
+ { RTLIB::OLE_F32, RTLIB::__aeabi_fcmple },
627
+ { RTLIB::OGE_F32, RTLIB::__aeabi_fcmpge },
628
+ { RTLIB::OGT_F32, RTLIB::__aeabi_fcmpgt },
629
+ { RTLIB::UO_F32, RTLIB::__aeabi_fcmpun },
632
630
633
631
// Floating-point to integer conversions.
634
632
// RTABI chapter 4.1.2, Table 6
635
- { RTLIB::FPTOSINT_F64_I32, RTLIB::__aeabi_d2iz, CallingConv::ARM_AAPCS },
636
- { RTLIB::FPTOUINT_F64_I32, RTLIB::__aeabi_d2uiz, CallingConv::ARM_AAPCS },
637
- { RTLIB::FPTOSINT_F64_I64, RTLIB::__aeabi_d2lz, CallingConv::ARM_AAPCS },
638
- { RTLIB::FPTOUINT_F64_I64, RTLIB::__aeabi_d2ulz, CallingConv::ARM_AAPCS },
639
- { RTLIB::FPTOSINT_F32_I32, RTLIB::__aeabi_f2iz, CallingConv::ARM_AAPCS },
640
- { RTLIB::FPTOUINT_F32_I32, RTLIB::__aeabi_f2uiz, CallingConv::ARM_AAPCS },
641
- { RTLIB::FPTOSINT_F32_I64, RTLIB::__aeabi_f2lz, CallingConv::ARM_AAPCS },
642
- { RTLIB::FPTOUINT_F32_I64, RTLIB::__aeabi_f2ulz, CallingConv::ARM_AAPCS },
633
+ { RTLIB::FPTOSINT_F64_I32, RTLIB::__aeabi_d2iz },
634
+ { RTLIB::FPTOUINT_F64_I32, RTLIB::__aeabi_d2uiz },
635
+ { RTLIB::FPTOSINT_F64_I64, RTLIB::__aeabi_d2lz },
636
+ { RTLIB::FPTOUINT_F64_I64, RTLIB::__aeabi_d2ulz },
637
+ { RTLIB::FPTOSINT_F32_I32, RTLIB::__aeabi_f2iz },
638
+ { RTLIB::FPTOUINT_F32_I32, RTLIB::__aeabi_f2uiz },
639
+ { RTLIB::FPTOSINT_F32_I64, RTLIB::__aeabi_f2lz },
640
+ { RTLIB::FPTOUINT_F32_I64, RTLIB::__aeabi_f2ulz },
643
641
644
642
// Conversions between floating types.
645
643
// RTABI chapter 4.1.2, Table 7
646
- { RTLIB::FPROUND_F64_F32, RTLIB::__aeabi_d2f, CallingConv::ARM_AAPCS },
647
- { RTLIB::FPROUND_F64_F16, RTLIB::__aeabi_d2h, CallingConv::ARM_AAPCS },
648
- { RTLIB::FPEXT_F32_F64, RTLIB::__aeabi_f2d, CallingConv::ARM_AAPCS },
644
+ { RTLIB::FPROUND_F64_F32, RTLIB::__aeabi_d2f },
645
+ { RTLIB::FPROUND_F64_F16, RTLIB::__aeabi_d2h },
646
+ { RTLIB::FPEXT_F32_F64, RTLIB::__aeabi_f2d },
649
647
650
648
// Integer to floating-point conversions.
651
649
// RTABI chapter 4.1.2, Table 8
652
- { RTLIB::SINTTOFP_I32_F64, RTLIB::__aeabi_i2d, CallingConv::ARM_AAPCS },
653
- { RTLIB::UINTTOFP_I32_F64, RTLIB::__aeabi_ui2d, CallingConv::ARM_AAPCS },
654
- { RTLIB::SINTTOFP_I64_F64, RTLIB::__aeabi_l2d, CallingConv::ARM_AAPCS },
655
- { RTLIB::UINTTOFP_I64_F64, RTLIB::__aeabi_ul2d, CallingConv::ARM_AAPCS },
656
- { RTLIB::SINTTOFP_I32_F32, RTLIB::__aeabi_i2f, CallingConv::ARM_AAPCS },
657
- { RTLIB::UINTTOFP_I32_F32, RTLIB::__aeabi_ui2f, CallingConv::ARM_AAPCS },
658
- { RTLIB::SINTTOFP_I64_F32, RTLIB::__aeabi_l2f, CallingConv::ARM_AAPCS },
659
- { RTLIB::UINTTOFP_I64_F32, RTLIB::__aeabi_ul2f, CallingConv::ARM_AAPCS },
650
+ { RTLIB::SINTTOFP_I32_F64, RTLIB::__aeabi_i2d },
651
+ { RTLIB::UINTTOFP_I32_F64, RTLIB::__aeabi_ui2d },
652
+ { RTLIB::SINTTOFP_I64_F64, RTLIB::__aeabi_l2d },
653
+ { RTLIB::UINTTOFP_I64_F64, RTLIB::__aeabi_ul2d },
654
+ { RTLIB::SINTTOFP_I32_F32, RTLIB::__aeabi_i2f },
655
+ { RTLIB::UINTTOFP_I32_F32, RTLIB::__aeabi_ui2f },
656
+ { RTLIB::SINTTOFP_I64_F32, RTLIB::__aeabi_l2f },
657
+ { RTLIB::UINTTOFP_I64_F32, RTLIB::__aeabi_ul2f },
660
658
661
659
// Long long helper functions
662
660
// RTABI chapter 4.2, Table 9
663
- { RTLIB::MUL_I64, RTLIB::__aeabi_lmul, CallingConv::ARM_AAPCS },
664
- { RTLIB::SHL_I64, RTLIB::__aeabi_llsl, CallingConv::ARM_AAPCS },
665
- { RTLIB::SRL_I64, RTLIB::__aeabi_llsr, CallingConv::ARM_AAPCS },
666
- { RTLIB::SRA_I64, RTLIB::__aeabi_lasr, CallingConv::ARM_AAPCS },
661
+ { RTLIB::MUL_I64, RTLIB::__aeabi_lmul },
662
+ { RTLIB::SHL_I64, RTLIB::__aeabi_llsl },
663
+ { RTLIB::SRL_I64, RTLIB::__aeabi_llsr },
664
+ { RTLIB::SRA_I64, RTLIB::__aeabi_lasr },
667
665
668
666
// Integer division functions
669
667
// RTABI chapter 4.3.1
670
- { RTLIB::SDIV_I8, RTLIB::__aeabi_idiv__i8, CallingConv::ARM_AAPCS },
671
- { RTLIB::SDIV_I16, RTLIB::__aeabi_idiv__i16, CallingConv::ARM_AAPCS },
672
- { RTLIB::SDIV_I32, RTLIB::__aeabi_idiv__i32, CallingConv::ARM_AAPCS },
673
- { RTLIB::SDIV_I64, RTLIB::__aeabi_ldivmod, CallingConv::ARM_AAPCS },
674
- { RTLIB::UDIV_I8, RTLIB::__aeabi_uidiv__i8, CallingConv::ARM_AAPCS },
675
- { RTLIB::UDIV_I16, RTLIB::__aeabi_uidiv__i16, CallingConv::ARM_AAPCS },
676
- { RTLIB::UDIV_I32, RTLIB::__aeabi_uidiv__i32, CallingConv::ARM_AAPCS },
677
- { RTLIB::UDIV_I64, RTLIB::__aeabi_uldivmod, CallingConv::ARM_AAPCS },
668
+ { RTLIB::SDIV_I8, RTLIB::__aeabi_idiv__i8 },
669
+ { RTLIB::SDIV_I16, RTLIB::__aeabi_idiv__i16 },
670
+ { RTLIB::SDIV_I32, RTLIB::__aeabi_idiv__i32},
671
+ { RTLIB::SDIV_I64, RTLIB::__aeabi_ldivmod },
672
+ { RTLIB::UDIV_I8, RTLIB::__aeabi_uidiv__i8 },
673
+ { RTLIB::UDIV_I16, RTLIB::__aeabi_uidiv__i16 },
674
+ { RTLIB::UDIV_I32, RTLIB::__aeabi_uidiv__i32 },
675
+ { RTLIB::UDIV_I64, RTLIB::__aeabi_uldivmod },
678
676
};
679
677
// clang-format on
680
678
681
- for (const auto &LC : LibraryCalls) {
679
+ for (const auto &LC : LibraryCalls)
682
680
setLibcallImpl(LC.Op, LC.Impl);
683
- setLibcallImplCallingConv(LC.Impl, LC.CC);
684
- }
685
681
686
682
// EABI dependent RTLIB
687
683
if (TM.Options.EABIVersion == EABI::EABI4 ||
688
684
TM.Options.EABIVersion == EABI::EABI5) {
689
685
static const struct {
690
686
const RTLIB::Libcall Op;
691
687
const RTLIB::LibcallImpl Impl;
692
- const CallingConv::ID CC;
693
688
} MemOpsLibraryCalls[] = {
694
689
// Memory operations
695
690
// RTABI chapter 4.3.4
696
- {RTLIB::MEMCPY, RTLIB::__aeabi_memcpy, CallingConv::ARM_AAPCS},
697
- {RTLIB::MEMMOVE, RTLIB::__aeabi_memmove, CallingConv::ARM_AAPCS},
698
- {RTLIB::MEMSET, RTLIB::__aeabi_memset, CallingConv::ARM_AAPCS},
699
- {RTLIB::AEABI_MEMCPY4, RTLIB::__aeabi_memcpy4,
700
- CallingConv::ARM_AAPCS},
701
- {RTLIB::AEABI_MEMCPY8, RTLIB::__aeabi_memcpy8,
702
- CallingConv::ARM_AAPCS},
703
- {RTLIB::AEABI_MEMMOVE4, RTLIB::__aeabi_memmove4,
704
- CallingConv::ARM_AAPCS},
705
- {RTLIB::AEABI_MEMMOVE8, RTLIB::__aeabi_memmove8,
706
- CallingConv::ARM_AAPCS},
707
- {RTLIB::AEABI_MEMSET4, RTLIB::__aeabi_memset4,
708
- CallingConv::ARM_AAPCS},
709
- {RTLIB::AEABI_MEMSET8, RTLIB::__aeabi_memset8,
710
- CallingConv::ARM_AAPCS},
711
- {RTLIB::AEABI_MEMCLR, RTLIB::__aeabi_memclr, CallingConv::ARM_AAPCS},
712
- {RTLIB::AEABI_MEMCLR4, RTLIB::__aeabi_memclr4,
713
- CallingConv::ARM_AAPCS},
714
- {RTLIB::AEABI_MEMCLR8, RTLIB::__aeabi_memclr8,
715
- CallingConv::ARM_AAPCS},
691
+ {RTLIB::MEMCPY, RTLIB::__aeabi_memcpy},
692
+ {RTLIB::MEMMOVE, RTLIB::__aeabi_memmove},
693
+ {RTLIB::MEMSET, RTLIB::__aeabi_memset},
694
+ {RTLIB::AEABI_MEMCPY4, RTLIB::__aeabi_memcpy4},
695
+ {RTLIB::AEABI_MEMCPY8, RTLIB::__aeabi_memcpy8},
696
+ {RTLIB::AEABI_MEMMOVE4, RTLIB::__aeabi_memmove4},
697
+ {RTLIB::AEABI_MEMMOVE8, RTLIB::__aeabi_memmove8},
698
+ {RTLIB::AEABI_MEMSET4, RTLIB::__aeabi_memset4},
699
+ {RTLIB::AEABI_MEMSET8, RTLIB::__aeabi_memset8},
700
+ {RTLIB::AEABI_MEMCLR, RTLIB::__aeabi_memclr},
701
+ {RTLIB::AEABI_MEMCLR4, RTLIB::__aeabi_memclr4},
702
+ {RTLIB::AEABI_MEMCLR8, RTLIB::__aeabi_memclr8},
716
703
};
717
704
718
- for (const auto &LC : MemOpsLibraryCalls) {
705
+ for (const auto &LC : MemOpsLibraryCalls)
719
706
setLibcallImpl(LC.Op, LC.Impl);
720
- setLibcallImplCallingConv(LC.Impl, LC.CC);
721
- }
722
707
}
723
708
}
724
709
@@ -746,16 +731,14 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
746
731
static const struct {
747
732
const RTLIB::Libcall Op;
748
733
const RTLIB::LibcallImpl Impl;
749
- const CallingConv::ID CC;
750
734
} LibraryCalls[] = {
751
- {RTLIB::FPROUND_F32_F16, RTLIB::__aeabi_f2h, CallingConv::ARM_AAPCS },
752
- {RTLIB::FPROUND_F64_F16, RTLIB::__aeabi_d2h, CallingConv::ARM_AAPCS },
753
- {RTLIB::FPEXT_F16_F32, RTLIB::__aeabi_h2f, CallingConv::ARM_AAPCS },
735
+ {RTLIB::FPROUND_F32_F16, RTLIB::__aeabi_f2h},
736
+ {RTLIB::FPROUND_F64_F16, RTLIB::__aeabi_d2h},
737
+ {RTLIB::FPEXT_F16_F32, RTLIB::__aeabi_h2f},
754
738
};
755
739
756
740
for (const auto &LC : LibraryCalls) {
757
741
setLibcallImpl(LC.Op, LC.Impl);
758
- setLibcallImplCallingConv(LC.Impl, LC.CC);
759
742
}
760
743
} else if (!TT.isOSBinFormatMachO()) {
761
744
setLibcallImpl(RTLIB::FPROUND_F32_F16, RTLIB::__gnu_f2h_ieee);
0 commit comments