rpms/openoffice.org/F-13 workspace.x86_64_bridgefix.patch,1.1,1.2
Caolan McNamara
caolanm at fedoraproject.org
Thu Feb 18 20:55:40 UTC 2010
Author: caolanm
Update of /cvs/pkgs/rpms/openoffice.org/F-13
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv5959/F-13
Modified Files:
workspace.x86_64_bridgefix.patch
Log Message:
more x86_64 bridge fixes
workspace.x86_64_bridgefix.patch:
cpp_uno/gcc3_linux_x86-64/abi.cxx | 39 +++++++++++++---------------------
cpp_uno/gcc3_linux_x86-64/abi.hxx | 2 -
cpp_uno/gcc3_linux_x86-64/call.s | 3 ++
cpp_uno/gcc3_linux_x86-64/cpp2uno.cxx | 38 +++++++--------------------------
cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx | 25 +++++++++++++--------
remote/urp/urp_reader.cxx | 4 +--
6 files changed, 46 insertions(+), 65 deletions(-)
Index: workspace.x86_64_bridgefix.patch
===================================================================
RCS file: /cvs/pkgs/rpms/openoffice.org/F-13/workspace.x86_64_bridgefix.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- workspace.x86_64_bridgefix.patch 9 Feb 2010 13:40:16 -0000 1.1
+++ workspace.x86_64_bridgefix.patch 18 Feb 2010 20:55:40 -0000 1.2
@@ -225,3 +225,111 @@ Index: bridges/source/remote/urp/urp_rea
"urp-bridge : customized calls currently not supported !");
}
+--- bridges/source/cpp_uno/gcc3_linux_x86-64/abi.cxx Thu Feb 18 09:51:41 2010 +0100
++++ bridges/source/cpp_uno/gcc3_linux_x86-64/abi.cxx Thu Feb 18 21:44:35 2010 +0100
+@@ -103,8 +103,6 @@
+
+ #define MAX_CLASSES 4
+
+-#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1)
+-
+ /* x86-64 register passing implementation. See x86-64 ABI for details. Goal
+ of this code is to classify each 8bytes of incoming argument by the register
+ class and assign registers accordingly. */
+@@ -156,11 +154,8 @@
+ See the x86-64 PS ABI for details.
+ */
+ static int
+-classify_argument( typelib_TypeDescriptionReference *pTypeRef, enum x86_64_reg_class classes[], int &rByteOffset )
++classify_argument( typelib_TypeDescriptionReference *pTypeRef, enum x86_64_reg_class classes[], int byteOffset )
+ {
+- /* First, align to the right place. */
+- rByteOffset = ALIGN( rByteOffset, pTypeRef->pType->nAlignment );
+-
+ switch ( pTypeRef->eTypeClass )
+ {
+ case typelib_TypeClass_VOID:
+@@ -176,13 +171,13 @@
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ case typelib_TypeClass_ENUM:
+- if ( ( rByteOffset % 8 + pTypeRef->pType->nSize ) <= 4 )
++ if ( ( byteOffset % 8 + pTypeRef->pType->nSize ) <= 4 )
+ classes[0] = X86_64_INTEGERSI_CLASS;
+ else
+ classes[0] = X86_64_INTEGER_CLASS;
+ return 1;
+ case typelib_TypeClass_FLOAT:
+- if ( ( rByteOffset % 8 ) == 0 )
++ if ( ( byteOffset % 8 ) == 0 )
+ classes[0] = X86_64_SSESF_CLASS;
+ else
+ classes[0] = X86_64_SSE_CLASS;
+@@ -229,9 +224,9 @@
+ for ( sal_Int32 nMember = 0; nMember < pStruct->nMembers; ++nMember )
+ {
+ typelib_TypeDescriptionReference *pTypeInStruct = pStruct->ppTypeRefs[ nMember ];
+- rByteOffset = pStruct->pMemberOffsets[ nMember ];
++ int offset = byteOffset + pStruct->pMemberOffsets[ nMember ];
+
+- int num = classify_argument( pTypeInStruct, subclasses, rByteOffset );
++ int num = classify_argument( pTypeInStruct, subclasses, offset );
+
+ if ( num == 0 )
+ {
+@@ -241,7 +236,7 @@
+
+ for ( int i = 0; i < num; i++ )
+ {
+- int pos = rByteOffset / 8;
++ int pos = offset / 8;
+ classes[i + pos] = merge_classes( subclasses[i], classes[i + pos] );
+ }
+ }
+@@ -284,10 +279,9 @@
+ bool x86_64::examine_argument( typelib_TypeDescriptionReference *pTypeRef, bool bInReturn, int &nUsedGPR, int &nUsedSSE )
+ {
+ enum x86_64_reg_class classes[MAX_CLASSES];
+- int offset = 0;
+ int n;
+
+- n = classify_argument( pTypeRef, classes, offset );
++ n = classify_argument( pTypeRef, classes, 0 );
+
+ if ( n == 0 )
+ return false;
+@@ -333,10 +327,9 @@
+ void x86_64::fill_struct( typelib_TypeDescriptionReference *pTypeRef, const sal_uInt64 *pGPR, const double *pSSE, void *pStruct )
+ {
+ enum x86_64_reg_class classes[MAX_CLASSES];
+- int offset = 0;
+ int n;
+
+- n = classify_argument( pTypeRef, classes, offset );
++ n = classify_argument( pTypeRef, classes, 0 );
+
+ sal_uInt64 *pStructAlign = reinterpret_cast<sal_uInt64 *>( pStruct );
+ for ( n--; n >= 0; n-- )
+@@ -444,10 +437,10 @@
+ /* All easy cases are eliminated. Now fire the big guns. */
+
+ enum x86_64_reg_class classes[MAX_CLASSES];
+- int offset = 0, j, num;
++ int j, num;
+ void *a;
+
+- num = classify_argument (*p_arg, classes, &offset);
++ num = classify_argument (*p_arg, classes, 0);
+ for (j=0, a=*p_argv; j<num; j++, a+=8)
+ {
+ switch (classes[j])
+@@ -574,7 +567,7 @@
+ ;
+ }
+
+- num = classify_argument (ecif->cif->rtype, classes, &i);
++ num = classify_argument (ecif->cif->rtype, classes, 0);
+
+ if (num == 0)
+ /* Return in memory. */
+
More information about the scm-commits
mailing list