6.48.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
a-
Регистр ускорителя VGPR (с CDNA1 и далее)
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.
- C-SKY—config/csky/constraints.md
-
a-
Минимальные регистры r0 - r7
b-
Низкие регистры r0 - r15
c-
Регистр C
y-
Регистры HI и LO
l-
Регистр LO
h-
Регистр HI
v-
Регистры векторов
z-
Регистр стекового указателя (SP)
Q-
Адрес памяти, использующий базовый регистр с коротким смещением или индексный регистр со своим масштабом.
WАдрес памяти, использующий базовый регистр с индексным регистром и его масштабом.
- 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.cc
-
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-
Сопоставляет несколько регистров в ПАРАЛЛЕЛЬНОМ режиме, формируя больший регистр. Используется для сопоставления значений возврата функций.
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
- LoongArch—config/loongarch/constraints.md
-
fРегистр с плавающей точкой или векторный регистр (если доступен).
kОперанд памяти, адрес которого формируется из базового регистра и (необязательного масштабируемого) индексного регистра.
lЦелочисленная константа со знаком длиной 16 бит.
mОперанд памяти, адрес которого формируется из базового регистра и смещения, подходящего для использования в инструкциях с тем же режимом адресации, что и
st.wиld.w.IЦелочисленная константа со знаком длиной 12 бит (для арифметических инструкций).
KБеззнаковая константа длиной 12 бит (для логических инструкций).
MКонстанта, которая не может быть загружена с помощью
lui,addiuилиori.NКонстанта в диапазоне от -65535 до -1 (включительно).
OЦелочисленная константа со знаком длиной 15 бит.
PКонстанта в диапазоне от 1 до 65535 (включительно).
RАдрес, который может быть использован в загрузке или сохранении без макроса.
ZBАдрес, находящийся в общем регистре. Смещение равно нулю.
ZCОперанд памяти, адрес которого формируется из базового регистра и смещения, подходящего для использования в инструкциях с тем же режимом адресации, что и
ll.wиsc.w.
- 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, 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-битное целое число, если поддерживаются префиксные инструкции.
eP-
Скалярная константа с плавающей точкой или векторная константа, которую можно загрузить в регистр VSX с одной префиксной инструкцией.
eQ-
Константа IEEE 128 бит, которую можно загрузить в регистр VSX с помощью инструкции
lxvkq. 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-
Целочисленная непосредственная константа типа I, 12-битная со знаком.
J-
Целое число ноль.
K-
Непосредственная константа без знака, 5 бит, для инструкций доступа к CSR.
A-
Адрес, хранящийся в регистре общего назначения.
vr-
Регистр вектора (если доступен).
vd-
Регистр вектора, исключая v0 (если доступен).
vm-
Регистр вектора, только v0 (если доступен).
SОграничение, соответствующее абсолютному символическому адресу.
- RX—config/rx/constraints.md
-
Q-
Адрес, не использующий косвенную адресацию через регистр или адресацию с пред/после-инкрементом/декрементом.
Symbol-
Ссылка на символ.
Int08-
Константа в диапазоне от −256 до 255 включительно.
Sint08-
Константа в диапазоне от −128 до 127 включительно.
Sint16-
Константа в диапазоне от −32768 до 32767 включительно.
Sint24-
Константа в диапазоне от −8388608 до 8388607 включительно.
Uint04-
Константа в диапазоне от 0 до 15 включительно.
- S/390 and 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, когда доступен набор визуальных инструкций.
b-
Регистр с плавающей запятой. Он допустим только на архитектуре SPARC-V9, когда доступен набор визуальных инструкций.
h-
64-битный глобальный или выходной регистр для архитектуры SPARC-V8+.
C-
Константа единиц для чисел с плавающей запятой.
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).
- 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. Ws-
Символическая ссылка или ссылка на метку. Можно использовать модификатор
%p, чтобы вывести исходный символ. 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-
Однобитный регистр булевых значений
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-14.2.0/gcc/Machine-Constraints.html