Предлагается процессор-потомок ужа с ежом, наследующий наилучшие черты архитектур.
Идея такая: берём классический минимальный набор команд RISC и отводим в нём некоторое кодовое пространство под спецкоманды. Минимальный набор команд RISC постоянен и интерпретируется напрямую железным декодером, с ним всё ясно, с ним всё как обычно.
Но процессор имеет много большее количество команд, тысячи-десятки тысяч (реализовать микрокодом можно столько, сколько нужно без усложнения декодера), из множества которых ограниченное количество (десятки-сотни) выбирается в рабочий набор специальным спецрегистром, который указывает на карту, мапящую все команды на подмножество работающих. Это может быть даже просто указателем на область микрокода.
Главный вопрос "как быть со спецрегистрами, которые ломают идеологию RISC и уничтожают эффективную конвееризацию?" решается очень просто: изменение спецрегистра и выборка нового нужного набора команд из полного возможны только при создании потока/процесса и состояние регистра.
Карта является неизменяемыми в пределах потока, поэтому при работе конвеера не нужно учитывать возможность их изменения.
Ессно, карта лениво (как кеш, при первой выборке) копируется в спецрегистры декодера.
Переключение контекста при этом, разумеется, удорожается, но не так уж и намного: пусть у нас 256 спецкоманд, каждой соотвествует 16-битный регистр (это только код операции, так что это огромное пространство), получается 512 байт памяти, которые ещё и можно грузить из дескриптора в регистры лениво, по мере надобности.
Формат "кастомной" команды стандартизирован и содержит явное указание на количество и тип операндов.
...
Нафига всё это нужно? Впихать в компактный набор команд сложные высокофункциональные конструкции и сэкономить шину памяти на выборке команд, повысить общую скорость работы, и одновременно упростить декодер. Команды-то могут сколь угодно сложные, но "…
Дальше »»»