From 23086ba84cbb13350a2464b857b197eef67f1361 Mon Sep 17 00:00:00 2001 From: mdkinney Date: Tue, 19 Sep 2006 19:04:40 +0000 Subject: Optimize the size of the Base Library for the MSFT 32-bit tool chains by taking advantage of inline assembly. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1567 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/BaseLib/Ia32/EnablePaging32.c | 49 ++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 MdePkg/Library/BaseLib/Ia32/EnablePaging32.c (limited to 'MdePkg/Library/BaseLib/Ia32/EnablePaging32.c') diff --git a/MdePkg/Library/BaseLib/Ia32/EnablePaging32.c b/MdePkg/Library/BaseLib/Ia32/EnablePaging32.c new file mode 100644 index 0000000000..146089cab6 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/EnablePaging32.c @@ -0,0 +1,49 @@ +/** @file + AsmEnablePaging32 function + + Copyright (c) 2006, Intel Corporation
+ All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#if _MSC_EXTENSIONS + +__declspec (naked) +VOID +EFIAPI +InternalX86EnablePaging32 ( + IN SWITCH_STACK_ENTRY_POINT EntryPoint, + IN VOID *Context1, OPTIONAL + IN VOID *Context2, OPTIONAL + IN VOID *NewStack + ) +{ + _asm { + push ebp + mov ebp, esp + mov ebx, EntryPoint + mov ecx, Context1 + mov edx, Context2 + pushfd + pop edi + cli + mov eax, cr0 + bts eax, 31 + mov esp, NewStack + mov cr0, eax + push edi + popfd + push edx + push ecx + call ebx + jmp $ + } +} + +#endif -- cgit v1.2.3