6.47.3.4 Ограничения для конкретных машин
В случае возможности, следует использовать общеприменимые буквы ограничений в asm аргументах, так как они будут лучше передавать смысл читателям вашего кода. В противном случае используйте буквы ограничений, которые обычно имеют очень похожие значения в разных архитектурах. Наиболее часто используемые ограничения — ‘m’ и ‘r’ (соответственно для памяти и универсальных регистров; см. Простые ограничения), и ‘I’, обычно обозначающая наиболее распространённый формат непосредственной константы.
Каждая архитектура определяет дополнительные ограничения. Эти ограничения используются самим компилятором для генерации инструкций, а также для asm операторов; поэтому некоторые из ограничений не очень полезны для asm. Вот краткое описание некоторых машинозависимых ограничений, доступных на некоторых конкретных машинах; оно включает как ограничения, полезные для asm, так и ограничения, которыми не стоит пользоваться. Файл исходного кода компилятора, упомянутый в заголовке таблицы для каждой архитектуры, является окончательным справочником по значениям ограничений этой архитектуры.
- Семейство AArch64—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-
Регистры 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 —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-
Регистры GR iWMMX.
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—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—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—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).
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-
Целочисленная константа, значение которой плюс единица является степенью двойки
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.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-
Сопоставляет несколько регистров в режиме 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
- LoongArch—config/loongarch/constraints.md
-
fРегистр с плавающей точкой (если доступен).
kОперанд памяти, адрес которого формируется базовым регистром и (необязательным, масштабируемым) индексным регистром.
lЦелое 16-битное число со знаком.
mОперанд памяти, адрес которого формируется базовым регистром и смещением, подходящим для использования в инструкциях с тем же режимом адресации, что и
st.wиld.w.IЦелое 12-битное число со знаком (для арифметических инструкций).
KЦелое 12-битное число без знака (для логических инструкций).
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 (для поворота с использованием перестановки)
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 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 бит, если поддерживаются префиксные инструкции.
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-
Целочисленная константа со знаком 12 бит типа I.
J-
Целое ноль.
K-
Целочисленная константа без знака 5 бит для инструкций доступа к CSR.
A-
Адрес, хранящийся в регистре общего назначения.
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, когда доступен набор команд Visual Instruction Set.
b-
Регистр с плавающей запятой. Он действителен только на архитектуре SPARC-V9, когда доступен набор команд Visual Instruction Set.
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).
- 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-относительной.
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-битная константа со знаком или символическая ссылка, известная в этом диапазоне (для операций преобразования с расширением знака, требующих операндов-констант без непосредственных значений).
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-
Ссылка на память, которая является стековым выталкиванием.
R-
Ссылка на память, которая является стековым извлечением.
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-12.2.0/gcc/Machine-Constraints.html