@@ -100,137 +100,6 @@ static void setARMLibcallNames(RuntimeLibcallsInfo &Info, const Triple &TT,
100100 }
101101}
102102
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-
234103void RuntimeLibcallsInfo::initSoftFloatCmpLibcallPredicates () {
235104 SoftFloatCompareLibcallPredicates[RTLIB::OEQ_F32] = CmpInst::ICMP_EQ;
236105 SoftFloatCompareLibcallPredicates[RTLIB::OEQ_F64] = CmpInst::ICMP_EQ;
@@ -441,13 +310,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
441310
442311 if (TT.isARM () || TT.isThumb ())
443312 setARMLibcallNames (*this , TT, FloatABI, EABIVersion);
444- else if (TT.getArch () == Triple::ArchType::avr) {
445- // Several of the runtime library functions use a special calling conv
446- setLibcallImplCallingConv (RTLIB::__divmodqi4, CallingConv::AVR_BUILTIN);
447- setLibcallImplCallingConv (RTLIB::__divmodhi4, CallingConv::AVR_BUILTIN);
448- setLibcallImplCallingConv (RTLIB::__udivmodqi4, CallingConv::AVR_BUILTIN);
449- setLibcallImplCallingConv (RTLIB::__udivmodhi4, CallingConv::AVR_BUILTIN);
450- }
451313
452314 if (!TT.isWasm ()) {
453315 // These libcalls are only available in compiler-rt, not libgcc.
@@ -503,9 +365,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
503365 RTLIB::HEXAGON_MEMCPY_LIKELY_ALIGNED_MIN32BYTES_MULT8BYTES,
504366 RTLIB::__hexagon_memcpy_likely_aligned_min32bytes_mult8bytes);
505367 }
506-
507- if (TT.getArch () == Triple::ArchType::msp430)
508- setMSP430Libcalls (*this , TT);
509368}
510369
511370bool RuntimeLibcallsInfo::darwinHasExp10 (const Triple &TT) {
0 commit comments