GCC - The Complete Reference (537669), страница 77
Текст из файла (страница 77)
Строка символов (слагастег з1ппо). Необязательная строка символов. Указатель на другую инструкцию. Указатель на дерево. Код, который должен подвергаться ассемблированию или компиляции и запускаться на выполнение. Необязательный указатель на массив выражений языка ПТ(.. Таблица 20.4. Коды классов вы ажений языка ЙТ). Каввв Опнввннв Оператор сравнения, например, оператор "меньше или равно". Унарный арифметический оператор, например, изменение знака числа или оператор дополнения до единицы.
Некоммутативная двоичная операция, например, вычитание или деление. Код выражения языка ПТК для не битовой операции с тремя аргументами, например, оператора зегкьелгетве. Глава 20. язык регистрового переноса 3 47 й~ввв Оавввние Код выражения языка НТЬ для режимов автоинкрементной адресации. Битовая операция заполнения нулями или установки битов знака. Коммутативная двоичная операция, например, сложение или умножение. Код выражения языка НТЬ для группировки инструкций. Машинная инструкция, например, передача управления или вызов. Код выражения языка НТЬ для согласования инструкций. Код выражения языка НТЬ, соответствующий физическому объекту, например, ячейке лама~и или регистру.
Код выражения языка НТЦ которое не попадает ни в один из выше перечисленнык классов. Количество и типы операндов изменяются в зависимости от кода инструкции. В таблице 20.3 приведены описания кодов, используемых для указания типа данных операндов. Эти коды не требуют строгого соблюдения. Так, например, несмотря на то, что код т используется для указания источника выполняемого кода, а тип а— лля указания простой строки, некоторые определения языка КТЕ в качестве данных типа а содержат исходный код на языке С. Каждый код КТЕ обрабатывается отдельно, поэтому операнды могут содержать практически любые данные — коды типов используются только лишь лля вывода значений операндов при отладке.
Следующий перечень содержит описания кодов языка КТ1 . Для каждого типа указано его нмя, за которым следует его класс, и затем строка символов с типом и количеством операндов. Для всех типов дается описание и список используемых операндов, включающий их тип и назначение. Тип данных и порядок следования операндов должен соответствовать строке, взятой в кавычки. Нумерация операндов начинается с нуля. В коде компилятора ССС форма кодов языка КТЕ, задаваемая буквами верхнего регистра, используется лля определения перечисляемого типа, который применяется в качестве числового идентификатора для КТЕ.
Например, выражение етг аеех в качестве уникального идентификатора использует константу дп Дттн. Как указано в описаниях, некоторые коды КТЬ служат для четко определенной цели. В частности, некоторые из них применяются для создания списков выражений, в то время как другие используются лишь для удобства и никогда не укатываются в инструкциях. Такие коды используются только как элементы описаний наши н. Список инструкций ВТ~ аЬ5 '1'нан Если результат выражения — отрицательное число, то он преобразуется к положительному значению. аЬ56ПС6 5а1 Х' н55 ' Эта инструкция используется только в описаниях машин для указания списка функциональных блоков процессора, которые не могут резервироваться, если оп- 348 Часть !П. Внутренняя структура и окружение ределенные функциональные блоки также не резервированы.
Например, в процессоре Ч!.!Чу з!огО не может резервироваться после з1о!! и з!ог2. Также см. описание для ргевепсе вес. Операнд этого кода 0 представляет собой разделенный запятыми список функциональных блоков, которые не могут резервироваться, если зарезервирован хотя бы один функциональный блок из операнда !. Операнд ! представляет собой разделенный запятыми список функциональных блоков. асЫг сИН чес 'х' "еЕееОи Этот код содержит вектор разниц адресов между базовой операцией и целевой операцией, этот вектор будет использоваться при вычислении расстояний. Операнды 2, 3 и 4 имеют смысл только в случае, когда для компилятора установлен режим сава згжстод Внодтам мора.
Операнд 0 — это базовая операция, операнд !в разница адресов, соответствующая расстоянию каждого операнда до базовой операции. Операнд 2 представляет собой метку минимального адреса, а операнд 3 — метку максимального адреса.
Операнд 4 содержит набор флагов, используемых для определения правил сокращения флагов. Флаг "гв1п а11дп" устанавливает использование минимального выравнивания для ветвей. Флаг "Ьаве агеег вес" указывает, что базовый адрес задан после ьаве агсег ъес. Флаг "гвйп аггег чес" указывает, что целевая метка минимального адреса задана после агЫг бйгг вес. Флаг "гвах ахгег згес" указывает, что целевая метка максимальною адреса задана после агЫг 6*'гг вес.
Флаг "оггвес а11дпеб" устанавливает, что смещения должны считаться значениями без знака, а флаг "вса1е" говорит о необходимости выбора смещений в зависимости от режима. агЫг чес 'х' "Е" Вектор адресов. Каждый адрес включается в себе 1аЬе1 в качестве метки 1аЬе1 ген, асЫгеээ '!у!' "е" Ссылка на адрес аргумента. Операнд 0 представляет собой выражение, описывающеее адрес. аддгеио1 'о' "ей" Ссылка на адрес регистра, который был удален в компиляторе функцией ригве аезкггеввог ( ) при удалении неиспользуемых аЛресов регистров. Операнд 0— это регистр.
Операнд 1 представляет собой исходный номер псевдорегистра„для которого была сгенерирована инструкция. Операнд 2 является объявлением хранящегося в регистре элемента для его использования функцией рак гед йп вгас!е. апд 'с' "ее" Вычисляются значения операндов, а в качестве результата возвращается результат выполнения операции поразрядного сложения (А!ЧО) значений обоих операндов. Глава кб. Язык регистрового переноса 349 а5!З|й '2' "ЕЕи Поразрядный арифметический сдвиг влево. Операнд 0 представляет собой выражение, дающее сдвигаемое значение, а операнд 1 — выражение, определяющее значение количества разрядов, на которое производится сдвиг. а5Ь!ГГГГ '2' "ЕЕи Поразрядный арифметический сдвиг вправо (учитывающий бит знака числа).
Операнд 0 представляет собой выражение, дающее сдвигаемое значение, а операнд ! — выражение, определяющее значение количества разрядов, на которое производится сдвиг. а5ГП !ПРи1 'Х' и5" Строка, передаваемая ассемблеру в качестве инструкции. Она может использоваться в других инструкциях в роли части блока кода, а также для вставки комментариев в код ассемблера.
а5гп орегапсЬ 'х' и55!ЕЕ5!Еи Инструкция языка ассемблера со своими операндами. Операнд 0 представляет собой шаблон, описывающий инструкцию. Операнд 1 является ограничением для результата. Операнд 2 содержит значение-идентификатор, которое позволяет отличить данный оператор языка ассемблера от других операторов. Операнд 3 представляет собой набор значений, которые будут использоваться в качестве входных операндов. Операнд 4 содержит коллекцию режимов и ограничений для входных операндов. Каждый элемент массива принадлежит к типу аввг гприс и содержит строку, указывающую режим входного операнда.
Операнд 5 используется для указания имени файла исходного кода, а операнд 6 — строки исходного кода. аккг х' 5 Этот код используется только в описаниях машин для определения атрибутов инструкций. Это — маркер, который можно вставить для указания имени атрибута. Операнд 0 — это имя атрибута. аГГГ Яа9 'Х' и5" Эта инструкция используется только в описаниях машин для установки атрибутов. Если значение условного выражения равно екие, этот параметр указывает вероятность перехода на ветвь, а выполняемая инструкция задается флагом. Для флага допустимы следующие значению "хохмакб", "Ьасхьгаго", "чехзг 1Ысе1у", "11хе1у", "чеку пп11!ее1у" н "цп11ке1у".
Операнд 0 содержит значение флага. аиГОГПата ОРМОП 'Х' и5и Эта инструкция используется только в описаниях машин в качестве опции для генерации автоматов. Значение "по-взгп1вз1васзоп" для операнда 0 означает, что автомат не может минимизироваться. Это имеет смысл только в случае, когда в состоянии автоматизации будет запрашиваться резервирование блоков процессора.
Опция "сзвге" представляет собой запрос на вывод дополнительной статистики 350 Часть !й. Внутренняя структура н окружение расхода времени при генерации автомата. Опция "тг" является запросом генерации файла с суффиксом . айка, содержащего верификационную и отладочную информацию. Опция "тт" приводит к тому, что при возникновении некритических ошибок генерируются сообщения об ошибках вместо предупреждений.
Опция "пбйа" приводит к формированию недетерминированного конечного автомата. Ьагг1ег 'х' "1цо" Маркер, который указывает, что через него не будет проходить поток выполнения программы. Операнд 0 содержит уникальный идентификатор для выражения языка КТЕ. Оператор ! представляет собой указатель на предыдущую инструкцию в цепочке инструкций, а оператор 2 — на следующую инструкцию.
саП 'х' "ее" Вызывает подпрограмму. Операнд 0 представляет собой адрес вызываемой подпрограммы. Операнд ! содержит количество передаваемых подпрограмме аргументов. саП 1о~о '!' "1ооВИ1еее" Инструкция, которая может вызывать подпрограмму, но не может изменять адрес, на который выполняется возврат из подпрограммы.
Операнд Π— это уникальный идентификатор выражения языка КТЕ. Операнд ! представляет собой указатель на предыдущую инструкцию в цепочке, а операнд 2 — указатель на следующую инструкцию в цепочке. Операнд 3 содержит базовый блок инструкций. Операнд 4 является указателем на узел дерева. Операнд 9 — это инструкция са11 Зпвп кцпссдоп иваде, выполняющая вызов функции. саП р1асеЬо!бег 'х' "ииио" Заполнитель, который должен заменяться инструкцией са11 дпва, или кодом вызова подпрограммы этого же уровня, или кодом рекурсивного вызова. Операнд 0— это уникальный идентификатор выражения языка КТ!..
Операнд 1 представляетсобой указатель на предыдущую инструкцию в цепочке, а операнд 2 — указатель на следующую инструкцию в цепочке. Операнд 3 содержит инструкцию сокте 1аЬе1 для метки, используемой при рекурсивных вызовах. Если рекурсия не применяется, этот операнд содержит нулевой указатель.
с!оЬЬег 'х' "е" Указатель того, что что-то используется таким образом, который не требует обтлснения. Например, вызов подпрограммы будет использовать регистр и перезаписывать ранее содержащееся в нем значение. Также см. ияе. Операнд О представляет собой выражение, указывающее на используемый элемент. ссО 'о' "" Представляет состояние регистра кода условия. Используемая в инструкции логика соответствует ситуации, когда регистр кода условия содержит значение, которое можно сравнить с нулем, но фактически оно равно стае или х а1ве и является результатом предыдущей операции сравнения.
Глава 20. Язык регистрового переноса 3 5 1 соде !аЬе! 'х' "1ииВ00155" Метка, за которой указаны инструкции. Операнд Π— это уникальный идентификатор выражения языка КТЕ. Операнд 1 представляет собой указатель на предыдущую инструкцию в цепочке, а операнд 2 — указатель на следующую инструкцию в цепочке. Операнд 3 содержит базовый блок инструкций, следующий после метки. Операнд 4 — это счетчик переходов на данную метку.