3 primarypfq_t pqueue; //Global queue
6 /* Intitialize primary queue */
7 pqueue.front = pqueue.rear = NULL;
8 pthread_mutex_init(&pqueue.qlock, NULL);
9 pthread_cond_init(&pqueue.qcond, NULL);
12 /* Delete the node pointed to by the front ptr of the queue */
14 prefetchqelem_t *delnode;
15 if((pqueue.front == NULL) && (pqueue.rear == NULL)) {
16 printf("The queue is empty: UNDERFLOW %s, %d\n", __FILE__, __LINE__);
18 } else if ((pqueue.front == pqueue.rear) && pqueue.front != NULL && pqueue.rear != NULL) {
20 pqueue.front = pqueue.rear = NULL;
22 delnode = pqueue.front;
23 pqueue.front = pqueue.front->next;
28 void queueDelete(void) {
29 /* Remove each element */
30 while(pqueue.front != NULL)
32 pqueue.front = pqueue.rear = NULL;
35 /* Inserts to the rear of primary prefetch queue */
36 void pre_enqueue(prefetchqelem_t *qnode) {
37 if(pqueue.front == NULL && pqueue.rear == NULL) {
38 pqueue.front = pqueue.rear = qnode;
41 pqueue.rear->next = qnode;
46 /* Return the node pointed to by the front ptr of the queue */
47 prefetchqelem_t *pre_dequeue(void) {
48 prefetchqelem_t *retnode;
49 if (pqueue.front == NULL) {
50 printf("Queue empty: Underflow %s, %d\n", __FILE__, __LINE__);
53 retnode = pqueue.front;
54 pqueue.front = pqueue.front->next;
55 if (pqueue.front == NULL)
62 int offset = sizeof(prefetchqelem_t);
66 prefetchqelem_t *tmp = pqueue.front;
69 ptr = (int *)(ptr1 + offset);
75 void predealloc(prefetchqelem_t *node) {
83 unsigned int oids[] = {11, 13};
84 short endoffsets[] = {2, 5};
85 short arrayfields[] = {2, 2, 1, 5, 6};
88 prefetch(2, oids, endoffsets, arrayfields);
90 unsigned int oids1[] = {21, 23, 25, 27};
91 short endoffsets1[] = {1, 2, 3, 4};
92 short arrayfields1[] = {3, 2, 1, 3};
93 prefetch(4, oids1, endoffsets1, arrayfields1);