6.60.15.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-9.5.0/gcc/MIPS-3D-Built-in-Functions.html