Update libco

This commit is contained in:
twinaphex 2017-09-06 00:47:38 +02:00
parent 33a77bd3a3
commit 56c66376ff
2 changed files with 38 additions and 14 deletions

View File

@ -26,7 +26,11 @@ cothread_t co_active(void)
{ {
if(!co_active_) if(!co_active_)
{ {
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
ConvertThreadToFiberEx(0, FIBER_FLAG_FLOAT_SWITCH);
#else
ConvertThreadToFiber(0); ConvertThreadToFiber(0);
#endif
co_active_ = GetCurrentFiber(); co_active_ = GetCurrentFiber();
} }
return co_active_; return co_active_;
@ -36,10 +40,19 @@ cothread_t co_create(unsigned int heapsize, void (*coentry)(void))
{ {
if(!co_active_) if(!co_active_)
{ {
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
ConvertThreadToFiberEx(0, FIBER_FLAG_FLOAT_SWITCH);
#else
ConvertThreadToFiber(0); ConvertThreadToFiber(0);
#endif
co_active_ = GetCurrentFiber(); co_active_ = GetCurrentFiber();
} }
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
return (cothread_t)CreateFiberEx(heapsize, heapsize, FIBER_FLAG_FLOAT_SWITCH, co_thunk, (void*)coentry);
#else
return (cothread_t)CreateFiber(heapsize, co_thunk, (void*)coentry); return (cothread_t)CreateFiber(heapsize, co_thunk, (void*)coentry);
#endif
} }
void co_delete(cothread_t cothread) void co_delete(cothread_t cothread)

View File

@ -4,20 +4,31 @@
license: public domain license: public domain
*/ */
#if defined(__GNUC__) && defined(__i386__) || (defined(_MSC_VER) && defined(_M_IX86)) #if defined _MSC_VER
#include "x86.c" #include <Windows.h>
#elif defined(__GNUC__) && defined(__amd64__) || (defined(_MSC_VER) && defined(_M_AMD64)) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
#include "amd64.c" #include "fiber.c"
#elif defined(__GNUC__) && defined(_ARCH_PPC) #elif defined _M_IX86
#include "ppc.c" #include "x86.c"
#elif defined(__GNUC__) && defined(VITA) #elif defined _M_AMD64
#include "scefiber.c" #include "amd64.c"
#elif defined(__GNUC__) && (defined(__ARM_EABI__) || defined(__arm__)) #else
#include "armeabi.c" #include "fiber.c"
#elif defined(__GNUC__) #endif
#include "sjlj.c" #elif defined __GNUC__
#elif defined(_MSC_VER) #if defined __i386__
#include "fiber.c" #include "x86.c"
#elif defined __amd64__
#include "amd64.c"
#elif defined _ARCH_PPC
#include "ppc.c"
#elif defined VITA
#include "scefiber.c"
#elif defined(__ARM_EABI__) || defined(__arm__)
#include "armeabi.c"
#else
#include "sjlj.c"
#endif
#else #else
#error "libco: unsupported processor, compiler or operating system" #error "libco: unsupported processor, compiler or operating system"
#endif #endif