- •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.3.4. Передачи предикатных регистров
Инструкции обеспечивают передачу между файлом предикатных регистров и основным регистром. Эти инструкции работают в манере «широкой поверхности» (broadside), посредством чего множество предикатных регистров передается параллельно так, что предикатный регистрNпередается в/из битаNосновного регистра.
Инструкция перемещения в предикатные регистры (mov pr=) загружает множество предикатных регистров из основного регистра согласно маске указанной непосредственным операндом. Маска содержит по одному биту для каждого из регистров отPR1 доPR15 (PR0 аппаратно находится в 1) и один бит для всех регистров отPR16 доPR63 (ротируемые предикаты). Предикатный регистр записывается из соответствующего бита общего регистра, если соответствующий бит маски равен 1; если же соответствующий бит маски равен 0, то предикатный регистр не модифицируется.
Инструкция перемещения в ротируемые предикатные регистры (mov pr.rot=) копирует 48 битов из непосредственного значения в 48 ротируемых предикатов (отPR16 доPR63). Непосредственное значение включает в себя 28 битов и расширяется с учетом знака. Таким образом, предикаты отPR16 доPR42 могут быть независимо установлены в новые значения, а отPR43 доPR63 устанавливаются все вместе либо в 0, либо в 1.
Инструкция перемещения из предикатных регистров (mov =pr) передает полный файл предикатных регистров в принимающий основной регистр.
Для всех этих передач предикатных регистров, к предикатным регистрам обращаются так, как если бы база переименования регистра (поле CFM.rrb.pr) равна 0. Поэтому, как правило, перед инициализацией ротированных предикатов, нужно программно очистить полеCFM.rrb.pr.
4.4. Инструкции доступа к памяти
Доступ к памяти осуществляется простыми инструкциями загрузки, сохранения и семафорными инструкциями, которые передают данные к и от общих регистров и регистров с плавающей точкой. Адрес памяти задается содержимым общего регистра.
Большинство инструкций загрузки и сохранения могут также задавать обновление базового адресного регистра. Обновление базы добавляет к адресному регистру либо непосредственное значение, либо содержимое основного регистра и помещает результат назад в адресный регистр. Обновление делается после операции загрузки или сохранения, т.е. оно делается как пост-инкремент адреса.
Для наибольшей эффективности, данные должны быть выровнены по естественным границам. Если UM.ac=1(бит проверки выравнивания в регистре маски пользователя), то в пределах 4К-байтной границы, обращения, не выровненные относительно их естественных границ, будут всегда ошибочными. Если жеUM.ac=0, то не выровненный доступ будет успешным, если это поддерживается реализацией, в противном случае, это вызовет ошибку «Ссылка на не выровненные данные». Для дальнейшей информации нужно отслеживать специальную процессорную документацию. Все обращения к памяти, которые пересекают 4К-байтную границу, независимо отUM.ac,вызовут ошибку «Ссылка на не выровненные данные». Кроме того, если обращения не выровнены на свою естественную границу, то независимо отUM.ac,все семафорные инструкции вызовут ошибку «Ссылка на не выровненные данные».
Обращения к памяти большей, чем один байт могут делаться либо по возрастанию, либо по убыванию. Упорядочивание байт для всех инструкций доступа к памяти задается битом UM.beв регистре маски пользователя. Все обращения типаIA-32 к памяти, выполняются по убыванию.
В табл.4.12 собраны инструкции загрузки, сохранения и семафорные, а в табл.4.13 собраны состояния связанные с инструкциями, ссылающимися на память.
Табл. 4.12. Инструкции доступа к памяти
Мнемоника |
Действие | ||
Основная |
С плавающей точкой | ||
Нормальная |
Парная загрузка | ||
ld |
ldf |
ldfp |
Загрузка |
ld.s |
ldf.s |
ldfp.s |
Спекулятивная загрузка |
ld.a |
ldf.a |
ldfp.a |
Предварительная загрузка |
ld.sa |
ldf.sa |
ldfp.sa |
Спекулятивная предварительная загрузка |
ld.c.nc, ld.c.clr |
ldf.c.nc, ldf.c.clr |
ldfp.c.nc, ldfp.c.clr |
Проверка загрузки |
ld.c.clr.acq |
|
|
Упорядоченная загрузка проверки |
ld.acq |
|
|
Упорядоченная загрузка |
ld.bias |
|
|
Смещенная загрузка |
ld.fill |
ldf.fill |
|
Восстановление регистров |
st |
stf |
|
Сохранение |
st.rel |
|
|
Упорядоченное сохранение |
st.spill |
stf.spill |
|
Запоминание регистров |
cmpxchg |
|
|
Сравнить и обменять |
xchg |
|
|
Обмен между памятью и GR |
fetchadd |
|
|
Извлечь и добавить |
Табл.4.13. Состояния, связанные с доступом к памяти
Регистр |
Функция |
UM.be |
Упорядочивание байт (в маске пользователя) |
UM.ac |
Доступен вызов ошибки «Ссылка на не выровненные данные» (в маске пользователя) |
UNAT |
Коллекция NaTбитов основных регистров |
CCV |
Прикладной регистр значения для инструкции сравнения и обмена |