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