Dead
[official-gcc.git] / gomp-20050608-branch / gcc / testsuite / gcc.target / mips / mips-ps-type.c
blobcd5566fcbfa3e378999473e8900cf762eb877f81
1 /* Test v2sf calculations */
2 /* { dg-do compile } */
3 /* { dg-mips-options "-mips64 -O2 -mpaired-single -mhard-float -mgp64" } */
4 /* { dg-final { scan-assembler "cvt.ps.s" } } */
5 /* { dg-final { scan-assembler "mov.ps" } } */
6 /* { dg-final { scan-assembler "ldc1" } } */
7 /* { dg-final { scan-assembler "sdc1" } } */
8 /* { dg-final { scan-assembler "add.ps" } } */
9 /* { dg-final { scan-assembler "sub.ps" } } */
10 /* { dg-final { scan-assembler "neg.ps" } } */
11 /* { dg-final { scan-assembler "mul.ps" } } */
12 /* { dg-final { scan-assembler "madd.ps" } } */
13 /* { dg-final { scan-assembler "msub.ps" } } */
14 /* { dg-final { scan-assembler "nmadd.ps" } } */
15 /* { dg-final { scan-assembler "nmsub.ps" } } */
16 /* { dg-final { scan-assembler "mov(n|z).ps" } } */
18 typedef float v2sf __attribute__ ((vector_size(8)));
20 v2sf A = {100, 200};
22 /* Init from floats */
23 v2sf init (float a, float b)
25 return (v2sf) {a, b};
28 /* Move between registers */
29 v2sf move (v2sf a)
31 return a;
34 /* Load from memory */
35 v2sf load ()
37 return A;
40 /* Store to memory */
41 void store (v2sf a)
43 A = a;
46 /* Add */
47 v2sf add (v2sf a, v2sf b)
49 return a + b;
52 /* Subtract */
53 v2sf sub (v2sf a, v2sf b)
55 return a - b;
58 /* Negate */
59 v2sf neg (v2sf a)
61 return - a;
64 /* Multiply */
65 v2sf mul (v2sf a, v2sf b)
67 return a * b;
70 /* Multiply and add */
71 v2sf madd (v2sf a, v2sf b, v2sf c)
73 return a * b + c;
76 /* Multiply and subtract */
77 v2sf msub (v2sf a, v2sf b, v2sf c)
79 return a * b - c;
82 /* Negate Multiply and add */
83 v2sf nmadd (v2sf a, v2sf b, v2sf c)
85 return - (a * b + c);
88 /* Negate Multiply and subtract */
89 v2sf nmsub (v2sf a, v2sf b, v2sf c)
91 return - (a * b - c);
94 /* Conditional Move */
95 v2sf cond_move1 (v2sf a, v2sf b, long i)
97 if (i > 0)
98 return a;
99 else
100 return b;
103 /* Conditional Move */
104 v2sf cond_move2 (v2sf a, v2sf b, int i)
106 if (i > 0)
107 return a;
108 else
109 return b;