diff --git a/libavcodec/arm/h264dsp_init_arm.c b/libavcodec/arm/h264dsp_init_arm.c
index 367ba81..a3a8c66 100644
--- a/libavcodec/arm/h264dsp_init_arm.c
+++ b/libavcodec/arm/h264dsp_init_arm.c
@@ -70,6 +70,11 @@ void ff_h264_idct8_add4_neon(uint8_t *dst, const int *block_offset,
 
 static void ff_h264dsp_init_neon(H264DSPContext *c, const int bit_depth, const int chroma_format_idc)
 {
+    const int cpu_flags = av_get_cpu_flags();
+
+    if (!have_neon(cpu_flags))
+        return;
+
     if (bit_depth == 8) {
     c->h264_v_loop_filter_luma   = ff_h264_v_loop_filter_luma_neon;
     c->h264_h_loop_filter_luma   = ff_h264_h_loop_filter_luma_neon;
@@ -100,8 +105,5 @@ static void ff_h264dsp_init_neon(H264DSPContext *c, const int bit_depth, const i
 
 void ff_h264dsp_init_arm(H264DSPContext *c, const int bit_depth, const int chroma_format_idc)
 {
-    int cpu_flags = av_get_cpu_flags();
-
-    if (have_neon(cpu_flags))
         ff_h264dsp_init_neon(c, bit_depth, chroma_format_idc);
 }
diff --git a/libavcodec/arm/h264pred_init_arm.c b/libavcodec/arm/h264pred_init_arm.c
index 13aea32..df81050 100644
--- a/libavcodec/arm/h264pred_init_arm.c
+++ b/libavcodec/arm/h264pred_init_arm.c
@@ -46,8 +46,9 @@ void ff_pred8x8_0l0_dc_neon(uint8_t *src, int stride);
 static void ff_h264_pred_init_neon(H264PredContext *h, int codec_id, const int bit_depth, const int chroma_format_idc)
 {
     const int high_depth = bit_depth > 8;
+    const int cpu_flags  = av_get_cpu_flags();
 
-    if (high_depth)
+    if (!have_neon(cpu_flags) || high_depth)
         return;
     if(chroma_format_idc == 1){
     h->pred8x8[VERT_PRED8x8     ] = ff_pred8x8_vert_neon;
@@ -78,8 +79,5 @@ static void ff_h264_pred_init_neon(H264PredContext *h, int codec_id, const int b
 
 void ff_h264_pred_init_arm(H264PredContext *h, int codec_id, int bit_depth, const int chroma_format_idc)
 {
-    int cpu_flags = av_get_cpu_flags();
-
-    if (have_neon(cpu_flags))
         ff_h264_pred_init_neon(h, codec_id, bit_depth, chroma_format_idc);
 }
