diff --git a/ChangeLog b/ChangeLog index 30b4d87682..512e5cd7e5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-05-15 H.J. Lu + + * sysdeps/x86_64/sysdep.h: Allowed to be include more than once. + * sysdeps/x86_64/x32/sysdep.h: New file. + 2012-05-15 H.J. Lu * sysdeps/x86_64/__longjmp.S: Use R*_LP on SP and PC. diff --git a/sysdeps/x86_64/sysdep.h b/sysdeps/x86_64/sysdep.h index e34d7a9444..af69499759 100644 --- a/sysdeps/x86_64/sysdep.h +++ b/sysdeps/x86_64/sysdep.h @@ -16,6 +16,9 @@ License along with the GNU C Library; if not, see . */ +#ifndef _X86_64_SYSDEP_H +#define _X86_64_SYSDEP_H 1 + #include #ifdef __ASSEMBLER__ @@ -152,3 +155,5 @@ lose: \ #define R15_LP "r15" #endif /* __ASSEMBLER__ */ + +#endif /* _X86_64_SYSDEP_H */ diff --git a/sysdeps/x86_64/x32/sysdep.h b/sysdeps/x86_64/x32/sysdep.h new file mode 100644 index 0000000000..cbe2e5f41a --- /dev/null +++ b/sysdeps/x86_64/x32/sysdep.h @@ -0,0 +1,92 @@ +/* Assembler macros for x32. + Copyright (C) 2012 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include + +#undef LP_SIZE +#undef LP_OP +#undef ASM_ADDR + +#undef RAX_LP +#undef RBP_LP +#undef RBX_LP +#undef RCX_LP +#undef RDI_LP +#undef RDX_LP +#undef RSP_LP +#undef RSI_LP +#undef R8_LP +#undef R9_LP +#undef R10_LP +#undef R11_LP +#undef R12_LP +#undef R13_LP +#undef R14_LP +#undef R15_LP + +#ifdef __ASSEMBLER__ + +# define LP_SIZE 4 + +# define LP_OP(insn) insn##l + +# define ASM_ADDR .long + +# define RAX_LP eax +# define RBP_LP ebp +# define RBX_LP ebx +# define RCX_LP ecx +# define RDI_LP edi +# define RDX_LP edx +# define RSI_LP esi +# define RSP_LP esp +# define R8_LP r8d +# define R9_LP r9d +# define R10_LP r10d +# define R11_LP r11d +# define R12_LP r12d +# define R13_LP r13d +# define R14_LP r14d +# define R15_LP r15d + +#else /* __ASSEMBLER__ */ + +# define LP_SIZE "4" + +# define LP_OP(insn) #insn "l" + +# define ASM_ADDR ".long" + +# define RAX_LP "eax" +# define RBP_LP "ebp" +# define RBX_LP "ebx" +# define RCX_LP "ecx" +# define RDI_LP "edi" +# define RDX_LP "edx" +# define RSI_LP "esi" +# define RSP_LP "esp" +# define R8_LP "r8d" +# define R9_LP "r9d" +# define R10_LP "r10d" +# define R11_LP "r11d" +# define R12_LP "r12d" +# define R13_LP "r13d" +# define R14_LP "r14d" +# define R15_LP "r15d" + +#endif /* __ASSEMBLER__ */