OSDN Git Service

PR c/20740
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / arm-vfp1.c
1 /* { dg-do compile { target arm*-*-* } } */
2 /* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
3
4 extern float fabsf (float);
5 extern float sqrtf (float);
6 extern double fabs (double);
7 extern double sqrt (double);
8
9 volatile float f1, f2, f3;
10
11 void test_sf() {
12   /* abssf2_vfp */
13   /* { dg-final { scan-assembler "fabss" } } */
14   f1 = fabsf (f1);
15   /* negsf2_vfp */
16   /* { dg-final { scan-assembler "fnegs" } } */
17   f1 = -f1;
18   /* addsf3_vfp */
19   /* { dg-final { scan-assembler "fadds" } } */
20   f1 = f2 + f3;
21   /* subsf3_vfp */
22   /* { dg-final { scan-assembler "fsubs" } } */
23   f1 = f2 - f3;
24   /* divsf3_vfp */
25   /* { dg-final { scan-assembler "fdivs" } } */
26   f1 = f2 / f3;
27   /* mulsf3_vfp */
28   /* { dg-final { scan-assembler "fmuls" } } */
29   f1 = f2 * f3;
30   /* mulsf3negsf_vfp */
31   /* { dg-final { scan-assembler "fnmuls" } } */
32   f1 = -f2 * f3;
33   /* mulsf3addsf_vfp */
34   /* { dg-final { scan-assembler "fmacs" } } */
35   f1 = f2 * f3 + f1;
36   /* mulsf3subsf_vfp */
37   /* { dg-final { scan-assembler "fmscs" } } */
38   f1 = f2 * f3 - f1;
39   /* mulsf3negsfaddsf_vfp */
40   /* { dg-final { scan-assembler "fnmacs" } } */
41   f1 = f2 - f3 * f1;
42   /* mulsf3negsfsubsf_vfp */
43   /* { dg-final { scan-assembler "fnmscs" } } */
44   f1 = -f2 * f3 - f1;
45   /* sqrtsf2_vfp */
46   /* { dg-final { scan-assembler "fsqrts" } } */
47   f1 = sqrtf (f1);
48 }
49
50 volatile double d1, d2, d3;
51
52 void test_df() {
53   /* absdf2_vfp */
54   /* { dg-final { scan-assembler "fabsd" } } */
55   d1 = fabs (d1);
56   /* negdf2_vfp */
57   /* { dg-final { scan-assembler "fnegd" } } */
58   d1 = -d1;
59   /* adddf3_vfp */
60   /* { dg-final { scan-assembler "faddd" } } */
61   d1 = d2 + d3;
62   /* subdf3_vfp */
63   /* { dg-final { scan-assembler "fsubd" } } */
64   d1 = d2 - d3;
65   /* divdf3_vfp */
66   /* { dg-final { scan-assembler "fdivd" } } */
67   d1 = d2 / d3;
68   /* muldf3_vfp */
69   /* { dg-final { scan-assembler "fmuld" } } */
70   d1 = d2 * d3;
71   /* muldf3negdf_vfp */
72   /* { dg-final { scan-assembler "fnmuld" } } */
73   d1 = -d2 * d3;
74   /* muldf3adddf_vfp */
75   /* { dg-final { scan-assembler "fmacd" } } */
76   d1 = d2 * d3 + d1;
77   /* muldf3subdf_vfp */
78   /* { dg-final { scan-assembler "fmscd" } } */
79   d1 = d2 * d3 - d1;
80   /* muldf3negdfadddf_vfp */
81   /* { dg-final { scan-assembler "fnmacd" } } */
82   d1 = d2 - d3 * d1;
83   /* muldf3negdfsubdf_vfp */
84   /* { dg-final { scan-assembler "fnmscd" } } */
85   d1 = -d2 * d3 - d1;
86   /* sqrtdf2_vfp */
87   /* { dg-final { scan-assembler "fsqrtd" } } */
88   d1 = sqrt (d1);
89 }
90
91 volatile int i1;
92 volatile unsigned int u1;
93
94 void test_convert () {
95   /* extendsfdf2_vfp */
96   /* { dg-final { scan-assembler "fcvtds" } } */
97   d1 = f1;
98   /* truncdfsf2_vfp */
99   /* { dg-final { scan-assembler "fcvtsd" } } */
100   f1 = d1;
101   /* truncsisf2_vfp */
102   /* { dg-final { scan-assembler "ftosizs" } } */
103   i1 = f1;
104   /* truncsidf2_vfp */
105   /* { dg-final { scan-assembler "ftosizd" } } */
106   i1 = d1;
107   /* fixuns_truncsfsi2 */
108   /* { dg-final { scan-assembler "ftouizs" } } */
109   u1 = f1;
110   /* fixuns_truncdfsi2 */
111   /* { dg-final { scan-assembler "ftouizd" } } */
112   u1 = d1;
113   /* floatsisf2_vfp */
114   /* { dg-final { scan-assembler "fsitos" } } */
115   f1 = i1;
116   /* floatsidf2_vfp */
117   /* { dg-final { scan-assembler "fsitod" } } */
118   d1 = i1;
119   /* floatunssisf2 */
120   /* { dg-final { scan-assembler "fuitos" } } */
121   f1 = u1;
122   /* floatunssidf2 */
123   /* { dg-final { scan-assembler "fuitod" } } */
124   d1 = u1;
125 }
126