Использование команд MMX в приложениях
Для создания мобильных приложений, которые могут исполняться для процессоров, поддерживающих технологию MMX и не поддерживающих ее рекомендуется создавать 2 варианта кода и выбирать оптимальный программным путем.
Для определения возможности использования команд MMX для данного процессора используется команда CPUID, EAX = 1. Если технология MMX поддерживается, бит 23 в регистре EDX установлен в 1. Пример кода для проверки:
…
mov eax, 1
cpuid
test edx, 00800000H
jnz short yes; MMX поддерживается
…
При создании функций. Использующих команды MMX допускается передача параметров через регистры MMX. В настоящее время нет соглашения для передачи параметров через регистры MMX в языке С. Поэтому функции, принимающие параметры в регистрах MMX и соответствующий вызов необходимо писать на ассемблере или делать ассемблерные вставки.
Возврат значения:
* Если значений много - записываются в структуру, а адрес структуры - в регистр EAX;
* В регистре MMX, но тогда в конце функции нельзя использовать команду EMMS, а это плохо!
Рассмотрим более подробно операции процессора при переключении в режим MMX:
* В поле экспоненты всех MMX - регистров записывается 1 во все биты (16 бит);
* В поле тегов записывается 00, что соответствует занятости всех регистров;
* Вершина стека устанавливается на физически первый регистр.
В таблице представлено влияние команд FPU/MMX на регистры
Для того, чтобы частое переключение режимов меньше сказывалось на производительности процессора рекомендуется:
* в функции (цикле) использовать команды одного типа;
* не использовать содержимое регистров, сформированное командами другого типа;
* как только команды MMX не требуются выполнить переключение режима (команда EMMS);
* перед выходом из функции, использующей FPU очищать стек FPU.