On Jun 1, 2019 4:16 PM, "Aleksandar Markovic" <amarko...@wavecomp.com> wrote: > > > From: Mateja Marjanovic <mateja.marjano...@rt-rk.com> > > Sent: Monday, March 4, 2019 5:51 PM > > To: qemu-devel@nongnu.org > > Cc: aurel...@aurel32.net; Aleksandar Markovic; Aleksandar Rikalo > > Subject: [PATCH 1/2] target/mips: Improve performance for MSA binary operations > > > > From: Mateja Marjanovic <mateja.marjano...@rt-rk.com> > > > > Eliminate loops for better performance. > > > > Signed-off-by: Mateja Marjanovic <mateja.marjano...@rt-rk.com> > > --- > > target/mips/msa_helper.c | 43 ++++++++++++++++++++++++++++++------------- > > 1 file changed, 30 insertions(+), 13 deletions(-) > > > > The commit message should be a little bit more informative - for example, > it could list the affected instructions. Please consider other groups of > MSA instructions that are implemented via helpers that use similar "for" > loops. Otherwise: > > Reviewed-by: Aleksandar Markovic <amarko...@wavecomp.com> >
Mateja, you don't need to do anything regarding this patch, I am going to fix the issues while appying. Thanks, Aleksandar > > diff --git a/target/mips/msa_helper.c b/target/mips/msa_helper.c > > index 4c7ec05..1152fda 100644 > > --- a/target/mips/msa_helper.c > > +++ b/target/mips/msa_helper.c > > @@ -804,28 +804,45 @@ void helper_msa_ ## func ## _df(CPUMIPSState *env, uint32_t > df, \ > > wr_t *pwd = &(env->active_fpu.fpr[wd].wr); \ > > wr_t *pws = &(env->active_fpu.fpr[ws].wr); \ > > wr_t *pwt = &(env->active_fpu.fpr[wt].wr); \ > > - uint32_t i; \ > > \ > > switch (df) { \ > > case DF_BYTE: \ > > - for (i = 0; i < DF_ELEMENTS(DF_BYTE); i++) { \ > > - pwd->b[i] = msa_ ## func ## _df(df, pws->b[i], pwt->b[i]); \ > > - } \ > > + pwd->b[0] = msa_ ## func ## _df(df, pws->b[0], pwt->b[0]); \ > > + pwd->b[1] = msa_ ## func ## _df(df, pws->b[1], pwt->b[1]); \ > > + pwd->b[2] = msa_ ## func ## _df(df, pws->b[2], pwt->b[2]); \ > > + pwd->b[3] = msa_ ## func ## _df(df, pws->b[3], pwt->b[3]); \ > > + pwd->b[4] = msa_ ## func ## _df(df, pws->b[4], pwt->b[4]); \ > > + pwd->b[5] = msa_ ## func ## _df(df, pws->b[5], pwt->b[5]); \ > > + pwd->b[6] = msa_ ## func ## _df(df, pws->b[6], pwt->b[6]); \ > > + pwd->b[7] = msa_ ## func ## _df(df, pws->b[7], pwt->b[7]); \ > > + pwd->b[8] = msa_ ## func ## _df(df, pws->b[8], pwt->b[8]); \ > > + pwd->b[9] = msa_ ## func ## _df(df, pws->b[9], pwt->b[9]); \ > > + pwd->b[10] = msa_ ## func ## _df(df, pws->b[10], pwt->b[10]); \ > > + pwd->b[11] = msa_ ## func ## _df(df, pws->b[11], pwt->b[11]); \ > > + pwd->b[12] = msa_ ## func ## _df(df, pws->b[12], pwt->b[12]); \ > > + pwd->b[13] = msa_ ## func ## _df(df, pws->b[13], pwt->b[13]); \ > > + pwd->b[14] = msa_ ## func ## _df(df, pws->b[14], pwt->b[14]); \ > > + pwd->b[15] = msa_ ## func ## _df(df, pws->b[15], pwt->b[15]); \ > > break; \ > > case DF_HALF: \ > > - for (i = 0; i < DF_ELEMENTS(DF_HALF); i++) { \ > > - pwd->h[i] = msa_ ## func ## _df(df, pws->h[i], pwt->h[i]); \ > > - } \ > > + pwd->h[0] = msa_ ## func ## _df(df, pws->h[0], pwt->h[0]); \ > > + pwd->h[1] = msa_ ## func ## _df(df, pws->h[1], pwt->h[1]); \ > > + pwd->h[2] = msa_ ## func ## _df(df, pws->h[2], pwt->h[2]); \ > > + pwd->h[3] = msa_ ## func ## _df(df, pws->h[3], pwt->h[3]); \ > > + pwd->h[4] = msa_ ## func ## _df(df, pws->h[4], pwt->h[4]); \ > > + pwd->h[5] = msa_ ## func ## _df(df, pws->h[5], pwt->h[5]); \ > > + pwd->h[6] = msa_ ## func ## _df(df, pws->h[6], pwt->h[6]); \ > > + pwd->h[7] = msa_ ## func ## _df(df, pws->h[7], pwt->h[7]); \ > > break; \ > > case DF_WORD: \ > > - for (i = 0; i < DF_ELEMENTS(DF_WORD); i++) { \ > > - pwd->w[i] = msa_ ## func ## _df(df, pws->w[i], pwt->w[i]); \ > > - } \ > > + pwd->w[0] = msa_ ## func ## _df(df, pws->w[0], pwt->w[0]); \ > > + pwd->w[1] = msa_ ## func ## _df(df, pws->w[1], pwt->w[1]); \ > > + pwd->w[2] = msa_ ## func ## _df(df, pws->w[2], pwt->w[2]); \ > > + pwd->w[3] = msa_ ## func ## _df(df, pws->w[3], pwt->w[3]); \ > > break; \ > > case DF_DOUBLE: \ > > - for (i = 0; i < DF_ELEMENTS(DF_DOUBLE); i++) { \ > > - pwd->d[i] = msa_ ## func ## _df(df, pws->d[i], pwt->d[i]); \ > > - } \ > > + pwd->d[0] = msa_ ## func ## _df(df, pws->d[0], pwt->d[0]); \ > > + pwd->d[1] = msa_ ## func ## _df(df, pws->d[1], pwt->d[1]); \ > > break; \ > > default: \ > > assert(0); \ > > -- > > 2.7.4 > > > >