6.47.3.4 Ограничения для конкретных машин ¶
По возможности, следует использовать общие буквенные ограничения в asm аргументах, так как они лучше передают смысл читателю кода. В противном случае, используйте буквенные ограничения, которые обычно имеют очень схожее значение на различных архитектурах. Наиболее часто используемые ограничения — ‘m’ и ‘r’ (для памяти и регистров общего назначения соответственно; см. Простые ограничения), и ‘I’, обычно обозначающий наиболее распространённый формат констант.
Каждая архитектура определяет дополнительные ограничения. Эти ограничения используются самим компилятором для генерации инструкций, а также для asm заявлений; поэтому некоторые ограничения не очень полезны для asm. Ниже представлен сводный список некоторых зависимых от машины ограничений, доступных на некоторых конкретных машинах; он включает как ограничения, полезные для asm, так и те, что таковыми не являются. Файл исходного кода компилятора, упомянутый в заголовке таблицы для каждой архитектуры, является окончательным справочником по значениям ограничений данной архитектуры.
- AArch64 family—config/aarch64/constraints.md
-
k-
Регистр указателя стека (
SP) w-
Регистр с плавающей точкой, регистр вектора Advanced 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 и выше) псевдо-относительного адреса символа в пределах 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 или float 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-
Регистры ARC FPX (dpfp) 64-бита.
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 бита для инструкций сложения/вычитания
GКонстанта с плавающей точкой, допустимая для непосредственной записи в память
- 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-
Прикладной регистр, находящийся в блоке М
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-
Регистр, подходящий для использования в косвенном переходе. Он всегда будет
$25для -mabicalls. 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, вращение:SI 8 до 1, выражено как вращение
O-
16 (для вращения с использованием обмена)
P-
Диапазон от 8 до 15, вращение: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, за которым следует обмен
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Непосредственное значение со степенью двойки минус единица.
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 and 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обращается к операнду ровно один раз. Инструкция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.
b-
Регистр с плавающей запятой. Он действителен только на архитектуре SPARC-V9, когда доступен набор инструкций Visual.
h-
64-битный глобальный или выходной регистр для архитектуры SPARC-V8+.
C-
Константа всех единиц для чисел с плавающей запятой.
A-
Целочисленная константа со знаком 5 бит
D-
Векторная константа
I-
Целочисленная константа со знаком 13 бит
J-
Ноль
K-
32-битная константа с низкими 12 битами, очищенными (константа, которую можно загрузить с помощью инструкции
sethi) L-
Константа в диапазоне, поддерживаемом инструкциями %%%CODE_BLOCK_765%% (11-битный непосредственный операнд со знаком)
M-
Константа в диапазоне, поддерживаемом инструкциями
movrcc(10-битный непосредственный операнд со знаком) N-
То же, что и ‘K’, за исключением того, что он проверяет, что биты, которые не находятся в диапазоне нижних 32 бит, равны нулю. Должен использоваться вместо ‘K’ для режимов шире, чем %%%CODE_BLOCK_769%%
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-
Целочисленная константа, у которой все биты единицы идут последовательно и начинаются с бита 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, так как это разместит tick либо в
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-битная целочисленная константа со знаком или символическая ссылка, известная как входящая в этот диапазон (для операций преобразования с расширением знака, которые требуют операндов константы без знака).
Wz-
32-битная целочисленная константа без знака или символическая ссылка, известная как входящая в этот диапазон (для операций преобразования с расширением нулями, которые требуют операндов константы без знака).
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-11.4.0/gcc/Machine-Constraints.html