@@ -151,104 +151,99 @@ MSP430TargetLowering::MSP430TargetLowering(const TargetMachine &TM,
151
151
// EABI Libcalls - EABI Section 6.2
152
152
const struct {
153
153
const RTLIB::Libcall Op;
154
- const char * const Name;
155
- const ISD::CondCode Cond;
154
+ const char *const Name;
156
155
} 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
245
243
};
246
244
247
- for (const auto &LC : LibraryCalls) {
245
+ for (const auto &LC : LibraryCalls)
248
246
setLibcallName (LC.Op , LC.Name );
249
- if (LC.Cond != ISD::SETCC_INVALID)
250
- setCmpLibcallCC (LC.Op , LC.Cond );
251
- }
252
247
253
248
if (STI.hasHWMult16 ()) {
254
249
const struct {
0 commit comments