Spec-Zone.ru › GCC 12

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

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

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

Семейство AArch64—config/aarch64/constraints.md
k

Регистр указателя стека (SP)

w

Регистр с плавающей точкой, регистр вектора расширенной SIMD или регистр вектора SVE

x

Как w, но ограничено регистрами от 0 до 15 включительно.

y

Как w, но ограничено регистрами от 0 до 7 включительно.

Upl

Один из восьми нижних регистров предиката SVE (P0 до P7)

Upa

Любой из регистров предиката SVE (P0 до P15)

I

Целочисленная константа, допустимая в качестве операнда-константы в инструкции ADD

J

Целочисленная константа, допустимая в качестве операнда-константы в инструкции SUB (после отрицания)

K

Целочисленная константа, которая может быть использована с 32-битной логической инструкцией

L

Целочисленная константа, которая может быть использована с 64-битной логической инструкцией

M

Целочисленная константа, допустимая в качестве операнда-константы в 32-битной псевдоинструкции MOV. Псевдоинструкция MOV может быть собрана в одну из нескольких различных машинных инструкций в зависимости от значения

N

Целочисленная константа, допустимая в качестве операнда-константы в 64-битной псевдоинструкции MOV

S

Абсолютный символический адрес или ссылка на метку

Y

Константа с плавающей точкой ноль

Z

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

Ush

Старшая часть (биты 12 и выше) pc-относительного адреса символа в пределах 4 ГБ от инструкции

Q

Адрес памяти, использующий один базовый регистр без смещения

Ump

Адрес памяти, подходящий для инструкции загрузки/хранения пары в режимах SI, DI, SF и DF

AMD GCN —config/gcn/constraints.md
I

Целочисленная константа в диапазоне от -16 до 64

J

Целочисленная 16-битная константа со знаком

Kf

Непосредственная константа -1

L

Целочисленная 15-битная константа без знака

A

Непосредственная константа, которая может быть включена в кодировку инструкции: целое число -16..64 или плавающая точка 0.0, +/-0.5, +/-1.0, +/-2.0, +/-4.0, 1.0/(2.0*PI)

B

Целочисленная 32-битная константа со знаком, которая может быть прикреплена к кодировке инструкции

C

Целочисленная 32-битная константа в диапазоне -16..4294967295 (т.е. 32-битное целое без знака или ограничение ‘A’)

DA

64-битная константа, которая может быть разделена на две константы ‘A’

DB

64-битная константа, которая может быть разделена на две константы ‘B’

U

Любой unspec

Y

Любой symbol_ref или label_ref

v

Регистр VGPR

Sg

Регистр SGPR

SD

Регистры SGPR, допустимые в качестве назначения инструкции, включая VCC, M0 и EXEC

SS

Регистры SGPR, допустимые в качестве источника инструкции, включая VCC, M0, EXEC и SCC

Sm

Регистры SGPR, допустимые в качестве источника для скалярных инструкций памяти (исключая M0 и EXEC)

Sv

Регистры SGPR, допустимые в качестве источника или назначения для векторных инструкций (исключая EXEC)

ca

Все регистры условий: SCC, VCCZ, EXECZ

cs

Скалярный регистр условия: SCC

cV

Векторный регистр условия: VCC, VCC_LO, VCC_HI

e

Регистр EXEC (EXEC_LO и EXEC_HI)

RB

Операнд памяти с адресным пространством, подходящим для инструкций buffer_*

RF

Операнд памяти с адресным пространством, подходящим для инструкций flat_*

RS

Операнд памяти с адресным пространством, подходящим для инструкций s_*

RL

Операнд памяти с адресным пространством, подходящим для инструкций LDS ds_*

RG

Операнд памяти с адресным пространством, подходящим для инструкций GDS ds_*

RD

Операнд памяти с адресным пространством, подходящим для любых инструкций ds_*

RM

Операнд памяти с адресным пространством, подходящим для инструкций global_*

ARC —config/arc/constraints.md
q

Регистры, применимые в 16-битных инструкциях ARCompact: r0-r3, r12-r15. Это ограничение может совпасть только при использовании опции -mq.

e

Регистры, применимые в качестве базовых регистров адресов памяти в 16-битных инструкциях памяти ARCompact: r0-r3, r12-r15, sp. Это ограничение может совпасть только при использовании опции -mq.

D

Регистры ARC FPX (dpfp) 64 бит. D0, D1.

I

Целочисленная константа со знаком 12 бит.

Cal

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

K

Целочисленная константа без знака 3 бит.

