6.60.4 Встроенные функции ARC ¶
Для целей ARC предоставляются следующие встроенные функции. Встроенные функции генерируют соответствующие инструкции ассемблера. В приведенных ниже примерах сгенерированный код часто требует, чтобы операнд или результат находились в регистре. При необходимости будет сгенерирован дополнительный код, чтобы обеспечить это, но для краткости это не описывается в каждом случае.
Примечание: Использование встроенной функции для генерации инструкции, не поддерживаемой целевой платформой, может вызвать проблемы. В настоящее время компилятор не гарантированно обнаруживает такое неправильное использование, и в результате может быть сгенерирована внутренняя ошибка компилятора.
-
Встроенная функция:
int__builtin_arc_aligned(void *val, int alignval)¶ -
Возвращает 1, если известно, что val имеет выравнивание байтов, заданное alignval, иначе возвращает 0. Обратите внимание, что это отличается от
__alignof__(*(char *)val) >= alignval
потому что __alignof__ видит только тип разыменования, тогда как __builtin_arc_align использует информацию о выравнивании как из указателя, так и из указываемого типа. Доступная информация будет зависеть от уровня оптимизации.
-
Встроенная функция:
void__builtin_arc_brk(void)¶ -
Генерирует
brk
-
Встроенная функция:
unsigned int__builtin_arc_core_read(unsigned int regno)¶ -
Операнд — это номер регистра для чтения. Генерирует:
mov dest, rregno
где значение в dest будет результатом, возвращаемым встроенной функцией.
-
Встроенная функция:
void__builtin_arc_core_write(unsigned int regno, unsigned int val)¶ -
Первый операнд — это номер регистра для записи, второй операнд — константа времени компиляции для записи в этот регистр. Генерирует:
mov rregno, val
-
Встроенная функция:
int__builtin_arc_divaw(int a, int b)¶ -
Доступно только если установлен либо -mcpu=ARC700, либо -meA. Генерирует:
divaw dest, a, b
где значение в dest будет результатом, возвращаемым встроенной функцией.
-
Встроенная функция:
void__builtin_arc_flag(unsigned int a)¶ -
Генерирует
flag a
-
Встроенная функция:
unsigned int__builtin_arc_lr(unsigned int auxr)¶ -
Операнд, auxv, является адресом вспомогательного регистра и должен быть константой времени компиляции. Генерирует:
lr dest, [auxr]
Где значение в dest будет результатом, возвращаемым встроенной функцией.
-
Встроенная функция:
void__builtin_arc_mul64(int a, int b)¶ -
Доступно только с -mmul64. Генерирует:
mul64 a, b
-
Встроенная функция:
void__builtin_arc_mulu64(unsigned int a, unsigned int b)¶ -
Доступно только с -mmul64. Генерирует:
mulu64 a, b
-
Встроенная функция:
void__builtin_arc_nop(void)¶ -
Генерирует:
nop
-
Встроенная функция:
int__builtin_arc_norm(int src)¶ -
Допустимо только если инструкция ‘norm’ доступна через опцию -mnorm или по умолчанию с -mcpu=ARC700. Генерирует:
norm dest, src
Где значение в dest будет результатом, возвращаемым встроенной функцией.
-
Встроенная функция:
short int__builtin_arc_normw(short int src)¶ -
Допустимо только если инструкция ‘normw’ доступна через опцию -mnorm или по умолчанию с -mcpu=ARC700. Генерирует:
normw dest, src
Где значение в dest будет результатом, возвращаемым встроенной функцией.
-
Встроенная функция:
void__builtin_arc_rtie(void)¶ -
Генерирует:
rtie
-
Встроенная функция:
void__builtin_arc_sleep(int a¶ -
Генерирует:
sleep a
-
Встроенная функция:
void__builtin_arc_sr(unsigned int auxr, unsigned int val)¶ -
Первый аргумент, auxv, — это адрес вспомогательного регистра, второй аргумент, val, — это константа времени компиляции, которая будет записана в регистр. Генерирует:
sr auxr, [val]
-
Встроенная функция:
int__builtin_arc_swap(int src)¶ -
Допустимо только с -mswap. Генерирует:
swap dest, src
Где значение в dest будет результатом, возвращаемым встроенной функцией.
-
Встроенная функция:
void__builtin_arc_swi(void)¶ -
Генерирует:
swi
-
Встроенная функция:
void__builtin_arc_sync(void)¶ -
Доступно только с -mcpu=ARC700. Генерирует:
sync
-
Встроенная функция:
void__builtin_arc_trap_s(unsigned int c)¶ -
Доступно только с -mcpu=ARC700. Генерирует:
trap_s c
-
Встроенная функция:
void__builtin_arc_unimp_s(void)¶ -
Доступно только с -mcpu=ARC700. Генерирует:
unimp_s
Инструкции, генерируемые следующими встроенными функциями, не рассматриваются как кандидаты для планирования. Они не перемещаются компилятором во время планирования и, таким образом, можно ожидать, что они появятся там, где они размещены в коде C:
__builtin_arc_brk() __builtin_arc_core_read() __builtin_arc_core_write() __builtin_arc_flag() __builtin_arc_lr() __builtin_arc_sleep() __builtin_arc_sr() __builtin_arc_swi()
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/ARC-Built-in-Functions.html