6d3490d
From 3059edbc419e79f964a340b5b0ac828a5e866666 Mon Sep 17 00:00:00 2001
6d3490d
From: Caolan McNamara <caolanm@redhat.com>
6d3490d
Date: Fri, 10 Jul 2015 16:00:22 +0100
6d3490d
Subject: [PATCH 1/2] ppc64: simplify this a little
6d3490d
MIME-Version: 1.0
6d3490d
Content-Type: text/plain; charset=UTF-8
6d3490d
Content-Transfer-Encoding: 8bit
6d3490d
6d3490d
Change-Id: I8166f65625d389a604750852d6d5a4fee25a88fa
6d3490d
Reviewed-on: https://gerrit.libreoffice.org/16935
6d3490d
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
6d3490d
Tested-by: Caolán McNamara <caolanm@redhat.com>
6d3490d
(cherry picked from commit fe14c55f000b9a31d885b411655232e0691e1cd4)
6d3490d
Reviewed-on: https://gerrit.libreoffice.org/16945
6d3490d
Reviewed-by: David Tardon <dtardon@redhat.com>
6d3490d
Tested-by: David Tardon <dtardon@redhat.com>
6d3490d
---
6d3490d
 .../cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx       | 61 +++++++++-------------
6d3490d
 1 file changed, 24 insertions(+), 37 deletions(-)
6d3490d
6d3490d
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx
6d3490d
index 4013076..81d3d5c 100644
6d3490d
--- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx
6d3490d
+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/uno2cpp.cxx
6d3490d
@@ -124,6 +124,8 @@ void MapReturn(long r3, long r4, double dret, typelib_TypeDescriptionReference*
6d3490d
                 if (pReturnType->pType->nSize > 8)
6d3490d
                     pRegisters[1] = r4;
6d3490d
             }
6d3490d
+#else
6d3490d
+    (void)r4;
6d3490d
 #endif
6d3490d
     default:
6d3490d
             break;
