60 static void ff_celp_lp_synthesis_filterf_mips(
float *
out,
 
   61                                   const float *filter_coeffs,
 
   62                                   const float* 
in, 
int buffer_length,
 
   67     float out0, out1, out2, out3;
 
   68     float old_out0, old_out1, old_out2, old_out3;
 
   70     const float *p_filter_coeffs;
 
   76     b -= filter_coeffs[0] * filter_coeffs[0];
 
   77     c -= filter_coeffs[1] * filter_coeffs[0];
 
   78     c -= filter_coeffs[0] * 
b;
 
   84     for (n = 0; n <= buffer_length - 4; n+=4) {
 
   85         p_filter_coeffs = filter_coeffs;
 
   94             "lwc1       $f2,     8(%[filter_coeffs])                        \n\t" 
   95             "lwc1       $f1,     4(%[filter_coeffs])                        \n\t" 
   96             "lwc1       $f0,     0(%[filter_coeffs])                        \n\t" 
   97             "nmsub.s    %[out0], %[out0],             $f2, %[old_out1]      \n\t" 
   98             "nmsub.s    %[out1], %[out1],             $f2, %[old_out2]      \n\t" 
   99             "nmsub.s    %[out2], %[out2],             $f2, %[old_out3]      \n\t" 
  100             "lwc1       $f3,     12(%[filter_coeffs])                       \n\t" 
  101             "nmsub.s    %[out0], %[out0],             $f1, %[old_out2]      \n\t" 
  102             "nmsub.s    %[out1], %[out1],             $f1, %[old_out3]      \n\t" 
  103             "nmsub.s    %[out2], %[out2],             $f3, %[old_out2]      \n\t" 
  104             "nmsub.s    %[out0], %[out0],             $f0, %[old_out3]      \n\t" 
  105             "nmsub.s    %[out3], %[out3],             $f3, %[old_out3]      \n\t" 
  106             "nmsub.s    %[out1], %[out1],             $f3, %[old_out1]      \n\t" 
  107             "nmsub.s    %[out0], %[out0],             $f3, %[old_out0]      \n\t" 
  109             : [out0]
"+f"(out0), [out1]
"+f"(out1),
 
  110               [out2]
"+f"(out2), [out3]
"+f"(out3)
 
  111             : [old_out0]
"f"(old_out0), [old_out1]
"f"(old_out1),
 
  112               [old_out2]
"f"(old_out2), [old_out3]
"f"(old_out3),
 
  113               [filter_coeffs]
"r"(filter_coeffs)
 
  114             : 
"$f0", 
"$f1", 
"$f2", 
"$f3", 
"$f4", 
"memory" 
  117         for (i = 5; i <= filter_length; i += 2) {
 
  119                 "lwc1    %[old_out3], -20(%[p_out])                         \n\t" 
  120                 "lwc1    $f5,         16(%[p_filter_coeffs])                \n\t" 
  121                 "addiu   %[p_out],    -8                                    \n\t" 
  122                 "addiu   %[p_filter_coeffs], 8                              \n\t" 
  123                 "nmsub.s %[out1],     %[out1],      $f5, %[old_out0]        \n\t" 
  124                 "nmsub.s %[out3],     %[out3],      $f5, %[old_out2]        \n\t" 
  125                 "lwc1    $f4,         12(%[p_filter_coeffs])                \n\t" 
  126                 "lwc1    %[old_out2], -16(%[p_out])                         \n\t" 
  127                 "nmsub.s %[out0],     %[out0],      $f5, %[old_out3]        \n\t" 
  128                 "nmsub.s %[out2],     %[out2],      $f5, %[old_out1]        \n\t" 
  129                 "nmsub.s %[out1],     %[out1],      $f4, %[old_out3]        \n\t" 
  130                 "nmsub.s %[out3],     %[out3],      $f4, %[old_out1]        \n\t" 
  131                 "mov.s   %[old_out1], %[old_out3]                           \n\t" 
  132                 "nmsub.s %[out0],     %[out0],      $f4, %[old_out2]        \n\t" 
  133                 "nmsub.s %[out2],     %[out2],      $f4, %[old_out0]        \n\t" 
  135                 : [out0]
"+f"(out0), [out1]
"+f"(out1),
 
  136                   [out2]
"+f"(out2), [out3]
"+f"(out3), [old_out0]
"+f"(old_out0),
 
  137                   [old_out1]
"+f"(old_out1), [old_out2]
"+f"(old_out2),
 
  138                   [old_out3]
"+f"(old_out3),[p_filter_coeffs]
"+r"(p_filter_coeffs),
 
  141                 : 
"$f4", 
"$f5", 
"memory" 
  143             FFSWAP(
float, old_out0, old_out2);
 
  147             "nmsub.s    %[out3], %[out3], %[a], %[out2]                     \n\t" 
  148             "nmsub.s    %[out2], %[out2], %[a], %[out1]                     \n\t" 
  149             "nmsub.s    %[out3], %[out3], %[b], %[out1]                     \n\t" 
  150             "nmsub.s    %[out1], %[out1], %[a], %[out0]                     \n\t" 
  151             "nmsub.s    %[out2], %[out2], %[b], %[out0]                     \n\t" 
  152             "nmsub.s    %[out3], %[out3], %[c], %[out0]                     \n\t" 
  154             : [out0]
"+f"(out0), [out1]
"+f"(out1),
 
  155               [out2]
"+f"(out2), [out3]
"+f"(out3)
 
  156             : [
a]
"f"(
a), [b]
"f"(b), [
c]
"f"(
c)
 
  175     for (; n < buffer_length; n++) {
 
  176         float out_val, out_val_i, fc_val;
 
  177         p_filter_coeffs = filter_coeffs;
 
  180         for (i = 1; i <= filter_length; i++) {
 
  182                 "lwc1    %[fc_val],          0(%[p_filter_coeffs])                        \n\t" 
  183                 "lwc1    %[out_val_i],       -4(%[p_out])                                 \n\t" 
  184                 "addiu   %[p_filter_coeffs], 4                                            \n\t" 
  185                 "addiu   %[p_out],           -4                                           \n\t" 
  186                 "nmsub.s %[out_val],         %[out_val],          %[fc_val], %[out_val_i] \n\t" 
  188                 : [fc_val]
"=&f"(fc_val), [out_val]
"+f"(out_val),
 
  189                   [out_val_i]
"=&f"(out_val_i), [p_out]
"+r"(p_out),
 
  190                   [p_filter_coeffs]
"+r"(p_filter_coeffs)
 
  199 static void ff_celp_lp_zero_synthesis_filterf_mips(
float *out,
 
  200                                        const float *filter_coeffs,
 
  201                                        const float *in, 
int buffer_length,
 
  205     float sum_out8, sum_out7, sum_out6, sum_out5, sum_out4, fc_val;
 
  206     float sum_out3, sum_out2, sum_out1;
 
  207     const float *p_filter_coeffs, *p_in;
 
  209     for (n = 0; n < buffer_length; n+=8) {
 
  211         p_filter_coeffs = filter_coeffs;
 
  227             "filt_lp_inner%=:                                               \n\t" 
  228             "lwc1   %[fc_val],   0(%[p_filter_coeffs])                      \n\t" 
  229             "lwc1   $f7,         6*4(%[p_in])                               \n\t" 
  230             "lwc1   $f6,         5*4(%[p_in])                               \n\t" 
  231             "lwc1   $f5,         4*4(%[p_in])                               \n\t" 
  232             "lwc1   $f4,         3*4(%[p_in])                               \n\t" 
  233             "lwc1   $f3,         2*4(%[p_in])                               \n\t" 
  234             "lwc1   $f2,         4(%[p_in])                                 \n\t" 
  235             "lwc1   $f1,         0(%[p_in])                                 \n\t" 
  236             "lwc1   $f0,         -4(%[p_in])                                \n\t" 
  237             "addiu  %[i],        -2                                         \n\t" 
  238             "madd.s %[sum_out8], %[sum_out8],          %[fc_val], $f7       \n\t" 
  239             "madd.s %[sum_out7], %[sum_out7],          %[fc_val], $f6       \n\t" 
  240             "madd.s %[sum_out6], %[sum_out6],          %[fc_val], $f5       \n\t" 
  241             "madd.s %[sum_out5], %[sum_out5],          %[fc_val], $f4       \n\t" 
  242             "madd.s %[sum_out4], %[sum_out4],          %[fc_val], $f3       \n\t" 
  243             "madd.s %[sum_out3], %[sum_out3],          %[fc_val], $f2       \n\t" 
  244             "madd.s %[sum_out2], %[sum_out2],          %[fc_val], $f1       \n\t" 
  245             "madd.s %[sum_out1], %[sum_out1],          %[fc_val], $f0       \n\t" 
  246             "lwc1   %[fc_val],   4(%[p_filter_coeffs])                      \n\t" 
  247             "lwc1   $f7,         -8(%[p_in])                                \n\t" 
  248             "addiu  %[p_filter_coeffs], 8                                   \n\t" 
  249             "addiu  %[p_in],     -8                                         \n\t" 
  250             "madd.s %[sum_out8], %[sum_out8],          %[fc_val], $f6       \n\t" 
  251             "madd.s %[sum_out7], %[sum_out7],          %[fc_val], $f5       \n\t" 
  252             "madd.s %[sum_out6], %[sum_out6],          %[fc_val], $f4       \n\t" 
  253             "madd.s %[sum_out5], %[sum_out5],          %[fc_val], $f3       \n\t" 
  254             "madd.s %[sum_out4], %[sum_out4],          %[fc_val], $f2       \n\t" 
  255             "madd.s %[sum_out3], %[sum_out3],          %[fc_val], $f1       \n\t" 
  256             "madd.s %[sum_out2], %[sum_out2],          %[fc_val], $f0       \n\t" 
  257             "madd.s %[sum_out1], %[sum_out1],          %[fc_val], $f7       \n\t" 
  258             "bgtz   %[i],        filt_lp_inner%=                            \n\t" 
  260             : [sum_out8]
"+f"(sum_out8), [sum_out7]
"+f"(sum_out7),
 
  261               [sum_out6]
"+f"(sum_out6), [sum_out5]
"+f"(sum_out5),
 
  262               [sum_out4]
"+f"(sum_out4), [sum_out3]
"+f"(sum_out3),
 
  263               [sum_out2]
"+f"(sum_out2), [sum_out1]
"+f"(sum_out1),
 
  264               [fc_val]
"=&f"(fc_val), [p_filter_coeffs]
"+r"(p_filter_coeffs),
 
  265               [p_in]
"+r"(p_in), [i]
"+r"(i)
 
  267             : 
"$f0", 
"$f1", 
"$f2", 
"$f3", 
"$f4", 
"$f5", 
"$f6", 
"$f7", 
"memory"