OSDN Git Service

* gcc.target/i386/*.c: Do not require sse{,2,3,4} effective target
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.target / i386 / pr37101.c
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -msse2 -ftree-vectorize -march=nocona" } */
3
4 typedef __SIZE_TYPE__ size_t;
5 extern void *malloc (size_t);
6 extern void free (void *);
7
8 typedef struct _Resource
9 {
10   struct _Resource *next;
11   unsigned int id;
12 } ResourceRec, *ResourcePtr;
13
14 typedef struct _ClientResource
15 {
16   ResourcePtr *resources;
17   int elements;
18   int buckets;
19   int hashsize;
20 } ClientResourceRec;
21
22 static ClientResourceRec clientTable[256];
23
24 void
25 RebuildTable (int client)
26 {
27   int j;
28   ResourcePtr res, next;
29   ResourcePtr **tails, *resources;
30   ResourcePtr **tptr, *rptr;
31
32   j = 2 * clientTable[client].buckets;
33
34   tails =
35     (ResourcePtr **) malloc ((unsigned long) (j * sizeof (ResourcePtr *)));
36   resources =
37     (ResourcePtr *) malloc ((unsigned long) (j * sizeof (ResourcePtr)));
38
39   for (rptr = resources, tptr = tails; --j >= 0; rptr++, tptr++)
40     {
41       *rptr = ((ResourcePtr) ((void *) 0));
42       *tptr = rptr;
43     }
44
45   clientTable[client].hashsize++;
46   for (j = clientTable[client].buckets,
47        rptr = clientTable[client].resources; --j >= 0; rptr++)
48     {
49       for (res = *rptr; res; res = next)
50         {
51           next = res->next;
52           res->next = ((ResourcePtr) ((void *) 0));
53           tptr = &tails[Hash (client, res->id)];
54           **tptr = res;
55           *tptr = &res->next;
56         }
57     }
58   free ((void *) tails);
59   clientTable[client].buckets *= 2;
60   free ((void *) clientTable[client].resources);
61   clientTable[client].resources = resources;
62 }
63
64 /* { dg-final { scan-assembler-not "movlps" } } */