@@ -1491,10 +1491,17 @@ def ARMHalfConvertLibcallCallingConv : LibcallCallingConv<
14911491    (isAAPCS_ABI(TT, ABIName) ? CallingConv::ARM_AAPCS : CallingConv::ARM_APCS)}]
14921492>;
14931493
1494- def GNUEABIHalfConvertCalls :
1495-   LibcallImpls<(add __gnu_f2h_ieee, __gnu_h2f_ieee),
1496-     RuntimeLibcallPredicate<[{!TT.isOSBinFormatMachO() &&
1497-                               !TT.isTargetAEABI()}]>> {
1494+ def ARMLibgccHalfConvertCalls :
1495+   LibcallImpls<(add __truncsfhf2, __extendhfsf2),
1496+     RuntimeLibcallPredicate<[{!TT.isTargetAEABI() && TT.isOSBinFormatMachO()}]>> {
1497+   let CallingConv = ARMHalfConvertLibcallCallingConv;
1498+ }
1499+ 
1500+ // FIXME: These conditions are probably bugged. We're using the
1501+ // default libgcc call when the other cases are replaced.
1502+ def ARMDoubleToHalfCalls :
1503+   LibcallImpls<(add __truncdfhf2),
1504+     RuntimeLibcallPredicate<[{!TT.isTargetAEABI()}]>> {
14981505  let CallingConv = ARMHalfConvertLibcallCallingConv;
14991506}
15001507
@@ -1505,6 +1512,13 @@ def EABIHalfConvertCalls : LibcallImpls<(add __aeabi_f2h, __aeabi_h2f),
15051512  let CallingConv = ARM_AAPCS;
15061513}
15071514
1515+ def GNUEABIHalfConvertCalls :
1516+   LibcallImpls<(add __gnu_f2h_ieee, __gnu_h2f_ieee),
1517+     RuntimeLibcallPredicate<[{!TT.isOSBinFormatMachO() &&
1518+                               !TT.isTargetAEABI()}]>> {
1519+   let CallingConv = ARMHalfConvertLibcallCallingConv;
1520+ }
1521+ 
15081522def WindowARMDivRemCalls : LibcallImpls<
15091523  (add __rt_sdiv, __rt_sdiv64, __rt_udiv, __rt_udiv64),
15101524  isOSWindows> {
@@ -1624,7 +1638,9 @@ def isARMOrThumb : RuntimeLibcallPredicate<"TT.isARM() || TT.isThumb()">;
16241638
16251639def ARMSystemLibrary
16261640    : SystemRuntimeLibrary<isARMOrThumb,
1627-       (add WinDefaultLibcallImpls,
1641+       (add (sub WinDefaultLibcallImpls, ARMLibgccHalfConvertCalls,
1642+                                         GNUEABIHalfConvertCalls,
1643+                                         ARMDoubleToHalfCalls),
16281644           LibcallImpls<(add __powisf2, __powidf2), isNotOSMSVCRT>,
16291645           LibmHasFrexpF32, LibmHasLdexpF32,
16301646           LibmHasFrexpF128, LibmHasLdexpF128,
@@ -1638,8 +1654,10 @@ def ARMSystemLibrary
16381654
16391655           AEABICalls,
16401656           AEABI45MemCalls,
1657+            ARMLibgccHalfConvertCalls,
16411658           EABIHalfConvertCalls,
16421659           GNUEABIHalfConvertCalls,
1660+            ARMDoubleToHalfCalls,
16431661
16441662           // Use divmod compiler-rt calls for iOS 5.0 and later.
16451663           LibcallImpls<(add __divmodsi4, __udivmodsi4),
0 commit comments