aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMans Rullgard <mans@mansr.com>2012-08-18 20:22:10 +0100
committerMans Rullgard <mans@mansr.com>2012-08-22 14:29:10 +0100
commit5b170c0bea06c5556fe5a74f436c46a88e69e8fc (patch)
tree22908d21b178c6b087be2028e3b1f7f415c541c8
parent6fa488678f39fe45abe898fd7ef457849d0a8d99 (diff)
downloadffmpeg-5b170c0bea06c5556fe5a74f436c46a88e69e8fc.tar.gz
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>
-rw-r--r--libavutil/intmath.h2
-rw-r--r--libavutil/x86/intmath.h37
2 files changed, 0 insertions, 39 deletions
diff --git a/libavutil/intmath.h b/libavutil/intmath.h
index 1be96da933..ba198c942c 100644
--- a/libavutil/intmath.h
+++ b/libavutil/intmath.h
@@ -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)
diff --git a/libavutil/x86/intmath.h b/libavutil/x86/intmath.h
deleted file mode 100644
index b23c0f1bd0..0000000000
--- a/libavutil/x86/intmath.h
+++ /dev/null
@@ -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 */