- •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.8. Символьные строки и подсчет совокупности
Небольшой набор инструкций ускоряет операции над символьными и битовыми полями данных.
4.8.1. Символьные строки
Инструкции вычисления нулевого индекса (czx.l, czx.r) обрабатывают исходный общий регистр либо как восемь 1-байтовых, либо как четыре 2-байтовых элемента и записывают в приемный общий регистр индекс первого найденного нулевого элемента. Если в источнике нет нулевых элементов, то в приемник записывается значение большее, чем максимально возможный индекс (8 для 1-байтовой формы, 4 для 2-байтовой формы). Инструкция czx.l сканирует источник слева направо, а самый левый элемент имеет индекс 0. Инструкция czx. r сканирует источник справа налево, а самый правый элемент имеет индекс 0. В табл.4.33 собраны инструкции вычисления нулевого индекса.
Табл. 4.33. Инструкции поддержки строк.
Мнемоника |
Действие |
1-байт |
2-байт |
czx.l |
Локализует первый нулевой элемент слева направо |
х |
х |
czx.r |
Локализует первый нулевой элемент справа налево |
х |
х |
4.8.2. Подсчет совокупности
Инструкции подсчета совокупности (popcnt – population count) подсчитывают количество единичных битов в источнике и записывают это значение в приемник.
4.9. Передача уровня привилегий
Три инструкции могут вызвать изменение уровня привилегий: break (прервать), epc (ввести привилегированный код) и br.ret (переход при возврате их процедуры). Инструкция break определена для вызова специальной ошибки «Инструкция break», которая может использоваться для передачи уровня привилегий. Инструкция break содержит непосредственное значение, которое делается доступным специальному обработчику ошибки. Инструкция epc увеличивает уровень привилегий без вызова прерывания или передачи потока управления. Новый уровень привилегий определяется элементом таблицы TLB для страницы содержащей epc, если трансляция виртуального адреса для извлечения инструкции допустима. Если уровень привилегий, указываемый полем PFS.ppl (в прикладном регистре предыдущего функционального состояния) ниже, чем текущий уровень привилегий (указываемый полем PSR.cpl в регистре состояния процессора), то epc вызывает ошибку «Нелегальная операция». Инструкция br.ret применяется для понижения уровня привилегий, если PFS.ppl ниже, чем PSR.cpl. Инструкция br.ret никогда не будет увеличивать уровень привилегий.
