On 29/10/14 01:41, Yongbok Kim wrote: > add msa_helper.c > > Signed-off-by: Yongbok Kim <yongbok....@imgtec.com> > --- > target-mips/Makefile.objs | 2 +- > target-mips/msa_helper.c | 49 > +++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 50 insertions(+), 1 deletions(-) > create mode 100644 target-mips/msa_helper.c > > diff --git a/target-mips/Makefile.objs b/target-mips/Makefile.objs > index 716244f..108fd9b 100644 > --- a/target-mips/Makefile.objs > +++ b/target-mips/Makefile.objs > @@ -1,4 +1,4 @@ > obj-y += translate.o dsp_helper.o op_helper.o lmi_helper.o helper.o cpu.o > -obj-y += gdbstub.o > +obj-y += gdbstub.o msa_helper.o > obj-$(CONFIG_SOFTMMU) += machine.o > obj-$(CONFIG_KVM) += kvm.o > diff --git a/target-mips/msa_helper.c b/target-mips/msa_helper.c > new file mode 100644 > index 0000000..b65fb27 > --- /dev/null > +++ b/target-mips/msa_helper.c > @@ -0,0 +1,49 @@ > +/* > + * MIPS SIMD Architecture Module Instruction emulation helpers for QEMU. > + * > + * Copyright (c) 2014 Imagination Technologies > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2 of the License, or (at your option) any later version. > + * > + * This library is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library; if not, see > <http://www.gnu.org/licenses/>. > + */ > + > +#include "cpu.h" > +#include "exec/helper-proto.h" > + > +/* Data format min and max values */ > +#define DF_BITS(df) (1 << ((df) + 3)) > + > +#define DF_MAX_INT(df) (int64_t)((1LL << (DF_BITS(df) - 1)) - 1) > +#define M_MAX_INT(m) (int64_t)((1LL << ((m) - 1)) - 1) > + > +#define DF_MIN_INT(df) (int64_t)(-(1LL << (DF_BITS(df) - 1))) > +#define M_MIN_INT(m) (int64_t)(-(1LL << ((m) - 1))) > + > +#define DF_MAX_UINT(df) (uint64_t)(-1ULL >> (64 - DF_BITS(df))) > +#define M_MAX_UINT(m) (uint64_t)(-1ULL >> (64 - (m))) > + > +#define UNSIGNED(x, df) ((x) & DF_MAX_UINT(df)) > +#define SIGNED(x, df) \ > + ((((int64_t)x) << (64 - DF_BITS(df))) >> (64 - DF_BITS(df))) > + > +/* Element-by-element access macros */ > +#define DF_ELEMENTS(df) (MSA_WRLEN / DF_BITS(df)) > + > +static inline void msa_move_v(wr_t *pwd, wr_t *pws) > +{ > + uint32_t i; > + > + for (i = 0; i < DF_ELEMENTS(DF_DOUBLE); i++) { > + pwd->d[i] = pws->d[i]; > + } > +}
Reviewed-by: Leon Alrae <leon.al...@imgtec.com>