@@ -1482,13 +1482,6 @@ def __aeabi_h2f : RuntimeLibcallImpl<FPEXT_F16_F32>; // CallingConv::ARM_AAPCS
14821482def __gnu_f2h_ieee : RuntimeLibcallImpl<FPROUND_F32_F16>;
14831483def __gnu_h2f_ieee : RuntimeLibcallImpl<FPEXT_F16_F32>;
14841484
1485- // In EABI, these functions have an __aeabi_ prefix, but in GNUEABI
1486- // they have a __gnu_ prefix (which is the default).
1487- def EABIHalfConvertCalls : LibcallImpls<(add __aeabi_f2h, __aeabi_h2f),
1488- isTargetAEABIAndAAPCS_ABI> {
1489- let CallingConv = ARM_AAPCS;
1490- }
1491-
14921485// The half <-> float conversion functions are always soft-float on
14931486// non-watchos platforms, but are needed for some targets which use a
14941487// hard-float calling convention by default.
@@ -1497,6 +1490,27 @@ def ARMHalfConvertLibcallCallingConv : LibcallCallingConv<
14971490 (isAAPCS_ABI(TT, ABIName) ? CallingConv::ARM_AAPCS : CallingConv::ARM_APCS)}]
14981491>;
14991492
1493+ def ARMLibgccHalfConvertCalls :
1494+ LibcallImpls<(add __truncsfhf2, __extendhfsf2),
1495+ RuntimeLibcallPredicate<[{!TT.isTargetAEABI() && TT.isOSBinFormatMachO()}]>> {
1496+ let CallingConv = ARMHalfConvertLibcallCallingConv;
1497+ }
1498+
1499+ // FIXME: These conditions are probably bugged. We're using the
1500+ // default libgcc call when the other cases are replaced.
1501+ def ARMDoubleToHalfCalls :
1502+ LibcallImpls<(add __truncdfhf2),
1503+ RuntimeLibcallPredicate<[{!TT.isTargetAEABI()}]>> {
1504+ let CallingConv = ARMHalfConvertLibcallCallingConv;
1505+ }
1506+
1507+ // In EABI, these functions have an __aeabi_ prefix, but in GNUEABI
1508+ // they have a __gnu_ prefix (which is the default).
1509+ def EABIHalfConvertCalls : LibcallImpls<(add __aeabi_f2h, __aeabi_h2f),
1510+ isTargetAEABIAndAAPCS_ABI> {
1511+ let CallingConv = ARM_AAPCS;
1512+ }
1513+
15001514def GNUEABIHalfConvertCalls :
15011515 LibcallImpls<(add __gnu_f2h_ieee, __gnu_h2f_ieee),
15021516 RuntimeLibcallPredicate<[{!TT.isOSBinFormatMachO() &&
@@ -1623,7 +1637,9 @@ def isARMOrThumb : RuntimeLibcallPredicate<"TT.isARM() || TT.isThumb()">;
16231637
16241638def ARMSystemLibrary
16251639 : SystemRuntimeLibrary<isARMOrThumb,
1626- (add WinDefaultLibcallImpls,
1640+ (add (sub WinDefaultLibcallImpls, ARMLibgccHalfConvertCalls,
1641+ GNUEABIHalfConvertCalls,
1642+ ARMDoubleToHalfCalls),
16271643 LibcallImpls<(add __powisf2, __powidf2), isNotOSMSVCRT>,
16281644 LibmHasFrexpF32, LibmHasLdexpF32,
16291645 LibmHasFrexpF128, LibmHasLdexpF128,
@@ -1637,8 +1653,10 @@ def ARMSystemLibrary
16371653
16381654 AEABICalls,
16391655 AEABI45MemCalls,
1656+ ARMLibgccHalfConvertCalls,
16401657 EABIHalfConvertCalls,
16411658 GNUEABIHalfConvertCalls,
1659+ ARMDoubleToHalfCalls,
16421660
16431661 // Use divmod compiler-rt calls for iOS 5.0 and later.
16441662 LibcallImpls<(add __divmodsi4, __udivmodsi4),
0 commit comments