6.47.3.4 Ограничения для конкретных машин ¶
По возможности используйте общие буквенные ограничения в asm аргументах, так как они будут лучше понятны людям, читающим ваш код. В противном случае используйте буквенные ограничения, которые обычно имеют очень схожее значение на разных архитектурах. Наиболее часто используемые ограничения — ‘m’ и ‘r’ (для памяти и регистров общего назначения соответственно; см. Простые ограничения), и ‘I’, обычно обозначающий наиболее распространенный формат констант.
Каждая архитектура определяет дополнительные ограничения. Эти ограничения используются самим компилятором для генерации инструкций, а также для asm заявлений; поэтому некоторые ограничения не особенно полезны для asm. Вот сводка некоторых машинозависимых ограничений, доступных на некоторых конкретных машинах; она включает как ограничения, полезные для asm, так и ограничения, которые таковыми не являются. Исходный файл компилятора, упомянутый в заголовке таблицы для каждой архитектуры, является окончательным справочным источником значений ограничений этой архитектуры.
- AArch64 family—config/aarch64/constraints.md
-
k-
Регистр указателя стека (
SP) w-
Регистр с плавающей запятой, регистр вектора расширенного SIMD или регистр вектора SVE
x-
Как
w, но ограничено регистрами с 0 по 15 включительно. y-
Как
w, но ограничено регистрами с 0 по 7 включительно. Upl-
Один из восьми нижних регистров-предикатов SVE (
P0доP7) Upa-
Любой из регистров-предикатов SVE (
P0доP15) I-
Целочисленная константа, которая является допустимым непосредственным операндом в инструкции
ADD J-
Целочисленная константа, которая является допустимым непосредственным операндом в инструкции
SUB(после инвертирования) K-
Целочисленная константа, которая может использоваться с 32-битной логической инструкцией
L-
Целочисленная константа, которая может использоваться с 64-битной логической инструкцией
M-
Целочисленная константа, которая является допустимым непосредственным операндом в 32-битной псевдоинструкции
MOV. ПсевдоинструкцияMOVможет быть ассемблирована в одну из нескольких разных машинных инструкций в зависимости от значения N-
Целочисленная константа, которая является допустимым непосредственным операндом в 64-битной псевдоинструкции
MOV S-
Абсолютный символьный адрес или ссылка на метку
Y-
Константа с плавающей запятой, равная нулю
Z-
Целочисленная константа, равная нулю
Ush-
Высокая часть (биты 12 и выше) pc-относительного адреса символа в пределах 4 ГБ от инструкции
Q-
Адрес памяти, который использует один базовый регистр без смещения
Ump-
Адрес памяти, подходящий для инструкции загрузки/хранения пар в режимах SI, DI, SF и DF
- AMD GCN —config/gcn/constraints.md
-
I-
Целочисленное непосредственное значение в диапазоне от −16 до 64
J-
Непосредственное 16-битное знаковое целое
Kf-
Непосредственное значение, равное −1
L-
Непосредственное 15-битное беззнаковое целое
A-
Непосредственное значение, которое может быть включено в кодировку инструкции: целое от −16 до 64 или число с плавающей точкой 0.0, ±0.5, ±1.0, ±2.0, ±4.0, 1.0/(2.0*PI)
B-
Непосредственное 32-битное знаковое целое, которое может быть добавлено к кодировке инструкции
C-
Непосредственное 32-битное целое в диапазоне от −16 до 4294967295 (т.е. 32-битное беззнаковое целое или ограничение ‘A’)
DA-
Непосредственная 64-битная константа, которая может быть разделена на две константы типа ‘A’
DB-
Непосредственная 64-битная константа, которая может быть разделена на две константы типа ‘B’
U-
Любое значение
unspec Y-
Любой регистр
symbol_refилиlabel_ref v-
Регистр VGPR
Sg-
Регистр SGPR
SD-
Регистры SGPR, допустимые для назначения инструкций, включая VCC, M0 и EXEC
SS-
Регистры SGPR, допустимые в качестве источников инструкций, включая VCC, M0, EXEC и SCC
Sm-
Регистры SGPR, допустимые в качестве источника для скалярных инструкций памяти (исключая M0 и EXEC)
Sv-
Регистры SGPR, допустимые в качестве источника или назначения для векторных инструкций (исключая EXEC)
ca-
Все регистры условий: SCC, VCCZ, EXECZ
cs-
Скалярный регистр условия: SCC
cV-
Векторный регистр условия: VCC, VCC_LO, VCC_HI
e-
Регистр EXEC (EXEC_LO и EXEC_HI)
RB-
Операнд памяти с адресным пространством, подходящим для инструкций
buffer_* RF-
Операнд памяти с адресным пространством, подходящим для инструкций
flat_* RS-
Операнд памяти с адресным пространством, подходящим для инструкций
s_* RL-
Операнд памяти с адресным пространством, подходящим для инструкций LDS
ds_* RG-
Операнд памяти с адресным пространством, подходящим для инструкций GDS
ds_* RD-
Операнд памяти с адресным пространством, подходящим для любых инструкций
ds_* RM-
Операнд памяти с адресным пространством, подходящим для инструкций
global_*
- ARC —config/arc/constraints.md
-
q-
Регистры, применимые в 16-битных инструкциях ARCompact:
r0-r3,r12-r15. Это ограничение может соответствовать только при включенном параметре -mq. eРегистры, применимые в качестве базовых регистров адресов памяти в 16-битных инструкциях памяти ARCompact:
r0-r3,r12-r15,sp. Это ограничение может соответствовать только при включенном параметре -mq.D-
64-битные регистры ARC FPX (dpfp).
D0,D1. I-
Знаковое 12-битное целое число.
Cal-
Константа для арифметических/логических операций. Это может быть любая константа, которую ассемблер или компоновщик могут поместить в длинное непосредственное значение без использования перемещения PIC.
K-
Беззнаковая 3-битная константа.
L-
Беззнаковая 6-битная константа.
CnL-
Обратная дополнения к беззнаковой 6-битной константе.
CmL-
Дополнительное до двух к беззнаковой 6-битной константе.
M-
Беззнаковая 5-битная константа.
O-
Беззнаковая 7-битная константа.
P-
Беззнаковая 8-битная константа.
HЛюбое значение const_double.
- ARM family—config/arm/constraints.md
-
h-
В режиме Thumb ядра регистры
r8-r15. k-
Регистр указателя стека.
l-
В режиме Thumb ядра регистры
r0-r7. В режиме ARM это псевдоним для ограниченияr. t-
Регистры VFP с плавающей запятой
s0-s31. Используются для 32-битовых значений. w-
Регистры VFP с плавающей запятой
d0-d31и соответствующий подмножествоd0-d15в зависимости от параметров командной строки. Используются только для 64-битовых значений. Недействительно для Thumb1. y-
Регистры сопроцессора iWMMX.
z-
Регистры iWMMX GR.
G-
Константа с плавающей запятой 0.0
I-
Целое число, которое является допустимым непосредственным операндом в инструкции обработки данных. То есть целое число в диапазоне от 0 до 255, повернутое на кратное 2
J-
Целое число в диапазоне от −4095 до 4095
K-
Целое число, которое удовлетворяет ограничению ‘I’ при инвертировании (дополнение до единицы)
L-
Целое число, которое удовлетворяет ограничению ‘I’ при инвертировании знака (дополнение до двух)
M-
Целое число в диапазоне от 0 до 32
Q-
Ссылка на память, где точный адрес находится в одном регистре (‘‘m’’ предпочтительнее для
asmвыражений) R-
Элемент пула констант
S-
Символ в текстовом сегменте текущего файла
Uv-
Ссылка на память, подходящая для инструкций загрузки/хранения VFP (регистр + константное смещение)
Uy-
Ссылка на память, подходящая для инструкций загрузки/хранения iWMMXt.
UqСсылка на память, подходящая для инструкции ARMv4 ldrsb.
- AVR family—config/avr/constraints.md
-
l-
Регистры от r0 до r15
a-
Регистры от r16 до r23
d-
Регистры от r16 до r31
w-
Регистры от r24 до r31. Эти регистры могут быть использованы в команде ‘adiw’
e-
Регистр указателя (r26–r31)
b-
Регистр базового указателя (r28–r31)
q-
Регистр указателя стека (SPH:SPL)
t-
Временный регистр r0
x-
Регистровая пара X (r27:r26)
y-
Регистровая пара Y (r29:r28)
z-
Регистровая пара Z (r31:r30)
I-
Константа, больше −1, меньше 64
J-
Константа, больше −64, меньше 1
K-
Целочисленная константа 2
L-
Целочисленная константа 0
M-
Константа, помещающаяся в 8 бит
N-
Целочисленная константа −1
O-
Целочисленная константа 8, 16 или 24
P-
Целочисленная константа 1
G-
Константа с плавающей запятой 0.0
QАдрес памяти, основанный на указателе Y или Z со смещением.
- Blackfin family—config/bfin/constraints.md
-
a-
Регистр P
d-
Регистр D
z-
Регистр P, перезаписанный вызовом функции.
qn-
Один регистр. Если n находится в диапазоне от 0 до 7, соответствующий регистр D. Если это
A, тогда регистр P0. D-
Регистр D с чётным номером
W-
Регистр D с нечётным номером
e-
Регистр аккумулятора.
A-
Регистр аккумулятора с чётным номером.
B-
Регистр аккумулятора с нечётным номером.
b-
Регистр I
v-
Регистр B
f-
Регистр M
c-
Регистры, используемые для циклического буферирования, т.е. регистры I, B или L.
C-
Регистр CC.
t-
LT0 или LT1.
k-
LC0 или LC1.
u-
LB0 или LB1.
x-
Любой регистр D, P, B, M, I или L.
y-
Дополнительные регистры, обычно используемые только в прологах и эпилогах: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT и USP.
w-
Любой регистр, кроме аккумуляторов или CC.
Ksh-
Целое 16-битное число со знаком (в диапазоне от −32768 до 32767)
Kuh-
Целое 16-битное число без знака (в диапазоне от 0 до 65535)
Ks7-
Целое 7-битное число со знаком (в диапазоне от −64 до 63)
Ku7-
Целое 7-битное число без знака (в диапазоне от 0 до 127)
Ku5-
Целое 5-битное число без знака (в диапазоне от 0 до 31)
Ks4-
Целое 4-битное число со знаком (в диапазоне от −8 до 7)
Ks3-
Целое 3-битное число со знаком (в диапазоне от −3 до 4)
Ku3-
Целое 3-битное число без знака (в диапазоне от 0 до 7)
Pn-
Константа n, где n — однозначная константа в диапазоне от 0 до 4.
PA-
Целое число, равное одной из констант MACFLAG_XXX, подходящее для использования с любым аккумулятором.
PB-
Целое число, равное одной из констант MACFLAG_XXX, подходящее для использования только с аккумулятором A1.
M1-
Константа 255.
M2-
Константа 65535.
J-
Целая константа, в которой установлен ровно один бит.
L-
Целая константа, в которой установлены все биты, кроме ровно одного.
HQЛюбая SYMBOL_REF.
- CR16 Architecture—config/cr16/cr16.h
-
b-
Регистры от r0 до r14 (без регистров стека)
t-
Регистры от r0 до r11 (все 16-битные регистры)
p-
Регистры от r12 до r15 (все 32-битные регистры)
I-
Целая константа со знаком, вмещающаяся в 4 бита
J-
Целая константа со знаком, вмещающаяся в 5 битов
K-
Целая константа со знаком, вмещающаяся в 6 битов
L-
Целая константа без знака, вмещающаяся в 4 бита
M-
Целая константа со знаком, вмещающаяся в 32 бита
N-
Проверка на 64-битные константы для инструкций add/sub
GКонстанта с плавающей точкой, допустимая для инструкции store immediate
- C-SKY—config/csky/constraints.md
-
a-
Минимальные регистры r0 - r7.
b-
Низкие регистры r0 - r15.
c-
Регистр C.
y-
Регистры HI и LO.
l-
Регистр LO.
h-
Регистр HI.
v-
Регистры векторов.
zРегистр указателя стека (SP).
- Epiphany—config/epiphany/constraints.md
-
U16-
Константа без знака 16 бит.
K-
Константа без знака 5 бит.
L-
Константа со знаком 11 бит.
Cm1-
Константа со знаком 11 бит, прибавленная к −1. Может сопоставляться только при активной опции -m1reg-reg.
Cl1-
Сдвиг влево на −1, т.е. битовая маска с блоком старших единиц, остальное — блок младших нулей. Может сопоставляться только при активной опции -m1reg-reg.
Cr1-
Сдвиг вправо на −1, т.е. битовая маска с конечным блоком единиц, остальное — нули. Или, иначе, одно меньше степени двойки. Может сопоставляться только при активной опции -m1reg-reg.
Cal-
Константа для арифметических/логических операций. Это похоже на
i, за исключением того, что для кода, независимого от позиции, не допускаются символы/выражения, требующие перераспределения. Csy-
Символьная константа для инструкций вызова/перехода.
Rcs-
Класс регистров, используемых в коротких инструкциях. Это ограничение класса регистров и, следовательно, может управлять распределением регистров. Это ограничение не будет соответствовать, если опция -mprefer-short-insn-regs не активна.
Rsc-
Класс регистров, которые могут использоваться для хранения адреса вызова sibcall. То есть, регистр, сохранённый вызывающей стороной.
Rct-
Класс регистров управления ядром.
Rgs-
Группа регистров, используемых в коротких инструкциях. Это ограничение не использует класс регистров, поэтому оно только пассивно соответствует подходящим регистрам и не управляет распределением регистров.
Rra-
Соответствует адресу возврата, если он может быть заменён регистром связи.
Rcc-
Соответствует регистру целочисленного кода условия.
Sra-
Соответствует адресу возврата, если он находится в слоте стека.
CfmСоответствует значениям регистров управления для переключения режима fp, которые инкапсулированы в
UNSPEC_FP_MODE.
- FRV—config/frv/frv.h
-
a-
Регистр в классе
ACC_REGS(acc0доacc7). b-
Регистр в классе
EVEN_ACC_REGS(acc0доacc7). c-
Регистр в классе
CC_REGS(fcc0доfcc3иicc0доicc3). d-
Регистр в классе
GPR_REGS(gr0доgr63). e-
Регистр в классе
EVEN_REGS(gr0доgr63). Нечётные регистры исключены не в классе, а с помощью машинного режима больше 4 байт. f-
Регистр в классе
FPR_REGS(fr0доfr63). h-
Регистр в классе
FEVEN_REGS(fr0доfr63). Нечётные регистры исключены не в классе, а с помощью машинного режима больше 4 байт. l-
Регистр в классе
LR_REG(регистрlr). q-
Регистр в классе
QUAD_REGS(gr2доgr63). Номера регистров, не делящиеся на 4, исключены не в классе, а с помощью машинного режима больше 8 байт. t-
Регистр в классе
ICC_REGS(icc0доicc3). u-
Регистр в классе
FCC_REGS(fcc0доfcc3). v-
Регистр в классе
ICR_REGS(cc4доcc7). w-
Регистр в классе
FCR_REGS(cc0доcc3). x-
Регистр в классе
QUAD_FPR_REGS(fr0доfr63). Номера регистров, не делящиеся на 4, исключены не в классе, а с помощью машинного режима больше 8 байт. z-
Регистр в классе
SPR_REGS(lcrиlr). A-
Регистр в классе
QUAD_ACC_REGS(acc0доacc7). B-
Регистр в классе
ACCG_REGS(accg0доaccg7). C-
Регистр в классе
CR_REGS(cc0доcc7). G-
Константа с плавающей точкой, равная нулю.
I-
Целая константа со знаком 6 бит.
J-
Целая константа со знаком 10 бит.
L-
Целая константа со знаком 16 бит.
M-
Целая константа без знака 16 бит.
N-
Целая константа со знаком 12 бит, отрицательная (т.е. в диапазоне от −2048 до −1).
O-
Константа, равная нулю.
P-
Целая константа со знаком 12 бит, больше нуля (т.е. в диапазоне от 1 до 2047).
- FT32—config/ft32/constraints.md
-
A-
Абсолютный адрес
B-
Адрес смещения
W-
Операнд косвенной адресации по регистру
e-
Адрес смещения.
f-
Адрес смещения.
O-
Константа ноль или один
I-
16-битная знаковая константа (−32768 … 32767)
w-
Маска битового поля, подходящая для bext или bins
x-
Инвертированная маска битового поля, подходящая для bext или bins
L-
16-битная беззнаковая константа, кратная 4 (0 … 65532)
S-
20-битная знаковая константа (−524288 … 524287)
b-
Константа для ширины битового поля (1 … 16)
KA-
10-битная знаковая константа (−512 … 511)
- Hewlett-Packard PA-RISC—config/pa/pa.h
-
a-
Регистр общего назначения 1
f-
Регистр с плавающей запятой
q-
Регистр сдвига
x-
Регистр с плавающей запятой (устаревший)
y-
Регистр с плавающей запятой (верхний 32-битный), регистр с плавающей запятой (64-битный)
Z-
Любой регистр
I-
Целочисленная константа со знаком 11 бит
J-
Целочисленная константа со знаком 14 бит
K-
Целочисленная константа, которую можно разместить с помощью инструкции
zdepi L-
Целочисленная константа со знаком 5 бит
M-
Целочисленная константа 0
N-
Целочисленная константа, которую можно загрузить с помощью инструкции
ldil O-
Целочисленная константа, значение которой плюс один является степенью 2
P-
Целочисленная константа, которая может использоваться для операций
andв инструкцияхdepiиextru S-
Целочисленная константа 31
U-
Целочисленная константа 63
G-
Константа с плавающей запятой 0,0
A-
Операнд памяти таблицы данных-связи
lo_sum Q-
Операнд памяти, который может использоваться в качестве целевого операнда инструкции целого хранения
R-
Индексированный операнд памяти со масштабированием или без него
T-
Операнд памяти для операций загрузки и сохранения с плавающей запятой
WОперанд косвенной адресации по регистру
- Intel IA-64—config/ia64/ia64.h
-
a-
Регистр общего назначения
r0поr3для инструкцииaddl b-
Регистр ветвления
c-
Регистр предиката (‘c’ как в «условный»)
d-
Прикладной регистр, находящийся в блоке M
e-
Прикладной регистр, находящийся в блоке I
f-
Регистр с плавающей запятой
m-
Операнд памяти. Если используется вместе с ‘<’ или ‘>’, операнд может иметь постприращение и постдекремент, которые требуют вывода с ‘%Pn’ на IA-64.
G-
Константа с плавающей запятой 0,0 или 1,0
I-
14-битная знаковая целочисленная константа
J-
22-битная знаковая целочисленная константа
K-
8-битная знаковая целочисленная константа для логических инструкций
L-
8-битная скорректированная знаковая целочисленная константа для псевдо-операций сравнения
M-
6-битная беззнаковая целочисленная константа для счетов сдвига
N-
9-битная знаковая целочисленная константа для постприращений загрузки и сохранения
O-
Константа ноль
P-
0 или −1 для инструкции
dep Q-
Неизменяемая память для загрузки и сохранения с плавающей запятой
R-
Целочисленная константа в диапазоне от 1 до 4 для инструкции
shladd SОперанд памяти, за исключением постприращения и постдекремента. Сейчас примерно такой же, как ‘m’, когда не используется вместе с ‘<’ или ‘>’.
- M32C—config/m32c/m32c.c
-
RspRfbRsb-
‘$sp’, ‘$fb’, ‘$sb’.
Rcr-
Любой регистр управления, когда его ширина 16 бит (ничего, если регистры управления имеют ширину 24 бита)
Rcl-
Любой регистр управления, когда его ширина 24 бита.
R0wR1wR2wR3w-
$r0, $r1, $r2, $r3.
R02-
$r0 или $r2, или $r2r0 для 32-битных значений.
R13-
$r1 или $r3, или $r3r1 для 32-битных значений.
Rdi-
Регистр, который может содержать 64-битное значение.
Rhl-
$r0 или $r1 (регистры с адресуемыми старшими/младшими байтами)
R23-
$r2 или $r3
Raa-
Регистры адреса
Raw-
Регистры адреса, когда их ширина 16 бит.
Ral-
Регистры адреса, когда их ширина 24 бита.
Rqi-
Регистры, которые могут содержать значения QI.
Rad-
Регистры, которые могут использоваться со смещениями ($a0, $a1, $sb).
Rsi-
Регистры, которые могут содержать 32-битные значения.
Rhi-
Регистры, которые могут содержать 16-битные значения.
Rhc-
Регистры, которые могут содержать 16-битные значения, включая все регистры управления.
Rra-
$r0 до R1, плюс $a0 и $a1.
Rfl-
Регистр флагов.
Rmm-
Регистры псевдопамяти $mem0 до $mem15.
Rpi-
Регистры, которые могут содержать указатели (16-битные регистры для r8c, m16c; 24-битные регистры для m32cm, m32c).
Rpa-
Совпадение нескольких регистров в PARALLEL для формирования более крупного регистра. Используется для совпадения значений возврата функции.
Is3-
−8 … 7
IS1-
−128 … 127
IS2-
−32768 … 32767
IU2-
0 … 65535
In4-
−8 … −1 или 1 … 8
In5-
−16 … −1 или 1 … 16
In6-
−32 … −1 или 1 … 32
IM2-
−65536 … −1
Ilb-
8-битное значение с ровно одним установленным битом.
Ilw-
16-битное значение с ровно одним установленным битом.
Sd-
Общие режимы адресации памяти src/dest.
Sa-
Память, адресованная с помощью $a0 или $a1.
Si-
Память, адресованная с помощью непосредственных адресов.
Ss-
Память, адресованная с помощью указателя стека ($sp).
Sf-
Память, адресованная с помощью регистра базового кадра ($fb).
Ss-
Память, адресованная с помощью регистра малого базового кадра ($sb).
S1$r1h
- MicroBlaze—config/microblaze/constraints.md
-
d-
Регистр общего назначения (
r0поr31). z-
Регистр состояния (
rmsr,$fcc1по$fcc7).
- MIPS—config/mips/constraints.md
-
d-
Регистр общего назначения. Эквивалентен
r, за исключением генерации кода MIPS16, где используется набор регистров MIPS16. f-
Регистр с плавающей точкой (если доступен).
h-
Раньше регистр
hi. Эта ограничение больше не поддерживается. l-
Регистр
lo. Используйте этот регистр для хранения значений, не превышающих слово. x-
Объединенные регистры
hiиlo. Используйте этот регистр для хранения значений двойной длины. c-
Регистр, подходящий для использования в косвенном переходе. Для -mabicalls всегда будет
$25. v-
Регистр
$3. Не используйте это ограничение в новом коде; оно сохранено только для совместимости с glibc. y-
Эквивалентно
r; сохранено для обратной совместимости. z-
Регистр кода состояния с плавающей точкой.
I-
Целочисленная константа со знаком 16 бит (для арифметических инструкций).
J-
Целое число ноль.
K-
Целочисленная константа без знака 16 бит (для логических инструкций).
L-
Целочисленная константа со знаком 32 бит, в которой младшие 16 бит равны нулю. Такие константы могут быть загружены с помощью
lui. M-
Константа, которую нельзя загрузить с помощью
lui,addiuилиori. N-
Константа в диапазоне от −65535 до −1 (включительно).
O-
Целочисленная константа со знаком 15 бит.
P-
Константа в диапазоне от 1 до 65535 (включительно).
G-
Ноль с плавающей точкой.
R-
Адрес, который может быть использован в операции загрузки или сохранения без макроса.
ZC-
Операнд памяти, адрес которого формируется из базового регистра и смещения, пригодный для использования в инструкциях с тем же режимом адресации, что и
llиsc. ZDАдрес, подходящий для инструкции
prefetch, или для любой другой инструкции с таким же режимом адресации, какprefetch.
- Motorola 680x0—config/m68k/constraints.md
-
a-
Регистр адреса
d-
Регистр данных
f-
Регистр с плавающей точкой 68881, если доступен
I-
Целое число в диапазоне от 1 до 8
J-
Целое число со знаком 16 бит
K-
Число со знаком, модуль которого больше 0x80
L-
Целое число в диапазоне от −8 до −1
M-
Число со знаком, модуль которого больше 0x100
N-
Диапазон от 24 до 31, rotatert:SI 8 до 1 выражено как циклический сдвиг
O-
16 (для циклического сдвига с использованием swap)
P-
Диапазон от 8 до 15, rotatert:HI 8 до 1 выражено как циклический сдвиг
R-
Числа, которые может обработать mov3q
G-
Константа с плавающей точкой, которая не является константой 68881
S-
Операторы, которые удовлетворяют ’m’, когда -mpcrel активен
T-
Операторы, которые удовлетворяют ’s’, когда -mpcrel не активен
Q-
Косвенная адресация регистра
U-
Адресация с регистровым смещением
W-
const_call_operand
Cs-
symbol_ref или const
Ci-
const_int
C0-
const_int 0
Cj-
Диапазон чисел со знаком, которые не помещаются в 16 бит
Cmvq-
Целые числа, допустимые для mvq
Capsw-
Целые числа, допустимые для moveq, за которым следует swap
Cmvz-
Целые числа, допустимые для mvz
Cmvs-
Целые числа, допустимые для mvs
Ap-
push_operand
Ac-
Операторы, отличные от регистров, разрешенные в clr
- Moxie—config/moxie/constraints.md
-
A-
Абсолютный адрес
B-
Адрес со смещением
W-
Операнд памяти с косвенной адресацией регистра
I-
Константа в диапазоне от 0 до 255.
N-
Константа в диапазоне от 0 до −255.
- MSP430—config/msp430/constraints.md
-
R12-
Регистр R12.
R13-
Регистр R13.
K-
Целочисленная константа 1.
L-
Целочисленная константа -1^20..1^19.
M-
Целочисленная константа 1-4.
Ya-
Ссылки на память, которые не требуют расширенной инструкции MOVX.
Yl-
Ссылка на память, только метки.
Ys-
Ссылка на память, только стек.
- NDS32—config/nds32/constraints.md
-
wКласс регистров LOW $r0 до $r7 для ISA V3/V3M.
lКласс регистров LOW $r0 до $r7.
dКласс регистров MIDDLE $r0 до $r11, $r16 до $r19.
hКласс регистров HIGH $r12 до $r14, $r20 до $r31.
tВспомогательный регистр $ta (т.е. $r15).
kРегистр стека $sp.
Iu03Неотрицательное непосредственное значение 3 бит.
In03Непосредственное значение со знаком 3 бит в диапазоне от −7 до 0.
Iu04Неотрицательное непосредственное значение 4 бит.
Is05Непосредственное значение со знаком 5 бит.
Iu05Неотрицательное непосредственное значение 5 бит.
In05Непосредственное значение со знаком 5 бит в диапазоне от −31 до 0.
Ip05Неотрицательное непосредственное значение 5 бит для инструкции movpi45 в диапазоне от 16 до 47.
Iu06Ограничение на непосредственное значение 6 бит для инструкции addri36.sp.
Iu08Неотрицательное непосредственное значение 8 бит.
Iu09Неотрицательное непосредственное значение 9 бит.
Is10Непосредственное значение со знаком 10 бит.
Is11Непосредственное значение со знаком 11 бит.
Is15Непосредственное значение со знаком 15 бит.
Iu15Неотрицательное непосредственное значение 15 бит.
Ic15Константа, которая не находится в диапазоне imm15u, но подходит для инструкции bclr.
Ie15Константа, которая не находится в диапазоне imm15u, но подходит для инструкции bset.
It15Константа, которая не находится в диапазоне imm15u, но подходит для инструкции btgl.
Ii15Константа, обратное значение которой находится в диапазоне imm15u и подходит для инструкции bitci.
Is16Непосредственное значение со знаком 16 бит.
Is17Непосредственное значение со знаком 17 бит.
Is19Непосредственное значение со знаком 19 бит.
Is20Непосредственное значение со знаком 20 бит.
IhigНепосредственное значение, которое можно просто установить в старшие 20 бит.
IzebНепосредственное значение 0xff.
IzehНепосредственное значение 0xffff.
IxlsНепосредственное значение 0x01.
Ix11Непосредственное значение 0x7ff.
IbmsНепосредственное значение, являющееся степенью двойки.
IfexНепосредственное значение, являющееся степенью двойки минус 1.
U33Ограничение памяти для формата 333.
U45Ограничение памяти для формата 45.
U37Ограничение памяти для формата 37.
- Nios II family—config/nios2/constraints.md
-
I-
Целое число, допустимое в качестве непосредственного операнда в инструкции, принимающей целое число со знаком 16 бит. Диапазон от −32768 до 32767.
J-
Целое число, допустимое в качестве непосредственного операнда в инструкции, принимающей целое число без знака 16 бит. Диапазон от 0 до 65535.
K-
Целое число, допустимое в качестве непосредственного операнда в инструкции, принимающей только старшие 16 бит 32-битного числа. Диапазон 32-битных чисел, у которых младшие 16 бит равны 0.
L-
Целое число, допустимое в качестве непосредственного операнда в инструкции сдвига. Диапазон от 0 до 31.
M-
Целое число, допустимое в качестве непосредственного операнда только для значения 0. Может быть использовано в сочетании с модификатором формата
zдля использованияr0вместо0в выходном коде ассемблера. N-
Целое число, допустимое в качестве непосредственного операнда для пользовательского кода операции. Диапазон от 0 до 255.
P-
Непосредственный операнд для инструкций R2 andchi/andci.
S-
Совпадает с непосредственными значениями, которые являются адресами в небольшой секции данных и поэтому могут быть добавлены к
gpв качестве 16-битного непосредственного значения для восстановления их 32-битного значения. U-
Совпадает с константами, подходящими в качестве операнда для инструкций rdprs и cache.
v-
Операнд памяти, подходящий для инструкций Nios II R2 загрузки/сохранения с исключением.
w-
Операнд памяти, подходящий для инструкций ввода/вывода и кэширования.
- OpenRISC—config/or1k/constraints.md
-
I-
Целое число, которое является допустимым непосредственным операндом в инструкции, принимающей целое 16-битное число со знаком. Диапазон от −32768 до 32767.
K-
Целое число, которое является допустимым непосредственным операндом в инструкции, принимающей целое 16-битное число без знака. Диапазон от 0 до 65535.
M-
16-битная константа со знаком, сдвинутая влево на 16 битов. (Используется с
l.movhi) O-
Ноль
- PDP-11—config/pdp11/constraints.md
-
a-
Регистры с плавающей точкой AC0 по AC3. Их можно загружать из памяти и записывать в неё одной инструкцией.
d-
Регистры общего назначения с нечётными номерами (R1, R3, R5). Они используются для операций 16-битного умножения.
D-
Ссылка на память, закодированная в коде операции, но не с автоматическим инкрементом или декрементом.
f-
Любой из регистров с плавающей точкой (AC0 по AC5).
G-
Константа с плавающей точкой 0.
h-
Регистры с плавающей точкой AC4 и AC5. Их нельзя загружать из памяти и записывать в неё одной инструкцией.
I-
Целая константа, которая помещается в 16 бит.
J-
Целая константа, младшие 16 биты которой равны нулю.
K-
Целая константа, которая не соответствует ограничениям для кодов ‘I’ или ‘J’.
L-
Целая константа 1.
M-
Целая константа −1.
N-
Целая константа 0.
O-
Целые константы от 0 до 3; сдвиги на эти величины обрабатываются как несколько сдвигов на один бит, а не как один сдвиг переменной длины.
Q-
Ссылка на память, которая требует дополнительного слова (адрес или смещение) после кода операции.
R-
Ссылка на память, закодированная в коде операции.
- PowerPC и IBM RS6000—config/rs6000/constraints.md
-
r-
Регистр общего назначения (GPR),
r0…r31. b-
Базовый регистр. Подобно
r, ноr0не допускается, поэтомуr1…r31. f-
Регистр с плавающей точкой (FPR),
f0…f31. d-
Регистр с плавающей точкой. Сейчас это то же, что и
f; историческиfбыл для одинарной точности, аd— для двойной точности с плавающей точкой. v-
Векторный регистр Altivec (VR),
v0…v31. wa-
Регистр VSX (VSR),
vs0…vs63. Это либо FPR (vs0…vs31—f0…f31) или VR (vs32…vs63—v0…v31).При использовании
wa, следует использовать модификатор вывода%x, чтобы напечатать правильный номер регистра. Например:asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3));Не следует использовать
%xдляvоперандов:asm ("xsaddqp %0,%1,%2" : "=v" (v1) : "v" (v2), "v" (v3)); c-
Регистр счётчика,
ctr. l-
Регистр связи,
lr. x-
Поле регистра состояния 0,
cr0. y-
Любое поле регистра состояния,
cr0…cr7. I-
16-битная константа со знаком.
J-
16-битная константа без знака, сдвинутая влево на 16 битов (используйте
Lвместо дляSImodeконстант). K-
16-битная константа без знака.
L-
16-битная константа со знаком, сдвинутая влево на 16 битов.
eI-
Целая константа со знаком 34 бита, если поддерживаются префиксные инструкции.
m-
Операнд памяти. Как правило,
mне допускает адресов, которые обновляют базовый регистр. Если используется также ограничение<или>, они разрешены, и поэтому на целевых платформах PowerPC в этом случае безопасно использоватьm<>в оператореasm, если этот оператор обращается к операнду ровно один раз. Операторasmтакже должен использовать%U<opno>в качестве плейсхолдера для флага «обновление» в соответствующей инструкции загрузки или сохранения. Например:asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));правильно, но:
asm ("st %1,%0" : "=m<>" (mem) : "r" (val));неправильно.
Q-
Операнд памяти, адресованный только базовым регистром.
Z-
Операнд памяти, к которому осуществляется доступ с индексированным или косвенным адресованием.
a-
Индексированный или косвенный адрес.
- PRU—config/pru/constraints.md
-
I-
Целая константа без знака 8 бит.
J-
Целая константа без знака 16 бит.
L-
Целая константа без знака 5 бит (для счёта сдвигов).
T-
Метка константы сегмента текста (памяти программы).
Z-
Целая константа ноль.
- RL78—config/rl78/constraints.md
-
Int3Целая константа в диапазоне от 1 до 7.
Int8Целая константа в диапазоне от 0 до 255.
JЦелая константа в диапазоне от −255 до 0.
KЦелая константа 1.
LЦелая константа −1.
MЦелая константа 0.
NЦелая константа 2.
OЦелая константа −2.
PЦелая константа в диапазоне от 1 до 15.
QbiВстроенные типы сравнения — eq, ne, gtu, ltu, geu и leu.
QscСинтетические типы сравнения — gt, lt, ge и le.
WabСсылка на память с абсолютным адресом.
WbcСсылка на память с
BCв качестве базового регистра, с необязательным смещением.WcaСсылка на память, используя
AX,BC,DE, илиHLдля адреса, для вызовов.WcvСсылка на память, использующая любую пару 16-битных регистров для адреса, для вызовов.
Wd2Ссылка на память с
DEв качестве базового регистра, с необязательным смещением.WdeСсылка на память с
DEв качестве базового регистра без смещения.WfrЛюбая ссылка на память в дальнем адресном пространстве.
Wh1Ссылка на память с
HLв качестве базового регистра с необязательным однобайтовым смещением.WhbСсылка на память с
HLв качестве базового регистра, сBилиCв качестве индексного регистра.WhlСсылка на память с
HLв качестве базового регистра без смещения.Ws1Ссылка на память с
SPв качестве базового регистра с необязательным однобайтовым смещением.YЛюбая ссылка на память в ближнем адресном пространстве.
AРегистр
AX.BРегистр
BC.DРегистр
DE.RРегистры от
AдоL.SРегистр
SP.TРегистр
HL.Z08W16-битный регистр
R8.Z10W16-битный регистр
R10.ZintРегистры, зарезервированные для прерываний (от
R24доR31).aРегистр
A.bРегистр
B.cРегистр
C.dРегистр
D.eРегистр
E.hРегистр
H.lРегистр
L.vВиртуальные регистры.
wРегистр
PSW.x-
Регистр
X.
- RISC-V—config/riscv/constraints.md
-
f-
Регистр с плавающей точкой (если доступен).
I-
12-битный целое число со знаком типа I.
J-
Целое ноль.
K-
5-битное целое число без знака для инструкций доступа к CSR.
A-
Адрес, который хранится в регистре общего назначения.
- RX—config/rx/constraints.md
-
Q-
Адрес, который не включает косвенную адресацию регистров или пред/после-инкрементную/декрементную адресацию.
Symbol-
Ссылка на символ.
Int08-
Константа в диапазоне от −256 до 255 включительно.
Sint08-
Константа в диапазоне от −128 до 127 включительно.
Sint16-
Константа в диапазоне от −32768 до 32767 включительно.
Sint24-
Константа в диапазоне от −8388608 до 8388607 включительно.
Uint04-
Константа в диапазоне от 0 до 15 включительно.
- S/390 и zSeries—config/s390/s390.h
-
a-
Регистр адреса (общий регистр, за исключением r0)
c-
Регистр кода условия
d-
Регистр данных (любой общий регистр)
f-
Регистр с плавающей запятой
I-
Беззнаковая 8-битная константа (0–255)
J-
Беззнаковая 12-битная константа (0–4095)
K-
Знаковая 16-битная константа (−32768–32767)
L-
Значение, подходящее в качестве смещения.
(0..4095)для короткого смещения
(−524288..524287)для длинного смещения
M-
Целочисленная константа со значением 0x7fffffff.
N-
Ограничение из нескольких букв, за которым следуют 4 параметрические буквы.
0..9:номер части, считая от наиболее к наименее значащей
H,Q:режим части
D,S,H:режим содержащего операнда
0,F:значение других частей (F—все биты установлены)
Ограничение соответствует, если указанная часть константы имеет значение, отличное от других частей.
Q-
Ссылка на память без индексного регистра и с коротким смещением.
R-
Ссылка на память с индексным регистром и коротким смещением.
S-
Ссылка на память без индексного регистра, но с длинным смещением.
T-
Ссылка на память с индексным регистром и длинным смещением.
U-
Указатель с коротким смещением.
W-
Указатель с длинным смещением.
Y-
Операнд счетчика сдвига.
- SPARC—config/sparc/sparc.h
-
f-
Регистр с плавающей запятой на архитектуре SPARC-V8 и регистр с плавающей запятой более низкого порядка на архитектуре SPARC-V9.
e-
Регистр с плавающей запятой. Он эквивалентен ‘f’ на архитектуре SPARC-V8 и содержит регистры с плавающей запятой более низкого и более высокого порядка на архитектуре SPARC-V9.
c-
Регистр кода условия с плавающей запятой.
d-
Регистр с плавающей запятой более низкого порядка. Он действителен только на архитектуре SPARC-V9, когда доступен набор инструкций Visual Instruction Set.
b-
Регистр с плавающей запятой. Он действителен только на архитектуре SPARC-V9, когда доступен набор инструкций Visual Instruction Set.
h-
64-битный глобальный или выходной регистр для архитектуры SPARC-V8+.
C-
Константа all-ones для плавающей запятой.
A-
Знаковая 5-битная константа
D-
Векторная константа
I-
Знаковая 13-битная константа
J-
Ноль
K-
32-битная константа с очищенными 12 младшими битами (константа, которая может быть загружена с помощью инструкции
sethi) L-
Константа в диапазоне, поддерживаемом инструкциями
movcc(11-битный знаковый непосредственный операнд) M-
Константа в диапазоне, поддерживаемом инструкциями
movrcc(10-битный знаковый непосредственный операнд) N-
То же, что и ‘K’, за исключением того, что проверяет, что биты, которые не находятся в диапазоне младших 32 бит, равны нулю. Должен использоваться вместо ‘K’ для режимов шире, чем
SImode O-
Константа 4096
G-
Ноль с плавающей запятой
H-
Знаковая 13-битная константа, с расширением знака до 32 или 64 бит
P-
Константа -1
Q-
Константа с плавающей запятой, целое представление которой можно переместить в целочисленный регистр с помощью одной инструкции sethi
R-
Константа с плавающей запятой, целое представление которой можно переместить в целочисленный регистр с помощью одной инструкции mov
S-
Константа с плавающей запятой, целое представление которой можно переместить в целочисленный регистр с помощью последовательности инструкций high/lo_sum
T-
Адрес памяти, выровненный по границе 8 байт
U-
Четный регистр
W-
Адрес памяти для регистров ограничения ‘e’
w-
Адрес памяти только с базовым регистром
Y-
Векторный ноль
- TI C6X family—config/c6x/constraints.md
-
a-
Файл регистров A (A0–A31).
b-
Файл регистров B (B0–B31).
A-
Регистры-предикаты в файле регистров A (A0–A2 в C64X и выше, в противном случае A1 и A2).
B-
Регистры-предикаты в файле регистров B (B0–B2).
C-
Используемый при вызове регистр в файле регистров B (B0–B9, B16–B31).
Da-
Файл регистров A, за исключением регистров-предикатов (A3–A31, плюс A0, если это не C64X или выше).
Db-
Файл регистров B, за исключением регистров-предикатов (B3–B31).
Iu4-
Целочисленная константа в диапазоне 0 … 15.
Iu5-
Целочисленная константа в диапазоне 0 … 31.
In5-
Целочисленная константа в диапазоне −31 … 0.
Is5-
Целочисленная константа в диапазоне −16 … 15.
I5x-
Целочисленная константа, которая может быть операндом инструкции ADDA или SUBA.
IuB-
Целочисленная константа в диапазоне 0 … 65535.
IsB-
Целочисленная константа в диапазоне −32768 … 32767.
IsC-
Целочисленная константа в диапазоне -2^{20} … 2^{20} - 1.
Jc-
Целочисленная константа, являющаяся допустимой маской для инструкции clr.
Js-
Целочисленная константа, являющаяся допустимой маской для инструкции set.
Q-
Местоположение памяти с базовым регистром A.
R-
Местоположение памяти с базовым регистром B.
Z-
Регистр B14 (также известный как DP).
- TILE-Gx—config/tilegx/constraints.md
-
R00R01R02R03R04R05R06R07R08R09R10-
Каждый из них представляет ограничение регистра для отдельного регистра, от r0 до r10.
I-
Знаковая 8-битная целочисленная константа.
J-
Знаковая 16-битная целочисленная константа.
K-
Беззнаковая 16-битная целочисленная константа.
L-
Целочисленная константа, которая помещается в один знаковый байт при инкременте на единицу (−129 … 126).
m-
Операнд памяти. Если используется вместе с ‘<’ или ‘>’, операнд может иметь пост-инкремент, который требует печати с помощью ‘%In’ и ‘%in’ на TILE-Gx. Например:
asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val)); M-
Битовая маска, подходящая для инструкции BFINS.
N-
Целочисленная константа, которая является байтовой плиткой, выложенной восемь раз.
O-
Целочисленная константа ноль.
P-
Целочисленная константа, которая является расширенным знаком байтом, выложенным как четыре коротких целых числа.
Q-
Целочисленная константа, которая помещается в один знаковый байт при инкременте (−129 … 126), но исключая -1.
S-
Целочисленная константа, у которой все 1 биты идут подряд и начинаются с бита 0.
T-
16-битный фрагмент ссылки got, tls или pc-relative.
U-
Операнд памяти, за исключением пост-инкремента. Примерно то же, что и ‘m’, когда он не используется вместе с ‘<’ или ‘>’.
W-
Векторная константа из 8 элементов с одинаковыми элементами.
Y-
Векторная константа из 4 элементов с одинаковыми элементами.
Z0-
Целочисленная константа 0xffffffff.
Z1-
Целочисленная константа 0xffffffff00000000.
- TILEPro—config/tilepro/constraints.md
-
R00R01R02R03R04R05R06R07R08R09R10-
Каждый из них представляет ограничение регистра для отдельного регистра от r0 до r10.
I-
Целочисленная константа со знаком, 8-битная.
J-
Целочисленная константа со знаком, 16-битная.
K-
Целочисленная константа, отличная от нуля, с нулевыми младшими 16 битами.
L-
Целочисленная константа, которая помещается в один подписанный байт при увеличении на единицу (−129 … 126).
m-
Операнд памяти. Если используется вместе с ‘<’ или ‘>’, операнд может иметь пост-инкремент, который требует вывода с ‘%In’ и ‘%in’ на TILEPro. Например:
asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val)); M-
Маска битов, подходящая для инструкции MM.
N-
Целочисленная константа, которая в четыре раза выложена в байты.
O-
Целочисленная константа, равная нулю.
P-
Целочисленная константа, которая представляет собой байт, расширенный со знаком и выложенный в два коротких числа.
Q-
Целочисленная константа, которая помещается в один байт со знаком при увеличении (−129 … 126), но исключая −1.
T-
Символический операнд или 16-битный фрагмент got, tls или pc-относительной ссылки.
U-
Операнд памяти, за исключением пост-инкремента. Это примерно то же самое, что и ‘m’, когда не используется вместе с ‘<’ или ‘>’.
W-
Векторная константа из 4 элементов с одинаковыми элементами.
Y-
Векторная константа из 2 элементов с одинаковыми элементами.
- Visium—config/visium/constraints.md
-
b-
Регистр EAM
mdb c-
Регистр EAM
mdc f-
Регистр с плавающей точкой
l-
Общий регистр, но не
r29,r30иr31 t-
Регистр
r1 u-
Регистр
r2 v-
Регистр
r3 G-
Константа с плавающей точкой 0.0
J-
Целочисленная константа в диапазоне 0 .. 65535 (16-битный непосредственный операнд)
K-
Целочисленная константа в диапазоне 1 .. 31 (5-битный непосредственный операнд)
L-
Целочисленная константа в диапазоне −65535 .. −1 (16-битный отрицательный непосредственный операнд)
M-
Целочисленная константа −1
O-
Целочисленная константа 0
PЦелочисленная константа 32
- x86 family—config/i386/constraints.md
-
R-
Легальный регистр — восемь целочисленных регистров, доступных на всех процессорах i386 (
a,b,c,d,si,di,bp,sp). q-
Любой регистр, доступный как
rl. В 32-битном режиме —a,b,c, иd; в 64-битном режиме — любой целочисленный регистр. Q-
Любой регистр, доступный как
rh:a,b,c, иd. a-
Регистр
a. b-
Регистр
b. c-
Регистр
c. d-
Регистр
d. S-
Регистр
si. D-
Регистр
di. A-
Регистры
aиd. Этот класс используется для инструкций, возвращающих результаты с двойной длиной в регистреax:dx. Значения одинарной длины будут выделены либо вax, либо вdx. Например, на i386 следующее реализуетrdtsc:unsigned long long rdtsc (void) { unsigned long long tick; __asm__ __volatile__("rdtsc":"=A"(tick)); return tick; }Это неверно на x86-64, так как это выделит тик либо в
ax, либо вdx. Вы должны использовать вместо этого следующий вариант:unsigned long long rdtsc (void) { unsigned int tickl, tickh; __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); return ((unsigned long long)tickh << 32)|tickl; } U-
Целочисленные регистры, изменяемые при вызове.
f-
Любой регистр с плавающей точкой 80387 (стек).
t-
Вершина стека с плавающей точкой 80387 (
%st(0)). u-
Предпоследний элемент стека с плавающей точкой 80387 (
%st(1)). y-
Любой регистр MMX.
x-
Любой регистр SSE.
v-
Любой регистр SSE, кодируемый EVEX (
%xmm0-%xmm31). Yz-
Первый регистр SSE (
%xmm0). I-
Целочисленная константа в диапазоне 0 … 31 для 32-битных сдвигов.
J-
Целочисленная константа в диапазоне 0 … 63 для 64-битных сдвигов.
K-
Целочисленная константа со знаком, 8-битная.
L-
0xFFили0xFFFF, для andsi как перемещения с нулевым расширением. M-
0, 1, 2 или 3 (сдвиги для инструкции
lea). N-
Целочисленная константа без знака, 8-битная (для инструкций
inиout). G-
Стандартная константа с плавающей точкой 80387.
C-
Нулевой операнд константы SSE.
e-
32-битная целочисленная константа со знаком или символическая ссылка, известная в этом диапазоне (для непосредственных операндов в инструкциях x86-64 с расширением знака).
We-
32-битная целочисленная константа со знаком или символическая ссылка, известная в этом диапазоне (для операций преобразования с расширением знака, требующих непосредственных операндов без
VOIDmode). Wz-
32-битная целочисленная константа без знака или символическая ссылка, известная в этом диапазоне (для операций преобразования с нулевым расширением, требующих непосредственных операндов без
VOIDmode). Wd-
128-битная целочисленная константа, где как старшая, так и младшая 64-битные части удовлетворяют ограничению
e. Z-
32-битная целочисленная константа без знака или символическая ссылка, известная в этом диапазоне (для непосредственных операндов в инструкциях x86-64 с нулевым расширением).
Tv-
Операнд адреса VSIB.
Ts-
Операнд адреса без регистра сегмента.
- Xstormy16—config/stormy16/stormy16.h
-
a-
Регистр r0.
b-
Регистр r1.
c-
Регистр r2.
d-
Регистр r8.
e-
Регистры r0 по r7.
t-
Регистры r0 и r1.
y-
Регистр переноса.
z-
Регистры r8 и r9.
I-
Константа от 0 до 3 включительно.
J-
Константа, имеющая ровно один установленный бит.
K-
Константа, имеющая ровно один сброшенный бит.
L-
Константа от 0 до 255 включительно.
M-
Константа от −255 до 0 включительно.
N-
Константа от −3 до 0 включительно.
O-
Константа от 1 до 4 включительно.
P-
Константа от −4 до −1 включительно.
Q-
Ссылка на память, которая представляет собой push в стек.
R-
Ссылка на память, которая представляет собой pop из стека.
S-
Ссылка на память, которая ссылается на адрес константы с известным значением.
T-
Регистр, указанный Rx (еще не реализован).
U-
Константа, не находящаяся в диапазоне от 2 до 15 включительно.
Z-
Константа 0.
- Xtensa—config/xtensa/constraints.md
-
a-
32-битный регистр общего назначения
b-
Регистр булевых значений 1 бита
A-
40-битный регистр-аккумулятор MAC16
I-
Целочисленная константа со знаком, 12-битная, для использования в инструкциях MOVI
J-
Целочисленная константа со знаком, 8-битная, для использования в инструкциях ADDI
K-
Целочисленная константа, допустимая для инструкций BccI
L-
Целочисленная константа без знака, допустимая для инструкций BccUI
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/Machine-Constraints.html