PR testsuite/80759 Fix -mcall-ms2sysv-xlogues on Darwin and Solaris
2017-07-24 Daniel Santos <daniel.santos@pobox.com> PR testsuite/80759 * config.host: include i386/t-msabi for darwin and solaris. * config/i386/i386-asm.h (ELFFN): Rename to FN_TYPE. (FN_SIZE): New macro. (FN_HIDDEN): Likewise. (ASMNAME): Likewise. (FUNC_START): Rename to FUNC_BEGIN, use ASMNAME, replace .global with .globl. (HIDDEN_FUNC): Use ASMNAME and .globl instead of .global. (SSE_SAVE): Convert to cpp macro, hard-code offset (always 0x60). * config/i386/resms64.S: Use SSE_SAVE as cpp macro instead of gas .macro. * config/i386/resms64f.S: Likewise. * config/i386/resms64fx.S: Likewise. * config/i386/resms64x.S: Likewise. * config/i386/savms64.S: Likewise. * config/i386/savms64f.S: Likewise. From-SVN: r250488
This commit is contained in:
parent
1993098939
commit
9cbc07ccff
@ -1,3 +1,24 @@
|
||||
2017-07-24 Daniel Santos <daniel.santos@pobox.com>
|
||||
|
||||
PR testsuite/80759
|
||||
* config.host: include i386/t-msabi for darwin and solaris.
|
||||
* config/i386/i386-asm.h
|
||||
(ELFFN): Rename to FN_TYPE.
|
||||
(FN_SIZE): New macro.
|
||||
(FN_HIDDEN): Likewise.
|
||||
(ASMNAME): Likewise.
|
||||
(FUNC_START): Rename to FUNC_BEGIN, use ASMNAME, replace .global with
|
||||
.globl.
|
||||
(HIDDEN_FUNC): Use ASMNAME and .globl instead of .global.
|
||||
(SSE_SAVE): Convert to cpp macro, hard-code offset (always 0x60).
|
||||
* config/i386/resms64.S: Use SSE_SAVE as cpp macro instead of gas
|
||||
.macro.
|
||||
* config/i386/resms64f.S: Likewise.
|
||||
* config/i386/resms64fx.S: Likewise.
|
||||
* config/i386/resms64x.S: Likewise.
|
||||
* config/i386/savms64.S: Likewise.
|
||||
* config/i386/savms64f.S: Likewise.
|
||||
|
||||
2017-07-19 John Marino <gnugcc@marino.st>
|
||||
|
||||
* config/i386/dragonfly-unwind.h: Handle sigtramp relocation.
|
||||
|
@ -581,12 +581,12 @@ hppa*-*-openbsd*)
|
||||
tmake_file="$tmake_file pa/t-openbsd"
|
||||
;;
|
||||
i[34567]86-*-darwin*)
|
||||
tmake_file="$tmake_file i386/t-crtpc t-crtfm"
|
||||
tmake_file="$tmake_file i386/t-crtpc t-crtfm i386/t-msabi"
|
||||
tm_file="$tm_file i386/darwin-lib.h"
|
||||
extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
|
||||
;;
|
||||
x86_64-*-darwin*)
|
||||
tmake_file="$tmake_file i386/t-crtpc t-crtfm"
|
||||
tmake_file="$tmake_file i386/t-crtpc t-crtfm i386/t-msabi"
|
||||
tm_file="$tm_file i386/darwin-lib.h"
|
||||
extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
|
||||
;;
|
||||
@ -663,7 +663,7 @@ i[34567]86-*-rtems*)
|
||||
extra_parts="$extra_parts crti.o crtn.o"
|
||||
;;
|
||||
i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
|
||||
tmake_file="$tmake_file i386/t-crtpc t-crtfm"
|
||||
tmake_file="$tmake_file i386/t-crtpc t-crtfm i386/t-msabi"
|
||||
extra_parts="$extra_parts crtprec32.o crtprec64.o crtprec80.o crtfastmath.o"
|
||||
tm_file="${tm_file} i386/elf-lib.h"
|
||||
md_unwind_header=i386/sol2-unwind.h
|
||||
|
@ -26,22 +26,45 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
#ifndef I386_ASM_H
|
||||
#define I386_ASM_H
|
||||
|
||||
#include "auto-host.h"
|
||||
|
||||
/* These macros currently support GNU/Linux, Solaris and Darwin. */
|
||||
|
||||
#ifdef __ELF__
|
||||
# define ELFFN(fn) .type fn,@function
|
||||
# define FN_TYPE(fn) .type fn,@function
|
||||
# define FN_SIZE(fn) .size fn,.-fn
|
||||
# ifdef HAVE_GAS_HIDDEN
|
||||
# define FN_HIDDEN(fn) .hidden fn
|
||||
# endif
|
||||
#else
|
||||
# define ELFFN(fn)
|
||||
# define FN_TYPE(fn)
|
||||
# define FN_SIZE(fn)
|
||||
#endif
|
||||
|
||||
#define FUNC_START(fn) \
|
||||
.global fn; \
|
||||
ELFFN (fn); \
|
||||
fn:
|
||||
#ifndef FN_HIDDEN
|
||||
# define FN_HIDDEN(fn)
|
||||
#endif
|
||||
|
||||
#define HIDDEN_FUNC(fn)\
|
||||
FUNC_START (fn) \
|
||||
.hidden fn; \
|
||||
#ifdef __USER_LABEL_PREFIX__
|
||||
# define ASMNAME2(prefix, name) prefix ## name
|
||||
# define ASMNAME1(prefix, name) ASMNAME2(prefix, name)
|
||||
# define ASMNAME(name) ASMNAME1(__USER_LABEL_PREFIX__, name)
|
||||
#else
|
||||
# define ASMNAME(name) name
|
||||
#endif
|
||||
|
||||
#define FUNC_END(fn) .size fn,.-fn
|
||||
#define FUNC_BEGIN(fn) \
|
||||
.globl ASMNAME(fn); \
|
||||
FN_TYPE (ASMNAME(fn)); \
|
||||
ASMNAME(fn):
|
||||
|
||||
#define HIDDEN_FUNC(fn) \
|
||||
.globl ASMNAME(fn); \
|
||||
FN_TYPE(ASMNAME(fn)); \
|
||||
FN_HIDDEN(ASMNAME(fn)); \
|
||||
ASMNAME(fn):
|
||||
|
||||
#define FUNC_END(fn) FN_SIZE(ASMNAME(fn))
|
||||
|
||||
#ifdef __SSE2__
|
||||
# ifdef __AVX__
|
||||
@ -51,32 +74,30 @@ fn:
|
||||
# endif
|
||||
|
||||
/* Save SSE registers 6-15. off is the offset of rax to get to xmm6. */
|
||||
.macro SSE_SAVE off=0
|
||||
MOVAPS %xmm15,(\off - 0x90)(%rax)
|
||||
MOVAPS %xmm14,(\off - 0x80)(%rax)
|
||||
MOVAPS %xmm13,(\off - 0x70)(%rax)
|
||||
MOVAPS %xmm12,(\off - 0x60)(%rax)
|
||||
MOVAPS %xmm11,(\off - 0x50)(%rax)
|
||||
MOVAPS %xmm10,(\off - 0x40)(%rax)
|
||||
MOVAPS %xmm9, (\off - 0x30)(%rax)
|
||||
MOVAPS %xmm8, (\off - 0x20)(%rax)
|
||||
MOVAPS %xmm7, (\off - 0x10)(%rax)
|
||||
MOVAPS %xmm6, \off(%rax)
|
||||
.endm
|
||||
#define SSE_SAVE \
|
||||
MOVAPS %xmm15,-0x30(%rax); \
|
||||
MOVAPS %xmm14,-0x20(%rax); \
|
||||
MOVAPS %xmm13,-0x10(%rax); \
|
||||
MOVAPS %xmm12, (%rax); \
|
||||
MOVAPS %xmm11, 0x10(%rax); \
|
||||
MOVAPS %xmm10, 0x20(%rax); \
|
||||
MOVAPS %xmm9, 0x30(%rax); \
|
||||
MOVAPS %xmm8, 0x40(%rax); \
|
||||
MOVAPS %xmm7, 0x50(%rax); \
|
||||
MOVAPS %xmm6, 0x60(%rax)
|
||||
|
||||
/* Restore SSE registers 6-15. off is the offset of rsi to get to xmm6. */
|
||||
.macro SSE_RESTORE off=0
|
||||
MOVAPS (\off - 0x90)(%rsi), %xmm15
|
||||
MOVAPS (\off - 0x80)(%rsi), %xmm14
|
||||
MOVAPS (\off - 0x70)(%rsi), %xmm13
|
||||
MOVAPS (\off - 0x60)(%rsi), %xmm12
|
||||
MOVAPS (\off - 0x50)(%rsi), %xmm11
|
||||
MOVAPS (\off - 0x40)(%rsi), %xmm10
|
||||
MOVAPS (\off - 0x30)(%rsi), %xmm9
|
||||
MOVAPS (\off - 0x20)(%rsi), %xmm8
|
||||
MOVAPS (\off - 0x10)(%rsi), %xmm7
|
||||
MOVAPS \off(%rsi), %xmm6
|
||||
.endm
|
||||
#define SSE_RESTORE \
|
||||
MOVAPS -0x30(%rsi), %xmm15; \
|
||||
MOVAPS -0x20(%rsi), %xmm14; \
|
||||
MOVAPS -0x10(%rsi), %xmm13; \
|
||||
MOVAPS (%rsi), %xmm12; \
|
||||
MOVAPS 0x10(%rsi), %xmm11; \
|
||||
MOVAPS 0x20(%rsi), %xmm10; \
|
||||
MOVAPS 0x30(%rsi), %xmm9 ; \
|
||||
MOVAPS 0x40(%rsi), %xmm8 ; \
|
||||
MOVAPS 0x50(%rsi), %xmm7 ; \
|
||||
MOVAPS 0x60(%rsi), %xmm6
|
||||
|
||||
#endif /* __SSE2__ */
|
||||
#endif /* I386_ASM_H */
|
||||
|
@ -43,7 +43,7 @@ HIDDEN_FUNC(__resms64_13)
|
||||
mov -0x48(%rsi),%rbx
|
||||
HIDDEN_FUNC(__resms64_12)
|
||||
mov -0x40(%rsi),%rdi
|
||||
SSE_RESTORE off=0x60
|
||||
SSE_RESTORE
|
||||
mov -0x38(%rsi),%rsi
|
||||
ret
|
||||
FUNC_END(__resms64_12)
|
||||
|
@ -42,7 +42,7 @@ HIDDEN_FUNC(__resms64f_13)
|
||||
mov -0x48(%rsi),%rbx
|
||||
HIDDEN_FUNC(__resms64f_12)
|
||||
mov -0x40(%rsi),%rdi
|
||||
SSE_RESTORE off=0x60
|
||||
SSE_RESTORE
|
||||
mov -0x38(%rsi),%rsi
|
||||
ret
|
||||
FUNC_END(__resms64f_12)
|
||||
|
@ -43,7 +43,7 @@ HIDDEN_FUNC(__resms64fx_13)
|
||||
mov -0x48(%rsi),%rbx
|
||||
HIDDEN_FUNC(__resms64fx_12)
|
||||
mov -0x40(%rsi),%rdi
|
||||
SSE_RESTORE off=0x60
|
||||
SSE_RESTORE
|
||||
mov -0x38(%rsi),%rsi
|
||||
leaveq
|
||||
ret
|
||||
|
@ -44,7 +44,7 @@ HIDDEN_FUNC(__resms64x_13)
|
||||
mov -0x48(%rsi),%rbx
|
||||
HIDDEN_FUNC(__resms64x_12)
|
||||
mov -0x40(%rsi),%rdi
|
||||
SSE_RESTORE off=0x60
|
||||
SSE_RESTORE
|
||||
mov -0x38(%rsi),%rsi
|
||||
mov %r10,%rsp
|
||||
ret
|
||||
|
@ -44,7 +44,7 @@ HIDDEN_FUNC(__savms64_13)
|
||||
HIDDEN_FUNC(__savms64_12)
|
||||
mov %rdi,-0x40(%rax)
|
||||
mov %rsi,-0x38(%rax)
|
||||
SSE_SAVE off=0x60
|
||||
SSE_SAVE
|
||||
ret
|
||||
FUNC_END(__savms64_12)
|
||||
FUNC_END(__savms64_13)
|
||||
|
@ -43,7 +43,7 @@ HIDDEN_FUNC(__savms64f_13)
|
||||
HIDDEN_FUNC(__savms64f_12)
|
||||
mov %rdi,-0x40(%rax)
|
||||
mov %rsi,-0x38(%rax)
|
||||
SSE_SAVE off=0x60
|
||||
SSE_SAVE
|
||||
ret
|
||||
FUNC_END(__savms64f_12)
|
||||
FUNC_END(__savms64f_13)
|
||||
|
Loading…
Reference in New Issue
Block a user