summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx65
1 files changed, 29 insertions, 36 deletions
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx
index 0748d244f2f9..6b5824695407 100644
--- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx
+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx
@@ -510,49 +510,42 @@ static typelib_TypeClass cpp_mediate(
extern "C" void privateSnippetExecutor( ... )
{
sal_uInt64 gpreg[ppc64::MAX_GPR_REGS];
+
+ register long r3 asm("r3"); gpreg[0] = r3;
+ register long r4 asm("r4"); gpreg[1] = r4;
+ register long r5 asm("r5"); gpreg[2] = r5;
+ register long r6 asm("r6"); gpreg[3] = r6;
+ register long r7 asm("r7"); gpreg[4] = r7;
+ register long r8 asm("r8"); gpreg[5] = r8;
+ register long r9 asm("r9"); gpreg[6] = r9;
+ register long r10 asm("r10"); gpreg[7] = r10;
+
double fpreg[ppc64::MAX_SSE_REGS];
__asm__ __volatile__ (
- "std 3, 0(%0)\t\n"
- "std 4, 8(%0)\t\n"
- "std 5, 16(%0)\t\n"
- "std 6, 24(%0)\t\n"
- "std 7, 32(%0)\t\n"
- "std 8, 40(%0)\t\n"
- "std 9, 48(%0)\t\n"
- "std 10, 56(%0)\t\n"
- "stfd 1, 0(%1)\t\n"
- "stfd 2, 8(%1)\t\n"
- "stfd 3, 16(%1)\t\n"
- "stfd 4, 24(%1)\t\n"
- "stfd 5, 32(%1)\t\n"
- "stfd 6, 40(%1)\t\n"
- "stfd 7, 48(%1)\t\n"
- "stfd 8, 56(%1)\t\n"
- "stfd 9, 64(%1)\t\n"
- "stfd 10, 72(%1)\t\n"
- "stfd 11, 80(%1)\t\n"
- "stfd 12, 88(%1)\t\n"
- "stfd 13, 96(%1)\t\n"
- : : "r" (gpreg), "r" (fpreg)
- : "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11",
- "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", "fr8", "fr9",
+ "stfd 1, 0(%0)\t\n"
+ "stfd 2, 8(%0)\t\n"
+ "stfd 3, 16(%0)\t\n"
+ "stfd 4, 24(%0)\t\n"
+ "stfd 5, 32(%0)\t\n"
+ "stfd 6, 40(%0)\t\n"
+ "stfd 7, 48(%0)\t\n"
+ "stfd 8, 56(%0)\t\n"
+ "stfd 9, 64(%0)\t\n"
+ "stfd 10, 72(%0)\t\n"
+ "stfd 11, 80(%0)\t\n"
+ "stfd 12, 88(%0)\t\n"
+ "stfd 13, 96(%0)\t\n"
+ : : "r" (fpreg)
+ : "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", "fr8", "fr9",
"fr10", "fr11", "fr12", "fr13"
);
- volatile long nOffsetAndIndex;
-
- //mr %r3, %r11 # move into arg1 the 64bit value passed from OOo
- __asm__ __volatile__ (
- "mr %0, 11\n\t"
- : "=r" (nOffsetAndIndex) : );
-
- volatile long sp;
+ register long r11 asm("r11");
+ const long nOffsetAndIndex = r11;
- //stack pointer
- __asm__ __volatile__ (
- "mr %0, 1\n\t"
- : "=r" (sp) : );
+ register long r1 asm("r1");
+ const long sp = r1;
#if defined(_CALL_ELF) && _CALL_ELF == 2
volatile long nRegReturn[2];