Spec-Zone.ru › GCC 4

6.42.4 Ограничения для конкретных машин

В тех случаях, когда это возможно, следует использовать общие буквенные обозначения ограничений в аргументах asm, поскольку они лучше передают смысл читателям вашего кода. В противном случае используйте буквенные обозначения ограничений, которые, как правило, имеют очень похожие значения в разных архитектурах. Наиболее часто используемые ограничения — ‘m’ и ‘r’ (соответственно для регистров памяти и общих регистров; см. Простые ограничения), а также ‘I’, обычно обозначающая наиболее распространенный формат непосредственных констант.

Каждая архитектура определяет дополнительные ограничения. Эти ограничения используются самим компилятором для генерации инструкций, а также для asm операторов; поэтому некоторые ограничения не особенно полезны для asm. Вот сводка некоторых зависящих от машины ограничений, доступных на некоторых конкретных машинах; она включает как ограничения, полезные для asm , так и ограничения, которыми не являются. Исходный файл компилятора, упомянутый в заголовке таблицы для каждой архитектуры, является окончательным справочником по значениям ограничений данной архитектуры.

Семейство AArch64—config/aarch64/constraints.md
k
Регистр указателя стека (SP)
w
Регистр плавающей точки или регистр векторной SIMD
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
ARC —config/arc/constraints.md
q
Регистры, используемые в 16-битных инструкциях ARCompact: r0-r3, r12-r15. Это ограничение может сопоставиться только при включенном параметре -mq.
e
Регистры, пригодные в качестве базовых регистров адресов памяти в 16-битных инструкциях памяти ARCompact: r0-r3, r12-r15, sp . Это ограничение может сопоставиться только при включенном параметре -mq.
D
64-битные регистры ARC FPX (dpfp). D0, D1.
I
Целочисленная константа со знаком длиной 12 бит.
Cal
Константа для арифметических/логических операций. Это может быть любая константа, которую ассемблер или компоновщик может поместить в длинную константу без использования перераспределения PIC.
K
Целочисленная константа без знака длиной 3 бита.
L
Целочисленная константа без знака длиной 6 бит.
CnL
Дополнительный код к целочисленной константе без знака длиной 6 бит.
CmL
Дополнительный код к целочисленной константе без знака длиной 6 бит (дополнение до двух).
M
Целочисленная константа без знака длиной 5 бит.
O
Целочисленная константа без знака длиной 7 бит.
P
Целочисленная константа без знака длиной 8 бит.
H
Любое значение const_double.
Семейство ARM—config/arm/constraints.md
w
Регистр плавающей точки VFP
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 со смещением.
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.
Архитектура 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 бита для инструкций сложения/вычитания
G
Константа плавающей точки, допустимая для инструкции сохранения непосредственного значения
Hewlett-Packard PA-RISC—config/pa/pa.h
a
Регистр общего назначения 1
f
Регистр с плавающей точкой
q
Регистр смещения
x
Регистр с плавающей точкой (устаревший)
y
Регистр с плавающей точкой (32-битный), регистр с плавающей точкой (64-битный)
Z
Любой регистр
I
Целочисленная константа со знаком длиной 11 бит
J
Целочисленная константа со знаком длиной 14 бит
K
Целочисленная константа, которая может быть помещена с помощью инструкции zdepi
L
Целочисленная константа со знаком длиной 5 бит
M
Целочисленная константа 0
N
Целочисленная константа, которая может быть загружена с помощью инструкции ldil
O
Целочисленная константа, значение которой плюс один является степенью 2
P
Целочисленная константа, которая может использоваться для операций and в инструкциях depi и extru
S
Целочисленная константа 31
U
Целочисленная константа 63
G
Константа с плавающей точкой 0.0
A
Операнд памяти таблицы связей данных lo_sum
Q
Операнд памяти, который может использоваться в качестве целевого операнда инструкции целочисленной записи
R
Операнд памяти с индексом, масштабируемый или нет
T
Операнд памяти для загрузки и сохранения чисел с плавающей точкой
W
Операнд памяти с косвенной адресацией по регистру
Семейство picoChip—picochip.h
k
Регистр стека.
f
Регистр указателя. Регистр, который может использоваться для доступа к памяти без указания смещения. Любой другой регистр может использоваться для доступа к памяти, но потребует постоянного смещения. В случае, если смещение равно нулю, использование регистра указателя более эффективно, так как это уменьшает размер кода.
t
Двойной регистр. Регистр, который может быть сопряжён с соседним регистром для создания 32-битного регистра.
a
Любой абсолютный адрес памяти (например, символьная константа, символьная константа + смещение).
I
Целочисленная константа со знаком длиной 4 бита.
J
Целочисленная константа без знака длиной 4 бита.
K
Целочисленная константа со знаком длиной 8 бит.
M
Любая константа, абсолютное значение которой не превышает 4 бит.
N
Целочисленная константа со знаком длиной 10 бит
O
Целочисленная константа со знаком длиной 16 бит.
PowerPC и 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, 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));

