Изобретение касается области компьютерных систем. Более конкретно, изобретение касается выполнения процессором команд с плавающей запятой и упакованных данных.
В типичной компьютерной системе один или большее количество процессоров работают с значениями данных, представленных большим количеством битов (например, 16, 32, 64 и т.д.), чтобы получить результат в ответ на программную команду. Например, выполнение команды сложения заключается в сложении значения первых данных и значения вторых данных и сохранении результата в качестве третьего значения данных. Однако мультимедийные прикладные программы (например, прикладные программы, предназначенные для работы в оснащенном компьютером сотрудничестве (CSC - интеграция организации телеконференций с манипулированием данных смешанного типа), 2D/3D графики, обработки изображения, сжатия/декомпрессии видео информации, алгоритмов распознавания и манипулирования звуком) требуют манипулирования большими количествами данных, которые часто представлены меньшем числом битов. Например, мультимедийные данные обычно представляются как 64-разрядные числа, но только малая часть битов может нести значимую информацию.
Чтобы улучшить эффективность мультимедийных прикладных программ (так же как и других прикладных программ, которые имеют такие же характеристики), известные процессоры обеспечивают упакованные форматы данных. Упакованный формат данных является форматом, в котором биты, используемые для представления одного значения, разбиваются на ряд элементов данных фиксированного размера, каждый из которых представляет отдельное значение. Например, данные в 64-разрядном регистре могут быть разбиты на два 32-разрядных элемента, каждый из которых представляет отдельное 32-разрядное значение.
Основная 32-разрядная машина архитектуры фирмы Hewlett-Packard принимала этот подход для выполнения мультимедийных типов данных. То есть процессор использовал свои 32-разрядные целочисленные регистры общего назначения параллельно, чтобы реализовать 64-разрядные типы данных. Основной недостаток этого простого подхода заключается в том, что он строго ограничивает доступное регистровое пространство. К тому же, преимущество производительности при работе с мультимедийными данными таким способом с точки зрения усилий, требуемых, чтобы расширить существующую архитектуру, представляется минимальным.
Отчасти аналогичный подход, принятый в процессоре 88110TM фирмы Motorola®, заключается в объединении пар целочисленных регистров. Идея относительно объединения двух 32-разрядных регистров включает в себя объединение (конкатенацию) случайных комбинаций определенных регистров для одиночной операции или команды. Снова, однако, главный недостаток реализации 64-разрядных мультимедийных типов данных, используя объединенные в пары регистры, заключается в том, что имеется только ограниченное число пар регистров, которые являются доступными. Ввиду недостатка добавления дополнительного регистрового пространства к архитектуре, необходим другой способ реализации мультимедийных типов данных.
Линией процессоров, которая имеет большую базу программного обеспечения и аппаратных средств, является архитектура семейства процессоров Intel, включая процессор Pentium®, производимый корпорацией Intel Santa Clara, Калифорния. Фиг. 1 показывает блок-схему, иллюстрирующую образец компьютерной системы 100, в которой используется процессор Pentium. Для более детального описания процессора Pentium, чем приведенное здесь, см. Pentium Processor's Users Manual - Volume 3: Architecture and Programming Manual, 1994, Корпорации Intel Santa Clara, CA. Образец компьютерной системы 100 включает в себя процессор 105, устройство памяти 110 и шину 115. Процессор 105 подсоединен к устройству памяти 110 шиной 115. Кроме того, ряд устройств ввода-вывода пользователя, такие как клавиатура 120 и дисплей 125, также подсоединены к шине 115. Сеть 130 может также быть соединена с шиной 115. Процессор 105 представляет процессор Pentium. Устройство памяти 110 представляет один или большее количество механизмов для сохранения данных. Например, устройство памяти 110 может включать в себя запоминающее устройство только для чтения (ROM), память с произвольным доступом (RAM), магнитные дисковые носители данных, оптические носители данных, устройства памяти с параллельным стиранием и/или другие считываемые компьютером среды. Шина 115 представляет собой одну или большее количество шин (например, PCI, ISA, X-шина, EISA, VESA, и т.д.) и мосты (также называемые контроллерами шины).
Фиг. 1 также показывает, что устройство памяти 110 хранит операционную систему 132 для выполнения на процессоре 105. Конечно, устройство памяти 110 предпочтительно содержит дополнительное программное обеспечение (не показано). Фиг. 1 дополнительно показывает, что процессор 105 включает в себя устройство (модуль) 135 с плавающей запятой и регистр 155 состояния с плавающей запятой (запись "FP" используется для обозначения термина "с плавающей запятой"). Конечно, процессор 105 содержит дополнительные схемы, которые не являются необходимыми для понимания сущности изобретения.
Модуль 135 с плавающей запятой используется для хранения данных с плавающей запятой и включает в себя набор регистров с плавающей запятой (также называемый файлом регистров с плавающей запятой) 145, набор тэгов 150 и регистр состояния 155 с плавающей запятой. Набор регистров 145 с плавающей запятой включает в себя восемь регистров, обозначенных R0-R7, запись Rn используется для обозначения физического расположения регистров с плавающей запятой. Каждый из этих восьми регистров является 80-битным и содержит поле знака (бит 79), поле порядка (биты [78:64]) и поле мантиссы (биты [63:0]). Модуль 135 с плавающей запятой использует набор регистров 145 с плавающей запятой в качестве стека. Другими словами, модуль 135 с плавающей запятой включает в себя файл регистров, называемый стеком. Когда набор регистров используется как стек, выполняются операции со ссылкой на верхушку стека, а не на физические расположения регистров в наборе регистров 145 с плавающей запятой (запись STn используется, чтобы сослаться на относительное положение логических регистров n с плавающей запятой в верхушке стека). Регистр 155 состояния с плавающей запятой включает в себя поле 160 верхушки стека, которая идентифицирует, какие регистры в наборе регистров 145 с плавающей запятой находятся в настоящее время в верхушке стека с плавающей запятой. На фиг. 1 указатель верхушки стека идентифицирует регистр 165 с физическим расположением R4 в качестве верхушки стека.
Набор тэгов 150 включает 8 тэгов и хранится в одном регистре. Каждый тэг соответствует различному регистру с плавающей запятой и содержит два бита. Как показано на фиг. 1, тэг 170 соответствует регистру 165. Тэг идентифицирует информацию относительно текущего содержимого регистра с плавающей запятой, которому соответствует тэг - 00 = допустимое; 01 = ноль; 10 = специальное; и 11 = пусто. Эти тэги используются модулем 135 с плавающей запятой, чтобы различать положения пустого и непустого регистра. Таким образом, о тэгах можно сказать, что они идентифицируют два состояния: пустое, которое обозначено 11, и непустое, которое обозначено 00, 01 или 10.
Эти тэги могут также использоваться для обслуживания событий. "Событие" - любое действие или наступление события, на которое компьютерная система могла бы отвечать, включая аппаратные прерывания, программные прерывания, исключительные ситуации, неисправности, системные прерывания, аварийные прекращения работы, машинные проверки, обслуживания и события отладки. После наступления события механизм обработки события процессора заставляет процессор прерывать выполнение текущего процесса, сохранять среду выполнения прерванного процесса (то есть, информацию, необходимую для продолжения выполнения прерванного процесса) и вызывать соответствующий обработчик события для обслуживания события. После обслуживания события обработчик события заставляет процессор возобновить прерванный процесс, используя предварительно сохраненную среду выполнения процесса. Программисты обработчиков события могут использовать эти тэги, чтобы проверить содержимое различных регистров с плавающей запятой для лучшего обслуживания события.
В то время как каждый из тэгов был описан как содержащий два бита, альтернативные варианты осуществления могут сохранять только один бит для каждого тэга. Каждый из этих однобитовых тэгов идентифицируется как пустой или непустой. В таких вариантах осуществления эти однобитовые тэги могут быть реализованы так, чтобы проявляться для пользователя как содержащие два бита, посредством определения соответствующего значения двухбитового тэга, когда необходимы значения тэгов.
Регистр состояния 140 включает в себя поле 175 ЕМ и поле 180 TS сохранения ЕМ индикации и TS индикации соответственно. Если ЕМ индикация равна 1 и/или TS индикация равна 1, аппаратные средства процессора вызывают системное прерывание операционной системе после выполнения команды с плавающей запятой посредством формирования исключительной ситуации "устройство недоступно". Согласно соглашению по программному обеспечению ЕМ и TS индикации соответственно используются для эмуляции команд с плавающей запятой и выполнения многозадачного режима. Однако использование этих индикаций является просто соглашением по программному обеспечению. Таким образом, любая или обе индикации могут использоваться для любой цели. Например, ЕМ индикация может использоваться для выполнения многозадачного режима.
Согласно соглашению по программному обеспечению, описанному выше, поле 175 ЕМ используется для хранения индикации эмуляции с плавающей запятой ("ЕМ индикация"), которая идентифицирует, должно ли устройство с плавающей запятой быть эмулировано с использованием программного обеспечения. Последовательность команд или одиночная команда (например, CPUID) обычно выполняется, когда система загружается, чтобы определить, присутствует ли модуль с плавающей запятой, и изменить ЕМ индикацию в случае необходимости. Таким образом, ЕМ индикация обычно изменяется, чтобы указать, что модуль с плавающей запятой должен быть эмулирован, если процессор не содержит модуль с плавающей запятой. В то время как в одной реализации ЕМ индикация равняется 1, когда модуль с плавающей запятой должен быть эмулирован, альтернативные реализации могут использовать другие значения.
С помощью операционной системы много процессоров способны к выполнению многозадачного режима с несколькими процессами (называемых здесь "задачи"), используя способы, такие как совместный многозадачный режим, многозадачный режим с квантованием времени и т.д. Так как процессор может выполнять только одну задачу одновременно, процессор должен делить время обработки между различными задачами, переключаясь между различными задачами. Когда процессор переключается от одной задачи к другой, то говорят, что срабатывает переключатель задачи (также названный как "контекстный переключатель" или "переключатель процесса"). Чтобы выполнить переключение задачи, процессор должен остановить выполнение одной задачи и или возобновить или начать выполнение другой задачи. Имеется ряд регистров (включая регистры с плавающей запятой), чье содержимое должно быть сохранено для возобновления задачи после переключения задачи. Содержимое этих регистров в любой заданный момент времени в течение выполнения задачи называется "состоянием регистра" этой задачи. Во время многозадачного режима при выполнении нескольких процессов "регистр состояния" задачи сохраняется во время выполнения других процессов, сохраняя его в структуре данных (называемой "контекстная структура" задачи), которая содержится в памяти, внешней по отношению к процессору. Когда выполнение задачи должно быть возобновлено, регистр состояния задачи восстанавливается (например, загружается обратно в процессор), используя контекстную структуру задачи.
Сохранение и восстановление регистра состояния задачи может быть выполнено использованием ряда различных способов. Например, одна операционная система сохраняет весь регистр состояния предыдущей задачи и восстанавливает весь регистр состояния следующей задачи при каждом переключении задач. Однако, так как сохранение и восстановление всего регистра состояния требует времени, желательно избежать сохранения и/или восстановления любых ненужных частей при переключении задач. Если задача не использует модуль с плавающей запятой, нет необходимости сохранять и восстанавливать содержимое регистров с плавающей запятой как части регистра состояния этой задачи. С этой целью TS индикация исторически использовалась операционными системами согласно вышеупомянутому соглашению по программному обеспечению для того, чтобы избегать сохранения и восстановления содержимого регистров с плавающей запятой во время переключения задач (обычно называемое как "частичное переключение контекста" или "переключение контекста по требованию").
Использование TS индикации для реализации частичного переключения контекста хорошо известно. Однако для целей изобретения имеет значение то, что попытка выполнения команды с плавающей запятой, в то время как TS индикация указывает, что частичный контекстный переключатель срабатывал (то есть что модуль с плавающей запятой "недоступен" или "заблокирован"), приводит к исключительной ситуации "устройство недоступно". В ответ на эту исключительную ситуацию обработчик события, выполняющийся на процессоре, определяет, является ли текущая задача "владельцем" модуля с плавающей запятой (если данные, сохраненные в устройстве с плавающей запятой, принадлежат текущей задаче или предварительно выполненной задаче). Если текущая задача не является владельцем, то обработчик события заставляет процессор сохранять содержимое регистров с плавающей запятой в контекстной структуре предыдущей задачи, восстанавливает состояние текущей задачи с плавающей запятой (если доступно) и идентифицирует текущую задачу в качестве владельца. Однако, если текущая задача является владельцем модуля с плавающей запятой, то текущая задача была последней задачей, использующей модуль с плавающей запятой (часть регистра состояния с плавающей запятой текущей задачи уже сохранена в модуле с плавающей запятой), и нет необходимости предпринимать какое-либо действие относительно модуля с плавающей запятой, и TS не был установлен, и никакая исключительная ситуация не будет иметь места. Выполнение обработчика также заставляет процессор изменять TS индикацию, чтобы указать, что модуль с плавающей запятой захвачен текущей задачей (также называемым как "доступный" или "задействованный").
После завершения обработчика события выполнение текущей задачи продолжается, перезапуская команду с плавающей запятой, которая вызвала исключительную ситуацию о недоступности устройства. Так как TS индикация была изменена, чтобы указать, что модуль с плавающей запятой доступен, выполнение следующих команд с плавающей запятой не приведет к дополнительным исключительным ситуациям о недоступности устройства. Однако в течение следующего частичного контекстного переключения TS индикация изменяется, чтобы указать, что был задействован частичный контекстный переключатель. Таким образом, в случае, если предпринято выполнение другой команды с плавающей запятой, будет формироваться другая исключительная ситуация о недоступности устройства, и обработчик события будет снова выполнен. Таким образом, TS индикация разрешает операционной системе задерживать и, возможно, избегать сохранения и загрузки файла регистров с плавающей запятой. Посредством этого накладные расходы на переключатель задач уменьшаются, уменьшая число регистров, которые должны быть сохранены и загружены.
В то время как описана одна операционная система, в которой состояние с плавающей запятой не сохранено или восстанавливается во время работы переключателей задачи, альтернативные реализации могут использовать любое количество других способов. Например, как упомянуто выше, операционная система может быть реализована так, чтобы всегда сохранять и восстанавливать весь регистр состояния при каждом переключении задачи.
В дополнение к различным временам, в течение которых состояние с плавающей запятой процесса может быть сохранено (например, в течение контекстных переключателей, в ответ на событие о недоступности устройства, и т. д. ), имеются также различные способы для сохранения состояния с плавающей запятой. Например, операционная система может быть реализована так, чтобы сохранить все состояние с плавающей запятой (называемое здесь как "простой переключатель задач"). Альтернативно, операционная система может быть реализована так, чтобы сохранить содержимое только тех регистров с плавающей запятой, чьи соответствующие тэги указывают непустое состояние (называемое здесь как "минимальный переключатель задач"). При этом операционная система сохраняет содержимое только тех регистров с плавающей запятой, которые содержат полезные данные. Таким образом, накладные расходы на сохранение состояния с плавающей запятой могут быть уменьшены, уменьшая число регистров, которые должны быть сохранены.
Фиг. 2 является блок-схемой, иллюстрирующей выполнение команды процессором Pentium. Работа по блок-схеме начинается на этапе 200, после которого переходит на этап 205.
Как показано на этапе 205, к набору битов обращаются как к команде, и работа переходит на этап 210. Этот набор битов включает в себя код операции, который идентифицирует операцию(и), которая(ые) должна(ы) быть выполнена(ы) командой.
На этапе 210 определяется, является ли код операции допустимым. Если код операции не является допустимым, переходят на этап 215. Иначе переходят на этап 220.
Как показано на этапе 215, формируется исключительная ситуация о недопустимом коде операции и выполняется соответствующий обработчик события. Этот обработчик события может быть реализован так, чтобы заставить процессор отображать сообщение, выполнить аварийное прекращение работы текущей задачи и продолжить выполнять другие задачи. Конечно, альтернативные варианты осуществления могут реализовать этот обработчик события любым количеством способов.
На этапе 220 определяется, является ли команда командой с плавающей запятой. Если команда не является командой с плавающей запятой, переходят на этап 225. Иначе осуществляется переход на этап 230.
Как показано на этапе 225, процессор выполняет команду. Так как этот этап не является необходимым для описания изобретения, он далее не описан.
Как показано, на этапе 230 определяется, является ли ЕМ индикация равной 1 (согласно упомянутому соглашению по программному обеспечению, если модуль с плавающей запятой должен быть эмулирован), и является ли TS индикация равной 1 (согласно упомянутому соглашению по программному обеспечению, если был задействован частичный контекстный переключатель). Если ЕМ индикация и/или TS индикация равна 1, переходят на этап 235. Иначе переходят на этап 240.
На этапе 235 формируют исключительную ситуацию "устройство недоступно" и выполняют соответствующий обработчик события. В ответ на это событие соответствующий обработчик события может быть реализован для опроса ЕМ и TS индикации. Если ЕМ индикация равна 1, то может быть выполнен обработчик события, чтобы заставить процессор выполнять команду, эмулируя модуль с плавающей запятой, и возобновить выполнение следующей команды (команды, которая логически следует за командой, полученной на этапе 205). Если TS индикация равна 1, то обработчик события может быть выполнен, чтобы функционировать так, как предварительно описано в отношении частичных контекстных переключателей (чтобы сохранить содержимое модуля с плавающей запятой и восстановить корректное состояние с плавающей запятой, если требуется), и заставить процессор возобновить выполнение посредством перезапуска выполнения команды, принятой на этапе 205. Конечно, альтернативные варианты осуществления могут реализовать этот обработчик события любым количеством способов.
Если формируются некоторые численные ошибки во время выполнения команды с плавающей запятой, такие ошибки задерживаются до выполнения следующей команды с плавающей запятой, чье выполнение может быть прервано для обслуживания ожидающих численных ошибок с плавающей запятой. Как показано, на этапе 240 определяется, имеются ли какие-либо такие отложенные ошибки. Если имеются любые такие отложенные ошибки, осуществляется переход на этап 245. Иначе - на этап 250.
На этапе 245 формируется задержка события ошибки с плавающей запятой. В ответ на это событие процессор определяет, маскирована ли ошибка с плавающей запятой. Если да, то процессор пытается обрабатывать событие внутри, используя микрокод, и команда с плавающей запятой является "микроперезапущенной". Термин "микроповторный запуск" ("микрорестарт") относится к способу обслуживания события без выполнения каких-либо немикрокодовых обработчиков (также называемых обработчиками события операционной системы). Такое событие называется внутренним событием (также называемое как программно невидимое событие), потому что событие обрабатывается внутри процессора и, таким образом, не требует выполнения каких-либо внешних обработчиков операционной системы. Напротив, если ошибка с плавающей запятой не маскирована, событие является внешним событием (также названным как "программно видимое событие"), и выполняется соответствующий обработчик события. Этот обработчик события может быть реализован для обслуживания ошибки и заставить процессор возобновить выполнение посредством перезапуска выполнения команды, полученной на этапе 205. Этот способ перезапуска команды называется "макроповторный запуск" ("макрорестарт" или "рестарт на уровне команды"). Конечно, альтернативные варианты осуществления могут реализовать этот немикрокодовый обработчик события любым способом.
Как показано на этапе 250, выполняется команда с плавающей запятой. Во время такого выполнения тэги изменяются по мере необходимости, о любых численных ошибках, которые могут обслуживаться, сообщается, а любые другие численные ошибки задерживаются.
Одно из ограничений семейства процессоров архитектуры Intel (включая процессор Pentium), также как некоторых других процессоров общего назначения, заключается в том, что они не включают в себя набор команд для работы с упакованными данными. Таким образом, желательно включить набор команд для работы с упакованными данными в такие процессоры способом, который является совместимым с существующими программным обеспечением и аппаратными средствами. Кроме того, желательно получить новые процессоры, которые поддерживают набор команд работы с упакованными данными, и которые являются совместимыми с существующим программным обеспечением, включая операционные системы.
Изобретение предлагает способ и устройство выполнения команд с плавающей запятой и упакованными данными, используя один физический файл регистров, который является совмещенным (наложенным). Согласно одному аспекту изобретения предложен процессор, который включает в себя устройство декодирования, устройство отображения в память и устройство памяти. Устройство декодирования сконфигурировано так, чтобы декодировать команды и их операнды из по меньшей мере одного набора команд, включающего по меньшей мере первый и второй набор команд. Устройство памяти включает в себя физический файл регистров. Устройство отображения сконфигурировано так, чтобы отобразить операнды, используемые первым набором команд в физический файл регистров способом, аналогичным обращению к стеку. Кроме того, устройство отображения сконфигурировано так, чтобы отобразить операнды, используемые вторым набором команд в тот же самый физический файл регистров способом, отличным от обращения к стеку.
Согласно другому аспекту изобретения предложен процессор, который включает обычно устройство декодирования, устройство отображения в память и устройство изъятия. Устройство отображения отображает операнды с плавающей запятой и упакованных данных в тот же самый набор регистров, содержащихся в модуле изъятия. В то время как устройство отображения отображает операнды с плавающей запятой способом, аналогичным обращению к стеку, устройство отображения отображает операнды упакованных данных способом, отличным от обращения к стеку. К тому же, устройство отображения включает в себя набор тэгов, каждый из которых соответствует различной записи в таблице отображения и идентифицирует, находится ли соответствующая запись в пустом состоянии или непустом состоянии.
Изобретение может лучше всего быть понято из последующего описания и сопроводительных чертежей, которые иллюстрируют изобретение. На чертежах:
фиг. 1 показывает блок-схему, иллюстрирующую в качестве примера компьютерную систему, в которой используется процессор Pentium;
фиг. 2 изображает последовательность операций, иллюстрирующую выполнение команды процессором Pentium;
фиг. 3A является функциональной диаграммой, иллюстрирующей совмещение упакованного состояния данных и состояния с плавающей запятой, согласно одному варианту осуществления изобретения;
фиг. 3B и 3C иллюстрируют отображение физических регистров с плавающей запятой и упакованных данных по отношению к логическим регистрам с плавающей запятой;
фиг. 3D иллюстрирует последовательность выполнения, включающую команды упакованных данных и с плавающей запятой;
фиг. 4A является функциональной диаграммой, иллюстрирующей часть способа выполнения команд с плавающей запятой и упакованных данных способом, который является совместимым с существующим программным обеспечением, невидимым для различных способов операционной системы, и способствует эффективным приемам программирования согласно одному варианту осуществления изобретения;
фиг. 4B является функциональной диаграммой, иллюстрирующей оставшуюся часть способа, частично изображенного на фиг. 4A;
фиг. 5 показывает блок-схему, иллюстрирующую в качестве примера компьютерную систему, согласно одному варианту осуществления изобретения;
фиг. 6A является блок-схемой, иллюстрирующей устройство для совмещения состояния регистра упакованных данных с состоянием с плавающей запятой, используя два физических файла регистров, согласно одному варианту осуществления изобретения;
фиг. 6B является блок-схемой, иллюстрирующей в увеличенном масштабе вид части файла с плавающей запятой с обращением, аналогичным обращению к стеку, из фиг. 6A, согласно вариантам осуществления изобретения;
фиг. 7A является функциональной диаграммой, иллюстрирующей часть способа, в соответствии с одним вариантом осуществления изобретения для выполнения команд упакованных данных на наборе регистров, которые являются совмещенными с набором с плавающей запятой регистров способом, который является совместимым с существующим программным обеспечением, который является невидимым для различных способов операционной системы, который способствует хорошей практике программирования, и который может быть осуществлен, используя организацию аппаратного обеспечения, изображенную на фиг. 6A;
фиг. 7B является функциональной диаграммой, иллюстрирующей другую часть способа, частично изображенного на фиг. 7A;
фиг. 7C является функциональной диаграммой, иллюстрирующей оставшуюся часть способа, частично изображенного на фиг. 7A и 7B;
фиг. 8 является функциональной диаграммой, иллюстрирующей способ для выполнения этапа 734 на фиг. 7C, согласно одному варианту осуществления изобретения;
фиг. 9 является функциональной диаграммой, иллюстрирующей способ выполнения этапа 728 на фиг. 7B, согласно одному варианту осуществления изобретения;
фиг. 10 является блок-схемой, иллюстрирующей поток данных через устройство для совмещения состояния упакованных данных с состоянием с плавающей запятой, используя один файл регистров, согласно другому варианту осуществления изобретения;
фиг. 11A иллюстрируют часть способа, в соответствии с другим вариантом осуществления изобретения, для выполнения команды с упакованными данными и с плавающей запятой на одном файле регистров совмещенным способом, который является совместимым с существующим программным обеспечением, который является невидимым для различных способов операционной системы, который способствует хорошей практике программирования и может быть осуществлен, используя организацию аппаратного обеспечения, изображенную на фиг. 10;
фиг. 11B является функциональной диаграммой, иллюстрирующей другую часть способа, частично изображенного на фиг. 11A;
фиг. 11C является функциональной диаграммой, иллюстрирующей оставшуюся часть способа, частично изображенного на фиг. 11A и 11B;
фиг. 12A иллюстрирует формат памяти с плавающей запятой согласно одному варианту осуществления изобретения, описанного со ссылкой на фиг. 10;
фиг. 12B иллюстрирует формат памяти для упакованных данных согласно варианту осуществления изобретения, описанного со ссылкой на фиг. 10;
фиг. 13 иллюстрирует способ согласно одному варианту осуществления изобретения для выполнения этапа 113 на фиг. 11В, когда реализованы форматы памяти, описанные со ссылкой на фиг. 12A, 12B и 12C;
фиг. 14 является функциональной диаграммой, иллюстрирующей способ для очистки тэгов, согласно одному варианту осуществления изобретения;
фиг. 15A изображает последовательность выполнения операций, включающую команды с упакованными данными и с плавающей запятой, чтобы проиллюстрировать интервал времени, в течение которого отдельные физические файлы регистров, которые являются совмещенными, могут быть модифицированы; и
фиг. 15B показывает другую последовательность выполнения операций, включающую команды с упакованными данными и с плавающей запятой, чтобы проиллюстрировать интервал времени, в течение которого отдельные физические файлы регистров, которые являются совмещенными, могут быть модифицированы.
В нижеследующем описании сформулированы многочисленные специфические подробности для полного понимания изобретения. Однако понятно, что изобретение может быть осуществлено без этих специфических подробностей. В других случаях известные схемы, структуры и способы не описаны подробно, чтобы акцентировать внимание на сущности изобретения.
Согласно одному варианту осуществления изобретения описывается способ и устройство выполнения различных наборов команд, которые заставляют процессор выполнять операции с данными различного типа способом, который является невидимым для различных способов операционной системы, который способствует хорошей практике программирования и невидим для существующего программного обеспечения. Чтобы это осуществить, выполняются различные наборы команд, которые заставляют процессор выполнять операции с различным типом данных, что по меньшей мере логически проявляется для программного обеспечения как один совмещенный файл регистров. Операции типа данных, выполняемые в результате выполнения различных наборов команд, могут иметь любой тип. Например, один набор команд может заставить процессор выполнять скалярные операции (с плавающей запятой и/или целочисленные), а другой набор команд может заставить процессор выполнять операции с упакованными данными (с плавающей запятой и/или целочисленные). В качестве другого примера, один набор команд может заставить процессор выполнять операции с плавающей запятой (скалярные и/или упакованные), а другой набор команд может заставить процессор выполнять целочисленные операции (скалярные и/или упакованные). В качестве другого примера, один совмещенный файл регистров может работать как файл регистров с обращением, аналогичным обращению к стеку, и как двумерный файл регистров. К тому же, описывается способ и устройство для выполнения этих различных наборов команд, используя отдельные физические файлы регистра, которые логически проявляются для программного обеспечения в качестве одиночного совмещенного файла регистров. Кроме того, описывается способ и устройство для выполнения этих различных наборов команд, используя один физический файл регистров.
Для ясности, изобретение будет описано применительно к выполнению команд с плавающей запятой и команд упакованных данных (с плавающей запятой и/или целочисленных). Однако должно быть понятно, что любое число операций с различным типом данных может выполняться, и изобретение никоим образом не ограничено операциями с плавающей запятой и упакованными данными.
Фиг. 3A является функциональной схемой, иллюстрирующей совмещение состояния упакованных данных и состояния с плавающей запятой, согласно одному варианту осуществления изобретения. Фиг. 3A изображает набор регистров 300 с плавающей запятой для сохранения данных с плавающей запятой (называемое здесь как состояние с плавающей запятой) и набор регистров 310 упакованных данных для сохранения упакованных данных (называемое здесь как состояние упакованных данных). Запись PDn используется, чтобы обратиться к физическим местоположениям регистров упакованных данных. Фиг. 3A также показывает, что состояние упакованных данных является совмещенным с состоянием с плавающей запятой. То есть команды с плавающей запятой и команды с упакованными данными по меньшей мере проявляются для программного обеспечения как выполняемые на одном и том же самом наборе логических регистров. Имеется ряд способов для выполнения этого совмещения, включая использование множества отдельных физических файлов регистра или одиночный физический файл регистров. Примеры таких способов будут позже описаны со ссылкой на фиг. 4-13.
Как описано выше, существующие операционные системы реализованы так, чтобы заставить процессор сохранять состояние с плавающей запятой в результате многозадачного режима. Так как состояние упакованных данных является совмещенным с состоянием с плавающей запятой, те же самые операционные системы заставят процессор сохранять любое состояние упакованных данных, которое является совмещенным с состоянием с плавающей запятой. В результате, изобретение не требует модификации программы (программ) переключения задач старой операционной системы (конечно, программы переключателя задачи могут быть реализованы как один или большее количество обработчиков события) или обработчиков события или написания новых обработчиков события операционной системы. Следовательно, не требуется разрабатывать новую или измененную операционную систему, чтобы сохранить состояние упакованных данных при многозадачном режиме. Таким образом, предоставляется возможность исключить расходы на разработку такой операционной системы. К тому же, в одном варианте осуществления любые события, сформированные выполнением команд упакованных данных, обслуживаются внутри процессора или отображаются на существующие события, чьи соответствующие обработчики события операционной системы могут обслуживать события. В результате, команды упакованных данных выполняются способом, который является невидимым для операционной системы.
Фиг. 3A также показывает набор тэгов 320 с плавающей запятой и набор тэгов 330 упакованных данных. Тэги 320 с плавающей запятой функционируют аналогично тэгам 150, описанным со ссылкой на фиг. 1. Таким образом, каждый тэг включает два бита, которые указывают, является ли содержимое соответствующего регистра с плавающей запятой пустым или непустым (например, допустимым, специальным или нулем). Тэги 330 упакованных данных соответствуют регистрам 310 упакованных данных и являются совмещенными с тэгами 320 с плавающей запятой. В то время как каждый из тэгов может быть реализован используя два бита, альтернативные варианты осуществления могут сохранять только один бит для каждого тэга. Каждый из этих одноразрядных тэгов идентифицирует пустое или непустое состояние. В таких вариантах осуществления эти одноразрядные тэги могут быть реализованы так, чтобы проявляться для программного обеспечения как содержащие два бита, определяя соответствующее двухбитовое значение тэга, когда необходимы значения тэга. Операционные системы, которые реализуют минимальное переключение задачи, сохраняют содержимое только тех регистров, чьи соответствующие тэги указывают непустое состояние. Так как тэги являются совмещенными, такая операционная система сохранит любые необходимые упакованные данные и состояние с плавающей запятой. Напротив, операционные системы, которые реализуют простое переключение задачи, сохранят все содержимое логического совмещенного файла регистров независимо от состояния тэгов.
В одном варианте осуществления регистры 300 с плавающей запятой используются аналогично регистрам 145 с плавающей запятой, описанным на фиг. 1. Таким образом, фиг. 3A дополнительно показывает регистр 340 состояния с плавающей запятой, содержащий поле 350 верхушки стека. Поле 350 верхушки стека используется для сохранения указателя верхушки стека (TOS) для идентификации одного из регистров 300 с плавающей запятой. Когда регистры 300 с плавающей запятой используются в качестве стека, операции выполняются со ссылкой на регистр верхушки стека в противоположность регистрам физических расположений. Напротив, регистры 310 упакованных данных используются как фиксированный файл регистров (также называемый как файл регистров прямого доступа). Таким образом, команды упакованных данных обозначают физические расположения регистров, которые нужно использовать. Регистр 310 упакованных данных отображается на физические расположения регистров 300 с плавающей запятой, и это отображение не изменяется, когда верхушка стека изменяется. В результате, это по меньшей мере проявляется для программного обеспечения, что существует один логический файл регистров, который можно использовать как файл регистров с обращением, аналогичным обращению к стеку, или как двумерный файл регистров.
Фиг. 3B и 3C иллюстрируют отображение совмещенных регистров 300 с плавающей запятой и тэгов 320 с плавающей запятой со ссылкой на регистры 310 упакованных данных, и тэги 330 упакованных данных, как показано на фиг. 3A. Как описано выше, в среде с плавающей запятой каждый регистр n определяется относительно регистра с плавающей запятой, идентифицированного TOS указателем. Два случая показаны на фиг. 3B и 3C. Каждая из фигур представляет связь между логическими или видимыми программисту регистрам (стеком) с плавающей запятой и логическими или видимыми программисту регистрам упакованных данных. Внутренний круг 360, показанный на чертежах 3B и 3C, представляет физические регистры данных с плавающей запятой/упакованных и соответствующие тэги, а внешний круг представляют логические регистры с плавающей запятой, которые указаны указателем 370 верхушки стека. Как показано на фиг. 3B, указатель 370 верхушки стека указывает на физический регистр 0 с плавающей запятой/упакованных данных. Таким образом, имеется соответствие логических регистров с плавающей запятой и физических регистров с плавающей запятой/упакованных данных. Как показано на фигуре, поскольку указатель 370 верхушки стека изменяется командой с плавающей запятой, которая вызывает или проталкивание в стек или выталкивание из стека, указатель 370 верхушки стека изменяется соответственно. Проталкивание в стек показано вращением указателя верхушки стека против часовой стрелки на чертеже, а операции с плавающей запятой выталкивания приводит к указателю верхушки стека, вращающегося по часовой стрелке.
В примере, показанном на фиг. 3C, логический регистр STO с плавающей запятой и физический регистр 0 не совпадают. Таким образом, в изображенном на фиг. 3C случае указатель 370 верхушки стека указывает на физический регистр 2 с плавающей запятой/упакованными данными, который соответствует логическому регистру STO с плавающей запятой. Все другие логические регистры с плавающей запятой обращаются относительно TOS 370. В то время как был описан вариант осуществления, в котором регистры с плавающей запятой используются как стек, и регистры упакованных данных используются как фиксированный файл регистров, альтернативные варианты осуществления могут реализовывать эти наборы регистров любым способом. К тому же, в то время как был описан вариант осуществления применительно к операциям с плавающей запятой и упакованным данным, понятно, что этот способ мог бы использоваться для совмещения любого фиксированного файла регистров с любым файлом регистров с обращением, аналогичным обращению к стеку, независимо от типа выполняемых операций на нем.
Состояние упакованных данных может быть совмещено (наложено) на любую часть или все из состояний с плавающей запятой. В одном варианте осуществления состояние упакованных данных совмещено с полем мантиссы состояния с плавающей запятой. Кроме того, совмещение может быть полным или частичным. Полное совмещение используется, чтобы обратиться к варианту осуществления, в котором все содержимое регистров является наложенным. Частичное совмещение далее описано со ссылкой на фиг. 6A.
Фиг. 3D является блок-схемой, иллюстрирующей выполнение команд с плавающей запятой и упакованных данных с течением времени, согласно одному варианту осуществления изобретения. Фиг. 3D показывает в хронологическом порядке выполнения первый набор команд 380 с плавающей запятой, набор команд 382 упакованных данных, и второй набор команд 384 с плавающей запятой. Выполнение набора команд 382 упакованных данных начинается в момент времени Т1 и заканчивается в момент времени Т2, в то время как выполнение набора команды с плавающей запятой начинается в момент времени T3. Другие команды могут или не могут быть выполнены между выполнением указанного набора команд 382 упакованных данных и второго набора команд 384 с плавающей запятой. Первый интервал 386 занимает время от момента Т1 до момента Т3, в то время как второй интервал 388 занимает время между моментами Т2 и Т3.
Так как состояния с плавающей запятой и упакованных данных сохранены в совмещенном файле регистров, тэги должны быть изменены (освобождены) перед выполнением второго набора команд 384 с плавающей запятой. Иначе может быть сформирована исключительная ситуация о переполнении стека. Таким образом, в какой-то момент времени во время первого интервала 386 тэги изменяются на пустое состояние.
Это может быть выполнено несколькими различными способами. Например, вариант осуществления может выполнить это посредством: 1) обусловливания выполнения первой команды упакованных данных в наборе команд 382 упакованных данных, чтобы изменить тэги на пустое состояние; 2) обусловливания выполнения каждой команды упакованных данных в наборе команд 382 упакованных данных, чтобы изменить тэги на пустое состояние; 3) изменения тэгов на пустое состояние после попытки выполнения первой команды с плавающей запятой, выполнение которой изменяет совмещенный файл регистров и т.д. Эти варианты осуществления оставляют операционную систему невидимой для существующих операционных систем, которые поддерживают простое переключение контекста (сохранение и восстановление всего состояния регистра на каждом переключателе задачи), потому что состояние упакованных данных должно быть сохранено и восстановлено наряду с остальной частью состояния регистра.
В другом варианте осуществления, чтобы оставаться совместимым с операционными системами, которые поддерживают простые и/или минимальные контекстные переключатели, выполнение набора команд 382 упакованных данных приводит к тому, что тэги изменяются на непустое состояние в первом интервале 386, если только набор команд перехода, представляемых блоком 390, не выполняется после момента времени Т2 и до момента времени Т3 (время, в котором начинается второй набор команд 384 с плавающей запятой). Например, предположим, что набор команд 382 упакованных данных принадлежит задаче A. Также предположим, что задача A прервана полным переключателем задачи (то есть нечастичным переключателем задачи) до выполнения набора команд перехода 390. Так как выполняется полный переключатель задач, обработчик переключателя задачи будет включать команды с плавающей запятой (иллюстрируемый вторым набором команд 384 с плавающей запятой, и называемый в этом примере "программа переключения FP задачи") для сохранения состояния с плавающей запятой/упакованных данных. Так как набор команд перехода 390 не был выполнен, процессор изменит тэги на непустое состояние в какой-либо момент времени
до выполнения программы переключения FP задачи. В результате, программа переключения FP задачи, или минимальная или простая, сохранит содержимое всего совмещенного файла регистров (в этом примере, состояние упакованных данных задачи A). Напротив, если набор команд перехода 390 выполнен, процессор изменяет тэги на пустое состояние в какой-либо момент времени во время второго интервала 388. Таким образом, прерывает или нет задачу переключатель задачи после выполнения набора команд перехода 390, процессор изменит тэги на пустое состояние в какой-либо момент времени до выполнения второго набора команд 384 с плавающей запятой (независимо от того, принадлежит ли второй набор команд 384 с плавающей запятой обработчику переключателя задачи, задаче A или другой программе).
В качестве другого примера снова предположим, что набор команд 382 упакованных данных принадлежит задаче A, и эта задача прервана переключателем задачи до выполнения набора команд перехода 390. Однако в это время переключатель задачи является частичным переключателем задачи (то есть состояние с плавающей запятой/упакованных данных не сохранено или восстановлено). Если никакие другие задачи не выполнены, которые используют команды с плавающей запятой или с упакованными данными, то процессор в конечном счете возвратится к выполняющейся задаче и будет выполнен набор команд перехода 390. Однако, если другая задача (например, задача В) использует команды с плавающей запятой или упакованными данными, предпринятое выполнение этих команд вызывает запрос обработчика операционной системы на сохранение состояния с плавающей запятой/упакованных данных задачи A и восстановление состояния с плавающей запятой/упакованных данных задачи B. Этот обработчик будет включать программу переключения FP задачи (в этом примере, иллюстрируемом вторым набором команд 384 с плавающей запятой) для сохранения состояния с плавающей запятой/упакованных данных. Так как набор команд перехода 390 не был выполнен, процессор изменит тэги на непустое состояние в какой-либо момент времени до выполнения программы переключения FP задачи. В результате программа переключения FP задачи, или минимальная или простая, сохранит содержимое всего совмещенного файла регистров (то есть состояние упакованных данных задачи A). Таким образом, этот вариант осуществления остается операционной системой невидимым независимо от способа, используемого для сохранения состояния совмещенных регистров.
Набор команд перехода может быть выполнен любым числом приемов. В одном варианте осуществления этот набор команд перехода может включать новую команду, называемую здесь командой EMMS (пустое состояние мультимедиа). Эта команда вызывает очистку тэгов данных с плавающей запятой/упакованных для указания любому выполняемому впоследствии коду, что все регистры 300 с плавающей запятой доступны для любой последующей команды с плавающей запятой, которые могут быть выполнены. При этом избегают формирование условия переполнения стека, которое может в противном случае иметь место, если команда EMMS не выполнена после команд упакованных данных, но перед выполнением команды с плавающей запятой.
В известной практике программирование операций с плавающей запятой, используя процессор архитектуры Intel, обычно завершают блоки кода с плавающей запятой операцией или операциями, которые очищают состояние с плавающей запятой. Независимо от того, используется ли частичное и/или минимальное переключение контекста, состояние с плавающей запятой оставлено в очищенном виде после завершения первого блока кода с плавающей запятой. Следовательно, EMMS команда предназначена для использования в последовательностях упакованных данных для того, чтобы очистить состояние упакованных данных. EMMS команда должна быть выполнена после блока кода упакованных данных. Таким образом, процессор, реализующий описанные способы и устройство, сохраняет полную совместимость с известными процессорами с плавающей запятой, использующие процессор архитектуры Intel, но, однако, также имеет возможность выполнения команд упакованных данных, которые, если программируется хорошими способами программирования и соответствующими служебными действиями (очистка состояния перед переходами между кодом упакованных данных и кодом с плавающей запятой), позволяют осуществлять переходы между упакованными данными и кодом с плавающей запятой без неблагоприятного воздействия на состояние с плавающей запятой или упакованных данных.
В другом варианте осуществления набор команд перехода может быть реализован, используя существующие команды с плавающей запятой, которые заставляют процессор изменять тэги на пустое состояние при выполнении.
В одном варианте осуществления переключение между выполнением команд упакованных данных и команды с плавающей запятой требует времени. Таким образом, квалифицированный способ программирования должен минимизировать количество этих переходов. Число переходов между командами с плавающей запятой и командами упакованных данных может быть уменьшено группированием команд с плавающей запятой без команд упакованных данных. Также желательно поддерживать такие хорошие приемы программирования, требуется создать процессор, который делает трудным игнорирование таких хороших приемов программирования. Таким образом, один вариант осуществления также изменяет указатель на верхушку стека на состояние инициализации (например, ноль, чтобы указать регистр R0) в течение первого интервала 386. Это может быть выполнено любым числом различных способов, включая: 1) вызывая выполнение первой команды упакованных данных, которая изменит указатель на верхушку стека; 2) вызывая выполнение каждой команды упакованных данных в наборе команд 382 упакованных данных, чтобы изменить указатель на верхушку стека; 3) вызывая выполнение команды EMMS, чтобы установить указатель на верхушку стека; 4) изменение индикации на верхушку стека при попытке выполнить команду с плавающей запятой в момент времени Т3 на фиг. 3; и т.д. Снова это делается для поддержки полной совместимости в коде, который "смешивает" команды упакованных данных с командами с плавающей запятой. Также из перспективы поддержки хороших приемов программирования в одном варианте осуществления в течение первого интервала 386 также сохраняют значение, указывающее на число в полях знака и порядка любого совмещенного регистра, в который записывают упакованные данные.
Фиг. 4A и 4B изображают функциональную диаграмму операций способа выполнения команд с плавающей запятой и упакованных данных в способе, который является невидимым для различных способов операционной системы, и который поддерживает эффективные приемы программирования, согласно одному варианту осуществления изобретения. Диаграмма начинается на этапе 400. После этапа 400 выполнение продолжается на этапе 402.
Как показано, на этапе 402 обращаются к набору битов как к команде, и последовательность операций переходит к этапу 404. Этот набор битов включает код операции, который идентифицирует операцию(и), которые должны быть выполнены командой.
На этапе 404 определяется, является ли код операции допустимым. Если код операции не является допустимым, осуществляется переход на этап 406. Иначе осуществляется переход на этап 408. Предполагая, что выполнение программы, содержащей команды упакованных данных, будет предпринято на процессоре, который не поддерживает команды упакованных данных, коды операции для команд упакованных данных не будут допустимыми и последовательность операций продолжается на этапе 406. Напротив, если процессор способен выполнять команды упакованных данных, коды операции для этих команд будут допустимыми и последовательность операций продолжится на этапе 408.
Как показано на этапе 406, формируется исключительная ситуация о недопустимом коде операции, и выполняется соответствующий обработчик события. Как ранее описано со ссылкой на этап 215 на фиг. 2, этот обработчик события может быть выполнен, чтобы заставить процессор отображать сообщение, выполнить аварийное прекращение работы текущей задачи и продолжить выполнять другие задачи. Конечно, этот обработчик события может быть выполнен любым количеством способов. Например, этот обработчик события может быть выполнен для идентификации, является ли процессор неспособным к выполнению команд упакованных данных. Этот тот же самый обработчик события мог бы также быть выполнен, чтобы установить индикацию, идентифицирующую, что процессор не может выполнять команды упакованных данных. Другие прикладные программы, выполняющиеся на процессоре, могут использовать эту индикацию, чтобы определить, выполнить ли используя набор скалярных программ или идентичный набор программ упакованных данных. Однако такая реализация будет требовать или изменения существующей операционной системы или разработки новой операционной системы.
На этапе 408 определяют, какая команда была получена. Если команда не является ни командой с плавающей запятой, ни командой упакованных данных, поток не проходит на этап 410. Однако, если команда - с плавающей запятой, осуществляется переход на этап 412. Напротив, если команда является командой упакованных данных, осуществляется переход на этап 414.
Как показано на этапе 410, процессор выполняет команду. Так как этот этап не необходим для понимания изобретения, он далее не описывается.
Как показано, на этапе 412 определяется, является ли ЕМ индикация равной 1 (согласно описанному соглашению по программному обеспечению, если был эмулирован модуль с плавающей запятой) и является ли TS индикация равной 1 (согласно описанному соглашению по программному обеспечению, если выполнялся частичный контекстный переключатель). Если ЕМ индикация и/или TS индикация равна 1, осуществляется переход на этап 416. Иначе осуществляется переход на этап 420. В то время как выполнен один вариант осуществления, чтобы вызвать исключительную ситуацию о недоступности устройства, когда ЕМ индикация равна 1, и/или TS индикация равна 1, альтернативные варианты осуществления могут быть реализованы, чтобы использовать любое количество других значений.
На этапе 416 формируется исключительная ситуация о недоступности устройства, и выполняется соответствующий обработчик события. Как описано выше со ссылкой на этап 235 на фиг. 2, соответствующий обработчик события может быть выполнен, чтобы опросить значения ЕМ и TS индикации. Если ЕМ индикация равна 1, то обработчик события эмулирует устройство с плавающей запятой, чтобы выполнить команду и вынудить процессор продолжать выполнение следующей команды (команда, которая логически следует за командой, полученной на этапе 402). Если TS индикация равна 1, то обработчик события заставляет процессор функционировать так, как описано выше со ссылкой на частичные контекстные переключатели (сохраняет содержимое устройства с плавающей запятой и восстанавливает правильное состояние с плавающей запятой при необходимости) и заставляет процессор возобновить выполнение посредством перезапуска выполнения команды, полученной на этапе 402. Конечно, альтернативные варианты осуществления могут выполнить этот обработчик события любым количеством способов. Например, ЕМ индикация может использоваться для осуществления многозадачного режима.
Так как состояние упакованных данных является совмещенным с состоянием с плавающей запятой и так как индикации ЕМ и TS вызывают изменение состояния с плавающей запятой, процессор должен также ответить на ЕМ и TS индикацию при выполнении команд упакованных данных, чтобы оставить полностью совместимое программное обеспечение.
На этапе 414 определяется, равна ли ЕМ индикация 1. Как описано выше, обработчик события, выполняемый для обслуживания исключительной ситуации о недоступности устройства, может быть выполнен для опроса ЕМ индикации и попытаться эмулировать устройство с плавающей запятой, если ЕМ индикация равна 1. Так как существующие обработчики события не записаны для эмуляции команд упакованных данных, предпринятое выполнение команды упакованных данных, в то время как ЕМ индикация равна 1, не может обслуживаться этим обработчиком события. Кроме того, чтобы оставаться невидимой операционной системой, процессор не может требовать изменения этого обработчика события. В результате, если на этапе 414 определено, что ЕМ индикация равна 1, осуществляется переход на этап 406, а не на этап 416. Иначе осуществляется переход на этап 418.
Как описано выше, на этапе 406 формируется исключительная ситуация о недопустимом коде операции и выполняется соответствующий обработчик события. Отклоняя предпринятое выполнение команды упакованных данных, в то время как ЕМ = 1, к исключительной ситуации о недопустимом коде операции, вариант осуществления остается невидимым операционной системой.
В то время, как был описан вариант осуществления для обработки ЕМ индикации в способе, который является операционной системой невидимым, альтернативные варианты осуществления могут использовать другие способы. Например, альтернативный вариант осуществления может также формировать исключительную ситуацию о недоступности устройства, другое существующее событие или новое событие в ответ на предпринятое выполнение команды упакованных данных, в то время как ЕМ индикация равна 1. Кроме того, если небольшая модификация операционной системы приемлема, выбранный обработчик события может быть изменен, чтобы осуществлять любое действие, которое считается соответствующим в ответ на эту ситуацию. Например, обработчик события может быть записан для эмуляции команд упакованных данных. Другой альтернативный вариант осуществления может только игнорировать ЕМ индикацию при выполнении команд упакованных данных.
Как показано, на этапе 418 определяется, равна ли TS индикация 1 (согласно существующему соглашению по программному обеспечению, если был задействован частичный контекстный переключатель). Если TS индикация равна 1, осуществляется переход на этап 416. Иначе осуществляется переход на этап 422.
Как описано выше, на этапе 416 формируется исключительная ситуация о недоступности устройства и выполняется соответствующий обработчик события. Таким образом, в ответ на это событие может быть выполнен соответствующий обработчик события, чтобы опросить ЕМ и TS индикации. Так как этап 414 отклоняет ситуации, где ЕМ индикация равна 1, на исключительную ситуацию о недопустимости кода операции, ЕМ индикация должна быть равна 0 и TS индикация должна быть равна 1. Так как TS индикация равна 1, обработчик события функционирует так, как описано выше, в отношении частичных контекстных переключателей (сохраняет содержимое устройства с плавающей запятой и восстанавливает правильное состояние с плавающей запятой, если это требуется) и заставляет процессор возобновить выполнение посредством перезапуска выполнения команды, полученной на этапе 402. Так как состояние упакованных данных является совмещенным (наложенным) на состояние с плавающей запятой, этот обработчик события работает как для состояния с плавающей запятой, так и состояния упакованных данных. В результате, этот способ остается невидимой операционной системой. Конечно, альтернативные варианты осуществления могут реализовать этот обработчик события любым количеством приемов. Например, альтернативный вариант осуществления, в котором состояние упакованных данных не является совмещенным с состоянием с плавающей запятой, может использовать новый обработчик события, который сохраняет и состояние с плавающей запятой и упакованных данных.
В то время как был описан вариант осуществления для обработки TS индикации способом, который является операционной системой невидимым, альтернативные варианты осуществления могут использовать другие способы. Например, альтернативный вариант осуществления может не реализовывать TS индикацию. Такой альтернативный вариант осуществления не был бы совместим с операционными системами, которые используют TS индикацию, чтобы выполнить частичное контекстное переключение. Однако такой альтернативный вариант осуществления был бы совместим с существующими операционными системами, которые не поддерживают частичное переключение контекста, использующее TS индикацию. В качестве другого примера, предпринятое выполнение команды упакованных данных, в то время как TS индикация равна 1, могло бы быть отклонено к новому обработчику события или к существующему обработчику события, который изменился. Этот обработчик события может быть выполнен, чтобы осуществить любое действие, кажущееся соответствующим в ответ на эту ситуацию. Например, в варианте осуществления, в котором состояние упакованных данных является не совмещенным с состоянием с плавающей запятой, этот обработчик события может сохранять состояние упакованных данных и/или состояние с плавающей запятой.
Как описано выше со ссылкой на фиг. 2, если некоторые численные ошибки формируются во время выполнения команды с плавающей запятой, эти ошибки остаются задержанными до попытки выполнения следующей команды с плавающей запятой, чье выполнение может быть прервано для обслуживания их. Как показано, на этапах 420 и 422 определяется, имеются ли любые такие отложенные ошибки, которые теперь могут обслуживаться. Таким образом, эти этапы аналогичны этапу 240 на фиг. 2. Если имеются любые такие отложенные ошибки, осуществляется переход с этапов 420 и 422 на этап 424. Однако, если на этапе 420 определено, что таких отложенных ошибок не имеется, осуществляется переход на этап 426. Напротив, если на этапе 422 определено, что таких отложенных ошибок не имеется, осуществляется переход на этап 430. В альтернативном варианте осуществления такие ошибки остаются ожидающими в течение выполнения команд упакованных данных.
На этапе 424 формируется исключительная ситуация ошибки задержки с плавающей запятой. Как описано выше со ссылкой на этап 245 по фиг. 2, в ответ на это событие процессор определяет, маскируется ли ошибка с плавающей запятой. Если да, процессор пытается обрабатывать событие внутри и команда с плавающей запятой микроперезапускается. Если ошибка с плавающей запятой не маскируется, событие является внешним событием и выполняется соответствующий обработчик события. Этот обработчик события может быть выполнен для обслуживания ошибки и заставлять процессор продолжать выполнение, повторяя запуск выполнения команды, полученной на этапе 402. Конечно, альтернативные варианты осуществления могут реализовать этот обработчик события любым количеством способов.
Как показано на этапе 426, выполняется команда с плавающей запятой. Чтобы оставаться невидимой для операционной системы, один вариант осуществления также изменяет тэги по мере необходимости, сообщает о любых численных ошибках, которые могут быть обслужены, и осуществляет любую другую задержку численных ошибок. Так как имеются много способов операционной системы для сохранения содержимого устройства с плавающей запятой, желательно выполнить команды упакованных данных и с плавающей запятой способом, который является невидимым для всех таких способов операционной системы. Поддерживая тэги, этот вариант осуществления остается операционной системой невидимым для любых таких способов операционной системы, которые сохраняют содержимое только тех регистров с плавающей запятой, чей соответствующий тэг указывает непустое состояние. Однако альтернативные варианты осуществления могут быть выполнены, чтобы быть совместимыми с меньшим количеством этих способов операционной системы. Например, если существующая операционная система не использует тэги, процессор, который не выполняет тэги, является все еще совместимым с такой операционной системой. Кроме того, для изобретения нет необходимости в том, чтобы численные исключительные ситуации с плавающей запятой были задержаны, и, таким образом, хотя альтернативный вариант осуществления не предусматривает таких операций, он остается в объеме раскрытия настоящего изобретения.
Как показано, на этапе 430 определяется, является ли упакованная команда данных EMMS командой (также называемая командой перехода). Если упакованная команда данных является EMMS командой, осуществляется переход на этап 432. Иначе осуществляется переход на этап 434. EMMS команда используется для изменения тэгов с плавающей запятой в состояние инициализации. Таким образом, если состояние упакованных данных является совмещенным с состоянием с плавающей запятой, эта команда должна быть выполнена при переходе от выполнения команд упакованных данных к командам с плавающей запятой. Таким образом, устройство с плавающей запятой инициализируется для выполнения команд с плавающей запятой. Альтернативные варианты осуществления, которые не осуществляют совмещение состояний упакованных данных с состоянием с плавающей запятой, могут не иметь необходимости в выполнении этапов 430 и 432. Кроме того, этапы 430 и 432 не требуются, если EMMS команда эмулируется.
Как показано на этапе 432, все тэги изменяются на пустое состояние и указатель на верхушку стека изменяется на значение инициализации. Изменяя тэги на пустое состояние, устройство с плавающей запятой инициализируется и подготавливается к выполнению команд с плавающей запятой. Изменение указателя на верхушку стека на значение инициализации (который в одном варианте осуществления является нулем, чтобы идентифицировать регистр R8) позволяет отдельно группировать команды с плавающей запятой и упакованных данных и, таким образом, поощряет хорошие приемы программирования. Альтернативным вариантам осуществления нет необходимости инициализировать указатель на верхушку стека. После завершения этапа 432, система освобождается для выполнения следующей команды (команда, логически следующая после команды, полученной на этапе 402).
Как показано на этапе 434, выполняется команда упакованных данных (без формирования каких-либо числовых исключительных ситуаций) и указатель на верхушку стека изменяется на значение инициализации. Чтобы избежать формирования любых числовых исключительных ситуаций, один вариант осуществления реализует команды упакованных данных так, что значения данных являются отделенными и/или фиксированными на максимальном или минимальном значении. Не формируя каких-либо числовых исключительных ситуаций, обработчики события не требуются для обслуживания исключительных ситуаций. В результате этот вариант осуществления изобретения является невидимым операционной системой. Альтернативно, вариант осуществления может быть реализован, чтобы выполнить микрокодовые обработчики события в ответ на такие численные исключительные ситуации. Альтернативные варианты осуществления, которые не являются полностью невидимыми операционной системой, могут быть выполнены так, что любые дополнительные обработчики события будут включены в операционную систему или существующие обработчики события изменены для обслуживания ошибки. Верхушка стека изменяется по тем же самым причинам, которые указаны выше. Альтернативные варианты осуществления могут быть выполнены для изменения верхушки стека любым числом способов. Например, альтернативные варианты осуществления могут быть реализованы, чтобы изменить указатель на верхушку стека после выполнения всех команд упакованных данных, за исключением EMMS. Другие альтернативные варианты осуществления могут быть выполнены, чтобы изменить указатель на верхушку стека после выполнения никаких других команд упакованных данных, кроме EMMS. Если любые события памяти сформированы в результате попытки выполнить команду упакованных данных, выполнение прерывается, указатель на верхушку стека не изменяется, и событие обслуживается. После завершения обслуживания события команда, полученная на этапе 402, перезапускается. После этапа 434 осуществляется переход на этап 436.
Как показано, на этапе 436 определяется, обусловливает ли команда упакованных данных процессор осуществлять запись в совмещенный регистр. Если да, осуществляется переход на этап 438. Иначе осуществляется переход на этап 440.
На этапе 438 единицы сохраняются в полях знака и порядка каждого совмещенного регистра, в которой команда упакованных данных заставляет процессор осуществлять запись. После этапа 438 осуществляется переход на этап 440. Выполнение этого этапа способствует квалифицированным приемам программирования, в которых это поощряет отдельно группировать команды с плавающей запятой и упакованных данных. Конечно, альтернативные варианты осуществления, которые не касаются этой проблемы, могут избегать выполнения этого этапа. В то время как в одном варианте единицы записываются в поля знака и порядка, альтернативные варианты осуществления могут использовать любое значение, представляющее собой NAN (не число) или бесконечность.
Как показано на этапе 440, все тэги изменяются на непустое состояние. Изменение всех тэгов на непустое состояние поддерживает квалифицированные приемы программирования, в которых это поощряет отдельную группировку команд с плавающей запятой и упакованных данных. Кроме того, из перспективы совместимости операционной системы, некоторые способы операционной системы сохраняют содержимое только тех регистров с плавающей запятой, чьи соответствующие тэги указывают непустое состояние (минимальное переключение контекста). Таким образом, в варианте осуществления, в котором состояние упакованных данных является совмещенным с состоянием с плавающей запятой, изменение всех тэгов, равных непустому состоянию, заставляет такие операционные системы сохранять состояние упакованных данных, как будто это было состояние с плавающей запятой. Альтернативные варианты осуществления могут изменять только те тэги, чьи соответствующие регистры содержат допустимые элементы упакованных данных. Кроме того, альтернативные варианты осуществления могут быть выполнены, чтобы быть совместимыми с меньшим количеством этих способов операционной системы. Например, если существующая операционная система не использует тэги (например, операционная система, которая сохраняет и восстанавливает все состояние регистра), вариант осуществления, который не реализует тэги, будет все еще совместим с такой операционной системой. После завершения этапа 440 система свободна для выполнения следующей команды (команды, логически следующей после команды, полученной на этапе 402).
Таким образом, в этом варианте осуществления содержимое тэгов в памяти после того, как состояние с плавающей запятой сохраняется (FSAVE) или среда с плавающей запятой сохранена (FSTENV), команда показана со ссылкой на табл. 1.
Как показано, любая из команд упакованных данных, за исключением EMMS, вызывает установку тэгов 320 в непустое состояние (00). EMMS вызывает установку регистра тэгов с плавающей запятой тэги в пустое состояние (11). К тому же, любая упакованная команда данных, включая EMMS, также вызывает сброс в 0 указателя на верхушку стека, сохраненного в поле 350 верхушки стека.
Оставшиеся регистры среды, такие как слова управления и состояния (за исключением TOS) в процессоре архитектуры Intel, остаются неизменными. Любые упакованные данные считываются, или EMMS оставляет части мантиссу и порядка регистров 300 с плавающей запятой в неизменном состоянии. Однако в одном варианте осуществления любые упакованные данные записываются в регистр упакованных данных, из-за механизма совмещения вызывают изменение мантиссы соответствующего регистра с плавающей запятой согласно выполняемой операции. Кроме того, в этом варианте осуществления запись данных в часть мантиссы регистров с плавающей запятой модификаций регистров 310 упакованных данных вызывает установку в "1" всех битов в частях знака и порядка регистров 300 с плавающей запятой. Так как команды упакованных данных не используют части знака и порядка регистров с плавающей запятой (не имеется совмещения упакованных регистров данных в частях знака и порядка регистров с плавающей запятой), это никак не влияет на команды упакованных данных. Как описано выше, альтернативные варианты осуществления могут совмещать состояние упакованных данных с любой частью состояния с плавающей запятой. Кроме того, альтернативные варианты осуществления могут выбрать для записи любое другое значение или не изменять части знака и/или порядка регистров (см. табл. 2).
Чтобы далее указывать выполнение команд упакованных данных, части знака и порядка регистров с плавающей запятой, в которые осуществляется запись, устанавливаются в "1". Это делается из-за того, что регистры с плавающей запятой используют часть порядка в регистрах с плавающей запятой, и требуется, чтобы эта часть регистров была оставлена в состоянии детерминанта после выполнения команд упакованных данных. В микропроцессоре архитектуры Intel часть порядка регистра с плавающей запятой, установленная в "1", интерпретируется как не являющаяся числом (NAN). Таким образом, в дополнение к установке тэгов 330 упакованных данных в непустое состояние, часть порядка регистров с плавающей запятой устанавливается в "1", которые могут использоваться для указания, что предварительно выполнялись команды упакованных данных. Это дополнительно препятствует перемешиванию данных из команд упакованных данных и команд с плавающей запятой, которые могут изменить эти данные, выдавая неподходящие результаты. Таким образом, код с плавающей запятой имеет дополнительный способ различать, когда регистры с плавающей запятой содержат данные с плавающей запятой и когда они содержат упакованные данные.
Таким образом, описан способ выполнения команд упакованных данных, который является совместимым с существующими операционными системами (такие, как операционные среды MS WINDOWS фирмы Microsoft Corporation, Redmond, Вашингтон), и поддерживает профессиональные приемы программирования. Так как состояние упакованных данных накладывается на состояние с плавающей запятой, состояние упакованных данных будет сохраняться и восстанавливаться существующими операционными системами, как если бы это было состояние с плавающей запятой. Кроме того, так как события, которые сформированы выполнением команд упакованных данных, пригодны к обслуживанию существующими обработчиками события операционной системы, нет необходимости модифицировать эти обработчики события и нет необходимости добавлять новые обработчики события. В результате, процессор совместим сверху вниз, и обновление не требует затрат, необходимых для разработки или изменения операционной системы.
Различные варианты осуществления этого способа, которые являются также совместимыми с существующими операционными системами, описаны со ссылкой на фиг. 7A-C, 8 и 9 и со ссылкой на фиг. 11A-C. Хотя эти варианты осуществления отличаются, следующее является общим для всех этих вариантов осуществления (вариант осуществления, показанный на фиг. 4A-B; вариант осуществления, показанный на фиг. 7A-C, 8 и 9; и вариант осуществления, показанный на фиг. 11A-C): 1) состояние с плавающей запятой и упакованных данных по меньшей мере проявляется для программного обеспечения, которое должно быть сохранено в одном логическом файле регистров; 2) выполнение команды упакованных данных, когда ЕМ бит указывает "команды с плавающей запятой должны быть эмулированы", приводит к исключительной ситуации о недопустимости кода операции, а не к исключительной ситуации о недоступности устройства; 3) выполнение команды упакованных данных, когда TS бит указывает "выполнялся частичный контекстный переключатель", приводит к исключительной ситуации о недоступности устройства; 4) задержка событий с плавающий запятой обслуживается попыткой выполнения любой из команд упакованных данных; 5) выполнение любой из команд упакованных данных приведет к тому, что указатель на верхушку стека изменяется на "0" в какой-либо момент времени до выполнения следующей команды с плавающей запятой; 6) если выполнение EMMS команды не сопровождается последующим выполнением любых других команд упакованных данных, выполнение EMMS команды приведет к тому, что все тэги изменяются на пустое состояние в какой-либо момент времени до выполнения следующей команды с плавающей запятой; 7) если выполнение любой из команд упакованных данных не сопровождается выполнением EMMS команды, тэги будут изменены на непустое состояние в какой-либо момент времени до выполнения следующей команды с плавающей запятой; 8) некоторое значение, представляющее NAN (не число) или бесконечность, сохраняются в полях знака и порядка любого регистра FP/PD, записанные процессором в ответ на выполнение команды упакованных данных; и 9) никакие новые не микрокодовые обработчики события не требуются.
Разновидности варианта осуществления, показанного на фиг. 4A-B, некоторые из которых были описаны, могут быть полностью или частично совместимыми с такими операционными системами и/или поддерживать хорошие приемы программирования. Например, альтернативный вариант осуществления изобретения может перемещать некоторые этапы в другие местоположения в последовательности операций, показанной на чертежах 4A-B. Другие варианты осуществления изобретения могут изменять или удалять один или большее количество этапов. Например, альтернативный вариант осуществления не может поддерживать ЕМ бит. Конечно, изобретение могло бы быть полезно для любого количества архитектур системы и не ограничивается описанной здесь архитектурой.
При использовании вышеупомянутых способов для выполнения команд с плавающей запятой и упакованных данных рекомендуется, чтобы программисты, которые используют варианты осуществления настоящего изобретения, выделили разделы их кода и разделы, которые содержали бы отдельные блоки команд с плавающей запятой и упакованных данных, как показано на фиг. 3. Это должно позволить сохранить состояние и очистку от состояния упакованных данных до перехода от последовательности операций с плавающей запятой к последовательности операций с упакованными данными и наоборот. Это также разрешает проблему совместимости с известными механизмами переключения задач, включая те, которые сохраняют контекст во время переключения задач.
Так как команды упакованных данных воздействуют на регистры с плавающей запятой 300 (фиг. 3A) и любая одиночная команда упакованных данных устанавливает все тэги с плавающей запятой в непустое состояние, выделение кода в блоки кодового типа, следовательно, рекомендуется для правильной "бухгалтерии" (отслеживания). Пример выполнения смешанных команд с плавающей запятой и упакованных данных в блоках иллюстрируется на фиг. 3D. Он может включать операцию внутри совместно используемой многозадачной операционной системы, или смешанные с плавающей запятой и упакованные коды команд прикладной программы в одиночной прикладной программе. В любом случае, правильная "бухгалтерия" регистров с плавающей запятой 300, соответствующих тэгов и указателей на верхушку стека обеспечивается посредством выделения разделов функциональных возможностей в отдельные блоки с плавающей запятой и кода упакованных данных.
Например, как иллюстрируется на фиг. 3D, последовательность выполнения может включать первый набор 380 команд с плавающей запятой. После завершения блока команд 380 с плавающей запятой состояние с плавающей запятой может быть сохранено, если требуется, прикладной программой. Это может быть выполнено, используя любое количество известных предшествующих способов, включая сохранение стека с плавающей запятой или использование команд FSAVE/FNSAVE в процессоре с архитектурой Intel. Это может также быть выполнено во время минимальных контекстных переключателей, которые сохраняют среду с плавающей запятой и проверяют отдельные тэги для указания, что соответствующий регистр с плавающей запятой содержит допустимые данные. Для каждого тэга, который указывает, что соответствующие данные с плавающей запятой содержат допустимые данные, соответствующий регистр с плавающей запятой будет сохранен. К тому же, в этих обстоятельствах может быть необходимо сохранить индикацию относительно числа регистров с плавающей запятой.
После выполнения первого набора 380 команд с плавающей запятой второй набор 382 команд упакованных данных выполняется в последовательности операций. Повторный вызов такого выполнения каждой команды упакованных данных приведет к тому, что все тэги 330 упакованных данных устанавливаются в непустое состояние в какой-либо момент времени 386, если не выполнен набор команд 390 перехода.
Если никакие переключатели задачи не задействованы, вслед за выполнением набора команд 382 упакованных данных, выполняется набор команд 390 перехода. Этот набор команд 390 перехода может быть выполнен, чтобы сохранить состояние упакованных данных. Это можно осуществить, используя любой механизм, включая известные команды сохранения с плавающей запятой, которые описаны выше, или специализированную команду, чтобы сохранить только состояние упакованных данных. Состояние упакованных данных может быть сохранено любым известным способом, включая механизмы частичного и минимального переключения контекста. Сохранено или нет состояние упакованных данных, набор команд 390 перехода освобождает состояние упакованных данных. В этом случае состояние упакованных данных воздействует на тэги 330 упакованных данных и соответствующие совмещенные тэги 320 с плавающей запятой. Как описано выше, освобождение состояния упакованных данных осуществляется выполнением одиночной команды EMMS или последовательностью операций с плавающей запятой, как будет описано со ссылкой на фиг. 14. В результате процессор освобождает состояние упакованных данных в какой-либо момент времени в интервале 388 и инициализируется для выполнения команд с плавающей запятой.
Вслед за выполнением набора 390 команд перехода выполняется второй набор 384 команд с плавающей запятой. Так как тэги были освобождены и указатель на верхушку стека изменен, чтобы указывать на первый физический регистр 0 в течение второго интервала 388, все регистры с плавающей запятой доступны для использования. Это предотвращает порождение исключительных ситуаций переполнения стека с плавающей запятой, которые могут в противном случае произойти после выполнения команды с плавающей запятой. В некоторых реализациях программного обеспечения условие переполнения стека может вызвать программа обработки прерывания, чтобы сохранить и освободить состояние упакованных данных.
Таким образом, в выполненных вариантах осуществления настоящего изобретения допустимы блоки смешанных команд упакованных данных и с плавающей запятой. Однако соответствующая "бухгалтерия" должна выполниться программистом прикладной программы или совместным многозадачным кодом, чтобы сохранить любое требуемое состояние с плавающей запятой или упакованных данных во время переходов между командами упакованных данных и с плавающей запятой, для того чтобы состояние задачи не было повреждено во время переходов. Кроме того, этот способ избегает ненужных исключительных ситуаций, которые в противном случае вызвали бы использование нерекомендуемых способов программирования, с использованием выполненных вариантов осуществления настоящего изобретения.
EMMS команда позволяет осуществить плавный переход между потоком команд упакованных данных и потоком команд с плавающей запятой. Как указано выше, она очищает тэги с плавающей запятой, чтобы избежать любого условия переполнения с плавающей запятой, которые могут происходить и, кроме того, сбрасывает указатель на верхушку стека, сохраненную в поле 350 верхушки стека. Хотя может быть выполнена специализированная команда, которая выполняет эти операции, это является ожидаемым, и в объеме настоящего раскрытия такая операция такого типа может быть выполнена, используя комбинацию существующих команд с плавающей запятой. Пример такого способа показан на фиг. 14. Кроме того, это функционально может быть сведено к выполнению первой команды с плавающей запятой после выполнения команды упакованных данных. В этом варианте осуществления выполнение первой команды с плавающей запятой (отличной, чем та, которая сохраняет среду состояния с плавающей запятой/упакованных данных) после выполнения команды упакованных данных заставила бы процессор выполнять неявную операцию EMMS (установка всех тэгов в пустое состояние).
Фиг. 5 показывает блок-схему, иллюстрирующую в качестве примера компьютерную систему 500, согласно одному варианту осуществления изобретения. Приведенная в качестве примера компьютерная система 500 включает в себя процессор 505, устройство памяти 510 и шину 515. Процессор 505 подсоединен к устройству памяти 510 шиной 515. Кроме того, ряд устройств ввода-вывода пользователя, такие как клавиатура 520 и дисплей 525, также подсоединены к шине 515. Сеть 530 может также быть подсоединена к шине 515. Процессор 505 представляет собой центральное обрабатывающее устройство любого типа архитектуры такой как CISC (система с полным набором команд), RISC (система с сокращенным набором команд), VLIW (система с очень длинным командным словом) или гибридной архитектуры. Кроме того, процессор 505 может быть реализован на одном или большем количестве микросхем. Устройство памяти 510 представляет собой один или большее количество механизмов для сохранения данных. Например устройство памяти 510 может включать в себя память только для чтения (ROM), память с произвольным доступом (RAM), магнитные дисковые носители данных, оптические носители данных, устройства памяти с параллельным стиранием и/или другие считываемые машиной среды. Шина 515 представляет собой одну или более шин (например, PCI, ISA, X-шина, EISA, VESA, и т.д.) и мосты (также называемые контроллерами шины). В то время как этот вариант осуществления описан относительно однопроцессорной компьютерной системы, изобретение может быть реализовано в многопроцессорной компьютерной системе. К тому же, в то время как этот вариант осуществления описан применительно к 32-разрядной и 64-разрядной компьютерной системе, реализация изобретения не ограничивается такими компьютерными системами.
Фиг. 5 дополнительно иллюстрирует, что процессор 505 включает устройство 545 шины, кэш-память 550, устройство 560 системы команд, устройство 565 управления памятью и устройство 570 обработки событий. Конечно, процессор 505 содержит дополнительные схемы, которые не являются необходимыми для понимания реализации изобретения.
Устройство 545 шины соединено к кэш-памятью 550. Устройство 545 шины используется для контроля и оценки сигналов, сформированных вне процессора 505, а также для координирования сигналов вывода в ответ на входные сигналы и внутренние запросы из других устройств и механизмов в процессоре 505.
Кэш-память 550 представляет собой одну или большее количество областей памяти для использования процессором 505 в качестве кэш-памяти команд и кэш-памяти данных. Например, в одном варианте осуществления кэш-память 550 выполнена в качестве двух отдельных устройств кэш-памяти - одно для команд и одно для данных. Кэш-память 550 соединена с устройством 560 системы команд и устройством 565 управления памятью.
Устройство 560 системы команд включает аппаратные средства и/или программно-аппаратные средства, чтобы декодировать и выполнить, по меньшей мере, одну систему команд. Как показано на фиг. 5, устройство 560 системы команд включает в себя устройство декодирования/выполнения 575. Устройство декодирования используется для декодирования команд, принятых процессором 505, в сигналы управления и/или точки входа микрокода. В ответ на эти сигналы управления и/или точки входа микрокода устройство выполнения выполняет соответствующие операции. Устройство декодирования может быть реализовано, используя любое число различных механизмов (например, таблицы поиска, аппаратной реализации, ПЛМ и т. д.). В то время как выполнение различных команд устройствами декодирования и выполнения представлено последовательностью условий "если/то", понятно, что выполнение команды не требует последовательной обработки этих условий "если/то". Скорее, любой механизм для логического выполнения этих условий "если/то" рассматривается в объеме реализации изобретения.
Устройство 575 декодирования/выполнения команд показано содержащим систему команд 580, которая включает команды упакованных данных. Хотя эти команды упакованных данных могут быть реализованы для выполнения любого числа различных операций. Например, эти команды упакованных данных при выполнении могут заставлять процессор выполнять упакованные операции с плавающей запятой и/или упакованные целочисленные операции.
В одном варианте осуществления эти команды упакованных данных являются теми, которые описаны в "A Set of Instructions for Operating on Packed Data" от 31 августа, 1995, сер.номер 08/521,360. В дополнение к командам упакованных данных система 580 команд может включать новые команды и/или команды, аналогичные, или такие же, какие имеются в существующих универсальных процессорах. Например, в одном варианте осуществления процессор 505 поддерживает систему команд, которая является совместимой с системой команд архитектуры процессора Intel, используемой известными процессорами, такими как процессор Pentium.
Фиг. 5 также показывает устройство 560 набора команд, включающее устройство памяти 585. Устройство памяти 585 представляет собой один или большее количество наборов регистров на процессоре 505 для сохранения информации, включая данные с плавающей запятой, упакованные данные, целочисленные данные и данные управления (например, ЕМ индикацию, TS индикацию, указатель на верхушку стека и т.д.). В некоторых вариантах осуществления, некоторые из которых далее описаны, устройство памяти 585 совмещает состояние упакованных данных с состоянием с плавающей запятой.
Устройство управления памятью 565 представляет собой аппаратные средства и программно-аппаратные средства для реализации одного или большего количества схем управления памятью, таких как страничная и/или с сегментацией. В то время как может использоваться любое число схем управления памятью, в одном варианте осуществления реализуется схема управления памятью, совместимая с архитектурой процессора Intel. Устройство 570 обработки события подсоединено к устройству 565 управления памятью и устройству 560 системы команд. Устройство 570 обработки события представляет собой аппаратные средства и программно-аппаратные средства для реализации одной или большего количества схем обработки событий. В то время как сможет использоваться любое число схем обработки событий, в одном варианте осуществления реализуется схема обработки событий, совместимая с архитектурой процессора Intel.
Фиг. 5 также иллюстрирует, что устройство 510 памяти имеет хранимую операционную систему 535 и программу 540 упакованных данных для выполнения компьютерной системой 500. Программа 540 упакованных данных является последовательностью команд, которая включает одну или большее количество
команд упакованных данных. Конечно, устройство памяти 510 предпочтительно содержит дополнительное программное обеспечение (не показано), которое не является необходимым для понимания изобретения.
В то время как в одном варианте осуществления реализованы различные индикации (например, ЕМ индикация, TS индикация и т.д.), используя биты в регистрах на процессоре 505, альтернативные варианты осуществления могут использовать любое количество способов. Например, альтернативные варианты осуществления могут сохранять эти индикации вне микросхемы (например, в устройстве памяти 510) и/или могут использовать множество битов для каждой индикации. Термин "область памяти" используется, чтобы обратиться к любому механизму для сохранения данных, включая расположения в устройстве памяти 510, один или большее количество регистров в процессоре 505 и т.д.
Фиг. 6A является блок-схемой, иллюстрирующей устройство для совмещения состояния регистра упакованных данных с состоянием с плавающей запятой, используя два отдельных физических файла регистров согласно одному варианту осуществления изобретения. Так как эти два физических файла регистра совмещены, они логически проявляются для программного обеспечения, выполняющемуся на процессоре, как один логический файл регистров. Фиг. 6А показывает устройство 600 перехода, устройство 605 с плавающей запятой и устройство 610 упакованных данных. Устройство 605 с плавающей запятой аналогично устройству 135 с плавающей запятой на фиг. 1. Устройство 605 с плавающей запятой включает в себя набор регистров 615 с плавающей запятой, набор тэгов 620, регистр 625 состояния с плавающей запятой и устройство 630 ссылки на стек с плавающей запятой. В одном варианте осуществления устройство 605 с плавающей запятой включает в себя восемь регистров (обозначенных R0-R7). Каждый из этих восьми регистров имеет 80 бит и содержит поле знака, поле порядка и поле мантиссы. Устройство 630 ссылки на стек с плавающей запятой использует набор регистров 615 с плавающей запятой как стек. Регистр 155 состояния с плавающей запятой включает в себя поле 635 верхушки стека для сохранения указателя на верхушку стека. Как описано выше, указатель на верхушку стека идентифицирует, какой регистр в наборе регистров 615 с плавающей запятой в настоящее время является верхушкой стека с плавающей запятой. На фиг. 6А указатель на верхушку стека идентифицирует регистр 640 в физическом расположении R4 как ST(0) - верхушку стека.
В одном варианте осуществления набор тэгов 620 включает в себя восемь тэгов и сохраняется в одном регистре. Каждый тэг соответствует различному регистру с плавающей запятой и содержит два бита. Альтернативно, каждый из тэгов можно воспринимать как соответствующий различному регистру в логическом файле регистров, возникающем в результате совмещения. Как показано на фиг. 6А, тэг 645 соответствует регистру 640. Как описано выше, эти тэги используются устройством 605 с плавающей запятой, чтобы различать пустые и непустые расположения регистра. Как описано выше, вариант осуществления может использовать однобитовые тэги, идентифицирующие или пустое или непустое состояние, но заставлять эти одноразрядные тэги проявляться программному обеспечению как содержащие два бита, определяя соответствующие двухбитовые значения тэга, когда необходимы значения тэга. Конечно, альтернативный вариант осуществления может реализовывать двухбитовые тэги. В любом случае можно считать, что тэги идентифицируют два состояния: пусто, которое обозначено 11, и не пусто, обозначенное любым из 00, 01 или 10.
Устройство 610 упакованных данных используется для хранения упакованных данных и включает в себя набор регистров 650 упакованных данных (также называемый файлом регистров упакованных данных), регистр 655 состояния упакованных данных и устройство 660 упакованных данных с обращением, отличным от обращения к стеку. В одном варианте осуществления набор 650 регистров упакованных данных включает в себя восемь регистров. Каждый из этих восьми регистров соответствует различному регистру в наборе регистров 615 с плавающей запятой. Каждый из восьми упакованных регистров данных имеет 64 бита и отображается на 64-битовое поле мантиссы регистра с плавающей запятой, которому он соответствует. Устройство 660 упакованных данных с обращением, отличным от обращения к стеку, функционирует с регистром 650 упакованных данных как с фиксированным файлом регистров. Таким образом, команды упакованных данных явно обозначают, какой регистр в наборе регистров 650 упакованных данных должен использоваться.
Устройство перехода 600 совмещает регистр 650 упакованных данных на регистр 615 с плавающей запятой, копируя данные между этими двумя физическими файлами регистра. Таким образом, устройство 600 перехода вызывает физический регистр 615 с плавающей запятой и физический регистр 650 упакованных данных логически проявиться как одиночный логический файл регистров пользователю/программисту. Этим способом, он проявляется программному обеспечению, как будто только один логический файл регистров доступен для выполнения команд с плавающей запятой и упакованных данных. Устройство перехода 600 может быть реализовано, используя любое количество приемов, включая аппаратные средства и/или микрокод. Конечно, в альтернативных вариантах осуществления устройство перехода 600 может быть размещено где-нибудь на процессоре. Кроме того, в альтернативных вариантах осуществления устройство перехода 600 может быть немикрокодовым обработчиком события, хранимым вне процессора.
Устройство перехода 600 может быть выполнено, чтобы обеспечить полное или частичное совмещение. Если содержимое всех физических регистров с плавающей запятой копируется в упакованный файл регистров данных в течение переходов к режиму упакованных данных, физический файл регистров с плавающей запятой является полностью совмещенным с упакованным файлом регистров данных. Аналогично, если содержимое всех физических регистров упакованных данных скопировано в файл регистров с плавающей запятой в течение переходов к режиму с плавающей запятой, физический файл регистров упакованных данных является полностью совмещенным с физическим файлом регистров с плавающей запятой. Напротив, при частичном совмещении копируется содержимое только тех регистров, которые содержат "полезные" данные. Какие регистры содержат полезные данные, может быть определено на основании любого числа критериев. Например, частичное совмещение может быть выполнено, копируя в физический регистр упакованных данных данные, сохраненные только в тех физических регистрах с плавающей запятой, чьи соответствующие тэги указывают непустое состояние. Конечно, вариант осуществления может использовать тэги с плавающей запятой при выполнении команд упакованных данных или включать отдельные тэги упакованных данных для частичного совмещения (наложения) физических регистров упакованных данных на физические регистры с плавающей запятой. Альтернативно, те регистры упакованных данных и/или регистры с плавающей запятой, к которым было обращение (считывание и/или запись), могут рассматриваться как содержащие полезные данные. Тэги с плавающей запятой могут использоваться для этой цели вместо или в дополнение к индикации пустого или непустого (состояния). Альтернативно, дополнительные индикации могут быть включены для регистров с плавающей запятой и/или упакованных данных для записи, к каким регистрам было обращение. При выполнении частичного совмещения хорошие примеры программирования должны принимать, что те регистры, в которые данные не были скопированы во время перехода, должны рассматриваться как содержащие неопределенные значения.
Регистр 655 состояния упакованных данных включает в себя набор неочищенных полей 665 упакованных данных, поле 670 риска, поле режима 675, поле 680 состояния исключительной ситуации и EMMS поле 685. Каждое из неочищенных полей 665 упакованных данных соответствует различному одному из регистров 650 упакованных данных и используется для сохранения неочищенной индикации. Так как имеется соответствующая связь между регистрами 650 упакованных данных и регистрами 615 с плавающей запятой, каждая из неочищенных индикаций имеет соответствующую связь с различным одним из регистров 615 с плавающей запятой. Когда значение записано в один из регистров 650 упакованных данных, соответствующая неочищенная индикация этого регистра изменяется, чтобы указать неочищенное состояние. Когда устройство перехода 600 вызывает переход из устройства 610 упакованных данных к устройству 605 с плавающей запятой, единицы записываются в поля знака и порядка тех регистров 615 с плавающей запятой, чья соответствующая неочищенная индикация указывает неочищенное состояние. Таким образом может быть выполнен этап 430 на фиг. 4B.
Поле режима 675 используется для хранения индикации режима, которая идентифицирует, какой режим процессора в настоящее время действует - режим с плавающей запятой, в котором устройство 605 с плавающей запятой в настоящее время используется, или режим упакованных данных, в котором используется устройство 610 упакованных данных. Если процессор находится в режиме с плавающей запятой и принята команда упакованных данных, должен быть выполнен переход от режима с плавающей запятой к режиму упакованных данных. Напротив, если процессор находится в режиме упакованных данных, и принята команда с плавающей запятой, то должен выполниться переход от режима упакованных данных к режиму с плавающей запятой. Таким образом, после приема или команды упакованных данных или команды с плавающей запятой может быть опрошена индикация режима, чтобы определить, необходим ли переход. Если переход необходим, переход выполняется и соответственно индикация режима изменяется. Операция индикации режима будет далее описана со ссылкой на фиг. 7A-9.
Поле 680 состояния исключительных ситуаций используется для хранения индикации состояния исключительной ситуации. Индикация состояния исключительной ситуации используется во время выполнения команд упакованных данных для идентификации, имеются ли любые отложенные исключительные ситуации от выполнения предыдущих команд с плавающей запятой. В одном варианте осуществления, если индикация состояния исключительной ситуации указывает, что такие исключительные ситуации отложены, такие исключительные ситуации обслуживаются до перехода к режиму упакованных данных. В одном варианте осуществления индикации, используемые устройством 605 с плавающей запятой для этой цели, являются или закодированными, или непосредственно скопированными в поле состояния исключительной ситуации в качестве индикации состояния исключительной ситуации.
EMMS поле 685 используется для хранения EMMS индикации, которая указывает, была ли последняя выполненная команда упакованных данных EMMS командой. В одном варианте осуществления, когда EMMS команда выполнена, EMMS индикация изменяется на 1, чтобы указать, что последняя выполненная команда упакованных данных была EMMS командной. Напротив, когда выполнены все другие команды упакованных данных, EMMS индикация изменяется на нуль. Устройство 600 перехода опрашивает EMMS индикацию при переходе от режима упакованных данных к режиму с плавающей запятой, чтобы определить, была ли последняя команда упакованных данных EMMS командой. Если последняя выполненная команда упакованных данных была EMMS командой, устройство 600 перехода изменяет все тэги 620 на пустое состояние. Однако, если EMMS указывает, что последняя выполненная команда упакованных данных не была EMMS, устройство 600 перехода изменяет все тэги 620 на непустое состояние. Таким образом, тэги изменяются аналогичным способом, как на этапах 432 и 440 на фиг. 4B.
Поле 670 риска используется для хранения индикации риска, которая идентифицирует, является ли переход от режима с плавающей запятой к режиму упакованных данных рискованным. Если переход - рискованный, может быть сохранено время, если требуется переход обратно к устройству 605 с плавающей запятой. Операция индикации режима будет далее описана со ссылкой на фиг. 7A-9.
Фиг. 6B представляет собой блок-схему, иллюстрирующую в увеличенном масштабе часть файла с плавающей запятой с обращением, аналогичным обращению к стеку, из фиг. 6A, согласно вариантам осуществления изобретения. Фиг. 6B показывает устройство 630 с плавающей запятой с обращением, аналогичным обращению к стеку, содержащее устройство 690 модификатора тэгов для выборочного изменения тэгов в наборе тэгов 620. В варианте осуществления, показанном на фиг. 6В, каждый из набора тэгов 620 содержит только 1 бит для индикации - или пустой или непустой. Устройство модификатора 690 тэгов включает набор устройств 696 TOS корректировки и устройство 698 проверки/модификации. Каждое из устройств 696 TOS корректировки подсоединено к шинам 692 микроопераций для получения одной или более микроопераций в зависимости от реализации (например, может быть только одно устройство TOS корректировки, которое принимает только одну микрооперацию). По меньшей мере микрооперации для команд с плавающей запятой, которые требуют, чтобы тэги были изменены, принимаются устройствами TOS корректировки 696. Конечно, устройство 630 с плавающей запятой с обращением, аналогичным обращению к стеку, может быть реализовано так, что все или только релевантная часть каждой микрооперации принимается устройствами 696 TOS корректировки.
В ответ на получение микрооперации устройство TOS корректировки передает на устройство 698 проверки/модификации по меньшей мере: 1) адрес(а) тэга(ов) в наборе тэгов 620, идентифицированный микрооперацией; и 2) сигнал(ы), указывающие действия, которое нужно выполнить с этим(и) тэгом(ами) (например, изменить с 0 на 1, опросить). Так как опрос тэгов не является необходимым для понимания сущности изобретения, он не описан далее. Каждое из устройств 696 TOS корректировки также соединено с линиями 694 для получения текущего значения TOS и корректировки адреса(ов) тэга(ов) соответственно. Устройство 698 проверки/модификации подсоединено к каждому из тэгов 620 по меньшей мере линией записи. Например, устройство проверки/модификации 698 подсоединено к тэгу 654 линией записи. В ответ на получение адреса тэга и соответствующих сигналов, устройство 698 проверки/модификации выполняет требуемые проверки и/или модификации. В реализации, в которой множество микроопераций могут быть приняты одновременно, устройство 698 проверки/модификации также выполняет сравнения между микрооперациями, чтобы определить, изменяют ли они одни и те же тэги (например, допустим, что микрооперация 1 требует, чтобы тэг 1 был изменен на 1, в то время как микрооперация 2, которая была получена одновременно с микрооперацией 1, требует, чтобы тэг 1 был изменен на 0). Если один и тот же тэг изменяется, устройство 698 проверки/модификации определяет, какая микрооперация должна быть выполнена последней, и изменяет тэг согласно этой микрооперации. В приведенном выше примере, принимая, что микрооперация 2 должна быть выполнена после микрооперации 1, устройство 698 проверки/модификации изменит тэг 1, чтобы он указывал 0.
Например, если выполнялась операция с плавающей запятой, что требует изменения тэга (например, тэг 645) в пустое состояние, устройство TOS корректировки будет принимать текущее значение TOS и микрооперацию по линиям 692 микрооперации, идентифицирующим тэг. Устройство TOS корректировки определит адрес тэга (например, тэг 645) и передаст этот адрес, также как и сигналы, указывающие, что тэг должен быть изменен на пустое состояние, на устройство 698 проверки/модификации.
В ответ устройство 698 проверки/модификации изменит тэг 645 на пустое состояние, передавая 0 по линии записи, соединенной с тэгом 645. В одном варианте осуществления, поскольку команды с плавающей запятой могут быть выполнены так, что не все тэги должны измениться одновременно, устройство 690 модификатора тэга реализовано так, что оно не может изменять все тэги одновременно. Чтобы избежать усложнения схемы, может быть выполнено глобальное изменение тэгов в ответ на переход к режиму с плавающей запятой, используя этот известный механизм. В этом отношении, если устройство 600 перехода выполнено в микрокоде, набор команд микрокода будет заставлять устройство декодирования выдавать несколько известных микроопераций для изменения восьми тэгов. Таким образом, в ответ на выполнение перехода к режиму упакованных данных, в то время как EMMS индикация указывает, что последней выполненной командой упакованных данных была EMMS команда, устройство декодирования обратится к устройству 600 перехода и выдаст несколько известных микроопераций. В ответ на эти микрооперации устройство 690 модификатора тэга изменит соответствующие тэги на пустое состояние. Напротив, в ответ на выполнение перехода к режиму упакованных данных, в то время как EMMS индикация указывает, что EMMS команда не была последней выполненной командой упакованных данных, устройство декодирования обратится к устройству 00 перехода и выдаст несколько известных микроопераций, которые заставят устройство 690 модификатора тэга изменять каждый из тэгов на непустое состояние. В таком варианте осуществления глобальное изменение тэгов может потребовать приблизительно 4-8 циклов синхронизации.
В то время как один вариант осуществления был описан для изменения всех тэгов в ответ на переход к режиму упакованных данных, альтернативные варианты осуществления могут использовать любое число механизмов. Например, изменение всех тэгов в пустое или непустое состояние может быть завершено в одном цикле синхронизации включением новой микрооперации и реализации устройства 690 модификатора тэга так, что оно могло глобально изменять тэги, восприимчивые к новой микрооперации. В этом варианте осуществления устройство 600 перехода может быть реализовано так, чтобы заставить устройство декодирования выдать эту одиночную микрооперацию (вместо нескольких отдельных микроопераций), чтобы изменить все тэги в пустое состояние или непустое состояние. В качестве другого примера устройство декодирования может быть подсоединено к тэгам 620 и включать дополнительные аппаратные средства для изменения всех тэгов 620 в ответ на прием EMMS команды.
Как описано выше, хотя набор тэгов 620 описан как имеющий одноразрядные тэги, набор тэгов 620 может быть реализован так, чтобы проявляться, как будто имеющим два бита для каждого тэга. Альтернативный вариант осуществления может реализовывать два бита для каждого тэга включением дополнительных кодированных или незакодированных линий для индикации различных состояний (например, 00, 01, 10, 11), к которым тэги должны быть изменены.
Фиг. 7A, 7B, 7C, 8 и 9 иллюстрируют способ в соответствии с одним вариантом осуществления изобретения для выполнения команд упакованных данных на наборе регистров, которые являются совмещенными с набором регистров с плавающей запятой способом, который является невидимым операционной системе, который поддерживает квалифицированную практику программирования и который может быть осуществлен используя схему аппаратного обеспечения фиг. 6A. Эта функциональная диаграмма аналогична функциональной диаграмме, описанной со ссылкой на фиг. 4A и 4B. Со ссылками на фиг. 4A и B было описано много альтернативных вариантов осуществления, в которых этапы были изменены, перемещены и/или удалены. Должно быть понятно, что этапы, описанные со ссылкой на фиг. 7A, 7B, 7C, 8 и 9, которые являются аналогичными этапам, выполняемым на фиг. 4A и 4B, могут по меньшей мере выполняться, используя такие варианты. Функциональная диаграмма начинается на этапе 700. После этапа 700 осуществляется переход на этап 702.
Как показано на этапе 702, к набору битов обращаются как к команде, и осуществляется переход на этап 704. Этот набор битов включает код операции, который идентифицирует операцию(и), которые должны быть выполнены командой. Таким образом, этап 702 аналогичен этапу 402 на фиг. 4A.
На этапе 704 определяется, является ли код операции допустимым. Если код операции не является допустимым, осуществляется переход на этап 706. Иначе осуществляется переход на этап 708. Этап 704 аналогичен этапу 404 на фиг. 4A.
Как показано на этапе 706, формируется исключительная ситуация о недопустимости кода операции, и выполняется соответствующий обработчик события. Таким образом, этап 706 аналогичен этапу 406 на фиг. 4A.
На этапе 708 определяется, какой тип команды получен. Если команда не является ни командой с плавающей запятой, ни командой упакованных данных, осуществляется переход на этап 710. Однако, если команда является командой с плавающей запятой, осуществляется переход на этап 712. Напротив, если команда является командой упакованных данных, осуществляется переход на этап 714. Таким образом, этап 708 аналогичен этапу 408 на фиг. 4A.
Как показано на этапе 710, процессор выполняет команду. Так как этот этап не является необходимым для понимания изобретения, он далее не описан. Этап 710 аналогичен этапу 410 на фиг. 4A.
Как показано, на этапе 712 определяется, является ли ЕМ индикация равной 1 (согласно упомянутому соглашению по программному обеспечению, если устройство с плавающей запятой должно быть эмулировано) и равна ли TS индикация 1 (согласно упомянутому соглашению по программному обеспечению, если частичный контекстный переключатель был задействован). Если ЕМ индикация и/или TS индикация равна 1, осуществляется переход на этап 716. Иначе осуществляется переход на этап 720. Таким образом, этап 712 аналогичен этапу 412 на фиг. 4A.
На этапе 716 формируется исключительная ситуация о недоступности устройства, и выполняется соответствующий обработчик события. Таким образом, этап 716 аналогичен этапу 416 на фиг. 4А. Как описано выше, этот обработчик события может быть реализован для использования ЕМ и TS индикации, чтобы определить, эмулировать ли команду с плавающей запятой и/или выполнять ли частичный контекстный переключатель.
На этапе 714 определяется, равна ли ЕМ индикация 1. Таким образом, этап 714 аналогичен этапу 414 на фиг. 4А. В результате, если определено на этапе 714, что ЕМ индикация равна 1, осуществляется переход на этапе 706, а не на этап 716. Иначе осуществляется переход на этап 718.
Как описано выше, на этапе 706 формируется исключительная ситуация о недопустимости кода операции, и выполняется соответствующий обработчик события. Отклоняя предпринятое выполнение команды упакованных данных, в то время как ЕМ = 1, к исключительной ситуации о недопустимости кода операции, вариант осуществления является невидимым операционной системе, как описано выше со ссылкой на этап 406 на фиг. 4A.
В то время как один вариант осуществления был описан для обработки ЕМ индикации в способе, который является невидимым операционной системе, альтернативные варианты осуществления могут использовать другие способы. Например, альтернативный вариант осуществления может также формировать исключительную ситуацию о недоступности устройства, другое существующее событие или новое событие в ответ на предпринятое выполнение команды упакованных данных, в то время как ЕМ индикация равна 1. В качестве другого примера альтернативный вариант осуществления может игнорировать ЕМ индикацию при выполнении команд упакованных данных.
Как показано, на этапе 718 определяется, равна ли TS индикация 1 (согласно упомянутому соглашению по программному обеспечению, если был задействован частичный контекстный переключатель). Если TS индикация равна 1, осуществляется переход на этап 716. Иначе осуществляется переход на этап 722. Таким образом, этап 718 аналогичен этапу 418 на фиг. 4A.
Как описано выше, на этапе 716 формируется исключительная ситуация о недоступности устройства, и выполняется соответствующий обработчик события. Этап 716 аналогичен этапу 418 на фиг. 4A. Так как этап 714 отклоняет ситуацию, когда ЕМ индикация равна 1, к исключительной ситуации о недопустимости кода операции, ЕМ индикация должна быть равна 0, а TS индикация должна быть равна 1. Так как TS равен 1, обработчик события заставляет процессор функционировать, как описано выше со ссылкой на частичные контекстные переключатели (сохраняет содержимое устройства с плавающей запятой и восстанавливает правильное состояние с плавающей запятой при необходимости) и заставляет процессор продолжать выполнение, возобновляя выполнение команды, полученной на этапе 702. Так как состояние упакованных данных является совмещенным с состоянием с плавающей запятой, этот обработчик события работает как для состояния с плавающей запятой, так и для упакованных данных. В результате, этот способ остается невидимым операционной системой. Конечно, альтернативные варианты осуществления могут выполнять этот обработчик события любым числом приемов.
В то время как один вариант осуществления был описан для обработки TS индикация в способе, который является операционной системой невидимым, альтернативные варианты осуществления могут использовать другие способы. Например, альтернативный вариант осуществления может не выполнять TS индикацию. Такой альтернативный вариант осуществления не был бы совместим с операционными системами, которые используют TS индикацию, чтобы выполнить частичное контекстное переключение. Однако такой альтернативный вариант осуществления был бы совместим с известными операционными системами, которые не поддерживают частичное переключение контекста, используя TS индикацию. В другом примере предпринятое выполнение команды упакованных данных, в то время как TS индикация равна 1, может быть отклонена к новому обработчику события или к существующему обработчику события, который изменился. Этот обработчик события может быть реализован так, чтобы выполнять любое действие, которое считается соответствующим в ответ на эту ситуацию. Например, в варианте осуществления, в котором состояние упакованных данных не является совмещенным с состоянием с плавающей запятой, этот обработчик события может сохранять состояние упакованных данных и/или состояние с плавающей запятой.
Как описано выше, если во время выполнения команды с плавающей запятой сформирована некоторая численная ошибка, такие ошибки задерживаются до предпринятого выполнения следующей команды с плавающей запятой, чье выполнение может быть прервано для их обслуживания. Как описано выше, на этапах 420 и 422 на фиг. 4 определяется, имеются ли любые такие отложенные ошибки, которые могут обслуживаться. Аналогично этапу 420 на фиг. 4А на этапе 720 определяется, имеются ли любые такие отложенные ошибки, которые могут обслуживаться. Если имеются любые такие отложенные ошибки осуществляется переход от этапа 720 к этапу 724. Однако, если на этапе 720 определено, что не имеется никаких таких отложенных ошибок, осуществляется переход на этап 726. Напротив, определение того, имеются ли любые отложенные ошибки из предыдущей команды с плавающей запятой во время предпринятого выполнения команды упакованных данных, выполняется в другом этапе, который будет далее описан позже. В результате, этап 722 отличается от этапа 422.
На этапе 724 формируется событие ошибки задержки с плавающей запятой. Таким образом, этап 724 аналогичен этапу 424 на фиг. 4A. Как описано выше со ссылкой на этап 424 фиг. 4A, это событие может обрабатываться или как внутреннее, или как внешнее событие и обслуживаться соответственно.
Как показано, на этапе 726 определяется, указывает ли индикация режима на то, что процессор работает в режиме с плавающей запятой. Таким образом, этап 726 отличается от этапа 426 фиг. 4B. Если процессор не работает в режиме с плавающей запятой, процессор будет должен быть переведен из режима упакованных данных в режим с плавающей запятой, чтобы выполнить команду с плавающей запятой. Таким образом, если процессор не работает в режиме с плавающей запятой, осуществляется переход на этап 728. Иначе осуществляется переход на этап 732.
На этапе 728 процессор переводится из режима упакованных данных в режим с плавающей запятой, и осуществляется переход на этап 730. Этап 728 выполняется устройством 600 перехода по фиг. 6А и будет далее описан со ссылкой на фиг. 9.
Как показано на этапе 730, команда, полученная на этапе 702, перезапускается, выполняя микроперезапуск ("микрорестарт"). Так как в одном варианте осуществления выполняется этап 728, используя микрокод, и команда микроперезапускается, нет необходимости выполнения обработчиков события операционной системы.
В результате, выполнение текущей задачи может быть продолжено без любого внешнего процессору предпринимаемого действия, нет необходимости выполнения немикрокодовых обработчиков события, таких как обработчики события операционной системы. Таким образом, процессор может переходить от режима упакованных данных к режиму с плавающей запятой способом, который является невидимым для программного обеспечения, включая операционную систему. Таким образом, этот вариант осуществления совместим с известными операционными системами. Альтернативные варианты осуществления могли бы быть реализованы как совместимые. Например, дополнительное событие могло быть включено в процессор, и дополнительный обработчик события может быть добавлен в операционную систему, чтобы выполнить этот переход.
Как показано на этапе 732, выполняется команда с плавающей запятой. Этап 732 аналогичен этапу 426 на фиг. 4В. Чтобы оставаться невидимой операционной системе, один вариант осуществления также изменяет тэги по мере необходимости, сообщает о любых численных ошибках, которые могут теперь обслуживаться, и осуществляет любую другую задержку числовых ошибок. Как описано выше, изменение тэгов позволяет этому варианту осуществления оставаться невидимым операционной системой для любых таких способов операционной системы, которые сохраняют содержимое только тех регистров с плавающей запятой, чьи соответствующие тэги указывает непустое состояние. Однако, как описано выше, альтернативные варианты осуществления могут быть реализованы, чтобы быть совместимыми с меньшим количеством некоторых способов операционной системы. Например, если известная операционная система не использует тэги, процессор, который не реализует тэги, все еще совместим с такой операционной системой. Кроме того, в изобретении нет необходимости, чтобы исключительные ситуации чисел с плавающей запятой были задержаны, и таким образом, альтернативные варианты осуществления, в которых это не реализовано, остаются в объеме раскрытия настоящего изобретения.
Как показано, на этапе 722 определяется, указывает ли индикация режима на то, что процессор находится в режиме упакованных данных. Таким образом, этап 722 отличается от этапа 422 на фиг. 4A. Этап 722 выполняется, чтобы определить, находится ли процессор в соответствующем режиме, чтобы выполнить команду упакованных данных. Если процессор не находится в режиме упакованных данных, процессор должен быть переведен из режима с плавающей запятой в режим упакованных данных, чтобы выполнить команду упакованных данных. Таким образом, если процессор не находится в режиме упакованных данных, осуществляется переход на этап 734. Иначе осуществляется переход на этап 738.
На этапе 734 процессор переводится из режима с плавающей запятой в режим упакованных данных, и осуществляется переход на этап 736. Этап 734 выполняется устройством 600 перехода на фиг. 6A и будет далее описан со ссылкой на фиг. 8. Как показано на этапе 736, команда, полученная на этапе 702, перезапускается, выполняя микрорестарт. Таким образом, этап 736 аналогичен этапу 730.
На этапе 738 определяется, является ли команда упакованных данных EMMS командой. Если команда упакованных данных является EMMS командой, осуществляется переход на этап 740. Иначе осуществляется переход на этап 742. Так как команды упакованных данных выполнены на отдельном устройстве (то есть, устройстве упакованных данных), это является более эффективным для сохранения индикации (например, EMMS индикация), которая идентифицирует то, что должно быть выполнено на этапе 728, когда осуществляется переход обратно к режиму с плавающей запятой, а не фактическое выполнение некоторых операций (например, изменять тэги в пустое состояние в ответ на выполнение EMMS команды, и изменять тэги на непустое состояние в ответ на выполнение любых других команд упакованных данных). Использование EMMS индикации, так же как других индикаций, будет описано со ссылкой на этап перехода от режима упакованных данных в режим с плавающей запятой, который далее описан на фиг. 9.
Как показано на этапе 740, EMMS индикация изменена, чтобы указать, что последней командой упакованных данных была EMMS команда. После завершения этапа 740, процессор освобождается, чтобы выполнить следующую команду (команда логически следующая после команды, полученной на этапе 702).
Как показано на этапе 742, команда упакованных данных выполняется без формирования любых численных исключительных ситуаций. Таким образом, этап 742 аналогичен этапу 434 на фиг. 4В, за исключением того, что указатель на верхушку стека не изменен. Как описано выше, альтернативные варианты осуществления, которые не полностью невидимы для операционной системы, могут быть реализованы так, чтобы любые дополнительные обработчики события были включены в операционную систему, или известные обработчики события изменены для обслуживания ошибки. Если любые события памяти сформированы в результате попытки выполнить команду упакованных данных, выполнение прерывается, и событие обслуживается.
Как показано на этапе 744, индикация риска изменяется, чтобы указать, что переход от режима с плавающей запятой к режиму упакованных данных больше не является рискованным. Из этапа 744 осуществляется переход на этап 746. Операция индикации риска будет далее описана со ссылкой на фиг. 8.
Как показано, на этапе 746 определяется, заставляет ли команда упакованных данных процессор осуществлять запись в любые совмещенные регистры. Если - да, осуществляется переход на этап 748. Иначе осуществляется переход на этап 750. Таким образом, этап 746 является аналогичным этапу 736 по фиг. 4В.
На этапе 748 соответствующие неочищенные индикации совмещенных регистров изменяются в неочищенное состояние, и осуществляется переход на этап 750. Эти неочищенные индикации используются на этапе 728, когда осуществляется переход от режима упакованных данных в режим с плавающей запятой. Как описано выше, эти неочищенные индикации используются, чтобы идентифицировать те регистры с плавающей запятой, чьи поля знака и порядка должны быть заполнены единицами. В то время как в одном варианте "1" записаны в поля знака и порядка, альтернативные варианты осуществления могут использовать любое значение, представляющее NAN (не число) или бесконечность. Этапы 746 и 748 не требовались бы в альтернативном варианте осуществления, в котором поля знака и порядка не были изменены.
Как показано на этапе 750, EMMS индикация изменяется, чтобы указать, что последняя команда упакованных данных не была EMMS командой. После завершения этапа 750, система освобождается, чтобы выполнить следующую команду. Конечно, вариант осуществления, который не использовал EMMS команду, не будет требовать этапы 738, 740 и этап 750.
Таким образом, описаны способ и устройство для выполнения команд упакованных данных, которые являются совместимыми с известными операционными системами (такими как MS-DOS, Windows среды корпорации Microsoft Corporation, Redmond, Вашингтон) и которые поддерживают профессиональные приемы программирования. Так как состояние упакованных данных является совмещенным с состоянием с плавающей запятой, состояние упакованных данных будет сохраняться и восстановлено известными операционными системами, как будто это было состояние с плавающей запятой. Кроме того, так как события, сформированные выполнением команд упакованных данных, пригодны к обслуживанию известными обработчиками события операционной системы, эти обработчики события не будут изменяться, и новые обработчики события не будут добавлены. В результате, процессор совместим сверху вниз, и обновление не требует затрат, необходимых для разработки или изменения операционной системы.
Изменения этого варианта осуществления, некоторые из которых были описаны, могут быть полностью или частично совместимыми с такими операционными системами и/или поддерживать профессиональные приемы программирования. Например, альтернативный вариант осуществления изобретения может перемещать некоторые этапы в отличные расположения в последовательности операций. Другие варианты осуществления изобретения могут изменять или удалять один или большее количество этапов. Если некоторые этапы удалены на фиг. 7A, 7B и/или 7C, некоторые аппаратные средства не требовались бы на фиг. 6A. Например, если EMMS команда не используется, EMMS индикация не требуется. Конечно, изобретение могло бы быть полезно для любого количества архитектур системы и не ограничивается описанной здесь архитектурой.
Кроме того, в то время как способ и устройство были описаны для совмещения двух физических файлов регистра, альтернативные варианты осуществления могут совместить любое число физических файлов регистра, чтобы выполнять любое число различных типов команд. К тому же, в то время как этот вариант осуществления был описан со ссылкой на физический файл регистров стека для выполнения команды с плавающей запятой и физический двумерный файл регистров для выполнения команд упакованных данных, способ может использоваться для совмещения по меньшей мере одного физического файла регистров стека и по меньшей мере одного физического двумерного файла регистров, независимо от типа команд, которые должны быть выполнены на этих файлах регистра.
Кроме того, в то время как способ и устройство были описаны для выполнения команд с плавающей запятой и упакованных данных, альтернативный вариант осуществления может быть выполнен, чтобы выполнить любое число различных типов команд. Например, как описано выше, команды упакованных данных могут быть выполнены, чтобы заставить процессор выполнять целочисленные упакованные операции и/или операции упакованные с плавающей запятой. В качестве другого примера альтернативный вариант осуществления может совмещать физические файлы регистра для выполнения скалярных команд с плавающей запятой и скалярных целочисленных команд, вместо или в дополнение к командам упакованных данных. В качестве другого примера, вместо совмещения (наложения) команды упакованных данных на регистры с плавающей запятой альтернативные варианты осуществления могут совмещать (накладывать) команды упакованных данных на целочисленные регистры. В качестве другого примера альтернативный вариант осуществления может совмещать выполнение скаляра с плавающей запятой, скалярного целого числа и упакованной команды (целое число и/или с плавающей запятой) на одиночном логическом файле регистров. Таким образом, описанное может использоваться для порождения логического проявления программному обеспечению, что одиночный логический файл регистров доступен для выполнения команд, которые функционируют на различных типах данных.
Фиг. 8 является функциональной диаграммой, иллюстрирующей способ для выполнения этапа 734 на фиг. 7C согласно одному варианту осуществления изобретения. Как описано выше, на этапе 754 процессор переходит от режима с плавающей запятой в режим упакованных данных. Из этапа 722 осуществляется переход на этап 800.
Как показано, на этапе 800 определяется, имеются ли любые отложенные ошибки от предыдущей команды с плавающей запятой. Если да, то осуществляется переход на этап 724. Иначе осуществляется переход на этап 804. Таким образом, этап 800 аналогичен этапу 720 на фиг. 7 и этапу 422 на фиг. 4A.
Как описано выше, на этапе 724 формируется отложенная исключительная ситуация ошибки с плавающей запятой, и выполняется соответствующий обработчик события. Как описано выше со ссылкой на этап 424 на фиг. 4A, это событие может обрабатываться или как внутреннее или как внешнее событие и обслуживаться соответственно. В альтернативном варианте осуществления такие ошибки остаются задержанными во время выполнения команд упакованных данных.
Как показано на этапе 804, данные, сохраненные в полях мантиссы регистров с плавающей запятой, копируются в регистры упакованных данных. При таком выполнении с данными, которые были сохранены в регистрах с плавающей запятой, можно работать как с упакованными данными. Если реализовано полное совмещение, то данные, сохраненные в полях мантиссы всех регистров с плавающей запятой, копируются в соответствующие регистры упакованных данных. Напротив, если реализовано частичное совмещение, то вариант осуществления может быть выполнен так, что данные, сохраненные в полях мантиссы только тех регистров с плавающей запятой, чьи соответствующие тэги указывают на непустое состояние, копируются в соответствующие регистры упакованных данных. Альтернативные варианты осуществления, которые не будут позволять данным, сохраненным в регистрах с плавающей запятой, использоваться как упакованные данные, не нуждаются в обработке на этапе 804. После этапа 804 осуществляется переход на этап 806.
На этапе 806 EMMS индикация изменяется, чтобы указать, что последняя команда упакованных данных не была EMMS командой, и осуществляется переход на этап 808. Этот этап выполняется, чтобы инициализировать режим упакованных данных.
Как показано на этапе 808, каждая из неочищенных индикаций изменяется, чтобы указать очищенное состояние, и осуществляется переход на этап 810. Этапы 806 и 808 выполняются, чтобы инициализировать режим упакованных данных.
Как показано на этапе 810, индикация риска изменяется, чтобы указать, что переход от плавающей запятой к упакованным данным является рискованным. Хотя данные, сохраненные в регистрах с плавающей запятой, были скопированы в регистры упакованных данных на этапе 804, состояние устройства с плавающей запятой не было изменено. Таким образом, состояние с плавающей запятой все еще является текущим (например, данные, сохраненные в полях мантиссы регистров с плавающей запятой, эквивалентны данным, сохраненным в регистрах упакованных данных; тэги не были изменены; и указатель на верхушку стека не был изменен). Если команда упакованных данных выполняется последовательно, то данные, сохраненные в регистрах упакованных данных, будут изменены, и состояние с плавающей запятой больше не будет текущим. В результате, переход от режима упакованных данных в режим с плавающей запятой потребует, чтобы состояние с плавающей запятой модифицировалось (например, данные, сохраненные в регистрах упакованных данных, должны быть скопированы в поля мантиссы регистров с плавающей запятой; указатель на верхушку стека должен быть изменен на 0, и тэги должны быть изменены на пустое состояние). Однако, если выполнение команды с плавающей запятой предпринято до выполнения любых команд упакованных данных (это может быть, если событие формируется до выполнения команды упакованных данных, которая вызвала переход от режима с плавающей запятой к режиму упакованных данных, - например, если во время предпринятого выполнения команды упакованных данных произошел сбой памяти), состояние с плавающей запятой не должно модифицироваться, поскольку оно все еще остается текущим. Избегая этого модифицирования, накладные расходы на переход из режима упакованных данных обратно к плавающей запятой значительно уменьшаются. Чтобы воспользоваться преимуществом этого факта, на этом этапе индикация риска изменяется, чтобы указать, что переход от устройства с плавающей запятой к устройству упакованных данных - рискованный, поскольку состояние с плавающей запятой все еще остается текущим. Если впоследствии выполняется команда упакованных данных, индикация риска изменяется, чтобы указать, что переход - больше не рискованный, как описано выше со ссылкой на этап 744 на фиг. 7. Использование индикации риска далее описано со ссылкой на фиг. 9. В то время как был описан один вариант осуществления, в котором используется индикация риска, альтернативные варианты осуществления могут избегать выполнения такой индикации риска.
На этапе 812, индикация режима изменяется, чтобы указать, что процессор находится теперь в режиме упакованных данных. Из этапа 812 осуществляется переход на этап 736.
На фиг. 9 приведена функциональная диаграмма, иллюстрирующая способ выполнения этапа 728 на фиг. 7, согласно одному варианту осуществления изобретения. Как описано выше, процессор переходит от режима упакованных данных в режим с плавающей запятой на этапе 728. Из этапа 726 осуществляется переход на этап 900.
На этапе 900 определяется, указывает ли индикация риска, что переход к режиму упакованных данных все еще рискованный. Как описано выше, индикация риска может использоваться, чтобы уменьшить накладные расходы на переход от режима упакованных данных в режим с плавающей запятой. Если на этапе 900 определено, что переход от плавающей запятой к упакованным данным - рискованный, то этапы 902 - 912 пропускают, переходя непосредственно к этапу 914, и накладные расходы на переход уменьшаются. Иначе осуществляется переход на этап 902.
Как показано, на этапе 902 определяется, указывает ли EMMS индикация, что последней командой упакованных данных была EMMS команда. Если да, осуществляется переход на этап 904. В противном случае осуществляется переход на этап 906. Как описано выше, факт, что команды упакованных данных выполнены на отдельном устройстве (то есть на устройстве упакованных данных), делает более эффективным сохранение индикации (например, EMMS индикации), которые идентифицируют то, что должно быть выполнено, когда выполняется переход обратно к режиму с плавающей запятой, чем выполнять некоторые операции (например, изменение тэгов). Таким образом, вместо изменения тэгов в ответ на EMMS команду изменяется EMMS индикация. Затем, при выполнении перехода обратно к режиму с
плавающей запятой, тэги изменяются соответственно, как показано.
На этапе 904 все тэги изменяются на пустое состояние, и осуществляется переход на этап 908. Таким образом, тэги изменяются аналогичным способом, как на этапе 432 на фиг. 4В.
На этапе 906 все тэги изменяются на непустое состояние, и осуществляется переход на этап 908. Таким образом, тэги изменяются аналогичным образом, как на этапе 440 по фиг. 4В.
Как показано на этапе 908, содержимое регистров упакованных данных копируется в поля мантиссы регистров с плавающей запятой, и осуществляется переход на этап 910. Таким образом, данные, сохраненные в регистрах упакованных данных, могут использоваться как данные с плавающей запятой. Кроме того, так как известные операционные системы уже сохраняют состояние с плавающей запятой при выполнении многозадачного режима, состояние упакованных данных сохраняется и восстанавливается из различных контекстных структур, как будто оно является состоянием с плавающей запятой. Таким образом, физические регистры упакованных данных являются совмещенными с физическими регистрами с плавающей запятой, и процессор логически проявляется как имеющий один логический файл регистров. В результате, вариант осуществления невидим для программного обеспечения, включая операционную систему. Если выполнено полное совмещение, то данные, сохраненные во всех регистрах упакованных данных, копируются в поля мантиссы соответствующих регистров с плавающей запятой. Напротив, если выполнено частичное совмещение, вариант осуществления может быть реализован так, что данные, сохраненные только в тех регистрах упакованных данных, к которым было обращение, копируются в поля мантиссы подходящих соответствующих регистров с плавающей запятой.
Как показано на этапе 910, верхушка стека является совмещенной со значением инициализации. В одном варианте осуществления это значение равно нулю. В альтернативном варианте осуществления выполнение любой команды упакованных данных устанавливает указатель на верхушку стека в положение, равное значению инициализации. От этапа 910 осуществляется переход к этапу 912.
Как показано на этапе 912, единицы сохраняются в полях знака и порядка тех регистров с плавающей запятой, чьи соответствующие неочищенные индикации находятся в неочищенном состоянии. Таким образом, выполняется этап 438 на фиг. 4В. От этапа 912 осуществляется переход на этап 914.
На этапе 914 индикация режима изменяется, чтобы указать, что процессор работает в режиме с плавающей запятой, и осуществляется переход на этап 736. Таким образом, выполняется переход от режима упакованных данных к режиму с плавающей запятой.
Фиг. 10 является блок-схемой, иллюстрирующей поток данных через устройство совмещения состояния упакованных данных с состоянием с плавающей запятой, используя один физический файл регистров, согласно другому варианту осуществления изобретения. Устройство, показанное на фиг. 10, может использоваться как устройство 560 набора команд по фиг. 5. В одном варианте осуществления устройство на фиг. 10 по меньшей мере способно к выполнению набора команд 580. Фиг. 10 показывает устройство декодирования 1002, устройство 1004 переименования, устройство 1006 изъятия, устройство выдачи 1008, устройство выполнения 1010, набор регистров 1012 состояния и память ROM 1014 микрокода.
Устройство декодирования 1002 используется для декодирования команд, принятых процессором, в сигналы управления и/или точки входа в микрокод. Эти точки входа в микрокод идентифицируют последовательности микроопераций (также называемые как "uops"), которые передаются декодирующим устройством 1002 к различным устройствам в процессоре. В то время как некоторые микрооперации могут быть сохранены в устройстве 1002 декодирования, в одном варианте осуществления большинство микроопераций сохранено в памяти ROM 1014 микрокода. В этом варианте осуществления устройство декодирования 1002 передает точки входа микрокода к памяти ROM 1014 микрокода, и она в ответ перелает обратно к устройству 1002 декодирования требуемую микрооперацию(и).
Большинство команд, полученных устройством 1002 декодирования, содержит один или большее количество операндов (любые данные, расположение регистра или расположение в памяти), над которым должна выполняться операция(и) команд. Те операнды, которые идентифицируют регистры, передаются к устройству 1004 переименования.
Устройство 1004 переименования и устройство изъятия 1006 используются, чтобы выполнить переименование регистра. Способ переименования регистра хорошо известен и выполняется, чтобы избежать конфликтов памяти, следующих из различных команд, пытающихся использовать ограниченное число ячеек памяти, таких как регистры. Конфликт памяти, скажем, происходит, когда такие команды влияют друг на друга, даже если конфликтующие команды в противном случае независимы. Конфликты памяти могут быть устранены посредством дополнительных регистров (называемых буферными регистрами), которые используются, чтобы восстановить соответствие между регистрами и значениями. Чтобы выполнить переименование регистра, процессор обычно назначает один из буферных регистров для каждого нового полученного значения: то есть для каждой команды, которая производит запись в регистр. Команда, идентифицирующая первоначальный регистр, - с целью считывания его значения - получает взамен значение в назначенном буферном регистре. Таким образом, аппаратные средства переименовывают первоначальный регистр, идентифицирующий команды, чтобы идентифицировать буферный регистр и правильное значение. Тот же самый идентификатор регистра в нескольких различных командах может иметь доступ к различным аппаратным регистрам в зависимости от расположений ссылок регистра относительно назначений регистра для дальнейшего описания переименования регистра, см. Johnson, Mike Superscalar Micro Processor Design, 1991 PTR Prentice, Inc. , New Jersey; "Flag Renaming and Flag Mask Within Alias Table", Ser N 08/204,521, Col-well, и др., "Integer and Floating Point Register Alias Table Within Processor Device", Ser N 08/129,678, Clift и др.; и "Partial Width Stalls Within Register Alias Table", Ser N 08/174,841, Colwell и др. Когда команда успешно завершила выполнение (без вызова любых событий, которые не задерживаются), команды, распределенные буферным регистрам, "изымаются" - значения перемещаются из буферных регистров в первоначальные регистры, идентифицированные в команде. Альтернативные варианты осуществления могут реализовывать любое количество способов для устранения конфликтов памяти, такие как взаимоблокировка, частичное переименование и т.д.
Устройство 1006 изъятия включает в себя набор буферных регистров 1020, набор FP/PD регистров 1022 и набор целочисленных регистров 1024. Набор буферных регистров 1020 представляет дополнительные регистры, используемые для переименования регистра. В то время как в одном варианте осуществления набор буферных регистров 1020 содержит сорок регистров, альтернативные варианты осуществления могут иметь любое число регистров. В этом варианте осуществления набор буферных регистров 1020 используется как буфер переупорядочения.
В одном варианте осуществления FP/PD регистр 1022 и целочисленный регистр 1024 являются видимыми программному обеспечению: то есть они являются регистрами, которые указываются в командах, и таким образом они видны программному обеспечению, что они являются единственными регистрами для выполнения данных с плавающей запятой, упакованных данных и целочисленных данных. Напротив, буферные регистры 1020 невидимы для программного обеспечения. Таким образом, FP/PD регистры 1022 являются единственным физическим файлом регистров, который проявляется по отношению к программному обеспечению как один логический файл регистров. В одном варианте осуществления набор FP/PD регистров 1022, и набор целочисленных регистров 1024 каждый содержит восемь регистров, чтобы остаться совместимым с существующим программным обеспечением архитектуры Intel. Однако альтернативные варианты осуществления могут реализовывать любое число регистров.
Устройство 1004 переименования включает устройство 1030 отображения FP/PD, таблицу 1032 отображения FP/PD, набор тэгов 1034, устройство 1040 отображения целого числа и таблицу 1042 отображения целого числа. Когда операнд принимается устройством 1004 переименования, то определяется, является ли операнд операндом с плавающей запятой, операндом упакованных данных или целочисленным операндом.
Целочисленные операнды принимаются устройством 1040 отображения целого числа. Устройство 1040 отображения целого числа управляет таблицей 1042 отображения целого числа. В одном варианте осуществления таблица 1042 отображения целого числа содержит то же самое число входов, что и у целочисленных регистров 1024. Каждый из входов в таблице 1042 отображения целого числа соответствует различному одному целочисленному регистру 1024; на фиг. 10 вход 1050 соответствует целочисленному регистру 1052. Когда получена команда, которая заставит процессор осуществить запись в целочисленный регистр (например, целочисленный регистр 1052), устройство 1040 отображения целого, числа назначает один из буферных регистров 1020, сохраняя указатель в соответствующем входе целочисленного регистра в таблице 1042 отображения целого числа (например, вход 1050), идентифицируя доступный регистр в наборе буферных регистров 1020 (например, буферный регистр 1054). Данные записываются в выбранный буферный регистр (например, буферный регистр 1054). Когда выполнение команды, которая формировала операнд, завершено без любых прерываний (без любых принимаемых событий), устройство изъятия 1006 "передает" данные, копируя их из выбранного буферного регистра (например, буферного регистра 1054) в соответствующий целочисленный регистр (например, целочисленный регистр 1052) и заставляет устройство 1040 отображения целого числа модифицировать содержимое входа (например, вход 1050), чтобы указать, что данные сохранены в соответствующем целочисленном регистре входа.
Когда принята команда, которая заставляет процессор считывать целочисленный регистр, процессор обращается к содержимому соответствующего входа целочисленного регистра в таблице 1042 отображения целого числа (например, вход 1050), используя устройство 1030 отображения FP/PD. Если вход содержит указатель на буферный регистр (например, буферный регистр 1054), процессор считывает содержимое этого буферного регистра. Однако, если содержимое этого входа указывает, что данные сохранены в соответствующем целочисленном регистре входа (например, целочисленный регистр 1052), процессор считывает содержимое соответствующего целочисленного регистра входа. Таким образом, целочисленный регистр 1024 реализован как фиксированный файл регистров в этом варианте осуществления изобретения.
Устройство 1030 отображения FP/PD управляет таблицей 1032 отображения FP/PD и тэгами 1034. Как описано выше, каждый из этих тэгов может быть реализован, используя любое число битов. Аналогично устройству 1040 отображения целого числа, таблица 1032 отображения FP/PD содержит то же самое число входов, что и у регистров в FP/PD регистрах 1022. Каждый из входов таблицы 1032 отображения FP/PD соответствует различному FP/PD регистру 1022. Операнды с плавающей запятой и упакованные данных принимаются устройством 1030 отображения FP/PD, отображаются на буферные регистры 1020 и изымаются к регистрам 1022 FP/PD. Таким образом, состояние с плавающей запятой и состояние упакованных данных являются совмещенными (наложенными) на один файл регистров, видимый пользователю. Так как известные операционные системы реализованы, чтобы заставить процессор сохранять состояние с плавающей запятой при многозадачном режиме, те же самые операционные системы будут заставлять процессор сохранять любое состояние упакованных данных, которое является совмещенным с регистрами с плавающей запятой.
В одном варианте осуществления операнды упакованных данных обработаны способом, аналогичным целочисленным операндам - регистры упакованных данных реализованы как фиксированный файл регистров. Таким образом, когда команда упакованных данных принята, что заставит процессор осуществить запись в регистр FP/PD, устройство 1030 отображения FP/PD назначает один буферный регистр 1020 посредством сохранения указателя в соответствующем входе FP/PD регистра в таблице 1032 отображения FP/PD идентификации, указывая доступный регистр в наборе буферных регистров 1020. Данные записываются в выбранный буферный регистр. Когда выполнение команды, которая формировала операнд, завершено без любых прерываний (без любых принимаемых событий), устройство изъятия 1006 "передает" данные, копируя их из выбранного буферного регистра в соответствующий регистр FP/PD (регистры FP/PD, которые соответствуют входу в таблицу 1032 отображения FP/PD), и заставляет устройство 1030 отображения FP/PD модифицировать вход в таблицу 1032 отображения FP/PD, чтобы указать, что данные сохранены в соответствующем регистре FP/PD входа.
В то время как регистры реализованы как фиксированный файл регистров при выполнении команд упакованных данных, один вариант осуществления изобретения реализует регистры как файл регистров с обращением, аналогичным обращению к стеку, при выполнении команд с плавающей запятой способом, который является совместимым с известным программным обеспечением архитектуры Intel (включая операционные системы). В результате устройство 1030 отображения FP/PD должно быть способно использовать таблицу 1032 отображения FP/PD и как фиксированный файл регистров для операндов упакованных данных, и как стек для операндов с плавающей запятой. Поэтому устройство 1030 отображения FP/PD включает регистр 1070 состояния с плавающей запятой, имеющий поле 1072 верхушки стека. Поле 1072 верхушки стека используется для сохранения индикации верхушки стека, идентифицирующей вход в таблицу 1032 отображения FP/PD, который представляет собой регистр, являющийся в настоящее время верхушкой стека с плавающей запятой. Конечно, альтернативные варианты осуществления могут использовать регистры в качестве двумерного файла регистров при выполнении команд с плавающей запятой.
Когда команда с плавающей запятой принята, это заставит процессор осуществлять запись в регистр FP/PD, устройство 1030 отображения FP/PD изменяет указатель на верхушку стека и назначает один буферный регистр 1020 посредством сохранения в верхушке стека соответствующего входа регистра в таблице 1032 отображения FP/PD указателя, идентифицирующего доступный регистр в наборе буферных регистров 1020. Данные записываются в выбранный буферный регистр. Когда выполнение команды, которая формировала операнд, завершено без любых прерываний (без любых принимаемых событий), устройство изъятия 1006 передает данные, посредством копирования их выбранного буферного регистра в соответствующий регистр FP/PD (регистры FP/PD, которые соответствуют входу в таблицу 1032 отображения FP/PD), и заставляет устройство 1030 отображения FP/PD модифицировать вход в таблицу 1032 отображения FP/PD, чтобы указать, что данные сохранены в соответствующем регистре FP/PD входа.
Когда команда с плавающей запятой принята, это заставит процессор считывать регистр FP/PD, процессор обращается к содержимому соответствующего входа регистра верхушки стека в таблице 1032 отображения FP/PD и соответственно изменяет стек. Если указатель на буферный регистр сохранен в этом входе, процессор считывает содержимое этого буферного регистра. Однако, если содержимое входа указывает, что данные сохранены в соответствующем FP/PD входе в FP/PD регистре 1022, процессор считывает содержимое этого регистра FP/PD.
Таким образом, так как устройство 1030 отображения FP/PD отображает операнды с плавающей запятой на файл регистров с обращением, аналогичным обращению к стеку, входы в таблицу 1032 отображения FP/PD должны быть доступны относительно верхушки стека. Напротив, так как устройство 1030 отображения FP/PD отображает операнды упакованных данных на фиксированный файл регистров, входы в таблицу 1032 отображения FP/PD должны быть доступны относительно регистра R0. Чтобы заставлять процессор обращаться к входам в таблице отображения FP/PD относительно регистра R0, указатель на верхушку стека должен быть изменен, чтобы указывать регистр R0. Следовательно, указатель на верхушку стека должен быть изменен, чтобы указывать регистр R0, хотя процессор выполняет команды упакованных данных. Это может быть реализовано, изменяя указатель на верхушку стека, чтобы указать регистр R0 во время переходов от режима с плавающей запятой в режим упакованных данных и не изменять указатель на верхушку стека во время выполнения команд упакованных данных. Таким образом, та же самая схема, используемая для отображения стека с плавающей запятой, может использоваться, чтобы отобразить фиксированный упакованный файл регистров данных. В результате сложность схемы уменьшается и площадь кристалла сохраняется в варианте осуществления, описанном со ссылкой на фиг. 6A. В то время как был описан вариант осуществления, в котором одна и та же самая схема используется для отображения операндов и упакованных данных и с плавающей запятой, альтернативные варианты осуществления могут использовать другую схему.
Независимо от типа выполняемой команды в одном варианте осуществления назначение и освобождение буферных регистров управляется одинаковым образом. Устройство изъятия 1006 включает регистр 1060 состояния, имеющий поле назначения 1062 и поле изъятия 1064. Поле назначения 1062 сохраняет указатель назначения, идентифицирующий следующий буферный регистр, который должен использоваться. Когда или устройство 1030 отображения FP/PD, или устройство 1040 отображения целого числа запрашивает регистр, текущий указатель назначения сохранен в соответствующей таблице отображения (то есть устройстве 1030 отображения FP/PD или таблицу 1042 отображения целого числа) и указатель назначения увеличивается. Кроме того, устройство 1004 переименования передает к устройству изъятия 1006 сигналы, указывающие, является ли команда командой упакованных данных и находится ли процессор в режиме упакованных данных.
В назначенном буферном регистре устройство изъятия 1006 сохраняет индикацию готовности в поле 1082 готовности. Индикация готовности первоначально изменяется, чтобы указать, что буферный регистр не готов для изъятия. Однако, когда данные записываются в поле 1080 данных из буферного регистра, индикация готовности буферного регистра изменяется, чтобы указать, что буферный регистр готов для изъятия.
Поле 1064 изъятия регистра 1060 состояния сохраняет указатель изъятия, идентифицирующий следующий буферный регистр, который нужно изъять. Когда индикация готовности этого буферного регистра изменяется в состояние готовности, устройство 1006 изъятия должно определить, могут ли данные в этом буферном регистре быть переданы. Как дополнительно описано ниже, один вариант осуществления устройства 1006 изъятия не передает данные, если любые исключительные ситуации были сформированы (например, исключительная ситуация о недоступности устройства, исключительная ситуация ошибки задержки с плавающей запятой, исключительная ситуация о недопустимости кода операции и т.д. ), или если требуются любые переходы между режимами упакованных данных и с плавающей запятой. Если данные могут быть переданы, данные копируются в соответствующий FP/PD или целочисленный регистр, и указатель изъятия увеличивается для указания на следующий буферный регистр. В то время как изъятие и указатели назначения были описаны как сохраняющиеся в регистре управления, альтернативный вариант осуществления может сохранять эти указатели, так же как и любую другую информацию (например, EMMS индикацию, индикацию режима и т.д.), описанную здесь, в некоторую форму элемента последовательности, такую как набор триггеров.
В то время как был описан вариант осуществления, в котором устройство изъятия 1006 включает три отдельных набора регистров и данные передаются от буферных регистров регистрам FP/PD или целочисленным регистрам, альтернативный вариант осуществления может быть реализован, чтобы включать любое число различных наборов регистров. Например, один альтернативный вариант осуществления может включать одиночный набор регистров. В этом варианте осуществления каждый регистр в этом наборе регистров может включать индикацию, идентифицирующую, если данные, сохраненные в нем, были переданы.
В одном варианте осуществления процессор находится или в режиме с плавающей запятой, или в режиме упакованных данных. Если процессор не находится в режиме упакованных данных, процессор не может правильно выполнять любые команды упакованных данных, и наоборот. В результате, до передачи данных, сохраненных в буферном регистре, устройство изъятия 1006 определяет, являются ли данные упакованными данными и находится ли процессор в режиме упакованных данных. Если данные являются упакованными данными и процессор не находится в режиме упакованных данных, вызывается устройство перехода 1036, содержащееся в микрокоде ROM 1014, чтобы выполнить переход к режиму упакованных данных. В одном варианте осуществления определяется, находится ли процессор в режиме упакованных данных посредством определения, изменен ли указатель на верхушку стека на значение инициализации (например, чтобы указывать регистр R0), и все тэги 1034 находятся в непустом состоянии.
Имеется ряд способов для того, чтобы заставить процессор опросить указатель на верхушку стека и тэги 1034, чтобы определить, находится ли процессор в режиме упакованных данных. Например, как описано выше, устройство 1002 декодирования обращается к микрооперациям из памяти ROM 1014 микрокода. Эти микрооперации включают в себя закодированное поле для идентификации соответствующего отображения, которое нужно выполнить устройством 1030 отображения FP/PD (например, увеличить значение указателя на верхушку стека, уменьшить значение указателя на верхушку стека, и т.д.). В одном варианте осуществления по меньшей мере один дополнительный закодированный битовый шаблон (называемый "упакованный битовый шаблон данных") включается для идентификации отображения для команд упакованных данных. Таким образом, когда устройство 1002 декодирования принимает команду упакованных данных и обращается к памяти ROM 1014 микрокода, по меньшей мере одна из микроопераций, переданная на декодирующее устройство 1002, включает в себя упакованный битовый шаблон данных.
После принятия микрооперации, содержащей упакованный битовый шаблон данных, устройство 1030 отображения FP/PD: 1) определяет состояние тэгов 1034 и указатель на верхушку стека; 2) передает к устройству изъятия 1006 сигнал(ы), указывающие, требуется ли переход к режиму упакованных данных (в одном варианте осуществления передаются режим процессора и тип команды). В ответ устройство изъятия 1006 сохраняет в любых буферных регистрах, назначенных командой, индикацию перехода в поле 1084 перехода (в одном варианте осуществления индикация перехода включает первый бит, указывающий режим процессора, и второй бит, указывающий тип команды). Таким образом, если команда является командой упакованных данных и процессор не находится в режиме упакованных данных, индикация режима соответствующих буферных регистров изменяется, чтобы указать что требуется переход. Иначе индикация режима изменяется, чтобы указать, что переход не требуется. Когда индикация готовности буферного регистра, идентифицированного указателем изъятия, изменяется в состояние готовности, устройство изъятия 1006 проверяет индикацию перехода. Если индикация перехода указывает, что переход не требуется, и если данные могут быть в противном случае изъяты (например, не имеется событий, которые должны быть обслужены), данные изымаются. Напротив, если индикация перехода указывает, что переход требуется, устройство изъятия 1006 передает точку входа микрокода для устройства перехода 1036 к памяти ROM 1014 микрокола. В ответ память ROM 1014 микрокода передает необходимые микрооперации для перехода процессору к упакованным данным.
Таким образом, встраивание перехода в режим упакованных данных обусловливает лишь незначительные усложнения. Конечно, альтернативный вариант осуществления может выполнять эти функциональные возможности любым способом, используя:
1) наличие возможности устройства 1002 декодирования передавать специальные сигналы после принятия команды упакованных данных, которые заставляют устройство 1004 переименования опрашивать тэги и указатель на верхушку стека; 2) добавление битов ко всем микрооперациям, чтобы указать, должны ли тэги и верхушка стека быть опрошены; 3) наличие возможности устройству 1030 отображения FP/PD опрашивать тэги и указатель на верхушку стека каждый раз, когда буферный регистр назначается; 4) наличие возможности устройству изъятия 1006 указывать устройству 1030 отображения FP/PD, когда упакованный элемент данных готов быть передан, и наличие возможности устройству 1030 отображения FP/PD вызывать устройство перехода 1036, если процессор не находится в режиме упакованных данных, и т.д. В то время как в одном варианте осуществления определяется, находится ли процессор в режиме упакованных данных, на основании указателя на верхушку стека и тэгов 1034, альтернативные варианты осуществления могут использовать любой способ, включая индикацию режима, как описано выше.
Как описано выше, устройство перехода 1036 используется для перевода процессора с режима с плавающей запятой на режим упакованных данных. Устройство перехода 1036 заставляет процессор изменить указатель на верхушку стека на значение инициализации и изменить все тэги 1034 на непустое состояние. Таким образом, устройство 1004 переименования является инициализированным для выполнения команд упакованных данных. После завершения перехода команда, которая вызвала переход от режима с плавающей запятой к режиму упакованных данных, микроперезапускается. В результате, не требуются немикрокодовые обработчики события (включая обработчики события операционной системы), и вариант осуществления является невидимым операционной системе. В то время как устройство перехода 1036 показано размещенным в памяти ROM 1014 микрокода, альтернативные варианты осуществления может размещать устройство перехода 1036 где-нибудь в процессоре. В другом альтернативном варианте осуществления устройство 1036 перехода может быть реализовано, чтобы выполнить переходы от режима с плавающей запятой в режим упакованных данных. Во время этого перехода устройство 1036 перехода будет сохранять текущий указатель на верхушку стека в области памяти и изменять указатель на верхушку стека на значение инициализации. Когда устройство перехода 1030 снова вызывается для перехода обратно к режиму с плавающей запятой, устройство 1036 перехода восстановит предыдущий указатель на верхушку стека. Кроме того, в альтернативных вариантах осуществления устройство 1036 перехода может быть реализовано в аппаратных средствах или как немикрокодовый обработчик события, хранимый вне процессора.
Как описано выше со ссылкой на один вариант осуществления, каждая группа команд упакованных данных должна завершиться EMMS командой. В ответ на выполнение EMMS команды устройство 1010 выполнения принуждает устройство 1004 переименования изменить тэги 1034 в пустое состояние. Таким образом, после выполнения EMMS команды процессор находится в режиме с плавающей запятой: то есть все тэги 1034 находятся в пустом состоянии, и указатель на верхушку стека находится в состоянии инициализации (как описано выше, указатель на верхушку стека был изменен на значение инициализации при переходе к режиму упакованных данных и не был изменен во время выполнения команд упакованных данных). В результате, устройство перехода не требуется для выполнения перехода от режима упакованных данных в режим с плавающей запятой. В этом заключается отличие от устройства перехода, описанного со ссылкой на фиг. 6А, которое должно вызваться для перехода процессора назад и вперед между режимами с плавающей запятой и упакованных данных. Кроме того, так как используется одиночный совмещенный файл регистров для состояний с плавающей запятой и упакованных данных, этот переход не требуется для копирования данных между двумя отдельными файлами регистра. В результате, сложность схемы уменьшается и площадь кристалла в процессоре сохраняется.
В других альтернативных вариантах осуществления изменение тэгов и указателя на верхушку стека могло бы полностью или частично выполняться после выполнения команд упакованных данных. Например, потребности в устройстве перехода можно было бы избежать: 1) вынуждая выполнять каждую команду упакованных данных, которая является не EMMS командой, чтобы изменить указатель на верхушку стека на значение инициализации и изменить тэги на непустое состояние; и 2) вынуждая выполнять EMMS команды, чтобы изменить тэги в пустое состояние. В другом альтернативном варианте осуществления EMMS команда не выполняется, но эмулируется, используя команды с плавающей запятой, как описано ниже со ссылкой на фиг. 14.
Устройство 1008 выдачи представляет собой буфер для сохранения команд и их операндов. Устройство 1008 выдачи может быть реализовано как последовательность мест резервирования, центрального окна команды или их гибрида. При использовании мест резервирования, каждое из функциональных устройств (например, арифметико-логические устройства) имеет собственный буфер для сохранения команд и информации, идентифицирующей их соответствующие операнды. Напротив, при использовании центрального окна команды, используется центральный буфер, общий для всех функциональных устройств для сохранения команд и информации, идентифицирующей их соответствующие операнды. Соответствующие операнды команды могут быть в нескольких различных формах в зависимости от того, какая информация является доступной. Если фактические данные недоступны, то соответствующие операнды команды идентифицируют любые регистры в наборе регистров 1022 FP/PD, наборе регистров 1024 целого числа или наборе буферных регистров 1020, в зависимости от типа данных и были ли данные переданы. Когда действительные данные становятся доступными, тогда эти данные сохраняются в буфере. В одном варианте осуществления устройство выдачи 1008 также принимает информацию из устройства 1004 переименования. Однако эта информация не необходима для понимания изобретения.
Устройство выдачи 1008 выдает команды на устройство выполнения 1010, когда необходимая информация приобретена. Устройство 1010 выполнения выполняет команды. Устройство 1010 выполнения передает любую информацию операнда, которая должна быть сохранена, к устройству изъятия 1006 для сохранения, как описано выше. В одном варианте осуществления, так как команды могут быть задержаны в устройстве выдачи 1008 из-за недостатка информации операнда, устройство 1010 выполнения также передает любую информацию операнда к устройству выдачи 1008. Таким образом, избегают любой дополнительной задержки, которая может быть вызвана посредством посылки информации операнда к устройству изъятия 1006 и затем к устройству выдачи 1008. Устройство 1010 выполнения подсоединено к регистру 1012 состояния. Регистры 1012 состояния сохраняют управляющую информацию для использования устройством выполнения 1010. Такая управляющая информация может включать ЕМ индикацию и TS индикацию, как описано выше. Устройство 1010 выполнения включает устройство выравнивания данных 1090 (также называемое устройством преобразования загрузки/сохранения) для выравнивания различных типов данных, к которым обращаются из устройства изъятия 1006. Работа устройства выравнивания данных будет далее описана со ссылкой на фиг. 12 и 13.
Изменение тэгов 1034 может быть реализовано использованием любого числа различных механизмов. Например, фиг. 10 показывает устройство 1030 отображения FP/PD также содержащим устройство модификации тэга 1092 для изменения тэгов. Устройство модификации тэга 1092 может быть реализовано любым количеством способов, включая те, которые описаны со ссылкой на фиг. 6В.
Например, в одном варианте осуществления, так как команды с плавающей запятой могут быть выполнены так, что не все тэги должны измениться одновременно, устройство модификации тэга 1092 реализовано таким образом, что оно не может изменять все тэги одновременно (один такой вариант осуществления был предварительно описан со ссылкой на фиг. 6В). Чтобы избежать усложнения схемы, глобальное изменение тэгов в ответ на переход к состоянию упакованных данных или в ответ на выполнение EMMS команды может быть реализовано, используя этот известный механизм. В этом отношении набор микрокодовых команд, представляемых EMMS устройством 1094, может быть сохранен в памяти ROM 1014 микрокода для выполнения EMMS команды. Микрокодовые команды в EMMS устройстве 1094 и в устройстве перехода 1036 заставят устройство 1002 декодирования выдавать несколько известных микроопераций для изменения каждого из восьми тэгов. Таким образом, в ответ на прием EMMS команды устройство 1002 декодирования обратится к EMMS устройству 1094 и выдаст несколько известных микроопераций. В ответ на каждую из этих микроопераций устройство модификации тэга 1092 изменит соответствующие тэги на пустое состояние. Напротив, в ответ на обращение к устройству перехода 1036, устройство 1002 декодирования выдаст несколько известных микроопераций, которые заставят устройство модификации тэга 1092 изменять каждый из тэгов на непустое состояние. В таком варианте осуществления глобальное изменение тэгов может требовать приблизительно 4-8 циклов синхронизации.
В то время как один вариант осуществления был описан для изменения всех тэгов в ответ на переход или EMMS команду, альтернативные варианты осуществления могут использовать любое число механизмов. Например, изменение всех тэгов в пустое или непустое состояние может быть завершено в одном цикле синхронизации включением новой микрооперации и реализацией устройства модификации тэга 1092 так, чтобы оно могло глобально изменять тэги (один такой вариант осуществления для устройства модификации тэга 1092 описан со ссылкой на фиг. 6В) в ответ на новую микрооперацию. В этом варианте осуществления EMMS устройство 1094 реализовано так, чтобы заставить устройство 1002 декодирования выдать эту одну микрооперацию (вместо нескольких отдельных микроопераций), чтобы изменить все тэги в пустое состояние. Напротив, устройство перехода 1036 реализовано так, чтобы заставить устройство 1002 декодирования выдавать эту одну микрооперацию (вместо нескольких известных отдельных микроопераций), чтобы изменить все тэги на непустое состояние. В качестве другого примера альтернативный вариант осуществления может включать шину, которая подсоединяет устройство 1010 выполнения к тэгам 1034 и устройству изъятия 1006. Этот альтернативный вариант осуществления может быть реализован так, что в ответ на EMMS команду процессор преобразуется в последовательную форму (это может выполняться устройством 1004 переименования), сигналы пересылаются по шине, чтобы заставить измениться тэги (это может выполняться устройством выполнения 1010), и процессор снова преобразуется в последовательную форму (это может выполняться устройством 1004 переименования). Такой вариант осуществления может требовать приблизительно 10-20 циклов синхронизации для изменения всех тэгов. Напротив, этот альтернативный вариант осуществления может быть реализован так, что пред- и/или постпреобразование в последовательную форму выполняется другим устройством или не является необходимым. В качестве другого примера устройство 1002 декодирования может быть подсоединено к тэгам 1034 и включать дополнительные аппаратных средства для изменения всех тэгов 1034 в ответ на прием EMMS команды.
Таким образом, вариант осуществления, показанный на фиг. 10, использует одиночный набор регистров для выполнения команд с плавающей запятой и упакованных данных, вместо отдельных устройств с плавающей запятой и упакованных данных, как описано выше со ссылкой на фиг. 6A. Дополнительно, вариант осуществления по фиг. 6A требует отдельной схемы для доступа к регистрам с плавающей запятой как к стеку и регистру упакованных данных, так и к фиксированному файлу регистров, в то время как устройство 1030 отображения FP/PD использует ту же самую схему. Кроме того, в отличие от устройства перехода, описанного со ссылкой на фиг. 6A, которое должно быть вызвано для перехода процессора назад и вперед между режимами с плавающей запятой и упакованных данных, устройство перехода, описанное со ссылкой на фиг. 10, только требуется для перехода процессора от режима с плавающей запятой в режим упакованных данных. К тому же, так как одиночный совмещенный файл регистров используется для состояний с плавающей запятой и упакованных данных, этот переход не требуется, чтобы копировать данные между двумя отдельными файлами регистра. В результате, вариант осуществления, показанный на фиг. 10, требует менее сложных схем и сохраняет площадь кристалла процессора.
Как описано выше, в то время как описывается вариант осуществления, который включает команды для выполнения операций с плавающей запятой и упакованных данных, альтернативный вариант осуществления может реализовывать различные наборы команд, которые заставляют процессор выполнять операции с различными типами данных. Например, один набор команд может заставить процессор выполнить скалярные операции (с плавающей запятой и/или целочисленные), а другой набор команд может заставить процессор выполнить упакованные операции (с плавающей запятой и/или целочисленные). В качестве другого примера, один набор команд может заставить процессор выполнить операции с плавающей запятой (скалярные и/или упакованные), а другой набор команд может заставить процессор выполнить целочисленные операции (скаляр и/или упакованный). В качестве другого примера, одиночный совмещенный файл регистров может использоваться как файл регистров с обращением, аналогичным обращению к стеку, так и как двумерный файл регистров. К тому же, в то время как описан вариант осуществления, в котором выполнено полное совмещение, альтернативные варианты осуществления, имеющие одиночный физический файл регистров, могут быть реализованы, чтобы функционировать как частично совмещенные. Это потребует некоторого механизма (например, таблицы) для слежения за тем, какие данные должны быть сохранены в одиночном совмещенном физическом файле регистров.
Фиг. 11A, 11B, и 11C иллюстрируют способ в соответствии с другим вариантом осуществления изобретения для выполнения команд упакованных данных и с плавающей запятой на одиночном совмещенном файле регистров способом, который является невидимым операционной системе, который поддерживает квалифицированную практику программирования и который может быть осуществлен использованием аппаратной схемы фиг. 10. Эта функциональная диаграмма аналогична функциональной диаграмме, описанной со ссылкой на фиг. 4A - В и фиг. 7A-C, 9 и 10. Со ссылкой на эти предыдущие функциональные диаграммы было описано множество альтернативных вариантов осуществления, в которых этапы были изменены, перемещены и/или удалены. Должно быть понятно, что этапы, описанные со ссылкой на фиг. 11A - C, которые аналогичны этапам, выполняемым в предварительно описанных функциональных диаграммах, могут выполняться, используя такие альтернативные варианты осуществления. Функциональные диаграммы начинаются на этапе 1100. Из этапа 1100 осуществляется переход на этап 1102.
Как показано на этапе 1102, к набору битов обращаются как к команде и осуществляется переход на этап 1104. Этот набор битов включает код операции, который идентифицирует операцию(и) для выполнения командой. Таким образом, этап 1102 аналогичен этапу 402 на фиг. 4A.
В одном варианте осуществления следующие этапы выполняются в этапе декодирования конвейера.
На этапе 1104 определяется, является ли код операции допустимым. Если код операции недопустим, осуществляется переход на этап 1106. Иначе осуществляется переход на этап 1108. Этап 1104 аналогичен этапу 404 на фиг. 4.
На этапе 1106 вставляется одна или большее количество микроопераций, сообщающих о событии, указывая, что должна быть сформирована исключительная ситуация о недопустимости кода операции. Микрооперации, сообщающие о событии, используются, чтобы избежать обслуживания ошибок до стадии(й) изъятия конвейера. Если команда является микрооперацией, сообщающей о событии, она проходит через стадию(и) декодирования, стадию(и) переименования регистров и стадию(и) выполнения. Однако, когда микрооперация, сообщающая о событии, принята в стадии(ях) изъятия, состояние буферных регистров не передается, и формируется соответствующее событие. Микрооперации, сообщающие о событии, вставляются до или вместо команды, которая вызывает событие. Использование микроопераций далее описано со ссылкой на "Method and Apparatus for Signaling on Occurence of an Event in a Processor", Ser. N 08/203, 790, Darrell D. Boggs и др. Из этапа 1106 осуществляется переход на этап 1108.
На этапе 1108 определяется, какой тип команды был принят. Если команда не является ни командой с плавающей запятой, ни командой упакованных данных, осуществляется переход на этап 1110. Таким образом, если одна или большее количество микроопераций, сообщающих о событии, были вставлены на этапе 1106, осуществляется переход на этап 1110. Однако, если команда является командой с плавающей запятой, осуществляется переход на этап 1112. Напротив, если команда является командой упакованных данных, осуществляется переход на этап 1114. Таким образом, этап 1108 аналогичен этапу 408 на фиг. 4A.
Как показано на этапе 1110, процессор выполняет команду. Если на этапе 1106 одна или более микроопераций были вставлены, что указывает, что должна быть сформирована исключительная ситуация о недопустимости кода операции, микрооперации проходят через стадию(и) декодирования, стадию(и) переименования регистров и стадию(и) выполнения. Однако, когда микрооперация(и), сообщающая(ие) о событии, достигает(ют) стадии(й) изъятия, состояние буферных регистров не передается и формируется исключительная ситуация о недопустимости кода операции. Как описано выше со ссылкой на этап 215 по фиг. 2, этот обработчик события может быть реализован, чтобы заставить процессор отображать сообщение, выполнение аварийного прекращения работы текущей задачи и продолжать выполнять другие задачи. Конечно, альтернативные варианты осуществления могут выполнять этот обработчик любым способом, которые были предварительно описаны. Так как выполнение других команд не является необходимым для понимания изобретения, они далее не описаны.
Как показано, на этапе 1112 определяется, является ли ЕМ индикация равной 1 (согласно упомянутому соглашению по программному обеспечению, если устройство с плавающей запятой было эмулировано) и является ли TS индикация равной 1 (согласно упомянутому соглашению по программному обеспечению, если частичный контекстный переключатель был выполнен). Если ЕМ индикация и/или TS индикация равна 1, осуществляется переход на этап 1116. Иначе осуществляется переход на этап 1120. Таким образом, этап 1112 аналогичен этапу 412 на фиг. 4A.
На этапе 1116 вставляется одно или большее количество микроопераций, сообщающих о событии, чтобы указать, что должна быть сформирована исключительная ситуация о недоступности устройства. Из этапа 1116 осуществляется переход на этап 1120.
Как показано на этапах 1114 и 1120, выполняется переименование регистра. Из этапа 1120 осуществляется переход на этап 1122. Напротив, из этапа 1114 осуществляется переход на этап 1134. В одном варианте осуществления этапы 1114 и 1120 выполняются в стадии(ях) переименования конвейера.
В одном варианте осуществления выполняются следующие этапы в стадии(ях) выполнения конвейера.
Как показано на этапе 1122, выполняется команда с плавающей запятой. Этап 1122 аналогичен этапу 426 на фиг. 4B. Чтобы оставаться невидимой операционной системе, один вариант осуществления также изменяет тэги по мере необходимости, сообщает о любых численных ошибках, которые могут теперь обслуживаться, и задерживает любую другую задержку численных ошибок. Как описано выше, изменение тэгов позволяет этому варианту осуществления оставаться невидимым операционной системой для любых таких способов операционной системы, которые сохраняют содержимое только тех регистров с плавающей запятой, чьи соответствующие тэги указывают непустое состояние. Однако альтернативные варианты осуществления могут быть реализованы, чтобы быть совместимыми с некоторыми способами операционной системы. Например, если известная операционная система не использует тэги, процессор, который не реализует тэги, все еще является совместимым с такой операционной системой. Кроме того, для изобретения не является необходимым, чтобы исключительные ситуации чисел с плавающей запятой, были задержаны, и таким образом, альтернативные варианты осуществления, которые этого не предусматривают, находятся в объеме изобретения. Из этапа 1122 осуществляется переход на этап 1124.
На этапе 1134 определяется, является ли команда упакованных данных EMMS командой. Таким образом, этап 1134 аналогичен этапу 430 на фиг. 4В. Если команда упакованных данных является EMMS командой, осуществляется переход на этап 1136. Иначе осуществляется переход на этап 1138. Как описано выше, EMMS команда используется для изменения тэгов с плавающей запятой в состояние инициализации, и должна быть выполнена после выполнения любых команд упакованных данных и/или до выполнения любой команды с плавающей запятой для перехода процессора к режиму с плавающей запятой.
Как показано на этапе 1136, все тэги изменены в пустое состояние. Таким образом, тэги были инициализированы и подготовлены к выполнению команд с плавающей запятой. После завершения этапа 1136 осуществляется переход на этап 1144. В варианте осуществления, в котором EMMS команда не выполнена,
этап 1134 и 1136 будет отсутствовать и переход осуществлялся бы от этапа 1114 на этап 1138.
Как показано на этапе 1138, выполняется команда упакованных данных. Во время этого этапа единицы сохраняются в полях знака и порядка любых регистров FP или любых буферных регистров, выступающих в качестве FP/PD регистров, в которые записаны упакованные данные. Таким образом, этап 1138 аналогичен этапам 434, 436 и 438 на фиг. 4В. Такое выполнение поддерживает квалифицированные приемы программирования посредством соответствующего разделения команд с плавающей запятой и упакованных данных. Однако, как описано выше, альтернативные варианты осуществления могут избегать выполнять эту особенность. В то время как в одном варианте "1" записаны в поля знака и порядка, альтернативные варианты осуществления могут использовать любое значение, представляющее NAN (не число) или бесконечность. К тому же, этот этап выполняется без формирования любых числовых исключительных ситуаций. Если любые события памяти сформированы в результате попытки выполнить команду упакованных данных, выполнение прерывается и событие обслуживается. Из этапа 1138 осуществляется переход на этап 1144.
В одном варианте осуществления следующие этапы выполняются в стадии(ях) изъятия конвейера.
На этапе 1124 определяется, является ли команда микрооперацией, сообщающей о событии, указывая на исключительную ситуацию о недоступности устройства. Если - да, то было определено на этапе 1112, что также какая-либо или обе TS и ЕМ индикации были равны 1. Таким образом, если команда является микрооперацией, сообщающей о событии, указывая на исключительную ситуацию о недоступности устройства, осуществляется переход на этап 1126. Иначе осуществляется переход на этап 1128. Таким образом, исключительная ситуация о недоступности устройства может быть включена в процессор, который использует переименование регистра.
На этапе 1126 формируется исключительная ситуация о недоступности устройства, и выполняется соответствующий обработчик события. Таким образом, этап 1126 аналогичен этапу 416 на фиг. 4A. Как описано выше, этот обработчик события может быть реализован, чтобы использовать ЕМ и TS индикацию, чтобы определить, нужно ли эмулировать команды с плавающей запятой и/или выполнялся ли частичный контекстный переключатель. Как также описано выше, использование ЕМ и TS индикаций является соглашением по программному обеспечению и может, следовательно, использоваться для других целей.
Как показано, на этапе 1144 определяется, равна ли ЕМ индикация 1. Таким образом, этап 1144 аналогичен этапу 414 на фиг. 4A. Если на этапе 1144 определено, что ЕМ индикация равна 1, осуществляется переход на этап 1146, а не на этап 1126. Иначе осуществляется переход на этап 1148.
На этапе 1146 формируется исключительная ситуация о недопустимости кода операции, и соответствующий обработчик события выполняется. Это является той же самой исключительной ситуацией о недопустимости кода операции, которая была описана со ссылкой на этап 1110 на фиг. 11A. Формирование исключительной ситуации о недопустимости кода операции аналогично исключительной ситуации о недопустимости кода операции, сформированной на этапе 406 на фиг. 4A. Как описано выше со ссылкой на этап 215 на фиг. 2, обработчик события может быть реализован, чтобы заставить процессор отображать сообщение, выполнять аварийное прекращение работы текущей задачи и продолжать выполнять другие задачи. Конечно, альтернативные варианты осуществления могут выполнять этот обработчик любым количеством приемов, которые были описаны выше. Отклоняя предпринятое выполнение команды упакованных данных, в то время как ЕМ равен 1, к исключительной ситуации о недопустимости кода операции, вариант осуществления остается невидимым операционной системой.
В то время как вариант осуществления был описан для обработки ЕМ индикации в способе, который является невидимым операционной системой, альтернативные варианты осуществления могут использовать другие способы. Например, альтернативный вариант осуществления может также формировать исключительную ситуацию о недоступности устройства, другое существующее событие или новое событие в ответ на предпринятое выполнение команды упакованных данных, в то время как ЕМ индикация равна 1. В качестве другого примера альтернативный вариант осуществления может игнорировать ЕМ индикацию при выполнении команд упакованных данных.
Как показано на этапе 1148 определяется, равна ли TS индикация 1 (согласно упомянутому соглашению по программному обеспечению, если частичный контекстный переключатель выполнялся). Если частичный контекстный переключатель выполнялся, осуществляется переход на этап 1126. Иначе осуществляется переход на этап 1150.
Как описано выше, на этапе 1126 формируется исключительная ситуация о недоступности устройства, и выполняется соответствующий обработчик события. Таким образом, в ответ на это событие соответствующий обработчик события может быть реализован, чтобы опросить ЕМ и TS индикации. Однако, когда команды упакованных данных выполнены, выполняется этап 1144 и ситуации, где ЕМ индикация равна 1, отклоняется к исключительной ситуации о недопустимости кода операции. В результате, когда команды упакованных данных выполняются и достигают этап 1126, ЕМ индикация должна быть равна 0, а TS индикация должна быть равна 1. Так как TS индикация равна 1, обработчик события функционирует, как описано выше со ссылкой на частичные контекстные переключатели, и заставляет процессор продолжать выполнение посредством перезапуска выполнения команды, принятой на этапе 1102. Так как состояние упакованных данных является совмещенным с состоянием с плавающей запятой, этот обработчик события работает как для состояния с плавающей запятой, так и для упакованных данных. В результате, этот способ остается невидимым операционной системой. Конечно, альтернативные варианты осуществления могут выполнять этот обработчик события любым количеством приемов, как описано выше. В то время как был описан вариант осуществления для обработки TS индикации в способе, который является операционной системой невидимым, альтернативные варианты осуществления могут использовать другие способы, как описано выше.
Как описано выше, если некоторые численные ошибки сформированы во время выполнения команды с плавающей запятой, эти ошибки задерживаются до предпринятого выполнения следующих команд с плавающей запятой, чье выполнение может быть прервано для их обслуживания. Как показано, на этапах 1128 и 1150 определяется, имеются ли любые такие отложенные ошибки, которые могут обслуживаться. Таким образом, эти этапы аналогичны этапам 420 и 422 на фиг. 4A. Если имеются любые такие отложенные ошибки, осуществляется переход из этапов 1128 и 1150 к этапу 1130. Однако, если это определено на этапе 1128, что не имеется никаких таких отложенных ошибок, осуществляется переход на этап 1132. Напротив, если определено на этапе 1150, что не имеется никаких таких отложенных ошибок, осуществляется переход на этап 1152. В альтернативном варианте осуществления этап 1150 не выполняется, и ошибка с плавающей запятой остается задержанной во время выполнения команды упакованных данных.
На этапе 1130 формируется событие ошибки задержки с плавающей запятой. Таким образом, этап 1130 аналогичен этапу 424 по фиг. 4A. Как описано выше со ссылкой на этап 424 на фиг. 2, это событие может обрабатываться или как внутреннее событие, или как внешнее событие и обслуживаться соответственно.
Как показано, на этапе 1152 определяется, находится ли процессор в режиме упакованных данных. Если процессор находится в режиме упакованных данных, выполнение команды упакованных данных было успешно завершено и осуществляется переход на этап 1132. Однако, если процессор не находится в режиме упакованных данных, команда упакованных данных была выполнена в режиме с плавающей запятой. В результате, выполнение команды упакованных данных не точно. Для исправления этого процессор должен быть переключен с режима с плавающей запятой в режим упакованных данных, и команда упакованных данных должна быть выполнена повторно. Наконец, если процессор не находится в режиме упакованных данных, осуществляется переход на этап 1154. Определение на этапе 1152 может выполняться любым количеством приемов. Например, могла бы использоваться индикация режима, как описано выше со ссылкой на фиг. 6A. В качестве другого примера указатель на верхушку стека и тэги могут быть опрошены. Если указатель на верхушку стека находится в состоянии инициализации и все тэги находятся в непустом состоянии, то процессор находится в режиме упакованных данных. Однако, если указатель на верхушку стека не находится в состоянии инициализации или все тэги находятся не в непустом состоянии, процессор не находится в режиме упакованных данных.
На этапе 1154 процессор переходит из режима с плавающей запятой в режим упакованных данных, и осуществляется переход на этап 1150. На этапе 1154 процессор переходит из режима с плавающей запятой в режим упакованных данных, изменяя все тэги на непустое состояние и изменяя указатель на верхушку стека на значение инициализации. Изменение всех тэгов на непустое состояние способствует профессиональным приемам программирования, в которых имеются отдельная группа команд с плавающей запятой и упакованных данных. Кроме того, из перспективы совместимости операционной системы, некоторые способы операционной системы сохраняют содержимое только тех регистров с плавающей запятой, чьи соответствующие тэги указывают непустое состояние. Таким образом, в варианте осуществления, в котором состояние упакованных данных является совмещенным с состоянием с плавающей запятой, изменение всех тэгов на непустое состояние заставляет такие операционные системы сохранять состояние упакованных данных, как будто это было состояние с плавающей запятой. Альтернативные варианты осуществления могут быть реализованы, чтобы быть совместимыми с меньшим количеством этих способов операционной системы. Например, если операционная система не использует тэги, вариант осуществления, который не реализует тэги, является совместимым с такой операционной системой. Изменение указателя на верхушку стека на ноль используется для реализации эффективных способов программирования, как описано выше. Кроме того, изменение указателя на верхушку стека на значение инициализации и неизменение указателя на верхушку стека во время выполнения команд упакованных данных позволяет той же самой схеме использоваться для обработки регистров FP/PD и как стек с плавающей запятой, и как фиксированный файл регистров, как описано выше со ссылкой на фиг. 10. Так как состояния с плавающей запятой и упакованных данных являются совмещенными с одиночным файлом регистров, перехода не требуется, чтобы данные были скопированы между отдельными файлами регистров с плавающей запятой и упакованных данных. Это уменьшает время, требуемое для перехода между режимами с плавающей запятой и упакованных данных. Как описано выше, переход от плавающей запятой к упакованным данным может быть выполнен в микрокоде. В альтернативном варианте осуществления выполнение каждой команды упакованных данных изменяет указатель на верхушку стека на значение инициализации.
Как показано на этапе 1156, команда, принятая на этапе 1102, перезапускается, выполняя микроповторный запуск (микрорестарт). Так как используется микрорестарт, выполнение текущей задачи может быть продолжено без любого внешнего действия по отношению к процессору - никакие обработчики события немикрокода не должны быть выполнены. Таким образом, этот вариант осуществления совместим с существующими операционными системами. Альтернативные варианты осуществления могут быть реализованы, чтобы быть менее совместимыми. Например, дополнительное событие может быть включено в процессор, и может быть добавлен дополнительный обработчик события к операционной системе для выполнения этого перехода.
На этапе 1132 состояние буферных регистров передается к их соответствующим FP/PD или целочисленным регистрам. После завершения этапа 1132 процессор освобождается, чтобы продолжить выполнение.
Таким образом, описан способ выполнения команд упакованных данных, который является совместимым с известной операционной системой и поддерживает квалифицированные приемы программирования. Так как состояние упакованных данных является совмещенным с состоянием с плавающей запятой, состояние упакованных данных будет сохранено и восстановлено известными операционными системами, как если бы это было состояние с плавающей запятой. Кроме того, так как события, сформированные выполнением команд упакованных данных, пригодны к обслуживанию известными обработчиками операционной системы, эти обработчики события не должны изменяться и нет необходимости добавлять новые обработчики события. В результате, процессор является совместим сверху вниз, и обновление не требует затрат для разработки или изменения операционной системы.
Разновидности этого варианта осуществления, некоторые из которых были описаны, могут быть полностью или частично совместимы с такими операционными системами и/или поддерживать хорошие приемы программирования. Например, альтернативный вариант осуществления может перемещать, изменять и/или удалять один или большее количество этапов из этой последовательности операций. Если некоторые этапы на фиг. 11A, 11B и/или 11C удалены, то некоторые аппаратные средства не требовались бы на фиг. 10. Например, если TS индикация не используется, TS индикация не требуется. Конечно, изобретение могло бы быть полезно для любого количества архитектур системы и не ограничивается описанной здесь архитектурой.
Фиг. 12A, 12B, и 12C иллюстрируют форматы памяти для сохранения данных с плавающей запятой, упакованных данных и целочисленных данных согласно варианту осуществления, описанному со ссылкой на фиг. 10. Конечно, альтернативные варианты осуществления могут использовать любое число различных форматов памяти для сохранения данных с плавающей запятой, упакованных данных и целочисленных данных.
Фиг. 12A иллюстрирует формат памяти с плавающей запятой согласно одному варианту осуществления изобретения, описанного со ссылкой на фиг. 10. Фиг. 12A показывает формат 1200 памяти с плавающей запятой, включая поле 1202 знака, содержащее бит 85, и поле 1204 порядка, содержащее биты [84:68], поле 1206 мантиссы, содержащее биты [67:3] и поле 1208 округления, содержащее биты [2:0]. Как описано выше, те же самые команды с плавающей запятой, используемые для сохранения состояния с плавающей запятой в памяти при выполнении переключателей задач, должны также работать для сохранения любых состояний упакованных данных, совмещенных с регистрами с плавающей запятой. В одном варианте осуществления процессор не сохраняет биты округления в поле 1028 округления. В результате, упакованные данные должны быть сохранены где-нибудь в поле мантиссы 1206 формата 1200 памяти с плавающей запятой.
Фиг. 12B иллюстрирует формат памяти для упакованных данных согласно варианту осуществления изобретения, описанного со ссылкой на фиг 10. Фиг. 12B показывает формат 1210 памяти упакованных данных, включая поле 1212 знака/порядка, содержащее биты [85: 68], первое зарезервированное поле 1214, содержащее бит [67], поле 1216 упакованных данных, содержащее биты [66:3], и второе зарезервированное поле 1218, содержащее биты [2:0]. Как описано выше, все единицы сохранены в поле 1212 знака/порядка, когда упакованные данные записаны в регистр. Также, как описано выше, поле 1216 упакованных данных является совмещенным с полем 1206 мантиссы так, что существующие команды с плавающей запятой будут сохранять состояние упакованных данных. В одном варианте осуществления в первые и вторые зарезервированные поля 1214 и 1218 записываются нули, когда упакованные данные записываются в регистр. В то время как был описан вариант осуществления изобретения, в котором поле 1216 упакованных данных формата 1210 памяти упакованных данных начинается в том же самом битовом положении, что и поле 1206 мантиссы формата 1200 памяти с плавающей запятой, альтернативные варианты осуществления могут изменять это соотношение.
Фиг. 12C иллюстрирует формат памяти для целочисленных данных в соответствии с вариантом осуществления изобретения описанного со ссылкой на фиг. 10. Фиг. 12C показывает формат 1220 памяти целочисленных данных, включая зарезервированное поле 1222, содержащее биты [85:32], и поле 1224 целочисленных данных, содержащее биты [31:0]. В то время как описан вариант осуществления, в котором целочисленные данные сохранены в 32 битах, альтернативный вариант осуществления может быть реализован, чтобы сохранить целочисленные данные в одном или большем количестве использующихся форматов, в любом числе битов. Например, альтернативные варианты осуществления могут поддерживать 64-битовый формат. В одном варианте осуществления каждый из целочисленных регистров 1024, который является видимым программному обеспечению, включает только 32 бита. В результате, целочисленный формат 1220 памяти используется только в буферном регистре 1020.
Фиг. 13 иллюстрирует способ согласно одному варианту осуществления изобретения для выполнения этапа 1138 на фиг. 11B, когда реализуются форматы памяти, описанные со ссылкой на фиг. 12A, 12B, и 12C. Осуществляется переход из обоих этапов 1138 к этапу 1300.
На этапе 1300 определяется, отыскивает ли команда упакованных данных упакованные данные из любых регистров FP/PD в любых буферных регистрах, действующих как FP/PD регистры. Если да, осуществляется переход на этап 1302. Иначе осуществляется переход на этап 1308.
Как показано на этапе 1302, биты [66:3] выбираются из этого совмещенного буфера или регистров FP/PD, и после этого переходят к этапу 1308. Этот этап необходим в том, что упакованные данные не сохраняются, начиная с бита 0, а сохраняются, начиная с бита 3, как показано на фиг. 12B. В результате, биты [2: 0] должны быть отброшены. В одном варианте осуществления этот этап выполняется устройством выравнивания данных 1090 на фиг. 10. В этом варианте осуществления данные перемещаются из устройства изъятия 1006, через устройство выдачи 1008 к устройству выполнения 1010 в формате, показанном на фиг. 12B. Таким образом, данные принимаются устройством выполнения 1010 в формате, показанном на фиг. 12B, и устройству выравнивания данных 1090 позволяют извлечь биты [66:3]. В то время как фиг. 10 показывает одиночное устройство выравнивания данных, в одном варианте осуществления каждое функциональное устройство в устройстве выполнения 1010, который функционирует с упакованными данными, включает устройство выравнивания данных для извлечения битов [63: 3] . Так как данные выравниваются в устройстве выполнения 1010, использование упакованного формата данных является прозрачным для остальной части процессора. Устройство(а) выравнивания данных может быть реализовано, чтобы обратиться к битам [66:3], используя любой способ. Например, в одном варианте осуществления устройство(а) выравнивания данных выполнено так, чтобы сдвинуть вправо на три бита все упакованные данные, выбранные от регистра FP/PD или буферных регистров, функционирующих как FP/PD регистры. В альтернативном варианте осуществления устройства изъятия или выдачи могут быть реализованы, чтобы отсечь биты [2:0] и/или биты [85:67]. В качестве другого примера, альтернативный вариант осуществления может быть реализован так, что упакованные данные сохраняют, начиная с бита 0.
На этапе 1304 определяется, отыскивает ли команда упакованных данных упакованные данные из любых целочисленных регистров или любых буферных регистров, функционирующих как целочисленные регистры. Если да, осуществляется переход на этап 1306. Иначе осуществляется переход на этап 1308.
Как показано на этапе 1306, выбираются биты [31:0] из совмещенных буферных или целочисленных регистров, осуществляется переход на этап 1308. Этот этап необходим, потому что данные сохранены, начиная с бита 0. Как описано выше, в одном варианте осуществления этот этап выполняется устройством выравнивания данных 1090 на фиг. 10. В этом варианте осуществления данные передаются из устройства изъятия 1006, через устройство выдачи 1008 к устройству выполнения 1010. Если к данным обращаются из буферных регистров 1020, данные принимаются устройством выполнения 1010 в формате, показанном на фиг. 12C, и устройству(ам) выравнивания данных разрешают извлечь биты [31: 0] . Однако, если к данным обращаются из целочисленного регистра 1024 в варианте осуществления, в котором целочисленные регистры 1024 являются 32-битовыми регистрами, данные принимаются устройством выполнения 1010 в 32-разрядном формате. В любом случае, 32-битовые данные могут обрабатываться как любые из 64-битовых упакованных элементов данных. Например, первая команда перемещения могла бы быть выполнена, чтобы переместить 32 бита от целочисленного регистра к старшим битам элемента упакованных данных, в то время как вторая команда перемещения могла бы быть выполнена, чтобы переместить 32 бита от целочисленного регистра в младшие 32 бита элемента упакованных данных.
Как показано на этапе 1308, выполняются операции, требуемые командой, и осуществляется переход к этапу 1310.
На этапе 1310 определяется, заставляет ли команда упакованных данных процессор осуществлять запись в любые регистры FP/PD или любые буферные регистры, функционирующие как FP/PD регистры. Если - да, то осуществляется переход на этап 1312. Иначе осуществляется переход на этап 1314.
Если команда упакованных данных заставляет процессор осуществлять запись в любой из регистров FP/PD или буферные регистры, функционирующие как FP/PD регистры, данные должны быть сохранены в правильном формате. Таким образом, на этапе 1312 упакованные данные сохраняются в битах [66:3] этих FP/PD или буферных регистров. В одном варианте осуществления устройство выравнивания данных 1090 на фиг. 10 используется снова. Снова имеется ряд способов для выполнения этих функций. Например, устройство(а) выравнивания данных может быть реализовано, чтобы сдвинуть данные влево на три бита, заполнить биты [2: 0] нулями, заполнить бит [67] нулем и сохранить единицы в битах [85:68]. В альтернативном варианте осуществления устройство изъятия может быть реализовано, чтобы сохранить данные в этом формате.
На этапе 1314 определяется, заставляет ли процессор команда упакованных данных осуществлять запись в любой из целочисленных регистров или любой из буферных регистров, функционирующих как целочисленные регистры. Если так, осуществляется переход на этап 1316. Иначе осуществляется переход на этап 1144.
Если команда упакованных данных заставляет процессор осуществлять запись в любой из целочисленных регистров или буферных регистров, функционирующих как целочисленные регистры, упакованные данные должны быть сохранены в правильном целочисленном формате памяти. Таким образом, на этапе 1316 данные находятся в целочисленных регистрах как биты [31:0] или в буферных регистрах как биты [63: 0] или [31:0] (в зависимости от реализации). Так как имеются 64-битовые данные, любые 32-битовые данные могут быть сохранены в этих регистрах. Например, первая команда перемещения могла бы быть выполнена, чтобы переместить старшие биты элемента упакованных данных в целочисленный регистр, в то время как вторая команда перемещения могла бы быть выполнена, чтобы переместить младшие 32 бита элемента упакованных данных в целочисленный регистр. В одном варианте осуществления этот этап снова выполняется устройством выравнивания данных 1090 на фиг. 10. Конечно, любой из способов может использоваться для выполнения этапа 1316, включая вышеописанные.
Таким образом, форматы памяти, используемые различными типами данных, правильно выравниваются в регистрах процессора. В одном варианте осуществления те же самые форматы памяти используются в буферных регистрах 1020, которые используются в FP/PD регистрах 1022, и целочисленных регистрах 1024. Конечно, альтернативные варианты осуществления могут использовать любое количество различных форматов памяти, и таким образом, такие альтернативные варианты осуществления могут быть в объеме изобретения. Например, один альтернативный вариант осуществления использует эти форматы памяти данных в наборе буферных регистров 1020 и использует различные форматы памяти данных в регистрах, видимых программному обеспечению (например, FP/PD регистры 1022 и целочисленный регистр 1024).
Как описано выше, переход между режимом с плавающей запятой и упакованных данных может занять время и не является эффективной практикой программирования. Чтобы помогать программистам в определении, насколько они выполняют много таких переходов, могут использоваться различные способы управления эффективностью. Например, в одном варианте осуществления используется счетчик управления эффективностью. Счетчик управления эффективностью является видимым программисту и подсчитывает количество различных во времени условий, встреченных в процессоре. В одном варианте осуществления изобретения, одним из этих условий являются переходы между режимами с плавающей запятой и упакованных данных. Таким образом, программист может обучаться, сколько переходов требует программа. Для дальнейшей информации относительно счетчиков программ, см. "Apparatus for Monitoring the Performance of a Processor", Ser. N 07/883,845, Robert S. Dreyer и др.
Так как известные процессоры с плавающей запятой не позволяют прямое манипулирование тэгами с плавающей запятой, может быть выполнена эмуляция EMMS команды, используя команды с плавающей запятой.
Фиг. 14 является последовательностью операций, иллюстрирующей способ очистки тэгов, согласно одному варианту осуществления изобретения. Эта последовательность операций начинается на этапе 1402, сохраняя среду с плавающей запятой в предопределенном месте в памяти. Это выполняется, используя команду FNSAVE или FSAVE в архитектуре процессора Intel.
Как только это выполнено, тэг и/или TOS части предопределенного места памяти, в котором среда была сохранена, могут изменяться на пустое состояние на этапе 1404. Это выполняется использованием любого числа предшествующих команд, включая MOV команды с непосредственными операндами для соответствующего битового шаблона для тэга и TOS битов. Может использоваться любая другая соответствующая команда, которая может установить тэг и TOS части предопределенного места памяти в пустое состояние. Впоследствии, среда может затем быть перезагружена на этапе 1406 из модифицированного предопределенного места памяти. Так как другие части среды (такие как управляющее слово, слово состояния и т.д.) могут быть оставлены неизменными, только изменяя тэги с плавающей запятой, оставшаяся часть среды остается неизменной от операции 1402 сохранения среды. Отметим далее, что для того чтобы предотвратить появление любого непредвиденного прерывания, этот вариант осуществления процесса может быть выполнен с использованием любой известной методики, включая использование команд, которые делают прерывания недоступными (например, FNSTENV). Во всяком случае, так как среда теперь перезагружена, используя любой известный способ, такой как FRSTOR или FLDENV, среда теперь перезагружена только тэгами с плавающей запятой, измененные к их пустому состоянию. Отметим далее, что этап 1404 может дополнительно включать дополнительный этап, который очищает часть среды с плавающей запятой, которая включает в себя указатель на верхушку стека, сохраненной в поле 350 верхушки стека.
В еще одном альтернативном варианте осуществления EMMS команда может быть эмулирована посредством сохранения регистров с плавающей запятой достаточное число раз, пока все биты тэга не станут пусты. В любом случае EMMS может выполняться как специализированная команда или может быть эмулирована, и любой способ находится в объеме раскрытия.
Фиг. 15A показывает последовательность выполнения операций, включающую упакованные данные и команды с плавающей запятой, для иллюстрации интервала времени, во время которого отдельные физические файлы регистров, которые являются совмещенными, могут быть модифицированы. Фиг. 15A показывает команду 1500 с плавающей запятой с последующим набором команд 1510 упакованных данных. Кроме того, фиг. 15A показывает, что команда с плавающей запятой 1500 выполняется в момент времени Т1, в то время как выполнение набора команд 1510 упакованных данных начинается в момент времени Т2. Выполнение команды с плавающей запятой 1500 заставляет процессор записать значение в регистр с плавающей запятой. Интервал 1520 отмечает время между временем Т1 и временем Т2, во время которого это значение должно быть совмещено. Например, в одном варианте осуществления, описанном со ссылкой на фиг. 6A-9, в котором отдельные физические файлы регистров используются для выполнения команд с плавающей запятой и упакованных данных, состояние с плавающей запятой не копируется из физического регистра с плавающей запятой в соответствующие физические регистры упакованных данных до времени Т2 (принимая, что другое значение не записывается в тот же самый регистр с плавающей запятой до момента времени Т2). Напротив, когда используется одиночный физический файл регистров (варианты осуществления, описанные со ссылкой на фиг. 10-11C), значение с плавающей запятой сохраняется в регистре, совмещенном в момент времени Т1.
Таким образом, описаны два экстремальных значения интервала 1520. Однако альтернативные варианты осуществления могут быть реализованы для совмещения регистров в любое время во время интервала 1520. Например, альтернативные варианты осуществления, которые используют отдельные физические файлы регистров для выполнения команд с плавающей запятой и упакованных данных, могут быть выполнены так, чтобы данные, записанные в физический файл регистров с плавающей запятой, также записывались в физический файл регистров упакованных данных в момент времени Т1. В одном варианте осуществления, который записывает значение в оба физических файла регистров в одно время (например, время Т1), та часть устройства перехода, которая копирует данные из регистров с плавающей запятой в регистры упакованных данных, может быть выполнена в виде аппаратных средств (конечно, альтернативные варианты осуществления могут использовать программное обеспечение, программно-аппаратные средства и/или аппаратные средства). В качестве другого примера альтернативные варианты осуществления, которые используют отдельные физические файлы регистров для выполнения команд с плавающей запятой и упакованных данных, могут быть выполнены так, что данные, записанные в физический файл регистров с плавающей запятой, записаны в физический файл регистров упакованных данных, когда свободное время обработки доступно в течение интервала 1520 (но до момента времени Т2). Таким образом, эти варианты осуществления могут уменьшать время перехода.
Фиг. 15B показывают поток выполнения, включая упакованные данные и команды с плавающей запятой, для иллюстрации интервала времени, во время которого отдельные физические файлы регистра, которые являются совмещенными, могут модифицироваться. Фиг. 15A аналогична фиг. 15В, за исключением того, что за командами 1530 упакованных данных следует набор команд с плавающей запятой 1540. Фиг. 15A показывает, что команда 1530 упакованных данных выполняется в момент времени Т1, в то время как выполнение набора команд с плавающей запятой 1540 начато в момент времени Т2. Выполнение команды 1530 упакованных данных заставляет процессор осуществлять запись значения в регистр упакованных данных. Интервал 1550 обозначает время между моментами Т1 и Т2, в течение которого это значение должно быть совмещено. Все альтернативные варианты осуществления, описанные со ссылкой на фиг. 15A (со ссылкой на команды с плавающей запятой с последующими командами упакованных данных), могут также быть выполнены со ссылкой на фиг. 15В (со ссылкой на команды упакованных данных с последующими командами с плавающей запятой).
Хотя изобретение было описано применительно к нескольким вариантам осуществления, специалистам должно быть известно, что изобретение не ограничено описанными вариантами осуществления. Способ и устройство изобретения могут быть модифицированы и изменены и объем патентной защиты, который будет их охватывать, определяется прилагаемой формулой изобретения.
Изобретение относится к области компьютерных систем и может быть использовано для выполнения процессором команд с плавающей запятой и упакованных данных. Техническим результатом является расширение функциональных возможностей. Процессор содержит устройство декодирования, множество физических регистров, устройство отображения. Другой вариант процессора содержит дополнительно устройство изъятия, набор буферных регистров. Способы описывают порядок выполнения команд в процессоре с помощью содержащихся в нем элементов. 4 с. и 47 з.п.ф-лы, 27 ил., 2 табл.
US 4992938 А, 12.02.1991 | |||
УСТРОЙСТВО ДЛЯ ВЫЗОВА ПОДПРОГРАММ | 1990 |
|
RU2009538C1 |
US 4853849 А, 01.08.1989 | |||
US 4430711 A, 07.02.1984 | |||
Устройство для дифференциальной защиты многообмоточного трансформатора с регулированием напряжения под нагрузкой | 1975 |
|
SU649085A1 |
JP 06222935 A, 12.08.1994 | |||
JP 06266556 А, 22.09.1994 | |||
УСТРОЙСТВО ДЛЯ ОБРАБОТКИ ИНФОРМАЦИИ | 1991 |
|
RU2029359C1 |
JP 07073106 А, 17.03.1995 | |||
US 4229800 A, 21.12.1980. |
Авторы
Даты
2002-02-10—Публикация
1996-12-17—Подача