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"