Fixed #58 zdot SEGFAULT bug with GCC-4.6. Thank Mr. John for this patch.
In i386 calling convention, the caller put the address of return value of zdot into the first hidden parameter. Thus, the callee should delete this address before return. Actually, I have fixed the same bug on x86/zdot_sse2.S (issue #32). However, that is not a good implementation which uses 3 instructions. Mr. John told me used "ret $0x4" to skip the first hidden address (4 bytes).
This commit is contained in:
parent
260db9fb9e
commit
7b410b7f0e
|
@ -307,7 +307,11 @@
|
|||
popl %ebx
|
||||
popl %esi
|
||||
popl %edi
|
||||
#if defined(F_INTERFACE) && defined(RETURN_BY_STACK)
|
||||
ret $0x4
|
||||
#else
|
||||
ret
|
||||
#endif
|
||||
ALIGN_3
|
||||
|
||||
.L88:
|
||||
|
@ -326,6 +330,10 @@
|
|||
popl %ebx
|
||||
popl %esi
|
||||
popl %edi
|
||||
ret
|
||||
|
||||
#if defined(F_INTERFACE) && defined(RETURN_BY_STACK)
|
||||
ret $0x4
|
||||
#else
|
||||
ret
|
||||
#endif
|
||||
EPILOGUE
|
||||
|
|
|
@ -283,7 +283,11 @@
|
|||
popl %ebx
|
||||
popl %esi
|
||||
popl %edi
|
||||
#if defined(DOUBLE) || defined(XDOUBLE)
|
||||
ret $0x4
|
||||
#else
|
||||
ret
|
||||
#endif
|
||||
ALIGN_3
|
||||
|
||||
.L88:
|
||||
|
@ -305,6 +309,10 @@
|
|||
popl %ebx
|
||||
popl %esi
|
||||
popl %edi
|
||||
ret
|
||||
|
||||
#if defined(DOUBLE) || defined(XDOUBLE)
|
||||
ret $0x4
|
||||
#else
|
||||
ret
|
||||
#endif
|
||||
EPILOGUE
|
||||
|
|
|
@ -1542,7 +1542,5 @@
|
|||
popl %esi
|
||||
popl %edi
|
||||
/*remove the hidden return value address from the stack.*/
|
||||
popl %ecx
|
||||
xchgl %ecx, 0(%esp)
|
||||
ret
|
||||
ret $0x4
|
||||
EPILOGUE
|
||||
|
|
Loading…
Reference in New Issue