- •4. Модель прикладного программирования.
- •4.1. Стек регистров
- •4.1.1. Управление стеком регистров
- •4.1.2. Инструкции стека регистров
- •4.2. Инструкции целочисленного вычисления
- •4.2.1. Арифметические инструкции
- •4.2.2. Логические инструкции
- •4.2.4. Инструкции битовых полей и сдвигов
- •4.3. Инструкции сравнения и предикация
- •4.3.1. Предикация
- •4.3.2. Инструкции сравнения
- •4.2.5. Большие константы.
- •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 |
Таблица адресов предварительной загрузки (Advanced load addres table) |
Табл.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 |
