From 754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 7 Apr 2024 13:41:34 -0500 Subject: new repository --- devdocs/gcc~13/mips-3d-built-in-functions.html | 56 ++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 devdocs/gcc~13/mips-3d-built-in-functions.html (limited to 'devdocs/gcc~13/mips-3d-built-in-functions.html') diff --git a/devdocs/gcc~13/mips-3d-built-in-functions.html b/devdocs/gcc~13/mips-3d-built-in-functions.html new file mode 100644 index 00000000..c6fa4527 --- /dev/null +++ b/devdocs/gcc~13/mips-3d-built-in-functions.html @@ -0,0 +1,56 @@ +

6.60.17.3 MIPS-3D Built-in Functions ΒΆ

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)
+

Reduction add (addr.ps).

v2sf __builtin_mips_mulr_ps (v2sf, v2sf)
+

Reduction multiply (mulr.ps).

v2sf __builtin_mips_cvt_pw_ps (v2sf)
+

Convert paired single to paired word (cvt.pw.ps).

v2sf __builtin_mips_cvt_ps_pw (v2sf)
+

Convert paired word to paired single (cvt.ps.pw).

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

Reduced-precision reciprocal (sequence step 1) (recip1.fmt).

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

Reduced-precision reciprocal (sequence step 2) (recip2.fmt).

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

Reduced-precision reciprocal square root (sequence step 1) (rsqrt1.fmt).

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

Reduced-precision reciprocal square root (sequence step 2) (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)
+

Absolute comparison of two scalar values (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)
+

Absolute comparison of two paired-single values (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)
+

Conditional move based on absolute comparison (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)
+

Comparison of two paired-single values (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)
+

Comparison of four paired-single values (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-13.1.0/gcc/MIPS-3D-Built-in-Functions.html +

+
-- cgit v1.2.3