6d3490d
@@ -185,45 +187,29 @@ static void callVirtualMethod(void * pThis, sal_uInt32 nVtableIndex,
6d3490d
 
6d3490d
     //  fill registers
6d3490d
     __asm__ __volatile__ (
6d3490d
-                "ld   3,  0(%0)\n\t"
6d3490d
-                "ld   4,  8(%0)\n\t"
6d3490d
-                "ld   5, 16(%0)\n\t"
6d3490d
-                "ld   6, 24(%0)\n\t"
6d3490d
-                "ld   7, 32(%0)\n\t"
6d3490d
-                "ld   8, 40(%0)\n\t"
6d3490d
-                "ld   9, 48(%0)\n\t"
6d3490d
-                "ld  10, 56(%0)\n\t"
6d3490d
-                "lfd  1,  0(%1)\n\t"
6d3490d
-                "lfd  2,  8(%1)\n\t"
6d3490d
-                "lfd  3, 16(%1)\n\t"
6d3490d
-                "lfd  4, 24(%1)\n\t"
6d3490d
-                "lfd  5, 32(%1)\n\t"
6d3490d
-                "lfd  6, 40(%1)\n\t"
6d3490d
-                "lfd  7, 48(%1)\n\t"
6d3490d
-                "lfd  8, 56(%1)\n\t"
6d3490d
-                "lfd  9, 64(%1)\n\t"
6d3490d
-                "lfd 10, 72(%1)\n\t"
6d3490d
-                "lfd 11, 80(%1)\n\t"
6d3490d
-                "lfd 12, 88(%1)\n\t"
6d3490d
-                "lfd 13, 96(%1)\n\t"
6d3490d
-                : : "r" (pGPR), "r" (pFPR)
6d3490d
-              : "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
6d3490d
-                  "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", "fr8", "fr9",
6d3490d
-                  "fr10", "fr11", "fr12", "fr13"
6d3490d
+                "lfd  1,  0(%0)\n\t"
6d3490d
+                "lfd  2,  8(%0)\n\t"
6d3490d
+                "lfd  3, 16(%0)\n\t"
6d3490d
+                "lfd  4, 24(%0)\n\t"
6d3490d
+                "lfd  5, 32(%0)\n\t"
6d3490d
+                "lfd  6, 40(%0)\n\t"
6d3490d
+                "lfd  7, 48(%0)\n\t"
6d3490d
+                "lfd  8, 56(%0)\n\t"
6d3490d
+                "lfd  9, 64(%0)\n\t"
6d3490d
+                "lfd 10, 72(%0)\n\t"
6d3490d
+                "lfd 11, 80(%0)\n\t"
6d3490d
+                "lfd 12, 88(%0)\n\t"
6d3490d
+                "lfd 13, 96(%0)\n\t"
6d3490d
+                : : "r" (pFPR)
6d3490d
+              : "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", "fr8", "fr9",
6d3490d
+                "fr10", "fr11", "fr12", "fr13"
6d3490d
     );
6d3490d
 
6d3490d
     // tell gcc that r3 to r11 are not available to it for doing the TOC and exception munge on the func call
6d3490d
     register sal_uInt64 r3 asm("r3");
6d3490d
     register sal_uInt64 r4 asm("r4");
6d3490d
-    register sal_uInt64 r5 asm("r5");
6d3490d
-    register sal_uInt64 r6 asm("r6");
6d3490d
-    register sal_uInt64 r7 asm("r7");
6d3490d
-    register sal_uInt64 r8 asm("r8");
6d3490d
-    register sal_uInt64 r9 asm("r9");
6d3490d
-    register sal_uInt64 r10 asm("r10");
6d3490d
-    register sal_uInt64 r11 asm("r11");
6d3490d
 
6d3490d
-    (*pFunc)(r3, r4, r5, r6, r7, r8, r9, r10);
6d3490d
+    (*pFunc)(pGPR[0], pGPR[1], pGPR[2], pGPR[3], pGPR[4], pGPR[5], pGPR[6], pGPR[7]);
6d3490d
 
6d3490d
     // get return value
6d3490d
     __asm__ __volatile__ (
6d3490d
@@ -375,7 +361,6 @@ static void cpp_call(
6d3490d
 
6d3490d
         if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
6d3490d
         {
6d3490d
-//          uno_copyAndConvertData( pCppArgs[nPos] = alloca( 8 ), pUnoArgs[nPos], pParamTypeDescr,
6d3490d
             uno_copyAndConvertData( pCppArgs[nPos] = pStack, pUnoArgs[nPos], pParamTypeDescr,
6d3490d
                                     pThis->getBridge()->getUno2Cpp() );
6d3490d
                 switch (pParamTypeDescr->eTypeClass)
6d3490d
@@ -383,7 +368,7 @@ static void cpp_call(
6d3490d
                         case typelib_TypeClass_HYPER:
6d3490d
                         case typelib_TypeClass_UNSIGNED_HYPER:
6d3490d
 #if OSL_DEBUG_LEVEL > 2
6d3490d
-                fprintf(stderr, "hyper is %lx\n", pCppArgs[nPos]);
6d3490d
+                                fprintf(stderr, "hyper is %lx\n", pCppArgs[nPos]);
6d3490d
 #endif
6d3490d
                                 INSERT_INT64( pCppArgs[nPos], nGPR, pGPR, pStack, bOverflow );
6d3490d
                                 break;
6d3490d
@@ -391,7 +376,7 @@ static void cpp_call(
6d3490d
                         case typelib_TypeClass_UNSIGNED_LONG:
6d3490d
                         case typelib_TypeClass_ENUM:
6d3490d
 #if OSL_DEBUG_LEVEL > 2
6d3490d
-                fprintf(stderr, "long is %x\n", pCppArgs[nPos]);
6d3490d
+                                fprintf(stderr, "long is %x\n", pCppArgs[nPos]);
6d3490d
 #endif
6d3490d
                                 INSERT_INT32( pCppArgs[nPos], nGPR, pGPR, pStack, bOverflow );
6d3490d
                                 break;
6d3490d
@@ -406,10 +391,12 @@ static void cpp_call(
6d3490d
                                 break;
6d3490d
                         case typelib_TypeClass_FLOAT:
6d3490d
                                 INSERT_FLOAT( pCppArgs[nPos], nFPR, pFPR, pStack, bOverflow );
6d3490d
-                break;
6d3490d
+                                break;
6d3490d
                         case typelib_TypeClass_DOUBLE:
6d3490d
                                 INSERT_DOUBLE( pCppArgs[nPos], nFPR, pFPR, pStack, bOverflow );
6d3490d
                                 break;
6d3490d
+                        default:
6d3490d
+                                break;
6d3490d
                         }
6d3490d
 
6d3490d
                         // no longer needed
6d3490d
-- 
6d3490d
2.1.0
6d3490d