This is an automated email from the ASF dual-hosted git repository.

jim pushed a commit to branch AOO42X
in repository https://gitbox.apache.org/repos/asf/openoffice.git


The following commit(s) were added to refs/heads/AOO42X by this push:
     new 25f868f  Avoid extended ASM when you can
25f868f is described below

commit 25f868f2bd9c9d6bc3e3836c35241534c96a6ef6
Author: Jim Jagielski <[email protected]>
AuthorDate: Wed Dec 2 16:18:58 2020 -0500

    Avoid extended ASM when you can
    
    (cherry picked from commit 0e63162ff2a35f50d14e885010b03793f42abc2b)
---
 .../source/cpp_uno/gcc3_macosx_x86-64/cpp2uno.cxx  | 93 +++++++++++-----------
 .../source/cpp_uno/gcc3_macosx_x86-64/uno2cpp.cxx  |  1 -
 2 files changed, 45 insertions(+), 49 deletions(-)

diff --git a/main/bridges/source/cpp_uno/gcc3_macosx_x86-64/cpp2uno.cxx 
b/main/bridges/source/cpp_uno/gcc3_macosx_x86-64/cpp2uno.cxx
index 69b2fc8..00f7085 100644
--- a/main/bridges/source/cpp_uno/gcc3_macosx_x86-64/cpp2uno.cxx
+++ b/main/bridges/source/cpp_uno/gcc3_macosx_x86-64/cpp2uno.cxx
@@ -392,55 +392,52 @@ extern "C" typelib_TypeClass cpp_vtable_call(
 }
 
 
