135 if (TT.isOSBinFormatMachO()) {
139 static const struct {
140 const RTLIB::Libcall
Op;
141 const RTLIB::LibcallImpl Impl;
144 { RTLIB::ADD_F32, RTLIB::impl___addsf3vfp },
145 { RTLIB::SUB_F32, RTLIB::impl___subsf3vfp },
146 { RTLIB::MUL_F32, RTLIB::impl___mulsf3vfp },
147 { RTLIB::DIV_F32, RTLIB::impl___divsf3vfp },
150 { RTLIB::ADD_F64, RTLIB::impl___adddf3vfp },
151 { RTLIB::SUB_F64, RTLIB::impl___subdf3vfp },
152 { RTLIB::MUL_F64, RTLIB::impl___muldf3vfp },
153 { RTLIB::DIV_F64, RTLIB::impl___divdf3vfp },
156 { RTLIB::OEQ_F32, RTLIB::impl___eqsf2vfp },
157 { RTLIB::UNE_F32, RTLIB::impl___nesf2vfp },
158 { RTLIB::OLT_F32, RTLIB::impl___ltsf2vfp },
159 { RTLIB::OLE_F32, RTLIB::impl___lesf2vfp },
160 { RTLIB::OGE_F32, RTLIB::impl___gesf2vfp },
161 { RTLIB::OGT_F32, RTLIB::impl___gtsf2vfp },
162 { RTLIB::UO_F32, RTLIB::impl___unordsf2vfp },
165 { RTLIB::OEQ_F64, RTLIB::impl___eqdf2vfp },
166 { RTLIB::UNE_F64, RTLIB::impl___nedf2vfp },
167 { RTLIB::OLT_F64, RTLIB::impl___ltdf2vfp },
168 { RTLIB::OLE_F64, RTLIB::impl___ledf2vfp },
169 { RTLIB::OGE_F64, RTLIB::impl___gedf2vfp },
170 { RTLIB::OGT_F64, RTLIB::impl___gtdf2vfp },
171 { RTLIB::UO_F64, RTLIB::impl___unorddf2vfp },
176 { RTLIB::FPTOSINT_F64_I32, RTLIB::impl___fixdfsivfp },
177 { RTLIB::FPTOUINT_F64_I32, RTLIB::impl___fixunsdfsivfp },
178 { RTLIB::FPTOSINT_F32_I32, RTLIB::impl___fixsfsivfp },
179 { RTLIB::FPTOUINT_F32_I32, RTLIB::impl___fixunssfsivfp },
182 { RTLIB::FPROUND_F64_F32, RTLIB::impl___truncdfsf2vfp },
183 { RTLIB::FPEXT_F32_F64, RTLIB::impl___extendsfdf2vfp },
190 { RTLIB::SINTTOFP_I32_F64, RTLIB::impl___floatsidfvfp },
191 { RTLIB::UINTTOFP_I32_F64, RTLIB::impl___floatunssidfvfp },
192 { RTLIB::SINTTOFP_I32_F32, RTLIB::impl___floatsisfvfp },
193 { RTLIB::UINTTOFP_I32_F32, RTLIB::impl___floatunssisfvfp },
197 for (
const auto &LC : LibraryCalls)
198 Info.setLibcallImpl(LC.Op, LC.Impl);
202 static const struct {
203 const RTLIB::Libcall
Op;
204 const RTLIB::LibcallImpl Impl;
205 } AEABISelected[] = {
207 {RTLIB::ADD_F64, RTLIB::impl___aeabi_dadd},
208 {RTLIB::DIV_F64, RTLIB::impl___aeabi_ddiv},
209 {RTLIB::MUL_F64, RTLIB::impl___aeabi_dmul},
210 {RTLIB::SUB_F64, RTLIB::impl___aeabi_dsub},
212 {RTLIB::OEQ_F64, RTLIB::impl___aeabi_dcmpeq},
213 {RTLIB::OLT_F64, RTLIB::impl___aeabi_dcmplt},
214 {RTLIB::OLE_F64, RTLIB::impl___aeabi_dcmple},
215 {RTLIB::OGE_F64, RTLIB::impl___aeabi_dcmpge},
216 {RTLIB::OGT_F64, RTLIB::impl___aeabi_dcmpgt},
217 {RTLIB::UO_F64, RTLIB::impl___aeabi_dcmpun},
219 {RTLIB::ADD_F32, RTLIB::impl___aeabi_fadd},
220 {RTLIB::DIV_F32, RTLIB::impl___aeabi_fdiv},
221 {RTLIB::MUL_F32, RTLIB::impl___aeabi_fmul},
222 {RTLIB::SUB_F32, RTLIB::impl___aeabi_fsub},
224 {RTLIB::OEQ_F32, RTLIB::impl___aeabi_fcmpeq},
225 {RTLIB::OLT_F32, RTLIB::impl___aeabi_fcmplt},
226 {RTLIB::OLE_F32, RTLIB::impl___aeabi_fcmple},
227 {RTLIB::OGE_F32, RTLIB::impl___aeabi_fcmpge},
228 {RTLIB::OGT_F32, RTLIB::impl___aeabi_fcmpgt},
229 {RTLIB::UO_F32, RTLIB::impl___aeabi_fcmpun},
231 {RTLIB::FPTOSINT_F64_I32, RTLIB::impl___aeabi_d2iz},
232 {RTLIB::FPTOUINT_F64_I32, RTLIB::impl___aeabi_d2uiz},
233 {RTLIB::FPTOSINT_F64_I64, RTLIB::impl___aeabi_d2lz},
234 {RTLIB::FPTOUINT_F64_I64, RTLIB::impl___aeabi_d2ulz},
235 {RTLIB::FPTOSINT_F32_I32, RTLIB::impl___aeabi_f2iz},
236 {RTLIB::FPTOUINT_F32_I32, RTLIB::impl___aeabi_f2uiz},
237 {RTLIB::FPTOSINT_F32_I64, RTLIB::impl___aeabi_f2lz},
238 {RTLIB::FPTOUINT_F32_I64, RTLIB::impl___aeabi_f2ulz},
240 {RTLIB::SINTTOFP_I32_F64, RTLIB::impl___aeabi_i2d},
241 {RTLIB::UINTTOFP_I32_F64, RTLIB::impl___aeabi_ui2d},
242 {RTLIB::SINTTOFP_I64_F64, RTLIB::impl___aeabi_l2d},
243 {RTLIB::UINTTOFP_I64_F64, RTLIB::impl___aeabi_ul2d},
244 {RTLIB::SINTTOFP_I32_F32, RTLIB::impl___aeabi_i2f},
245 {RTLIB::UINTTOFP_I32_F32, RTLIB::impl___aeabi_ui2f},
246 {RTLIB::SINTTOFP_I64_F32, RTLIB::impl___aeabi_l2f},
247 {RTLIB::UINTTOFP_I64_F32, RTLIB::impl___aeabi_ul2f},
249 {RTLIB::MUL_I64, RTLIB::impl___aeabi_lmul},
250 {RTLIB::SHL_I64, RTLIB::impl___aeabi_llsl},
251 {RTLIB::SRL_I64, RTLIB::impl___aeabi_llsr},
252 {RTLIB::SRA_I64, RTLIB::impl___aeabi_lasr},
254 {RTLIB::SDIV_I32, RTLIB::impl___aeabi_idiv},
255 {RTLIB::UDIV_I32, RTLIB::impl___aeabi_uidiv},
259 for (
const auto &LC : AEABISelected) {
261 Info.setLibcallImpl(LC.Op, LC.Impl);
269 Info.setLibcallImpl(RTLIB::UNE_F32, RTLIB::Unsupported);
271 Info.setLibcallImpl(RTLIB::UNE_F64, RTLIB::Unsupported);