Какова мотивация fpu для реализации своих регистров на основе стека?

Какова мотивация fpu для реализации своих регистров на основе стека? Насколько я понимаю, другие наборы инструкций, такие как x86/sse, используют именованные регистры. Я могу представить, что свойства, основанные на стеке, соответствуют нашему представлению о функциях в целом, что приводит к более интуитивному дизайну для программистов на ассемблере.

Однако мне было любопытно, есть ли какие-то более ощутимые мотивы, т.е. технологические преимущества.


person Lawrence Kok    schedule 14.02.2012    source источник
comment
Я предполагаю, что это упростило аппаратную реализацию. Вам не нужен регистровый файл, если все инструкции работают с верхним регистром.   -  person Mysticial    schedule 14.02.2012
comment
Помимо стоимости/сложности, арифметические выражения могут быть представлены в виде деревьев и вычислены с использованием стеков.   -  person Alexey Frunze    schedule 14.02.2012
comment
стандартный x86 FPU использует стек (обозначенный через ST(x)), только SSE/AVX/FMA/MMX/3DNow! которые имеют именованные регистры   -  person Necrolis    schedule 14.02.2012
comment
Фактическая причина в том, что нотация обратной польской записи может быть записана как ассемблерный код x87 FPU. 30 лет назад стековый дизайн x87 FPU упростил его программирование на ассемблере. В настоящее время неоптимально напрямую преобразовывать инструкции RPN в FPU, потому что FPU имеет гораздо большую задержку, чем обратная пропускная способность. Взгляните на эту статью Питера Канковски: strchr.com/reverse_polish_notation   -  person Marat Dukhan    schedule 15.02.2012


Ответы (3)


Сегодня эти архитектуры обычно не встречаются в полевых условиях. Однако в прежние времена и кремниевое пространство для регистров, и пространство для программного кода были редкими ресурсами (как и сейчас во встроенных средах). Это в значительной степени суммирует два мотива такой архитектуры:

  • ISA is much slimmer
    • less space for register coding is needed
    • меньше инструкций для таких вещей, как обработка стека (очевидно)
  • simpler hardware designs
    • less register decode logic
    • очень детерминированное и математически понятное поведение (причина, по которой виртуальные архитектуры, такие как виртуальная машина Java, все еще используют его)
person jupp0r    schedule 14.02.2012

На этот вопрос может дать правильный ответ только сам разработчик оригинального 8087, В. Кахан, который написал об этом в короткой статье под названием "О преимуществах стека 8087".

Оттуда:

  • Стек 8087 на самом деле не является «классическим стеком», вы можете получить доступ к любому регистру, а не только к двум/трем верхним регистрам.
  • Плоский набор регистров с двумя операндами/инструкцией был непрактичен: не хватало места для кодирования инструкций сопроцессора, что делало предпочтительными инструкции с одним операндом (и стек в этом превосходен), и количество регистров, которое он мог бы иметь ( очевидно, 8 было невозможно, кажется, места хватило только на 4 регистра) было сочтено недостаточным для эффективного вычисления некоторых распространенных операций с плавающей запятой.
  • Предполагалось, что переполнение/недостаточное переполнение стека происходит нечасто и обрабатывается программно, создавая иллюзию гораздо большего стека.
person ninjalj    schedule 14.02.2012

В основном это верно только для x86, потому что ни ARM, ни PowerPC, ни MIPS, ни Sparc не реализуют свои FPU как машины на основе стека.

Теперь, когда мы сузили его до x86, причина очевидна. Как и многие другие вещи в вычислительной технике, это сводится к историческим причинам (некоторые называют это истерическим изюмом, потому что настоящая причина на самом деле не имеет смысла).

Историческая причина в том, что в архитектуре x86 не было FPU. Я знаю, вы скажете: «Но посмотрите на Pentium!». Да, у них были FPU, но исходный 8086, который IBM выбрал для создания своего ПК, не имел FPU - это была строго целочисленная машина, как и многие современные микроконтроллеры низкого уровня.

Это не было большой проблемой, потому что он в основном предназначался для недорогих терминалов и текстовых процессоров. Но его дешевизна и популярность внезапно привели к тому, что его начали использовать в научных и инженерных целях. Поэтому люди придумали дополнительные карты расширения с чипом FPU, чтобы ускорить процесс. В самых популярных из этих карт используется чип на основе стека, который также был произведен Intel. Этот небольшой факт упростил для Intel дальнейшую интеграцию чипа в будущие поколения процессоров.

В этот момент Intel все еще могла разработать набор инструкций, не основанный на дополнительном чипе. Но случилось две вещи. Многие приложения, в основном игры и электронные таблицы, начали использовать надстройку FPU, и эти приложения стали очень и очень популярными. Другие поставщики чипов тоже видели, что происходит на рынке ПК, и захотели принять участие. Итак, вынужденная обратная совместимость и необходимость быстро добавить эту функцию, Intel сделала наиболее разумную вещь (с точки зрения управления бизнесом, не обязательно с точки зрения инженерии): они просто включили чип сопроцессора в свою следующую версию x86, чтобы отдел маркетинга может сказать, что у них есть FPU.

Короче говоря: истерический изюм!

person slebetman    schedule 14.02.2012