@@ -100,137 +100,6 @@ static void setARMLibcallNames(RuntimeLibcallsInfo &Info, const Triple &TT,
100
100
}
101
101
}
102
102
103
- static void setMSP430Libcalls (RuntimeLibcallsInfo &Info, const Triple &TT) {
104
- // EABI Libcalls - EABI Section 6.2
105
- const struct {
106
- const RTLIB::Libcall Op;
107
- const RTLIB::LibcallImpl Impl;
108
- } LibraryCalls[] = {
109
- // Floating point conversions - EABI Table 6
110
- {RTLIB::FPROUND_F64_F32, RTLIB::__mspabi_cvtdf},
111
- {RTLIB::FPEXT_F32_F64, RTLIB::__mspabi_cvtfd},
112
- // The following is NOT implemented in libgcc
113
- // { RTLIB::FPTOSINT_F64_I16, RTLIB::__mspabi_fixdi },
114
- {RTLIB::FPTOSINT_F64_I32, RTLIB::__mspabi_fixdli},
115
- {RTLIB::FPTOSINT_F64_I64, RTLIB::__mspabi_fixdlli},
116
- // The following is NOT implemented in libgcc
117
- // { RTLIB::FPTOUINT_F64_I16, RTLIB::__mspabi_fixdu },
118
- {RTLIB::FPTOUINT_F64_I32, RTLIB::__mspabi_fixdul},
119
- {RTLIB::FPTOUINT_F64_I64, RTLIB::__mspabi_fixdull},
120
- // The following is NOT implemented in libgcc
121
- // { RTLIB::FPTOSINT_F32_I16, RTLIB::__mspabi_fixfi },
122
- {RTLIB::FPTOSINT_F32_I32, RTLIB::__mspabi_fixfli},
123
- {RTLIB::FPTOSINT_F32_I64, RTLIB::__mspabi_fixflli},
124
- // The following is NOT implemented in libgcc
125
- // { RTLIB::FPTOUINT_F32_I16, RTLIB::__mspabi_fixfu },
126
- {RTLIB::FPTOUINT_F32_I32, RTLIB::__mspabi_fixful},
127
- {RTLIB::FPTOUINT_F32_I64, RTLIB::__mspabi_fixfull},
128
- // TODO The following IS implemented in libgcc
129
- // { RTLIB::SINTTOFP_I16_F64, RTLIB::__mspabi_fltid },
130
- {RTLIB::SINTTOFP_I32_F64, RTLIB::__mspabi_fltlid},
131
- // TODO The following IS implemented in libgcc but is not in the EABI
132
- {RTLIB::SINTTOFP_I64_F64, RTLIB::__mspabi_fltllid},
133
- // TODO The following IS implemented in libgcc
134
- // { RTLIB::UINTTOFP_I16_F64, RTLIB::__mspabi_fltud },
135
- {RTLIB::UINTTOFP_I32_F64, RTLIB::__mspabi_fltuld},
136
- // The following IS implemented in libgcc but is not in the EABI
137
- {RTLIB::UINTTOFP_I64_F64, RTLIB::__mspabi_fltulld},
138
- // TODO The following IS implemented in libgcc
139
- // { RTLIB::SINTTOFP_I16_F32, RTLIB::__mspabi_fltif },
140
- {RTLIB::SINTTOFP_I32_F32, RTLIB::__mspabi_fltlif},
141
- // TODO The following IS implemented in libgcc but is not in the EABI
142
- {RTLIB::SINTTOFP_I64_F32, RTLIB::__mspabi_fltllif},
143
- // TODO The following IS implemented in libgcc
144
- // { RTLIB::UINTTOFP_I16_F32, RTLIB::__mspabi_fltuf },
145
- {RTLIB::UINTTOFP_I32_F32, RTLIB::__mspabi_fltulf},
146
- // The following IS implemented in libgcc but is not in the EABI
147
- {RTLIB::UINTTOFP_I64_F32, RTLIB::__mspabi_fltullf},
148
-
149
- // Floating point comparisons - EABI Table 7
150
- {RTLIB::OEQ_F64, RTLIB::__mspabi_cmpd__oeq},
151
- {RTLIB::UNE_F64, RTLIB::__mspabi_cmpd__une},
152
- {RTLIB::OGE_F64, RTLIB::__mspabi_cmpd__oge},
153
- {RTLIB::OLT_F64, RTLIB::__mspabi_cmpd__olt},
154
- {RTLIB::OLE_F64, RTLIB::__mspabi_cmpd__ole},
155
- {RTLIB::OGT_F64, RTLIB::__mspabi_cmpd__ogt},
156
- {RTLIB::OEQ_F32, RTLIB::__mspabi_cmpf__oeq},
157
- {RTLIB::UNE_F32, RTLIB::__mspabi_cmpf__une},
158
- {RTLIB::OGE_F32, RTLIB::__mspabi_cmpf__oge},
159
- {RTLIB::OLT_F32, RTLIB::__mspabi_cmpf__olt},
160
- {RTLIB::OLE_F32, RTLIB::__mspabi_cmpf__ole},
161
- {RTLIB::OGT_F32, RTLIB::__mspabi_cmpf__ogt},
162
-
163
- // Floating point arithmetic - EABI Table 8
164
- {RTLIB::ADD_F64, RTLIB::__mspabi_addd},
165
- {RTLIB::ADD_F32, RTLIB::__mspabi_addf},
166
- {RTLIB::DIV_F64, RTLIB::__mspabi_divd},
167
- {RTLIB::DIV_F32, RTLIB::__mspabi_divf},
168
- {RTLIB::MUL_F64, RTLIB::__mspabi_mpyd},
169
- {RTLIB::MUL_F32, RTLIB::__mspabi_mpyf},
170
- {RTLIB::SUB_F64, RTLIB::__mspabi_subd},
171
- {RTLIB::SUB_F32, RTLIB::__mspabi_subf},
172
- // The following are NOT implemented in libgcc
173
- // { RTLIB::NEG_F64, RTLIB::__mspabi_negd },
174
- // { RTLIB::NEG_F32, RTLIB::__mspabi_negf },
175
-
176
- // Universal Integer Operations - EABI Table 9
177
- {RTLIB::SDIV_I16, RTLIB::__mspabi_divi},
178
- {RTLIB::SDIV_I32, RTLIB::__mspabi_divli},
179
- {RTLIB::SDIV_I64, RTLIB::__mspabi_divlli},
180
- {RTLIB::UDIV_I16, RTLIB::__mspabi_divu},
181
- {RTLIB::UDIV_I32, RTLIB::__mspabi_divul},
182
- {RTLIB::UDIV_I64, RTLIB::__mspabi_divull},
183
- {RTLIB::SREM_I16, RTLIB::__mspabi_remi},
184
- {RTLIB::SREM_I32, RTLIB::__mspabi_remli},
185
- {RTLIB::SREM_I64, RTLIB::__mspabi_remlli},
186
- {RTLIB::UREM_I16, RTLIB::__mspabi_remu},
187
- {RTLIB::UREM_I32, RTLIB::__mspabi_remul},
188
- {RTLIB::UREM_I64, RTLIB::__mspabi_remull},
189
-
190
- // Bitwise Operations - EABI Table 10
191
- // TODO: __mspabi_[srli/srai/slli] ARE implemented in libgcc
192
- {RTLIB::SRL_I32, RTLIB::__mspabi_srll},
193
- {RTLIB::SRA_I32, RTLIB::__mspabi_sral},
194
- {RTLIB::SHL_I32, RTLIB::__mspabi_slll},
195
- // __mspabi_[srlll/srall/sllll/rlli/rlll] are NOT implemented in libgcc
196
- };
197
-
198
- for (const auto &LC : LibraryCalls)
199
- Info.setLibcallImpl (LC.Op , LC.Impl );
200
-
201
- // Several of the runtime library functions use a special calling conv
202
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_divull,
203
- CallingConv::MSP430_BUILTIN);
204
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_remull,
205
- CallingConv::MSP430_BUILTIN);
206
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_divlli,
207
- CallingConv::MSP430_BUILTIN);
208
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_remlli,
209
- CallingConv::MSP430_BUILTIN);
210
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_addd,
211
- CallingConv::MSP430_BUILTIN);
212
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_subd,
213
- CallingConv::MSP430_BUILTIN);
214
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_mpyd,
215
- CallingConv::MSP430_BUILTIN);
216
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_divd,
217
- CallingConv::MSP430_BUILTIN);
218
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_cmpd__oeq,
219
- CallingConv::MSP430_BUILTIN);
220
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_cmpd__une,
221
- CallingConv::MSP430_BUILTIN);
222
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_cmpd__oge,
223
- CallingConv::MSP430_BUILTIN);
224
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_cmpd__olt,
225
- CallingConv::MSP430_BUILTIN);
226
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_cmpd__ole,
227
- CallingConv::MSP430_BUILTIN);
228
- Info.setLibcallImplCallingConv (RTLIB::__mspabi_cmpd__ogt,
229
- CallingConv::MSP430_BUILTIN);
230
-
231
- // TODO: __mspabi_srall, __mspabi_srlll, __mspabi_sllll
232
- }
233
-
234
103
void RuntimeLibcallsInfo::initSoftFloatCmpLibcallPredicates () {
235
104
SoftFloatCompareLibcallPredicates[RTLIB::OEQ_F32] = CmpInst::ICMP_EQ;
236
105
SoftFloatCompareLibcallPredicates[RTLIB::OEQ_F64] = CmpInst::ICMP_EQ;
@@ -473,13 +342,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
473
342
474
343
if (TT.isARM () || TT.isThumb ())
475
344
setARMLibcallNames (*this , TT, FloatABI, EABIVersion);
476
- else if (TT.getArch () == Triple::ArchType::avr) {
477
- // Several of the runtime library functions use a special calling conv
478
- setLibcallImplCallingConv (RTLIB::__divmodqi4, CallingConv::AVR_BUILTIN);
479
- setLibcallImplCallingConv (RTLIB::__divmodhi4, CallingConv::AVR_BUILTIN);
480
- setLibcallImplCallingConv (RTLIB::__udivmodqi4, CallingConv::AVR_BUILTIN);
481
- setLibcallImplCallingConv (RTLIB::__udivmodhi4, CallingConv::AVR_BUILTIN);
482
- }
483
345
484
346
if (!TT.isWasm ()) {
485
347
// These libcalls are only available in compiler-rt, not libgcc.
@@ -535,7 +397,4 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
535
397
RTLIB::HEXAGON_MEMCPY_LIKELY_ALIGNED_MIN32BYTES_MULT8BYTES,
536
398
RTLIB::__hexagon_memcpy_likely_aligned_min32bytes_mult8bytes);
537
399
}
538
-
539
- if (TT.getArch () == Triple::ArchType::msp430)
540
- setMSP430Libcalls (*this , TT);
541
400
}
0 commit comments