Spec-Zone.ru › GCC 8

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

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

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

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

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

w

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

Upl

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

Upa

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

I

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

J

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

K

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

L

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

M

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

N

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

S

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

Y

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

Z

Целое значение нуля

Ush

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

Q

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

Ump

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

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’, при отрицании (дополнительный код 2).

M

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

Q

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

R

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

S

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

Uv

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

Uy

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

Uq

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

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

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

a

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

d

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

w

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

e

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

b

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

q

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

t

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

x

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

y

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

z

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

I

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

J

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

K

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

L

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

M

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

N

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

O

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

P

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

G

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

Q

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

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

Регистр P

d

Регистр D

z

Вызов, изменивший регистр P.

qn

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

D

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

W

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

e

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

A

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

B

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

b

Регистр I

v

Регистр B

f

Регистр M

c

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

C

Регистр CC.

t

LT0 или LT1.

k

LC0 или LC1.

u

LB0 или LB1.

x

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

y

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

w

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

Ksh

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

Kuh

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

Ks7

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

Ku7

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

Ku5

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

Ks4

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

Ks3

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

Ku3

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

Pn

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

PA

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

PB

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

M1

Константа 255.

M2

Константа 65535.

J

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

L

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

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

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

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

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

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

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

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

Is3

-8 … 7

IS1

-128 … 127

IS2

-32768 … 32767

IU2

0 … 65535

In4

-8 … -1 или 1 … 8

In5

-16 … -1 или 1 … 16

In6

-32 … -1 или 1 … 32

IM2

-65536 … -1

Ilb

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

Ilw

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

Sd

Общие режимы адресации памяти для источника/назначения.

Sa

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

Si

Память, адресуемая с использованием непосредственных адресов.

Ss

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

Sf

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

Ss

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

S1

$r1h

MicroBlaze—config/microblaze/constraints.md
d

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

z

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

MIPS—config/mips/constraints.md
d

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

f

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

h

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

l

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

x

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

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.

P

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

S

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

U

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

v

Операнд памяти, подходящий для инструкций Nios II R2 load/store exclusive.

w

Операнд памяти, подходящий для инструкций load/store IO и cache.

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 и IBM RS6000—config/rs6000/constraints.md
b

Базовый регистр адреса

d

Регистр с плавающей точкой (содержит 64-битовое значение)

f

Регистр с плавающей точкой (содержит 32-битовое значение)

v

Регистр вектора Altivec

wa

Любой регистр VSX, если использовался параметр -mvsx или NO_REGS.

При использовании ограничений регистров (wa, wd, wf, wg, wh, wi, wj, wk, wl, wm, wo, wp, wq, ws, wt, wu, wv, ww, или wy) для регистров VSX, вы должны использовать %x<n> в шаблоне, чтобы был выбран правильный регистр. В противном случае номер регистра в выходном файле ассемблера будет неверным, если регистр Altivec является операндом инструкции VSX, которая ожидает нумерацию регистров VSX.

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

верно, но:

asm ("xvadddp %0,%1,%2" 
     : "=wa" (v1) 
     : "wa" (v2), "wa" (v3));

неверно.

Если инструкция принимает только регистры Altivec, не нужно использовать %x<n>.

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

верно, потому что инструкция xsaddqp принимает только регистры Altivec, в то время как:

asm ("xsaddqp %x0,%x1,%x2" 
     : "=v" (v1) 
     : "v" (v2), "v" (v3));

неверно.

wb

Регистр Altivec, если используется -mcpu=power9 или NO_REGS.

wd

Регистр VSX вектора для хранения данных двойной точности вектора или NO_REGS.

we

Регистр VSX, если были использованы параметры -mcpu=power9 и -m64 или NO_REGS.

wf

Регистр VSX вектора для хранения данных с плавающей точкой одинарной точности или NO_REGS.

wg

Если был использован параметр -mmfpgpr, регистр с плавающей точкой или NO_REGS.

wh

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

wi

Регистр FP или VSX для хранения 64-битовых целых чисел для инструкций VSX или NO_REGS.

wj

Регистр FP или VSX для хранения 64-битовых целых чисел для прямых перемещений или NO_REGS.

wk

Регистр FP или VSX для хранения 64-битовых чисел с двойной точностью для прямых перемещений или NO_REGS.

wl

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

wm

Регистр VSX, если включены инструкции для прямых перемещений, или NO_REGS.

wn

Ни один регистр (NO_REGS).

wo

Регистр VSX для использования в векторных инструкциях ISA 3.0 или NO_REGS.

wp

Регистр VSX для использования с плавающей точкой IEEE 128 бит в режиме TF или NO_REGS.

wq

Регистр VSX для использования с плавающей точкой IEEE 128 бит или NO_REGS.

wr

Регистр общего назначения, если включены 64-битовые инструкции, или NO_REGS.

ws

Регистр VSX вектора для хранения скалярных значений с двойной точностью или NO_REGS.

wt

Регистр VSX вектора для хранения 128-битовых целых чисел или NO_REGS.

wu

Регистр Altivec для использования при загрузке/сохранении чисел с плавающей точкой float/32-битовых целых чисел или NO_REGS.

