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)41int 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)64int 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