6.4.1.13 Атрибуты функций LoongArch
Следующие атрибуты функций поддерживаются в бэкенде LoongArch:
-
strict-align no-strict-align-
strict-alignуказывает, что компилятор не должен предполагать, что система обрабатывает невыровненные обращения к памяти. Чтобы разрешить компилятору предполагать, что система обрабатывает выровненные обращения к памяти, можно указать обратный атрибутno-strict-align. Поведение соответствует параметрам командной строки -mstrict-align и -mno-strict-align. -
cmodel= -
Указывает, что для этой функции следует генерировать код с определённой моделью кода. Поведение и допустимые аргументы соответствуют параметру командной строки -mcmodel=.
-
arch= -
Задаёт версию архитектуры и архитектурные расширения, используемые для этой функции. Поведение и допустимые аргументы соответствуют параметру командной строки -march=.
-
tune= -
Задаёт ядро, для которого следует оптимизировать производительность этой функции. Поведение и допустимые аргументы соответствуют параметру командной строки -mtune=.
-
lsx no-lsx-
lsxуказывает, разрешена ли генерация векторных инструкций при компиляции функции. Поведение соответствует параметрам командной строки -mlsx и -mno-lsx. -
lasx no-lasx-
lasxуказывает, разрешена ли генерация инструкций LASX при компиляции функции. Поведение немного отличается от параметра командной строки -mno-lasx. Пример:test.c: typedef int v4i32 __attribute__ ((vector_size(16), aligned(16))); v4i32 a, b, c; #ifdef WITH_ATTR __attribute__ ((target("no-lasx"))) void #else void #endif test () { c = a + b; }$ gcc test.c -o test.s -O2 -mlasx -DWITH_ATTR
При компиляции, как показано выше, возможна векторизация с шириной 128 бит. Однако следующий метод не может выполнять векторизацию с шириной 128 бит.
$ gcc test.c -o test.s -O2 -mlasx -mno-lasx
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/LoongArch-Function-Attributes.html