From 56c66376ff4165610050a77cec39a3a9ed570879 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 6 Sep 2017 00:47:38 +0200 Subject: [PATCH] Update libco --- libretro-common/libco/fiber.c | 13 ++++++++++++ libretro-common/libco/libco.c | 39 ++++++++++++++++++++++------------- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/libretro-common/libco/fiber.c b/libretro-common/libco/fiber.c index 90ba1158d4..9e630894fa 100644 --- a/libretro-common/libco/fiber.c +++ b/libretro-common/libco/fiber.c @@ -26,7 +26,11 @@ cothread_t co_active(void) { if(!co_active_) { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) + ConvertThreadToFiberEx(0, FIBER_FLAG_FLOAT_SWITCH); +#else ConvertThreadToFiber(0); +#endif co_active_ = GetCurrentFiber(); } return co_active_; @@ -36,10 +40,19 @@ cothread_t co_create(unsigned int heapsize, void (*coentry)(void)) { if(!co_active_) { +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) + ConvertThreadToFiberEx(0, FIBER_FLAG_FLOAT_SWITCH); +#else ConvertThreadToFiber(0); +#endif 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); +#endif } void co_delete(cothread_t cothread) diff --git a/libretro-common/libco/libco.c b/libretro-common/libco/libco.c index 4e5c649661..4cc65b2a45 100644 --- a/libretro-common/libco/libco.c +++ b/libretro-common/libco/libco.c @@ -4,20 +4,31 @@ license: public domain */ -#if defined(__GNUC__) && defined(__i386__) || (defined(_MSC_VER) && defined(_M_IX86)) - #include "x86.c" -#elif defined(__GNUC__) && defined(__amd64__) || (defined(_MSC_VER) && defined(_M_AMD64)) - #include "amd64.c" -#elif defined(__GNUC__) && defined(_ARCH_PPC) - #include "ppc.c" -#elif defined(__GNUC__) && defined(VITA) - #include "scefiber.c" -#elif defined(__GNUC__) && (defined(__ARM_EABI__) || defined(__arm__)) - #include "armeabi.c" -#elif defined(__GNUC__) - #include "sjlj.c" -#elif defined(_MSC_VER) - #include "fiber.c" +#if defined _MSC_VER + #include + #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) + #include "fiber.c" + #elif defined _M_IX86 + #include "x86.c" + #elif defined _M_AMD64 + #include "amd64.c" + #else + #include "fiber.c" + #endif +#elif defined __GNUC__ + #if defined __i386__ + #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 #error "libco: unsupported processor, compiler or operating system" #endif