X-Git-Url: http://plrg.eecs.uci.edu/git/?p=cdsspec-compiler.git;a=blobdiff_plain;f=benchmark%2Fms-queue%2Fmy_queue.h;h=0768428df5d9fadc1a1b29195b3de2c94068e87b;hp=d4999299351daa98109cf96b938cce0cdfeb1fd7;hb=375b8b02ae398aceddb920e0e7e94287e33f231e;hpb=f7d72aaac976fe732a65c775855ee2e588ba847f diff --git a/benchmark/ms-queue/my_queue.h b/benchmark/ms-queue/my_queue.h index d499929..0768428 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: @@ -77,13 +88,14 @@ void init_queue(queue_t *q, int num_threads); /** @Begin @Interface: Enqueue - @Commit_point_set: Enqueue_Success_Point - @ID: get_and_inc(tag); + @Commit_point_set: Enqueue_Read_Tail | Enqueue_UpdateNext + @ID: get_and_inc(tag) @Action: # __ID__ is an internal macro that refers to the id of the current # interface call tag_elem_t *elem = new_tag_elem(__ID__, val); push_back(__queue, elem); + //model_print("Enqueue: input=%d\n", val); @End */ void enqueue(queue_t *q, unsigned int val); @@ -91,16 +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)) + @Commit_point_set: Dequeue_Read_Head | Dequeue_Read_Tail | Dequeue_LoadNext + @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); + } + // model_print("Dequeue: __RET__=%d, retVal=%d, Old_Val=%d\n", __RET__, *retVal, _Old_Val); @Post_check: - _Old_Val == __RET__ + _Old_Val == 0 ? !__RET__ : _Old_Val == *retVal @End */ -unsigned int dequeue(queue_t *q); +bool dequeue(queue_t *q, int *retVal); int get_thread_num(); #endif