L

Целочисленная константа без знака 6 бит.

CnL

Дополнительный код константы без знака 6 бит.

CmL

Двойной дополнительный код константы без знака 6 бит.

M

Целочисленная константа без знака 5 бит.

O

Целочисленная константа без знака 7 бит.

P

Целочисленная константа без знака 8 бит.

H

Любое значение const_double.

Семейство ARM —config/arm/constraints.md
h

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

k

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

l

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

t

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

w

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

y

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

z

Регистры GR iWMMX.

G

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

I

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

J

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

K

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

L

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

M

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

Q

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

R

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

S

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

Uv

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

Uy

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

Uq

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

Семейство AVR—config/avr/constraints.md
l

Регистры от r0 до r15

a

Регистры от r16 до r23

d

Регистры от r16 до r31

w

Регистры от r24 до r31. Эти регистры могут использоваться в команде «adiw»

e

Регистр указателя (r26–r31)

b

Базовый регистр указателя (r28–r31)

q

Регистр указателя стека (SPH:SPL)

t

Временный регистр r0

x

Регистровый пар X (r27:r26)

y

Регистровый пар Y (r29:r28)

z

Регистровый пар Z (r31:r30)

I

Константа больше -1, меньше 64

J

Константа больше -64, меньше 1

K

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

L

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

M

Константа, помещающаяся в 8 бит

N

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

O

Целочисленная константа 8, 16 или 24

P

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

G

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

Q

Адрес памяти, основанный на указателе Y или Z со смещением.

Семейство Blackfin—config/bfin/constraints.md
a

Регистр P

d

Регистр D

z

Регистр P, изменённый при вызове.

qn

Один регистр. Если n находится в диапазоне от 0 до 7, то соответствующий регистр D. Если это A, то регистр P0.

D

Регистр D с чётным номером

W

Регистр D с нечётным номером

e

Регистр-аккумулятор.

A

Регистр-аккумулятор с чётным номером.

B

Регистр-аккумулятор с нечётным номером.

b

Регистр I

v

Регистр B

f

Регистр M

c

Регистры, используемые для циклического буферирования, т.е. регистры I, B или L.

C

Регистр CC.

t

LT0 или LT1.

k

LC0 или LC1.

u

LB0 или LB1.

x

Любой регистр D, P, B, M, I или L.

y

Дополнительные регистры, обычно используемые только в прологах и эпилогах: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT и USP.

w

Любой регистр, кроме аккумуляторов или CC.

Ksh

Целочисленное 16-битное знаковое число (в диапазоне от -32768 до 32767)

Kuh

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

Ks7

Целочисленное 7-битное знаковое число (в диапазоне от -64 до 63)

Ku7

Целочисленное 7-битное беззнаковое число (в диапазоне от 0 до 127)

Ku5

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

Ks4

Целочисленное 4-битное знаковое число (в диапазоне от -8 до 7)

Ks3

Целочисленное 3-битное знаковое число (в диапазоне от -3 до 4)

Ku3

Целочисленное 3-битное беззнаковое число (в диапазоне от 0 до 7)

Pn

Константа n, где n — однозначная константа в диапазоне от 0 до 4.

PA

Целое число, равное одной из констант MACFLAG_XXX, подходящих для использования с любым аккумулятором.

PB

Целое число, равное одной из констант MACFLAG_XXX, подходящих только для использования с аккумулятором A1.

M1

Константа 255.

M2

Константа 65535.

J

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

L

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

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

C-SKY—config/csky/constraints.md
a

Мини-регистры r0 - r7.

b

Низкие регистры r0 - r15.

c

Регистр C.

y

Регистры HI и LO.

l

Регистр LO.

h

Регистр HI.

v

Векторные регистры.

z

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

Q

Адрес памяти, использующий базовый регистр с коротким смещением или индексный регистр со своим масштабом.

W

Адрес памяти, использующий базовый регистр с индексным регистром и его масштабом.

Epiphany—config/epiphany/constraints.md
U16

Беззнаковая 16-битная константа.

K

Беззнаковая 5-битная константа.

L

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

Cm1

Знаковая 11-битная константа, добавленная к -1. Может соответствовать только при активном параметре -m1reg-reg.

Cl1

Левый сдвиг на -1, т.е. маска бита с блоком ведущих единиц, остальная часть — блок хвостовых нулей. Может соответствовать только при активном параметре -m1reg-reg.

Cr1

