normalize16() on Blackfin should now work on odd lenghts (for real this time!)


git-svn-id: http://svn.xiph.org/trunk/speex@11439 0101bb08-14d6-0310-b084-bc0e0c8e3800
diff --git a/libspeex/filters_bfin.h b/libspeex/filters_bfin.h
index 83442ed..78e1653 100644
--- a/libspeex/filters_bfin.h
+++ b/libspeex/filters_bfin.h
@@ -39,7 +39,6 @@
 {
    spx_sig_t max_val=1;
    int sig_shift;
-
    __asm__ 
    (
    "%0 = 0;\n\t"
@@ -77,6 +76,14 @@
       "R3 = PACK(R3.L, R1.L);\n\t"
       "[I1++] = R3;\n\t"
    "LOOP_END norm_shift%=;\n\t"
+   "R3 = 1;\n\t"
+   "R2 = %3;\n\t"
+   "R2 = R2 & R3;\n\t"
+   "cc = R2 == 0;\n\t"
+   "if cc jump even_jump%=;\n\t"
+      "R1 = ASHIFT R0 by %2.L;\n\t"
+      "W[I1++] = R1.L;\n\t"
+   "even_jump%=:"
    : : "a" (x), "a" (y), "d" (-sig_shift), "a" (len)
    : "I0", "L0", "I1", "L1", "R0", "R1", "R2", "R3", "memory"
    );