від того, яке було б при нормальному запуску завантаження після збереження. Тому, за аналогією зі спекулятивними з управління, коли компілятор спекулятивно робить завантаження даних, то на первісне місце завантаження вставляється інструкції перевірки. Перевірка перевіряє, чи відбулося накладення і якщо це так, то звертається до відновлював коду. Тепер послідовність кодів перетворюється приблизно так:
/* до критичного шляху */
aload (ld_addr, target)
/* крім операторів використовують target */(st_addr, data) (target, recovery_addr) (target)
предикацию
предикацию - це умовне виконання інструкцій. У традиційній архітектурі умовне виконання здійснюється за допомогою переходів. Архітектура Itanium здійснює цю функцію, використовуючи предикацию інструкцій. Предикация видаляє переходи, використовувані для одержання умовного виконання у великих основних блоках, і усуває втрати пов'язаних з помилковими передбаченнями переходів.
Розглянемо інструкцію без предикатів
r1=r2 + r3
якщо її предікатіровать, то вона прийме вигляд
if (p5) r1=r2 + r3
У цьому прикладі р5 є умовою (предикатом) управління, який вирішує - буде чи не буде ця інструкція виконуватися і змінювати стан. Якщо значення умови - істина, то інструкція оновить стан. В іншому випадку вона еквівалента NOP. Предикати - це значення призначені командами порівняння.
Предикативне виконання усуває переходи і спрощує компілятору оптимізацію шляхом перетворення залежності з управління в залежність за даними. Нехай є вихідний код:
if (a gt; b) c=c + 1
else d=d * e + f
Можна уникнути переходу за умовою шляхом перетворення коду в предикатний код:
pT, pF=compare (a gt; b) (pT) c=c + 1 (pF) d=d * e + f
Якщо умова буде істинним, то предикат рТ буде встановлений в 1, інакше - в 0. Предикат pF є зворотним по відношенню до рТ. Залежність з управління в інструкціях c=c + 1 і d=d * e + f виражена в переході по умові (a gt; b) тепер, перетвориться в залежність за даними рТ і pF, які виходять в результаті операції compare (a gt; b) , а перехід ліквідується. Додатковий виграш полягає в тому, що компілятор може планувати інструкції з рТ і pF для паралельного виконання. Варто також відзначити, що є кілька різних типів інструкцій порівняння, які записують предикати в різній манері включаючи безумовне порівняння і паралельне порівняння.
.6 Стек регістрів
Архітектура Itanium уникає, якщо це не необхідно заповнення та очищення регістрів при виклику процедур і забезпечує інтерфейс повернення через перейменування кероване компілятором. У вузлі виклику нове вікно регістрів виявляється до?? тУпНЯ для викликаної процедури без необхідності зливання (spill) і заливання (fill) регістрів (як викликає, так і спричиненої процедурами). Доступ до регістрів здійснюється шляхом перейменування ідентифікаторів віртуальних регістрів в інструкціях, використовуючи набір регістрів у фізичні регістри. Викликана процедура може вільно використовувати доступні регістри, не піклуючись про збереження та відновлення регістрів викликає процедури. Викликана процедура виконує інструкцію alloc, задаючи кількість регістрів, яке вона збирається використовувати, для того щоб гарантувати, що доступно достатньо регістрів. Якщо достатня кількість регістрів недоступно (overflow - вихід за верхню межу стека), то alloc зупиняє процесор і зливає регістри викликала програми до тих пір, поки не буде доступно необхідну кількість регістрів.
У вузлі повернення набір регістрів відновлюється в той стан, який мала зухвала програма до виклику. Деякі регістри викликає процедури могли бути злиті апаратно і поки не відновлені. У цьому випадку (underflow - вихід за нижню межу стека) процесор зупиниться до тих пір, поки процесор не відновить необхідну кількість регістрів викликає процедури. Апаратні засоби можуть експлуатувати явну інформацію про вікно регистрового стека для зливання і заливання регістрів з реєстрового стека в пам'ять для кращого використання (незалежно від зухвалої й викликуваної процедур).
1.7 Переходи
Додатково до усунення переходів за допомогою предикатів є кілька механізмів для зменшення частки помилкових передбачень переходів і вартості залишилися помилкових передбачень переходів. Ці механізм...