aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2019-06-07 11:17:28 +0100
committerPeter Maydell <peter.maydell@linaro.org>2019-06-07 11:17:28 +0100
commit33556237f652d8a712d0b6d29ecb442e6b65fe42 (patch)
treed5b5d4781e805083e5d02b5c02980f9828020d9a
parent0d74f3b4277a7ecb0ccb80c865797d11f8e466f5 (diff)
parent88e34ac062c995df540a4d0ee80b8f8b62353072 (diff)
downloadqemu-33556237f652d8a712d0b6d29ecb442e6b65fe42.zip
qemu-33556237f652d8a712d0b6d29ecb442e6b65fe42.tar.gz
qemu-33556237f652d8a712d0b6d29ecb442e6b65fe42.tar.bz2
Merge remote-tracking branch 'remotes/amarkovic/tags/mips-queue-jun-7-2019' into staging
MIPS Queue for June 7th, 2019 # gpg: Signature made Fri 07 Jun 2019 10:59:15 BST # gpg: using RSA key D4972A8967F75A65 # gpg: Good signature from "Aleksandar Markovic <amarkovic@wavecomp.com>" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 8526 FBF1 5DA3 811F 4A01 DD75 D497 2A89 67F7 5A65 * remotes/amarkovic/tags/mips-queue-jun-7-2019: tests/tcg: target/mips: Add README for MSA tests tests/tcg: target/mips: Add tests for MSA FP max/min instructions tests/tcg: target/mips: Add utility function reset_msa_registers() tests/tcg: target/mips: Move four tests to a better location tests/tcg: target/mips: Add tests for MSA shift instructions tests/tcg: target/mips: Amend and rearrange MSA wrappers target/mips: Unroll loops in helpers for MSA logic instructions target/mips: Outline places for future MSA helpers target/mips: Fix block-comment-related issues in msa_helper.c target/mips: Fix space-related format issues in msa_helper.c Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--target/mips/msa_helper.c575
-rw-r--r--tests/tcg/mips/include/wrappers_msa.h508
-rw-r--r--tests/tcg/mips/user/ase/msa/README20
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-count/test_msa_nloc_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-count/test_msa_nlzc_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-count/test_msa_pcnt_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-set/test_msa_bclr_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-set/test_msa_bneg_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-set/test_msa_bset_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_h.c (renamed from tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mul_q_h.c)2
-rw-r--r--tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mul_q_w.c (renamed from tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mul_q_w.c)2
-rw-r--r--tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_h.c (renamed from tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulr_q_h.c)2
-rw-r--r--tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_mulr_q_w.c (renamed from tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulr_q_w.c)2
-rw-r--r--tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_d.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_a_w.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_d.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmax_w.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_d.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_a_w.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_d.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/float-max-min/test_msa_fmin_w.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_add_a_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_a_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_adds_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_addv_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-add/test_msa_hadd_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_ave_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-average/test_msa_aver_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_ceq_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_cle_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-compare/test_msa_clt_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-divide/test_msa_div_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dotp_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_a_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_max_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_a_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-max-min/test_msa_min_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-modulo/test_msa_mod_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-multiply/test_msa_mulv_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_asub_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_hsub_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subs_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsus_u_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subsuu_s_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/int-subtract/test_msa_subv_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvev_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvl_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvod_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/interleave/test_msa_ilvr_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/logic/test_msa_and_v.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/logic/test_msa_nor_v.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/logic/test_msa_or_v.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/logic/test_msa_xor_v.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_b.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_d.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_h.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_w.c2
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_b.c4
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_d.c4
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_h.c4
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_w.c4
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_sll_b.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_sll_d.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_sll_h.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_sll_w.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_sra_b.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_sra_d.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_sra_h.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_sra_w.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_srar_b.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_srar_d.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_srar_h.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_srar_w.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_srl_b.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_srl_d.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_srl_h.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_srl_w.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_b.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_d.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_h.c155
-rw-r--r--tests/tcg/mips/user/ase/msa/shift/test_msa_srlr_w.c155
-rwxr-xr-xtests/tcg/mips/user/ase/msa/test_msa_compile.sh558
-rwxr-xr-xtests/tcg/mips/user/ase/msa/test_msa_run.sh326
239 files changed, 6550 insertions, 197 deletions
diff --git a/target/mips/msa_helper.c b/target/mips/msa_helper.c
index f6e16c2..be059a3 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 6feda36..5d28cb5 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)
-
-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(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_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_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)
+/*
+ * Bit Count
+ * ---------
+ */
-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(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(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(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(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(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(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(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)
+/*
+ * Bit move
+ * --------
+ */
-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(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(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(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(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(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_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(BMNZ_V, bmnz.v)
-DO_MSA__WD__WS_WT(BMZ_V, bmz.v)
+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(FMAX_W, fmax.w)
-DO_MSA__WD__WS_WT(FMAX_D, fmax.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(FMAX_A_W, fmax_a.w)
-DO_MSA__WD__WS_WT(FMAX_A_D, fmax_a.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(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)
+/*
+ * Interleave
+ * ----------
+ */
+
+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)
+
+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(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 0000000..ca4f070
--- /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 <source file> \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o <executable file>
+
+They are to be executed using QEMU user mode, using command line:
+
+mips64el-linux-user/qemu-mips64el -cpu I6400 <executable file>
+
+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 <QEMU root directory>
+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 c73ed24..287054e 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 b10fb23..171abdf 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 c1dc075..f260eba 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 4f7a556..cb1981c 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 c202ba4..96d05d5 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 1edead2..c709d5e 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 b2724c5..c47e8bf 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 b547c73..a8a471b 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 5918e7f..067a11b 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 667ca31..c60635d 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 2951f86..8fba20a 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 ab43ea9..24c44ae 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 c5aab14..e27d3b5 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 11e616e..3b8c384 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 dc67b4d..d1db60f 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 ab0cce7..54087b7 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 1939d10..733bc24 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 8462bb3..fc09221 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 172d4c0..d8347a1 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 23bc033..36ef436 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 f48adbd..f6907cb 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 787016a..ecd833b 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 e1ff972..de63f26 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 51945b2..b973e67 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
index 55cf7b4..39a89ac 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
index 4b21d06..07f2dae 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
index 8351050..e35af2f 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
index 9e31ada..3cedf67 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 0000000..1807cab
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..b999b1f
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..b5ce6c7
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..5fafd30
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..c0b4001
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..d174fcd
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..62c149f
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..c5815a6
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 b603dbe..e96e4fd 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 d4130c3..ec025b6 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 00428cf..d04b3a5 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 d60b11b..7ae90a3 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 9a7d00b..05712a1 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 481fadf..c222a95 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 4c6c2b9..0348f8c 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 f9cb626..9ad9c56 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 e241b8b..a7f4de9 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 ae35a9a..d1048fc 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 48e3da7..6263616 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 77d49b6..80b69f7 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 dba9c20..d61623f 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 39aad16..7b60457 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 40846b8..c8b2262 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 046d109..7880b03 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 6107a42..dbfcd38 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 00f3ad7..27b6d65 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 2b9ffdc..f7045f6 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 93119ed..111e7c8 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 697847d..e6dffbf 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 63b95aa..211123a 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 7ff2bdc..cdab49d 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 372e205..38c43ce 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 9c96d2b..41863f6 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 3417fff..c30c266 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 e279a2f..bb73fca 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 9969b59..b8c5ab4 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 3029232..24aed15 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 70e9a5d..c0082d1 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 260bad2..8c857c5 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 2d9fb07..fd2a4b9 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 0b34441..6ab8f47 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 f1a4a5f..be614bb 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 cc1528d..bccb6ac 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 8070f20..941d889 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 40db924..b977aac 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 bde2850..c41a9b0 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 9ef7b7c..ed9aa28 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 307a844..04fcea4 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 3eef867..4305010 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 baf3730..47cdc5c 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 f1f5e6d..3ffb27c 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 a87f1c9..dc60868 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 a300ee3..a3073d7 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 a3bb29a..9e81665 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 2b391c9..4235d59 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 44c6fe4..796f89a 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 331745b..0b63274 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 acccc25..8fcee89 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 7421450..dc50ed3 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 402a54d..f6635f9 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 51685c7..0d09304 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 adf744d..4671eee 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 aa222fd..18d5706 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 f762c4d..15a3166 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 c456aef..89fcc2c 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 33978d1..c8481df 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 fc6dc51..ee2b39c 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 5394b27..8fef047 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 0f813d8..5b236a7 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 ff11360..918420c 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 e17bb9a..1b11d93 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 fcab2cd..289cf6a 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 83cc02e..af10a04 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 c3bc831..9d3920b 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 97557d8..8c06235 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 a77553837..2a9bfff 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 2628eb2..95da85b 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 8de2043..a3984b0 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 d495361..e6d7209 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 b785065..20a7029 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 57cfd79..493fc10 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 24f736d..7c9bd57 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 4d30246..5ca7164 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 ca96d21..271666d 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 1b90f23..eabcd2a 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 aa8dca8..866c683 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 fb9b63c..7f4c240 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 1334d80..7fb278e 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 05f8c03..7e35435 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 31218c1..f0a341e 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 1e4e69b..52de98b 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 a4fa928..b2d0a22 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 a245349..6fb023a 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 7aac861..35ebf1f 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 16c2122..0e7cf1e 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 ce439a5..9dee997 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 1dc8c3c..747f54d 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 a82c7ee..49ded49 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 91f1c23..f78104e 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 8030ed2..e0afa01 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 92aff1b..248b968 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 76e5dce..219029a 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 878ca2b..fb059af 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 3df7e10..dd47992 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 fdaab02..7985acf 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 68e1a92..45d91af 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 f9168b9..eb527bb 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 749fcef..057f22a 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 dc1a4ed..a8964ea 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 0909793..3346d37 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 4d1463f..c28c253 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 7e13966..593e516 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 fbc8699..1b5e57b 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 6c3224a..8aef843 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 c9b40d7..ae5abb8 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 9f248b8..da48929 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 3cb9ee9..fa9753c 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 8853440..2503467 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 b014e81..5162678 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 967151cc..7e2ff66 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 b67b7cf..f583702 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 3db9ca9..a9ae576 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 fce1343..8c193b6 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 e087f48..fb8f3c1 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 25a859a..506500b 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 5506525..ef7ee3f 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 513f02b..17dab15 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 974db1f..38a6395 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 7153bba..dd1dd37 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 37de5cb..d725d19 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 6e90e13..af13d99 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 57cf9d2..bd71abf 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 433ff08..fbf0b6c 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 3c77c0f..fb6b91a 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 8855153..38a6f40 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 d1cc4e3..989d27c 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 e245793..c847a6e 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 460de6a..0459a4e 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 8039643..3533c0c 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 4b5830b..894f984 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 dd3a0d5..29eea52 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 6902875..2bae876 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 370952d..9cb798c 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 4ba3b59..4915d59 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 12a28ec..19d8538 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 fab5452..278488b 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 0224509..a0d7616 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 8bdfe05..26cf9c5 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 420bfc7..cbba316 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 321faf9..156d62c 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 6fc4f66..dbec046 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 32eeff9..8b09789 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 e30b195..69bf9ec 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 09d49cb..365dc0e 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 c61091e..00b78f7 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 f67ed28..a33acfa 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 e760835..5186633 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 30d2e38..0e82f21 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 c771287..6dc06c5 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 b7d5fcd..a867972 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 af72876..22f6ba6 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 e06c9d9..f07689e 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 8e7f1c4..2316f38 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 acbd94a..2feb2eb 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 8a82def4..93abfad 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 e19170c..9b2b0d8 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 1e519e6..105a710 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 be76043..22579c4 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 cbd4685..ca416c0 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 5f4cfd0..6652c7f 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 534c420..1f864be 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 f781a8b..0b0f5dd 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 924f216..90f535a 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 f0442e6..398443d 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 409773d..fdab88d 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 8e89716..e708385 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 b389587..bfd401f 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 d393ad50..e58372d 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 ab363a0..4cefecd 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 09a6140..a7ea137 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 d7a8c5b..bc7edcc5 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 4b732d0..ca8c4fb 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 d9ccf57..c088643 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 6c555fb..06f3604 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 9dfcb51..f28d949 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 97074c0..78e26d4 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 0000000..6b1aa96
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..deb3b11
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..edb3b11
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..4cafaab
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..b1432c2
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..cb6c12d
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..2e50508
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..f4ba1b5
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..73e6031
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..b784897
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..476d2e1
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..87d7173
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..e0d460b
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..e4b88a3
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..1eb6440
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..794833c
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..4a90017
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..69ba01f
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..514a143
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..940fd6f
--- /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 <amarkovic@wavecomp.com>
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#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 0000000..2a39d89
--- /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 0000000..278d93b
--- /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