Правый сдвиг на -1, т.е. маска бита с хвостовым блоком единиц, остальная часть — нули. Или, другими словами, на единицу меньше степени двойки. Может соответствовать только при активном параметре -m1reg-reg.

Cal

Константа для арифметических/логических операций. Это похоже на i, за исключением того, что для кода, независимого от позиции, не допускаются символы/выражения, требующие перераспределения.

Csy

Символьная константа для команд вызова/перехода.

Rcs

Класс регистров, используемых в коротких командах. Это ограничение класса регистров, и оно может управлять распределением регистров. Это ограничение не будет соответствовать, если -mprefer-short-insn-regs не активен.

Rsc

Класс регистров, которые могут использоваться для хранения адреса вызова sibcall. Т.е., регистр, сохраняемый вызывающим элементом.

Rct

Класс регистров управления ядром.

Rgs

Группа регистров, используемых в коротких командах. Это ограничение не использует класс регистров, поэтому оно только пассивно соответствует подходящим регистрам и не управляет распределением регистров.

Rra

Соответствует адресу возврата, если его можно заменить регистром связи.

Rcc

Соответствует целочисленному регистру кода состояния.

Sra

Соответствует адресу возврата, если он находится в слоте стека.

Cfm

Соответствует значениям регистров управления для переключения режима fp, которые заключены в UNSPEC_FP_MODE.

FRV—config/frv/frv.h
a

Регистрация в классе ACC_REGS (acc0 по acc7).

b

Регистрация в классе EVEN_ACC_REGS (acc0 по acc7).

c

Регистрация в классе CC_REGS (fcc0 по fcc3 и icc0 по icc3).

d

Регистрация в классе GPR_REGS (gr0 по gr63).

e

Регистрация в классе EVEN_REGS (gr0 по gr63). Нечётные регистры исключаются не в классе, а с помощью машинного режима, большего, чем 4 байта.

f

Регистрация в классе FPR_REGS (fr0 по fr63).

h

Регистрация в классе FEVEN_REGS (fr0 по fr63). Нечётные регистры исключаются не в классе, а с помощью машинного режима, большего, чем 4 байта.

l

Регистрация в классе LR_REG (регистр lr).

q

Регистрация в классе QUAD_REGS (gr2 по gr63). Номера регистров, не делящиеся на 4, исключаются не в классе, а с помощью машинного режима, большего, чем 8 байт.

t

Регистрация в классе ICC_REGS (icc0 по icc3).

u

Регистрация в классе FCC_REGS (fcc0 по fcc3).

v

Регистрация в классе ICR_REGS (cc4 по cc7).

w

Регистрация в классе FCR_REGS (cc0 по cc3).

x

Регистрация в классе QUAD_FPR_REGS (fr0 по fr63). Номера регистров, не делящиеся на 4, исключаются не в классе, а с помощью машинного режима, большего, чем 8 байт.

z

Регистрация в классе SPR_REGS (lcr и lr).

A

Регистрация в классе QUAD_ACC_REGS (acc0 по acc7).

B

Регистрация в классе ACCG_REGS (accg0 по accg7).

C

Регистрация в классе CR_REGS (cc0 по cc7).

G

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

I

Постоянная целочисленная величина со знаком, 6-битовая

J

Постоянная целочисленная величина со знаком, 10-битовая

L

Постоянная целочисленная величина со знаком, 16-битовая

M

Постоянная целочисленная величина без знака, 16-битовая

N

Постоянная целочисленная величина со знаком, 12-битовая, отрицательная (от -2048 до -1)

O

Постоянная, равная нулю

P

Постоянная целочисленная величина со знаком, 12-битовая, больше нуля (от 1 до 2047)

FT32—config/ft32/constraints.md
A

Абсолютный адрес

B

Адрес смещения

W

Операнд памяти с косвенной адресацией через регистр

e

Адрес смещения.

f

Адрес смещения.

O

Постоянная, равная нулю или единице

I

Постоянная целочисленная величина со знаком, 16-битовая (-32768 … 32767)

w

Маска битового поля, подходящая для команд bext или bins

x

Инвертированная маска битового поля, подходящая для команд bext или bins

L

Постоянная целочисленная величина без знака, 16-битовая, кратная 4 (0 … 65532)

S

Постоянная целочисленная величина со знаком, 20-битовая (-524288 … 524287)

b

Постоянная для ширины битового поля (1 … 16)

KA

Постоянная целочисленная величина со знаком, 10-битовая (-512 … 511)

Hewlett-Packard PA-RISC—config/pa/pa.h
a

Регистр общего назначения 1

f

