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

commit 93a817699357bda69b1616eef20f587fad55d7a9
Author: Jim Jagielski <jim...@gmail.com>
AuthorDate: Tue Dec 1 18:05:12 2020 -0500

    Move ASM back into file... weird linking issues w/ macOS that don't
    happen w/ Linux or FreeBSD. Move to common format.
---
 .../source/cpp_uno/s5abi_macosx_x86-64/call.s      | 49 ---------------------
 .../source/cpp_uno/s5abi_macosx_x86-64/cpp2uno.cxx | 51 +++++++++++++++++++++-
 .../source/cpp_uno/s5abi_macosx_x86-64/makefile.mk |  7 +--
 3 files changed, 51 insertions(+), 56 deletions(-)

diff --git a/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/call.s 
b/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/call.s
index 4801a94..8161d3e 100644
--- a/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/call.s
+++ b/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/call.s
@@ -22,12 +22,7 @@
        .text
        .align 2
 .globl privateSnippetExecutor
-       .type   privateSnippetExecutor, @function
 privateSnippetExecutor:
-.LFB3:
-       pushq   %rbp
-.LCFI0:
-       movq    %rsp, %rbp
 .LCFI1:
        subq    $160, %rsp
 .LCFI2:
@@ -74,47 +69,3 @@ privateSnippetExecutor:
 .Lfinish:
        leave
        ret
-.LFE3:
-       .size   privateSnippetExecutor, .-privateSnippetExecutor
-       # see 
http://refspecs.linuxfoundation.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html
-       # for details of the .eh_frame, the "Common Information Entry" and 
"Frame Description Entry" formats
-       # and http://mentorembedded.github.io/cxx-abi/exceptions.pdf for more 
info
-       .section        .eh_frame,"a",@progbits
-.Lframe1:
-       .long   .LECIE1-.LSCIE1
-.LSCIE1:
-       .long   0x0
-       .byte   0x1
-       .string "zR"
-       .uleb128 0x1
-       .sleb128 -8
-       .byte   0x10
-       .uleb128 0x1
-       .byte   0x1b
-       .byte   0xc
-       .uleb128 0x7
-       .uleb128 0x8
-       .byte   0x90
-       .uleb128 0x1
-       .align 8
-.LECIE1:
-.LSFDE1:
-       .long   .LEFDE1-.LASFDE1
-.LASFDE1:
-       .long   .LASFDE1-.Lframe1
-       .long   .LFB3-.
-       .long   .LFE3-.LFB3
-       .uleb128 0x0
-       .byte   0x4
-       .long   .LCFI0-.LFB3
-       .byte   0xe
-       .uleb128 0x10
-       .byte   0x86
-       .uleb128 0x2
-       .byte   0x4
-       .long   .LCFI1-.LCFI0
-       .byte   0xd
-       .uleb128 0x6
-       .align 8
-.LEFDE1:
-       .section        .note.GNU-stack,"",@progbits
diff --git a/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/cpp2uno.cxx 
b/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/cpp2uno.cxx
index 9c20b7a..92993cb 100644
--- a/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/cpp2uno.cxx
+++ b/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/cpp2uno.cxx
@@ -395,7 +395,56 @@ extern "C" typelib_TypeClass cpp_vtable_call(
 }
 
 
//==================================================================================================
-extern "C" void privateSnippetExecutor( ... );
+extern "C" void privateSnippetExecutor( void )
+{
+    asm volatile
+        (
+         "    subq  $160, %rsp\n"
+         "    movq  %r10, -152(%rbp)        # Save (nVtableOffset << 32) + 
nFunctionIndex\n"
+
+         "    movq  %rdi, -112(%rbp)        # Save GP registers\n"
+         "    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)        # Save FP registers\n"
+         "    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         # 6th param: sal_uInt64 * 
pRegisterReturn\n"
+         "    leaq  16(%rbp), %r8           # 5rd param: void ** ovrflw\n"
+         "    leaq  -64(%rbp), %rcx         # 4th param: void ** fpreg\n"
+         "    leaq  -112(%rbp), %rdx        # 3rd param: void ** gpreg\n"
+         "    movl  -148(%rbp), %esi        # 2nd param: sal_int32 
nVtableOffset\n"
+         "    movl  -152(%rbp), %edi        # 1st param: sal_int32 
nFunctionIndex\n"
+
+         "    call  _cpp_vtable_call\n"
+
+         "    cmp   $10, %rax               # typelib_TypeClass_FLOAT\n"
+         "    je    .Lfloat\n"
+         "    cmp   $11, %rax               # typelib_TypeClass_DOUBLE\n"
+         "    je    .Lfloat\n"
+
+         "    movq  -144(%rbp), %rax        # Return value (int case)\n"
+         "    movq  -136(%rbp), %rdx        # Return value (int case)\n"
+         "    movq  -144(%rbp), %xmm0       # Return value (int case)\n"
+         "    movq  -136(%rbp), %xmm1       # Return value (int case)\n"
+         "    jmp   .Lfinish\n"
+
+         ".Lfloat:\n"
+         "    movlpd    -144(%rbp), %xmm0   # Return value (float/double 
case)\n"
+
+         ".Lfinish:\n"
+         "    addq  $160, %rsp\n"
+         );
+}
 
 const int codeSnippetSize = 24;
 
diff --git a/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/makefile.mk 
b/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/makefile.mk
index 7f64991..f6fcc98 100644
--- a/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/makefile.mk
+++ b/main/bridges/source/cpp_uno/s5abi_macosx_x86-64/makefile.mk
@@ -48,8 +48,7 @@ SLOFILES= \
        $(SLO)$/abi.obj                 \
        $(SLO)$/except.obj              \
        $(SLO)$/cpp2uno.obj             \
-       $(SLO)$/uno2cpp.obj             \
-       $(SLO)$/call.obj
+       $(SLO)$/uno2cpp.obj
 
 SHL1TARGET= $(TARGET)
 
@@ -70,7 +69,3 @@ SHL1STDLIBS= \
 # --- Targets ------------------------------------------------------
 
 .INCLUDE :  target.mk
-
-$(SLO)$/%.obj: %.s
-    $(CC) -c -o $(SLO)$/$(@:b).o $<
-    touch $@

Reply via email to