Проблемы 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-зависимостей
Многостадийный конвейер