/* libcontext - a slightly more portable version of boost::context Copyright Martin Husemann 2013. Copyright Oliver Kowalke 2009. Copyright Sergue E. Leontiev 2013. Copyright Thomas Sailer 2013. Minor modifications by Tomasz Wlostowski 2016. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BTHREAD_CONTEXT_H #define BTHREAD_CONTEXT_H #include <stdint.h> #include <stdio.h> #include <stddef.h> #if defined(__GNUC__) || defined(__APPLE__) #define BTHREAD_CONTEXT_COMPILER_gcc #if defined(__linux__) #ifdef __x86_64__ #define BTHREAD_CONTEXT_PLATFORM_linux_x86_64 #define BTHREAD_CONTEXT_CALL_CONVENTION #elif __i386__ #define BTHREAD_CONTEXT_PLATFORM_linux_i386 #define BTHREAD_CONTEXT_CALL_CONVENTION #elif __arm__ #define BTHREAD_CONTEXT_PLATFORM_linux_arm32 #define BTHREAD_CONTEXT_CALL_CONVENTION #elif __aarch64__ #define BTHREAD_CONTEXT_PLATFORM_linux_arm64 #define BTHREAD_CONTEXT_CALL_CONVENTION #endif #elif defined(__MINGW32__) || defined (__MINGW64__) #if defined(__x86_64__) #define BTHREAD_CONTEXT_COMPILER_gcc #define BTHREAD_CONTEXT_PLATFORM_windows_x86_64 #define BTHREAD_CONTEXT_CALL_CONVENTION #endif #if defined(__i386__) #define BTHREAD_CONTEXT_COMPILER_gcc #define BTHREAD_CONTEXT_PLATFORM_windows_i386 #define BTHREAD_CONTEXT_CALL_CONVENTION __cdecl #endif #elif defined(__APPLE__) && defined(__MACH__) #if defined (__i386__) #define BTHREAD_CONTEXT_PLATFORM_apple_i386 #define BTHREAD_CONTEXT_CALL_CONVENTION #elif defined (__x86_64__) #define BTHREAD_CONTEXT_PLATFORM_apple_x86_64 #define BTHREAD_CONTEXT_CALL_CONVENTION #endif #endif #endif #if defined(_WIN32_WCE) typedef int intptr_t; #endif typedef void* bthread_fcontext_t; #ifdef __cplusplus extern "C"{ #endif intptr_t BTHREAD_CONTEXT_CALL_CONVENTION bthread_jump_fcontext(bthread_fcontext_t * ofc, bthread_fcontext_t nfc, intptr_t vp, bool preserve_fpu = false); bthread_fcontext_t BTHREAD_CONTEXT_CALL_CONVENTION bthread_make_fcontext(void* sp, size_t size, void (* fn)( intptr_t)); #ifdef __cplusplus }; #endif #endif // BTHREAD_CONTEXT_H