diff options
author | mdkinney <mdkinney@6f19259b-4bc3-4df7-8a09-765794883524> | 2009-08-18 21:04:14 +0000 |
---|---|---|
committer | mdkinney <mdkinney@6f19259b-4bc3-4df7-8a09-765794883524> | 2009-08-18 21:04:14 +0000 |
commit | 64698eb8415e6829b956a12c3883655acc02f5a7 (patch) | |
tree | c0546059354c12eac27dfcf0195f462cbc98e9d6 /MdePkg/Library/BaseLib/Arm/GccInline.c | |
parent | 3c99107841da7f4f646c5bba94f55d73a936e82a (diff) | |
download | edk2-platforms-64698eb8415e6829b956a12c3883655acc02f5a7.tar.xz |
Add ARM support
Add C inline assembly files for IA32 and X64 GCC builds.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9113 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdePkg/Library/BaseLib/Arm/GccInline.c')
-rw-r--r-- | MdePkg/Library/BaseLib/Arm/GccInline.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/MdePkg/Library/BaseLib/Arm/GccInline.c b/MdePkg/Library/BaseLib/Arm/GccInline.c new file mode 100644 index 0000000000..cb1dc8bebe --- /dev/null +++ b/MdePkg/Library/BaseLib/Arm/GccInline.c @@ -0,0 +1,61 @@ +/** @file + GCC inline implementation of BaseLib processor specific functions. + + Copyright (c) 2006 - 2007, Intel Corporation<BR> + Portions copyright (c) 2008-2009 Apple Inc.<BR> + 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. + +**/ + +#include "BaseLibInternals.h" + +/** + Requests CPU to pause for a short period of time. + + Requests CPU to pause for a short period of time. Typically used in MP + systems to prevent memory starvation while waiting for a spin lock. + +**/ +VOID +EFIAPI +CpuPause ( + VOID + ) +{ + __asm__ __volatile__ ( + "nop\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + ); +} + +VOID +EFIAPI +InternalSwitchStackAsm ( + SWITCH_STACK_ENTRY_POINT EntryPoint, + VOID *Context, + VOID *Context2, + VOID *NewStack + ) +{ + __asm__ __volatile__ ( + "mov lr, %0\n\t" + "mov sp, %3\n\t" + "mov %r0, %1\n\t" + "mov %r1, %2\n\t" + "bx lr\n\t" + : /* no output operand */ + : "r" (EntryPoint), + "r" (Context), + "r" (Context2), + "r" (NewStack) + ); +} |