Spec-Zone.ru › GCC 5

6.43.3.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
h

В режиме Thumb ядра регистры r8-r15.

k

Регистр указателя стека.

l

В режиме Thumb ядра регистры r0-r7. В режиме ARM это псевдоним для ограничения r.

t

Регистры VFP с плавающей точкой s0-s31. Используются для 32-битовых значений.

w

Регистры VFP с плавающей точкой d0-d31 и соответствующий подмножество d0-d15 в зависимости от параметров командной строки. Используются только для 64-битовых значений. Недействительно для Thumb1.

y

Регистры сопроцессора iWMMX.

z

Регистры iWMMX GR.

G

Константа с плавающей точкой, равная 0.0

I

Целое число, допустимое в качестве непосредственного операнда в инструкции обработки данных. То есть целое число в диапазоне от 0 до 255, сдвинутое на кратное 2

J

Целое в диапазоне от -4095 до 4095

K

Целое, удовлетворяющее ограничению ‘I’ при инвертировании (дополнительный код единиц)

L

Целое, удовлетворяющее ограничению ‘I’ при отрицании (дополнительный код двоек)

M

Целое число в диапазоне от 0 до 32

Q

Ссылка на память, где точный адрес находится в одном регистре (‘‘m’’ предпочтительнее для asm операторов)

R

Элемент пула констант

S

Символ в текстовом сегменте текущего файла

Uv

Ссылка на память, подходящая для инструкций загрузки/хранения VFP (регистр + константа смещения)

Uy

Ссылка на память, подходящая для инструкций загрузки/хранения iWMMXt.

Uq

Ссылка на память, подходящая для инструкции ARMv4 ldrsb.

AVR семейство—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

Целочисленная константа со всеми установленными битами, кроме ровно одного.

H
Q

Любой SYMBOL_REF.

Архитектура CR16—config/cr16/cr16.h
b

Регистры от r0 до r14 (регистры без указателя стека)

t

Регистр от r0 до r11 (все 16-битные регистры)

p

Регистр от r12 до r15 (все 32-битные регистры)

I

Целочисленная константа со знаком, помещающаяся в 4 бита

J

Целочисленная константа со знаком, помещающаяся в 5 бит

K

Целочисленная константа со знаком, помещающаяся в 6 бит

L

Целочисленная константа без знака, помещающаяся в 4 бита

M

Целочисленная константа со знаком, помещающаяся в 32 бита

N

Проверка на константы шириной 64 бита для инструкций add/sub

G

Константа с плавающей точкой, допустимая для инструкции store immediate

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

Символьная константа для инструкции call/jump.

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.

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
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

Псевдорегистры на основе памяти $mem0 до $mem15.

Rpi

Регистры, которые могут содержать указатели (16-битовые регистры для r8c, m16c; 24-битовые регистры для m32cm, m32c).

Rpa

Сопоставляет несколько регистров в ПАРАЛЛЕЛЬНОМ режиме для формирования большего регистра. Используется для сопоставления значений возврата функций.

Is3

-8 … 7

IS1

-128 … 127

IS2

-32768 … 32767

IU2

0 … 65535

In4

-8 … -1 или 1 … 8

In5

-16 … -1 или 1 … 16

In6

-32 … -1 или 1 … 32

IM2

-65536 … -1

Ilb

8-битовое значение с ровно одним установленным битом.

Ilw

16-битовое значение с ровно одним установленным битом.

Sd

Общие режимы адресации памяти src/dest.

Sa

Память, адресуемая с помощью $a0 или $a1.

Si

Память, адресуемая с помощью непосредственных адресов.

Ss

Память, адресуемая с помощью указателя стека ($sp).

Sf

Память, адресуемая с помощью регистра базового кадра ($fb).

Ss

Память, адресуемая с помощью регистра малого базиса ($sb).

S1

$r1h

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

Константы, которые можно использовать напрямую с логическими инструкциями.

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

Операнд памяти, адрес которого сформирован из базового регистра и смещения, подходящий для использования в инструкциях с тем же режимом адресации, что и ll и sc.

ZD

Адрес, подходящий для инструкции prefetch, или для любой другой инструкции с тем же режимом адресации, что и prefetch.

Motorola 680x0—config/m68k/constraints.md
a

Регистр адреса

d

Регистр данных

f

Регистр с плавающей точкой 68881, если доступен

I

Целое число в диапазоне от 1 до 8