неверно.

wd
Векторный регистр VSX для хранения данных двойной точности вектора или NO_REGS.
wf
Векторный регистр VSX для хранения данных с плавающей точкой (float) вектора или 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).
wr
Регистр общего назначения, если включены 64-битные инструкции, или NO_REGS.
ws
Векторный регистр VSX для хранения скалярных значений с двойной точностью или NO_REGS.
wt
Векторный регистр VSX для хранения 128-битного целого числа или NO_REGS.
wu
Регистр Altivec для использования при загрузке/сохранении чисел с плавающей точкой (float) или 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.
wD
Целочисленная константа, являющаяся номером элемента 64-битного скаляра в векторе.
wQ
Адрес памяти, который будет работать с инструкциями lq и stq.
h
Регистр ‘MQ’, ‘CTR’ или ‘LINK’
q
Регистр ‘MQ’
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
Точная степень 2
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
Запись TOC AIX
a
Операнд адреса, представляющий собой индекс или косвенную ссылку от регистра (‘p’ предпочтительнее для операторов asm).
S
Константа, подходящая в качестве операнда маски длиной 64 бита
T
Константа, подходящая в качестве операнда маски длиной 32 бита
U
Ссылка на небольшую область данных System V Release 4
t
Маски AND, которые могут быть выполнены двумя инструкциями rldic{l, r}
W
Векторная константа, которая не требует памяти
j
Векторная константа, все элементы которой равны нулю.
Intel 386—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;
}
f
Любой регистр с плавающей точкой 80387 (стек).
t
Вершина стека регистров с плавающей точкой 80387 (%st(0)).
u
Второй сверху регистр стека регистров с плавающей точкой 80387 (%st(1)).
y
Любой регистр MMX.
x
Любой регистр SSE.
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 с расширением знака).
Z
32-битная целочисленная константа без знака или символическая ссылка, известная тем, что она подходит для этого диапазона (для непосредственных операндов в инструкциях x86-64 с нулевым расширением).
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», когда не используется вместе с «<» или «>».
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.
Blackfin family—config/bfin/constraints.md
a
Регистр P
d
Регистр D
z
Вызов функции изменил регистр P.
qn
Один регистр. Если n находится в диапазоне от 0 до 7, то соответствующий регистр D. Если это A, то регистр P0.
D
Регистр D с чётным номером
W
Регистр D с нечётным номером
e
Регистр аккумулятора.
A
Регистр аккумулятора с чётным номером.
B
Регистр аккумулятора с нечётным номером.
b
Регистр I
v
Регистр B
f
Регистр M
c
Регистры, используемые для циклического буферизации, т.е. регистры I, B или L.
C
Регистр CC.
t
LT0 или LT1.
k
LC0 или LC1.
u
LB0 или LB1.
x
Любой регистр D, P, B, M, I или L.
y
Дополнительные регистры, обычно используемые только в прологах и эпилогах: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT и USP.
w
Любой регистр, кроме аккумуляторов или CC.
Ksh
Целое число со знаком 16 бит (в диапазоне от −32768 до 32767)
Kuh
Целое число без знака 16 бит (в диапазоне от 0 до 65535)
Ks7
Целое число со знаком 7 бит (в диапазоне от −64 до 63)
Ku7
Целое число без знака 7 бит (в диапазоне от 0 до 127)
Ku5
Целое число без знака 5 бит (в диапазоне от 0 до 31)
Ks4
Целое число со знаком 4 бит (в диапазоне от −8 до 7)
Ks3
Целое число со знаком 3 бит (в диапазоне от −3 до 4)
Ku3
Целое число без знака 3 бит (в диапазоне от 0 до 7)
Pn
Константа n, где n — однозначная константа в диапазоне от 0 до 4.
PA
Целое число, равное одной из констант MACFLAG_XXX, подходящая для использования с любым аккумулятором.
PB
Целое число, равное одной из констант MACFLAG_XXX, подходящая только для использования с аккумулятором A1.
M1
Константа 255.
M2
Константа 65535.
J
Целая константа с ровно одним установленным битом.
L
Целая константа со всеми установленными битами, кроме ровно одного.
H
Q
Любая SYMBOL_REF.
M32C—config/m32c/m32c.c
Rsp
Rfb
Rsb
‘$sp’, ‘$fb’, ‘$sb’.
Rcr
Любой регистр управления, когда он имеет ширину 16 бит (ничего, если регистры управления имеют ширину 24 бита)
Rcl
Любой регистр управления, когда он имеет ширину 24 бита.
R0w
R1w
R2w
R3w
$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
Регистры памяти pseudo-регистры $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
MeP—config/mep/constraints.md
a
Регистр $sp.
b
Регистр $tp.
c
Любой регистр управления.
d
Либо регистр $hi, либо регистр $lo.
em
Регистры сопроцессора, которые могут быть загружены напрямую ($c0-$c15).
ex
Регистры сопроцессора, которые могут быть перемещены друг в друга.
er
Регистры сопроцессора, которые могут быть перемещены в регистры ядра.
h
Регистр $hi.
j
Регистр $rpc.
l
Регистр $lo.
t
Регистры, которые могут использоваться в адресации, относительной к $tp.
v
Регистр $gp.
x
Регистры сопроцессора.
y
Регистры управления сопроцессора.
z
Регистр $0.
A
Набор регистров пользователя A.
B
Набор регистров пользователя B.
C
Набор регистров пользователя C.
D
Набор регистров пользователя D.
I
Смещения для адресации, относительной к $gp.
J
Константы, которые могут быть использованы напрямую с инструкциями boolean.
K
Константы, которые могут быть напрямую загружены в регистры.
L
Небольшие константы, которые могут быть добавлены к регистрам.
M
Длинные сдвиги.
N
Небольшие константы, которые могут быть сравнены с регистрами.
O
Константы, которые могут быть загружены в верхнюю половину регистров.
S
Непосредственные значения со знаком 8 бит.
T
Символы, закодированные для адресации, относительной к $tp или $gp.
U
Адреса, не являющиеся константами, для загрузки/сохранения регистров сопроцессора.
W
Верхняя половина значения символа.
Y
Адрес с косвенной адресацией без смещения.
Z
Символические ссылки на шину управления.
MicroBlaze—config/microblaze/constraints.md
d
Общий регистр (r0 до r31).
z
Регистр состояния (rmsr, $fcc1 до $fcc7).
MIPS—config/mips/constraints.md
d
Регистр адреса. Эквивалентен r за исключением генерации кода MIPS16.
f
Регистр с плавающей точкой (если доступен).
h
Раньше регистр hi. Это ограничение больше не поддерживается.
l
Регистр lo. Используйте этот регистр для хранения значений, не превышающих размер слова.
x
Объединённые регистры hi и lo. Используйте этот регистр для хранения значений двойного слова.
c
Регистр, подходящий для использования в косвенном переходе. Для -mabicalls всегда будет $25.
v
Регистр $3. Не используйте это ограничение в новом коде; оно сохраняется только для совместимости с glibc.
y
Эквивалентно r; сохраняется для обратной совместимости.
z
Регистр кода условия для чисел с плавающей точкой.
I
Целое число со знаком 16-бит (для арифметических инструкций).
J
Целое ноль.
K
Целое число без знака 16-бит (для логических инструкций).
L
Целое число со знаком 32-бит, в котором младшие 16 битов равны нулю. Такие константы могут быть загружены с помощью lui.
M
Константа, которую нельзя загрузить с помощью lui, addiu или ori.
N
Константа в диапазоне от −65535 до −1 (включительно).
O
Целое число со знаком 15-бит.
P
Константа в диапазоне от 1 до 65535 (включительно).
G
Ноль с плавающей точкой.
R
Адрес, который можно использовать в не-макрокомандной загрузке или сохранении.
ZC
При компиляции кода microMIPS это ограничение соответствует операнду памяти, адрес которого формируется из базового регистра и 12-битного смещения. Эти операнды могут использоваться для инструкций microMIPS, таких как ll и sc. При компиляции не для кода microMIPS, ZC эквивалентно R.
ZD
При компиляции кода microMIPS это ограничение соответствует операнду адреса, который формируется из базового регистра и 12-битного смещения. Эти операнды могут использоваться для инструкций microMIPS, таких как prefetch . При компиляции не для кода microMIPS, ZD эквивалентно p.
Motorola 680x0—config/m68k/constraints.md
a
Регистр адреса
d
Регистр данных
f
Регистр 68881 с плавающей точкой, если доступен
I
Целое число в диапазоне от 1 до 8
J
16-битное целое число со знаком
K
Число со знаком, модуль которого больше 0x80
L
Целое число со знаком в диапазоне от −8 до −1
M
Число со знаком, модуль которого больше 0x100
N
Диапазон от 24 до 31, вращение:SI от 8 до 1, представленное как вращение
O
16 (для вращения с использованием swap)
P
Диапазон от 8 до 15, вращение:HI от 8 до 1, представленное как вращение
R
Числа, которые может обработать mov3q
G
Константа с плавающей точкой, которая не является константой 68881
S
Операнды, удовлетворяющие 'm', когда -mpcrel активен
T
Операнды, удовлетворяющие 's', когда -mpcrel неактивен
Q
Косвенный режим адресации регистра
U
Адресация с регистровым смещением
W
const_call_operand
Cs
symbol_ref или const
Ci
const_int
C0
const_int 0
Cj
Диапазон целых чисел со знаком, которые не помещаются в 16 бит
Cmvq
Целые числа, допустимые для mvq
Capsw
Целые числа, допустимые для moveq, за которым следует 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.
S
Соответствует непосредственным значениям, являющимся адресами в небольшой секции данных и, следовательно, может быть добавлен к gp как 16-битное непосредственное значение для пересоздания их 32-битного значения.
PDP-11—config/pdp11/constraints.md
a
Регистры с плавающей точкой AC0 по AC3. Их можно загружать из памяти и сохранять в неё одной инструкцией.
d
Регистры общего назначения с нечётными номерами (R1, R3, R5). Они используются для операций умножения на 16 бит.
f
Любой из регистров с плавающей точкой (AC0 по AC5).
G
Константа с плавающей точкой 0.
I
Целая константа, помещающаяся в 16 бит.
J
Целая константа, младшие 16 биты которой равны нулю.
K
Целая константа, не удовлетворяющая ограничениям для кодов ‘I’ или ‘J’.
L
Целая константа 1.
M
Целая константа −1.
N
Целая константа 0.
O
Целые константы от −4 до −1 и от 1 до 4; сдвиги на эти величины обрабатываются как несколько сдвигов на один бит, а не как один сдвиг переменной длины.
Q
Ссылка на ячейку памяти, требующая дополнительного слова (адреса или смещения) после кода операции.
R
Ссылка на ячейку памяти, закодированная в коде операции.
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.
Z08W
16-битный регистр R8.
Z10W
16-битный регистр R10.
Zint
Регистры, зарезервированные для прерываний (от R24 до R31).
a
Регистр A.
b
Регистр B.
c
Регистр C.
d
Регистр D.
e
Регистр E.
h
Регистр H.
l
Регистр L.
v
Виртуальные регистры.
w
Регистр PSW.
x
Регистр X.
RX—config/rx/constraints.md
Q
Адрес, не использующий косвенную адресацию по регистру или адресацию с пред/после-инкрементом/декрементом.
Symbol
Ссылка на символ.
Int08
Константа в диапазоне от −256 до 255 включительно.
Sint08
Константа в диапазоне от −128 до 127 включительно.
Sint16
Константа в диапазоне от −32768 до 32767 включительно.
Sint24
Константа в диапазоне от −8388608 до 8388607 включительно.
Uint04
Константа в диапазоне от 0 до 15 включительно.
SPARC—config/sparc/sparc.h
f
Регистр с плавающей точкой на архитектуре SPARC-V8 и регистр с плавающей точкой более низкого порядка на архитектуре SPARC-V9.
f
Регистр с плавающей точкой. Он эквивалентен ‘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
Векторный ноль.
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-битовая константа, три младших бита которой равны 0.
P
Беззнаковая 3-битовая константа для 16-байтовых вращений и сдвигов
R
Операнд вызова, регистр, для косвенных вызовов
S
Операнд вызова, символ, для относительных вызовов.
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 бит.
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
Операнд счетчика сдвига.
Score family—config/score/score.h
d
Регистры от r0 до r32.
e
Регистры от r0 до r16.
t
Регистры r8—r11 или r22—r27.
h
Регистр hi.
l
Регистр lo.
x
Регистр hi + lo.
q
Регистр cnt.
y
Регистр lcb.
z
Регистр scb.
a
Регистр cnt + lcb + scb.
c
Регистр cr0—cr15.
b
Регистры cp1.
f
Регистры cp2.
i
Регистры cp3.
j
Регистры cp1 + cp2 + cp3.
I
Высшая 16-битная константа (32-битная константа с 16 младшими битами нулями).
J
Беззнаковое 5-битовое целое число (в диапазоне от 0 до 31).
K
Беззнаковое 16-битовое целое число (в диапазоне от 0 до 65535).
L
Знаковое 16-битовое целое число (в диапазоне от −32768 до 32767).
M
Беззнаковое 14-битовое целое число (в диапазоне от 0 до 16383).
N
Знаковое 14-битовое целое число (в диапазоне от −8192 до 8191).
Z
Любой SYMBOL_REF.
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.
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
R00
R01
R02
R03
R04
R05
R06
R07
R08
R09
R10
Каждый из них представляет ограничение регистра для отдельного регистра, от 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
R00
R01
R02
R03
R04
R05
R06
R07
R08
R09
R10
Каждый из них представляет ограничение регистра для отдельного регистра, от 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-элементный векторный константа с одинаковыми элементами.
Xtensa—config/xtensa/constraints.md
a
32-битный регистр общего назначения
b
Однобитный регистр булевых значений
A
40-битный регистр аккумулятора MAC16
I
12-битная целочисленная константа со знаком для использования в инструкциях MOVI
J
8-битная целочисленная константа со знаком для использования в инструкциях ADDI
K
Целочисленная константа, допустимая для инструкций BccI
L
Целочисленная константа без знака, допустимая для инструкций BccUI

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Machine-Constraints.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API