From d7a4f8f8b9a4bc309d4d5ab067cfba945e690c0c Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Wed, 8 Aug 2012 17:13:26 +0100 Subject: [PATCH] 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 --- 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 d6eb98ddac..ab545ef504 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 cb3e9d5a70..a96a23dd6b 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 e056eb0a2d..cd408ac5a6 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 0a7ed83c4f..4c1d2f6648 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