@@ -523,67 +523,65 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM,
523523 Subtarget->hasARMOps() && !Subtarget->useSoftFloat()) {
524524 static const struct {
525525 const RTLIB::Libcall Op;
526- const char * const Name;
527- const ISD::CondCode Cond;
526+ const char *const Name;
528527 } LibraryCalls[] = {
529- // Single-precision floating-point arithmetic.
530- { RTLIB::ADD_F32, "__addsf3vfp", ISD::SETCC_INVALID },
531- { RTLIB::SUB_F32, "__subsf3vfp", ISD::SETCC_INVALID },
532- { RTLIB::MUL_F32, "__mulsf3vfp", ISD::SETCC_INVALID },
533- { RTLIB::DIV_F32, "__divsf3vfp", ISD::SETCC_INVALID },
534-
535- // Double-precision floating-point arithmetic.
536- { RTLIB::ADD_F64, "__adddf3vfp", ISD::SETCC_INVALID },
537- { RTLIB::SUB_F64, "__subdf3vfp", ISD::SETCC_INVALID },
538- { RTLIB::MUL_F64, "__muldf3vfp", ISD::SETCC_INVALID },
539- { RTLIB::DIV_F64, "__divdf3vfp", ISD::SETCC_INVALID },
540-
541- // Single-precision comparisons.
542- { RTLIB::OEQ_F32, "__eqsf2vfp", ISD::SETNE },
543- { RTLIB::UNE_F32, "__nesf2vfp", ISD::SETNE },
544- { RTLIB::OLT_F32, "__ltsf2vfp", ISD::SETNE },
545- { RTLIB::OLE_F32, "__lesf2vfp", ISD::SETNE },
546- { RTLIB::OGE_F32, "__gesf2vfp", ISD::SETNE },
547- { RTLIB::OGT_F32, "__gtsf2vfp", ISD::SETNE },
548- { RTLIB::UO_F32, "__unordsf2vfp", ISD::SETNE },
549-
550- // Double-precision comparisons.
551- { RTLIB::OEQ_F64, "__eqdf2vfp", ISD::SETNE },
552- { RTLIB::UNE_F64, "__nedf2vfp", ISD::SETNE },
553- { RTLIB::OLT_F64, "__ltdf2vfp", ISD::SETNE },
554- { RTLIB::OLE_F64, "__ledf2vfp", ISD::SETNE },
555- { RTLIB::OGE_F64, "__gedf2vfp", ISD::SETNE },
556- { RTLIB::OGT_F64, "__gtdf2vfp", ISD::SETNE },
557- { RTLIB::UO_F64, "__unorddf2vfp", ISD::SETNE },
558-
559- // Floating-point to integer conversions.
560- // i64 conversions are done via library routines even when generating VFP
561- // instructions, so use the same ones.
562- { RTLIB::FPTOSINT_F64_I32, "__fixdfsivfp", ISD::SETCC_INVALID },
563- { RTLIB::FPTOUINT_F64_I32, "__fixunsdfsivfp", ISD::SETCC_INVALID },
564- { RTLIB::FPTOSINT_F32_I32, "__fixsfsivfp", ISD::SETCC_INVALID },
565- { RTLIB::FPTOUINT_F32_I32, "__fixunssfsivfp", ISD::SETCC_INVALID },
566-
567- // Conversions between floating types.
568- { RTLIB::FPROUND_F64_F32, "__truncdfsf2vfp", ISD::SETCC_INVALID },
569- { RTLIB::FPEXT_F32_F64, "__extendsfdf2vfp", ISD::SETCC_INVALID },
570-
571- // Integer to floating-point conversions.
572- // i64 conversions are done via library routines even when generating VFP
573- // instructions, so use the same ones.
574- // FIXME: There appears to be some naming inconsistency in ARM libgcc:
575- // e.g., __floatunsidf vs. __floatunssidfvfp.
576- { RTLIB::SINTTOFP_I32_F64, "__floatsidfvfp", ISD::SETCC_INVALID },
577- { RTLIB::UINTTOFP_I32_F64, "__floatunssidfvfp", ISD::SETCC_INVALID },
578- { RTLIB::SINTTOFP_I32_F32, "__floatsisfvfp", ISD::SETCC_INVALID },
579- { RTLIB::UINTTOFP_I32_F32, "__floatunssisfvfp", ISD::SETCC_INVALID },
528+ // Single-precision floating-point arithmetic.
529+ {RTLIB::ADD_F32, "__addsf3vfp"},
530+ {RTLIB::SUB_F32, "__subsf3vfp"},
531+ {RTLIB::MUL_F32, "__mulsf3vfp"},
532+ {RTLIB::DIV_F32, "__divsf3vfp"},
533+
534+ // Double-precision floating-point arithmetic.
535+ {RTLIB::ADD_F64, "__adddf3vfp"},
536+ {RTLIB::SUB_F64, "__subdf3vfp"},
537+ {RTLIB::MUL_F64, "__muldf3vfp"},
538+ {RTLIB::DIV_F64, "__divdf3vfp"},
539+
540+ // Single-precision comparisons.
541+ {RTLIB::OEQ_F32, "__eqsf2vfp"},
542+ {RTLIB::UNE_F32, "__nesf2vfp"},
543+ {RTLIB::OLT_F32, "__ltsf2vfp"},
544+ {RTLIB::OLE_F32, "__lesf2vfp"},
545+ {RTLIB::OGE_F32, "__gesf2vfp"},
546+ {RTLIB::OGT_F32, "__gtsf2vfp"},
547+ {RTLIB::UO_F32, "__unordsf2vfp"},
548+
549+ // Double-precision comparisons.
550+ {RTLIB::OEQ_F64, "__eqdf2vfp"},
551+ {RTLIB::UNE_F64, "__nedf2vfp"},
552+ {RTLIB::OLT_F64, "__ltdf2vfp"},
553+ {RTLIB::OLE_F64, "__ledf2vfp"},
554+ {RTLIB::OGE_F64, "__gedf2vfp"},
555+ {RTLIB::OGT_F64, "__gtdf2vfp"},
556+ {RTLIB::UO_F64, "__unorddf2vfp"},
557+
558+ // Floating-point to integer conversions.
559+ // i64 conversions are done via library routines even when generating
560+ // VFP
561+ // instructions, so use the same ones.
562+ {RTLIB::FPTOSINT_F64_I32, "__fixdfsivfp"},
563+ {RTLIB::FPTOUINT_F64_I32, "__fixunsdfsivfp"},
564+ {RTLIB::FPTOSINT_F32_I32, "__fixsfsivfp"},
565+ {RTLIB::FPTOUINT_F32_I32, "__fixunssfsivfp"},
566+
567+ // Conversions between floating types.
568+ {RTLIB::FPROUND_F64_F32, "__truncdfsf2vfp"},
569+ {RTLIB::FPEXT_F32_F64, "__extendsfdf2vfp"},
570+
571+ // Integer to floating-point conversions.
572+ // i64 conversions are done via library routines even when generating
573+ // VFP
574+ // instructions, so use the same ones.
575+ // FIXME: There appears to be some naming inconsistency in ARM libgcc:
576+ // e.g., __floatunsidf vs. __floatunssidfvfp.
577+ {RTLIB::SINTTOFP_I32_F64, "__floatsidfvfp"},
578+ {RTLIB::UINTTOFP_I32_F64, "__floatunssidfvfp"},
579+ {RTLIB::SINTTOFP_I32_F32, "__floatsisfvfp"},
580+ {RTLIB::UINTTOFP_I32_F32, "__floatunssisfvfp"},
580581 };
581582
582- for (const auto &LC : LibraryCalls) {
583+ for (const auto &LC : LibraryCalls)
583584 setLibcallName(LC.Op, LC.Name);
584- if (LC.Cond != ISD::SETCC_INVALID)
585- setCmpLibcallCC(LC.Op, LC.Cond);
586- }
587585 }
588586 }
589587
0 commit comments