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 "-mcpu=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 
CalcPing(client_t * cl)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 
main(void)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 }
77