Компилятор TI для C64x / C64x + DSP на OMAP3 включает поддержку того, что TI называет «внутренними» вызовами функций. На самом деле это не вызовы функций, это просто способ сообщить компилятору, какой код операции сборки использовать для операции, которая не может быть прямо выражена в C. Это особенно полезно для использования кодов операций SIMD в C64x / C64x + DSP из C.
Примером может быть:
A = _add2 (B, C);
Эта инструкция SIMD складывает младшие / старшие 16 битов B и C вместе и сохраняет результаты в младших / старших 16 битах A. Вы не можете выразить это в обычном C, но вы можете сделать это с помощью встроенного C-коды.
Я использовал встроенный C, чтобы максимально приблизиться к тому, что вы могли бы сделать с полнофункциональным языком ассемблера (в пределах 5-10%). Это особенно полезно для видео функций, таких как фильтрация и компенсация движения (_dotpsu4!).
Я обычно компилирую с ключом -al и смотрю на конвейер, чтобы попытаться определить, какие функциональные блоки перегружены, а затем смотрю на свои внутренние компоненты, чтобы посмотреть, смогу ли я перебалансировать цикл (если я использую слишком много блоков S, Я мог бы посмотреть, смогу ли я изменить код операции, чтобы использовать единицу M).
Также полезно помнить, что C64x DSP имеет 64 регистра, поэтому загрузите локальные переменные и никогда назначьте вывод команды обратно в ту же переменную - это отрицательно скажется на способности компилятора правильно выполнять конвейеризацию.