58 #if HAVE_INLINE_ASM && HAVE_MIPSFPU    59 #if !HAVE_MIPS32R6 && !HAVE_MIPS64R6    60 static void vector_fmul_mips(
float *dst, 
const float *
src0, 
const float *
src1,
    66         for (i = 0; i < 
len; i++)
    67             dst[i] = src0[i] * src1[i];
    69         float *d     = (
float *)dst;
    70         float *d_end = d + 
len;
    71         float *
s0    = (
float *)src0;
    72         float *
s1    = (
float *)src1;
    74         float src0_0, src0_1, src0_2, src0_3;
    75         float src1_0, src1_1, src1_2, src1_3;
    79             "lwc1   %[src0_0],  0(%[s0])                \n\t"    80             "lwc1   %[src1_0],  0(%[s1])                \n\t"    81             "lwc1   %[src0_1],  4(%[s0])                \n\t"    82             "lwc1   %[src1_1],  4(%[s1])                \n\t"    83             "lwc1   %[src0_2],  8(%[s0])                \n\t"    84             "lwc1   %[src1_2],  8(%[s1])                \n\t"    85             "lwc1   %[src0_3],  12(%[s0])               \n\t"    86             "lwc1   %[src1_3],  12(%[s1])               \n\t"    87             "mul.s  %[src0_0],  %[src0_0],  %[src1_0]   \n\t"    88             "mul.s  %[src0_1],  %[src0_1],  %[src1_1]   \n\t"    89             "mul.s  %[src0_2],  %[src0_2],  %[src1_2]   \n\t"    90             "mul.s  %[src0_3],  %[src0_3],  %[src1_3]   \n\t"    91             "swc1   %[src0_0],  0(%[d])                 \n\t"    92             "swc1   %[src0_1],  4(%[d])                 \n\t"    93             "swc1   %[src0_2],  8(%[d])                 \n\t"    94             "swc1   %[src0_3],  12(%[d])                \n\t"    98             "bne    %[d],       %[d_end],   1b          \n\t"   100             : [src0_0]
"=&f"(src0_0), [src0_1]
"=&f"(src0_1),
   101               [src0_2]
"=&f"(src0_2), [src0_3]
"=&f"(src0_3),
   102               [src1_0]
"=&f"(src1_0), [src1_1]
"=&f"(src1_1),
   103               [src1_2]
"=&f"(src1_2), [src1_3]
"=&f"(src1_3),
   104               [d]
