Spec-Zone.ru › GCC 7

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

• Встроенные функции архитектуры MIPS SIMD:

GCC предоставляет встроенные функции для доступа к инструкциям SIMD, предоставляемым архитектурой MSA MIPS SIMD. Интерфейс доступен путём включения <msa.h> и использования -mmsa -mhard-float -mfp64 -mnan=2008. Для каждой __builtin_msa_*, существует сокращённое имя встроенной функции, __msa_*.

MSA реализует 128-битные векторные регистры, работающие с 8-, 16-, 32- и 64-битными целыми, 16- и 32-битными фиксированными точками или 32- и 64-битными числами с плавающей точкой. В msa.h включены следующие typedef для векторов:

  • 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-7.5.0/gcc/MIPS-SIMD-Architecture-_0028MSA_0029-Support.html

Spec-Zone.ru

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