Процессоры, способы, системы и инструкции для транскодирования точек кода переменной длины знаков unicode
Иллюстрации
Показать всеГруппа изобретений относится к процессорам и может быть использована для транскодирования точек кода переменной длины для знаков Unicode. Техническим результатом является обеспечение обработки инструкций. Устройство содержит множество регистров упакованных данных; и модуль декодирования для декодирования инструкции определения длины точки упакованного кода переменной длины, которая предназначена для указания упакованных данных первого источника, имеющих множество точек упакованного кода переменной длины, каждая из которых представляет знак и указывает местоположение в накопителе; и исполнительный модуль, соединенный с модулем декодирования и регистрами упакованных данных, выполненный с возможностью сохранения в ответ на инструкцию определения длины точки упакованного кода переменной длины полученных в результате упакованных данных в указанном местоположении, в накопителе, при этом полученные в результате упакованные данные имеют длину для каждой из множества точек упакованного кода переменной длины, при этом исполнительный модуль выполнен с возможностью сохранения, в ответ на инструкцию, каждого значения длины в байте, расположенном в том же относительном положении бита в месте назначения накопителя, как и младший значащий байт соответствующей точки кода переменной длины в упакованных данных первого источника. 4 н. и 19 з.п. ф-лы, 26 ил.
Реферат
Область техники, к которой относится изобретение
Варианты осуществления, описанные здесь, в общем, относятся к процессорам. В частности, варианты осуществления, описанные здесь, в общем, относятся к процессорам, имеющим инструкции, которые полезны для транскодирования точек кода переменной длины для знаков Unicode.
Уровень техники
Компьютеры, в принципе, обрабатывают двоичные числа. Обычно они не обрабатывают всевозможного типа буквы, десятичные числа, символы или другие знаки, используемые в разных языках и традициях. Скорее, таким различным буквам, десятичным числам, символам и другим знакам назначают двоичные числа, и их представляют двоичными числами.
Универсальный набор знаков (UCS) представляет собой стандартизированный набор знаков, на котором основаны несколько систем кодирования знаков. UCS определен международным стандартом ISO/IEC 10646, Information technology - Universal multiple-octet coded character set (UCS), вместе с изменениями к этому стандарту. UCS включает в себя большое количество разных знаков, включая в себя буквы, числа, символы, идеограммы, логограммы и другие знаки из наиболее распространенных языков, текстов и традиций мира. Каждый из этих знаков идентифицируется целым числом, которое называется точкой кода знаков.
Стандарт Unicode (Unicode) был разработан совместно с USC. Unicode представляет собой стандарт компьютерной промышленности для соответствующего цифрового кодирования, представления и обработки знаков UCS. В соответствии с последними отчетами Unicode обеспечивает уникальное число для каждого знака, независимо от платформы, независимо от программы, независимо от языка. Unicode в настоящее время используется практически всеми современными компьютерами и серверами, как основа для обработки текста по Интернет.
Unicode может быть воплощен через различные системы кодирования знаков. Одна из обычно используемых систем кодирования представляет собой UTF-8 (8-битный формат преобразования UCS). UTF-8 представляет собой кодирование переменной длины (например, с переменным количеством байтов), которое может представлять собой каждый знак в Unicode. Каждый знак в Unicode представлен между одним и четырьмя байтами. Байты также называются октетами в стандарте Unicode. В UTF-8 используется один байт для представления любого из знаков ASCII. UTF-8 обладает обратной совместимость с ASCII, и знаки имеют одинаковое кодирование, как в ASCII, так и в UTF-8. Другие знаки, не входящие в ASCII, представлены двумя, тремя или четырьмя байтами. По оценке UTF-8 представляет собой самое распространенное кодирование Unicode на веб-страницах во всемирной сети, при этом более половины всех веб-страниц кодируют, используя UTF-8. UTF-8 также широко используется программами электронной почты для отображения и формирования почты. Все чаще UTF-8 также используется для кодирования знаков Unicode в определенных языках программирования, операционных системах, интерфейсах программирования приложения (API) и в программных приложениях.
Другое обычно используемое кодирование представляет собой UTF-16 (16-битный формат преобразования UCS). UTF-16 представляет собой кодирование переменной длины (например, с переменным количеством байтов), которое может представлять каждый знак в Unicode. Каждый знак Unicode представлен либо двумя, или четырьмя байтами. UTF-16 не обладает обратной совместимостью с ASCII. UTF-16 обычно используется, как международная форма Unicode в определенных языках программирования таких, как, например, Java, С# и JavaScript, и в определенных операционных системах. Также используются различные другие известные системы кодирования (например, UTF-2, UTF-32, UTF-1 и т.д.).
Обычно, для того чтобы способствовать обработке в компьютерных системах, UTF-8, UTF-16 или другие кодированные данные, могут быть транскодированы в другой формат, такой как, например, Unicode. Транскодирование представляет непосредственное цифро-цифровое преобразование данных из одной системы кодирования в другую. Такое транскодирование может быть выполнено по разным причинам, таким как, например, для того, чтобы помочь повысить эффективность или скорость обработки данных, для преобразования кодированных данных в формат, используемый программным обеспечением, или в более широко распознаваемый формат и т.д. Часто большое количество обработки требуется для транскодирования содержания веб-страниц, документов, отформатированных с использованием языков разметки, документов XML и т.п., из одной системы кодирования (например, UTF-8) в стандартные знаки Unicode или в другие форматы. Благодаря распространенности такого транскодирования и/или его потенциального влияния на рабочие характеристики, новые и полезные подходы для транскодирования могли бы стать предпочтительными. Краткое описание чертежей
Изобретение будет более понятным при ссылке на следующее описание и приложенные чертежи, которые используются для иллюстрации вариантов осуществления. На чертежах:
на фиг. 1 показана блок-схема варианта осуществления процессора;
на фиг. 2 показана таблица характеристик точек кода переменной длины UTF-8;
на фиг. 3 показана блок-схема варианта осуществления процессора, который во время работы обрабатывает вариант осуществления инструкции определения длины точки упакованного кода переменной длины;
на фиг. 4 показана блок-схема примерного варианта осуществления соответствующей операции определения длины точки упакованного кода переменной длины для точек кода переменной длины UTF-8;
на фиг. 5 показана блок-схема последовательности операций варианта осуществления способа, выполняемого процессором и/или в пределах процессора, в ходе обработки варианта осуществления инструкции определения длины точки упакованного кода переменной длины;
на фиг. 6 показана блок-схема варианта осуществления процессора, который во время работы выполняет или обрабатывает вариант осуществления инструкции выделения битов знака точки упакованного кода переменной длины (например, битов Unicode);
на фиг. 7 показана блок-схема примерного варианта осуществления соответствующих операций выделения битов знака точки упакованного кода UTF-8 (например, битов Unicode) для точек кода UTF-8;
на фиг. 8 показана блок-схема, иллюстрирующая соответствующие способы размещения или упорядочивания наборов выделенных битов Unicode в упакованном элементе данных;
на фиг. 9 показана блок-схема последовательности операций варианта осуществления способа, выполняемого процессором и/или в пределах процессора, в ходе обработки варианта осуществления инструкции выделения битов знака точки упакованного кода переменной длины (например, битов Unicode);
на фиг. 10А показана блок-схема, иллюстрирующая обобщенный формат инструкции, удобный для векторных операций, и его шаблоны инструкции класса А в соответствии с вариантами осуществления изобретения;
на фиг. 10В показана блок-схема, иллюстрирующая обобщенный формат инструкции, удобный для векторных операций, и его шаблоны инструкции класса В в соответствии с вариантами осуществления изобретения;
на фиг. 11А показана блок-схема, иллюстрирующая примерный конкретный формат инструкции, удобный для векторных операций, в соответствии с вариантами осуществления изобретения;
на фиг. 11В представлен конкретный формат инструкции, удобный для векторных операций, который определен в том смысле, что он определяет местоположение, размер, интерпретацию и порядок полей, а также значения для некоторых из этих областей;
на фиг. 11С показана блок-схема, иллюстрирующая поля конкретного формата инструкции, удобного для векторных операций, которые составляют поле индекса регистра в соответствии с одним вариантом выполнения изобретения;
на фиг. 11D показана блок-схема, иллюстрирующая поля конкретного формата инструкции, удобного для векторных операций, которые составляют поле операции приращения в соответствии с одним вариантом выполнения изобретения;
на фиг. 12 показана блок-схема архитектуры регистра в соответствии с одним вариантом выполнения изобретения;
на фиг. 13А показана блок-схема, иллюстрирующая, как примерный конвейер, работающий по порядку, так и примерный конвейер обработки задачи/исполнения, работающий не порядку, с переименованием регистра, в соответствии с вариантами осуществления изобретения;
на фиг. 13В показана блок-схема, иллюстрирующая, как примерный вариант осуществления архитектуры ядра, работающей по порядку, так и пример архитектуры ядра задачи/исполнения не по порядку с переименованием регистра, которое должно быть включено в процессор, в соответствии с вариантами осуществления изобретения;
на фиг. 14А показана блок-схема ядра с одним процессором, вместе с его соединением с сетью взаимного соединения на кристалле и с его локальным поднабором кэш Уровня 2 (L2), в соответствии с вариантами осуществления изобретения;
на фиг. 14В показан расширенный вид в перспективе части ядра процессора по фиг. 14А, в соответствии с вариантами осуществления изобретения;
на фиг. 15 показана блок-схема процессора, который может иметь больше, чем одно ядро, может иметь интегрированный контроллер памяти и может иметь интегрированную графику, в соответствии с вариантами осуществления изобретения;
на фиг. 16 показана блок-схема системы в соответствии с одним вариантом осуществления настоящего изобретение;
на фиг. 17 показана блок-схема первого, более конкретного примера системы, в соответствии с вариантом осуществления настоящего изобретение;
на фиг. 18 показана блок-схема второго, более конкретного примера системы, в соответствии с вариантом осуществления настоящего изобретение;
на фиг. 19 показана блок-схема SoC, в соответствии с вариантом осуществления настоящего изобретение;
на фиг. 20 показана блок-схема, представляющая отличие от использования программного преобразователя инструкции для преобразования двоичных инструкций в наборе инструкций источников в двоичную инструкцию в целевом наборе инструкций, в соответствии с вариантами осуществления изобретения.
Осуществление изобретения
Здесь раскрыты инструкции, используемые для транскодирования точек кода переменной длины данных Unicode, процессоры для исполнения или выполнения инструкций, способы, выполняемые процессорами при исполнении или выполнении инструкций, и системы, в состав которых входит один или больше процессоров для исполнения или выполнения инструкций. В следующем описании, представлено множество конкретных деталей (например, операции/функции конкретной инструкции, комбинации инструкций, форматы кодирования, конфигурации процессора, последовательности операций и т.п.). Однако, варианты осуществления могут быть выполнены на практике без этих конкретных деталей. В других случаях хорошо известные схемы, структуры и технологии не были представлены подробно, чтобы исключить затруднения при понимании описания.
На фиг. 1 показана блок-схема варианта осуществления процессора 100. Процессор представляет вариант осуществления устройства обработки инструкции. В некоторых вариантах осуществления процессор может представлять собой процессор общего назначения (например, микропроцессор общего назначения, такого типа, который часто используется, как центральное процессорное устройство (CPU) в настольных компьютерах, переносных компьютерах и подобных компьютерах). В качестве альтернативы, процессор может представлять собой процессор специального назначения. Примеры соответствующих процессоров специального назначения включают в себя, но не ограничены этим, сетевые процессоры, процессоры передачи данных, криптографические процессоры, графические процессоры, сопроцессоры, встроенные процессоры, цифровые сигнальные процессоры (DSP) и контроллеры (например, микроконтроллеры), которые представляют собой только несколько примеров. Такие процессоры специального назначения также иногда называются аппаратными ускорителями, ускорителями специального назначения и т.п. Процессор может представлять собой любой из различных процессоров со сложным набором команд архитектуры процессора (CISC), различных процессоров с сокращенным набором команд (RISC), различных процессоров с командами большой длины (VLIW), различные гибриды или другие типы процессоров вообще.
Процессор имеет набор 102 инструкций. Инструкции набора инструкций представляют макроинструкции, инструкции языка ассемблера, инструкции машинного уровня или другие инструкции относительно высокого уровня или сигналы управления, в отличие от микроинструкций, микроопераций, или других инструкций относительно низкого уровня или сигналов управления, которые получают в результате декодирования инструкций более высокого уровня или сигналов управления.
В некоторых вариантах осуществления набор инструкций может включать в себя одну или больше инструкций 103, которые используются для транскодирования кодов переменной длины или точек кода для данных Unicode. В некоторых вариантах осуществления инструкции 103, в случае необходимости, включают в себя одну или больше упакованных инструкций 104 определения длины точки кода переменной длины. Упакованные инструкции 104 определения длины точки кода переменной длины могут иметь одну из характеристик, атрибутов или свойств, показанных и описанных дополнительно ниже на фигурах со ссылкой на фиг. 3-5. В некоторых вариантах осуществления инструкции 103, в случае необходимости, могут включать в себя одну или больше инструкций 106 выделения упакованных битов знака точки кода переменной длины (например, битов Unicode). Инструкции 106 выделения упакованных битов знака точки кода переменной длины (например, биты Unicode) могут иметь любую одну из характеристик, атрибутов или свойств, показанных и описанных дополнительно ниже со ссылкой на фиг. 2 и 6-9. В некоторых вариантах осуществления инструкции 103 могут, в случае необходимости, включать в себя, как одну или больше инструкций 104 определения длины точки кода упакованной переменной длины и одну или больше инструкций 106 выделения упакованных битов знака точки кода переменной длины (например, битов Unicode), хотя это и не требуется.
Процессор также включает в себя набор регистров 108 упакованных данных. Регистры упакованных данных, в общем, представляют места расположения на кристалле в накопителе процессора. Регистры упакованных данных работают для сохранения упакованных данных, векторных данных или данных SIMD. Инструкции из набора инструкций (например, инструкции 104 определения длины точки кода упакованной переменной длины и/или инструкции 106 выделения битов Unicode точки кода упакованной переменной длины), могут устанавливать регистры упакованных данных из набора 108 для идентификации операндов (например, операндов источника, операндов места назначения и т.д.). Таким образом, регистры упакованных данных могут быть видимыми для программных средств и/или программиста (возможно, могут быть воплощены с переименованием регистра). Такие регистры иногда называются архитектурно видимыми регистрами или архитектурными регистрами.
Процессор также включает в себя один или больше исполнительных модулей 110. Исполнительный модуль (модули) работают для исполнения или обработки необязательных инструкций 104 определения длины упакованной точки кода переменной длины и/или необязательных инструкций 106 выделения битов Unicode упакованной точки кода переменной длины. В некоторых вариантах осуществления исполнительный модуль (модули) может включать в себя определенную логику (например, определенную схему или другие аппаратные средства, потенциально в комбинации с одним или больше из встроенного программного обеспечения и программного обеспечения) для выполнения инструкций 104, 106.
На фиг. 2 показана таблица характеристик 224 точек кода переменной длины UTF-8. В первом самом левом столбце представлен список множества байтов в точках кода переменной длины UTF-8. Первый ряд соответствует одному байту точек кода UTF-8, второй ряд соответствует двум байтам точек кода UTF-8, третий ряд соответствует трем байтам точек кода UTF-8, и четвертый ряд соответствует четырем байтам точек кода UTF-8. В будущем, возможно, что пять или еще шесть байтов точек кода UTF-8 могут стать более распространенными в UTF-8.
Во втором - четвертом столбцах представлен в виде списка формат из байтов переменной длины точек кода UTF-8. Формат в каждом байте представлен от положения младшего значащего бита справа до положения старшего значащего бита слева. Например, формат байта 1 одного байта точки кода UTF-8 представляет собой Оххххххх. Байт 2 следует после байта 1 (то есть, байт 2 является более значимым), байт 3 следует после байта 2, и байт 4 следует после байта 3. Для двухбайтной точки кода UTF-8 формат байта 1 представляет собой 10ххххх, и формат байта 2 представляет собой 10хххххх. Форматы точек кода UTF-8 из трех и четырех байтов являются такими, как представлено на иллюстрации. В этих форматах биты, которые представляют двоичные единицы (то есть, 1) и нули (то есть, 0) представляют биты 226 сигнатуры, тогда как символ "х" используется в тех битах, которые представляют биты 228 точек кода Unicode. Например, для формата UTF-8 из двух байтов, самые левые три старших значащих бита в байте 1 и самые левые два старших значащих бита в байте 2 представляют собой биты сигнатуры, тогда как все другие биты, представленные "х", представляют собой биты точки кода Unicode.
Биты 226 сигнатуры используются для определения длины точки кода UTF-8 (например, представляет ли она собой точку кода UTF-8 из одного байта, двух байтов, трех байтов или четырех байтов). Например, биты сигнатуры могут использоваться для определения контекста положения точки кода во входном потоке байтов, который может использоваться для определения идентичностей компонента байтов многобайтной точки кода UTF-8. Биты 228 точки кода Unicode можно использовать для определения, путем транскодирования, соответствующего знака Unicode или значения, которое кодировано или представлено точкой кода UTF-8. Таким образом, биты точки кода Unicode могут изменяться с одного знака Unicode на другой.
Точка однобайтового кода UTF-8 имеет один бит сигнатуры в бите 7 и семь битов точек кода Unicode в битах [6:0]. Точка двухбайтового кода UTF-8 имеет пять битов сигнатуры в битах [7:5] и [15:14] и одиннадцать битов точки кода Unicode в битах [4:0] и [13:8]. Точка в трехбайтовом коде UTF-8 имеет восемь битов сигнатуры в битах [7:4], [15:14] и [23:22], и шестнадцать битов точек кода Unicode в битах [3:0], [13:8] и [21:16]. Точка четырехбайтового кода UTF-8 имеет одиннадцать битов сигнатуры в битах [7:3], [15:14], [23:22] и [31:30]. Точка четырехбайтового кода UTF-8 имеет двадцать один бит точки кода Unicode в битах [2:0], [13:8], [21:16] и [29:24].
В соответствии с этим, в UTF-8 так же, как и в других стандартах, используемых для кодирования знаков Unicode, применяют кодирование переменной длины или точки кода (например, различные количества байтов для представления разных знаков Unicode). Кодирование переменной длины или точек кода обычно означает, что процессорам требуется транскодировать или по-другому обработать эти точки кода или потоки байтов в контексте положения, выведенном из одного или больше предыдущего байта (байтов). Такое свойство часто затрудняет выполнение такого транскодирования, используя операции с упакованными данными, векторные операции или операции SIMD. С одной стороны, вычислительные операции или манипуляции необходимые для транскодирования точки кода UTF-8, например, в 32-битное значение Unicode, обычно меняются в зависимости от длины точки кода UTF-8. В результате, границы разделений между точками кода переменной длины (например, точками кода одно, двух, трех и четырехбайтового кода UTF-8) обычно должны быть определены и должны соблюдаться во время обработки SIMD. Существующие наборы инструкций SIMD, в общем, являются неэффективными при удостоверении или определении переменных длин точек кода UTF-8 и других систем кодирования переменной длины. Улучшенные способы определения длины разных точек кода, например, через одиночные инструкции, специально разработанные с этой целью, могут иметь преимущество. Кроме того, гранулярная обработка бита внутри байта и между байтами с неустановившимися структурами от одного байта к следующему, применяемая при транскодировании UTF-8 или других точек кода переменной длины в другие форматы, обычно проявляет тенденцию быть трудновыполнимой в операциях с упакованными данными, в векторных операциях или в операциях SIMD. Улучшенные способы выполнения такой гетерогенной обработки внутри байта и между байтами, используемой во время транскодирования, например, через одиночные инструкции, специально разработанные с этой целью, могут иметь преимущества.
На фиг. 3 показана блок-схема варианта осуществления процессора 300, который во время работы выполняет или обрабатывает вариант осуществления инструкции определения длины точки упакованного кода переменной длины 304. Процессор 300, в случае необходимости, может иметь одну из характеристик или атрибутов процессора по фиг. 1. Например, процессор 300 может представлять собой процессор общего назначения, процессор специального назначения, может иметь архитектуру CISC, RISC, VLIW или другую архитектуру, и т.д. Для предотвращения усложнения описания, такие свойства, которые могут быть одинаковыми или аналогичными, не будут повторяться, а скорее описание будет стремиться к тому, чтобы подчеркивать разные или дополнительные свойства процессора по фиг. 3.
Процессор 300 может принимать инструкцию 304 определения длины точки упакованного кода переменной длины. Например, инструкция может быть принята из модуля выборки инструкции, из очереди инструкций и т.п. Инструкция может представлять макроинструкцию, инструкцию на уровне машинного кода, инструкцию языка ассемблера или другую инструкцию или сигнал управления из набора инструкций процессора. Инструкции могут иметь рабочий код или операционный код. Операционный код может представлять собой множество битов, или одно или больше полей, которые во время работы идентифицируют инструкцию и/или операцию, которая должна быть выполнена (например, операцию определения длины точки упакованного кода переменной длины). Инструкции также могут иметь биты или одно или больше полей для установления одного или больше источников и/или операндов назначения, как дополнительно поясняется ниже.
Представленный процессор включает в себя модуль 312 декодирования инструкции. Модуль декодирования инструкции может также называться модулем декодирования или декодером. Модуль декодирования может принимать и декодировать инструкции относительно высокого уровня или сигналы управления (например, макроинструкции, инструкции на уровне машинного кода, инструкции языка ассемблера и т.д.) и может выводить одну или больше микроинструкций, микроопераций, точек входа микрокода или другие инструкции относительно низкого уровня или сигналы управления, которые отражают, представляют и/или которые выведены из инструкций высокого уровня или сигналов управления. Одна или больше из инструкций низкого уровня или сигналов управления может быть воплощена инструкцией высокого уровня или сигналом управления через одну или больше операций низкого уровня (например, на уровне схемы или на уровне аппаратных средств). Модуль декодирования может быть осуществлен, используя всевозможные механизмы, логику или интегральные схемы, включающие в себя, но без ограничений, постоянные запоминающие устройства для микрокода (ROM), справочные таблицы, воплощения в виде аппаратных средств, массивы программируемой логики (PLA) и другие механизмы, логику или интегральные схемы, используемые для воплощения, модули декодирования, известные в области техники.
В других вариантах осуществления могут использоваться эмулятор инструкции, транслятор, морфер, интерпретатор или другая логика преобразования инструкции. Различные типы логики преобразования инструкции известны в области техники и могут быть воплощены в программных, аппаратных средствах, во встроенном программном обеспечении, или используя их комбинации. Логика преобразования инструкции может принимать инструкцию и может эмулировать, транслировать, выполнять трансформацию, интерпретировать или по-другому преобразовывать инструкцию в одну или больше соответствующие выведенные инструкции или сигналы управления. В других вариантах осуществления могут использоваться, как логика преобразования инструкции, так и модуль декодирования. Например, процессор может иметь логику преобразования инструкции для преобразования принимаемой инструкции машинного кода в одну или больше промежуточных инструкций, и модуль декодирования для декодирования одной или больше промежуточных инструкций в одной или больше инструкциях более низкого уровня, или сигналы управления, выполняемые собственными аппаратными средствами процессора (например, исполнительным модулем). Некоторые или все из логики преобразования инструкции могут быть расположены вне процессора, например, на отдельном кристалле и/или в памяти.
Процессор 300 также включает в себя набор регистров 308 упакованных данных. Каждый из регистров упакованных данных может представлять место расположения для накопителя на кристалле, который во время работы сохраняет упакованные данные, векторные данные или данные SIMD. Регистры упакованных данных могут быть воплощены по-разному в разных микроархитектурах, используя хорошо известные технологии, и не ограничены каким-либо определенным типом схемы. Различные типы регистров пригодны для этого. Примеры соответствующих типов регистров включают в себя, но не ограничены этим, специализированные физические регистры, динамически выделенные физические регистры с использованием переименования регистра, и их комбинацию.
Снова обращаясь к фиг. 3, исполнительный модуль 310 соединен с модулем 312 декодирования и с регистрами 308 упакованных данных. В качестве примера исполнительный модуль может включать в себя функциональный модуль, логический модуль, арифметический логический модуль, цифровую схему для выполнения логических и/или арифметических, и логических операций, и т.п. Исполнительный модуль может принимать одну или больше из декодированных или по-другому преобразованных инструкций или сигналы управления, которые представляют инструкцию 304 определения длины точки упакованного кода переменной длины и/или которые выведены из нее. Исполнительный модуль и/или процессор может включать в себя специфичную или конкретную логику (например, схему или другие аппаратные средства, потенциально скомбинированные со встроенным программным обеспечением и/или программным обеспечением), которая работает для выполнения операции определения длины точки упакованного кода переменной длины в ответ на и/или, как результат инструкции определения длины точки упакованного кода переменной длины (например, в ответ на одну или больше инструкций или сигналы управления, декодированные или по-другому выведенные из него).
В некоторых вариантах осуществления инструкция 304 определения длины точки упакованного кода переменной длины может в явном виде устанавливать (например, через одно или больше полей или набор битов), или по-другому обозначать (например, в скрытом виде обозначать), упакованные данные 314 первого источника. Упакованные данные первого источника могут иметь, по меньшей мере, две точки упакованного кода переменной длины знаков 315 Unicode. В одном конкретном варианте осуществления упакованные данные первого источника могут иметь часть потока непрерывно расположенных переменных точек кодов UTF-8 или кодирования для знаков Unicode, включающие в себя кодовые точки из одного байта, двух байтов, в случае необходимости, трех байтов и, в случае необходимости, четырех байтов, хотя объем изобретения не ограничен этим.
В некоторых вариантах осуществления инструкция определения длины точки упакованного кода переменной длины, в случае необходимости, может в явном виде устанавливать или по-другому обозначать упакованные данные 316 второго источника, хотя это и не требуется. Упакованные данные второго источника могут иметь, по меньшей мере, две структуры упакованной сигнатуры для разных точек кода переменной длины. В качестве альтернативы, вместо требования, чтобы инструкция обозначала упакованные данные второго источника, имеющие две или больше структур упакованной сигнатуры, эти две или больше структуры сигнатуры, в случае необходимости, могут быть сохранены в энергонезависимой памяти на кристалле, такой как, например, постоянное запоминающее устройство (ROM) на кристалле. В некоторых вариантах осуществления может присутствовать другая структура сигнатуры для каждой другой точки возможной длины кода в упакованных данных 314 первого источника. В некоторых вариантах осуществления могут присутствовать, по меньшей мере, две, в случае необходимости, три или, в случае необходимости, четыре или больше разных структур сигнатуры, в зависимости от конкретного подхода к кодированию, и каждая из которых соответствует другой точке кода переменной длины, возможного в упакованных данных 314 первого источника. Такие структуры сигнатуры могут быть, по существу, заранее определенными или могут представлять собой фиксированные значения.
В одном конкретном примерном варианте осуществления, в котором используется UTF-8, может присутствовать структура сигнатуры однобайтового UTF-8 для точки однобайтового кода UTF-8, структура сигнатуры двухбайтового UTF-8 для точки двухбайтового кода UTF-8, в случае необходимости, структура сигнатуры трехбайтового UTF-8 для точки трехбайтового кода UTF-8, и, в случае необходимости, структура сигнатуры четырехбайтового UTF-8 для точки четырехбайтового кода UTF-8, хотя объем изобретения не ограничен этим. Структуры битов сигнатуры, в случае необходимости, могут быть аналогичны тем, которые показаны и описаны выше со ссылкой на фиг. 2. Например, структура сигнатуры для точки однобайтового кода UTF-8 может иметь один бит сигнатуры в бите 7, структура сигнатуры для точки двухбайтового кода UTF-8 может иметь пять битов сигнатуры в битах [7:5] и [15:14], структура сигнатуры для точки трехбайтового кода UTF-8 может иметь восемь битов сигнатуры в битах [7:4], [15:14] и [23:22], и структура сигнатуры для точки четырехбайтового кода UTF-8 может иметь одиннадцать битов сигнатуры в битах [7:3], [15:14], [23:22] и [31:30].
В таблице 1, представленной ниже, перечислены примеры соответствующих структур сигнатуры, представленных в двоичном и шестнадцатеричном обозначениях для точек одно-четырехбайтового кода UTF-8.
В некоторых вариантах осуществления инструкции 304 определения длины точки упакованного кода переменной длины, в случае необходимости, могут иметь непосредственный операнд 318, хотя это и не требуется. Непосредственный операнд может иметь значения длины структур сигнатуры для разных точек кода переменной длины (например, которые представляют собой упакованные данные 316 второго источника). Каждое из значений длины может соответствовать разным структурам сигнатуры. Например, значения длины могут включать в себя или могут обозначать длину один байт, соответствующую структуре сигнатуры в один байт, длину два байта, соответствующую структуре сигнатуры два байта, в случае необходимости, длину три байта, соответствующую структуре сигнатуры три байта и, в случае необходимости, длину четыре байта, соответствующую структуре сигнатуры четыре байта. В других вариантах осуществления только два или только три разных значения длины могут потребоваться для конкретного воплощения. В качестве альтернативы, в других вариантах осуществления, вместо инструкции, для которой требуется непосредственный операнд, значения длины структур сигнатуры, в случае необходимости, могут быть предоставлены по-другому, например, путем сохранения в ROM на одном кристалле или в другой энергонезависимой памяти на кристалле. В качестве другого варианта выбора, значения длины, в случае необходимости, могут предоставляться другим явно установленным или неявно обозначенным операндом источника (например, могут быть предоставлены через скрытый регистр).
В некоторых вариантах осуществления инструкция определения длины точки упакованного кода переменной длины, в случае необходимости, может в явном виде устанавливать или по-другому обозначать место 320 назначения (например, место назначения сохранения), где полученные в результате упакованные данные должны быть сохранены в ответ на инструкцию 304. В некоторых вариантах осуществления полученные в результате упакованные данные могут включать в себя упакованные отрезки подтвержденных точек кода переменной длины или кодирование знаков 321 Unicode.
В некоторых вариантах осуществления исполнительный модуль может определять, соответствует ли часть данных из точек упакованного кода переменной длины знакам 315 Unicode любой из разных структур сигнатуры для разных точек 317 длины кода. Например, исполнительный модуль может сравнивать первый байт из точек упакованного кода UTF-8 переменной длины для знаков 315 Unicode с однобайтовой структурой 317 сигнатуры UTF-8, может сравнивать первые два байта из точек упакованного кода UTF-8 переменной длины знаков 315 Unicode с двухбайтовой структурой 317 сигнатуры UTF-8. В некоторых вариантах осуществления исполнительный модуль может также, в случае необходимости, сравнивать первые три байта из точек упакованного кода UTF-8 переменной длины знаков 315 Unicode с тремя байтами структуры 317 сигнатуры UTF-8 и может дополнительно, в случае необходимости, сравнивать первые четыре байта из точек упакованного кода UTF-8 переменной длины знаков 315 Unicode с четырьмя байтами структуры 317 сигнатуры UTF-8.
Если в определенной точке будет обнаружено соответствие, тогда можно предположить, что длина точки кода UTF-8 переменной длины или точки другого кода переменной длины из первых данных 314 источника была правильно определена. Это иногда называется в данной области техники подтверждением кодовой точки. В некоторых вариантах осуществления исполнительный модуль может затем сохранять подтвержденные или по-другому определенные значения длины для этих точек кода UTF-8 переменной длины или других точек кода в соответствующем положении в месте 320 назначения. Например, первый непрерывный трехбайтовый сегмент из первого источника 314 соответствует трехбайтовой структуре сигнатуры из второго источника 316, затем значение три может быть сохранено или по-другому обозначено в соответствующем положении в месте назначения для обозначения того, что соответствующая точка кода представляет собой точку трехбайтового кода. Такая обработка может повторяться для генерирования результата, который включает в себя упакованные значения длины всех удостоверенных точек кода переменной длины знаков 321 Unicode, которые могут быть удостоверены или по-другому определены в первом источнике 314.
Как показано, в некоторых вариантах осуществления, каждые из упакованных данных 314 первого источника, упакованных данных 316 второго источника и место 320 назначения могут представлять разные регистры упакованных данных. В качестве альтернативы, места расположения памяти или другие места расположения накопителя можно использовать для одного или больше из этих операндов. Например, точки упакованного кода переменной длины знаков 315 Unicode могут быть сохранены в определенном месте положения в памяти. Кроме того, один или больше операндов источников и/или мест назначения могут быть скрыты для инструкции, вместо их явного указания. В качестве другого варианта, один из операндов источника, в случае необходимости, может повторно использоваться в качестве операнда назначения, и полученные в результате упакованные данные могут быть записаны поверх упакованных данных источника. Хотя в некоторых случаях может быть желательно сохранить упакованные данные источника.
Для того, чтобы исключить усложнение описания, был представлен и описан относительно простой процессор 300. В других вариантах осуществления процессор, в случае необходимости, может включать в себя другие хорошо известные компоненты, которые можно видеть в процессорах. Примеры таких компонентов включают в себя, но без ограничений, модуль прогнозирования ветвлений, модуль выборки команды, кэш для инструкции и данных, буферы быстрого преобразования адреса для трансляции инструкции и данных, буферы упреждающе