From 4dcc6d9707f8b3525c8f30c9189ce212416fc406 Mon Sep 17 00:00:00 2001 From: Johann Date: Tue, 13 May 2014 14:17:02 -0700 Subject: [PATCH] Build armv7a-only code Allow disabling the more generic NEON code. Use filtered option to disable rtcd code. Change-Id: Icb4500c1a2bac16eed3c5e3ec0c35e92e6bbbb9f --- build/make/configure.sh | 6 +++--- vp8/common/arm/loopfilter_arm.c | 16 +++++++++++----- vp8/common/rtcd_defs.pl | 14 ++++++-------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/build/make/configure.sh b/build/make/configure.sh index a2a64c2..c07b049 100755 --- a/build/make/configure.sh +++ b/build/make/configure.sh @@ -518,7 +518,7 @@ process_common_cmdline() { --enable-?*|--disable-?*) eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'` if echo "${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null; then - [ $action = "disable" ] && RTCD_OPTIONS="${RTCD_OPTIONS}${opt} " + [ $action = "disable" ] && RTCD_OPTIONS="${RTCD_OPTIONS}--disable-${option} " elif [ $action = "disable" ] && ! disabled $option ; then echo "${CMDLINE_SELECT}" | grep "^ *$option\$" >/dev/null || die_unknown $opt @@ -835,7 +835,7 @@ EOF check_add_cflags -march=armv7-a -mfloat-abi=${float_abi} check_add_asflags -march=armv7-a -mfloat-abi=${float_abi} - if enabled neon + if enabled neon || enabled neon_asm then check_add_cflags -mfpu=neon #-ftree-vectorize check_add_asflags -mfpu=neon @@ -882,7 +882,7 @@ EOF tune_asflags="--cpu=" if [ -z "${tune_cpu}" ]; then if [ ${tgt_isa} = "armv7" ]; then - if enabled neon + if enabled neon || enabled neon_asm then check_add_cflags --fpu=softvfp+vfpv3 check_add_asflags --fpu=softvfp+vfpv3 diff --git a/vp8/common/arm/loopfilter_arm.c b/vp8/common/arm/loopfilter_arm.c index 5d693c6..f37ca63 100644 --- a/vp8/common/arm/loopfilter_arm.c +++ b/vp8/common/arm/loopfilter_arm.c @@ -25,20 +25,24 @@ extern prototype_loopfilter(vp8_mbloop_filter_horizontal_edge_armv6); extern prototype_loopfilter(vp8_mbloop_filter_vertical_edge_armv6); #endif -#if HAVE_NEON_ASM +#if HAVE_NEON_ASM || HAVE_NEON typedef void loopfilter_y_neon(unsigned char *src, int pitch, unsigned char blimit, unsigned char limit, unsigned char thresh); typedef void loopfilter_uv_neon(unsigned char *u, int pitch, unsigned char blimit, unsigned char limit, unsigned char thresh, unsigned char *v); +#endif +#if HAVE_NEON_ASM extern loopfilter_y_neon vp8_loop_filter_horizontal_edge_y_neon; extern loopfilter_y_neon vp8_loop_filter_vertical_edge_y_neon; -extern loopfilter_y_neon vp8_mbloop_filter_horizontal_edge_y_neon; -extern loopfilter_y_neon vp8_mbloop_filter_vertical_edge_y_neon; - extern loopfilter_uv_neon vp8_loop_filter_horizontal_edge_uv_neon; extern loopfilter_uv_neon vp8_loop_filter_vertical_edge_uv_neon; +#endif + +#if HAVE_NEON +extern loopfilter_y_neon vp8_mbloop_filter_horizontal_edge_y_neon; +extern loopfilter_y_neon vp8_mbloop_filter_vertical_edge_y_neon; extern loopfilter_uv_neon vp8_mbloop_filter_horizontal_edge_uv_neon; extern loopfilter_uv_neon vp8_mbloop_filter_vertical_edge_uv_neon; #endif @@ -118,7 +122,7 @@ void vp8_loop_filter_bvs_armv6(unsigned char *y_ptr, int y_stride, } #endif -#if HAVE_NEON_ASM +#if HAVE_NEON /* NEON loopfilter functions */ /* Horizontal MB filtering */ void vp8_loop_filter_mbh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, @@ -146,7 +150,9 @@ void vp8_loop_filter_mbv_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsign if (u_ptr) vp8_mbloop_filter_vertical_edge_uv_neon(u_ptr, uv_stride, mblim, lim, hev_thr, v_ptr); } +#endif +#if HAVE_NEON_ASM /* Horizontal B Filtering */ void vp8_loop_filter_bh_neon(unsigned char *y_ptr, unsigned char *u_ptr, unsigned char *v_ptr, int y_stride, int uv_stride, loop_filter_info *lfi) diff --git a/vp8/common/rtcd_defs.pl b/vp8/common/rtcd_defs.pl index 0aaec1b..502f49a 100644 --- a/vp8/common/rtcd_defs.pl +++ b/vp8/common/rtcd_defs.pl @@ -54,9 +54,8 @@ $vp8_dequant_idct_add_y_block_dspr2=vp8_dequant_idct_add_y_block_dspr2; # Loopfilter # add_proto qw/void vp8_loop_filter_mbv/, "unsigned char *y, unsigned char *u, unsigned char *v, int ystride, int uv_stride, struct loop_filter_info *lfi"; -specialize qw/vp8_loop_filter_mbv mmx sse2 media neon_asm dspr2/; +specialize qw/vp8_loop_filter_mbv mmx sse2 media neon dspr2/; $vp8_loop_filter_mbv_media=vp8_loop_filter_mbv_armv6; -$vp8_loop_filter_mbv_neon_asm=vp8_loop_filter_mbv_neon; $vp8_loop_filter_mbv_dspr2=vp8_loop_filter_mbv_dspr2; add_proto qw/void vp8_loop_filter_bv/, "unsigned char *y, unsigned char *u, unsigned char *v, int ystride, int uv_stride, struct loop_filter_info *lfi"; @@ -66,9 +65,8 @@ $vp8_loop_filter_bv_neon_asm=vp8_loop_filter_bv_neon; $vp8_loop_filter_bv_dspr2=vp8_loop_filter_bv_dspr2; add_proto qw/void vp8_loop_filter_mbh/, "unsigned char *y, unsigned char *u, unsigned char *v, int ystride, int uv_stride, struct loop_filter_info *lfi"; -specialize qw/vp8_loop_filter_mbh mmx sse2 media neon_asm dspr2/; +specialize qw/vp8_loop_filter_mbh mmx sse2 media neon dspr2/; $vp8_loop_filter_mbh_media=vp8_loop_filter_mbh_armv6; -$vp8_loop_filter_mbh_neon_asm=vp8_loop_filter_mbh_neon; $vp8_loop_filter_mbh_dspr2=vp8_loop_filter_mbh_dspr2; add_proto qw/void vp8_loop_filter_bh/, "unsigned char *y, unsigned char *u, unsigned char *v, int ystride, int uv_stride, struct loop_filter_info *lfi"; @@ -87,12 +85,12 @@ $vp8_loop_filter_simple_mbv_media=vp8_loop_filter_simple_vertical_edge_armv6; $vp8_loop_filter_simple_mbv_neon_asm=vp8_loop_filter_mbvs_neon; add_proto qw/void vp8_loop_filter_simple_mbh/, "unsigned char *y, int ystride, const unsigned char *blimit"; -specialize qw/vp8_loop_filter_simple_mbh mmx sse2 media neon_asm/; +specialize qw/vp8_loop_filter_simple_mbh mmx sse2 media neon/; $vp8_loop_filter_simple_mbh_c=vp8_loop_filter_simple_horizontal_edge_c; $vp8_loop_filter_simple_mbh_mmx=vp8_loop_filter_simple_horizontal_edge_mmx; $vp8_loop_filter_simple_mbh_sse2=vp8_loop_filter_simple_horizontal_edge_sse2; $vp8_loop_filter_simple_mbh_media=vp8_loop_filter_simple_horizontal_edge_armv6; -$vp8_loop_filter_simple_mbh_neon_asm=vp8_loop_filter_mbhs_neon; +$vp8_loop_filter_simple_mbh_neon=vp8_loop_filter_mbhs_neon; add_proto qw/void vp8_loop_filter_simple_bv/, "unsigned char *y, int ystride, const unsigned char *blimit"; specialize qw/vp8_loop_filter_simple_bv mmx sse2 media neon_asm/; @@ -103,12 +101,12 @@ $vp8_loop_filter_simple_bv_media=vp8_loop_filter_bvs_armv6; $vp8_loop_filter_simple_bv_neon_asm=vp8_loop_filter_bvs_neon; add_proto qw/void vp8_loop_filter_simple_bh/, "unsigned char *y, int ystride, const unsigned char *blimit"; -specialize qw/vp8_loop_filter_simple_bh mmx sse2 media neon_asm/; +specialize qw/vp8_loop_filter_simple_bh mmx sse2 media neon/; $vp8_loop_filter_simple_bh_c=vp8_loop_filter_bhs_c; $vp8_loop_filter_simple_bh_mmx=vp8_loop_filter_bhs_mmx; $vp8_loop_filter_simple_bh_sse2=vp8_loop_filter_bhs_sse2; $vp8_loop_filter_simple_bh_media=vp8_loop_filter_bhs_armv6; -$vp8_loop_filter_simple_bh_neon_asm=vp8_loop_filter_bhs_neon; +$vp8_loop_filter_simple_bh_neon=vp8_loop_filter_bhs_neon; # # IDCT -- 2.7.4