3 primarypfq_t pqueue; //Global queue
6 /* Intitialize primary queue */
7 pqueue.front = pqueue.rear = NULL;
8 pthread_mutexattr_init(&pqueue.qlockattr);
9 pthread_mutexattr_settype(&pqueue.qlockattr, PTHREAD_MUTEX_RECURSIVE_NP);
10 pthread_mutex_init(&pqueue.qlock, &pqueue.qlockattr);
11 //pthread_mutex_init(&pqueue.qlock, NULL);
12 pthread_cond_init(&pqueue.qcond, NULL);
15 /* Delete the node pointed to by the front ptr of the queue */
17 prefetchqelem_t *delnode;
18 if((pqueue.front == NULL) && (pqueue.rear == NULL)) {
19 printf("The queue is empty: UNDERFLOW %s, %d\n", __FILE__, __LINE__);
21 } else if ((pqueue.front == pqueue.rear) && pqueue.front != NULL && pqueue.rear != NULL) {
23 pqueue.front = pqueue.rear = NULL;
25 delnode = pqueue.front;
26 pqueue.front = pqueue.front->next;
31 void queueDelete(void) {
32 /* Remove each element */
33 while(pqueue.front != NULL)
35 pqueue.front = pqueue.rear = NULL;
38 /* Inserts to the rear of primary prefetch queue */
39 void pre_enqueue(prefetchqelem_t *qnode) {
40 if(pqueue.front == NULL && pqueue.rear == NULL) {
41 pqueue.front = pqueue.rear = qnode;
44 pqueue.rear->next = qnode;
49 /* Return the node pointed to by the front ptr of the queue */
50 prefetchqelem_t *pre_dequeue(void) {
51 prefetchqelem_t *retnode;
52 if (pqueue.front == NULL) {
53 printf("Queue empty: Underflow %s, %d\n", __FILE__, __LINE__);
56 retnode = pqueue.front;
57 pqueue.front = pqueue.front->next;
58 if (pqueue.front == NULL)
65 int offset = sizeof(prefetchqelem_t);
69 prefetchqelem_t *tmp = pqueue.front;
72 ptr = (int *)(ptr1 + offset);
78 void predealloc(prefetchqelem_t *node) {
85 unsigned int oids[] = {11, 13};
86 short endoffsets[] = {2, 5};
87 short arrayfields[] = {2, 2, 1, 5, 6};
90 prefetch(2, oids, endoffsets, arrayfields);
92 unsigned int oids1[] = {21, 23, 25, 27};
93 short endoffsets1[] = {1, 2, 3, 4};
94 short arrayfields1[] = {3, 2, 1, 3};
95 prefetch(4, oids1, endoffsets1, arrayfields1);