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