diff --git a/target/mips/msa_helper.c b/target/mips/msa_helper.c index f6e16c2405..be059a3d6f 100644 --- a/target/mips/msa_helper.c +++ b/target/mips/msa_helper.c @@ -42,6 +42,467 @@ /* Element-by-element access macros */ #define DF_ELEMENTS(df) (MSA_WRLEN / DF_BITS(df)) + + +/* + * Bit Count + * --------- + * + * +---------------+----------------------------------------------------------+ + * | NLOC.B | Vector Leading Ones Count (byte) | + * | NLOC.H | Vector Leading Ones Count (halfword) | + * | NLOC.W | Vector Leading Ones Count (word) | + * | NLOC.D | Vector Leading Ones Count (doubleword) | + * | NLZC.B | Vector Leading Zeros Count (byte) | + * | NLZC.H | Vector Leading Zeros Count (halfword) | + * | NLZC.W | Vector Leading Zeros Count (word) | + * | NLZC.D | Vector Leading Zeros Count (doubleword) | + * | PCNT.B | Vector Population Count (byte) | + * | PCNT.H | Vector Population Count (halfword) | + * | PCNT.W | Vector Population Count (word) | + * | PCNT.D | Vector Population Count (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Bit Count group helpers here */ + + +/* + * Bit Move + * -------- + * + * +---------------+----------------------------------------------------------+ + * | BMNZ.V | Vector Bit Move If Not Zero | + * | BMZ.V | Vector Bit Move If Zero | + * | BSEL.V | Vector Bit Select | + * | BINSL.B | Vector Bit Insert Left (byte) | + * | BINSL.H | Vector Bit Insert Left (halfword) | + * | BINSL.W | Vector Bit Insert Left (word) | + * | BINSL.D | Vector Bit Insert Left (doubleword) | + * | BINSR.B | Vector Bit Insert Right (byte) | + * | BINSR.H | Vector Bit Insert Right (halfword) | + * | BINSR.W | Vector Bit Insert Right (word) | + * | BINSR.D | Vector Bit Insert Right (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Bit Move group helpers here */ + + +/* + * Bit Set + * ------- + * + * +---------------+----------------------------------------------------------+ + * | BCLR.B | Vector Bit Clear (byte) | + * | BCLR.H | Vector Bit Clear (halfword) | + * | BCLR.W | Vector Bit Clear (word) | + * | BCLR.D | Vector Bit Clear (doubleword) | + * | BNEG.B | Vector Bit Negate (byte) | + * | BNEG.H | Vector Bit Negate (halfword) | + * | BNEG.W | Vector Bit Negate (word) | + * | BNEG.D | Vector Bit Negate (doubleword) | + * | BSET.B | Vector Bit Set (byte) | + * | BSET.H | Vector Bit Set (halfword) | + * | BSET.W | Vector Bit Set (word) | + * | BSET.D | Vector Bit Set (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Bit Set group helpers here */ + + +/* + * Fixed Multiply + * -------------- + * + * +---------------+----------------------------------------------------------+ + * | MADD_Q.H | Vector Fixed-Point Multiply and Add (halfword) | + * | MADD_Q.W | Vector Fixed-Point Multiply and Add (word) | + * | MADDR_Q.H | Vector Fixed-Point Multiply and Add Rounded (halfword) | + * | MADDR_Q.W | Vector Fixed-Point Multiply and Add Rounded (word) | + * | MSUB_Q.H | Vector Fixed-Point Multiply and Subtr. (halfword) | + * | MSUB_Q.W | Vector Fixed-Point Multiply and Subtr. (word) | + * | MSUBR_Q.H | Vector Fixed-Point Multiply and Subtr. Rounded (halfword)| + * | MSUBR_Q.W | Vector Fixed-Point Multiply and Subtr. Rounded (word) | + * | MUL_Q.H | Vector Fixed-Point Multiply (halfword) | + * | MUL_Q.W | Vector Fixed-Point Multiply (word) | + * | MULR_Q.H | Vector Fixed-Point Multiply Rounded (halfword) | + * | MULR_Q.W | Vector Fixed-Point Multiply Rounded (word) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Fixed Multiply group helpers here */ + + +/* + * Float Max Min + * ------------- + * + * +---------------+----------------------------------------------------------+ + * | FMAX_A.W | Vector Floating-Point Maximum (Absolute) (word) | + * | FMAX_A.D | Vector Floating-Point Maximum (Absolute) (doubleword) | + * | FMAX.W | Vector Floating-Point Maximum (word) | + * | FMAX.D | Vector Floating-Point Maximum (doubleword) | + * | FMIN_A.W | Vector Floating-Point Minimum (Absolute) (word) | + * | FMIN_A.D | Vector Floating-Point Minimum (Absolute) (doubleword) | + * | FMIN.W | Vector Floating-Point Minimum (word) | + * | FMIN.D | Vector Floating-Point Minimum (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Float Max Min group helpers here */ + + +/* + * Int Add + * ------- + * + * +---------------+----------------------------------------------------------+ + * | ADD_A.B | Vector Add Absolute Values (byte) | + * | ADD_A.H | Vector Add Absolute Values (halfword) | + * | ADD_A.W | Vector Add Absolute Values (word) | + * | ADD_A.D | Vector Add Absolute Values (doubleword) | + * | ADDS_A.B | Vector Signed Saturated Add (of Absolute) (byte) | + * | ADDS_A.H | Vector Signed Saturated Add (of Absolute) (halfword) | + * | ADDS_A.W | Vector Signed Saturated Add (of Absolute) (word) | + * | ADDS_A.D | Vector Signed Saturated Add (of Absolute) (doubleword) | + * | ADDS_S.B | Vector Signed Saturated Add (of Signed) (byte) | + * | ADDS_S.H | Vector Signed Saturated Add (of Signed) (halfword) | + * | ADDS_S.W | Vector Signed Saturated Add (of Signed) (word) | + * | ADDS_S.D | Vector Signed Saturated Add (of Signed) (doubleword) | + * | ADDS_U.B | Vector Unsigned Saturated Add (of Unsigned) (byte) | + * | ADDS_U.H | Vector Unsigned Saturated Add (of Unsigned) (halfword) | + * | ADDS_U.W | Vector Unsigned Saturated Add (of Unsigned) (word) | + * | ADDS_U.D | Vector Unsigned Saturated Add (of Unsigned) (doubleword) | + * | ADDV.B | Vector Add (byte) | + * | ADDV.H | Vector Add (halfword) | + * | ADDV.W | Vector Add (word) | + * | ADDV.D | Vector Add (doubleword) | + * | HSUB_S.H | Vector Signed Horizontal Add (halfword) | + * | HSUB_S.W | Vector Signed Horizontal Add (word) | + * | HSUB_S.D | Vector Signed Horizontal Add (doubleword) | + * | HSUB_U.H | Vector Unigned Horizontal Add (halfword) | + * | HSUB_U.W | Vector Unigned Horizontal Add (word) | + * | HSUB_U.D | Vector Unigned Horizontal Add (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Int Add group helpers here */ + + +/* + * Int Average + * ----------- + * + * +---------------+----------------------------------------------------------+ + * | AVE_S.B | Vector Signed Average (byte) | + * | AVE_S.H | Vector Signed Average (halfword) | + * | AVE_S.W | Vector Signed Average (word) | + * | AVE_S.D | Vector Signed Average (doubleword) | + * | AVE_U.B | Vector Unsigned Average (byte) | + * | AVE_U.H | Vector Unsigned Average (halfword) | + * | AVE_U.W | Vector Unsigned Average (word) | + * | AVE_U.D | Vector Unsigned Average (doubleword) | + * | AVER_S.B | Vector Signed Average Rounded (byte) | + * | AVER_S.H | Vector Signed Average Rounded (halfword) | + * | AVER_S.W | Vector Signed Average Rounded (word) | + * | AVER_S.D | Vector Signed Average Rounded (doubleword) | + * | AVER_U.B | Vector Unsigned Average Rounded (byte) | + * | AVER_U.H | Vector Unsigned Average Rounded (halfword) | + * | AVER_U.W | Vector Unsigned Average Rounded (word) | + * | AVER_U.D | Vector Unsigned Average Rounded (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Int Average group helpers here */ + + +/* + * Int Compare + * ----------- + * + * +---------------+----------------------------------------------------------+ + * | CEQ.B | Vector Compare Equal (byte) | + * | CEQ.H | Vector Compare Equal (halfword) | + * | CEQ.W | Vector Compare Equal (word) | + * | CEQ.D | Vector Compare Equal (doubleword) | + * | CLE_S.B | Vector Compare Signed Less Than or Equal (byte) | + * | CLE_S.H | Vector Compare Signed Less Than or Equal (halfword) | + * | CLE_S.W | Vector Compare Signed Less Than or Equal (word) | + * | CLE_S.D | Vector Compare Signed Less Than or Equal (doubleword) | + * | CLE_U.B | Vector Compare Unsigned Less Than or Equal (byte) | + * | CLE_U.H | Vector Compare Unsigned Less Than or Equal (halfword) | + * | CLE_U.W | Vector Compare Unsigned Less Than or Equal (word) | + * | CLE_U.D | Vector Compare Unsigned Less Than or Equal (doubleword) | + * | CLT_S.B | Vector Compare Signed Less Than (byte) | + * | CLT_S.H | Vector Compare Signed Less Than (halfword) | + * | CLT_S.W | Vector Compare Signed Less Than (word) | + * | CLT_S.D | Vector Compare Signed Less Than (doubleword) | + * | CLT_U.B | Vector Compare Unsigned Less Than (byte) | + * | CLT_U.H | Vector Compare Unsigned Less Than (halfword) | + * | CLT_U.W | Vector Compare Unsigned Less Than (word) | + * | CLT_U.D | Vector Compare Unsigned Less Than (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Int Compare group helpers here */ + + +/* + * Int Divide + * ---------- + * + * +---------------+----------------------------------------------------------+ + * | DIV_S.B | Vector Signed Divide (byte) | + * | DIV_S.H | Vector Signed Divide (halfword) | + * | DIV_S.W | Vector Signed Divide (word) | + * | DIV_S.D | Vector Signed Divide (doubleword) | + * | DIV_U.B | Vector Unsigned Divide (byte) | + * | DIV_U.H | Vector Unsigned Divide (halfword) | + * | DIV_U.W | Vector Unsigned Divide (word) | + * | DIV_U.D | Vector Unsigned Divide (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Int Divide group helpers here */ + + +/* + * Int Dot Product + * --------------- + * + * +---------------+----------------------------------------------------------+ + * | DOTP_S.H | Vector Signed Dot Product (halfword) | + * | DOTP_S.W | Vector Signed Dot Product (word) | + * | DOTP_S.D | Vector Signed Dot Product (doubleword) | + * | DOTP_U.H | Vector Unsigned Dot Product (halfword) | + * | DOTP_U.W | Vector Unsigned Dot Product (word) | + * | DOTP_U.D | Vector Unsigned Dot Product (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Int Dot Product group helpers here */ + + +/* + * Int Max Min + * ----------- + * + * +---------------+----------------------------------------------------------+ + * | MAX_A.B | Vector Maximum Based on Absolute Value (byte) | + * | MAX_A.H | Vector Maximum Based on Absolute Value (halfword) | + * | MAX_A.W | Vector Maximum Based on Absolute Value (word) | + * | MAX_A.D | Vector Maximum Based on Absolute Value (doubleword) | + * | MAX_S.B | Vector Signed Maximum (byte) | + * | MAX_S.H | Vector Signed Maximum (halfword) | + * | MAX_S.W | Vector Signed Maximum (word) | + * | MAX_S.D | Vector Signed Maximum (doubleword) | + * | MAX_U.B | Vector Unsigned Maximum (byte) | + * | MAX_U.H | Vector Unsigned Maximum (halfword) | + * | MAX_U.W | Vector Unsigned Maximum (word) | + * | MAX_U.D | Vector Unsigned Maximum (doubleword) | + * | MIN_A.B | Vector Minimum Based on Absolute Value (byte) | + * | MIN_A.H | Vector Minimum Based on Absolute Value (halfword) | + * | MIN_A.W | Vector Minimum Based on Absolute Value (word) | + * | MIN_A.D | Vector Minimum Based on Absolute Value (doubleword) | + * | MIN_S.B | Vector Signed Minimum (byte) | + * | MIN_S.H | Vector Signed Minimum (halfword) | + * | MIN_S.W | Vector Signed Minimum (word) | + * | MIN_S.D | Vector Signed Minimum (doubleword) | + * | MIN_U.B | Vector Unsigned Minimum (byte) | + * | MIN_U.H | Vector Unsigned Minimum (halfword) | + * | MIN_U.W | Vector Unsigned Minimum (word) | + * | MIN_U.D | Vector Unsigned Minimum (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Int Max Min group helpers here */ + + +/* + * Int Modulo + * ---------- + * + * +---------------+----------------------------------------------------------+ + * | MOD_S.B | Vector Signed Modulo (byte) | + * | MOD_S.H | Vector Signed Modulo (halfword) | + * | MOD_S.W | Vector Signed Modulo (word) | + * | MOD_S.D | Vector Signed Modulo (doubleword) | + * | MOD_U.B | Vector Unsigned Modulo (byte) | + * | MOD_U.H | Vector Unsigned Modulo (halfword) | + * | MOD_U.W | Vector Unsigned Modulo (word) | + * | MOD_U.D | Vector Unsigned Modulo (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Int Modulo group helpers here */ + + +/* + * Int Multiply + * ------------ + * + * +---------------+----------------------------------------------------------+ + * | MADDV.B | Vector Multiply and Add (byte) | + * | MADDV.H | Vector Multiply and Add (halfword) | + * | MADDV.W | Vector Multiply and Add (word) | + * | MADDV.D | Vector Multiply and Add (doubleword) | + * | MSUBV.B | Vector Multiply and Subtract (byte) | + * | MSUBV.H | Vector Multiply and Subtract (halfword) | + * | MSUBV.W | Vector Multiply and Subtract (word) | + * | MSUBV.D | Vector Multiply and Subtract (doubleword) | + * | MULV.B | Vector Multiply (byte) | + * | MULV.H | Vector Multiply (halfword) | + * | MULV.W | Vector Multiply (word) | + * | MULV.D | Vector Multiply (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Int Multiply group helpers here */ + + +/* + * Int Subtract + * ------------ + * + * +---------------+----------------------------------------------------------+ + * | ASUB_S.B | Vector Absolute Values of Signed Subtract (byte) | + * | ASUB_S.H | Vector Absolute Values of Signed Subtract (halfword) | + * | ASUB_S.W | Vector Absolute Values of Signed Subtract (word) | + * | ASUB_S.D | Vector Absolute Values of Signed Subtract (doubleword) | + * | ASUB_U.B | Vector Absolute Values of Unsigned Subtract (byte) | + * | ASUB_U.H | Vector Absolute Values of Unsigned Subtract (halfword) | + * | ASUB_U.W | Vector Absolute Values of Unsigned Subtract (word) | + * | ASUB_U.D | Vector Absolute Values of Unsigned Subtract (doubleword) | + * | HSUB_S.H | Vector Signed Horizontal Subtract (halfword) | + * | HSUB_S.W | Vector Signed Horizontal Subtract (word) | + * | HSUB_S.D | Vector Signed Horizontal Subtract (doubleword) | + * | HSUB_U.H | Vector Unigned Horizontal Subtract (halfword) | + * | HSUB_U.W | Vector Unigned Horizontal Subtract (word) | + * | HSUB_U.D | Vector Unigned Horizontal Subtract (doubleword) | + * | SUBS_S.B | Vector Signed Saturated Subtract (of Signed) (byte) | + * | SUBS_S.H | Vector Signed Saturated Subtract (of Signed) (halfword) | + * | SUBS_S.W | Vector Signed Saturated Subtract (of Signed) (word) | + * | SUBS_S.D | Vector Signed Saturated Subtract (of Signed) (doubleword)| + * | SUBS_U.B | Vector Unsigned Saturated Subtract (of Uns.) (byte) | + * | SUBS_U.H | Vector Unsigned Saturated Subtract (of Uns.) (halfword) | + * | SUBS_U.W | Vector Unsigned Saturated Subtract (of Uns.) (word) | + * | SUBS_U.D | Vector Unsigned Saturated Subtract (of Uns.) (doubleword)| + * | SUBSUS_S.B | Vector Uns. Sat. Subtract (of S. from Uns.) (byte) | + * | SUBSUS_S.H | Vector Uns. Sat. Subtract (of S. from Uns.) (halfword) | + * | SUBSUS_S.W | Vector Uns. Sat. Subtract (of S. from Uns.) (word) | + * | SUBSUS_S.D | Vector Uns. Sat. Subtract (of S. from Uns.) (doubleword) | + * | SUBSUU_U.B | Vector Signed Saturated Subtract (of Uns.) (byte) | + * | SUBSUU_U.H | Vector Signed Saturated Subtract (of Uns.) (halfword) | + * | SUBSUU_U.W | Vector Signed Saturated Subtract (of Uns.) (word) | + * | SUBSUU_U.D | Vector Signed Saturated Subtract (of Uns.) (doubleword) | + * | SUBV.B | Vector Subtract (byte) | + * | SUBV.H | Vector Subtract (halfword) | + * | SUBV.W | Vector Subtract (word) | + * | SUBV.D | Vector Subtract (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Int Subtract group helpers here */ + + +/* + * Interleave + * ---------- + * + * +---------------+----------------------------------------------------------+ + * | ILVEV.B | Vector Interleave Even (byte) | + * | ILVEV.H | Vector Interleave Even (halfword) | + * | ILVEV.W | Vector Interleave Even (word) | + * | ILVEV.D | Vector Interleave Even (doubleword) | + * | ILVOD.B | Vector Interleave Odd (byte) | + * | ILVOD.H | Vector Interleave Odd (halfword) | + * | ILVOD.W | Vector Interleave Odd (word) | + * | ILVOD.D | Vector Interleave Odd (doubleword) | + * | ILVL.B | Vector Interleave Left (byte) | + * | ILVL.H | Vector Interleave Left (halfword) | + * | ILVL.W | Vector Interleave Left (word) | + * | ILVL.D | Vector Interleave Left (doubleword) | + * | ILVR.B | Vector Interleave Right (byte) | + * | ILVR.H | Vector Interleave Right (halfword) | + * | ILVR.W | Vector Interleave Right (word) | + * | ILVR.D | Vector Interleave Right (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Interleave group helpers here */ + + +/* + * Logic + * ----- + * + * +---------------+----------------------------------------------------------+ + * | AND.V | Vector Logical And | + * | NOR.V | Vector Logical Negated Or | + * | OR.V | Vector Logical Or | + * | XOR.V | Vector Logical Exclusive Or | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Logic group helpers here */ + + +/* + * Pack + * ---- + * + * +---------------+----------------------------------------------------------+ + * | PCKEV.B | Vector Pack Even (byte) | + * | PCKEV.H | Vector Pack Even (halfword) | + * | PCKEV.W | Vector Pack Even (word) | + * | PCKEV.D | Vector Pack Even (doubleword) | + * | PCKOD.B | Vector Pack Odd (byte) | + * | PCKOD.H | Vector Pack Odd (halfword) | + * | PCKOD.W | Vector Pack Odd (word) | + * | PCKOD.D | Vector Pack Odd (doubleword) | + * | VSHF.B | Vector Data Preserving Shuffle (byte) | + * | VSHF.H | Vector Data Preserving Shuffle (halfword) | + * | VSHF.W | Vector Data Preserving Shuffle (word) | + * | VSHF.D | Vector Data Preserving Shuffle (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Pack group helpers here */ + + +/* + * Shift + * ----- + * + * +---------------+----------------------------------------------------------+ + * | SLL.B | Vector Shift Left (byte) | + * | SLL.H | Vector Shift Left (halfword) | + * | SLL.W | Vector Shift Left (word) | + * | SLL.D | Vector Shift Left (doubleword) | + * | SRA.B | Vector Shift Right Arithmetic (byte) | + * | SRA.H | Vector Shift Right Arithmetic (halfword) | + * | SRA.W | Vector Shift Right Arithmetic (word) | + * | SRA.D | Vector Shift Right Arithmetic (doubleword) | + * | SRAR.B | Vector Shift Right Arithmetic Rounded (byte) | + * | SRAR.H | Vector Shift Right Arithmetic Rounded (halfword) | + * | SRAR.W | Vector Shift Right Arithmetic Rounded (word) | + * | SRAR.D | Vector Shift Right Arithmetic Rounded (doubleword) | + * | SRL.B | Vector Shift Right Logical (byte) | + * | SRL.H | Vector Shift Right Logical (halfword) | + * | SRL.W | Vector Shift Right Logical (word) | + * | SRL.D | Vector Shift Right Logical (doubleword) | + * | SRLR.B | Vector Shift Right Logical Rounded (byte) | + * | SRLR.H | Vector Shift Right Logical Rounded (halfword) | + * | SRLR.W | Vector Shift Right Logical Rounded (word) | + * | SRLR.D | Vector Shift Right Logical Rounded (doubleword) | + * +---------------+----------------------------------------------------------+ + */ + +/* TODO: insert Shift group helpers here */ + + static inline void msa_move_v(wr_t *pwd, wr_t *pws) { uint32_t i; @@ -130,10 +591,6 @@ void helper_msa_ ## FUNC(CPUMIPSState *env, uint32_t wd, uint32_t ws, \ } \ } -MSA_FN_VECTOR(and_v, pwd->d[i], pws->d[i] & pwt->d[i]) -MSA_FN_VECTOR(or_v, pwd->d[i], pws->d[i] | pwt->d[i]) -MSA_FN_VECTOR(nor_v, pwd->d[i], ~(pws->d[i] | pwt->d[i])) -MSA_FN_VECTOR(xor_v, pwd->d[i], pws->d[i] ^ pwt->d[i]) MSA_FN_VECTOR(bmnz_v, pwd->d[i], BIT_MOVE_IF_NOT_ZERO(pwd->d[i], pws->d[i], pwt->d[i], DF_DOUBLE)) MSA_FN_VECTOR(bmz_v, pwd->d[i], @@ -145,6 +602,46 @@ MSA_FN_VECTOR(bsel_v, pwd->d[i], #undef BIT_SELECT #undef MSA_FN_VECTOR +void helper_msa_and_v(CPUMIPSState *env, uint32_t wd, uint32_t ws, uint32_t wt) +{ + 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); + + pwd->d[0] = pws->d[0] & pwt->d[0]; + pwd->d[1] = pws->d[1] & pwt->d[1]; +} + +void helper_msa_or_v(CPUMIPSState *env, uint32_t wd, uint32_t ws, uint32_t wt) +{ + 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); + + pwd->d[0] = pws->d[0] | pwt->d[0]; + pwd->d[1] = pws->d[1] | pwt->d[1]; +} + +void helper_msa_nor_v(CPUMIPSState *env, uint32_t wd, uint32_t ws, uint32_t wt) +{ + 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); + + pwd->d[0] = ~(pws->d[0] | pwt->d[0]); + pwd->d[1] = ~(pws->d[1] | pwt->d[1]); +} + +void helper_msa_xor_v(CPUMIPSState *env, uint32_t wd, uint32_t ws, uint32_t wt) +{ + 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); + + pwd->d[0] = pws->d[0] ^ pwt->d[0]; + pwd->d[1] = pws->d[1] ^ pwt->d[1]; +} + static inline int64_t msa_addv_df(uint32_t df, int64_t arg1, int64_t arg2) { return arg1 + arg2; @@ -360,16 +857,16 @@ static inline int64_t msa_binsr_df(uint32_t df, int64_t dest, int64_t arg1, static inline int64_t msa_sat_s_df(uint32_t df, int64_t arg, uint32_t m) { - return arg < M_MIN_INT(m+1) ? M_MIN_INT(m+1) : - arg > M_MAX_INT(m+1) ? M_MAX_INT(m+1) : - arg; + return arg < M_MIN_INT(m + 1) ? M_MIN_INT(m + 1) : + arg > M_MAX_INT(m + 1) ? M_MAX_INT(m + 1) : + arg; } static inline int64_t msa_sat_u_df(uint32_t df, int64_t arg, uint32_t m) { uint64_t u_arg = UNSIGNED(arg, df); - return u_arg < M_MAX_UINT(m+1) ? u_arg : - M_MAX_UINT(m+1); + return u_arg < M_MAX_UINT(m + 1) ? u_arg : + M_MAX_UINT(m + 1); } static inline int64_t msa_srar_df(uint32_t df, int64_t arg1, int64_t arg2) @@ -668,16 +1165,16 @@ static inline int64_t msa_mod_u_df(uint32_t df, int64_t arg1, int64_t arg2) } #define SIGNED_EVEN(a, df) \ - ((((int64_t)(a)) << (64 - DF_BITS(df)/2)) >> (64 - DF_BITS(df)/2)) + ((((int64_t)(a)) << (64 - DF_BITS(df) / 2)) >> (64 - DF_BITS(df) / 2)) #define UNSIGNED_EVEN(a, df) \ - ((((uint64_t)(a)) << (64 - DF_BITS(df)/2)) >> (64 - DF_BITS(df)/2)) + ((((uint64_t)(a)) << (64 - DF_BITS(df) / 2)) >> (64 - DF_BITS(df) / 2)) #define SIGNED_ODD(a, df) \ - ((((int64_t)(a)) << (64 - DF_BITS(df))) >> (64 - DF_BITS(df)/2)) + ((((int64_t)(a)) << (64 - DF_BITS(df))) >> (64 - DF_BITS(df) / 2)) #define UNSIGNED_ODD(a, df) \ - ((((uint64_t)(a)) << (64 - DF_BITS(df))) >> (64 - DF_BITS(df)/2)) + ((((uint64_t)(a)) << (64 - DF_BITS(df))) >> (64 - DF_BITS(df) / 2)) #define SIGNED_EXTRACT(e, o, a, df) \ do { \ @@ -1205,13 +1702,13 @@ void helper_msa_##FUNC(CPUMIPSState *env, uint32_t df, uint32_t wd, \ (DF_ELEMENTS(DF) / 2) #define Rb(pwr, i) (pwr->b[i]) -#define Lb(pwr, i) (pwr->b[i + DF_ELEMENTS(DF_BYTE)/2]) +#define Lb(pwr, i) (pwr->b[i + DF_ELEMENTS(DF_BYTE) / 2]) #define Rh(pwr, i) (pwr->h[i]) -#define Lh(pwr, i) (pwr->h[i + DF_ELEMENTS(DF_HALF)/2]) +#define Lh(pwr, i) (pwr->h[i + DF_ELEMENTS(DF_HALF) / 2]) #define Rw(pwr, i) (pwr->w[i]) -#define Lw(pwr, i) (pwr->w[i + DF_ELEMENTS(DF_WORD)/2]) +#define Lw(pwr, i) (pwr->w[i + DF_ELEMENTS(DF_WORD) / 2]) #define Rd(pwr, i) (pwr->d[i]) -#define Ld(pwr, i) (pwr->d[i + DF_ELEMENTS(DF_DOUBLE)/2]) +#define Ld(pwr, i) (pwr->d[i + DF_ELEMENTS(DF_DOUBLE) / 2]) #undef MSA_LOOP_COND @@ -1975,8 +2472,10 @@ static inline int update_msacsr(CPUMIPSState *env, int action, int denormal) c &= ~FP_UNDERFLOW; } - /* Reciprocal operations set only Inexact when valid and not - divide by zero */ + /* + * Reciprocal operations set only Inexact when valid and not + * divide by zero + */ if ((action & RECIPROCAL_INEXACT) && (c & (FP_INVALID | FP_DIV0)) == 0) { c = FP_INEXACT; @@ -1985,15 +2484,19 @@ static inline int update_msacsr(CPUMIPSState *env, int action, int denormal) cause = c & enable; /* all current enabled exceptions */ if (cause == 0) { - /* No enabled exception, update the MSACSR Cause - with all current exceptions */ + /* + * No enabled exception, update the MSACSR Cause + * with all current exceptions + */ SET_FP_CAUSE(env->active_tc.msacsr, (GET_FP_CAUSE(env->active_tc.msacsr) | c)); } else { /* Current exceptions are enabled */ if ((env->active_tc.msacsr & MSACSR_NX_MASK) == 0) { - /* Exception(s) will trap, update MSACSR Cause - with all enabled exceptions */ + /* + * Exception(s) will trap, update MSACSR Cause + * with all enabled exceptions + */ SET_FP_CAUSE(env->active_tc.msacsr, (GET_FP_CAUSE(env->active_tc.msacsr) | c)); } @@ -3059,9 +3562,11 @@ void helper_msa_fexdo_df(CPUMIPSState *env, uint32_t df, uint32_t wd, switch (df) { case DF_WORD: for (i = 0; i < DF_ELEMENTS(DF_WORD); i++) { - /* Half precision floats come in two formats: standard - IEEE and "ARM" format. The latter gains extra exponent - range by omitting the NaN/Inf encodings. */ + /* + * Half precision floats come in two formats: standard + * IEEE and "ARM" format. The latter gains extra exponent + * range by omitting the NaN/Inf encodings. + */ flag ieee = 1; MSA_FLOAT_BINOP(Lh(pwx, i), from_float32, pws->w[i], ieee, 16); @@ -3320,7 +3825,7 @@ void helper_msa_fmax_a_df(CPUMIPSState *env, uint32_t df, uint32_t wd, void helper_msa_fclass_df(CPUMIPSState *env, uint32_t df, uint32_t wd, uint32_t ws) { - float_status* status = &env->active_tc.msa_fp_status; + float_status *status = &env->active_tc.msa_fp_status; wr_t *pwd = &(env->active_fpu.fpr[wd].wr); wr_t *pws = &(env->active_fpu.fpr[ws].wr); @@ -3617,9 +4122,11 @@ void helper_msa_fexupl_df(CPUMIPSState *env, uint32_t df, uint32_t wd, switch (df) { case DF_WORD: for (i = 0; i < DF_ELEMENTS(DF_WORD); i++) { - /* Half precision floats come in two formats: standard - IEEE and "ARM" format. The latter gains extra exponent - range by omitting the NaN/Inf encodings. */ + /* + * Half precision floats come in two formats: standard + * IEEE and "ARM" format. The latter gains extra exponent + * range by omitting the NaN/Inf encodings. + */ flag ieee = 1; MSA_FLOAT_BINOP(pwx->w[i], from_float16, Lh(pws, i), ieee, 32); @@ -3651,9 +4158,11 @@ void helper_msa_fexupr_df(CPUMIPSState *env, uint32_t df, uint32_t wd, switch (df) { case DF_WORD: for (i = 0; i < DF_ELEMENTS(DF_WORD); i++) { - /* Half precision floats come in two formats: standard - IEEE and "ARM" format. The latter gains extra exponent - range by omitting the NaN/Inf encodings. */ + /* + * Half precision floats come in two formats: standard + * IEEE and "ARM" format. The latter gains extra exponent + * range by omitting the NaN/Inf encodings. + */ flag ieee = 1; MSA_FLOAT_BINOP(pwx->w[i], from_float16, Rh(pws, i), ieee, 32); diff --git a/tests/tcg/mips/include/wrappers_msa.h b/tests/tcg/mips/include/wrappers_msa.h index 6feda368dd..5d28cb531a 100644 --- a/tests/tcg/mips/include/wrappers_msa.h +++ b/tests/tcg/mips/include/wrappers_msa.h @@ -23,6 +23,54 @@ #define WRAPPERS_MSA_H +#define RESET_MSA_REGISTER(wi) \ + __asm__ volatile ( \ + "xor.v $" #wi ", $" #wi ", $" #wi "\n\t" \ + : \ + : \ + : \ + ) + + +static inline void reset_msa_registers() +{ + + RESET_MSA_REGISTER(w0); + RESET_MSA_REGISTER(w1); + RESET_MSA_REGISTER(w2); + RESET_MSA_REGISTER(w3); + RESET_MSA_REGISTER(w4); + RESET_MSA_REGISTER(w5); + RESET_MSA_REGISTER(w6); + RESET_MSA_REGISTER(w7); + RESET_MSA_REGISTER(w8); + RESET_MSA_REGISTER(w9); + RESET_MSA_REGISTER(w10); + RESET_MSA_REGISTER(w11); + RESET_MSA_REGISTER(w12); + RESET_MSA_REGISTER(w13); + RESET_MSA_REGISTER(w14); + RESET_MSA_REGISTER(w15); + RESET_MSA_REGISTER(w16); + RESET_MSA_REGISTER(w17); + RESET_MSA_REGISTER(w18); + RESET_MSA_REGISTER(w19); + RESET_MSA_REGISTER(w20); + RESET_MSA_REGISTER(w21); + RESET_MSA_REGISTER(w22); + RESET_MSA_REGISTER(w23); + RESET_MSA_REGISTER(w24); + RESET_MSA_REGISTER(w25); + RESET_MSA_REGISTER(w26); + RESET_MSA_REGISTER(w27); + RESET_MSA_REGISTER(w28); + RESET_MSA_REGISTER(w29); + RESET_MSA_REGISTER(w30); + RESET_MSA_REGISTER(w31); + +} + + #define DO_MSA__WD__WS(suffix, mnemonic) \ static inline void do_msa_##suffix(const void *input, \ const void *output) \ @@ -55,21 +103,6 @@ static inline void do_msa_##suffix(const void *input, \ ); \ } -DO_MSA__WD__WS(NLOC_B, nloc.b) -DO_MSA__WD__WS(NLOC_H, nloc.h) -DO_MSA__WD__WS(NLOC_W, nloc.w) -DO_MSA__WD__WS(NLOC_D, nloc.d) - -DO_MSA__WD__WS(NLZC_B, nlzc.b) -DO_MSA__WD__WS(NLZC_H, nlzc.h) -DO_MSA__WD__WS(NLZC_W, nlzc.w) -DO_MSA__WD__WS(NLZC_D, nlzc.d) - -DO_MSA__WD__WS(PCNT_B, pcnt.b) -DO_MSA__WD__WS(PCNT_H, pcnt.h) -DO_MSA__WD__WS(PCNT_W, pcnt.w) -DO_MSA__WD__WS(PCNT_D, pcnt.d) - #define DO_MSA__WD__WS_WT(suffix, mnemonic) \ static inline void do_msa_##suffix(const void *input1, \ @@ -126,85 +159,52 @@ static inline void do_msa_##suffix(void *input1, void *input2, \ ); \ } -DO_MSA__WD__WS_WT(ILVEV_B, ilvev.b) -DO_MSA__WD__WS_WT(ILVEV_H, ilvev.h) -DO_MSA__WD__WS_WT(ILVEV_W, ilvev.w) -DO_MSA__WD__WS_WT(ILVEV_D, ilvev.d) -DO_MSA__WD__WS_WT(ILVOD_B, ilvod.b) -DO_MSA__WD__WS_WT(ILVOD_H, ilvod.h) -DO_MSA__WD__WS_WT(ILVOD_W, ilvod.w) -DO_MSA__WD__WS_WT(ILVOD_D, ilvod.d) +/* + * Bit Count + * --------- + */ -DO_MSA__WD__WS_WT(ILVL_B, ilvl.b) -DO_MSA__WD__WS_WT(ILVL_H, ilvl.h) -DO_MSA__WD__WS_WT(ILVL_W, ilvl.w) -DO_MSA__WD__WS_WT(ILVL_D, ilvl.d) +DO_MSA__WD__WS(NLOC_B, nloc.b) +DO_MSA__WD__WS(NLOC_H, nloc.h) +DO_MSA__WD__WS(NLOC_W, nloc.w) +DO_MSA__WD__WS(NLOC_D, nloc.d) -DO_MSA__WD__WS_WT(ILVR_B, ilvr.b) -DO_MSA__WD__WS_WT(ILVR_H, ilvr.h) -DO_MSA__WD__WS_WT(ILVR_W, ilvr.w) -DO_MSA__WD__WS_WT(ILVR_D, ilvr.d) +DO_MSA__WD__WS(NLZC_B, nlzc.b) +DO_MSA__WD__WS(NLZC_H, nlzc.h) +DO_MSA__WD__WS(NLZC_W, nlzc.w) +DO_MSA__WD__WS(NLZC_D, nlzc.d) -DO_MSA__WD__WS_WT(AND_V, and.v) -DO_MSA__WD__WS_WT(NOR_V, nor.v) -DO_MSA__WD__WS_WT(OR_V, or.v) -DO_MSA__WD__WS_WT(XOR_V, xor.v) +DO_MSA__WD__WS(PCNT_B, pcnt.b) +DO_MSA__WD__WS(PCNT_H, pcnt.h) +DO_MSA__WD__WS(PCNT_W, pcnt.w) +DO_MSA__WD__WS(PCNT_D, pcnt.d) -DO_MSA__WD__WS_WT(CEQ_B, ceq.b) -DO_MSA__WD__WS_WT(CEQ_H, ceq.h) -DO_MSA__WD__WS_WT(CEQ_W, ceq.w) -DO_MSA__WD__WS_WT(CEQ_D, ceq.d) -DO_MSA__WD__WS_WT(CLE_S_B, cle_s.b) -DO_MSA__WD__WS_WT(CLE_S_H, cle_s.h) -DO_MSA__WD__WS_WT(CLE_S_W, cle_s.w) -DO_MSA__WD__WS_WT(CLE_S_D, cle_s.d) +/* + * Bit move + * -------- + */ -DO_MSA__WD__WS_WT(CLE_U_B, cle_u.b) -DO_MSA__WD__WS_WT(CLE_U_H, cle_u.h) -DO_MSA__WD__WS_WT(CLE_U_W, cle_u.w) -DO_MSA__WD__WS_WT(CLE_U_D, cle_u.d) +DO_MSA__WD__WS_WT(BINSL_B, binsl.b) +DO_MSA__WD__WS_WT(BINSL_H, binsl.h) +DO_MSA__WD__WS_WT(BINSL_W, binsl.w) +DO_MSA__WD__WS_WT(BINSL_D, binsl.d) -DO_MSA__WD__WS_WT(CLT_S_B, clt_s.b) -DO_MSA__WD__WS_WT(CLT_S_H, clt_s.h) -DO_MSA__WD__WS_WT(CLT_S_W, clt_s.w) -DO_MSA__WD__WS_WT(CLT_S_D, clt_s.d) +DO_MSA__WD__WS_WT(BINSR_B, binsr.b) +DO_MSA__WD__WS_WT(BINSR_H, binsr.h) +DO_MSA__WD__WS_WT(BINSR_W, binsr.w) +DO_MSA__WD__WS_WT(BINSR_D, binsr.d) -DO_MSA__WD__WS_WT(CLT_U_B, clt_u.b) -DO_MSA__WD__WS_WT(CLT_U_H, clt_u.h) -DO_MSA__WD__WS_WT(CLT_U_W, clt_u.w) -DO_MSA__WD__WS_WT(CLT_U_D, clt_u.d) +DO_MSA__WD__WS_WT(BMNZ_V, bmnz.v) +DO_MSA__WD__WS_WT(BMZ_V, bmz.v) +DO_MSA__WD__WS_WT(BSEL_V, bsel.v) -DO_MSA__WD__WS_WT(MAX_A_B, max_a.b) -DO_MSA__WD__WS_WT(MAX_A_H, max_a.h) -DO_MSA__WD__WS_WT(MAX_A_W, max_a.w) -DO_MSA__WD__WS_WT(MAX_A_D, max_a.d) -DO_MSA__WD__WS_WT(MIN_A_B, min_a.b) -DO_MSA__WD__WS_WT(MIN_A_H, min_a.h) -DO_MSA__WD__WS_WT(MIN_A_W, min_a.w) -DO_MSA__WD__WS_WT(MIN_A_D, min_a.d) - -DO_MSA__WD__WS_WT(MAX_S_B, max_s.b) -DO_MSA__WD__WS_WT(MAX_S_H, max_s.h) -DO_MSA__WD__WS_WT(MAX_S_W, max_s.w) -DO_MSA__WD__WS_WT(MAX_S_D, max_s.d) - -DO_MSA__WD__WS_WT(MIN_S_B, min_s.b) -DO_MSA__WD__WS_WT(MIN_S_H, min_s.h) -DO_MSA__WD__WS_WT(MIN_S_W, min_s.w) -DO_MSA__WD__WS_WT(MIN_S_D, min_s.d) - -DO_MSA__WD__WS_WT(MAX_U_B, max_u.b) -DO_MSA__WD__WS_WT(MAX_U_H, max_u.h) -DO_MSA__WD__WS_WT(MAX_U_W, max_u.w) -DO_MSA__WD__WS_WT(MAX_U_D, max_u.d) - -DO_MSA__WD__WS_WT(MIN_U_B, min_u.b) -DO_MSA__WD__WS_WT(MIN_U_H, min_u.h) -DO_MSA__WD__WS_WT(MIN_U_W, min_u.w) -DO_MSA__WD__WS_WT(MIN_U_D, min_u.d) +/* + * Bit Set + * ------- + */ DO_MSA__WD__WS_WT(BCLR_B, bclr.b) DO_MSA__WD__WS_WT(BCLR_H, bclr.h) @@ -221,45 +221,53 @@ DO_MSA__WD__WS_WT(BNEG_H, bneg.h) DO_MSA__WD__WS_WT(BNEG_W, bneg.w) DO_MSA__WD__WS_WT(BNEG_D, bneg.d) -DO_MSA__WD__WS_WT(PCKEV_B, pckev.b) -DO_MSA__WD__WS_WT(PCKEV_H, pckev.h) -DO_MSA__WD__WS_WT(PCKEV_W, pckev.w) -DO_MSA__WD__WS_WT(PCKEV_D, pckev.d) -DO_MSA__WD__WS_WT(PCKOD_B, pckod.b) -DO_MSA__WD__WS_WT(PCKOD_H, pckod.h) -DO_MSA__WD__WS_WT(PCKOD_W, pckod.w) -DO_MSA__WD__WS_WT(PCKOD_D, pckod.d) +/* + * Fixed Multiply + * -------------- + */ -DO_MSA__WD__WS_WT(VSHF_B, vshf.b) -DO_MSA__WD__WS_WT(VSHF_H, vshf.h) -DO_MSA__WD__WS_WT(VSHF_W, vshf.w) -DO_MSA__WD__WS_WT(VSHF_D, vshf.d) +DO_MSA__WD__WS_WT(MADD_Q_H, madd_q.h) +DO_MSA__WD__WS_WT(MADD_Q_W, madd_q.w) -DO_MSA__WD__WS_WT(SLL_B, sll.b) -DO_MSA__WD__WS_WT(SLL_H, sll.h) -DO_MSA__WD__WS_WT(SLL_W, sll.w) -DO_MSA__WD__WS_WT(SLL_D, sll.d) +DO_MSA__WD__WS_WT(MADDR_Q_H, maddr_q.h) +DO_MSA__WD__WS_WT(MADDR_Q_W, maddr_q.w) -DO_MSA__WD__WS_WT(SRA_B, sra.b) -DO_MSA__WD__WS_WT(SRA_H, sra.h) -DO_MSA__WD__WS_WT(SRA_W, sra.w) -DO_MSA__WD__WS_WT(SRA_D, sra.d) +DO_MSA__WD__WS_WT(MSUB_Q_H, msub_q.h) +DO_MSA__WD__WS_WT(MSUB_Q_W, msub_q.w) -DO_MSA__WD__WS_WT(SRAR_B, srar.b) -DO_MSA__WD__WS_WT(SRAR_H, srar.h) -DO_MSA__WD__WS_WT(SRAR_W, srar.w) -DO_MSA__WD__WS_WT(SRAR_D, srar.d) +DO_MSA__WD__WS_WT(MSUBR_Q_H, msubr_q.h) +DO_MSA__WD__WS_WT(MSUBR_Q_W, msubr_q.w) -DO_MSA__WD__WS_WT(SRL_B, srl.b) -DO_MSA__WD__WS_WT(SRL_H, srl.h) -DO_MSA__WD__WS_WT(SRL_W, srl.w) -DO_MSA__WD__WS_WT(SRL_D, srl.d) +DO_MSA__WD__WS_WT(MUL_Q_H, mul_q.h) +DO_MSA__WD__WS_WT(MUL_Q_W, mul_q.w) -DO_MSA__WD__WS_WT(SRLR_B, srlr.b) -DO_MSA__WD__WS_WT(SRLR_H, srlr.h) -DO_MSA__WD__WS_WT(SRLR_W, srlr.w) -DO_MSA__WD__WS_WT(SRLR_D, srlr.d) +DO_MSA__WD__WS_WT(MULR_Q_H, mulr_q.h) +DO_MSA__WD__WS_WT(MULR_Q_W, mulr_q.w) + + +/* + * Float Max Min + * ------------- + */ + +DO_MSA__WD__WS_WT(FMAX_W, fmax.w) +DO_MSA__WD__WS_WT(FMAX_D, fmax.d) + +DO_MSA__WD__WS_WT(FMAX_A_W, fmax_a.w) +DO_MSA__WD__WS_WT(FMAX_A_D, fmax_a.d) + +DO_MSA__WD__WS_WT(FMIN_W, fmin.w) +DO_MSA__WD__WS_WT(FMIN_D, fmin.d) + +DO_MSA__WD__WS_WT(FMIN_A_W, fmin_a.w) +DO_MSA__WD__WS_WT(FMIN_A_D, fmin_a.d) + + +/* + * Int Add + * ------- + */ DO_MSA__WD__WS_WT(ADD_A_B, add_a.b) DO_MSA__WD__WS_WT(ADD_A_H, add_a.h) @@ -294,15 +302,11 @@ DO_MSA__WD__WS_WT(HADD_U_H, hadd_u.h) DO_MSA__WD__WS_WT(HADD_U_W, hadd_u.w) DO_MSA__WD__WS_WT(HADD_U_D, hadd_u.d) -DO_MSA__WD__WS_WT(AVER_S_B, aver_s.b) -DO_MSA__WD__WS_WT(AVER_S_H, aver_s.h) -DO_MSA__WD__WS_WT(AVER_S_W, aver_s.w) -DO_MSA__WD__WS_WT(AVER_S_D, aver_s.d) -DO_MSA__WD__WS_WT(AVER_U_B, aver_u.b) -DO_MSA__WD__WS_WT(AVER_U_H, aver_u.h) -DO_MSA__WD__WS_WT(AVER_U_W, aver_u.w) -DO_MSA__WD__WS_WT(AVER_U_D, aver_u.d) +/* + * Int Average + * ----------- + */ DO_MSA__WD__WS_WT(AVE_S_B, ave_s.b) DO_MSA__WD__WS_WT(AVE_S_H, ave_s.h) @@ -314,6 +318,53 @@ DO_MSA__WD__WS_WT(AVE_U_H, ave_u.h) DO_MSA__WD__WS_WT(AVE_U_W, ave_u.w) DO_MSA__WD__WS_WT(AVE_U_D, ave_u.d) +DO_MSA__WD__WS_WT(AVER_S_B, aver_s.b) +DO_MSA__WD__WS_WT(AVER_S_H, aver_s.h) +DO_MSA__WD__WS_WT(AVER_S_W, aver_s.w) +DO_MSA__WD__WS_WT(AVER_S_D, aver_s.d) + +DO_MSA__WD__WS_WT(AVER_U_B, aver_u.b) +DO_MSA__WD__WS_WT(AVER_U_H, aver_u.h) +DO_MSA__WD__WS_WT(AVER_U_W, aver_u.w) +DO_MSA__WD__WS_WT(AVER_U_D, aver_u.d) + + +/* + * Int Compare + * ----------- + */ + +DO_MSA__WD__WS_WT(CEQ_B, ceq.b) +DO_MSA__WD__WS_WT(CEQ_H, ceq.h) +DO_MSA__WD__WS_WT(CEQ_W, ceq.w) +DO_MSA__WD__WS_WT(CEQ_D, ceq.d) + +DO_MSA__WD__WS_WT(CLE_S_B, cle_s.b) +DO_MSA__WD__WS_WT(CLE_S_H, cle_s.h) +DO_MSA__WD__WS_WT(CLE_S_W, cle_s.w) +DO_MSA__WD__WS_WT(CLE_S_D, cle_s.d) + +DO_MSA__WD__WS_WT(CLE_U_B, cle_u.b) +DO_MSA__WD__WS_WT(CLE_U_H, cle_u.h) +DO_MSA__WD__WS_WT(CLE_U_W, cle_u.w) +DO_MSA__WD__WS_WT(CLE_U_D, cle_u.d) + +DO_MSA__WD__WS_WT(CLT_S_B, clt_s.b) +DO_MSA__WD__WS_WT(CLT_S_H, clt_s.h) +DO_MSA__WD__WS_WT(CLT_S_W, clt_s.w) +DO_MSA__WD__WS_WT(CLT_S_D, clt_s.d) + +DO_MSA__WD__WS_WT(CLT_U_B, clt_u.b) +DO_MSA__WD__WS_WT(CLT_U_H, clt_u.h) +DO_MSA__WD__WS_WT(CLT_U_W, clt_u.w) +DO_MSA__WD__WS_WT(CLT_U_D, clt_u.d) + + +/* + * Int Divide + * ---------- + */ + DO_MSA__WD__WS_WT(DIV_S_B, div_s.b) DO_MSA__WD__WS_WT(DIV_S_H, div_s.h) DO_MSA__WD__WS_WT(DIV_S_W, div_s.w) @@ -324,6 +375,12 @@ DO_MSA__WD__WS_WT(DIV_U_H, div_u.h) DO_MSA__WD__WS_WT(DIV_U_W, div_u.w) DO_MSA__WD__WS_WT(DIV_U_D, div_u.d) + +/* + * Int Dot Product + * --------------- + */ + DO_MSA__WD__WS_WT(DOTP_S_H, dotp_s.h) DO_MSA__WD__WS_WT(DOTP_S_W, dotp_s.w) DO_MSA__WD__WS_WT(DOTP_S_D, dotp_s.d) @@ -332,6 +389,48 @@ DO_MSA__WD__WS_WT(DOTP_U_H, dotp_u.h) DO_MSA__WD__WS_WT(DOTP_U_W, dotp_u.w) DO_MSA__WD__WS_WT(DOTP_U_D, dotp_u.d) + +/* + * Int Max Min + * ----------- + */ + +DO_MSA__WD__WS_WT(MAX_A_B, max_a.b) +DO_MSA__WD__WS_WT(MAX_A_H, max_a.h) +DO_MSA__WD__WS_WT(MAX_A_W, max_a.w) +DO_MSA__WD__WS_WT(MAX_A_D, max_a.d) + +DO_MSA__WD__WS_WT(MAX_S_B, max_s.b) +DO_MSA__WD__WS_WT(MAX_S_H, max_s.h) +DO_MSA__WD__WS_WT(MAX_S_W, max_s.w) +DO_MSA__WD__WS_WT(MAX_S_D, max_s.d) + +DO_MSA__WD__WS_WT(MAX_U_B, max_u.b) +DO_MSA__WD__WS_WT(MAX_U_H, max_u.h) +DO_MSA__WD__WS_WT(MAX_U_W, max_u.w) +DO_MSA__WD__WS_WT(MAX_U_D, max_u.d) + +DO_MSA__WD__WS_WT(MIN_A_B, min_a.b) +DO_MSA__WD__WS_WT(MIN_A_H, min_a.h) +DO_MSA__WD__WS_WT(MIN_A_W, min_a.w) +DO_MSA__WD__WS_WT(MIN_A_D, min_a.d) + +DO_MSA__WD__WS_WT(MIN_S_B, min_s.b) +DO_MSA__WD__WS_WT(MIN_S_H, min_s.h) +DO_MSA__WD__WS_WT(MIN_S_W, min_s.w) +DO_MSA__WD__WS_WT(MIN_S_D, min_s.d) + +DO_MSA__WD__WS_WT(MIN_U_B, min_u.b) +DO_MSA__WD__WS_WT(MIN_U_H, min_u.h) +DO_MSA__WD__WS_WT(MIN_U_W, min_u.w) +DO_MSA__WD__WS_WT(MIN_U_D, min_u.d) + + +/* + * Int Modulo + * ---------- + */ + DO_MSA__WD__WS_WT(MOD_S_B, mod_s.b) DO_MSA__WD__WS_WT(MOD_S_H, mod_s.h) DO_MSA__WD__WS_WT(MOD_S_W, mod_s.w) @@ -342,30 +441,32 @@ DO_MSA__WD__WS_WT(MOD_U_H, mod_u.h) DO_MSA__WD__WS_WT(MOD_U_W, mod_u.w) DO_MSA__WD__WS_WT(MOD_U_D, mod_u.d) -DO_MSA__WD__WS_WT(MUL_Q_H, mul_q.h) -DO_MSA__WD__WS_WT(MUL_Q_W, mul_q.w) -DO_MSA__WD__WS_WT(MULR_Q_H, mulr_q.h) -DO_MSA__WD__WS_WT(MULR_Q_W, mulr_q.w) + +/* + * Int Multiply + * ------------ + */ + +DO_MSA__WD__WS_WT(MADDV_B, maddv.b) +DO_MSA__WD__WS_WT(MADDV_H, maddv.h) +DO_MSA__WD__WS_WT(MADDV_W, maddv.w) +DO_MSA__WD__WS_WT(MADDV_D, maddv.d) + +DO_MSA__WD__WS_WT(MSUBV_B, msubv.b) +DO_MSA__WD__WS_WT(MSUBV_H, msubv.h) +DO_MSA__WD__WS_WT(MSUBV_W, msubv.w) +DO_MSA__WD__WS_WT(MSUBV_D, msubv.d) DO_MSA__WD__WS_WT(MULV_B, mulv.b) DO_MSA__WD__WS_WT(MULV_H, mulv.h) DO_MSA__WD__WS_WT(MULV_W, mulv.w) DO_MSA__WD__WS_WT(MULV_D, mulv.d) -DO_MSA__WD__WS_WT(SUBV_B, subv.b) -DO_MSA__WD__WS_WT(SUBV_H, subv.h) -DO_MSA__WD__WS_WT(SUBV_W, subv.w) -DO_MSA__WD__WS_WT(SUBV_D, subv.d) -DO_MSA__WD__WS_WT(SUBS_S_B, subs_s.b) -DO_MSA__WD__WS_WT(SUBS_S_H, subs_s.h) -DO_MSA__WD__WS_WT(SUBS_S_W, subs_s.w) -DO_MSA__WD__WS_WT(SUBS_S_D, subs_s.d) - -DO_MSA__WD__WS_WT(SUBS_U_B, subs_u.b) -DO_MSA__WD__WS_WT(SUBS_U_H, subs_u.h) -DO_MSA__WD__WS_WT(SUBS_U_W, subs_u.w) -DO_MSA__WD__WS_WT(SUBS_U_D, subs_u.d) +/* + * Int Subtract + * ------------ + */ DO_MSA__WD__WS_WT(ASUB_S_B, asub_s.b) DO_MSA__WD__WS_WT(ASUB_S_H, asub_s.h) @@ -377,16 +478,6 @@ DO_MSA__WD__WS_WT(ASUB_U_H, asub_u.h) DO_MSA__WD__WS_WT(ASUB_U_W, asub_u.w) DO_MSA__WD__WS_WT(ASUB_U_D, asub_u.d) -DO_MSA__WD__WS_WT(SUBSUU_S_B, subsuu_s.b) -DO_MSA__WD__WS_WT(SUBSUU_S_H, subsuu_s.h) -DO_MSA__WD__WS_WT(SUBSUU_S_W, subsuu_s.w) -DO_MSA__WD__WS_WT(SUBSUU_S_D, subsuu_s.d) - -DO_MSA__WD__WS_WT(SUBSUS_U_B, subsus_u.b) -DO_MSA__WD__WS_WT(SUBSUS_U_H, subsus_u.h) -DO_MSA__WD__WS_WT(SUBSUS_U_W, subsus_u.w) -DO_MSA__WD__WS_WT(SUBSUS_U_D, subsus_u.d) - DO_MSA__WD__WS_WT(HSUB_S_H, hsub_s.h) DO_MSA__WD__WS_WT(HSUB_S_W, hsub_s.w) DO_MSA__WD__WS_WT(HSUB_S_D, hsub_s.d) @@ -395,22 +486,119 @@ DO_MSA__WD__WS_WT(HSUB_U_H, hsub_u.h) DO_MSA__WD__WS_WT(HSUB_U_W, hsub_u.w) DO_MSA__WD__WS_WT(HSUB_U_D, hsub_u.d) +DO_MSA__WD__WS_WT(SUBS_S_B, subs_s.b) +DO_MSA__WD__WS_WT(SUBS_S_H, subs_s.h) +DO_MSA__WD__WS_WT(SUBS_S_W, subs_s.w) +DO_MSA__WD__WS_WT(SUBS_S_D, subs_s.d) + +DO_MSA__WD__WS_WT(SUBS_U_B, subs_u.b) +DO_MSA__WD__WS_WT(SUBS_U_H, subs_u.h) +DO_MSA__WD__WS_WT(SUBS_U_W, subs_u.w) +DO_MSA__WD__WS_WT(SUBS_U_D, subs_u.d) + +DO_MSA__WD__WS_WT(SUBSUS_U_B, subsus_u.b) +DO_MSA__WD__WS_WT(SUBSUS_U_H, subsus_u.h) +DO_MSA__WD__WS_WT(SUBSUS_U_W, subsus_u.w) +DO_MSA__WD__WS_WT(SUBSUS_U_D, subsus_u.d) + +DO_MSA__WD__WS_WT(SUBSUU_S_B, subsuu_s.b) +DO_MSA__WD__WS_WT(SUBSUU_S_H, subsuu_s.h) +DO_MSA__WD__WS_WT(SUBSUU_S_W, subsuu_s.w) +DO_MSA__WD__WS_WT(SUBSUU_S_D, subsuu_s.d) + +DO_MSA__WD__WS_WT(SUBV_B, subv.b) +DO_MSA__WD__WS_WT(SUBV_H, subv.h) +DO_MSA__WD__WS_WT(SUBV_W, subv.w) +DO_MSA__WD__WS_WT(SUBV_D, subv.d) -DO_MSA__WD__WS_WT(BMNZ_V, bmnz.v) -DO_MSA__WD__WS_WT(BMZ_V, bmz.v) +/* + * Interleave + * ---------- + */ -DO_MSA__WD__WS_WT(FMAX_W, fmax.w) -DO_MSA__WD__WS_WT(FMAX_D, fmax.d) +DO_MSA__WD__WS_WT(ILVEV_B, ilvev.b) +DO_MSA__WD__WS_WT(ILVEV_H, ilvev.h) +DO_MSA__WD__WS_WT(ILVEV_W, ilvev.w) +DO_MSA__WD__WS_WT(ILVEV_D, ilvev.d) -DO_MSA__WD__WS_WT(FMAX_A_W, fmax_a.w) -DO_MSA__WD__WS_WT(FMAX_A_D, fmax_a.d) +DO_MSA__WD__WS_WT(ILVOD_B, ilvod.b) +DO_MSA__WD__WS_WT(ILVOD_H, ilvod.h) +DO_MSA__WD__WS_WT(ILVOD_W, ilvod.w) +DO_MSA__WD__WS_WT(ILVOD_D, ilvod.d) -DO_MSA__WD__WS_WT(FMIN_W, fmin.w) -DO_MSA__WD__WS_WT(FMIN_D, fmin.d) +DO_MSA__WD__WS_WT(ILVL_B, ilvl.b) +DO_MSA__WD__WS_WT(ILVL_H, ilvl.h) +DO_MSA__WD__WS_WT(ILVL_W, ilvl.w) +DO_MSA__WD__WS_WT(ILVL_D, ilvl.d) -DO_MSA__WD__WS_WT(FMIN_A_W, fmin_a.w) -DO_MSA__WD__WS_WT(FMIN_A_D, fmin_a.d) +DO_MSA__WD__WS_WT(ILVR_B, ilvr.b) +DO_MSA__WD__WS_WT(ILVR_H, ilvr.h) +DO_MSA__WD__WS_WT(ILVR_W, ilvr.w) +DO_MSA__WD__WS_WT(ILVR_D, ilvr.d) + + +/* + * Logic + * ----- + */ + +DO_MSA__WD__WS_WT(AND_V, and.v) +DO_MSA__WD__WS_WT(NOR_V, nor.v) +DO_MSA__WD__WS_WT(OR_V, or.v) +DO_MSA__WD__WS_WT(XOR_V, xor.v) + + +/* + * Pack + * ---- + */ + +DO_MSA__WD__WS_WT(PCKEV_B, pckev.b) +DO_MSA__WD__WS_WT(PCKEV_H, pckev.h) +DO_MSA__WD__WS_WT(PCKEV_W, pckev.w) +DO_MSA__WD__WS_WT(PCKEV_D, pckev.d) + +DO_MSA__WD__WS_WT(PCKOD_B, pckod.b) +DO_MSA__WD__WS_WT(PCKOD_H, pckod.h) +DO_MSA__WD__WS_WT(PCKOD_W, pckod.w) +DO_MSA__WD__WS_WT(PCKOD_D, pckod.d) + +DO_MSA__WD__WS_WT(VSHF_B, vshf.b) +DO_MSA__WD__WS_WT(VSHF_H, vshf.h) +DO_MSA__WD__WS_WT(VSHF_W, vshf.w) +DO_MSA__WD__WS_WT(VSHF_D, vshf.d) + + +/* + * Shift + * ----- + */ + +DO_MSA__WD__WS_WT(SLL_B, sll.b) +DO_MSA__WD__WS_WT(SLL_H, sll.h) +DO_MSA__WD__WS_WT(SLL_W, sll.w) +DO_MSA__WD__WS_WT(SLL_D, sll.d) + +DO_MSA__WD__WS_WT(SRA_B, sra.b) +DO_MSA__WD__WS_WT(SRA_H, sra.h) +DO_MSA__WD__WS_WT(SRA_W, sra.w) +DO_MSA__WD__WS_WT(SRA_D, sra.d) + +DO_MSA__WD__WS_WT(SRAR_B, srar.b) +DO_MSA__WD__WS_WT(SRAR_H, srar.h) +DO_MSA__WD__WS_WT(SRAR_W, srar.w) +DO_MSA__WD__WS_WT(SRAR_D, srar.d) + +DO_MSA__WD__WS_WT(SRL_B, srl.b) +DO_MSA__WD__WS_WT(SRL_H, srl.h) +DO_MSA__WD__WS_WT(SRL_W, srl.w) +DO_MSA__WD__WS_WT(SRL_D, srl.d) + +DO_MSA__WD__WS_WT(SRLR_B, srlr.b) +DO_MSA__WD__WS_WT(SRLR_H, srlr.h) +DO_MSA__WD__WS_WT(SRLR_W, srlr.w) +DO_MSA__WD__WS_WT(SRLR_D, srlr.d) #endif diff --git a/tests/tcg/mips/user/ase/msa/README b/tests/tcg/mips/user/ase/msa/README new file mode 100644 index 0000000000..ca4f070ec1 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/README @@ -0,0 +1,20 @@ +The tests in subdirectories of this directory are supposed to be compiled for +mips64el MSA-enabled CPU (I6400, I6500), using an appropriate MIPS toolchain. +For example: + +/opt/img/bin/mips-img-linux-gnu-gcc \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o + +They are to be executed using QEMU user mode, using command line: + +mips64el-linux-user/qemu-mips64el -cpu I6400 + +Helper scripts test_msa_compile.sh and test_msa_run.sh are also +provided. This is an example of compilation and execution of all +MSA tests: + +cd +cd tests/tcg/mips/user/ase/msa + +./test_msa_compile.sh +./test_msa_run.sh diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_b.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_b.c index c73ed2464e..287054e716 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_b.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_b.c @@ -121,6 +121,8 @@ int32_t main(void) { 0x0100010104000201ULL, 0x0200020200000003ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < TEST_COUNT_TOTAL; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_d.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_d.c index b10fb23e88..171abdf77c 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_d.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_d.c @@ -121,6 +121,8 @@ int32_t main(void) { 0x0000000000000001ULL, 0x0000000000000002ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < TEST_COUNT_TOTAL; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_h.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_h.c index c1dc0754e6..f260eba7f0 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_h.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_h.c @@ -121,6 +121,8 @@ int32_t main(void) { 0x0001000100040002ULL, 0x0002000200000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < TEST_COUNT_TOTAL; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_w.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_w.c index 4f7a556dec..cb1981cafc 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_w.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_w.c @@ -121,6 +121,8 @@ int32_t main(void) { 0x0000000100000004ULL, 0x0000000200000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < TEST_COUNT_TOTAL; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_b.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_b.c index c202ba4856..96d05d59a1 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_b.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_b.c @@ -121,6 +121,8 @@ int32_t main(void) { 0x0001000000010000ULL, 0x0001000001010300ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < TEST_COUNT_TOTAL; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_d.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_d.c index 1edead2860..c709d5e852 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_d.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_d.c @@ -121,6 +121,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < TEST_COUNT_TOTAL; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_h.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_h.c index b2724c532e..c47e8bfe32 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_h.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_h.c @@ -121,6 +121,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000010003ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < TEST_COUNT_TOTAL; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_w.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_w.c index b547c73621..a8a471ba10 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_w.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_w.c @@ -121,6 +121,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000001ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < TEST_COUNT_TOTAL; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_b.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_b.c index 5918e7fcf3..067a11b48d 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_b.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_b.c @@ -121,6 +121,8 @@ int32_t main(void) { 0x0404050305040605ULL, 0x0404050504030405ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < TEST_COUNT_TOTAL; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_d.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_d.c index 667ca3112a..c60635df70 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_d.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_d.c @@ -121,6 +121,8 @@ int32_t main(void) { 0x0000000000000024ULL, 0x0000000000000022ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < TEST_COUNT_TOTAL; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_h.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_h.c index 2951f86983..8fba20a621 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_h.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_h.c @@ -121,6 +121,8 @@ int32_t main(void) { 0x000800080009000bULL, 0x0008000a00070009ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < TEST_COUNT_TOTAL; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_w.c b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_w.c index ab43ea92cd..24c44aefa1 100644 --- a/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_w.c +++ b/tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_w.c @@ -121,6 +121,8 @@ int32_t main(void) { 0x0000001000000014ULL, 0x0000001200000010ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < TEST_COUNT_TOTAL; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_b.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_b.c index c5aab141f2..e27d3b5f13 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_b.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_b.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f164d1e31e20eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_d.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_d.c index 11e616e341..3b8c38494b 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_d.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_d.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f164d5e31a24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_h.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_h.c index dc67b4d67e..d1db60fb02 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_h.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_h.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f164d5e31a24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_w.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_w.c index ab0cce7f8b..54087b7c6e 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_w.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_w.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f164d5e31a24eULL, 0x8cf188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_b.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_b.c index 1939d1018d..733bc24867 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_b.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_b.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x71cf566d1e33e60eULL, 0xadf389d9ab46e6a1ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_d.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_d.c index 8462bb3e14..fc092215d5 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_d.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_d.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f164d5e31a24eULL, 0x8df188d9a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_h.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_h.c index 172d4c0fd1..d8347a1884 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_h.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_h.c @@ -123,6 +123,8 @@ int32_t main(void) { 0xf04f364d5e33a24eULL, 0x8df389d8a946e2a1ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_w.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_w.c index 23bc0333eb..36ef43672f 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_w.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_w.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f364d5e31a24eULL, 0x8cf188d8a942e2a1ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_b.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_b.c index f48adbd9a8..f6907cb3d3 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_b.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_b.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x71cf566d5e33e64eULL, 0xadf389d9ab46e6a1ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_d.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_d.c index 787016ae4f..ecd833bee0 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_d.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_d.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d9a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_h.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_h.c index e1ff9727ba..de63f26881 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_h.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_h.c @@ -123,6 +123,8 @@ int32_t main(void) { 0xf04f364d5e33e24eULL, 0x8df389d8a946e2a1ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_w.c b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_w.c index 51945b2148..b973e67065 100644 --- a/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_w.c +++ b/tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_w.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f364d5e31e24eULL, 0x8df188d8a942e2a1ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mul_q_h.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_h.c similarity index 99% rename from tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mul_q_h.c rename to tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_h.c index 55cf7b4d86..39a89ac099 100644 --- a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mul_q_h.c +++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x628a03e2455006e3ULL, 0x65a26eec3ac806bdULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mul_q_w.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_w.c similarity index 99% rename from tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mul_q_w.c rename to tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_w.c index 4b21d0651c..07f2daecac 100644 --- a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mul_q_w.c +++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x628a97e4455157d3ULL, 0x65a1c5e13ac736e1ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulr_q_h.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_h.c similarity index 99% rename from tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulr_q_h.c rename to tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_h.c index 835105074f..e35af2fb7e 100644 --- a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulr_q_h.c +++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x628a03e3455006e4ULL, 0x65a36eec3ac806beULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulr_q_w.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_w.c similarity index 99% rename from tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulr_q_w.c rename to tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_w.c index 9e31adaf1b..3cedf672af 100644 --- a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulr_q_w.c +++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x628a97e4455157d3ULL, 0x65a1c5e23ac736e2ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_d.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_d.c new file mode 100644 index 0000000000..1807cabdd5 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_d.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction FMAX_A.D + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "FMAX_A.D"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xc71c71c71c71c71cULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xe38e38e38e38e38eULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xe38e38e38e38e38eULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x3333333333333333ULL, 0xc71c71c71c71c71cULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e38e38e38e38eULL, 0x5555555555555555ULL, }, + { 0xe38e38e38e38e38eULL, 0xccccccccccccccccULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e38e38e38e38eULL, 0xc71c71c71c71c71cULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xc71c71c71c71c71cULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0xc71c71c71c71c71cULL, }, + { 0xe38e38e38e38e38eULL, 0xc71c71c71c71c71cULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 64 */ + { 0xfbbe00634d93c708ULL, 0x4b670b5efe7bb00cULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x4b670b5efe7bb00cULL, }, + { 0x704f164d5e31e24eULL, 0x4b670b5efe7bb00cULL, }, + { 0xfbbe00634d93c708ULL, 0x4b670b5efe7bb00cULL, }, + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0xfbbe00634d93c708ULL, 0x27d8c6ffab2b2514ULL, }, + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x4b670b5efe7bb00cULL, }, /* 72 */ + { 0xfbbe00634d93c708ULL, 0x27d8c6ffab2b2514ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, + { 0x704f164d5e31e24eULL, 0x27d8c6ffab2b2514ULL, }, + { 0x704f164d5e31e24eULL, 0x4b670b5efe7bb00cULL, }, + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0x704f164d5e31e24eULL, 0x27d8c6ffab2b2514ULL, }, + { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, +}; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_FMAX_A_D(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_FMAX_A_D(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_w.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_w.c new file mode 100644 index 0000000000..b999b1fdb5 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_w.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction FMAX_A.W + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "FMAX_A.W"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e3aaaaaaaaULL, 0x38e38e38e38e38e3ULL, }, + { 0xaaaaaaaa71c71c71ULL, 0xc71c71c7aaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xe38e38e355555555ULL, 0x55555555e38e38e3ULL, }, + { 0x5555555571c71c71ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xe38e38e3ccccccccULL, 0xcccccccce38e38e3ULL, }, + { 0xcccccccc71c71c71ULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e333333333ULL, 0x38e38e38e38e38e3ULL, }, + { 0x3333333371c71c71ULL, 0xc71c71c733333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e38e3aaaaaaaaULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e38e355555555ULL, 0x55555555e38e38e3ULL, }, + { 0xe38e38e3ccccccccULL, 0xcccccccce38e38e3ULL, }, + { 0xe38e38e333333333ULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e38e371c71c71ULL, 0xc71c71c7e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0xaaaaaaaa71c71c71ULL, 0xc71c71c7aaaaaaaaULL, }, + { 0x5555555571c71c71ULL, 0x5555555555555555ULL, }, + { 0xcccccccc71c71c71ULL, 0xccccccccccccccccULL, }, + { 0x3333333371c71c71ULL, 0xc71c71c733333333ULL, }, + { 0xe38e38e371c71c71ULL, 0xc71c71c7e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 64 */ + { 0xfbbe00634d93c708ULL, 0x4b670b5efe7bb00cULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x4b670b5efe7bb00cULL, }, + { 0x704f164d5e31e24eULL, 0x4b670b5efe7bb00cULL, }, + { 0xfbbe00634d93c708ULL, 0x4b670b5efe7bb00cULL, }, + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0xfbbe00634d93c708ULL, 0x27d8c6ffab2b2514ULL, }, + { 0xfbbe00635e31e24eULL, 0x12f7bb1aa942e2a0ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x4b670b5efe7bb00cULL, }, /* 72 */ + { 0xfbbe00634d93c708ULL, 0x27d8c6ffab2b2514ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, + { 0x704f164d5e31e24eULL, 0x27d8c6ffab2b2514ULL, }, + { 0x704f164d5e31e24eULL, 0x4b670b5efe7bb00cULL, }, + { 0xfbbe00635e31e24eULL, 0x12f7bb1aa942e2a0ULL, }, + { 0x704f164d5e31e24eULL, 0x27d8c6ffab2b2514ULL, }, + { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, +}; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_FMAX_A_W(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_FMAX_A_W(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_d.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_d.c new file mode 100644 index 0000000000..b5ce6c7543 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_d.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction FMAX.D + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "FMAX.D"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x0000000000000000ULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xccccccccccccccccULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x3333333333333333ULL, 0x38e38e38e38e38e3ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */ + { 0x0000000000000000ULL, 0x38e38e38e38e38e3ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0x38e38e38e38e38e3ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0x38e38e38e38e38e3ULL, }, + { 0x3333333333333333ULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0x0000000000000000ULL, }, + { 0x1c71c71c71c71c71ULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x1c71c71c71c71c71ULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 64 */ + { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, + { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, + { 0x704f164d5e31e24eULL, 0x4b670b5efe7bb00cULL, }, + { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, + { 0x704f164d5e31e24eULL, 0x12f7bb1a153f52fcULL, }, + { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 72 */ + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, + { 0x704f164d5e31e24eULL, 0x27d8c6ffab2b2514ULL, }, + { 0x704f164d5e31e24eULL, 0x4b670b5efe7bb00cULL, }, + { 0x704f164d5e31e24eULL, 0x12f7bb1a153f52fcULL, }, + { 0x704f164d5e31e24eULL, 0x27d8c6ffab2b2514ULL, }, + { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, +}; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_FMAX_D(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_FMAX_D(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_w.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_w.c new file mode 100644 index 0000000000..5fafd3080f --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_w.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction FMAX.W + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "FMAX.W"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x0000000000000000ULL, 0x38e38e3800000000ULL, }, + { 0x1c71c71c71c71c71ULL, 0x000000001c71c71cULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xaaaaaaaa8e38e38eULL, 0x38e38e38aaaaaaaaULL, }, + { 0x1c71c71c71c71c71ULL, 0xaaaaaaaa1c71c71cULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555555571c71c71ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xcccccccc8e38e38eULL, 0x38e38e38ccccccccULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x3333333333333333ULL, 0x38e38e3833333333ULL, }, + { 0x3333333371c71c71ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */ + { 0x0000000000000000ULL, 0x38e38e3800000000ULL, }, + { 0xaaaaaaaa8e38e38eULL, 0x38e38e38aaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xcccccccc8e38e38eULL, 0x38e38e38ccccccccULL, }, + { 0x3333333333333333ULL, 0x38e38e3833333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0x38e38e381c71c71cULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0x000000001c71c71cULL, }, + { 0x1c71c71c71c71c71ULL, 0xaaaaaaaa1c71c71cULL, }, + { 0x5555555571c71c71ULL, 0x5555555555555555ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x3333333371c71c71ULL, 0x3333333333333333ULL, }, + { 0x1c71c71c71c71c71ULL, 0x38e38e381c71c71cULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 64 */ + { 0x886ae6cc4d93c708ULL, 0x4b670b5e153f52fcULL, }, + { 0x886ae6cc28625540ULL, 0x4b670b5eab2b2514ULL, }, + { 0x704f164d5e31e24eULL, 0x4b670b5ea942e2a0ULL, }, + { 0x886ae6cc4d93c708ULL, 0x4b670b5e153f52fcULL, }, + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0xac5aaeaa4d93c708ULL, 0x27d8c6ff153f52fcULL, }, + { 0x704f164d5e31e24eULL, 0x12f7bb1a153f52fcULL, }, + { 0x886ae6cc28625540ULL, 0x4b670b5eab2b2514ULL, }, /* 72 */ + { 0xac5aaeaa4d93c708ULL, 0x27d8c6ff153f52fcULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, + { 0x704f164d5e31e24eULL, 0x27d8c6ffa942e2a0ULL, }, + { 0x704f164d5e31e24eULL, 0x4b670b5ea942e2a0ULL, }, + { 0x704f164d5e31e24eULL, 0x12f7bb1a153f52fcULL, }, + { 0x704f164d5e31e24eULL, 0x27d8c6ffa942e2a0ULL, }, + { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, +}; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_FMAX_W(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_FMAX_W(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_d.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_d.c new file mode 100644 index 0000000000..c0b4001eb1 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_d.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction FMIN_A.D + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "FMIN_A.D"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x1c71c71c71c71c71ULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x5555555555555555ULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xccccccccccccccccULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x1c71c71c71c71c71ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x38e38e38e38e38e3ULL, }, + { 0xccccccccccccccccULL, 0x38e38e38e38e38e3ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x1c71c71c71c71c71ULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x1c71c71c71c71c71ULL, 0x3333333333333333ULL, }, + { 0x1c71c71c71c71c71ULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 64 */ + { 0x886ae6cc28625540ULL, 0x12f7bb1a153f52fcULL, }, + { 0x886ae6cc28625540ULL, 0x27d8c6ffab2b2514ULL, }, + { 0x886ae6cc28625540ULL, 0x8df188d8a942e2a0ULL, }, + { 0x886ae6cc28625540ULL, 0x12f7bb1a153f52fcULL, }, + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x12f7bb1a153f52fcULL, }, + { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, + { 0x886ae6cc28625540ULL, 0x27d8c6ffab2b2514ULL, }, /* 72 */ + { 0xac5aaeaab9cf8b80ULL, 0x12f7bb1a153f52fcULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x8df188d8a942e2a0ULL, }, + { 0x886ae6cc28625540ULL, 0x8df188d8a942e2a0ULL, }, + { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x8df188d8a942e2a0ULL, }, + { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, +}; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_FMIN_A_D(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_FMIN_A_D(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_w.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_w.c new file mode 100644 index 0000000000..d174fcd669 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_w.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction FMIN_A.W + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "FMIN_A.W"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaa8e38e38eULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x1c71c71caaaaaaaaULL, 0xaaaaaaaa1c71c71cULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x555555558e38e38eULL, 0x38e38e3855555555ULL, }, + { 0x1c71c71c55555555ULL, 0xc71c71c71c71c71cULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xcccccccc8e38e38eULL, 0x38e38e38ccccccccULL, }, + { 0x1c71c71cccccccccULL, 0xc71c71c71c71c71cULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x333333338e38e38eULL, 0x3333333333333333ULL, }, + { 0x1c71c71c33333333ULL, 0x333333331c71c71cULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaa8e38e38eULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x555555558e38e38eULL, 0x38e38e3855555555ULL, }, + { 0xcccccccc8e38e38eULL, 0x38e38e38ccccccccULL, }, + { 0x333333338e38e38eULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c8e38e38eULL, 0x38e38e381c71c71cULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x1c71c71caaaaaaaaULL, 0xaaaaaaaa1c71c71cULL, }, + { 0x1c71c71c55555555ULL, 0xc71c71c71c71c71cULL, }, + { 0x1c71c71cccccccccULL, 0xc71c71c71c71c71cULL, }, + { 0x1c71c71c33333333ULL, 0x333333331c71c71cULL, }, + { 0x1c71c71c8e38e38eULL, 0x38e38e381c71c71cULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 64 */ + { 0x886ae6cc28625540ULL, 0x12f7bb1a153f52fcULL, }, + { 0x886ae6cc28625540ULL, 0x27d8c6ffab2b2514ULL, }, + { 0x886ae6cc28625540ULL, 0x8df188d8a942e2a0ULL, }, + { 0x886ae6cc28625540ULL, 0x12f7bb1a153f52fcULL, }, + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x12f7bb1a153f52fcULL, }, + { 0x704f164d4d93c708ULL, 0x8df188d8153f52fcULL, }, + { 0x886ae6cc28625540ULL, 0x27d8c6ffab2b2514ULL, }, /* 72 */ + { 0xac5aaeaab9cf8b80ULL, 0x12f7bb1a153f52fcULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x8df188d8a942e2a0ULL, }, + { 0x886ae6cc28625540ULL, 0x8df188d8a942e2a0ULL, }, + { 0x704f164d4d93c708ULL, 0x8df188d8153f52fcULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x8df188d8a942e2a0ULL, }, + { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, +}; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_FMIN_A_W(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_FMIN_A_W(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_d.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_d.c new file mode 100644 index 0000000000..62c149f83a --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_d.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction FMIN.D + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "FMIN.D"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xe38e38e38e38e38eULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0xc71c71c71c71c71cULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xe38e38e38e38e38eULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xc71c71c71c71c71cULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xe38e38e38e38e38eULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x3333333333333333ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x0000000000000000ULL, }, + { 0xe38e38e38e38e38eULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e38e38e38e38eULL, 0xccccccccccccccccULL, }, + { 0xe38e38e38e38e38eULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e38e38e38e38eULL, 0xc71c71c71c71c71cULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */ + { 0x0000000000000000ULL, 0xc71c71c71c71c71cULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xc71c71c71c71c71cULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0xe38e38e38e38e38eULL, 0xc71c71c71c71c71cULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 64 */ + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, + { 0x886ae6cc28625540ULL, 0x8df188d8a942e2a0ULL, }, + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0xfbbe00634d93c708ULL, 0x8df188d8a942e2a0ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, /* 72 */ + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x8df188d8a942e2a0ULL, }, + { 0x886ae6cc28625540ULL, 0x8df188d8a942e2a0ULL, }, + { 0xfbbe00634d93c708ULL, 0x8df188d8a942e2a0ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x8df188d8a942e2a0ULL, }, + { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, +}; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_FMIN_D(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_FMIN_D(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_w.c b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_w.c new file mode 100644 index 0000000000..c5815a66ab --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_w.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction FMIN.W + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "FMIN.W"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xe38e38e38e38e38eULL, 0x00000000e38e38e3ULL, }, + { 0x0000000000000000ULL, 0xc71c71c700000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xe38e38e3aaaaaaaaULL, 0xaaaaaaaae38e38e3ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xc71c71c7aaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x1c71c71c55555555ULL, 0xc71c71c71c71c71cULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xe38e38e3ccccccccULL, 0xcccccccce38e38e3ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xe38e38e38e38e38eULL, 0x33333333e38e38e3ULL, }, + { 0x1c71c71c33333333ULL, 0xc71c71c71c71c71cULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x00000000e38e38e3ULL, }, + { 0xe38e38e3aaaaaaaaULL, 0xaaaaaaaae38e38e3ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e38e3ccccccccULL, 0xcccccccce38e38e3ULL, }, + { 0xe38e38e38e38e38eULL, 0x33333333e38e38e3ULL, }, + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e38e38e38e38eULL, 0xc71c71c7e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */ + { 0x0000000000000000ULL, 0xc71c71c700000000ULL, }, + { 0xaaaaaaaaaaaaaaaaULL, 0xc71c71c7aaaaaaaaULL, }, + { 0x1c71c71c55555555ULL, 0xc71c71c71c71c71cULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x1c71c71c33333333ULL, 0xc71c71c71c71c71cULL, }, + { 0xe38e38e38e38e38eULL, 0xc71c71c7e38e38e3ULL, }, + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 64 */ + { 0xfbbe006328625540ULL, 0x12f7bb1afe7bb00cULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6fffe7bb00cULL, }, + { 0x886ae6cc28625540ULL, 0x8df188d8fe7bb00cULL, }, + { 0xfbbe006328625540ULL, 0x12f7bb1afe7bb00cULL, }, + { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, }, + { 0xfbbe0063b9cf8b80ULL, 0x12f7bb1aab2b2514ULL, }, + { 0xfbbe00634d93c708ULL, 0x8df188d8a942e2a0ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6fffe7bb00cULL, }, /* 72 */ + { 0xfbbe0063b9cf8b80ULL, 0x12f7bb1aab2b2514ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x8df188d8ab2b2514ULL, }, + { 0x886ae6cc28625540ULL, 0x8df188d8fe7bb00cULL, }, + { 0xfbbe00634d93c708ULL, 0x8df188d8a942e2a0ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x8df188d8ab2b2514ULL, }, + { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, +}; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_FMIN_W(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_FMIN_W(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_b.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_b.c index b603dbe93a..e96e4fdf72 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_b.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xe09e2c9abc623c9cULL, 0xe61ef050ae843cc0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_d.c index d4130c3bad..ec025b6210 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xe09e2c9abc63c49cULL, 0xe41cee4ead7a3ac0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_h.c index 00428cf672..d04b3a5abe 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xe09e2c9abc623b64ULL, 0xe41eee50ad7c3ac0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_w.c index d60b11b85e..7ae90a3daf 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xe09e2c9abc63c49cULL, 0xe41cee50ad7a3ac0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_b.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_b.c index 9a7d00bc22..05712a1f05 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_b.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x7f7f2c7f7f623c7fULL, 0x7f1e7f507f7f3c7fULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_d.c index 481fadf107..c222a9529f 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x7fffffffffffffffULL, 0x7fffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_h.c index 4c6c2b9000..0348f8ca47 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x7fff2c9a7fff3b64ULL, 0x7fff7fff7fff3ac0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_w.c index f9cb626ede..9ad9c569f8 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x7fffffff7fffffffULL, 0x7fffffff7fffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_b.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_b.c index e241b8b1b1..a7f4de9260 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x7f7f2c7f7f62c47fULL, 0x80e280b0807fc480ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_d.c index ae35a9a804..d1048fcdd5 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x7fffffffffffffffULL, 0x8000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_h.c index 48e3da7b27..6263616a63 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x7fff2c9a7fffc49cULL, 0x800080008000c540ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_w.c index 77d49b63e0..80b69f70cc 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x7fffffff7fffffffULL, 0x8000000080000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_b.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_b.c index dba9c208ee..d61623fec5 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xe09e2c9abc62ff9cULL, 0xffffffffff84ffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_d.c index 39aad16a04..7b60457f1d 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xe09e2c9abc63c49cULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_h.c index 40846b87e7..c8b226228c 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xe09e2c9abc62ffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_w.c index 046d109884..7880b03383 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xe09e2c9abc63c49cULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_b.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_b.c index 6107a42f5f..dbfcd3800a 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_b.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xe09e2c9abc62c49cULL, 0x1ae210b05284c440ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_d.c index 00f3ad7a0e..27b6d65686 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xe09e2c9abc63c49cULL, 0x1be311b15285c540ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_h.c index 2b9ffdcaa2..f7045f6151 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xe09e2c9abc62c49cULL, 0x1be211b05284c540ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_w.c index 93119edbb8..111e7c89e8 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xe09e2c9abc63c49cULL, 0x1be311b05285c540ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_d.c index 697847dc95..e6dffbf21f 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x00000000ce80f89bULL, 0xffffffff37346b78ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_h.c index 63b95aafe5..211123aa9d 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x00bf0063008f0030ULL, 0xff7eff60ffebff82ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_w.c index 7ff2bdcc63..cdab49d7dc 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000869c0000407fULL, 0xffff16c9ffff8be2ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_d.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_d.c index 372e205be9..38c43cedf7 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x00000000ce80f89bULL, 0x0000000137346b78ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_h.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_h.c index 9c96d2b875..41863f6cf8 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x00bf0063008f0130ULL, 0x017e016000eb0182ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_w.c b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_w.c index 3417fffcdd..c30c2663fc 100644 --- a/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000869c0001407fULL, 0x000116c900018be2ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_b.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_b.c index e279a2f2eb..bb73fca1a3 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_d.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_d.c index 9969b5976b..b8c5ab4dc1 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_h.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_h.c index 3029232950..24aed155f6 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_w.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_w.c index 70e9a5d5d3..c0082d1cc4 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_b.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_b.c index 260bad24df..8c857c594e 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_d.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_d.c index 2d9fb07d82..fd2a4b9d49 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_h.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_h.c index 0b34441851..6ab8f47f40 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_w.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_w.c index f1a4a5fee9..be614bb238 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_b.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_b.c index cc1528d14d..bccb6ac892 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_d.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_d.c index 8070f2080f..941d889790 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_h.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_h.c index 40db92467d..b977aaceb4 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_w.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_w.c index bde28505a6..c41a9b0479 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_b.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_b.c index 9ef7b7c00a..ed9aa28fa0 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_d.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_d.c index 307a84466f..04fcea4d2a 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_h.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_h.c index 3eef867b4e..4305010389 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_w.c b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_w.c index baf373035e..47cdc5c08f 100644 --- a/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_b.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_b.c index f1f5e6db5a..3ffb27c237 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_b.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_d.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_d.c index a87f1c965c..dc60868c27 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_d.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_h.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_h.c index a300ee3d4a..a3073d784b 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_h.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_w.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_w.c index a3bb29adcb..9e81665af7 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_w.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_b.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_b.c index 2b391c97ff..4235d59da7 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_d.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_d.c index 44c6fe4817..796f89abb7 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_h.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_h.c index 331745be0c..0b63274022 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_w.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_w.c index acccc258ea..8fcee89221 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_b.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_b.c index 7421450ded..dc50ed3cd8 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_d.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_d.c index 402a54df16..f6635f958c 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_h.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_h.c index 51685c76c0..0d09304fcb 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_w.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_w.c index adf744d9f1..4671eeee7f 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_b.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_b.c index aa222fd165..18d5706282 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_d.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_d.c index f762c4d061..15a31660d2 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_h.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_h.c index c456aef6f0..89fcc2cfe6 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_w.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_w.c index 33978d178d..c8481dfc7a 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_b.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_b.c index fc6dc51d38..ee2b39c687 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_d.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_d.c index 5394b27d6e..8fef047268 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_h.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_h.c index 0f813d870e..5b236a7bea 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_w.c b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_w.c index ff11360ba5..918420c592 100644 --- a/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_b.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_b.c index e17bb9a1ef..1b11d93025 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0101010101010101ULL, 0x0101010101010101ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_d.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_d.c index fcab2cd2e5..289cf6ae3f 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000001ULL, 0x0000000000000001ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_h.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_h.c index 83cc02ef3c..af10a04352 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0001000100010001ULL, 0x0001000100010001ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_w.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_w.c index c3bc831f03..9d3920bc53 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000100000001ULL, 0x0000000100000001ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_b.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_b.c index 97557d8f92..8c0623538f 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0101010101010101ULL, 0x0101010101010101ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_d.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_d.c index a77553837b..2a9bfff459 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000001ULL, 0x0000000000000001ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_h.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_h.c index 2628eb2d99..95da85b4b9 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0001000100010001ULL, 0x0001000100010001ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_w.c b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_w.c index 8de2043663..a3984b0790 100644 --- a/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000100000001ULL, 0x0000000100000001ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_d.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_d.c index d495361bdc..e6d72097a6 100644 --- a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x53edf7dbd76122edULL, 0x50347e61c2f51a40ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_h.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_h.c index b7850650a5..20a7029bd2 100644 --- a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x4961190d2be51b48ULL, 0x348a3e802e952784ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_w.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_w.c index 57cfd79e99..493fc10cd7 100644 --- a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x33368b8a2619d525ULL, 0x6a47932120c31904ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_d.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_d.c index 24f736da86..7c9bd57fa7 100644 --- a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x53edf7dbd76122edULL, 0xbe9d5551c2f51a40ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_h.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_h.c index 4d30246067..5ca7164718 100644 --- a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x4961190d2be5df48ULL, 0x308afe8080952b84ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_w.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_w.c index ca96d21165..271666da05 100644 --- a/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x33368b8aeab5d525ULL, 0x97d9932138871904ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_b.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_b.c index 1b90f23f2f..eabcd2a5cf 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_b.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_d.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_d.c index aa8dca8ac8..866c6839f2 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_d.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_h.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_h.c index fb9b63c16e..7f4c2406a7 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_h.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_w.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_w.c index 1334d80b59..7fb278ea02 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_w.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_b.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_b.c index 05f8c032c0..7e35435e42 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_d.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_d.c index 31218c1e45..f0a341e08a 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_h.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_h.c index 1e4e69b6ed..52de98ba8f 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_w.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_w.c index a4fa928d98..b2d0a22ac4 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_b.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_b.c index a245349dbe..6fb023a4b7 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_d.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_d.c index 7aac861e33..35ebf1fdab 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_h.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_h.c index 16c21229bb..0e7cf1e298 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_w.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_w.c index ce439a59f2..9dee9973f3 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_b.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_b.c index 1dc8c3c75c..747f54d0ac 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_b.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_d.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_d.c index a82c7ee349..49ded49fe0 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_d.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_h.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_h.c index 91f1c23658..f78104ecb6 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_h.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_w.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_w.c index 8030ed24be..e0afa01746 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_w.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_b.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_b.c index 92aff1bc5c..248b9681c7 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_d.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_d.c index 76e5dce863..219029a520 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_h.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_h.c index 878ca2be43..fb059af226 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_w.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_w.c index 3df7e102c0..dd479921f5 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_b.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_b.c index fdaab02aed..7985acf5e4 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_d.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_d.c index 68e1a92f94..45d91af127 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_h.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_h.c index f9168b9b95..eb527bbc2b 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_w.c b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_w.c index 749fcefc0c..057f22accb 100644 --- a/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_b.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_b.c index dc1a4edf0d..a8964eadf6 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_d.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_d.c index 0909793df8..3346d37d19 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_h.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_h.c index 4d1463fa16..c28c2534f5 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_w.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_w.c index 7e13966358..593e516534 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_b.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_b.c index fbc86996f5..1b5e57b96f 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_d.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_d.c index 6c3224a71b..8aef84325f 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_h.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_h.c index c9b40d76f8..ae5abb8e44 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_w.c b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_w.c index 9f248b85bc..da48929f4f 100644 --- a/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_b.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_b.c index 3cb9ee9f3a..fa9753cc75 100644 --- a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_b.c +++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0061e429846184c4ULL, 0xa9e1404091048400ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_d.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_d.c index 8853440ce8..2503467bf2 100644 --- a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_d.c +++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x4bb436d5b1e9cfc4ULL, 0x12d1ceb0e31ee400ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_h.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_h.c index b014e8141a..5162678671 100644 --- a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_h.c +++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x386153290561cfc4ULL, 0x5ce136403504e400ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_w.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_w.c index 967151cca5..7e2ff6609f 100644 --- a/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_w.c +++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x25775329b1e9cfc4ULL, 0xdfd63640e31ee400ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_b.c index b67b7cf990..f583702a6b 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_d.c index 3db9ca9714..a9ae576610 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_h.c index fce13434f5..8c193b6705 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_w.c index e087f480ab..fb8f3c1a10 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_b.c index 25a859a3d4..506500b993 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_d.c index 5506525208..ef7ee3fd15 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_h.c index 513f02bc24..17dab15761 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_w.c index 974db1fd6e..38a6395e2d 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_d.c index 7153bba0d6..dd1dd37af2 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x00000000121d33ffULL, 0xffffffffe4aea638ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_h.c index 37de5cb572..d725d1957a 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0021ffc9002dff94ULL, 0xff9cffb0ff670042ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_w.c index 6e90e1373b..af13d99c0f 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x00005a0200007be3ULL, 0x00000519ffffc6a2ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_d.c index 57cf9d2e46..bd71abfc4f 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x00000000121d33ffULL, 0xffffffffe4aea638ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_h.c index 433ff08f60..fbf0b6c45c 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0021ffc9002d0094ULL, 0xff9cffb000670042ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_w.c index 3c77c0fcda..fb6b91a3a2 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x00005a02ffff7be3ULL, 0x00000519ffffc6a2ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_b.c index 8855153947..38a6f402fd 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_d.c index d1cc4e3c08..989d27cb4e 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_h.c index e2457937c6..c847a6e6d2 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_w.c index 460de6a060..0459a4e1af 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_b.c index 8039643ba3..3533c0c3ae 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_d.c index 4b5830b48d..894f984f5f 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_h.c index dd3a0d5f86..29eea521fd 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_w.c index 690287546c..2bae876f11 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_b.c index 370952da25..9cb798c405 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x000000000000ff00ULL, 0xffffffffff00ffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_d.c index 4ba3b59adb..4915d598fd 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_h.c index 12a28ecbc4..19d8538942 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x000000000000ffffULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_w.c index fab5452394..278488bcea 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0xffffffffffffffffULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_b.c index 02245099de..a0d7616246 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_d.c index 8bdfe05b79..26cf9c5578 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_h.c index 420bfc7476..cbba316c68 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_w.c index 321faf9de6..156d62cd65 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_b.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_b.c index 6fc4f66480..dbec0466ef 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_b.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_b.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_d.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_d.c index 32eeff91f7..8b097899ce 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_d.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_d.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_h.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_h.c index e30b195412..69bf9ec7b8 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_h.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_h.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_w.c b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_w.c index 09d49cb057..365dc0ed83 100644 --- a/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_w.c +++ b/tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_w.c @@ -125,6 +125,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_b.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_b.c index c61091ec00..00b78f7ed4 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_b.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_b.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x4f4f4d4d31314e4eULL, 0xf1f1d8d84242a0a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_d.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_d.c index f67ed281e8..a33acfa382 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_d.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_d.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x704f164d5e31e24eULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_h.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_h.c index e760835fac..51866330dc 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_h.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_h.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x164d164de24ee24eULL, 0x88d888d8e2a0e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_w.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_w.c index 30d2e3802d..0e82f2199b 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_w.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_w.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x5e31e24e5e31e24eULL, 0xa942e2a0a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_b.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_b.c index c771287a71..6dc06c597e 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_b.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_b.c @@ -123,6 +123,8 @@ int32_t main(void) { 0xa9a94242e2e2a0a0ULL, 0x8d8df1f18888d8d8ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_d.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_d.c index b7d5fcdc18..a8679723aa 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_d.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_d.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x8df188d8a942e2a0ULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_h.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_h.c index af72876236..22f6ba600a 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_h.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_h.c @@ -123,6 +123,8 @@ int32_t main(void) { 0xa942a942e2a0e2a0ULL, 0x8df18df188d888d8ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_w.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_w.c index e06c9d94ca..f07689e0c8 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_w.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_w.c @@ -123,6 +123,8 @@ int32_t main(void) { 0xa942e2a0a942e2a0ULL, 0x8df188d88df188d8ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_b.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_b.c index 8e7f1c4706..2316f388ec 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_b.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_b.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x707016165e5ee2e2ULL, 0x8d8d8888a9a9e2e2ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_d.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_d.c index acbd94a68d..2feb2eb2ed 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_d.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_d.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x8df188d8a942e2a0ULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_h.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_h.c index 8a82def407..93abfadfdd 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_h.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_h.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f704f5e315e31ULL, 0x8df18df1a942a942ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_w.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_w.c index e19170c364..9b2b0d82ac 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_w.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_w.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f164d704f164dULL, 0x8df188d88df188d8ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_b.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_b.c index 1e519e6e9e..105a710d34 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_b.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_b.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x5e5e3131e2e24e4eULL, 0x70704f4f16164d4dULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_d.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_d.c index be760430c7..22579c48c5 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_d.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_d.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x704f164d5e31e24eULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_h.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_h.c index cbd4685eca..ca416c02e6 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_h.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_h.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x5e315e31e24ee24eULL, 0x704f704f164d164dULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_w.c b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_w.c index 5f4cfd0377..6652c7fbf5 100644 --- a/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_w.c +++ b/tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_w.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x5e31e24e5e31e24eULL, 0x704f164d704f164dULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/logic/test_msa_and_v.c b/tests/tcg/mips/user/ase/msa/logic/test_msa_and_v.c index 534c4201a8..1f864be5f2 100644 --- a/tests/tcg/mips/user/ase/msa/logic/test_msa_and_v.c +++ b/tests/tcg/mips/user/ase/msa/logic/test_msa_and_v.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/logic/test_msa_nor_v.c b/tests/tcg/mips/user/ase/msa/logic/test_msa_nor_v.c index f781a8bb9d..0b0f5ddb5e 100644 --- a/tests/tcg/mips/user/ase/msa/logic/test_msa_nor_v.c +++ b/tests/tcg/mips/user/ase/msa/logic/test_msa_nor_v.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x8fb0e9b2a1ce1db1ULL, 0x720e772756bd1d5fULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/logic/test_msa_or_v.c b/tests/tcg/mips/user/ase/msa/logic/test_msa_or_v.c index 924f216e41..90f535aa29 100644 --- a/tests/tcg/mips/user/ase/msa/logic/test_msa_or_v.c +++ b/tests/tcg/mips/user/ase/msa/logic/test_msa_or_v.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/logic/test_msa_xor_v.c b/tests/tcg/mips/user/ase/msa/logic/test_msa_xor_v.c index f0442e6577..398443d83a 100644 --- a/tests/tcg/mips/user/ase/msa/logic/test_msa_xor_v.c +++ b/tests/tcg/mips/user/ase/msa/logic/test_msa_xor_v.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_b.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_b.c index 409773d7f2..fdab88d5c9 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_b.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_b.c @@ -123,6 +123,8 @@ int32_t main(void) { 0xf1d842a04f4d314eULL, 0xf1d842a04f4d314eULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_d.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_d.c index 8e89716416..e7083858cd 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_d.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_d.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x704f164d5e31e24eULL, 0x704f164d5e31e24eULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_h.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_h.c index b389587dfe..bfd401f379 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_h.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_h.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x88d8e2a0164de24eULL, 0x88d8e2a0164de24eULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_w.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_w.c index d393ad5066..e58372d750 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_w.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_w.c @@ -123,6 +123,8 @@ int32_t main(void) { 0xa942e2a05e31e24eULL, 0xa942e2a05e31e24eULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_b.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_b.c index ab363a0cdc..4cefecd0ec 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_b.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_b.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x8d88a9e270165ee2ULL, 0x8d88a9e270165ee2ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_d.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_d.c index 09a61408bc..a7ea137148 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_d.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_d.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x8df188d8a942e2a0ULL, 0x8df188d8a942e2a0ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_h.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_h.c index d7a8c5b5af..bc7edcc595 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_h.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_h.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x8df1a942704f5e31ULL, 0x8df1a942704f5e31ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_w.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_w.c index 4b732d0359..ca8c4fb0b6 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_w.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_w.c @@ -123,6 +123,8 @@ int32_t main(void) { 0x8df188d8704f164dULL, 0x8df188d8704f164dULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_b.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_b.c index d9ccf575fa..c088643b8c 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_b.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_b.c @@ -41,7 +41,7 @@ int32_t main(void) uint64_t b128_result[TEST_COUNT_TOTAL][2]; uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { - { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, { 0x0000000000000000ULL, 0x0000000000000000ULL, }, @@ -123,6 +123,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_d.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_d.c index 6c555fbb23..06f3604bef 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_d.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_d.c @@ -41,7 +41,7 @@ int32_t main(void) uint64_t b128_result[TEST_COUNT_TOTAL][2]; uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { - { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, { 0x0000000000000000ULL, 0x0000000000000000ULL, }, @@ -123,6 +123,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_h.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_h.c index 9dfcb51fe5..f28d949d02 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_h.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_h.c @@ -41,7 +41,7 @@ int32_t main(void) uint64_t b128_result[TEST_COUNT_TOTAL][2]; uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { - { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, { 0x0000000000000000ULL, 0x0000000000000000ULL, }, @@ -123,6 +123,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_w.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_w.c index 97074c0924..78e26d4ca0 100644 --- a/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_w.c +++ b/tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_w.c @@ -41,7 +41,7 @@ int32_t main(void) uint64_t b128_result[TEST_COUNT_TOTAL][2]; uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { - { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, { 0x0000000000000000ULL, 0x0000000000000000ULL, }, @@ -123,6 +123,8 @@ int32_t main(void) { 0x0000000000000000ULL, 0x0000000000000000ULL, }, }; + reset_msa_registers(); + gettimeofday(&start, NULL); for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_b.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_b.c new file mode 100644 index 0000000000..6b1aa962d4 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_b.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SLL.B + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SLL.B"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x8080808080808080ULL, 0x8080808080808080ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xfcfcfcfcfcfcfcfcULL, 0xfcfcfcfcfcfcfcfcULL, }, + { 0xe0e0e0e0e0e0e0e0ULL, 0xe0e0e0e0e0e0e0e0ULL, }, + { 0xf0f0f0f0f0f0f0f0ULL, 0xf0f0f0f0f0f0f0f0ULL, }, + { 0xf8f8f8f8f8f8f8f8ULL, 0xf8f8f8f8f8f8f8f8ULL, }, + { 0xf8c0fff8c0fff8c0ULL, 0xfff8c0fff8c0fff8ULL, }, + { 0xf0fe80f0fe80f0feULL, 0x80f0fe80f0fe80f0ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xa8a8a8a8a8a8a8a8ULL, 0xa8a8a8a8a8a8a8a8ULL, }, + { 0x4040404040404040ULL, 0x4040404040404040ULL, }, + { 0xa0a0a0a0a0a0a0a0ULL, 0xa0a0a0a0a0a0a0a0ULL, }, + { 0x5050505050505050ULL, 0x5050505050505050ULL, }, + { 0x5080aa5080aa5080ULL, 0xaa5080aa5080aa50ULL, }, + { 0xa05400a05400a054ULL, 0x00a05400a05400a0ULL, }, + { 0x8080808080808080ULL, 0x8080808080808080ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5454545454545454ULL, 0x5454545454545454ULL, }, + { 0xa0a0a0a0a0a0a0a0ULL, 0xa0a0a0a0a0a0a0a0ULL, }, + { 0x5050505050505050ULL, 0x5050505050505050ULL, }, + { 0xa8a8a8a8a8a8a8a8ULL, 0xa8a8a8a8a8a8a8a8ULL, }, + { 0xa84055a84055a840ULL, 0x55a84055a84055a8ULL, }, + { 0x50aa8050aa8050aaULL, 0x8050aa8050aa8050ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3030303030303030ULL, 0x3030303030303030ULL, }, + { 0x8080808080808080ULL, 0x8080808080808080ULL, }, + { 0xc0c0c0c0c0c0c0c0ULL, 0xc0c0c0c0c0c0c0c0ULL, }, + { 0x6060606060606060ULL, 0x6060606060606060ULL, }, + { 0x6000cc6000cc6000ULL, 0xcc6000cc6000cc60ULL, }, + { 0xc09800c09800c098ULL, 0x00c09800c09800c0ULL, }, + { 0x8080808080808080ULL, 0x8080808080808080ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x6060606060606060ULL, 0x6060606060606060ULL, }, + { 0x3030303030303030ULL, 0x3030303030303030ULL, }, + { 0x9898989898989898ULL, 0x9898989898989898ULL, }, + { 0x98c03398c03398c0ULL, 0x3398c03398c03398ULL, }, + { 0x3066803066803066ULL, 0x8030668030668030ULL, }, + { 0x8000008000008000ULL, 0x0080000080000080ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x8c38e08c38e08c38ULL, 0xe08c38e08c38e08cULL, }, + { 0x60c00060c00060c0ULL, 0x0060c00060c00060ULL, }, + { 0x30e08030e08030e0ULL, 0x8030e08030e08030ULL, }, + { 0x1870c01870c01870ULL, 0xc01870c01870c018ULL, }, + { 0x1880381880381880ULL, 0x3818803818803818ULL, }, + { 0x301c00301c00301cULL, 0x00301c00301c0030ULL, }, + { 0x0080800080800080ULL, 0x8000808000808000ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x70c41c70c41c70c4ULL, 0x1c70c41c70c41c70ULL, }, + { 0x8020e08020e08020ULL, 0xe08020e08020e080ULL, }, + { 0xc01070c01070c010ULL, 0x70c01070c01070c0ULL, }, + { 0xe08838e08838e088ULL, 0x38e08838e08838e0ULL, }, + { 0xe040c7e040c7e040ULL, 0xc7e040c7e040c7e0ULL, }, + { 0xc0e280c0e280c0e2ULL, 0x80c0e280c0e280c0ULL, }, + { 0x88a880c02888a040ULL, 0x5880588080d8b0c0ULL, }, /* 64 */ + { 0x4080e66000108040ULL, 0x2c805878c080c0c0ULL, }, + { 0x80a880305000a840ULL, 0x8067c000f0d800c0ULL, }, + { 0x8800808000c45400ULL, 0x60ce0b5efcecc00cULL, }, + { 0xfbf800304d4ce008ULL, 0x9080d88040f852c0ULL, }, + { 0xd8800018a0988008ULL, 0x4880d868a08048c0ULL, }, + { 0xb0f8008c9a803808ULL, 0x00f7c000a8f840c0ULL, }, + { 0xfb00006040261c00ULL, 0x40eebb1a2afc48fcULL, }, + { 0xac6880a0b93c6080ULL, 0x380030c0c0582540ULL, }, /* 72 */ + { 0x6080ae5020788080ULL, 0x9c0030fc60809440ULL, }, + { 0xc06880a872805880ULL, 0x80d880805858a040ULL, }, + { 0xac008040409e2c00ULL, 0xe0b0c6ff56ac9414ULL, }, + { 0x703c80d05ec4404eULL, 0x688040004010e200ULL, }, + { 0x80c01668c088004eULL, 0x3480406020008800ULL, }, + { 0x003c8034bc80104eULL, 0x80f1000048104000ULL, }, + { 0x708080a080628880ULL, 0xa0e288d8520888a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SLL_B(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SLL_B(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_d.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_d.c new file mode 100644 index 0000000000..deb3b11740 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_d.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SLL.D + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SLL.D"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x8000000000000000ULL, 0x8000000000000000ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xfffffc0000000000ULL, 0xfffffc0000000000ULL, }, + { 0xffffffffffe00000ULL, 0xffffffffffe00000ULL, }, + { 0xfffffffffffff000ULL, 0xfffffffffffff000ULL, }, + { 0xfff8000000000000ULL, 0xfff8000000000000ULL, }, + { 0xffffffffffffc000ULL, 0xfffffff800000000ULL, }, + { 0xfffe000000000000ULL, 0xfffffffff0000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaa80000000000ULL, 0xaaaaa80000000000ULL, }, + { 0x5555555555400000ULL, 0x5555555555400000ULL, }, + { 0xaaaaaaaaaaaaa000ULL, 0xaaaaaaaaaaaaa000ULL, }, + { 0x5550000000000000ULL, 0x5550000000000000ULL, }, + { 0xaaaaaaaaaaaa8000ULL, 0x5555555000000000ULL, }, + { 0x5554000000000000ULL, 0xaaaaaaaaa0000000ULL, }, + { 0x8000000000000000ULL, 0x8000000000000000ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555540000000000ULL, 0x5555540000000000ULL, }, + { 0xaaaaaaaaaaa00000ULL, 0xaaaaaaaaaaa00000ULL, }, + { 0x5555555555555000ULL, 0x5555555555555000ULL, }, + { 0xaaa8000000000000ULL, 0xaaa8000000000000ULL, }, + { 0x5555555555554000ULL, 0xaaaaaaa800000000ULL, }, + { 0xaaaa000000000000ULL, 0x5555555550000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333300000000000ULL, 0x3333300000000000ULL, }, + { 0x9999999999800000ULL, 0x9999999999800000ULL, }, + { 0xccccccccccccc000ULL, 0xccccccccccccc000ULL, }, + { 0x6660000000000000ULL, 0x6660000000000000ULL, }, + { 0x3333333333330000ULL, 0x6666666000000000ULL, }, + { 0x9998000000000000ULL, 0xccccccccc0000000ULL, }, + { 0x8000000000000000ULL, 0x8000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xcccccc0000000000ULL, 0xcccccc0000000000ULL, }, + { 0x6666666666600000ULL, 0x6666666666600000ULL, }, + { 0x3333333333333000ULL, 0x3333333333333000ULL, }, + { 0x9998000000000000ULL, 0x9998000000000000ULL, }, + { 0xccccccccccccc000ULL, 0x9999999800000000ULL, }, + { 0x6666000000000000ULL, 0x3333333330000000ULL, }, + { 0x0000000000000000ULL, 0x8000000000000000ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xe38e380000000000ULL, 0x38e38c0000000000ULL, }, + { 0x1c71c71c71c00000ULL, 0xc71c71c71c600000ULL, }, + { 0xe38e38e38e38e000ULL, 0x38e38e38e38e3000ULL, }, + { 0x1c70000000000000ULL, 0xc718000000000000ULL, }, + { 0x8e38e38e38e38000ULL, 0x1c71c71800000000ULL, }, + { 0xc71c000000000000ULL, 0x8e38e38e30000000ULL, }, + { 0x8000000000000000ULL, 0x0000000000000000ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x1c71c40000000000ULL, 0xc71c700000000000ULL, }, + { 0xe38e38e38e200000ULL, 0x38e38e38e3800000ULL, }, + { 0x1c71c71c71c71000ULL, 0xc71c71c71c71c000ULL, }, + { 0xe388000000000000ULL, 0x38e0000000000000ULL, }, + { 0x71c71c71c71c4000ULL, 0xe38e38e000000000ULL, }, + { 0x38e2000000000000ULL, 0x71c71c71c0000000ULL, }, + { 0x886ae6cc28625540ULL, 0x70b5efe7bb00c000ULL, }, /* 64 */ + { 0x6ae6cc2862554000ULL, 0xc000000000000000ULL, }, + { 0x886ae6cc28625540ULL, 0xb5efe7bb00c00000ULL, }, + { 0xb9b30a1895500000ULL, 0xfe7bb00c00000000ULL, }, + { 0xfbbe00634d93c708ULL, 0x7bb1a153f52fc000ULL, }, + { 0xbe00634d93c70800ULL, 0xc000000000000000ULL, }, + { 0xfbbe00634d93c708ULL, 0xb1a153f52fc00000ULL, }, + { 0x8018d364f1c20000ULL, 0x153f52fc00000000ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x8c6ffab2b2514000ULL, }, /* 72 */ + { 0x5aaeaab9cf8b8000ULL, 0x4000000000000000ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x6ffab2b251400000ULL, }, + { 0xabaaae73e2e00000ULL, 0xab2b251400000000ULL, }, + { 0x704f164d5e31e24eULL, 0x188d8a942e2a0000ULL, }, + { 0x4f164d5e31e24e00ULL, 0x0000000000000000ULL, }, + { 0x704f164d5e31e24eULL, 0x8d8a942e2a000000ULL, }, + { 0xc593578c78938000ULL, 0xa942e2a000000000ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SLL_D(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SLL_D(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_h.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_h.c new file mode 100644 index 0000000000..edb3b11be5 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_h.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SLL.H + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SLL.H"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x8000800080008000ULL, 0x8000800080008000ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xfc00fc00fc00fc00ULL, 0xfc00fc00fc00fc00ULL, }, + { 0xffe0ffe0ffe0ffe0ULL, 0xffe0ffe0ffe0ffe0ULL, }, + { 0xf000f000f000f000ULL, 0xf000f000f000f000ULL, }, + { 0xfff8fff8fff8fff8ULL, 0xfff8fff8fff8fff8ULL, }, + { 0xc000fff8ff00c000ULL, 0xfff8ff00c000fff8ULL, }, + { 0xfffef000ff80fffeULL, 0xf000ff80fffef000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xa800a800a800a800ULL, 0xa800a800a800a800ULL, }, + { 0x5540554055405540ULL, 0x5540554055405540ULL, }, + { 0xa000a000a000a000ULL, 0xa000a000a000a000ULL, }, + { 0x5550555055505550ULL, 0x5550555055505550ULL, }, + { 0x80005550aa008000ULL, 0x5550aa0080005550ULL, }, + { 0x5554a00055005554ULL, 0xa00055005554a000ULL, }, + { 0x8000800080008000ULL, 0x8000800080008000ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5400540054005400ULL, 0x5400540054005400ULL, }, + { 0xaaa0aaa0aaa0aaa0ULL, 0xaaa0aaa0aaa0aaa0ULL, }, + { 0x5000500050005000ULL, 0x5000500050005000ULL, }, + { 0xaaa8aaa8aaa8aaa8ULL, 0xaaa8aaa8aaa8aaa8ULL, }, + { 0x4000aaa855004000ULL, 0xaaa855004000aaa8ULL, }, + { 0xaaaa5000aa80aaaaULL, 0x5000aa80aaaa5000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3000300030003000ULL, 0x3000300030003000ULL, }, + { 0x9980998099809980ULL, 0x9980998099809980ULL, }, + { 0xc000c000c000c000ULL, 0xc000c000c000c000ULL, }, + { 0x6660666066606660ULL, 0x6660666066606660ULL, }, + { 0x00006660cc000000ULL, 0x6660cc0000006660ULL, }, + { 0x9998c00066009998ULL, 0xc00066009998c000ULL, }, + { 0x8000800080008000ULL, 0x8000800080008000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xcc00cc00cc00cc00ULL, 0xcc00cc00cc00cc00ULL, }, + { 0x6660666066606660ULL, 0x6660666066606660ULL, }, + { 0x3000300030003000ULL, 0x3000300030003000ULL, }, + { 0x9998999899989998ULL, 0x9998999899989998ULL, }, + { 0xc00099983300c000ULL, 0x99983300c0009998ULL, }, + { 0x6666300099806666ULL, 0x3000998066663000ULL, }, + { 0x0000800000000000ULL, 0x8000000000008000ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x38008c00e0003800ULL, 0x8c00e00038008c00ULL, }, + { 0x71c01c60c70071c0ULL, 0x1c60c70071c01c60ULL, }, + { 0xe00030008000e000ULL, 0x30008000e0003000ULL, }, + { 0x1c70c71871c01c70ULL, 0xc71871c01c70c718ULL, }, + { 0x8000c71838008000ULL, 0xc71838008000c718ULL, }, + { 0xc71c30001c00c71cULL, 0x30001c00c71c3000ULL, }, + { 0x8000000080008000ULL, 0x0000800080000000ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0xc40070001c00c400ULL, 0x70001c00c4007000ULL, }, + { 0x8e20e38038e08e20ULL, 0xe38038e08e20e380ULL, }, + { 0x1000c00070001000ULL, 0xc00070001000c000ULL, }, + { 0xe38838e08e38e388ULL, 0x38e08e38e38838e0ULL, }, + { 0x400038e0c7004000ULL, 0x38e0c700400038e0ULL, }, + { 0x38e2c000e38038e2ULL, 0xc000e38038e2c000ULL, }, + { 0xa800c000a1885540ULL, 0xb3808000d800c000ULL, }, /* 64 */ + { 0x8000366043104000ULL, 0xb38078008000c000ULL, }, + { 0xa800300000005540ULL, 0x67000000d80000c0ULL, }, + { 0x0000800050c40000ULL, 0x96ce5e00f9ecb00cULL, }, + { 0xf8003000364cc708ULL, 0x7b808000f800c000ULL, }, + { 0x800003186c980800ULL, 0x7b8068008000c000ULL, }, + { 0xf8008c008000c708ULL, 0xf7000000f8002fc0ULL, }, + { 0x000060009b260000ULL, 0x25ee1a0054fc52fcULL, }, + { 0x6800a000e73c8b80ULL, 0xec00c00058004000ULL, }, /* 72 */ + { 0x80007550ce788000ULL, 0xec00fc0080004000ULL, }, + { 0x6800a80080008b80ULL, 0xd800800058005140ULL, }, + { 0x00004000739e0000ULL, 0x4fb0ff00acac2514ULL, }, + { 0x3c00d00078c4e24eULL, 0xf880000010000000ULL, }, + { 0xc000b268f1884e00ULL, 0xf880600000000000ULL, }, + { 0x3c0034008000e24eULL, 0xf100000010002a00ULL, }, + { 0x8000a000bc628000ULL, 0x1be2d800a508e2a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SLL_H(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SLL_H(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_w.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_w.c new file mode 100644 index 0000000000..4cafaab334 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sll_w.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SLL.W + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SLL.W"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x8000000080000000ULL, 0x8000000080000000ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xfffffc00fffffc00ULL, 0xfffffc00fffffc00ULL, }, + { 0xffe00000ffe00000ULL, 0xffe00000ffe00000ULL, }, + { 0xfffff000fffff000ULL, 0xfffff000fffff000ULL, }, + { 0xfff80000fff80000ULL, 0xfff80000fff80000ULL, }, + { 0xfffffff8ffffc000ULL, 0xff000000fffffff8ULL, }, + { 0xf0000000fffe0000ULL, 0xffffff80f0000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xaaaaa800aaaaa800ULL, 0xaaaaa800aaaaa800ULL, }, + { 0x5540000055400000ULL, 0x5540000055400000ULL, }, + { 0xaaaaa000aaaaa000ULL, 0xaaaaa000aaaaa000ULL, }, + { 0x5550000055500000ULL, 0x5550000055500000ULL, }, + { 0x55555550aaaa8000ULL, 0xaa00000055555550ULL, }, + { 0xa000000055540000ULL, 0x55555500a0000000ULL, }, + { 0x8000000080000000ULL, 0x8000000080000000ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x5555540055555400ULL, 0x5555540055555400ULL, }, + { 0xaaa00000aaa00000ULL, 0xaaa00000aaa00000ULL, }, + { 0x5555500055555000ULL, 0x5555500055555000ULL, }, + { 0xaaa80000aaa80000ULL, 0xaaa80000aaa80000ULL, }, + { 0xaaaaaaa855554000ULL, 0x55000000aaaaaaa8ULL, }, + { 0x50000000aaaa0000ULL, 0xaaaaaa8050000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333300033333000ULL, 0x3333300033333000ULL, }, + { 0x9980000099800000ULL, 0x9980000099800000ULL, }, + { 0xccccc000ccccc000ULL, 0xccccc000ccccc000ULL, }, + { 0x6660000066600000ULL, 0x6660000066600000ULL, }, + { 0x6666666033330000ULL, 0xcc00000066666660ULL, }, + { 0xc000000099980000ULL, 0x66666600c0000000ULL, }, + { 0x8000000080000000ULL, 0x8000000080000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0xcccccc00cccccc00ULL, 0xcccccc00cccccc00ULL, }, + { 0x6660000066600000ULL, 0x6660000066600000ULL, }, + { 0x3333300033333000ULL, 0x3333300033333000ULL, }, + { 0x9998000099980000ULL, 0x9998000099980000ULL, }, + { 0x99999998ccccc000ULL, 0x3300000099999998ULL, }, + { 0x3000000066660000ULL, 0x9999998030000000ULL, }, + { 0x8000000000000000ULL, 0x0000000080000000ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x38e38c00e38e3800ULL, 0x8e38e00038e38c00ULL, }, + { 0x1c60000071c00000ULL, 0xc70000001c600000ULL, }, + { 0xe38e30008e38e000ULL, 0x38e38000e38e3000ULL, }, + { 0xc71800001c700000ULL, 0x71c00000c7180000ULL, }, + { 0x1c71c71838e38000ULL, 0x380000001c71c718ULL, }, + { 0x30000000c71c0000ULL, 0x71c71c0030000000ULL, }, + { 0x0000000080000000ULL, 0x8000000000000000ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0xc71c70001c71c400ULL, 0x71c71c00c71c7000ULL, }, + { 0xe38000008e200000ULL, 0x38e00000e3800000ULL, }, + { 0x1c71c00071c71000ULL, 0xc71c70001c71c000ULL, }, + { 0x38e00000e3880000ULL, 0x8e38000038e00000ULL, }, + { 0xe38e38e0c71c4000ULL, 0xc7000000e38e38e0ULL, }, + { 0xc000000038e20000ULL, 0x8e38e380c0000000ULL, }, + { 0xae6cc00028625540ULL, 0x80000000bb00c000ULL, }, /* 64 */ + { 0x4357366062554000ULL, 0x78000000c0000000ULL, }, + { 0xab9b300028625540ULL, 0x0000000000c00000ULL, }, + { 0x5cd9800095500000ULL, 0x5e000000fe7bb00cULL, }, + { 0xe00630004d93c708ULL, 0x80000000f52fc000ULL, }, + { 0xddf0031893c70800ULL, 0x68000000c0000000ULL, }, + { 0xf8018c004d93c708ULL, 0x000000002fc00000ULL, }, + { 0xc00c6000f1c20000ULL, 0x1a000000153f52fcULL, }, + { 0xaaeaa000b9cf8b80ULL, 0xc0000000b2514000ULL, }, /* 72 */ + { 0x62d57550cf8b8000ULL, 0xfc00000040000000ULL, }, + { 0x6abaa800b9cf8b80ULL, 0x8000000051400000ULL, }, + { 0x55d54000e2e00000ULL, 0xff000000ab2b2514ULL, }, + { 0xf164d0005e31e24eULL, 0x000000002e2a0000ULL, }, + { 0x8278b26831e24e00ULL, 0x6000000000000000ULL, }, + { 0x3c5934005e31e24eULL, 0x000000002a000000ULL, }, + { 0xe2c9a00078938000ULL, 0xd8000000a942e2a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SLL_W(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SLL_W(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_b.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_b.c new file mode 100644 index 0000000000..b1432c2806 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_b.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRA.B + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRA.B"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xeaeaeaeaeaeaeaeaULL, 0xeaeaeaeaeaeaeaeaULL, }, + { 0xfdfdfdfdfdfdfdfdULL, 0xfdfdfdfdfdfdfdfdULL, }, + { 0xfafafafafafafafaULL, 0xfafafafafafafafaULL, }, + { 0xf5f5f5f5f5f5f5f5ULL, 0xf5f5f5f5f5f5f5f5ULL, }, + { 0xf5feaaf5feaaf5feULL, 0xaaf5feaaf5feaaf5ULL, }, + { 0xfad5fffad5fffad5ULL, 0xfffad5fffad5fffaULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x1515151515151515ULL, 0x1515151515151515ULL, }, + { 0x0202020202020202ULL, 0x0202020202020202ULL, }, + { 0x0505050505050505ULL, 0x0505050505050505ULL, }, + { 0x0a0a0a0a0a0a0a0aULL, 0x0a0a0a0a0a0a0a0aULL, }, + { 0x0a01550a01550a01ULL, 0x550a01550a01550aULL, }, + { 0x052a00052a00052aULL, 0x00052a00052a0005ULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xf3f3f3f3f3f3f3f3ULL, 0xf3f3f3f3f3f3f3f3ULL, }, + { 0xfefefefefefefefeULL, 0xfefefefefefefefeULL, }, + { 0xfcfcfcfcfcfcfcfcULL, 0xfcfcfcfcfcfcfcfcULL, }, + { 0xf9f9f9f9f9f9f9f9ULL, 0xf9f9f9f9f9f9f9f9ULL, }, + { 0xf9ffccf9ffccf9ffULL, 0xccf9ffccf9ffccf9ULL, }, + { 0xfce6fffce6fffce6ULL, 0xfffce6fffce6fffcULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x0c0c0c0c0c0c0c0cULL, 0x0c0c0c0c0c0c0c0cULL, }, + { 0x0101010101010101ULL, 0x0101010101010101ULL, }, + { 0x0303030303030303ULL, 0x0303030303030303ULL, }, + { 0x0606060606060606ULL, 0x0606060606060606ULL, }, + { 0x0600330600330600ULL, 0x3306003306003306ULL, }, + { 0x0319000319000319ULL, 0x0003190003190003ULL, }, + { 0xffff00ffff00ffffULL, 0x00ffff00ffff00ffULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xf8e30ef8e30ef8e3ULL, 0x0ef8e30ef8e30ef8ULL, }, + { 0xfffc01fffc01fffcULL, 0x01fffc01fffc01ffULL, }, + { 0xfef803fef803fef8ULL, 0x03fef803fef803feULL, }, + { 0xfcf107fcf107fcf1ULL, 0x07fcf107fcf107fcULL, }, + { 0xfcfe38fcfe38fcfeULL, 0x38fcfe38fcfe38fcULL, }, + { 0xfec700fec700fec7ULL, 0x00fec700fec700feULL, }, + { 0x0000ff0000ff0000ULL, 0xff0000ff0000ff00ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x071cf1071cf1071cULL, 0xf1071cf1071cf107ULL, }, + { 0x0003fe0003fe0003ULL, 0xfe0003fe0003fe00ULL, }, + { 0x0107fc0107fc0107ULL, 0xfc0107fc0107fc01ULL, }, + { 0x030ef8030ef8030eULL, 0xf8030ef8030ef803ULL, }, + { 0x0301c70301c70301ULL, 0xc70301c70301c703ULL, }, + { 0x0138ff0138ff0138ULL, 0xff0138ff0138ff01ULL, }, + { 0x881afffc28180240ULL, 0x09000101ff0fb000ULL, }, /* 64 */ + { 0xf101e6f9010c0040ULL, 0x12000117ff00ec00ULL, }, + { 0xf81afff314000a40ULL, 0x00670000ff0ffd00ULL, }, + { 0x8800fffe00311501ULL, 0x02330b5eff1eec0cULL, }, + { 0xfbef00064de4fe08ULL, 0x02fff700000752ffULL, }, + { 0xfffe000c02f2ff08ULL, 0x04fff706000014ffULL, }, + { 0xffef001826fff808ULL, 0x00f7fe00020702ffULL, }, + { 0xfbff000301c9f100ULL, 0x00fbbb1a0a0f14fcULL, }, + { 0xac16fefab9f3fc80ULL, 0x04fff8fffe052501ULL, }, /* 72 */ + { 0xf501aef5fdf9ff80ULL, 0x09fff8fffd000901ULL, }, + { 0xfa16feeadcfff180ULL, 0x00d8fffff5050101ULL, }, + { 0xac00fefdfee7e2feULL, 0x01ecc6ffd50a0914ULL, }, + { 0x701300045e0cff4eULL, 0xf1fff1fffe08e2faULL, }, + { 0x0e0116090206ff4eULL, 0xe3fff1f6fd00f8faULL, }, + { 0x071300132f00fc4eULL, 0xfff1fefff508fffaULL, }, + { 0x700000020118f801ULL, 0xfcf888d8d410f8a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRA_B(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRA_B(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_d.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_d.c new file mode 100644 index 0000000000..cb6c12dde1 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_d.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRA.D + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRA.D"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xffffffffffeaaaaaULL, 0xffffffffffeaaaaaULL, }, + { 0xfffffd5555555555ULL, 0xfffffd5555555555ULL, }, + { 0xfffaaaaaaaaaaaaaULL, 0xfffaaaaaaaaaaaaaULL, }, + { 0xfffffffffffff555ULL, 0xfffffffffffff555ULL, }, + { 0xfffeaaaaaaaaaaaaULL, 0xfffffffff5555555ULL, }, + { 0xffffffffffffd555ULL, 0xfffffffaaaaaaaaaULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0000000000155555ULL, 0x0000000000155555ULL, }, + { 0x000002aaaaaaaaaaULL, 0x000002aaaaaaaaaaULL, }, + { 0x0005555555555555ULL, 0x0005555555555555ULL, }, + { 0x0000000000000aaaULL, 0x0000000000000aaaULL, }, + { 0x0001555555555555ULL, 0x000000000aaaaaaaULL, }, + { 0x0000000000002aaaULL, 0x0000000555555555ULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xfffffffffff33333ULL, 0xfffffffffff33333ULL, }, + { 0xfffffe6666666666ULL, 0xfffffe6666666666ULL, }, + { 0xfffcccccccccccccULL, 0xfffcccccccccccccULL, }, + { 0xfffffffffffff999ULL, 0xfffffffffffff999ULL, }, + { 0xffff333333333333ULL, 0xfffffffff9999999ULL, }, + { 0xffffffffffffe666ULL, 0xfffffffcccccccccULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x00000000000cccccULL, 0x00000000000cccccULL, }, + { 0x0000019999999999ULL, 0x0000019999999999ULL, }, + { 0x0003333333333333ULL, 0x0003333333333333ULL, }, + { 0x0000000000000666ULL, 0x0000000000000666ULL, }, + { 0x0000ccccccccccccULL, 0x0000000006666666ULL, }, + { 0x0000000000001999ULL, 0x0000000333333333ULL, }, + { 0xffffffffffffffffULL, 0x0000000000000000ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xfffffffffff8e38eULL, 0x00000000000e38e3ULL, }, + { 0xffffff1c71c71c71ULL, 0x000001c71c71c71cULL, }, + { 0xfffe38e38e38e38eULL, 0x00038e38e38e38e3ULL, }, + { 0xfffffffffffffc71ULL, 0x000000000000071cULL, }, + { 0xffff8e38e38e38e3ULL, 0x00000000071c71c7ULL, }, + { 0xfffffffffffff1c7ULL, 0x000000038e38e38eULL, }, + { 0x0000000000000000ULL, 0xffffffffffffffffULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0000000000071c71ULL, 0xfffffffffff1c71cULL, }, + { 0x000000e38e38e38eULL, 0xfffffe38e38e38e3ULL, }, + { 0x0001c71c71c71c71ULL, 0xfffc71c71c71c71cULL, }, + { 0x000000000000038eULL, 0xfffffffffffff8e3ULL, }, + { 0x000071c71c71c71cULL, 0xfffffffff8e38e38ULL, }, + { 0x0000000000000e38ULL, 0xfffffffc71c71c71ULL, }, + { 0x886ae6cc28625540ULL, 0x0004b670b5efe7bbULL, }, /* 64 */ + { 0xff886ae6cc286255ULL, 0x0000000000000004ULL, }, + { 0x886ae6cc28625540ULL, 0x000004b670b5efe7ULL, }, + { 0xfffe21ab9b30a189ULL, 0x000000004b670b5eULL, }, + { 0xfbbe00634d93c708ULL, 0x00012f7bb1a153f5ULL, }, + { 0xfffbbe00634d93c7ULL, 0x0000000000000001ULL, }, + { 0xfbbe00634d93c708ULL, 0x0000012f7bb1a153ULL, }, + { 0xffffeef8018d364fULL, 0x0000000012f7bb1aULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x00027d8c6ffab2b2ULL, }, /* 72 */ + { 0xffac5aaeaab9cf8bULL, 0x0000000000000002ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x0000027d8c6ffab2ULL, }, + { 0xfffeb16abaaae73eULL, 0x0000000027d8c6ffULL, }, + { 0x704f164d5e31e24eULL, 0xfff8df188d8a942eULL, }, + { 0x00704f164d5e31e2ULL, 0xfffffffffffffff8ULL, }, + { 0x704f164d5e31e24eULL, 0xfffff8df188d8a94ULL, }, + { 0x0001c13c593578c7ULL, 0xffffffff8df188d8ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRA_D(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRA_D(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_h.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_h.c new file mode 100644 index 0000000000..2e505089de --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_h.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRA.H + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRA.H"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xffeaffeaffeaffeaULL, 0xffeaffeaffeaffeaULL, }, + { 0xfd55fd55fd55fd55ULL, 0xfd55fd55fd55fd55ULL, }, + { 0xfffafffafffafffaULL, 0xfffafffafffafffaULL, }, + { 0xf555f555f555f555ULL, 0xf555f555f555f555ULL, }, + { 0xfffef555ffaafffeULL, 0xf555ffaafffef555ULL, }, + { 0xd555fffaff55d555ULL, 0xfffaff55d555fffaULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0015001500150015ULL, 0x0015001500150015ULL, }, + { 0x02aa02aa02aa02aaULL, 0x02aa02aa02aa02aaULL, }, + { 0x0005000500050005ULL, 0x0005000500050005ULL, }, + { 0x0aaa0aaa0aaa0aaaULL, 0x0aaa0aaa0aaa0aaaULL, }, + { 0x00010aaa00550001ULL, 0x0aaa005500010aaaULL, }, + { 0x2aaa000500aa2aaaULL, 0x000500aa2aaa0005ULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xfff3fff3fff3fff3ULL, 0xfff3fff3fff3fff3ULL, }, + { 0xfe66fe66fe66fe66ULL, 0xfe66fe66fe66fe66ULL, }, + { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, }, + { 0xf999f999f999f999ULL, 0xf999f999f999f999ULL, }, + { 0xfffff999ffccffffULL, 0xf999ffccfffff999ULL, }, + { 0xe666fffcff99e666ULL, 0xfffcff99e666fffcULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x000c000c000c000cULL, 0x000c000c000c000cULL, }, + { 0x0199019901990199ULL, 0x0199019901990199ULL, }, + { 0x0003000300030003ULL, 0x0003000300030003ULL, }, + { 0x0666066606660666ULL, 0x0666066606660666ULL, }, + { 0x0000066600330000ULL, 0x0666003300000666ULL, }, + { 0x1999000300661999ULL, 0x0003006619990003ULL, }, + { 0xffff0000ffffffffULL, 0x0000ffffffff0000ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xfff8000effe3fff8ULL, 0x000effe3fff8000eULL, }, + { 0xff1c01c7fc71ff1cULL, 0x01c7fc71ff1c01c7ULL, }, + { 0xfffe0003fff8fffeULL, 0x0003fff8fffe0003ULL, }, + { 0xfc71071cf1c7fc71ULL, 0x071cf1c7fc71071cULL, }, + { 0xffff071cff8effffULL, 0x071cff8effff071cULL, }, + { 0xf1c70003ff1cf1c7ULL, 0x0003ff1cf1c70003ULL, }, + { 0x0000ffff00000000ULL, 0xffff00000000ffffULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0007fff1001c0007ULL, 0xfff1001c0007fff1ULL, }, + { 0x00e3fe38038e00e3ULL, 0xfe38038e00e3fe38ULL, }, + { 0x0001fffc00070001ULL, 0xfffc00070001fffcULL, }, + { 0x038ef8e30e38038eULL, 0xf8e30e38038ef8e3ULL, }, + { 0x0000f8e300710000ULL, 0xf8e300710000f8e3ULL, }, + { 0x0e38fffc00e30e38ULL, 0xfffc00e30e38fffcULL, }, + { 0xffe2fffe0a185540ULL, 0x00960000fffffffbULL, }, /* 64 */ + { 0xfffefcd9050c0055ULL, 0x00960002fffffffbULL, }, + { 0xffe2fff900005540ULL, 0x004b0000fffffb00ULL, }, + { 0xffffffff14310001ULL, 0x25b3000bff9eb00cULL, }, + { 0xfffe00001364c708ULL, 0x0025fffe00020005ULL, }, + { 0xffff000c09b2ffc7ULL, 0x0025ffee00000005ULL, }, + { 0xfffe00000000c708ULL, 0x0012ffff0002052fULL, }, + { 0xffff000026c9ffffULL, 0x097bffbb054f52fcULL, }, + { 0xffebfffaee738b80ULL, 0x004ffffffff50002ULL, }, /* 72 */ + { 0xfffef5d5f739ff8bULL, 0x004ffff1ffff0002ULL, }, + { 0xffebffebffff8b80ULL, 0x0027fffffff50251ULL, }, + { 0xfffffffddce7fffeULL, 0x13ecffc6eaca2514ULL, }, + { 0x001c0001178ce24eULL, 0xff1bfffefff5fffeULL, }, + { 0x000102c90bc6ffe2ULL, 0xff1bffe2fffffffeULL, }, + { 0x001c00050000e24eULL, 0xff8dfffffff5fe2aULL, }, + { 0x000000002f18ffffULL, 0xc6f8ff88ea50e2a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRA_H(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRA_H(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_w.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_w.c new file mode 100644 index 0000000000..f4ba1b5621 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_sra_w.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRA.W + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRA.W"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xffeaaaaaffeaaaaaULL, 0xffeaaaaaffeaaaaaULL, }, + { 0xfffffd55fffffd55ULL, 0xfffffd55fffffd55ULL, }, + { 0xfffaaaaafffaaaaaULL, 0xfffaaaaafffaaaaaULL, }, + { 0xfffff555fffff555ULL, 0xfffff555fffff555ULL, }, + { 0xf5555555fffeaaaaULL, 0xffffffaaf5555555ULL, }, + { 0xfffffffaffffd555ULL, 0xff555555fffffffaULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0015555500155555ULL, 0x0015555500155555ULL, }, + { 0x000002aa000002aaULL, 0x000002aa000002aaULL, }, + { 0x0005555500055555ULL, 0x0005555500055555ULL, }, + { 0x00000aaa00000aaaULL, 0x00000aaa00000aaaULL, }, + { 0x0aaaaaaa00015555ULL, 0x000000550aaaaaaaULL, }, + { 0x0000000500002aaaULL, 0x00aaaaaa00000005ULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xfff33333fff33333ULL, 0xfff33333fff33333ULL, }, + { 0xfffffe66fffffe66ULL, 0xfffffe66fffffe66ULL, }, + { 0xfffcccccfffcccccULL, 0xfffcccccfffcccccULL, }, + { 0xfffff999fffff999ULL, 0xfffff999fffff999ULL, }, + { 0xf9999999ffff3333ULL, 0xffffffccf9999999ULL, }, + { 0xfffffffcffffe666ULL, 0xff999999fffffffcULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x000ccccc000cccccULL, 0x000ccccc000cccccULL, }, + { 0x0000019900000199ULL, 0x0000019900000199ULL, }, + { 0x0003333300033333ULL, 0x0003333300033333ULL, }, + { 0x0000066600000666ULL, 0x0000066600000666ULL, }, + { 0x066666660000ccccULL, 0x0000003306666666ULL, }, + { 0x0000000300001999ULL, 0x0066666600000003ULL, }, + { 0xffffffffffffffffULL, 0x00000000ffffffffULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xfff8e38effe38e38ULL, 0x000e38e3fff8e38eULL, }, + { 0xffffff1cfffffc71ULL, 0x000001c7ffffff1cULL, }, + { 0xfffe38e3fff8e38eULL, 0x00038e38fffe38e3ULL, }, + { 0xfffffc71fffff1c7ULL, 0x0000071cfffffc71ULL, }, + { 0xfc71c71cfffe38e3ULL, 0x00000038fc71c71cULL, }, + { 0xfffffffeffffc71cULL, 0x0071c71cfffffffeULL, }, + { 0x0000000000000000ULL, 0xffffffff00000000ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x00071c71001c71c7ULL, 0xfff1c71c00071c71ULL, }, + { 0x000000e30000038eULL, 0xfffffe38000000e3ULL, }, + { 0x0001c71c00071c71ULL, 0xfffc71c70001c71cULL, }, + { 0x0000038e00000e38ULL, 0xfffff8e30000038eULL, }, + { 0x038e38e30001c71cULL, 0xffffffc7038e38e3ULL, }, + { 0x00000001000038e3ULL, 0xff8e38e300000001ULL, }, + { 0xfff886ae28625540ULL, 0x00000001ffffe7bbULL, }, /* 64 */ + { 0xf10d5cd900286255ULL, 0x00000012ffffffffULL, }, + { 0xffe21ab928625540ULL, 0x00000000ffffffe7ULL, }, + { 0xfffc43570000a189ULL, 0x0000004bfe7bb00cULL, }, + { 0xffffbbe04d93c708ULL, 0x00000000000153f5ULL, }, + { 0xff77c00c004d93c7ULL, 0x0000000400000001ULL, }, + { 0xfffeef804d93c708ULL, 0x0000000000000153ULL, }, + { 0xffffddf00001364fULL, 0x00000012153f52fcULL, }, + { 0xfffac5aab9cf8b80ULL, 0x00000000fffab2b2ULL, }, /* 72 */ + { 0xf58b55d5ffb9cf8bULL, 0x00000009fffffffaULL, }, + { 0xffeb16abb9cf8b80ULL, 0x00000000fffffab2ULL, }, + { 0xfffd62d5fffee73eULL, 0x00000027ab2b2514ULL, }, + { 0x000704f15e31e24eULL, 0xfffffffefffa942eULL, }, + { 0x0e09e2c9005e31e2ULL, 0xffffffe3fffffffaULL, }, + { 0x001c13c55e31e24eULL, 0xfffffffffffffa94ULL, }, + { 0x00038278000178c7ULL, 0xffffff8da942e2a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRA_W(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRA_W(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_b.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_b.c new file mode 100644 index 0000000000..73e60314e5 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_b.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRAR.B + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRAR.B"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000ff0000ff0000ULL, 0xff0000ff0000ff00ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xebebebebebebebebULL, 0xebebebebebebebebULL, }, + { 0xfdfdfdfdfdfdfdfdULL, 0xfdfdfdfdfdfdfdfdULL, }, + { 0xfbfbfbfbfbfbfbfbULL, 0xfbfbfbfbfbfbfbfbULL, }, + { 0xf5f5f5f5f5f5f5f5ULL, 0xf5f5f5f5f5f5f5f5ULL, }, + { 0xf5ffaaf5ffaaf5ffULL, 0xaaf5ffaaf5ffaaf5ULL, }, + { 0xfbd5fffbd5fffbd5ULL, 0xfffbd5fffbd5fffbULL, }, + { 0x0101010101010101ULL, 0x0101010101010101ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x1515151515151515ULL, 0x1515151515151515ULL, }, + { 0x0303030303030303ULL, 0x0303030303030303ULL, }, + { 0x0505050505050505ULL, 0x0505050505050505ULL, }, + { 0x0b0b0b0b0b0b0b0bULL, 0x0b0b0b0b0b0b0b0bULL, }, + { 0x0b01550b01550b01ULL, 0x550b01550b01550bULL, }, + { 0x052b01052b01052bULL, 0x01052b01052b0105ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xf3f3f3f3f3f3f3f3ULL, 0xf3f3f3f3f3f3f3f3ULL, }, + { 0xfefefefefefefefeULL, 0xfefefefefefefefeULL, }, + { 0xfdfdfdfdfdfdfdfdULL, 0xfdfdfdfdfdfdfdfdULL, }, + { 0xfafafafafafafafaULL, 0xfafafafafafafafaULL, }, + { 0xfaffccfaffccfaffULL, 0xccfaffccfaffccfaULL, }, + { 0xfde600fde600fde6ULL, 0x00fde600fde600fdULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x0d0d0d0d0d0d0d0dULL, 0x0d0d0d0d0d0d0d0dULL, }, + { 0x0202020202020202ULL, 0x0202020202020202ULL, }, + { 0x0303030303030303ULL, 0x0303030303030303ULL, }, + { 0x0606060606060606ULL, 0x0606060606060606ULL, }, + { 0x0601330601330601ULL, 0x3306013306013306ULL, }, + { 0x031a00031a00031aULL, 0x00031a00031a0003ULL, }, + { 0x00ff0000ff0000ffULL, 0x0000ff0000ff0000ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xf9e40ef9e40ef9e4ULL, 0x0ef9e40ef9e40ef9ULL, }, + { 0xfffc02fffc02fffcULL, 0x02fffc02fffc02ffULL, }, + { 0xfef904fef904fef9ULL, 0x04fef904fef904feULL, }, + { 0xfcf207fcf207fcf2ULL, 0x07fcf207fcf207fcULL, }, + { 0xfcfe38fcfe38fcfeULL, 0x38fcfe38fcfe38fcULL, }, + { 0xfec700fec700fec7ULL, 0x00fec700fec700feULL, }, + { 0x0001000001000001ULL, 0x0000010000010000ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x071cf2071cf2071cULL, 0xf2071cf2071cf207ULL, }, + { 0x0104fe0104fe0104ULL, 0xfe0104fe0104fe01ULL, }, + { 0x0207fc0207fc0207ULL, 0xfc0207fc0207fc02ULL, }, + { 0x040ef9040ef9040eULL, 0xf9040ef9040ef904ULL, }, + { 0x0402c70402c70402ULL, 0xc70402c70402c704ULL, }, + { 0x0239000239000239ULL, 0x0002390002390002ULL, }, + { 0x881b00fd28190340ULL, 0x09010101000fb001ULL, }, /* 64 */ + { 0xf102e6fa010c0140ULL, 0x130101180001ec01ULL, }, + { 0xf91b00f314010b40ULL, 0x01670001000ffe01ULL, }, + { 0x880100fe01311501ULL, 0x02340b5eff1fec0cULL, }, + { 0xfbf000064de5fe08ULL, 0x0200f70000085200ULL, }, + { 0xffff000c02f20008ULL, 0x0500f70701001500ULL, }, + { 0x00f0001927fff908ULL, 0x00f7ff0003080300ULL, }, + { 0xfbff000301caf200ULL, 0x01fcbb1a0b1015fcULL, }, + { 0xac17fffbb9f4fc80ULL, 0x0500f900ff052501ULL, }, /* 72 */ + { 0xf601aef5fefaff80ULL, 0x0a00f900fd000901ULL, }, + { 0xfb17ffebdd00f180ULL, 0x00d8ff00f5050101ULL, }, + { 0xac01fffdffe8e3feULL, 0x01ecc6ffd60b0914ULL, }, + { 0x701400055e0cff4eULL, 0xf200f1ffff08e2faULL, }, + { 0x0e01160a0306004eULL, 0xe300f1f6fd01f9faULL, }, + { 0x071400132f00fc4eULL, 0xfff1fe00f508fffaULL, }, + { 0x700100020119f901ULL, 0xfcf988d8d511f9a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRAR_B(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRAR_B(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_d.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_d.c new file mode 100644 index 0000000000..b784897090 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_d.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRAR.D + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRAR.D"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xffffffffffeaaaabULL, 0xffffffffffeaaaabULL, }, + { 0xfffffd5555555555ULL, 0xfffffd5555555555ULL, }, + { 0xfffaaaaaaaaaaaabULL, 0xfffaaaaaaaaaaaabULL, }, + { 0xfffffffffffff555ULL, 0xfffffffffffff555ULL, }, + { 0xfffeaaaaaaaaaaabULL, 0xfffffffff5555555ULL, }, + { 0xffffffffffffd555ULL, 0xfffffffaaaaaaaabULL, }, + { 0x0000000000000001ULL, 0x0000000000000001ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0000000000155555ULL, 0x0000000000155555ULL, }, + { 0x000002aaaaaaaaabULL, 0x000002aaaaaaaaabULL, }, + { 0x0005555555555555ULL, 0x0005555555555555ULL, }, + { 0x0000000000000aabULL, 0x0000000000000aabULL, }, + { 0x0001555555555555ULL, 0x000000000aaaaaabULL, }, + { 0x0000000000002aabULL, 0x0000000555555555ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xfffffffffff33333ULL, 0xfffffffffff33333ULL, }, + { 0xfffffe6666666666ULL, 0xfffffe6666666666ULL, }, + { 0xfffccccccccccccdULL, 0xfffccccccccccccdULL, }, + { 0xfffffffffffff99aULL, 0xfffffffffffff99aULL, }, + { 0xffff333333333333ULL, 0xfffffffff999999aULL, }, + { 0xffffffffffffe666ULL, 0xfffffffccccccccdULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x00000000000ccccdULL, 0x00000000000ccccdULL, }, + { 0x000001999999999aULL, 0x000001999999999aULL, }, + { 0x0003333333333333ULL, 0x0003333333333333ULL, }, + { 0x0000000000000666ULL, 0x0000000000000666ULL, }, + { 0x0000cccccccccccdULL, 0x0000000006666666ULL, }, + { 0x000000000000199aULL, 0x0000000333333333ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xfffffffffff8e38eULL, 0x00000000000e38e4ULL, }, + { 0xffffff1c71c71c72ULL, 0x000001c71c71c71cULL, }, + { 0xfffe38e38e38e38eULL, 0x00038e38e38e38e4ULL, }, + { 0xfffffffffffffc72ULL, 0x000000000000071cULL, }, + { 0xffff8e38e38e38e4ULL, 0x00000000071c71c7ULL, }, + { 0xfffffffffffff1c7ULL, 0x000000038e38e38eULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0000000000071c72ULL, 0xfffffffffff1c71cULL, }, + { 0x000000e38e38e38eULL, 0xfffffe38e38e38e4ULL, }, + { 0x0001c71c71c71c72ULL, 0xfffc71c71c71c71cULL, }, + { 0x000000000000038eULL, 0xfffffffffffff8e4ULL, }, + { 0x000071c71c71c71cULL, 0xfffffffff8e38e39ULL, }, + { 0x0000000000000e39ULL, 0xfffffffc71c71c72ULL, }, + { 0x886ae6cc28625540ULL, 0x0004b670b5efe7bbULL, }, /* 64 */ + { 0xff886ae6cc286255ULL, 0x0000000000000005ULL, }, + { 0x886ae6cc28625540ULL, 0x000004b670b5efe8ULL, }, + { 0xfffe21ab9b30a189ULL, 0x000000004b670b5fULL, }, + { 0xfbbe00634d93c708ULL, 0x00012f7bb1a153f5ULL, }, + { 0xfffbbe00634d93c7ULL, 0x0000000000000001ULL, }, + { 0xfbbe00634d93c708ULL, 0x0000012f7bb1a154ULL, }, + { 0xffffeef8018d364fULL, 0x0000000012f7bb1aULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x00027d8c6ffab2b2ULL, }, /* 72 */ + { 0xffac5aaeaab9cf8cULL, 0x0000000000000002ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x0000027d8c6ffab3ULL, }, + { 0xfffeb16abaaae73eULL, 0x0000000027d8c700ULL, }, + { 0x704f164d5e31e24eULL, 0xfff8df188d8a942eULL, }, + { 0x00704f164d5e31e2ULL, 0xfffffffffffffff9ULL, }, + { 0x704f164d5e31e24eULL, 0xfffff8df188d8a94ULL, }, + { 0x0001c13c593578c8ULL, 0xffffffff8df188d9ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRAR_D(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRAR_D(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_h.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_h.c new file mode 100644 index 0000000000..476d2e1004 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_h.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRAR.H + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRAR.H"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xffebffebffebffebULL, 0xffebffebffebffebULL, }, + { 0xfd55fd55fd55fd55ULL, 0xfd55fd55fd55fd55ULL, }, + { 0xfffbfffbfffbfffbULL, 0xfffbfffbfffbfffbULL, }, + { 0xf555f555f555f555ULL, 0xf555f555f555f555ULL, }, + { 0xfffff555ffabffffULL, 0xf555ffabfffff555ULL, }, + { 0xd555fffbff55d555ULL, 0xfffbff55d555fffbULL, }, + { 0x0001000100010001ULL, 0x0001000100010001ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0015001500150015ULL, 0x0015001500150015ULL, }, + { 0x02ab02ab02ab02abULL, 0x02ab02ab02ab02abULL, }, + { 0x0005000500050005ULL, 0x0005000500050005ULL, }, + { 0x0aab0aab0aab0aabULL, 0x0aab0aab0aab0aabULL, }, + { 0x00010aab00550001ULL, 0x0aab005500010aabULL, }, + { 0x2aab000500ab2aabULL, 0x000500ab2aab0005ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xfff3fff3fff3fff3ULL, 0xfff3fff3fff3fff3ULL, }, + { 0xfe66fe66fe66fe66ULL, 0xfe66fe66fe66fe66ULL, }, + { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, }, + { 0xf99af99af99af99aULL, 0xf99af99af99af99aULL, }, + { 0xfffff99affcdffffULL, 0xf99affcdfffff99aULL, }, + { 0xe666fffdff9ae666ULL, 0xfffdff9ae666fffdULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x000d000d000d000dULL, 0x000d000d000d000dULL, }, + { 0x019a019a019a019aULL, 0x019a019a019a019aULL, }, + { 0x0003000300030003ULL, 0x0003000300030003ULL, }, + { 0x0666066606660666ULL, 0x0666066606660666ULL, }, + { 0x0001066600330001ULL, 0x0666003300010666ULL, }, + { 0x199a00030066199aULL, 0x00030066199a0003ULL, }, + { 0x00000000ffff0000ULL, 0x0000ffff00000000ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xfff9000effe4fff9ULL, 0x000effe4fff9000eULL, }, + { 0xff1c01c7fc72ff1cULL, 0x01c7fc72ff1c01c7ULL, }, + { 0xfffe0004fff9fffeULL, 0x0004fff9fffe0004ULL, }, + { 0xfc72071cf1c7fc72ULL, 0x071cf1c7fc72071cULL, }, + { 0x0000071cff8e0000ULL, 0x071cff8e0000071cULL, }, + { 0xf1c70004ff1cf1c7ULL, 0x0004ff1cf1c70004ULL, }, + { 0x0000000000010000ULL, 0x0000000100000000ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0007fff2001c0007ULL, 0xfff2001c0007fff2ULL, }, + { 0x00e4fe39038e00e4ULL, 0xfe39038e00e4fe39ULL, }, + { 0x0002fffc00070002ULL, 0xfffc00070002fffcULL, }, + { 0x038ef8e40e39038eULL, 0xf8e40e39038ef8e4ULL, }, + { 0x0000f8e400720000ULL, 0xf8e400720000f8e4ULL, }, + { 0x0e39fffc00e40e39ULL, 0xfffc00e40e39fffcULL, }, + { 0xffe2fffe0a195540ULL, 0x009700000000fffbULL, }, /* 64 */ + { 0xfffefcda050c0055ULL, 0x009700030000fffbULL, }, + { 0xffe2fffa00005540ULL, 0x004b00000000fb01ULL, }, + { 0xffffffff14310001ULL, 0x25b4000bff9fb00cULL, }, + { 0xffff00001365c708ULL, 0x0026ffff00030005ULL, }, + { 0x0000000c09b2ffc7ULL, 0x0026ffef00000005ULL, }, + { 0xffff00000001c708ULL, 0x0013ffff00030530ULL, }, + { 0x0000000026caffffULL, 0x097cffbb055052fcULL, }, + { 0xffebfffbee748b80ULL, 0x0050fffffff50002ULL, }, /* 72 */ + { 0xfffff5d5f73aff8cULL, 0x0050fff2ffff0002ULL, }, + { 0xffebffecffff8b80ULL, 0x00280000fff50251ULL, }, + { 0xfffffffddce8fffeULL, 0x13ecffc7eacb2514ULL, }, + { 0x001c0001178ce24eULL, 0xff1cfffefff5fffeULL, }, + { 0x000202ca0bc6ffe2ULL, 0xff1cffe2fffffffeULL, }, + { 0x001c00060001e24eULL, 0xff8efffffff5fe2aULL, }, + { 0x000100012f190000ULL, 0xc6f9ff89ea51e2a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRAR_H(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRAR_H(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_w.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_w.c new file mode 100644 index 0000000000..87d717325b --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srar_w.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRAR.W + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRAR.W"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0xffeaaaabffeaaaabULL, 0xffeaaaabffeaaaabULL, }, + { 0xfffffd55fffffd55ULL, 0xfffffd55fffffd55ULL, }, + { 0xfffaaaabfffaaaabULL, 0xfffaaaabfffaaaabULL, }, + { 0xfffff555fffff555ULL, 0xfffff555fffff555ULL, }, + { 0xf5555555fffeaaabULL, 0xffffffabf5555555ULL, }, + { 0xfffffffbffffd555ULL, 0xff555555fffffffbULL, }, + { 0x0000000100000001ULL, 0x0000000100000001ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0015555500155555ULL, 0x0015555500155555ULL, }, + { 0x000002ab000002abULL, 0x000002ab000002abULL, }, + { 0x0005555500055555ULL, 0x0005555500055555ULL, }, + { 0x00000aab00000aabULL, 0x00000aab00000aabULL, }, + { 0x0aaaaaab00015555ULL, 0x000000550aaaaaabULL, }, + { 0x0000000500002aabULL, 0x00aaaaab00000005ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0xfff33333fff33333ULL, 0xfff33333fff33333ULL, }, + { 0xfffffe66fffffe66ULL, 0xfffffe66fffffe66ULL, }, + { 0xfffccccdfffccccdULL, 0xfffccccdfffccccdULL, }, + { 0xfffff99afffff99aULL, 0xfffff99afffff99aULL, }, + { 0xf999999affff3333ULL, 0xffffffcdf999999aULL, }, + { 0xfffffffdffffe666ULL, 0xff99999afffffffdULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x000ccccd000ccccdULL, 0x000ccccd000ccccdULL, }, + { 0x0000019a0000019aULL, 0x0000019a0000019aULL, }, + { 0x0003333300033333ULL, 0x0003333300033333ULL, }, + { 0x0000066600000666ULL, 0x0000066600000666ULL, }, + { 0x066666660000cccdULL, 0x0000003306666666ULL, }, + { 0x000000030000199aULL, 0x0066666600000003ULL, }, + { 0x00000000ffffffffULL, 0x0000000000000000ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0xfff8e38effe38e39ULL, 0x000e38e4fff8e38eULL, }, + { 0xffffff1cfffffc72ULL, 0x000001c7ffffff1cULL, }, + { 0xfffe38e4fff8e38eULL, 0x00038e39fffe38e4ULL, }, + { 0xfffffc72fffff1c7ULL, 0x0000071cfffffc72ULL, }, + { 0xfc71c71cfffe38e4ULL, 0x00000039fc71c71cULL, }, + { 0xfffffffeffffc71cULL, 0x0071c71cfffffffeULL, }, + { 0x0000000000000001ULL, 0x0000000000000000ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x00071c72001c71c7ULL, 0xfff1c71c00071c72ULL, }, + { 0x000000e40000038eULL, 0xfffffe39000000e4ULL, }, + { 0x0001c71c00071c72ULL, 0xfffc71c70001c71cULL, }, + { 0x0000038e00000e39ULL, 0xfffff8e40000038eULL, }, + { 0x038e38e40001c71cULL, 0xffffffc7038e38e4ULL, }, + { 0x00000002000038e4ULL, 0xff8e38e400000002ULL, }, + { 0xfff886ae28625540ULL, 0x00000001ffffe7bbULL, }, /* 64 */ + { 0xf10d5cda00286255ULL, 0x0000001300000000ULL, }, + { 0xffe21aba28625540ULL, 0x00000001ffffffe8ULL, }, + { 0xfffc43570000a189ULL, 0x0000004bfe7bb00cULL, }, + { 0xffffbbe04d93c708ULL, 0x00000000000153f5ULL, }, + { 0xff77c00c004d93c7ULL, 0x0000000500000001ULL, }, + { 0xfffeef804d93c708ULL, 0x0000000000000154ULL, }, + { 0xffffddf00001364fULL, 0x00000013153f52fcULL, }, + { 0xfffac5abb9cf8b80ULL, 0x00000001fffab2b2ULL, }, /* 72 */ + { 0xf58b55d5ffb9cf8cULL, 0x0000000afffffffbULL, }, + { 0xffeb16acb9cf8b80ULL, 0x00000000fffffab3ULL, }, + { 0xfffd62d5fffee73eULL, 0x00000028ab2b2514ULL, }, + { 0x000704f15e31e24eULL, 0xfffffffefffa942eULL, }, + { 0x0e09e2ca005e31e2ULL, 0xffffffe3fffffffbULL, }, + { 0x001c13c65e31e24eULL, 0xfffffffffffffa94ULL, }, + { 0x00038279000178c8ULL, 0xffffff8ea942e2a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRAR_W(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRAR_W(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_b.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_b.c new file mode 100644 index 0000000000..e0d460bc00 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_b.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRL.B + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRL.B"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x0101010101010101ULL, 0x0101010101010101ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x3f3f3f3f3f3f3f3fULL, 0x3f3f3f3f3f3f3f3fULL, }, + { 0x0707070707070707ULL, 0x0707070707070707ULL, }, + { 0x0f0f0f0f0f0f0f0fULL, 0x0f0f0f0f0f0f0f0fULL, }, + { 0x1f1f1f1f1f1f1f1fULL, 0x1f1f1f1f1f1f1f1fULL, }, + { 0x1f03ff1f03ff1f03ULL, 0xff1f03ff1f03ff1fULL, }, + { 0x0f7f010f7f010f7fULL, 0x010f7f010f7f010fULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0101010101010101ULL, 0x0101010101010101ULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x2a2a2a2a2a2a2a2aULL, 0x2a2a2a2a2a2a2a2aULL, }, + { 0x0505050505050505ULL, 0x0505050505050505ULL, }, + { 0x0a0a0a0a0a0a0a0aULL, 0x0a0a0a0a0a0a0a0aULL, }, + { 0x1515151515151515ULL, 0x1515151515151515ULL, }, + { 0x1502aa1502aa1502ULL, 0xaa1502aa1502aa15ULL, }, + { 0x0a55010a55010a55ULL, 0x010a55010a55010aULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x1515151515151515ULL, 0x1515151515151515ULL, }, + { 0x0202020202020202ULL, 0x0202020202020202ULL, }, + { 0x0505050505050505ULL, 0x0505050505050505ULL, }, + { 0x0a0a0a0a0a0a0a0aULL, 0x0a0a0a0a0a0a0a0aULL, }, + { 0x0a01550a01550a01ULL, 0x550a01550a01550aULL, }, + { 0x052a00052a00052aULL, 0x00052a00052a0005ULL, }, + { 0x0101010101010101ULL, 0x0101010101010101ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x0606060606060606ULL, 0x0606060606060606ULL, }, + { 0x0c0c0c0c0c0c0c0cULL, 0x0c0c0c0c0c0c0c0cULL, }, + { 0x1919191919191919ULL, 0x1919191919191919ULL, }, + { 0x1903cc1903cc1903ULL, 0xcc1903cc1903cc19ULL, }, + { 0x0c66010c66010c66ULL, 0x010c66010c66010cULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x0c0c0c0c0c0c0c0cULL, 0x0c0c0c0c0c0c0c0cULL, }, + { 0x0101010101010101ULL, 0x0101010101010101ULL, }, + { 0x0303030303030303ULL, 0x0303030303030303ULL, }, + { 0x0606060606060606ULL, 0x0606060606060606ULL, }, + { 0x0600330600330600ULL, 0x3306003306003306ULL, }, + { 0x0319000319000319ULL, 0x0003190003190003ULL, }, + { 0x0101000101000101ULL, 0x0001010001010001ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x38230e38230e3823ULL, 0x0e38230e38230e38ULL, }, + { 0x0704010704010704ULL, 0x0107040107040107ULL, }, + { 0x0e08030e08030e08ULL, 0x030e08030e08030eULL, }, + { 0x1c11071c11071c11ULL, 0x071c11071c11071cULL, }, + { 0x1c02381c02381c02ULL, 0x381c02381c02381cULL, }, + { 0x0e47000e47000e47ULL, 0x000e47000e47000eULL, }, + { 0x0000010000010000ULL, 0x0100000100000100ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x071c31071c31071cULL, 0x31071c31071c3107ULL, }, + { 0x0003060003060003ULL, 0x0600030600030600ULL, }, + { 0x01070c01070c0107ULL, 0x0c01070c01070c01ULL, }, + { 0x030e18030e18030eULL, 0x18030e18030e1803ULL, }, + { 0x0301c70301c70301ULL, 0xc70301c70301c703ULL, }, + { 0x0138010138010138ULL, 0x0101380101380101ULL, }, + { 0x881a030c28180240ULL, 0x09000101030fb000ULL, }, /* 64 */ + { 0x1101e619010c0040ULL, 0x1200011707002c00ULL, }, + { 0x081a033314000a40ULL, 0x006700001f0f0500ULL, }, + { 0x8800030600311501ULL, 0x02330b5e7f1e2c0cULL, }, + { 0xfb2f00064d240608ULL, 0x020117000007520fULL, }, + { 0x1f02000c02120108ULL, 0x040117060000140fULL, }, + { 0x0f2f001826011808ULL, 0x00f702000207020fULL, }, + { 0xfb01000301493100ULL, 0x007bbb1a0a0f14fcULL, }, + { 0xac16020ab9330480ULL, 0x0401180302052501ULL, }, /* 72 */ + { 0x1501ae1505190180ULL, 0x0901183f05000901ULL, }, + { 0x0a16022a5c011180ULL, 0x00d8030115050101ULL, }, + { 0xac00020502672202ULL, 0x016cc6ff550a0914ULL, }, + { 0x701300045e0c074eULL, 0x110111030208e20aULL, }, + { 0x0e0116090206014eULL, 0x230111360500380aULL, }, + { 0x071300132f001c4eULL, 0x01f102011508070aULL, }, + { 0x7000000201183801ULL, 0x047888d8541038a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRL_B(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRL_B(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_d.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_d.c new file mode 100644 index 0000000000..e4b88a3cc4 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_d.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRL.D + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRL.D"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x0000000000000001ULL, 0x0000000000000001ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x00000000003fffffULL, 0x00000000003fffffULL, }, + { 0x000007ffffffffffULL, 0x000007ffffffffffULL, }, + { 0x000fffffffffffffULL, 0x000fffffffffffffULL, }, + { 0x0000000000001fffULL, 0x0000000000001fffULL, }, + { 0x0003ffffffffffffULL, 0x000000001fffffffULL, }, + { 0x0000000000007fffULL, 0x0000000fffffffffULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000001ULL, 0x0000000000000001ULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x00000000002aaaaaULL, 0x00000000002aaaaaULL, }, + { 0x0000055555555555ULL, 0x0000055555555555ULL, }, + { 0x000aaaaaaaaaaaaaULL, 0x000aaaaaaaaaaaaaULL, }, + { 0x0000000000001555ULL, 0x0000000000001555ULL, }, + { 0x0002aaaaaaaaaaaaULL, 0x0000000015555555ULL, }, + { 0x0000000000005555ULL, 0x0000000aaaaaaaaaULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0000000000155555ULL, 0x0000000000155555ULL, }, + { 0x000002aaaaaaaaaaULL, 0x000002aaaaaaaaaaULL, }, + { 0x0005555555555555ULL, 0x0005555555555555ULL, }, + { 0x0000000000000aaaULL, 0x0000000000000aaaULL, }, + { 0x0001555555555555ULL, 0x000000000aaaaaaaULL, }, + { 0x0000000000002aaaULL, 0x0000000555555555ULL, }, + { 0x0000000000000001ULL, 0x0000000000000001ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x0000000000333333ULL, 0x0000000000333333ULL, }, + { 0x0000066666666666ULL, 0x0000066666666666ULL, }, + { 0x000cccccccccccccULL, 0x000cccccccccccccULL, }, + { 0x0000000000001999ULL, 0x0000000000001999ULL, }, + { 0x0003333333333333ULL, 0x0000000019999999ULL, }, + { 0x0000000000006666ULL, 0x0000000cccccccccULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x00000000000cccccULL, 0x00000000000cccccULL, }, + { 0x0000019999999999ULL, 0x0000019999999999ULL, }, + { 0x0003333333333333ULL, 0x0003333333333333ULL, }, + { 0x0000000000000666ULL, 0x0000000000000666ULL, }, + { 0x0000ccccccccccccULL, 0x0000000006666666ULL, }, + { 0x0000000000001999ULL, 0x0000000333333333ULL, }, + { 0x0000000000000001ULL, 0x0000000000000000ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x000000000038e38eULL, 0x00000000000e38e3ULL, }, + { 0x0000071c71c71c71ULL, 0x000001c71c71c71cULL, }, + { 0x000e38e38e38e38eULL, 0x00038e38e38e38e3ULL, }, + { 0x0000000000001c71ULL, 0x000000000000071cULL, }, + { 0x00038e38e38e38e3ULL, 0x00000000071c71c7ULL, }, + { 0x00000000000071c7ULL, 0x000000038e38e38eULL, }, + { 0x0000000000000000ULL, 0x0000000000000001ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0000000000071c71ULL, 0x000000000031c71cULL, }, + { 0x000000e38e38e38eULL, 0x00000638e38e38e3ULL, }, + { 0x0001c71c71c71c71ULL, 0x000c71c71c71c71cULL, }, + { 0x000000000000038eULL, 0x00000000000018e3ULL, }, + { 0x000071c71c71c71cULL, 0x0000000018e38e38ULL, }, + { 0x0000000000000e38ULL, 0x0000000c71c71c71ULL, }, + { 0x886ae6cc28625540ULL, 0x0004b670b5efe7bbULL, }, /* 64 */ + { 0x00886ae6cc286255ULL, 0x0000000000000004ULL, }, + { 0x886ae6cc28625540ULL, 0x000004b670b5efe7ULL, }, + { 0x000221ab9b30a189ULL, 0x000000004b670b5eULL, }, + { 0xfbbe00634d93c708ULL, 0x00012f7bb1a153f5ULL, }, + { 0x00fbbe00634d93c7ULL, 0x0000000000000001ULL, }, + { 0xfbbe00634d93c708ULL, 0x0000012f7bb1a153ULL, }, + { 0x0003eef8018d364fULL, 0x0000000012f7bb1aULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x00027d8c6ffab2b2ULL, }, /* 72 */ + { 0x00ac5aaeaab9cf8bULL, 0x0000000000000002ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x0000027d8c6ffab2ULL, }, + { 0x0002b16abaaae73eULL, 0x0000000027d8c6ffULL, }, + { 0x704f164d5e31e24eULL, 0x0008df188d8a942eULL, }, + { 0x00704f164d5e31e2ULL, 0x0000000000000008ULL, }, + { 0x704f164d5e31e24eULL, 0x000008df188d8a94ULL, }, + { 0x0001c13c593578c7ULL, 0x000000008df188d8ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRL_D(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRL_D(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_h.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_h.c new file mode 100644 index 0000000000..1eb64403c2 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_h.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRL.H + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRL.H"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x0001000100010001ULL, 0x0001000100010001ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x003f003f003f003fULL, 0x003f003f003f003fULL, }, + { 0x07ff07ff07ff07ffULL, 0x07ff07ff07ff07ffULL, }, + { 0x000f000f000f000fULL, 0x000f000f000f000fULL, }, + { 0x1fff1fff1fff1fffULL, 0x1fff1fff1fff1fffULL, }, + { 0x00031fff00ff0003ULL, 0x1fff00ff00031fffULL, }, + { 0x7fff000f01ff7fffULL, 0x000f01ff7fff000fULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0001000100010001ULL, 0x0001000100010001ULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x002a002a002a002aULL, 0x002a002a002a002aULL, }, + { 0x0555055505550555ULL, 0x0555055505550555ULL, }, + { 0x000a000a000a000aULL, 0x000a000a000a000aULL, }, + { 0x1555155515551555ULL, 0x1555155515551555ULL, }, + { 0x0002155500aa0002ULL, 0x155500aa00021555ULL, }, + { 0x5555000a01555555ULL, 0x000a01555555000aULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0015001500150015ULL, 0x0015001500150015ULL, }, + { 0x02aa02aa02aa02aaULL, 0x02aa02aa02aa02aaULL, }, + { 0x0005000500050005ULL, 0x0005000500050005ULL, }, + { 0x0aaa0aaa0aaa0aaaULL, 0x0aaa0aaa0aaa0aaaULL, }, + { 0x00010aaa00550001ULL, 0x0aaa005500010aaaULL, }, + { 0x2aaa000500aa2aaaULL, 0x000500aa2aaa0005ULL, }, + { 0x0001000100010001ULL, 0x0001000100010001ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x0033003300330033ULL, 0x0033003300330033ULL, }, + { 0x0666066606660666ULL, 0x0666066606660666ULL, }, + { 0x000c000c000c000cULL, 0x000c000c000c000cULL, }, + { 0x1999199919991999ULL, 0x1999199919991999ULL, }, + { 0x0003199900cc0003ULL, 0x199900cc00031999ULL, }, + { 0x6666000c01996666ULL, 0x000c01996666000cULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x000c000c000c000cULL, 0x000c000c000c000cULL, }, + { 0x0199019901990199ULL, 0x0199019901990199ULL, }, + { 0x0003000300030003ULL, 0x0003000300030003ULL, }, + { 0x0666066606660666ULL, 0x0666066606660666ULL, }, + { 0x0000066600330000ULL, 0x0666003300000666ULL, }, + { 0x1999000300661999ULL, 0x0003006619990003ULL, }, + { 0x0001000000010001ULL, 0x0000000100010000ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x0038000e00230038ULL, 0x000e00230038000eULL, }, + { 0x071c01c70471071cULL, 0x01c70471071c01c7ULL, }, + { 0x000e00030008000eULL, 0x00030008000e0003ULL, }, + { 0x1c71071c11c71c71ULL, 0x071c11c71c71071cULL, }, + { 0x0003071c008e0003ULL, 0x071c008e0003071cULL, }, + { 0x71c70003011c71c7ULL, 0x0003011c71c70003ULL, }, + { 0x0000000100000000ULL, 0x0001000000000001ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x00070031001c0007ULL, 0x0031001c00070031ULL, }, + { 0x00e30638038e00e3ULL, 0x0638038e00e30638ULL, }, + { 0x0001000c00070001ULL, 0x000c00070001000cULL, }, + { 0x038e18e30e38038eULL, 0x18e30e38038e18e3ULL, }, + { 0x000018e300710000ULL, 0x18e30071000018e3ULL, }, + { 0x0e38000c00e30e38ULL, 0x000c00e30e38000cULL, }, + { 0x0022000e0a185540ULL, 0x00960000001f000bULL, }, /* 64 */ + { 0x00021cd9050c0055ULL, 0x009600020001000bULL, }, + { 0x0022003900005540ULL, 0x004b0000001f0b00ULL, }, + { 0x0001000714310001ULL, 0x25b3000b3f9eb00cULL, }, + { 0x003e00001364c708ULL, 0x0025000200020005ULL, }, + { 0x0003000c09b200c7ULL, 0x0025002e00000005ULL, }, + { 0x003e00000000c708ULL, 0x001200010002052fULL, }, + { 0x0001000026c90003ULL, 0x097b00bb054f52fcULL, }, + { 0x002b000a2e738b80ULL, 0x004f000300150002ULL, }, /* 72 */ + { 0x000215d51739008bULL, 0x004f003100010002ULL, }, + { 0x002b002b00018b80ULL, 0x0027000100150251ULL, }, + { 0x000100055ce70002ULL, 0x13ec00c62aca2514ULL, }, + { 0x001c0001178ce24eULL, 0x011b00020015000eULL, }, + { 0x000102c90bc600e2ULL, 0x011b00220001000eULL, }, + { 0x001c00050000e24eULL, 0x008d000100150e2aULL, }, + { 0x000000002f180003ULL, 0x46f800882a50e2a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRL_H(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRL_H(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_w.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_w.c new file mode 100644 index 0000000000..794833cc15 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srl_w.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRL.W + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRL.W"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x0000000100000001ULL, 0x0000000100000001ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x003fffff003fffffULL, 0x003fffff003fffffULL, }, + { 0x000007ff000007ffULL, 0x000007ff000007ffULL, }, + { 0x000fffff000fffffULL, 0x000fffff000fffffULL, }, + { 0x00001fff00001fffULL, 0x00001fff00001fffULL, }, + { 0x1fffffff0003ffffULL, 0x000000ff1fffffffULL, }, + { 0x0000000f00007fffULL, 0x01ffffff0000000fULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000100000001ULL, 0x0000000100000001ULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x002aaaaa002aaaaaULL, 0x002aaaaa002aaaaaULL, }, + { 0x0000055500000555ULL, 0x0000055500000555ULL, }, + { 0x000aaaaa000aaaaaULL, 0x000aaaaa000aaaaaULL, }, + { 0x0000155500001555ULL, 0x0000155500001555ULL, }, + { 0x155555550002aaaaULL, 0x000000aa15555555ULL, }, + { 0x0000000a00005555ULL, 0x015555550000000aULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0015555500155555ULL, 0x0015555500155555ULL, }, + { 0x000002aa000002aaULL, 0x000002aa000002aaULL, }, + { 0x0005555500055555ULL, 0x0005555500055555ULL, }, + { 0x00000aaa00000aaaULL, 0x00000aaa00000aaaULL, }, + { 0x0aaaaaaa00015555ULL, 0x000000550aaaaaaaULL, }, + { 0x0000000500002aaaULL, 0x00aaaaaa00000005ULL, }, + { 0x0000000100000001ULL, 0x0000000100000001ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x0033333300333333ULL, 0x0033333300333333ULL, }, + { 0x0000066600000666ULL, 0x0000066600000666ULL, }, + { 0x000ccccc000cccccULL, 0x000ccccc000cccccULL, }, + { 0x0000199900001999ULL, 0x0000199900001999ULL, }, + { 0x1999999900033333ULL, 0x000000cc19999999ULL, }, + { 0x0000000c00006666ULL, 0x019999990000000cULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x000ccccc000cccccULL, 0x000ccccc000cccccULL, }, + { 0x0000019900000199ULL, 0x0000019900000199ULL, }, + { 0x0003333300033333ULL, 0x0003333300033333ULL, }, + { 0x0000066600000666ULL, 0x0000066600000666ULL, }, + { 0x066666660000ccccULL, 0x0000003306666666ULL, }, + { 0x0000000300001999ULL, 0x0066666600000003ULL, }, + { 0x0000000100000001ULL, 0x0000000000000001ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x0038e38e00238e38ULL, 0x000e38e30038e38eULL, }, + { 0x0000071c00000471ULL, 0x000001c70000071cULL, }, + { 0x000e38e30008e38eULL, 0x00038e38000e38e3ULL, }, + { 0x00001c71000011c7ULL, 0x0000071c00001c71ULL, }, + { 0x1c71c71c000238e3ULL, 0x000000381c71c71cULL, }, + { 0x0000000e0000471cULL, 0x0071c71c0000000eULL, }, + { 0x0000000000000000ULL, 0x0000000100000000ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x00071c71001c71c7ULL, 0x0031c71c00071c71ULL, }, + { 0x000000e30000038eULL, 0x00000638000000e3ULL, }, + { 0x0001c71c00071c71ULL, 0x000c71c70001c71cULL, }, + { 0x0000038e00000e38ULL, 0x000018e30000038eULL, }, + { 0x038e38e30001c71cULL, 0x000000c7038e38e3ULL, }, + { 0x00000001000038e3ULL, 0x018e38e300000001ULL, }, + { 0x000886ae28625540ULL, 0x00000001000fe7bbULL, }, /* 64 */ + { 0x110d5cd900286255ULL, 0x000000120000000fULL, }, + { 0x00221ab928625540ULL, 0x0000000000000fe7ULL, }, + { 0x000443570000a189ULL, 0x0000004bfe7bb00cULL, }, + { 0x000fbbe04d93c708ULL, 0x00000000000153f5ULL, }, + { 0x1f77c00c004d93c7ULL, 0x0000000400000001ULL, }, + { 0x003eef804d93c708ULL, 0x0000000000000153ULL, }, + { 0x0007ddf00001364fULL, 0x00000012153f52fcULL, }, + { 0x000ac5aab9cf8b80ULL, 0x00000000000ab2b2ULL, }, /* 72 */ + { 0x158b55d500b9cf8bULL, 0x000000090000000aULL, }, + { 0x002b16abb9cf8b80ULL, 0x0000000000000ab2ULL, }, + { 0x000562d50002e73eULL, 0x00000027ab2b2514ULL, }, + { 0x000704f15e31e24eULL, 0x00000002000a942eULL, }, + { 0x0e09e2c9005e31e2ULL, 0x000000230000000aULL, }, + { 0x001c13c55e31e24eULL, 0x0000000100000a94ULL, }, + { 0x00038278000178c7ULL, 0x0000008da942e2a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRL_W(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRL_W(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_b.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_b.c new file mode 100644 index 0000000000..4a900174cc --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_b.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRLR.B + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRLR.B"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x0202020202020202ULL, 0x0202020202020202ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x4040404040404040ULL, 0x4040404040404040ULL, }, + { 0x0808080808080808ULL, 0x0808080808080808ULL, }, + { 0x1010101010101010ULL, 0x1010101010101010ULL, }, + { 0x2020202020202020ULL, 0x2020202020202020ULL, }, + { 0x2004ff2004ff2004ULL, 0xff2004ff2004ff20ULL, }, + { 0x1080021080021080ULL, 0x0210800210800210ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0101010101010101ULL, 0x0101010101010101ULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x2b2b2b2b2b2b2b2bULL, 0x2b2b2b2b2b2b2b2bULL, }, + { 0x0505050505050505ULL, 0x0505050505050505ULL, }, + { 0x0b0b0b0b0b0b0b0bULL, 0x0b0b0b0b0b0b0b0bULL, }, + { 0x1515151515151515ULL, 0x1515151515151515ULL, }, + { 0x1503aa1503aa1503ULL, 0xaa1503aa1503aa15ULL, }, + { 0x0b55010b55010b55ULL, 0x010b55010b55010bULL, }, + { 0x0101010101010101ULL, 0x0101010101010101ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x1515151515151515ULL, 0x1515151515151515ULL, }, + { 0x0303030303030303ULL, 0x0303030303030303ULL, }, + { 0x0505050505050505ULL, 0x0505050505050505ULL, }, + { 0x0b0b0b0b0b0b0b0bULL, 0x0b0b0b0b0b0b0b0bULL, }, + { 0x0b01550b01550b01ULL, 0x550b01550b01550bULL, }, + { 0x052b01052b01052bULL, 0x01052b01052b0105ULL, }, + { 0x0202020202020202ULL, 0x0202020202020202ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x0606060606060606ULL, 0x0606060606060606ULL, }, + { 0x0d0d0d0d0d0d0d0dULL, 0x0d0d0d0d0d0d0d0dULL, }, + { 0x1a1a1a1a1a1a1a1aULL, 0x1a1a1a1a1a1a1a1aULL, }, + { 0x1a03cc1a03cc1a03ULL, 0xcc1a03cc1a03cc1aULL, }, + { 0x0d66020d66020d66ULL, 0x020d66020d66020dULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x0d0d0d0d0d0d0d0dULL, 0x0d0d0d0d0d0d0d0dULL, }, + { 0x0202020202020202ULL, 0x0202020202020202ULL, }, + { 0x0303030303030303ULL, 0x0303030303030303ULL, }, + { 0x0606060606060606ULL, 0x0606060606060606ULL, }, + { 0x0601330601330601ULL, 0x3306013306013306ULL, }, + { 0x031a00031a00031aULL, 0x00031a00031a0003ULL, }, + { 0x0201000201000201ULL, 0x0002010002010002ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x39240e39240e3924ULL, 0x0e39240e39240e39ULL, }, + { 0x0704020704020704ULL, 0x0207040207040207ULL, }, + { 0x0e09040e09040e09ULL, 0x040e09040e09040eULL, }, + { 0x1c12071c12071c12ULL, 0x071c12071c12071cULL, }, + { 0x1c02381c02381c02ULL, 0x381c02381c02381cULL, }, + { 0x0e47000e47000e47ULL, 0x000e47000e47000eULL, }, + { 0x0001020001020001ULL, 0x0200010200010200ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x071c32071c32071cULL, 0x32071c32071c3207ULL, }, + { 0x0104060104060104ULL, 0x0601040601040601ULL, }, + { 0x02070c02070c0207ULL, 0x0c02070c02070c02ULL, }, + { 0x040e19040e19040eULL, 0x19040e19040e1904ULL, }, + { 0x0402c70402c70402ULL, 0xc70402c70402c704ULL, }, + { 0x0239020239020239ULL, 0x0202390202390202ULL, }, + { 0x881b040d28190340ULL, 0x09010101040fb001ULL, }, /* 64 */ + { 0x1102e61a010c0140ULL, 0x1301011808012c01ULL, }, + { 0x091b043314010b40ULL, 0x01670001200f0601ULL, }, + { 0x8801040601311501ULL, 0x02340b5e7f1f2c0cULL, }, + { 0xfb3000064d250608ULL, 0x0202170000085210ULL, }, + { 0x1f03000c02120208ULL, 0x0502170701001510ULL, }, + { 0x1030001927011908ULL, 0x00f7030003080310ULL, }, + { 0xfb010003014a3200ULL, 0x017cbb1a0b1015fcULL, }, + { 0xac17030bb9340480ULL, 0x0502190403052501ULL, }, /* 72 */ + { 0x1601ae15061a0180ULL, 0x0a02194005000901ULL, }, + { 0x0b17032b5d021180ULL, 0x00d8030215050101ULL, }, + { 0xac01030503682302ULL, 0x016cc6ff560b0914ULL, }, + { 0x701400055e0c074eULL, 0x120211030308e20aULL, }, + { 0x0e01160a0306024eULL, 0x230211360501390aULL, }, + { 0x071400132f001c4eULL, 0x01f102021508070aULL, }, + { 0x7001000201193901ULL, 0x047988d8551139a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRLR_B(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRLR_B(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_d.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_d.c new file mode 100644 index 0000000000..69ba01f0d9 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_d.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRLR.D + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRLR.D"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x0000000000000002ULL, 0x0000000000000002ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x0000000000400000ULL, 0x0000000000400000ULL, }, + { 0x0000080000000000ULL, 0x0000080000000000ULL, }, + { 0x0010000000000000ULL, 0x0010000000000000ULL, }, + { 0x0000000000002000ULL, 0x0000000000002000ULL, }, + { 0x0004000000000000ULL, 0x0000000020000000ULL, }, + { 0x0000000000008000ULL, 0x0000001000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000001ULL, 0x0000000000000001ULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x00000000002aaaabULL, 0x00000000002aaaabULL, }, + { 0x0000055555555555ULL, 0x0000055555555555ULL, }, + { 0x000aaaaaaaaaaaabULL, 0x000aaaaaaaaaaaabULL, }, + { 0x0000000000001555ULL, 0x0000000000001555ULL, }, + { 0x0002aaaaaaaaaaabULL, 0x0000000015555555ULL, }, + { 0x0000000000005555ULL, 0x0000000aaaaaaaabULL, }, + { 0x0000000000000001ULL, 0x0000000000000001ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0000000000155555ULL, 0x0000000000155555ULL, }, + { 0x000002aaaaaaaaabULL, 0x000002aaaaaaaaabULL, }, + { 0x0005555555555555ULL, 0x0005555555555555ULL, }, + { 0x0000000000000aabULL, 0x0000000000000aabULL, }, + { 0x0001555555555555ULL, 0x000000000aaaaaabULL, }, + { 0x0000000000002aabULL, 0x0000000555555555ULL, }, + { 0x0000000000000002ULL, 0x0000000000000002ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x0000000000333333ULL, 0x0000000000333333ULL, }, + { 0x0000066666666666ULL, 0x0000066666666666ULL, }, + { 0x000ccccccccccccdULL, 0x000ccccccccccccdULL, }, + { 0x000000000000199aULL, 0x000000000000199aULL, }, + { 0x0003333333333333ULL, 0x000000001999999aULL, }, + { 0x0000000000006666ULL, 0x0000000ccccccccdULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x00000000000ccccdULL, 0x00000000000ccccdULL, }, + { 0x000001999999999aULL, 0x000001999999999aULL, }, + { 0x0003333333333333ULL, 0x0003333333333333ULL, }, + { 0x0000000000000666ULL, 0x0000000000000666ULL, }, + { 0x0000cccccccccccdULL, 0x0000000006666666ULL, }, + { 0x000000000000199aULL, 0x0000000333333333ULL, }, + { 0x0000000000000002ULL, 0x0000000000000000ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x000000000038e38eULL, 0x00000000000e38e4ULL, }, + { 0x0000071c71c71c72ULL, 0x000001c71c71c71cULL, }, + { 0x000e38e38e38e38eULL, 0x00038e38e38e38e4ULL, }, + { 0x0000000000001c72ULL, 0x000000000000071cULL, }, + { 0x00038e38e38e38e4ULL, 0x00000000071c71c7ULL, }, + { 0x00000000000071c7ULL, 0x000000038e38e38eULL, }, + { 0x0000000000000000ULL, 0x0000000000000002ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x0000000000071c72ULL, 0x000000000031c71cULL, }, + { 0x000000e38e38e38eULL, 0x00000638e38e38e4ULL, }, + { 0x0001c71c71c71c72ULL, 0x000c71c71c71c71cULL, }, + { 0x000000000000038eULL, 0x00000000000018e4ULL, }, + { 0x000071c71c71c71cULL, 0x0000000018e38e39ULL, }, + { 0x0000000000000e39ULL, 0x0000000c71c71c72ULL, }, + { 0x886ae6cc28625540ULL, 0x0004b670b5efe7bbULL, }, /* 64 */ + { 0x00886ae6cc286255ULL, 0x0000000000000005ULL, }, + { 0x886ae6cc28625540ULL, 0x000004b670b5efe8ULL, }, + { 0x000221ab9b30a189ULL, 0x000000004b670b5fULL, }, + { 0xfbbe00634d93c708ULL, 0x00012f7bb1a153f5ULL, }, + { 0x00fbbe00634d93c7ULL, 0x0000000000000001ULL, }, + { 0xfbbe00634d93c708ULL, 0x0000012f7bb1a154ULL, }, + { 0x0003eef8018d364fULL, 0x0000000012f7bb1aULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x00027d8c6ffab2b2ULL, }, /* 72 */ + { 0x00ac5aaeaab9cf8cULL, 0x0000000000000002ULL, }, + { 0xac5aaeaab9cf8b80ULL, 0x0000027d8c6ffab3ULL, }, + { 0x0002b16abaaae73eULL, 0x0000000027d8c700ULL, }, + { 0x704f164d5e31e24eULL, 0x0008df188d8a942eULL, }, + { 0x00704f164d5e31e2ULL, 0x0000000000000009ULL, }, + { 0x704f164d5e31e24eULL, 0x000008df188d8a94ULL, }, + { 0x0001c13c593578c8ULL, 0x000000008df188d9ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRLR_D(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRLR_D(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_h.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_h.c new file mode 100644 index 0000000000..514a143a6e --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_h.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRLR.H + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRLR.H"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x0002000200020002ULL, 0x0002000200020002ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x0040004000400040ULL, 0x0040004000400040ULL, }, + { 0x0800080008000800ULL, 0x0800080008000800ULL, }, + { 0x0010001000100010ULL, 0x0010001000100010ULL, }, + { 0x2000200020002000ULL, 0x2000200020002000ULL, }, + { 0x0004200001000004ULL, 0x2000010000042000ULL, }, + { 0x8000001002008000ULL, 0x0010020080000010ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0001000100010001ULL, 0x0001000100010001ULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x002b002b002b002bULL, 0x002b002b002b002bULL, }, + { 0x0555055505550555ULL, 0x0555055505550555ULL, }, + { 0x000b000b000b000bULL, 0x000b000b000b000bULL, }, + { 0x1555155515551555ULL, 0x1555155515551555ULL, }, + { 0x0003155500ab0003ULL, 0x155500ab00031555ULL, }, + { 0x5555000b01555555ULL, 0x000b01555555000bULL, }, + { 0x0001000100010001ULL, 0x0001000100010001ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0015001500150015ULL, 0x0015001500150015ULL, }, + { 0x02ab02ab02ab02abULL, 0x02ab02ab02ab02abULL, }, + { 0x0005000500050005ULL, 0x0005000500050005ULL, }, + { 0x0aab0aab0aab0aabULL, 0x0aab0aab0aab0aabULL, }, + { 0x00010aab00550001ULL, 0x0aab005500010aabULL, }, + { 0x2aab000500ab2aabULL, 0x000500ab2aab0005ULL, }, + { 0x0002000200020002ULL, 0x0002000200020002ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x0033003300330033ULL, 0x0033003300330033ULL, }, + { 0x0666066606660666ULL, 0x0666066606660666ULL, }, + { 0x000d000d000d000dULL, 0x000d000d000d000dULL, }, + { 0x199a199a199a199aULL, 0x199a199a199a199aULL, }, + { 0x0003199a00cd0003ULL, 0x199a00cd0003199aULL, }, + { 0x6666000d019a6666ULL, 0x000d019a6666000dULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x000d000d000d000dULL, 0x000d000d000d000dULL, }, + { 0x019a019a019a019aULL, 0x019a019a019a019aULL, }, + { 0x0003000300030003ULL, 0x0003000300030003ULL, }, + { 0x0666066606660666ULL, 0x0666066606660666ULL, }, + { 0x0001066600330001ULL, 0x0666003300010666ULL, }, + { 0x199a00030066199aULL, 0x00030066199a0003ULL, }, + { 0x0002000000010002ULL, 0x0000000100020000ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x0039000e00240039ULL, 0x000e00240039000eULL, }, + { 0x071c01c70472071cULL, 0x01c70472071c01c7ULL, }, + { 0x000e00040009000eULL, 0x00040009000e0004ULL, }, + { 0x1c72071c11c71c72ULL, 0x071c11c71c72071cULL, }, + { 0x0004071c008e0004ULL, 0x071c008e0004071cULL, }, + { 0x71c70004011c71c7ULL, 0x0004011c71c70004ULL, }, + { 0x0000000200010000ULL, 0x0002000100000002ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x00070032001c0007ULL, 0x0032001c00070032ULL, }, + { 0x00e40639038e00e4ULL, 0x0639038e00e40639ULL, }, + { 0x0002000c00070002ULL, 0x000c00070002000cULL, }, + { 0x038e18e40e39038eULL, 0x18e40e39038e18e4ULL, }, + { 0x000018e400720000ULL, 0x18e40072000018e4ULL, }, + { 0x0e39000c00e40e39ULL, 0x000c00e40e39000cULL, }, + { 0x0022000e0a195540ULL, 0x009700000020000bULL, }, /* 64 */ + { 0x00021cda050c0055ULL, 0x009700030002000bULL, }, + { 0x0022003a00005540ULL, 0x004b000000200b01ULL, }, + { 0x0001000714310001ULL, 0x25b4000b3f9fb00cULL, }, + { 0x003f00001365c708ULL, 0x0026000300030005ULL, }, + { 0x0004000c09b200c7ULL, 0x0026002f00000005ULL, }, + { 0x003f00000001c708ULL, 0x0013000100030530ULL, }, + { 0x0002000026ca0003ULL, 0x097c00bb055052fcULL, }, + { 0x002b000b2e748b80ULL, 0x0050000300150002ULL, }, /* 72 */ + { 0x000315d5173a008cULL, 0x0050003200010002ULL, }, + { 0x002b002c00018b80ULL, 0x0028000200150251ULL, }, + { 0x000100055ce80002ULL, 0x13ec00c72acb2514ULL, }, + { 0x001c0001178ce24eULL, 0x011c00020015000eULL, }, + { 0x000202ca0bc600e2ULL, 0x011c00220001000eULL, }, + { 0x001c00060001e24eULL, 0x008e000100150e2aULL, }, + { 0x000100012f190004ULL, 0x46f900892a51e2a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRLR_H(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRLR_H(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_w.c b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_w.c new file mode 100644 index 0000000000..940fd6f318 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_w.c @@ -0,0 +1,155 @@ +/* + * Test program for MSA instruction SRLR.W + * + * Copyright (C) 2019 Wave Computing, Inc. + * Copyright (C) 2019 Aleksandar Markovic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#include +#include + +#include "../../../../include/wrappers_msa.h" +#include "../../../../include/test_inputs_128.h" +#include "../../../../include/test_utils_128.h" + +#define TEST_COUNT_TOTAL ( \ + (PATTERN_INPUTS_SHORT_COUNT) * (PATTERN_INPUTS_SHORT_COUNT) + \ + (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT)) + + +int32_t main(void) +{ + char *instruction_name = "SRLR.W"; + int32_t ret; + uint32_t i, j; + struct timeval start, end; + double elapsed_time; + + uint64_t b128_result[TEST_COUNT_TOTAL][2]; + uint64_t b128_expect[TEST_COUNT_TOTAL][2] = { + { 0x0000000200000002ULL, 0x0000000200000002ULL, }, /* 0 */ + { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, + { 0x0040000000400000ULL, 0x0040000000400000ULL, }, + { 0x0000080000000800ULL, 0x0000080000000800ULL, }, + { 0x0010000000100000ULL, 0x0010000000100000ULL, }, + { 0x0000200000002000ULL, 0x0000200000002000ULL, }, + { 0x2000000000040000ULL, 0x0000010020000000ULL, }, + { 0x0000001000008000ULL, 0x0200000000000010ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */ + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, + { 0x0000000100000001ULL, 0x0000000100000001ULL, }, /* 16 */ + { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, + { 0x002aaaab002aaaabULL, 0x002aaaab002aaaabULL, }, + { 0x0000055500000555ULL, 0x0000055500000555ULL, }, + { 0x000aaaab000aaaabULL, 0x000aaaab000aaaabULL, }, + { 0x0000155500001555ULL, 0x0000155500001555ULL, }, + { 0x155555550002aaabULL, 0x000000ab15555555ULL, }, + { 0x0000000b00005555ULL, 0x015555550000000bULL, }, + { 0x0000000100000001ULL, 0x0000000100000001ULL, }, /* 24 */ + { 0x5555555555555555ULL, 0x5555555555555555ULL, }, + { 0x0015555500155555ULL, 0x0015555500155555ULL, }, + { 0x000002ab000002abULL, 0x000002ab000002abULL, }, + { 0x0005555500055555ULL, 0x0005555500055555ULL, }, + { 0x00000aab00000aabULL, 0x00000aab00000aabULL, }, + { 0x0aaaaaab00015555ULL, 0x000000550aaaaaabULL, }, + { 0x0000000500002aabULL, 0x00aaaaab00000005ULL, }, + { 0x0000000200000002ULL, 0x0000000200000002ULL, }, /* 32 */ + { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, + { 0x0033333300333333ULL, 0x0033333300333333ULL, }, + { 0x0000066600000666ULL, 0x0000066600000666ULL, }, + { 0x000ccccd000ccccdULL, 0x000ccccd000ccccdULL, }, + { 0x0000199a0000199aULL, 0x0000199a0000199aULL, }, + { 0x1999999a00033333ULL, 0x000000cd1999999aULL, }, + { 0x0000000d00006666ULL, 0x0199999a0000000dULL, }, + { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 40 */ + { 0x3333333333333333ULL, 0x3333333333333333ULL, }, + { 0x000ccccd000ccccdULL, 0x000ccccd000ccccdULL, }, + { 0x0000019a0000019aULL, 0x0000019a0000019aULL, }, + { 0x0003333300033333ULL, 0x0003333300033333ULL, }, + { 0x0000066600000666ULL, 0x0000066600000666ULL, }, + { 0x066666660000cccdULL, 0x0000003306666666ULL, }, + { 0x000000030000199aULL, 0x0066666600000003ULL, }, + { 0x0000000200000001ULL, 0x0000000000000002ULL, }, /* 48 */ + { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, + { 0x0038e38e00238e39ULL, 0x000e38e40038e38eULL, }, + { 0x0000071c00000472ULL, 0x000001c70000071cULL, }, + { 0x000e38e40008e38eULL, 0x00038e39000e38e4ULL, }, + { 0x00001c72000011c7ULL, 0x0000071c00001c72ULL, }, + { 0x1c71c71c000238e4ULL, 0x000000391c71c71cULL, }, + { 0x0000000e0000471cULL, 0x0071c71c0000000eULL, }, + { 0x0000000000000001ULL, 0x0000000200000000ULL, }, /* 56 */ + { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, + { 0x00071c72001c71c7ULL, 0x0031c71c00071c72ULL, }, + { 0x000000e40000038eULL, 0x00000639000000e4ULL, }, + { 0x0001c71c00071c72ULL, 0x000c71c70001c71cULL, }, + { 0x0000038e00000e39ULL, 0x000018e40000038eULL, }, + { 0x038e38e40001c71cULL, 0x000000c7038e38e4ULL, }, + { 0x00000002000038e4ULL, 0x018e38e400000002ULL, }, + { 0x000886ae28625540ULL, 0x00000001000fe7bbULL, }, /* 64 */ + { 0x110d5cda00286255ULL, 0x0000001300000010ULL, }, + { 0x00221aba28625540ULL, 0x0000000100000fe8ULL, }, + { 0x000443570000a189ULL, 0x0000004bfe7bb00cULL, }, + { 0x000fbbe04d93c708ULL, 0x00000000000153f5ULL, }, + { 0x1f77c00c004d93c7ULL, 0x0000000500000001ULL, }, + { 0x003eef804d93c708ULL, 0x0000000000000154ULL, }, + { 0x0007ddf00001364fULL, 0x00000013153f52fcULL, }, + { 0x000ac5abb9cf8b80ULL, 0x00000001000ab2b2ULL, }, /* 72 */ + { 0x158b55d500b9cf8cULL, 0x0000000a0000000bULL, }, + { 0x002b16acb9cf8b80ULL, 0x0000000000000ab3ULL, }, + { 0x000562d50002e73eULL, 0x00000028ab2b2514ULL, }, + { 0x000704f15e31e24eULL, 0x00000002000a942eULL, }, + { 0x0e09e2ca005e31e2ULL, 0x000000230000000bULL, }, + { 0x001c13c65e31e24eULL, 0x0000000100000a94ULL, }, + { 0x00038279000178c8ULL, 0x0000008ea942e2a0ULL, }, + }; + + reset_msa_registers(); + + gettimeofday(&start, NULL); + + for (i = 0; i < PATTERN_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < PATTERN_INPUTS_SHORT_COUNT; j++) { + do_msa_SRLR_W(b128_pattern[i], b128_pattern[j], + b128_result[PATTERN_INPUTS_SHORT_COUNT * i + j]); + } + } + + for (i = 0; i < RANDOM_INPUTS_SHORT_COUNT; i++) { + for (j = 0; j < RANDOM_INPUTS_SHORT_COUNT; j++) { + do_msa_SRLR_W(b128_random[i], b128_random[j], + b128_result[((PATTERN_INPUTS_SHORT_COUNT) * + (PATTERN_INPUTS_SHORT_COUNT)) + + RANDOM_INPUTS_SHORT_COUNT * i + j]); + } + } + + gettimeofday(&end, NULL); + + elapsed_time = (end.tv_sec - start.tv_sec) * 1000.0; + elapsed_time += (end.tv_usec - start.tv_usec) / 1000.0; + + ret = check_results(instruction_name, TEST_COUNT_TOTAL, elapsed_time, + &b128_result[0][0], &b128_expect[0][0]); + + return ret; +} diff --git a/tests/tcg/mips/user/ase/msa/test_msa_compile.sh b/tests/tcg/mips/user/ase/msa/test_msa_compile.sh new file mode 100755 index 0000000000..2a39d892f0 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/test_msa_compile.sh @@ -0,0 +1,558 @@ + +# +# Bit Count +# --------- +# +/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nloc_b +/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nloc_h +/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nloc_w +/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nloc_d +/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nlzc_b +/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nlzc_h +/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nlzc_w +/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nlzc_d +/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pcnt_b +/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pcnt_h +/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pcnt_w +/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pcnt_d + +# +# Bit move +# -------- +# + +# +# Bit Set +# ------- +# +/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bclr_b +/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bclr_h +/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bclr_w +/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bclr_d +/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bneg_b +/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bneg_h +/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bneg_w +/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bneg_d +/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bset_b +/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bset_h +/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bset_w +/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bset_d + +# +# Fixed Multiply +# -------------- +# +/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mul_q_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mul_q_h +/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mul_q_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mul_q_w +/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mulr_q_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulr_q_h +/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mulr_q_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulr_q_w + +# +# Float Max Min +# ------------- +# +/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_a_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmax_a_w +/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_a_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmax_a_d +/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmax_w +/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmax_d +/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_a_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmin_a_w +/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_a_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmin_a_d +/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmin_w +/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmin_d + +# +# Int Add +# ------- +# +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_add_a_b +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_add_a_h +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_add_a_w +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_add_a_d +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_a_b +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_a_h +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_a_w +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_a_d +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_s_b +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_u_b +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_u_d +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_addv_b +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_addv_h +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_addv_w +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_addv_d +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_u_d + +# +# Int Average +# ----------- +# +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_s_b +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_u_b +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_u_d +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_s_b +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_u_b +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_u_d + +# +# Int Compare +# ----------- +# +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ceq_b +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ceq_h +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ceq_w +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ceq_d +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_s_b +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_u_b +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_u_d +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_s_b +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_u_b +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_u_d + +# +# Int Divide +# ---------- +# +/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_s_b +/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_u_b +/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_u_d + +# +# Int Dot Product +# --------------- +# +/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_u_d + +# +# Int Max Min +# ----------- +# +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_a_b +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_a_h +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_a_w +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_a_d +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_s_b +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_u_b +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_u_d +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_a_b +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_a_h +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_a_w +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_a_d +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_s_b +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_u_b +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_u_d + +# +# Int Modulo +# ---------- +# +/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_s_b +/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_u_b +/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_u_d + +# +# Int Multiply +# ------------ +# +/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulv_b +/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulv_h +/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulv_w +/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulv_d + +# +# Int Subtract +# ------------ +# +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_s_b +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_u_b +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_u_d +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_u_d +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_s_b +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_u_b +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_u_d +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsuu_s_b +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsuu_s_h +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsuu_s_w +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsuu_s_d +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsus_u_b +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsus_u_h +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsus_u_w +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsus_u_d +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subv_b +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subv_h +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subv_w +/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subv_d + +# +# Interleave +# ---------- +# +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvev_b +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvev_h +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvev_w +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvev_d +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvod_b +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvod_h +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvod_w +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvod_d +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvl_b +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvl_h +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvl_w +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvl_d +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvr_b +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvr_h +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvr_w +/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvr_d + +# +# Logic +# ----- +# +/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_and_v.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_and_v +/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_nor_v.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nor_v +/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_or_v.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_or_v +/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_xor_v.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_xor_v + +# +# Pack +# ---- +# +/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckev_b +/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckev_h +/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckev_w +/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckev_d +/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckod_b +/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckod_h +/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckod_w +/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckod_d +/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_vshf_b +/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_vshf_h +/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_vshf_w +/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_vshf_d + +# +# Shift +# ----- +# +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sll_b +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sll_h +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sll_w +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sll_d +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sra_b +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sra_h +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sra_w +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sra_d +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srar_b +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srar_h +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srar_w +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srar_d +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srl_b +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srl_h +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srl_w +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srl_d +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_b.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srlr_b +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_h.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srlr_h +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_w.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srlr_w +/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_d.c \ +-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srlr_d diff --git a/tests/tcg/mips/user/ase/msa/test_msa_run.sh b/tests/tcg/mips/user/ase/msa/test_msa_run.sh new file mode 100755 index 0000000000..278d93b614 --- /dev/null +++ b/tests/tcg/mips/user/ase/msa/test_msa_run.sh @@ -0,0 +1,326 @@ +PATH_TO_QEMU="../../../../../../mips64el-linux-user/qemu-mips64el" + + +# +# Bit Count +# --------- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_d + +# +# Bit move +# -------- +# + +# +# Bit Set +# ------- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_d + +# +# Fixed Multiply +# -------------- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mul_q_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mul_q_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulr_q_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulr_q_w + +# +# Float Max Min +# ------------- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_a_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_a_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_a_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_a_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_d + +# +# Int Add +# ------- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_d + +# +# Int Average +# ----------- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_d + +# +# Int Compare +# ----------- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_d + +# +# Int Divide +# ---------- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_d + +# +# Int Dot Product +# --------------- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_d + +# +# Int Max Min +# ----------- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_d + +# +# Int Modulo +# ---------- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_d + +# +# Int Multiply +# ------------ +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_d + +# +# Int Subtract +# ------------ +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_d + +# +# Interleave +# ---------- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_d + +# +# Logic +# ----- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_and_v +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nor_v +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_or_v +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_xor_v + +# +# Pack +# ---- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_d + +# +# Shift +# ----- +# +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_d +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_b +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_h +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_w +$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_d