4bf2b6e93fe3e4c0f91f72084472f5f794ff5812
[jump.git] / dol / src / dol / visitor / cell / lib / spu / dolSupport.cpp
1 #include "dolSupport.h"\r
2 \r
3 /**\r
4  *\r
5  */\r
6 unsigned read(void* fifo, void* buf, unsigned len, DOLProcess* p) {\r
7         unsigned int\r
8                         pos =\r
9                                         static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->readPos;\r
10         pos += ((Fifo*) fifo)->read((char *) buf + pos, len - pos);\r
11 \r
12         if (pos == len)\r
13                 static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->readPos\r
14                                 = 0;\r
15         else\r
16                 static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->readPos\r
17                                 = pos;\r
18         return pos;\r
19 }\r
20 \r
21 /**\r
22  *\r
23  */\r
24 unsigned write(void* fifo, void* buf, unsigned len, DOLProcess* p) {\r
25         unsigned int\r
26                         pos =\r
27                                         static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->writePos;\r
28         pos += ((Fifo*) fifo)->write((char *) buf + pos, len - pos);\r
29 \r
30         if (pos == len)\r
31                 static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->writePos\r
32                                 = 0;\r
33         else\r
34                 static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->writePos\r
35                                 = pos;\r
36         return pos;\r
37 }\r
38 \r
39 /**\r
40  *\r
41  */\r
42 void DOL_detach(DOLProcess* p) {\r
43         static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->detach();\r
44 }\r
45 \r
46 /**\r
47  *\r
48  */\r
49 unsigned reserve(void* fifo, void** destination, unsigned len,\r
50                 DOLProcess* p) {\r
51         return ((WindowedFifo*) fifo)->reserve((char **) destination, len);\r
52 }\r
53 \r
54 /**\r
55  *\r
56  */\r
57 void release(void* fifo, DOLProcess* p) {\r
58         ((WindowedFifo*) fifo)->release();\r
59 }\r
60 \r
61 /**\r
62  *\r
63  */\r
64 unsigned capture(void* fifo, void** destination, unsigned len,\r
65                 DOLProcess* p) {\r
66         return ((WindowedFifo*) fifo)->capture((char **) destination, len);\r
67 }\r
68 \r
69 /**\r
70  *\r
71  */\r
72 void consume(void* fifo, DOLProcess* p) {\r
73         ((WindowedFifo*) fifo)->consume();\r
74 }\r
75 \r
76 void createPort(void** port, void* base, int number_of_indices,\r
77                 int index0, int range0) {\r
78         *port = (void**) ((void**) base)[index0];\r
79 }\r
80 \r
81 void createPort(void** port, void* base, int number_of_indices,\r
82                 int index0, int range0, int index1, int range1) {\r
83         *port = (void**) ((void**) base)[index0 * range1 + index1];\r
84 }\r
85 \r
86 void createPort(void** port, void* base, int number_of_indices,\r
87                 int index0, int range0, int index1, int range1, int index2,\r
88                 int range2) {\r
89         *port = (void**) ((void**) base)[index0 * range1 * range2 + index1\r
90                         * range2 + index2];\r
91 }\r
92 \r
93 void createPort(void** port, void* base, int number_of_indices,\r
94                 int index0, int range0, int index1, int range1, int index2,\r
95                 int range2, int index3, int range3) {\r
96         *port = (void**) ((void**) base)[index0 * range1 * range2 * range3\r
97                         + index1 * range2 * range3 + index2 * range3 + index3];\r
98 }\r