//==================================================================================================
-extern "C" void privateSnippetExecutor( void )
+void privateSnippetExecutor( void )
 {
-    asm volatile (
-    "\t"
-       "subq   $160, %%rsp\n\t"
-       "movq   %%r10, -152(%%rbp)\n\t"         // Save (nVtableOffset << 32) + 
nFunctionIndex
-
-       "movq   %%rdi, -112(%%rbp)\n\t"         // Save GP registers
-       "movq   %%rsi, -104(%%rbp)\n\t"
-       "movq   %%rdx, -96(%%rbp)\n\t"
-       "movq   %%rcx, -88(%%rbp)\n\t"
-       "movq   %%r8 , -80(%%rbp)\n\t"
-       "movq   %%r9 , -72(%%rbp)\n\t"
-
-       "movsd  %%xmm0, -64(%%rbp)\n\t"         // Save FP registers
-       "movsd  %%xmm1, -56(%%rbp)\n\t"
-       "movsd  %%xmm2, -48(%%rbp)\n\t"
-       "movsd  %%xmm3, -40(%%rbp)\n\t"
-       "movsd  %%xmm4, -32(%%rbp)\n\t"
-       "movsd  %%xmm5, -24(%%rbp)\n\t"
-       "movsd  %%xmm6, -16(%%rbp)\n\t"
-       "movsd  %%xmm7, -8(%%rbp)\n\t"
-
-       "leaq   -144(%%rbp), %%r9\n\t"          // 6th param: sal_uInt64* 
pRegisterReturn
-       "leaq   16(%%rbp), %%r8\n\t"            // 5rd param: void** ovrflw
-       "leaq   -64(%%rbp), %%rcx\n\t"          // 4th param: void** fpreg
-       "leaq   -112(%%rbp), %%rdx\n\t"         // 3rd param: void** gpreg
-       "movl   -148(%%rbp), %%esi\n\t"         // 2nd param: sal_int32 
nVtableOffset
-       "movl   -152(%%rbp), %%edi\n\t"         // 1st param: sal_int32 
nFunctionIndex
-
-       "call   _cpp_vtable_call\n\t"
-
-       "cmp    $10, %%rax\n\t"                         // 
typelib_TypeClass_FLOAT
-       "je     .Lfloat\n\t"
-       "cmp    $11, %%rax\n\t"                         // 
typelib_TypeClass_DOUBLE
-       "je     .Lfloat\n\t"
-
-       "movq   -144(%%rbp), %%rax\n\t"         // Return value (int case)
-       "movq   -136(%%rbp), %%rdx\n\t"         // Return value (int case)
-       "movq   -144(%%rbp), %%xmm0\n\t"        // Return value (int case)
-       "movq   -136(%%rbp), %%xmm1\n\t"        // Return value (int case)
-       "jmp    .Lfinish\n"
-".Lfloat:\n\t"
-       "movlpd -144(%%rbp), %%xmm0\n"          // Return value (float/double 
case)
-".Lfinish:\n\t"
-       "addq   $160, %%rsp\n"
-       :
-       :
-       : "rax", "r10", "xmm0" );
+       asm volatile (
+               "       subq    $160, %rsp\n"
+               "       movq    %r10, -152(%rbp)\n"             // Save 
(nVtableOffset << 32) + nFunctionIndex
+
+               "       movq    %rdi, -112(%rbp)\n"             // Save GP 
registers
+               "       movq    %rsi, -104(%rbp)\n"
+               "       movq    %rdx, -96(%rbp)\n"
+               "       movq    %rcx, -88(%rbp)\n"
+               "       movq    %r8 , -80(%rbp)\n"
+               "       movq    %r9 , -72(%rbp)\n"
+
+               "       movsd   %xmm0, -64(%rbp)\n"             // Save FP 
registers
+               "       movsd   %xmm1, -56(%rbp)\n"
+               "       movsd   %xmm2, -48(%rbp)\n"
+               "       movsd   %xmm3, -40(%rbp)\n"
+               "       movsd   %xmm4, -32(%rbp)\n"
+               "       movsd   %xmm5, -24(%rbp)\n"
+               "       movsd   %xmm6, -16(%rbp)\n"
+               "       movsd   %xmm7, -8(%rbp)\n"
+
+               "       leaq    -144(%rbp), %r9\n"              // 6th param: 
sal_uInt64* pRegisterReturn
+               "       leaq    16(%rbp),   %r8\n"              // 5rd param: 
void** ovrflw
+               "       leaq    -64(%rbp),  %rcx\n"             // 4th param: 
void** fpreg
+               "       leaq    -112(%rbp), %rdx\n"             // 3rd param: 
void** gpreg
+               "       movl    -148(%rbp), %esi\n"             // 2nd param: 
sal_int32 nVtableOffset
+               "       movl    -152(%rbp), %edi\n"             // 1st param: 
sal_int32 nFunctionIndex
+
+               "       call    _cpp_vtable_call\n"
+
+               "       cmp     $10, %rax\n"                            // 
typelib_TypeClass_FLOAT
+               "       je      .Lfloat\n"
+               "       cmp     $11, %rax\n"                            // 
typelib_TypeClass_DOUBLE
+               "       je      .Lfloat\n"
+
+               "       movq    -144(%rbp), %rax\n"             // Return value 
(int case)
+               "       movq    -136(%rbp), %rdx\n"             // Return value 
(int case)
+               "       movq    -144(%rbp), %xmm0\n"    // Return value (int 
case)
+               "       movq    -136(%rbp), %xmm1\n"    // Return value (int 
case)
+               "       jmp     .Lfinish\n"
+               ".Lfloat:\n"
+               "       movlpd  -144(%rbp), %xmm0\n"            // Return value 
(float/double case)
+               ".Lfinish:\n"
+               "       addq    $160, %rsp\n"
+       );
 }
 const int codeSnippetSize = 24;
 
diff --git a/main/bridges/source/cpp_uno/gcc3_macosx_x86-64/uno2cpp.cxx 
b/main/bridges/source/cpp_uno/gcc3_macosx_x86-64/uno2cpp.cxx
index c946c10..a58791c 100644
--- a/main/bridges/source/cpp_uno/gcc3_macosx_x86-64/uno2cpp.cxx
+++ b/main/bridges/source/cpp_uno/gcc3_macosx_x86-64/uno2cpp.cxx
@@ -115,7 +115,6 @@ static void callVirtualMethod(void * pThis, sal_uInt32 
nVtableIndex,
 
     asm volatile (
         // Fill the xmm registers
-        "\t"
         "movq %2, %%rax\n\t"
 
         "movsd   (%%rax), %%xmm0\n\t"

Reply via email to