diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-03-21 13:17:24 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-03-21 19:10:31 -0700 |
| commit | 6115b13dfc4b863149d55b903fd3a86f9a8d6a37 (patch) | |
| tree | ae134a324bb033b3483fef88971db4a15a7c1345 /src/rt/rust_upcall.cpp | |
| parent | 8a145a601eb97f9d32572fed23030bc1bc319105 (diff) | |
| download | rust-6115b13dfc4b863149d55b903fd3a86f9a8d6a37.tar.gz rust-6115b13dfc4b863149d55b903fd3a86f9a8d6a37.zip | |
rt: Don't switch to the C stack on the upcall_new_stack fast path
Diffstat (limited to 'src/rt/rust_upcall.cpp')
| -rw-r--r-- | src/rt/rust_upcall.cpp | 23 |
1 files changed, 5 insertions, 18 deletions
diff --git a/src/rt/rust_upcall.cpp b/src/rt/rust_upcall.cpp index b5885cd9def..cd8b4993cbe 100644 --- a/src/rt/rust_upcall.cpp +++ b/src/rt/rust_upcall.cpp @@ -439,26 +439,13 @@ upcall_log_type(const type_desc *tydesc, uint8_t *data, uint32_t level) { UPCALL_SWITCH_STACK(&args, upcall_s_log_type); } -struct s_new_stack_args { - void *result; - size_t stk_sz; - void *args_addr; - size_t args_sz; -}; - -extern "C" CDECL void -upcall_s_new_stack(struct s_new_stack_args *args) { - rust_task *task = rust_task_thread::get_task(); - args->result = task->next_stack(args->stk_sz, - args->args_addr, - args->args_sz); -} - +// NB: This needs to be blazing fast. Don't switch stacks extern "C" CDECL void * upcall_new_stack(size_t stk_sz, void *args_addr, size_t args_sz) { - s_new_stack_args args = {NULL, stk_sz, args_addr, args_sz}; - UPCALL_SWITCH_STACK(&args, upcall_s_new_stack); - return args.result; + rust_task *task = rust_task_thread::get_task(); + return task->next_stack(stk_sz, + args_addr, + args_sz); } // NB: This needs to be blazing fast. Don't switch stacks |
