6.60.16 Поддержка архитектуры MIPS SIMD (MSA)
| • Встроенные функции архитектуры MIPS SIMD: |
GCC предоставляет встроенные функции для доступа к инструкциям SIMD, предоставляемым архитектурой MIPS SIMD MSA. Интерфейс доступен при включении <msa.h> и использовании -mmsa -mhard-float -mfp64 -mnan=2008. Для каждой __builtin_msa_*, существует сокращенное имя встроенной функции, __msa_*.
MSA реализует 128-битные векторные регистры, работающие с 8-, 16-, 32- и 64-битными целыми, 16- и 32-битными фиксированными точками или 32- и 64-битными числами с плавающей точкой. Следующие типы векторов включены в msa.h:
-
v16i8, вектор шестнадцати знаковых 8-битных целых чисел; -
v16u8, вектор шестнадцати беззнаковых 8-битных целых чисел; -
v8i16, вектор восьми знаковых 16-битных целых чисел; -
v8u16, вектор восьми беззнаковых 16-битных целых чисел; -
v4i32, вектор четырех знаковых 32-битных целых чисел; -
v4u32, вектор четырех беззнаковых 32-битных целых чисел; -
v2i64, вектор двух знаковых 64-битных целых чисел; -
v2u64, вектор двух беззнаковых 64-битных целых чисел; -
v4f32, вектор четырех 32-битных чисел с плавающей точкой; -
v2f64, вектор двух 64-битных чисел с двойной точностью.
Инструкции и соответствующие встроенные функции могут иметь дополнительные ограничения и/или манипулировать входными/выходными значениями:
-
imm0_1, целая константа в диапазоне от 0 до 1; -
imm0_3, целая константа в диапазоне от 0 до 3; -
imm0_7, целая константа в диапазоне от 0 до 7; -
imm0_15, целая константа в диапазоне от 0 до 15; -
imm0_31, целая константа в диапазоне от 0 до 31; -
imm0_63, целая константа в диапазоне от 0 до 63; -
imm0_255, целая константа в диапазоне от 0 до 255; -
imm_n16_15, целая константа в диапазоне от -16 до 15; -
imm_n512_511, целая константа в диапазоне от -512 до 511; -
imm_n1024_1022, целая константа в диапазоне от -512 до 511, сдвинутая влево на 1 бит, т.е., -1024, -1022, …, 1020, 1022; -
imm_n2048_2044, целая константа в диапазоне от -512 до 511, сдвинутая влево на 2 бита, т.е., -2048, -2044, …, 2040, 2044; -
imm_n4096_4088, целая константа в диапазоне от -512 до 511, сдвинутая влево на 3 бита, т.е., -4096, -4088, …, 4080, 4088; -
imm1_4, целая константа в диапазоне от 1 до 4; -
i32, i64, u32, u64, f32, f64, определяется следующим образом:
{
typedef int i32;
#if __LONG_MAX__ == __LONG_LONG_MAX__
typedef long i64;
#else
typedef long long i64;
#endif
typedef unsigned int u32;
#if __LONG_MAX__ == __LONG_LONG_MAX__
typedef unsigned long u64;
#else
typedef unsigned long long u64;
#endif
typedef double f64;
typedef float f32;
}
Далее: Другие встроенные функции MIPS, Предыдущее: Встроенные функции MIPS Loongson, Наверх: Встроенные функции целевых платформ [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-9.5.0/gcc/MIPS-SIMD-Architecture-_0028MSA_0029-Support.html