[FFmpeg-cvslog] Move MASK_ABS macro to libavcodec/mathops.h
Mans Rullgard
git at videolan.org
Thu Aug 9 19:34:53 CEST 2012
ffmpeg | branch: master | Mans Rullgard <mans at mansr.com> | Wed Aug 8 17:13:26 2012 +0100| [d7a4f8f8b9a4bc309d4d5ab067cfba945e690c0c] | committer: Mans Rullgard
Move MASK_ABS macro to libavcodec/mathops.h
This macro is only used in two places, both in libavcodec, so this
is a more sensible place for it.
Two small tweaks to the macro are made:
- removing the trailing semicolon
- dropping unnecessary 'volatile' from the x86 asm
Signed-off-by: Mans Rullgard <mans at mansr.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d7a4f8f8b9a4bc309d4d5ab067cfba945e690c0c
---
libavcodec/mathops.h | 7 +++++++
libavcodec/mpeg12enc.c | 2 +-
libavcodec/x86/mathops.h | 6 ++++++
libavutil/internal.h | 16 ----------------
4 files changed, 14 insertions(+), 17 deletions(-)
diff --git a/libavcodec/mathops.h b/libavcodec/mathops.h
index d6eb98d..ab545ef 100644
--- a/libavcodec/mathops.h
+++ b/libavcodec/mathops.h
@@ -138,6 +138,13 @@ if ((y) < (x)) {\
}
#endif
+#ifndef MASK_ABS
+#define MASK_ABS(mask, level) do { \
+ mask = level >> 31; \
+ level = (level ^ mask) - mask; \
+ } while (0)
+#endif
+
#ifndef NEG_SSR32
# define NEG_SSR32(a,s) ((( int32_t)(a))>>(32-(s)))
#endif
diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c
index cb3e9d5..a96a23d 100644
--- a/libavcodec/mpeg12enc.c
+++ b/libavcodec/mpeg12enc.c
@@ -885,7 +885,7 @@ static void mpeg1_encode_block(MpegEncContext *s,
run = i - last_non_zero - 1;
alevel= level;
- MASK_ABS(sign, alevel)
+ MASK_ABS(sign, alevel);
sign&=1;
if (alevel <= mpeg1_max_level[0][run]){
diff --git a/libavcodec/x86/mathops.h b/libavcodec/x86/mathops.h
index e056eb0..cd408ac 100644
--- a/libavcodec/x86/mathops.h
+++ b/libavcodec/x86/mathops.h
@@ -101,6 +101,12 @@ __asm__ volatile(\
);
#endif
+#define MASK_ABS(mask, level) \
+ __asm__ ("cltd \n\t" \
+ "xorl %1, %0 \n\t" \
+ "subl %1, %0 \n\t" \
+ : "+a"(level), "=&d"(mask))
+
// avoid +32 for shift optimization (gcc should do that ...)
#define NEG_SSR32 NEG_SSR32
static inline int32_t NEG_SSR32( int32_t a, int8_t s){
diff --git a/libavutil/internal.h b/libavutil/internal.h
index 0a7ed83..4c1d2f6 100644
--- a/libavutil/internal.h
+++ b/libavutil/internal.h
@@ -96,22 +96,6 @@ struct AVDictionary {
#define av_abort() do { av_log(NULL, AV_LOG_ERROR, "Abort at %s:%d\n", __FILE__, __LINE__); abort(); } while (0)
-/* math */
-
-#if ARCH_X86 && HAVE_INLINE_ASM
-#define MASK_ABS(mask, level)\
- __asm__ volatile(\
- "cltd \n\t"\
- "xorl %1, %0 \n\t"\
- "subl %1, %0 \n\t"\
- : "+a" (level), "=&d" (mask)\
- );
-#else
-#define MASK_ABS(mask, level)\
- mask = level >> 31;\
- level = (level ^ mask) - mask;
-#endif
-
/* avoid usage of dangerous/inappropriate system functions */
#undef malloc
#define malloc please_use_av_malloc
More information about the ffmpeg-cvslog
mailing list