Регистр с плавающей точкой

q

Регистр смещения

x

Регистр с плавающей точкой (устаревший)

y

Регистр с плавающей точкой (верхний, 32-битный), регистр с плавающей точкой (64-битный)

Z

Любой регистр

I

Постоянная целочисленная величина со знаком, 11-битовая

J

Постоянная целочисленная величина со знаком, 14-битовая

K

Целочисленная константа, которая может быть размещена с помощью инструкции zdepi

L

Постоянная целочисленная величина со знаком, 5-битовая

M

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

N

Целочисленная константа, которая может быть загружена с помощью инструкции ldil

O

Целочисленная константа, значение которой плюс единица является степенью двойки

P

Целочисленная константа, которая может быть использована для операций and в инструкциях depi и extru

S

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

U

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

G

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

A

Операнд памяти таблицы данных lo_sum

Q

Операнд памяти, который может быть использован в качестве операнда назначения для инструкции целочисленной записи

R

Индексированный операнд памяти со шкалированием или без

T

Операнд памяти для операций загрузки и сохранения с плавающей точкой

W

Операнд памяти с косвенной адресацией через регистр

Intel IA-64—config/ia64/ia64.h
a

Регистры общего назначения r0 по r3 для инструкции addl

b

Регистр ветвления

c

Регистр предикатов («c» как в «условный»)

d

Регистр приложения, находящийся в блоке М

e

Регистр приложения, находящийся в блоке I

f

Регистр с плавающей точкой

m

Операнд памяти. Если используется вместе с ‘<’ или ‘>’, операнд может иметь постприращение и постдекремент, которые требуют вывода с ‘%Pn’ в IA-64.

G

Постоянная с плавающей точкой, равная 0,0 или 1,0

I

Постоянная целочисленная величина со знаком, 14-битовая

J

Постоянная целочисленная величина со знаком, 22-битовая

K

Постоянная целочисленная величина со знаком, 8-битовая, для логических инструкций

L

Скорректированная постоянная целочисленная величина со знаком, 8-битовая, для псевдо-операций сравнения

M

Постоянная целочисленная величина без знака, 6-битовая, для сдвигов

N

Постоянная целочисленная величина со знаком, 9-битовая, для постприращений при загрузке и сохранении

O

Постоянная, равная нулю

P

0 или -1 для инструкции dep

Q

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

R

Целочисленная константа в диапазоне от 1 до 4 для инструкции shladd

S

Операнд памяти, за исключением постприращений и постдекрементов. Теперь примерно соответствует ‘m’ при отсутствии ‘<’ или ‘>’.

M32C—config/m32c/m32c.cc
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

Сопоставляет несколько регистров в режиме PARALLEL, чтобы сформировать больший регистр. Используется для соответствия значениям возврата функций.

Is3

-8 … 7

IS1

-128 … 127

IS2

-32768 … 32767

IU2

0 … 65535

In4

-8 … -1 или 1 … 8

In5

-16 … -1 или 1 … 16

In6

-32 … -1 или 1 … 32

IM2

-65536 … -1

Ilb

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

Ilw

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

Sd

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

Sa

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

Si

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

Ss

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

Sf

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

Ss

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

S1

$r1h

LoongArch—config/loongarch/constraints.md
f

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

k

Операнд памяти, адрес которого формируется базовым регистром и (необязательным, масштабируемым) индексным регистром.

l

Целое 16-битное число со знаком.

m

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

I

Целое 12-битное число со знаком (для арифметических инструкций).

K

Целое 12-битное число без знака (для логических инструкций).

ZB

Адрес, хранящийся в регистре общего назначения. Смещение равно нулю.

ZC

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

MicroBlaze—config/microblaze/constraints.md
d

Регистр общего назначения (r0 до r31).

z

Регистр состояния (rmsr, $fcc1 до $fcc7).

MIPS—config/mips/constraints.md
d

Регистр общего назначения. Это эквивалентно r, за исключением случаев генерации кода MIPS16, в котором используется набор регистров MIPS16.

f

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

h

Ранее регистр hi. Эта ограничение больше не поддерживается.

l

Регистр lo. Используйте этот регистр для хранения значений, не превышающих размер слова.

x

Соединённые регистры hi и lo. Используйте этот регистр для хранения значений двойной длины.

c

Регистр, подходящий для использования в косвенном переходе. Всегда будет $25 для -mabicalls.

v

Регистр $3. Не используйте это ограничение в новом коде; оно сохраняется только для совместимости с glibc.

y

