X-Git-Url: http://plrg.eecs.uci.edu/git/?p=cdsspec-compiler.git;a=blobdiff_plain;f=benchmark%2Fms-queue%2Fmy_queue.h;h=d6b2a695d6789a9b732bfd75eac564842bf3ecd6;hp=d4999299351daa98109cf96b938cce0cdfeb1fd7;hb=fbc06391161f561c10228740688e2e0bb6b936fa;hpb=f7d72aaac976fe732a65c775855ee2e588ba847f diff --git a/benchmark/ms-queue/my_queue.h b/benchmark/ms-queue/my_queue.h index d499929..d6b2a69 100644 --- a/benchmark/ms-queue/my_queue.h +++ b/benchmark/ms-queue/my_queue.h @@ -3,6 +3,13 @@ #include +#include +#include +#include +#include +#include +#include "common.h" + #define MAX_NODES 0xf typedef unsigned long long pointer; @@ -32,6 +39,8 @@ void init_queue(queue_t *q, int num_threads); /** @Begin + @Options: + LANG = C; @Global_define: @DeclareStruct: typedef struct tag_elem { @@ -47,7 +56,7 @@ void init_queue(queue_t *q, int num_threads); tag = new_id_tag(); // Beginning of available id @DefineFunc: tag_elem_t* new_tag_elem(call_id_t id, unsigned int data) { - tag_elem_t *e = (tag_elem_t*) MODEL_MALLOC(sizeof(tag_elem_t)); + tag_elem_t *e = (tag_elem_t*) CMODEL_MALLOC(sizeof(tag_elem_t)); e->id = id; e->data = data; return e; @@ -58,6 +67,8 @@ void init_queue(queue_t *q, int num_threads); } @DefineFunc: call_id_t get_id(void *wrapper) { + if (wrapper == NULL) + return 0; return ((tag_elem_t*) wrapper)->id; } @DefineFunc: @@ -78,7 +89,7 @@ void init_queue(queue_t *q, int num_threads); @Begin @Interface: Enqueue @Commit_point_set: Enqueue_Success_Point - @ID: get_and_inc(tag); + @ID: get_and_inc(tag) @Action: # __ID__ is an internal macro that refers to the id of the current # interface call @@ -92,15 +103,20 @@ void enqueue(queue_t *q, unsigned int val); @Begin @Interface: Dequeue @Commit_point_set: Dequeue_Success_Point | Dequeue_Empty_Point - @ID: get_id(back(__queue)) + @ID: get_id(front(__queue)) @Action: - unsigned int _Old_Val = get_data(front(__queue)); - pop_front(__queue); + unsigned int _Old_Val = 0; + if (size(__queue) > 0) { + _Old_Val = get_data(front(__queue)); + pop_front(__queue); + } else { + _Old_Val = 0; + } @Post_check: - _Old_Val == __RET__ + _Old_Val == 0 ? !__RET__ : _Old_Val == *retVal @End */ -unsigned int dequeue(queue_t *q); +bool dequeue(queue_t *q, unsigned int *retVal); int get_thread_num(); #endif