diff options
Diffstat (limited to 'libgcc/config')
-rw-r--r-- | libgcc/config/i386/i386-asm.h | 82 | ||||
-rw-r--r-- | libgcc/config/i386/resms64.S | 57 | ||||
-rw-r--r-- | libgcc/config/i386/resms64f.S | 55 | ||||
-rw-r--r-- | libgcc/config/i386/resms64fx.S | 57 | ||||
-rw-r--r-- | libgcc/config/i386/resms64x.S | 59 | ||||
-rw-r--r-- | libgcc/config/i386/savms64.S | 57 | ||||
-rw-r--r-- | libgcc/config/i386/savms64f.S | 55 | ||||
-rw-r--r-- | libgcc/config/i386/t-msabi | 7 |
8 files changed, 429 insertions, 0 deletions
diff --git a/libgcc/config/i386/i386-asm.h b/libgcc/config/i386/i386-asm.h new file mode 100644 index 0000000..c613e9f --- /dev/null +++ b/libgcc/config/i386/i386-asm.h @@ -0,0 +1,82 @@ +/* Defines common perprocessor and assembly macros for use by various stubs. + Copyright (C) 2016-2017 Free Software Foundation, Inc. + Contributed by Daniel Santos <daniel.santos@pobox.com> + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +<http://www.gnu.org/licenses/>. */ + +#ifndef I386_ASM_H +#define I386_ASM_H + +#ifdef __ELF__ +# define ELFFN(fn) .type fn,@function +#else +# define ELFFN(fn) +#endif + +#define FUNC_START(fn) \ + .global fn; \ + ELFFN (fn); \ +fn: + +#define HIDDEN_FUNC(fn)\ + FUNC_START (fn) \ + .hidden fn; \ + +#define FUNC_END(fn) .size fn,.-fn + +#ifdef __SSE2__ +# ifdef __AVX__ +# define MOVAPS vmovaps +# else +# define MOVAPS movaps +# 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 + +/* 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 + +#endif /* __SSE2__ */ +#endif /* I386_ASM_H */ diff --git a/libgcc/config/i386/resms64.S b/libgcc/config/i386/resms64.S new file mode 100644 index 0000000..f47e2f0 --- /dev/null +++ b/libgcc/config/i386/resms64.S @@ -0,0 +1,57 @@ +/* Epilogue stub for 64-bit ms/sysv clobbers: restore + Copyright (C) 2016-2017 Free Software Foundation, Inc. + Contributed by Daniel Santos <daniel.santos@pobox.com> + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +<http://www.gnu.org/licenses/>. */ + +#ifdef __x86_64__ +#include "i386-asm.h" + +/* Epilogue routine for restoring 64-bit ms/sysv registers. */ + + .text +HIDDEN_FUNC(__resms64_18) + mov -0x70(%rsi),%r15 +HIDDEN_FUNC(__resms64_17) + mov -0x68(%rsi),%r14 +HIDDEN_FUNC(__resms64_16) + mov -0x60(%rsi),%r13 +HIDDEN_FUNC(__resms64_15) + mov -0x58(%rsi),%r12 +HIDDEN_FUNC(__resms64_14) + mov -0x50(%rsi),%rbp +HIDDEN_FUNC(__resms64_13) + mov -0x48(%rsi),%rbx +HIDDEN_FUNC(__resms64_12) + mov -0x40(%rsi),%rdi + SSE_RESTORE off=0x60 + mov -0x38(%rsi),%rsi + ret +FUNC_END(__resms64_12) +FUNC_END(__resms64_13) +FUNC_END(__resms64_14) +FUNC_END(__resms64_15) +FUNC_END(__resms64_16) +FUNC_END(__resms64_17) +FUNC_END(__resms64_18) + +#endif /* __x86_64__ */ diff --git a/libgcc/config/i386/resms64f.S b/libgcc/config/i386/resms64f.S new file mode 100644 index 0000000..817da60 --- /dev/null +++ b/libgcc/config/i386/resms64f.S @@ -0,0 +1,55 @@ +/* Epilogue stub for 64-bit ms/sysv clobbers: restore (with hard frame pointer) + Copyright (C) 2016-2017 Free Software Foundation, Inc. + Contributed by Daniel Santos <daniel.santos@pobox.com> + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +<http://www.gnu.org/licenses/>. */ + +#ifdef __x86_64__ +#include "i386-asm.h" + +/* Epilogue routine for restoring 64-bit ms/sysv registers when hard frame + pointer is used. */ + + .text +HIDDEN_FUNC(__resms64f_17) + mov -0x68(%rsi),%r15 +HIDDEN_FUNC(__resms64f_16) + mov -0x60(%rsi),%r14 +HIDDEN_FUNC(__resms64f_15) + mov -0x58(%rsi),%r13 +HIDDEN_FUNC(__resms64f_14) + mov -0x50(%rsi),%r12 +HIDDEN_FUNC(__resms64f_13) + mov -0x48(%rsi),%rbx +HIDDEN_FUNC(__resms64f_12) + mov -0x40(%rsi),%rdi + SSE_RESTORE off=0x60 + mov -0x38(%rsi),%rsi + ret +FUNC_END(__resms64f_12) +FUNC_END(__resms64f_13) +FUNC_END(__resms64f_14) +FUNC_END(__resms64f_15) +FUNC_END(__resms64f_16) +FUNC_END(__resms64f_17) + +#endif /* __x86_64__ */ diff --git a/libgcc/config/i386/resms64fx.S b/libgcc/config/i386/resms64fx.S new file mode 100644 index 0000000..5dba584 --- /dev/null +++ b/libgcc/config/i386/resms64fx.S @@ -0,0 +1,57 @@ +/* Epilogue stub for 64-bit ms/sysv clobbers: restore, leave and return + Copyright (C) 2016-2017 Free Software Foundation, Inc. + Contributed by Daniel Santos <daniel.santos@pobox.com> + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +<http://www.gnu.org/licenses/>. */ + +#ifdef __x86_64__ +#include "i386-asm.h" + +/* Epilogue routine for 64-bit ms/sysv registers when hard frame pointer + * used -- restores registers, restores frame pointer and then returns + * from the function. */ + + .text +HIDDEN_FUNC(__resms64fx_17) + mov -0x68(%rsi),%r15 +HIDDEN_FUNC(__resms64fx_16) + mov -0x60(%rsi),%r14 +HIDDEN_FUNC(__resms64fx_15) + mov -0x58(%rsi),%r13 +HIDDEN_FUNC(__resms64fx_14) + mov -0x50(%rsi),%r12 +HIDDEN_FUNC(__resms64fx_13) + mov -0x48(%rsi),%rbx +HIDDEN_FUNC(__resms64fx_12) + mov -0x40(%rsi),%rdi + SSE_RESTORE off=0x60 + mov -0x38(%rsi),%rsi + leaveq + ret +FUNC_END(__resms64fx_12) +FUNC_END(__resms64fx_13) +FUNC_END(__resms64fx_14) +FUNC_END(__resms64fx_15) +FUNC_END(__resms64fx_16) +FUNC_END(__resms64fx_17) + +#endif /* __x86_64__ */ diff --git a/libgcc/config/i386/resms64x.S b/libgcc/config/i386/resms64x.S new file mode 100644 index 0000000..7770447 --- /dev/null +++ b/libgcc/config/i386/resms64x.S @@ -0,0 +1,59 @@ +/* Epilogue stub for 64-bit ms/sysv clobbers: restore and return + Copyright (C) 2016-2017 Free Software Foundation, Inc. + Contributed by Daniel Santos <daniel.santos@pobox.com> + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +<http://www.gnu.org/licenses/>. */ + +#ifdef __x86_64__ +#include "i386-asm.h" + +/* Epilogue routine for restoring 64-bit ms/sysv registers and returning from + * function. */ + + .text +HIDDEN_FUNC(__resms64x_18) + mov -0x70(%rsi),%r15 +HIDDEN_FUNC(__resms64x_17) + mov -0x68(%rsi),%r14 +HIDDEN_FUNC(__resms64x_16) + mov -0x60(%rsi),%r13 +HIDDEN_FUNC(__resms64x_15) + mov -0x58(%rsi),%r12 +HIDDEN_FUNC(__resms64x_14) + mov -0x50(%rsi),%rbp +HIDDEN_FUNC(__resms64x_13) + mov -0x48(%rsi),%rbx +HIDDEN_FUNC(__resms64x_12) + mov -0x40(%rsi),%rdi + SSE_RESTORE off=0x60 + mov -0x38(%rsi),%rsi + mov %r10,%rsp + ret +FUNC_END(__resms64x_12) +FUNC_END(__resms64x_13) +FUNC_END(__resms64x_14) +FUNC_END(__resms64x_15) +FUNC_END(__resms64x_16) +FUNC_END(__resms64x_17) +FUNC_END(__resms64x_18) + +#endif /* __x86_64__ */ diff --git a/libgcc/config/i386/savms64.S b/libgcc/config/i386/savms64.S new file mode 100644 index 0000000..2067dd8 --- /dev/null +++ b/libgcc/config/i386/savms64.S @@ -0,0 +1,57 @@ +/* Prologue stub for 64-bit ms/sysv clobbers: save + Copyright (C) 2016-2017 Free Software Foundation, Inc. + Contributed by Daniel Santos <daniel.santos@pobox.com> + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +<http://www.gnu.org/licenses/>. */ + +#ifdef __x86_64__ +#include "i386-asm.h" + +/* Prologue routine for saving 64-bit ms/sysv registers. */ + + .text +HIDDEN_FUNC(__savms64_18) + mov %r15,-0x70(%rax) +HIDDEN_FUNC(__savms64_17) + mov %r14,-0x68(%rax) +HIDDEN_FUNC(__savms64_16) + mov %r13,-0x60(%rax) +HIDDEN_FUNC(__savms64_15) + mov %r12,-0x58(%rax) +HIDDEN_FUNC(__savms64_14) + mov %rbp,-0x50(%rax) +HIDDEN_FUNC(__savms64_13) + mov %rbx,-0x48(%rax) +HIDDEN_FUNC(__savms64_12) + mov %rdi,-0x40(%rax) + mov %rsi,-0x38(%rax) + SSE_SAVE off=0x60 + ret +FUNC_END(__savms64_12) +FUNC_END(__savms64_13) +FUNC_END(__savms64_14) +FUNC_END(__savms64_15) +FUNC_END(__savms64_16) +FUNC_END(__savms64_17) +FUNC_END(__savms64_18) + +#endif /* __x86_64__ */ diff --git a/libgcc/config/i386/savms64f.S b/libgcc/config/i386/savms64f.S new file mode 100644 index 0000000..81583b6 --- /dev/null +++ b/libgcc/config/i386/savms64f.S @@ -0,0 +1,55 @@ +/* Prologue stub for 64-bit ms/sysv clobbers: save (with hard frame pointer) + Copyright (C) 2016-2017 Free Software Foundation, Inc. + Contributed by Daniel Santos <daniel.santos@pobox.com> + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +<http://www.gnu.org/licenses/>. */ + +#ifdef __x86_64__ +#include "i386-asm.h" + +/* Prologue routine for saving 64-bit ms/sysv registers when realignment is + * needed or hard frame pointer used. */ + + .text +HIDDEN_FUNC(__savms64f_17) + mov %r15,-0x68(%rax) +HIDDEN_FUNC(__savms64f_16) + mov %r14,-0x60(%rax) +HIDDEN_FUNC(__savms64f_15) + mov %r13,-0x58(%rax) +HIDDEN_FUNC(__savms64f_14) + mov %r12,-0x50(%rax) +HIDDEN_FUNC(__savms64f_13) + mov %rbx,-0x48(%rax) +HIDDEN_FUNC(__savms64f_12) + mov %rdi,-0x40(%rax) + mov %rsi,-0x38(%rax) + SSE_SAVE off=0x60 + ret +FUNC_END(__savms64f_12) +FUNC_END(__savms64f_13) +FUNC_END(__savms64f_14) +FUNC_END(__savms64f_15) +FUNC_END(__savms64f_16) +FUNC_END(__savms64f_17) + +#endif /* __x86_64__ */ diff --git a/libgcc/config/i386/t-msabi b/libgcc/config/i386/t-msabi new file mode 100644 index 0000000..f9806a6 --- /dev/null +++ b/libgcc/config/i386/t-msabi @@ -0,0 +1,7 @@ +# Makefile fragment to support -mcall-ms2sysv-xlogues +LIB2ADD_ST += $(srcdir)/config/i386/savms64.S \ + $(srcdir)/config/i386/resms64.S \ + $(srcdir)/config/i386/resms64x.S \ + $(srcdir)/config/i386/savms64f.S \ + $(srcdir)/config/i386/resms64f.S \ + $(srcdir)/config/i386/resms64fx.S |