Ard,

If these calls are compiler generated, then I think we have a library class for 
this already: CompilerIntrinsicsLib.  As you can see in the ArmPkg instance we 
already have the integer helper functions here.

I prefer this approach because it's more manageable cross-architecture - 
instead of an ARM-specific ArmSoftFloatLib you can just include 
CompilerIntrinsicsLib and let the architecture-specific library selection 
process do the right thing, providing whatever architecture/compiler help is 
needed.

Thanks,

Eugene

-----Original Message-----
From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] 
Sent: Friday, November 27, 2015 1:52 AM
To: edk2-devel@lists.01.org; leif.lindh...@linaro.org; ler...@redhat.com; 
Cohen, Eugene <eug...@hp.com>; qin.l...@intel.com
Cc: Ard Biesheuvel <ard.biesheu...@linaro.org>
Subject: [PATCH 1/3] ArmPkg: factor out softfloat support from 
StdLib/LibC/SoftFloat

In order to support software floating point in the context of
DXE drivers etc, this factors out the core ARM softfloat support
into a separate library.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
---
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/Arm/__aeabi_dcmpeq.c 
   |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/Arm/__aeabi_dcmpge.c 
   |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/Arm/__aeabi_dcmpgt.c 
   |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/Arm/__aeabi_dcmple.c 
   |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/Arm/__aeabi_dcmplt.c 
   |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/Arm/__aeabi_dcmpun.c 
   |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/Arm/__aeabi_fcmpeq.c 
   |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/Arm/__aeabi_fcmpge.c 
   |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/Arm/__aeabi_fcmpgt.c 
   |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/Arm/__aeabi_fcmple.c 
   |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/Arm/__aeabi_fcmplt.c 
   |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/Arm/__aeabi_fcmpun.c 
   |  0
 {StdLib/Include => ArmPkg/Library/ArmSoftFloatLib}/Arm/softfloat.h             
   | 33 +++++++++++++-
 ArmPkg/Library/ArmSoftFloatLib/ArmSoftFloatLib.inf                             
   | 48 ++++++++++++++++++++
 {StdLib/Include/Arm => ArmPkg/Library/ArmSoftFloatLib}/arm-gcc.h               
   |  0
 {StdLib/LibC/Softfloat => 
ArmPkg/Library/ArmSoftFloatLib}/bits32/softfloat-macros |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/bits32/softfloat.c   
   |  0
 {StdLib/Include/Arm => ArmPkg/Library/ArmSoftFloatLib}/milieu.h                
   |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/softfloat-for-gcc.h  
   |  0
 {StdLib/LibC/Softfloat => ArmPkg/Library/ArmSoftFloatLib}/softfloat-specialize 
   |  0
 20 files changed, 79 insertions(+), 2 deletions(-)

diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpeq.c 
b/ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_dcmpeq.c
similarity index 100%
copy from StdLib/LibC/Softfloat/Arm/__aeabi_dcmpeq.c
copy to ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_dcmpeq.c
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpge.c 
b/ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_dcmpge.c
similarity index 100%
copy from StdLib/LibC/Softfloat/Arm/__aeabi_dcmpge.c
copy to ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_dcmpge.c
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpgt.c 
b/ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_dcmpgt.c
similarity index 100%
copy from StdLib/LibC/Softfloat/Arm/__aeabi_dcmpgt.c
copy to ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_dcmpgt.c
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmple.c 
b/ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_dcmple.c
similarity index 100%
copy from StdLib/LibC/Softfloat/Arm/__aeabi_dcmple.c
copy to ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_dcmple.c
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmplt.c 
b/ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_dcmplt.c
similarity index 100%
copy from StdLib/LibC/Softfloat/Arm/__aeabi_dcmplt.c
copy to ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_dcmplt.c
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_dcmpun.c 
b/ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_dcmpun.c
similarity index 100%
copy from StdLib/LibC/Softfloat/Arm/__aeabi_dcmpun.c
copy to ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_dcmpun.c
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpeq.c 
b/ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_fcmpeq.c
similarity index 100%
copy from StdLib/LibC/Softfloat/Arm/__aeabi_fcmpeq.c
copy to ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_fcmpeq.c
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpge.c 
b/ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_fcmpge.c
similarity index 100%
copy from StdLib/LibC/Softfloat/Arm/__aeabi_fcmpge.c
copy to ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_fcmpge.c
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpgt.c 
b/ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_fcmpgt.c
similarity index 100%
copy from StdLib/LibC/Softfloat/Arm/__aeabi_fcmpgt.c
copy to ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_fcmpgt.c
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmple.c 
b/ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_fcmple.c
similarity index 100%
copy from StdLib/LibC/Softfloat/Arm/__aeabi_fcmple.c
copy to ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_fcmple.c
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmplt.c 
b/ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_fcmplt.c
similarity index 100%
copy from StdLib/LibC/Softfloat/Arm/__aeabi_fcmplt.c
copy to ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_fcmplt.c
diff --git a/StdLib/LibC/Softfloat/Arm/__aeabi_fcmpun.c 
b/ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_fcmpun.c
similarity index 100%
copy from StdLib/LibC/Softfloat/Arm/__aeabi_fcmpun.c
copy to ArmPkg/Library/ArmSoftFloatLib/Arm/__aeabi_fcmpun.c
diff --git a/StdLib/Include/Arm/softfloat.h 
b/ArmPkg/Library/ArmSoftFloatLib/Arm/softfloat.h
similarity index 87%
copy from StdLib/Include/Arm/softfloat.h
copy to ArmPkg/Library/ArmSoftFloatLib/Arm/softfloat.h
index d52c5a9f8df0..a9004f672385 100644
--- a/StdLib/Include/Arm/softfloat.h
+++ b/ArmPkg/Library/ArmSoftFloatLib/Arm/softfloat.h
@@ -44,8 +44,37 @@ the `FLOAT128' macro and the quadruple-precision format 
`float128'.
 /* #define FLOATX80 */
 /* #define FLOAT128 */
 
