Почему компиляторы не генерируют микроинструкции, а не ассемблерный код? - PullRequest
4 голосов
/ 15 октября 2011

Я хотел бы знать, почему в реальном мире компиляторы производят код сборки , а не микроинструкции .

Если вы ужепривязанный к одной архитектуре , почему бы не пойти еще дальше и освободить процессор от необходимости превращать код сборки в микроинструкции во время выполнения?

Я думаю, возможно, есть узкое место реализации где-то, но я ничего не нашел в Google.

РЕДАКТИРОВАТЬ с помощью микроинструкций Я имею в виду: если ваша инструкция по сборке ADD (R1, R2), микроинструкции будут,Загрузите R1 в ALU, загрузите R2 в ALU, выполните операцию, загрузите результаты обратно в R1.Другой способ увидеть это - приравнять одну микроинструкцию к одному такту.

У меня сложилось впечатление, что микроинструкция была 'официальным' именем.Видимо, здесь есть некоторые вариации пробега.

FA

Ответы [ 3 ]

16 голосов
/ 15 октября 2011

Компиляторы не выдают микрокоманды, потому что процессоры не выполняют микрокоманды. Они представляют собой деталь реализации чипа, а не что-то выставленное вне чипа. Нет способа предоставить микрокоманды чипу.

8 голосов
/ 15 октября 2011

Поскольку процессор x86 не выполняет микрооперации, он выполняет коды операций. Вы не можете создать двоичное изображение, содержащее микрооперации, поскольку нет способа кодировать их так, как это понимает процессор.

То, что вы предлагаете, это в основном новый набор инструкций в стиле RISC для процессоров x86. Причина, по которой этого не происходит, заключается в том, что это нарушит совместимость с огромным количеством приложений и операционных систем, написанных для набора команд x86.

0 голосов
/ 15 октября 2011

Ответ довольно прост.

(Некоторые) компиляторы действительно генерируют последовательности кода, такие как load r1, load r2, добавляют r2 к r1. Но это именно инструкции машинного кода (которые вы называете микрокодом). Эти инструкции являются единственным интерфейсом между внешним миром и внутренностями процессора.

(Другие компиляторы генерируют только C и позволяют бэкенду C, как gcc, позаботиться о грязных деталях.)

...