Designer | MIPS Technologies, Imagination Technologies |
---|---|
Биты | 64-битные (32 → 64) |
введены | 1985; 35 лет назад (1985) |
Версия | MIPS32 / 64 Release 6 (2014) |
Дизайн | RISC |
Тип | Регистр-регистр |
Кодирование | Фиксированное |
Ветвление | Сравнение и ветвление |
Endianness | Bi |
Размер страницы | 4 КБ |
Расширения | MDMX, MIPS-3D |
Открыть | Частично. Процессор R12000 находится на рынке более 20 лет и поэтому не может быть предметом патентных притязаний. Таким образом, процессоры R12000 и более ранние полностью открыты. |
Регистры | |
Общее назначение | 32 |
Плавающая точка | 32 |
MIPS (Микропроцессор без взаимосвязанных конвейерных этапов ) - это Компьютер с сокращенным набором команд (RISC) архитектура набора команд (ISA), разработанная MIPS Computer Systems, теперь MIPS Technologies, базирующаяся в США.
Существует несколько версий MIPS: включая MIPS I, II, III, IV и V; а также пять выпусков MIPS32 / 64 (для 32- и 64-битных реализаций соответственно). Ранние архитектуры MIPS были только 32-битными; Позднее были разработаны 64-битные версии. По состоянию на апрель 2017 года текущей версией MIPS является MIPS32 / 64 Release 6. MIPS32 / 64 в основном отличается от MIPS I – V тем, что в дополнение к архитектуре пользовательского режима определяет привилегированный сопроцессор системного управления в режиме ядра.
Архитектура MIPS имеет несколько дополнительных расширений. MIPS-3D, который представляет собой простой набор плавающей точки инструкций SIMD, предназначенных для общих задач 3D, MDMX (MaDMaX), который является более обширный набор целочисленных инструкций SIMD с использованием 64-битных регистров с плавающей запятой, MIPS16e, который позволяет программам занимать меньше места, и MIPS MT, который добавляет возможность многопоточности. 357>Архитектура компьютеров в университетах и технических школах часто изучается архитектура MIPS. Эта архитектура сильно повлияла на более поздние архитектуры RISC, такие как Alpha.
Первая версия архитектуры MIPS была разработана MIPS Computer Systems для своего микропроцессора R2000, первой реализации MIPS. И MIPS, и R2000 были представлены вместе в 1985 году. Когда был представлен MIPS II, MIPS был переименован в MIPS I, чтобы отличить его от новой версии.
MIPS Computer Systems 'R6000 микропроцессор (1989)) была первой реализацией MIPS II. Разработанный для серверов, R6000 был изготовлен и продан компанией Bipolar Integrated Technology, но коммерческий отказ не состоялся. В середине 1990-х годов многие новые 32-разрядные процессоры MIPS для встроенных систем были реализациями MIPS II, поскольку введение 64-разрядной архитектуры MIPS III в 1991 г. оставило MIPS II как новейшую 32-разрядную архитектуру MIPS. до появления MIPS32 в 1999 г. Микропроцессор
MIPS Computer Systems 'R4000 (1991) был первой реализацией MIPS III. Он был разработан для использования на персональных компьютерах, рабочих станциях и серверах. Компания MIPS Computer Systems активно продвигала архитектуру MIPS и R4000, создав консорциум Advanced Computing Environment (ACE) для продвижения своего стандарта Advanced RISC Computing (ARC), целью которого было сделать MIPS доминирующая платформа для персональных компьютеров. ARC не добился большого успеха в персональных компьютерах, но R4000 (и производная от R4400) широко использовались в рабочих станциях и серверных компьютерах, особенно его крупнейшим пользователем, Silicon Graphics. Другое использование R4000 включало высокопроизводительные встраиваемые системы и суперкомпьютеры. MIPS III в конечном итоге был реализован с помощью ряда встроенных микропроцессоров. Quantum Effect Design R4600 (1993) и его производные широко использовались в высокопроизводительных встроенных системах, а также на рабочих станциях и серверах низкого уровня. R4200 (1994) компании MIPS Technologies был разработан для встраиваемых систем, портативных и персональных компьютеров. Производная, R4300i, изготовленная NEC Electronics, использовалась в игровой консоли Nintendo 64. Nintendo 64 вместе с PlayStation были одними из самых массовых пользователей процессоров архитектуры MIPS в середине 1990-х годов.
Первой реализацией MIPS IV был микропроцессорный набор микросхем MIPS Technologies R8000 (1994). Разработка R8000 началась в Silicon Graphics, Inc., и она использовалась только в высокопроизводительных рабочих станциях и серверах для научных и технических приложений, где важна была высокая производительность при больших рабочих нагрузках с плавающей запятой. Более поздними реализациями были MIPS Technologies R10000 (1996) и Quantum Effect Devices R5000 (1996) и (1998). R10000, производимый и продаваемый NEC Electronics и Toshiba, и его производные использовались NEC, Pyramid Technology, Silicon Graphics, Inc. и Tandem Computers (среди прочих) в рабочих станциях, серверах и суперкомпьютерах. R5000 и R7000 нашли применение в высокопроизводительных встроенных системах, персональных компьютерах, а также на рабочих станциях и серверах начального уровня. Производная R5000 от Toshiba, R5900, использовалась в Emotion Engine от Sony Computer Entertainment, на котором установлена игровая консоль PlayStation 2.
Объявленный 21 октября 1996 года на Microprocessor Forum 1996 вместе с расширением MIPS Digital Media Extensions (MDMX), MIPS V был разработан для повышения производительности преобразований трехмерной графики. В середине 1990-х годов основным применением невстроенных микропроцессоров MIPS были графические рабочие станции SGI. MIPS V был дополнен расширением MDMX только для целых чисел, чтобы обеспечить полную систему для повышения производительности приложений трехмерной графики. Реализации MIPS V так и не были представлены. 12 мая 1997 года SGI анонсировала микропроцессоры «H1» («Зверь») и «H2» («Capitan»). Первый должен был стать первой реализацией MIPS V и должен был быть представлен в первой половине 1999 года. Проекты «H1» и «H2» позже были объединены и в конечном итоге были отменены в 1998 году. Реализации MIPS V, MIPS64 Release 1 (1999) были основаны на MIPS V и сохранили все свои функции в качестве дополнительной функции Coprocessor 1 (FPU), называемой Paired-Single.
Когда MIPS Technologies была выделена из Silicon Graphics в 1998 году, она переориентировалась на рынок встраиваемых систем. До MIPS V каждая последующая версия была строгим надмножеством предыдущей версии, но это свойство было признано проблемой, и определение архитектуры было изменено, чтобы определить 32-битную и 64-битную архитектуру: MIPS32 и MIPS64. Оба были представлены в 1999 году. MIPS32 основан на MIPS II с некоторыми дополнительными функциями из MIPS III, MIPS IV и MIPS V; MIPS64 основан на MIPS V. NEC, Toshiba и SiByte (позже приобретенный Broadcom ), каждый из которых получил лицензии на MIPS64, как только было объявлено. Philips, LSI Logic, IDT, Raza Microelectronics, Inc., Cavium, Loongson Technology С тех пор к ним присоединились и Ingenic Semiconductor. MIPS32 / MIPS64 Release 5 был анонсирован 6 декабря 2012 г. Выпуск 4 был пропущен, потому что число четыре воспринимается как неудачник во многих азиатских культурах.
В декабре 2018 года Wave Computing, новый владелец архитектуры MIPS объявил, что MIPS ISA будет с открытым исходным кодом в программе, получившей название MIPS Open Initiative. Программа была предназначена для открытия доступа к самым последним версиям как 32-разрядной, так и 64-разрядной архитектуры, делая их доступными без каких-либо лицензионных или лицензионных сборов, а также предоставляя участникам лицензии на существующие патенты MIPS.
В марте 2019 года одна версия архитектуры была предоставлена по бесплатной лицензии, но позже в том же году программа была снова закрыта.
MIPS - это модульная архитектура, поддерживающая до четырех сопроцессоров (CP0 / 1/2/3). В терминологии MIPS CP0 - это сопроцессор управления системой (важная часть процессора, который определяется реализацией в MIPS I – V), CP1 - это дополнительный блок с плавающей запятой (FPU) и CP2 / 3 являются необязательными сопроцессорами, определяемыми реализацией (MIPS III удалил CP3 и повторно использовал его коды операций для других целей). Например, в игровой консоли PlayStation CP2 - это Geometry Transformation Engine (GTE), который ускоряет обработку геометрии в 3D компьютерной графике.
MIPS - это архитектура загрузки / сохранения (также известная как архитектура регистр-регистр); За исключением инструкций загрузки / сохранения, используемых для доступа к памяти, все инструкции работают с регистрами.
MIPS I имеет тридцать два 32-битных регистра общего назначения (GPR). Регистр $ 0 жестко привязан к нулю, и записи в него отбрасываются. Реестр 31 $ - это ссылка на регистр. Для инструкций целочисленного умножения и деления, которые выполняются асинхронно из других инструкций, предусмотрена пара 32-битных регистров, HI и LO. Существует небольшой набор инструкций для копирования данных между регистрами общего назначения и регистрами HI / LO.
Счетчик программ имеет 32 бита. Два младших бита всегда содержат ноль, поскольку инструкции MIPS I имеют длину 32 бита и выровнены по своим естественным границам слова.
Инструкции делятся на три типа: R, I и J. Каждая инструкция начинается с 6-битного кода операции. В дополнение к коду операции инструкции R-типа определяют три регистра, поле величины сдвига и поле функции; Инструкции I-типа определяют два регистра и 16-битное непосредственное значение; Инструкции J-типа следуют за кодом операции с 26-битной целью перехода.
Для основного набора команд используются следующие три формата:
Тип | -31- формат (биты) -0- | |||||
---|---|---|---|---|---|---|
R | код операции (6) | rs (5) | rt (5) | rd (5) | shamt (5) | функция (6) |
I | код операции (6) | rs (5) | rt (5) | немедленный (16) | ||
J | opcode (6) | адрес (26) |
MIPS I содержит инструкции, которые загружают и хранят 8-битные байты, 16-битные полуслова и 32-битные слова. Поддерживается только один режим адресации : основание + смещение. Поскольку MIPS I является 32-битной архитектурой, загрузка величин менее 32 бит требует, чтобы датум был либо подписан, либо расширен нулем до 32 бит. Команды загрузки с суффиксом «unsigned» выполняют нулевое расширение; в противном случае выполняется расширение знака. Инструкции загрузки создают базу из содержимого георадара (rs) и записывают результат в другой георадар (rt). Инструкции сохранения создают базу из содержимого георадара (rs) и данные сохранения от другого георадара (rt). Все инструкции загрузки и сохранения вычисляют адрес памяти путем немедленного суммирования базы с 16-битным расширенным знаком. MIPS I требует, чтобы все обращения к памяти были выровнены по их естественным границам слов, в противном случае выдается исключение. Для поддержки эффективного доступа к невыровненной памяти существуют инструкции загрузки / сохранения слов с суффиксами «влево» или «вправо». За всеми командами загрузки следует слот задержки загрузки. Инструкция в слоте задержки загрузки не может использовать данные, загруженные инструкцией загрузки. Слот задержки загрузки может быть заполнен инструкцией, не зависящей от нагрузки; nop заменяется, если такая инструкция не может быть найдена.
MIPS I содержит инструкции для выполнения сложения и вычитания. Эти инструкции получают свои операнды из двух GPR (rs и rt) и записывают результат в третий GPR (rd). В качестве альтернативы, сложение может получить один из операндов из 16-битного непосредственного (который расширен по знаку до 32 бит). Инструкции для сложения и вычитания имеют два варианта: по умолчанию, если результат переполнен, сигнализируется исключение; инструкции с суффиксом «без знака» не сигнализируют об исключении. При проверке переполнения результат интерпретируется как 32-битное целое число с дополнением до двух. MIPS I имеет инструкции для выполнения побитового логического И, ИЛИ, XOR и NOR. Эти инструкции получают свои операнды из двух GPR и записывают результат в третий GPR. В качестве альтернативы инструкции AND, OR и XOR могут быть источником одного из операндов из 16-битного непосредственного (который расширяется нулем до 32 бит). Инструкции Set on Relations записывают единицу или ноль в регистр назначения, если указанное отношение истинно или ложно. Эти инструкции получают свои операнды из двух GPR или одного GPR и 16-битного немедленного (который расширен знаком до 32 бит) и записывают результат в третий GPR. По умолчанию операнды интерпретируются как целые числа со знаком. Варианты этих инструкций с суффиксом «без знака» интерпретируют операнды как целые числа без знака (даже те, которые исходят из операнда из 16-битного расширенного знака).
Команда «Загрузить немедленную верхнюю часть» непосредственно копирует 16-битные данные в старшие 16 битов GPR. Он используется вместе с инструкцией Or Immediate для немедленной загрузки 32-битного значения в регистр.
MIPS I содержит инструкции для выполнения логических сдвигов влево и вправо и арифметических сдвигов вправо. Операнд получается из георадара (rt), а результат записывается в другой георадар (rd). Расстояние сдвига получается либо из GPR (rs), либо из 5-битной «величины сдвига» (поле «sa»).
MIPS I содержит инструкции по умножению и делению целых чисел со знаком и без знака. Эти инструкции получают свои операнды из двух GPR и записывают свои результаты в пару 32-битных регистров, называемых HI и LO, поскольку они могут выполняться отдельно от других инструкций ЦП (и одновременно с ними). Для умножения половинки высокого и низкого порядка 64-битного произведения записываются в HI и LO (соответственно). Для деления частное записывается в LO, а остаток - в HI. Чтобы получить доступ к результатам, предусмотрена пара инструкций (Переместить из HI и Переместить из LO) для копирования содержимого HI или LO в георадар. Эти инструкции взаимосвязаны: чтение HI и LO не продолжается после незавершенной арифметической инструкции, которая будет записывать в HI и LO. Другая пара инструкций (Move to HI или Move to LO) копирует содержимое GPR в HI и LO. Эти инструкции используются для восстановления HI и LO в исходное состояние после обработки исключения. Инструкции, которые читают HI или LO, должны быть разделены двумя инструкциями, которые не пишут в HI или LO.
За всеми инструкциями потока управления MIPS I следует слот задержки перехода. Если слот задержки перехода не заполнен инструкцией, выполняющей полезную работу, заменяется nop. Инструкции ветвления MIPS I сравнивают содержимое GPR (rs) с нулем или другим GPR (rt) как целые числа со знаком и переходят, если заданное условие истинно. Управление передается по адресу, вычисленному путем сдвига 16-разрядного смещения влево на два бита, расширения знака 18-разрядного результата и добавления 32-разрядного результата с расширенным знаком к сумме счетчика программ (адрес инструкции) и 8 10. У прыжков есть две версии: абсолютная и регистрово-косвенная. Абсолютные переходы («Jump» и «Jump and Link») вычисляют, что управление адресом передается путем сдвига 26-битного instr_index влево на два бита и объединения 28-битного результата с четырьмя старшими битами адреса инструкция в слоте задержки перехода. Косвенный регистр переходит к передаче управления команде по адресу, полученному от GPR (rs). Адрес, полученный из GPR, должен быть выровнен по словам, в противном случае после выполнения инструкции в слоте задержки ветвления будет сообщено об исключении. Инструкции перехода и перехода, которые связываются (за исключением «Регистра перехода и связи»), сохраняют адрес возврата в GPR 31. Команда «Регистр перехода и перехода» позволяет сохранить адрес возврата в любой доступный для записи GPR.
MIPS I имеет две инструкции для программного обеспечения, чтобы сигнализировать об исключении: системный вызов и точка останова. Системный вызов используется программным обеспечением пользовательского режима для выполнения вызовов ядра; Точка останова используется для передачи управления отладчику через обработчик исключений ядра. Обе инструкции имеют 20-битное поле кода, которое может содержать информацию об операционной среде для обработчика исключений.
MIPS имеет 32 регистра с плавающей запятой. Два регистра объединены в пары для чисел двойной точности. Регистры с нечетными номерами не могут использоваться для арифметики или ветвления, как часть пары регистров двойной точности, в результате чего для большинства инструкций доступно 16 регистров (перемещение / копирование и загрузка / сохранение не затрагивались).
Одинарная точность обозначается суффиксом.s, а двойная точность обозначается суффиксом.d.
MIPS II удалил слот задержки загрузки и добавил несколько наборов инструкций. Для многопроцессорной обработки с общей памятью были добавлены инструкции «Синхронизировать общую память», «Загрузить связанное слово» и «Сохранить условное слово». Был добавлен набор инструкций Trap-on-Condition. Эти инструкции вызвали исключение, если оцениваемое условие истинно. Всем существующим командам ветвления были предоставлены версии с вероятностью ветвления, которые выполняли команду в слоте задержки ветвления, только если ветвление было выполнено. Эти инструкции улучшают производительность в некоторых случаях, позволяя полезным инструкциям заполнять слот задержки перехода. Добавлены инструкции по загрузке и сохранению двойного слова для COP1–3. В соответствии с другими инструкциями доступа к памяти, эти загрузки и сохранения требовали естественного выравнивания двойного слова.
В набор инструкций для сопроцессора с плавающей запятой также было добавлено несколько инструкций. Была добавлена инструкция извлечения квадратного корня с плавающей запятой, совместимая с IEEE 754. Он поддерживает операнды как с одинарной, так и с двойной точностью. Был добавлен набор инструкций, которые преобразовывали числа с плавающей запятой одинарной и двойной точности в 32-битные слова. Они дополнили существующие инструкции преобразования, позволив указывать режим округления IEEE с помощью инструкции вместо регистра управления и состояния с плавающей запятой.
MIPS III - это обратно совместимое расширение MIPS II, которое добавило поддержку 64-битной адресации памяти и целочисленных операций. 64-битный тип данных называется двойным словом, и MIPS III расширил регистры общего назначения, регистры HI / LO и счетчик программ до 64 бит для его поддержки. Были добавлены новые инструкции для загрузки и хранения двойных слов, для выполнения над ними операций сложения, вычитания, умножения, деления и сдвига целых чисел, а также для перемещения двойного слова между GPR и регистрами HI / LO. Существующие инструкции, изначально определенные для работы с 32-битными словами, были переопределены, где это необходимо, для расширения 32-битных результатов по знаку, чтобы большинство инструкций могло одинаково обрабатывать слова и двойные слова. Среди этих переопределенных инструкций была «Загрузить слово». В MIPS III он расширяет слова до 64 бит с помощью знака. В дополнение к Load Word была добавлена версия с нулевым расширением.
Невозможность формата инструкции R указать полное расстояние сдвига для 64-битных сдвигов (его 5-битное поле величины сдвига слишком узкое, чтобы указать расстояние сдвига для двойных слов) требовало MIPS III для обеспечения трех 64-битных версии каждой инструкции сдвига MIPS I. Первая версия - это 64-битная версия исходных инструкций сдвига, используемая для задания постоянных расстояний сдвига 0–31 бит. Вторая версия аналогична первой, но добавляет 32 10 значение поля величины сдвига, так что можно указать постоянные расстояния сдвига 32–64 бита. Третья версия получает расстояние сдвига из шести младших битов георадара.
MIPS III добавил уровень привилегий супервизора между существующим ядром и уровнями привилегий пользователя. Эта функция затрагивала только определяемый реализацией процессор управления системой (сопроцессор 0).
MIPS III удалил инструкции поддержки сопроцессора 3 (CP3) и повторно использовал его коды операций для новых инструкций двойного слова. Остальные сопроцессоры получили инструкции для перемещения двойных слов между регистрами сопроцессора и GPR. Плавающие регистры общего назначения (FGR) были расширены до 64 бит, а требование для инструкций использовать только регистры с четным номером было снято. Это несовместимо с более ранними версиями архитектуры; бит в регистре управления / состояния с плавающей запятой используется для работы модуля с плавающей запятой (FPU) MIPS III в режиме, совместимом с MIPS I и II. Регистры управления с плавающей запятой не были расширены для совместимости. Единственными добавленными новыми инструкциями с плавающей запятой были инструкции по копированию двойных слов между ЦП и FPU для преобразования чисел с плавающей запятой одинарной и двойной точности в целые числа с двойным словом и наоборот.
MIPS IV - четвертая версия архитектуры. Это расширенный набор MIPS III и совместим со всеми существующими версиями MIPS. MIPS IV был разработан, чтобы в основном улучшить производительность операций с плавающей запятой (FP). Чтобы улучшить доступ к операндам, был добавлен индексированный режим адресации (базовый + индекс, оба получены из GPR) для загрузки и сохранения FP, а также инструкции предварительной выборки для выполнения предварительной выборки из памяти и указания подсказок кеша (они поддерживали оба режимы адресации base + offset и base + index).
MIPS IV добавил несколько функций для улучшения параллелизма на уровне команд. Чтобы устранить узкое место, вызванное одним битом условия, в регистр управления и состояния с плавающей запятой было добавлено семь битов кода условия, в результате чего общее количество битов достигло восьми. Инструкции сравнения FP и перехода были переопределены, чтобы они могли указывать, какой бит условия был записан или прочитан (соответственно); и интервал задержки между ветвью FP, которая считывает бит условия, записанный в результате предыдущего сравнения FP, был удален. Добавлена поддержка частичного предсказания в форме инструкций условного перемещения как для GPR, так и для FPR; и реализация могла выбирать между точными или неточными исключениями для ловушек IEEE 754.
MIPS IV добавил несколько новых арифметических инструкций FP для FPN как одинарной, так и двойной точности: объединенное умножение, сложение или вычитание, обратный и обратный квадратный корень. Команды сложения и вычитания FP с объединенным умножением выполняют одно или два округления (это определяется реализацией), чтобы превышать или соответствовать требованиям точности IEEE 754 (соответственно). Инструкции FP с обратным и обратным квадратным корнем не соответствуют требованиям точности IEEE 754 и дают результаты, которые отличаются от требуемой точности на одну или две единицы последнего разряда (это определяется реализацией). Эти инструкции служат приложениям, в которых задержка выполнения инструкций важнее точности.
MIPS V добавил новый тип данных, парный одиночный (PS), который состоял из двух чисел с плавающей запятой одинарной точности (32-битных), хранящихся в существующих 64 -битные регистры с плавающей запятой. Варианты существующих инструкций с плавающей запятой для арифметики, сравнения и условного перемещения были добавлены для работы с этим типом данных в режиме SIMD. Добавлены новые инструкции для загрузки, переупорядочивания и преобразования данных PS. Это был первый набор команд для использования SIMD с плавающей запятой с существующими ресурсами.
В первом выпуске MIPS32, основанном на MIPS II, добавлены условные перемещения, предварительная выборка инструкции и другие функции из семейств 64-битных процессоров R4000 и R5000. Первый выпуск MIPS64 добавляет режим MIPS32 для запуска 32-разрядного кода. Инструкции MUL и MADD (умножение-сложение ), ранее доступные в некоторых реализациях, были добавлены в спецификации MIPS32 и MIPS64, как и инструкции управления кешем.
MIPS32 / MIPS64 Release 6 в 2014 г. добавлено следующее:
Удалены редко используемые инструкции:
Реорганизовал инструкцию ионное кодирование, освобождая место для будущих расширений.
Архитектуры microMIPS32 / 64 являются расширенными наборами архитектур MIPS32 и MIPS64 (соответственно), разработанными для замены MIPS16e ASE. Недостатком MIPS16e является то, что для обработки любой из его 16-битных инструкций требуется переключение режима. microMIPS добавляет версии наиболее часто используемых 32-битных инструкций, которые закодированы как 16-битные инструкции. Это позволяет программам смешивать 16- и 32-битные инструкции без переключения режимов. microMIPS был представлен вместе с MIPS32 / 64 Release 3, и каждый последующий выпуск MIPS32 / 64 имеет соответствующую версию microMIPS32 / 64. Процессор может реализовывать microMIPS32 / 64 или как microMIPS32 / 64, так и соответствующее подмножество MIPS32 / 64. Начиная с MIPS32 / 64 Release 6, поддержка MIPS16e прекращена, и microMIPS является единственной формой сжатия кода в MIPS.
Базовые архитектуры MIPS32 и MIPS64 могут быть дополнены рядом дополнительных архитектурных расширений, которые в совокупности называются расширениями для конкретных приложений (ASE). Эти ASE предоставляют функции, которые повышают эффективность и производительность определенных рабочих нагрузок, например, цифровая обработка сигналов.
MIPS имеет несколько соглашений о вызовах, особенно на 32-битной платформе.
O32 ABI является наиболее часто используемым ABI благодаря своему статусу исходного System V ABI для MIPS. Он строго основан на стеке, и для передачи аргументов доступны только четыре регистра $ a0- $ a3. Место в стеке зарезервировано на случай, если вызываемому объекту нужно сохранить свои аргументы, но регистры там не хранятся вызывающей стороной. Возвращаемое значение сохраняется в регистре $ v0; второе возвращаемое значение может храниться в $ v1. Эта кажущаяся медлительность, наряду со старинной моделью с плавающей запятой только с 16 регистрами, способствовала распространению многих других соглашений о вызовах. ABI сформировался в 1990 году и никогда не обновлялся с 1994 года. Он определен только для 32-битных MIPS, но GCC создал 64-битный вариант под названием O64.
Для 64-битных версий. бит, чаще всего используется N64 ABI от Silicon Graphics. Наиболее важным улучшением является то, что теперь доступно восемь регистров для передачи аргументов; он также увеличивает количество регистров с плавающей запятой до 32. Существует также версия под названием N32, которая использует 32-битные указатели для меньшего кода, аналогично x32 ABI. Оба работают в 64-битном режиме ЦП. ABI N32 и N64 передают первые восемь аргументов функции в регистрах $ a0- $ a7; последующие аргументы передаются в стек. Возвращаемое значение (или указатель на него) сохраняется в регистрах $ v0; второе возвращаемое значение может храниться в $ v1. В обоих ABI N32 и N64 все регистры считаются 64-битными.
Было предпринято несколько попыток заменить O32 32-битным ABI, больше напоминающим N32. Конференция 1995 года представила MIPS EABI, для которого 32-разрядная версия была очень похожей. EABI вдохновил MIPS Technologies на предложение более радикального "NUBI" ABI с дополнительным повторным использованием регистров аргументов для возвращаемого значения. MIPS EABI поддерживается GCC, но не LLVM, и ни один из них не поддерживает NUBI.
Для всех O32 и N32 / N64 адрес возврата хранится в регистре $ ra. Это автоматически устанавливается с использованием инструкций JAL (переход и ссылка) или JALR (регистр перехода и ссылки). Пролог функции (не оконечной) подпрограммы MIPS помещает адрес возврата (в $ ra) в стек.
И на O32, и на N32 / N64 стек растет вниз, но для ABI N32 / N64 требуется 64-битное выравнивание для всех записей стека. Указатель кадра ($ 30) является необязательным и на практике редко используется, за исключением случаев, когда выделение стека в функции определяется во время выполнения, например, путем вызова alloca ()
.
Для N32 и N64 адрес возврата обычно хранятся 8 байтов перед указателем стека , хотя это может быть необязательным.
Для ABI N32 и N64 функция должна сохранять регистры $ S0- $ s7, глобальный указатель ($ gp или $ 28), указатель стека ($ sp или $ 29) и указатель кадра ($ 30). ABI O32 такой же, за исключением того, что вызывающая функция требуется для сохранения регистра $ gp вместо вызываемой функции.
Для многопоточного кода указатель локального хранилища потока обычно хранится в специальном аппаратном регистре $ 29, и доступ к нему осуществляется с помощью инструкции mfhw (переход от оборудования). Известно, что по крайней мере один поставщик хранит эту информацию в регистре $ k0, который обычно зарезервирован для использования ядром, но это не стандарт.
Регистры $ k0 и $ k1 (26–27 долларов США) зарезервированы для использования ядром и не должны использоваться приложениями, поскольку эти регистры могут быть изменены ядром в любое время из-за прерываний, переключений контекста или других События.
Name | Number | Использовать | вызываемый абонент должен сохранить? |
---|---|---|---|
$ ноль | $0 | константа 0 | Н / Д |
$ в | $1 | ассемблер временно | Нет |
$ v0– $ v1 | $ 2– $ 3 | значения для возврата функции и оценки выражения | Нет |
$ a0– $ a3 | $4–$7 | аргументы функции | Нет |
$ t0– $ t7 | $8–$15 | время | Нет |
$ s0– $ s7 | $ 16– $ 23 | сохраненные временные файлы | Да |
$ t8– $ t9 | $24–$25 | периоды | Нет |
$ k0– $ k1 | $26–$27 | зарезервировано для ядра ОС | Н / Д |
$ gp | $ 28 | глобальный указатель | Да (кроме кода PIC) |
$ sp | $ 29 | указатель стека | Да |
$ fp | $ 30 | указатель кадра | Да |
$ ra | $ 31 | адрес возврата | Н / Д |
Имя | Число | Использовать | Вызываемый абонент должен сохранить? |
---|---|---|---|
$ ноль | $0 | константа 0 | Н / Д |
$ в | $1 | ассемблер временно | Нет |
$ v0– $ v1 | $ 2– $ 3 | значения для возврата функции и оценки выражения | Нет |
$ a0– $ a7 | $4–$11 | аргументы функции | Нет |
$ t4– $ t7 | $12–$15 | время | Нет |
$ s0– $ s7 | $ 16– $ 23 | сохраненные временные файлы | Да |
$ t8– $ t9 | $24–$25 | периоды | Нет |
$ k0– $ k1 | $26–$27 | зарезервировано для ядра ОС | Н / Д |
$ gp | $ 28 | глобальный указатель | Да |
$ sp | $ 29 | указатель стека | Да |
$ s8 | $ 30 | указатель кадра | Да |
$ ra | $ 31 | адрес возврата | Н / Д |
Регистры, которые сохраняются при вызове, являются регистрами, которые (по соглашению) не будут изменены системный вызов или вызов процедуры (функции). Например, регистры $ s должны быть сохранены в стеке процедурой, которая должна их использовать, а $ sp и $ fp всегда увеличиваются на константы и уменьшаются обратно после завершения процедуры с ними (и памяти, на которую они указывают к). Напротив, $ ra изменяется автоматически при любом обычном вызове функции (тех, которые используют jal), а $ t-регистры должны быть сохранены программой перед любым вызовом процедуры (если программе требуются значения внутри них после вызова).
Соглашение о вызовах в пользовательском пространстве независимого от позиции кода в Linux дополнительно требует, чтобы при вызове функции регистр $ t9 содержал адрес этой функции. Это соглашение восходит к дополнению System V ABI для MIPS.
Процессоры MIPS используются во встроенных системах, таких как внутренние шлюзы и маршрутизаторы. Первоначально MIPS был разработан для вычислений общего назначения. В течение 1980-х и 1990-х годов процессоры MIPS для персональных, рабочих станций и серверных компьютеров использовались многими компаниями, такими как Digital Equipment Corporation, MIPS Computer Systems, NEC, Pyramid Technology, SiCortex, Siemens Nixdorf, Silicon Graphics и тандемные компьютеры.
Исторически игровые приставки, такие как Nintendo 64, Sony PlayStation, PlayStation 2 и PlayStation Portable использовали процессоры MIPS. Процессоры MIPS также были популярны в суперкомпьютерах в течение 1990-х годов, но все такие системы выпали из списка TOP500. Сначала это использование дополнялось встроенными приложениями, но в 1990-х годах MIPS стала основным представителем рынка встраиваемых процессоров, а к 2000-м годам большинство процессоров MIPS предназначалось для этих приложений.
В середине и конце 1990-х было подсчитано, что каждый третий микропроцессор RISC был процессором MIPS.
К концу 2010-х годов машины MIPS все еще широко использовались на рынках встраиваемых систем., включая автомобильный, беспроводной маршрутизатор, модемы LTE (в основном через MediaTek ) и микроконтроллеры (например, PIC32M ). Они в основном исчезли из личного, серверного и прикладного пространства.
Открытые виртуальные платформы (OVP) включают свободно доступный для некоммерческого использования симулятор OVPsim, библиотеку моделей процессоров, периферийных устройств и платформ, а также API которые позволяют пользователям разрабатывать свои собственные модели. Модели в библиотеке имеют открытый исходный код, написаны на C и включают 32-разрядные ядра MIPS 4K, 24K, 34K, 74K, 1004K, 1074K, M14K, microAptiv, interAptiv, proAptiv и 64-разрядные ядра MIPS 5K.. Эти модели создаются и обслуживаются компанией Imperas и в партнерстве с MIPS Technologies были протестированы и получили знак MIPS-Verified. Примеры платформ на основе MIPS включают в себя как среды с нуля, так и платформы для загрузки немодифицированных двоичных образов Linux. Эти эмуляторы платформ доступны в виде исходного кода или двоичных файлов, они быстры, бесплатны для некоммерческого использования и просты в использовании. OVPsim разработан и поддерживается очень быстро (сотни миллионов инструкций в секунду) и создан для работы с многоядерными однородными и гетерогенными архитектурами и системами.
Существует свободно доступный симулятор MIPS32 (более ранние версии моделировали только R2000 / R3000) под названием SPIM для использования в образовании. EduMIPS64 - это графический кроссплатформенный симулятор ЦП MIPS64 под лицензией GPL, написанный на Java / Swing. Он поддерживает широкое подмножество MIPS64 ISA и позволяет пользователю графически видеть, что происходит в конвейере, когда ЦП запускает программу сборки.
MARS - еще один эмулятор MIPS на основе графического интерфейса пользователя, разработанный для использования в образовании, в частности для использования с Hennessy's Computer Organization and Design.
WebMIPS - это симулятор MIPS на основе браузера с визуальным представлением универсального конвейерного процессора. Этот симулятор очень полезен для отслеживания регистров во время пошагового выполнения.
Более продвинутые бесплатные эмуляторы доступны в проектах GXemul (ранее известный как проект mips64emul) и QEMU. Они эмулируют различные микропроцессоры MIPS III и IV в дополнение ко всем компьютерным системам, которые их используют.
Доступны коммерческие симуляторы специально для встроенного использования процессоров MIPS, например Wind River Simics (MIPS 4Kc и 5Kc, PMC RM9000, QED RM7000, Broadcom / Netlogic ec4400, Cavium Octeon I), (все ядра MIPS32 и MIPS64), VaST Systems (R3000, R4000) и CoWare (MIPS4KE, MIPS24K, MIPS25Kf и MIPS34K).
WepSIM - это симулятор на основе браузера, в котором микропрограммируется подмножество инструкций MIPS. Этот симулятор очень полезен для изучения того, как работает ЦП (микропрограммирование, процедуры MIPS, ловушки, прерывания, системные вызовы и т. Д.).
![]() | В Wikibooks есть книга на тему: Сборка MIPS |
![]() | Wikimedia Commons имеет носители, относящиеся к микропроцессорам MIPS. |