-#include <stdint.h>
-#include <machine/ieeefp.h>
+#define FE_INVALID      0x01    /* invalid operation exception */
+#define FE_DIVBYZERO    0x02    /* divide-by-zero exception */
+#define FE_OVERFLOW     0x04    /* overflow exception */
+#define FE_UNDERFLOW    0x08    /* underflow exception */
+#define FE_INEXACT      0x10    /* imprecise (loss of precision; "inexact") */
+
+#define FE_ALL_EXCEPT   0x1f
+
+#define FE_TONEAREST    0   /* round to nearest representable number */
+#define FE_UPWARD       1   /* round toward positive infinity */
+#define FE_DOWNWARD     2   /* round toward negative infinity */
+#define FE_TOWARDZERO   3   /* round to zero (truncate) */
+
+typedef int fp_except;
+
+/* Bit defines for fp_except */
+
+#define FP_X_INV    FE_INVALID      /* invalid operation exception */
+#define FP_X_DZ     FE_DIVBYZERO    /* divide-by-zero exception */
+#define FP_X_OFL    FE_OVERFLOW     /* overflow exception */
+#define FP_X_UFL    FE_UNDERFLOW    /* underflow exception */
+#define FP_X_IMP    FE_INEXACT      /* imprecise (prec. loss; "inexact") */
+
+/* Rounding modes */
+
+typedef enum {
+    FP_RN=FE_TONEAREST,     /* round to nearest representable number */
+    FP_RP=FE_UPWARD,        /* round toward positive infinity */
+    FP_RM=FE_DOWNWARD,      /* round toward negative infinity */
+    FP_RZ=FE_TOWARDZERO     /* round to zero (truncate) */
+} fp_rnd;
 
 /*
 -------------------------------------------------------------------------------
diff --git a/ArmPkg/Library/ArmSoftFloatLib/ArmSoftFloatLib.inf 
b/ArmPkg/Library/ArmSoftFloatLib/ArmSoftFloatLib.inf
new file mode 100644
index 000000000000..ba008d9ca935
--- /dev/null
+++ b/ArmPkg/Library/ArmSoftFloatLib/ArmSoftFloatLib.inf
@@ -0,0 +1,48 @@
+## @file
+#  ARM Software floating point Library.
+#
+#  Copyright (c) 2014, ARM Ltd. All rights reserved.
+#  Copyright (c) 2015, Linaro Ltd. 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.
+#
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = ArmSoftFloatLib
+  FILE_GUID                      = a485f921-749e-41a0-9f91-62f09a38721c
+  MODULE_TYPE                    = BASE
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = ArmSoftFloatLib
+
+#
+#  VALID_ARCHITECTURES           = ARM
+#
+
+[Sources]
+  bits32/softfloat.c    | GCC
+  Arm/__aeabi_dcmpeq.c  | GCC
+  Arm/__aeabi_fcmpeq.c  | GCC
+  Arm/__aeabi_dcmpge.c  | GCC
+  Arm/__aeabi_fcmpge.c  | GCC
+  Arm/__aeabi_dcmpgt.c  | GCC
+  Arm/__aeabi_fcmpgt.c  | GCC
+  Arm/__aeabi_dcmple.c  | GCC
+  Arm/__aeabi_fcmple.c  | GCC
+  Arm/__aeabi_dcmplt.c  | GCC
+  Arm/__aeabi_fcmplt.c  | GCC
+  Arm/__aeabi_dcmpun.c  | GCC
+  Arm/__aeabi_fcmpun.c  | GCC
+
+[Packages]
+  MdePkg/MdePkg.dec
+
+[BuildOptions]
+  GCC:*_*_*_CC_FLAGS = -DSOFTFLOAT_FOR_GCC -Wno-enum-compare -fno-tree-vrp
diff --git a/StdLib/Include/Arm/arm-gcc.h 
b/ArmPkg/Library/ArmSoftFloatLib/arm-gcc.h
similarity index 100%
copy from StdLib/Include/Arm/arm-gcc.h
copy to ArmPkg/Library/ArmSoftFloatLib/arm-gcc.h
diff --git a/StdLib/LibC/Softfloat/bits32/softfloat-macros 
b/ArmPkg/Library/ArmSoftFloatLib/bits32/softfloat-macros
similarity index 100%
copy from StdLib/LibC/Softfloat/bits32/softfloat-macros
copy to ArmPkg/Library/ArmSoftFloatLib/bits32/softfloat-macros
diff --git a/StdLib/LibC/Softfloat/bits32/softfloat.c 
b/ArmPkg/Library/ArmSoftFloatLib/bits32/softfloat.c
similarity index 100%
copy from StdLib/LibC/Softfloat/bits32/softfloat.c
copy to ArmPkg/Library/ArmSoftFloatLib/bits32/softfloat.c
diff --git a/StdLib/Include/Arm/milieu.h 
b/ArmPkg/Library/ArmSoftFloatLib/milieu.h
similarity index 100%
copy from StdLib/Include/Arm/milieu.h
copy to ArmPkg/Library/ArmSoftFloatLib/milieu.h
diff --git a/StdLib/LibC/Softfloat/softfloat-for-gcc.h 
b/ArmPkg/Library/ArmSoftFloatLib/softfloat-for-gcc.h
similarity index 100%
copy from StdLib/LibC/Softfloat/softfloat-for-gcc.h
copy to ArmPkg/Library/ArmSoftFloatLib/softfloat-for-gcc.h
diff --git a/StdLib/LibC/Softfloat/softfloat-specialize 
b/ArmPkg/Library/ArmSoftFloatLib/softfloat-specialize
similarity index 100%
copy from StdLib/LibC/Softfloat/softfloat-specialize
copy to ArmPkg/Library/ArmSoftFloatLib/softfloat-specialize
-- 
1.9.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to