6.57.3 Встроенные функции ARC
Ниже приведены встроенные функции, предоставляемые для целей ARC. Встроенные функции генерируют соответствующие инструкции ассемблера. В приведенных ниже примерах сгенерированный код часто требует, чтобы операнд или результат находились в регистре. В необходимых случаях будет сгенерирован дополнительный код, чтобы это было верно, но для краткости это не описывается в каждом случае.
Примечание: Использование встроенной функции для генерации инструкции, не поддерживаемой целевой платформой, может вызвать проблемы. В настоящее время компилятор не гарантирует обнаружение такого неправильного использования, и в результате может быть сгенерирована внутренняя ошибка компилятора.
Возвращает 1, если val известен как имеющий заданное байтовое выравнивание alignval, в противном случае возвращает 0. Обратите внимание, что это отличается от
__alignof__(*(char *)val) >= alignvalпотому что __alignof__ видит только тип разыменования, тогда как __builtin_arc_align использует информацию о выравнивании как из указателя, так и из типа, на который он указывает. Доступная информация зависит от уровня оптимизации.
Генерирует
brk
Операнд — это номер считываемого регистра. Генерирует:
mov dest, rregnoгде значение в dest будет результатом, возвращаемым встроенной функцией.
Первый операнд — это номер записываемого регистра, второй операнд — константа времени компиляции, которая будет записана в этот регистр. Генерирует:
mov rregno, val
Доступно только если установлено либо
-mcpu=ARC700или-meA. Генерирует:divaw dest, a, bгде значение в dest будет результатом, возвращаемым встроенной функцией.
Генерирует
flag a
Операнд, auxv, — это адрес вспомогательного регистра и должен быть константой времени компиляции. Генерирует:
lr dest, [auxr]Где значение в dest будет результатом, возвращаемым встроенной функцией.
Доступно только с
-mmul64. Генерирует:mul64 a, b
Доступно только с
-mmul64. Генерирует:mulu64 a, b
Генерирует:
nop
Действительно только если инструкция «
norm» доступна через опцию-mnormили по умолчанию с-mcpu=ARC700. Генерирует:norm dest, srcГде значение в dest будет результатом, возвращаемым встроенной функцией.
Действительно только если инструкция «
normw» доступна через опцию-mnormили по умолчанию с-mcpu=ARC700. Генерирует:normw dest, srcГде значение в dest будет результатом, возвращаемым встроенной функцией.
Генерирует:
rtie
Генерирует:
sleep a
Первый аргумент, auxv, — адрес вспомогательного регистра, второй аргумент, val, — константа времени компиляции, которая будет записана в регистр. Генерирует:
sr auxr, [val]
Действительно только с
-mswap. Генерирует:swap dest, srcГде значение в dest будет результатом, возвращаемым встроенной функцией.
Генерирует:
swi
Доступно только с
-mcpu=ARC700. Генерирует:sync
Доступно только с
-mcpu=ARC700. Генерирует:trap_s c
Доступно только с
-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-4.9.4/gcc/ARC-Built-in-Functions.html