56 #ifndef AVCODEC_MIPS_AACPSY_MIPS_H 
   57 #define AVCODEC_MIPS_AACPSY_MIPS_H 
   59 #if HAVE_INLINE_ASM && HAVE_MIPSFPU && ( PSY_LAME_FIR_LEN == 21 ) 
   60 static void calc_thr_3gpp_mips(
const FFPsyWindowInfo *wi, 
const int num_bands,
 
   67         for (g = 0; g < num_bands; g++) {
 
   70             float form_factor = 0.0f;
 
   73             for (i = 0; i < band_sizes[
g]; i+=4) {
 
   76                 float *cf = (
float *)&coefs[start+i];
 
   79                     "lwc1   %[a],   0(%[cf])                \n\t" 
   80                     "lwc1   %[b],   4(%[cf])                \n\t" 
   81                     "lwc1   %[c],   8(%[cf])                \n\t" 
   82                     "lwc1   %[d],   12(%[cf])               \n\t" 
   83                     "abs.s  %[a],   %[a]                    \n\t" 
   84                     "abs.s  %[b],   %[b]                    \n\t" 
   85                     "abs.s  %[c],   %[c]                    \n\t" 
   86                     "abs.s  %[d],   %[d]                    \n\t" 
   87                     "sqrt.s %[ax],  %[a]                    \n\t" 
   88                     "sqrt.s %[bx],  %[b]                    \n\t" 
   89                     "sqrt.s %[cx],  %[c]                    \n\t" 
   90                     "sqrt.s %[dx],  %[d]                    \n\t" 
   91                     "madd.s %[e],   %[e],   %[a],   %[a]    \n\t" 
   92                     "madd.s %[e],   %[e],   %[b],   %[b]    \n\t" 
   93                     "madd.s %[e],   %[e],   %[c],   %[c]    \n\t" 
   94                     "madd.s %[e],   %[e],   %[d],   %[d]    \n\t" 
   95                     "add.s  %[f],   %[f],   %[ax]           \n\t" 
   96                     "add.s  %[f],   %[f],   %[bx]           \n\t" 
   97                     "add.s  %[f],   %[f],   %[cx]           \n\t" 
   98                     "add.s  %[f],   %[f],   %[dx]           \n\t" 
  100                     : [
a]
"=&f"(
a), [b]
"=&f"(b),
 
  101                       [
c]
"=&f"(
c), [d]
"=&f"(d),
 
  102                       [e]
"+f"(band->
energy), [f]
"+f"(form_factor),
 
  103                       [ax]
"=&f"(ax), [bx]
"=&f"(bx),
 
  104                       [cx]
"=&f"(cx), [dx]
"=&f"(dx)
 
  110             Temp = sqrtf((
float)band_sizes[g] / band->
energy);
 
  112             band->
nz_lines = form_factor * sqrtf(Temp);
 
  113             start += band_sizes[
g];
 
  118 static void psy_hp_filter_mips(
const float *firbuf, 
float *hpfsmpl, 
const float * 
psy_fir_coeffs)
 
  120     float sum1, sum2, sum3, sum4;
 
  121     float *fb = (
float*)firbuf;
 
  125     float coeff0 = psy_fir_coeffs[1];
 
  126     float coeff1 = psy_fir_coeffs[3];
 
  127     float coeff2 = psy_fir_coeffs[5];
 
  128     float coeff3 = psy_fir_coeffs[7];
 
  129     float coeff4 = psy_fir_coeffs[9];
 
  133         ".set noreorder                                     \n\t" 
  135         "li.s   $f12,       32768                           \n\t" 
  137         "lwc1   $f0,        40(%[fb])                       \n\t" 
  138         "lwc1   $f1,        4(%[fb])                        \n\t" 
  139         "lwc1   $f2,        80(%[fb])                       \n\t" 
  140         "lwc1   $f3,        44(%[fb])                       \n\t" 
  141         "lwc1   $f4,        8(%[fb])                        \n\t" 
  142         "madd.s %[sum1],    $f0,        $f1,    %[coeff0]   \n\t" 
  143         "lwc1   $f5,        84(%[fb])                       \n\t" 
  144         "lwc1   $f6,        48(%[fb])                       \n\t" 
  145         "madd.s %[sum2],    $f3,        $f4,    %[coeff0]   \n\t" 
  146         "lwc1   $f7,        12(%[fb])                       \n\t" 
  147         "madd.s %[sum1],    %[sum1],    $f2,    %[coeff0]   \n\t" 
  148         "lwc1   $f8,        88(%[fb])                       \n\t" 
  149         "lwc1   $f9,        52(%[fb])                       \n\t" 
  150         "madd.s %[sum2],    %[sum2],    $f5,    %[coeff0]   \n\t" 
  151         "madd.s %[sum3],    $f6,        $f7,    %[coeff0]   \n\t" 
  152         "lwc1   $f10,       16(%[fb])                       \n\t" 
  153         "lwc1   $f11,       92(%[fb])                       \n\t" 
  154         "madd.s %[sum1],    %[sum1],    $f7,    %[coeff1]   \n\t" 
  155         "lwc1   $f1,        72(%[fb])                       \n\t" 
  156         "madd.s %[sum3],    %[sum3],    $f8,    %[coeff0]   \n\t" 
  157         "madd.s %[sum4],    $f9,        $f10,   %[coeff0]   \n\t" 
  158         "madd.s %[sum2],    %[sum2],    $f10,   %[coeff1]   \n\t" 
  159         "madd.s %[sum1],    %[sum1],    $f1,    %[coeff1]   \n\t" 
  160         "lwc1   $f4,        76(%[fb])                       \n\t" 
  161         "lwc1   $f8,        20(%[fb])                       \n\t" 
  162         "madd.s %[sum4],    %[sum4],    $f11,   %[coeff0]   \n\t" 
  163         "lwc1   $f11,       24(%[fb])                       \n\t" 
  164         "madd.s %[sum2],    %[sum2],    $f4,    %[coeff1]   \n\t" 
  165         "madd.s %[sum1],    %[sum1],    $f8,    %[coeff2]   \n\t" 
  166         "madd.s %[sum3],    %[sum3],    $f8,    %[coeff1]   \n\t" 
  167         "madd.s %[sum4],    %[sum4],    $f11,   %[coeff1]   \n\t" 
  168         "lwc1   $f7,        64(%[fb])                       \n\t" 
  169         "madd.s %[sum2],    %[sum2],    $f11,   %[coeff2]   \n\t" 
  170         "lwc1   $f10,       68(%[fb])                       \n\t" 
  171         "madd.s %[sum3],    %[sum3],    $f2,    %[coeff1]   \n\t" 
  172         "madd.s %[sum4],    %[sum4],    $f5,    %[coeff1]   \n\t" 
  173         "madd.s %[sum1],    %[sum1],    $f7,    %[coeff2]   \n\t" 
  174         "madd.s %[sum2],    %[sum2],    $f10,   %[coeff2]   \n\t" 
  175         "lwc1   $f2,        28(%[fb])                       \n\t" 
  176         "lwc1   $f5,        32(%[fb])                       \n\t" 
  177         "lwc1   $f8,        56(%[fb])                       \n\t" 
  178         "lwc1   $f11,       60(%[fb])                       \n\t" 
  179         "madd.s %[sum3],    %[sum3],    $f2,    %[coeff2]   \n\t" 
  180         "madd.s %[sum4],    %[sum4],    $f5,    %[coeff2]   \n\t" 
  181         "madd.s %[sum1],    %[sum1],    $f2,    %[coeff3]   \n\t" 
  182         "madd.s %[sum2],    %[sum2],    $f5,    %[coeff3]   \n\t" 
  183         "madd.s %[sum3],    %[sum3],    $f1,    %[coeff2]   \n\t" 
  184         "madd.s %[sum4],    %[sum4],    $f4,    %[coeff2]   \n\t" 
  185         "madd.s %[sum1],    %[sum1],    $f8,    %[coeff3]   \n\t" 
  186         "madd.s %[sum2],    %[sum2],    $f11,   %[coeff3]   \n\t" 
  187         "lwc1   $f1,        36(%[fb])                       \n\t" 
  188         "addiu  %[fb],      %[fb],      16                  \n\t" 
  189         "madd.s %[sum4],    %[sum4],    $f0,    %[coeff3]   \n\t" 
  190         "madd.s %[sum3],    %[sum3],    $f1,    %[coeff3]   \n\t" 
  191         "madd.s %[sum1],    %[sum1],    $f1,    %[coeff4]   \n\t" 
  192         "madd.s %[sum2],    %[sum2],    $f0,    %[coeff4]   \n\t" 
  193         "madd.s %[sum4],    %[sum4],    $f10,   %[coeff3]   \n\t" 
  194         "madd.s %[sum3],    %[sum3],    $f7,    %[coeff3]   \n\t" 
  195         "madd.s %[sum1],    %[sum1],    $f6,    %[coeff4]   \n\t" 
  196         "madd.s %[sum2],    %[sum2],    $f9,    %[coeff4]   \n\t" 
  197         "madd.s %[sum4],    %[sum4],    $f6,    %[coeff4]   \n\t" 
  198         "madd.s %[sum3],    %[sum3],    $f3,    %[coeff4]   \n\t" 
  199         "mul.s  %[sum1],    %[sum1],    $f12                \n\t" 
  200         "mul.s  %[sum2],    %[sum2],    $f12                \n\t" 
  201         "madd.s %[sum4],    %[sum4],    $f11,   %[coeff4]   \n\t" 
  202         "madd.s %[sum3],    %[sum3],    $f8,    %[coeff4]   \n\t" 
  203         "swc1   %[sum1],    0(%[hp])                        \n\t" 
  204         "swc1   %[sum2],    4(%[hp])                        \n\t" 
  205         "mul.s  %[sum4],    %[sum4],    $f12                \n\t" 
  206         "mul.s  %[sum3],    %[sum3],    $f12                \n\t" 
  207         "swc1   %[sum4],    12(%[hp])                       \n\t" 
  208         "swc1   %[sum3],    8(%[hp])                        \n\t" 
  209         "bne    %[fb],      %[fb_end],  1b                  \n\t" 
  210         " addiu %[hp],      %[hp],      16                  \n\t" 
  214         : [sum1]
"=&f"(sum1), [sum2]
"=&f"(sum2),
 
  215           [sum3]
"=&f"(sum3), [sum4]
"=&f"(sum4),
 
  216           [fb]
"+r"(fb), [hp]
"+r"(hp)
 
  217         : [coeff0]
"f"(coeff0), [coeff1]
"f"(coeff1),
 
  218           [coeff2]
"f"(coeff2), [coeff3]
"f"(coeff3),
 
  219           [coeff4]
"f"(coeff4), [fb_end]
"r"(fb_end)
 
  220         : 
"$f0", 
"$f1", 
"$f2", 
"$f3", 
"$f4", 
"$f5", 
"$f6",
 
  221           "$f7", 
"$f8", 
"$f9", 
"$f10", 
"$f11", 
"$f12",
 
  226 #define calc_thr_3gpp calc_thr_3gpp_mips 
  227 #define psy_hp_filter psy_hp_filter_mips