"+r"(d), [s0]
"+r"(s0), [
s1]
"+r"(
s1)
   111 static void vector_fmul_scalar_mips(
float *dst, 
const float *
src, 
float mul,
   114     float temp0, temp1, temp2, temp3;
   115     float *local_src = (
float*)src;
   116     float *
end = local_src + 
len;
   121         ".set    noreorder                        \n\t"   123         "lwc1    %[temp0],   0(%[src])            \n\t"   124         "lwc1    %[temp1],   4(%[src])            \n\t"   125         "lwc1    %[temp2],   8(%[src])            \n\t"   126         "lwc1    %[temp3],   12(%[src])           \n\t"   128         "mul.s   %[temp0],   %[temp0],   %[mul]   \n\t"   129         "mul.s   %[temp1],   %[temp1],   %[mul]   \n\t"   130         "mul.s   %[temp2],   %[temp2],   %[mul]   \n\t"   131         "mul.s   %[temp3],   %[temp3],   %[mul]   \n\t"   133         "swc1    %[temp0],   -16(%[dst])          \n\t"   134         "swc1    %[temp1],   -12(%[dst])          \n\t"   135         "swc1    %[temp2],   -8(%[dst])           \n\t"   136         "bne     %[src],     %[end],     1b       \n\t"   137         " swc1   %[temp3],   -4(%[dst])           \n\t"   140         : [temp0]
"=&f"(temp0), [temp1]
"=&f"(temp1),
   141           [temp2]
"=&f"(temp2), [temp3]
"=&f"(temp3),
   142           [dst]
"+r"(dst), [src]
"+r"(local_src)
   143         : [
end]
"r"(
end), [mul]
"f"(mul)
   148 static void vector_fmul_window_mips(
float *dst, 
const float *src0,
   149                                     const float *src1, 
const float *
win, 
int len)
   151     float * dst_j, *win_j, *src0_i, *src1_j, *dst_i, *win_i;
   152     float temp, temp1, temp2, temp3;
   153     float s0, s01, 
s1, s11;
   154     float wi, wi1, wi2, wi3;
   155     float wj, wj1, wj2, wj3;
   156     const float * lp_end = win + 
len;
   158     win_i  = (
float *)win;
   159     win_j  = (
float *)(win + 2 * len -1);
   160     src1_j = (
float *)(src1 + len - 1);
   161     src0_i = (
float *)src0;
   162     dst_i  = (
float *)dst;
   163     dst_j  = (
float *)(dst + 2 * len -1);
   168         "lwc1    %[s1],     0(%[src1_j])                \n\t"   169         "lwc1    %[wi],     0(%[win_i])                 \n\t"   170         "lwc1    %[wj],     0(%[win_j])                 \n\t"   171         "lwc1    %[s11],   -4(%[src1_j])                \n\t"   172         "lwc1    %[wi1],    4(%[win_i])                 \n\t"   173         "lwc1    %[wj1],   -4(%[win_j])                 \n\t"   174         "lwc1    %[s0],     0(%[src0_i])                \n\t"   175         "lwc1    %[s01],    4(%[src0_i])                \n\t"   176         "mul.s   %[temp],   %[s1],   %[wi]              \n\t"   177         "mul.s   %[temp1],  %[s1],   %[wj]              \n\t"   178         "mul.s   %[temp2],  %[s11],  %[wi1]             \n\t"   179         "mul.s   %[temp3],  %[s11],  %[wj1]             \n\t"   180         "lwc1    %[s1],    -8(%[src1_j])                \n\t"   181         "lwc1    %[wi2],    8(%[win_i])                 \n\t"   182         "lwc1    %[wj2],   -8(%[win_j])                 \n\t"   183         "lwc1    %[s11],   -12(%[src1_j])               \n\t"   184         "msub.s  %[temp],   %[temp],  %[s0],  %[wj]     \n\t"   185         "madd.s  %[temp1],  %[temp1], %[s0],  %[wi]     \n\t"   186         "msub.s  %[temp2],  %[temp2], %[s01], %[wj1]    \n\t"   187         "madd.s  %[temp3],  %[temp3], %[s01], %[wi1]    \n\t"   188         "lwc1    %[wi3],    12(%[win_i])                \n\t"   189         "lwc1    %[wj3],   -12(%[win_j])                \n\t"   190         "lwc1    %[s0],     8(%[src0_i])                \n\t"   191         "lwc1    %[s01],    12(%[src0_i])               \n\t"   196         "swc1    %[temp],   0(%[dst_i])                 \n\t"    197         "swc1    %[temp1],  0(%[dst_j])                 \n\t"    198         "swc1    %[temp2],  4(%[dst_i])                 \n\t"    199         "swc1    %[temp3], -4(%[dst_j])                 \n\t"    200         "mul.s   %[temp],   %[s1],    %[wi2]            \n\t"   201         "mul.s   %[temp1],  %[s1],    %[wj2]            \n\t"   202         "mul.s   %[temp2],  %[s11],   %[wi3]            \n\t"   203         "mul.s   %[temp3],  %[s11],   %[wj3]            \n\t"   204         "msub.s  %[temp],   %[temp],  %[s0],  %[wj2]    \n\t"   205         "madd.s  %[temp1],  %[temp1], %[s0],  %[wi2]    \n\t"   206         "msub.s  %[temp2],  %[temp2], %[s01], %[wj3]    \n\t"   207         "madd.s  %[temp3],  %[temp3], %[s01], %[wi3]    \n\t"   208         "swc1    %[temp],   8(%[dst_i])                 \n\t"    209         "swc1    %[temp1], -8(%[dst_j])                 \n\t"    210         "swc1    %[temp2],  12(%[dst_i])                \n\t"    211         "swc1    %[temp3], -12(%[dst_j])                \n\t"    214         "bne     %[win_i], %[lp_end], 1b                \n\t"   215         : [
temp]
"=&f"(
temp), [temp1]
"=&f"(temp1), [temp2]
"=&f"(temp2),
   216           [temp3]
"=&f"(temp3), [src0_i]
"+r"(src0_i), [win_i]
"+r"(win_i),
   217           [src1_j]
"+r"(src1_j), [win_j]
"+r"(win_j), [dst_i]
"+r"(dst_i),
   218           [dst_j]
"+r"(dst_j), [
s0] 
"=&f"(
s0), [s01]
"=&f"(s01), [
s1] 
"=&f"(
s1),
   219           [s11]
"=&f"(s11), [wi] 
"=&f"(wi), [wj] 
"=&f"(wj), [wi2]
"=&f"(wi2),
   220           [wj2]
"=&f"(wj2), [wi3]
"=&f"(wi3), [wj3]
"=&f"(wj3), [wi1]
"=&f"(wi1),
   222         : [lp_end]
"r"(lp_end)
   230     float temp0, temp1, temp2, temp3, temp4;
   231     float temp5, temp6, temp7, temp8, temp9;
   232     float temp10, temp11, temp12, temp13, temp14, temp15;
   238         "lwc1     %[temp0],    0(%[v1])                 \n\t"   239         "lwc1     %[temp1],    4(%[v1])                 \n\t"   240         "lwc1     %[temp2],    8(%[v1])                 \n\t"   241         "lwc1     %[temp3],    12(%[v1])                \n\t"   242         "lwc1     %[temp4],    0(%[v2])                 \n\t"   243         "lwc1     %[temp5],    4(%[v2])                 \n\t"   244         "lwc1     %[temp6],    8(%[v2])                 \n\t"   245         "lwc1     %[temp7],    12(%[v2])                \n\t"   246         "beq      %[pom],      $zero,       2f          \n\t"   248         "sub.s    %[temp8],    %[temp0],    %[temp4]    \n\t"   249         "add.s    %[temp9],    %[temp0],    %[temp4]    \n\t"   250         "sub.s    %[temp10],   %[temp1],    %[temp5]    \n\t"   251         "add.s    %[temp11],   %[temp1],    %[temp5]    \n\t"   252         "sub.s    %[temp12],   %[temp2],    %[temp6]    \n\t"   253         "add.s    %[temp13],   %[temp2],    %[temp6]    \n\t"   254         "sub.s    %[temp14],   %[temp3],    %[temp7]    \n\t"   255         "add.s    %[temp15],   %[temp3],    %[temp7]    \n\t"   258         "addiu    %[pom],      %[pom],      -1          \n\t"   259         "lwc1     %[temp0],    0(%[v1])                 \n\t"   260         "lwc1     %[temp1],    4(%[v1])                 \n\t"   261         "lwc1     %[temp2],    8(%[v1])                 \n\t"   262         "lwc1     %[temp3],    12(%[v1])                \n\t"   263         "lwc1     %[temp4],    0(%[v2])                 \n\t"   264         "lwc1     %[temp5],    4(%[v2])                 \n\t"   265         "lwc1     %[temp6],    8(%[v2])                 \n\t"   266         "lwc1     %[temp7],    12(%[v2])                \n\t"   267         "swc1     %[temp9],    -16(%[v1])               \n\t"   268         "swc1     %[temp8],    -16(%[v2])               \n\t"   269         "swc1     %[temp11],   -12(%[v1])               \n\t"   270         "swc1     %[temp10],   -12(%[v2])               \n\t"   271         "swc1     %[temp13],   -8(%[v1])                \n\t"   272         "swc1     %[temp12],   -8(%[v2])                \n\t"   273         "swc1     %[temp15],   -4(%[v1])                \n\t"   274         "swc1     %[temp14],   -4(%[v2])                \n\t"   275         "bgtz     %[pom],      1b                       \n\t"   277         "sub.s    %[temp8],    %[temp0],    %[temp4]    \n\t"   278         "add.s    %[temp9],    %[temp0],    %[temp4]    \n\t"   279         "sub.s    %[temp10],   %[temp1],    %[temp5]    \n\t"   280         "add.s    %[temp11],   %[temp1],    %[temp5]    \n\t"   281         "sub.s    %[temp12],   %[temp2],    %[temp6]    \n\t"   282         "add.s    %[temp13],   %[temp2],    %[temp6]    \n\t"   283         "sub.s    %[temp14],   %[temp3],    %[temp7]    \n\t"   284         "add.s    %[temp15],   %[temp3],    %[temp7]    \n\t"   285         "swc1     %[temp9],    0(%[v1])                 \n\t"   286         "swc1     %[temp8],    0(%[v2])                 \n\t"   287         "swc1     %[temp11],   4(%[v1])                 \n\t"   288         "swc1     %[temp10],   4(%[v2])                 \n\t"   289         "swc1     %[temp13],   8(%[v1])                 \n\t"   290         "swc1     %[temp12],   8(%[v2])                 \n\t"   291         "swc1     %[temp15],   12(%[v1])                \n\t"   292         "swc1     %[temp14],   12(%[v2])                \n\t"   294         : [v1]
"+r"(v1), [v2]
"+r"(v2), [pom]
"+r"(pom), [temp0] 
"=&f" (temp0),
   295           [temp1]
"=&f"(temp1), [temp2]
"=&f"(temp2), [temp3]
"=&f"(temp3),
   296           [temp4]
"=&f"(temp4), [temp5]
"=&f"(temp5), [temp6]
"=&f"(temp6),
   297           [temp7]
"=&f"(temp7), [temp8]
"=&f"(temp8), [temp9]
"=&f"(temp9),
   298           [temp10]
"=&f"(temp10), [temp11]
"=&f"(temp11), [temp12]
"=&f"(temp12),
   299           [temp13]
"=&f"(temp13), [temp14]
"=&f"(temp14), [temp15]
"=&f"(temp15)
   305 static void vector_fmul_reverse_mips(
float *dst, 
const float *src0, 
const float *src1, 
int len){
   307     float temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
   310     for(i=0; i<(len>>2); i++)
   314             "lwc1      %[temp0],     0(%[src0])                 \n\t"   315             "lwc1      %[temp1],     0(%[src1])                 \n\t"   316             "lwc1      %[temp2],     4(%[src0])                 \n\t"   317             "lwc1      %[temp3],     -4(%[src1])                \n\t"   318             "lwc1      %[temp4],     8(%[src0])                 \n\t"   319             "lwc1      %[temp5],     -8(%[src1])                \n\t"   320             "lwc1      %[temp6],     12(%[src0])                \n\t"   321             "lwc1      %[temp7],     -12(%[src1])               \n\t"   322             "mul.s     %[temp0],     %[temp1],     %[temp0]     \n\t"   323             "mul.s     %[temp2],     %[temp3],     %[temp2]     \n\t"   324             "mul.s     %[temp4],     %[temp5],     %[temp4]     \n\t"   325             "mul.s     %[temp6],     %[temp7],     %[temp6]     \n\t"   329             "swc1      %[temp0],     -16(%[dst])                \n\t"   330             "swc1      %[temp2],     -12(%[dst])                \n\t"   331             "swc1      %[temp4],     -8(%[dst])                 \n\t"   332             "swc1      %[temp6],     -4(%[dst])                 \n\t"   334             : [dst]
"+r"(dst), [src0]
"+r"(src0), [
src1]
"+r"(
src1),
   335               [temp0]
"=&f"(temp0), [temp1]
"=&f"(temp1),[temp2]
"=&f"(temp2),
   336               [temp3]
"=&f"(temp3), [temp4]
"=&f"(temp4), [temp5]
"=&f"(temp5),
   337               [temp6]
"=&f"(temp6), [temp7]
"=&f"(temp7)
   347 #if HAVE_INLINE_ASM && HAVE_MIPSFPU   348 #if !HAVE_MIPS32R6 && !HAVE_MIPS64R6 MIPS assembly defines from sys/asm.h but rewritten for use with C inline assembly (rather than from w...
static float win(SuperEqualizerContext *s, float n, int N)
static av_cold int end(AVCodecContext *avctx)
void(* vector_fmul)(float *dst, const float *src0, const float *src1, int len)
Calculate the entry wise product of two vectors of floats and store the result in a vector of floats...
void(* vector_fmul_window)(float *dst, const float *src0, const float *src1, const float *win, int len)
Overlap/add with window function. 
void ff_float_dsp_init_mips(AVFloatDSPContext *fdsp)
void(* butterflies_float)(float *av_restrict v1, float *av_restrict v2, int len)
Calculate the sum and difference of two vectors of floats. 
void(* vector_fmul_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float. 
void(* vector_fmul_reverse)(float *dst, const float *src0, const float *src1, int len)
Calculate the entry wise product of two vectors of floats, and store the result in a vector of floats...