Проблемы Pentium 4 IA-32

Пример

Расширение кода операций

Критерии разработки форматов команд

минимизации длины команд;

достаточный объем пространства в формате команды для представления всех требуемых операндов;

выбор числа битов в адресном поле

n современные системы требуют, чтобы адреса были у отдельных байтов, но при обращении к памяти всегда считываются одно, два, а иногда даже четыре слова сразу

n напр., в результате считывания одного байта из памяти на машине UltraSPARC III единовременно вызываются минимум 16 байт, а иногда и вся строка кэш-памяти размером 64 байта

Пусть n+k бит = код операции в k бит и одним адресом в n бит

n возможные интерпретации:

w k + 1 бит и адрес в n – 1

w k - 1 бит и адрес в n + 1

Такой механизм назыв. расширением кода операций

4-разрядный код операции и три 4-разрядных адресных поля (для 16 регистров)

Возможный вариант

n 16 трехадресных команд

 

 

 

Трехадресные команды имеют 4-разрядный код операции, двухадресные команды — 8-разрядный, одноадресные команды — 12-разрядный, а безадресные команды —16-разрядный

Идея расширения кода операций наглядно демонстрирует компромисс между пространством для кодов операций и пространством для другой информации

Типичная CISC-архитектура с командами разной длины и огромным количеством различных форматов => переход к RISC-арх-ре

IA-32 ориентирована на двухадресные команды => отдельно команды загрузки/сохранения + 3-адресные регистровые команды

Небольшой и нерегулярный набор регистров

Сложности обработки WAR-зависимостей

Многостадийный конвейер