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