- •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.1. Инструкции загрузки
Инструкции загрузки передают данные из памяти в основной регистр, в регистр с плавающей точкой или в пару регистров с плавающей точкой.
При загрузке основного регистра допустимы размеры 1, 2, 4 или 8 байт. При загрузке менее 8 байт, загружаемое значение расширяется до 64 бит.
При загрузке регистра с плавающей точкой доступные размеры определены так: одинарная точность (4 байта), двойная точность (8 байтов), двойная расширенная точность (10 байтов), целое либо параллельное FP(8 байтов). Значение, загружаемое из памяти, преобразуется в формат регистра с плавающей точкой (детали см. в разделе 5.3.1 «Инструкции доступа к памяти»).
Парные инструкции загрузки с плавающей точкой загружают два смежных числа одинарной точности (по 4 байта каждое), двойной точности (по 8 байт каждое), целое либо параллельное FP(по 8 байт каждое) в два независимых регистра с плавающей точкой (см. описание инструкцииldfpдля ограничений на указание принимающего регистра). Парные инструкции загрузки с плавающей точкой могут задавать обновление базового адресного регистра, но только непосредственным значением данных удвоенной точности.
Варианты загрузок регистров (и основных и с плавающей точкой) определены для поддержки управления направляемого компилятором и спекулятивности по данным. Они используют NaTбиты основных регистров иALAT. См. разделы 4.4.4 «Спекуляция по управлению» и 4.4.5 «Спекуляция по данным».
Также, обеспечиваются варианты управления подсистемой памяти/кэша. Упорядоченная загрузка может использоваться для принудительного упорядочивания доступов к памяти. См. раздел 4.4.7 «Упорядочивание доступа к памяти». Смещенная загрузка обеспечивает подсказку для запроса в исключительную собственность линии доступа. См. раздел 4.4.6 «Управление иерархией памяти и непротиворечивость».
Загрузки специального назначения задают восстановление значений регистра, которые были сброшены (spill) в память. Инструкцияld8.fillзагружает общий регистр и соответствующийNaTбит (определена только для 8-байтового доступа). Инструкцияldf.fillзагружает из памяти значение в формате регистра с плавающей точкой без преобразования (определена только для 16-байтового доступа). См. раздел 4.4.4.6 «Сливание и заливание регистров».
4.4.2. Инструкции сохранения
Инструкции сохранения передают данные из основного регистра или регистра с плавающей точкой в память. Инструкции сохранения всегда не спекулятивны. Инструкции сохранения могут задавать обновление базового адресного регистра, но только непосредственным значением. Также, обеспечивается вариант управления подсистемой памяти/кэша. Упорядоченное сохранение может использоваться для принудительного упорядочивания доступов к памяти.
Сохранение и основных регистров и регистров с плавающей точкой может быть задано точно с такими же размерами данных, что и у загрузки. За исключением того, что не существует инструкций парного сохранения регистров с плавающей точкой.
Сохранения специального назначения задают сброс значений регистра в память. Инструкция st8.fillсохраняет общий регистр и соответствующийNaTбит (определена только для 8-байтового доступа). Это позволяет сливать в память результат спекулятивного вычисления, а затем восстанавливать его. Инструкцияstf.fillзапоминает в памяти значение в формате регистра с плавающей точкой без преобразования. Это позволяет кодировать сливание и восстановление регистра для совместимости с возможными будущими расширениями формата регистра с плавающей точкой. Также, инструкцияstf.fillне вызывает ошибку если регистр содержитNaTVal, но определена только для 16-байтового доступа. См. раздел 4.4.4.6 «Сливание и заливание регистров».