J

16-битное знаковое число

K

Знаковое число, модуль которого больше 0x80

L

Целое число в диапазоне от -8 до -1

M

Знаковое число, модуль которого больше 0x100

N

Диапазон от 24 до 31, ротация: SI от 8 до 1, выраженная как сдвиг

O

16 (для ротации с использованием перестановки)

P

Диапазон от 8 до 15, ротация: HI от 8 до 1, выраженная как сдвиг

R

Числа, которые может обрабатывать mov3q

G

Константа с плавающей точкой, которая не является константой 68881

S

Операнды, удовлетворяющие условию ’m’, когда -mpcrel активен

T

Операнды, удовлетворяющие условию ’s’, когда -mpcrel неактивен

Q

Режим косвенной адресации через регистр адреса

U

Адресация со смещением регистра

W

const_call_operand

Cs

symbol_ref или const

Ci

const_int

C0

const_int 0

Cj

Диапазон знаковых чисел, не помещающихся в 16 бит

Cmvq

Целые числа, допустимые для mvq

Capsw

Целые числа, допустимые для moveq, после которого следует 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

Ссылка на память, которая кодируется внутри кода операции.

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, 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 для хранения данных векторов одинарной точности или 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 для использования при загрузке/хранении чисел с плавающей запятой/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

Точная степень двойки

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

Векторная константа, состоящая из нулей.

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 включительно.

S/390 and zSeries—config/s390/s390.h
a

Регистр адреса (общий регистр, кроме r0)

c

Регистр кода состояния

d

Регистр данных (любой общий регистр)

f

Регистр с плавающей запятой

I

Беззнаковая 8-битная константа (0–255)

J

Беззнаковая 12-битная константа (0–4095)

K

Знаковая 16-битная константа (-32768–32767)

L

Значение, подходящее в качестве смещения.

(0..4095)

для короткого смещения

(-524288..524287)

для длинного смещения

M

Целочисленная константа со значением 0x7fffffff.

N

Ограничение, состоящее из нескольких букв, за которым следуют 4 параметра-буквы.

0..9:

номер части, считая от старшего к младшему разряду

H,Q:

режим части

D,S,H:

режим содержащего операнда

0,F:

значение других частей (F—все биты установлены)

Ограничение соответствует, если указанная часть константы имеет значение, отличное от её других частей.

Q

Ссылка на память без индексного регистра и с коротким смещением.

R

Ссылка на память с индексным регистром и коротким смещением.

S

Ссылка на память без индексного регистра, но с длинным смещением.

T

Ссылка на память с индексным регистром и длинным смещением.

U

Указатель с коротким смещением.

W

Указатель с длинным смещением.

Y

Операнд счёта сдвига.

SPARC—config/sparc/sparc.h
f

Регистр с плавающей запятой на архитектуре SPARC-V8 и нижний регистр с плавающей запятой на архитектуре SPARC-V9.

e

Регистр с плавающей запятой. Он эквивалентен ‘f’ на архитектуре SPARC-V8 и содержит как нижние, так и верхние регистры с плавающей запятой на архитектуре SPARC-V9.

c

Регистр кода состояния с плавающей запятой.

d

Нижний регистр с плавающей запятой. Он допустим только на архитектуре SPARC-V9, когда доступен набор инструкций Visual Instruction Set.

b

Регистр с плавающей запятой. Он допустим только на архитектуре SPARC-V9, когда доступен набор инструкций Visual Instruction Set.

h

64-битный глобальный или выходной регистр для архитектуры SPARC-V8+.

C

Константа всех единиц для чисел с плавающей запятой.

A

Знаковая 5-битная константа

D

Векторная константа

I

Знаковая 13-битная константа

J

Ноль

K

32-битная константа с низкими 12 битами, равными нулю (константа, которую можно загрузить с помощью инструкции sethi)

L

Константа в диапазоне, поддерживаемом инструкциями movcc (11-битный знаковый непосредственный операнд)

M

Константа в диапазоне, поддерживаемом инструкциями movrcc (10-битный знаковый непосредственный операнд)

N

То же, что и ‘K’, за исключением того, что проверяет, что биты, не входящие в диапазон нижних 32 бит, равны нулю. Должен использоваться вместо ‘K’ для режимов, шире SImode

O

Константа 4096

G

Ноль с плавающей запятой

H

Знаковая 13-битная константа, расширенная со знаком до 32 или 64 бит

