Spec-Zone.ru › GCC 11

Далее: Другие встроенные функции MIPS, Предыдущее: Встроенные функции MIPS Loongson, Вверх: Встроенные функции, специфичные для конкретных целевых машин [Оглавление][Индекс]

6.60.17 Поддержка архитектуры MIPS SIMD (MSA) ¶

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 SIMD

Далее: Другие встроенные функции MIPS, Предыдущее: Встроенные функции MIPS Loongson, Вверх: Встроенные функции, специфичные для конкретных целевых машин [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/MIPS-SIMD-Architecture-_0028MSA_0029-Support.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API