This is the mail archive of the
libffi-discuss@sources.redhat.com
mailing list for the libffi project.
3.0.1 PATCH: Avoid gas-only mnemonic and # comment character in libffi for x86
- To: libffi-discuss at sources dot redhat dot com, gcc-patches at gcc dot gnu dot org
- Subject: 3.0.1 PATCH: Avoid gas-only mnemonic and # comment character in libffi for x86
- From: Rainer Orth <ro at TechFak dot Uni-Bielefeld dot DE>
- Date: Fri, 13 Jul 2001 20:37:48 +0200 (MEST)
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: