This is the mail archive of the libffi-discuss@sources.redhat.com mailing list for the libffi project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

3.0.1 PATCH: Avoid gas-only mnemonic and # comment character in libffi for x86


Since my request how to handle the different semantics of .align by System
V and BSD assemblers

	http://gcc.gnu.org/ml/gcc-bugs/2001-06/msg01328.html

got no answer whatsoever, the patch below is necessary to compile
libffi/src/x86/sysv.S with the native as on Solaris 8/Intel, and the
prerequisite patch not to emit #line directives for .S files on Solaris 2
is already in, I'm proposing the patch below.

The comment change was already justified in the message above.  x86
function alignment varies between 4 and 16 bytes for various i386
configurations, but I don't really know if this is only a performance or a
correctness issue.  Anyway, for the purpose of this patch, I've chosen to
use .align 4, which will either give 4 or 16 byte alignment, depending on
the interpretation of the .align directive.

The patch below allow sysv.S to compile on Solaris 8/Intel, and ffitest
passes.

Ok for branch and mainline?

	Rainer

-----------------------------------------------------------------------------
Rainer Orth, Faculty of Technology, Bielefeld University

Email: ro@TechFak.Uni-Bielefeld.DE


Fri Jul 13 20:06:04 2001  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* src/x86/sysv.S: Avoid gas-only .balign directive.
	Use C style comments.

===================================================================
RCS file: libffi/src/x86/RCS/sysv.S,v
retrieving revision 1.1
diff -up -r1.1 libffi/src/x86/sysv.S
--- libffi/src/x86/sysv.S	1999/08/08 22:58:30	1.1
+++ libffi/src/x86/sysv.S	1999/08/08 20:58:30
@@ -32,8 +32,7 @@
 
 .globl ffi_prep_args
 
-	# This assumes we are using gas.
-        .balign 16
+	.align 4
 .globl ffi_call_SYSV
         .type    ffi_call_SYSV,@function
 
@@ -43,35 +42,35 @@ ffi_call_SYSV:
 .LCFI0:
         movl  %esp,%ebp
 .LCFI1:
-	# Make room for all of the new args.
+	/* Make room for all of the new args.  */
 	movl  16(%ebp),%ecx
 	subl  %ecx,%esp
 
 	movl  %esp,%eax
 
-	# Place all of the ffi_prep_args in position
+	/* Place all of the ffi_prep_args in position  */
 	pushl 12(%ebp)
 	pushl %eax
 	call  *8(%ebp)
 
-	# Return stack to previous state and call the function
+	/* Return stack to previous state and call the function  */
 	addl  $8,%esp	
 
 	call  *28(%ebp)
 
-	# Remove the space we pushed for the args
+	/* Remove the space we pushed for the args  */
 	movl  16(%ebp),%ecx
 	addl  %ecx,%esp
 
-	# Load %ecx with the return type code 
+	/* Load %ecx with the return type code  */
 	movl  20(%ebp),%ecx	
 
-	# If the return value pointer is NULL, assume no return value.
+	/* If the return value pointer is NULL, assume no return value.  */
 	cmpl  $0,24(%ebp)
 	jne   retint
 
-	# Even if there is no space for the return value, we are 
-	# obliged to handle floating-point values.
+	/* Even if there is no space for the return value, we are 
+	   obliged to handle floating-point values.  */
 	cmpl  $FFI_TYPE_FLOAT,%ecx
 	jne   noretval
 	fstp  %st(0)
@@ -81,7 +80,7 @@ ffi_call_SYSV:
 retint:
 	cmpl  $FFI_TYPE_INT,%ecx
 	jne   retfloat
-	# Load %ecx with the pointer to storage for the return value
+	/* Load %ecx with the pointer to storage for the return value  */
 	movl  24(%ebp),%ecx	
 	movl  %eax,0(%ecx)
 	jmp   epilogue
@@ -89,7 +88,7 @@ retint:
 retfloat:
 	cmpl  $FFI_TYPE_FLOAT,%ecx
 	jne   retdouble
-	# Load %ecx with the pointer to storage for the return value
+	/* Load %ecx with the pointer to storage for the return value  */
 	movl  24(%ebp),%ecx	
 	fstps (%ecx)
 	jmp   epilogue
@@ -97,7 +96,7 @@ retfloat:
 retdouble:
 	cmpl  $FFI_TYPE_DOUBLE,%ecx
 	jne   retlongdouble
-	# Load %ecx with the pointer to storage for the return value
+	/* Load %ecx with the pointer to storage for the return value  */
 	movl  24(%ebp),%ecx	
 	fstpl (%ecx)
 	jmp   epilogue
@@ -105,7 +104,7 @@ retdouble:
 retlongdouble:
 	cmpl  $FFI_TYPE_LONGDOUBLE,%ecx
 	jne   retint64
-	# Load %ecx with the pointer to storage for the return value
+	/* Load %ecx with the pointer to storage for the return value  */
 	movl  24(%ebp),%ecx	
 	fstpt (%ecx)
 	jmp   epilogue
@@ -113,13 +112,13 @@ retlongdouble:
 retint64:	
 	cmpl  $FFI_TYPE_SINT64,%ecx
         jne   retstruct
-	# Load %ecx with the pointer to storage for the return value
+	/* Load %ecx with the pointer to storage for the return value  */
 	movl  24(%ebp),%ecx	
 	movl  %eax,0(%ecx)
 	movl  %edx,4(%ecx)
 	
 retstruct:
-	# Nothing to do!
+	/* Nothing to do!  */
 
 noretval:
 epilogue:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]