Эквивалентно r; сохраняется для обратной совместимости.

z

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

I

Целое 16-битное число со знаком (для арифметических инструкций).

J

Целое ноль.

K

Целое 16-битное число без знака (для логических инструкций).

L

Целое 32-битное число со знаком, в котором младшие 16 бит равны нулю. Такие константы могут загружаться с помощью lui.

M

Константа, которую нельзя загрузить с помощью lui, addiu или ori.

N

Константа в диапазоне от -65535 до -1 (включительно).

O

Целое 15-битное число со знаком.

P

Константа в диапазоне от 1 до 65535 (включительно).

G

Ноль с плавающей точкой.

R

Адрес, который может использоваться в не-макро-загрузке или хранении.

ZC

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

ZD

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

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

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

d

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

f

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

I

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

J

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

K

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

L

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

M

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

N

Диапазон от 24 до 31, rotatert:SI от 8 до 1, выраженный как поворот

O

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

P

Диапазон от 8 до 15, rotatert:HI от 8 до 1, выраженный как поворот

R

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

G

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

S

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

T

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

Q

Непосредственный режим адресации регистра

U

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

W

const_call_operand

Cs

symbol_ref или const

Ci

const_int

C0

const_int 0

Cj

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

Cmvq

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

Capsw

Целые числа, допустимые для moveq, за которым следует swap

Cmvz

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

Cmvs

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

Ap

push_operand

Ac

Операторы, не являющиеся регистрами, разрешённые в clr

Moxie—config/moxie/constraints.md
A

Абсолютный адрес

B

Смещённый адрес

W

Операнд памяти с косвенной адресацией

I

Константа в диапазоне от 0 до 255.

N

Константа в диапазоне от 0 до -255.

MSP430–config/msp430/constraints.md
R12

Регистр R12.

R13

Регистр R13.

K

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

L

Целочисленная константа от -1^20 до 1^19.

M

Целочисленная константа от 1 до 4.

Ya

Ссылки на память, которые не требуют расширенной инструкции MOVX.

Yl

Ссылка на память, только метки.

Ys

Ссылка на память, только стек.

NDS32—config/nds32/constraints.md
w

Класс регистров LOW $r0 до $r7 для ISA V3/V3M.

l

Класс регистров LOW $r0 до $r7.

d

Класс регистров MIDDLE $r0 до $r11, $r16 до $r19.

h

Класс регистров HIGH $r12 до $r14, $r20 до $r31.

t

Вспомогательный временный регистр $ta (т.е. $r15).

k

Регистр стека $sp.

Iu03

Беззнаковое непосредственное значение 3 бита.

In03

Отрицательное непосредственное значение 3 бита в диапазоне от -7 до 0.

Iu04

Беззнаковое непосредственное значение 4 бита.

Is05

Знаковое непосредственное значение 5 битов.

Iu05

Беззнаковое непосредственное значение 5 битов.

In05

Отрицательное непосредственное значение 5 битов в диапазоне от -31 до 0.

Ip05

Беззнаковое непосредственное значение 5 битов для инструкции movpi45 в диапазоне 16–47.

Iu06

Беззнаковое непосредственное значение 6 битов для инструкции addri36.sp.

Iu08

Беззнаковое непосредственное значение 8 битов.

Iu09

Беззнаковое непосредственное значение 9 битов.

Is10

Знаковое непосредственное значение 10 битов.

Is11

Знаковое непосредственное значение 11 битов.

Is15

Знаковое непосредственное значение 15 битов.

Iu15

Беззнаковое непосредственное значение 15 битов.

Ic15

Константа, которая не находится в диапазоне imm15u, но подходит для инструкции bclr.

Ie15

Константа, которая не находится в диапазоне imm15u, но подходит для инструкции bset.

It15

Константа, которая не находится в диапазоне imm15u, но подходит для инструкции btgl.

Ii15

Константа, дополнительное значение которой находится в диапазоне imm15u и подходит для инструкции bitci.

Is16

Знаковое непосредственное значение 16 битов.

Is17

Знаковое непосредственное значение 17 битов.

Is19

Знаковое непосредственное значение 19 битов.

Is20

Знаковое непосредственное значение 20 битов.

Ihig

Непосредственное значение, которое можно просто установить в старшие 20 бит.

Izeb

Непосредственное значение 0xff.

Izeh

Непосредственное значение 0xffff.

Ixls

Непосредственное значение 0x01.

Ix11

Непосредственное значение 0x7ff.

Ibms

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

Ifex

