The MIPS-3D Application-Specific Extension (ASE) includes additional paired-single instructions that are designed to improve the performance of 3D graphics operations. Support for these instructions is controlled by the -mips3d
command-line option.
The functions listed below map directly to a particular MIPS-3D instruction. Please refer to the architecture specification for more details on what each instruction does.
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)
recip1.
fmt). float __builtin_mips_recip2_s (float, float)
double __builtin_mips_recip2_d (double, double)
v2sf __builtin_mips_recip2_ps (v2sf, v2sf)
recip2.
fmt). float __builtin_mips_rsqrt1_s (float)
double __builtin_mips_rsqrt1_d (double)
v2sf __builtin_mips_rsqrt1_ps (v2sf)
rsqrt1.
fmt). float __builtin_mips_rsqrt2_s (float, float)
double __builtin_mips_rsqrt2_d (double, double)
v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)
rsqrt2.
fmt). The following multi-instruction functions are also available. In each case, cond can be any of the 16 floating-point conditions: f
, un
, eq
, ueq
, olt
, ult
, ole
, ule
, sf
, ngle
, seq
, ngl
, lt
, nge
, le
or 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
). These functions compare a and b using cabs.
cond.s
or cabs.
cond.d
and return the result as a boolean value. For example:
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
). These functions compare a and b using cabs.
cond.ps
and return either the upper or lower half of the result. For example:
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
). The movt
functions return the value x computed by:
cabs.cond.ps cc,a,b mov.ps x,c movt.ps x,d,cc
The movf
functions are similar but use movf.ps
instead of 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
). These functions compare a and b using c.
cond.ps
or cabs.
cond.ps
. The any
forms return true if either result is true and the all
forms return true if both results are true. For example:
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
). These functions use c.
cond.ps
or cabs.
cond.ps
to compare a with b and to compare c with d. The any
forms return true if any of the four results are true and the all
forms return true if all four results are true. For example:
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 ();
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gcc/MIPS_002d3D-Built_002din-Functions.html