]> git.sesse.net Git - vlc/commitdiff
Optimize a little bit more
authorRémi Denis-Courmont <remi@remlab.net>
Sun, 6 Sep 2009 12:06:35 +0000 (15:06 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sun, 6 Sep 2009 12:06:55 +0000 (15:06 +0300)
modules/audio_filter/converter/neon.c

index 3b41e2c87ba127c8b5ced6420fa41564447ddf3e..838d3a8c6403d9bfa3c47df4c66b7f9441427b41 100644 (file)
@@ -173,15 +173,28 @@ static void Do_S32_S16 (aout_instance_t *aout, aout_filter_t *filter,
             :
             : "q0", "memory");
 
+    if (nb_samples & 8)
+        asm volatile (
+            "vld1.s32 {q0-q1}, [%[inp]]!\n"
+            "vrshrn.i32 d0, q0, #13\n"
+            "vrshrn.i32 d1, q1, #13\n"
+            "vst1.s16 {q0}, [%[outp]]!\n"
+            : [outp] "+r" (outp), [inp] "+r" (inp)
+            :
+            : "q0", "q1", "memory");
+
     while (inp != endp)
         asm volatile (
             "vld1.s32 {q0-q1}, [%[inp]]!\n"
+            "vld1.s32 {q2-q3}, [%[inp]]!\n"
             "vrshrn.s32 d0, q0, #13\n"
             "vrshrn.s32 d1, q1, #13\n"
-            "vst1.s16 {q0}, [%[outp]]!\n"
+            "vrshrn.s32 d2, q2, #13\n"
+            "vrshrn.s32 d3, q3, #13\n"
+            "vst1.s16 {q0-q1}, [%[outp]]!\n"
             : [outp] "+r" (outp), [inp] "+r" (inp)
             :
-            : "q0", "q1", "memory");
+            : "q0", "q1", "q2", "q3", "memory");
 
     outbuf->i_nb_samples = inbuf->i_nb_samples;
     outbuf->i_nb_bytes = inbuf->i_nb_bytes / 2;