Компилятор может заменять вызов библиотечной функции на inline код. GCC это делает -- факт. Какие там у конкретного CPU команды дело десятое. Просто у многих CPU уровнем по-выше чем пик-контроллеры проф. уровня есть (префикс) команды повторения и блочной пересылки и они используются для вещей вроде memset и memcpy и это эффективнее, чем пересылать в цикле по-байтику. Особенно если CPU 32-битный -- он может разом по 4 байта. Ещё ньюанс -- даже если вызывается и библиотечная функция, то с чего она хуже, чем самодельный цикл? Она в нормальной библиотеке оптимизирована хорошо. GCC вставляет inline код, когда аргументы memset, memmove или memcpy константа -- т.е. ему легко сразу сгенерировать нужный код. Даже если нет блочной пересылки, там может появиться что-то типа такого:
clr.b w2
mov.b w2,[w0++]
mov.b w2,[w0++]
mov.b w2,[w0++]
mov.b w2,[w0++]
mov.b w2,[w0++]
mov.b w2,[w0++]
mov.b w2,[w0++]
mov.b w2,[w0]
mov w1,w0
что явно эффективнее самодельных циклов.