Непосредственное значение, являющееся степенью двойки минус 1.

U33

Ограничение памяти для формата 333.

U45

Ограничение памяти для формата 45.

U37

Ограничение памяти для формата 37.

Nios II family—config/nios2/constraints.md
I

Целое число, допустимое в качестве непосредственного операнда в инструкции, принимающей 16-битное знаковое число. Диапазон от -32768 до 32767.

J

Целое число, допустимое в качестве непосредственного операнда в инструкции, принимающей 16-битное беззнаковое число. Диапазон от 0 до 65535.

K

Целое число, допустимое в качестве непосредственного операнда в инструкции, принимающей только старшие 16 битов 32-битного числа. Диапазон 32-битные числа со значениями младших 16 битов равными 0.

L

Целое число, допустимое в качестве непосредственного операнда для инструкции сдвига. Диапазон от 0 до 31.

M

Целое число, допустимое в качестве непосредственного операнда только для значения 0. Может использоваться вместе с модификатором формата z для использования r0 вместо 0 в выходных данных ассемблера.

N

Целое число, допустимое в качестве непосредственного операнда для кода операции пользовательской инструкции. Диапазон от 0 до 255.

P

Непосредственный операнд для инструкций R2 andchi/andci.

S

Совпадает с непосредственными значениями, являющимися адресами в небольшой секции данных и, следовательно, могут быть добавлены к gp как 16-битное непосредственное значение для воссоздания их 32-битного значения.

U

Совпадает с константами, подходящими в качестве операнда для инструкций rdprs и cache.

v

Операнд памяти, подходящий для инструкций Nios II R2 эксклюзивного загрузки/хранения.

w

Операнд памяти, подходящий для инструкций ввода/вывода и кэша загрузки/хранения.

OpenRISC—config/or1k/constraints.md
I

Целое число, допустимое в качестве непосредственного операнда в инструкции, принимающей 16-битное знаковое число. Диапазон от -32768 до 32767.

K

Целое число, допустимое в качестве непосредственного операнда в инструкции, принимающей 16-битное беззнаковое число. Диапазон от 0 до 65535.

M

Знаковое 16-битное константа, сдвинутая влево на 16 бит. (Используется с l.movhi)

O

Ноль

PDP-11—config/pdp11/constraints.md
a

Регистры с плавающей точкой AC0 по AC3. Их можно загрузить/сохранить из/в память одной инструкцией.

d

Регистры общего назначения с нечётными номерами (R1, R3, R5). Они используются для операций умножения на 16 бит.

D

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

f

Любой из регистров с плавающей точкой (AC0 по AC5).

G

Константа с плавающей точкой 0.

h

Регистры с плавающей точкой AC4 и AC5. Их нельзя загрузить/сохранить из/в память одной инструкцией.

I

Целочисленная константа, помещаемая в 16 бит.

J

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

K

Целочисленная константа, не удовлетворяющая ограничениям для кодов ‘I’ или ‘J’.

L

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

M

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

N

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

O

Целочисленные константы от 0 до 3; сдвиги на эти значения обрабатываются как несколько однобитовых сдвигов, а не как один сдвиг переменной длины.

Q

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

R

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

PowerPC and IBM RS6000—config/rs6000/constraints.md
r

Регистр общего назначения (GPR), r0…r31.

b

Базовый регистр. Как r, но r0 запрещено, поэтому r1…r31.

f

Регистр с плавающей запятой (FPR), f0…f31.

d

Регистр с плавающей запятой. В настоящее время это то же самое, что и f; исторически f использовался для однократной точности, а d — для двойной точности с плавающей запятой.

v

Векторный регистр Altivec (VR), v0…v31.

wa

Регистр VSX (VSR), vs0…vs63. Это либо FPR (vs0…vs31 являются f0…f31), либо VR (vs32…vs63 являются v0…v31).

При использовании wa необходимо использовать модификатор вывода %x, чтобы выводился правильный номер регистра. Например:

asm ("xvadddp %x0,%x1,%x2"
     : "=wa" (v1)
     : "wa" (v2), "wa" (v3));

Не следует использовать %x для операндов v:

asm ("xsaddqp %0,%1,%2"
     : "=v" (v1)
     : "v" (v2), "v" (v3));
c

Регистр счётчика, ctr.

l

Регистр связи, lr.

x

Поле регистра состояния 0, cr0.

y

Любое поле регистра состояния, cr0…cr7.

I

Целочисленная константа со знаком 16 бит.

J

