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 $@