P

Константа -1

Q

Константа с плавающей запятой, целое представление которой можно переместить в регистр целых чисел с помощью одной инструкции sethi

R

Константа с плавающей запятой, целое представление которой можно переместить в регистр целых чисел с помощью одной инструкции mov

S

Константа с плавающей запятой, целое представление которой можно переместить в регистр целых чисел с помощью последовательности инструкций high/lo_sum

T

Адрес памяти, выровненный по границе 8 байт

U

Чётный регистр

W

Адрес памяти для регистров ограничения ‘e’

w

Адрес памяти только с базовым регистром

Y

Векторный ноль

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 бит.

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

Целочисленная константа, имеющая все биты 1, расположенные последовательно, начиная с бита 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 элементов с одинаковыми элементами.

Visium—config/visium/constraints.md
b

Регистр EAM mdb

c

Регистр EAM mdc

f

Регистр с плавающей запятой

l

Общий регистр, но не r29, r30 и r31

t

Регистр r1

u

Регистр r2

v

Регистр r3

G

Константа с плавающей запятой 0.0

J

Целочисленная константа в диапазоне 0 .. 65535 (16-битное непосредственное значение)

K

Целочисленная константа в диапазоне 1 .. 31 (5-битное непосредственное значение)

L

Целочисленная константа в диапазоне -65535 .. -1 (16-битное отрицательное непосредственное значение)

M

Целочисленная константа -1

O

Целочисленная константа 0

P

Целочисленная константа 32

x86 family—config/i386/constraints.md
R

Зарезервированные регистры — восемь целочисленных регистров, доступных на всех процессорах i386 (a, b, c, d, si, di, bp, sp).

q

Любой регистр, доступный как rl. В 32-битном режиме, a, b, c, и d; в 64-битном режиме, любой целочисленный регистр.

Q

Любой регистр, доступный как rh: a, b, c, и d.

a

Регистр a.

b

Регистр b.

c

Регистр c.

d

Регистр d.

S

Регистр si.

D

Регистр di.

A

Регистры a и d. Этот класс используется для инструкций, возвращающих результаты двойной длины в паре регистров ax:dx. Значения одинарной длины будут выделены либо в ax, либо в dx. Например, на i386 следующее реализует rdtsc:

unsigned long long rdtsc (void)
{
  unsigned long long tick;
  __asm__ __volatile__("rdtsc":"=A"(tick));
  return tick;
}

Это неверно на x86-64, так как это выделит временную метку либо в ax, либо в dx. Вместо этого необходимо использовать следующий вариант:

unsigned long long rdtsc (void)
{
  unsigned int tickl, tickh;
  __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
  return ((unsigned long long)tickh << 32)|tickl;
}
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 с расширением нулями).

Xstormy16—config/stormy16/stormy16.h
a

Регистр r0.

b

Регистр r1.

c

Регистр r2.

d

Регистр r8.

e

Регистры r0 до r7.

t

Регистры r0 и r1.

y

Регистр переноса.

z

Регистры r8 и r9.

I

Константа от 0 до 3 включительно.

J

Константа, у которой установлен ровно один бит.

K

Константа, у которой сброшен ровно один бит.

L

Константа от 0 до 255 включительно.

M

Константа от -255 до 0 включительно.

N

Константа от -3 до 0 включительно.

O

Константа от 1 до 4 включительно.

P

Константа от -4 до -1 включительно.

Q

Ссылка на память, представляющая собой операцию push в стек.

R

Ссылка на память, представляющая собой операцию pop из стека.

S

Ссылка на память, ссылающаяся на адрес константы с известным значением.

T

Регистр, указанный Rx (еще не реализовано).

U

Константа, не находящаяся в диапазоне от 2 до 15 включительно.

Z

Константа 0.

Xtensa—config/xtensa/constraints.md
a

32-битный регистр общего назначения

b

Ре́гистр булевых значений (оди́н бит)

A

40-битный регистр-аккумулятор MAC16

I

Целочисленная константа со знаком 12 бит, для использования в инструкциях MOVI

J

Целочисленная константа со знаком 8 бит, для использования в инструкциях ADDI

K

Целочисленная константа, допустимая для инструкций BccI

L

Целочисленная константа без знака, допустимая для инструкций BccUI

Предыдущее: Модификаторы, Выше: Ограничения [Содержание][Индекс]

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

Spec-Zone.ru

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