1 /* Test v2sf calculations. The nmadd and nmsub patterns need
3 /* { dg-do compile } */
4 /* { dg-options "(HAS_MADDPS) -mgp32 -mpaired-single -ffinite-math-only forbid_cpu=octeon.*" } */
5 /* { dg-skip-if "nmadd and nmsub need combine" { *-*-* } { "-O0" } { "" } } */
6 /* { dg-final { scan-assembler "\tcvt.ps.s\t" } } */
7 /* { dg-final { scan-assembler "\tmov.ps\t" } } */
8 /* { dg-final { scan-assembler "\tldc1\t" } } */
9 /* { dg-final { scan-assembler "\tsdc1\t" } } */
10 /* { dg-final { scan-assembler "\tadd.ps\t" } } */
11 /* { dg-final { scan-assembler "\tsub.ps\t" } } */
12 /* { dg-final { scan-assembler "\tneg.ps\t" } } */
13 /* { dg-final { scan-assembler "\tmul.ps\t" } } */
14 /* { dg-final { scan-assembler "\tmadd.ps\t" } } */
15 /* { dg-final { scan-assembler "\tmsub.ps\t" } } */
16 /* { dg-final { scan-assembler "\tnmadd.ps\t" } } */
17 /* { dg-final { scan-assembler "\tnmsub.ps\t" } } */
18 /* { dg-final { scan-assembler "\tmovn.ps\t" } } */
19 /* { dg-final { scan-assembler "\tmovz.ps\t" } } */
21 typedef float v2sf
__attribute__ ((vector_size(8)));
26 /* Init from floats */
27 NOMIPS16 v2sf
init (float a
, float b
)
32 /* Move between registers */
33 NOMIPS16 v2sf
move (v2sf a
)
38 /* Load from memory */
45 NOMIPS16
void store (v2sf a
)
51 NOMIPS16 v2sf
add (v2sf a
, v2sf b
)
57 NOMIPS16 v2sf
sub (v2sf a
, v2sf b
)
63 NOMIPS16 v2sf
neg (v2sf a
)
69 NOMIPS16 v2sf
mul (v2sf a
, v2sf b
)
74 /* Multiply and add */
75 NOMIPS16 v2sf
madd (v2sf a
, v2sf b
, v2sf c
)
80 /* Multiply and subtract */
81 NOMIPS16 v2sf
msub (v2sf a
, v2sf b
, v2sf c
)
86 /* Negate Multiply and add */
87 NOMIPS16 v2sf
nmadd (v2sf a
, v2sf b
, v2sf c
)
92 /* Negate Multiply and subtract */
93 NOMIPS16 v2sf
nmsub (v2sf a
, v2sf b
, v2sf c
)
98 /* Conditional Move */
99 NOMIPS16 v2sf
cond_move1 (v2sf a
, v2sf b
, int i
)
106 /* Conditional Move */
107 NOMIPS16 v2sf
cond_move2 (v2sf a
, v2sf b
, int i
)