При построении RISC-процессоров принимается во внимание
медлительность оперативной памяти. Обращения к ней (даже с
учетом различных кэшей) - "дорогостоящи" и требуют
дополнительных вычислений, а потому, насколько это
возможно, их следует избегать. Но Load/Store-архитектура и
большое число регистров - не единственное, что можно сделать.
В любом программном коде можно встретить немало вызовов
функций - фактически требований к процессору перейти в
заданное место программы, продолжить выполнение программы
до специальной инструкции возврата, после чего - вернуться к
тому месту, где произошел вызов, почти полностью восстановив
свое состояние до вызова функции. Чтобы это можно было
сделать, при вызове функции процессор должен "запомнить"
свое текущее состояние - в частности, содержимое некоторых
регистров общего назначения и значительной части
специальных регистров. Традиционное решение - "запихнуть"
все необходимые данные в специальную конструкцию -
стек[ Стек можно условно представить как запаянную с одного
конца трубку, в которую по одному кладутся и по одному же
извлекаются шарики (данные). Первый положенный в трубку
шарик извлекается последним, так что если мы, скажем, по
очереди положим (push) в стек числа 1, 2, 3, то извлекая (pop)
данные, мы поочередно достанем 3, 2, 1.], которую процессор
поддерживает на аппаратном уровне и которая в большинстве
процессоров реализована в виде пары служебных регистров и
выделенного участка оперативной памяти, куда все
складываемые в стек данные и записываются. Поэтому любой
вызов функции в традиционной схеме неявным образом
приводит к записи в оперативную память десятков, а то и сотен
байт информации. Есть даже целый ряд модельных задачек на
эту тему - как написать компилятор, минимизирующий
количество сохраняемой информации; причем кое-какие из этих
наработок поддерживаются популярными компиляторами
(например, соглашение __fastcall в некоторых компиляторах C/
C++). Но оказывается, что всего этого можно избежать.
В типичной SPARC-архитектуре используется регистровый
файл из 128 регистров; причем пользователю из них