- •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.2. Инструкции целочисленного вычисления
Исполнительные целочисленные устройства поддерживают набор инструкций для арифметических и логических операций, для операций сдвига и для манипулирования битовыми полями. Кроме того, они поддерживают набор инструкций для ускорения операций с 32-битными данными и указателями.
Арифметические, логические и ускоренные 32-битные операции могут выполняться на устройствах типа Iи типа М.
4.2.1. Арифметические инструкции
Сложение и вычитание (add, sub) поддерживаются как в обычной форме с двумя исходными операндами, так и в специальной форме с тремя исходными операндами. При сложении в форме с тремя входными операндами к сумме двух исходных регистров добавляется единица. При вычитании в форме с тремя входными операндами из разности двух исходных регистров вычитается единица. Трехоперандые формы повторяют ту же мнемонику, что и двухоперандные формы, но добавляют «1» в качестве третьего исходного операнда.
Непосредственная форма сложения использует регистр и 14-битное непосредственное значение; непосредственная форма вычитания использует регистр и 8-битное непосредственное значение. В обоих случаях перед сложением или вычитанием производится расширение знака непосредственного значения. Непосредственная форма получается просто путем подстановки непосредственного значения на место первого операнда. Кроме того, сложение может выполняться между регистром и 22-битным непосредственным операндом, но при этом исходным регистром может быть только GR0,GR1,GR2 илиGR3.
Инструкция сдвига влево и сложения (shladd) сдвигает регистровый операнд влево на 1-4 бита и добавляет результат ко второму регистровому операнду. В табл. 4.3. собраны целочисленные арифметические инструкции.
Табл. 4.3. Целочисленные арифметические инструкции.
Мнемоника |
Действие |
add |
Сложение |
add …,1 |
Трехоперандное сложение |
sub |
Вычитание |
sub …,1 |
Трехоперандное вычитание |
shladd |
Сдвиг влево и сложение |
Заметим, что инструкции целочисленного умножения описаны при использовании регистров с плавающей точкой (подробнее см. ниже раздел «Инструкции целочисленного умножения и сложения»). Целочисленное деление выполняется программно аналогично делению с плавающей точкой.
4.2.2. Логические инструкции
Имеются инструкции выполняющие логическое И (and), ИЛИ (or) и исключающее ИЛИ (xor) между двумя регистрами, либо между регистром и непосредственным значением. Инструкцияandcmвыполняет логическое И между регистром или непосредственным значением и дополнением от другого регистра. В табл.4.4 собраны целочисленные логические инструкции.
Табл.4.4 Целочисленные логические инструкции
Мнемоника |
Действие |
and |
Логическое И |
or |
Логическое ИЛИ |
andcm |
Логическое И с дополнением |
xor |
Логическое исключающее ИЛИ |
4.2.3. 32-Битные адреса и целые
Поддержка 32-битных адресов обеспечивается в форме инструкций сложения, которые выполняют копирование бита региона. Это поддерживает модель трансляции виртуальных адресов (подробнее см. раздел 4.1.9 «32-битная виртуальная адресация» во втором томе). Инструкция сложения 32-битного указателя (addp) складывает два регистра или регистр и непосредственное значение, обнуляет старшие 32-бита результата, а затем копирует биты 31:30 из второго исходного операнда в биты 62:61 результата. Инструкцияshladdpработает аналогично, но перед выполнением сложения сдвигает первый исходный операнд влево на 1-4 бита, причем обеспечивается только в двухрегистровой форме.
Кроме того, поддержка 32-битных целых обеспечивается через инструкции 32-битного сравнения и инструкции, выполняющие знаковое и нулевое расширение. Инструкции сравнения описаны ниже в разделе «Инструкции сравнения и предикация». Инструкции расширения знака и нуля (sxt, zxt) берут 8-битное, 16-битное или 32-битное значение из регистра и расширяют его соответственно до 64-битного результата.
В табл.4.5 собраны инструкции для 32-битных указателей и 32-битных целых.
Табл.4.5 Инструкции для 32-битных указателей и 32-битных целых
Мнемоника |
Действие |
addp |
Сложение 32-битного указателя |
shladdp |
Сдвиг влево и сложение 32-битного указателя |
sxt |
Расширение знака |
zxt |
Расширение нулями |