Mercurial > hg > Members > kono > Cerium
diff TaskManager/kernel/ppe/Task.h @ 684:458a1ad91427
Task Array generation worked.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 06 Dec 2009 23:03:28 +0900 |
parents | 9a6cb2439593 |
children | b386522827ae |
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/Task.h Sun Dec 06 18:53:46 2009 +0900 +++ b/TaskManager/kernel/ppe/Task.h Sun Dec 06 23:03:28 2009 +0900 @@ -40,11 +40,13 @@ class Task { public: // variables - + int task_size; int command; int param_size; int inData_size; int outData_size; + int inData_offset; + int outData_offset; void *data[] __attribute__ ((aligned (DEFAULT_ALIGNMENT))); // memaddr param[param_size]; // ListEelemnt inData[inData_size]; @@ -57,20 +59,42 @@ void print(); memaddr param(int index) { - memaddr p = (memaddr)data; - return p + sizeof(memaddr)*index; + return (memaddr)data + sizeof(memaddr)*index; } memaddr inData(int index) { - return param(param_size) + sizeof(ListElement)*index; + memaddr p = (memaddr)data + inData_offset; + return p + sizeof(ListElement)*index; } memaddr outData(int index) { - memaddr p = inData(inData_size); + memaddr p = (memaddr)data + outData_offset; return p + sizeof(ListElement)* index; } - void set_param_length(int i) { param_size = i; } - void set_inData_length(int length) { inData_size = length; } - void set_outData_length(int length) { outData_size = length; } + void set_param_length(int i) { + param_size = i; + inData_offset = round_up16(sizeof(Task))+param_size*sizeof(memaddr); + } + void set_inData_length(int length) { + inData_size = length; + if (inData_offset==0) { + printf("call set_param_length before\n"); + } + outData_offset = + round_up16(inData_offset+inData_size*sizeof(ListElement)); + } + void set_outData_length(int length) { + outData_size = length; + if (outData_offset==0) { + printf("call set_outData_length before\n"); + } + task_size = round_up16(outData_offset+outData_size*sizeof(ListElement)); + } + int size() { + if (task_size==0) { + printf("call set_outData_length before\n"); + } + return task_size; + } void set_inData_t( int index, memaddr addr, int size); void set_outData_t(int index, memaddr addr, int size); void set_task_id(int id) { command = id; } @@ -78,14 +102,12 @@ memaddr *p = (memaddr*)this->param(index); *p = param; } - int size() { - return outData(outData_size)-(memaddr)data; - } static int count_size(int params, int ins, int outs) { - int size = sizeof(memaddr)*params - + sizeof(ListElement)*ins - + sizeof(ListElement)*outs; + int size = round_up16(sizeof(Task)) + + round_up16(sizeof(memaddr)*params) + + round_up16(sizeof(ListElement)*ins) + + round_up16(sizeof(ListElement)*outs); return size; }