@@ -265,6 +265,24 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
265265 setLibcallName (RTLIB::UREM_I8, nullptr );
266266 setLibcallName (RTLIB::UREM_I16, nullptr );
267267 setLibcallName (RTLIB::UREM_I32, nullptr );
268+
269+ // Division and modulus rtlib functions
270+ setLibcallName (RTLIB::SDIVREM_I8, " __divmodqi4" );
271+ setLibcallName (RTLIB::SDIVREM_I16, " __divmodhi4" );
272+ setLibcallName (RTLIB::SDIVREM_I32, " __divmodsi4" );
273+ setLibcallName (RTLIB::UDIVREM_I8, " __udivmodqi4" );
274+ setLibcallName (RTLIB::UDIVREM_I16, " __udivmodhi4" );
275+ setLibcallName (RTLIB::UDIVREM_I32, " __udivmodsi4" );
276+
277+ // Several of the runtime library functions use a special calling conv
278+ setLibcallCallingConv (RTLIB::SDIVREM_I8, CallingConv::AVR_BUILTIN);
279+ setLibcallCallingConv (RTLIB::SDIVREM_I16, CallingConv::AVR_BUILTIN);
280+ setLibcallCallingConv (RTLIB::UDIVREM_I8, CallingConv::AVR_BUILTIN);
281+ setLibcallCallingConv (RTLIB::UDIVREM_I16, CallingConv::AVR_BUILTIN);
282+
283+ // Trigonometric rtlib functions
284+ setLibcallName (RTLIB::SIN_F32, " sin" );
285+ setLibcallName (RTLIB::COS_F32, " cos" );
268286 }
269287
270288 if (!TT.isWasm ()) {
0 commit comments