1 --- bridges/source/cpp_uno/gcc3_linux_arm/uno2cpp.cxx.old 2008-04-11 10:27:28.000000000 +0000
2 +++ bridges/source/cpp_uno/gcc3_linux_arm/uno2cpp.cxx 2009-09-23 12:45:41.000000000 +0000
7 -#if defined(__ARM_EABI__) && !defined(__SOFTFP__)
9 + * Based on http://gcc.gnu.org/PR41443
10 + * References to __SOFTFP__ are incorrect for EABI; the __SOFTFP__ code
11 + * should be used for *soft-float ABI* whether or not VFP is enabled,
12 + * and __SOFTFP__ does specifically mean soft-float not soft-float ABI.
14 + * Changing the conditionals to __SOFTFP__ || __ARM_EABI__ then
15 + * -mfloat-abi=softfp should work. -mfloat-abi=hard won't; that would
16 + * need both a new macro to identify the hard-VFP ABI.
18 +#if !defined(__ARM_EABI__) && (!defined(__SOFTFP__)
19 #error Not Implemented
24 void MapReturn(long r0, long r1, typelib_TypeClass eReturnType, void *pRegisterReturn)
27 +#if !defined(__ARM_EABI__) && !defined(__SOFTFP__)
28 register float fret asm("f0");
29 register double dret asm("f0");
32 *(unsigned char*)pRegisterReturn = (unsigned char)r0;
34 case typelib_TypeClass_FLOAT:
36 +#if defined(__ARM_EABI__) || defined(__SOFTFP__)
37 ((long*)pRegisterReturn)[0] = r0;
39 *(float*)pRegisterReturn = fret;
42 case typelib_TypeClass_DOUBLE:
44 +#if defined(__ARM_EABI__) || defined(__SOFTFP__)
45 ((long*)pRegisterReturn)[1] = r1;
46 ((long*)pRegisterReturn)[0] = r0;