Browse code

ac3enc: NEON optimised float_to_fixed24

Signed-off-by: Mans Rullgard <mans@mansr.com>

Mans Rullgard authored on 2011/03/29 10:30:13
Showing 2 changed files
... ...
@@ -27,6 +27,7 @@ void ff_ac3_exponent_min_neon(uint8_t *exp, int num_reuse_blocks, int nb_coefs);
27 27
 int ff_ac3_max_msb_abs_int16_neon(const int16_t *src, int len);
28 28
 void ff_ac3_lshift_int16_neon(int16_t *src, unsigned len, unsigned shift);
29 29
 void ff_ac3_rshift_int32_neon(int32_t *src, unsigned len, unsigned shift);
30
+void ff_float_to_fixed24_neon(int32_t *dst, const float *src, unsigned int len);
30 31
 
31 32
 av_cold void ff_ac3dsp_init_arm(AC3DSPContext *c, int bit_exact)
32 33
 {
... ...
@@ -35,5 +36,6 @@ av_cold void ff_ac3dsp_init_arm(AC3DSPContext *c, int bit_exact)
35 35
         c->ac3_max_msb_abs_int16 = ff_ac3_max_msb_abs_int16_neon;
36 36
         c->ac3_lshift_int16      = ff_ac3_lshift_int16_neon;
37 37
         c->ac3_rshift_int32      = ff_ac3_rshift_int32_neon;
38
+        c->float_to_fixed24      = ff_float_to_fixed24_neon;
38 39
     }
39 40
 }
... ...
@@ -78,3 +78,17 @@ function ff_ac3_rshift_int32_neon, export=1
78 78
         bgt             1b
79 79
         bx              lr
80 80
 endfunc
81
+
82
+function ff_float_to_fixed24_neon, export=1
83
+1:      vld1.32         {q0-q1},  [r1,:128]!
84
+        vcvt.s32.f32    q0,  q0,  #24
85
+        vld1.32         {q2-q3},  [r1,:128]!
86
+        vcvt.s32.f32    q1,  q1,  #24
87
+        vcvt.s32.f32    q2,  q2,  #24
88
+        vst1.32         {q0-q1},  [r0,:128]!
89
+        vcvt.s32.f32    q3,  q3,  #24
90
+        vst1.32         {q2-q3},  [r0,:128]!
91
+        subs            r2,  r2,  #16
92
+        bgt             1b
93
+        bx              lr
94
+endfunc