wv

Регистр Altivec для использования при загрузке/сохранении чисел с двойной точностью или NO_REGS.

ww

Регистр FP или VSX для выполнения операций с плавающей точкой под -mvsx или NO_REGS.

wx

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

wy

Регистр FP или VSX для выполнения операций с плавающей точкой ISA 2.07 или NO_REGS.

wz

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

wA

Базовый регистр адреса, если включены 64-битовые инструкции, или NO_REGS.

wB

Целое число со знаком, 5-битовый константный операнд, который можно загрузить в регистр Altivec.

wD

Целочисленный константный операнд, являющийся номером элемента 64-битового скаляра в векторе.

wE

Векторный константный операнд, который можно загрузить с помощью инструкции XXSPLTIB.

wF

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

wG

Операнд памяти, подходящий для слияния ссылок памяти TOC.

wH

Регистр Altivec, если используется -mvsx-small-integer.

wI

Регистр с плавающей точкой, если используется -mvsx-small-integer.

wJ

Регистр FP, если используются -mvsx-small-integer и -mpower9-vector.

wK

Регистр Altivec, если используются -mvsx-small-integer и -mpower9-vector.

wL

Целочисленная константа, представляющая собой номер элемента, который обрабатывает инструкция MFVSRLD.

wM

Векторный константный операнд, состоящий из единиц, если доступна инструкция XXLORC.

wO

Операнд памяти, подходящий для векторных инструкций d-формата ISA 3.0.

wQ

Адрес памяти, который будет работать с инструкциями lq и stq.

wS

Векторный константный операнд, который можно загрузить с помощью XXSPLTIB и расширением знака.

h

Регистры «MQ», «CTR» или «LINK»

c

Регистр «CTR»

l

Регистр «LINK»

x

Регистр «CR» (регистр условия) номер 0

y

Регистр «CR» (регистр условия)

z

Разряд переноса «XER[CA]» (часть регистра XER)

I

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

J

16-битовое целое число без знака, сдвинутое влево на 16 бит (используйте «L» вместо SImode констант)

K

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

L

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

M

Константа больше 31

N

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

O

Ноль

P

Константа, отрицание которой — 16-битовое целое число со знаком

G

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

H

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

m

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

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

верно, но:

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

неверно.

es

«Стабильный» операнд памяти; то есть, операнд, который не включает в себя автоматическое изменение базового регистра. Это раньше было полезно, когда «m» разрешало автоматическое изменение базового регистра, но поскольку это теперь разрешается только при использовании «<» или «>», «es» по существу то же самое, что «m» без «<» и «>».

Q

Операнд памяти, представляющий собой смещение от регистра (обычно лучше использовать «m» или «es» в инструкциях asm)

Z

Операнд памяти, являющийся индексированным или косвенным от регистра (обычно лучше использовать «m» или «es» в инструкциях asm)

R

Запись TOC AIX

a

Операнд адреса, представляющий собой индексированный или косвенный от регистра («p» предпочтительнее в инструкциях asm)

U

Ссылка на область данных небольшого размера System V Release 4

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.

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

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

I

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

J

Целое число ноль.

K

5-битное беззнаковое смещение для инструкций доступа к CSR.

A

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

RX—config/rx/constraints.md
Q

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

Symbol

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

Int08

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

Sint08

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

Sint16

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

Sint24

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

Uint04

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

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

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

c

Регистр кода условия

d

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

f

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

I

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

J

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

K

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

L

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

(0..4095)

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

(-524288..524287)

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

M

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

N

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

0..9:

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

H,Q:

режим части

D,S,H:

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

0,F:

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

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

Q

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

R

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

S

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

T

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

U

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

W

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

Y

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

SPARC—config/sparc/sparc.h
f

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

e

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

c

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

d

Регистр плавающей точки нижнего порядка. Он действителен только в архитектуре SPARC-V9, когда доступен набор инструкций 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 бит, 3 младших бита которой равны 0.

P

Беззнаковая константа 3 бита для 16-байтовых вращений и сдвигов.

R

Операнд вызова, reg, для косвенных вызовов.

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;
}
U

Регистры целочисленных значений, которые изменяются вызовом.

f

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

t

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

u

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

y

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

x

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

v

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

Yz

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

I

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

J

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

K

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

L

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

M

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

N

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

G

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

C

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

e

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

We

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

Wz

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

Wd

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

Z

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

Tv

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

Ts

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

Ti

Операнд адреса MPX без индекса.

Tb

Операнд адреса MPX без базы.

Xstormy16—config/stormy16/stormy16.h
a

Регистр r0.

b

Регистр r1.

c

Регистр r2.

d

Регистр r8.

e

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

t

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

y

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

z

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

I

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

J

Константа с ровно одним установленным битом.

K

Константа с ровно одним сброшенным битом.

L

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

M

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

N

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

O

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

P

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

Q

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

R

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

S

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

T

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

U

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

Z

Константа 0.

Xtensa—config/xtensa/constraints.md
a

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

b

Регистр булевого типа 1 бит

A

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

I

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

J

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

K

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

L

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

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

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

Spec-Zone.ru

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