6.47.3.4 Ограничения для конкретных машин
В случае возможности, следует использовать общие символы ограничений в asm аргументах, поскольку они лучше передадут смысл читающему ваш код. В противном случае используйте символы ограничений, которые обычно имеют очень схожие значения в разных архитектурах. Наиболее часто используемыми ограничениями являются ‘m’ и ‘r’ (для памяти и общих регистров соответственно; см. Простые ограничения), и ‘I’, обычно обозначающий наиболее распространённый формат непосредственной константы.
Каждая архитектура определяет дополнительные ограничения. Эти ограничения используются самим компилятором для генерации инструкций, а также для asm операторов; поэтому некоторые ограничения не особенно полезны для asm. Ниже приведён обзор некоторых машинозависимых ограничений, доступных на некоторых конкретных машинах; он включает как ограничения, полезные для asm, так и ограничения, которые таковыми не являются. Файл исходного кода компилятора, упомянутый в заголовке таблицы для каждой архитектуры, является окончательным справочником по значениям ограничений этой архитектуры.
- Семейство AArch64—config/aarch64/constraints.md
-
k-
Регистр указателя стека (
SP) w-
Регистр с плавающей запятой, регистр вектора расширенного SIMD или регистр вектора SVE
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
RG-
Операнд памяти с пространством адресов, подходящим для инструкций GDS
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-
Дополнительный код (дополнение до 1) беззнаковой целочисленной константы, 6-битной.
CmL-
Дополнительный код (дополнение до 2) беззнаковой целочисленной константы, 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’ при инвертировании (дополнение до 1)
L-
Целое число, которое удовлетворяет ограничению ‘I’ при отрицании (дополнение до 2)
M-
Целое число в диапазоне от 0 до 32.
Q-
Ссылка на память, где точный адрес находится в одном регистре («m» предпочтительнее для
asmоператоров) R-
Элемент пула констант
S-
Символ в текстовом сегменте текущего файла
Uv-
Ссылка на память, подходящая для инструкций загрузки/хранения VFP (reg+смещение по константе)
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Константа с плавающей точкой, допустимая для сохранения непосредственного значения
- 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-
Целая константа, значение которой плюс один — степень двойки
P-
Целая константа, которая может быть использована для операций
andв инструкцияхdepiиextru S-
Целая константа 31
U-
Целая константа 63
G-
Постоянная с плавающей точкой 0,0
A-
Операнд памяти таблицы привязки данных
lo_sum Q-
Операнд памяти, который может использоваться в качестве операнда назначения инструкции хранения целых чисел
R-
Масштабируемый или не масштабируемый индексированный операнд памяти
T-
Операнд памяти для загрузки и сохранения с плавающей точкой
WОперанд памяти косвенной адресации регистра
- Intel IA-64—config/ia64/ia64.h
-
a-
Регистр общего назначения
r0поr3для инструкцииaddl b-
Регистр ветвления
c-
Регистр предиката («c» как в «условном»)
d-
Прикладной регистр, находящийся в блоке M
e-
Прикладной регистр, находящийся в блоке I
f-
Регистр с плавающей точкой
m-
Операнд памяти. Если используется вместе с ‘<’ или ‘>’, операнд может иметь постприращение и постдекремент, которые требуют печати с помощью ‘%Pn’ на IA-64.
G-
Постоянные с плавающей точкой 0,0 или 1,0
I-
14-битная постоянная со знаком
J-
22-битная постоянная со знаком
K-
8-битная постоянная со знаком для логических инструкций
L-
8-битная скорректированная постоянная со знаком для псевдокоманд сравнения
M-
6-битная беззнаковая константа для сдвигов
N-
9-битная постоянная со знаком для постприращений при загрузке и сохранении
O-
Постоянный ноль
P-
0 или -1 для инструкции
dep Q-
Неизменяемая память для загрузки и сохранения с плавающей точкой
R-
Целая константа в диапазоне от 1 до 4 для инструкции
shladd SОперанд памяти, за исключением постприращения и постдекремента. Сейчас это примерно то же, что и ‘m’, когда он не используется вместе с ‘<’ или ‘>’.
- M32C—config/m32c/m32c.c
-
RspRfbRsb-
‘$sp’, ‘$fb’, ‘$sb’.
Rcr-
Любой регистр управления, если он имеет ширину 16 бит (пусто, если регистры управления имеют ширину 24 бита)
Rcl-
Любой регистр управления, если он имеет ширину 24 бита.
R0wR1wR2wR3w-
$r0, $r1, $r2, $r3.
R02-
$r0 или $r2, или $r2r0 для 32-битных значений.
R13-
$r1 или $r3, или $r3r1 для 32-битных значений.
Rdi-
Регистр, способный хранить 64-битное значение.
Rhl-
$r0 или $r1 (регистры с адресуемыми старшими/младшими байтами)
R23-
$r2 или $r3
Raa-
Регистры адреса.
Raw-
Регистры адреса, если их ширина 16 бит.
Ral-
Регистры адреса, если их ширина 24 бита.
Rqi-
Регистры, способные хранить значения QI.
Rad-
Регистры, которые могут использоваться со смещениями ($a0, $a1, $sb).
Rsi-
Регистры, способные хранить 32-битные значения.
Rhi-
Регистры, способные хранить 16-битные значения.
Rhc-
Регистры, которые могут хранить 16-битные значения, включая все регистры управления.
Rra-
$r0 до R1, плюс $a0 и $a1.
Rfl-
Регистр флагов.
Rmm-
Базисные псевдорегистры памяти $mem0 до $mem15.
Rpi-
Регистры, которые могут хранить указатели (16-битные регистры для r8c, m16c; 24-битные регистры для m32cm, m32c).
Rpa-
Сопоставление нескольких регистров в режиме PARALLEL для формирования большего регистра. Используется для сопоставления значений возврата функций.
Is3-
-8 … 7
IS1-
-128 … 127
IS2-
-32768 … 32767
IU2-
0 … 65535
In4-
-8 … -1 или 1 … 8
In5-
-16 … -1 или 1 … 16
In6-
-32 … -1 или 1 … 32
IM2-
-65536 … -1
Ilb-
8-битное значение с ровно одним установленным битом.
Ilw-
16-битное значение с ровно одним установленным битом.
Sd-
Общие режимы адресации памяти для источника/приемника.
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. Используйте этот регистр для хранения 64-битных значений. 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, rotate:SI 8 до 1 выражается как rotate
O-
16 (для rotate с использованием swap)
P-
Диапазон от 8 до 15, rotate:HI 8 до 1 выражается как rotate
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Ограничение для класса регистров $r0 по $r7 в формате V3/V3M ISA.
lКласс регистров $r0 по $r7.
dКласс регистров $r0 по $r11, $r16 по $r19.
hКласс регистров $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
-
b-
Базовый регистр адреса
d-
Регистр с плавающей запятой (содержащий 64-битовое значение)
f-
Регистр с плавающей запятой (содержащий 32-битовое значение)
v-
Регистр вектора Altivec
wa-
Любой регистр VSX, если использовался параметр -mvsx, или NO_REGS.
При использовании ограничений регистров (
wa,wd,wf,wg,wh,wi,wj,wk,wl,wm,wo,wp,wq,ws,wt,wu,wv,wwилиwy), принимающих регистры VSX, вы должны использовать%x<n>в шаблоне, чтобы использовать правильный регистр. В противном случае номер регистра, выведенный в файле ассемблера, будет неверным, если регистр Altivec является операндом инструкции VSX, ожидающей нумерацию регистров VSX.asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3));правильно, но:
asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3));неправильно.
Если инструкция принимает только регистры Altivec, вам не нужно использовать
%x<n>.asm ("xsaddqp %0,%1,%2" : "=v" (v1) : "v" (v2), "v" (v3));правильно, потому что инструкция
xsaddqpпринимает только регистры Altivec, в то время как:asm ("xsaddqp %x0,%x1,%x2" : "=v" (v1) : "v" (v2), "v" (v3));неправильно.
wb-
Регистр Altivec, если используется -mcpu=power9 или NO_REGS.
wd-
Регистр VSX вектора для хранения данных двойной точности вектора или NO_REGS.
we-
Регистр VSX, если были использованы параметры -mcpu=power9 и -m64 или NO_REGS.
wf-
Регистр VSX вектора для хранения данных с плавающей запятой одинарной точности вектора или NO_REGS.
wg-
Если был использован -mmfpgpr, регистр с плавающей запятой или NO_REGS.
wh-
Регистр с плавающей запятой, если доступны прямые перемещения, или NO_REGS.
wi-
Регистр FP или VSX для хранения 64-битовых целых чисел для инструкций VSX или NO_REGS.
wj-
Регистр FP или VSX для хранения 64-битовых целых чисел для прямых перемещений или NO_REGS.
wk-
Регистр FP или VSX для хранения 64-битовых чисел с плавающей запятой двойной точности для прямых перемещений или NO_REGS.
wl-
Регистр с плавающей запятой, если инструкция LFIWAX включена или NO_REGS.
wm-
Регистр VSX, если инструкции прямого перемещения включены, или NO_REGS.
wn-
Никакой регистр (NO_REGS).
wo-
Регистр VSX для использования для векторизованных инструкций ISA 3.0 или NO_REGS.
wp-
Регистр VSX для использования для 128-битовых чисел с плавающей запятой IEEE в режиме TF или NO_REGS.
wq-
Регистр VSX для использования для 128-битовых чисел с плавающей запятой IEEE или NO_REGS.
wr-
Регистр общего назначения, если включены 64-битовые инструкции или NO_REGS.
ws-
Регистр VSX вектора для хранения скалярных значений двойной точности или NO_REGS.
wt-
Регистр VSX вектора для хранения 128-битового целого числа или NO_REGS.
wu-
Регистр Altivec для использования при загрузке/хранении чисел с плавающей запятой/32-битовых целых чисел или NO_REGS.
wv-
Регистр Altivec для использования при загрузке/хранении чисел с плавающей запятой двойной точности или NO_REGS.
ww-
Регистр FP или VSX для выполнения операций с плавающей запятой при -mvsx или NO_REGS.
wx-
Регистр с плавающей запятой, если инструкция STFIWX включена или NO_REGS.
wy-
Регистр FP или VSX для выполнения операций с плавающей запятой ISA 2.07 или NO_REGS.
wz-
Регистр с плавающей запятой, если инструкция LFIWZX включена или NO_REGS.
wA-
Базовый регистр адреса, если включены 64-битовые инструкции или NO_REGS.
wB-
Целое число со знаком с 5-битовым константой, которое может быть загружено в регистр Altivec.
wD-
Целочисленная константа, представляющая номер элемента 64-битового скаляра в векторе.
wE-
Векторная константа, которая может быть загружена инструкцией XXSPLTIB.
wF-
Операнд памяти, подходящий для слияния загрузки GPR в power8.
wG-
Операнд памяти, подходящий для слияния ссылок на память TOC.
wH-
Регистр Altivec, если используется -mvsx-small-integer.
wI-
Регистр с плавающей запятой, если используется -mvsx-small-integer.
wJ-
Регистр FP, если используется -mvsx-small-integer и -mpower9-vector.
wK-
Регистр Altivec, если используется -mvsx-small-integer и -mpower9-vector.
wL-
Целочисленная константа, которая является номером элемента, на который нацелена инструкция MFVSRLD.
wM-
Векторная константа со всеми единицами, если доступна инструкция XXLORC.
wO-
Операнд памяти, подходящий для инструкций ISA 3.0 vector d-form.
wQ-
Адрес памяти, который будет работать с инструкциями
lqиstq. wS-
Векторная константа, которая может загружаться с помощью XXSPLTIB и расширения знака.
h-
Регистр «VRSAVE», «CTR» или «LINK»
c-
Регистр «CTR»
l-
Регистр «LINK»
x-
Регистр «CR» (регистр условий) номер 0
y-
Регистр «CR» (регистр условий)
z-
Битый перенос «XER[CA]» (часть регистра XER)
I-
16-битовая константа со знаком
J-
16-битовая константа без знака, сдвинутая влево на 16 бит (используйте «L» вместо
SImodeконстант) K-
16-битовая константа без знака
L-
16-битовая константа со знаком, сдвинутая влево на 16 бит
M-
Константа, больше 31
N-
Точная степень двойки
O-
Ноль
P-
Константа, отрицание которой является 16-битовой константой со знаком
G-
Константа с плавающей запятой, которая может быть загружена в регистр за одну инструкцию на слово
H-
Целочисленная/число с плавающей запятой константа, которая может быть загружена в регистр с помощью трех инструкций
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));неправильно.
es-
«Стабильный» операнд памяти; то есть такой, который не включает автоматическое изменение базового регистра. Это было полезно, когда «m» допускало автоматическое изменение базового регистра, но так как теперь это разрешено только при использовании «<» или «>», «es» по сути такое же, как «m» без «<» и «>».
Q-
Операнд памяти, являющийся смещением от регистра (обычно лучше использовать «m» или «es» в операторах
asm). Z-
Операнд памяти, являющийся индексированным или косвенным от регистра (обычно лучше использовать «m» или «es» в операторах
asm). R-
Запись AIX TOC
a-
Операнд адреса, являющийся индексированным или косвенным от регистра («p» предпочтительнее для операторов
asm). U-
Ссылка на область небольших данных Release 4 System V
W-
Векторная константа, которая не требует памяти
j-
Векторная константа, состоящая только из нулей.
- 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 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-
Векторный ноль.
- SPU—config/spu/spu.h
-
a-
Непосредственный операнд, который можно загрузить с помощью инструкций il/ila/ilh/ilhu. const_int обрабатывается как 64-битовое значение.
c-
Непосредственный операнд для инструкций and/xor/or. const_int обрабатывается как 64-битовое значение.
d-
Непосредственный операнд для инструкции
iohl. const_int обрабатывается как 64-битовое значение. f-
Непосредственный операнд, который можно загрузить с помощью
fsmbi. A-
Непосредственный операнд, который можно загрузить с помощью инструкций il/ila/ilh/ilhu. const_int обрабатывается как 32-битовое значение.
B-
Непосредственный операнд для большинства инструкций арифметики. const_int обрабатывается как 32-битовое значение.
C-
Непосредственный операнд для инструкций and/xor/or. const_int обрабатывается как 32-битовое значение.
D-
Непосредственный операнд для инструкции
iohl. const_int обрабатывается как 32-битовое значение. I-
Константа в диапазоне [-64, 63] для инструкций сдвига/вращения.
J-
Беззнаковая 7-битная константа для инструкций преобразования/nop/канала.
K-
Знаковая 10-битная константа для большинства инструкций арифметики.
M-
Знаковый 16-битный непосредственный операнд для
stop. N-
Беззнаковая 16-битная константа для
iohlиfsmbi. O-
Беззнаковая 7-битная константа, у которой 3 младших бита равны 0.
P-
Беззнаковая 3-битная константа для 16-байтовых вращений и сдвигов.
R-
Операнд вызова, reg, для косвенных вызовов.
S-
Операнд вызова, symbol, для относительных вызовов.
T-
Операнд вызова, const_int, для абсолютных вызовов.
U-
Непосредственный операнд, который можно загрузить с помощью инструкций il/ila/ilh/ilhu. const_int расширяется со знаком до 128 бит.
W-
Непосредственный операнд для инструкций сдвига и вращения. const_int обрабатывается как 32-битовое значение.
Y-
Непосредственный операнд для инструкций and/xor/or. const_int расширяется со знаком до 128 бит.
Z-
Непосредственный операнд для инструкции
iohl. const_int расширяется со знаком до 128 бит.
- 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, так как оно выделит 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-битная константа со знаком или символическая ссылка, известная как подходящая для этого диапазона (для операций преобразования с расширением знака, требующих не-
VOIDmodeнепосредственных операндов). Wz-
32-битная беззнаковая константа или символическая ссылка, известная как подходящая для этого диапазона (для операций преобразования с расширением нулями, требующих не-
VOIDmodeнепосредственных операндов). Wd-
128-битная целочисленная константа, где и старшая, и младшая 64-битные части удовлетворяют ограничению
e. Z-
32-битная беззнаковая константа или символическая ссылка, известная как подходящая для этого диапазона (для непосредственных операндов в инструкциях x86-64 с расширением нулями).
Tv-
Операнд адреса VSIB.
Ts-
Операнд адреса без сегментного регистра.
- Xstormy16—config/stormy16/stormy16.h
-
a-
Регистр r0.
b-
Регистр r1.
c-
Регистр r2.
d-
Регистр r8.
e-
Регистры r0-r7.
t-
Регистры r0 и r1.
y-
Регистр переноса.
z-
Регистры r8 и r9.
I-
Константа от 0 до 3 включительно.
J-
Константа с ровно одним установленным битом.
K-
Константа с ровно одним сброшенным битом.
L-
Константа от 0 до 255 включительно.
M-
Константа от -255 до 0 включительно.
N-
Константа от -3 до 0 включительно.
O-
Константа от 1 до 4 включительно.
P-
Константа от -4 до -1 включительно.
Q-
Ссылка на память, являющаяся push в стек.
R-
Ссылка на память, являющаяся pop из стека.
S-
Ссылка на память, ссылающаяся на константу адреса с известным значением.
T-
Регистр, указанный Rx (ещё не реализован).
U-
Константа, не лежащая в диапазоне от 2 до 15 включительно.
Z-
Константа 0.
- Xtensa—config/xtensa/constraints.md
-
a-
32-битный регистр общего назначения
b-
Реглстр булевых значений 1 бит
A-
Регистр накопителя MAC16 40 бит
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-9.5.0/gcc/Machine-Constraints.html