OSDN Git Service

Add LOCAL_ALIGNED() macro for declaring aligned local arrays
authorMåns Rullgård <mans@mansr.com>
Wed, 17 Feb 2010 20:36:12 +0000 (20:36 +0000)
committerMåns Rullgård <mans@mansr.com>
Wed, 17 Feb 2010 20:36:12 +0000 (20:36 +0000)
Originally committed as revision 21864 to svn://svn.ffmpeg.org/ffmpeg/trunk

configure
libavcodec/dsputil.h

index 891b06c..9689026 100755 (executable)
--- a/configure
+++ b/configure
@@ -1035,6 +1035,8 @@ HAVE_LIST="
     libdc1394_1
     libdc1394_2
     llrint
+    local_aligned_16
+    local_aligned_8
     log2
     log2f
     loongson
index 2d8d41a..af15d96 100644 (file)
@@ -700,6 +700,22 @@ static inline void emms(void)
 #   define STRIDE_ALIGN 8
 #endif
 
+#define LOCAL_ALIGNED(a, t, v, s, ...)                          \
+    uint8_t la_##v[sizeof(t s __VA_ARGS__) + (a)];              \
+    t (*v) __VA_ARGS__ = (void *)FFALIGN((uintptr_t)la_##v, a)
+
+#if HAVE_LOCAL_ALIGNED_8
+#   define LOCAL_ALIGNED_8((t, v, s, ...) DECLARE_ALIGNED_8(t, v) s __VA_ARGS__
+#else
+#   define LOCAL_ALIGNED_8(t, v, s, ...) LOCAL_ALIGNED(8, t, v, s, __VA_ARGS__)
+#endif
+
+#if HAVE_LOCAL_ALIGNED_16
+#   define LOCAL_ALIGNED_16((t, v, s, ...) DECLARE_ALIGNED_16(t, v) s __VA_ARGS__
+#else
+#   define LOCAL_ALIGNED_16(t, v, s, ...) LOCAL_ALIGNED(16, t, v, s, __VA_ARGS__)
+#endif
+
 /* PSNR */
 void get_psnr(uint8_t *orig_image[3], uint8_t *coded_image[3],
               int orig_linesize[3], int coded_linesize,