diff options
author | hhtian <hhtian@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-11-01 06:30:58 +0000 |
---|---|---|
committer | hhtian <hhtian@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-11-01 06:30:58 +0000 |
commit | 97f98500c1d40eba76210961e90ea5d354bcbc18 (patch) | |
tree | 88513b4a041208d992929db5703a4312a0497a3b /CryptoPkg/Library/BaseCryptLib/SysCall/Ia32/Alloca.S | |
parent | a3bcde70e6dc69000f85cc5deee98101d2ae200a (diff) | |
download | edk2-platforms-97f98500c1d40eba76210961e90ea5d354bcbc18.tar.xz |
Add CryptoPkg (from UDK2010.UP3)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10987 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'CryptoPkg/Library/BaseCryptLib/SysCall/Ia32/Alloca.S')
-rw-r--r-- | CryptoPkg/Library/BaseCryptLib/SysCall/Ia32/Alloca.S | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/CryptoPkg/Library/BaseCryptLib/SysCall/Ia32/Alloca.S b/CryptoPkg/Library/BaseCryptLib/SysCall/Ia32/Alloca.S new file mode 100644 index 0000000000..8496833ac8 --- /dev/null +++ b/CryptoPkg/Library/BaseCryptLib/SysCall/Ia32/Alloca.S @@ -0,0 +1,59 @@ +#------------------------------------------------------------------------------
+#
+# Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
+# 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.
+#
+# Module Name:
+#
+# Alloca.S
+#
+# Abstract:
+#
+# Implementation for allocation of automatically reclaimed memory, which is
+# used to allocate space off the runtime stack.
+# (NOTE: There is a assumption in this code that the page size equal to 4K)
+#
+#------------------------------------------------------------------------------
+
+
+ .686:
+ .code:
+
+ASM_GLOBAL ASM_PFX(_alloca)
+
+#------------------------------------------------------------------------------
+#
+# void __cdecl _alloca (unsigned size)
+#
+#------------------------------------------------------------------------------
+ASM_PFX(_alloca):
+
+ pushl %ecx
+ cmpl $0x1000, %eax
+ leal 8(%esp), %ecx
+ jb LastPage
+
+ProbePages:
+ subl $0x1000, %ecx
+ subl $0x1000, %eax
+ testl %eax, 0(%ecx)
+ cmpl $0x1000, %eax
+ jae ProbePages
+
+LastPage:
+ subl %eax, %ecx
+ movl %esp, %eax
+ testl %eax, 0(%ecx)
+
+ movl %ecx, %esp
+ movl 0(%eax), %ecx
+ movl 4(%eax), %eax
+ pushl %eax
+
+ ret
|