@@ -151,104 +151,99 @@ MSP430TargetLowering::MSP430TargetLowering(const TargetMachine &TM,
151151 // EABI Libcalls - EABI Section 6.2
152152 const struct {
153153 const RTLIB::Libcall Op;
154- const char * const Name;
155- const ISD::CondCode Cond;
154+ const char *const Name;
156155 } LibraryCalls[] = {
157- // Floating point conversions - EABI Table 6
158- { RTLIB::FPROUND_F64_F32, " __mspabi_cvtdf" , ISD::SETCC_INVALID },
159- { RTLIB::FPEXT_F32_F64, " __mspabi_cvtfd" , ISD::SETCC_INVALID },
160- // The following is NOT implemented in libgcc
161- // { RTLIB::FPTOSINT_F64_I16, "__mspabi_fixdi", ISD::SETCC_INVALID },
162- { RTLIB::FPTOSINT_F64_I32, " __mspabi_fixdli" , ISD::SETCC_INVALID },
163- { RTLIB::FPTOSINT_F64_I64, " __mspabi_fixdlli" , ISD::SETCC_INVALID },
164- // The following is NOT implemented in libgcc
165- // { RTLIB::FPTOUINT_F64_I16, "__mspabi_fixdu", ISD::SETCC_INVALID },
166- { RTLIB::FPTOUINT_F64_I32, " __mspabi_fixdul" , ISD::SETCC_INVALID },
167- { RTLIB::FPTOUINT_F64_I64, " __mspabi_fixdull" , ISD::SETCC_INVALID },
168- // The following is NOT implemented in libgcc
169- // { RTLIB::FPTOSINT_F32_I16, "__mspabi_fixfi", ISD::SETCC_INVALID },
170- { RTLIB::FPTOSINT_F32_I32, " __mspabi_fixfli" , ISD::SETCC_INVALID },
171- { RTLIB::FPTOSINT_F32_I64, " __mspabi_fixflli" , ISD::SETCC_INVALID },
172- // The following is NOT implemented in libgcc
173- // { RTLIB::FPTOUINT_F32_I16, "__mspabi_fixfu", ISD::SETCC_INVALID },
174- { RTLIB::FPTOUINT_F32_I32, " __mspabi_fixful" , ISD::SETCC_INVALID },
175- { RTLIB::FPTOUINT_F32_I64, " __mspabi_fixfull" , ISD::SETCC_INVALID },
176- // TODO The following IS implemented in libgcc
177- // { RTLIB::SINTTOFP_I16_F64, "__mspabi_fltid", ISD::SETCC_INVALID },
178- { RTLIB::SINTTOFP_I32_F64, " __mspabi_fltlid" , ISD::SETCC_INVALID },
179- // TODO The following IS implemented in libgcc but is not in the EABI
180- { RTLIB::SINTTOFP_I64_F64, " __mspabi_fltllid" , ISD::SETCC_INVALID },
181- // TODO The following IS implemented in libgcc
182- // { RTLIB::UINTTOFP_I16_F64, "__mspabi_fltud", ISD::SETCC_INVALID },
183- { RTLIB::UINTTOFP_I32_F64, " __mspabi_fltuld" , ISD::SETCC_INVALID },
184- // The following IS implemented in libgcc but is not in the EABI
185- { RTLIB::UINTTOFP_I64_F64, " __mspabi_fltulld" , ISD::SETCC_INVALID },
186- // TODO The following IS implemented in libgcc
187- // { RTLIB::SINTTOFP_I16_F32, "__mspabi_fltif", ISD::SETCC_INVALID },
188- { RTLIB::SINTTOFP_I32_F32, " __mspabi_fltlif" , ISD::SETCC_INVALID },
189- // TODO The following IS implemented in libgcc but is not in the EABI
190- { RTLIB::SINTTOFP_I64_F32, " __mspabi_fltllif" , ISD::SETCC_INVALID },
191- // TODO The following IS implemented in libgcc
192- // { RTLIB::UINTTOFP_I16_F32, "__mspabi_fltuf", ISD::SETCC_INVALID },
193- { RTLIB::UINTTOFP_I32_F32, " __mspabi_fltulf" , ISD::SETCC_INVALID },
194- // The following IS implemented in libgcc but is not in the EABI
195- { RTLIB::UINTTOFP_I64_F32, " __mspabi_fltullf" , ISD::SETCC_INVALID },
196-
197- // Floating point comparisons - EABI Table 7
198- { RTLIB::OEQ_F64, " __mspabi_cmpd" , ISD::SETEQ },
199- { RTLIB::UNE_F64, " __mspabi_cmpd" , ISD::SETNE },
200- { RTLIB::OGE_F64, " __mspabi_cmpd" , ISD::SETGE },
201- { RTLIB::OLT_F64, " __mspabi_cmpd" , ISD::SETLT },
202- { RTLIB::OLE_F64, " __mspabi_cmpd" , ISD::SETLE },
203- { RTLIB::OGT_F64, " __mspabi_cmpd" , ISD::SETGT },
204- { RTLIB::OEQ_F32, " __mspabi_cmpf" , ISD::SETEQ },
205- { RTLIB::UNE_F32, " __mspabi_cmpf" , ISD::SETNE },
206- { RTLIB::OGE_F32, " __mspabi_cmpf" , ISD::SETGE },
207- { RTLIB::OLT_F32, " __mspabi_cmpf" , ISD::SETLT },
208- { RTLIB::OLE_F32, " __mspabi_cmpf" , ISD::SETLE },
209- { RTLIB::OGT_F32, " __mspabi_cmpf" , ISD::SETGT },
210-
211- // Floating point arithmetic - EABI Table 8
212- { RTLIB::ADD_F64, " __mspabi_addd" , ISD::SETCC_INVALID },
213- { RTLIB::ADD_F32, " __mspabi_addf" , ISD::SETCC_INVALID },
214- { RTLIB::DIV_F64, " __mspabi_divd" , ISD::SETCC_INVALID },
215- { RTLIB::DIV_F32, " __mspabi_divf" , ISD::SETCC_INVALID },
216- { RTLIB::MUL_F64, " __mspabi_mpyd" , ISD::SETCC_INVALID },
217- { RTLIB::MUL_F32, " __mspabi_mpyf" , ISD::SETCC_INVALID },
218- { RTLIB::SUB_F64, " __mspabi_subd" , ISD::SETCC_INVALID },
219- { RTLIB::SUB_F32, " __mspabi_subf" , ISD::SETCC_INVALID },
220- // The following are NOT implemented in libgcc
221- // { RTLIB::NEG_F64, "__mspabi_negd", ISD::SETCC_INVALID },
222- // { RTLIB::NEG_F32, "__mspabi_negf", ISD::SETCC_INVALID },
223-
224- // Universal Integer Operations - EABI Table 9
225- { RTLIB::SDIV_I16, " __mspabi_divi" , ISD::SETCC_INVALID },
226- { RTLIB::SDIV_I32, " __mspabi_divli" , ISD::SETCC_INVALID },
227- { RTLIB::SDIV_I64, " __mspabi_divlli" , ISD::SETCC_INVALID },
228- { RTLIB::UDIV_I16, " __mspabi_divu" , ISD::SETCC_INVALID },
229- { RTLIB::UDIV_I32, " __mspabi_divul" , ISD::SETCC_INVALID },
230- { RTLIB::UDIV_I64, " __mspabi_divull" , ISD::SETCC_INVALID },
231- { RTLIB::SREM_I16, " __mspabi_remi" , ISD::SETCC_INVALID },
232- { RTLIB::SREM_I32, " __mspabi_remli" , ISD::SETCC_INVALID },
233- { RTLIB::SREM_I64, " __mspabi_remlli" , ISD::SETCC_INVALID },
234- { RTLIB::UREM_I16, " __mspabi_remu" , ISD::SETCC_INVALID },
235- { RTLIB::UREM_I32, " __mspabi_remul" , ISD::SETCC_INVALID },
236- { RTLIB::UREM_I64, " __mspabi_remull" , ISD::SETCC_INVALID },
237-
238- // Bitwise Operations - EABI Table 10
239- // TODO: __mspabi_[srli/srai/slli] ARE implemented in libgcc
240- { RTLIB::SRL_I32, " __mspabi_srll" , ISD::SETCC_INVALID },
241- { RTLIB::SRA_I32, " __mspabi_sral" , ISD::SETCC_INVALID },
242- { RTLIB::SHL_I32, " __mspabi_slll" , ISD::SETCC_INVALID },
243- // __mspabi_[srlll/srall/sllll/rlli/rlll] are NOT implemented in libgcc
244-
156+ // Floating point conversions - EABI Table 6
157+ {RTLIB::FPROUND_F64_F32, " __mspabi_cvtdf" },
158+ {RTLIB::FPEXT_F32_F64, " __mspabi_cvtfd" },
159+ // The following is NOT implemented in libgcc
160+ // { RTLIB::FPTOSINT_F64_I16, "__mspabi_fixdi" },
161+ {RTLIB::FPTOSINT_F64_I32, " __mspabi_fixdli" },
162+ {RTLIB::FPTOSINT_F64_I64, " __mspabi_fixdlli" },
163+ // The following is NOT implemented in libgcc
164+ // { RTLIB::FPTOUINT_F64_I16, "__mspabi_fixdu" },
165+ {RTLIB::FPTOUINT_F64_I32, " __mspabi_fixdul" },
166+ {RTLIB::FPTOUINT_F64_I64, " __mspabi_fixdull" },
167+ // The following is NOT implemented in libgcc
168+ // { RTLIB::FPTOSINT_F32_I16, "__mspabi_fixfi" },
169+ {RTLIB::FPTOSINT_F32_I32, " __mspabi_fixfli" },
170+ {RTLIB::FPTOSINT_F32_I64, " __mspabi_fixflli" },
171+ // The following is NOT implemented in libgcc
172+ // { RTLIB::FPTOUINT_F32_I16, "__mspabi_fixfu" },
173+ {RTLIB::FPTOUINT_F32_I32, " __mspabi_fixful" },
174+ {RTLIB::FPTOUINT_F32_I64, " __mspabi_fixfull" },
175+ // TODO The following IS implemented in libgcc
176+ // { RTLIB::SINTTOFP_I16_F64, "__mspabi_fltid" },
177+ {RTLIB::SINTTOFP_I32_F64, " __mspabi_fltlid" },
178+ // TODO The following IS implemented in libgcc but is not in the EABI
179+ {RTLIB::SINTTOFP_I64_F64, " __mspabi_fltllid" },
180+ // TODO The following IS implemented in libgcc
181+ // { RTLIB::UINTTOFP_I16_F64, "__mspabi_fltud" },
182+ {RTLIB::UINTTOFP_I32_F64, " __mspabi_fltuld" },
183+ // The following IS implemented in libgcc but is not in the EABI
184+ {RTLIB::UINTTOFP_I64_F64, " __mspabi_fltulld" },
185+ // TODO The following IS implemented in libgcc
186+ // { RTLIB::SINTTOFP_I16_F32, "__mspabi_fltif" },
187+ {RTLIB::SINTTOFP_I32_F32, " __mspabi_fltlif" },
188+ // TODO The following IS implemented in libgcc but is not in the EABI
189+ {RTLIB::SINTTOFP_I64_F32, " __mspabi_fltllif" },
190+ // TODO The following IS implemented in libgcc
191+ // { RTLIB::UINTTOFP_I16_F32, "__mspabi_fltuf" },
192+ {RTLIB::UINTTOFP_I32_F32, " __mspabi_fltulf" },
193+ // The following IS implemented in libgcc but is not in the EABI
194+ {RTLIB::UINTTOFP_I64_F32, " __mspabi_fltullf" },
195+
196+ // Floating point comparisons - EABI Table 7
197+ {RTLIB::OEQ_F64, " __mspabi_cmpd" },
198+ {RTLIB::UNE_F64, " __mspabi_cmpd" },
199+ {RTLIB::OGE_F64, " __mspabi_cmpd" },
200+ {RTLIB::OLT_F64, " __mspabi_cmpd" },
201+ {RTLIB::OLE_F64, " __mspabi_cmpd" },
202+ {RTLIB::OGT_F64, " __mspabi_cmpd" },
203+ {RTLIB::OEQ_F32, " __mspabi_cmpf" },
204+ {RTLIB::UNE_F32, " __mspabi_cmpf" },
205+ {RTLIB::OGE_F32, " __mspabi_cmpf" },
206+ {RTLIB::OLT_F32, " __mspabi_cmpf" },
207+ {RTLIB::OLE_F32, " __mspabi_cmpf" },
208+ {RTLIB::OGT_F32, " __mspabi_cmpf" },
209+
210+ // Floating point arithmetic - EABI Table 8
211+ {RTLIB::ADD_F64, " __mspabi_addd" },
212+ {RTLIB::ADD_F32, " __mspabi_addf" },
213+ {RTLIB::DIV_F64, " __mspabi_divd" },
214+ {RTLIB::DIV_F32, " __mspabi_divf" },
215+ {RTLIB::MUL_F64, " __mspabi_mpyd" },
216+ {RTLIB::MUL_F32, " __mspabi_mpyf" },
217+ {RTLIB::SUB_F64, " __mspabi_subd" },
218+ {RTLIB::SUB_F32, " __mspabi_subf" },
219+ // The following are NOT implemented in libgcc
220+ // { RTLIB::NEG_F64, "__mspabi_negd" },
221+ // { RTLIB::NEG_F32, "__mspabi_negf" },
222+
223+ // Universal Integer Operations - EABI Table 9
224+ {RTLIB::SDIV_I16, " __mspabi_divi" },
225+ {RTLIB::SDIV_I32, " __mspabi_divli" },
226+ {RTLIB::SDIV_I64, " __mspabi_divlli" },
227+ {RTLIB::UDIV_I16, " __mspabi_divu" },
228+ {RTLIB::UDIV_I32, " __mspabi_divul" },
229+ {RTLIB::UDIV_I64, " __mspabi_divull" },
230+ {RTLIB::SREM_I16, " __mspabi_remi" },
231+ {RTLIB::SREM_I32, " __mspabi_remli" },
232+ {RTLIB::SREM_I64, " __mspabi_remlli" },
233+ {RTLIB::UREM_I16, " __mspabi_remu" },
234+ {RTLIB::UREM_I32, " __mspabi_remul" },
235+ {RTLIB::UREM_I64, " __mspabi_remull" },
236+
237+ // Bitwise Operations - EABI Table 10
238+ // TODO: __mspabi_[srli/srai/slli] ARE implemented in libgcc
239+ {RTLIB::SRL_I32, " __mspabi_srll" },
240+ {RTLIB::SRA_I32, " __mspabi_sral" },
241+ {RTLIB::SHL_I32, " __mspabi_slll" },
242+ // __mspabi_[srlll/srall/sllll/rlli/rlll] are NOT implemented in libgcc
245243 };
246244
247- for (const auto &LC : LibraryCalls) {
245+ for (const auto &LC : LibraryCalls)
248246 setLibcallName (LC.Op , LC.Name );
249- if (LC.Cond != ISD::SETCC_INVALID)
250- setCmpLibcallCC (LC.Op , LC.Cond );
251- }
252247
253248 if (STI.hasHWMult16 ()) {
254249 const struct {
0 commit comments