[FFmpeg-devel] [PATCH v2 2/3] avutil/mem_internal: define DECLARE_ALIGNED as C11's alignas

Zhao Zhili quinkblack at foxmail.com
Fri Nov 15 16:09:02 EET 2024


From: Zhao Zhili <zhilizhao at tencent.com>

alignas is portable than compiler's specific __attribute__. It do
have a limitation, that alignas don't support specify aligment on
the declarations of struct (it works for specify alignment on struct
fields), which only used by avcodec/cavs, and is removed now.
---
 libavutil/mem_internal.h | 27 ++++++++-------------------
 1 file changed, 8 insertions(+), 19 deletions(-)

diff --git a/libavutil/mem_internal.h b/libavutil/mem_internal.h
index 20f9b3e3f2..49262abf4b 100644
--- a/libavutil/mem_internal.h
+++ b/libavutil/mem_internal.h
@@ -24,6 +24,7 @@
 #include "config.h"
 
 #include <stdint.h>
+#include <stdalign.h>
 
 #include "attributes.h"
 #include "macros.h"
@@ -73,26 +74,14 @@
  * @param v Name of the variable
  */
 
-#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C)
-    #define DECLARE_ALIGNED_T(n,t,v)    t __attribute__ ((aligned (n))) v
-    #define DECLARE_ASM_ALIGNED(n,t,v)  t __attribute__ ((aligned (n))) v
-    #define DECLARE_ASM_CONST(n,t,v)    const t __attribute__ ((aligned (n))) v
-#elif defined(__DJGPP__)
-    #define DECLARE_ALIGNED_T(n,t,v)    t __attribute__ ((aligned (FFMIN(n, 16)))) v
-    #define DECLARE_ASM_ALIGNED(n,t,v)  t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v
-    #define DECLARE_ASM_CONST(n,t,v)    static const t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v
-#elif defined(__GNUC__) || defined(__clang__)
-    #define DECLARE_ALIGNED_T(n,t,v)    t __attribute__ ((aligned (n))) v
-    #define DECLARE_ASM_ALIGNED(n,t,v)  t av_used __attribute__ ((aligned (n))) v
-    #define DECLARE_ASM_CONST(n,t,v)    static const t av_used __attribute__ ((aligned (n))) v
-#elif defined(_MSC_VER)
-    #define DECLARE_ALIGNED_T(n,t,v)    __declspec(align(n)) t v
-    #define DECLARE_ASM_ALIGNED(n,t,v)  __declspec(align(n)) t v
-    #define DECLARE_ASM_CONST(n,t,v)    __declspec(align(n)) static const t v
+#if defined(__DJGPP__)
+    #define DECLARE_ALIGNED_T(n,t,v)    alignas(FFMIN(n, 16)) t v
+    #define DECLARE_ASM_ALIGNED(n,t,v)  alignas(FFMIN(n, 16)) t av_used v
+    #define DECLARE_ASM_CONST(n,t,v)    alignas(FFMIN(n, 16)) static const t av_used v
 #else
-    #define DECLARE_ALIGNED_T(n,t,v)    t v
-    #define DECLARE_ASM_ALIGNED(n,t,v)  t v
-    #define DECLARE_ASM_CONST(n,t,v)    static const t v
+    #define DECLARE_ALIGNED_T(n,t,v)    alignas(n) t v
+    #define DECLARE_ASM_ALIGNED(n,t,v)  alignas(n) t av_used v
+    #define DECLARE_ASM_CONST(n,t,v)    alignas(n) static const t av_used v
 #endif
 
 #if HAVE_SIMD_ALIGN_64
-- 
2.46.0



More information about the ffmpeg-devel mailing list