Введение

Архитектура наборов команд RISC

Fujitsu также прекратит производство SPARC (уже перешла к производству собственных процессоров на базе ARM) после двух "улучшенных" версий более старого сервера SPARC M12 в 2020–2022 годах (ранее планировалось на 2021 год) и снова в 2026–2027 годах, прекращение продаж в 2029 году для серверов UNIX и через год для их мейнфреймов, а также окончание поддержки в 2034 году "для стимулирования модернизации клиентов".

Особенности

Архитектура SPARC была сильно подвержена влиянию более ранних RISC-проектов, включая RISC I и II из Калифорнийского университета в Беркли и IBM 801. Эти оригинальные RISC-проекты были минималистичными, содержали как можно меньше функций или мнемоник и были нацелены на выполнение инструкций со скоростью почти одна инструкция за такт. Это делало их во многом похожими на архитектуру MIPS, включая отсутствие инструкций умножения или деления. Еще одной особенностью SPARC, унаследованной от раннего движения RISC, является слот задержки ветвления. Процессор SPARC обычно содержит до 160 регистров общего назначения. Согласно спецификации "Oracle SPARC Architecture 2015", "реализация может содержать от 72 до 640 64-битных регистров общего назначения". В любой момент времени только 32 из них непосредственно доступны программному обеспечению: 8 – это набор глобальных регистров (один из которых, g0, аппаратно привязан к нулю, поэтому только семь из них могут использоваться как регистры), а остальные 24 – из стека регистров. Эти 24 регистра образуют так называемое окно регистров, и при вызове/возврате функции это окно перемещается вверх и вниз по стеку регистров. Каждое окно имеет восемь локальных регистров и разделяет восемь регистров с каждым из соседних окон. Разделяемые регистры используются для передачи параметров функции и возврата значений, а локальные регистры – для сохранения локальных значений между вызовами функций. "Масштабируемость" в SPARC обусловлена тем, что спецификация SPARC позволяет реализациям масштабироваться от встроенных процессоров до крупных серверных процессоров, используя один и тот же базовый (непривилегированный) набор инструкций. Одним из архитектурных параметров, который можно масштабировать, является количество реализованных окон регистров; спецификация позволяет реализовать от трех до 32 окон, поэтому реализация может выбрать реализацию всех 32 для обеспечения максимальной эффективности стека вызовов, или реализовать только три для снижения стоимости и сложности конструкции, или реализовать какое-либо количество между ними. Другие архитектуры, включающие аналогичные функции регистрового файла, включают Intel i960, IA-64 и AMD 29000. Архитектура претерпела несколько пересмотров. Аппаратные функции умножения и деления были добавлены в версии 8. 64-битная (адресация и данные) поддержка была добавлена в спецификацию SPARC версии 9, опубликованную в 1994 году. Инструкции сложения и вычитания со знаком выполняют сложение и вычитание значений, проверяя, что младшие два бита обоих операндов равны 0, и сообщают о переполнении, если это не так. Это может быть полезно при реализации среды выполнения для ML, Lisp и подобных языков, которые могут использовать формат целых чисел с тегами. Порядок байтов 32-битной архитектуры SPARC V8 – исключительно старший. 64-битная архитектура SPARC V9 использует инструкции старшего порядка байтов, но может получать доступ к данным в порядке байтов старшего или младшего порядка, выбранном либо на уровне инструкции приложения (load-store), либо на уровне страницы памяти (через настройку MMU). Последнее часто используется для доступа к данным с устройств, изначально использующих младший порядок байтов, таких как те, что на шинах PCI.

Грузы и запасы

Инструкции загрузки и сохранения имеют трех-операндный формат: два операнда представляют значения для адреса, а один – регистр для чтения или записи. Адрес формируется путем сложения двух операндов адреса. Второй операнд адреса может быть константой или регистром. Инструкции загрузки берут значение по вычисленному адресу и помещают его в регистр, указанный третьим операндом, в то время как инструкции сохранения берут значение из регистра, указанного первым операндом, и помещают его по вычисленному адресу. Для большей наглядности в языке ассемблера адресные операнды обозначаются квадратными скобками с плюсом между ними, а не списком, разделенным запятыми. Примеры: