1;------------------------------------------------------------------------------ 2; 3; Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> 4; This program and the accompanying materials 5; are licensed and made available under the terms and conditions of the BSD License 6; which accompanies this distribution. The full text of the license may be found at 7; http://opensource.org/licenses/bsd-license.php. 8; 9; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11; 12; Module Name: 13; 14; SwitchStack.Asm 15; 16; Abstract: 17; 18;------------------------------------------------------------------------------ 19 20 DEFAULT REL 21 SECTION .text 22 23;------------------------------------------------------------------------------ 24; Routine Description: 25; 26; Routine for switching stacks with 2 parameters 27; 28; Arguments: 29; 30; (rcx) EntryPoint - Entry point with new stack. 31; (rdx) Context1 - Parameter1 for entry point. 32; (r8) Context2 - Parameter2 for entry point. 33; (r9) NewStack - The pointer to new stack. 34; 35; Returns: 36; 37; None 38; 39;------------------------------------------------------------------------------ 40global ASM_PFX(InternalSwitchStack) 41ASM_PFX(InternalSwitchStack): 42 mov rax, rcx 43 mov rcx, rdx 44 mov rdx, r8 45 ; 46 ; Reserve space for register parameters (rcx, rdx, r8 & r9) on the stack, 47 ; in case the callee wishes to spill them. 48 ; 49 lea rsp, [r9 - 0x20] 50 call rax 51 52