diff --git a/libavcodec/aacps.c b/libavcodec/aacps.c
index 25ed1d0292cd5201026304ba0ca06e20b21d504b..b82001e9675f7f340b3335559b600e9a5a2d0053 100644
--- a/libavcodec/aacps.c
+++ b/libavcodec/aacps.c
@@ -21,13 +21,13 @@
 
 #include <stdint.h>
 #include "libavutil/common.h"
+#include "libavutil/internal.h"
 #include "libavutil/mathematics.h"
 #include "avcodec.h"
 #include "get_bits.h"
 #include "aacps.h"
 #include "aacps_tablegen.h"
 #include "aacpsdata.c"
-#include "dsputil.h"
 
 #define PS_BASELINE 0  ///< Operate in Baseline PS mode
                        ///< Baseline implies 10 or 20 stereo bands,
diff --git a/libavcodec/aacsbr.c b/libavcodec/aacsbr.c
index 4b6d34f89f7e7a1111b7d3a8ce5ecb9eb11634e9..d746b6ea49f1b7ff7cf971b69036070457dd7c00 100644
--- a/libavcodec/aacsbr.c
+++ b/libavcodec/aacsbr.c
@@ -33,6 +33,7 @@
 #include "fft.h"
 #include "aacps.h"
 #include "sbrdsp.h"
+#include "libavutil/internal.h"
 #include "libavutil/libm.h"
 #include "libavutil/avassert.h"
 
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index de8defceb835638fed995cf48bb5a04de1c8d9e3..16f0cdc4de88ef772dae9d42d6577d7934f78f13 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -34,10 +34,10 @@
 #include "libavutil/avstring.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/crc.h"
+#include "libavutil/internal.h"
 #include "libavutil/opt.h"
 #include "avcodec.h"
 #include "put_bits.h"
-#include "dsputil.h"
 #include "ac3dsp.h"
 #include "ac3.h"
 #include "fft.h"
diff --git a/libavcodec/ac3enc_template.c b/libavcodec/ac3enc_template.c
index b1174dc2198f03041e98a76401d09b36eb939bae..18a849da8a0d20ed3c1a74f0ec6b07de89152f0f 100644
--- a/libavcodec/ac3enc_template.c
+++ b/libavcodec/ac3enc_template.c
@@ -28,6 +28,7 @@
 
 #include <stdint.h>
 
+#include "libavutil/internal.h"
 
 /* prototypes for static functions in ac3enc_fixed.c and ac3enc_float.c */
 
diff --git a/libavcodec/bink.c b/libavcodec/bink.c
index a48b8465d71b8261f8643af7995a0c5d85ded36b..5d000a86b4d10430ee438dbeecc5ee78287b1b1f 100644
--- a/libavcodec/bink.c
+++ b/libavcodec/bink.c
@@ -21,6 +21,7 @@
  */
 
 #include "libavutil/imgutils.h"
+#include "libavutil/internal.h"
 #include "avcodec.h"
 #include "dsputil.h"
 #include "binkdata.h"
diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c
index e7ae6e2d20e6f3aadd459645f2260bfc9d4bcd46..ff6375dd79698c680dd3b3e9165bfae7f7cf621c 100644
--- a/libavcodec/dcadec.c
+++ b/libavcodec/dcadec.c
@@ -29,12 +29,12 @@
 #include "libavutil/channel_layout.h"
 #include "libavutil/common.h"
 #include "libavutil/float_dsp.h"
+#include "libavutil/internal.h"
 #include "libavutil/intmath.h"
 #include "libavutil/intreadwrite.h"
 #include "libavutil/mathematics.h"
 #include "libavutil/samplefmt.h"
 #include "avcodec.h"
-#include "dsputil.h"
 #include "fft.h"
 #include "get_bits.h"
 #include "put_bits.h"
diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c
index 51f2af062ac3be6cac11ed8da89f4dc2d17e152b..4b6ce2f60b9d38d9435b2912fa96e77c5cfdbb26 100644
--- a/libavcodec/dnxhdenc.c
+++ b/libavcodec/dnxhdenc.c
@@ -26,6 +26,7 @@
 //#define DEBUG
 #define RC_VARIANCE 1 // use variance or ssd for fast rc
 
+#include "libavutil/internal.h"
 #include "libavutil/opt.h"
 #include "avcodec.h"
 #include "dsputil.h"
diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c
index 518abae319ffee13821229e0154bff543f27b7bc..aff950ac4edd5500bf806a883245e76a640e03d7 100644
--- a/libavcodec/dsputil.c
+++ b/libavcodec/dsputil.c
@@ -28,6 +28,7 @@
  */
 
 #include "libavutil/imgutils.h"
+#include "libavutil/internal.h"
 #include "avcodec.h"
 #include "copy_block.h"
 #include "dsputil.h"
diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h
index 4c806d17e3743c826d9c6e95a983959bdaee01e1..b1adeccc25a20ebacd0759526eddbd21f13e6997 100644
--- a/libavcodec/dsputil.h
+++ b/libavcodec/dsputil.h
@@ -436,30 +436,4 @@ void ff_dsputil_init_dwt(DSPContext *c);
 #   define STRIDE_ALIGN 8
 #endif
 
-// Some broken preprocessors need a second expansion
-// to be forced to tokenize __VA_ARGS__
-#define E(x) x
-
-#define LOCAL_ALIGNED_A(a, t, v, s, o, ...)             \
-    uint8_t la_##v[sizeof(t s o) + (a)];                \
-    t (*v) o = (void *)FFALIGN((uintptr_t)la_##v, a)
-
-#define LOCAL_ALIGNED_D(a, t, v, s, o, ...)             \
-    DECLARE_ALIGNED(a, t, la_##v) s o;                  \
-    t (*v) o = la_##v
-
-#define LOCAL_ALIGNED(a, t, v, ...) E(LOCAL_ALIGNED_A(a, t, v, __VA_ARGS__,,))
-
-#if HAVE_LOCAL_ALIGNED_8
-#   define LOCAL_ALIGNED_8(t, v, ...) E(LOCAL_ALIGNED_D(8, t, v, __VA_ARGS__,,))
-#else
-#   define LOCAL_ALIGNED_8(t, v, ...) LOCAL_ALIGNED(8, t, v, __VA_ARGS__)
-#endif
-
-#if HAVE_LOCAL_ALIGNED_16
-#   define LOCAL_ALIGNED_16(t, v, ...) E(LOCAL_ALIGNED_D(16, t, v, __VA_ARGS__,,))
-#else
-#   define LOCAL_ALIGNED_16(t, v, ...) LOCAL_ALIGNED(16, t, v, __VA_ARGS__)
-#endif
-
 #endif /* AVCODEC_DSPUTIL_H */
diff --git a/libavcodec/dv.c b/libavcodec/dv.c
index e2a00a6c1453a96e99c096dce4a9970bf82eee10..2a7fbe6672dbb2f1aedcf326cf228785a505b214 100644
--- a/libavcodec/dv.c
+++ b/libavcodec/dv.c
@@ -38,6 +38,7 @@
  * DV codec.
  */
 
+#include "libavutil/internal.h"
 #include "libavutil/pixdesc.h"
 #include "avcodec.h"
 #include "dsputil.h"
diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c
index bb60fc0b13aad51b577f86beed154799ae5210ad..64d2259a7b6c738d83ef700b4b4aedf09c01bffb 100644
--- a/libavcodec/dvdec.c
+++ b/libavcodec/dvdec.c
@@ -36,9 +36,9 @@
  */
 
 #include "libavutil/avassert.h"
+#include "libavutil/internal.h"
 #include "libavutil/pixdesc.h"
 #include "avcodec.h"
-#include "dsputil.h"
 #include "internal.h"
 #include "get_bits.h"
 #include "put_bits.h"
diff --git a/libavcodec/h264_loopfilter.c b/libavcodec/h264_loopfilter.c
index 7cd9f6918905743ef3a5ab12e4318955432ee384..0ffc1aa63efae69056084d481e7c2bdfea7c8af2 100644
--- a/libavcodec/h264_loopfilter.c
+++ b/libavcodec/h264_loopfilter.c
@@ -25,9 +25,9 @@
  * @author Michael Niedermayer <michaelni@gmx.at>
  */
 
+#include "libavutil/internal.h"
 #include "libavutil/intreadwrite.h"
 #include "internal.h"
-#include "dsputil.h"
 #include "avcodec.h"
 #include "mpegvideo.h"
 #include "h264.h"
diff --git a/libavcodec/imc.c b/libavcodec/imc.c
index a09e3c5d9fee558935ec1c3e1114b3d40d6ae954..c127b2559ef5043a7dee814f92c4e42c674d7aeb 100644
--- a/libavcodec/imc.c
+++ b/libavcodec/imc.c
@@ -37,6 +37,7 @@
 
 #include "libavutil/channel_layout.h"
 #include "libavutil/float_dsp.h"
+#include "libavutil/internal.h"
 #include "libavutil/libm.h"
 #include "avcodec.h"
 #include "get_bits.h"
diff --git a/libavcodec/ituh263dec.c b/libavcodec/ituh263dec.c
index 1c7e34f31723f9d49c211f179bf92db4bbb7dcf3..4672e085bc807ededb9877b3f041f80d4c829d69 100644
--- a/libavcodec/ituh263dec.c
+++ b/libavcodec/ituh263dec.c
@@ -32,6 +32,7 @@
 //#define DEBUG
 #include <limits.h>
 
+#include "libavutil/internal.h"
 #include "libavutil/mathematics.h"
 #include "dsputil.h"
 #include "avcodec.h"
diff --git a/libavcodec/mpc7.c b/libavcodec/mpc7.c
index 2326a9bd8bc6c8b897a595e1cd906d1be6675513..8d5955af34f967d71d5a8538b5ba652eb945823a 100644
--- a/libavcodec/mpc7.c
+++ b/libavcodec/mpc7.c
@@ -26,6 +26,7 @@
  */
 
 #include "libavutil/channel_layout.h"
+#include "libavutil/internal.h"
 #include "libavutil/lfg.h"
 #include "avcodec.h"
 #include "get_bits.h"
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index 87531d7cd9fbb0706ab81b076b7bddadaace65c5..66781f9e24a5eb0a7fd0017fd950b849283cec7c 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -27,6 +27,7 @@
  * The simplest mpeg encoder (well, it was the simplest!).
  */
 
+#include "libavutil/internal.h"
 #include "libavutil/intmath.h"
 #include "libavutil/mathematics.h"
 #include "libavutil/pixdesc.h"
diff --git a/libavcodec/mpegvideo_motion.c b/libavcodec/mpegvideo_motion.c
index 22381dea273889a6c7e59a5def62a635bd9e9f10..565f6cb286693a593eeaa5e61f6036c2d1837fbb 100644
--- a/libavcodec/mpegvideo_motion.c
+++ b/libavcodec/mpegvideo_motion.c
@@ -22,7 +22,9 @@
  */
 
 #include <string.h>
+
 #include "libavutil/avassert.h"
+#include "libavutil/internal.h"
 #include "avcodec.h"
 #include "dsputil.h"
 #include "mpegvideo.h"
diff --git a/libavcodec/ppc/mpegaudiodec_altivec.c b/libavcodec/ppc/mpegaudiodec_altivec.c
index bf6e1c33a429870723864156cd0f7e10c631cc43..1152fd77aca30094e8f2e7977e18af80322e9ffa 100644
--- a/libavcodec/ppc/mpegaudiodec_altivec.c
+++ b/libavcodec/ppc/mpegaudiodec_altivec.c
@@ -21,8 +21,8 @@
 
 #include "dsputil_altivec.h"
 #include "libavutil/attributes.h"
+#include "libavutil/internal.h"
 #include "libavutil/ppc/util_altivec.h"
-#include "libavcodec/dsputil.h"
 #include "libavcodec/mpegaudiodsp.h"
 
 #define MACS(rt, ra, rb) rt+=(ra)*(rb)
diff --git a/libavcodec/ra288.c b/libavcodec/ra288.c
index 8bafc010e1da73413d69804ea6ec5e7ae6e36cff..e0e876dbd968beeeb149fc92f01299b5cc9629ca 100644
--- a/libavcodec/ra288.c
+++ b/libavcodec/ra288.c
@@ -21,6 +21,7 @@
 
 #include "libavutil/channel_layout.h"
 #include "libavutil/float_dsp.h"
+#include "libavutil/internal.h"
 #include "avcodec.h"
 #include "internal.h"
 #define BITSTREAM_READER_LE
diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c
index eb431ee1e2e193d37de6b488af8468be7345f007..a2f074eb1283b5cd6814cfabd8f0bf742b48e820 100644
--- a/libavcodec/rv34.c
+++ b/libavcodec/rv34.c
@@ -28,7 +28,6 @@
 #include "libavutil/internal.h"
 
 #include "avcodec.h"
-#include "dsputil.h"
 #include "mpegvideo.h"
 #include "golomb.h"
 #include "internal.h"
diff --git a/libavcodec/simple_idct.c b/libavcodec/simple_idct.c
index 2cbe568c203f675a22c26875496bbf8059c7a265..d204565ea42f5d7f32f4a7fa5de2ff480e972bb6 100644
--- a/libavcodec/simple_idct.c
+++ b/libavcodec/simple_idct.c
@@ -27,7 +27,6 @@
 
 #include "libavutil/intreadwrite.h"
 #include "avcodec.h"
-#include "dsputil.h"
 #include "mathops.h"
 #include "simple_idct.h"
 
diff --git a/libavcodec/takdec.c b/libavcodec/takdec.c
index af6454304cea1b87dc3533d2f56d905d89b76bb6..f6cacb02c8b064a017304e67ddac8f394efbf269 100644
--- a/libavcodec/takdec.c
+++ b/libavcodec/takdec.c
@@ -25,6 +25,7 @@
  * @author Paul B Mahol
  */
 
+#include "libavutil/internal.h"
 #include "libavutil/samplefmt.h"
 #include "tak.h"
 #include "avcodec.h"
diff --git a/libavcodec/x86/mpegaudiodec.c b/libavcodec/x86/mpegaudiodec.c
index ee93a84956534ce532e48cebc2b99ef1ae69b330..287d8ff1268ec0f706257fe5e5385bbe1e0556f9 100644
--- a/libavcodec/x86/mpegaudiodec.c
+++ b/libavcodec/x86/mpegaudiodec.c
@@ -21,9 +21,9 @@
 
 #include "libavutil/attributes.h"
 #include "libavutil/cpu.h"
+#include "libavutil/internal.h"
 #include "libavutil/x86/asm.h"
 #include "libavutil/x86/cpu.h"
-#include "libavcodec/dsputil.h"
 #include "libavcodec/mpegaudiodsp.h"
 
 #define DECL(CPU)\
diff --git a/libavutil/internal.h b/libavutil/internal.h
index 487d0983b1107a171654a5eccd6a301d4dd26370..6186d8ec857dc94aa88040869827a60c9c15875a 100644
--- a/libavutil/internal.h
+++ b/libavutil/internal.h
@@ -58,6 +58,32 @@
 #    define INT_BIT (CHAR_BIT * sizeof(int))
 #endif
 
+// Some broken preprocessors need a second expansion
+// to be forced to tokenize __VA_ARGS__
+#define E(x) x
+
+#define LOCAL_ALIGNED_A(a, t, v, s, o, ...)             \
+    uint8_t la_##v[sizeof(t s o) + (a)];                \
+    t (*v) o = (void *)FFALIGN((uintptr_t)la_##v, a)
+
+#define LOCAL_ALIGNED_D(a, t, v, s, o, ...)             \
+    DECLARE_ALIGNED(a, t, la_##v) s o;                  \
+    t (*v) o = la_##v
+
+#define LOCAL_ALIGNED(a, t, v, ...) E(LOCAL_ALIGNED_A(a, t, v, __VA_ARGS__,,))
+
+#if HAVE_LOCAL_ALIGNED_8
+#   define LOCAL_ALIGNED_8(t, v, ...) E(LOCAL_ALIGNED_D(8, t, v, __VA_ARGS__,,))
+#else
+#   define LOCAL_ALIGNED_8(t, v, ...) LOCAL_ALIGNED(8, t, v, __VA_ARGS__)
+#endif
+
+#if HAVE_LOCAL_ALIGNED_16
+#   define LOCAL_ALIGNED_16(t, v, ...) E(LOCAL_ALIGNED_D(16, t, v, __VA_ARGS__,,))
+#else
+#   define LOCAL_ALIGNED_16(t, v, ...) LOCAL_ALIGNED(16, t, v, __VA_ARGS__)
+#endif
+
 #define FF_ALLOC_OR_GOTO(ctx, p, size, label)\
 {\
     p = av_malloc(size);\