Область техники
Настоящее изобретение относится к микропроцессорным системам. В частности, изобретение относится к расширению набора команд с использованием 3-байтовых значений кода операции перехода в поле кода операции.
Предшествующий уровень техники
Микропроцессорная технология развивается уже многие годы с высокой скоростью. Достижения в компьютерной архитектуре и полупроводниковой технике создали множество возможностей для проектирования новых процессоров. Имеются два типовых варианта проектирования новых процессоров: (1)определение полностью новой архитектуры и (2) расширение существующей архитектуры для включения новых функций. Каждый вариант имеет как преимущества, так и недостатки. Однако когда процессор захватывает значительный сегмент рынка, то вариант (2) предоставляет множество существенных выгод. Основное преимущество наращивания существующей архитектуры состоит в совместимости с современными и более ранними моделями. Недостатки включают в себя проблемы выхода за пределы ограничений, налагавшихся более ранними моделями.
Новые процессоры связаны с реализацией новых функций как в аппаратных средствах, так и в программном обеспечении. Новый процессор, основанный на существующей модели, в типовом случае имеет дополнительный набор команд, который может получить выгоды от новой структуры аппаратных средств. Однако наращивание набора команд путем добавления нового набора команд является серьезной проблемой ввиду ограничений в кодировании этих команд. Поэтому имеется потребность в технологии для обеспечения эффективного способа для расширения набора команд без увеличения сложности аппаратных средств.
Краткое описание чертежей
Признаки и преимущества изобретения поясняются в последующем детальном описании со ссылками на чертежи, на которых представлено следующее:
Фиг.1 - блок-схема, иллюстрирующая, по меньшей мере, один вариант осуществления системы обработки, который может использовать раскрытые методы.
Фиг.2 - блок-схема, иллюстрирующая, по меньшей мере, один вариант осуществления формата для команды.
Фиг.3 - блок-схема, иллюстрирующая, по меньшей мере, один вариант осуществления логики для декодирования команды.
Фиг.4 - блок-схема, иллюстрирующая, по меньшей мере, один вариант осуществления схемы для декодирования команды нового типа 1.
Фиг.5 - блок-схема детектора префикса и перехода, схемы деблокирования декодера и декодера кода операции в соответствии с, по меньшей мере, одним вариантом осуществления изобретения.
Фиг.6 - блок-схема алгоритма, иллюстрирующая процесс выполнения декодирования команды с использованием префиксов, в соответствии с, по меньшей мере, одним вариантом осуществления изобретения.
Фиг.7 - блок-схема алгоритма, иллюстрирующая, по меньшей мере, один вариант осуществления способа декодирования длины команды.
Описание настоящего изобретения
Ниже раскрыты варианты осуществления способа, устройства и системы для расширения набора команд, использующего 3-байтовые коды операции перехода. Раскрытые варианты осуществления обеспечивают расширение набора команд, который использует 3-байтовые коды операций перехода, путем использования префикса для определения команды, которая включает в себя трехбайтовый код операции перехода. Раскрытые способы используют набор существующих полей команд для определения нового набора команд и обеспечения эффективного механизма для декодирования нового набора команд.
Термин «трехбайтовый код операции», как он используется в настоящем описании, относится к двухбайтовому значению, которое указывает логике декодера, что код операции для команды, представляющей интерес, включает в себя три байта: два байта трехбайтового кода операции перехода плюс однобайтовый код операции, специфический для команды. По меньшей мере, для одного варианта осуществления двухбайтовое значение в трехбайтовом коде операции перехода имеет одно из следующих значений: 0х0F38, 0x0F39, 0x0F3A или 0x0F3B.
В последующем описании, в целях пояснения, изложены различные конкретные детали, касающиеся типов процессоров, форматов команд, типов логических схем и значений кода операции перехода, чтобы обеспечить глубокое понимание настоящего изобретения. Однако специалистам в данной области техники должно быть понятно, что эти конкретные детали не требуются для реализации настоящего изобретения. В других случаях хорошо известные электрические структуры и схемы показаны в форме блок-схемы, чтобы не загромождать описание изобретения несущественными деталями. В последующем описании предполагается, что запись 0х указывает, что следующее число записано в шестнадцатеричном формате.
На фиг.1 представлен, по меньшей мере, один вариант осуществления системы 100 обработки, которая может использовать раскрытые методы. Система 100 может быть использована, например, для декодирования и исполнения команд нового типа 0 и команд нового типа 1. В целях настоящего раскрытия система обработки включает в себя любую систему, которая имеет процессор 110, например цифровой процессор сигналов (DSP), микроконтроллер, специализированную интегральную схему (ASIC) или микропроцессор. Процессор 110 может иметь любой тип архитектуры, например, такой как архитектура компьютера с полным набором команд (CISC), архитектура компьютера с сокращенным набором команд (RISC), архитектура компьютера с командными словами сверхбольшой длины (VLIW), многопоточная или гибридная архитектура. Система 100 является представителем систем обработки на базе микропроцессоров Itanium® и Itanium®II, а также Pentium®, Pentium®Pro, Pentium®II, Pentium®III, Pentium®4, разработанных компанией Intel Corporation. Также могут использоваться и другие системы (включая персональные компьютеры (РС), имеющие другие микропроцессоры, рабочие станции, персональные цифровые помощники и другие портативные устройства, приставки и т.п.). В одном варианте осуществления система 100 может исполнять версию операционной системы WindowsTM компании Microsoft Corporation, хотя также могут использоваться и другие операционные системы и графические пользовательские интерфейсы.
На фиг.1 показано, что процессор 110 включает в себя блок 116 декодирования, набор 114 регистров, по меньшей мере, один исполнительный блок 112 и, по меньшей мере, одну внутреннюю шину 111 для команд исполнения. Разумеется, процессор 110 содержит дополнительные схемы, которые не являются необходимыми для понимания изобретения. Блок 116 декодирования, регистры 114 и исполнительный блок 112 связаны между собой одной или несколькими внутренними шинами 111. Блок 116 декодирования используется для декодирования команд, принятых процессором 110, для получения сигналов управления и/или точек входа микрокода. Команды могут выдаваться в блок 116 декодирования посредством буфера команд (например, 310 на фиг.3). В ответ на эти сигналы управления и/или точки входа микрокода исполнительный блок 112 выполняет соответствующие операции. Блок 116 декодирования может быть реализован с использованием любого количества различных механизмов (например, таблицы перекодировки, аппаратной реализации, программируемой логической матрицы (ПЛМ) и т.д.).
Блок 116 декодирования имеет возможность декодирования команд 106, которые следуют формату, определенному расширенным набором 118 команд. Набор 118 команд включает в себя существующий набор 118а команд и новый набор 118b команд. Набор 118 команд включает в себя команды для выполнения операций над скалярными и упакованными данными. Числовой формат для этих операций может быть любым удобным форматом, включая числа с обычной точностью, с удвоенной точностью, расширенные числа с плавающей запятой, числа со знаком и без знака и нечисловые данные. По меньшей мере, в одном варианте осуществления команды, определенные в наборе 118 команд, могут изменяться по длине одна относительно другой.
Команды 106 в формате, установленном набором 118 команд, могут сохраняться в системе 102 памяти. Под системой 102 памяти понимается обобщенное представление памяти или иерархий памяти, и она может включать в себя множество форм памяти, таких как накопитель на жестких дисках, ПЗУ на компакт-дисках (CD-ROM), ОЗУ (RAM), динамическая память с произвольным доступом (DRAM), статическая память с произвольным доступом (SRAM), флэш-память и связанные с ними схемы. Система 102 памяти может хранить, помимо команд 106, данные 104, представленные сигналами данных, которые могут исполняться процессором 110.
Формат команд
На фиг.2 представлена диаграмма, иллюстрирующая формат команды 200 соответственно варианту осуществления изобретения. Формат 200 команды включает в себя поле 210 префикса, поле 220 кода операции и поля спецификатора операнда (например, modR/M, система счисления-индекс-основание (SIB), смещение, непосредственный и т.д.). Поля спецификатора операнда являются факультативными и включают поле 230 «modR/M», поле 240 «SIB», поле 250 «смещение», поле 260 «непосредственный».
Содержимое поля 230 «modR/M» указывает форму адресации. Поле 230 «modR/M» может определять регистры и режимы адресации.
Определенное кодирование информации в поле 230 «modR/M» может указывать, что второй байт информации адресации присутствует в поле 240 «SIB» для полного определения формы адресации кода команды. Например, форма адресации «основание-плюс-индекс» и форма адресации «система счисления-плюс-индекс» могут каждая включать в себя в поле 240 «SIB» информацию, такую как масштабный коэффициент, номер регистра для индекса и/или номер регистра для индексного регистра.
Специалистам в данной области техники должно быть понятно, что формат 200, показанный на фиг.2, является иллюстративным и что в раскрытых вариантах осуществления могут использоваться другие структуры данных в коде команды. Например, нет необходимости упорядочивать поля 210, 220, 230, 240, 250, 260 в том порядке, как показано, они могут быть переупорядочены в другие местоположения по отношению друг к другу и не обязательно должны следовать непрерывно. Также длины описываемых полей не следует трактовать ограничивающим образом. Поле, описываемое как конкретное число байтов, в альтернативных вариантах осуществления может быть реализовано как поле большей или меньшей длины. Также термин «байт», используемый здесь как ссылающийся на группу из 8 битов, в других вариантах осуществления может быть реализован как группа любого другого размера, например, 4 бита, 16 битов и 32 бита.
Команда, используемая в настоящем описании, такая как команды 106, показанные на фиг.1, включает в себя определенные значения в полях формата 200 команды, показанного на фиг.2. Такая команда иногда называется «действующая (рабочая) команда». Битовые значения для действительной команды иногда здесь упоминаются как «код команды».
Допустимые байтовые значения для действительной команды определены в наборе 118 команд (фиг.1). Допустимые байтовые значения для каждого из полей формата 200 команды представляют собой те значения, которые логика декодирования, такая как декодер 306 длины команды (фиг.3) и блок 116 декодирования (фиг.1) распознают и обрабатывают для генерации декодированного кода операции. Для каждого кода команды соответствующий декодированный код команды уникальным образом представляет операцию, выполняемую исполнительным блоком 112 (фиг.1) в ответ на код команды. Декодированный код команды может включать в себя одну или более микроопераций.
Поле 210 префикса, показанное на фиг.2, может включать в себя ряд префиксов. В одном варианте осуществления поле 210 префикса включает в себя до четырех префиксов, причем каждый префикс содержит один байт. Поле 210 префикса является факультативным. Для описываемого расширенного нового набора команд поле префикса используется для расширения трехбайтового пространства команды кода операции перехода.
Содержимое поля 220 кода операции определяет операцию. Для, по меньшей мере, одного варианта осуществления, как отмечено выше, поле кода операции для нового набора 118b команд, описываемого здесь, имеет длину три байта. По меньшей мере, в одном варианте осуществления поле 20 кода операции для расширенного нового набора 118b команд может включать в себя один, два или три байта информации. Для некоторых из новых команд в описываемом расширенном новом наборе команд (команды типа 0) трехбайтовое значение кода операции перехода в двухбайтовом поле 118с поля 220 кода операции комбинируется с содержимым третьего байта 225 поля 220 кода операции для определения операции. Третий байт 225 упоминается здесь как специфический для команды код операции. Для других из новых команд в описываемом расширенном новом наборе команд (команды типа 1) трехбайтовое значение кода операции перехода в двухбайтовом поле 118с поля 220 кода операции комбинируется с содержимым поля 210 префикса и содержимым поля 225 специфического для команды кода операции для определения операции.
В принципе, комбинация поля 210 префикса и поля 220 кода операции создает ряд различных типов команд. Для иллюстрации на фиг.2 показано только семь типов команд: регулярная (обыкновенная) однобайтовая команда 212, регулярная команда с префиксом в качестве спецификатора 214, регулярная команда 216 перехода, расширенная команда 222 первого типа, расширенная команда 224 второго типа, новая команда 226 первого типа, новая команда 228 второго типа. Как известно специалистам в данной области техники, можно определить аналогичным образом другие типы команд.
Регулярная однобайтовая команда 212 включает в себя регулярные команды с однобайтовым специфическим для команды кодом операции в поле 220 кода операции. Регулярная команда с префиксом в качестве спецификатора 214 включает в себя регулярные команды, которые используют префикс в качестве спецификатора для кода операции. Например, строковая команда может использовать значение префикса REPEAT (повторить) для повторения строковой команды число раз, определенное в счетном регистре или до тех пор, порка не будет удовлетворено определенное условие. Значение префикса, используемое в команде 214, не добавляет полностью нового смысла значению кода операции, которое следует в поле 220 кода операции. Напротив, значение префикса используется просто как спецификатор для определения кода операции с дополнительными условиями. Как пояснено ниже, использование префикса в команде 214 существенно отличается от использования его в расширенной команде второго типа 224 и в новой команде второго типа 228.
Регулярная команда 216 перехода является регулярной командой, которая использует код операции перехода в первом поле 215 поля 220 кода операции для указания аппаратным средствам декодера, что специфический для команды код операции во втором поле 217 поля 220 кода операции используется для определения команды. Например, в одном варианте осуществления значение кода операции перехода от 0ХD8 до 0xDF сопроцессора с плавающей запятой в первом байте 215 поля 220 кода операции указывает, что значение кода операции, которое следует во втором байте 217 поля 220 кода операции, должно интерпретироваться как команда сопроцессора и должно направляться в аппаратные средства сопроцессора для исполнения.
Расширенная команда первого типа 222 является командой перехода конкретного типа, которая определена как содержащая предварительно определенное значение кода операции перехода 0х0F в первом поле 221 поля 220 кода операции. Код операции перехода 0x0F указывает аппаратным средствам декодера, что специфическое для команды значение кода операции во втором поле 223 поля 220 кода операции используется для определения команды. Расширенные команды первого типа 222 могут, в зависимости от значения второго байта кода операции (и в некоторых случаях значения трех битов в поле 230 modR/M), иметь переменную длину. Например, две команды (логический сдвиг влево упакованных данных) расширенной команды типа 222 могут включать в себя следующие значения поля команды соответственно:
PSLLW(значение сдвига в регистре): 0F:F1:1b"11xxxyyy", где ххх определяет первый регистр, а ууу определяет второй регистр.
PSLLW (сдвиг на непосредственно получаемое значение): 0F:71:1b"11110xxx": непосредственно получаемые данные (8 битов), где ххх определяет регистр.
В каждой из указанных команд PSSLW первое слово поля 220 кода операции включает в себя значение перехода 0x0F. Первая команда имеет длину три байта, но вторая команда имеет длину четыре байта, так как она включает в себя байт непосредственно полученных данных.
Соответственно для расширенной команды типа 222 аппаратные средства декодера (такие, например, как декодер 306 длины команды, показанный на фиг.3) используют значение 0x0F кода операции перехода в первом поле 221 поля 220 кода операции, а также значение во втором байте 223 двухбайтового поля 220 кода операции и значение поля 230 modR/M для декодирования длины команды.
Новая команда первого типа 226 (также называемая «новой командой типа 0») является новым типом команды, которая является частью нового набора 118b команд (фиг.1), добавляемой к существующему регулярному набору 118а команд (фиг.1). Формат команды нового набора 118b команд включает в себя 3-байтовое поле 118с кода операции перехода и специфическое для команды поле 225 кода операции. 3-байтовое поле 118с кода операции перехода, по меньшей мере, в одном варианте осуществления имеет длину два байта. Новая команда типа 0 использует один из четырех специальных кодов операции перехода, называемых трехбайтовым кодами операции перехода. Трехбайтовые коды операции перехода имеют длину два байта и указывают аппаратным средствам декодера, что команда использует третий байт в поле 220 кода операции для определения команды. Поле 118с трехбайтового кода операции перехода может располагаться в любом месте в пределах кода операции команды и, необязательно, должно быть полем высшего порядка или низшего порядка в составе команды.
По меньшей мере в одном варианте осуществления четыре новых значения трехбайтового кода операции перехода определены как 0x0F3y, где у есть 0х8, 0х9, 0хА или 0хВ. Для команды 226 значение в специфическом для команды поле 225 кода операции поля 220 кода операции должно быть декодировано как новая команда.
Примеры префиксов команд и кодов операций
Как второй тип 224 расширенной команды и второй тип 228 новой команды (иногда называемой «типом 1 новой команды») используют значение в поле 210 префикса в качестве части кода операции. В отличие от регулярной инструкции со спецификатором, 214, где префикс просто определяет последующий код операции, второй тип 224 расширенной команды и тип 1 228 новой команды используют префикс для определения полностью новой команды.
Префиксы команд были первоначально разработаны для усовершенствования набора команд. Например, префикс «повторить» предназначен для повторения стоковой команды. Кодами префикса «повторить» являются 0xF3 (REP, REPE) и 0xF2 (REPNE). Префикс, используемый как таковой, не определяет новый смысл для кода операции, которая следует далее. Он просто определяет дополнительные операционные условия для кода операции.
Коды операции перехода обеспечивают расширение для набора команд. Например, коды операции от 0xD8 до 0xDF используются для индикации того, что второй байт 217 кода операции содержит значение, определяющее команду для блока с плавающей запятой. Декодер пропускает код операции к декодеру с плавающей запятой.
По меньшей мере, в одном варианте осуществления расширенного набора команд, как описано здесь, 3-байтовый код операции перехода представляет собой двухбайтовый объект, имеющий значение 0x0F3y, где у есть 0Х8, 0х9, 0хА или 0хВ. Значение 3-байтового кода операции перехода в поле 118с 3-байтового кода операции перехода показывает декодеру, что специфическое для команды значение кода операции в третьем байте 225 поля 200 кода операции указывает на команду в наборе новых команд.
В противоположность 2-байтовому коду операции перехода, описанному выше в связи с первым типом 222 расширенной команды, значение поля 118с 3-байтового кода операции перехода указывает декодеру метод, который должен быть использован для определения длины определяемой команды типа 0. То есть каждое значение для 3-байтового кода операции перехода связано с конкретным методом, который должен быть использован для определения длины команды для каждой команды в карте, соответствующей конкретному 3-байтовому коду операции перехода. Например, значение 0x0F38 в поле 118с 3-байтового кода операции перехода ассоциировано с соответствующей картой кода операции. Длина для каждой команды в карте кода операции 0x0F38 может быть вычислена с использованием одного и того же метода определения длины, используемого для определения длины других команд в карте кода операции 0x0F38.
Аналогично, длина каждой команды соответствующих карт кода операции, ассоциированных с остальными значениями 3-байтового кода операции перехода (0x0F39, 0x0F3А, 0x0F3В), может быть вычислена с использованием той же самой логики определения длины, используемой для определения длины других команд в соответствующей карте кода операции.
Логика определения длины, используемая для определения длины команд, для каждой команды в одной из новых карт кода операции упрощена тем, что одинаковый набор входных членов оценивается для определения длины каждой команды в карте кода операции. Такая логика определения длины называется здесь как логика или метод «с фиксированным входом». То есть каждый входной член, оцениваемый для определения длины одной команды в карте, также релевантен для определения длины каждой другой команды в карте. Фиксированный набор членов, подлежащих оцениванию, может отличаться для различных карт кода операции. Хотя набор входных членов, подлежащих оцениванию, может отличаться для различных карт кода операции, входные члены, оцениваемые для определения длины команды, являются одними и теми же по всем командам в заданной карте 3-байтового кода операции.
Комбинация префикса и кода операции перехода обеспечивает значительное расширение таблицы кодов операций процессора, допуская создание новых наборов команд. Такая комбинация использует существующие коды префиксов для определения нового набора команд, в дополнение к набору команд, созданному кодами операций перехода. Используя существующие коды префиксов, схемы декодирования для существующего набора команд могут оставаться относительно неизменными для поддержки декодирования новых команд 118с (фиг.1).
Специфические для команд значения кодов операции (в третьем байте 225 поля 220 кода операции) для некоторых или всех новых команд могут быть теми же самыми, что и коды операции для существующих команд. За счет использования тех же самых кодов операции с префиксом и кодами операции перехода для определения нового набора команд, схемы декодирования могут быть менее сложными, чем при использовании полностью нового набора кодов операции для нового набора команд.
В одном варианте осуществления значение префикса 0Х66 используется для определения новых команд. Могут использоваться и другие префиксы. Кроме того, префиксы могут продолжать использоваться в традиционной роли усовершенствования кода операции или определения кода операции при некотором операционном условии.
В Таблице 1 ниже приведены примеры нового набора команд с использованием префиксов и трехбайтовых кодов операции перехода.
специфический для команды код операции
(в шестнадцатеричн.)
В приведенных выше примерах команды с префиксом 0х66 относятся к командам, которые используют один или более регистров расширенного размера (такого как размер 128-битового регистра), в то время как команды без префикса 0х66 относятся к командам, которые используют один или более регистров меньшего размера (такого как размер 64-битового регистра). Регистры меньшего размера упоминаются здесь как регистры «регулярной длины». Как известно специалистам в данной области техники, точные коды для префиксов являются зависящими от реализации и описанное выше значение префикса 0х66 приведено только для иллюстрации.
Декодирование команд с использованием 3-байтовых кодов операции перехода
На фиг.3 приведена диаграмма, иллюстрирующая логику 300 для декодирования команд переменной длины. Логика 300 декодирования может включать в себя декодер 306 длины команды, блок 308 циклического сдвига команд, буфер 310 команд, детектор 320 префикса и перехода, схему 330 запуска декодера и декодер 340 кода операции. Детектор 320 префикса и перехода, схема 330 запуска декодера и декодер 340 кода операции образуют весь или часть блока 116 декодирования, показанного на фиг.1. Хотя детектор 320 префикса и кода перехода показан как единый блок, он может быть реализован как состоящий из отдельных блоков детектора перехода и детектора префикса.
Декодер 306 длины команды определяет длину текущего кода команды, выборка которой была произведена из внешней памяти (например, из памяти 102 на фиг.2). Для целей иллюстрации код команды предполагается включающим в себя до пяти байтов: первый байт соответствует от IN до IN+7, второй байт соответствует от IК до IК+7, третий байт соответствует от IL до IL+7, четвертый байт соответствует от IМ до IМ+7 и пятый байт соответствует от IР до IР+7, где IN до IN+7, IК до IК+7, IL до IL+7, IМ до IМ+7 и IР до IР+7 относятся к позициям битов кода команды. На практике, однако, текущая команда может включать в себя более чем пять байтов в своем коде команды. Аналогичным образом, текущая команда может включать в себя менее пяти байтов в своем коде команды.
По меньшей мере, в одном варианте осуществления пять проиллюстрированных байтов кода команды являются непрерывными, такими как K=N+8, L=K+8 и L=N+16 и M=L+8, M=K+16 и M=K+24 и т.д. Однако, как описано выше в связи с фиг.2, поля формата 200 не обязательно должны занимать показанные позиции. Соответственно, проиллюстрированные пять байтов кода команды, которые описаны здесь, могут иметь любой порядок и необязательно должны быть непрерывными.
Специалисту в данной области должно быть понятно, что логика декодера 306 длины команды может реализовывать довольно сложные методы декодирования длины в системе, которая поддерживает команды переменной длины. Это особенно справедливо для систем, которые требуют различных методов, которые оценивают различные входные входы, для определения длины команды для команд в той же самой карте кода операции. Как описано ниже, варианты осуществления настоящего изобретения обеспечивают упрощенную обработку декодирования длины за счет обеспечения того, что длина каждой команды в карте кода операции определяется посредством логики определения длины одиночного фиксированного входного члена.
Блок 308 циклического сдвига команд циклически сдвигает байты команды так, чтобы первый байт, подлежащий декодированию, был в начальном положении. Блок 308 циклического сдвига команд, таким образом, идентифицирует начало байтов команды, подлежащих декодированию. Следует отметить, что хотя блок 308 циклического сдвига команд может идентифицировать первый байт команды, такой как байт префикса, первый байт не обязательно должен быть идентифицирован. По меньшей мере, в одном варианте осуществления, например, блок 308 циклического сдвига команд идентифицирует наименее значимый байт кода операции и циклически сдвигает его в начальное положение команды. По меньшей мере, еще в одном варианте осуществления блок 308 циклического сдвига команд идентифицирует наиболее значимый байт кода операции и циклически сдвигает его в начальное положение команды.
Буфер 310 команды получает и сохраняет команды, которые были извлечены из внешней памяти. По меньшей мере, в одном варианте осуществления команды декодируются по длине и циклически сдвигаются, прежде чем поступят в буфер 310 команд. По меньшей мере, в одном варианте осуществления буфер 310 команд реализован как кэш команд.
Детектор 320 префикса и перехода получает биты команд от IN до IN+7, от IК до IК+7, от IL до IL+7 и обнаруживает присутствие одного или более из набора предварительно определенных префиксов и/или кодов операции перехода, используемых в качестве части нового набора команд. Значение префикса может быть выбрано так, что оно является тем же, что и префикс, используемый для регулярного набора команд. Схема 330 запуска декодера использует результаты детектора 320 префикса и перехода для генерации сигналов запуска или выбора для отдельного декодера кода операции. Декодер 440 кода операции получает биты команд от IN до IN+7, IК до IК+7, IМ до IМ+7, IL до IL+7 и IР до IР+7 и преобразует отдельные коды команд в декодированные коды команд, которые определяют желательную команду.
На фиг.4 показана блок-схема, иллюстрирующая, по меньшей мере, один вариант осуществления схемы 440 декодера для декодирования новой команды типа 0. Схема 440 декодера может быть реализована как часть детектора префикса и перехода, такого как детектор 320 префикса и перехода, показанный на фиг.3. В целях иллюстрации при описании фиг.4 предполагается, что блок циклического сдвига команд (308 на фиг.3) указывает первый байт кода операции команды.
На фиг.4 показано, что декодер 440 включает в себя схему «И» 450, которая определяет, согласуется ли первый байт команды, то есть биты от IN до IN+7, со значением 0х0F двухбайтового кода операции перехода. Сигнал ESC2 выдается, если биты от IN до IN+7 представляют значение 0х0F двухбайтового кода операции перехода.
Декодер 440 также включает в себя схемы «И» 402, 404, 406, 408. Схема «И» 402 согласует биты от IК до IК+7 команды со значением 0х38 трехбайтового кода операции перехода и генерирует сигнал ES38. Сигнал ES38 выдается, если биты от IK до IK+7 команды представляют значение 0х38 трехбайтового кода операции перехода.
Если биты от IN до IN+7 представляют значение 0х0F двухбайтового кода операции перехода и если биты от IK до IK+7 команды представляют значение 0х38 трехбайтового кода операции перехода, то команда представляет собой новую команду 226 типа 0. Если выданы оба сигнала ESC2 и ES38, то схема «И» 403 выдает оценку «истинно», запуская логику 412. Логика 412 выбирает, для декодирования значения в специфическом для команды поле 225 кода операции (фиг.2), карту трехбайтового кода операции для команд, имеющих значение 0х38 трехбайтового кода перехода.
Схема «И» 404 согласует биты от IК до IК+7 команды со значением 0х39 трехбайтового кода операции перехода и генерирует сигнал ES39. Сигнал ES39 выдается, если биты от IK до IK+7 команды представляют значение 0х39 трехбайтового кода операции перехода. Если биты от IN до IN+7 команды представляют значение 0х0F двухбайтового кода операции перехода и если биты от IK до IK+7 команды представляют значение 0х39 трехбайтового кода операции перехода, то команда представляет собой новую команду 226 типа 0. Если выданы оба сигнала ESC2 и ES39, то схема «И» 405 выдает оценку «истинно», запуская логику 414. Логика 414 выбирает для декодирования значения в специфическом для команды поле 225 кода операции (фиг.2) карту трехбайтового кода операции для команд, имеющих значение 0х39 трехбайтового кода перехода.
Схема «И» 406 согласует биты от IК до IК+7 команды со значением 0х3А трехбайтового кода операции перехода и генерирует сигнал ES3А. Сигнал ES3А выдается, если биты от IK до IK+7 команды представляют значение 0хА трехбайтового кода операции перехода. Если биты от IN до IN+7 команды представляют значение 0х0F двухбайтового кода операции перехода, и если биты от IK до IK+7 команды представляют значение 0х3А трехбайтового кода операции перехода, то команда представляет собой новую команду 226 типа 0. Если выданы оба сигнала ESC2 и ES3А, то схема «И» 405 выдает оценку «истинно», запуская логику 416. Логика 416 выбирает для декодирования значения в специфическом для команды поле 225 кода операции (фиг.2) карту трехбайтового кода операции для команд, имеющих значение 0х3А трехбайтового кода перехода.
Схема «И» 408 согласует биты от IК до IК+7 команды со значением 0х3В трехбайтового кода операции перехода и генерирует сигнал ES3В. Сигнал ES3В выдается, если биты от IK до IK+7 команды представляют значение 0х3В трехбайтового кода операции перехода. Если биты от IN до IN+7 команды представляют значение 0х0F двухбайтового кода операции перехода и, если биты от IK до IK+7 команды представляют значение 0х3В трехбайтового кода операции перехода, то команда представляет собой новую команду 226 типа 0. Если выданы оба сигнала ESC2 и ES3В, то схема «И» 409 выдает оценку «истинно», запуская логику 418. Логика 418 выбирает для декодирования значения в специфическом для команды поле 225 кода операции (фиг.2) карту трехбайтового кода операции для команд, имеющих значение 0х3В трехбайтового кода перехода.
На фиг.5 показана диаграмма, иллюстрирующая дополнительные детали декодера, такого как декодер 340 кода операции, показанного на фиг.3, а также дополнительные детали детектора 320 префикса и перехода и схему 330 запуска декодера.
Для целей иллюстрации предполагается, что для примерного набора команд имеется один префикс 0х66 и три кода операции перехода: регулярные коды операции перехода 0ХD8 - 0xDF, двухбайтовый код операции перехода 0x0F и трехбайтовые коды операции перехода 0x0F38 - 0x0F3B.
Для целей иллюстрации также предполагается, что блок циклического сдвига команды (308 на фиг.3) имеет показанный первый байт кода команды, который может быть префиксом. Однако понятно, что на практике команда может получать циклический сдвиг до других байтов, например, до наименее значимого байта кода операции, и что функциональные средства, показанные на фиг.5, могут быть соответственно модифицированы.
На фиг.5 показано, что дополнительные байты команды, в дополнение к показанным на фиг.3, могут быть направлены в конкретный индивидуальный декодер 530, 532, 534, 536, 538, 540, 542. Например, на фиг.5 показано, что слова команды от IМ до IМ+7 и от IР до IР+7 могут маршрутизироваться в декодер 542 для типа 1 новой команды. Некоторые особенности схемы, показанной на фиг.5, намеренно исключены для упрощения чертежа, чтобы не загромождать признаки выбранных вариантов осуществления несущественными деталями. Однако специалистам в данной области техники должно быть понятно, что другие байты слов команды, в дополнение к показанным на фиг.5, могут направляться в другие декодеры 530, 5323, 534, 536, 538, 440.
Детектор 320 префикса и перехода включает в себя 5 схем «И» 510, 512, 514, 516, 518 и 520. В принципе, схемы «И» 510, 512, 514 согласуют биты от IN до IN+7 команды с соответствующим кодом префикса и кодом операции перехода.
Схема «И» 510 согласует биты от IN до IN+7 команды с кодом префикса 0х66 и генерирует сигнал PRFX. Сигнал PRFX выдается, если биты от IN до IN+7 команды представляют префикс 0х66.
Схема «И» 512 согласует биты от IN до IN+7 команды с кодами операции перехода 0хD8 - 0xDF и генерирует сигнал ESC1. Сигнал ESC1 выдается, если биты от IN до IN+7 команды представляют любой из кодов операции перехода 0хD8 - 0xDF.
Схема «И» 514 согласует биты от IN до IN+7 команды с двухбайтовым кодом операции перехода 0х0F и генерирует сигнал ESC2А. Сигнал ESC2А выдается, если биты от IN до IN+7 команды представляют двухбайтовый код операции перехода 0х0F. Если биты от IN до IN+7 команды представляют двухбайтовый код операции перехода 0х0F, то команда может быть либо расширенной командой 222 типа 0, либо новой командой 228 типа 0. Поэтому как описано ниже, дополнительная схема «И» 518 оценивает третий набор от IL до IL+7 для определения, присутствует ли вторая половина трехбайтового кода операции.
Аналогично описанному выше, детектор 320 префикса и перехода определяет, включает ли первый набор битов от IN до IN+7 кода операции команды значение префикса 0х66 или одно из значений кода операции перехода. Если первый набор битов включает значение префикса, то команда может быть расширенной командой 224 типа 1 или новой командой 228 типа 1. Таким образом, второй набор битов от IK до IK+7 оценивается для определения того, содержит ли он значение 0х0F. (Если он не содержит, то префикс предполагается традиционным префиксом, а не частью кода операции команды).
Соответственно, схема «И» 516 согласует биты от IК до IК+7 команды с двухбайтовым кодом операции перехода 0х0F и генерирует сигнал ESC2В. Сигнал ESC2В выдается, если биты от IК до IК+7 команды представляют двухбайтовый код операции перехода 0х0F.
В дополнение, схема «И» 518 оценивает биты от IК до IК+7 команды для определения, присутствует ли в битах вторая половина трехбайтового кода операции. Такая оценка полезна в случае, когда первый набор битов от IК до IК+7 содержит значение 0х0F. Схема «И» 518 согласует биты от IК до IК+7 команды с второй половиной 3-байтового кода операции перехода и генерирует сигнал ESC3A. Сигнал ESC3A выдается, если биты от IК до IК+7 команды содержат значение 0х38, 0х39, 0х3А или 0х3В.
Вышеописанным способом схема 320 детектора префикса и перехода определяет, включает ли в себя второй набор битов от IК до IК+7 кода операции команды одно из значений кода операции перехода. Если второй набор битов от IК до IК+7 включает в себя вторую половину трехбайтового кода операции, то команда может быть новой командой 225 типа 0. Однако если второй набор битов от IК до IК+7 содержит значение 0х0F, то команда может быть либо расширенной командой 224 типа 1, либо новой командой 228 типа 1. Соответственно третий набор битов от IL до IL+7 оценивается, чтобы определить, включает ли он в себя вторую половину одного из трехбайтовых кодов операции. То есть третий набор битов от IL до IL+7 оценивается, чтобы определить, включает ли он в себя значения 0х38, 0х39, 0х3А или 0х3В.
Соответственно, фиг.5 показывает, что схема «И» 518 согласует биты от IК до IК+7 команды с вторым байтом 3-байтового кода операции перехода 0х38-0х3В и генерирует сигнал ESC3В. Сигнал ESC3В выдается, если биты от IL до IL+7 команды представляют второй байт любого из трехбайтовых кодов операции перехода 0х038 - 0х0F3В.
Как известно специалистам в данной области техники, для выполнения согласования или декодирования битов от IN до IN+7, IК до IК+7 и от IL до IL+7 команд могут использоваться и другие логические схемы.
Схема 330 запуска декодера принимает сигналы PREF, ESC1, ESC2A, ESC2B, ESC3A, ECS3B для генерации сигналов запуска для отдельных декодеров. Схема 330 запуска декодера включает в себя схему «исключающее ИЛИ» 520, схемы «И» 522, 526, 527, 528 и 529. Специалисту в данной области техники должно быть ясно, что все или часть декодеров могут быть реализованы вместе в одном устройстве, таком как программируемая логическая матрица.
Схема «Исключающее ИЛИ» 520 выдает сигнал EN1, если для всех сигналов PREF, ESC1, ESC2A выполняется логическая операция «НЕ». Это условие соответствует условию, когда биты от IN до IN+7 команды не согласуются ни с префиксом, ни с кодом операции перехода с плавающей запятой, ни с 2-байтовым кодом операции перехода. Поэтому биты от IN до IN+7 команды соответствуют коду операции однобайтовой регулярной команды.
Схема «И» 522 выдает сигнал EN2, если выдан сигнал PREF, а для сигнала ESC2В выполняется логическая операция «НЕ». Выдача сигнала EN2 соответствует условию, когда биты от IN до IN+7 команды согласуются с кодом префикса, но биты от IК до IК+7 команды не согласуются с 2-байтовым кодом операции перехода. Поэтому это условие соответствует коду операции, использующей префикс как спецификатор регулярной команды.
Сигнал ESC1 используется как сигнал EN3. Этот сигнал выдается, когда биты от IN до IN+7 команды согласуются с кодом операции перехода с плавающей запятой. Поэтому это условие соответствует коду операции с плавающей запятой регулярной команды.
Схема «И» 528 выдает сигнал EN4, если выдан сигнал ESC2A, а для сигнала ESC3В выполняется логическая операция «НЕ». Выдача сигнала EN4 соответствует условию, когда биты от IN до IN+7 команды согласуются с 2-байтовым кодом операции перехода, но биты от IК до IК+7 команды не согласуются с второй половиной любого из 3-байтовых кодов операции перехода. Поэтому это условие соответствует коду операции расширенной команды типа 0.
Схема «И» 526 выдает сигнал EN5, если выданы сигналы PREF и ESC2В, а для сигнала ESC3В выполняется логическая операция «НЕ». Это условие соответствует условию, когда биты от IN до IN+7 команды согласуются с кодом префикса, биты от IК до IК+7 команды согласуются с 2-байтовым кодом операции перехода, но биты от IL до IL+7 команды не согласуются с второй половиной любого из 3-байтовых кодов операции перехода. Поэтому это условие соответствует коду операции расширенной команды типа 1.
Схема «И» 527 выдает сигнал EN6, если выданы сигналы ESC2A и ESC3В. Выдача сигнала EN6 соответствует условию, когда биты от IN до IN+7 команды согласуются с 2-байтовым кодом операции перехода, а биты от IL до IL+7 команды согласуются с второй половиной одного из 3-байтовых кодов операции перехода. Поэтому это условие соответствует коду операции новой команды типа 1.
Схема «И» 529 выдает сигнал EN7, если выданы сигналы PREF, ESC2В и ESC3В. Выдача сигнала EN7 соответствует условию, когда биты от IN до IN+7 команды согласуются с кодом префикса, биты от IК до IК+7 команды согласуются с 2-байтовым кодом операции перехода, и биты от IL до IL+7 команды согласуются с второй половиной одного из 3-байтовых кодов операции перехода. Поэтому это условие соответствует коду операции новой команды типа 1.
Декодер 340 кода операции включает в себя регулярный однобайтовый декодер 530, регулярный декодер 532 префикса, регулярный декодер 534 перехода, декодер 536 расширенной команды типа 0, декодер 538 расширенной команды типа 1, декодер 440 новой команды типа 0 и декодер 542 новой команды типа 1. Хотя эти декодеры 530, 532, 534, 536, 538, 440, 542 показаны как отдельные блоки, на практике декодирование этих команд может быть объединено.
На фиг.6 показана блок-схема алгоритма, иллюстрирующая способ 600 выполнения декодирования команд для команд формата, определенного в наборе команд, где набор команд включает в себя команды, кодированные с использованием трехбайтовых кодов операции перехода. Специалисту в данной области техники должно быть понятно, что блоки 602-636 обработки, показанные на фиг.6, не обязательно должны выполняться в показанном порядке. Эти блоки 602-636 могут быть выполнены в различном порядке. Например, определение 602 действительного префикса может быть выполнено после определений 604, 605 двухбайтового кода операции перехода. Альтернативно, обработка некоторых или всех из блоков обработки, показанных на фиг.6, могут выполняться одновременно с обработкой других блоков.
На фиг.6 показано, что способ 600 начинается на этапе запуска, после чего обработка переходит к блоку 602. В блоке 602 по процедуре способа 600 происходит определение того, согласуется ли первый байт, биты от IN до IN+7 команды с кодом 0х66 префикса. Если нет, то обработка переходит к блоку 604. В противном случае обработка переходит к блоку 610.
В блоке 610 по процедуре способа 600 происходит определение того, согласуются ли биты от IN до IN+7 команды с значением двухбайтового кода операции перехода. По меньшей мере, в одном варианте осуществления значение двухбайтового кода операции равно 0х0F. Если проверка 610 кода операции перехода дает результат «ложно», то обработка переходит к блоку 624. В блоке 624 определяется, что первый байт, биты от IN до IN+7 команды, согласуется с кодом 0х66 префикса (см. блок 602) и что второй байт, биты от IК до IК+7 команды, не согласуется с значением двухбайтового кода операции перехода (см. блок 610). Соответственно, в блоке 624 второй байт, биты от IК до IК+7 команды, декодируется как код операции регулярной команды со спецификатором префикса.
Если проверка 610 кода операции перехода дает результат «истинно», то обработка переходит к блоку 628 для определения того, является ли команда новой командой типа 1. В блоке 628 по процедуре способа определяется, согласуется ли третий байт, биты от IL до IL+7 команды, со второй половиной значения трехбайтового кода операции перехода. По меньшей мере, в одном варианте осуществления значениями трехбайтового кода операции перехода являются следующие: 0х0F38, 0х0F39, 0х0F3А и 0х0F3В. Соответственно, в блоке 628 определяется, согласуется ли третий байт команды, биты от IL до IL+7 команды, со значениями 0х038, 0х039, 0х03А и 0х03В. Если нет, то обработка переходит к блоку 632. Однако если проверка в блоке 628 трехбайтового кода операции перехода дает результат «истинно», то обработка переходит к блоку 634. В блоке 634 четвертый байт команды, биты от IМ до IМ+7 команды, декодируется как код операции новой команды типа 1. Затем обработка завершается.
В блоке 632 третий байт команды, биты от IL до IL+7 команды, декодируется как код операции расширенной команды типа 1, имеющей значение 0х66 в первом байте команды и значение 0х0F двухбайтового кода операции перехода во втором байте команды. Затем обработка завершается.
В блоке 604 обработка продолжается, если в блоке 602 определено, что первый байт команды, биты от IК до IК+7 команды, не согласуется со значением 0х66 префикса. В блоке 604 определяется, согласуется ли первый байт команды, биты от IК до IК+7 команды, со значением двухбайтового кода операции перехода. Если нет, то обработка переходит к блоку 606. Однако если оценка в блоке 604 двухбайтового кода операции перехода дает результат «истинно», то обработка продолжается в блоке 620 для определения того, является ли команда новой командой типа 0.
В блоке 620 по процедуре способа определяется, согласуется ли второй байт команды, биты от IК до IК+7 команды, со второй половиной значения трехбайтового кода операции перехода. По меньшей мере, в одном варианте осуществления, значениями трехбайтового кода операции перехода являются следующие: 0х0F38, 0х0F39, 0х0F3А и 0х0F3В. Соответственно, в блоке 620 определяется, согласуется ли второй байт команды, биты от IК до IК+7 команды, со значениями 0х38, 0х39, 0х3А и 0х3В. Если нет, то обработка переходит к блоку 622. Однако если проверка в блоке 620 трехбайтового кода операции перехода дает результат «истинно», то обработка переходит к блоку 630. В блоке 630 третий байт команды, биты от IL до IL+7 команды, декодируется как код операции новой команды типа 0. Затем обработка завершается.
Если проверка трехбайтового кода операции перехода в блоке 620 дает результат «ложно», то обработка переходит к блоку 622. В блоке 622 третий байт команды, биты от IL до IL+7 команды, декодируется как код операции расширенной команды типа 0, имеющей значение 0х66 префикса в ее первом байте и значение 0х0F двухбайтового кода операции перехода в ее втором байте.
В блоке 606 обработка продолжается, если в блоке 604 определено, что первый байт команды, биты от IК до IК+7 команды, не согласуется со значением двухбайтового кода операции перехода. В блоке 606 по процедуре способа 600 определяется, согласуется ли первый байт команды с другим кодом операции перехода (например, кодами операции перехода с плавающей запятой - от 0хD8 до 0хDF). Если нет, то обработка переходит к блоку 636 для декодирования первого байта как однобайтовой регулярной команды. Затем обработка завершается.
Если, однако, оценка в блоке 606 другого кода операции перехода дает результат «истинно», то обработка переходит к блоку 606, где второй байт декодируется как код операции других регулярных команд (например, команд с плавающей запятой). Затем обработка завершается.
Фиг.7 иллюстрирует способ 700 для определения длины команды, которая была извлечена из памяти. По меньшей мере, в одном варианте осуществления способ 700 выполняется декодером длины команды (таким, как, например, 306 на фиг.3).
Согласно фиг.7, обработка начинается на этапе запуска и переходит к блоку 702. В блоке 702 определяется, является ли текущий байт команды байтом префикса. При первом прогоне процедуры способа 700, текущий байт является первым байтом команды. Если текущий байт определен в блоке 702 как содержащий значение префикса, как определено в наборе команд, то префикс обрабатывается в блоке 712, и следующий байт извлекается для обработки.
Затем обработка возвращается к блоку 702, чтобы определить, содержит ли новый текущий байт, извлеченный в блоке 712, значение префикса. Таким образом, способ 700 обеспечивает декодирование длины команды, которая включает в себя множество байтов префикса. По меньшей мере, в одном варианте осуществления, как указано выше, команда может включать в себя до четырех байтов префикса.
Если в блоке 702 определено, что текущий байт команды не включает в себя значение префикса, то обработка переходит к блоку 704. В блоке 704 определяется, включает ли в себя текущий байт команды значение двухбайтового кода команды перехода, такое как 0х0F. Если нет, то обработка переходит к блоку 714, как описано более детально ниже.
Если в блоке 704 определено, что текущий байт команды включает в себя значение двухбайтового кода команды перехода, то команда может быть новой командой типа 0 или новой командой типа 1. Соответственно в блоке 705 получают следующий байт команды, а в блоке 706 определяют, содержит ли вновь полученный байт одно из значений трехбайтового кода операции перехода. Если это так, то определяется, что команда является новой командой типа 0 или типа 1.
Для определения длины новой команды типа 0 или типа 1 оценивается содержимое поля 230 modR/M. Соответственно содержимое байта modR/M для кода текущей команды извлекается в блоке 707. В блоке 708 определяется, указывает ли значение modR/M, что из кода текущей команды должно быть извлечено значение SIB. Если это так, то содержимое поля 240 SIB (фиг.2) извлекается, и обработка переходит к блоку 710. Если нет, то обработка переходит к блоку 710. Важно отметить, что ввиду описываемого упрощенного способа декодирования длины (см. блок 710), не требуется оценивать содержимое поля 225 (фиг.2) специфического для команды кода операции при декодировании длины новой команды типа 0 или типа 1. Соответственно, такой байт не извлекается и, следовательно, «пропускается» в блоке 707.
В блоке 710 определяется длина новых команд типа 0 и типа 1, чтобы установить, где команда начинается и заканчивается. Для того чтобы определить длину команды, блок 710 оценивает содержимое, по меньшей мере, трех байтов команды. Разумеется, специалистам в данной области техники должно быть понятно, может оцениваться большее или меньшее число байтов для определения длины команды иных, чем новые команды типа 0 и типа 1.
В блоке 710 оцениваются первый, второй и третий байты команды для определения длины новой команды типа 0. Кроме того, по меньшей мере, некоторые биты пятого байта команды оцениваются, если имеется значение SIB. То есть для новой команды типа 0 блок 710 оценивает содержимое поля 118с (фиг.2) трехбайтового кода операции перехода, поле modR/M (230, фиг.2) и три бита поля SIB (240, фиг.2), если имеется значение для поля SIB. Длина определяется следующим образом:
Если ((байт1==0х0F)И(байт2==0х38или0х39или0х3Аили0х3В)И
(байт4=modR/M без смещения и не требуется SIB)), то Длина_команды =4
И если ((байт1==0х0F)И(байт2==0х38или0х39или0х3Аили0х3В)И
(байт4=modR/M со смещением или требуется SIB)), то Длина_команды вычисляется на основе поля modR/M (230, фиг.2) и значения трех битов в поле SIB (240, фиг.2).
Соответственно, блоку 710 декодирования длины для новой команды типа 0 не требуется оценивать третий байт кода операции для определения длины команды. Также для каждой карты кода операции соответствующая логика определения длины получает один и тот же набор фиксированных входов для оценки длины каждой команды в соответствующей карте. Например, для карты кода операции 0х0F38 логика определения длины оценивает байт modR/M в блоке 708. Если значение байта modR/M указывает, что байт SIB отсутствует в коде текущей команды, то длина команды декодируется в блоке 710 без оценки байта SIB.
Если, с другой стороны, значение SIB существует, то один или более битов в поле SIB 240 (фиг.2) оцениваются для определения в блоке 710 длины кода команды. Значение в специфическом для команды поле 225 кода операции (фиг.2) не оценивается для определения длины команды в карте кода операции 0x0F38. Также не оценивается никакой входной член иной, чем значения modR/M и SIB (если указаны), оцениваемые для любой команды в карте кода операции. Соответственно, оценивается фиксированный набор входных членов для определения длины команды в данной карте кода операции, при этом каждый входной член релевантен для определения длины каждой команды в карте кода операции.
Конкретный входной член «релевантен» для определения длины кода команды, если, при заданном значении одного или более других входных членов, конкретный входной член используется для определения длины кода команды. Например, значение SIB релевантно для каждой команды в карте 0х0F38 кода операции, поскольку, для каждой команды в карте, значение SIB должно оцениваться для определения длины в зависимости от значения modR/M. В противоположность этому, значение специфического для команды кода операции 225 (фиг.2) не релевантно для определения длины любой команды в карте кода операции 0хF38, так как оно не оценивается для определения длины, независимо от значения других входных членов. Аналогичным образом, другие входные члены, такие как значение поля смещения 250 (фиг.2), не релевантны для определения длины команды, если они не должны использоваться для оценки длины команды при любой комбинации значений других релевантных входных членов.
Таким образом, логика декодирования для нового типа 0 поддерживается относительно простой. По меньшей мере, в одном варианте осуществления никакие дополнительные биты не оцениваются для определения того, какая логика декодирования длины должна использоваться для новой команды типа 0, по сравнению с числом байтов, оцениваемых для определения того, какая логика декодирования длины должна использоваться для расширенной команды типа 0. Эта простота сохраняется для всех команд в картах новых кодов операций, поскольку тот же самый способ применим для определения длины каждой команды в заданной карте кода операции.
Как использовано в настоящем описании, термин «карта кода операции» относится к группе команд, определенных некоторой комбинацией значений в байтах команды. Например, все команды, определенные посредством 0F:38:1b"xxxxxxxx" и 66:0F:38:1b"xxxxxxxx", рассматриваются как часть карты кода операции для 3-байтового значения кода операции перехода 0F:38. Аналогичным образом, карта кода операции 0F:39 относится к группе команд, определенных посредством 0F:39:1b"xxxxxxxx" и 66:0F:39:1b"xxxxxxxx"; карта кода операции 0F:3А относится к группе команд, определенных посредством 0F:3А:1b"xxxxxxxx" и 66:0F:3A:1b"xxxxxxxx"; карта кода операции 0F:3В относится к группе команд, определенных посредством 0F:3В:1b"xxxxxxxx" и 66:0F:3В:1b"xxxxxxxx", где 1b"xxxxxxxx" является определенным кодом операции специфицируемой карты кода операции.
В блоке 710 второй, третий и пятый байты команды оцениваются для определения длины новой команды типа 1. Кроме того, по меньшей мере, некоторые биты из шестого байта команды оцениваются, если присутствует значение SIB. Аналогично обработке для новой команды типа 0, блок 622 оценивает два байта, которые с содержат значение поля трехбайтового кода операции перехода (118с, фиг.2), поле modR/M (230, фиг.2) и 3 бита поля SIB (240, фиг.2), если значение для поля SIB присутствует. Длина определяется следующим образом:
Если ((байт2==0х0F)И(байт3==0х38или0х39или0х3Аили0х3В)И
(байт5=modR/M без смещения и не требуется SIB)), то Длина_команды =4
И если ((байт1==0х0F)И(байт2==0х38или0х39или0х3Аили0х3В)И
(байт4=modR/M со смещением или требуется SIB)), то Длина_команды вычисляется на основе поля modR/M (230, фиг.2) и значения трех битов в поле SIB (240, фиг.2).
Соответственно блок 710 декодирования длины для новой команды типа 1 не должен оценивать третий байт кода операции для определения длины команды. Таким образом, логика декодирования для новой команды типа 1 поддерживается относительно простой. По меньшей мере, в одном варианте осуществления никакие дополнительные байты не оцениваются для определения того, какую логику декодирования длины использовать для новой команды типа 1, по сравнению с числом байтов, оцениваемых для определения того, какую логику декодирования использовать для расширенной команды типа 1.
Как упомянуто выше, простота обработки 710 декодирования длины для новых команд типа 0 и типа 1 сохраняется путем определения карт кодов операций и соответствующей им логики определения длины так, чтобы использовалось определение длины с одним фиксированным входом для определения длины каждой команды в соответствующей карте кода операции. Длина каждой команды в конкретной карте 3-байтового кода операции, таким образом, определяется тем же методом, что и для всех других команд, имеющих 3-байтовое значение кода операции. То есть каждое из 3-байтовых значений кода операции - 0х0F38, 0х0F39, 0х0F3А и 0х0F3В - связано с картой кода операции, в которой длина каждой команды карты кода операции определяется тем же самым способом с фиксированным входом.
Например, по меньшей мере, в одном варианте осуществления все команды, связанные с значением 0x0F38 трехбайтового кода операции перехода (см. Таблицу, приведенную выше), определяются путем оценки тех же самых четырех байтов команды. Эти четыре байта включают в себя два байта, которые содержат значение (0x0F38) трехбайтового кода операции перехода, однобайтовое поле кода операции, которое содержит значение кода операции (как показано выше в Таблице) и однобайтовое поле modR/M. В зависимости от значения в поле modR/M дополнительные три бита поля SIB могут также оцениваться для определения длины команды в карте кода операции 0x0F38. Никакие непосредственно получаемые данные не включаются в любую команду в карте кода операции 0x0F38.
Аналогичным образом, по меньшей мере, в одном варианте осуществления все команды, связанные с значением 0x0F3А трехбайтового кода операции перехода (см. Таблицу, приведенную выше), определяются тем же самым методом. Метод оценивает два байта, которые содержат значение (0x0F38) трехбайтового кода операции перехода, однобайтовое поле кода операции, которое содержит значение кода операции (как показано выше в Таблице), однобайтовое поле modR/M и однобайтовое поле, которое содержит непосредственно получаемые данные. В зависимости от значения в поле modR/M дополнительные три бита поля SIB могут также оцениваться для определения длины команды в карте кода операции 0x0F38.
Фиг.7 показывает, что если в блоке 706 определено, что байт команды, следующий за байтом, содержащим значение 0х0F двухбайтового кода операции перехода, не содержит одно из значений трехбайтового кода операции перехода, то обработка переходит к блоку 722.
Блоки 714, 716, 718, 719, 720 и блоки 722, 724, 726, 727 и 728 соответственно выполняют сходную обработку. Обработка первого набора блоков выполняется, если блок 704 определяет, что команда не включает в себя значение 0х0F двухбайтового кода операции перехода. Обработка в блоках 722, 724, 726, 727 и 728, с другой стороны, выполняется, если в блоке 706 определено, что хотя предшествующий байт содержит значение 0х0F двухбайтового кода операции перехода, однако текущий байт не включает в себя значение трехбайтового кода операции перехода.
Для каждого случая в блоках 714 и 722 соответственно определяется, включает ли в себя текущая команда значение modR/M. Если это так, то обработка переходит к блокам 718 и 726 соответственно, где получают значение modR/M. Если значение modR/M указывает, что должно быть извлечено значение SIB, то значение SIB извлекается соответственно в блоках 719 и 727. Длина команды определяется в блоках 720 и 728 соответственно с использованием значения modR/M и, если указано, одного или более битов из поля SIB. Затем обработка завершается.
Если текущая команда включает в себя значение modR/M, то обработка переходит к блокам 716 и 724 соответственно, где декодируется длина команды без учета значения modR/M. Затем обработка завершается.
Как показывает приведенное выше описание, варианты осуществления устройства и способа, раскрытых в настоящем описании, обеспечивают эффективный механизм для декодирования нового набора команд с использованием трехбайтовых кодов операции перехода с существующим значением префикса. Новый набор команд расширяет существующий набор команд, не приводя к чрезмерному усложнению декодера команд.
Выше описано определение карты кода операции для процессора, имеющего набор команд переменной длины, для которого каждая команда в карте кода операции может быть декодирована по длине с использованием логики определения длины с фиксированным входом. В вышеприведенном описании использованы термины единого метода определения длины команд в карте 3-байтового кода операции перехода. Однако в альтернативном варианте осуществления может быть определена карта однобайтового кода операции перехода, так что единая логика определения длины с фиксированным входом может быть применена для декодирования длины для каждой команды в карте кода операции. Для таких команд специфический для команды код операции отслеживает байт перехода, содержащий конкретное значение, такое, например, как 0xD6 или 0xF1. Длина каждой команды в такой карте однобайтового кода операции перехода может быть декодирована с использованием той же самой логики декодирования длины с фиксированным входом.
Аналогичным образом, в альтернативном варианте осуществления вся или часть карты 2-байтотового кода операции перехода может также определяться как описано здесь. В таком варианте осуществления та же самая логика определения длины с фиксированным входом может применяться для декодирования длины каждой команды в карте нового двухбайтового кода операции перехода. Например, блок команд в карте двухбайтового кода операции перехода может быть определен так, что логика определения длины с фиксированным входом может быть использована для определения длины каждой команды в такой карте кода операции. По меньшей мере, в одном варианте осуществления карты новых кодов операции перехода определены так, что специфический для команды код операции следует коду перехода. Код перехода может, например, быть одним из следующих: 0x0F3C - 0x0F3Y.
Хотя выше представлены конкретные варианты осуществления настоящего изобретения, для специалистов в данной области техники должно быть ясно, что изменения и модификации могут быть осуществлены без отклонения от настоящего изобретения в его широких аспектах. Прилагаемая формула изобретения должна охватывать своим объемом все такие изменения и модификации, которые находятся в пределах истинного объема настоящего изобретения.
Изобретение относится к микропроцессорным системам, в частности к расширению набора команд с использованием 3-байтовых значений кода операции перехода в поле кода операции. Техническим результатом является расширение набора команд без увеличения сложности аппаратных средств. Устройство для декодирования длины команды расширенного набора команд, использующего 3-байтовые коды операции перехода, содержит детектор операции перехода и декодер длины команды. Система расширения набора команд с использованием 3-байтовых кодов операции перехода содержит память для хранения кода команды, логику выборки кода команды из памяти и блок декодирования для генерации одного или более сигналов управления. Один из вариантов устройства для выполнения набора команд, использующего 3-байтовые коды операции перехода, содержит декодер для генерации сигнала управления и исполнительный блок, а другой вариант содержит средство для выборки из памяти кода команды в формате команды переменной длины и средство для инициирования операции, соответствующей значению специфического для команды кода операции. Способы описывают работу указанных устройств и системы. 7 н. и 69 з.п. ф-лы, 7 ил., 1 табл.
ЦИФРОВОЙ КОМПЬЮТЕР С ВОЗМОЖНОСТЬЮ ПАРАЛЛЕЛЬНОГО ВЫПОЛНЕНИЯ ДВУХ И БОЛЕЕ КОМАНД | 1991 |
|
RU2109333C1 |
US 4873629 А, 10.10.1989 | |||
US 4200927 А, 19.04.1980 | |||
US 4591972 А, 27.05.1986. |
Авторы
Даты
2006-11-27—Публикация
2004-06-29—Подача