Spec-Zone.ru › GCC 10

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

6.60.16.3 Встроенные функции MIPS-3D ¶

Расширение MIPS-3D, предназначенное для конкретных приложений (ASE), включает дополнительные инструкции сопоставленных одиночных чисел, разработанные для повышения производительности операций с 3D-графикой. Поддержка этих инструкций управляется опцией командной строки -mips3d.

Перечисленные ниже функции непосредственно отображаются на конкретную инструкцию MIPS-3D. Для получения более подробной информации о том, что делает каждая инструкция, обратитесь к спецификации архитектуры.

v2sf __builtin_mips_addr_ps (v2sf, v2sf)

Суммирование с сокращением (addr.ps).

v2sf __builtin_mips_mulr_ps (v2sf, v2sf)

Умножение с сокращением (mulr.ps).

v2sf __builtin_mips_cvt_pw_ps (v2sf)

Преобразование сопоставленных одиночных чисел в сопоставленные целые числа (cvt.pw.ps).

v2sf __builtin_mips_cvt_ps_pw (v2sf)

Преобразование сопоставленных целых чисел в сопоставленные одиночные числа (cvt.ps.pw).

float __builtin_mips_recip1_s (float)
double __builtin_mips_recip1_d (double)
v2sf __builtin_mips_recip1_ps (v2sf)

Обратное вычисление с уменьшенной точностью (этап 1 последовательности) (recip1.fmt).

float __builtin_mips_recip2_s (float, float)
double __builtin_mips_recip2_d (double, double)
v2sf __builtin_mips_recip2_ps (v2sf, v2sf)

Обратное вычисление с уменьшенной точностью (этап 2 последовательности) (recip2.fmt).

float __builtin_mips_rsqrt1_s (float)
double __builtin_mips_rsqrt1_d (double)
v2sf __builtin_mips_rsqrt1_ps (v2sf)

Вычисление обратного квадратного корня с уменьшенной точностью (этап 1 последовательности) (rsqrt1.fmt).

float __builtin_mips_rsqrt2_s (float, float)
double __builtin_mips_rsqrt2_d (double, double)
v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)

Вычисление обратного квадратного корня с уменьшенной точностью (этап 2 последовательности) (rsqrt2.fmt).

Доступны также функции, состоящие из нескольких инструкций. В каждом случае cond может принимать любое из 16 условий с плавающей запятой: f, un, eq, ueq, olt, ult, ole, ule, sf, ngle, seq, ngl, lt, nge, le или ngt.

int __builtin_mips_cabs_cond_s (float a, float b)
int __builtin_mips_cabs_cond_d (double a, double b)

Абсолютное сравнение двух скалярных значений (cabs.cond.fmt, bc1t/bc1f).

Эти функции сравнивают a и b с использованием cabs.cond.s или cabs.cond.d и возвращают результат в виде логического значения. Например:

float a, b;
if (__builtin_mips_cabs_eq_s (a, b))
  true ();
else
  false ();
int __builtin_mips_upper_cabs_cond_ps (v2sf a, v2sf b)
int __builtin_mips_lower_cabs_cond_ps (v2sf a, v2sf b)

Абсолютное сравнение двух сопоставленных одиночных значений (cabs.cond.ps, bc1t/bc1f).

Эти функции сравнивают a и b с использованием cabs.cond.ps и возвращают верхнюю или нижнюю половину результата. Например:

v2sf a, b;
if (__builtin_mips_upper_cabs_eq_ps (a, b))
  upper_halves_are_equal ();
else
  upper_halves_are_unequal ();

if (__builtin_mips_lower_cabs_eq_ps (a, b))
  lower_halves_are_equal ();
else
  lower_halves_are_unequal ();
v2sf __builtin_mips_movt_cabs_cond_ps (v2sf a, v2sf b, v2sf c, v2sf d)
v2sf __builtin_mips_movf_cabs_cond_ps (v2sf a, v2sf b, v2sf c, v2sf d)

Условное перемещение на основе абсолютного сравнения (cabs.cond.ps, movt.ps/movf.ps).

Функции movt возвращают значение x, вычисленное следующим образом:

cabs.cond.ps cc,a,b
mov.ps x,c
movt.ps x,d,cc

Функции movf аналогичны, но используют movf.ps вместо movt.ps.

int __builtin_mips_any_c_cond_ps (v2sf a, v2sf b)
int __builtin_mips_all_c_cond_ps (v2sf a, v2sf b)
int __builtin_mips_any_cabs_cond_ps (v2sf a, v2sf b)
int __builtin_mips_all_cabs_cond_ps (v2sf a, v2sf b)

Сравнение двух сопоставленных одиночных значений (c.cond.ps/cabs.cond.ps, bc1any2t/bc1any2f).

Эти функции сравнивают a и b с использованием c.cond.ps или cabs.cond.ps. Формы any возвращают true, если любой из результатов true, а формы all возвращают true, если оба результата true. Например:

v2sf a, b;
if (__builtin_mips_any_c_eq_ps (a, b))
  one_is_true ();
else
  both_are_false ();

if (__builtin_mips_all_c_eq_ps (a, b))
  both_are_true ();
else
  one_is_false ();
int __builtin_mips_any_c_cond_4s (v2sf a, v2sf b, v2sf c, v2sf d)
int __builtin_mips_all_c_cond_4s (v2sf a, v2sf b, v2sf c, v2sf d)
int __builtin_mips_any_cabs_cond_4s (v2sf a, v2sf b, v2sf c, v2sf d)
int __builtin_mips_all_cabs_cond_4s (v2sf a, v2sf b, v2sf c, v2sf d)

Сравнение четырех сопоставленных одиночных значений (c.cond.ps/cabs.cond.ps, bc1any4t/bc1any4f).

Эти функции используют c.cond.ps или cabs.cond.ps для сравнения a с b и c с d. Формы any возвращают true, если любой из четырех результатов true, а формы all возвращают true, если все четыре результата true. Например:

v2sf a, b, c, d;
if (__builtin_mips_any_c_eq_4s (a, b, c, d))
  some_are_true ();
else
  all_are_false ();

if (__builtin_mips_all_c_eq_4s (a, b, c, d))
  all_are_true ();
else
  some_are_false ();

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

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/gcc/MIPS-3D-Built-in-Functions.html

Spec-Zone.ru

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