summaryrefslogtreecommitdiff
path: root/libco/scefiber.c
diff options
context:
space:
mode:
Diffstat (limited to 'libco/scefiber.c')
-rw-r--r--libco/scefiber.c96
1 files changed, 0 insertions, 96 deletions
diff --git a/libco/scefiber.c b/libco/scefiber.c
deleted file mode 100644
index a233bec..0000000
--- a/libco/scefiber.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- libco.win (2016-09-06)
- authors: frangarcj
- license: public domain
-*/
-
-#define LIBCO_C
-#include <libco.h>
-#include <stdlib.h>
-#include <psp2/sysmodule.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-static thread_local cothread_t co_active_ = 0;
-
-typedef struct SceFiber {
- char reserved[128];
-} SceFiber __attribute__( ( aligned ( 8 ) ) ) ;
-
-int32_t _sceFiberInitializeImpl(SceFiber* fiber, char* name, void* entry, uint32_t argOnInitialize, void* addrContext, int32_t sizeContext, void* params);
-
-int32_t sceFiberFinalize(SceFiber* fiber);
-
-int32_t sceFiberRun(SceFiber* fiber, uint32_t argOnRunTo, uint32_t* argOnRun);
-
-int32_t sceFiberSwitch(SceFiber* fiber, uint32_t argOnRunTo, uint32_t* argOnRun);
-
-int32_t sceFiberReturnToThread(uint32_t argOnReturn, uint32_t* argOnRun);
-
-void co_thunk(uint32_t argOnInitialize, uint32_t argOnRun)
-{
- ((void (*)(void))argOnInitialize)();
-}
-
-cothread_t co_active(void)
-{
- if(!co_active_)
- {
- sceSysmoduleLoadModule(SCE_SYSMODULE_FIBER);
- co_active_ = (cothread_t)1;
- }
- return co_active_;
-}
-
-cothread_t co_create(unsigned int heapsize, void (*coentry)(void))
-{
- SceFiber* tailFiber = malloc(sizeof(SceFiber));
- char * m_contextBuffer = malloc(sizeof(char)*heapsize);
- if(!co_active_)
- {
- sceSysmoduleLoadModule(SCE_SYSMODULE_FIBER);
- co_active_ = (cothread_t)1;
- }
-
- //_sceFiberInitializeImpl
- int ret = _sceFiberInitializeImpl(tailFiber, "tailFiber", co_thunk, (uint32_t)coentry, (void*) m_contextBuffer, heapsize, NULL);
- if(ret==0){
- return (cothread_t)tailFiber;
- }else{
- return (cothread_t)ret;
- }
-
-}
-
-void co_delete(cothread_t cothread)
-{
- if(cothread == (cothread_t)1){
- return;
- }
- sceFiberFinalize((SceFiber*)cothread);
-}
-
-void co_switch(cothread_t cothread)
-{
-
- uint32_t argOnReturn = 0;
- if(cothread == (cothread_t)1){
- co_active_ = cothread;
- sceFiberReturnToThread(0, NULL);
- }else{
- SceFiber* theFiber = (SceFiber*)cothread;
- if(co_active_ == (cothread_t)1){
- co_active_ = cothread;
- sceFiberRun(theFiber, 0, &argOnReturn);
- }else{
- co_active_ = cothread;
- sceFiberSwitch(theFiber, 0, &argOnReturn);
- }
- }
-}
-
-#ifdef __cplusplus
-}
-#endif