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