Целочисленная константа без знака 16 бит, сдвинутая влево на 16 бит (используйте L вместо SImode констант).

K

Целочисленная константа без знака 16 бит.

L

Целочисленная константа со знаком 16 бит, сдвинутая влево на 16 бит.

eI

Целочисленная константа со знаком 34 бит, если поддерживаются префиксные инструкции.

eP

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

eQ

Константа IEEE 128 бит, которая может быть загружена в регистр VSX с инструкцией lxvkq.

m

Операнд памяти. Обычно m не допускает адресов, обновляющих базовый регистр. Если используется также ограничение < или >, они разрешены, и поэтому на целевых платформах PowerPC в этом случае безопасно использовать m<> в операторе asm, если этот оператор asm обращается к операнду ровно один раз. Оператор asm также должен использовать %U<opno> в качестве заполнителя для флага «обновления» в соответствующей инструкции загрузки или сохранения. Например:

asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val));

верно, но:

asm ("st %1,%0" : "=m<>" (mem) : "r" (val));

неверно.

Q

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

Z

Операнд памяти, к которому осуществляется доступ с использованием индексированного или косвенного адресования.

a

Индексированный или косвенный адрес.

PRU—config/pru/constraints.md
I

Целочисленная константа без знака 8 бит.

J

Целочисленная константа без знака 16 бит.

L

Целочисленная константа без знака 5 бит (для сдвигов).

T

Метка константы секции текста (памяти программы).

Z

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

RL78—config/rl78/constraints.md
Int3

Целочисленная константа в диапазоне от 1 до 7.

Int8

Целочисленная константа в диапазоне от 0 до 255.

J

Целочисленная константа в диапазоне от -255 до 0.

K

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

L

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

M

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

N

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

O

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

P

Целочисленная константа в диапазоне от 1 до 15.

Qbi

Встроенные типы сравнения–eq, ne, gtu, ltu, geu и leu.

Qsc

Синтетические типы сравнения–gt, lt, ge и le.

Wab

Ссылка на память с абсолютным адресом.

Wbc

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

Wca

Ссылка на память с использованием AX, BC, DE или HL для адреса, для вызовов.

Wcv

Ссылка на память с использованием любой пары 16-битных регистров для адреса, для вызовов.

Wd2

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

Wde

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

Wfr

Любая ссылка на память на адрес в дальнем адресном пространстве.

Wh1

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

Whb

Ссылка на память с использованием HL в качестве базового регистра с B или C в качестве индексного регистра.

Whl

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

Ws1

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

Y

Любая ссылка на память на адрес в ближнем адресном пространстве.

A

Регистр AX.

B

Регистр BC.

D

Регистр DE.

R

Регистры с A по L.

S

Регистр SP.

T

Регистр HL.

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.

RISC-V—config/riscv/constraints.md
f

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

I

Целочисленная константа со знаком 12 бит типа I.

J

Целое ноль.

K

Целочисленная константа без знака 5 бит для инструкций доступа к CSR.

A

Адрес, хранящийся в регистре общего назначения.

S

Ограничение, которое соответствует абсолютному символическому адресу.

RX—config/rx/constraints.md
Q

Адрес, который не включает косвенное адресование регистров или адресование с предварительным/последующим инкрементом/декрементом.

Symbol

Ссылка на символ.

Int08

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

Sint08

Константа в диапазоне от -128 до 127 включительно.

Sint16

Константа в диапазоне от -32768 до 32767 включительно.

Sint24

Константа в диапазоне от -8388608 до 8388607 включительно.

Uint04

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

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

Регистр адреса (регистр общего назначения, за исключением r0)

c

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

d

Регистр данных (произвольный регистр общего назначения)

f

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

I

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

J

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

K

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

L

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

(0..4095)

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

(-524288..524287)

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

M

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

N

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

0..9:

номер части, считая с наиболее к наименее значимой

H,Q:

режим части

D,S,H:

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

0,F:

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

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

Q

Обращение к памяти без регистра индекса и с коротким смещением.

R

Обращение к памяти с регистром индекса и коротким смещением.

S

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

T

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

U

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

W

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

Y

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

SPARC—config/sparc/sparc.h
f

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

e

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

c

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

d

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

b

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

h

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

C

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

A

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

D

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

I

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

J

Ноль

K

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

L

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

M

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

N

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

O

Константа 4096

G

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

H

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

P

Константа -1

Q

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

R

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

S

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

T

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

U

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

W

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

w

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

Y

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

TI C6X family—config/c6x/constraints.md
a

Файл регистров A (A0–A31).

