- •4. Модель прикладного программирования.
- •4.1. Стек регистров
- •4.1.1. Управление стеком регистров
- •4.1.2. Инструкции стека регистров
- •4.2. Инструкции целочисленного вычисления
- •4.2.1. Арифметические инструкции
- •4.2.2. Логические инструкции
- •4.2.3. 32-Битные адреса и целые
- •4.2.4. Инструкции битовых полей и сдвигов
- •4.2.5. Большие константы.
- •4.3. Инструкции сравнения и предикация
- •4.3.1. Предикация
- •4.3.2. Инструкции сравнения
- •4.3.3. Типы сравнения
- •4.3.4. Передачи предикатных регистров
- •4.4. Инструкции доступа к памяти
- •4.4.1. Инструкции загрузки
- •4.4.2. Инструкции сохранения
- •4.4.3. Семафорные инструкции
- •4.4.4. Спекуляция по управлению
- •4.4.4.1. Концепции спекуляции по управлению
- •4.4.4.2. Спекуляция по управлению и инструкции
- •4.4.4.3. Спекулятивность по управлению и сравнения
- •4.4.4.4. Спекуляция по управлению без восстановления
- •4.4.4.5. Контроль операционной системы над откладыванием исключений
- •4.4.4.6. Сливание и заливание регистров
- •4.15. Инструкции, связанные со спекуляцией по управлению
- •4.4.5. Спекуляция по данным
- •4.4.5.1. Концепция спекуляции по данным
- •4.4.5.2. Спекуляция по данным и инструкции
- •4.4.5.3. Детализирование функциональности структуры alat и инструкции связанные с этим.
- •4.4.5.3.1. Выделение и проверка элементов alat
- •4.4.5.3.2. Аннулирование элементов alat.
- •4.4.5.4. Комбинирование спекуляций по управлению и по данным
- •4.4.5.5. Окончания инструкций для управления alat
- •4.4.6. Управление иерархией памяти и непротиворечивость
- •4.4.6.1 Иерархия памяти и подсказки
- •4.4.6.2. Согласованность памяти
- •4.4.7. Упорядочивание доступа к памяти
- •4.5. Инструкции переходов
- •4.5.1. Поддержка модульно планируемых циклов.
- •4.5.2. Подсказки предсказаний переходов.
- •4.5.3. Инструкции предсказания переходов
- •4.6. Инструкции мультимедиа.
- •4.6.1. Параллельная арифметика
- •4.6.2. Параллельные сдвиги
- •4.6.3. Преобразование данных
- •4.7. Пересылки регистрового файла
- •4.8. Символьные строки и подсчет совокупности
- •4.8.1. Символьные строки
- •4.8.2. Подсчет совокупности
- •4.9. Передача уровня привилегий
4.5.3. Инструкции предсказания переходов
Инструкции предсказания переходов – это полные инструкции, предназначенные только для того, чтобы обеспечить предварительную информацию о будущих переходах. Инструкции предсказания переходов обеспечивают следующие детали информации:
Месторасположение перехода. Смещение в инструкцииbrpдобавляется кIPсвязки, содержащей инструкциюbrp,даетIPсвязки содержащей будущий переход.
Адресат перехода. Относительные инструкцииbrpопределяют адресат будущего перехода с помощью 21-битного смещения (также как в переходах). Смещение плюсIPсвязки содержащей инструкциюbrp,дает конечный адрес перехода. Косвенные инструкцииbrpзадают регистр перехода, который будет использоваться будущим переходом.
Важность перехода. Эта подсказка указывает аппаратным средствам, что они должны применить очень быструю (но маленькую) структуру предсказания для этого перехода (используется в плотных циклах).
Сомнительная стратегия предсказания. Такая же так и стратегия, подсказывающая переходы, за исключением того, что доступные подсказки несколько отличаются. Статически не принятые, не поддерживаются (бесполезно обеспечивать раннее указание таких ветвей), кроме того, поддерживается только одна форма динамического предсказания. Вместо этого, включены две стратегии для указания того, что будет циклический переход либо «положительного» (cloop, ctop, wtop), либо «отрицательного» (cexit, wexit) типа.
Инструкция записи в регистр перехода, тоже может обеспечиваться той же информацией подсказки, упрощая установку подсказки косвенного перехода.
4.6. Инструкции мультимедиа.
Инструкции мультимедиа (см. табл. 4.29) обрабатывают основные регистры, как объединение восьми 8-разрядных, четырех 16-разрядных или двух 32-разрядных элементов. Они работают с каждым элементом независимо и параллельно. Элементы всегда выравниваются по своим естественным границам внутри основного регистра. Большинство мультимедиа инструкций могут работать с элементами нескольких размеров. Существует три класса мультимедиа инструкций: арифметические, сдвиговые и преобразования данных (arrangement).
4.6.1. Параллельная арифметика
Есть три формы параллельного сложения и вычитания: модульные (padd, psub), со знаковым насыщением (padd.sss, psub.sss) и с насыщением без знака (padd.uuu, padd.uus, psub.uuu, psub.uus). Модульные формы циклически замыкают результат между наибольшим и наименьшим представимым значением в диапазоне результата элемента. В формах с насыщением, результаты большие, чем наибольшее представимое значение в диапазоне результата элемента, либо меньшие, чем наименьшее представимое значение диапазона, округляются, соответственно, к наибольшему или наименьшему представимому значению диапазона результата. Форма со знаковым насыщением обрабатывает оба исходных значения как знаковые и округляет результат к границам знакового диапазона. Форма с насыщением без знака, обрабатывает оба исходных значения как беззнаковые и округляет результат к границам беззнакового диапазона. Два варианта заданы для того, чтобы обрабатывать второе исходное значение либо как знаковое (.uus), либо как беззнаковое (.uuu).
Инструкция параллельного вычисления среднего арифметического значения (pavg, pavg.raz) складывает соответствующие элементы из каждого источника, а каждый результат сдвигается вправо на один бит. В простой форме инструкции, перенос самого старшего бита каждой суммы записывается в самый старший бит результирующего элемента. В форме.raz(roundawayfromzero– округление в сторону бесконечности), перед смещением каждой суммы к ней добавляется 1. Инструкция параллельного вычисления средней разности (pavgsub) выполняет подобную операцию над разностью исходных значений.
Инструкция параллельного сдвига влево и сложения (pshladd) выполняет сдвиг влево элементов первого исходного значения, а затем складывает их с соответствующими элементами второго исходного значения. Операции сдвига и сложения выполняются со знаковым насыщением. Инструкция параллельного сдвига вправо и сложения (pshradd) аналогичнаpshladd. Обе эти инструкции работают только с 2-байтными элементами.
Инструкция параллельного сравнения (pcmp) сравнивает соответствующие элементы обоих источников и записывает все единицы (если истина), либо все нули (если ложь) в соответствующие элементы приемника согласно одному из двух отношений (==или>).
Инструкция правого параллельного умножения (pmpy.r) перемножает два соответствующих знаковых 2-байтных элемента стоящих на четных местах из обоих источников и записывает результат в два четырехбайтных элемента приемника. Инструкцияpmpy.lвыполняет аналогичную операцию с нечетными 2-байтными элементами. Инструкция параллельного умножения и сдвига вправо (pmpyshr, pmpyshr.u) перемножает соответствующие 2-байтные элементы обоих источников, создавая четыре 4-байтных результата. Четырехбайтные результаты сдвигаются вправо на 0, 7, 15 или 16 бит, в зависимости от указания в инструкции. После этого в приемном регистре запоминаются младшие двухбайтовые части от сдвинутых четырехбайтных результатов.
Инструкция параллельного суммирования абсолютного различия (psad) накапливает абсолютные различия соответствующих 1-байтных элементов и записывает результат в приемник.
Инструкции параллельного минимума (pmin.u, pmin) и параллельного максимума (pmax.u, pmax) поставляют в приемник, соответственно минимум и максимум для соответствующих 1-байтных или 2-байтных элементов. 1-байтные элементы обрабатываются как значения без знака, а 2-байтные элементы обрабатываются как значения со знаком.
Табл. 4.29. Инструкции параллельной арифметики.
Мнемоника |
Действие |
1-байт |
2-байт |
4-байт |
padd |
Параллельное сложение по модулю |
х |
х |
х |
padd.sss |
Параллельное сложение со знаковым насыщением |
х |
х |
|
padd.uuu, padd.uus |
Параллельное сложение с насыщением без знака |
х |
х |
|
psu |
Параллельное вычитание по модулю |
х |
х |
х |
psub.sss |
Параллельное вычитание со знаковым насыщением |
х |
х |
|
psub.uuu, psub.uus |
Параллельное вычитание с насыщением без знака |
х |
х |
|
pavg |
Параллельное среднее арифметическое |
х |
х |
|
pavg.raz |
Параллельное среднее арифметическое с округлением в сторону бесконечности |
х |
х |
|
pavgsub |
Параллельные средние разности |
х |
х |
|
pshladd |
Параллельный сдвиг влево и сложение со знаковым насыщением |
|
х |
|
pshradd |
Параллельный сдвиг вправо и сложение со знаковым насыщением |
|
х |
|
pcmp |
Параллельное сравнение |
х |
х |
х |
pmpy.l |
Параллельное знаковое умножение нечетных элементов |
|
|
х |
pmpy.r |
Параллельное знаковое умножение четных элементов |
|
|
х |
pmpyshr |
Параллельное знаковое умножение и сдвиг вправо |
|
х |
|
pmpyshr.u |
Параллельное умножение без знака и сдвиг вправо |
|
х |
|
psad |
Параллельная сумма абсолютных разностей |
х |
|
|
pmin |
Параллельный минимум |
х |
х |
|
pmax |
Параллельный максимум |
х |
х |
|