@@ -1614,13 +1614,6 @@ def __aeabi_h2f : RuntimeLibcallImpl<FPEXT_F16_F32>; // CallingConv::ARM_AAPCS
16141614def __gnu_f2h_ieee : RuntimeLibcallImpl<FPROUND_F32_F16>;
16151615def __gnu_h2f_ieee : RuntimeLibcallImpl<FPEXT_F16_F32>;
16161616
1617- // In EABI, these functions have an __aeabi_ prefix, but in GNUEABI
1618- // they have a __gnu_ prefix (which is the default).
1619- def EABIHalfConvertCalls : LibcallImpls<(add __aeabi_f2h, __aeabi_h2f),
1620- isTargetAEABIAndAAPCS_ABI> {
1621- let CallingConv = ARM_AAPCS;
1622- }
1623-
16241617// The half <-> float conversion functions are always soft-float on
16251618// non-watchos platforms, but are needed for some targets which use a
16261619// hard-float calling convention by default.
@@ -1629,6 +1622,27 @@ def ARMHalfConvertLibcallCallingConv : LibcallCallingConv<
16291622 (isAAPCS_ABI(TT, ABIName) ? CallingConv::ARM_AAPCS : CallingConv::ARM_APCS)}]
16301623>;
16311624
1625+ def ARMLibgccHalfConvertCalls :
1626+ LibcallImpls<(add __truncsfhf2, __extendhfsf2),
1627+ RuntimeLibcallPredicate<[{!TT.isTargetAEABI() && TT.isOSBinFormatMachO()}]>> {
1628+ let CallingConv = ARMHalfConvertLibcallCallingConv;
1629+ }
1630+
1631+ // FIXME: These conditions are probably bugged. We're using the
1632+ // default libgcc call when the other cases are replaced.
1633+ def ARMDoubleToHalfCalls :
1634+ LibcallImpls<(add __truncdfhf2),
1635+ RuntimeLibcallPredicate<[{!TT.isTargetAEABI()}]>> {
1636+ let CallingConv = ARMHalfConvertLibcallCallingConv;
1637+ }
1638+
1639+ // In EABI, these functions have an __aeabi_ prefix, but in GNUEABI
1640+ // they have a __gnu_ prefix (which is the default).
1641+ def EABIHalfConvertCalls : LibcallImpls<(add __aeabi_f2h, __aeabi_h2f),
1642+ isTargetAEABIAndAAPCS_ABI> {
1643+ let CallingConv = ARM_AAPCS;
1644+ }
1645+
16321646def GNUEABIHalfConvertCalls :
16331647 LibcallImpls<(add __gnu_f2h_ieee, __gnu_h2f_ieee),
16341648 RuntimeLibcallPredicate<[{!TT.isOSBinFormatMachO() &&
@@ -1755,7 +1769,9 @@ def isARMOrThumb : RuntimeLibcallPredicate<"TT.isARM() || TT.isThumb()">;
17551769
17561770def ARMSystemLibrary
17571771 : SystemRuntimeLibrary<isARMOrThumb,
1758- (add WinDefaultLibcallImpls,
1772+ (add (sub WinDefaultLibcallImpls, ARMLibgccHalfConvertCalls,
1773+ GNUEABIHalfConvertCalls,
1774+ ARMDoubleToHalfCalls),
17591775 LibcallImpls<(add __powisf2, __powidf2), isNotOSMSVCRT>,
17601776 LibmHasFrexpF32, LibmHasLdexpF32,
17611777 LibmHasFrexpF128, LibmHasLdexpF128,
@@ -1769,8 +1785,10 @@ def ARMSystemLibrary
17691785
17701786 AEABICalls,
17711787 AEABI45MemCalls,
1788+ ARMLibgccHalfConvertCalls,
17721789 EABIHalfConvertCalls,
17731790 GNUEABIHalfConvertCalls,
1791+ ARMDoubleToHalfCalls,
17741792
17751793 // Use divmod compiler-rt calls for iOS 5.0 and later.
17761794 LibcallImpls<(add __divmodsi4, __udivmodsi4),
0 commit comments