b

Файл регистров B (B0–B31).

A

Регистры предикатов в файле регистров A (A0–A2 на C64X и выше, иначе A1 и A2).

B

Регистры предикатов в файле регистров B (B0–B2).

C

Используемый регистр вызова в файле регистров B (B0–B9, B16–B31).

Da

Файл регистров A, за исключением регистров предикатов (A3–A31, плюс A0, если не C64X или выше).

Db

Файл регистров B, за исключением регистров предикатов (B3–B31).

Iu4

Целочисленная константа в диапазоне 0 … 15.

Iu5

Целочисленная константа в диапазоне 0 … 31.

In5

Целочисленная константа в диапазоне -31 … 0.

Is5

Целочисленная константа в диапазоне -16 … 15.

I5x

Целочисленная константа, которая может быть операндом инструкции ADDA или SUBA.

IuB

Целочисленная константа в диапазоне 0 … 65535.

IsB

Целочисленная константа в диапазоне -32768 … 32767.

IsC

Целочисленная константа в диапазоне -2^{20} … 2^{20} - 1.

Jc

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

Js

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

Q

Местоположение памяти с регистром A в качестве базового.

R

Местоположение памяти с регистром B в качестве базового.

Z

Регистр B14 (также известный как DP).

TILE-Gx—config/tilegx/constraints.md
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 элементов с одинаковыми элементами.

Visium—config/visium/constraints.md
b

Регистр EAM mdb

c

Регистр EAM mdc

f

Регистр с плавающей точкой

l

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

t

Регистр r1

u

Регистр r2

v

Регистр r3

G

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

J

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

K

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

L

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

M

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

O

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

P

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

x86 family—config/i386/constraints.md
R

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

q

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

Q

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

a

Регистр a.

b

Регистр b.

c

Регистр c.

d

Регистр d.

S

Регистр si.

D

Регистр di.

A

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

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

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

unsigned long long rdtsc (void)
{
  unsigned int tickl, tickh;
  __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
  return ((unsigned long long)tickh << 32)|tickl;
}
U

Целочисленные регистры, освобождаемые вызовом.

f

Любой регистр с плавающей точкой 80387 (стековая модель).

t

Вершина стека с плавающей точкой 80387 (%st(0)).

u

Второй сверху элемент стека с плавающей точкой 80387 (%st(1)).

y

Любой регистр MMX.

x

Любой регистр SSE.

v

Любой регистр SSE, кодируемый EVEX (%xmm0-%xmm31).

Yz

Первый регистр SSE (%xmm0).

I

Целочисленная константа в диапазоне 0 … 31 для сдвигов на 32 бита.

J

Целочисленная константа в диапазоне 0 … 63 для сдвигов на 64 бита.

K

Целочисленная константа со знаком 8 бит.

L

0xFF или 0xFFFF для andsi как перемещения с нулевым расширением.

M

0, 1, 2 или 3 (сдвиги для инструкции lea).

N

Целочисленная константа без знака 8 бит (для инструкций in и out).

G

Стандартная константа с плавающей точкой 80387.

C

Операнд SSE константы нуля.

e

32-битная константа со знаком или символическая ссылка, известная в этом диапазоне (для непосредственных операндов в инструкциях x86-64 с расширением знака).

We

32-битная константа со знаком или символическая ссылка, известная в этом диапазоне (для операций преобразования с расширением знака, требующих операндов-констант без непосредственных значений).

Wz

32-битная константа без знака или символическая ссылка, известная в этом диапазоне (для операций преобразования с расширением нулем, требующих операндов-констант без непосредственных значений).

Wd

128-битная целочисленная константа, где как старшее, так и младшее 64-битное слово удовлетворяют ограничению e.

Z

32-битная константа без знака или символическая ссылка, известная в этом диапазоне (для непосредственных операндов в инструкциях x86-64 с расширением нулем).

Tv

Операнд адреса VSIB.

Ts

Операнд адреса без регистра сегмента.

Xstormy16—config/stormy16/stormy16.h
a

Регистр r0.

b

Регистр r1.

c

Регистр r2.

d

Регистр r8.

e

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

t

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

y

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

z

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

I

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

J

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

K

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

L

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

M

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

N

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

O

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

P

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

Q

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

R

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

S

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

T

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

U

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

Z

Константа 0.

Xtensa—config/xtensa/constraints.md
a

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

b

Регистр булевой логики на 1 бит

A

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

I

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

J

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

K

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

L

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

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

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

Spec-Zone.ru

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