OSDN Git Service

* gcc.dg/format/asm_fprintf-1.c: New test.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / i386-loop-3.c
1 /* PR target/11044 */
2 /* Originator: Tim McGrath <misty-@charter.net> */
3 /* Testcase contributed by Eric Botcazou <ebotcazou@libertysurf.fr> */
4 /* { dg-do run { target i?86-*-* } } */
5 /* { dg-options "-mtune=k6 -O3 -ffast-math -funroll-loops" } */
6
7 typedef struct
8 {
9         unsigned char colormod;
10 } entity_state_t;
11
12 typedef struct
13 {
14         int num_entities;
15         entity_state_t *entities;
16 } packet_entities_t;
17
18 typedef struct
19 {
20         double senttime;
21         float ping_time;
22         packet_entities_t entities;
23 } client_frame_t;
24
25 typedef enum
26 {
27         cs_free,
28         cs_server,
29         cs_zombie,
30         cs_connected,
31         cs_spawned
32 } sv_client_state_t;
33
34 typedef struct client_s
35 {
36         sv_client_state_t state;
37         int ping;
38         client_frame_t frames[64];
39 } client_t;
40
41 int CalcPing (client_t *cl)
42 {
43         float ping;
44         int count, i;
45         register client_frame_t *frame;
46
47         if (cl->state == cs_server)
48                 return cl->ping;
49         ping = 0;
50         count = 0;
51         for (frame = cl->frames, i = 0; i < 64; i++, frame++) {
52                 if (frame->ping_time > 0) {
53                         ping += frame->ping_time;
54                         count++;
55                 }
56         }
57         if (!count)
58                 return 9999;
59         ping /= count;
60
61         return ping * 1000;
62 }
63
64 int main(void)
65 {
66    client_t cl;
67
68    memset(&cl, 0, sizeof(cl));
69
70    cl.frames[0].ping_time = 1.0f;
71
72    if (CalcPing(&cl) != 1000)
73      abort();
74
75    return 0;
76 }