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()
Далее: Встроенные функции ARC SIMD, Предыдущее: Встроенные функции Altera Nios II, Вверх: Встроенные функции целевых систем [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/ARC-Built-in-Functions.html