X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2c1f3b522a5ba97f44e2754a212c1a4c083ed0c9..19a7582234a64354e454fdab60a0d8c7ac16d2cc:/src/simix/smx_context_raw.c diff --git a/src/simix/smx_context_raw.c b/src/simix/smx_context_raw.c index 28f78314d9..059870eb84 100644 --- a/src/simix/smx_context_raw.c +++ b/src/simix/smx_context_raw.c @@ -38,10 +38,16 @@ extern void raw_swapcontext(raw_stack_t* old, raw_stack_t new); #ifdef PROCESSOR_i686 __asm__ ( +#if defined(APPLE) || defined(_WIN32) + ".text\n" + ".globl _raw_makecontext\n" + "_raw_makecontext:\n" +#else ".text\n" ".globl raw_makecontext\n" ".type raw_makecontext,@function\n" "raw_makecontext:\n" +#endif " movl 4(%esp),%eax\n" /* stack */ " addl 8(%esp),%eax\n" /* size */ " movl 12(%esp),%ecx\n" /* func */ @@ -58,10 +64,16 @@ __asm__ ( ); __asm__ ( +#if defined(APPLE) || defined(_WIN32) + ".text\n" + ".globl _raw_swapcontext\n" + "_raw_swapcontext:\n" +#else ".text\n" ".globl raw_swapcontext\n" ".type raw_swapcontext,@function\n" "raw_swapcontext:\n" +#endif " movl 4(%esp),%eax\n" /* old */ " movl 8(%esp),%edx\n" /* new */ " pushl %ebp\n" @@ -78,10 +90,16 @@ __asm__ ( ); #elif PROCESSOR_x86_64 __asm__ ( +#if defined(APPLE) || defined(_WIN32) + ".text\n" + ".globl _raw_makecontext\n" + "_raw_makecontext:\n" +#else ".text\n" ".globl raw_makecontext\n" ".type raw_makecontext,@function\n" - "raw_makecontext:\n" /* Calling convention sets the arguments in rdi, rsi, rdx and rcx, respectively */ + "raw_makecontext:\n"/* Calling convention sets the arguments in rdi, rsi, rdx and rcx, respectively */ +#endif " movq %rdi,%rax\n" /* stack */ " addq %rsi,%rax\n" /* size */ " movq $0, -8(%rax)\n" /* @return for func */ @@ -103,10 +121,16 @@ __asm__ ( ); __asm__ ( +#if defined(APPLE) || defined(_WIN32) + ".text\n" + ".globl _raw_swapcontext\n" + "_raw_swapcontext:\n" +#else ".text\n" ".globl raw_swapcontext\n" ".type raw_swapcontext,@function\n" - "raw_swapcontext:\n" /* Calling convention sets the arguments in rdi and rsi, respectively */ + "raw_swapcontext:\n" /* Calling convention sets the arguments in rdi and rsi, respectively */ +#endif " pushq %rdi\n" " pushq %rsi\n" " pushq %rdx\n" @@ -157,8 +181,6 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context); static xbt_parmap_t parmap; #endif -static smx_context_factory_t raw_factory; - #ifdef TIME_BENCH #include "xbt/xbt_os_time.h" #define NUM_THREADS 4 @@ -357,26 +379,13 @@ static void smx_ctx_raw_runall_parallel(xbt_dynar_t processes) #endif } -static smx_context_t smx_ctx_raw_self_parallel(void) -{ - return SIMIX_context_get_current(); -} - -static int smx_ctx_raw_get_thread_id(){ - return (int)(unsigned long)xbt_os_thread_get_extra_data(); -} - static void smx_ctx_raw_runall(xbt_dynar_t processes) { if (xbt_dynar_length(processes) >= SIMIX_context_get_parallel_threshold()) { XBT_DEBUG("Runall // %lu", xbt_dynar_length(processes)); - raw_factory->self = smx_ctx_raw_self_parallel; - raw_factory->get_thread_id = smx_ctx_raw_get_thread_id; smx_ctx_raw_runall_parallel(processes); } else { XBT_DEBUG("Runall serial %lu", xbt_dynar_length(processes)); - raw_factory->self = smx_ctx_base_self; - raw_factory->get_thread_id = smx_ctx_base_get_thread_id; smx_ctx_raw_runall_serial(processes); } } @@ -404,18 +413,13 @@ void SIMIX_ctx_raw_factory_init(smx_context_factory_t *factory) } else { /* always parallel */ - (*factory)->self = smx_ctx_raw_self_parallel; - (*factory)->get_thread_id = smx_ctx_raw_get_thread_id; (*factory)->runall = smx_ctx_raw_runall_parallel; } } else { /* always serial */ - (*factory)->self = smx_ctx_base_self; - (*factory)->get_thread_id = smx_ctx_base_get_thread_id; (*factory)->runall = smx_ctx_raw_runall_serial; } - raw_factory = *factory; #ifdef TIME_BENCH timer = xbt_os_timer_new(); #endif