Revision: 15855
          http://sourceforge.net/p/edk2/code/15855
Author:   darylm503
Date:     2014-08-20 20:38:43 +0000 (Wed, 20 Aug 2014)
Log Message:
-----------
StdLib: Add a runtime helper function for VC++ 64-bit right shift on Ia32 
target architectures.

Add new file StdLib/LibC/CRT/Ia32/llshr.c
Add references to the new file to StdLib/LibC/LibC.inf

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Daryl McDaniel <[email protected]>
Reviewed-by: Erik Bjorge <[email protected]>

Modified Paths:
--------------
    trunk/edk2/StdLib/LibC/LibC.inf

Added Paths:
-----------
    trunk/edk2/StdLib/LibC/CRT/Ia32/llshr.c

Added: trunk/edk2/StdLib/LibC/CRT/Ia32/llshr.c
===================================================================
--- trunk/edk2/StdLib/LibC/CRT/Ia32/llshr.c                             (rev 0)
+++ trunk/edk2/StdLib/LibC/CRT/Ia32/llshr.c     2014-08-20 20:38:43 UTC (rev 
15855)
@@ -0,0 +1,58 @@
+/** @file
+  64-bit Math Worker Function.
+  The 32-bit versions of C compiler generate calls to library routines
+  to handle 64-bit math. These functions use non-standard calling conventions.
+
+  Copyright (c) 2009 - 2011, 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.
+
+**/
+
+
+/*
+ * Shifts a 64-bit signed value right by a particular number of bits.
+ */
+__declspec(naked) void __cdecl _allshr (void)
+{
+  _asm {
+    ;
+    ; Handle shifts of 64 bits or more (if shifting 64 bits or more, the result
+    ; depends only on the high order bit of edx).
+      ;
+    cmp     cl,64
+    jae     short SIGNRETURN
+
+    ;
+    ; Handle shifts of between 0 and 31 bits
+    ;
+    cmp     cl, 32
+    jae     short MORE32
+    shrd    eax,edx,cl
+    sar     edx,cl
+    ret
+
+    ;
+    ; Handle shifts of between 32 and 63 bits
+    ;
+MORE32:
+    mov     eax,edx
+    sar     edx,31
+    and     cl,31
+    sar     eax,cl
+    ret
+
+    ;
+    ; Return double precision 0 or -1, depending on the sign of edx
+    ;
+SIGNRETURN:
+    sar     edx,31
+    mov     eax,edx
+    ret
+  }
+}

Modified: trunk/edk2/StdLib/LibC/LibC.inf
===================================================================
--- trunk/edk2/StdLib/LibC/LibC.inf     2014-08-20 18:02:38 UTC (rev 15854)
+++ trunk/edk2/StdLib/LibC/LibC.inf     2014-08-20 20:38:43 UTC (rev 15855)
@@ -1,7 +1,7 @@
 ## @file
 #  Standard C library: Miscelaneous implementations.
 #
-#  Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) 2010 - 2014, 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
@@ -50,6 +50,7 @@
   # Compiler helper (C RunTime) functions
   CRT/Ia32/llmul.c          | MSFT    # __allmul
   CRT/Ia32/llshl.c          | MSFT    # __allshl
+  CRT/Ia32/llshr.c          | MSFT    # __allshr
   CRT/Ia32/ulldiv.c         | MSFT    # __aulldiv
   CRT/Ia32/ullrem.c         | MSFT    # __aullrem
   CRT/Ia32/ullshr.c         | MSFT    # __aullshr
@@ -60,6 +61,7 @@
 
   CRT/Ia32/llmul.c          | INTEL
   CRT/Ia32/llshl.c          | INTEL
+  CRT/Ia32/llshr.c          | INTEL
   CRT/Ia32/ulldiv.c         | INTEL
   CRT/Ia32/ullrem.c         | INTEL
   CRT/Ia32/ullshr.c         | INTEL

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to