iOS C++/UNO bridge fixes

As the inline asm statement stores parameters into r0-r3 we need to
include those registers in the clobber list. Clang happened to store
pMethod in r2 as input to the asm snippet.

iOS uses the basic calling convention, but __ARM_EABI__ is not defined
so amend some ifdefs.

Change-Id: If3d66c5f3baa4dfa13f82a2b5c2ef1ab559ce31b
This commit is contained in:
Tor Lillqvist 2013-01-10 01:38:57 +02:00
parent 806535be2b
commit 0ff470cff6

View file

@ -115,7 +115,7 @@ void MapReturn(sal_uInt32 r0, sal_uInt32 r1, typelib_TypeDescriptionReference *
pRegisterReturn[0] = r0;
break;
case typelib_TypeClass_FLOAT:
#if !defined(__ARM_PCS_VFP) && (defined(__ARM_EABI__) || defined(__SOFTFP__))
#if !defined(__ARM_PCS_VFP) && (defined(__ARM_EABI__) || defined(__SOFTFP__) || defined(IOS))
pRegisterReturn[0] = r0;
#else
register float fret asm("s0");
@ -126,7 +126,7 @@ void MapReturn(sal_uInt32 r0, sal_uInt32 r1, typelib_TypeDescriptionReference *
#endif
break;
case typelib_TypeClass_DOUBLE:
#if !defined(__ARM_PCS_VFP) && (defined(__ARM_EABI__) || defined(__SOFTFP__))
#if !defined(__ARM_PCS_VFP) && (defined(__ARM_EABI__) || defined(__SOFTFP__) || defined(IOS))
pRegisterReturn[1] = r1;
pRegisterReturn[0] = r0;
#else
@ -222,7 +222,7 @@ void callVirtualMethod(
"mov %[r1], r1\n\t"
: [r0]"=r" (r0), [r1]"=r" (r1)
: [pmethod]"m" (pMethod), [pgpr]"m" (pGPR), [pfpr]"m" (pFPR)
: "r4", "r5");
: "r0", "r1", "r2", "r3", "r4", "r5");
MapReturn(r0, r1, pReturnType, (sal_uInt32*)pRegisterReturn);
}