Merge aosp-toolchain/gcc/gcc-4_9 changes.
[official-gcc.git] / gcc-4_9 / gcc / testsuite / gcc.target / mips / mips-ps-type-2.c
bloba4dfbaea645d08ffee5a8a060b46f5e950a76778
1 /* Test v2sf calculations. The nmadd and nmsub patterns need
2 -ffinite-math-only. */
3 /* { dg-do compile } */
4 /* { dg-options "(HAS_MADDPS) -mgp32 -mpaired-single -ffinite-math-only" } */
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)));
22 void gobble (v2sf);
24 v2sf A = {100, 200};
26 /* Init from floats */
27 NOMIPS16 v2sf init (float a, float b)
29 return (v2sf) {a, b};
32 /* Move between registers */
33 NOMIPS16 v2sf move (v2sf a)
35 return a;
38 /* Load from memory */
39 NOMIPS16 v2sf load ()
41 return A;
44 /* Store to memory */
45 NOMIPS16 void store (v2sf a)
47 A = a;
50 /* Add */
51 NOMIPS16 v2sf add (v2sf a, v2sf b)
53 return a + b;
56 /* Subtract */
57 NOMIPS16 v2sf sub (v2sf a, v2sf b)
59 return a - b;
62 /* Negate */
63 NOMIPS16 v2sf neg (v2sf a)
65 return - a;
68 /* Multiply */
69 NOMIPS16 v2sf mul (v2sf a, v2sf b)
71 return a * b;
74 /* Multiply and add */
75 NOMIPS16 v2sf madd (v2sf a, v2sf b, v2sf c)
77 return a * b + c;
80 /* Multiply and subtract */
81 NOMIPS16 v2sf msub (v2sf a, v2sf b, v2sf c)
83 return a * b - c;
86 /* Negate Multiply and add */
87 NOMIPS16 v2sf nmadd (v2sf a, v2sf b, v2sf c)
89 return - (a * b + c);
92 /* Negate Multiply and subtract */
93 NOMIPS16 v2sf nmsub (v2sf a, v2sf b, v2sf c)
95 return - (a * b - c);
98 /* Conditional Move */
99 NOMIPS16 v2sf cond_move1 (v2sf a, v2sf b, int i)
101 if (i == 0)
102 a = b;
103 gobble (a);
106 /* Conditional Move */
107 NOMIPS16 v2sf cond_move2 (v2sf a, v2sf b, int i)
109 if (i != 0)
110 a = b;
111 gobble (a);