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