137 if (TT.isOSBinFormatMachO()) {
141 static const struct {
142 const RTLIB::Libcall
Op;
143 const RTLIB::LibcallImpl Impl;
146 { RTLIB::ADD_F32, RTLIB::impl___addsf3vfp },
147 { RTLIB::SUB_F32, RTLIB::impl___subsf3vfp },
148 { RTLIB::MUL_F32, RTLIB::impl___mulsf3vfp },
149 { RTLIB::DIV_F32, RTLIB::impl___divsf3vfp },
152 { RTLIB::ADD_F64, RTLIB::impl___adddf3vfp },
153 { RTLIB::SUB_F64, RTLIB::impl___subdf3vfp },
154 { RTLIB::MUL_F64, RTLIB::impl___muldf3vfp },
155 { RTLIB::DIV_F64, RTLIB::impl___divdf3vfp },
158 { RTLIB::OEQ_F32, RTLIB::impl___eqsf2vfp },
159 { RTLIB::UNE_F32, RTLIB::impl___nesf2vfp },
160 { RTLIB::OLT_F32, RTLIB::impl___ltsf2vfp },
161 { RTLIB::OLE_F32, RTLIB::impl___lesf2vfp },
162 { RTLIB::OGE_F32, RTLIB::impl___gesf2vfp },
163 { RTLIB::OGT_F32, RTLIB::impl___gtsf2vfp },
164 { RTLIB::UO_F32, RTLIB::impl___unordsf2vfp },
167 { RTLIB::OEQ_F64, RTLIB::impl___eqdf2vfp },
168 { RTLIB::UNE_F64, RTLIB::impl___nedf2vfp },
169 { RTLIB::OLT_F64, RTLIB::impl___ltdf2vfp },
170 { RTLIB::OLE_F64, RTLIB::impl___ledf2vfp },
171 { RTLIB::OGE_F64, RTLIB::impl___gedf2vfp },
172 { RTLIB::OGT_F64, RTLIB::impl___gtdf2vfp },
173 { RTLIB::UO_F64, RTLIB::impl___unorddf2vfp },
178 { RTLIB::FPTOSINT_F64_I32, RTLIB::impl___fixdfsivfp },
179 { RTLIB::FPTOUINT_F64_I32, RTLIB::impl___fixunsdfsivfp },
180 { RTLIB::FPTOSINT_F32_I32, RTLIB::impl___fixsfsivfp },
181 { RTLIB::FPTOUINT_F32_I32, RTLIB::impl___fixunssfsivfp },
184 { RTLIB::FPROUND_F64_F32, RTLIB::impl___truncdfsf2vfp },
185 { RTLIB::FPEXT_F32_F64, RTLIB::impl___extendsfdf2vfp },
192 { RTLIB::SINTTOFP_I32_F64, RTLIB::impl___floatsidfvfp },
193 { RTLIB::UINTTOFP_I32_F64, RTLIB::impl___floatunssidfvfp },
194 { RTLIB::SINTTOFP_I32_F32, RTLIB::impl___floatsisfvfp },
195 { RTLIB::UINTTOFP_I32_F32, RTLIB::impl___floatunssisfvfp },
199 for (
const auto &LC : LibraryCalls)
200 Info.setLibcallImpl(LC.Op, LC.Impl);
204 static const struct {
205 const RTLIB::Libcall
Op;
206 const RTLIB::LibcallImpl Impl;
207 } AEABISelected[] = {
209 {RTLIB::ADD_F64, RTLIB::impl___aeabi_dadd},
210 {RTLIB::DIV_F64, RTLIB::impl___aeabi_ddiv},
211 {RTLIB::MUL_F64, RTLIB::impl___aeabi_dmul},
212 {RTLIB::SUB_F64, RTLIB::impl___aeabi_dsub},
214 {RTLIB::OEQ_F64, RTLIB::impl___aeabi_dcmpeq},
215 {RTLIB::OLT_F64, RTLIB::impl___aeabi_dcmplt},
216 {RTLIB::OLE_F64, RTLIB::impl___aeabi_dcmple},
217 {RTLIB::OGE_F64, RTLIB::impl___aeabi_dcmpge},
218 {RTLIB::OGT_F64, RTLIB::impl___aeabi_dcmpgt},
219 {RTLIB::UO_F64, RTLIB::impl___aeabi_dcmpun},
221 {RTLIB::ADD_F32, RTLIB::impl___aeabi_fadd},
222 {RTLIB::DIV_F32, RTLIB::impl___aeabi_fdiv},
223 {RTLIB::MUL_F32, RTLIB::impl___aeabi_fmul},
224 {RTLIB::SUB_F32, RTLIB::impl___aeabi_fsub},
226 {RTLIB::OEQ_F32, RTLIB::impl___aeabi_fcmpeq},
227 {RTLIB::OLT_F32, RTLIB::impl___aeabi_fcmplt},
228 {RTLIB::OLE_F32, RTLIB::impl___aeabi_fcmple},
229 {RTLIB::OGE_F32, RTLIB::impl___aeabi_fcmpge},
230 {RTLIB::OGT_F32, RTLIB::impl___aeabi_fcmpgt},
231 {RTLIB::UO_F32, RTLIB::impl___aeabi_fcmpun},
233 {RTLIB::FPTOSINT_F64_I32, RTLIB::impl___aeabi_d2iz},
234 {RTLIB::FPTOUINT_F64_I32, RTLIB::impl___aeabi_d2uiz},
235 {RTLIB::FPTOSINT_F64_I64, RTLIB::impl___aeabi_d2lz},
236 {RTLIB::FPTOUINT_F64_I64, RTLIB::impl___aeabi_d2ulz},
237 {RTLIB::FPTOSINT_F32_I32, RTLIB::impl___aeabi_f2iz},
238 {RTLIB::FPTOUINT_F32_I32, RTLIB::impl___aeabi_f2uiz},
239 {RTLIB::FPTOSINT_F32_I64, RTLIB::impl___aeabi_f2lz},
240 {RTLIB::FPTOUINT_F32_I64, RTLIB::impl___aeabi_f2ulz},
242 {RTLIB::SINTTOFP_I32_F64, RTLIB::impl___aeabi_i2d},
243 {RTLIB::UINTTOFP_I32_F64, RTLIB::impl___aeabi_ui2d},
244 {RTLIB::SINTTOFP_I64_F64, RTLIB::impl___aeabi_l2d},
245 {RTLIB::UINTTOFP_I64_F64, RTLIB::impl___aeabi_ul2d},
246 {RTLIB::SINTTOFP_I32_F32, RTLIB::impl___aeabi_i2f},
247 {RTLIB::UINTTOFP_I32_F32, RTLIB::impl___aeabi_ui2f},
248 {RTLIB::SINTTOFP_I64_F32, RTLIB::impl___aeabi_l2f},
249 {RTLIB::UINTTOFP_I64_F32, RTLIB::impl___aeabi_ul2f},
251 {RTLIB::MUL_I64, RTLIB::impl___aeabi_lmul},
252 {RTLIB::SHL_I64, RTLIB::impl___aeabi_llsl},
253 {RTLIB::SRL_I64, RTLIB::impl___aeabi_llsr},
254 {RTLIB::SRA_I64, RTLIB::impl___aeabi_lasr},
256 {RTLIB::SDIV_I32, RTLIB::impl___aeabi_idiv},
257 {RTLIB::UDIV_I32, RTLIB::impl___aeabi_uidiv},
261 for (
const auto &LC : AEABISelected) {
263 Info.setLibcallImpl(LC.Op, LC.Impl);
270 if (RTLCI.
isAvailable(RTLIB::impl___aeabi_fcmpeq)) {
271 Info.setLibcallImpl(RTLIB::UNE_F32, RTLIB::Unsupported);
272 Info.setLibcallImpl(RTLIB::FCMP3_PRED_UNE_F32, RTLIB::Unsupported);
275 if (RTLCI.
isAvailable(RTLIB::impl___aeabi_dcmpeq)) {
276 Info.setLibcallImpl(RTLIB::UNE_F64, RTLIB::Unsupported);
277 Info.setLibcallImpl(RTLIB::FCMP3_PRED_UNE_F64, RTLIB::Unsupported);