- •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.4.5.5. Окончания инструкций для управления alat
Чтобы помочь компилятору управлять выделением и освобождением элементов ALATсуществует по два варианта проверок предварительных загрузок и проверок загрузок: варианты с очисткой (chk.a.clr, ld.c.clr, ld.c.clr.acq, ldf.c.clr, ldfp.c.clr) и варианты без очистки (chk.a.nc, ld.c.nc, ldf.c.nc, ldfp.c.nc).
Варианты с очисткой используются тогда, когда компилятор знает, что элемент ALATне будет использоваться снова и хочет явно удалить элемент. Это позволяет указать программе, когда элементы не нужны, тем самым, снижая вероятность того, что будет выдавлен полезный вход из-за того, что все входы распределены в текущий момент времени.
Для вариантов проверки загрузки с очисткой, любой элемент ALATс одним и тем же тегом регистраALATаннулируется, не зависимо ни от полей адреса и размера проверки загрузки, ни от сочетания соответствующей предварительной загрузки. Дляchk.a.clrэлемент будет гарантировано аннулирован, только если инструкция пройдена мимо (не выполняется код восстановления). Таким образом, неудачная инструкцияchk.a.clrлибо может, либо не может очищать любые сочетания элементовALAT. В таких случаях код восстановления должен явно аннулировать рассматриваемый элемент, если правильность программы зависит от элемента являющегося пустым после неудачнойchk.a.clr.
Варианты без очистки для обоих типов проверок спекуляции по данным действуют как подсказки для процессора, что существующий элемент должен обслуживаться в ALATили, что новый элемент должен быть выделен, если вALATнет совпадающего элемента. Такие варианты могут использоваться в циклах для проверки предварительных загрузок, которые полагались компилятором независящими от цикла и удалялись им из цикла. Такое поведение гарантирует, что если проверка загрузки неудачна на одной итерации, то необязательно, что проверка загрузки будет неудачной на всех последующих итерациях. Всякий раз, когда новый элемент вставляется вALATили когда содержимое элемента изменяется, информация, записываемая вALAT, использует только информацию из проверки загрузки, но не использует никакой информации оставшейся от предыдущего элемента. Вариант без очисткиchk.a, chk.a.nc,не выделяет элементы, а окончание ‘nc’ действует как подсказка процессору, что элемент не должен очищаться.
В таблицах 4.16 и 4.17 собраны состояния и инструкции связанные со спекуляцией по данным.
Табл.4.16. Состояния, связанные со спекуляцией по данным.
Структура |
Функция |
ALAT |
Таблица адресов предварительной загрузки (Advancedloadaddrestable) |
Табл.4.17. Инструкции, связанные со спекуляцией по данным.
Мнемоника |
Действие |
ld.a, ldf.a, ldfp.a |
Предварительные загрузки GRиFR |
st, st.rel, st.spill, stf, stf.spill |
Сохранение GRиFR |
cmpxchg, fetchadd, xchg |
Семафоры GR |
ld.c.clr, ld.c.clr.acq, ldf.c.clr, ldfp.c.clr |
Проверки загрузки GRиFR, с очисткой при попадании вALAT |
ld.c.nc, ldf.c.nc, ldfp.c.nc, |
Проверки загрузки GRиFR, выделяемые заново при промахах вALAT |
ld.sa, ldf.sa, ldfp.sa |
Спекулятивные предварительные загрузки GRиFR |
chk.a.clr, chk.a.nc |
Проверки предварительных загрузок GRиFR |
invala |
Аннулирование всех элементов ALAT |
invala.e |
Аннулирование отдельных элементов ALATдляGRилиFR |