Spec-Zone.ru › GCC 15

7.13.3 Встроенные функции 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 val, unsigned int auxr)

Первый аргумент, val, — это константа времени компиляции, записываемая в регистр; второй аргумент, auxr, — адрес вспомогательного регистра. Генерирует:

sr  val, [auxr]
Встроенная функция: 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()

Для семейства процессоров ARCv2 доступны следующие встроенные функции.

int __builtin_arc_clri ();
void __builtin_arc_kflag (unsigned);
void __builtin_arc_seti (int);

Для семейства ARCv2 доступны следующие встроенные функции, использующие параметр -mnorm.

int __builtin_arc_ffs (int);
int __builtin_arc_fls (int);

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/ARC-Built_002din-Functions.html

Spec-Zone.ru

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