mirror of
https://github.com/librempeg/librempeg
synced 2024-11-23 11:39:47 +00:00
x86: remove FASTDIV inline asm
GCC 4.3 and later do the right thing with the plain C code. Earlier versions in 32-bit mode generate one extra instruction, needlessly zeroing what would be the high half of the shifted value. At least two gcc configurations miscompile the inline asm in some situations. In 64-bit mode, all gcc versions generate imul r64, r64 followed by shr. On Intel i7 and later, this imul is faster 32-bit mul. On older Intel and all AMD, it is slightly slower. On Atom it is much slower. Considering where the FASTDIV macro is used, any overall negative performance impact of this change should be negligible. If anyone cares, they should file a bug against gcc and get the instruction selection fixed. Signed-off-by: Mans Rullgard <mans@mansr.com>
This commit is contained in:
parent
6fa488678f
commit
5b170c0bea
@ -34,8 +34,6 @@ extern const uint32_t ff_inverse[257];
|
||||
|
||||
#if ARCH_ARM
|
||||
# include "arm/intmath.h"
|
||||
#elif ARCH_X86
|
||||
# include "x86/intmath.h"
|
||||
#endif
|
||||
|
||||
#if HAVE_FAST_CLZ && AV_GCC_VERSION_AT_LEAST(3,4)
|
||||
|
@ -1,37 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010 Mans Rullgard <mans@mansr.com>
|
||||
*
|
||||
* This file is part of Libav.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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 Libav; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef AVUTIL_X86_INTMATH_H
|
||||
#define AVUTIL_X86_INTMATH_H
|
||||
|
||||
#if HAVE_INLINE_ASM
|
||||
#define FASTDIV(a,b) \
|
||||
({\
|
||||
int ret, dmy;\
|
||||
__asm__ volatile(\
|
||||
"mull %3"\
|
||||
:"=d"(ret), "=a"(dmy)\
|
||||
:"1"(a), "g"(ff_inverse[b])\
|
||||
);\
|
||||
ret;\
|
||||
})
|
||||
#endif
|
||||
|
||||
#endif /* AVUTIL_X86_INTMATH_H */
|
Loading…
Reference in New Issue
Block a user