ри, які описують властивості залежать від конкретної реалізації процесора.
Склад прикладних регістрів IA - 32, в цілому, міститься всередині великого набору прикладних регістрів Itanium і доступний інструкціям Itanium. Але інструкції IA - 32, не мають доступу до набору регістрів Itanium.
Резервовані і ігноровані регістри і поля
Регістри, які не визначені, є або зарезервованими, або ігнорованими. При зверненні до зарезервованих регістру викликається помилка «Заборонена операція». Читання ігнорованого регістра повертає нуль. Програма може записувати будь-яке значення в ігнорований регістр, але апаратура проігнорує цей запис. У наборах регістрів змінюваного розміру, регістри, яких немає в конкретному процесорі, є зарезервованими. Звернення до одного з таких відсутніх регістрів призведе до помилки «Зарезервований регістр/поле». Якщо всередині заданих регістрів є поля, які не визначені, то такі поля є або зарезервованими, або ігнорованими. При читанні зарезервованих полів апаратура буде завжди повертати нуль. Програма завжди повинна записувати нулі в ці поля. В іншому випадку, при записі в таке полі не нульового значення буде викликана помилка «Зарезервований регістр/поле». Зарезервовані поля можуть бути використані в майбутньому.
При читанні ігнорованих полів апаратура завжди повертає 0 (якщо не зазначене інше). Програма може записувати в таке поле будь-яке значення - апаратура проігнорує цей запис. Як виняток відзначимо, що деякі ігноровані поля IA - 32, можуть бути використані в подальшому.
Таблиця 2.1. узагальнює, як процесор реагує на звернення до зарезервованих і ігнорованих полях.
Таблиця 2.1 - Реакція зарезервованих і ігнорованих регістрів і полів
ТіпЧтеніеЗапісь Резервірован.РегістрВизов помилки «Заборонена операція» Поле0Прі ненульовий записи викликається помилка «Зарезервований регістр/поле» Ігноріруем.Регістр0Запісь ігноріруетсяПоле0 (якщо інше не зазначено) Запис ігнорується
Якщо регістр має невизначене значення, то його поля є зарезервованими. Програма завжди повинна записувати тільки вказані значення в такі поля. В іншому випадку, запис резервованого значення викличе помилку «Зарезервований регістр/поле». Деякі регістри є тільки читаються. Запис у такий регістр викличе помилку «Заборонена операція».
Коли поля відмічені як зарезервовані, то це необхідно для сумісності з майбутніми процесорами, чиє програмне забезпечення буде звертатися до цих полів з невідомих поки ефектом. Програмне забезпечення повинно керуватися такими принципами, коли має справу з резервованими полями:
· Чи не залежати від стану будь-яких резервованих полів. Маскувати всі резервовані поля перед перевіркою вмісту.
· Чи не залежати від стану будь-яких резервованих полів при збереженні в пам'ять або регістр.
· Чи не залежати від здатності збереження інформації записаної в резервовані і ігноровані поля.
· Де можливо, завантажуйте резервовані і ігноровані поля значеннями, попередньо ліченими з того ж регістра, або завантажте їх нулями.
Основні регістри
Набір з 128 (64-бітних) регістрів забезпечує головний ресурс для всіх цілочисельних і мультимедіа цілочисельних обчислень. Вони пронумеровані від GR0 до GR127 і доступні для всіх програм на всіх рівнях привілеїв. Кожен основний регістр має 64 біта для зберігання нормальних даних плюс додатковий біт NaT (Not a Thing), який використовується для відстеження відкладених спекулятивних винятків.
Основні регістри розділені на дві підмножини. Регістри від 0 до 31 називаються статичними основними регістрами. Причому, GR0 зроблений так, що якщо він є вихідним операндом, то завжди читається як нуль, а спроба запису в GR0 викличе помилку «Заборонена операція». Основні регістри з 32 по 127 називаються стековими основними регістрами. Стекові регістри робляться доступними для програм при виділенні вікна регистрового стека містить програмований кількість локальних і вихідних регістрів. Частини регистрового стека можуть бути програмно перейменовані для прискорення циклів. Див. Розділ 4.5.1 «Підтримка модульно планованих циклів».
Основні регістри від 8 до 32 містять регістри IA - 32 - цілочисельні, селектори і дескриптори сегментів.
Регістри з плаваючою точкою
Набір з 128 (82-бітних) регістрів з плаваючою точкою використовується для всіх обчислень з плаваючою крапкою. Вони пронумеровані від FR0 до FR127 і доступні для всіх програм на всіх рівнях привілеїв. Регістри з плаваючою точкою розділені на дві підмножини. Регістри від 0 до 31 називаються статичні...