[vlc-devel] [PATCH] handle the underscore prefix for some ARM ABI in arm_neon

David Geldreich david.geldreich at free.fr
Fri Apr 20 18:16:41 CEST 2012


here is an altenative to using an assembly macros to handle the calling
differences across ARM ABI.

use a gcc extension (also supported by clang/llvm) which symbol is
associated with function
---
 modules/arm_neon/audio_format.c |    6 ++++--
 modules/arm_neon/chroma_neon.h  |   23 ++++++++++++++---------
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/modules/arm_neon/audio_format.c b/modules/arm_neon/audio_format.c
index 8db209f..3a76f18 100644
--- a/modules/arm_neon/audio_format.c
+++ b/modules/arm_neon/audio_format.c
@@ -135,8 +135,10 @@ static block_t *Do_F32_S32 (filter_t *filter, block_t *inbuf)
 }
 #endif
 
-void s32_s16_neon_unaligned (int16_t *out, const int32_t *in, unsigned nb);
-void s32_s16_neon (int16_t *out, const int32_t *in, unsigned nb);
+extern void s32_s16_neon_unaligned (int16_t *out, const int32_t *in,
+                                    unsigned nb) asm("s32_s16_neon_unaligned");
+extern void s32_s16_neon (int16_t *out, const int32_t *in,
+                          unsigned nb) asm("s32_s16_neon");
 
 /**
  * Signed 32-bits fixed point to signed 16-bits integer
diff --git a/modules/arm_neon/chroma_neon.h b/modules/arm_neon/chroma_neon.h
index 3e867e3..e0debae 100644
--- a/modules/arm_neon/chroma_neon.h
+++ b/modules/arm_neon/chroma_neon.h
@@ -40,39 +40,44 @@ struct yuv_pack
 /* I420 to YUYV conversion. */
 void i420_yuyv_neon (struct yuv_pack *const out,
                      const struct yuv_planes *const in,
-                     int width, int height);
+                     int width, int height) asm("i420_yuyv_neon");
 
 /* I420 to UYVY conversion. */
 void i420_uyvy_neon (struct yuv_pack *const out,
                      const struct yuv_planes *const in,
-                     int width, int height);
+                     int width, int height) asm("i420_uyvy_neon");
 
 /* I422 to YUYV conversion. */
 void i422_yuyv_neon (struct yuv_pack *const out,
                      const struct yuv_planes *const in,
-                     int width, int height);
+                     int width, int height) asm("i422_yuyv_neon");
 
 /* I422 to UYVY conversion. */
 void i422_uyvy_neon (struct yuv_pack *const out,
                      const struct yuv_planes *const in,
-                     int width, int height);
+                     int width, int height) asm("i422_uyvy_neon");
 
 /* YUYV to I422 conversion. */
 void yuyv_i422_neon (struct yuv_planes *const out,
-                     const struct yuv_pack *const in, int width, int height);
+                     const struct yuv_pack *const in,
+                     int width, int height) asm("yuyv_i422_neon");
 
 /* UYVY to I422 conversion. */
 void uyvy_i422_neon (struct yuv_planes *const out,
-                     const struct yuv_pack *const in, int width, int height);
+                     const struct yuv_pack *const in,
+                     int width, int height) asm("uyvy_i422_neon");
 
 /* I420 to RGBA conversion. */
 void i420_rgb_neon (struct yuv_pack *const out,
-                    const struct yuv_planes *const in, int width, int height);
+                    const struct yuv_planes *const in,
+                    int width, int height) asm("i420_rgb_neon");
 
 /* NV21 to RGBA conversion. */
 void nv21_rgb_neon (struct yuv_pack *const out,
-                    const struct yuv_planes *const in, int width, int height);
+                    const struct yuv_planes *const in,
+                    int width, int height) asm("nv21_rgb_neon");
 
 /* NV12 to RGBA conversion. */
 void nv12_rgb_neon (struct yuv_pack *const out,
-                    const struct yuv_planes *const in, int width, int height);
+                    const struct yuv_planes *const in,
+                    int width, int height) asm("nv12_rgb_neon");
-- 
1.7.7.5 (Apple Git-26)




More information about the vlc-devel mailing list