mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
ARM: make libcall setup more table driven
Rather than create a series of function calls to setup the library calls, create a table with the information and just use the table to drive the configuration of the library calls. This makes it easier to both inspect the list as well as to modify it. NFC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209089 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
aad181f644
commit
1cc4e8a79b
@ -256,167 +256,106 @@ ARMTargetLowering::ARMTargetLowering(TargetMachine &TM)
|
||||
|
||||
if (Subtarget->isAAPCS_ABI() && !Subtarget->isTargetMachO() &&
|
||||
!Subtarget->isTargetWindows()) {
|
||||
// Double-precision floating-point arithmetic helper functions
|
||||
// RTABI chapter 4.1.2, Table 2
|
||||
setLibcallName(RTLIB::ADD_F64, "__aeabi_dadd");
|
||||
setLibcallName(RTLIB::DIV_F64, "__aeabi_ddiv");
|
||||
setLibcallName(RTLIB::MUL_F64, "__aeabi_dmul");
|
||||
setLibcallName(RTLIB::SUB_F64, "__aeabi_dsub");
|
||||
setLibcallCallingConv(RTLIB::ADD_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::DIV_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::MUL_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::SUB_F64, CallingConv::ARM_AAPCS);
|
||||
static const struct {
|
||||
const RTLIB::Libcall Op;
|
||||
const char * const Name;
|
||||
const CallingConv::ID CC;
|
||||
const ISD::CondCode Cond;
|
||||
} LibraryCalls[] = {
|
||||
// Double-precision floating-point arithmetic helper functions
|
||||
// RTABI chapter 4.1.2, Table 2
|
||||
{ RTLIB::ADD_F64, "__aeabi_dadd", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::DIV_F64, "__aeabi_ddiv", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::MUL_F64, "__aeabi_dmul", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::SUB_F64, "__aeabi_dsub", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
|
||||
// Double-precision floating-point comparison helper functions
|
||||
// RTABI chapter 4.1.2, Table 3
|
||||
setLibcallName(RTLIB::OEQ_F64, "__aeabi_dcmpeq");
|
||||
setCmpLibcallCC(RTLIB::OEQ_F64, ISD::SETNE);
|
||||
setLibcallName(RTLIB::UNE_F64, "__aeabi_dcmpeq");
|
||||
setCmpLibcallCC(RTLIB::UNE_F64, ISD::SETEQ);
|
||||
setLibcallName(RTLIB::OLT_F64, "__aeabi_dcmplt");
|
||||
setCmpLibcallCC(RTLIB::OLT_F64, ISD::SETNE);
|
||||
setLibcallName(RTLIB::OLE_F64, "__aeabi_dcmple");
|
||||
setCmpLibcallCC(RTLIB::OLE_F64, ISD::SETNE);
|
||||
setLibcallName(RTLIB::OGE_F64, "__aeabi_dcmpge");
|
||||
setCmpLibcallCC(RTLIB::OGE_F64, ISD::SETNE);
|
||||
setLibcallName(RTLIB::OGT_F64, "__aeabi_dcmpgt");
|
||||
setCmpLibcallCC(RTLIB::OGT_F64, ISD::SETNE);
|
||||
setLibcallName(RTLIB::UO_F64, "__aeabi_dcmpun");
|
||||
setCmpLibcallCC(RTLIB::UO_F64, ISD::SETNE);
|
||||
setLibcallName(RTLIB::O_F64, "__aeabi_dcmpun");
|
||||
setCmpLibcallCC(RTLIB::O_F64, ISD::SETEQ);
|
||||
setLibcallCallingConv(RTLIB::OEQ_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::UNE_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::OLT_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::OLE_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::OGE_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::OGT_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::UO_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::O_F64, CallingConv::ARM_AAPCS);
|
||||
// Double-precision floating-point comparison helper functions
|
||||
// RTABI chapter 4.1.2, Table 3
|
||||
{ RTLIB::OEQ_F64, "__aeabi_dcmpeq", CallingConv::ARM_AAPCS, ISD::SETNE },
|
||||
{ RTLIB::UNE_F64, "__aeabi_dcmpeq", CallingConv::ARM_AAPCS, ISD::SETEQ },
|
||||
{ RTLIB::OLT_F64, "__aeabi_dcmplt", CallingConv::ARM_AAPCS, ISD::SETNE },
|
||||
{ RTLIB::OLE_F64, "__aeabi_dcmple", CallingConv::ARM_AAPCS, ISD::SETNE },
|
||||
{ RTLIB::OGE_F64, "__aeabi_dcmpge", CallingConv::ARM_AAPCS, ISD::SETNE },
|
||||
{ RTLIB::OGT_F64, "__aeabi_dcmpgt", CallingConv::ARM_AAPCS, ISD::SETNE },
|
||||
{ RTLIB::UO_F64, "__aeabi_dcmpun", CallingConv::ARM_AAPCS, ISD::SETNE },
|
||||
{ RTLIB::O_F64, "__aeabi_dcmpun", CallingConv::ARM_AAPCS, ISD::SETEQ },
|
||||
|
||||
// Single-precision floating-point arithmetic helper functions
|
||||
// RTABI chapter 4.1.2, Table 4
|
||||
setLibcallName(RTLIB::ADD_F32, "__aeabi_fadd");
|
||||
setLibcallName(RTLIB::DIV_F32, "__aeabi_fdiv");
|
||||
setLibcallName(RTLIB::MUL_F32, "__aeabi_fmul");
|
||||
setLibcallName(RTLIB::SUB_F32, "__aeabi_fsub");
|
||||
setLibcallCallingConv(RTLIB::ADD_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::DIV_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::MUL_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::SUB_F32, CallingConv::ARM_AAPCS);
|
||||
// Single-precision floating-point arithmetic helper functions
|
||||
// RTABI chapter 4.1.2, Table 4
|
||||
{ RTLIB::ADD_F32, "__aeabi_fadd", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::DIV_F32, "__aeabi_fdiv", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::MUL_F32, "__aeabi_fmul", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::SUB_F32, "__aeabi_fsub", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
|
||||
// Single-precision floating-point comparison helper functions
|
||||
// RTABI chapter 4.1.2, Table 5
|
||||
setLibcallName(RTLIB::OEQ_F32, "__aeabi_fcmpeq");
|
||||
setCmpLibcallCC(RTLIB::OEQ_F32, ISD::SETNE);
|
||||
setLibcallName(RTLIB::UNE_F32, "__aeabi_fcmpeq");
|
||||
setCmpLibcallCC(RTLIB::UNE_F32, ISD::SETEQ);
|
||||
setLibcallName(RTLIB::OLT_F32, "__aeabi_fcmplt");
|
||||
setCmpLibcallCC(RTLIB::OLT_F32, ISD::SETNE);
|
||||
setLibcallName(RTLIB::OLE_F32, "__aeabi_fcmple");
|
||||
setCmpLibcallCC(RTLIB::OLE_F32, ISD::SETNE);
|
||||
setLibcallName(RTLIB::OGE_F32, "__aeabi_fcmpge");
|
||||
setCmpLibcallCC(RTLIB::OGE_F32, ISD::SETNE);
|
||||
setLibcallName(RTLIB::OGT_F32, "__aeabi_fcmpgt");
|
||||
setCmpLibcallCC(RTLIB::OGT_F32, ISD::SETNE);
|
||||
setLibcallName(RTLIB::UO_F32, "__aeabi_fcmpun");
|
||||
setCmpLibcallCC(RTLIB::UO_F32, ISD::SETNE);
|
||||
setLibcallName(RTLIB::O_F32, "__aeabi_fcmpun");
|
||||
setCmpLibcallCC(RTLIB::O_F32, ISD::SETEQ);
|
||||
setLibcallCallingConv(RTLIB::OEQ_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::UNE_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::OLT_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::OLE_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::OGE_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::OGT_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::UO_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::O_F32, CallingConv::ARM_AAPCS);
|
||||
// Single-precision floating-point comparison helper functions
|
||||
// RTABI chapter 4.1.2, Table 5
|
||||
{ RTLIB::OEQ_F32, "__aeabi_fcmpeq", CallingConv::ARM_AAPCS, ISD::SETNE },
|
||||
{ RTLIB::UNE_F32, "__aeabi_fcmpeq", CallingConv::ARM_AAPCS, ISD::SETEQ },
|
||||
{ RTLIB::OLT_F32, "__aeabi_fcmplt", CallingConv::ARM_AAPCS, ISD::SETNE },
|
||||
{ RTLIB::OLE_F32, "__aeabi_fcmple", CallingConv::ARM_AAPCS, ISD::SETNE },
|
||||
{ RTLIB::OGE_F32, "__aeabi_fcmpge", CallingConv::ARM_AAPCS, ISD::SETNE },
|
||||
{ RTLIB::OGT_F32, "__aeabi_fcmpgt", CallingConv::ARM_AAPCS, ISD::SETNE },
|
||||
{ RTLIB::UO_F32, "__aeabi_fcmpun", CallingConv::ARM_AAPCS, ISD::SETNE },
|
||||
{ RTLIB::O_F32, "__aeabi_fcmpun", CallingConv::ARM_AAPCS, ISD::SETEQ },
|
||||
|
||||
// Floating-point to integer conversions.
|
||||
// RTABI chapter 4.1.2, Table 6
|
||||
setLibcallName(RTLIB::FPTOSINT_F64_I32, "__aeabi_d2iz");
|
||||
setLibcallName(RTLIB::FPTOUINT_F64_I32, "__aeabi_d2uiz");
|
||||
setLibcallName(RTLIB::FPTOSINT_F64_I64, "__aeabi_d2lz");
|
||||
setLibcallName(RTLIB::FPTOUINT_F64_I64, "__aeabi_d2ulz");
|
||||
setLibcallName(RTLIB::FPTOSINT_F32_I32, "__aeabi_f2iz");
|
||||
setLibcallName(RTLIB::FPTOUINT_F32_I32, "__aeabi_f2uiz");
|
||||
setLibcallName(RTLIB::FPTOSINT_F32_I64, "__aeabi_f2lz");
|
||||
setLibcallName(RTLIB::FPTOUINT_F32_I64, "__aeabi_f2ulz");
|
||||
setLibcallCallingConv(RTLIB::FPTOSINT_F64_I32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::FPTOUINT_F64_I32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::FPTOSINT_F64_I64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::FPTOUINT_F64_I64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::FPTOSINT_F32_I32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::FPTOUINT_F32_I32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::FPTOSINT_F32_I64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::FPTOUINT_F32_I64, CallingConv::ARM_AAPCS);
|
||||
// Floating-point to integer conversions.
|
||||
// RTABI chapter 4.1.2, Table 6
|
||||
{ RTLIB::FPTOSINT_F64_I32, "__aeabi_d2iz", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::FPTOUINT_F64_I32, "__aeabi_d2uiz", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::FPTOSINT_F64_I64, "__aeabi_d2lz", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::FPTOUINT_F64_I64, "__aeabi_d2ulz", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::FPTOSINT_F32_I32, "__aeabi_f2iz", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::FPTOUINT_F32_I32, "__aeabi_f2uiz", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::FPTOSINT_F32_I64, "__aeabi_f2lz", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::FPTOUINT_F32_I64, "__aeabi_f2ulz", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
|
||||
// Conversions between floating types.
|
||||
// RTABI chapter 4.1.2, Table 7
|
||||
setLibcallName(RTLIB::FPROUND_F64_F32, "__aeabi_d2f");
|
||||
setLibcallName(RTLIB::FPEXT_F32_F64, "__aeabi_f2d");
|
||||
setLibcallCallingConv(RTLIB::FPROUND_F64_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::FPEXT_F32_F64, CallingConv::ARM_AAPCS);
|
||||
// Conversions between floating types.
|
||||
// RTABI chapter 4.1.2, Table 7
|
||||
{ RTLIB::FPROUND_F64_F32, "__aeabi_d2f", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::FPEXT_F32_F64, "__aeabi_f2d", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
|
||||
// Integer to floating-point conversions.
|
||||
// RTABI chapter 4.1.2, Table 8
|
||||
setLibcallName(RTLIB::SINTTOFP_I32_F64, "__aeabi_i2d");
|
||||
setLibcallName(RTLIB::UINTTOFP_I32_F64, "__aeabi_ui2d");
|
||||
setLibcallName(RTLIB::SINTTOFP_I64_F64, "__aeabi_l2d");
|
||||
setLibcallName(RTLIB::UINTTOFP_I64_F64, "__aeabi_ul2d");
|
||||
setLibcallName(RTLIB::SINTTOFP_I32_F32, "__aeabi_i2f");
|
||||
setLibcallName(RTLIB::UINTTOFP_I32_F32, "__aeabi_ui2f");
|
||||
setLibcallName(RTLIB::SINTTOFP_I64_F32, "__aeabi_l2f");
|
||||
setLibcallName(RTLIB::UINTTOFP_I64_F32, "__aeabi_ul2f");
|
||||
setLibcallCallingConv(RTLIB::SINTTOFP_I32_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::UINTTOFP_I32_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::SINTTOFP_I64_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::UINTTOFP_I64_F64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::SINTTOFP_I32_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::UINTTOFP_I32_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::SINTTOFP_I64_F32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::UINTTOFP_I64_F32, CallingConv::ARM_AAPCS);
|
||||
// Integer to floating-point conversions.
|
||||
// RTABI chapter 4.1.2, Table 8
|
||||
{ RTLIB::SINTTOFP_I32_F64, "__aeabi_i2d", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::UINTTOFP_I32_F64, "__aeabi_ui2d", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::SINTTOFP_I64_F64, "__aeabi_l2d", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::UINTTOFP_I64_F64, "__aeabi_ul2d", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::SINTTOFP_I32_F32, "__aeabi_i2f", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::UINTTOFP_I32_F32, "__aeabi_ui2f", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::SINTTOFP_I64_F32, "__aeabi_l2f", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::UINTTOFP_I64_F32, "__aeabi_ul2f", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
|
||||
// Long long helper functions
|
||||
// RTABI chapter 4.2, Table 9
|
||||
setLibcallName(RTLIB::MUL_I64, "__aeabi_lmul");
|
||||
setLibcallName(RTLIB::SHL_I64, "__aeabi_llsl");
|
||||
setLibcallName(RTLIB::SRL_I64, "__aeabi_llsr");
|
||||
setLibcallName(RTLIB::SRA_I64, "__aeabi_lasr");
|
||||
setLibcallCallingConv(RTLIB::MUL_I64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::SDIV_I64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::UDIV_I64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::SHL_I64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::SRL_I64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::SRA_I64, CallingConv::ARM_AAPCS);
|
||||
// Long long helper functions
|
||||
// RTABI chapter 4.2, Table 9
|
||||
{ RTLIB::MUL_I64, "__aeabi_lmul", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::SHL_I64, "__aeabi_llsl", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::SRL_I64, "__aeabi_llsr", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::SRA_I64, "__aeabi_lasr", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
|
||||
// Integer division functions
|
||||
// RTABI chapter 4.3.1
|
||||
setLibcallName(RTLIB::SDIV_I8, "__aeabi_idiv");
|
||||
setLibcallName(RTLIB::SDIV_I16, "__aeabi_idiv");
|
||||
setLibcallName(RTLIB::SDIV_I32, "__aeabi_idiv");
|
||||
setLibcallName(RTLIB::SDIV_I64, "__aeabi_ldivmod");
|
||||
setLibcallName(RTLIB::UDIV_I8, "__aeabi_uidiv");
|
||||
setLibcallName(RTLIB::UDIV_I16, "__aeabi_uidiv");
|
||||
setLibcallName(RTLIB::UDIV_I32, "__aeabi_uidiv");
|
||||
setLibcallName(RTLIB::UDIV_I64, "__aeabi_uldivmod");
|
||||
setLibcallCallingConv(RTLIB::SDIV_I8, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::SDIV_I16, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::SDIV_I32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::SDIV_I64, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::UDIV_I8, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::UDIV_I16, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::UDIV_I32, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::UDIV_I64, CallingConv::ARM_AAPCS);
|
||||
// Integer division functions
|
||||
// RTABI chapter 4.3.1
|
||||
{ RTLIB::SDIV_I8, "__aeabi_idiv", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::SDIV_I16, "__aeabi_idiv", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::SDIV_I32, "__aeabi_idiv", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::SDIV_I64, "__aeabi_ldivmod", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::UDIV_I8, "__aeabi_uidiv", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::UDIV_I16, "__aeabi_uidiv", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::UDIV_I32, "__aeabi_uidiv", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::UDIV_I64, "__aeabi_uldivmod", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
|
||||
// Memory operations
|
||||
// RTABI chapter 4.3.4
|
||||
setLibcallName(RTLIB::MEMCPY, "__aeabi_memcpy");
|
||||
setLibcallName(RTLIB::MEMMOVE, "__aeabi_memmove");
|
||||
setLibcallName(RTLIB::MEMSET, "__aeabi_memset");
|
||||
setLibcallCallingConv(RTLIB::MEMCPY, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::MEMMOVE, CallingConv::ARM_AAPCS);
|
||||
setLibcallCallingConv(RTLIB::MEMSET, CallingConv::ARM_AAPCS);
|
||||
// Memory operations
|
||||
// RTABI chapter 4.3.4
|
||||
{ RTLIB::MEMCPY, "__aeabi_memcpy", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::MEMMOVE, "__aeabi_memmove", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
{ RTLIB::MEMSET, "__aeabi_memset", CallingConv::ARM_AAPCS, ISD::SETCC_INVALID },
|
||||
};
|
||||
|
||||
for (const auto &LC : LibraryCalls) {
|
||||
setLibcallName(LC.Op, LC.Name);
|
||||
setLibcallCallingConv(LC.Op, LC.CC);
|
||||
if (LC.Cond != ISD::SETCC_INVALID)
|
||||
setCmpLibcallCC(LC.Op, LC.Cond);
|
||||
}
|
||||
}
|
||||
|
||||
if (Subtarget->isTargetWindows()) {
|
||||
|
Loading…
Reference in New Issue
Block a user