Paired-Single Built-in Functions

The following paired-single functions map directly to a particular MIPS instruction. Please refer to the architecture specification for details on what each instruction does.

v2sf __builtin_mips_pll_ps (v2sf, v2sf)
Pair lower lower (pll.ps ).
v2sf __builtin_mips_pul_ps (v2sf, v2sf)
Pair upper lower (pul.ps ).
v2sf __builtin_mips_plu_ps (v2sf, v2sf)
Pair lower upper (plu.ps ).
v2sf __builtin_mips_puu_ps (v2sf, v2sf)
Pair upper upper (puu.ps ).
v2sf __builtin_mips_cvt_ps_s (float, float)
Convert pair to paired single (cvt.ps.s ).
float __builtin_mips_cvt_s_pl (v2sf)
Convert pair lower to single (cvt.s.pl ).
float __builtin_mips_cvt_s_pu (v2sf)
Convert pair upper to single (cvt.s.pu ).
v2sf __builtin_mips_abs_ps (v2sf)
Absolute value (abs.ps ).
v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)
Align variable (alnv.ps ).

Note: The value of the third parameter must be 0 or 4 modulo 8, otherwise the result is unpredictable. Please read the instruction description for details.

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 .

v2sf __builtin_mips_movt_c_ cond _ps (v2sf a , v2sf b , v2sf c , v2sf d )
v2sf __builtin_mips_movf_c_ cond _ps (v2sf a , v2sf b , v2sf c , v2sf d )
Conditional move based on floating-point comparison (c. cond .ps , movt.ps /movf.ps ).

The movt functions return the value x computed by:

.ps cc

          mov.ps x

          movt.ps x

The movf functions are similar but use movf.ps instead of movt.ps .

int __builtin_mips_upper_c_ cond _ps (v2sf a , v2sf b )
int __builtin_mips_lower_c_ cond _ps (v2sf a , v2sf b )
Comparison of two paired-single values (c. cond .ps , bc1t /bc1f ).

These functions compare a and b using c. cond .ps and return either the upper or lower half of the result. For example:

          v2sf a, b;
          if (__builtin_mips_upper_c_eq_ps (a, b))
            upper_halves_are_equal ();
            upper_halves_are_unequal ();
          if (__builtin_mips_lower_c_eq_ps (a, b))
            lower_halves_are_equal ();
            lower_halves_are_unequal ();