@@ -1532,10 +1532,17 @@ def ARMHalfConvertLibcallCallingConv : LibcallCallingConv<
15321532    (isAAPCS_ABI(TT, ABIName) ? CallingConv::ARM_AAPCS : CallingConv::ARM_APCS)}]
15331533>;
15341534
1535- def GNUEABIHalfConvertCalls :
1536-   LibcallImpls<(add __gnu_f2h_ieee, __gnu_h2f_ieee),
1537-     RuntimeLibcallPredicate<[{!TT.isOSBinFormatMachO() &&
1538-                               !TT.isTargetAEABI()}]>> {
1535+ def ARMLibgccHalfConvertCalls :
1536+   LibcallImpls<(add __truncsfhf2, __extendhfsf2),
1537+     RuntimeLibcallPredicate<[{!TT.isTargetAEABI() && TT.isOSBinFormatMachO()}]>> {
1538+   let CallingConv = ARMHalfConvertLibcallCallingConv;
1539+ }
1540+ 
1541+ // FIXME: These conditions are probably bugged. We're using the
1542+ // default libgcc call when the other cases are replaced.
1543+ def ARMDoubleToHalfCalls :
1544+   LibcallImpls<(add __truncdfhf2),
1545+     RuntimeLibcallPredicate<[{!TT.isTargetAEABI()}]>> {
15391546  let CallingConv = ARMHalfConvertLibcallCallingConv;
15401547}
15411548
@@ -1546,6 +1553,13 @@ def EABIHalfConvertCalls : LibcallImpls<(add __aeabi_f2h, __aeabi_h2f),
15461553  let CallingConv = ARM_AAPCS;
15471554}
15481555
1556+ def GNUEABIHalfConvertCalls :
1557+   LibcallImpls<(add __gnu_f2h_ieee, __gnu_h2f_ieee),
1558+     RuntimeLibcallPredicate<[{!TT.isOSBinFormatMachO() &&
1559+                               !TT.isTargetAEABI()}]>> {
1560+   let CallingConv = ARMHalfConvertLibcallCallingConv;
1561+ }
1562+ 
15491563def WindowARMDivRemCalls : LibcallImpls<
15501564  (add __rt_sdiv, __rt_sdiv64, __rt_udiv, __rt_udiv64),
15511565  isOSWindows> {
@@ -1665,7 +1679,9 @@ def isARMOrThumb : RuntimeLibcallPredicate<"TT.isARM() || TT.isThumb()">;
16651679
16661680def ARMSystemLibrary
16671681    : SystemRuntimeLibrary<isARMOrThumb,
1668-       (add WinDefaultLibcallImpls,
1682+       (add (sub WinDefaultLibcallImpls, ARMLibgccHalfConvertCalls,
1683+                                         GNUEABIHalfConvertCalls,
1684+                                         ARMDoubleToHalfCalls),
16691685           LibcallImpls<(add __powisf2, __powidf2), isNotOSMSVCRT>,
16701686           LibmHasFrexpF32, LibmHasLdexpF32,
16711687           LibmHasFrexpF128, LibmHasLdexpF128,
@@ -1679,8 +1695,10 @@ def ARMSystemLibrary
16791695
16801696           AEABICalls,
16811697           AEABI45MemCalls,
1698+            ARMLibgccHalfConvertCalls,
16821699           EABIHalfConvertCalls,
16831700           GNUEABIHalfConvertCalls,
1701+            ARMDoubleToHalfCalls,
16841702
16851703           // Use divmod compiler-rt calls for iOS 5.0 and later.
16861704           LibcallImpls<(add __divmodsi4, __udivmodsi4),
0 commit comments