1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Initial support for x64-mingw32

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65868 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
samuel 2018-11-20 10:17:44 +00:00
parent d97c928067
commit 0b5e1442f5
5 changed files with 68 additions and 19 deletions

View file

@ -24,7 +24,7 @@ struct coroutine_context
void **stack_pointer;
};
typedef COROUTINE(* coroutine_start)(coroutine_context *from, coroutine_context *self);
typedef void(__fastcall * coroutine_start)(coroutine_context *from, coroutine_context *self);
static inline void coroutine_initialize(
coroutine_context *context,
@ -40,12 +40,12 @@ static inline void coroutine_initialize(
return;
}
*--context->stack_pointer = (void*)start;
/* Windows Thread Information Block */
*--context->stack_pointer = 0; /* fs:[0] */
*--context->stack_pointer = stack_pointer + stack_size; /* fs:[4] */
*--context->stack_pointer = (void*)stack_pointer; /* fs:[8] */
*--context->stack_pointer = (void*)start;
*--context->stack_pointer = (void*)stack_pointer; /* fs:[4] */
*--context->stack_pointer = (void*)((char *)stack_pointer - stack_size); /* fs:[8] */
context->stack_pointer -= COROUTINE_REGISTERS;
memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS);