MMX


MMX (Multimedia Extensions — мультимедийные расширения) — коммерческое название дополнительного SIMD-набора инструкций, разработанного компанией Intel и впервые представленного в 1997 году одновременно с линией процессоров Pentium MMX. Набор инструкций был предназначен для ускорения процессов кодирования/декодирования потоковых аудио- и видеоданных. Является развитием технологий, предложенных в микропроцессоре i860[1]. Разработан в лаборатории Intel в Хайфе, Израиль, в первой половине 1990-х[2][3].

Сейчас набор инструкций MMX, представленный в 1997 году, является откровенно устаревшим и уже давно вытеснен различными версиями SSE и AVX. Тем не менее, в средствах разработки он всё ещё формально поддерживается; правда, в силу редкости использования реализация страдает от многочисленных дефектов. Поэтому есть предложения удалить его из популярного набора компиляторов LLVM[4].

Расширение MMX включает в себя восемь 64-битных регистров общего пользования MM0—MM7. Для совместимости со способами переключения контекста процессора в существующих ОС Intel была вынуждена объединить в программной модели процессора восемь регистров MMX с мантиссами восьми регистров FPU. Аппаратно это могут быть разные устройства, но с точки зрения программиста — это одни и те же регистры. Таким образом, нельзя одновременно пользоваться командами математического сопроцессора и MMX.

Команды технологии MMX обрабатывают целочисленные данные, упакованные в группы (векторы) общей длиной 64 бита, либо одиночные 64-битные слова. Такие данные могут находиться в памяти или в восьми MMX-регистрах.

MMX-команды имеют следующий синтаксис:instruction [dest, src] Здесь instruction — имя команды, dest обозначает выходной операнд, src — входной операнд.

Систему команд образуют 57 инструкций, позволяющих параллельно обрабатывать несколько элементов данных[5]. Большинство команд имеет суффикс, который определяет тип данных и используемую арифметику: