X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavutil%2Fx86_cpu.h;h=f84eba67f5fc15f81f294f0e6ab931f46505ccb8;hb=c8b4a3999bc7f3732a537cdec6475918a65d6e78;hp=4b5f10527e6a20ab25d2a8b61a3390e9d98416e4;hpb=9be50e3922cde1f91f32fb9e578345e3bbb1996e;p=ffmpeg diff --git a/libavutil/x86_cpu.h b/libavutil/x86_cpu.h index 4b5f10527e6..f84eba67f5f 100644 --- a/libavutil/x86_cpu.h +++ b/libavutil/x86_cpu.h @@ -1,20 +1,20 @@ /* * copyright (c) 2006 Michael Niedermayer * - * This file is part of FFmpeg. + * This file is part of Libav. * - * FFmpeg is free software; you can redistribute it and/or + * Libav 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. * - * FFmpeg is distributed in the hope that it will be useful, + * Libav 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 FFmpeg; if not, write to the Free Software + * License along with Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ @@ -24,7 +24,8 @@ #include #include "config.h" -#ifdef ARCH_X86_64 +#if ARCH_X86_64 +# define OPSIZE "q" # define REG_a "rax" # define REG_b "rbx" # define REG_c "rcx" @@ -45,6 +46,7 @@ typedef int64_t x86_reg; #elif ARCH_X86_32 +# define OPSIZE "l" # define REG_a "eax" # define REG_b "ebx" # define REG_c "ecx" @@ -62,18 +64,35 @@ typedef int32_t x86_reg; # define REGc ecx # define REGd edx # define REGSP esp +#else +typedef int x86_reg; #endif -#if defined(ARCH_X86_64) || (defined(ARCH_X86_32) && defined(HAVE_EBX_AVAILABLE) && defined(HAVE_EBP_AVAILABLE)) -# define HAVE_7REGS 1 -#endif +#define HAVE_7REGS (ARCH_X86_64 || (HAVE_EBX_AVAILABLE && HAVE_EBP_AVAILABLE)) +#define HAVE_6REGS (ARCH_X86_64 || (HAVE_EBX_AVAILABLE || HAVE_EBP_AVAILABLE)) -#if defined(ARCH_X86_64) || (defined(ARCH_X86_32) && (defined(HAVE_EBX_AVAILABLE) || defined(HAVE_EBP_AVAILABLE))) -# define HAVE_6REGS 1 +#if ARCH_X86_64 && defined(PIC) +# define BROKEN_RELOCATIONS 1 #endif -#if defined(ARCH_X86_64) && defined(PIC) -# define BROKEN_RELOCATIONS 1 +/* + * If gcc is not set to support sse (-msse) it will not accept xmm registers + * in the clobber list for inline asm. XMM_CLOBBERS takes a list of xmm + * registers to be marked as clobbered and evaluates to nothing if they are + * not supported, or to the list itself if they are supported. Since a clobber + * list may not be empty, XMM_CLOBBERS_ONLY should be used if the xmm + * registers are the only in the clobber list. + * For example a list with "eax" and "xmm0" as clobbers should become: + * : XMM_CLOBBERS("xmm0",) "eax" + * and a list with only "xmm0" should become: + * XMM_CLOBBERS_ONLY("xmm0") + */ +#if HAVE_XMM_CLOBBERS +# define XMM_CLOBBERS(...) __VA_ARGS__ +# define XMM_CLOBBERS_ONLY(...) : __VA_ARGS__ +#else +# define XMM_CLOBBERS(...) +# define XMM_CLOBBERS_ONLY(...) #endif #endif /* AVUTIL_X86_CPU_H */