dol: initial dol commit
[jump.git] / dol / src / dol / visitor / cell / lib / spu / dolSupport.cpp
diff --git a/dol/src/dol/visitor/cell/lib/spu/dolSupport.cpp b/dol/src/dol/visitor/cell/lib/spu/dolSupport.cpp
new file mode 100644 (file)
index 0000000..4bf2b6e
--- /dev/null
@@ -0,0 +1,98 @@
+#include "dolSupport.h"\r
+\r
+/**\r
+ *\r
+ */\r
+unsigned read(void* fifo, void* buf, unsigned len, DOLProcess* p) {\r
+       unsigned int\r
+                       pos =\r
+                                       static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->readPos;\r
+       pos += ((Fifo*) fifo)->read((char *) buf + pos, len - pos);\r
+\r
+       if (pos == len)\r
+               static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->readPos\r
+                               = 0;\r
+       else\r
+               static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->readPos\r
+                               = pos;\r
+       return pos;\r
+}\r
+\r
+/**\r
+ *\r
+ */\r
+unsigned write(void* fifo, void* buf, unsigned len, DOLProcess* p) {\r
+       unsigned int\r
+                       pos =\r
+                                       static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->writePos;\r
+       pos += ((Fifo*) fifo)->write((char *) buf + pos, len - pos);\r
+\r
+       if (pos == len)\r
+               static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->writePos\r
+                               = 0;\r
+       else\r
+               static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->writePos\r
+                               = pos;\r
+       return pos;\r
+}\r
+\r
+/**\r
+ *\r
+ */\r
+void DOL_detach(DOLProcess* p) {\r
+       static_cast<proc_wrapper *> ((static_cast<process_data *> (p->wptr))->wrapper)->detach();\r
+}\r
+\r
+/**\r
+ *\r
+ */\r
+unsigned reserve(void* fifo, void** destination, unsigned len,\r
+               DOLProcess* p) {\r
+       return ((WindowedFifo*) fifo)->reserve((char **) destination, len);\r
+}\r
+\r
+/**\r
+ *\r
+ */\r
+void release(void* fifo, DOLProcess* p) {\r
+       ((WindowedFifo*) fifo)->release();\r
+}\r
+\r
+/**\r
+ *\r
+ */\r
+unsigned capture(void* fifo, void** destination, unsigned len,\r
+               DOLProcess* p) {\r
+       return ((WindowedFifo*) fifo)->capture((char **) destination, len);\r
+}\r
+\r
+/**\r
+ *\r
+ */\r
+void consume(void* fifo, DOLProcess* p) {\r
+       ((WindowedFifo*) fifo)->consume();\r
+}\r
+\r
+void createPort(void** port, void* base, int number_of_indices,\r
+               int index0, int range0) {\r
+       *port = (void**) ((void**) base)[index0];\r
+}\r
+\r
+void createPort(void** port, void* base, int number_of_indices,\r
+               int index0, int range0, int index1, int range1) {\r
+       *port = (void**) ((void**) base)[index0 * range1 + index1];\r
+}\r
+\r
+void createPort(void** port, void* base, int number_of_indices,\r
+               int index0, int range0, int index1, int range1, int index2,\r
+               int range2) {\r
+       *port = (void**) ((void**) base)[index0 * range1 * range2 + index1\r
+                       * range2 + index2];\r
+}\r
+\r
+void createPort(void** port, void* base, int number_of_indices,\r
+               int index0, int range0, int index1, int range1, int index2,\r
+               int range2, int index3, int range3) {\r
+       *port = (void**) ((void**) base)[index0 * range1 * range2 * range3\r
+                       + index1 * range2 * range3 + index2 * range3 + index3];\r
+}\r