You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by ji...@apache.org on 2020/12/02 21:37:18 UTC
[openoffice] branch AOO42X updated: Avoid extended ASM when you can
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 <ji...@gmail.com>
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"