Какова мотивация для fpu реализовывать свои регистры в стеке? - PullRequest
3 голосов
/ 14 февраля 2012

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

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

Ответы [ 3 ]

5 голосов
/ 14 февраля 2012

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

  • ISA намного тоньше
    • требуется меньше места для кодирования регистра
    • меньше инструкций для таких вещей, какобработка стека (очевидно)
  • упрощенные аппаратные конструкции
    • меньше логики декодирования регистров
    • очень детерминированное и математически понятное поведение (причина, по которой виртуальные архитектурыкак виртуальная машина Java все еще использует его)
3 голосов
/ 15 февраля 2012

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

Оттуда:

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

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

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

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

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

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

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

...