Сопроцессор (FPU) предназначен для выполнения операций над вещественными числами. С программной точки зрения сопроцессор содержит блок регистров данных, регистр управления и группу регистров состояния и указателей. Восемь регистров данных разрядностью 80 бит организованы в стек. Номер регистра, являющегося текущей вершиной стека, хранится в специальном поле регистра состояния (указателе вершины стека). Операция push уменьшает значение указателя на 1 и помещает в стек данные в регистр, являющийся новой вершиной стека. Операция pop записывает данные с вершины стека в память или регистр и увеличивает указатель на 1. Инструкции адресуют регистры либо явно, либо неявно. Неявная адресация подразумевает операнд, находящийся на вершине стека. Явная адресация подразумевает указание смещения регистра относительно вершины стека - st(i).
Регистры данных FPU (арифметический стек)
Физические номера | 80 бит | Относительные номера | ||
1 бит | 15 бит | 64 бит | ||
Знак | Порядок | Мантисса | ||
mm0 | ST(5) | |||
mm1 | ST(6) | |||
mm2 | ST(7) | |||
mm3 | ST(0) | |||
mm4 | ST(1) | |||
mm5 | ST(2) | |||
mm6 | ST(3) | |||
mm7 | ST(4) | |||
Регистры MMX / 3DNow! |
Расширение MMX
MMX было первым расширением, реализующим технологию SIMD (Single Instruction - Multiple Data). Основная идея SIMD заключается в одновременной обработке нескольких элементов данных одной операцией. Расширение MMX использует новые типы упакованных 64-битные целочисленных данных:
- 8 упакованных байт (Packed byte);
- 4 упакованных слова (Packed word);
- 2 упакованных двойных слова (Packed double word);
- 1 учетверенное слово (Quad word);
Эти типы данных могут специальным образом обрабатываться в 64-битных регистрах MM0-MM7, представляющих собой младшие биты стека 80-битных регистров FPU. Каждая инструкция MMX выполняет действие сразу над всем комплектом операндов (8, 4, 2 или 1), размещенных в адресуемых регистрах. Как и регистры FPU, эти регистры не могут использоваться для адресации памяти. Совпадение регистров MMX и FPU накладывает ограничение на чередование кодов FPU и MMX. В отличие от стека FPU регистры MMX адресуются не с помощью стека, а физически (по своим физическим номерам).
|
Расширение 3DNow!
Технология 3DNow!, разработанная AMD, расширяет возможности MMX. Она позволяет оперировать с новым типом данных - парой упакованных вещественных чисел одинарной точности. Эти числа занимают по двойному слову (32 бита) в 64-битных регистрах MMX.
Расширение 3DNow! работает с упакованными данными в FP-формате с одинарной точностью, а также упакованными 8 байт, 4 слова, 2 двойных слова и 64-битными целыми числами, размещая их в младших 64 битах регистров FPU/MMX.
Блок XMM
Начиная с Pentium III, Intel использует в своих процессорах новое потоковое расширение SSE (Streaming SIMD Extension). Оно реализуется дополнительным независимым блоком, имеющим восемь 128-битных регистров, названных XMM0-XMM7, и регистр состояния/управления MXCSR. В каждый из регистров XMM помещаются четыре числа в формате с плавающей точкой одинарной точности. Блок позволяет выполнять векторные (пакетные) и скалярные инструкции. Векторные инструкции реализуют операции сразу над четырьмя комплектами операндов. Скалярные инструкции работают только с одним комплектом операндов - младшим 32-битным словом. При выполнении инструкций XMM традиционное оборудование FPU/MMX не используется, что позволяет эффективно смешивать инструкции MMX с инструкциями с плавающей точкой.
|
Кроме инструкций с новым блоком XMM в расширение SSE входят и дополнительные целочисленные инструкции с регистрами MMX, а также инструкции управления кэшированием.
В процессоре Pentium4 набор инструкций получил новое расширение - SSE2, в основном касающееся добавления новых типов 128-битных типов данных для блока XMM:
- упакованная пара вещественных чисел двойной точности;
- упакованные целые числа: 16 байт, 8 слов, 4 двойных слова или пара учетверенных слов.
В процессор введены новые функции целочисленной арифметики, 128-разрядные для регистров XMM и такие же 64-разрядные для регистров MMX; ряд старых инструкций MMX распространили на XMM (в 128-битном варианте); добавлены инструкции преобразования для новых форматов данных, а также расширены возможности "перемешивания" данных в блоке XMM. Кроме того, расширена поддержка управления кэшированием и порядком исполнения операций с памятью.