aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.include7
-rw-r--r--tests/acceptance/avocado_qemu/__init__.py2
-rw-r--r--tests/acceptance/virtio_version.py2
-rw-r--r--tests/machine-none-test.c4
-rw-r--r--tests/migration/guestperf/engine.py24
-rw-r--r--tests/pflash-cfi02-test.c681
-rwxr-xr-xtests/qemu-iotests/2352
-rw-r--r--tests/qemu-iotests/2454
-rw-r--r--tests/tcg/mips/include/wrappers_msa.h112
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsl_b.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsl_d.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsl_h.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsl_w.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsr_b.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsr_d.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsr_h.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsr_w.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-move/test_msa_bmnz_v.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-move/test_msa_bmz_v.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/bit-move/test_msa_bsel_v.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_madd_q_h.c216
-rw-r--r--tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_madd_q_w.c216
-rw-r--r--tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_maddr_q_h.c216
-rw-r--r--tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_maddr_q_w.c216
-rw-r--r--tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_msub_q_h.c216
-rw-r--r--tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_msub_q_w.c216
-rw-r--r--tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_msubr_q_h.c216
-rw-r--r--tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_msubr_q_w.c216
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_s_d.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_s_h.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_s_w.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_u_d.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_u_h.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_u_w.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_s_d.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_s_h.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_s_w.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_u_d.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_u_h.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_u_w.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-multiply/test_msa_maddv_b.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-multiply/test_msa_maddv_d.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-multiply/test_msa_maddv_h.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-multiply/test_msa_maddv_w.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-multiply/test_msa_msubv_b.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-multiply/test_msa_msubv_d.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-multiply/test_msa_msubv_h.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/int-multiply/test_msa_msubv_w.c214
-rw-r--r--tests/tcg/mips/user/ase/msa/move/test_msa_move_v.c149
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_b.c64
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_d.c64
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_h.c64
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_w.c64
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_b.c64
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_d.c64
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_h.c64
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_pckod_w.c64
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_b.c64
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_d.c64
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_h.c64
-rw-r--r--tests/tcg/mips/user/ase/msa/pack/test_msa_vshf_w.c64
-rwxr-xr-xtests/tcg/mips/user/ase/msa/test_msa_compile_32r6eb.sh643
-rwxr-xr-xtests/tcg/mips/user/ase/msa/test_msa_compile_32r6el.sh643
-rwxr-xr-xtests/tcg/mips/user/ase/msa/test_msa_compile_64r6eb.sh643
-rwxr-xr-xtests/tcg/mips/user/ase/msa/test_msa_compile_64r6el.sh (renamed from tests/tcg/mips/user/ase/msa/test_msa_compile.sh)585
-rwxr-xr-xtests/tcg/mips/user/ase/msa/test_msa_run.sh326
-rw-r--r--tests/tcg/mips/user/ase/msa/test_msa_run_32r6eb.sh371
-rwxr-xr-xtests/tcg/mips/user/ase/msa/test_msa_run_32r6el.sh371
-rwxr-xr-xtests/tcg/mips/user/ase/msa/test_msa_run_64r6eb.sh371
-rwxr-xr-xtests/tcg/mips/user/ase/msa/test_msa_run_64r6el.sh371
-rw-r--r--tests/tcg/s390x/csst.c2
-rw-r--r--tests/virtio-net-test.c57
-rwxr-xr-xtests/vm/basevm.py3
73 files changed, 13513 insertions, 990 deletions
diff --git a/tests/Makefile.include b/tests/Makefile.include
index db750dd6d0..a983dd32da 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -1,3 +1,4 @@
+# -*- Mode: makefile -*-
.PHONY: check-help
check-help:
@@ -260,6 +261,7 @@ check-qtest-arm-y += tests/m25p80-test$(EXESUF)
check-qtest-arm-y += tests/test-arm-mptimer$(EXESUF)
check-qtest-arm-y += tests/boot-serial-test$(EXESUF)
check-qtest-arm-y += tests/hexloader-test$(EXESUF)
+check-qtest-arm-$(CONFIG_PFLASH_CFI02) += tests/pflash-cfi02-test$(EXESUF)
check-qtest-aarch64-y = tests/numa-test$(EXESUF)
check-qtest-aarch64-y += tests/boot-serial-test$(EXESUF)
@@ -767,6 +769,7 @@ tests/device-introspect-test$(EXESUF): tests/device-introspect-test.o
tests/rtc-test$(EXESUF): tests/rtc-test.o
tests/m48t59-test$(EXESUF): tests/m48t59-test.o
tests/hexloader-test$(EXESUF): tests/hexloader-test.o
+tests/pflash-cfi02$(EXESUF): tests/pflash-cfi02-test.o
tests/endianness-test$(EXESUF): tests/endianness-test.o
tests/prom-env-test$(EXESUF): tests/prom-env-test.o $(libqos-obj-y)
tests/rtas-test$(EXESUF): tests/rtas-test.o $(libqos-spapr-obj-y)
@@ -890,7 +893,7 @@ define do_test_tap
endef
.PHONY: $(patsubst %, check-qtest-%, $(QTEST_TARGETS))
-$(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-qtest-%: subdir-%-softmmu $(check-qtest-y)
+$(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-qtest-%: %-softmmu/all $(check-qtest-y)
$(call do_test_human,$(check-qtest-$*-y) $(check-qtest-generic-y), \
QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \
QTEST_QEMU_IMG=qemu-img$(EXESUF))
@@ -903,7 +906,7 @@ check-speed: $(check-speed-y)
# gtester tests with TAP output
-$(patsubst %, check-report-qtest-%.tap, $(QTEST_TARGETS)): check-report-qtest-%.tap: subdir-%-softmmu $(check-qtest-y)
+$(patsubst %, check-report-qtest-%.tap, $(QTEST_TARGETS)): check-report-qtest-%.tap: %-softmmu/all $(check-qtest-y)
$(call do_test_tap, $(check-qtest-$*-y) $(check-qtest-generic-y), \
QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \
QTEST_QEMU_IMG=qemu-img$(EXESUF))
diff --git a/tests/acceptance/avocado_qemu/__init__.py b/tests/acceptance/avocado_qemu/__init__.py
index 2b236a1cf0..aee5d820ed 100644
--- a/tests/acceptance/avocado_qemu/__init__.py
+++ b/tests/acceptance/avocado_qemu/__init__.py
@@ -17,7 +17,7 @@ import avocado
SRC_ROOT_DIR = os.path.join(os.path.dirname(__file__), '..', '..', '..')
sys.path.append(os.path.join(SRC_ROOT_DIR, 'python'))
-from qemu import QEMUMachine
+from qemu.machine import QEMUMachine
def is_readable_executable_file(path):
return os.path.isfile(path) and os.access(path, os.R_OK | os.X_OK)
diff --git a/tests/acceptance/virtio_version.py b/tests/acceptance/virtio_version.py
index 8b97453ff8..33593c29dd 100644
--- a/tests/acceptance/virtio_version.py
+++ b/tests/acceptance/virtio_version.py
@@ -12,7 +12,7 @@ import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
-from qemu import QEMUMachine
+from qemu.machine import QEMUMachine
from avocado_qemu import Test
# Virtio Device IDs:
diff --git a/tests/machine-none-test.c b/tests/machine-none-test.c
index 4c6d470798..5953d31755 100644
--- a/tests/machine-none-test.c
+++ b/tests/machine-none-test.c
@@ -36,9 +36,9 @@ static struct arch2cpu cpus_map[] = {
/* FIXME: { "microblaze", "any" }, doesn't work with -M none -cpu any */
/* FIXME: { "microblazeel", "any" }, doesn't work with -M none -cpu any */
{ "mips", "4Kc" },
- { "mipsel", "4Kc" },
+ { "mipsel", "I7200" },
{ "mips64", "20Kc" },
- { "mips64el", "20Kc" },
+ { "mips64el", "I6500" },
{ "moxie", "MoxieLite" },
{ "nios2", "FIXME" },
{ "or1k", "or1200" },
diff --git a/tests/migration/guestperf/engine.py b/tests/migration/guestperf/engine.py
index 0e304660b8..f13dbea800 100644
--- a/tests/migration/guestperf/engine.py
+++ b/tests/migration/guestperf/engine.py
@@ -30,7 +30,7 @@ from guestperf.timings import TimingRecord, Timings
sys.path.append(os.path.join(os.path.dirname(__file__),
'..', '..', '..', 'python'))
-import qemu
+from qemu.machine import QEMUMachine
class Engine(object):
@@ -386,17 +386,17 @@ class Engine(object):
dstmonaddr = "/var/tmp/qemu-dst-%d-monitor.sock" % os.getpid()
srcmonaddr = "/var/tmp/qemu-src-%d-monitor.sock" % os.getpid()
- src = qemu.QEMUMachine(self._binary,
- args=self._get_src_args(hardware),
- wrapper=self._get_src_wrapper(hardware),
- name="qemu-src-%d" % os.getpid(),
- monitor_address=srcmonaddr)
-
- dst = qemu.QEMUMachine(self._binary,
- args=self._get_dst_args(hardware, uri),
- wrapper=self._get_dst_wrapper(hardware),
- name="qemu-dst-%d" % os.getpid(),
- monitor_address=dstmonaddr)
+ src = QEMUMachine(self._binary,
+ args=self._get_src_args(hardware),
+ wrapper=self._get_src_wrapper(hardware),
+ name="qemu-src-%d" % os.getpid(),
+ monitor_address=srcmonaddr)
+
+ dst = QEMUMachine(self._binary,
+ args=self._get_dst_args(hardware, uri),
+ wrapper=self._get_dst_wrapper(hardware),
+ name="qemu-dst-%d" % os.getpid(),
+ monitor_address=dstmonaddr)
try:
src.launch()
diff --git a/tests/pflash-cfi02-test.c b/tests/pflash-cfi02-test.c
new file mode 100644
index 0000000000..d3b23f4f66
--- /dev/null
+++ b/tests/pflash-cfi02-test.c
@@ -0,0 +1,681 @@
+/*
+ * QTest testcase for parallel flash with AMD command set
+ *
+ * Copyright (c) 2019 Stephen Checkoway
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#include "qemu/osdep.h"
+#include "libqtest.h"
+
+/*
+ * To test the pflash_cfi02 device, we run QEMU with the musicpal machine with
+ * a pflash drive. This enables us to test some flash configurations, but not
+ * all. In particular, we're limited to a 16-bit wide flash device.
+ */
+
+#define MP_FLASH_SIZE_MAX (32 * 1024 * 1024)
+#define BASE_ADDR (0x100000000ULL - MP_FLASH_SIZE_MAX)
+
+#define UNIFORM_FLASH_SIZE (8 * 1024 * 1024)
+#define UNIFORM_FLASH_SECTOR_SIZE (64 * 1024)
+
+/* Use a newtype to keep flash addresses separate from byte addresses. */
+typedef struct {
+ uint64_t addr;
+} faddr;
+#define FLASH_ADDR(x) ((faddr) { .addr = (x) })
+
+#define CFI_ADDR FLASH_ADDR(0x55)
+#define UNLOCK0_ADDR FLASH_ADDR(0x555)
+#define UNLOCK1_ADDR FLASH_ADDR(0x2AA)
+
+#define CFI_CMD 0x98
+#define UNLOCK0_CMD 0xAA
+#define UNLOCK1_CMD 0x55
+#define SECOND_UNLOCK_CMD 0x80
+#define AUTOSELECT_CMD 0x90
+#define RESET_CMD 0xF0
+#define PROGRAM_CMD 0xA0
+#define SECTOR_ERASE_CMD 0x30
+#define CHIP_ERASE_CMD 0x10
+#define UNLOCK_BYPASS_CMD 0x20
+#define UNLOCK_BYPASS_RESET_CMD 0x00
+#define ERASE_SUSPEND_CMD 0xB0
+#define ERASE_RESUME_CMD SECTOR_ERASE_CMD
+
+typedef struct {
+ int bank_width;
+
+ /* Nonuniform block size. */
+ int nb_blocs[4];
+ int sector_len[4];
+
+ QTestState *qtest;
+} FlashConfig;
+
+static char image_path[] = "/tmp/qtest.XXXXXX";
+
+/*
+ * The pflash implementation allows some parameters to be unspecified. We want
+ * to test those configurations but we also need to know the real values in
+ * our testing code. So after we launch qemu, we'll need a new FlashConfig
+ * with the correct values filled in.
+ */
+static FlashConfig expand_config_defaults(const FlashConfig *c)
+{
+ FlashConfig ret = *c;
+
+ if (ret.bank_width == 0) {
+ ret.bank_width = 2;
+ }
+ if (ret.nb_blocs[0] == 0 && ret.sector_len[0] == 0) {
+ ret.sector_len[0] = UNIFORM_FLASH_SECTOR_SIZE;
+ ret.nb_blocs[0] = UNIFORM_FLASH_SIZE / UNIFORM_FLASH_SECTOR_SIZE;
+ }
+
+ /* XXX: Limitations of test harness. */
+ assert(ret.bank_width == 2);
+ return ret;
+}
+
+/*
+ * Return a bit mask suitable for extracting the least significant
+ * status/query response from an interleaved response.
+ */
+static inline uint64_t device_mask(const FlashConfig *c)
+{
+ return (uint64_t)-1;
+}
+
+/*
+ * Return a bit mask exactly as long as the bank_width.
+ */
+static inline uint64_t bank_mask(const FlashConfig *c)
+{
+ if (c->bank_width == 8) {
+ return (uint64_t)-1;
+ }
+ return (1ULL << (c->bank_width * 8)) - 1ULL;
+}
+
+static inline void flash_write(const FlashConfig *c, uint64_t byte_addr,
+ uint64_t data)
+{
+ /* Sanity check our tests. */
+ assert((data & ~bank_mask(c)) == 0);
+ uint64_t addr = BASE_ADDR + byte_addr;
+ switch (c->bank_width) {
+ case 1:
+ qtest_writeb(c->qtest, addr, data);
+ break;
+ case 2:
+ qtest_writew(c->qtest, addr, data);
+ break;
+ case 4:
+ qtest_writel(c->qtest, addr, data);
+ break;
+ case 8:
+ qtest_writeq(c->qtest, addr, data);
+ break;
+ default:
+ abort();
+ }
+}
+
+static inline uint64_t flash_read(const FlashConfig *c, uint64_t byte_addr)
+{
+ uint64_t addr = BASE_ADDR + byte_addr;
+ switch (c->bank_width) {
+ case 1:
+ return qtest_readb(c->qtest, addr);
+ case 2:
+ return qtest_readw(c->qtest, addr);
+ case 4:
+ return qtest_readl(c->qtest, addr);
+ case 8:
+ return qtest_readq(c->qtest, addr);
+ default:
+ abort();
+ }
+}
+
+/*
+ * Convert a flash address expressed in the maximum width of the device as a
+ * byte address.
+ */
+static inline uint64_t as_byte_addr(const FlashConfig *c, faddr flash_addr)
+{
+ /*
+ * Command addresses are always given as addresses in the maximum
+ * supported bus size for the flash chip. So an x8/x16 chip in x8 mode
+ * uses addresses 0xAAA and 0x555 to unlock because the least significant
+ * bit is ignored. (0x555 rather than 0x554 is traditional.)
+ *
+ * In general we need to multiply by the maximum device width.
+ */
+ return flash_addr.addr * c->bank_width;
+}
+
+/*
+ * Return the command value or expected status replicated across all devices.
+ */
+static inline uint64_t replicate(const FlashConfig *c, uint64_t data)
+{
+ /* Sanity check our tests. */
+ assert((data & ~device_mask(c)) == 0);
+ return data;
+}
+
+static inline void flash_cmd(const FlashConfig *c, faddr cmd_addr,
+ uint8_t cmd)
+{
+ flash_write(c, as_byte_addr(c, cmd_addr), replicate(c, cmd));
+}
+
+static inline uint64_t flash_query(const FlashConfig *c, faddr query_addr)
+{
+ return flash_read(c, as_byte_addr(c, query_addr));
+}
+
+static inline uint64_t flash_query_1(const FlashConfig *c, faddr query_addr)
+{
+ return flash_query(c, query_addr) & device_mask(c);
+}
+
+static void unlock(const FlashConfig *c)
+{
+ flash_cmd(c, UNLOCK0_ADDR, UNLOCK0_CMD);
+ flash_cmd(c, UNLOCK1_ADDR, UNLOCK1_CMD);
+}
+
+static void reset(const FlashConfig *c)
+{
+ flash_cmd(c, FLASH_ADDR(0), RESET_CMD);
+}
+
+static void sector_erase(const FlashConfig *c, uint64_t byte_addr)
+{
+ unlock(c);
+ flash_cmd(c, UNLOCK0_ADDR, SECOND_UNLOCK_CMD);
+ unlock(c);
+ flash_write(c, byte_addr, replicate(c, SECTOR_ERASE_CMD));
+}
+
+static void wait_for_completion(const FlashConfig *c, uint64_t byte_addr)
+{
+ /* If DQ6 is toggling, step the clock and ensure the toggle stops. */
+ const uint64_t dq6 = replicate(c, 0x40);
+ if ((flash_read(c, byte_addr) & dq6) ^ (flash_read(c, byte_addr) & dq6)) {
+ /* Wait for erase or program to finish. */
+ qtest_clock_step_next(c->qtest);
+ /* Ensure that DQ6 has stopped toggling. */
+ g_assert_cmphex(flash_read(c, byte_addr), ==, flash_read(c, byte_addr));
+ }
+}
+
+static void bypass_program(const FlashConfig *c, uint64_t byte_addr,
+ uint16_t data)
+{
+ flash_cmd(c, UNLOCK0_ADDR, PROGRAM_CMD);
+ flash_write(c, byte_addr, data);
+ /*
+ * Data isn't valid until DQ6 stops toggling. We don't model this as
+ * writes are immediate, but if this changes in the future, we can wait
+ * until the program is complete.
+ */
+ wait_for_completion(c, byte_addr);
+}
+
+static void program(const FlashConfig *c, uint64_t byte_addr, uint16_t data)
+{
+ unlock(c);
+ bypass_program(c, byte_addr, data);
+}
+
+static void chip_erase(const FlashConfig *c)
+{
+ unlock(c);
+ flash_cmd(c, UNLOCK0_ADDR, SECOND_UNLOCK_CMD);
+ unlock(c);
+ flash_cmd(c, UNLOCK0_ADDR, CHIP_ERASE_CMD);
+}
+
+static void erase_suspend(const FlashConfig *c)
+{
+ flash_cmd(c, FLASH_ADDR(0), ERASE_SUSPEND_CMD);
+}
+
+static void erase_resume(const FlashConfig *c)
+{
+ flash_cmd(c, FLASH_ADDR(0), ERASE_RESUME_CMD);
+}
+
+/*
+ * Test flash commands with a variety of device geometry.
+ */
+static void test_geometry(const void *opaque)
+{
+ const FlashConfig *config = opaque;
+ QTestState *qtest;
+ qtest = qtest_initf("-M musicpal,accel=qtest"
+ " -drive if=pflash,file=%s,format=raw,copy-on-read"
+ /* Device geometry properties. */
+ " -global driver=cfi.pflash02,"
+ "property=num-blocks0,value=%d"
+ " -global driver=cfi.pflash02,"
+ "property=sector-length0,value=%d"
+ " -global driver=cfi.pflash02,"
+ "property=num-blocks1,value=%d"
+ " -global driver=cfi.pflash02,"
+ "property=sector-length1,value=%d"
+ " -global driver=cfi.pflash02,"
+ "property=num-blocks2,value=%d"
+ " -global driver=cfi.pflash02,"
+ "property=sector-length2,value=%d"
+ " -global driver=cfi.pflash02,"
+ "property=num-blocks3,value=%d"
+ " -global driver=cfi.pflash02,"
+ "property=sector-length3,value=%d",
+ image_path,
+ config->nb_blocs[0],
+ config->sector_len[0],
+ config->nb_blocs[1],
+ config->sector_len[1],
+ config->nb_blocs[2],
+ config->sector_len[2],
+ config->nb_blocs[3],
+ config->sector_len[3]);
+ FlashConfig explicit_config = expand_config_defaults(config);
+ explicit_config.qtest = qtest;
+ const FlashConfig *c = &explicit_config;
+
+ /* Check the IDs. */
+ unlock(c);
+ flash_cmd(c, UNLOCK0_ADDR, AUTOSELECT_CMD);
+ g_assert_cmphex(flash_query(c, FLASH_ADDR(0)), ==, replicate(c, 0xBF));
+ if (c->bank_width >= 2) {
+ /*
+ * XXX: The ID returned by the musicpal flash chip is 16 bits which
+ * wouldn't happen with an 8-bit device. It would probably be best to
+ * prohibit addresses larger than the device width in pflash_cfi02.c,
+ * but then we couldn't test smaller device widths at all.
+ */
+ g_assert_cmphex(flash_query(c, FLASH_ADDR(1)), ==,
+ replicate(c, 0x236D));
+ }
+ reset(c);
+
+ /* Check the erase blocks. */
+ flash_cmd(c, CFI_ADDR, CFI_CMD);
+ g_assert_cmphex(flash_query(c, FLASH_ADDR(0x10)), ==, replicate(c, 'Q'));
+ g_assert_cmphex(flash_query(c, FLASH_ADDR(0x11)), ==, replicate(c, 'R'));
+ g_assert_cmphex(flash_query(c, FLASH_ADDR(0x12)), ==, replicate(c, 'Y'));
+
+ /* Num erase regions. */
+ int nb_erase_regions = flash_query_1(c, FLASH_ADDR(0x2C));
+ g_assert_cmphex(nb_erase_regions, ==,
+ !!c->nb_blocs[0] + !!c->nb_blocs[1] + !!c->nb_blocs[2] +
+ !!c->nb_blocs[3]);
+
+ /* Check device length. */
+ uint32_t device_len = 1 << flash_query_1(c, FLASH_ADDR(0x27));
+ g_assert_cmphex(device_len, ==, UNIFORM_FLASH_SIZE);
+
+ /* Check that erase suspend to read/write is supported. */
+ uint16_t pri = flash_query_1(c, FLASH_ADDR(0x15)) +
+ (flash_query_1(c, FLASH_ADDR(0x16)) << 8);
+ g_assert_cmpint(pri, >=, 0x2D + 4 * nb_erase_regions);
+ g_assert_cmpint(flash_query(c, FLASH_ADDR(pri + 0)), ==, replicate(c, 'P'));
+ g_assert_cmpint(flash_query(c, FLASH_ADDR(pri + 1)), ==, replicate(c, 'R'));
+ g_assert_cmpint(flash_query(c, FLASH_ADDR(pri + 2)), ==, replicate(c, 'I'));
+ g_assert_cmpint(flash_query_1(c, FLASH_ADDR(pri + 6)), ==, 2); /* R/W */
+ reset(c);
+
+ const uint64_t dq7 = replicate(c, 0x80);
+ const uint64_t dq6 = replicate(c, 0x40);
+ const uint64_t dq3 = replicate(c, 0x08);
+ const uint64_t dq2 = replicate(c, 0x04);
+
+ uint64_t byte_addr = 0;
+ for (int region = 0; region < nb_erase_regions; ++region) {
+ uint64_t base = 0x2D + 4 * region;
+ flash_cmd(c, CFI_ADDR, CFI_CMD);
+ uint32_t nb_sectors = flash_query_1(c, FLASH_ADDR(base + 0)) +
+ (flash_query_1(c, FLASH_ADDR(base + 1)) << 8) + 1;
+ uint32_t sector_len = (flash_query_1(c, FLASH_ADDR(base + 2)) << 8) +
+ (flash_query_1(c, FLASH_ADDR(base + 3)) << 16);
+ g_assert_cmphex(nb_sectors, ==, c->nb_blocs[region]);
+ g_assert_cmphex(sector_len, ==, c->sector_len[region]);
+ reset(c);
+
+ /* Erase and program sector. */
+ for (uint32_t i = 0; i < nb_sectors; ++i) {
+ sector_erase(c, byte_addr);
+
+ /* Check that DQ3 is 0. */
+ g_assert_cmphex(flash_read(c, byte_addr) & dq3, ==, 0);
+ qtest_clock_step_next(c->qtest); /* Step over the 50 us timeout. */
+
+ /* Check that DQ3 is 1. */
+ uint64_t status0 = flash_read(c, byte_addr);
+ g_assert_cmphex(status0 & dq3, ==, dq3);
+
+ /* DQ7 is 0 during an erase. */
+ g_assert_cmphex(status0 & dq7, ==, 0);
+ uint64_t status1 = flash_read(c, byte_addr);
+
+ /* DQ6 toggles during an erase. */
+ g_assert_cmphex(status0 & dq6, ==, ~status1 & dq6);
+
+ /* Wait for erase to complete. */
+ wait_for_completion(c, byte_addr);
+
+ /* Ensure DQ6 has stopped toggling. */
+ g_assert_cmphex(flash_read(c, byte_addr), ==,
+ flash_read(c, byte_addr));
+
+ /* Now the data should be valid. */
+ g_assert_cmphex(flash_read(c, byte_addr), ==, bank_mask(c));
+
+ /* Program a bit pattern. */
+ program(c, byte_addr, 0x55);
+ g_assert_cmphex(flash_read(c, byte_addr) & 0xFF, ==, 0x55);
+ program(c, byte_addr, 0xA5);
+ g_assert_cmphex(flash_read(c, byte_addr) & 0xFF, ==, 0x05);
+ byte_addr += sector_len;
+ }
+ }
+
+ /* Erase the chip. */
+ chip_erase(c);
+ /* Read toggle. */
+ uint64_t status0 = flash_read(c, 0);
+ /* DQ7 is 0 during an erase. */
+ g_assert_cmphex(status0 & dq7, ==, 0);
+ uint64_t status1 = flash_read(c, 0);
+ /* DQ6 toggles during an erase. */
+ g_assert_cmphex(status0 & dq6, ==, ~status1 & dq6);
+ /* Wait for erase to complete. */
+ qtest_clock_step_next(c->qtest);
+ /* Ensure DQ6 has stopped toggling. */
+ g_assert_cmphex(flash_read(c, 0), ==, flash_read(c, 0));
+ /* Now the data should be valid. */
+
+ for (int region = 0; region < nb_erase_regions; ++region) {
+ for (uint32_t i = 0; i < c->nb_blocs[region]; ++i) {
+ uint64_t byte_addr = i * c->sector_len[region];
+ g_assert_cmphex(flash_read(c, byte_addr), ==, bank_mask(c));
+ }
+ }
+
+ /* Unlock bypass */
+ unlock(c);
+ flash_cmd(c, UNLOCK0_ADDR, UNLOCK_BYPASS_CMD);
+ bypass_program(c, 0 * c->bank_width, 0x01);
+ bypass_program(c, 1 * c->bank_width, 0x23);
+ bypass_program(c, 2 * c->bank_width, 0x45);
+ /*
+ * Test that bypass programming, unlike normal programming can use any
+ * address for the PROGRAM_CMD.
+ */
+ flash_cmd(c, FLASH_ADDR(3 * c->bank_width), PROGRAM_CMD);
+ flash_write(c, 3 * c->bank_width, 0x67);
+ wait_for_completion(c, 3 * c->bank_width);
+ flash_cmd(c, FLASH_ADDR(0), UNLOCK_BYPASS_RESET_CMD);
+ bypass_program(c, 4 * c->bank_width, 0x89); /* Should fail. */
+ g_assert_cmphex(flash_read(c, 0 * c->bank_width), ==, 0x01);
+ g_assert_cmphex(flash_read(c, 1 * c->bank_width), ==, 0x23);
+ g_assert_cmphex(flash_read(c, 2 * c->bank_width), ==, 0x45);
+ g_assert_cmphex(flash_read(c, 3 * c->bank_width), ==, 0x67);
+ g_assert_cmphex(flash_read(c, 4 * c->bank_width), ==, bank_mask(c));
+
+ /* Test ignored high order bits of address. */
+ flash_cmd(c, FLASH_ADDR(0x5555), UNLOCK0_CMD);
+ flash_cmd(c, FLASH_ADDR(0x2AAA), UNLOCK1_CMD);
+ flash_cmd(c, FLASH_ADDR(0x5555), AUTOSELECT_CMD);
+ g_assert_cmphex(flash_query(c, FLASH_ADDR(0)), ==, replicate(c, 0xBF));
+ reset(c);
+
+ /*
+ * Program a word on each sector, erase one or two sectors per region, and
+ * verify that all of those, and only those, are erased.
+ */
+ byte_addr = 0;
+ for (int region = 0; region < nb_erase_regions; ++region) {
+ for (int i = 0; i < config->nb_blocs[region]; ++i) {
+ program(c, byte_addr, 0);
+ byte_addr += config->sector_len[region];
+ }
+ }
+ unlock(c);
+ flash_cmd(c, UNLOCK0_ADDR, SECOND_UNLOCK_CMD);
+ unlock(c);
+ byte_addr = 0;
+ const uint64_t erase_cmd = replicate(c, SECTOR_ERASE_CMD);
+ for (int region = 0; region < nb_erase_regions; ++region) {
+ flash_write(c, byte_addr, erase_cmd);
+ if (c->nb_blocs[region] > 1) {
+ flash_write(c, byte_addr + c->sector_len[region], erase_cmd);
+ }
+ byte_addr += c->sector_len[region] * c->nb_blocs[region];
+ }
+
+ qtest_clock_step_next(c->qtest); /* Step over the 50 us timeout. */
+ wait_for_completion(c, 0);
+ byte_addr = 0;
+ for (int region = 0; region < nb_erase_regions; ++region) {
+ for (int i = 0; i < config->nb_blocs[region]; ++i) {
+ if (i < 2) {
+ g_assert_cmphex(flash_read(c, byte_addr), ==, bank_mask(c));
+ } else {
+ g_assert_cmphex(flash_read(c, byte_addr), ==, 0);
+ }
+ byte_addr += config->sector_len[region];
+ }
+ }
+
+ /* Test erase suspend/resume during erase timeout. */
+ sector_erase(c, 0);
+ /*
+ * Check that DQ 3 is 0 and DQ6 and DQ2 are toggling in the sector being
+ * erased as well as in a sector not being erased.
+ */
+ byte_addr = c->sector_len[0];
+ status0 = flash_read(c, 0);
+ status1 = flash_read(c, 0);
+ g_assert_cmpint(status0 & dq3, ==, 0);
+ g_assert_cmpint(status0 & dq6, ==, ~status1 & dq6);
+ g_assert_cmpint(status0 & dq2, ==, ~status1 & dq2);
+ status0 = flash_read(c, byte_addr);
+ status1 = flash_read(c, byte_addr);
+ g_assert_cmpint(status0 & dq3, ==, 0);
+ g_assert_cmpint(status0 & dq6, ==, ~status1 & dq6);
+ g_assert_cmpint(status0 & dq2, ==, ~status1 & dq2);
+
+ /*
+ * Check that after suspending, DQ6 does not toggle but DQ2 does toggle in
+ * an erase suspended sector but that neither toggle (we should be
+ * getting data) in a sector not being erased.
+ */
+ erase_suspend(c);
+ status0 = flash_read(c, 0);
+ status1 = flash_read(c, 0);
+ g_assert_cmpint(status0 & dq6, ==, status1 & dq6);
+ g_assert_cmpint(status0 & dq2, ==, ~status1 & dq2);
+ g_assert_cmpint(flash_read(c, byte_addr), ==, flash_read(c, byte_addr));
+
+ /* Check that after resuming, DQ3 is 1 and DQ6 and DQ2 toggle. */
+ erase_resume(c);
+ status0 = flash_read(c, 0);
+ status1 = flash_read(c, 0);
+ g_assert_cmpint(status0 & dq3, ==, dq3);
+ g_assert_cmpint(status0 & dq6, ==, ~status1 & dq6);
+ g_assert_cmpint(status0 & dq2, ==, ~status1 & dq2);
+ status0 = flash_read(c, byte_addr);
+ status1 = flash_read(c, byte_addr);
+ g_assert_cmpint(status0 & dq3, ==, dq3);
+ g_assert_cmpint(status0 & dq6, ==, ~status1 & dq6);
+ g_assert_cmpint(status0 & dq2, ==, ~status1 & dq2);
+ wait_for_completion(c, 0);
+
+ /* Repeat this process but this time suspend after the timeout. */
+ sector_erase(c, 0);
+ qtest_clock_step_next(c->qtest);
+ /*
+ * Check that DQ 3 is 1 and DQ6 and DQ2 are toggling in the sector being
+ * erased as well as in a sector not being erased.
+ */
+ byte_addr = c->sector_len[0];
+ status0 = flash_read(c, 0);
+ status1 = flash_read(c, 0);
+ g_assert_cmpint(status0 & dq3, ==, dq3);
+ g_assert_cmpint(status0 & dq6, ==, ~status1 & dq6);
+ g_assert_cmpint(status0 & dq2, ==, ~status1 & dq2);
+ status0 = flash_read(c, byte_addr);
+ status1 = flash_read(c, byte_addr);
+ g_assert_cmpint(status0 & dq3, ==, dq3);
+ g_assert_cmpint(status0 & dq6, ==, ~status1 & dq6);
+ g_assert_cmpint(status0 & dq2, ==, ~status1 & dq2);
+
+ /*
+ * Check that after suspending, DQ6 does not toggle but DQ2 does toggle in
+ * an erase suspended sector but that neither toggle (we should be
+ * getting data) in a sector not being erased.
+ */
+ erase_suspend(c);
+ status0 = flash_read(c, 0);
+ status1 = flash_read(c, 0);
+ g_assert_cmpint(status0 & dq6, ==, status1 & dq6);
+ g_assert_cmpint(status0 & dq2, ==, ~status1 & dq2);
+ g_assert_cmpint(flash_read(c, byte_addr), ==, flash_read(c, byte_addr));
+
+ /* Check that after resuming, DQ3 is 1 and DQ6 and DQ2 toggle. */
+ erase_resume(c);
+ status0 = flash_read(c, 0);
+ status1 = flash_read(c, 0);
+ g_assert_cmpint(status0 & dq3, ==, dq3);
+ g_assert_cmpint(status0 & dq6, ==, ~status1 & dq6);
+ g_assert_cmpint(status0 & dq2, ==, ~status1 & dq2);
+ status0 = flash_read(c, byte_addr);
+ status1 = flash_read(c, byte_addr);
+ g_assert_cmpint(status0 & dq3, ==, dq3);
+ g_assert_cmpint(status0 & dq6, ==, ~status1 & dq6);
+ g_assert_cmpint(status0 & dq2, ==, ~status1 & dq2);
+ wait_for_completion(c, 0);
+
+ qtest_quit(qtest);
+}
+
+/*
+ * Test that
+ * 1. enter autoselect mode;
+ * 2. enter CFI mode; and then
+ * 3. exit CFI mode
+ * leaves the flash device in autoselect mode.
+ */
+static void test_cfi_in_autoselect(const void *opaque)
+{
+ const FlashConfig *config = opaque;
+ QTestState *qtest;
+ qtest = qtest_initf("-M musicpal,accel=qtest"
+ " -drive if=pflash,file=%s,format=raw,copy-on-read",
+ image_path);
+ FlashConfig explicit_config = expand_config_defaults(config);
+ explicit_config.qtest = qtest;
+ const FlashConfig *c = &explicit_config;
+
+ /* 1. Enter autoselect. */
+ unlock(c);
+ flash_cmd(c, UNLOCK0_ADDR, AUTOSELECT_CMD);
+ g_assert_cmphex(flash_query(c, FLASH_ADDR(0)), ==, replicate(c, 0xBF));
+
+ /* 2. Enter CFI. */
+ flash_cmd(c, CFI_ADDR, CFI_CMD);
+ g_assert_cmphex(flash_query(c, FLASH_ADDR(0x10)), ==, replicate(c, 'Q'));
+ g_assert_cmphex(flash_query(c, FLASH_ADDR(0x11)), ==, replicate(c, 'R'));
+ g_assert_cmphex(flash_query(c, FLASH_ADDR(0x12)), ==, replicate(c, 'Y'));
+
+ /* 3. Exit CFI. */
+ reset(c);
+ g_assert_cmphex(flash_query(c, FLASH_ADDR(0)), ==, replicate(c, 0xBF));
+
+ qtest_quit(qtest);
+}
+
+static void cleanup(void *opaque)
+{
+ unlink(image_path);
+}
+
+/*
+ * XXX: Tests are limited to bank_width = 2 for now because that's what
+ * hw/arm/musicpal.c has.
+ */
+static const FlashConfig configuration[] = {
+ /* One x16 device. */
+ {
+ .bank_width = 2,
+ },
+ /* Nonuniform sectors (top boot). */
+ {
+ .bank_width = 2,
+ .nb_blocs = { 127, 1, 2, 1 },
+ .sector_len = { 0x10000, 0x08000, 0x02000, 0x04000 },
+ },
+ /* Nonuniform sectors (bottom boot). */
+ {
+ .bank_width = 2,
+ .nb_blocs = { 1, 2, 1, 127 },
+ .sector_len = { 0x04000, 0x02000, 0x08000, 0x10000 },
+ },
+};
+
+int main(int argc, char **argv)
+{
+ int fd = mkstemp(image_path);
+ if (fd == -1) {
+ g_printerr("Failed to create temporary file %s: %s\n", image_path,
+ strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ if (ftruncate(fd, UNIFORM_FLASH_SIZE) < 0) {
+ int error_code = errno;
+ close(fd);
+ unlink(image_path);
+ g_printerr("Failed to truncate file %s to %u MB: %s\n", image_path,
+ UNIFORM_FLASH_SIZE, strerror(error_code));
+ exit(EXIT_FAILURE);
+ }
+ close(fd);
+
+ qtest_add_abrt_handler(cleanup, NULL);
+ g_test_init(&argc, &argv, NULL);
+
+ size_t nb_configurations = sizeof configuration / sizeof configuration[0];
+ for (size_t i = 0; i < nb_configurations; ++i) {
+ const FlashConfig *config = &configuration[i];
+ char *path = g_strdup_printf("pflash-cfi02"
+ "/geometry/%dx%x-%dx%x-%dx%x-%dx%x"
+ "/%d",
+ config->nb_blocs[0],
+ config->sector_len[0],
+ config->nb_blocs[1],
+ config->sector_len[1],
+ config->nb_blocs[2],
+ config->sector_len[2],
+ config->nb_blocs[3],
+ config->sector_len[3],
+ config->bank_width);
+ qtest_add_data_func(path, config, test_geometry);
+ g_free(path);
+ }
+
+ qtest_add_data_func("pflash-cfi02/cfi-in-autoselect", &configuration[0],
+ test_cfi_in_autoselect);
+ int result = g_test_run();
+ cleanup(NULL);
+ return result;
+}
diff --git a/tests/qemu-iotests/235 b/tests/qemu-iotests/235
index 2b6a8c13be..fedd111fd4 100755
--- a/tests/qemu-iotests/235
+++ b/tests/qemu-iotests/235
@@ -25,7 +25,7 @@ from iotests import qemu_img_create, qemu_io, file_path, log
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
-from qemu import QEMUMachine
+from qemu.machine import QEMUMachine
# Note:
# This test was added to check that mirror dead-lock was fixed (see previous
diff --git a/tests/qemu-iotests/245 b/tests/qemu-iotests/245
index 349b94aace..bc1ceb9792 100644
--- a/tests/qemu-iotests/245
+++ b/tests/qemu-iotests/245
@@ -866,9 +866,9 @@ class TestBlockdevReopen(iotests.QMPTestCase):
auto_finalize = False)
self.assert_qmp(result, 'return', {})
- # We can't remove hd2 while the stream job is ongoing
+ # We can remove hd2 while the stream job is ongoing
opts['backing']['backing'] = None
- self.reopen(opts, {}, "Cannot change 'backing' link from 'hd1' to 'hd2'")
+ self.reopen(opts, {})
# We can't remove hd1 while the stream job is ongoing
opts['backing'] = None
diff --git a/tests/tcg/mips/include/wrappers_msa.h b/tests/tcg/mips/include/wrappers_msa.h
index 9570aa8998..4be7821ece 100644
--- a/tests/tcg/mips/include/wrappers_msa.h
+++ b/tests/tcg/mips/include/wrappers_msa.h
@@ -124,8 +124,9 @@ static inline void do_msa_##suffix(const void *input1, \
}
#define DO_MSA__WD__WD_WT(suffix, mnemonic) \
-static inline void do_msa_##suffix(void *input1, void *input2, \
- void *output) \
+static inline void do_msa_##suffix(const void *input1, \
+ const void *input2, \
+ const void *output) \
{ \
__asm__ volatile ( \
"move $t0, %0\n\t" \
@@ -142,8 +143,9 @@ static inline void do_msa_##suffix(void *input1, void *input2, \
}
#define DO_MSA__WD__WS_WD(suffix, mnemonic) \
-static inline void do_msa_##suffix(void *input1, void *input2, \
- void *output) \
+static inline void do_msa_##suffix(const void *input1, \
+ const void *input2, \
+ const void *output) \
{ \
__asm__ volatile ( \
"move $t0, %0\n\t" \
@@ -187,18 +189,40 @@ DO_MSA__WD__WS(PCNT_D, pcnt.d)
*/
DO_MSA__WD__WS_WT(BINSL_B, binsl.b)
+DO_MSA__WD__WD_WT(BINSL_B__DDT, binsl.b)
+DO_MSA__WD__WS_WD(BINSL_B__DSD, binsl.b)
DO_MSA__WD__WS_WT(BINSL_H, binsl.h)
+DO_MSA__WD__WD_WT(BINSL_H__DDT, binsl.h)
+DO_MSA__WD__WS_WD(BINSL_H__DSD, binsl.h)
DO_MSA__WD__WS_WT(BINSL_W, binsl.w)
+DO_MSA__WD__WD_WT(BINSL_W__DDT, binsl.w)
+DO_MSA__WD__WS_WD(BINSL_W__DSD, binsl.w)
DO_MSA__WD__WS_WT(BINSL_D, binsl.d)
+DO_MSA__WD__WD_WT(BINSL_D__DDT, binsl.d)
+DO_MSA__WD__WS_WD(BINSL_D__DSD, binsl.d)
DO_MSA__WD__WS_WT(BINSR_B, binsr.b)
+DO_MSA__WD__WD_WT(BINSR_B__DDT, binsr.b)
+DO_MSA__WD__WS_WD(BINSR_B__DSD, binsr.b)
DO_MSA__WD__WS_WT(BINSR_H, binsr.h)
+DO_MSA__WD__WD_WT(BINSR_H__DDT, binsr.h)
+DO_MSA__WD__WS_WD(BINSR_H__DSD, binsr.h)
DO_MSA__WD__WS_WT(BINSR_W, binsr.w)
+DO_MSA__WD__WD_WT(BINSR_W__DDT, binsr.w)
+DO_MSA__WD__WS_WD(BINSR_W__DSD, binsr.w)
DO_MSA__WD__WS_WT(BINSR_D, binsr.d)
+DO_MSA__WD__WD_WT(BINSR_D__DDT, binsr.d)
+DO_MSA__WD__WS_WD(BINSR_D__DSD, binsr.d)
DO_MSA__WD__WS_WT(BMNZ_V, bmnz.v)
+DO_MSA__WD__WD_WT(BMNZ_V__DDT, bmnz.v)
+DO_MSA__WD__WS_WD(BMNZ_V__DSD, bmnz.v)
DO_MSA__WD__WS_WT(BMZ_V, bmz.v)
+DO_MSA__WD__WD_WT(BMZ_V__DDT, bmz.v)
+DO_MSA__WD__WS_WD(BMZ_V__DSD, bmz.v)
DO_MSA__WD__WS_WT(BSEL_V, bsel.v)
+DO_MSA__WD__WD_WT(BSEL_V__DDT, bsel.v)
+DO_MSA__WD__WS_WD(BSEL_V__DSD, bsel.v)
/*
@@ -228,16 +252,32 @@ DO_MSA__WD__WS_WT(BNEG_D, bneg.d)
*/
DO_MSA__WD__WS_WT(MADD_Q_H, madd_q.h)
+DO_MSA__WD__WD_WT(MADD_Q_H__DDT, madd_q.h)
+DO_MSA__WD__WS_WD(MADD_Q_H__DSD, madd_q.h)
DO_MSA__WD__WS_WT(MADD_Q_W, madd_q.w)
+DO_MSA__WD__WD_WT(MADD_Q_W__DDT, madd_q.w)
+DO_MSA__WD__WS_WD(MADD_Q_W__DSD, madd_q.w)
DO_MSA__WD__WS_WT(MADDR_Q_H, maddr_q.h)
+DO_MSA__WD__WD_WT(MADDR_Q_H__DDT, maddr_q.h)
+DO_MSA__WD__WS_WD(MADDR_Q_H__DSD, maddr_q.h)
DO_MSA__WD__WS_WT(MADDR_Q_W, maddr_q.w)
+DO_MSA__WD__WD_WT(MADDR_Q_W__DDT, maddr_q.w)
+DO_MSA__WD__WS_WD(MADDR_Q_W__DSD, maddr_q.w)
DO_MSA__WD__WS_WT(MSUB_Q_H, msub_q.h)
+DO_MSA__WD__WD_WT(MSUB_Q_H__DDT, msub_q.h)
+DO_MSA__WD__WS_WD(MSUB_Q_H__DSD, msub_q.h)
DO_MSA__WD__WS_WT(MSUB_Q_W, msub_q.w)
+DO_MSA__WD__WD_WT(MSUB_Q_W__DDT, msub_q.w)
+DO_MSA__WD__WS_WD(MSUB_Q_W__DSD, msub_q.w)
DO_MSA__WD__WS_WT(MSUBR_Q_H, msubr_q.h)
+DO_MSA__WD__WD_WT(MSUBR_Q_H__DDT, msubr_q.h)
+DO_MSA__WD__WS_WD(MSUBR_Q_H__DSD, msubr_q.h)
DO_MSA__WD__WS_WT(MSUBR_Q_W, msubr_q.w)
+DO_MSA__WD__WD_WT(MSUBR_Q_W__DDT, msubr_q.w)
+DO_MSA__WD__WS_WD(MSUBR_Q_W__DSD, msubr_q.w)
DO_MSA__WD__WS_WT(MUL_Q_H, mul_q.h)
DO_MSA__WD__WS_WT(MUL_Q_W, mul_q.w)
@@ -389,6 +429,46 @@ 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)
+DO_MSA__WD__WS_WT(DPADD_S_H, dpadd_s.h)
+DO_MSA__WD__WD_WT(DPADD_S_H__DDT, dpadd_s.h)
+DO_MSA__WD__WS_WD(DPADD_S_H__DSD, dpadd_s.h)
+DO_MSA__WD__WS_WT(DPADD_S_W, dpadd_s.w)
+DO_MSA__WD__WD_WT(DPADD_S_W__DDT, dpadd_s.w)
+DO_MSA__WD__WS_WD(DPADD_S_W__DSD, dpadd_s.w)
+DO_MSA__WD__WS_WT(DPADD_S_D, dpadd_s.d)
+DO_MSA__WD__WD_WT(DPADD_S_D__DDT, dpadd_s.d)
+DO_MSA__WD__WS_WD(DPADD_S_D__DSD, dpadd_s.d)
+
+DO_MSA__WD__WS_WT(DPADD_U_H, dpadd_u.h)
+DO_MSA__WD__WD_WT(DPADD_U_H__DDT, dpadd_u.h)
+DO_MSA__WD__WS_WD(DPADD_U_H__DSD, dpadd_u.h)
+DO_MSA__WD__WS_WT(DPADD_U_W, dpadd_u.w)
+DO_MSA__WD__WD_WT(DPADD_U_W__DDT, dpadd_u.w)
+DO_MSA__WD__WS_WD(DPADD_U_W__DSD, dpadd_u.w)
+DO_MSA__WD__WS_WT(DPADD_U_D, dpadd_u.d)
+DO_MSA__WD__WD_WT(DPADD_U_D__DDT, dpadd_u.d)
+DO_MSA__WD__WS_WD(DPADD_U_D__DSD, dpadd_u.d)
+
+DO_MSA__WD__WS_WT(DPSUB_S_H, dpsub_s.h)
+DO_MSA__WD__WD_WT(DPSUB_S_H__DDT, dpsub_s.h)
+DO_MSA__WD__WS_WD(DPSUB_S_H__DSD, dpsub_s.h)
+DO_MSA__WD__WS_WT(DPSUB_S_W, dpsub_s.w)
+DO_MSA__WD__WD_WT(DPSUB_S_W__DDT, dpsub_s.w)
+DO_MSA__WD__WS_WD(DPSUB_S_W__DSD, dpsub_s.w)
+DO_MSA__WD__WS_WT(DPSUB_S_D, dpsub_s.d)
+DO_MSA__WD__WD_WT(DPSUB_S_D__DDT, dpsub_s.d)
+DO_MSA__WD__WS_WD(DPSUB_S_D__DSD, dpsub_s.d)
+
+DO_MSA__WD__WS_WT(DPSUB_U_H, dpsub_u.h)
+DO_MSA__WD__WD_WT(DPSUB_U_H__DDT, dpsub_u.h)
+DO_MSA__WD__WS_WD(DPSUB_U_H__DSD, dpsub_u.h)
+DO_MSA__WD__WS_WT(DPSUB_U_W, dpsub_u.w)
+DO_MSA__WD__WD_WT(DPSUB_U_W__DDT, dpsub_u.w)
+DO_MSA__WD__WS_WD(DPSUB_U_W__DSD, dpsub_u.w)
+DO_MSA__WD__WS_WT(DPSUB_U_D, dpsub_u.d)
+DO_MSA__WD__WD_WT(DPSUB_U_D__DDT, dpsub_u.d)
+DO_MSA__WD__WS_WD(DPSUB_U_D__DSD, dpsub_u.d)
+
/*
* Int Max Min
@@ -448,14 +528,30 @@ DO_MSA__WD__WS_WT(MOD_U_D, mod_u.d)
*/
DO_MSA__WD__WS_WT(MADDV_B, maddv.b)
+DO_MSA__WD__WD_WT(MADDV_B__DDT, maddv.b)
+DO_MSA__WD__WS_WD(MADDV_B__DSD, maddv.b)
DO_MSA__WD__WS_WT(MADDV_H, maddv.h)
+DO_MSA__WD__WD_WT(MADDV_H__DDT, maddv.h)
+DO_MSA__WD__WS_WD(MADDV_H__DSD, maddv.h)
DO_MSA__WD__WS_WT(MADDV_W, maddv.w)
+DO_MSA__WD__WD_WT(MADDV_W__DDT, maddv.w)
+DO_MSA__WD__WS_WD(MADDV_W__DSD, maddv.w)
DO_MSA__WD__WS_WT(MADDV_D, maddv.d)
+DO_MSA__WD__WD_WT(MADDV_D__DDT, maddv.d)
+DO_MSA__WD__WS_WD(MADDV_D__DSD, maddv.d)
DO_MSA__WD__WS_WT(MSUBV_B, msubv.b)
+DO_MSA__WD__WD_WT(MSUBV_B__DDT, msubv.b)
+DO_MSA__WD__WS_WD(MSUBV_B__DSD, msubv.b)
DO_MSA__WD__WS_WT(MSUBV_H, msubv.h)
+DO_MSA__WD__WD_WT(MSUBV_H__DDT, msubv.h)
+DO_MSA__WD__WS_WD(MSUBV_H__DSD, msubv.h)
DO_MSA__WD__WS_WT(MSUBV_W, msubv.w)
+DO_MSA__WD__WD_WT(MSUBV_W__DDT, msubv.w)
+DO_MSA__WD__WS_WD(MSUBV_W__DSD, msubv.w)
DO_MSA__WD__WS_WT(MSUBV_D, msubv.d)
+DO_MSA__WD__WD_WT(MSUBV_D__DDT, msubv.d)
+DO_MSA__WD__WS_WD(MSUBV_D__DSD, msubv.d)
DO_MSA__WD__WS_WT(MULV_B, mulv.b)
DO_MSA__WD__WS_WT(MULV_H, mulv.h)
@@ -550,6 +646,14 @@ DO_MSA__WD__WS_WT(XOR_V, xor.v)
/*
+ * Move
+ * ----
+ */
+
+DO_MSA__WD__WS(MOVE_V, move.v)
+
+
+/*
* Pack
* ----
*/
diff --git a/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsl_b.c b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsl_b.c
new file mode 100644
index 0000000000..4a34f69953
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsl_b.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction BINSL.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Bit Move";
+ char *instruction_name = "BINSL.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, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x9c71e7cc71675471ULL, 0x4767015ffe71c70cULL, }, /* 64 */
+ { 0x8c6be7cc29675571ULL, 0x4767015ffe7ba70cULL, },
+ { 0x8c6be7cc29625571ULL, 0x4b670b5efe7bb30cULL, },
+ { 0x8c6ae7cc29625541ULL, 0x4b670b5efe7bb30cULL, },
+ { 0x8caa01642982c541ULL, 0x1bf7bb1a143b33fcULL, },
+ { 0xfcbe01644d92c741ULL, 0x1bf7bb1a143f53fcULL, },
+ { 0xfcbe01644d93c741ULL, 0x12f7bb1a143f53fcULL, },
+ { 0xfcbe01604d93c709ULL, 0x12f7bb1a143f53fcULL, },
+ { 0xfc5eafa8cdd38b89ULL, 0x22d8cbfeaa2f5314ULL, }, /* 72 */
+ { 0xac5aafa8b9c38b89ULL, 0x22d8cbfeaa2b3314ULL, },
+ { 0xac5aafa8b9cf8b89ULL, 0x27d8c7ffaa2b2714ULL, },
+ { 0xac5aafa8b9cf8b81ULL, 0x27d8c7ffaa2b2714ULL, },
+ { 0x2c5a1748392fe301ULL, 0x87f187d9a84ba7a4ULL, },
+ { 0x7c4e17485d3fe201ULL, 0x87f187d9a842e7a4ULL, },
+ { 0x744e17485d31e201ULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, }, /* 80 */
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, }, /* 88 */
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x744f174c5f31e24fULL, 0x8df189d8a842e3a4ULL, },
+ { 0x8c6ae6cc28714240ULL, 0x49710958a862b30cULL, }, /* 96 */
+ { 0x8c6ae6cc28714240ULL, 0x49710958a862b30cULL, },
+ { 0x8c6ae6cc28714240ULL, 0x49710958a862b30cULL, },
+ { 0x8c6ae6cc28714240ULL, 0x49710958a862b30cULL, },
+ { 0xfcaa006428b1c240ULL, 0x09f18958282253fcULL, },
+ { 0xfcaa006428b1c240ULL, 0x09f18958282253fcULL, },
+ { 0xfcaa006428b1c240ULL, 0x09f18958282253fcULL, },
+ { 0xfcaa006428b1c240ULL, 0x09f18958282253fcULL, },
+ { 0xac4a80aca8f182c0ULL, 0x09f1c9d8a8222314ULL, }, /* 104 */
+ { 0xac4a80aca8f182c0ULL, 0x09f1c9d8a8222314ULL, },
+ { 0xac4a80aca8f182c0ULL, 0x09f1c9d8a8222314ULL, },
+ { 0xac4a80aca8f182c0ULL, 0x09f1c9d8a8222314ULL, },
+ { 0x744a004c2831e240ULL, 0x89f189d8a842e3a4ULL, },
+ { 0x744a004c2831e240ULL, 0x89f189d8a842e3a4ULL, },
+ { 0x744a004c2831e240ULL, 0x89f189d8a842e3a4ULL, },
+ { 0x744a004c2831e240ULL, 0x89f189d8a842e3a4ULL, },
+ };
+
+ 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_BINSL_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_BINSL_B(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSL_B__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSL_B__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/bit-move/test_msa_binsl_d.c b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsl_d.c
new file mode 100644
index 0000000000..0fc44fa195
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsl_d.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction BINSL.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Bit Move";
+ char *instruction_name = "BINSL.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, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x9c71c71c71c71c71ULL, 0x4b6471c71c71c71cULL, }, /* 64 */
+ { 0x8871c71c71c71c71ULL, 0x4b670b5efe7bb00cULL, },
+ { 0x8871c71c71c71c71ULL, 0x4b670b5efe7bb00cULL, },
+ { 0x886bc71c71c71c71ULL, 0x4b670b5efe7bb00cULL, },
+ { 0x886bc71c71c71c71ULL, 0x12f70b5efe7bb00cULL, },
+ { 0xfbebc71c71c71c71ULL, 0x12f7bb1a153f52fcULL, },
+ { 0xfbebc71c71c71c71ULL, 0x12f7bb1a153f52fcULL, },
+ { 0xfbbfc71c71c71c71ULL, 0x12f7bb1a153f52fcULL, },
+ { 0xfbbfc71c71c71c71ULL, 0x27dfbb1a153f52fcULL, }, /* 72 */
+ { 0xac3fc71c71c71c71ULL, 0x27d8c6ffab2b2514ULL, },
+ { 0xac3fc71c71c71c71ULL, 0x27d8c6ffab2b2514ULL, },
+ { 0xac5bc71c71c71c71ULL, 0x27d8c6ffab2b2514ULL, },
+ { 0x2c5bc71c71c71c71ULL, 0x8df0c6ffab2b2514ULL, },
+ { 0x705bc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x705bc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, }, /* 80 */
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, }, /* 88 */
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704fc71c71c71c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x886ae6cc28625c71ULL, 0x4b670b5ef942e2a4ULL, }, /* 96 */
+ { 0x886ae6cc28625c71ULL, 0x4b670b5ef942e2a4ULL, },
+ { 0x886ae6cc28625c71ULL, 0x4b670b5ef942e2a4ULL, },
+ { 0x886ae6cc28625c71ULL, 0x4b670b5ef942e2a4ULL, },
+ { 0xfbbe00634d93dc71ULL, 0x12f7bb1a1142e2a4ULL, },
+ { 0xfbbe00634d93dc71ULL, 0x12f7bb1a1142e2a4ULL, },
+ { 0xfbbe00634d93dc71ULL, 0x12f7bb1a1142e2a4ULL, },
+ { 0xfbbe00634d93dc71ULL, 0x12f7bb1a1142e2a4ULL, },
+ { 0xac5aaeaab9cf9c71ULL, 0x27d8c6ffa942e2a4ULL, }, /* 104 */
+ { 0xac5aaeaab9cf9c71ULL, 0x27d8c6ffa942e2a4ULL, },
+ { 0xac5aaeaab9cf9c71ULL, 0x27d8c6ffa942e2a4ULL, },
+ { 0xac5aaeaab9cf9c71ULL, 0x27d8c6ffa942e2a4ULL, },
+ { 0x704f164d5e31dc71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704f164d5e31dc71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704f164d5e31dc71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704f164d5e31dc71ULL, 0x8df188d8a942e2a4ULL, },
+ };
+
+ 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_BINSL_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_BINSL_D(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSL_D__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSL_D__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/bit-move/test_msa_binsl_h.c b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsl_h.c
new file mode 100644
index 0000000000..cc2db04a2d
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsl_h.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction BINSL.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Bit Move";
+ char *instruction_name = "BINSL.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, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x8871e6cc31c71c71ULL, 0x4b1c0b5ffe71b00cULL, }, /* 64 */
+ { 0x886be6cc21c75571ULL, 0x4b1c0b5ffe7bb00cULL, },
+ { 0x886be6cc28625571ULL, 0x4b1c0b5efe7bb00cULL, },
+ { 0x886ae6cc28625541ULL, 0x4b1c0b5efe7bb00cULL, },
+ { 0xfbaa00644862d541ULL, 0x121cbb1a153b52fcULL, },
+ { 0xfbbe00644862c741ULL, 0x121cbb1a153f52fcULL, },
+ { 0xfbbe00644d93c741ULL, 0x129cbb1a153f52fcULL, },
+ { 0xfbbe00604d93c709ULL, 0x129cbb1a153f52fcULL, },
+ { 0xac5eaea8ad93c709ULL, 0x279cc6feab2f2514ULL, }, /* 72 */
+ { 0xac5aaea8bd938b89ULL, 0x279cc6feab2b2514ULL, },
+ { 0xac5aaea8b9cf8b89ULL, 0x279cc6ffab2b2514ULL, },
+ { 0xac5aaea8b9cf8b81ULL, 0x279cc6ffab2b2514ULL, },
+ { 0x705a164859cf8b81ULL, 0x8d9c88d9a94be2a4ULL, },
+ { 0x704e164859cfe201ULL, 0x8d9c88d9a942e2a4ULL, },
+ { 0x704e16485e31e201ULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, }, /* 80 */
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, }, /* 88 */
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x704f164c5e31e24fULL, 0x8d9c88d8a942e2a4ULL, },
+ { 0x886ae6cc1e315540ULL, 0x4b640b58e942b2a4ULL, }, /* 96 */
+ { 0x886ae6cc1e315540ULL, 0x4b640b58e942b2a4ULL, },
+ { 0x886ae6cc1e315540ULL, 0x4b640b58e942b2a4ULL, },
+ { 0x886ae6cc1e315540ULL, 0x4b640b58e942b2a4ULL, },
+ { 0xfbaa00645e31d540ULL, 0x1364bb58094252a4ULL, },
+ { 0xfbaa00645e31d540ULL, 0x1364bb58094252a4ULL, },
+ { 0xfbaa00645e31d540ULL, 0x1364bb58094252a4ULL, },
+ { 0xfbaa00645e31d540ULL, 0x1364bb58094252a4ULL, },
+ { 0xac4aa8649e31d540ULL, 0x2364c6d8a94222a4ULL, }, /* 104 */
+ { 0xac4aa8649e31d540ULL, 0x2364c6d8a94222a4ULL, },
+ { 0xac4aa8649e31d540ULL, 0x2364c6d8a94222a4ULL, },
+ { 0xac4aa8649e31d540ULL, 0x2364c6d8a94222a4ULL, },
+ { 0x704a10645e31d540ULL, 0x8b6488d8a942e2a4ULL, },
+ { 0x704a10645e31d540ULL, 0x8b6488d8a942e2a4ULL, },
+ { 0x704a10645e31d540ULL, 0x8b6488d8a942e2a4ULL, },
+ { 0x704a10645e31d540ULL, 0x8b6488d8a942e2a4ULL, },
+ };
+
+ 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_BINSL_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_BINSL_H(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSL_H__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSL_H__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/bit-move/test_msa_binsl_w.c b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsl_w.c
new file mode 100644
index 0000000000..21d6eec4db
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsl_w.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction BINSL.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Bit Move";
+ char *instruction_name = "BINSL.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, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x8869c71c71c71c71ULL, 0x4b670b5ffe79c71cULL, }, /* 64 */
+ { 0x8869c71c28471c71ULL, 0x4b670b5ffe7bb00cULL, },
+ { 0x8869c71c28471c71ULL, 0x4b670b5efe7bb00cULL, },
+ { 0x8869c71c28631c71ULL, 0x4b670b5efe7bb00cULL, },
+ { 0xfbb9c71c28631c71ULL, 0x12f7bb1a153bb00cULL, },
+ { 0xfbb9c71c4de31c71ULL, 0x12f7bb1a153f52fcULL, },
+ { 0xfbb9c71c4de31c71ULL, 0x12f7bb1a153f52fcULL, },
+ { 0xfbbdc71c4d931c71ULL, 0x12f7bb1a153f52fcULL, },
+ { 0xac5dc71ccd931c71ULL, 0x27d8c6feab2f52fcULL, }, /* 72 */
+ { 0xac5dc71cb9931c71ULL, 0x27d8c6feab2b2514ULL, },
+ { 0xac5dc71cb9931c71ULL, 0x27d8c6ffab2b2514ULL, },
+ { 0xac59c71cb9cf1c71ULL, 0x27d8c6ffab2b2514ULL, },
+ { 0x7049c71c39cf1c71ULL, 0x8df188d9a9432514ULL, },
+ { 0x7049c71c5e4f1c71ULL, 0x8df188d9a942e2a4ULL, },
+ { 0x7049c71c5e4f1c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, }, /* 80 */
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, }, /* 88 */
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704dc71c5e311c71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x886ae6cc28625c71ULL, 0x4b670b58f942e2a4ULL, }, /* 96 */
+ { 0x886ae6cc28625c71ULL, 0x4b670b58f942e2a4ULL, },
+ { 0x886ae6cc28625c71ULL, 0x4b670b58f942e2a4ULL, },
+ { 0x886ae6cc28625c71ULL, 0x4b670b58f942e2a4ULL, },
+ { 0xfbbae6cc4d93dc71ULL, 0x12f7bb581142e2a4ULL, },
+ { 0xfbbae6cc4d93dc71ULL, 0x12f7bb581142e2a4ULL, },
+ { 0xfbbae6cc4d93dc71ULL, 0x12f7bb581142e2a4ULL, },
+ { 0xfbbae6cc4d93dc71ULL, 0x12f7bb581142e2a4ULL, },
+ { 0xac5ae6ccb9cf9c71ULL, 0x27d8c6d8a942e2a4ULL, }, /* 104 */
+ { 0xac5ae6ccb9cf9c71ULL, 0x27d8c6d8a942e2a4ULL, },
+ { 0xac5ae6ccb9cf9c71ULL, 0x27d8c6d8a942e2a4ULL, },
+ { 0xac5ae6ccb9cf9c71ULL, 0x27d8c6d8a942e2a4ULL, },
+ { 0x704ae6cc5e31dc71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704ae6cc5e31dc71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704ae6cc5e31dc71ULL, 0x8df188d8a942e2a4ULL, },
+ { 0x704ae6cc5e31dc71ULL, 0x8df188d8a942e2a4ULL, },
+ };
+
+ 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_BINSL_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_BINSL_W(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSL_W__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSL_W__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/bit-move/test_msa_binsr_b.c b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsr_b.c
new file mode 100644
index 0000000000..b1927c5c34
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsr_b.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction BINSR.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Bit Move";
+ char *instruction_name = "BINSR.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, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c72e60c70c21570ULL, 0xcb677bde7e7bc60cULL, }, /* 64 */
+ { 0x186ae60c68c25570ULL, 0xcb677bde7e7bc00cULL, },
+ { 0x086ae60c68625570ULL, 0x4b670b5e7e7bf00cULL, },
+ { 0x086ae60c28625540ULL, 0x4b670b5e7e7bf00cULL, },
+ { 0x096e800329634740ULL, 0x42f70b1a157ff01cULL, },
+ { 0x0b3e80030d63c740ULL, 0x42f70b1a153ff21cULL, },
+ { 0x1b3e80030d93c740ULL, 0x12f73b1a153fd21cULL, },
+ { 0x1bbe80234d93c708ULL, 0x12f73b1a153fd21cULL, },
+ { 0x1abaae2a4d97cb08ULL, 0x17d8367f2b3bd314ULL, }, /* 72 */
+ { 0x1cdaae2a799f8b08ULL, 0x17d8367f2b2bd514ULL, },
+ { 0x0cdaae2a79cf8b08ULL, 0x27d846ff2b2be514ULL, },
+ { 0x0c5aae2a39cf8b00ULL, 0x27d846ff2b2be514ULL, },
+ { 0x0c5f962d38c9a200ULL, 0x2df148d82922e400ULL, },
+ { 0x004f962d1ec1e200ULL, 0x2df148d82942e200ULL, },
+ { 0x104f962d1e31e200ULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, }, /* 80 */
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, }, /* 88 */
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x104f960d5e31e24eULL, 0x8df108d82942e200ULL, },
+ { 0x106ae60c2832e540ULL, 0x8bf309d82a43e000ULL, }, /* 96 */
+ { 0x106ae60c2832d540ULL, 0x8bf70bd82e4be000ULL, },
+ { 0x106ae60c2832d540ULL, 0x8b670bd87e4be000ULL, },
+ { 0x106ae60c2832d540ULL, 0x8b670bd87e4be000ULL, },
+ { 0x116e80032933c740ULL, 0x82f70bd8154fe000ULL, },
+ { 0x133e80032933c740ULL, 0x82f70bd8153fe000ULL, },
+ { 0x1b3e80032933c740ULL, 0x82f70bd8153fe000ULL, },
+ { 0x1b3e80032933c740ULL, 0x82f70bd8153fe000ULL, },
+ { 0x1c5a800a293f8b40ULL, 0x87d806d92b2be100ULL, }, /* 104 */
+ { 0x0c5a800a29cf8b40ULL, 0x27d846db2b2be100ULL, },
+ { 0x0c5a800a29cf8b40ULL, 0x27d846df2b2be100ULL, },
+ { 0x0c5a800a29cf8b40ULL, 0x27d846ff2b2be100ULL, },
+ { 0x105f800d2a318240ULL, 0x8dd908d82922e200ULL, },
+ { 0x104f800d2e318240ULL, 0x8dd908d82922e200ULL, },
+ { 0x104f800d5e318240ULL, 0x8dd908d82922e200ULL, },
+ { 0x104f800d5e318240ULL, 0x8dd908d82922e200ULL, },
+ };
+
+ 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_BINSR_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_BINSR_B(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSR_B__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSR_B__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/bit-move/test_msa_binsr_d.c b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsr_d.c
new file mode 100644
index 0000000000..6499415daa
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsr_d.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction BINSR.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Bit Move";
+ char *instruction_name = "BINSR.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, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c70ULL, 0xc71c71c71c71d00cULL, }, /* 64 */
+ { 0x1c71c71c71c71d40ULL, 0xcb670b5efe7bb00cULL, },
+ { 0x1c71c71c71c71d40ULL, 0xcb670b5efe7bb00cULL, },
+ { 0x1c71c71c71c75540ULL, 0xcb670b5efe7bb00cULL, },
+ { 0x1c71c71c71c75540ULL, 0xcb670b5efe7bb2fcULL, },
+ { 0x1c71c71c71c75508ULL, 0xd2f7bb1a153f52fcULL, },
+ { 0x1c71c71c71c75508ULL, 0xd2f7bb1a153f52fcULL, },
+ { 0x1c71c71c71c74708ULL, 0xd2f7bb1a153f52fcULL, },
+ { 0x1c71c71c71c74708ULL, 0xd2f7bb1a153f4514ULL, }, /* 72 */
+ { 0x1c71c71c71c74780ULL, 0xc7d8c6ffab2b2514ULL, },
+ { 0x1c71c71c71c74780ULL, 0xc7d8c6ffab2b2514ULL, },
+ { 0x1c71c71c71c70b80ULL, 0xc7d8c6ffab2b2514ULL, },
+ { 0x1c71c71c71c70b80ULL, 0xc7d8c6ffab2b22a0ULL, },
+ { 0x1c71c71c71c70a4eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c70a4eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, }, /* 80 */
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, }, /* 88 */
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c7624eULL, 0xcdf188d8a942e2a0ULL, },
+ { 0x1c71c71c71c75540ULL, 0xcdf188d8fe7bb00cULL, }, /* 96 */
+ { 0x1c71c71c71c75540ULL, 0xcdf188d8fe7bb00cULL, },
+ { 0x1c71c71c71c75540ULL, 0xcdf188d8fe7bb00cULL, },
+ { 0x1c71c71c71c75540ULL, 0xcdf188d8fe7bb00cULL, },
+ { 0x1c71c71c71c75540ULL, 0xcdf188d8fe7bb2fcULL, },
+ { 0x1c71c71c71c75540ULL, 0xd2f7bb1a153f52fcULL, },
+ { 0x1c71c71c71c75540ULL, 0xd2f7bb1a153f52fcULL, },
+ { 0x1c71c71c71c75540ULL, 0xd2f7bb1a153f52fcULL, },
+ { 0x1c71c71c71c75540ULL, 0xc7d8c6ffab2b2514ULL, }, /* 104 */
+ { 0x1c71c71c71c75540ULL, 0xc7d8c6ffab2b2514ULL, },
+ { 0x1c71c71c71c75540ULL, 0xc7d8c6ffab2b2514ULL, },
+ { 0x1c71c71c71c75540ULL, 0xc7d8c6ffab2b2514ULL, },
+ { 0x1c71c71c71c75540ULL, 0xc7d8c6ffab22e2a0ULL, },
+ { 0x1c71c71c71c75540ULL, 0xc7d8c6fea942e2a0ULL, },
+ { 0x1c71c71c71c75540ULL, 0xc7d8c6fea942e2a0ULL, },
+ { 0x1c71c71c71c75540ULL, 0xc7d8c6fea942e2a0ULL, },
+ };
+
+ 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_BINSR_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_BINSR_D(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSR_D__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSR_D__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/bit-move/test_msa_binsr_h.c b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsr_h.c
new file mode 100644
index 0000000000..2dc3dbe89b
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsr_h.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction BINSR.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Bit Move";
+ char *instruction_name = "BINSR.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, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x186ac6cc71c21c70ULL, 0xc7670b5e1e7bd00cULL, }, /* 64 */
+ { 0x086ac6cc71c21d40ULL, 0xc7670b5efe7bd00cULL, },
+ { 0x086ac6cc28621d40ULL, 0xc7670b5efe7bd00cULL, },
+ { 0x886ae6cc28625540ULL, 0xc7670b5efe7bd00cULL, },
+ { 0x8bbee06328635540ULL, 0xc7f73b1af53fd2fcULL, },
+ { 0xfbbee06328635508ULL, 0xc7f73b1a153fd2fcULL, },
+ { 0xfbbee0634d935508ULL, 0xc6f7bb1a153fd2fcULL, },
+ { 0xfbbec0634d934708ULL, 0xc6f7bb1a153fd2fcULL, },
+ { 0xfc5aceaa4d974708ULL, 0xc6d8c6ff1b2bc514ULL, }, /* 72 */
+ { 0xac5aceaa4d9f4780ULL, 0xc6d8c6ffab2bc514ULL, },
+ { 0xac5aceaab9cf4780ULL, 0xc7d8c6ffab2bc514ULL, },
+ { 0xac5aeeaab9cf0b80ULL, 0xc7d8c6ffab2bc514ULL, },
+ { 0xa84ff64db9c90b80ULL, 0xc7f188d8a942c2a0ULL, },
+ { 0xf04ff64db9c10a4eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0xf04ff64d5e310a4eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, }, /* 80 */
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, }, /* 88 */
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e31624eULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x886ae6cc5e325540ULL, 0xc7f3895ea943c2a0ULL, }, /* 96 */
+ { 0x886ae6cc5e325540ULL, 0xc7f78b5ea94bc2a0ULL, },
+ { 0x886ae6cc5e325540ULL, 0xc7678b5eae7bc2a0ULL, },
+ { 0x886ae6cc5e325540ULL, 0xc7678b5eae7bc2a0ULL, },
+ { 0x8bbee0635e335540ULL, 0xc7f7bb1aa53fc2a0ULL, },
+ { 0xfbbee0635e335540ULL, 0xc7f7bb1a153fc2a0ULL, },
+ { 0xfbbee0635e335540ULL, 0xc7f7bb1a153fc2a0ULL, },
+ { 0xfbbee0635e335540ULL, 0xc7f7bb1a153fc2a0ULL, },
+ { 0xac5ae06a5e3f5540ULL, 0xc7d8beffab2bc2a0ULL, }, /* 104 */
+ { 0xac5ae6aab9cf5540ULL, 0xc7d8c6ffab2bc2a0ULL, },
+ { 0xac5ae6aab9cf5540ULL, 0xc7d8c6ffab2bc2a0ULL, },
+ { 0xac5ae6aab9cf5540ULL, 0xc7d8c6ffab2bc2a0ULL, },
+ { 0xa84fe64d5e315540ULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e315540ULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e315540ULL, 0xc7f188d8a942c2a0ULL, },
+ { 0x704fd64d5e315540ULL, 0xc7f188d8a942c2a0ULL, },
+ };
+
+ 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_BINSR_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_BINSR_H(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSR_H__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSR_H__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/bit-move/test_msa_binsr_w.c b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsr_w.c
new file mode 100644
index 0000000000..5073187340
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_binsr_w.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction BINSR.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Bit Move";
+ char *instruction_name = "BINSR.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, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c6cc71c71c70ULL, 0xcb670b5e1c71d00cULL, }, /* 64 */
+ { 0x1c71c6cc71c71d40ULL, 0xcb670b5e1e7bb00cULL, },
+ { 0x1c71c6cc71c71d40ULL, 0x4b670b5e1e7bb00cULL, },
+ { 0x1c71e6cc71c75540ULL, 0x4b670b5e1e7bb00cULL, },
+ { 0x1c71e06371c75540ULL, 0x12f7bb1a1e7bb2fcULL, },
+ { 0x1c71e06371c75508ULL, 0x12f7bb1a153f52fcULL, },
+ { 0x1c71e06371c75508ULL, 0x12f7bb1a153f52fcULL, },
+ { 0x1c71c06371c74708ULL, 0x12f7bb1a153f52fcULL, },
+ { 0x1c71ceaa71c74708ULL, 0x27d8c6ff153f4514ULL, }, /* 72 */
+ { 0x1c71ceaa71c74780ULL, 0x27d8c6ff0b2b2514ULL, },
+ { 0x1c71ceaa71c74780ULL, 0x27d8c6ff0b2b2514ULL, },
+ { 0x1c71eeaa71c70b80ULL, 0x27d8c6ff0b2b2514ULL, },
+ { 0x1c71f64d71c70b80ULL, 0x0df188d80b2b22a0ULL, },
+ { 0x1c71f64d71c70a4eULL, 0x0df188d80942e2a0ULL, },
+ { 0x1c71f64d71c70a4eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, }, /* 80 */
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, }, /* 88 */
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c7624eULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71e6cc71c75540ULL, 0x8d670b5e0942e2a0ULL, }, /* 96 */
+ { 0x1c71e6cc71c75540ULL, 0xcb670b5e0942e2a0ULL, },
+ { 0x1c71e6cc71c75540ULL, 0xcb670b5e0942e2a0ULL, },
+ { 0x1c71e6cc71c75540ULL, 0xcb670b5e0942e2a0ULL, },
+ { 0x1c71e06371c75540ULL, 0x92f7bb1a0942e2a0ULL, },
+ { 0x1c71e06371c75540ULL, 0x92f7bb1a0942e2a0ULL, },
+ { 0x1c71e06371c75540ULL, 0x92f7bb1a0942e2a0ULL, },
+ { 0x1c71e06371c75540ULL, 0x92f7bb1a0942e2a0ULL, },
+ { 0x1c71e06a71c75540ULL, 0x97d8c6ff0942e2a0ULL, }, /* 104 */
+ { 0x1c71e6aa71c75540ULL, 0x27d8c6ff0942e2a0ULL, },
+ { 0x1c71e6aa71c75540ULL, 0x27d8c6ff0942e2a0ULL, },
+ { 0x1c71e6aa71c75540ULL, 0x27d8c6ff0942e2a0ULL, },
+ { 0x1c71e64d71c75540ULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c75540ULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c75540ULL, 0x8df188d80942e2a0ULL, },
+ { 0x1c71d64d71c75540ULL, 0x8df188d80942e2a0ULL, },
+ };
+
+ 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_BINSR_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_BINSR_W(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSR_W__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BINSR_W__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/bit-move/test_msa_bmnz_v.c b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_bmnz_v.c
new file mode 100644
index 0000000000..ba1c635087
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_bmnz_v.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction BMNZ.V
+ *
+ * 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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Bit Move";
+ char *instruction_name = "BMNZ.V";
+ 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, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 24 */
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 32 */
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 40 */
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 48 */
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x9c7be7dc79e75d71ULL, 0xcf7f7bdffe7bf71cULL, }, /* 64 */
+ { 0x8c6be7dc38665d71ULL, 0xcf6f4bdffe7bb50cULL, },
+ { 0x886be7dc28625571ULL, 0xcb670b5efe7bb00cULL, },
+ { 0x886ae7dc28625571ULL, 0x4b670b5efe7bb00cULL, },
+ { 0x882a015008024531ULL, 0x02670b1a143b100cULL, },
+ { 0xfbbe01734d93c739ULL, 0x12f7bb1a153f52fcULL, },
+ { 0xfbbe01734d93c739ULL, 0x12f7bb1a153f52fcULL, },
+ { 0xfbbe01734d93c739ULL, 0x12f7bb1a153f52fcULL, },
+ { 0xfbdea7bb6dd38339ULL, 0x13d0b25eab2f62f4ULL, }, /* 72 */
+ { 0xa85aa7ba29c38331ULL, 0x03d0825eab2b2014ULL, },
+ { 0xac5aafbab9cf8bb1ULL, 0x27d8c6ffab2b2514ULL, },
+ { 0xac5aafbab9cf8bb1ULL, 0x27d8c6ffab2b2514ULL, },
+ { 0x245a0f7e99adcaf1ULL, 0x2df9ccf9a942a510ULL, },
+ { 0x744e0f5ddc3dcaf9ULL, 0x2df9ccf9a942e7a0ULL, },
+ { 0x704e075d5c31c279ULL, 0x0df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, }, /* 80 */
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, }, /* 88 */
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x704f175d5e31e27fULL, 0x8df188d8a942e2a0ULL, },
+ { 0x004a064c08204040ULL, 0x09610858a842a000ULL, }, /* 96 */
+ { 0x004a064c08204040ULL, 0x09610858a842a000ULL, },
+ { 0x004a064c08204040ULL, 0x09610858a842a000ULL, },
+ { 0x004a064c08204040ULL, 0x09610858a842a000ULL, },
+ { 0x000a004008004000ULL, 0x0061081800020000ULL, },
+ { 0x000a004008004000ULL, 0x0061081800020000ULL, },
+ { 0x000a004008004000ULL, 0x0061081800020000ULL, },
+ { 0x000a004008004000ULL, 0x0061081800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, }, /* 104 */
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ };
+
+ 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_BMNZ_V(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_BMNZ_V(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BMNZ_V__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BMNZ_V__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/bit-move/test_msa_bmz_v.c b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_bmz_v.c
new file mode 100644
index 0000000000..b38ddc2c12
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_bmz_v.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction BMZ.V
+ *
+ * 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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Bit Move";
+ char *instruction_name = "BMZ.V";
+ 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, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 8 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 16 */
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 24 */
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, }, /* 32 */
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, }, /* 40 */
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, }, /* 48 */
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, }, /* 56 */
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x0860c60c20421440ULL, 0x430401461c71800cULL, }, /* 64 */
+ { 0x0860e68c20621440ULL, 0x4b040146fe71a00cULL, },
+ { 0x0860e6cc20625440ULL, 0x4b270946fe71b00cULL, },
+ { 0x8860e6cc20625540ULL, 0x4b270b46fe79b00cULL, },
+ { 0xfbf4e6ef65f3d748ULL, 0x5bb7bb46ff7df2fcULL, },
+ { 0xfbb400634593c708ULL, 0x12b7bb02153d52fcULL, },
+ { 0xfbb400634593c708ULL, 0x12b7bb02153d52fcULL, },
+ { 0xfbb400634593c708ULL, 0x12b7bb02153d52fcULL, },
+ { 0xac300862918fcf80ULL, 0x26bfcfa31539151cULL, }, /* 72 */
+ { 0xac70aeeab1cfcf80ULL, 0x27bfcfe7bf39351cULL, },
+ { 0xac50aeaab1cf8b80ULL, 0x2798c6e7ab292514ULL, },
+ { 0xac50aeaab1cf8b80ULL, 0x2798c6e7ab292514ULL, },
+ { 0xf845b6897653a30eULL, 0x879082c6ab2962a4ULL, },
+ { 0xf845160d5633a34eULL, 0x8f9082c2a969e2a4ULL, },
+ { 0xf845164d5633e34eULL, 0x8fb18ac2a969e2a4ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, }, /* 80 */
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, }, /* 88 */
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0x7045164d5631e24eULL, 0x8db188c0a940e2a0ULL, },
+ { 0xf86ff6cd7e73f74eULL, 0xcff78bdeff7bf2acULL, }, /* 96 */
+ { 0xf86ff6cd7e73f74eULL, 0xcff78bdeff7bf2acULL, },
+ { 0xf86ff6cd7e73f74eULL, 0xcff78bdeff7bf2acULL, },
+ { 0xf86ff6cd7e73f74eULL, 0xcff78bdeff7bf2acULL, },
+ { 0xfbfff6ef7ff3f74eULL, 0xdff7bbdeff7ff2fcULL, },
+ { 0xfbfff6ef7ff3f74eULL, 0xdff7bbdeff7ff2fcULL, },
+ { 0xfbfff6ef7ff3f74eULL, 0xdff7bbdeff7ff2fcULL, },
+ { 0xfbfff6ef7ff3f74eULL, 0xdff7bbdeff7ff2fcULL, },
+ { 0xfffffeefffffffceULL, 0xffffffffff7ff7fcULL, }, /* 104 */
+ { 0xfffffeefffffffceULL, 0xffffffffff7ff7fcULL, },
+ { 0xfffffeefffffffceULL, 0xffffffffff7ff7fcULL, },
+ { 0xfffffeefffffffceULL, 0xffffffffff7ff7fcULL, },
+ { 0xfffffeefffffffceULL, 0xffffffffff7ff7fcULL, },
+ { 0xfffffeefffffffceULL, 0xffffffffff7ff7fcULL, },
+ { 0xfffffeefffffffceULL, 0xffffffffff7ff7fcULL, },
+ { 0xfffffeefffffffceULL, 0xffffffffff7ff7fcULL, },
+ };
+
+ 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_BMZ_V(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_BMZ_V(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BMZ_V__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BMZ_V__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/bit-move/test_msa_bsel_v.c b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_bsel_v.c
new file mode 100644
index 0000000000..062e5a2fa0
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/bit-move/test_msa_bsel_v.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction BSEL.V
+ *
+ * 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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Bit Move";
+ char *instruction_name = "BSEL.V";
+ 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, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0xeeeeeeeeeeeeeeeeULL, 0xeeeeeeeeeeeeeeeeULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0xefcefcefcefcefceULL, 0xfcefcefcefcefcefULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 8 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, }, /* 16 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xaaaaaaaaaaaaaaaaULL, 0xaaaaaaaaaaaaaaaaULL, },
+ { 0x2222222222222222ULL, 0x2222222222222222ULL, },
+ { 0xaa8aa8aa8aa8aa8aULL, 0xa8aa8aa8aa8aa8aaULL, },
+ { 0x0820820820820820ULL, 0x8208208208208208ULL, },
+ { 0x5d75d75d75d75d75ULL, 0xd75d75d75d75d75dULL, }, /* 24 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x5555555555555555ULL, 0x5555555555555555ULL, },
+ { 0x4444444444444444ULL, 0x4444444444444444ULL, },
+ { 0x1111111111111111ULL, 0x1111111111111111ULL, },
+ { 0x4544544544544544ULL, 0x5445445445445445ULL, },
+ { 0x1451451451451451ULL, 0x4514514514514514ULL, },
+ { 0xdcddcddcddcddcddULL, 0xcddcddcddcddcddcULL, }, /* 32 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0x4444444444444444ULL, 0x4444444444444444ULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xccccccccccccccccULL, 0xccccccccccccccccULL, },
+ { 0x0c40c40c40c40c40ULL, 0xc40c40c40c40c40cULL, },
+ { 0x3f73f73f73f73f73ULL, 0xf73f73f73f73f73fULL, }, /* 40 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x1111111111111111ULL, 0x1111111111111111ULL, },
+ { 0x2222222222222222ULL, 0x2222222222222222ULL, },
+ { 0x3333333333333333ULL, 0x3333333333333333ULL, },
+ { 0x2302302302302302ULL, 0x3023023023023023ULL, },
+ { 0x1031031031031031ULL, 0x0310310310310310ULL, },
+ { 0xf3bf3bf3bf3bf3bfULL, 0x3bf3bf3bf3bf3bf3ULL, }, /* 48 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0x4104104104104104ULL, 0x1041041041041041ULL, },
+ { 0xe28e28e28e28e28eULL, 0x28e28e28e28e28e2ULL, },
+ { 0x2302302302302302ULL, 0x3023023023023023ULL, },
+ { 0xe38e38e38e38e38eULL, 0x38e38e38e38e38e3ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, }, /* 56 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x1451451451451451ULL, 0x4514514514514514ULL, },
+ { 0x0c60c60c60c60c60ULL, 0xc60c60c60c60c60cULL, },
+ { 0x1031031031031031ULL, 0x0310310310310310ULL, },
+ { 0x0c40c40c40c40c40ULL, 0xc40c40c40c40c40cULL, },
+ { 0x1c71c71c71c71c71ULL, 0xc71c71c71c71c71cULL, },
+ { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 64 */
+ { 0x882a004008024500ULL, 0x02670b1a143b100cULL, },
+ { 0x884ae68c28621140ULL, 0x4b40025eea6ba004ULL, },
+ { 0x006a064c08204440ULL, 0x09670958bc52b008ULL, },
+ { 0xfbfe066f4db3c748ULL, 0x1bf7bb5abd7ff2fcULL, },
+ { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, },
+ { 0xa81a002209838300ULL, 0x02d0821a012b0014ULL, },
+ { 0x73ae00414c11c608ULL, 0x10f7b918151652e8ULL, },
+ { 0x8c7aaeeab9ce4d80ULL, 0x276f4fffbe3b351cULL, }, /* 72 */
+ { 0xa83a00620983c700ULL, 0x02f78b1a153b101cULL, },
+ { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, },
+ { 0x204a060818018200ULL, 0x05d080d8a9022000ULL, },
+ { 0x504f164d4e30604eULL, 0x89610858a842e2a0ULL, },
+ { 0x700e00415c11c208ULL, 0x04f18898010242a0ULL, },
+ { 0x204b160c1a21a246ULL, 0x8dd080d8a942a000ULL, },
+ { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, },
+ { 0x004a064c08204040ULL, 0x09610858a842a000ULL, }, /* 80 */
+ { 0x000a004008004000ULL, 0x0061081800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, }, /* 88 */
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x000a000008000000ULL, 0x0040001800020000ULL, },
+ { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 96 */
+ { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, },
+ { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, },
+ { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, },
+ { 0xfbfee6ef6df3d748ULL, 0x5bf7bb5eff7ff2fcULL, },
+ { 0xfbfee6ef6df3d748ULL, 0x5bf7bb5eff7ff2fcULL, },
+ { 0xfbfee6ef6df3d748ULL, 0x5bf7bb5eff7ff2fcULL, },
+ { 0xfbfee6ef6df3d748ULL, 0x5bf7bb5eff7ff2fcULL, },
+ { 0xfffeeeeffdffdfc8ULL, 0x7fffffffff7ff7fcULL, }, /* 104 */
+ { 0xfffeeeeffdffdfc8ULL, 0x7fffffffff7ff7fcULL, },
+ { 0xfffeeeeffdffdfc8ULL, 0x7fffffffff7ff7fcULL, },
+ { 0xfffeeeeffdffdfc8ULL, 0x7fffffffff7ff7fcULL, },
+ { 0xfffffeefffffffceULL, 0xffffffffff7ff7fcULL, },
+ { 0xfffffeefffffffceULL, 0xffffffffff7ff7fcULL, },
+ { 0xfffffeefffffffceULL, 0xffffffffff7ff7fcULL, },
+ { 0xfffffeefffffffceULL, 0xffffffffff7ff7fcULL, },
+ };
+
+ 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_BSEL_V(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_BSEL_V(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BSEL_V__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_BSEL_V__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/fixed-multiply/test_msa_madd_q_h.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_madd_q_h.c
new file mode 100644
index 0000000000..29a2990011
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_madd_q_h.c
@@ -0,0 +1,216 @@
+/*
+ * Test program for MSA instruction MADD_Q.H
+ *
+ * Copyright (C) 2019 Wave Computing, Inc.
+ * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com>
+ * Copyright (C) 2019 RT-RK Computer Based Systems LLC
+ * Copyright (C) 2019 Mateja Marjanovic <mateja.marjanovic@rt-rk.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Fixed Multiply";
+ char *instruction_name = "MADD_Q.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 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0xfffefffefffefffeULL, 0xfffefffefffefffeULL, },
+ { 0xfffefffdfffefffeULL, 0xfffdfffefffefffdULL, },
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, },
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, }, /* 8 */
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, },
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, },
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, },
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, },
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, },
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, },
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, },
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, }, /* 16 */
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, },
+ { 0x38e138e138e138e1ULL, 0x38e138e138e138e1ULL, },
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, },
+ { 0x221f221f221f221fULL, 0x221f221f221f221fULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0x12f2da0f4bd712f2ULL, 0xda0f4bd712f2da0fULL, },
+ { 0xfffbfffcfffcfffbULL, 0xfffcfffcfffbfffcULL, },
+ { 0xfffafffbfffbfffaULL, 0xfffbfffbfffafffbULL, }, /* 24 */
+ { 0xfffafffbfffbfffaULL, 0xfffbfffbfffafffbULL, },
+ { 0xc716c717c717c716ULL, 0xc717c717c716c717ULL, },
+ { 0xfff9fffafffafff9ULL, 0xfffafffafff9fffaULL, },
+ { 0xddd6ddd7ddd7ddd6ULL, 0xddd7ddd7ddd6ddd7ULL, },
+ { 0xfff7fff8fff8fff7ULL, 0xfff8fff8fff7fff8ULL, },
+ { 0xed0025e4b41ded00ULL, 0x25e4b41ded0025e4ULL, },
+ { 0xfff5fff6fff6fff5ULL, 0xfff6fff6fff5fff6ULL, },
+ { 0xfff5fff6fff6fff5ULL, 0xfff6fff6fff5fff6ULL, }, /* 32 */
+ { 0xfff5fff6fff6fff5ULL, 0xfff6fff6fff5fff6ULL, },
+ { 0x2217221822182217ULL, 0x2218221822172218ULL, },
+ { 0xfff4fff5fff5fff4ULL, 0xfff5fff5fff4fff5ULL, },
+ { 0x146f14701470146fULL, 0x14701470146f1470ULL, },
+ { 0xfff3fff4fff4fff3ULL, 0xfff4fff4fff3fff4ULL, },
+ { 0x0b53e9322d770b53ULL, 0xe9322d770b53e932ULL, },
+ { 0xfff2fff3fff3fff2ULL, 0xfff3fff3fff2fff3ULL, },
+ { 0xfff1fff2fff2fff1ULL, 0xfff2fff2fff1fff2ULL, }, /* 40 */
+ { 0xfff1fff2fff2fff1ULL, 0xfff2fff2fff1fff2ULL, },
+ { 0xddceddcfddcfddceULL, 0xddcfddcfddceddcfULL, },
+ { 0xffeffff0fff0ffefULL, 0xfff0fff0ffeffff0ULL, },
+ { 0xeb73eb74eb74eb73ULL, 0xeb74eb74eb73eb74ULL, },
+ { 0xffedffeeffeeffedULL, 0xffeeffeeffedffeeULL, },
+ { 0xf48c16afd26af48cULL, 0x16afd26af48c16afULL, },
+ { 0xffecffedffecffecULL, 0xffedffecffecffedULL, },
+ { 0xffecffecffecffecULL, 0xffecffecffecffecULL, }, /* 48 */
+ { 0xffecffecffecffecULL, 0xffecffecffecffecULL, },
+ { 0x12e2d9ff4bc712e2ULL, 0xd9ff4bc712e2d9ffULL, },
+ { 0xffebffebffecffebULL, 0xffebffecffebffebULL, },
+ { 0x0b4be9292d6f0b4bULL, 0xe9292d6f0b4be929ULL, },
+ { 0xffeaffeaffebffeaULL, 0xffeaffebffeaffeaULL, },
+ { 0x063c1932650f063cULL, 0x1932650f063c1932ULL, },
+ { 0xffe9ffe9ffebffe9ULL, 0xffe9ffebffe9ffe9ULL, },
+ { 0xffe8ffe9ffeaffe8ULL, 0xffe9ffeaffe8ffe9ULL, }, /* 56 */
+ { 0xffe8ffe9ffeaffe8ULL, 0xffe9ffeaffe8ffe9ULL, },
+ { 0xecf125d6b40fecf1ULL, 0x25d6b40fecf125d6ULL, },
+ { 0xffe6ffe8ffe8ffe6ULL, 0xffe8ffe8ffe6ffe8ULL, },
+ { 0xf48516a9d264f485ULL, 0x16a9d264f48516a9ULL, },
+ { 0xffe5ffe7ffe6ffe5ULL, 0xffe7ffe6ffe5ffe7ULL, },
+ { 0xf992e69e9ac2f992ULL, 0xe69e9ac2f992e69eULL, },
+ { 0xffe3ffe7ffe4ffe3ULL, 0xffe7ffe4ffe3ffe7ULL, },
+ { 0x6f9c04dd0ca138aaULL, 0x2c5200e6ffe731d8ULL, }, /* 64 */
+ { 0x739604c9251a12b8ULL, 0x377dfac7ffa6fe02ULL, },
+ { 0x7fff14cc0ef4c520ULL, 0x4ef5f5b700a7e6d8ULL, },
+ { 0x171110672cabb158ULL, 0x0bc4eb2201aef931ULL, },
+ { 0x1b0b105345248b66ULL, 0x16efe503016dc55bULL, },
+ { 0x1b2f10537427a4c0ULL, 0x19be0a1804f3fb27ULL, },
+ { 0x1df71014499cd899ULL, 0x1fa528c6f6de1330ULL, },
+ { 0x1a3a10257fffe5d0ULL, 0x0ebe68e9e8780024ULL, },
+ { 0x6860202869d99838ULL, 0x263663d9e979e8faULL, }, /* 72 */
+ { 0x6b281fe93f4ecc11ULL, 0x2c1d7fffdb640103ULL, },
+ { 0x7fff539865cb3619ULL, 0x38847fff139c0bc0ULL, },
+ { 0x369a456c32245120ULL, 0x15027fff4d19033dULL, },
+ { 0xcdac41074fdb3d58ULL, 0xd1d1756a4e201596ULL, },
+ { 0xc9ef41187fff4a8fULL, 0xc0ea7fff3fba028aULL, },
+ { 0x808a32ec4c586596ULL, 0x9d687fff7937fa07ULL, },
+ { 0xe31436ce7fff6c79ULL, 0x030a7fff7fff00c4ULL, },
+ { 0xfe192c037fff7fffULL, 0x04d47fff7e7a0049ULL, }, /* 80 */
+ { 0xfe292c257fff4707ULL, 0x058b3b197fff0078ULL, },
+ { 0xff5c101739ce0661ULL, 0x074420c72b2a009aULL, },
+ { 0xfecc12e4645704e6ULL, 0x00ca02430de90076ULL, },
+ { 0xffeb0f2b7fff0829ULL, 0x014002760dbe002cULL, },
+ { 0xffeb0f367fff0487ULL, 0x016f012210050048ULL, },
+ { 0xfff8058b39ce0068ULL, 0x01e100a00567005cULL, },
+ { 0xfff006826457004fULL, 0x0034000b01bd0046ULL, },
+ { 0xfffe05397fff0083ULL, 0x0052000b01b7001aULL, }, /* 88 */
+ { 0xfffe053d7fff0048ULL, 0x005e000501ff002aULL, },
+ { 0xffff01e839ce0006ULL, 0x007b000200ac0036ULL, },
+ { 0xfffe023d64570004ULL, 0x000d000000370029ULL, },
+ { 0xffff01cc7fff0006ULL, 0x001400000036000fULL, },
+ { 0xffff01cd7fff0003ULL, 0x00160000003e0018ULL, },
+ { 0xffff00a839ce0000ULL, 0x001c00000014001eULL, },
+ { 0xfffe00c564570000ULL, 0x0003000000060017ULL, },
+ { 0xffff009e7fff0000ULL, 0x0004000000050008ULL, }, /* 96 */
+ { 0xffff007e7fff0000ULL, 0x0006000000040003ULL, },
+ { 0xffff00657fff0000ULL, 0x0009000000030001ULL, },
+ { 0xffff00517fff0000ULL, 0x000e000000020000ULL, },
+ { 0xffff00517fff0000ULL, 0x0010000000020000ULL, },
+ { 0xffff00517fff0000ULL, 0x0012000000020000ULL, },
+ { 0xffff00517fff0000ULL, 0x0014000000020000ULL, },
+ { 0xffff00517fff0000ULL, 0x0016000000020000ULL, },
+ { 0xffff001d39ce0000ULL, 0x001c000000000000ULL, }, /* 104 */
+ { 0xffff000a1a1b0000ULL, 0x0024000000000000ULL, },
+ { 0xffff00030bca0000ULL, 0x002f000000000000ULL, },
+ { 0xffff000105530000ULL, 0x003d000000000000ULL, },
+ { 0xfffe0001093d0000ULL, 0x0006000000000000ULL, },
+ { 0xfffc000110090000ULL, 0x0000000000000000ULL, },
+ { 0xfff800011bd50000ULL, 0x0000000000000000ULL, },
+ { 0xfff0000130500000ULL, 0x0000000000000000ULL, },
+};
+
+ 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_MADD_Q_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_MADD_Q_H(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADD_Q_H__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADD_Q_H__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/fixed-multiply/test_msa_madd_q_w.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_madd_q_w.c
new file mode 100644
index 0000000000..529d60d1e9
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_madd_q_w.c
@@ -0,0 +1,216 @@
+/*
+ * Test program for MSA instruction MADD_Q.W
+ *
+ * Copyright (C) 2019 Wave Computing, Inc.
+ * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com>
+ * Copyright (C) 2019 RT-RK Computer Based Systems LLC
+ * Copyright (C) 2019 Mateja Marjanovic <mateja.marjanovic@rt-rk.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Fixed Multiply";
+ char *instruction_name = "MADD_Q.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 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0xfffffffefffffffeULL, 0xfffffffefffffffeULL, },
+ { 0xfffffffefffffffeULL, 0xfffffffdfffffffeULL, },
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, },
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, }, /* 8 */
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, },
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, },
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, },
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, },
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, },
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, },
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, },
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, }, /* 16 */
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, },
+ { 0x38e38e3638e38e36ULL, 0x38e38e3638e38e36ULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0x2222221e2222221eULL, 0x2222221e2222221eULL, },
+ { 0xfffffffbfffffffbULL, 0xfffffffbfffffffbULL, },
+ { 0x12f684b94bda12f2ULL, 0xda12f68012f684b9ULL, },
+ { 0xfffffffbfffffffbULL, 0xfffffffbfffffffbULL, },
+ { 0xfffffffafffffffaULL, 0xfffffffafffffffaULL, }, /* 24 */
+ { 0xfffffffafffffffaULL, 0xfffffffafffffffaULL, },
+ { 0xc71c71c0c71c71c0ULL, 0xc71c71c0c71c71c0ULL, },
+ { 0xfffffff8fffffff8ULL, 0xfffffff8fffffff8ULL, },
+ { 0xddddddd5ddddddd5ULL, 0xddddddd5ddddddd5ULL, },
+ { 0xfffffff6fffffff6ULL, 0xfffffff6fffffff6ULL, },
+ { 0xed097b38b425ecffULL, 0x25ed0970ed097b38ULL, },
+ { 0xfffffff5fffffff4ULL, 0xfffffff4fffffff5ULL, },
+ { 0xfffffff5fffffff4ULL, 0xfffffff4fffffff5ULL, }, /* 32 */
+ { 0xfffffff5fffffff4ULL, 0xfffffff4fffffff5ULL, },
+ { 0x2222221722222216ULL, 0x2222221622222217ULL, },
+ { 0xfffffff4fffffff3ULL, 0xfffffff3fffffff4ULL, },
+ { 0x147ae13c147ae13bULL, 0x147ae13b147ae13cULL, },
+ { 0xfffffff4fffffff3ULL, 0xfffffff3fffffff4ULL, },
+ { 0x0b60b5ff2d82d821ULL, 0xe93e93dc0b60b5ffULL, },
+ { 0xfffffff3fffffff3ULL, 0xfffffff3fffffff3ULL, },
+ { 0xfffffff2fffffff2ULL, 0xfffffff2fffffff2ULL, }, /* 40 */
+ { 0xfffffff2fffffff2ULL, 0xfffffff2fffffff2ULL, },
+ { 0xddddddcfddddddcfULL, 0xddddddcfddddddcfULL, },
+ { 0xfffffff0fffffff0ULL, 0xfffffff0fffffff0ULL, },
+ { 0xeb851ea8eb851ea8ULL, 0xeb851ea8eb851ea8ULL, },
+ { 0xffffffefffffffefULL, 0xffffffefffffffefULL, },
+ { 0xf49f49e3d27d27c1ULL, 0x16c16c05f49f49e3ULL, },
+ { 0xffffffeeffffffeeULL, 0xffffffeeffffffeeULL, },
+ { 0xffffffeeffffffeeULL, 0xffffffedffffffeeULL, }, /* 48 */
+ { 0xffffffeeffffffeeULL, 0xffffffedffffffeeULL, },
+ { 0x12f684ac4bda12e5ULL, 0xda12f67212f684acULL, },
+ { 0xffffffeeffffffeeULL, 0xffffffecffffffeeULL, },
+ { 0x0b60b5f92d82d81cULL, 0xe93e93d50b60b5f9ULL, },
+ { 0xffffffedffffffeeULL, 0xffffffebffffffedULL, },
+ { 0x06522c2c6522c3e1ULL, 0x1948b0e706522c2cULL, },
+ { 0xffffffecffffffeeULL, 0xffffffeaffffffecULL, },
+ { 0xffffffebffffffedULL, 0xffffffeaffffffebULL, }, /* 56 */
+ { 0xffffffebffffffedULL, 0xffffffeaffffffebULL, },
+ { 0xed097b2db425ecf6ULL, 0x25ed0965ed097b2dULL, },
+ { 0xffffffeaffffffebULL, 0xffffffe9ffffffeaULL, },
+ { 0xf49f49ded27d27bdULL, 0x16c16c00f49f49deULL, },
+ { 0xffffffe9ffffffeaULL, 0xffffffe9ffffffe9ULL, },
+ { 0xf9add3a99add3bf7ULL, 0xe6b74eecf9add3a9ULL, },
+ { 0xffffffe8ffffffe8ULL, 0xffffffe8ffffffe8ULL, },
+ { 0x6fb7e8710cbdc0baULL, 0x2c6b142e000499ecULL, }, /* 64 */
+ { 0x73b239bf253787bbULL, 0x379780d7ffc424b2ULL, },
+ { 0x7fffffff0f12777aULL, 0x4f10996a00c57ee6ULL, },
+ { 0x1713a7162cca6b1fULL, 0x0be04dd301cca255ULL, },
+ { 0x1b0df86445443220ULL, 0x170cba7c018c2d1bULL, },
+ { 0x1b323a657448a831ULL, 0x19dc4690051313a9ULL, },
+ { 0x1dfa85ec49be7952ULL, 0x1fc3e11af6fe2ffbULL, },
+ { 0x1a3e24c87fffffffULL, 0x0edd19b6e8983fd8ULL, },
+ { 0x6863454e69daefbeULL, 0x26563249e9999a0cULL, }, /* 72 */
+ { 0x6b2b90d53f50c0dfULL, 0x2c3dccd3db84b65eULL, },
+ { 0x7fffffff65cdd2a2ULL, 0x38a5553713bd77aaULL, },
+ { 0x369baa383226e26fULL, 0x1523c32e4d39d083ULL, },
+ { 0xcdaf514f4fded614ULL, 0xd1f377974e40f3f2ULL, },
+ { 0xc9f2f02b7fffffffULL, 0xc10cb0333fdb03cfULL, },
+ { 0x808e9a644c590fccULL, 0x9d8b1e2a79575ca8ULL, },
+ { 0xe31932487fffffffULL, 0x032ce40b7fffffffULL, },
+ { 0xfe196fe57fffffffULL, 0x050bc0117e7bb00bULL, }, /* 80 */
+ { 0xfe299f467fffffffULL, 0x05cb2b207fffffffULL, },
+ { 0xff5d018239cf8b7fULL, 0x0798e21e2b2b2513ULL, },
+ { 0xfecdfe1e645a7d99ULL, 0x00d3dcf00dea608dULL, },
+ { 0xffebe0507fffffffULL, 0x0150aaf30dc02967ULL, },
+ { 0xffec8bad7fffffffULL, 0x01828e9310087db0ULL, },
+ { 0xfff9423b39cf8b7fULL, 0x01fae4ad056841b8ULL, },
+ { 0xfff35804645a7d99ULL, 0x003737ba01be3861ULL, },
+ { 0xffff2aee7fffffffULL, 0x0057bed401b8eeafULL, }, /* 88 */
+ { 0xffff32047fffffffULL, 0x0064bf7c02021ffbULL, },
+ { 0xffffb89f39cf8b7fULL, 0x00841c7300ad6409ULL, },
+ { 0xffff79fe645a7d99ULL, 0x000e642e0037e4a5ULL, },
+ { 0xfffff72f7fffffffULL, 0x0016de7600373b15ULL, },
+ { 0xfffff77a7fffffffULL, 0x001a420100406619ULL, },
+ { 0xfffffd0b39cf8b7fULL, 0x00226e950015b801ULL, },
+ { 0xfffffa72645a7d99ULL, 0x0003c03400070049ULL, },
+ { 0xffffffa27fffffffULL, 0x0005f5d70006eb0bULL, }, /* 96 */
+ { 0xfffffff97fffffffULL, 0x000978af0006d60eULL, },
+ { 0xffffffff7fffffffULL, 0x000f0d050006c150ULL, },
+ { 0xffffffff7fffffffULL, 0x0017eac30006acd1ULL, },
+ { 0xffffffff7fffffffULL, 0x001b76100007c878ULL, },
+ { 0xffffffff7fffffffULL, 0x001f87d000091335ULL, },
+ { 0xffffffff7fffffffULL, 0x002433ef000a94d9ULL, },
+ { 0xffffffff7fffffffULL, 0x0029914d000c5680ULL, },
+ { 0xffffffff39cf8b7fULL, 0x003681f800042937ULL, }, /* 104 */
+ { 0xffffffff1a1c28c3ULL, 0x004779e10001673fULL, },
+ { 0xffffffff0bcae025ULL, 0x005dba1000007928ULL, },
+ { 0xffffffff055376c1ULL, 0x007ae77c000028dcULL, },
+ { 0xfffffffe093ed554ULL, 0x000d636d00000d2bULL, },
+ { 0xfffffffc100c9463ULL, 0x0001755c0000043eULL, },
+ { 0xfffffff81bdc128cULL, 0x000028ab0000015eULL, },
+ { 0xfffffff0305c8babULL, 0x0000046e00000070ULL, },
+};
+
+ 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_MADD_Q_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_MADD_Q_W(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADD_Q_W__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADD_Q_W__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/fixed-multiply/test_msa_maddr_q_h.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_maddr_q_h.c
new file mode 100644
index 0000000000..a4713f2321
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_maddr_q_h.c
@@ -0,0 +1,216 @@
+/*
+ * Test program for MSA instruction MADDR_Q.H
+ *
+ * Copyright (C) 2019 Wave Computing, Inc.
+ * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com>
+ * Copyright (C) 2019 RT-RK Computer Based Systems LLC
+ * Copyright (C) 2019 Mateja Marjanovic <mateja.marjanovic@rt-rk.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Fixed Multiply";
+ char *instruction_name = "MADDR_Q.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 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0001000100010001ULL, 0x0001000100010001ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000010000ULL, 0x0000000100000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0001000100010001ULL, 0x0001000100010001ULL, }, /* 16 */
+ { 0x0001000100010001ULL, 0x0001000100010001ULL, },
+ { 0x38e538e538e538e5ULL, 0x38e538e538e538e5ULL, },
+ { 0x0001000100010001ULL, 0x0001000100010001ULL, },
+ { 0x2224222422242224ULL, 0x2224222422242224ULL, },
+ { 0x0002000200020002ULL, 0x0002000200020002ULL, },
+ { 0x12f9da154bdd12f9ULL, 0xda154bdd12f9da15ULL, },
+ { 0x0003000300020003ULL, 0x0003000200030003ULL, },
+ { 0x0002000200010002ULL, 0x0002000100020002ULL, }, /* 24 */
+ { 0x0002000200010002ULL, 0x0002000100020002ULL, },
+ { 0xc71ec71ec71dc71eULL, 0xc71ec71dc71ec71eULL, },
+ { 0x0001000100000001ULL, 0x0001000000010001ULL, },
+ { 0xdddedddedddddddeULL, 0xdddedddddddedddeULL, },
+ { 0x00000000ffff0000ULL, 0x0000ffff00000000ULL, },
+ { 0xed0925edb425ed09ULL, 0x25edb425ed0925edULL, },
+ { 0xffff0000ffffffffULL, 0x0000ffffffff0000ULL, },
+ { 0xffff0000ffffffffULL, 0x0000ffffffff0000ULL, }, /* 32 */
+ { 0xffff0000ffffffffULL, 0x0000ffffffff0000ULL, },
+ { 0x2222222322222222ULL, 0x2223222222222223ULL, },
+ { 0xffff0000ffffffffULL, 0x0000ffffffff0000ULL, },
+ { 0x147b147c147b147bULL, 0x147c147b147b147cULL, },
+ { 0x0000000100000000ULL, 0x0001000000000001ULL, },
+ { 0x0b61e93f2d840b61ULL, 0xe93f2d840b61e93fULL, },
+ { 0x0000000100000000ULL, 0x0001000000000001ULL, },
+ { 0x0000000100000000ULL, 0x0001000000000001ULL, }, /* 40 */
+ { 0x0000000100000000ULL, 0x0001000000000001ULL, },
+ { 0xdddedddfdddedddeULL, 0xdddfdddedddedddfULL, },
+ { 0x0000000100000000ULL, 0x0001000000000001ULL, },
+ { 0xeb85eb86eb85eb85ULL, 0xeb86eb85eb85eb86ULL, },
+ { 0x0000000100000000ULL, 0x0001000000000001ULL, },
+ { 0xf49f16c2d27df49fULL, 0x16c2d27df49f16c2ULL, },
+ { 0xffff00000000ffffULL, 0x00000000ffff0000ULL, },
+ { 0xffff00000001ffffULL, 0x00000001ffff0000ULL, }, /* 48 */
+ { 0xffff00000001ffffULL, 0x00000001ffff0000ULL, },
+ { 0x12f6da134bdc12f6ULL, 0xda134bdc12f6da13ULL, },
+ { 0xffff00000002ffffULL, 0x00000002ffff0000ULL, },
+ { 0x0b60e93e2d860b60ULL, 0xe93e2d860b60e93eULL, },
+ { 0xffffffff0003ffffULL, 0xffff0003ffffffffULL, },
+ { 0x0651194765270651ULL, 0x1947652706511947ULL, },
+ { 0xfffffffe0004ffffULL, 0xfffe0004fffffffeULL, },
+ { 0xfffffffe0003ffffULL, 0xfffe0003fffffffeULL, }, /* 56 */
+ { 0xfffffffe0003ffffULL, 0xfffe0003fffffffeULL, },
+ { 0xed0925ecb428ed09ULL, 0x25ecb428ed0925ecULL, },
+ { 0xffffffff0002ffffULL, 0xffff0002ffffffffULL, },
+ { 0xf49e16c1d27ef49eULL, 0x16c1d27ef49e16c1ULL, },
+ { 0xfffeffff0001fffeULL, 0xffff0001fffeffffULL, },
+ { 0xf9ace6b69adef9acULL, 0xe6b69adef9ace6b6ULL, },
+ { 0xfffeffff0001fffeULL, 0xffff0001fffeffffULL, },
+ { 0x6fb804f50cbf38c5ULL, 0x2c6a0103000331f0ULL, }, /* 64 */
+ { 0x73b204e2253812d4ULL, 0x3796fae5ffc2fe1aULL, },
+ { 0x7fff14e60f13c53dULL, 0x4f0ff5d500c4e6f1ULL, },
+ { 0x171210822ccab176ULL, 0x0bdeeb4001ccf94aULL, },
+ { 0x1b0c106f45438b85ULL, 0x170ae522018bc574ULL, },
+ { 0x1b30106f7447a4e0ULL, 0x19d90a380512fb41ULL, },
+ { 0x1df8103049bdd8baULL, 0x1fc028e7f6fd134bULL, },
+ { 0x1a3c10417fffe5f1ULL, 0x0eda690ae8970040ULL, },
+ { 0x6862204569da985aULL, 0x265363fae999e917ULL, }, /* 72 */
+ { 0x6b2a20063f50cc34ULL, 0x2c3a7fffdb840121ULL, },
+ { 0x7fff53b565ce363dULL, 0x38a17fff13bd0bdfULL, },
+ { 0x369a458932275144ULL, 0x15207fff4d3a035dULL, },
+ { 0xcdad41254fde3d7dULL, 0xd1ef756a4e4215b6ULL, },
+ { 0xc9f141367fff4ab4ULL, 0xc1097fff3fdc02abULL, },
+ { 0x808c330a4c5865bbULL, 0x9d887fff7959fa29ULL, },
+ { 0xe31636ed7fff6c9fULL, 0x032b7fff7fff00e7ULL, },
+ { 0xfe192c1c7fff7fffULL, 0x05097fff7e7a0057ULL, }, /* 80 */
+ { 0xfe292c3e7fff4707ULL, 0x05c83b1a7fff008fULL, },
+ { 0xff5d102139cf0662ULL, 0x079520c82b2b00b8ULL, },
+ { 0xfece12f0645904e7ULL, 0x00d302440dea008eULL, },
+ { 0xffec0f357fff082bULL, 0x014f02780dc00035ULL, },
+ { 0xffed0f417fff0488ULL, 0x0181012410080057ULL, },
+ { 0xfff9059039cf0068ULL, 0x01f900a205680070ULL, },
+ { 0xfff3068864590050ULL, 0x0037000b01be0056ULL, },
+ { 0xffff053f7fff0085ULL, 0x0057000c01b90020ULL, }, /* 88 */
+ { 0xffff05437fff004aULL, 0x0064000602020035ULL, },
+ { 0x000001eb39cf0007ULL, 0x0083000300ad0044ULL, },
+ { 0x0000024164590005ULL, 0x000e000000380034ULL, },
+ { 0x000001cf7fff0008ULL, 0x0016000000370014ULL, },
+ { 0x000001d07fff0004ULL, 0x0019000000400021ULL, },
+ { 0x000000a939cf0000ULL, 0x002100000016002bULL, },
+ { 0x000000c664590000ULL, 0x0004000000070021ULL, },
+ { 0x0000009f7fff0000ULL, 0x000600000007000cULL, }, /* 96 */
+ { 0x000000807fff0000ULL, 0x000a000000070005ULL, },
+ { 0x000000677fff0000ULL, 0x0010000000070002ULL, },
+ { 0x000000537fff0000ULL, 0x0019000000070001ULL, },
+ { 0x000000537fff0000ULL, 0x001d000000080002ULL, },
+ { 0x000000537fff0000ULL, 0x0021000000090003ULL, },
+ { 0x000000537fff0000ULL, 0x00260000000a0005ULL, },
+ { 0x000000537fff0000ULL, 0x002c0000000c0008ULL, },
+ { 0x0000001e39cf0000ULL, 0x003a00000004000aULL, }, /* 104 */
+ { 0x0000000b1a1c0000ULL, 0x004c00000001000dULL, },
+ { 0x000000040bcb0000ULL, 0x0064000000000011ULL, },
+ { 0x0000000105530000ULL, 0x0083000000000016ULL, },
+ { 0x00000001093e0000ULL, 0x000e000000000011ULL, },
+ { 0x00000001100b0000ULL, 0x000200000000000dULL, },
+ { 0x000000011bd90000ULL, 0x000000000000000aULL, },
+ { 0x0000000130570000ULL, 0x0000000000000008ULL, },
+};
+
+ 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_MADDR_Q_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_MADDR_Q_H(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDR_Q_H__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDR_Q_H__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/fixed-multiply/test_msa_maddr_q_w.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_maddr_q_w.c
new file mode 100644
index 0000000000..19eccbf5ba
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_maddr_q_w.c
@@ -0,0 +1,216 @@
+/*
+ * Test program for MSA instruction MADDR_Q.W
+ *
+ * Copyright (C) 2019 Wave Computing, Inc.
+ * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com>
+ * Copyright (C) 2019 RT-RK Computer Based Systems LLC
+ * Copyright (C) 2019 Mateja Marjanovic <mateja.marjanovic@rt-rk.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Fixed Multiply";
+ char *instruction_name = "MADDR_Q.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 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000100000001ULL, 0x0000000100000001ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000001ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000100000001ULL, 0x0000000100000001ULL, }, /* 16 */
+ { 0x0000000100000001ULL, 0x0000000100000001ULL, },
+ { 0x38e38e3b38e38e3bULL, 0x38e38e3b38e38e3bULL, },
+ { 0x0000000200000002ULL, 0x0000000200000002ULL, },
+ { 0x2222222522222225ULL, 0x2222222522222225ULL, },
+ { 0x0000000300000003ULL, 0x0000000300000003ULL, },
+ { 0x12f684c14bda12faULL, 0xda12f68812f684c1ULL, },
+ { 0x0000000400000003ULL, 0x0000000400000004ULL, },
+ { 0x0000000300000002ULL, 0x0000000300000003ULL, }, /* 24 */
+ { 0x0000000300000002ULL, 0x0000000300000003ULL, },
+ { 0xc71c71cac71c71c9ULL, 0xc71c71cac71c71caULL, },
+ { 0x0000000200000001ULL, 0x0000000200000002ULL, },
+ { 0xdddddddfdddddddeULL, 0xdddddddfdddddddfULL, },
+ { 0x0000000100000000ULL, 0x0000000100000001ULL, },
+ { 0xed097b43b425ed0aULL, 0x25ed097ced097b43ULL, },
+ { 0x0000000000000000ULL, 0x0000000100000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000100000000ULL, }, /* 32 */
+ { 0x0000000000000000ULL, 0x0000000100000000ULL, },
+ { 0x2222222322222223ULL, 0x2222222422222223ULL, },
+ { 0x0000000000000000ULL, 0x0000000100000000ULL, },
+ { 0x147ae148147ae148ULL, 0x147ae149147ae148ULL, },
+ { 0x0000000000000000ULL, 0x0000000100000000ULL, },
+ { 0x0b60b60c2d82d82eULL, 0xe93e93ea0b60b60cULL, },
+ { 0x0000000100000000ULL, 0x0000000100000001ULL, },
+ { 0x0000000100000000ULL, 0x0000000100000001ULL, }, /* 40 */
+ { 0x0000000100000000ULL, 0x0000000100000001ULL, },
+ { 0xdddddddfdddddddeULL, 0xdddddddfdddddddfULL, },
+ { 0x0000000100000000ULL, 0x0000000100000001ULL, },
+ { 0xeb851eb9eb851eb8ULL, 0xeb851eb9eb851eb9ULL, },
+ { 0x0000000100000000ULL, 0x0000000100000001ULL, },
+ { 0xf49f49f5d27d27d3ULL, 0x16c16c17f49f49f5ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000001ULL, 0x0000000000000000ULL, }, /* 48 */
+ { 0x0000000000000001ULL, 0x0000000000000000ULL, },
+ { 0x12f684be4bda12f8ULL, 0xda12f68512f684beULL, },
+ { 0x0000000000000002ULL, 0x0000000000000000ULL, },
+ { 0x0b60b60c2d82d830ULL, 0xe93e93e90b60b60cULL, },
+ { 0x0000000000000003ULL, 0xffffffff00000000ULL, },
+ { 0x06522c3f6522c3f7ULL, 0x1948b0fb06522c3fULL, },
+ { 0x0000000000000004ULL, 0xffffffff00000000ULL, },
+ { 0x0000000000000003ULL, 0xffffffff00000000ULL, }, /* 56 */
+ { 0x0000000000000003ULL, 0xffffffff00000000ULL, },
+ { 0xed097b43b425ed0cULL, 0x25ed097bed097b43ULL, },
+ { 0x0000000000000002ULL, 0x0000000000000000ULL, },
+ { 0xf49f49f5d27d27d4ULL, 0x16c16c17f49f49f5ULL, },
+ { 0x0000000000000001ULL, 0x0000000000000000ULL, },
+ { 0xf9add3c19add3c0eULL, 0xe6b74f04f9add3c1ULL, },
+ { 0x0000000000000000ULL, 0x0000000100000000ULL, },
+ { 0x6fb7e8890cbdc0d3ULL, 0x2c6b144700049a05ULL, }, /* 64 */
+ { 0x73b239d7253787d5ULL, 0x379780f0ffc424ccULL, },
+ { 0x7fffffff0f127795ULL, 0x4f10998300c57f01ULL, },
+ { 0x1713a7162cca6b3bULL, 0x0be04ded01cca270ULL, },
+ { 0x1b0df8644544323dULL, 0x170cba96018c2d37ULL, },
+ { 0x1b323a657448a84fULL, 0x19dc46aa051313c6ULL, },
+ { 0x1dfa85ed49be7970ULL, 0x1fc3e135f6fe3018ULL, },
+ { 0x1a3e24ca7fffffffULL, 0x0edd19d1e8983ff6ULL, },
+ { 0x6863455169daefbfULL, 0x26563264e9999a2bULL, }, /* 72 */
+ { 0x6b2b90d93f50c0e0ULL, 0x2c3dccefdb84b67dULL, },
+ { 0x7fffffff65cdd2a4ULL, 0x38a5555313bd77c9ULL, },
+ { 0x369baa393226e271ULL, 0x1523c34a4d39d0a3ULL, },
+ { 0xcdaf51504fded617ULL, 0xd1f377b44e40f412ULL, },
+ { 0xc9f2f02d7fffffffULL, 0xc10cb0503fdb03f0ULL, },
+ { 0x808e9a674c590fccULL, 0x9d8b1e4779575ccaULL, },
+ { 0xe319324b7fffffffULL, 0x032ce4297fffffffULL, },
+ { 0xfe196fe67fffffffULL, 0x050bc0417e7bb00bULL, }, /* 80 */
+ { 0xfe299f487fffffffULL, 0x05cb2b577fffffffULL, },
+ { 0xff5d018339cf8b80ULL, 0x0798e2662b2b2514ULL, },
+ { 0xfecdfe20645a7d9bULL, 0x00d3dcf80dea608eULL, },
+ { 0xffebe0517fffffffULL, 0x0150ab000dc02968ULL, },
+ { 0xffec8baf7fffffffULL, 0x01828ea210087db2ULL, },
+ { 0xfff9423c39cf8b80ULL, 0x01fae4c1056841b9ULL, },
+ { 0xfff35806645a7d9bULL, 0x003737bc01be3862ULL, },
+ { 0xffff2aee7fffffffULL, 0x0057bed801b8eeb0ULL, }, /* 88 */
+ { 0xffff32047fffffffULL, 0x0064bf8102021ffcULL, },
+ { 0xffffb89f39cf8b80ULL, 0x00841c7a00ad640aULL, },
+ { 0xffff79fe645a7d9bULL, 0x000e642f0037e4a6ULL, },
+ { 0xfffff7307fffffffULL, 0x0016de7800373b16ULL, },
+ { 0xfffff77b7fffffffULL, 0x001a42040040661aULL, },
+ { 0xfffffd0c39cf8b80ULL, 0x00226e990015b802ULL, },
+ { 0xfffffa75645a7d9bULL, 0x0003c0350007004aULL, },
+ { 0xffffffa37fffffffULL, 0x0005f5d90006eb0dULL, }, /* 96 */
+ { 0xfffffffa7fffffffULL, 0x000978b30006d610ULL, },
+ { 0x000000007fffffffULL, 0x000f0d0c0006c153ULL, },
+ { 0x000000007fffffffULL, 0x0017eacf0006acd5ULL, },
+ { 0x000000007fffffffULL, 0x001b761e0007c87dULL, },
+ { 0x000000007fffffffULL, 0x001f87e00009133bULL, },
+ { 0x000000007fffffffULL, 0x00243402000a94e0ULL, },
+ { 0x000000007fffffffULL, 0x00299164000c5689ULL, },
+ { 0x0000000039cf8b80ULL, 0x003682160004293bULL, }, /* 104 */
+ { 0x000000001a1c28c4ULL, 0x00477a0900016741ULL, },
+ { 0x000000000bcae026ULL, 0x005dba4500007929ULL, },
+ { 0x00000000055376c2ULL, 0x007ae7c2000028ddULL, },
+ { 0x00000000093ed557ULL, 0x000d637500000d2cULL, },
+ { 0x00000000100c9469ULL, 0x0001755d0000043fULL, },
+ { 0x000000001bdc1297ULL, 0x000028ac0000015eULL, },
+ { 0x00000000305c8bbfULL, 0x0000046e00000071ULL, },
+};
+
+ 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_MADDR_Q_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_MADDR_Q_W(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDR_Q_W__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDR_Q_W__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/fixed-multiply/test_msa_msub_q_h.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_msub_q_h.c
new file mode 100644
index 0000000000..b584736ed1
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_msub_q_h.c
@@ -0,0 +1,216 @@
+/*
+ * Test program for MSA instruction MSUB_Q.H
+ *
+ * Copyright (C) 2019 Wave Computing, Inc.
+ * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com>
+ * Copyright (C) 2019 RT-RK Computer Based Systems LLC
+ * Copyright (C) 2019 Mateja Marjanovic <mateja.marjanovic@rt-rk.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Fixed Multiply";
+ char *instruction_name = "MSUB_Q.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, },
+ { 0xfffefffefffefffeULL, 0xfffefffefffefffeULL, },
+ { 0xfffefffefffefffeULL, 0xfffefffefffefffeULL, },
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, },
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, },
+ { 0xfffcfffdfffcfffcULL, 0xfffdfffcfffcfffdULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, }, /* 8 */
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffbfffbfffbfffbULL, 0xfffbfffbfffbfffbULL, }, /* 16 */
+ { 0xfffbfffbfffbfffbULL, 0xfffbfffbfffbfffbULL, },
+ { 0xc716c716c716c716ULL, 0xc716c716c716c716ULL, },
+ { 0xfff9fff9fff9fff9ULL, 0xfff9fff9fff9fff9ULL, },
+ { 0xddd6ddd6ddd6ddd6ULL, 0xddd6ddd6ddd6ddd6ULL, },
+ { 0xfff8fff8fff8fff8ULL, 0xfff8fff8fff8fff8ULL, },
+ { 0xed0125e4b41ced01ULL, 0x25e4b41ced0125e4ULL, },
+ { 0xfff7fff6fff6fff7ULL, 0xfff6fff6fff7fff6ULL, },
+ { 0xfff7fff6fff6fff7ULL, 0xfff6fff6fff7fff6ULL, }, /* 24 */
+ { 0xfff7fff6fff6fff7ULL, 0xfff6fff6fff7fff6ULL, },
+ { 0x38da38d938d938daULL, 0x38d938d938da38d9ULL, },
+ { 0xfff6fff5fff5fff6ULL, 0xfff5fff5fff6fff5ULL, },
+ { 0x2218221722172218ULL, 0x2217221722182217ULL, },
+ { 0xfff6fff5fff5fff6ULL, 0xfff5fff5fff6fff5ULL, },
+ { 0x12ecda084bcf12ecULL, 0xda084bcf12ecda08ULL, },
+ { 0xfff6fff5fff5fff6ULL, 0xfff5fff5fff6fff5ULL, },
+ { 0xfff5fff4fff4fff5ULL, 0xfff4fff4fff5fff4ULL, }, /* 32 */
+ { 0xfff5fff4fff4fff5ULL, 0xfff4fff4fff5fff4ULL, },
+ { 0xddd2ddd1ddd1ddd2ULL, 0xddd1ddd1ddd2ddd1ULL, },
+ { 0xfff4fff3fff3fff4ULL, 0xfff3fff3fff4fff3ULL, },
+ { 0xeb78eb77eb77eb78ULL, 0xeb77eb77eb78eb77ULL, },
+ { 0xfff3fff2fff2fff3ULL, 0xfff2fff2fff3fff2ULL, },
+ { 0xf49216b3d26ef492ULL, 0x16b3d26ef49216b3ULL, },
+ { 0xfff2fff1fff1fff2ULL, 0xfff1fff1fff2fff1ULL, },
+ { 0xfff2fff1fff1fff2ULL, 0xfff1fff1fff2fff1ULL, }, /* 40 */
+ { 0xfff2fff1fff1fff2ULL, 0xfff1fff1fff2fff1ULL, },
+ { 0x2214221322132214ULL, 0x2213221322142213ULL, },
+ { 0xfff2fff1fff1fff2ULL, 0xfff1fff1fff2fff1ULL, },
+ { 0x146d146c146c146dULL, 0x146c146c146d146cULL, },
+ { 0xfff2fff1fff1fff2ULL, 0xfff1fff1fff2fff1ULL, },
+ { 0x0b52e92f2d740b52ULL, 0xe92f2d740b52e92fULL, },
+ { 0xfff1fff0fff1fff1ULL, 0xfff0fff1fff1fff0ULL, },
+ { 0xfff0fff0fff0fff0ULL, 0xfff0fff0fff0fff0ULL, }, /* 48 */
+ { 0xfff0fff0fff0fff0ULL, 0xfff0fff0fff0fff0ULL, },
+ { 0xecf925dcb414ecf9ULL, 0x25dcb414ecf925dcULL, },
+ { 0xffefffefffeeffefULL, 0xffefffeeffefffefULL, },
+ { 0xf48e16b0d26af48eULL, 0x16b0d26af48e16b0ULL, },
+ { 0xffeeffeeffedffeeULL, 0xffeeffedffeeffeeULL, },
+ { 0xf99be6a59ac8f99bULL, 0xe6a59ac8f99be6a5ULL, },
+ { 0xffedffedffebffedULL, 0xffedffebffedffedULL, },
+ { 0xffedffecffebffedULL, 0xffecffebffedffecULL, }, /* 56 */
+ { 0xffedffecffebffedULL, 0xffecffebffedffecULL, },
+ { 0x12e3d9fe4bc512e3ULL, 0xd9fe4bc512e3d9feULL, },
+ { 0xffedffebffebffedULL, 0xffebffebffedffebULL, },
+ { 0x0b4de9292d6e0b4dULL, 0xe9292d6e0b4de929ULL, },
+ { 0xffecffeaffebffecULL, 0xffeaffebffecffeaULL, },
+ { 0x063e1932650e063eULL, 0x1932650e063e1932ULL, },
+ { 0xffecffe8ffebffecULL, 0xffe8ffebffecffe8ULL, },
+ { 0x9032faf1f32dc724ULL, 0xd37cfee8ffe7cdf6ULL, }, /* 64 */
+ { 0x8c37fb04dab3ed15ULL, 0xc8500506002701cbULL, },
+ { 0x8000eb00f0d83aacULL, 0xb0d70a15ff2518f4ULL, },
+ { 0xe8edef64d3204e73ULL, 0xf40714a9fe1d069aULL, },
+ { 0xe4f2ef77baa67464ULL, 0xe8db1ac7fe5d3a6fULL, },
+ { 0xe4cdef768ba25b09ULL, 0xe60bf5b1fad604a2ULL, },
+ { 0xe204efb4b62c272fULL, 0xe023d70208eaec98ULL, },
+ { 0xe5c0efa2800019f7ULL, 0xf10996de174fffa3ULL, },
+ { 0x9799df9e9625678eULL, 0xd9909bed164d16ccULL, }, /* 72 */
+ { 0x94d0dfdcc0af33b4ULL, 0xd3a880002461fec2ULL, },
+ { 0x8000ac2c9a31c9abULL, 0xc7408000ec28f404ULL, },
+ { 0xc964ba57cdd7aea3ULL, 0xeac18000b2aafc86ULL, },
+ { 0x3251bebbb01fc26aULL, 0x2df18a94b1a2ea2cULL, },
+ { 0x360dbea98000b532ULL, 0x3ed78000c007fd37ULL, },
+ { 0x7f71ccd4b3a69a2aULL, 0x62588000868905b9ULL, },
+ { 0x1ce6c8f180009346ULL, 0xfcb580008000fefbULL, },
+ { 0x37e5be19a862dbafULL, 0xfea58b5e8000fe57ULL, }, /* 80 */
+ { 0x39c0be4bdd7bcb85ULL, 0xfed88000953fff6aULL, },
+ { 0x5f7d948aca8d9bc1ULL, 0xff3480008000ff95ULL, },
+ { 0x0bb4a742f1e1847fULL, 0xfe7e80008000ff7cULL, },
+ { 0x16a395c8f655d6c0ULL, 0xff618b5e8000ff29ULL, },
+ { 0x1763961afc30c464ULL, 0xff788000953fffb4ULL, },
+ { 0x26ab8000fa188e23ULL, 0xffa280008000ffcaULL, },
+ { 0x04bd964dfe708000ULL, 0xff4e80008000ffbdULL, },
+ { 0x092a817dfeeed540ULL, 0xffb68b5e8000ff93ULL, }, /* 88 */
+ { 0x097881deff94c239ULL, 0xffc08000953fffd9ULL, },
+ { 0x0fa88000ff5889feULL, 0xffd380008000ffe4ULL, },
+ { 0x01eb964dffd38000ULL, 0xffaa80008000ffddULL, },
+ { 0x03b5817dffe1d540ULL, 0xffdc8b5e8000ffc7ULL, },
+ { 0x03d481defff3c239ULL, 0xffe18000953fffebULL, },
+ { 0x06548000ffeb89feULL, 0xffea80008000fff1ULL, },
+ { 0x00c6964dfffa8000ULL, 0xffd680008000ffedULL, },
+ { 0x017e817dfffbd540ULL, 0xffee8b5e8000ffe1ULL, }, /* 96 */
+ { 0x02e28000fffcf1b8ULL, 0xfff895b98000ffcdULL, },
+ { 0x05938000fffdfb3aULL, 0xfffc9f298000ffadULL, },
+ { 0x0ac88000fffdfe67ULL, 0xfffea7c28000ff79ULL, },
+ { 0x0b238063fffefdb0ULL, 0xfffe8000953fffd0ULL, },
+ { 0x0b8180c5fffffca8ULL, 0xfffe8000a6f7ffefULL, },
+ { 0x0be28127fffffb2bULL, 0xfffe8000b5befffaULL, },
+ { 0x0c478189fffff904ULL, 0xfffe8000c211fffdULL, },
+ { 0x144c8000fffef2a8ULL, 0xfffe80009905fffdULL, }, /* 104 */
+ { 0x218f8000fffce682ULL, 0xfffe80008000fffdULL, },
+ { 0x377d8000fff9cf4eULL, 0xfffe80008000fffdULL, },
+ { 0x5bc08000fff5a2fbULL, 0xfffe80008000fffdULL, },
+ { 0x0b3f964dfffd8d66ULL, 0xfffc80008000fffcULL, },
+ { 0x0160a8b7ffff8000ULL, 0xfff880008000fffbULL, },
+ { 0x002bb7ecffff8000ULL, 0xfff080008000fff9ULL, },
+ { 0x0005c47affff8000ULL, 0xffe180008000fff7ULL, },
+};
+
+ 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_MSUB_Q_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_MSUB_Q_H(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUB_Q_H__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUB_Q_H__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/fixed-multiply/test_msa_msub_q_w.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_msub_q_w.c
new file mode 100644
index 0000000000..56191924a1
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_msub_q_w.c
@@ -0,0 +1,216 @@
+/*
+ * Test program for MSA instruction MSUB_Q.W
+ *
+ * Copyright (C) 2019 Wave Computing, Inc.
+ * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com>
+ * Copyright (C) 2019 RT-RK Computer Based Systems LLC
+ * Copyright (C) 2019 Mateja Marjanovic <mateja.marjanovic@rt-rk.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Fixed Multiply";
+ char *instruction_name = "MSUB_Q.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, },
+ { 0xfffffffefffffffeULL, 0xfffffffefffffffeULL, },
+ { 0xfffffffefffffffeULL, 0xfffffffefffffffeULL, },
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, },
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffdfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, }, /* 8 */
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffbfffffffbULL, 0xfffffffbfffffffbULL, }, /* 16 */
+ { 0xfffffffbfffffffbULL, 0xfffffffbfffffffbULL, },
+ { 0xc71c71c1c71c71c1ULL, 0xc71c71c1c71c71c1ULL, },
+ { 0xfffffffafffffffaULL, 0xfffffffafffffffaULL, },
+ { 0xddddddd7ddddddd7ULL, 0xddddddd7ddddddd7ULL, },
+ { 0xfffffff9fffffff9ULL, 0xfffffff9fffffff9ULL, },
+ { 0xed097b3ab425ed01ULL, 0x25ed0973ed097b3aULL, },
+ { 0xfffffff7fffffff7ULL, 0xfffffff7fffffff7ULL, },
+ { 0xfffffff7fffffff7ULL, 0xfffffff7fffffff7ULL, }, /* 24 */
+ { 0xfffffff7fffffff7ULL, 0xfffffff7fffffff7ULL, },
+ { 0x38e38e3038e38e30ULL, 0x38e38e3038e38e30ULL, },
+ { 0xfffffff7fffffff7ULL, 0xfffffff7fffffff7ULL, },
+ { 0x2222221922222219ULL, 0x2222221922222219ULL, },
+ { 0xfffffff7fffffff7ULL, 0xfffffff7fffffff7ULL, },
+ { 0x12f684b44bda12edULL, 0xda12f67c12f684b4ULL, },
+ { 0xfffffff6fffffff7ULL, 0xfffffff7fffffff6ULL, },
+ { 0xfffffff5fffffff6ULL, 0xfffffff6fffffff5ULL, }, /* 32 */
+ { 0xfffffff5fffffff6ULL, 0xfffffff6fffffff5ULL, },
+ { 0xddddddd2ddddddd3ULL, 0xddddddd3ddddddd2ULL, },
+ { 0xfffffff4fffffff5ULL, 0xfffffff5fffffff4ULL, },
+ { 0xeb851eabeb851eacULL, 0xeb851eaceb851eabULL, },
+ { 0xfffffff2fffffff3ULL, 0xfffffff3fffffff2ULL, },
+ { 0xf49f49e6d27d27c4ULL, 0x16c16c09f49f49e6ULL, },
+ { 0xfffffff1fffffff1ULL, 0xfffffff1fffffff1ULL, },
+ { 0xfffffff1fffffff1ULL, 0xfffffff1fffffff1ULL, }, /* 40 */
+ { 0xfffffff1fffffff1ULL, 0xfffffff1fffffff1ULL, },
+ { 0x2222221322222213ULL, 0x2222221322222213ULL, },
+ { 0xfffffff1fffffff1ULL, 0xfffffff1fffffff1ULL, },
+ { 0x147ae138147ae138ULL, 0x147ae138147ae138ULL, },
+ { 0xfffffff0fffffff0ULL, 0xfffffff0fffffff0ULL, },
+ { 0x0b60b5fb2d82d81dULL, 0xe93e93d90b60b5fbULL, },
+ { 0xffffffefffffffefULL, 0xffffffefffffffefULL, },
+ { 0xffffffeeffffffeeULL, 0xffffffefffffffeeULL, }, /* 48 */
+ { 0xffffffeeffffffeeULL, 0xffffffefffffffeeULL, },
+ { 0xed097b2fb425ecf6ULL, 0x25ed0969ed097b2fULL, },
+ { 0xffffffecffffffecULL, 0xffffffeeffffffecULL, },
+ { 0xf49f49e0d27d27bdULL, 0x16c16c04f49f49e0ULL, },
+ { 0xffffffebffffffeaULL, 0xffffffedffffffebULL, },
+ { 0xf9add3ab9add3bf6ULL, 0xe6b74ef0f9add3abULL, },
+ { 0xffffffeaffffffe8ULL, 0xffffffecffffffeaULL, },
+ { 0xffffffeaffffffe8ULL, 0xffffffebffffffeaULL, }, /* 56 */
+ { 0xffffffeaffffffe8ULL, 0xffffffebffffffeaULL, },
+ { 0x12f684a74bda12deULL, 0xda12f66f12f684a7ULL, },
+ { 0xffffffe9ffffffe8ULL, 0xffffffeaffffffe9ULL, },
+ { 0x0b60b5f42d82d815ULL, 0xe93e93d20b60b5f4ULL, },
+ { 0xffffffe8ffffffe7ULL, 0xffffffe8ffffffe8ULL, },
+ { 0x06522c276522c3d9ULL, 0x1948b0e406522c27ULL, },
+ { 0xffffffe7ffffffe7ULL, 0xffffffe7ffffffe7ULL, },
+ { 0x9048175df3423f14ULL, 0xd394eba0fffb65e2ULL, }, /* 64 */
+ { 0x8c4dc60edac87812ULL, 0xc8687ef6003bdb1bULL, },
+ { 0x80000000f0ed8852ULL, 0xb0ef6662ff3a80e6ULL, },
+ { 0xe8ec58e8d33594acULL, 0xf41fb1f8fe335d76ULL, },
+ { 0xe4f20799babbcdaaULL, 0xe8f3454efe73d2afULL, },
+ { 0xe4cdc5978bb75798ULL, 0xe623b939faecec20ULL, },
+ { 0xe2057a0fb6418676ULL, 0xe03c1eae0901cfcdULL, },
+ { 0xe5c1db3280000000ULL, 0xf122e6111767bfefULL, },
+ { 0x979cbaab96251040ULL, 0xd9a9cd7d166665baULL, }, /* 72 */
+ { 0x94d46f23c0af3f1eULL, 0xd3c232f2247b4967ULL, },
+ { 0x800000009a322d5aULL, 0xc75aaa8dec42881aULL, },
+ { 0xc96455c6cdd91d8cULL, 0xeadc3c95b2c62f40ULL, },
+ { 0x3250aeaeb02129e6ULL, 0x2e0c882bb1bf0bd0ULL, },
+ { 0x360d0fd180000000ULL, 0x3ef34f8ec024fbf2ULL, },
+ { 0x7f716597b3a6f032ULL, 0x6274e19686a8a318ULL, },
+ { 0x1ce6cdb280000000ULL, 0xfcd31bb480000000ULL, },
+ { 0x37e70b49a8625540ULL, 0xfeb1f7e080000000ULL, }, /* 80 */
+ { 0x39c31699dd7c5546ULL, 0xfee37780953f52fcULL, },
+ { 0x5f82316fca8f431eULL, 0xff3c0af780000000ULL, },
+ { 0x0bb5432ff1e2e177ULL, 0xfe8d6e9580000000ULL, },
+ { 0x16a56af3f656d2b3ULL, 0xff67ba1b80000000ULL, },
+ { 0x17664384fc31bf42ULL, 0xff7e4aa4953f52fcULL, },
+ { 0x26b0cbfdfa1b830bULL, 0xffa6ab9180000000ULL, },
+ { 0x04be31a4fe719ab1ULL, 0xff57124580000000ULL, },
+ { 0x092c8a1ffeef4c68ULL, 0xffba958e80000000ULL, }, /* 88 */
+ { 0x097aa960ff949347ULL, 0xffc4dede953f52fcULL, },
+ { 0x0fac7158ff59ab27ULL, 0xffd7471a80000000ULL, },
+ { 0x01ebdf01ffd41248ULL, 0xffb2fdd380000000ULL, },
+ { 0x03b76546ffe1ee50ULL, 0xffe05b1780000000ULL, },
+ { 0x03d70afdfff427aaULL, 0xffe50b86953f52fcULL, },
+ { 0x065971c1ffeda8dfULL, 0xffed6fa980000000ULL, },
+ { 0x00c741e8fffb2801ULL, 0xffdce50280000000ULL, },
+ { 0x01816947fffcaf39ULL, 0xfff1931580000000ULL, }, /* 96 */
+ { 0x02e97a17fffdbb03ULL, 0xfffa128380000000ULL, },
+ { 0x05a1edf3fffe7250ULL, 0xfffd906f80000000ULL, },
+ { 0x0ae508c5fffeefc8ULL, 0xfffeffc380000000ULL, },
+ { 0x0b41cf1bffff94c3ULL, 0xffff25bb953f52fcULL, },
+ { 0x0ba1ab79ffffd5c1ULL, 0xffff4613a6f7bf69ULL, },
+ { 0x0c04b828ffffef5bULL, 0xffff61a0b5bf25caULL, },
+ { 0x0c6b104efffff971ULL, 0xffff7918c21285a5ULL, },
+ { 0x148886c7fffff5d8ULL, 0xffffa3179907b21bULL, }, /* 104 */
+ { 0x21f39335fffff046ULL, 0xffffc00380000000ULL, },
+ { 0x38235e38ffffe7a6ULL, 0xffffd3ee80000000ULL, },
+ { 0x5cd2ce93ffffda4bULL, 0xffffe1a680000000ULL, },
+ { 0x0b60ff8afffff60aULL, 0xffffc69a80000000ULL, },
+ { 0x01651818fffffd5eULL, 0xffff937480000000ULL, },
+ { 0x002bc65fffffff4dULL, 0xffff32bb80000000ULL, },
+ { 0x00055dbfffffffd0ULL, 0xfffe7bd280000000ULL, },
+};
+
+ 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_MSUB_Q_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_MSUB_Q_W(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUB_Q_W__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUB_Q_W__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/fixed-multiply/test_msa_msubr_q_h.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_msubr_q_h.c
new file mode 100644
index 0000000000..0be6d51418
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_msubr_q_h.c
@@ -0,0 +1,216 @@
+/*
+ * Test program for MSA instruction MSUBR_Q.H
+ *
+ * Copyright (C) 2019 Wave Computing, Inc.
+ * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com>
+ * Copyright (C) 2019 RT-RK Computer Based Systems LLC
+ * Copyright (C) 2019 Mateja Marjanovic <mateja.marjanovic@rt-rk.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Fixed Multiply";
+ char *instruction_name = "MSUBR_Q.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 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x00000000ffff0000ULL, 0x0000ffff00000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, }, /* 16 */
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0xc71bc71bc71bc71bULL, 0xc71bc71bc71bc71bULL, },
+ { 0xffffffffffffffffULL, 0xffffffffffffffffULL, },
+ { 0xdddcdddcdddcdddcULL, 0xdddcdddcdddcdddcULL, },
+ { 0xfffefffefffefffeULL, 0xfffefffefffefffeULL, },
+ { 0xed0725ebb423ed07ULL, 0x25ebb423ed0725ebULL, },
+ { 0xfffdfffdfffefffdULL, 0xfffdfffefffdfffdULL, },
+ { 0xfffefffefffffffeULL, 0xfffefffffffefffeULL, }, /* 24 */
+ { 0xfffefffefffffffeULL, 0xfffefffffffefffeULL, },
+ { 0x38e238e238e338e2ULL, 0x38e238e338e238e2ULL, },
+ { 0xffffffff0000ffffULL, 0xffff0000ffffffffULL, },
+ { 0x2222222222232222ULL, 0x2222222322222222ULL, },
+ { 0x0000000000010000ULL, 0x0000000100000000ULL, },
+ { 0x12f7da134bdb12f7ULL, 0xda134bdb12f7da13ULL, },
+ { 0x0001000000010001ULL, 0x0000000100010000ULL, },
+ { 0x0001000000010001ULL, 0x0000000100010000ULL, }, /* 32 */
+ { 0x0001000000010001ULL, 0x0000000100010000ULL, },
+ { 0xdddedddddddedddeULL, 0xdddddddedddeddddULL, },
+ { 0x0001000000010001ULL, 0x0000000100010000ULL, },
+ { 0xeb85eb84eb85eb85ULL, 0xeb84eb85eb85eb84ULL, },
+ { 0x0000ffff00000000ULL, 0xffff00000000ffffULL, },
+ { 0xf49f16c1d27cf49fULL, 0x16c1d27cf49f16c1ULL, },
+ { 0x0000ffff00000000ULL, 0xffff00000000ffffULL, },
+ { 0x0000ffff00000000ULL, 0xffff00000000ffffULL, }, /* 40 */
+ { 0x0000ffff00000000ULL, 0xffff00000000ffffULL, },
+ { 0x2222222122222222ULL, 0x2221222222222221ULL, },
+ { 0x0000ffff00000000ULL, 0xffff00000000ffffULL, },
+ { 0x147b147a147b147bULL, 0x147a147b147b147aULL, },
+ { 0x0000ffff00000000ULL, 0xffff00000000ffffULL, },
+ { 0x0b61e93e2d830b61ULL, 0xe93e2d830b61e93eULL, },
+ { 0x0001000000000001ULL, 0x0000000000010000ULL, },
+ { 0x00010000ffff0001ULL, 0x0000ffff00010000ULL, }, /* 48 */
+ { 0x00010000ffff0001ULL, 0x0000ffff00010000ULL, },
+ { 0xed0a25edb424ed0aULL, 0x25edb424ed0a25edULL, },
+ { 0x00010000fffe0001ULL, 0x0000fffe00010000ULL, },
+ { 0xf4a016c2d27af4a0ULL, 0x16c2d27af4a016c2ULL, },
+ { 0x00010001fffd0001ULL, 0x0001fffd00010001ULL, },
+ { 0xf9afe6b99ad9f9afULL, 0xe6b99ad9f9afe6b9ULL, },
+ { 0x00010002fffc0001ULL, 0x0002fffc00010002ULL, },
+ { 0x00010002fffd0001ULL, 0x0002fffd00010002ULL, }, /* 56 */
+ { 0x00010002fffd0001ULL, 0x0002fffd00010002ULL, },
+ { 0x12f7da144bd812f7ULL, 0xda144bd812f7da14ULL, },
+ { 0x00010001fffe0001ULL, 0x0001fffe00010001ULL, },
+ { 0x0b62e93f2d820b62ULL, 0xe93f2d820b62e93fULL, },
+ { 0x00020001ffff0002ULL, 0x0001ffff00020001ULL, },
+ { 0x0654194a65220654ULL, 0x194a65220654194aULL, },
+ { 0x00020001ffff0002ULL, 0x0001ffff00020001ULL, },
+ { 0x9048fb0bf341c73bULL, 0xd396fefdfffdce10ULL, }, /* 64 */
+ { 0x8c4efb1edac8ed2cULL, 0xc86a051b003e01e6ULL, },
+ { 0x8000eb1af0ed3ac3ULL, 0xb0f10a2bff3c190fULL, },
+ { 0xe8edef7ed3364e8aULL, 0xf42214c0fe3406b6ULL, },
+ { 0xe4f3ef91babd747bULL, 0xe8f61adefe753a8cULL, },
+ { 0xe4cfef918bb95b20ULL, 0xe627f5c8faee04bfULL, },
+ { 0xe207efd0b6432746ULL, 0xe040d7190903ecb5ULL, },
+ { 0xe5c3efbf80001a0fULL, 0xf12696f61769ffc0ULL, },
+ { 0x979ddfbb962567a6ULL, 0xd9ad9c06166716e9ULL, }, /* 72 */
+ { 0x94d5dffac0af33ccULL, 0xd3c68000247cfedfULL, },
+ { 0x8000ac4b9a31c9c4ULL, 0xc75f8000ec43f421ULL, },
+ { 0xc965ba77cdd8aebdULL, 0xeae08000b2c6fca3ULL, },
+ { 0x3252bedbb021c284ULL, 0x2e118a95b1beea4aULL, },
+ { 0x360ebeca8000b54dULL, 0x3ef78000c024fd55ULL, },
+ { 0x7f73ccf6b3a79a46ULL, 0x6278800086a705d7ULL, },
+ { 0x1ce9c91380009362ULL, 0xfcd580008000ff19ULL, },
+ { 0x37ebbe42a862dbb9ULL, 0xfeb38b5e8000fe89ULL, }, /* 80 */
+ { 0x39c7be75dd7ccb94ULL, 0xfee48000953fff7cULL, },
+ { 0x5f8994cfca8f9bdeULL, 0xff3c80008000ffa2ULL, },
+ { 0x0bb6a77cf1e284a3ULL, 0xfe8d80008000ff8cULL, },
+ { 0x16a7960ef656d6ccULL, 0xff688b5e8000ff44ULL, },
+ { 0x17689660fc31c475ULL, 0xff7f8000953fffbeULL, },
+ { 0x26b48000fa1a8e43ULL, 0xffa780008000ffd1ULL, },
+ { 0x04bf964dfe718000ULL, 0xff5880008000ffc6ULL, },
+ { 0x092e817dfeefd540ULL, 0xffbb8b5e8000ffa2ULL, }, /* 88 */
+ { 0x097c81dfff94c239ULL, 0xffc58000953fffdfULL, },
+ { 0x0faf8000ff5989ffULL, 0xffd780008000ffe9ULL, },
+ { 0x01ec964dffd48000ULL, 0xffb280008000ffe4ULL, },
+ { 0x03b8817dffe2d540ULL, 0xffe08b5e8000ffd3ULL, },
+ { 0x03d881dffff4c239ULL, 0xffe58000953ffff0ULL, },
+ { 0x065b8000ffed89ffULL, 0xffed80008000fff5ULL, },
+ { 0x00c7964dfffb8000ULL, 0xffdc80008000fff2ULL, },
+ { 0x0181817dfffdd540ULL, 0xfff18b5e8000ffe9ULL, }, /* 96 */
+ { 0x02e98000fffef1b9ULL, 0xfffa95ba8000ffdbULL, },
+ { 0x05a18000fffffb3bULL, 0xfffe9f2a8000ffc4ULL, },
+ { 0x0ae38000fffffe68ULL, 0xffffa7c48000ff9fULL, },
+ { 0x0b4080630000fdb2ULL, 0xffff8000953fffdeULL, },
+ { 0x0ba080c60000fcabULL, 0xffff8000a6f7fff4ULL, },
+ { 0x0c0381280000fb2fULL, 0xffff8000b5befffcULL, },
+ { 0x0c69818a0000f90aULL, 0xffff8000c211ffffULL, },
+ { 0x148580000000f2b4ULL, 0xffff80009905ffffULL, }, /* 104 */
+ { 0x21ee80000000e69aULL, 0xffff80008000ffffULL, },
+ { 0x381a80000000cf7cULL, 0xffff80008000ffffULL, },
+ { 0x5cc480000000a354ULL, 0xffff80008000ffffULL, },
+ { 0x0b5f964d00008dd4ULL, 0xfffe80008000ffffULL, },
+ { 0x0165a8b700008000ULL, 0xfffc80008000ffffULL, },
+ { 0x002cb7ec00008000ULL, 0xfff880008000ffffULL, },
+ { 0x0005c47b00008000ULL, 0xfff180008000ffffULL, },
+};
+
+ 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_MSUBR_Q_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_MSUBR_Q_H(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUBR_Q_H__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUBR_Q_H__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/fixed-multiply/test_msa_msubr_q_w.c b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_msubr_q_w.c
new file mode 100644
index 0000000000..7d57cb500a
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/fixed-multiply/test_msa_msubr_q_w.c
@@ -0,0 +1,216 @@
+/*
+ * Test program for MSA instruction MSUBR_Q.W
+ *
+ * Copyright (C) 2019 Wave Computing, Inc.
+ * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com>
+ * Copyright (C) 2019 RT-RK Computer Based Systems LLC
+ * Copyright (C) 2019 Mateja Marjanovic <mateja.marjanovic@rt-rk.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Fixed Multiply";
+ char *instruction_name = "MSUBR_Q.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 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000100000001ULL, 0x0000000100000001ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000001ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 8 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000100000001ULL, 0x0000000100000001ULL, }, /* 16 */
+ { 0x0000000100000001ULL, 0x0000000100000001ULL, },
+ { 0x38e38e3b38e38e3bULL, 0x38e38e3b38e38e3bULL, },
+ { 0x0000000200000002ULL, 0x0000000200000002ULL, },
+ { 0x2222222522222225ULL, 0x2222222522222225ULL, },
+ { 0x0000000300000003ULL, 0x0000000300000003ULL, },
+ { 0x12f684c14bda12faULL, 0xda12f68812f684c1ULL, },
+ { 0x0000000400000003ULL, 0x0000000400000004ULL, },
+ { 0x0000000300000002ULL, 0x0000000300000003ULL, }, /* 24 */
+ { 0x0000000300000002ULL, 0x0000000300000003ULL, },
+ { 0xc71c71cac71c71c9ULL, 0xc71c71cac71c71caULL, },
+ { 0x0000000200000001ULL, 0x0000000200000002ULL, },
+ { 0xdddddddfdddddddeULL, 0xdddddddfdddddddfULL, },
+ { 0x0000000100000000ULL, 0x0000000100000001ULL, },
+ { 0xed097b43b425ed0aULL, 0x25ed097ced097b43ULL, },
+ { 0x0000000000000000ULL, 0x0000000100000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000100000000ULL, }, /* 32 */
+ { 0x0000000000000000ULL, 0x0000000100000000ULL, },
+ { 0x2222222322222223ULL, 0x2222222422222223ULL, },
+ { 0x0000000000000000ULL, 0x0000000100000000ULL, },
+ { 0x147ae148147ae148ULL, 0x147ae149147ae148ULL, },
+ { 0x0000000000000000ULL, 0x0000000100000000ULL, },
+ { 0x0b60b60c2d82d82eULL, 0xe93e93ea0b60b60cULL, },
+ { 0x0000000100000000ULL, 0x0000000100000001ULL, },
+ { 0x0000000100000000ULL, 0x0000000100000001ULL, }, /* 40 */
+ { 0x0000000100000000ULL, 0x0000000100000001ULL, },
+ { 0xdddddddfdddddddeULL, 0xdddddddfdddddddfULL, },
+ { 0x0000000100000000ULL, 0x0000000100000001ULL, },
+ { 0xeb851eb9eb851eb8ULL, 0xeb851eb9eb851eb9ULL, },
+ { 0x0000000100000000ULL, 0x0000000100000001ULL, },
+ { 0xf49f49f5d27d27d3ULL, 0x16c16c17f49f49f5ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000001ULL, 0x0000000000000000ULL, }, /* 48 */
+ { 0x0000000000000001ULL, 0x0000000000000000ULL, },
+ { 0x12f684be4bda12f8ULL, 0xda12f68512f684beULL, },
+ { 0x0000000000000002ULL, 0x0000000000000000ULL, },
+ { 0x0b60b60c2d82d830ULL, 0xe93e93e90b60b60cULL, },
+ { 0x0000000000000003ULL, 0xffffffff00000000ULL, },
+ { 0x06522c3f6522c3f7ULL, 0x1948b0fb06522c3fULL, },
+ { 0x0000000000000004ULL, 0xffffffff00000000ULL, },
+ { 0x0000000000000003ULL, 0xffffffff00000000ULL, }, /* 56 */
+ { 0x0000000000000003ULL, 0xffffffff00000000ULL, },
+ { 0xed097b43b425ed0cULL, 0x25ed097bed097b43ULL, },
+ { 0x0000000000000002ULL, 0x0000000000000000ULL, },
+ { 0xf49f49f5d27d27d4ULL, 0x16c16c17f49f49f5ULL, },
+ { 0x0000000000000001ULL, 0x0000000000000000ULL, },
+ { 0xf9add3c19add3c0eULL, 0xe6b74f04f9add3c1ULL, },
+ { 0x0000000000000000ULL, 0x0000000100000000ULL, },
+ { 0x6fb7e8890cbdc0d3ULL, 0x2c6b144700049a05ULL, }, /* 64 */
+ { 0x73b239d7253787d5ULL, 0x379780f0ffc424ccULL, },
+ { 0x7fffffff0f127795ULL, 0x4f10998300c57f01ULL, },
+ { 0x1713a7162cca6b3bULL, 0x0be04ded01cca270ULL, },
+ { 0x1b0df8644544323dULL, 0x170cba96018c2d37ULL, },
+ { 0x1b323a657448a84fULL, 0x19dc46aa051313c6ULL, },
+ { 0x1dfa85ed49be7970ULL, 0x1fc3e135f6fe3018ULL, },
+ { 0x1a3e24ca7fffffffULL, 0x0edd19d1e8983ff6ULL, },
+ { 0x6863455169daefbfULL, 0x26563264e9999a2bULL, }, /* 72 */
+ { 0x6b2b90d93f50c0e0ULL, 0x2c3dccefdb84b67dULL, },
+ { 0x7fffffff65cdd2a4ULL, 0x38a5555313bd77c9ULL, },
+ { 0x369baa393226e271ULL, 0x1523c34a4d39d0a3ULL, },
+ { 0xcdaf51504fded617ULL, 0xd1f377b44e40f412ULL, },
+ { 0xc9f2f02d7fffffffULL, 0xc10cb0503fdb03f0ULL, },
+ { 0x808e9a674c590fccULL, 0x9d8b1e4779575ccaULL, },
+ { 0xe319324b7fffffffULL, 0x032ce4297fffffffULL, },
+ { 0xfe196fe67fffffffULL, 0x050bc0417e7bb00bULL, }, /* 80 */
+ { 0xfe299f487fffffffULL, 0x05cb2b577fffffffULL, },
+ { 0xff5d018339cf8b80ULL, 0x0798e2662b2b2514ULL, },
+ { 0xfecdfe20645a7d9bULL, 0x00d3dcf80dea608eULL, },
+ { 0xffebe0517fffffffULL, 0x0150ab000dc02968ULL, },
+ { 0xffec8baf7fffffffULL, 0x01828ea210087db2ULL, },
+ { 0xfff9423c39cf8b80ULL, 0x01fae4c1056841b9ULL, },
+ { 0xfff35806645a7d9bULL, 0x003737bc01be3862ULL, },
+ { 0xffff2aee7fffffffULL, 0x0057bed801b8eeb0ULL, }, /* 88 */
+ { 0xffff32047fffffffULL, 0x0064bf8102021ffcULL, },
+ { 0xffffb89f39cf8b80ULL, 0x00841c7a00ad640aULL, },
+ { 0xffff79fe645a7d9bULL, 0x000e642f0037e4a6ULL, },
+ { 0xfffff7307fffffffULL, 0x0016de7800373b16ULL, },
+ { 0xfffff77b7fffffffULL, 0x001a42040040661aULL, },
+ { 0xfffffd0c39cf8b80ULL, 0x00226e990015b802ULL, },
+ { 0xfffffa75645a7d9bULL, 0x0003c0350007004aULL, },
+ { 0xffffffa37fffffffULL, 0x0005f5d90006eb0dULL, }, /* 96 */
+ { 0xfffffffa7fffffffULL, 0x000978b30006d610ULL, },
+ { 0x000000007fffffffULL, 0x000f0d0c0006c153ULL, },
+ { 0x000000007fffffffULL, 0x0017eacf0006acd5ULL, },
+ { 0x000000007fffffffULL, 0x001b761e0007c87dULL, },
+ { 0x000000007fffffffULL, 0x001f87e00009133bULL, },
+ { 0x000000007fffffffULL, 0x00243402000a94e0ULL, },
+ { 0x000000007fffffffULL, 0x00299164000c5689ULL, },
+ { 0x0000000039cf8b80ULL, 0x003682160004293bULL, }, /* 104 */
+ { 0x000000001a1c28c4ULL, 0x00477a0900016741ULL, },
+ { 0x000000000bcae026ULL, 0x005dba4500007929ULL, },
+ { 0x00000000055376c2ULL, 0x007ae7c2000028ddULL, },
+ { 0x00000000093ed557ULL, 0x000d637500000d2cULL, },
+ { 0x00000000100c9469ULL, 0x0001755d0000043fULL, },
+ { 0x000000001bdc1297ULL, 0x000028ac0000015eULL, },
+ { 0x00000000305c8bbfULL, 0x0000046e00000071ULL, },
+};
+
+ 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_MADDR_Q_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_MADDR_Q_W(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDR_Q_W__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDR_Q_W__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-dot-product/test_msa_dpadd_s_d.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_s_d.c
new file mode 100644
index 0000000000..d039e1a785
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_s_d.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction DPADD_S.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Dot Product";
+ char *instruction_name = "DPADD_S.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 */
+ { 0x0000000000000002ULL, 0x0000000000000002ULL, },
+ { 0x00000000aaaaaaaeULL, 0x00000000aaaaaaaeULL, },
+ { 0x0000000000000004ULL, 0x0000000000000004ULL, },
+ { 0x000000006666666cULL, 0x000000006666666cULL, },
+ { 0x0000000000000006ULL, 0x0000000000000006ULL, },
+ { 0x000000008e38e395ULL, 0xffffffffe38e38ebULL, },
+ { 0x0000000000000008ULL, 0x0000000000000008ULL, },
+ { 0x0000000000000008ULL, 0x0000000000000008ULL, }, /* 8 */
+ { 0x0000000000000008ULL, 0x0000000000000008ULL, },
+ { 0x0000000000000008ULL, 0x0000000000000008ULL, },
+ { 0x0000000000000008ULL, 0x0000000000000008ULL, },
+ { 0x0000000000000008ULL, 0x0000000000000008ULL, },
+ { 0x0000000000000008ULL, 0x0000000000000008ULL, },
+ { 0x0000000000000008ULL, 0x0000000000000008ULL, },
+ { 0x0000000000000008ULL, 0x0000000000000008ULL, },
+ { 0x00000000aaaaaab4ULL, 0x00000000aaaaaab4ULL, }, /* 16 */
+ { 0x00000000aaaaaab4ULL, 0x00000000aaaaaab4ULL, },
+ { 0x38e38e3a71c71c7cULL, 0x38e38e3a71c71c7cULL, },
+ { 0x0000000155555560ULL, 0x0000000155555560ULL, },
+ { 0x2222222444444450ULL, 0x2222222444444450ULL, },
+ { 0x000000020000000cULL, 0x000000020000000cULL, },
+ { 0x2f684bdcb425ed16ULL, 0xf684bda397b425faULL, },
+ { 0x00000002aaaaaab8ULL, 0x00000002aaaaaab8ULL, },
+ { 0x000000020000000eULL, 0x000000020000000eULL, }, /* 24 */
+ { 0x000000020000000eULL, 0x000000020000000eULL, },
+ { 0xc71c71c8e38e38f2ULL, 0xc71c71c8e38e38f2ULL, },
+ { 0x0000000155555564ULL, 0x0000000155555564ULL, },
+ { 0xdddddddeccccccdcULL, 0xdddddddeccccccdcULL, },
+ { 0x00000000aaaaaabaULL, 0x00000000aaaaaabaULL, },
+ { 0xd097b42684bda13fULL, 0x097b425ef684bdb1ULL, },
+ { 0x0000000000000010ULL, 0x0000000000000010ULL, },
+ { 0x0000000066666678ULL, 0x0000000066666678ULL, }, /* 32 */
+ { 0x0000000066666678ULL, 0x0000000066666678ULL, },
+ { 0x2222222355555568ULL, 0x2222222355555568ULL, },
+ { 0x00000000cccccce0ULL, 0x00000000cccccce0ULL, },
+ { 0x147ae1491eb85200ULL, 0x147ae1491eb85200ULL, },
+ { 0x0000000133333348ULL, 0x0000000133333348ULL, },
+ { 0x1c71c71e3e93e954ULL, 0xfa4fa4fbb60b60ccULL, },
+ { 0x00000001999999b0ULL, 0x00000001999999b0ULL, },
+ { 0x000000013333334aULL, 0x000000013333334aULL, }, /* 40 */
+ { 0x000000013333334aULL, 0x000000013333334aULL, },
+ { 0xdddddddeeeeeef06ULL, 0xdddddddeeeeeef06ULL, },
+ { 0x00000000cccccce4ULL, 0x00000000cccccce4ULL, },
+ { 0xeb851eb8e147ae2cULL, 0xeb851eb8e147ae2cULL, },
+ { 0x000000006666667eULL, 0x000000006666667eULL, },
+ { 0xe38e38e3e93e9401ULL, 0x05b05b05c71c71dfULL, },
+ { 0x0000000000000018ULL, 0x0000000000000018ULL, },
+ { 0x000000008e38e3a7ULL, 0xffffffffe38e38fdULL, }, /* 48 */
+ { 0x000000008e38e3a7ULL, 0xffffffffe38e38fdULL, },
+ { 0x2f684bdb425ed0b1ULL, 0xf684bda17b425eebULL, },
+ { 0x000000011c71c736ULL, 0xffffffffc71c71e2ULL, },
+ { 0x1c71c71e27d27d42ULL, 0xfa4fa4fa49f49f66ULL, },
+ { 0x00000001aaaaaac5ULL, 0xffffffffaaaaaac7ULL, },
+ { 0x35ba781b4587e6d2ULL, 0x0fcd6e9d6b74f050ULL, },
+ { 0x0000000238e38e54ULL, 0xffffffff8e38e3acULL, },
+ { 0x00000001aaaaaac7ULL, 0xffffffffaaaaaac9ULL, }, /* 56 */
+ { 0x00000001aaaaaac7ULL, 0xffffffffaaaaaac9ULL, },
+ { 0xd097b427a12f6869ULL, 0x097b425ebda12f87ULL, },
+ { 0x000000011c71c73aULL, 0xffffffffc71c71e6ULL, },
+ { 0xe38e38e477777796ULL, 0x05b05b05aaaaaacaULL, },
+ { 0x000000008e38e3adULL, 0xffffffffe38e3903ULL, },
+ { 0xca4587e781948b2fULL, 0xf032916206522c5fULL, },
+ { 0x0000000000000020ULL, 0x0000000000000020ULL, },
+ { 0x3e3ad4ae1266c2b0ULL, 0x1637d725aebdb734ULL, }, /* 64 */
+ { 0x4c74e0d60a3d6d94ULL, 0x1badd2dd9f4dac90ULL, },
+ { 0x6874e8f94205b90cULL, 0x27eb0c41af2c3022ULL, },
+ { 0x42dab657e16f25e8ULL, 0x06d6782e137656f2ULL, },
+ { 0x5114c27fd945d0ccULL, 0x0c4c73e604064c4eULL, },
+ { 0x68a91e898c276755ULL, 0x0f77ad378bdfb302ULL, },
+ { 0x54c82cde41d1cf13ULL, 0x0b6108a5f38e1598ULL, },
+ { 0x6f755d3eddd1234aULL, 0xfbbaace2f5421908ULL, },
+ { 0x8b75656215996ec2ULL, 0x07f7e64705209c9aULL, }, /* 72 */
+ { 0x779473b6cb43d680ULL, 0x03e141b56cceff30ULL, },
+ { 0xa6279a1866fb9f64ULL, 0x2631668db9e53ac1ULL, },
+ { 0x67a1f71bd99e4586ULL, 0x312ec9f6206e6e69ULL, },
+ { 0x4207c47a7907b262ULL, 0x101a35e284b89539ULL, },
+ { 0x5cb4f4db15070699ULL, 0x0073da1f866c98a9ULL, },
+ { 0x1e2f51de87a9acbbULL, 0x0b713d87ecf5cc51ULL, },
+ { 0x721d49ba5f0acfa8ULL, 0x5ba5bbe9afeae691ULL, },
+ { 0x4bcd68690d995de0ULL, 0x771da6b4b6c967ebULL, }, /* 80 */
+ { 0x4ea9a2cfbb5acd7bULL, 0x79dd6a73439e6387ULL, },
+ { 0x47c800b999dd2371ULL, 0x766d25914ef7a7a0ULL, },
+ { 0x41b0fa10eb77cf84ULL, 0x26e85189458965f8ULL, },
+ { 0x1fc448ce062c2944ULL, 0x31f490a9422a80e6ULL, },
+ { 0x211bdfadfd79770eULL, 0x3b25f4cac5763378ULL, },
+ { 0x16fbb87edd87b6f0ULL, 0x57c0b65fabdda20eULL, },
+ { 0x14621091eac4a5f6ULL, 0x4d29a25d32fa9ef6ULL, },
+ { 0x07832ded1c464b02ULL, 0x6396905709e3cfa4ULL, }, /* 88 */
+ { 0x0ff4a84eab8df3b9ULL, 0x6bc9a7d8c6adf2eaULL, },
+ { 0x21e53326bfbd0b05ULL, 0x8f8f3b9c679dff5aULL, },
+ { 0x191ed6a24e1576f9ULL, 0x9e8c2e402760373aULL, },
+ { 0x19b438400fc27751ULL, 0x819c4bbfd3ee6972ULL, },
+ { 0x1e0d5dc1094ae999ULL, 0x7496a289f5eff010ULL, },
+ { 0x11af620b7bc03943ULL, 0x8a11f229836addc7ULL, },
+ { 0x46fa45d0e84440fcULL, 0xe8d2c0211fb042bfULL, },
+ { 0x22142516b5a8adbcULL, 0xe1cf1923e186aad1ULL, }, /* 96 */
+ { 0x066ebbbb4ff6da44ULL, 0xd918d7e6a7e61877ULL, },
+ { 0x100acc9d22839a48ULL, 0xce291932929e367fULL, },
+ { 0x0dfe419d62a62f64ULL, 0xc020fe45a8cf7acfULL, },
+ { 0x2ba79b6ffbf3c63bULL, 0xb428f52c49fce695ULL, },
+ { 0x29b3b85200bdf100ULL, 0xb4ae7ea2f52aa5b9ULL, },
+ { 0x293bb84d6360c0b6ULL, 0xae33b26e4c493c49ULL, },
+ { 0x46a99fdf54f4862dULL, 0xae790dc5055f6f51ULL, },
+ { 0x18480e0fd728c7c3ULL, 0xa000ad7b15f8ebe0ULL, }, /* 104 */
+ { 0x1b8b97aa205e1239ULL, 0x89c78b8909c4a8e5ULL, },
+ { 0x09abb26b05ef649dULL, 0x74242fa1bd49e740ULL, },
+ { 0x04e233bc861d272bULL, 0x9c5343ab30f62f9fULL, },
+ { 0xda2da0d0884dc3d1ULL, 0xb824f201640b4147ULL, },
+ { 0x9d8b22ee1b9a2e0fULL, 0xb642ddf1edb0747fULL, },
+ { 0x7c81956533686a37ULL, 0xdd5181781dc3ad37ULL, },
+ { 0xc60b1905717ff25aULL, 0xe2af726e71ad7ad7ULL, },
+ };
+
+ 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_DPADD_S_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_DPADD_S_D(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPADD_S_D__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPADD_S_D__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-dot-product/test_msa_dpadd_s_h.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_s_h.c
new file mode 100644
index 0000000000..bcaafe3b71
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_s_h.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction DPADD_S.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Dot Product";
+ char *instruction_name = "DPADD_S.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 */
+ { 0x0002000200020002ULL, 0x0002000200020002ULL, },
+ { 0x00ae00ae00ae00aeULL, 0x00ae00ae00ae00aeULL, },
+ { 0x0004000400040004ULL, 0x0004000400040004ULL, },
+ { 0x006c006c006c006cULL, 0x006c006c006c006cULL, },
+ { 0x0006000600060006ULL, 0x0006000600060006ULL, },
+ { 0x0095ffeb00400095ULL, 0xffeb00400095ffebULL, },
+ { 0x0008000800080008ULL, 0x0008000800080008ULL, },
+ { 0x0008000800080008ULL, 0x0008000800080008ULL, }, /* 8 */
+ { 0x0008000800080008ULL, 0x0008000800080008ULL, },
+ { 0x0008000800080008ULL, 0x0008000800080008ULL, },
+ { 0x0008000800080008ULL, 0x0008000800080008ULL, },
+ { 0x0008000800080008ULL, 0x0008000800080008ULL, },
+ { 0x0008000800080008ULL, 0x0008000800080008ULL, },
+ { 0x0008000800080008ULL, 0x0008000800080008ULL, },
+ { 0x0008000800080008ULL, 0x0008000800080008ULL, },
+ { 0x00b400b400b400b4ULL, 0x00b400b400b400b4ULL, }, /* 16 */
+ { 0x00b400b400b400b4ULL, 0x00b400b400b400b4ULL, },
+ { 0x3a7c3a7c3a7c3a7cULL, 0x3a7c3a7c3a7c3a7cULL, },
+ { 0x0160016001600160ULL, 0x0160016001600160ULL, },
+ { 0x2450245024502450ULL, 0x2450245024502450ULL, },
+ { 0x020c020c020c020cULL, 0x020c020c020c020cULL, },
+ { 0x3216f8fa15883216ULL, 0xf8fa15883216f8faULL, },
+ { 0x02b802b802b802b8ULL, 0x02b802b802b802b8ULL, },
+ { 0x020e020e020e020eULL, 0x020e020e020e020eULL, }, /* 24 */
+ { 0x020e020e020e020eULL, 0x020e020e020e020eULL, },
+ { 0xc8f2c8f2c8f2c8f2ULL, 0xc8f2c8f2c8f2c8f2ULL, },
+ { 0x0164016401640164ULL, 0x0164016401640164ULL, },
+ { 0xdedcdedcdedcdedcULL, 0xdedcdedcdedcdedcULL, },
+ { 0x00ba00ba00ba00baULL, 0x00ba00ba00ba00baULL, },
+ { 0xd13f09b1ed78d13fULL, 0x09b1ed78d13f09b1ULL, },
+ { 0x0010001000100010ULL, 0x0010001000100010ULL, },
+ { 0x0078007800780078ULL, 0x0078007800780078ULL, }, /* 32 */
+ { 0x0078007800780078ULL, 0x0078007800780078ULL, },
+ { 0x2368236823682368ULL, 0x2368236823682368ULL, },
+ { 0x00e000e000e000e0ULL, 0x00e000e000e000e0ULL, },
+ { 0x1600160016001600ULL, 0x1600160016001600ULL, },
+ { 0x0148014801480148ULL, 0x0148014801480148ULL, },
+ { 0x1e54fbcc0d101e54ULL, 0xfbcc0d101e54fbccULL, },
+ { 0x01b001b001b001b0ULL, 0x01b001b001b001b0ULL, },
+ { 0x014a014a014a014aULL, 0x014a014a014a014aULL, }, /* 40 */
+ { 0x014a014a014a014aULL, 0x014a014a014a014aULL, },
+ { 0xdf06df06df06df06ULL, 0xdf06df06df06df06ULL, },
+ { 0x00e400e400e400e4ULL, 0x00e400e400e400e4ULL, },
+ { 0xec2cec2cec2cec2cULL, 0xec2cec2cec2cec2cULL, },
+ { 0x007e007e007e007eULL, 0x007e007e007e007eULL, },
+ { 0xe40105dff4f0e401ULL, 0x05dff4f0e40105dfULL, },
+ { 0x0018001800180018ULL, 0x0018001800180018ULL, },
+ { 0x00a7fffd005200a7ULL, 0xfffd005200a7fffdULL, }, /* 48 */
+ { 0x00a7fffd005200a7ULL, 0xfffd005200a7fffdULL, },
+ { 0x30b1f6eb13ce30b1ULL, 0xf6eb13ce30b1f6ebULL, },
+ { 0x0136ffe2008c0136ULL, 0xffe2008c0136ffe2ULL, },
+ { 0x1e42fa660c541e42ULL, 0xfa660c541e42fa66ULL, },
+ { 0x01c5ffc700c601c5ULL, 0xffc700c601c5ffc7ULL, },
+ { 0x37d20f503fca37d2ULL, 0x0f503fca37d20f50ULL, },
+ { 0x0254ffac01000254ULL, 0xffac01000254ffacULL, },
+ { 0x01c7ffc900c801c7ULL, 0xffc900c801c7ffc9ULL, }, /* 56 */
+ { 0x01c7ffc900c801c7ULL, 0xffc900c801c7ffc9ULL, },
+ { 0xd2690987edf8d269ULL, 0x0987edf8d2690987ULL, },
+ { 0x013affe60090013aULL, 0xffe60090013affe6ULL, },
+ { 0xe49605caf530e496ULL, 0x05caf530e49605caULL, },
+ { 0x00ad0003005800adULL, 0x0003005800ad0003ULL, },
+ { 0xcb2ff05fc18ecb2fULL, 0xf05fc18ecb2ff05fULL, },
+ { 0x0020002000200020ULL, 0x0020002000200020ULL, },
+ { 0x64440d542be42c59ULL, 0x3f8a231d3b3d19b0ULL, }, /* 64 */
+ { 0x4b48f9380e321b6cULL, 0x413129b25958ffe0ULL, },
+ { 0x97ec1304f058d493ULL, 0x3c8626d66eabf540ULL, },
+ { 0x8422012411cade1dULL, 0x14cc12fe8f0ffa20ULL, },
+ { 0x6b26ed08f418cd30ULL, 0x16731993ad2ae050ULL, },
+ { 0x7c43135139aada21ULL, 0x18082ed0be64faa4ULL, },
+ { 0x66b3f20f392cf02eULL, 0x1c2e3e58c200062eULL, },
+ { 0x50250fd64095f94cULL, 0x149f5aa0cb1bfe12ULL, },
+ { 0x9cc929a222bbb273ULL, 0x0ff457c4e06ef372ULL, }, /* 72 */
+ { 0x87390860223dc880ULL, 0x141a674ce40afefcULL, },
+ { 0xc26d3f883f4f3df9ULL, 0x204b7471077c05e5ULL, },
+ { 0xb9731e9e1bdc24afULL, 0x111e8fc92f75fa0fULL, },
+ { 0xa5a90cbe3d4e2e39ULL, 0xe9647bf14fd9feefULL, },
+ { 0x8f1b2a8544b73757ULL, 0xe1d5983958f4f6d3ULL, },
+ { 0x8621099b21441e0dULL, 0xd2a8b39180edeafdULL, },
+ { 0xcf8222a84d293955ULL, 0x0732f211af821281ULL, },
+ { 0xb24e311468e36182ULL, 0x1d5df7b5739a06edULL, }, /* 80 */
+ { 0x9fb838d0948447f9ULL, 0x1c22f28463ef0925ULL, },
+ { 0xa63c3700ca342b06ULL, 0x1b16f62c40350d56ULL, },
+ { 0x91603bbac05427d0ULL, 0x0dabf3fc381feb90ULL, },
+ { 0xed2843f4d67c28c3ULL, 0xef47f1f54694ece0ULL, },
+ { 0xe3373f50950e1df3ULL, 0xeb96f4e231bee6f8ULL, },
+ { 0x00111042b00d1732ULL, 0xf8f3f7b81663e296ULL, },
+ { 0x0550257c952a23bcULL, 0xfd4e0730286f0ddaULL, },
+ { 0x2418088a94861e5bULL, 0x1bcf191d5d740802ULL, }, /* 88 */
+ { 0x1d34dae8a7fc1a85ULL, 0x1f6e155281a10a8aULL, },
+ { 0x25f8ef24c16f4c23ULL, 0x12f7103e9bd702c4ULL, },
+ { 0x33b0f882bf8c4de5ULL, 0x0b68ff0eb3981908ULL, },
+ { 0xfaa812ea88fc60b6ULL, 0x38790427823a1198ULL, },
+ { 0x11760a6866984906ULL, 0x38280709862a18aaULL, },
+ { 0x355ee4445e3624a9ULL, 0x3a70056ab5ba156aULL, },
+ { 0x6990f6508b1005efULL, 0x19d2f282bd2beb34ULL, },
+ { 0x09f8e7147ee80358ULL, 0x0ea3c3a4d25af434ULL, }, /* 96 */
+ { 0x0270e58e89681a57ULL, 0xed529f3dfdf4fa64ULL, },
+ { 0x2fe0ff749ea038b9ULL, 0x08bfb178f83600f4ULL, },
+ { 0x0c98e7fe6a903991ULL, 0xf0f0da2312380064ULL, },
+ { 0x272ce738ba222968ULL, 0xf060e7ef217afed4ULL, },
+ { 0x1b11fce0969a2387ULL, 0xebe0ecf24235fee0ULL, },
+ { 0x1628f080a22617f4ULL, 0xeb86f0ea54aafebcULL, },
+ { 0x0b6abf0075b21275ULL, 0xee56f2fe4664ff28ULL, },
+ { 0x2d12d3d2642dcfbbULL, 0xde28f62c3ff20223ULL, }, /* 104 */
+ { 0x24a2f1b03fd408a0ULL, 0xd2baf84428ad0529ULL, },
+ { 0xf7c6115e36c734f8ULL, 0xd6a8f9d00d740916ULL, },
+ { 0xe656ec5832b62134ULL, 0xde02fb961c9f0c1bULL, },
+ { 0xf580051836e82d2eULL, 0xed2a0e7efa190093ULL, },
+ { 0xc9300cbe462435ecULL, 0xf33df43e02952973ULL, },
+ { 0xbff0f9ec66bc299eULL, 0xf581f02ee651f985ULL, },
+ { 0x9e90f34e7f2c06f4ULL, 0x01e3f07e04092877ULL, },
+ };
+
+ 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_DPADD_S_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_DPADD_S_H(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPADD_S_H__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPADD_S_H__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-dot-product/test_msa_dpadd_s_w.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_s_w.c
new file mode 100644
index 0000000000..90562ab8a5
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_s_w.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction DPADD_S.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Dot Product";
+ char *instruction_name = "DPADD_S.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 */
+ { 0x0000000200000002ULL, 0x0000000200000002ULL, },
+ { 0x0000aaae0000aaaeULL, 0x0000aaae0000aaaeULL, },
+ { 0x0000000400000004ULL, 0x0000000400000004ULL, },
+ { 0x0000666c0000666cULL, 0x0000666c0000666cULL, },
+ { 0x0000000600000006ULL, 0x0000000600000006ULL, },
+ { 0xffffe39500008e40ULL, 0x000038ebffffe395ULL, },
+ { 0x0000000800000008ULL, 0x0000000800000008ULL, },
+ { 0x0000000800000008ULL, 0x0000000800000008ULL, }, /* 8 */
+ { 0x0000000800000008ULL, 0x0000000800000008ULL, },
+ { 0x0000000800000008ULL, 0x0000000800000008ULL, },
+ { 0x0000000800000008ULL, 0x0000000800000008ULL, },
+ { 0x0000000800000008ULL, 0x0000000800000008ULL, },
+ { 0x0000000800000008ULL, 0x0000000800000008ULL, },
+ { 0x0000000800000008ULL, 0x0000000800000008ULL, },
+ { 0x0000000800000008ULL, 0x0000000800000008ULL, },
+ { 0x0000aab40000aab4ULL, 0x0000aab40000aab4ULL, }, /* 16 */
+ { 0x0000aab40000aab4ULL, 0x0000aab40000aab4ULL, },
+ { 0x38e51c7c38e51c7cULL, 0x38e51c7c38e51c7cULL, },
+ { 0x0001556000015560ULL, 0x0001556000015560ULL, },
+ { 0x2224445022244450ULL, 0x2224445022244450ULL, },
+ { 0x0002000c0002000cULL, 0x0002000c0002000cULL, },
+ { 0xf686ed162f6b0988ULL, 0x12f925faf686ed16ULL, },
+ { 0x0002aab80002aab8ULL, 0x0002aab80002aab8ULL, },
+ { 0x0002000e0002000eULL, 0x0002000e0002000eULL, }, /* 24 */
+ { 0x0002000e0002000eULL, 0x0002000e0002000eULL, },
+ { 0xc71e38f2c71e38f2ULL, 0xc71e38f2c71e38f2ULL, },
+ { 0x0001556400015564ULL, 0x0001556400015564ULL, },
+ { 0xdddeccdcdddeccdcULL, 0xdddeccdcdddeccdcULL, },
+ { 0x0000aaba0000aabaULL, 0x0000aaba0000aabaULL, },
+ { 0x097ba13fd0982f78ULL, 0xed09bdb1097ba13fULL, },
+ { 0x0000001000000010ULL, 0x0000001000000010ULL, },
+ { 0x0000667800006678ULL, 0x0000667800006678ULL, }, /* 32 */
+ { 0x0000667800006678ULL, 0x0000667800006678ULL, },
+ { 0x2223556822235568ULL, 0x2223556822235568ULL, },
+ { 0x0000cce00000cce0ULL, 0x0000cce00000cce0ULL, },
+ { 0x147c5200147c5200ULL, 0x147c5200147c5200ULL, },
+ { 0x0001334800013348ULL, 0x0001334800013348ULL, },
+ { 0xfa50e9541c73a510ULL, 0x0b6260ccfa50e954ULL, },
+ { 0x000199b0000199b0ULL, 0x000199b0000199b0ULL, },
+ { 0x0001334a0001334aULL, 0x0001334a0001334aULL, }, /* 40 */
+ { 0x0001334a0001334aULL, 0x0001334a0001334aULL, },
+ { 0xdddeef06dddeef06ULL, 0xdddeef06dddeef06ULL, },
+ { 0x0000cce40000cce4ULL, 0x0000cce40000cce4ULL, },
+ { 0xeb85ae2ceb85ae2cULL, 0xeb85ae2ceb85ae2cULL, },
+ { 0x0000667e0000667eULL, 0x0000667e0000667eULL, },
+ { 0x05b09401e38e82f0ULL, 0xf49f71df05b09401ULL, },
+ { 0x0000001800000018ULL, 0x0000001800000018ULL, },
+ { 0xffffe3a700008e52ULL, 0x000038fdffffe3a7ULL, }, /* 48 */
+ { 0xffffe3a700008e52ULL, 0x000038fdffffe3a7ULL, },
+ { 0xf684d0b12f6997ceULL, 0x12f75eebf684d0b1ULL, },
+ { 0xffffc73600011c8cULL, 0x000071e2ffffc736ULL, },
+ { 0xfa4f7d421c738e54ULL, 0x0b619f66fa4f7d42ULL, },
+ { 0xffffaac50001aac6ULL, 0x0000aac7ffffaac5ULL, },
+ { 0x0fcce6d235bcf9caULL, 0x3f36f0500fcce6d2ULL, },
+ { 0xffff8e5400023900ULL, 0x0000e3acffff8e54ULL, },
+ { 0xffffaac70001aac8ULL, 0x0000aac9ffffaac7ULL, }, /* 56 */
+ { 0xffffaac70001aac8ULL, 0x0000aac9ffffaac7ULL, },
+ { 0x097b6869d0994bf8ULL, 0xed0a2f87097b6869ULL, },
+ { 0xffffc73a00011c90ULL, 0x000071e6ffffc73aULL, },
+ { 0x05b07796e38f1130ULL, 0xf49faaca05b07796ULL, },
+ { 0xffffe3ad00008e58ULL, 0x00003903ffffe3adULL, },
+ { 0xf0328b2fca45cd8eULL, 0xc0ca2c5ff0328b2fULL, },
+ { 0x0000002000000020ULL, 0x0000002000000020ULL, },
+ { 0x3a57fe9422c255a4ULL, 0x16b6ba1518facfc9ULL, }, /* 64 */
+ { 0x3c4b6c241c0669eaULL, 0x193d8a02feefaadeULL, },
+ { 0x6b6084e0ea284328ULL, 0x2271e08cf3dc0f77ULL, },
+ { 0x34b7f0f2ef20736aULL, 0xfb8f1ed3fd8c7dadULL, },
+ { 0x36ab5e82e86487b0ULL, 0xfe15eec0e38158c2ULL, },
+ { 0x36bda5cf0c93ba59ULL, 0x120897b5002b2653ULL, },
+ { 0x38025a59113b8b36ULL, 0x2453b4030525b498ULL, },
+ { 0x362cc9c2346212c9ULL, 0x3bf2477af46d1b56ULL, },
+ { 0x6541e27e0283ec07ULL, 0x45269e04e9597fefULL, }, /* 72 */
+ { 0x66869708072bbce4ULL, 0x5771ba52ee540e34ULL, },
+ { 0x9bb32f904f6ed245ULL, 0x6a56b2930fcf50fdULL, },
+ { 0x6feae478431ee5e4ULL, 0x731e8c13284ca993ULL, },
+ { 0x3942508a48171626ULL, 0x4c3bca5a31fd17c9ULL, },
+ { 0x376cbff36b3d9db9ULL, 0x63da5dd121447e87ULL, },
+ { 0x0ba474db5eedb158ULL, 0x6ca2375139c1d71dULL, },
+ { 0x3edb00658507867dULL, 0xd6e9ca725a84f021ULL, },
+ { 0x21746d8f492aab6bULL, 0xc86ec10d5ef05719ULL, }, /* 80 */
+ { 0x21105bf47228d8e1ULL, 0xd541f981830d22c5ULL, },
+ { 0xf90ba39c64a9aab9ULL, 0xd00d1cd8b17e0558ULL, },
+ { 0xedf1ebed93975370ULL, 0xd7fd3855cb7afcd4ULL, },
+ { 0xf85b68939e46773eULL, 0xceb49456ccc86662ULL, },
+ { 0xf8a465f666205360ULL, 0xe8078ebee9b86012ULL, },
+ { 0xdaa6e8fa242ed740ULL, 0xfd8488e8ff04a562ULL, },
+ { 0xc84291663638bd8eULL, 0x360ea9ec09bfe9aaULL, },
+ { 0xed300e0228a5c87eULL, 0x42280c3610aaee67ULL, }, /* 88 */
+ { 0xed8592684150f62dULL, 0x43c5604a0c58a5a1ULL, },
+ { 0x1661583a33e11b5dULL, 0x38e0b738fb2ab5fdULL, },
+ { 0x27e2359b43cb17c4ULL, 0x4169f958054c48f1ULL, },
+ { 0x0ff9c2b35666c87aULL, 0x546263e7ee7c57c1ULL, },
+ { 0x0f9e0bba7cf02cdcULL, 0x3fbf94eb097a6841ULL, },
+ { 0x06c9e6ca464484ecULL, 0x61838f28157007d3ULL, },
+ { 0x0791b5936e65c7d8ULL, 0x6a978c3b0d46a893ULL, },
+ { 0x0b5ca2c16d1c8082ULL, 0x84d8b2a628807419ULL, }, /* 96 */
+ { 0x0f3c4ea553ddefbaULL, 0x5d23288204008ac5ULL, },
+ { 0x006066f95bad42d4ULL, 0x7a5e585328976801ULL, },
+ { 0xf610532580647c0eULL, 0xa2551d9f07de4a9aULL, },
+ { 0xf65aca543e1e0beaULL, 0x936bdec820b433d4ULL, },
+ { 0xf66f1d9c4e4a0274ULL, 0x945159553437f0d0ULL, },
+ { 0xf6a34c5265777892ULL, 0x744c4f1e33a0fa19ULL, },
+ { 0xf6e8ae026961c977ULL, 0x679ecf7e36000115ULL, },
+ { 0x13ee44e6654e7066ULL, 0x828c7150244331b9ULL, }, /* 104 */
+ { 0xf787434e16614d78ULL, 0x55caaa201f72a96eULL, },
+ { 0xe4e9b290ecfd62e7ULL, 0x76440870087d3a2cULL, },
+ { 0x065e2c1ac531b8faULL, 0x86cb35600e1a0d9bULL, },
+ { 0x0d00c2eeb7cb8587ULL, 0xa3f3f27b07c3312fULL, },
+ { 0x0d62db84ab6f1a84ULL, 0xd3421106ff7d27d5ULL, },
+ { 0x10143b76893e48fbULL, 0xdf44d938fb177a2fULL, },
+ { 0x1c4ff82055152453ULL, 0xffe7837ceebc407dULL, },
+ };
+
+ 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_DPADD_S_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_DPADD_S_W(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPADD_S_W__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPADD_S_W__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-dot-product/test_msa_dpadd_u_d.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_u_d.c
new file mode 100644
index 0000000000..106dc73d1f
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_u_d.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction DPADD_U.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Dot Product";
+ char *instruction_name = "DPADD_U.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] = {
+ { 0xfffffffc00000002ULL, 0xfffffffc00000002ULL, }, /* 0 */
+ { 0xfffffffc00000002ULL, 0xfffffffc00000002ULL, },
+ { 0x5555554eaaaaaaaeULL, 0x5555554eaaaaaaaeULL, },
+ { 0xfffffff800000004ULL, 0xfffffff800000004ULL, },
+ { 0x9999998e6666666cULL, 0x9999998e6666666cULL, },
+ { 0xfffffff400000006ULL, 0xfffffff400000006ULL, },
+ { 0x71c71c638e38e395ULL, 0x1c71c70de38e38ebULL, },
+ { 0xfffffff000000008ULL, 0xfffffff000000008ULL, },
+ { 0xfffffff000000008ULL, 0xfffffff000000008ULL, }, /* 8 */
+ { 0xfffffff000000008ULL, 0xfffffff000000008ULL, },
+ { 0xfffffff000000008ULL, 0xfffffff000000008ULL, },
+ { 0xfffffff000000008ULL, 0xfffffff000000008ULL, },
+ { 0xfffffff000000008ULL, 0xfffffff000000008ULL, },
+ { 0xfffffff000000008ULL, 0xfffffff000000008ULL, },
+ { 0xfffffff000000008ULL, 0xfffffff000000008ULL, },
+ { 0xfffffff000000008ULL, 0xfffffff000000008ULL, },
+ { 0x55555542aaaaaab4ULL, 0x55555542aaaaaab4ULL, }, /* 16 */
+ { 0x55555542aaaaaab4ULL, 0x55555542aaaaaab4ULL, },
+ { 0x38e38e2471c71c7cULL, 0x38e38e2471c71c7cULL, },
+ { 0xaaaaaa9555555560ULL, 0xaaaaaa9555555560ULL, },
+ { 0xbbbbbba444444450ULL, 0xbbbbbba444444450ULL, },
+ { 0xffffffe80000000cULL, 0xffffffe80000000cULL, },
+ { 0xf684bd87b425ed16ULL, 0xbda12f4e97b425faULL, },
+ { 0x5555553aaaaaaab8ULL, 0x5555553aaaaaaab8ULL, },
+ { 0xffffffe40000000eULL, 0xffffffe40000000eULL, }, /* 24 */
+ { 0xffffffe40000000eULL, 0xffffffe40000000eULL, },
+ { 0x71c71c54e38e38f2ULL, 0x71c71c54e38e38f2ULL, },
+ { 0xaaaaaa8d55555564ULL, 0xaaaaaa8d55555564ULL, },
+ { 0x33333314ccccccdcULL, 0x33333314ccccccdcULL, },
+ { 0x55555536aaaaaabaULL, 0x55555536aaaaaabaULL, },
+ { 0xd097b40684bda13fULL, 0xb425ece9f684bdb1ULL, },
+ { 0xffffffe000000010ULL, 0xffffffe000000010ULL, },
+ { 0x9999997666666678ULL, 0x9999997666666678ULL, }, /* 32 */
+ { 0x9999997666666678ULL, 0x9999997666666678ULL, },
+ { 0xaaaaaa8555555568ULL, 0xaaaaaa8555555568ULL, },
+ { 0x3333330ccccccce0ULL, 0x3333330ccccccce0ULL, },
+ { 0x7ae147851eb85200ULL, 0x7ae147851eb85200ULL, },
+ { 0xcccccca333333348ULL, 0xcccccca333333348ULL, },
+ { 0xf49f49c93e93e954ULL, 0xb05b0584b60b60ccULL, },
+ { 0x66666639999999b0ULL, 0x66666639999999b0ULL, },
+ { 0xcccccc9f3333334aULL, 0xcccccc9f3333334aULL, }, /* 40 */
+ { 0xcccccc9f3333334aULL, 0xcccccc9f3333334aULL, },
+ { 0x111110e2eeeeef06ULL, 0x111110e2eeeeef06ULL, },
+ { 0x33333304cccccce4ULL, 0x33333304cccccce4ULL, },
+ { 0x851eb822e147ae2cULL, 0x851eb822e147ae2cULL, },
+ { 0x9999996a6666667eULL, 0x9999996a6666667eULL, },
+ { 0xe38e38b3e93e9401ULL, 0xd27d27a2c71c71dfULL, },
+ { 0xffffffd000000018ULL, 0xffffffd000000018ULL, },
+ { 0x71c71c3f8e38e3a7ULL, 0x1c71c6e9e38e38fdULL, }, /* 48 */
+ { 0x71c71c3f8e38e3a7ULL, 0x1c71c6e9e38e38fdULL, },
+ { 0x684bd9df425ed0b1ULL, 0xda12f6507b425eebULL, },
+ { 0xe38e38af1c71c736ULL, 0x38e38e03c71c71e2ULL, },
+ { 0x0b60b5d527d27d42ULL, 0x1c71c6e549f49f66ULL, },
+ { 0x5555551eaaaaaac5ULL, 0x5555551daaaaaac7ULL, },
+ { 0x6e9e061a4587e6d2ULL, 0x2c3f35816b74f050ULL, },
+ { 0xc71c718e38e38e54ULL, 0x71c71c378e38e3acULL, },
+ { 0x5555551aaaaaaac7ULL, 0x55555519aaaaaac9ULL, }, /* 56 */
+ { 0x5555551aaaaaaac7ULL, 0x55555519aaaaaac9ULL, },
+ { 0xb425eccda12f6869ULL, 0xed097b05bda12f87ULL, },
+ { 0xe38e38a71c71c73aULL, 0x38e38dfbc71c71e6ULL, },
+ { 0x5555551777777796ULL, 0xeeeeeeb0aaaaaacaULL, },
+ { 0x71c71c338e38e3adULL, 0x1c71c6dde38e3903ULL, },
+ { 0xca4587a781948b2fULL, 0x61f9ad9406522c5fULL, },
+ { 0xffffffc000000020ULL, 0xffffffc000000020ULL, },
+ { 0x4f10a2061266c2b0ULL, 0x132f36fdaebdb734ULL, }, /* 64 */
+ { 0xe173955d0a3d6d94ULL, 0x2de485b19f4dac90ULL, },
+ { 0x5a9b88364205b90cULL, 0xe3c89435af2c3022ULL, },
+ { 0xa5506be1e16f25e8ULL, 0xb5d99e2c137656f2ULL, },
+ { 0x37b35f38d945d0ccULL, 0xd08eece004064c4eULL, },
+ { 0x46c3bc088c276755ULL, 0xd3ba26318bdfb302ULL, },
+ { 0x288f407241d1cf13ULL, 0xe4e2d49bf38e1598ULL, },
+ { 0xb38b871fddd1234aULL, 0xfd7386eef5421908ULL, },
+ { 0x2cb379f915996ec2ULL, 0xb357957305209c9aULL, }, /* 72 */
+ { 0x0e7efe62cb43d680ULL, 0xc48043dd6cceff30ULL, },
+ { 0x0966991866fb9f64ULL, 0x3d26b2ddb9e53ac1ULL, },
+ { 0x9961eeb6d99e4586ULL, 0xc46ae4f9206e6e69ULL, },
+ { 0xe416d2627907b262ULL, 0x967beeef84b89539ULL, },
+ { 0x6f13191015070699ULL, 0xaf0ca142866c98a9ULL, },
+ { 0xff0e6eae87a9acbbULL, 0x3650d35decf5cc51ULL, },
+ { 0x52fc668a5f0acfa8ULL, 0xf4ee28afafeae691ULL, },
+ { 0x8e335693216733a0ULL, 0xebf294e7e1b7da9fULL, }, /* 80 */
+ { 0x242889888a96ab79ULL, 0x1029e138e123d999ULL, },
+ { 0xa117d2200713df49ULL, 0xa936d669733f9d55ULL, },
+ { 0xea5eaf7c9d524d27ULL, 0x533cccdee6d6ad0dULL, },
+ { 0x8014252a44e6c8b7ULL, 0x5139a5a2ff917d2dULL, },
+ { 0x12e82535692eaeadULL, 0x6c74742f3b1a47edULL, },
+ { 0x6bfad303a455af5fULL, 0xa4da8c7753e03c42ULL, },
+ { 0xd7d1673544f2b638ULL, 0x37b76789ca48e5eaULL, },
+ { 0x55b32da89b1ab874ULL, 0x1136a063291c7430ULL, }, /* 88 */
+ { 0xd8fa08f2c6e9500cULL, 0x15e6a0cfa25fce7eULL, },
+ { 0xfb6ec0cb14ee46c0ULL, 0x85e0ab776ca06e87ULL, },
+ { 0x7170744f4e43c44fULL, 0x17ee0476d6f5954fULL, },
+ { 0xba3c379c6c72bc03ULL, 0xf4a9e78f41249a57ULL, },
+ { 0x923c97db1bf9726fULL, 0x0c32ba5fa7655f81ULL, },
+ { 0x08ff0c9a1b07a05dULL, 0x7e05b61db39e9936ULL, },
+ { 0x16e37ad7ce0b9d05ULL, 0x3aa86333e7ca176eULL, },
+ { 0x4396d885c2a89499ULL, 0x3259d55cbbd56e50ULL, }, /* 96 */
+ { 0x86505184e2848fd5ULL, 0xfbe6ef6acb48e5d8ULL, },
+ { 0xf19ecbd2f0d9cb45ULL, 0x102d8886fc3ba2e4ULL, },
+ { 0x985e99073ad19cddULL, 0x0fae6c4a600fe8c8ULL, },
+ { 0x40076fc7eafc7c7aULL, 0x18d0edce69b82b2cULL, },
+ { 0xc633d71b8943703fULL, 0x236de461c55a6368ULL, },
+ { 0xb2b44afd6be31aa8ULL, 0x366f22bc07569aa2ULL, },
+ { 0x832148e5fdab87bfULL, 0x3b138b90c7099132ULL, },
+ { 0x9388b611f0bd2a51ULL, 0xc95a7ba92714878aULL, }, /* 104 */
+ { 0xa598b2d7184dc31bULL, 0x02d31201c0d1f3a9ULL, },
+ { 0x26b9d9c7d27ede61ULL, 0x84305afc61d71edcULL, },
+ { 0xd994c5da2b819a07ULL, 0xda2ed7517c38dd10ULL, },
+ { 0x490b25198d55f4bbULL, 0xa54a7d332b34db68ULL, },
+ { 0x9d17b063519fea3aULL, 0x1d81a65b0c1f8770ULL, },
+ { 0x000b355286100badULL, 0x35e1e113d0b4c238ULL, },
+ { 0x316423fb99a16a0dULL, 0xddbffc10af9e9540ULL, },
+ };
+
+ 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_DPADD_U_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_DPADD_U_D(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPADD_U_D__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPADD_U_D__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-dot-product/test_msa_dpadd_u_h.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_u_h.c
new file mode 100644
index 0000000000..5fae97e907
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_u_h.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction DPADD_U.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Dot Product";
+ char *instruction_name = "DPADD_U.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] = {
+ { 0xfc02fc02fc02fc02ULL, 0xfc02fc02fc02fc02ULL, }, /* 0 */
+ { 0xfc02fc02fc02fc02ULL, 0xfc02fc02fc02fc02ULL, },
+ { 0x4eae4eae4eae4eaeULL, 0x4eae4eae4eae4eaeULL, },
+ { 0xf804f804f804f804ULL, 0xf804f804f804f804ULL, },
+ { 0x8e6c8e6c8e6c8e6cULL, 0x8e6c8e6c8e6c8e6cULL, },
+ { 0xf406f406f406f406ULL, 0xf406f406f406f406ULL, },
+ { 0x63950debb9406395ULL, 0x0debb94063950debULL, },
+ { 0xf008f008f008f008ULL, 0xf008f008f008f008ULL, },
+ { 0xf008f008f008f008ULL, 0xf008f008f008f008ULL, }, /* 8 */
+ { 0xf008f008f008f008ULL, 0xf008f008f008f008ULL, },
+ { 0xf008f008f008f008ULL, 0xf008f008f008f008ULL, },
+ { 0xf008f008f008f008ULL, 0xf008f008f008f008ULL, },
+ { 0xf008f008f008f008ULL, 0xf008f008f008f008ULL, },
+ { 0xf008f008f008f008ULL, 0xf008f008f008f008ULL, },
+ { 0xf008f008f008f008ULL, 0xf008f008f008f008ULL, },
+ { 0xf008f008f008f008ULL, 0xf008f008f008f008ULL, },
+ { 0x42b442b442b442b4ULL, 0x42b442b442b442b4ULL, }, /* 16 */
+ { 0x42b442b442b442b4ULL, 0x42b442b442b442b4ULL, },
+ { 0x247c247c247c247cULL, 0x247c247c247c247cULL, },
+ { 0x9560956095609560ULL, 0x9560956095609560ULL, },
+ { 0xa450a450a450a450ULL, 0xa450a450a450a450ULL, },
+ { 0xe80ce80ce80ce80cULL, 0xe80ce80ce80ce80cULL, },
+ { 0xdd16a3fa6b88dd16ULL, 0xa3fa6b88dd16a3faULL, },
+ { 0x3ab83ab83ab83ab8ULL, 0x3ab83ab83ab83ab8ULL, },
+ { 0xe40ee40ee40ee40eULL, 0xe40ee40ee40ee40eULL, }, /* 24 */
+ { 0xe40ee40ee40ee40eULL, 0xe40ee40ee40ee40eULL, },
+ { 0x54f254f254f254f2ULL, 0x54f254f254f254f2ULL, },
+ { 0x8d648d648d648d64ULL, 0x8d648d648d648d64ULL, },
+ { 0x14dc14dc14dc14dcULL, 0x14dc14dc14dc14dcULL, },
+ { 0x36ba36ba36ba36baULL, 0x36ba36ba36ba36baULL, },
+ { 0xb13f94b17878b13fULL, 0x94b17878b13f94b1ULL, },
+ { 0xe010e010e010e010ULL, 0xe010e010e010e010ULL, },
+ { 0x7678767876787678ULL, 0x7678767876787678ULL, }, /* 32 */
+ { 0x7678767876787678ULL, 0x7678767876787678ULL, },
+ { 0x8568856885688568ULL, 0x8568856885688568ULL, },
+ { 0x0ce00ce00ce00ce0ULL, 0x0ce00ce00ce00ce0ULL, },
+ { 0x5200520052005200ULL, 0x5200520052005200ULL, },
+ { 0xa348a348a348a348ULL, 0xa348a348a348a348ULL, },
+ { 0xc95484cc4110c954ULL, 0x84cc4110c95484ccULL, },
+ { 0x39b039b039b039b0ULL, 0x39b039b039b039b0ULL, },
+ { 0x9f4a9f4a9f4a9f4aULL, 0x9f4a9f4a9f4a9f4aULL, }, /* 40 */
+ { 0x9f4a9f4a9f4a9f4aULL, 0x9f4a9f4a9f4a9f4aULL, },
+ { 0xe306e306e306e306ULL, 0xe306e306e306e306ULL, },
+ { 0x04e404e404e404e4ULL, 0x04e404e404e404e4ULL, },
+ { 0x562c562c562c562cULL, 0x562c562c562c562cULL, },
+ { 0x6a7e6a7e6a7e6a7eULL, 0x6a7e6a7e6a7e6a7eULL, },
+ { 0xb401a2df91f0b401ULL, 0xa2df91f0b401a2dfULL, },
+ { 0xd018d018d018d018ULL, 0xd018d018d018d018ULL, },
+ { 0x3fa7e9fd95523fa7ULL, 0xe9fd95523fa7e9fdULL, }, /* 48 */
+ { 0x3fa7e9fd95523fa7ULL, 0xe9fd95523fa7e9fdULL, },
+ { 0x34b1a5eb18ce34b1ULL, 0xa5eb18ce34b1a5ebULL, },
+ { 0xaf3603e25a8caf36ULL, 0x03e25a8caf3603e2ULL, },
+ { 0xd542e566f854d542ULL, 0xe566f854d542e566ULL, },
+ { 0x1ec51dc71fc61ec5ULL, 0x1dc71fc61ec51dc7ULL, },
+ { 0x36d2f3507aca36d2ULL, 0xf3507aca36d2f350ULL, },
+ { 0x8e5437ace5008e54ULL, 0x37ace5008e5437acULL, },
+ { 0x1ac719c91bc81ac7ULL, 0x19c91bc81ac719c9ULL, }, /* 56 */
+ { 0x1ac719c91bc81ac7ULL, 0x19c91bc81ac719c9ULL, },
+ { 0x7869b087eaf87869ULL, 0xb087eaf87869b087ULL, },
+ { 0xa73afbe65290a73aULL, 0xfbe65290a73afbe6ULL, },
+ { 0x1796b0ca4b301796ULL, 0xb0ca4b301796b0caULL, },
+ { 0x33adde03895833adULL, 0xde03895833adde03ULL, },
+ { 0x8b2f225ff38e8b2fULL, 0x225ff38e8b2f225fULL, },
+ { 0xc020c020c020c020ULL, 0xc020c020c020c020ULL, },
+ { 0x34443154ebe4ec59ULL, 0xff8ae31df73d39b0ULL, }, /* 64 */
+ { 0x084880383032306cULL, 0x6831f4b22a587de0ULL, },
+ { 0x88eca4049c587e93ULL, 0xca865ad6e8ab9840ULL, },
+ { 0xe522f524bdcadd1dULL, 0x54ccaffeb00f3b20ULL, },
+ { 0xb926440802182130ULL, 0xbd73c193e32a7f50ULL, },
+ { 0x3c436a516daabc21ULL, 0xad084cd0f46491a4ULL, },
+ { 0x27b3ac0f1c2c2c2eULL, 0x802ef7580d00b12eULL, },
+ { 0xd025c9d65495de4cULL, 0x729f70a02b1b9712ULL, },
+ { 0x50c9eda2c0bb2c73ULL, 0xd4f4d6c4e96eb172ULL, }, /* 72 */
+ { 0x3c392f606f3d9c80ULL, 0xa81a814c020ad0fcULL, },
+ { 0xcf6d16889c4f27f9ULL, 0x644b18717b7cd7e5ULL, },
+ { 0x3673589e07dcc9afULL, 0x451e58c9f775050fULL, },
+ { 0x92a9a9be294e2839ULL, 0xcf64adf1bed9a7efULL, },
+ { 0x3b1bc78561b7da57ULL, 0xc1d52739dcf48dd3ULL, },
+ { 0xa221099bcd447c0dULL, 0xa2a8679158edbafdULL, },
+ { 0xeb8222a8f9295b55ULL, 0xd3326611d982e681ULL, },
+ { 0x9e2ec7142fc38eccULL, 0x252170b1ef468aadULL, }, /* 80 */
+ { 0x5b3cced0addf038eULL, 0x4792d47b141b612dULL, },
+ { 0xad78e4f4df354c2fULL, 0xcd93f2f8260072b6ULL, },
+ { 0x1e3041f03b3c9d99ULL, 0xc8df44c83f16491aULL, },
+ { 0x42003b965b6cf7faULL, 0x5d309124882a7c82ULL, },
+ { 0x82b67598b4cfbfcbULL, 0x920afeb79da82432ULL, },
+ { 0x1a0a2a0ede448d00ULL, 0xb0b8797422bf2d4eULL, },
+ { 0x288031e03ccc097aULL, 0xbee01b9c6a6f85c8ULL, },
+ { 0x72c0106694442af7ULL, 0x50aa560d08f0ea98ULL, }, /* 88 */
+ { 0x710637d8e7d45355ULL, 0xfa50963144a8cb2cULL, },
+ { 0xbf0eecaa3a2faae6ULL, 0x63e63b048e4cebf3ULL, },
+ { 0x16f03414587a870eULL, 0x72f35dbcffa25349ULL, },
+ { 0x860072bc94eeb761ULL, 0xf61ea6c34a7a8fc5ULL, },
+ { 0x0962bb704a1c48aaULL, 0x245c33d36e927f7fULL, },
+ { 0x31e284ea963ac4c2ULL, 0x77782d72d0929bc6ULL, },
+ { 0x8d10d6a4d868ace6ULL, 0x29fba58a7f86a05cULL, },
+ { 0xde98199821f81f82ULL, 0x9afbdf4d3dea12acULL, }, /* 96 */
+ { 0x9378a92e86104a4dULL, 0x2d160528eade271cULL, },
+ { 0x134065aca120761fULL, 0x431f140f3db4433cULL, },
+ { 0x37d8497ac688a50dULL, 0x63391a6dd0b6741cULL, },
+ { 0x0e1578a8502e25b8ULL, 0xa12e387d0e90b4d4ULL, },
+ { 0x2b65b9a082a8483bULL, 0xd8e26e173326bf2cULL, },
+ { 0xa084f7800a3a820bULL, 0xc220c0c740af27aaULL, },
+ { 0x9f5c29002e8ae771ULL, 0xeea4613d7100db80ULL, },
+ { 0x2a8844debf5e9d5eULL, 0x9d46e906bc7b0527ULL, }, /* 104 */
+ { 0x769006829567219dULL, 0xf041a3364eb808ecULL, },
+ { 0xf87860ea545d8208ULL, 0x4ba95712a1ba1c84ULL, },
+ { 0xc9483d8edc44cc9eULL, 0xe5aeac4a2c832ae0ULL, },
+ { 0x37706d823a10b0daULL, 0x079d461a6b55dbf4ULL, },
+ { 0x72109dfa526c8ea6ULL, 0x9f45813ac7e235caULL, },
+ { 0xa8e0f6aa85343e96ULL, 0x37cdf6b28585e2d4ULL, },
+ { 0x37803ef0bffea306ULL, 0x17150f92ff9c2ed8ULL, },
+ };
+
+ 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_DPADD_U_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_DPADD_U_H(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPADD_U_H__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPADD_U_H__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-dot-product/test_msa_dpadd_u_w.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_u_w.c
new file mode 100644
index 0000000000..2bea9f669b
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpadd_u_w.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction DPADD_U.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Dot Product";
+ char *instruction_name = "DPADD_U.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] = {
+ { 0xfffc0002fffc0002ULL, 0xfffc0002fffc0002ULL, }, /* 0 */
+ { 0xfffc0002fffc0002ULL, 0xfffc0002fffc0002ULL, },
+ { 0x554eaaae554eaaaeULL, 0x554eaaae554eaaaeULL, },
+ { 0xfff80004fff80004ULL, 0xfff80004fff80004ULL, },
+ { 0x998e666c998e666cULL, 0x998e666c998e666cULL, },
+ { 0xfff40006fff40006ULL, 0xfff40006fff40006ULL, },
+ { 0x1c63e39571b88e40ULL, 0xc70e38eb1c63e395ULL, },
+ { 0xfff00008fff00008ULL, 0xfff00008fff00008ULL, },
+ { 0xfff00008fff00008ULL, 0xfff00008fff00008ULL, }, /* 8 */
+ { 0xfff00008fff00008ULL, 0xfff00008fff00008ULL, },
+ { 0xfff00008fff00008ULL, 0xfff00008fff00008ULL, },
+ { 0xfff00008fff00008ULL, 0xfff00008fff00008ULL, },
+ { 0xfff00008fff00008ULL, 0xfff00008fff00008ULL, },
+ { 0xfff00008fff00008ULL, 0xfff00008fff00008ULL, },
+ { 0xfff00008fff00008ULL, 0xfff00008fff00008ULL, },
+ { 0xfff00008fff00008ULL, 0xfff00008fff00008ULL, },
+ { 0x5542aab45542aab4ULL, 0x5542aab45542aab4ULL, }, /* 16 */
+ { 0x5542aab45542aab4ULL, 0x5542aab45542aab4ULL, },
+ { 0x38cf1c7c38cf1c7cULL, 0x38cf1c7c38cf1c7cULL, },
+ { 0xaa955560aa955560ULL, 0xaa955560aa955560ULL, },
+ { 0xbba44450bba44450ULL, 0xbba44450bba44450ULL, },
+ { 0xffe8000cffe8000cULL, 0xffe8000cffe8000cULL, },
+ { 0xbd87ed16f66b0988ULL, 0x84a425fabd87ed16ULL, },
+ { 0x553aaab8553aaab8ULL, 0x553aaab8553aaab8ULL, },
+ { 0xffe4000effe4000eULL, 0xffe4000effe4000eULL, }, /* 24 */
+ { 0xffe4000effe4000eULL, 0xffe4000effe4000eULL, },
+ { 0x71aa38f271aa38f2ULL, 0x71aa38f271aa38f2ULL, },
+ { 0xaa8d5564aa8d5564ULL, 0xaa8d5564aa8d5564ULL, },
+ { 0x3314ccdc3314ccdcULL, 0x3314ccdc3314ccdcULL, },
+ { 0x5536aaba5536aabaULL, 0x5536aaba5536aabaULL, },
+ { 0xb406a13fd0782f78ULL, 0x9794bdb1b406a13fULL, },
+ { 0xffe00010ffe00010ULL, 0xffe00010ffe00010ULL, },
+ { 0x9976667899766678ULL, 0x9976667899766678ULL, }, /* 32 */
+ { 0x9976667899766678ULL, 0x9976667899766678ULL, },
+ { 0xaa855568aa855568ULL, 0xaa855568aa855568ULL, },
+ { 0x330ccce0330ccce0ULL, 0x330ccce0330ccce0ULL, },
+ { 0x7ab852007ab85200ULL, 0x7ab852007ab85200ULL, },
+ { 0xcca33348cca33348ULL, 0xcca33348cca33348ULL, },
+ { 0xb02fe954f473a510ULL, 0x6beb60ccb02fe954ULL, },
+ { 0x663999b0663999b0ULL, 0x663999b0663999b0ULL, },
+ { 0xcc9f334acc9f334aULL, 0xcc9f334acc9f334aULL, }, /* 40 */
+ { 0xcc9f334acc9f334aULL, 0xcc9f334acc9f334aULL, },
+ { 0x10e2ef0610e2ef06ULL, 0x10e2ef0610e2ef06ULL, },
+ { 0x3304cce43304cce4ULL, 0x3304cce43304cce4ULL, },
+ { 0x84efae2c84efae2cULL, 0x84efae2c84efae2cULL, },
+ { 0x996a667e996a667eULL, 0x996a667e996a667eULL, },
+ { 0xd24d9401e35e82f0ULL, 0xc13c71dfd24d9401ULL, },
+ { 0xffd00018ffd00018ULL, 0xffd00018ffd00018ULL, },
+ { 0x1c3fe3a771948e52ULL, 0xc6ea38fd1c3fe3a7ULL, }, /* 48 */
+ { 0x1c3fe3a771948e52ULL, 0xc6ea38fd1c3fe3a7ULL, },
+ { 0xd9dfd0b1681797ceULL, 0x4ba65eebd9dfd0b1ULL, },
+ { 0x38afc736e3591c8cULL, 0x8e0471e238afc736ULL, },
+ { 0x1c3c7d420b298e54ULL, 0x2d4c9f661c3c7d42ULL, },
+ { 0x551faac5551daac6ULL, 0x551eaac7551faac5ULL, },
+ { 0x2c08e6d26e64f9caULL, 0xb0c4f0502c08e6d2ULL, },
+ { 0x718f8e54c6e23900ULL, 0x1c38e3ac718f8e54ULL, },
+ { 0x551baac75519aac8ULL, 0x551aaac9551baac7ULL, }, /* 56 */
+ { 0x551baac75519aac8ULL, 0x551aaac9551baac7ULL, },
+ { 0xecce6869b3e94bf8ULL, 0x25b12f87ecce6869ULL, },
+ { 0x38a7c73ae3511c90ULL, 0x8dfc71e638a7c73aULL, },
+ { 0xeeb1779655171130ULL, 0x884aaacaeeb17796ULL, },
+ { 0x1c33e3ad71888e58ULL, 0xc6de39031c33e3adULL, },
+ { 0x61ba8b2fca05cd8eULL, 0x32522c5f61ba8b2fULL, },
+ { 0xffc00020ffc00020ULL, 0xffc00020ffc00020ULL, },
+ { 0x1883fe94228255a4ULL, 0x1676ba1575c8cfc9ULL, }, /* 64 */
+ { 0x9f026c24710669eaULL, 0x245b8a02c3f8aadeULL, },
+ { 0x985184e0bcca4328ULL, 0x38ede08c879f0f77ULL, },
+ { 0xe844f0f21702736aULL, 0x68d01ed3cbb87dadULL, },
+ { 0x6ec35e82658687b0ULL, 0x76b4eec019e858c2ULL, },
+ { 0x6651a5cf17c5ba59ULL, 0x00db97b536922653ULL, },
+ { 0x10115a59bc888b36ULL, 0x953fb40350cbb498ULL, },
+ { 0x7e8ac9c2890512c9ULL, 0x03c7477aa84e1b56ULL, },
+ { 0x77d9e27ed4c8ec07ULL, 0x18599e046bf47fefULL, }, /* 72 */
+ { 0x21999708798bbce4ULL, 0xacbdba52862e0e34ULL, },
+ { 0x0cce2f904c6cd245ULL, 0x4da0b293fdff50fdULL, },
+ { 0x67a1e4780c1be5e4ULL, 0xce178c138ffda993ULL, },
+ { 0xb795508a66541626ULL, 0xfdf9ca5ad41717c9ULL, },
+ { 0x260ebff332d09db9ULL, 0x6c815dd12b997e87ULL, },
+ { 0x80e274dbf27fb158ULL, 0xecf83751bd97d71dULL, },
+ { 0xb4190065dd35867dULL, 0x84d1ca72f61ef021ULL, },
+ { 0x146be93b2ce39d07ULL, 0xb4edb1658fe8e617ULL, }, /* 80 */
+ { 0x28da2b76b4930398ULL, 0x43fbb752e67034d3ULL, },
+ { 0x6202107639989575ULL, 0xdd1056c8882a591fULL, },
+ { 0x8e704692d2e83f33ULL, 0x8605bb9831163f53ULL, },
+ { 0x19f6294a0938f7c3ULL, 0xb5d3886b8d6db0c9ULL, },
+ { 0x338d977ccca46e03ULL, 0x26ffd0ded278d778ULL, },
+ { 0xbd9d53669d1f0d1fULL, 0xcf6d52287e678700ULL, },
+ { 0x18106087e287df80ULL, 0x6e5a3285497c7c8eULL, },
+ { 0x7be90cbb50b10f2eULL, 0x91193a91e83049caULL, }, /* 88 */
+ { 0xf5c762fa74f1dd41ULL, 0xc6a6d96a1360b472ULL, },
+ { 0xdec724f4426380a0ULL, 0x8e924c103a77a87aULL, },
+ { 0x43bb09c1cc850053ULL, 0x06479b02f6444a68ULL, },
+ { 0x709d98fbece3b6fdULL, 0x0f02ef4f1e3d11f4ULL, },
+ { 0xdf964592c2f0673eULL, 0xbf06914326915827ULL, },
+ { 0xa595174288afc04eULL, 0x4dac2c104d1f338eULL, },
+ { 0xf0400b1764f99f91ULL, 0x904ab47cadc0214cULL, },
+ { 0x7a4505ebaa0a3823ULL, 0xc2ce09ca715dec1cULL, }, /* 96 */
+ { 0xc0c227c1d78e87b7ULL, 0xfc9e0ad8846cfb1bULL, },
+ { 0x4b501be126c0ecd3ULL, 0x47813bbab4be1843ULL, },
+ { 0x8c94284d7bbb0613ULL, 0x5f37b7ed7918a6b1ULL, },
+ { 0x16e12feca5f2470cULL, 0xecb24110b92e33d5ULL, },
+ { 0x2d734e2e0f77e762ULL, 0x2dc8706ed959cbd3ULL, },
+ { 0x5a430652c80bfcc7ULL, 0x835871922d75cf6eULL, },
+ { 0xb30826c2c930c150ULL, 0xe0148a4e74790481ULL, },
+ { 0x46021066c48e3720ULL, 0x6e76bee0c30066e8ULL, }, /* 104 */
+ { 0x80543cd67141b3f2ULL, 0x14074d905449ba08ULL, },
+ { 0x003ba47a25839f81ULL, 0x536fe6e8a79655ebULL, },
+ { 0x709b823c97a86aeeULL, 0x13e9a6a824155b79ULL, },
+ { 0xad5a661d2dfbd29aULL, 0x780997c18cea8383ULL, },
+ { 0x024c799cf912e891ULL, 0x0bb620125e8129b7ULL, },
+ { 0x0de66afc224e0f31ULL, 0x23590398c1ea5059ULL, },
+ { 0x1d512ac23c5b270dULL, 0x38de17a18940924dULL, },
+ };
+
+ 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_DPADD_U_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_DPADD_U_W(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPADD_U_W__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPADD_U_W__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-dot-product/test_msa_dpsub_s_d.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_s_d.c
new file mode 100644
index 0000000000..560e29a248
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_s_d.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction DPSUB_S.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Dot Product";
+ char *instruction_name = "DPSUB_S.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] = {
+ { 0xfffffffffffffffeULL, 0xfffffffffffffffeULL, }, /* 0 */
+ { 0xfffffffffffffffeULL, 0xfffffffffffffffeULL, },
+ { 0xffffffff55555552ULL, 0xffffffff55555552ULL, },
+ { 0xfffffffffffffffcULL, 0xfffffffffffffffcULL, },
+ { 0xffffffff99999994ULL, 0xffffffff99999994ULL, },
+ { 0xfffffffffffffffaULL, 0xfffffffffffffffaULL, },
+ { 0xffffffff71c71c6bULL, 0x000000001c71c715ULL, },
+ { 0xfffffffffffffff8ULL, 0xfffffffffffffff8ULL, },
+ { 0xfffffffffffffff8ULL, 0xfffffffffffffff8ULL, }, /* 8 */
+ { 0xfffffffffffffff8ULL, 0xfffffffffffffff8ULL, },
+ { 0xfffffffffffffff8ULL, 0xfffffffffffffff8ULL, },
+ { 0xfffffffffffffff8ULL, 0xfffffffffffffff8ULL, },
+ { 0xfffffffffffffff8ULL, 0xfffffffffffffff8ULL, },
+ { 0xfffffffffffffff8ULL, 0xfffffffffffffff8ULL, },
+ { 0xfffffffffffffff8ULL, 0xfffffffffffffff8ULL, },
+ { 0xfffffffffffffff8ULL, 0xfffffffffffffff8ULL, },
+ { 0xffffffff5555554cULL, 0xffffffff5555554cULL, }, /* 16 */
+ { 0xffffffff5555554cULL, 0xffffffff5555554cULL, },
+ { 0xc71c71c58e38e384ULL, 0xc71c71c58e38e384ULL, },
+ { 0xfffffffeaaaaaaa0ULL, 0xfffffffeaaaaaaa0ULL, },
+ { 0xdddddddbbbbbbbb0ULL, 0xdddddddbbbbbbbb0ULL, },
+ { 0xfffffffdfffffff4ULL, 0xfffffffdfffffff4ULL, },
+ { 0xd097b4234bda12eaULL, 0x097b425c684bda06ULL, },
+ { 0xfffffffd55555548ULL, 0xfffffffd55555548ULL, },
+ { 0xfffffffdfffffff2ULL, 0xfffffffdfffffff2ULL, }, /* 24 */
+ { 0xfffffffdfffffff2ULL, 0xfffffffdfffffff2ULL, },
+ { 0x38e38e371c71c70eULL, 0x38e38e371c71c70eULL, },
+ { 0xfffffffeaaaaaa9cULL, 0xfffffffeaaaaaa9cULL, },
+ { 0x2222222133333324ULL, 0x2222222133333324ULL, },
+ { 0xffffffff55555546ULL, 0xffffffff55555546ULL, },
+ { 0x2f684bd97b425ec1ULL, 0xf684bda1097b424fULL, },
+ { 0xfffffffffffffff0ULL, 0xfffffffffffffff0ULL, },
+ { 0xffffffff99999988ULL, 0xffffffff99999988ULL, }, /* 32 */
+ { 0xffffffff99999988ULL, 0xffffffff99999988ULL, },
+ { 0xdddddddcaaaaaa98ULL, 0xdddddddcaaaaaa98ULL, },
+ { 0xffffffff33333320ULL, 0xffffffff33333320ULL, },
+ { 0xeb851eb6e147ae00ULL, 0xeb851eb6e147ae00ULL, },
+ { 0xfffffffeccccccb8ULL, 0xfffffffeccccccb8ULL, },
+ { 0xe38e38e1c16c16acULL, 0x05b05b0449f49f34ULL, },
+ { 0xfffffffe66666650ULL, 0xfffffffe66666650ULL, },
+ { 0xfffffffeccccccb6ULL, 0xfffffffeccccccb6ULL, }, /* 40 */
+ { 0xfffffffeccccccb6ULL, 0xfffffffeccccccb6ULL, },
+ { 0x22222221111110faULL, 0x22222221111110faULL, },
+ { 0xffffffff3333331cULL, 0xffffffff3333331cULL, },
+ { 0x147ae1471eb851d4ULL, 0x147ae1471eb851d4ULL, },
+ { 0xffffffff99999982ULL, 0xffffffff99999982ULL, },
+ { 0x1c71c71c16c16bffULL, 0xfa4fa4fa38e38e21ULL, },
+ { 0xffffffffffffffe8ULL, 0xffffffffffffffe8ULL, },
+ { 0xffffffff71c71c59ULL, 0x000000001c71c703ULL, }, /* 48 */
+ { 0xffffffff71c71c59ULL, 0x000000001c71c703ULL, },
+ { 0xd097b424bda12f4fULL, 0x097b425e84bda115ULL, },
+ { 0xfffffffee38e38caULL, 0x0000000038e38e1eULL, },
+ { 0xe38e38e1d82d82beULL, 0x05b05b05b60b609aULL, },
+ { 0xfffffffe5555553bULL, 0x0000000055555539ULL, },
+ { 0xca4587e4ba78192eULL, 0xf0329162948b0fb0ULL, },
+ { 0xfffffffdc71c71acULL, 0x0000000071c71c54ULL, },
+ { 0xfffffffe55555539ULL, 0x0000000055555537ULL, }, /* 56 */
+ { 0xfffffffe55555539ULL, 0x0000000055555537ULL, },
+ { 0x2f684bd85ed09797ULL, 0xf684bda1425ed079ULL, },
+ { 0xfffffffee38e38c6ULL, 0x0000000038e38e1aULL, },
+ { 0x1c71c71b8888886aULL, 0xfa4fa4fa55555536ULL, },
+ { 0xffffffff71c71c53ULL, 0x000000001c71c6fdULL, },
+ { 0x35ba78187e6b74d1ULL, 0x0fcd6e9df9add3a1ULL, },
+ { 0xffffffffffffffe0ULL, 0xffffffffffffffe0ULL, },
+ { 0xc1c52b51ed993d50ULL, 0xe9c828da514248ccULL, }, /* 64 */
+ { 0xb38b1f29f5c2926cULL, 0xe4522d2260b25370ULL, },
+ { 0x978b1706bdfa46f4ULL, 0xd814f3be50d3cfdeULL, },
+ { 0xbd2549a81e90da18ULL, 0xf92987d1ec89a90eULL, },
+ { 0xaeeb3d8026ba2f34ULL, 0xf3b38c19fbf9b3b2ULL, },
+ { 0x9756e17673d898abULL, 0xf08852c874204cfeULL, },
+ { 0xab37d321be2e30edULL, 0xf49ef75a0c71ea68ULL, },
+ { 0x908aa2c1222edcb6ULL, 0x0445531d0abde6f8ULL, },
+ { 0x748a9a9dea66913eULL, 0xf80819b8fadf6366ULL, }, /* 72 */
+ { 0x886b8c4934bc2980ULL, 0xfc1ebe4a933100d0ULL, },
+ { 0x59d865e79904609cULL, 0xd9ce9972461ac53fULL, },
+ { 0x985e08e42661ba7aULL, 0xced13609df919197ULL, },
+ { 0xbdf83b8586f84d9eULL, 0xefe5ca1d7b476ac7ULL, },
+ { 0xa34b0b24eaf8f967ULL, 0xff8c25e079936757ULL, },
+ { 0xe1d0ae2178565345ULL, 0xf48ec278130a33afULL, },
+ { 0x8de2b645a0f53058ULL, 0xa45a44165015196fULL, },
+ { 0x6792d4f3d7eea55cULL, 0xbfd22ee1a25aa627ULL, }, /* 80 */
+ { 0x75702d5b9af89c83ULL, 0xcc593d1da09f7be9ULL, },
+ { 0x801c3e1c97724195ULL, 0xb4c868d4067dd2d2ULL, },
+ { 0xdeafd0d6f0bea5c3ULL, 0x957877eb733b98b2ULL, },
+ { 0xd1883629f50ec77bULL, 0xb587d85cf1ffef10ULL, },
+ { 0xd4133b37d7cbfcc8ULL, 0xbc35d373b6f24df8ULL, },
+ { 0xbab344ed957a4c42ULL, 0xae8dcb499ce6cd0bULL, },
+ { 0x004c193eb947b2ddULL, 0x68b0a9907b71a293ULL, },
+ { 0x0b979b74995fc935ULL, 0x4a9602f12aa080cfULL, }, /* 88 */
+ { 0x2ae2653846d12eb1ULL, 0x4185939a2d850f91ULL, },
+ { 0x4c5017cc0eed7401ULL, 0x466840b4575dc0d7ULL, },
+ { 0x255760c7e1e38957ULL, 0x8360b1037a4f3497ULL, },
+ { 0x3b88c1c3a41f6803ULL, 0xa8cf0d07b592cd69ULL, },
+ { 0x585dd51272f3e482ULL, 0xb5723c3756218857ULL, },
+ { 0x94c1c43b5f5b538eULL, 0xdd9794c5786cc9c2ULL, },
+ { 0xa0b80278cc3c6a8bULL, 0xf710a53506ea3e4aULL, },
+ { 0x7c607ecd0201d92bULL, 0xf9bcdab0e105825cULL, }, /* 96 */
+ { 0xb628bad7d2470e0fULL, 0xfb660e974362496cULL, },
+ { 0x9ae11df599c281fbULL, 0xfd2738784b8dbfeaULL, },
+ { 0x7bc5bf3b5e23aeffULL, 0xfe707ab5676dfce2ULL, },
+ { 0x614dabb2dc4e0a36ULL, 0xf5f8795b76d8fd08ULL, },
+ { 0x6dbd1a209fc658b0ULL, 0xecd982bc128c8ceaULL, },
+ { 0x8cb93c5d61b1a8d0ULL, 0xecbaa1839f7e477aULL, },
+ { 0x6d33947e52d25a59ULL, 0xf62aab8428f0bf14ULL, },
+ { 0xa7970469e4259b2dULL, 0x0543881aad9efd08ULL, }, /* 104 */
+ { 0x8310e5e55f8149f3ULL, 0xe925758a04d06282ULL, },
+ { 0x746e208dd13c0f61ULL, 0xee4c7bccbccd15e4ULL, },
+ { 0x8da69743b598403fULL, 0xdac93db8514253e0ULL, },
+ { 0xdb31a0aea0a5cde6ULL, 0xe5bd105b853454a0ULL, },
+ { 0x0e6cfc3a89e7bd7cULL, 0xb06ea3bad3a90bd8ULL, },
+ { 0x338cc47438edb042ULL, 0x7df572596f6dffe8ULL, },
+ { 0x07fce3091840a942ULL, 0xdbd5224936527bd0ULL, },
+ };
+
+ 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_DPSUB_S_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_DPSUB_S_D(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPSUB_S_D__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPSUB_S_D__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-dot-product/test_msa_dpsub_s_h.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_s_h.c
new file mode 100644
index 0000000000..3fb88ab5c2
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_s_h.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction DPSUB_S.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Dot Product";
+ char *instruction_name = "DPSUB_S.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] = {
+ { 0xfffefffefffefffeULL, 0xfffefffefffefffeULL, }, /* 0 */
+ { 0xfffefffefffefffeULL, 0xfffefffefffefffeULL, },
+ { 0xff52ff52ff52ff52ULL, 0xff52ff52ff52ff52ULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xff94ff94ff94ff94ULL, 0xff94ff94ff94ff94ULL, },
+ { 0xfffafffafffafffaULL, 0xfffafffafffafffaULL, },
+ { 0xff6b0015ffc0ff6bULL, 0x0015ffc0ff6b0015ULL, },
+ { 0xfff8fff8fff8fff8ULL, 0xfff8fff8fff8fff8ULL, },
+ { 0xfff8fff8fff8fff8ULL, 0xfff8fff8fff8fff8ULL, }, /* 8 */
+ { 0xfff8fff8fff8fff8ULL, 0xfff8fff8fff8fff8ULL, },
+ { 0xfff8fff8fff8fff8ULL, 0xfff8fff8fff8fff8ULL, },
+ { 0xfff8fff8fff8fff8ULL, 0xfff8fff8fff8fff8ULL, },
+ { 0xfff8fff8fff8fff8ULL, 0xfff8fff8fff8fff8ULL, },
+ { 0xfff8fff8fff8fff8ULL, 0xfff8fff8fff8fff8ULL, },
+ { 0xfff8fff8fff8fff8ULL, 0xfff8fff8fff8fff8ULL, },
+ { 0xfff8fff8fff8fff8ULL, 0xfff8fff8fff8fff8ULL, },
+ { 0xff4cff4cff4cff4cULL, 0xff4cff4cff4cff4cULL, }, /* 16 */
+ { 0xff4cff4cff4cff4cULL, 0xff4cff4cff4cff4cULL, },
+ { 0xc584c584c584c584ULL, 0xc584c584c584c584ULL, },
+ { 0xfea0fea0fea0fea0ULL, 0xfea0fea0fea0fea0ULL, },
+ { 0xdbb0dbb0dbb0dbb0ULL, 0xdbb0dbb0dbb0dbb0ULL, },
+ { 0xfdf4fdf4fdf4fdf4ULL, 0xfdf4fdf4fdf4fdf4ULL, },
+ { 0xcdea0706ea78cdeaULL, 0x0706ea78cdea0706ULL, },
+ { 0xfd48fd48fd48fd48ULL, 0xfd48fd48fd48fd48ULL, },
+ { 0xfdf2fdf2fdf2fdf2ULL, 0xfdf2fdf2fdf2fdf2ULL, }, /* 24 */
+ { 0xfdf2fdf2fdf2fdf2ULL, 0xfdf2fdf2fdf2fdf2ULL, },
+ { 0x370e370e370e370eULL, 0x370e370e370e370eULL, },
+ { 0xfe9cfe9cfe9cfe9cULL, 0xfe9cfe9cfe9cfe9cULL, },
+ { 0x2124212421242124ULL, 0x2124212421242124ULL, },
+ { 0xff46ff46ff46ff46ULL, 0xff46ff46ff46ff46ULL, },
+ { 0x2ec1f64f12882ec1ULL, 0xf64f12882ec1f64fULL, },
+ { 0xfff0fff0fff0fff0ULL, 0xfff0fff0fff0fff0ULL, },
+ { 0xff88ff88ff88ff88ULL, 0xff88ff88ff88ff88ULL, }, /* 32 */
+ { 0xff88ff88ff88ff88ULL, 0xff88ff88ff88ff88ULL, },
+ { 0xdc98dc98dc98dc98ULL, 0xdc98dc98dc98dc98ULL, },
+ { 0xff20ff20ff20ff20ULL, 0xff20ff20ff20ff20ULL, },
+ { 0xea00ea00ea00ea00ULL, 0xea00ea00ea00ea00ULL, },
+ { 0xfeb8feb8feb8feb8ULL, 0xfeb8feb8feb8feb8ULL, },
+ { 0xe1ac0434f2f0e1acULL, 0x0434f2f0e1ac0434ULL, },
+ { 0xfe50fe50fe50fe50ULL, 0xfe50fe50fe50fe50ULL, },
+ { 0xfeb6feb6feb6feb6ULL, 0xfeb6feb6feb6feb6ULL, }, /* 40 */
+ { 0xfeb6feb6feb6feb6ULL, 0xfeb6feb6feb6feb6ULL, },
+ { 0x20fa20fa20fa20faULL, 0x20fa20fa20fa20faULL, },
+ { 0xff1cff1cff1cff1cULL, 0xff1cff1cff1cff1cULL, },
+ { 0x13d413d413d413d4ULL, 0x13d413d413d413d4ULL, },
+ { 0xff82ff82ff82ff82ULL, 0xff82ff82ff82ff82ULL, },
+ { 0x1bfffa210b101bffULL, 0xfa210b101bfffa21ULL, },
+ { 0xffe8ffe8ffe8ffe8ULL, 0xffe8ffe8ffe8ffe8ULL, },
+ { 0xff590003ffaeff59ULL, 0x0003ffaeff590003ULL, }, /* 48 */
+ { 0xff590003ffaeff59ULL, 0x0003ffaeff590003ULL, },
+ { 0xcf4f0915ec32cf4fULL, 0x0915ec32cf4f0915ULL, },
+ { 0xfeca001eff74fecaULL, 0x001eff74feca001eULL, },
+ { 0xe1be059af3ace1beULL, 0x059af3ace1be059aULL, },
+ { 0xfe3b0039ff3afe3bULL, 0x0039ff3afe3b0039ULL, },
+ { 0xc82ef0b0c036c82eULL, 0xf0b0c036c82ef0b0ULL, },
+ { 0xfdac0054ff00fdacULL, 0x0054ff00fdac0054ULL, },
+ { 0xfe390037ff38fe39ULL, 0x0037ff38fe390037ULL, }, /* 56 */
+ { 0xfe390037ff38fe39ULL, 0x0037ff38fe390037ULL, },
+ { 0x2d97f67912082d97ULL, 0xf67912082d97f679ULL, },
+ { 0xfec6001aff70fec6ULL, 0x001aff70fec6001aULL, },
+ { 0x1b6afa360ad01b6aULL, 0xfa360ad01b6afa36ULL, },
+ { 0xff53fffdffa8ff53ULL, 0xfffdffa8ff53fffdULL, },
+ { 0x34d10fa13e7234d1ULL, 0x0fa13e7234d10fa1ULL, },
+ { 0xffe0ffe0ffe0ffe0ULL, 0xffe0ffe0ffe0ffe0ULL, },
+ { 0x9bbcf2acd41cd3a7ULL, 0xc076dce3c4c3e650ULL, }, /* 64 */
+ { 0xb4b806c8f1cee494ULL, 0xbecfd64ea6a80020ULL, },
+ { 0x6814ecfc0fa82b6dULL, 0xc37ad92a91550ac0ULL, },
+ { 0x7bdefedcee3621e3ULL, 0xeb34ed0270f105e0ULL, },
+ { 0x94da12f80be832d0ULL, 0xe98de66d52d61fb0ULL, },
+ { 0x83bdecafc65625dfULL, 0xe7f8d130419c055cULL, },
+ { 0x994d0df1c6d40fd2ULL, 0xe3d2c1a83e00f9d2ULL, },
+ { 0xafdbf02abf6b06b4ULL, 0xeb61a56034e501eeULL, },
+ { 0x6337d65edd454d8dULL, 0xf00ca83c1f920c8eULL, }, /* 72 */
+ { 0x78c7f7a0ddc33780ULL, 0xebe698b41bf60104ULL, },
+ { 0x3d93c078c0b1c207ULL, 0xdfb58b8ff884fa1bULL, },
+ { 0x468de162e424db51ULL, 0xeee27037d08b05f1ULL, },
+ { 0x5a57f342c2b2d1c7ULL, 0x169c840fb0270111ULL, },
+ { 0x70e5d57bbb49c8a9ULL, 0x1e2b67c7a70c092dULL, },
+ { 0x79dff665debce1f3ULL, 0x2d584c6f7f131503ULL, },
+ { 0x307edd58b2d7c6abULL, 0xf8ce0def507eed7fULL, },
+ { 0x12d2ebaaceb9ef2dULL, 0x0f44139e1494e19bULL, }, /* 80 */
+ { 0x07500cecbf88e9fcULL, 0x109a22b12d84e9f5ULL, },
+ { 0xed7c0a0c9689dd79ULL, 0xfe3a2a165149ee24ULL, },
+ { 0xcf880594d43cb481ULL, 0x00ba413659fef988ULL, },
+ { 0xea40f026c424ed7dULL, 0x1ce42a975ba6fcf8ULL, },
+ { 0xfa52e174e584e55aULL, 0x19f040936a55fe20ULL, },
+ { 0xdb86fe7ec64b0603ULL, 0x13a14ea67f40fbeaULL, },
+ { 0x115cd8c4cd3c05cdULL, 0x1699652699e9f314ULL, },
+ { 0xf33cc884be3c10e4ULL, 0x399852dba428ee14ULL, }, /* 88 */
+ { 0x0273f878eba21554ULL, 0x31ee6cb7a1dcf428ULL, },
+ { 0xdaad1e38d3d148edULL, 0x27a784e6885df2c4ULL, },
+ { 0x04ea0acced565727ULL, 0x33f546b6479bdaa0ULL, },
+ { 0x0fe60140cf623084ULL, 0x29715ee078b0d340ULL, },
+ { 0x097de88007d93f14ULL, 0x2a887b768288e2aaULL, },
+ { 0xe07fb5d0025365dfULL, 0x116297ca6cdaedb8ULL, },
+ { 0xc74ecab2f1b47bc3ULL, 0x1ec35e229b5ad07eULL, },
+ { 0x8c4ab55e1124622cULL, 0x2e844d9c6f52bb96ULL, }, /* 96 */
+ { 0x3746c0d800b436a2ULL, 0x52ee6f0548caaafeULL, },
+ { 0x3412b2381dcc3c34ULL, 0x4226686a634c9036ULL, },
+ { 0x44feb5ac2d2c1b48ULL, 0x1f863d063f8e6aaeULL, },
+ { 0x45ced628325f1f0bULL, 0x190e4cdb56714772ULL, },
+ { 0x3a43c6b04bc8259aULL, 0x17ca65193394327cULL, },
+ { 0x4cabe5a01d613107ULL, 0x14467dc849f92468ULL, },
+ { 0x383d0ac03df53bb8ULL, 0x1554a52945b51a80ULL, },
+ { 0x352bf8744cc532afULL, 0x1f4190b4693720beULL, }, /* 104 */
+ { 0x37711cdc568e2109ULL, 0x24b0770882d72146ULL, },
+ { 0x21c319bc5896349eULL, 0x12b492065fe41709ULL, },
+ { 0x42090ae65cb41b62ULL, 0x0416792084231302ULL, },
+ { 0x226211dc497800b0ULL, 0x072cb6d850f915fcULL, },
+ { 0xf5441b3a17b21910ULL, 0x0ce58de86df716f2ULL, },
+ { 0xe51807761e2e171eULL, 0x10b4544095541446ULL, },
+ { 0xe980e35e0a5c10acULL, 0x137085a05b4f30deULL, },
+ };
+
+ 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_DPSUB_S_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_DPSUB_S_H(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPSUB_S_H__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPSUB_S_H__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-dot-product/test_msa_dpsub_s_w.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_s_w.c
new file mode 100644
index 0000000000..b95878b67b
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_s_w.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction DPSUB_S.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Dot Product";
+ char *instruction_name = "DPSUB_S.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] = {
+ { 0xfffffffefffffffeULL, 0xfffffffefffffffeULL, }, /* 0 */
+ { 0xfffffffefffffffeULL, 0xfffffffefffffffeULL, },
+ { 0xffff5552ffff5552ULL, 0xffff5552ffff5552ULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xffff9994ffff9994ULL, 0xffff9994ffff9994ULL, },
+ { 0xfffffffafffffffaULL, 0xfffffffafffffffaULL, },
+ { 0x00001c6bffff71c0ULL, 0xffffc71500001c6bULL, },
+ { 0xfffffff8fffffff8ULL, 0xfffffff8fffffff8ULL, },
+ { 0xfffffff8fffffff8ULL, 0xfffffff8fffffff8ULL, }, /* 8 */
+ { 0xfffffff8fffffff8ULL, 0xfffffff8fffffff8ULL, },
+ { 0xfffffff8fffffff8ULL, 0xfffffff8fffffff8ULL, },
+ { 0xfffffff8fffffff8ULL, 0xfffffff8fffffff8ULL, },
+ { 0xfffffff8fffffff8ULL, 0xfffffff8fffffff8ULL, },
+ { 0xfffffff8fffffff8ULL, 0xfffffff8fffffff8ULL, },
+ { 0xfffffff8fffffff8ULL, 0xfffffff8fffffff8ULL, },
+ { 0xfffffff8fffffff8ULL, 0xfffffff8fffffff8ULL, },
+ { 0xffff554cffff554cULL, 0xffff554cffff554cULL, }, /* 16 */
+ { 0xffff554cffff554cULL, 0xffff554cffff554cULL, },
+ { 0xc71ae384c71ae384ULL, 0xc71ae384c71ae384ULL, },
+ { 0xfffeaaa0fffeaaa0ULL, 0xfffeaaa0fffeaaa0ULL, },
+ { 0xdddbbbb0dddbbbb0ULL, 0xdddbbbb0dddbbbb0ULL, },
+ { 0xfffdfff4fffdfff4ULL, 0xfffdfff4fffdfff4ULL, },
+ { 0x097912ead094f678ULL, 0xed06da06097912eaULL, },
+ { 0xfffd5548fffd5548ULL, 0xfffd5548fffd5548ULL, },
+ { 0xfffdfff2fffdfff2ULL, 0xfffdfff2fffdfff2ULL, }, /* 24 */
+ { 0xfffdfff2fffdfff2ULL, 0xfffdfff2fffdfff2ULL, },
+ { 0x38e1c70e38e1c70eULL, 0x38e1c70e38e1c70eULL, },
+ { 0xfffeaa9cfffeaa9cULL, 0xfffeaa9cfffeaa9cULL, },
+ { 0x2221332422213324ULL, 0x2221332422213324ULL, },
+ { 0xffff5546ffff5546ULL, 0xffff5546ffff5546ULL, },
+ { 0xf6845ec12f67d088ULL, 0x12f6424ff6845ec1ULL, },
+ { 0xfffffff0fffffff0ULL, 0xfffffff0fffffff0ULL, },
+ { 0xffff9988ffff9988ULL, 0xffff9988ffff9988ULL, }, /* 32 */
+ { 0xffff9988ffff9988ULL, 0xffff9988ffff9988ULL, },
+ { 0xdddcaa98dddcaa98ULL, 0xdddcaa98dddcaa98ULL, },
+ { 0xffff3320ffff3320ULL, 0xffff3320ffff3320ULL, },
+ { 0xeb83ae00eb83ae00ULL, 0xeb83ae00eb83ae00ULL, },
+ { 0xfffeccb8fffeccb8ULL, 0xfffeccb8fffeccb8ULL, },
+ { 0x05af16ace38c5af0ULL, 0xf49d9f3405af16acULL, },
+ { 0xfffe6650fffe6650ULL, 0xfffe6650fffe6650ULL, },
+ { 0xfffeccb6fffeccb6ULL, 0xfffeccb6fffeccb6ULL, }, /* 40 */
+ { 0xfffeccb6fffeccb6ULL, 0xfffeccb6fffeccb6ULL, },
+ { 0x222110fa222110faULL, 0x222110fa222110faULL, },
+ { 0xffff331cffff331cULL, 0xffff331cffff331cULL, },
+ { 0x147a51d4147a51d4ULL, 0x147a51d4147a51d4ULL, },
+ { 0xffff9982ffff9982ULL, 0xffff9982ffff9982ULL, },
+ { 0xfa4f6bff1c717d10ULL, 0x0b608e21fa4f6bffULL, },
+ { 0xffffffe8ffffffe8ULL, 0xffffffe8ffffffe8ULL, },
+ { 0x00001c59ffff71aeULL, 0xffffc70300001c59ULL, }, /* 48 */
+ { 0x00001c59ffff71aeULL, 0xffffc70300001c59ULL, },
+ { 0x097b2f4fd0966832ULL, 0xed08a115097b2f4fULL, },
+ { 0x000038cafffee374ULL, 0xffff8e1e000038caULL, },
+ { 0x05b082bee38c71acULL, 0xf49e609a05b082beULL, },
+ { 0x0000553bfffe553aULL, 0xffff55390000553bULL, },
+ { 0xf033192eca430636ULL, 0xc0c90fb0f033192eULL, },
+ { 0x000071acfffdc700ULL, 0xffff1c54000071acULL, },
+ { 0x00005539fffe5538ULL, 0xffff553700005539ULL, }, /* 56 */
+ { 0x00005539fffe5538ULL, 0xffff553700005539ULL, },
+ { 0xf68497972f66b408ULL, 0x12f5d079f6849797ULL, },
+ { 0x000038c6fffee370ULL, 0xffff8e1a000038c6ULL, },
+ { 0xfa4f886a1c70eed0ULL, 0x0b605536fa4f886aULL, },
+ { 0x00001c53ffff71a8ULL, 0xffffc6fd00001c53ULL, },
+ { 0x0fcd74d135ba3272ULL, 0x3f35d3a10fcd74d1ULL, },
+ { 0xffffffe0ffffffe0ULL, 0xffffffe0ffffffe0ULL, },
+ { 0xc5a8016cdd3daa5cULL, 0xe94945ebe7053037ULL, }, /* 64 */
+ { 0xc3b493dce3f99616ULL, 0xe6c275fe01105522ULL, },
+ { 0x949f7b2015d7bcd8ULL, 0xdd8e1f740c23f089ULL, },
+ { 0xcb480f0e10df8c96ULL, 0x0470e12d02738253ULL, },
+ { 0xc954a17e179b7850ULL, 0x01ea11401c7ea73eULL, },
+ { 0xc9425a31f36c45a7ULL, 0xedf7684bffd4d9adULL, },
+ { 0xc7fda5a7eec474caULL, 0xdbac4bfdfada4b68ULL, },
+ { 0xc9d3363ecb9ded37ULL, 0xc40db8860b92e4aaULL, },
+ { 0x9abe1d82fd7c13f9ULL, 0xbad961fc16a68011ULL, }, /* 72 */
+ { 0x997968f8f8d4431cULL, 0xa88e45ae11abf1ccULL, },
+ { 0x644cd070b0912dbbULL, 0x95a94d6df030af03ULL, },
+ { 0x90151b88bce11a1cULL, 0x8ce173edd7b3566dULL, },
+ { 0xc6bdaf76b7e8e9daULL, 0xb3c435a6ce02e837ULL, },
+ { 0xc893400d94c26247ULL, 0x9c25a22fdebb8179ULL, },
+ { 0xf45b8b25a1124ea8ULL, 0x935dc8afc63e28e3ULL, },
+ { 0xc124ff9b7af87983ULL, 0x2916358ea57b0fdfULL, },
+ { 0xa3bdf52f3f1bc6d3ULL, 0x1a9b7790a9e67552ULL, }, /* 80 */
+ { 0xa2394ebc1f432fbaULL, 0x38d091638b040700ULL, },
+ { 0x9c98e9da3d8da28dULL, 0x17578e46633c7554ULL, },
+ { 0xca2304601c11139aULL, 0xecce6f4f9252c75cULL, },
+ { 0xb167fd62111ca498ULL, 0xed848a6b7ffb85a6ULL, },
+ { 0xb01a590af79618c4ULL, 0xcf3de0319d05b479ULL, },
+ { 0xb2490b42008cb27aULL, 0xcfbf82ea8729672eULL, },
+ { 0xd36607e1f75b1a82ULL, 0x8006f7ab6a0e64dcULL, },
+ { 0xbf56e259efe4672cULL, 0xa61769778a2f91d2ULL, }, /* 88 */
+ { 0xbe4f061a0bbba5e0ULL, 0xc922e830b7ade689ULL, },
+ { 0xaac85110e5ef76abULL, 0xcc5f9db0a366adc6ULL, },
+ { 0xc91b5b88fd4a93d2ULL, 0x879c58c17a96cfbaULL, },
+ { 0xb8799dfa21be5efeULL, 0xa721331f6c3d78f0ULL, },
+ { 0xb76ef97e2ca86ef4ULL, 0xbb78ca223c0de8adULL, },
+ { 0x9da743266b64f51cULL, 0xba24b1045354f4faULL, },
+ { 0xc2f3162f429e4870ULL, 0x764125c06e4d3512ULL, },
+ { 0xa89d5e1d1ffccbf4ULL, 0x51bf6a197f87f33bULL, }, /* 96 */
+ { 0x890f17ff2c462c7cULL, 0x34f589127c4cc49aULL, },
+ { 0x53dc26951679feb0ULL, 0x2aa458e36a7c8cdeULL, },
+ { 0x7ed4f0c1135e605eULL, 0x1a22c08d472920e2ULL, },
+ { 0x80f6d8c622f1e674ULL, 0x071f986d36987e53ULL, },
+ { 0x7ee91ba012abf971ULL, 0xeab87172091da737ULL, },
+ { 0x80fac8d20b8e2fb8ULL, 0x0ad43e562523cff0ULL, },
+ { 0x7ef3481012ac516eULL, 0x1acdbd0e31a33d13ULL, },
+ { 0xbf53a8023cd97b5aULL, 0x07b9c024393d8136ULL, }, /* 104 */
+ { 0x8e3cb38085aaebe3ULL, 0xf84dd1305e923ebfULL, },
+ { 0x50c22f685af8caedULL, 0xef14166874d2544dULL, },
+ { 0x7a3548245bc2dee5ULL, 0xf6b38ff08f52b803ULL, },
+ { 0x3e4f96f53628fefdULL, 0xbe65c7ed60e1faffULL, },
+ { 0x2c2056e3221de63fULL, 0x871151e081227a9dULL, },
+ { 0x113314bc1293f380ULL, 0x774bb8df643781b9ULL, },
+ { 0x07d911730a4b3a5dULL, 0x8b56a81c77aef6ebULL, },
+ };
+
+ 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_DPSUB_S_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_DPSUB_S_W(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPSUB_S_W__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPSUB_S_W__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-dot-product/test_msa_dpsub_u_d.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_u_d.c
new file mode 100644
index 0000000000..fc6c4e61dc
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_u_d.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction DPSUB_U.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Dot Product";
+ char *instruction_name = "DPSUB_U.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] = {
+ { 0x00000003fffffffeULL, 0x00000003fffffffeULL, }, /* 0 */
+ { 0x00000003fffffffeULL, 0x00000003fffffffeULL, },
+ { 0xaaaaaab155555552ULL, 0xaaaaaab155555552ULL, },
+ { 0x00000007fffffffcULL, 0x00000007fffffffcULL, },
+ { 0x6666667199999994ULL, 0x6666667199999994ULL, },
+ { 0x0000000bfffffffaULL, 0x0000000bfffffffaULL, },
+ { 0x8e38e39c71c71c6bULL, 0xe38e38f21c71c715ULL, },
+ { 0x0000000ffffffff8ULL, 0x0000000ffffffff8ULL, },
+ { 0x0000000ffffffff8ULL, 0x0000000ffffffff8ULL, }, /* 8 */
+ { 0x0000000ffffffff8ULL, 0x0000000ffffffff8ULL, },
+ { 0x0000000ffffffff8ULL, 0x0000000ffffffff8ULL, },
+ { 0x0000000ffffffff8ULL, 0x0000000ffffffff8ULL, },
+ { 0x0000000ffffffff8ULL, 0x0000000ffffffff8ULL, },
+ { 0x0000000ffffffff8ULL, 0x0000000ffffffff8ULL, },
+ { 0x0000000ffffffff8ULL, 0x0000000ffffffff8ULL, },
+ { 0x0000000ffffffff8ULL, 0x0000000ffffffff8ULL, },
+ { 0xaaaaaabd5555554cULL, 0xaaaaaabd5555554cULL, }, /* 16 */
+ { 0xaaaaaabd5555554cULL, 0xaaaaaabd5555554cULL, },
+ { 0xc71c71db8e38e384ULL, 0xc71c71db8e38e384ULL, },
+ { 0x5555556aaaaaaaa0ULL, 0x5555556aaaaaaaa0ULL, },
+ { 0x4444445bbbbbbbb0ULL, 0x4444445bbbbbbbb0ULL, },
+ { 0x00000017fffffff4ULL, 0x00000017fffffff4ULL, },
+ { 0x097b42784bda12eaULL, 0x425ed0b1684bda06ULL, },
+ { 0xaaaaaac555555548ULL, 0xaaaaaac555555548ULL, },
+ { 0x0000001bfffffff2ULL, 0x0000001bfffffff2ULL, }, /* 24 */
+ { 0x0000001bfffffff2ULL, 0x0000001bfffffff2ULL, },
+ { 0x8e38e3ab1c71c70eULL, 0x8e38e3ab1c71c70eULL, },
+ { 0x55555572aaaaaa9cULL, 0x55555572aaaaaa9cULL, },
+ { 0xcccccceb33333324ULL, 0xcccccceb33333324ULL, },
+ { 0xaaaaaac955555546ULL, 0xaaaaaac955555546ULL, },
+ { 0x2f684bf97b425ec1ULL, 0x4bda1316097b424fULL, },
+ { 0x0000001ffffffff0ULL, 0x0000001ffffffff0ULL, },
+ { 0x6666668999999988ULL, 0x6666668999999988ULL, }, /* 32 */
+ { 0x6666668999999988ULL, 0x6666668999999988ULL, },
+ { 0x5555557aaaaaaa98ULL, 0x5555557aaaaaaa98ULL, },
+ { 0xccccccf333333320ULL, 0xccccccf333333320ULL, },
+ { 0x851eb87ae147ae00ULL, 0x851eb87ae147ae00ULL, },
+ { 0x3333335cccccccb8ULL, 0x3333335cccccccb8ULL, },
+ { 0x0b60b636c16c16acULL, 0x4fa4fa7b49f49f34ULL, },
+ { 0x999999c666666650ULL, 0x999999c666666650ULL, },
+ { 0x33333360ccccccb6ULL, 0x33333360ccccccb6ULL, }, /* 40 */
+ { 0x33333360ccccccb6ULL, 0x33333360ccccccb6ULL, },
+ { 0xeeeeef1d111110faULL, 0xeeeeef1d111110faULL, },
+ { 0xccccccfb3333331cULL, 0xccccccfb3333331cULL, },
+ { 0x7ae147dd1eb851d4ULL, 0x7ae147dd1eb851d4ULL, },
+ { 0x6666669599999982ULL, 0x6666669599999982ULL, },
+ { 0x1c71c74c16c16bffULL, 0x2d82d85d38e38e21ULL, },
+ { 0x0000002fffffffe8ULL, 0x0000002fffffffe8ULL, },
+ { 0x8e38e3c071c71c59ULL, 0xe38e39161c71c703ULL, }, /* 48 */
+ { 0x8e38e3c071c71c59ULL, 0xe38e39161c71c703ULL, },
+ { 0x97b42620bda12f4fULL, 0x25ed09af84bda115ULL, },
+ { 0x1c71c750e38e38caULL, 0xc71c71fc38e38e1eULL, },
+ { 0xf49f4a2ad82d82beULL, 0xe38e391ab60b609aULL, },
+ { 0xaaaaaae15555553bULL, 0xaaaaaae255555539ULL, },
+ { 0x9161f9e5ba78192eULL, 0xd3c0ca7e948b0fb0ULL, },
+ { 0x38e38e71c71c71acULL, 0x8e38e3c871c71c54ULL, },
+ { 0xaaaaaae555555539ULL, 0xaaaaaae655555537ULL, }, /* 56 */
+ { 0xaaaaaae555555539ULL, 0xaaaaaae655555537ULL, },
+ { 0x4bda13325ed09797ULL, 0x12f684fa425ed079ULL, },
+ { 0x1c71c758e38e38c6ULL, 0xc71c720438e38e1aULL, },
+ { 0xaaaaaae88888886aULL, 0x1111114f55555536ULL, },
+ { 0x8e38e3cc71c71c53ULL, 0xe38e39221c71c6fdULL, },
+ { 0x35ba78587e6b74d1ULL, 0x9e06526bf9add3a1ULL, },
+ { 0x0000003fffffffe0ULL, 0x0000003fffffffe0ULL, },
+ { 0xb0ef5df9ed993d50ULL, 0xecd0c902514248ccULL, }, /* 64 */
+ { 0x1e8c6aa2f5c2926cULL, 0xd21b7a4e60b25370ULL, },
+ { 0xa56477c9bdfa46f4ULL, 0x1c376bca50d3cfdeULL, },
+ { 0x5aaf941e1e90da18ULL, 0x4a2661d3ec89a90eULL, },
+ { 0xc84ca0c726ba2f34ULL, 0x2f71131ffbf9b3b2ULL, },
+ { 0xb93c43f773d898abULL, 0x2c45d9ce74204cfeULL, },
+ { 0xd770bf8dbe2e30edULL, 0x1b1d2b640c71ea68ULL, },
+ { 0x4c7478e0222edcb6ULL, 0x028c79110abde6f8ULL, },
+ { 0xd34c8606ea66913eULL, 0x4ca86a8cfadf6366ULL, }, /* 72 */
+ { 0xf181019d34bc2980ULL, 0x3b7fbc22933100d0ULL, },
+ { 0xf69966e79904609cULL, 0xc2d94d22461ac53fULL, },
+ { 0x669e11492661ba7aULL, 0x3b951b06df919197ULL, },
+ { 0x1be92d9d86f84d9eULL, 0x698411107b476ac7ULL, },
+ { 0x90ece6efeaf8f967ULL, 0x50f35ebd79936757ULL, },
+ { 0x00f1915178565345ULL, 0xc9af2ca2130a33afULL, },
+ { 0xad039975a0f53058ULL, 0x0b11d7505015196fULL, },
+ { 0x376d4d72ebbc7b1cULL, 0xb833881ecd4918dbULL, }, /* 80 */
+ { 0xb97c39c63d30eb26ULL, 0x9983e1a16fddbe3bULL, },
+ { 0x103118e687f4c4aaULL, 0x36d2d322776b1540ULL, },
+ { 0xd7103f328f5683b0ULL, 0xc97816b7d22d1890ULL, },
+ { 0x4dd93b94622edfd8ULL, 0xbd32853a6649bd9eULL, },
+ { 0xe38ab03df0d4eedcULL, 0xa6b087fab9ab9432ULL, },
+ { 0x9b8bc7cd79738e5aULL, 0x1099960abd7ff844ULL, },
+ { 0x2a9e79f404df0445ULL, 0x8a1a574d141add54ULL, },
+ { 0x1323c575df66a395ULL, 0x4d70aaa974eb601eULL, }, /* 88 */
+ { 0xbc9ea974b0ce57aeULL, 0x3dff93a625e35e6cULL, },
+ { 0xbd4cca940103a7a6ULL, 0x1b03e192077feba2ULL, },
+ { 0x69e12c9b9ff2608eULL, 0x0713d9101835bf32ULL, },
+ { 0x183a0715853e498aULL, 0xeced28ff102b04faULL, },
+ { 0xd806808efcdcfa1bULL, 0xda07aee4d9a29bfcULL, },
+ { 0x8f0ceb4c5a20614fULL, 0x2693974265c37330ULL, },
+ { 0x2f219f4eacacaf61ULL, 0xcde749de29866580ULL, },
+ { 0xfac6c540b5ec9bf9ULL, 0x67fa3d30bf85f9fcULL, }, /* 96 */
+ { 0x58719a8af58d41b9ULL, 0x8af69bdae8797a8cULL, },
+ { 0x0293ed8dc2154481ULL, 0x7aef92fa834de3f0ULL, },
+ { 0xe296644d91f354e5ULL, 0xd4332e315ac37ee4ULL, },
+ { 0xd78a5344aa8ce0f6ULL, 0xbcf1bf88825a127aULL, },
+ { 0xcfe6e77bd50e6bfaULL, 0xa42046c9a6110292ULL, },
+ { 0xc2e4e16ef7883199ULL, 0x8a2eb57c71a6b370ULL, },
+ { 0xb83af7ab54b68847ULL, 0x7682eb14d9902e98ULL, },
+ { 0xfeb58099fb6e2639ULL, 0xd298a4d4f4eef1ccULL, }, /* 104 */
+ { 0x9cbae3e8d8c9b31fULL, 0x0e0c2c1a33a56ab0ULL, },
+ { 0x95dc4a7a980a468fULL, 0xe95439aa32919b0aULL, },
+ { 0xc29c82993429f90bULL, 0xa33308195e2c1fecULL, },
+ { 0x5a0a569e52e5f3acULL, 0x0a72368b53acb754ULL, },
+ { 0x140968eb707c3bbeULL, 0xcd5491c571071d8cULL, },
+ { 0xe1db913744288b2bULL, 0x10c008b6922667d4ULL, },
+ { 0x65b190239a38c686ULL, 0xa6d4ec5b01d651c4ULL, },
+ };
+
+ 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_DPSUB_U_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_DPSUB_U_D(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPSUB_U_D__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPSUB_U_D__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-dot-product/test_msa_dpsub_u_h.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_u_h.c
new file mode 100644
index 0000000000..741c887bbd
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_u_h.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction DPSUB_U.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Dot Product";
+ char *instruction_name = "DPSUB_U.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] = {
+ { 0x03fe03fe03fe03feULL, 0x03fe03fe03fe03feULL, }, /* 0 */
+ { 0x03fe03fe03fe03feULL, 0x03fe03fe03fe03feULL, },
+ { 0xb152b152b152b152ULL, 0xb152b152b152b152ULL, },
+ { 0x07fc07fc07fc07fcULL, 0x07fc07fc07fc07fcULL, },
+ { 0x7194719471947194ULL, 0x7194719471947194ULL, },
+ { 0x0bfa0bfa0bfa0bfaULL, 0x0bfa0bfa0bfa0bfaULL, },
+ { 0x9c6bf21546c09c6bULL, 0xf21546c09c6bf215ULL, },
+ { 0x0ff80ff80ff80ff8ULL, 0x0ff80ff80ff80ff8ULL, },
+ { 0x0ff80ff80ff80ff8ULL, 0x0ff80ff80ff80ff8ULL, }, /* 8 */
+ { 0x0ff80ff80ff80ff8ULL, 0x0ff80ff80ff80ff8ULL, },
+ { 0x0ff80ff80ff80ff8ULL, 0x0ff80ff80ff80ff8ULL, },
+ { 0x0ff80ff80ff80ff8ULL, 0x0ff80ff80ff80ff8ULL, },
+ { 0x0ff80ff80ff80ff8ULL, 0x0ff80ff80ff80ff8ULL, },
+ { 0x0ff80ff80ff80ff8ULL, 0x0ff80ff80ff80ff8ULL, },
+ { 0x0ff80ff80ff80ff8ULL, 0x0ff80ff80ff80ff8ULL, },
+ { 0x0ff80ff80ff80ff8ULL, 0x0ff80ff80ff80ff8ULL, },
+ { 0xbd4cbd4cbd4cbd4cULL, 0xbd4cbd4cbd4cbd4cULL, }, /* 16 */
+ { 0xbd4cbd4cbd4cbd4cULL, 0xbd4cbd4cbd4cbd4cULL, },
+ { 0xdb84db84db84db84ULL, 0xdb84db84db84db84ULL, },
+ { 0x6aa06aa06aa06aa0ULL, 0x6aa06aa06aa06aa0ULL, },
+ { 0x5bb05bb05bb05bb0ULL, 0x5bb05bb05bb05bb0ULL, },
+ { 0x17f417f417f417f4ULL, 0x17f417f417f417f4ULL, },
+ { 0x22ea5c06947822eaULL, 0x5c06947822ea5c06ULL, },
+ { 0xc548c548c548c548ULL, 0xc548c548c548c548ULL, },
+ { 0x1bf21bf21bf21bf2ULL, 0x1bf21bf21bf21bf2ULL, }, /* 24 */
+ { 0x1bf21bf21bf21bf2ULL, 0x1bf21bf21bf21bf2ULL, },
+ { 0xab0eab0eab0eab0eULL, 0xab0eab0eab0eab0eULL, },
+ { 0x729c729c729c729cULL, 0x729c729c729c729cULL, },
+ { 0xeb24eb24eb24eb24ULL, 0xeb24eb24eb24eb24ULL, },
+ { 0xc946c946c946c946ULL, 0xc946c946c946c946ULL, },
+ { 0x4ec16b4f87884ec1ULL, 0x6b4f87884ec16b4fULL, },
+ { 0x1ff01ff01ff01ff0ULL, 0x1ff01ff01ff01ff0ULL, },
+ { 0x8988898889888988ULL, 0x8988898889888988ULL, }, /* 32 */
+ { 0x8988898889888988ULL, 0x8988898889888988ULL, },
+ { 0x7a987a987a987a98ULL, 0x7a987a987a987a98ULL, },
+ { 0xf320f320f320f320ULL, 0xf320f320f320f320ULL, },
+ { 0xae00ae00ae00ae00ULL, 0xae00ae00ae00ae00ULL, },
+ { 0x5cb85cb85cb85cb8ULL, 0x5cb85cb85cb85cb8ULL, },
+ { 0x36ac7b34bef036acULL, 0x7b34bef036ac7b34ULL, },
+ { 0xc650c650c650c650ULL, 0xc650c650c650c650ULL, },
+ { 0x60b660b660b660b6ULL, 0x60b660b660b660b6ULL, }, /* 40 */
+ { 0x60b660b660b660b6ULL, 0x60b660b660b660b6ULL, },
+ { 0x1cfa1cfa1cfa1cfaULL, 0x1cfa1cfa1cfa1cfaULL, },
+ { 0xfb1cfb1cfb1cfb1cULL, 0xfb1cfb1cfb1cfb1cULL, },
+ { 0xa9d4a9d4a9d4a9d4ULL, 0xa9d4a9d4a9d4a9d4ULL, },
+ { 0x9582958295829582ULL, 0x9582958295829582ULL, },
+ { 0x4bff5d216e104bffULL, 0x5d216e104bff5d21ULL, },
+ { 0x2fe82fe82fe82fe8ULL, 0x2fe82fe82fe82fe8ULL, },
+ { 0xc05916036aaec059ULL, 0x16036aaec0591603ULL, }, /* 48 */
+ { 0xc05916036aaec059ULL, 0x16036aaec0591603ULL, },
+ { 0xcb4f5a15e732cb4fULL, 0x5a15e732cb4f5a15ULL, },
+ { 0x50cafc1ea57450caULL, 0xfc1ea57450cafc1eULL, },
+ { 0x2abe1a9a07ac2abeULL, 0x1a9a07ac2abe1a9aULL, },
+ { 0xe13be239e03ae13bULL, 0xe239e03ae13be239ULL, },
+ { 0xc92e0cb08536c92eULL, 0x0cb08536c92e0cb0ULL, },
+ { 0x71acc8541b0071acULL, 0xc8541b0071acc854ULL, },
+ { 0xe539e637e438e539ULL, 0xe637e438e539e637ULL, }, /* 56 */
+ { 0xe539e637e438e539ULL, 0xe637e438e539e637ULL, },
+ { 0x87974f7915088797ULL, 0x4f79150887974f79ULL, },
+ { 0x58c6041aad7058c6ULL, 0x041aad7058c6041aULL, },
+ { 0xe86a4f36b4d0e86aULL, 0x4f36b4d0e86a4f36ULL, },
+ { 0xcc5321fd76a8cc53ULL, 0x21fd76a8cc5321fdULL, },
+ { 0x74d1dda10c7274d1ULL, 0xdda10c7274d1dda1ULL, },
+ { 0x3fe03fe03fe03fe0ULL, 0x3fe03fe03fe03fe0ULL, },
+ { 0xcbbcceac141c13a7ULL, 0x00761ce308c3c650ULL, }, /* 64 */
+ { 0xf7b87fc8cfcecf94ULL, 0x97cf0b4ed5a88220ULL, },
+ { 0x77145bfc63a8816dULL, 0x357aa52a175567c0ULL, },
+ { 0x1ade0adc423622e3ULL, 0xab3450024ff1c4e0ULL, },
+ { 0x46dabbf8fde8ded0ULL, 0x428d3e6d1cd680b0ULL, },
+ { 0xc3bd95af925643dfULL, 0x52f8b3300b9c6e5cULL, },
+ { 0xd84d53f1e3d4d3d2ULL, 0x7fd208a8f3004ed2ULL, },
+ { 0x2fdb362aab6b21b4ULL, 0x8d618f60d4e568eeULL, },
+ { 0xaf37125e3f45d38dULL, 0x2b0c293c16924e8eULL, }, /* 72 */
+ { 0xc3c7d0a090c36380ULL, 0x57e67eb4fdf62f04ULL, },
+ { 0x3093e97863b1d807ULL, 0x9bb5e78f8484281bULL, },
+ { 0xc98da762f8243651ULL, 0xbae2a737088bfaf1ULL, },
+ { 0x6d575642d6b2d7c7ULL, 0x309c520f41275811ULL, },
+ { 0xc4e5387b9e4925a9ULL, 0x3e2bd8c7230c722dULL, },
+ { 0x5ddff66532bc83f3ULL, 0x5d58986fa7134503ULL, },
+ { 0x147edd5806d7a4abULL, 0x2cce99ef267e197fULL, },
+ { 0xd5b2d0aab3994377ULL, 0xcd083b9ac440025bULL, }, /* 80 */
+ { 0x80bf8eec25e70baaULL, 0xb6e600dda46ca823ULL, },
+ { 0xe79991b05061b0b1ULL, 0xd91c24ba24bc8d1fULL, },
+ { 0x5352504a2070df63ULL, 0x473b74aadc80fd45ULL, },
+ { 0x0546cd72f0907c98ULL, 0x1ab13142c4b84c19ULL, },
+ { 0xcc6ba15c55b01774ULL, 0x6e1606c3875c1b25ULL, },
+ { 0x1dbdf6d689f3d0f7ULL, 0x4ac43fe21dbb145aULL, },
+ { 0xd6baa1542922ce15ULL, 0x697e5fbada60ca72ULL, },
+ { 0x1806cdbe15b6846fULL, 0x18091759d3f43a3aULL, }, /* 88 */
+ { 0xfc0a8444a6e31a5bULL, 0x0daafd828699ee8eULL, },
+ { 0x4f36fd647760debdULL, 0x7c3fb8561364c110ULL, },
+ { 0x1bfcc992394ee12bULL, 0xfca40e06ed110caeULL, },
+ { 0xa54ca0a4128a8bb6ULL, 0x70d40b38f9c0fc46ULL, },
+ { 0xcb1d6138bde219f9ULL, 0x9c68fd7fb61366a6ULL, },
+ { 0x3887fa1a7e8f8fe6ULL, 0x2ce4bb5039504af0ULL, },
+ { 0xf65edccc34eccb94ULL, 0x3e041478ff0f739cULL, },
+ { 0x4cc27494d274632dULL, 0x2a3ee78cfad81d3cULL, }, /* 96 */
+ { 0xd40e966c853c370eULL, 0x04feaa379b04067cULL, },
+ { 0x5da2b998597c214bULL, 0x9da08eb7ff4efc8cULL, },
+ { 0xe9269a421c1c0396ULL, 0x2f41456bdcd248bcULL, },
+ { 0xe87f80bc039cfc91ULL, 0xed3c08269718789cULL, },
+ { 0xa6c53808a9213425ULL, 0xa2aefe7284cdb89cULL, },
+ { 0x71cd34f063590a91ULL, 0xef6839544786e41cULL, },
+ { 0x6adcd8201277fe43ULL, 0x7a42072920b97f84ULL, },
+ { 0xd64c3010a53c52d9ULL, 0x2ffcd8e8ec4662d9ULL, }, /* 104 */
+ { 0x2bcc04d0fd7bb9d3ULL, 0x54334ac042e043bbULL, },
+ { 0xc73077f8e331ebe0ULL, 0x1c5f5244f12a2b70ULL, },
+ { 0x309c82661787fc47ULL, 0xc7f3cf1c49211c79ULL, },
+ { 0xeb78588cf53e082dULL, 0x75954984106eb821ULL, },
+ { 0x5fa026e08f6af367ULL, 0xa8dfb35ce9820111ULL, },
+ { 0x04b0e03c469efd7fULL, 0x7a6806a42e2df58fULL, },
+ { 0xcca0baf00eacf773ULL, 0xd54e79140435c3e5ULL, },
+ };
+
+ 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_DPSUB_U_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_DPSUB_U_H(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPSUB_U_H__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPSUB_U_H__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-dot-product/test_msa_dpsub_u_w.c b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_u_w.c
new file mode 100644
index 0000000000..3e1b711b61
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-dot-product/test_msa_dpsub_u_w.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction DPSUB_U.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Dot Product";
+ char *instruction_name = "DPSUB_U.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] = {
+ { 0x0003fffe0003fffeULL, 0x0003fffe0003fffeULL, }, /* 0 */
+ { 0x0003fffe0003fffeULL, 0x0003fffe0003fffeULL, },
+ { 0xaab15552aab15552ULL, 0xaab15552aab15552ULL, },
+ { 0x0007fffc0007fffcULL, 0x0007fffc0007fffcULL, },
+ { 0x6671999466719994ULL, 0x6671999466719994ULL, },
+ { 0x000bfffa000bfffaULL, 0x000bfffa000bfffaULL, },
+ { 0xe39c1c6b8e4771c0ULL, 0x38f1c715e39c1c6bULL, },
+ { 0x000ffff8000ffff8ULL, 0x000ffff8000ffff8ULL, },
+ { 0x000ffff8000ffff8ULL, 0x000ffff8000ffff8ULL, }, /* 8 */
+ { 0x000ffff8000ffff8ULL, 0x000ffff8000ffff8ULL, },
+ { 0x000ffff8000ffff8ULL, 0x000ffff8000ffff8ULL, },
+ { 0x000ffff8000ffff8ULL, 0x000ffff8000ffff8ULL, },
+ { 0x000ffff8000ffff8ULL, 0x000ffff8000ffff8ULL, },
+ { 0x000ffff8000ffff8ULL, 0x000ffff8000ffff8ULL, },
+ { 0x000ffff8000ffff8ULL, 0x000ffff8000ffff8ULL, },
+ { 0x000ffff8000ffff8ULL, 0x000ffff8000ffff8ULL, },
+ { 0xaabd554caabd554cULL, 0xaabd554caabd554cULL, }, /* 16 */
+ { 0xaabd554caabd554cULL, 0xaabd554caabd554cULL, },
+ { 0xc730e384c730e384ULL, 0xc730e384c730e384ULL, },
+ { 0x556aaaa0556aaaa0ULL, 0x556aaaa0556aaaa0ULL, },
+ { 0x445bbbb0445bbbb0ULL, 0x445bbbb0445bbbb0ULL, },
+ { 0x0017fff40017fff4ULL, 0x0017fff40017fff4ULL, },
+ { 0x427812ea0994f678ULL, 0x7b5bda06427812eaULL, },
+ { 0xaac55548aac55548ULL, 0xaac55548aac55548ULL, },
+ { 0x001bfff2001bfff2ULL, 0x001bfff2001bfff2ULL, }, /* 24 */
+ { 0x001bfff2001bfff2ULL, 0x001bfff2001bfff2ULL, },
+ { 0x8e55c70e8e55c70eULL, 0x8e55c70e8e55c70eULL, },
+ { 0x5572aa9c5572aa9cULL, 0x5572aa9c5572aa9cULL, },
+ { 0xcceb3324cceb3324ULL, 0xcceb3324cceb3324ULL, },
+ { 0xaac95546aac95546ULL, 0xaac95546aac95546ULL, },
+ { 0x4bf95ec12f87d088ULL, 0x686b424f4bf95ec1ULL, },
+ { 0x001ffff0001ffff0ULL, 0x001ffff0001ffff0ULL, },
+ { 0x6689998866899988ULL, 0x6689998866899988ULL, }, /* 32 */
+ { 0x6689998866899988ULL, 0x6689998866899988ULL, },
+ { 0x557aaa98557aaa98ULL, 0x557aaa98557aaa98ULL, },
+ { 0xccf33320ccf33320ULL, 0xccf33320ccf33320ULL, },
+ { 0x8547ae008547ae00ULL, 0x8547ae008547ae00ULL, },
+ { 0x335cccb8335cccb8ULL, 0x335cccb8335cccb8ULL, },
+ { 0x4fd016ac0b8c5af0ULL, 0x94149f344fd016acULL, },
+ { 0x99c6665099c66650ULL, 0x99c6665099c66650ULL, },
+ { 0x3360ccb63360ccb6ULL, 0x3360ccb63360ccb6ULL, }, /* 40 */
+ { 0x3360ccb63360ccb6ULL, 0x3360ccb63360ccb6ULL, },
+ { 0xef1d10faef1d10faULL, 0xef1d10faef1d10faULL, },
+ { 0xccfb331cccfb331cULL, 0xccfb331cccfb331cULL, },
+ { 0x7b1051d47b1051d4ULL, 0x7b1051d47b1051d4ULL, },
+ { 0x6695998266959982ULL, 0x6695998266959982ULL, },
+ { 0x2db26bff1ca17d10ULL, 0x3ec38e212db26bffULL, },
+ { 0x002fffe8002fffe8ULL, 0x002fffe8002fffe8ULL, },
+ { 0xe3c01c598e6b71aeULL, 0x3915c703e3c01c59ULL, }, /* 48 */
+ { 0xe3c01c598e6b71aeULL, 0x3915c703e3c01c59ULL, },
+ { 0x26202f4f97e86832ULL, 0xb459a11526202f4fULL, },
+ { 0xc75038ca1ca6e374ULL, 0x71fb8e1ec75038caULL, },
+ { 0xe3c382bef4d671acULL, 0xd2b3609ae3c382beULL, },
+ { 0xaae0553baae2553aULL, 0xaae15539aae0553bULL, },
+ { 0xd3f7192e919b0636ULL, 0x4f3b0fb0d3f7192eULL, },
+ { 0x8e7071ac391dc700ULL, 0xe3c71c548e7071acULL, },
+ { 0xaae45539aae65538ULL, 0xaae55537aae45539ULL, }, /* 56 */
+ { 0xaae45539aae65538ULL, 0xaae55537aae45539ULL, },
+ { 0x133197974c16b408ULL, 0xda4ed07913319797ULL, },
+ { 0xc75838c61caee370ULL, 0x72038e1ac75838c6ULL, },
+ { 0x114e886aaae8eed0ULL, 0x77b55536114e886aULL, },
+ { 0xe3cc1c538e7771a8ULL, 0x3921c6fde3cc1c53ULL, },
+ { 0x9e4574d135fa3272ULL, 0xcdadd3a19e4574d1ULL, },
+ { 0x003fffe0003fffe0ULL, 0x003fffe0003fffe0ULL, },
+ { 0xe77c016cdd7daa5cULL, 0xe98945eb8a373037ULL, }, /* 64 */
+ { 0x60fd93dc8ef99616ULL, 0xdba475fe3c075522ULL, },
+ { 0x67ae7b204335bcd8ULL, 0xc7121f747860f089ULL, },
+ { 0x17bb0f0ee8fd8c96ULL, 0x972fe12d34478253ULL, },
+ { 0x913ca17e9a797850ULL, 0x894b1140e617a73eULL, },
+ { 0x99ae5a31e83a45a7ULL, 0xff24684bc96dd9adULL, },
+ { 0xefeea5a7437774caULL, 0x6ac04bfdaf344b68ULL, },
+ { 0x8175363e76faed37ULL, 0xfc38b88657b1e4aaULL, },
+ { 0x88261d822b3713f9ULL, 0xe7a661fc940b8011ULL, }, /* 72 */
+ { 0xde6668f88674431cULL, 0x534245ae79d1f1ccULL, },
+ { 0xf331d070b3932dbbULL, 0xb25f4d6d0200af03ULL, },
+ { 0x985e1b88f3e41a1cULL, 0x31e873ed7002566dULL, },
+ { 0x486aaf7699abe9daULL, 0x020635a62be8e837ULL, },
+ { 0xd9f1400dcd2f6247ULL, 0x937ea22fd4668179ULL, },
+ { 0x7f1d8b250d804ea8ULL, 0x1307c8af426828e3ULL, },
+ { 0x4be6ff9b22ca7983ULL, 0x7b2e358e09e10fdfULL, },
+ { 0x3d0470dbf4d6b86fULL, 0x548567e8f5250450ULL, }, /* 80 */
+ { 0x00d897321b41b715ULL, 0x02517c05df66c875ULL, },
+ { 0x991ec80ea3b5c306ULL, 0xa18dc9b22cff8e2fULL, },
+ { 0x44850796bb133f8dULL, 0xdc2a4cc591614211ULL, },
+ { 0x192b30fc8866f607ULL, 0x97e8c289d36e61aaULL, },
+ { 0x0058689e9fcad43dULL, 0xfe7a0cc7a239bc40ULL, },
+ { 0xb8bc4cc2b8296867ULL, 0xccf01b9e1a7e74adULL, },
+ { 0x61014864181c5d2cULL, 0x4c8bc05ea1b0cc11ULL, },
+ { 0xec0d0e4af547db74ULL, 0x2d758eed74a13bb5ULL, }, /* 88 */
+ { 0x03e797060056a10fULL, 0xc1a1d5f8579892eaULL, },
+ { 0x9a3ca5d4a8548905ULL, 0xfd2bfd1807c0081aULL, },
+ { 0x4820b48cf1454f6bULL, 0xe982ac5dfb74445aULL, },
+ { 0x7eec2fbcb0c3c941ULL, 0x9d1459e9d27d4766ULL, },
+ { 0x020a22e0debbd140ULL, 0x4fbb0ef3a9e0453bULL, },
+ { 0xe8df4a9ccb0c350bULL, 0x37b3761e2e442cffULL, },
+ { 0x7c3604df51731065ULL, 0xd9add64be7d81e17ULL, },
+ { 0x35a1aacf3f24481fULL, 0x900caa26ecaf303bULL, }, /* 96 */
+ { 0x7f0fd7311d2a2997ULL, 0x5e11155ee03d0362ULL, },
+ { 0x7959c1ef0ab6e6c3ULL, 0x41695f03ff01377bULL, },
+ { 0x89d8f6a1bc2ded57ULL, 0x29ed46aadb5c8a3cULL, },
+ { 0x01ec800ecaa24ac8ULL, 0xf32ccdbb9c58b788ULL, },
+ { 0xffd7297c53176782ULL, 0x4acc984953e0cc00ULL, },
+ { 0x04316ff6e9707c3dULL, 0xd5f54b0b0ac9f7e0ULL, },
+ { 0xffe6fc76421c7405ULL, 0x8f42f98ab98b12e9ULL, },
+ { 0xa75ea33ed2e809e1ULL, 0xb6fdbf643abee85cULL, }, /* 104 */
+ { 0xc75019063471bcc9ULL, 0x05bcd250f1d0ad42ULL, },
+ { 0x300d94eaa78224eaULL, 0x615cfa00370a0c2aULL, },
+ { 0xaa1a04f419d03dccULL, 0x8fe0ca60107a1a34ULL, },
+ { 0x5f0bb18ad9b000d4ULL, 0xd3ed3780ee630840ULL, },
+ { 0x25e24aa388dc4d8cULL, 0x40c1586349788fbaULL, },
+ { 0x0ec344de11f41ac8ULL, 0xed9aea2a99a95e8aULL, },
+ { 0x02499bebf3ac5a24ULL, 0xecb186c0e06045b8ULL, },
+ };
+
+ 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_DPSUB_U_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_DPSUB_U_W(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPSUB_U_W__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_DPSUB_U_W__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-multiply/test_msa_maddv_b.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_maddv_b.c
new file mode 100644
index 0000000000..d543e1af28
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_maddv_b.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction MADDV.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Multiply";
+ char *instruction_name = "MADDV.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 */
+ { 0x0101010101010101ULL, 0x0101010101010101ULL, },
+ { 0x5757575757575757ULL, 0x5757575757575757ULL, },
+ { 0x0202020202020202ULL, 0x0202020202020202ULL, },
+ { 0x3636363636363636ULL, 0x3636363636363636ULL, },
+ { 0x0303030303030303ULL, 0x0303030303030303ULL, },
+ { 0x2075cb2075cb2075ULL, 0xcb2075cb2075cb20ULL, },
+ { 0x0404040404040404ULL, 0x0404040404040404ULL, },
+ { 0x0404040404040404ULL, 0x0404040404040404ULL, }, /* 8 */
+ { 0x0404040404040404ULL, 0x0404040404040404ULL, },
+ { 0x0404040404040404ULL, 0x0404040404040404ULL, },
+ { 0x0404040404040404ULL, 0x0404040404040404ULL, },
+ { 0x0404040404040404ULL, 0x0404040404040404ULL, },
+ { 0x0404040404040404ULL, 0x0404040404040404ULL, },
+ { 0x0404040404040404ULL, 0x0404040404040404ULL, },
+ { 0x0404040404040404ULL, 0x0404040404040404ULL, },
+ { 0x5a5a5a5a5a5a5a5aULL, 0x5a5a5a5a5a5a5a5aULL, }, /* 16 */
+ { 0x5a5a5a5a5a5a5a5aULL, 0x5a5a5a5a5a5a5a5aULL, },
+ { 0x3e3e3e3e3e3e3e3eULL, 0x3e3e3e3e3e3e3e3eULL, },
+ { 0xb0b0b0b0b0b0b0b0ULL, 0xb0b0b0b0b0b0b0b0ULL, },
+ { 0x2828282828282828ULL, 0x2828282828282828ULL, },
+ { 0x0606060606060606ULL, 0x0606060606060606ULL, },
+ { 0xc45236c45236c452ULL, 0x36c45236c45236c4ULL, },
+ { 0x5c5c5c5c5c5c5c5cULL, 0x5c5c5c5c5c5c5c5cULL, },
+ { 0x0707070707070707ULL, 0x0707070707070707ULL, }, /* 24 */
+ { 0x0707070707070707ULL, 0x0707070707070707ULL, },
+ { 0x7979797979797979ULL, 0x7979797979797979ULL, },
+ { 0xb2b2b2b2b2b2b2b2ULL, 0xb2b2b2b2b2b2b2b2ULL, },
+ { 0x6e6e6e6e6e6e6e6eULL, 0x6e6e6e6e6e6e6e6eULL, },
+ { 0x5d5d5d5d5d5d5d5dULL, 0x5d5d5d5d5d5d5d5dULL, },
+ { 0xbc83f5bc83f5bc83ULL, 0xf5bc83f5bc83f5bcULL, },
+ { 0x0808080808080808ULL, 0x0808080808080808ULL, },
+ { 0x3c3c3c3c3c3c3c3cULL, 0x3c3c3c3c3c3c3c3cULL, }, /* 32 */
+ { 0x3c3c3c3c3c3c3c3cULL, 0x3c3c3c3c3c3c3c3cULL, },
+ { 0xb4b4b4b4b4b4b4b4ULL, 0xb4b4b4b4b4b4b4b4ULL, },
+ { 0x7070707070707070ULL, 0x7070707070707070ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xa4a4a4a4a4a4a4a4ULL, 0xa4a4a4a4a4a4a4a4ULL, },
+ { 0x88cc4488cc4488ccULL, 0x4488cc4488cc4488ULL, },
+ { 0xd8d8d8d8d8d8d8d8ULL, 0xd8d8d8d8d8d8d8d8ULL, },
+ { 0xa5a5a5a5a5a5a5a5ULL, 0xa5a5a5a5a5a5a5a5ULL, }, /* 40 */
+ { 0xa5a5a5a5a5a5a5a5ULL, 0xa5a5a5a5a5a5a5a5ULL, },
+ { 0x8383838383838383ULL, 0x8383838383838383ULL, },
+ { 0x7272727272727272ULL, 0x7272727272727272ULL, },
+ { 0x1616161616161616ULL, 0x1616161616161616ULL, },
+ { 0x3f3f3f3f3f3f3f3fULL, 0x3f3f3f3f3f3f3f3fULL, },
+ { 0x7889677889677889ULL, 0x6778896778896778ULL, },
+ { 0x0c0c0c0c0c0c0c0cULL, 0x0c0c0c0c0c0c0c0cULL, },
+ { 0x297ed4297ed4297eULL, 0xd4297ed4297ed429ULL, }, /* 48 */
+ { 0x297ed4297ed4297eULL, 0xd4297ed4297ed429ULL, },
+ { 0xe7ca04e7ca04e7caULL, 0x04e7ca04e7ca04e7ULL, },
+ { 0x46f09c46f09c46f0ULL, 0x9c46f09c46f09c46ULL, },
+ { 0x2a183c2a183c2a18ULL, 0x3c2a183c2a183c2aULL, },
+ { 0x6362646362646362ULL, 0x6463626463626463ULL, },
+ { 0xac26a4ac26a4ac26ULL, 0xa4ac26a4ac26a4acULL, },
+ { 0x80d42c80d42c80d4ULL, 0x2c80d42c80d42c80ULL, },
+ { 0x6463656463656463ULL, 0x6564636564636564ULL, }, /* 56 */
+ { 0x6463656463656463ULL, 0x6564636564636564ULL, },
+ { 0xfc6d8bfc6d8bfc6dULL, 0x8bfc6d8bfc6d8bfcULL, },
+ { 0x48f29e48f29e48f2ULL, 0x9e48f29e48f29e48ULL, },
+ { 0x98fe3298fe3298feULL, 0x3298fe3298fe3298ULL, },
+ { 0x2c81d72c81d72c81ULL, 0xd72c81d72c81d72cULL, },
+ { 0x002f5f002f5f002fULL, 0x5f002f5f002f5f00ULL, },
+ { 0x1010101010101010ULL, 0x1010101010101010ULL, },
+ { 0x50f4b4a050944910ULL, 0x09818994142910a0ULL, }, /* 64 */
+ { 0xa8a0b48458da5c10ULL, 0x4fe29220ea6e7070ULL, },
+ { 0x08e408fc40188310ULL, 0xbcca14c29417e060ULL, },
+ { 0x889acc58f0da8d90ULL, 0x0bc1ec1242cd40e0ULL, },
+ { 0xe046cc3cf820a090ULL, 0x5122f59e1812a0b0ULL, },
+ { 0xf94acc85218951d0ULL, 0x95738e42d193e4c0ULL, },
+ { 0x9d16cc43c6665ed0ULL, 0x53db3028d828be70ULL, },
+ { 0x6db8cc0a0c890c40ULL, 0x3d628818b56622f0ULL, },
+ { 0xcdfc2082f4c73340ULL, 0xaa4a0aba5f0f92e0ULL, }, /* 72 */
+ { 0x71c8204099a44040ULL, 0x68b2aca066a46c90ULL, },
+ { 0x016c64244a05b940ULL, 0x59f2d0a19fddc520ULL, },
+ { 0x4132584638a46f40ULL, 0xd44a00c982f36fa0ULL, },
+ { 0xc1e81ca2e86679c0ULL, 0x2341d81930a9cf20ULL, },
+ { 0x918a1c692e892730ULL, 0x0dc830090de733a0ULL, },
+ { 0xd150108b1c28dd30ULL, 0x88206031f0fddd20ULL, },
+ { 0xd1b1f4b4a08961f4ULL, 0x3101a07181016120ULL, },
+ { 0xd9fb2c24a0fb96f4ULL, 0x8c6880ef7f7c11a0ULL, }, /* 80 */
+ { 0x9c452c10c01c3094ULL, 0x64c00035ea008320ULL, },
+ { 0x6c8714b080c04094ULL, 0xa0c00000380072a0ULL, },
+ { 0xac30cca08080c0acULL, 0xc0800000300016a0ULL, },
+ { 0x0c101420808080acULL, 0x00000000d0003620ULL, },
+ { 0xd0f014800000000cULL, 0x00000000e00082a0ULL, },
+ { 0x9050ac800000000cULL, 0x0000000080004c20ULL, },
+ { 0x90007400000000b4ULL, 0x0000000000006420ULL, },
+ { 0x1000ac00000000b4ULL, 0x00000000000024a0ULL, }, /* 88 */
+ { 0xc000ac0000000054ULL, 0x000000000000ac20ULL, },
+ { 0xc000940000000054ULL, 0x00000000000088a0ULL, },
+ { 0xc0004c00000000ecULL, 0x00000000000098a0ULL, },
+ { 0xc0009400000000ecULL, 0x0000000000001820ULL, },
+ { 0x000094000000004cULL, 0x000000000000c8a0ULL, },
+ { 0x00002c000000004cULL, 0x000000000000b020ULL, },
+ { 0x0000f40000000074ULL, 0x0000000000001020ULL, },
+ { 0x00002c0000000074ULL, 0x00000000000010a0ULL, }, /* 96 */
+ { 0x0000b40000000074ULL, 0x0000000000001020ULL, },
+ { 0x00006c0000000074ULL, 0x00000000000010a0ULL, },
+ { 0x0000740000000074ULL, 0x0000000000001020ULL, },
+ { 0x0000740000000014ULL, 0x00000000000030a0ULL, },
+ { 0x00007400000000b4ULL, 0x0000000000009020ULL, },
+ { 0x0000740000000054ULL, 0x000000000000b0a0ULL, },
+ { 0x00007400000000f4ULL, 0x0000000000001020ULL, },
+ { 0x00004c00000000f4ULL, 0x00000000000060a0ULL, }, /* 104 */
+ { 0x0000f400000000f4ULL, 0x0000000000004020ULL, },
+ { 0x0000cc00000000f4ULL, 0x00000000000080a0ULL, },
+ { 0x00007400000000f4ULL, 0x0000000000000020ULL, },
+ { 0x00006c000000004cULL, 0x0000000000000020ULL, },
+ { 0x0000b40000000074ULL, 0x0000000000000020ULL, },
+ { 0x00002c00000000ccULL, 0x0000000000000020ULL, },
+ { 0x0000f400000000f4ULL, 0x0000000000000020ULL, },
+ };
+
+ 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_MADDV_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_MADDV_B(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDV_B__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDV_B__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-multiply/test_msa_maddv_d.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_maddv_d.c
new file mode 100644
index 0000000000..fda35f757b
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_maddv_d.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction MADDV.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Multiply";
+ char *instruction_name = "MADDV.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 */
+ { 0x0000000000000001ULL, 0x0000000000000001ULL, },
+ { 0x5555555555555557ULL, 0x5555555555555557ULL, },
+ { 0x0000000000000002ULL, 0x0000000000000002ULL, },
+ { 0x3333333333333336ULL, 0x3333333333333336ULL, },
+ { 0x0000000000000003ULL, 0x0000000000000003ULL, },
+ { 0x1c71c71c71c71c75ULL, 0xc71c71c71c71c720ULL, },
+ { 0x0000000000000004ULL, 0x0000000000000004ULL, },
+ { 0x0000000000000004ULL, 0x0000000000000004ULL, }, /* 8 */
+ { 0x0000000000000004ULL, 0x0000000000000004ULL, },
+ { 0x0000000000000004ULL, 0x0000000000000004ULL, },
+ { 0x0000000000000004ULL, 0x0000000000000004ULL, },
+ { 0x0000000000000004ULL, 0x0000000000000004ULL, },
+ { 0x0000000000000004ULL, 0x0000000000000004ULL, },
+ { 0x0000000000000004ULL, 0x0000000000000004ULL, },
+ { 0x0000000000000004ULL, 0x0000000000000004ULL, },
+ { 0x555555555555555aULL, 0x555555555555555aULL, }, /* 16 */
+ { 0x555555555555555aULL, 0x555555555555555aULL, },
+ { 0x8e38e38e38e38e3eULL, 0x8e38e38e38e38e3eULL, },
+ { 0xaaaaaaaaaaaaaab0ULL, 0xaaaaaaaaaaaaaab0ULL, },
+ { 0x2222222222222228ULL, 0x2222222222222228ULL, },
+ { 0x0000000000000006ULL, 0x0000000000000006ULL, },
+ { 0x12f684bda12f6852ULL, 0x2f684bda12f684c4ULL, },
+ { 0x555555555555555cULL, 0x555555555555555cULL, },
+ { 0x0000000000000007ULL, 0x0000000000000007ULL, }, /* 24 */
+ { 0x0000000000000007ULL, 0x0000000000000007ULL, },
+ { 0x1c71c71c71c71c79ULL, 0x1c71c71c71c71c79ULL, },
+ { 0xaaaaaaaaaaaaaab2ULL, 0xaaaaaaaaaaaaaab2ULL, },
+ { 0x666666666666666eULL, 0x666666666666666eULL, },
+ { 0x555555555555555dULL, 0x555555555555555dULL, },
+ { 0x5ed097b425ed0983ULL, 0xed097b425ed097bcULL, },
+ { 0x0000000000000008ULL, 0x0000000000000008ULL, },
+ { 0x333333333333333cULL, 0x333333333333333cULL, }, /* 32 */
+ { 0x333333333333333cULL, 0x333333333333333cULL, },
+ { 0xaaaaaaaaaaaaaab4ULL, 0xaaaaaaaaaaaaaab4ULL, },
+ { 0x6666666666666670ULL, 0x6666666666666670ULL, },
+ { 0x5c28f5c28f5c2900ULL, 0x5c28f5c28f5c2900ULL, },
+ { 0x99999999999999a4ULL, 0x99999999999999a4ULL, },
+ { 0x16c16c16c16c16ccULL, 0xd27d27d27d27d288ULL, },
+ { 0xccccccccccccccd8ULL, 0xccccccccccccccd8ULL, },
+ { 0x99999999999999a5ULL, 0x99999999999999a5ULL, }, /* 40 */
+ { 0x99999999999999a5ULL, 0x99999999999999a5ULL, },
+ { 0x7777777777777783ULL, 0x7777777777777783ULL, },
+ { 0x6666666666666672ULL, 0x6666666666666672ULL, },
+ { 0xa3d70a3d70a3d716ULL, 0xa3d70a3d70a3d716ULL, },
+ { 0x333333333333333fULL, 0x333333333333333fULL, },
+ { 0xd27d27d27d27d289ULL, 0xc16c16c16c16c178ULL, },
+ { 0x000000000000000cULL, 0x000000000000000cULL, },
+ { 0x1c71c71c71c71c7eULL, 0xc71c71c71c71c729ULL, }, /* 48 */
+ { 0x1c71c71c71c71c7eULL, 0xc71c71c71c71c729ULL, },
+ { 0x2f684bda12f684caULL, 0xf684bda12f684be7ULL, },
+ { 0x38e38e38e38e38f0ULL, 0x8e38e38e38e38e46ULL, },
+ { 0xb60b60b60b60b618ULL, 0xc71c71c71c71c72aULL, },
+ { 0x5555555555555562ULL, 0x5555555555555563ULL, },
+ { 0x06522c3f35ba7826ULL, 0xa781948b0fcd6eacULL, },
+ { 0x71c71c71c71c71d4ULL, 0x1c71c71c71c71c80ULL, },
+ { 0x5555555555555563ULL, 0x5555555555555564ULL, }, /* 56 */
+ { 0x5555555555555563ULL, 0x5555555555555564ULL, },
+ { 0x97b425ed097b426dULL, 0x7b425ed097b425fcULL, },
+ { 0x38e38e38e38e38f2ULL, 0x8e38e38e38e38e48ULL, },
+ { 0xeeeeeeeeeeeeeefeULL, 0x8888888888888898ULL, },
+ { 0x1c71c71c71c71c81ULL, 0xc71c71c71c71c72cULL, },
+ { 0x87e6b74f0329162fULL, 0x3c0ca4587e6b7500ULL, },
+ { 0x0000000000000010ULL, 0x0000000000000010ULL, },
+ { 0xad45be6961639010ULL, 0x3297fdea749880a0ULL, }, /* 64 */
+ { 0x9ced640a487afa10ULL, 0xeaa90809e3b1a470ULL, },
+ { 0xa5b377aa0caf5a10ULL, 0x95c9a7903bd12160ULL, },
+ { 0xa194ffe4fb27d390ULL, 0x17e6ccd3c9a1c0e0ULL, },
+ { 0x913ca585e23f3d90ULL, 0xcff7d6f338bae4b0ULL, },
+ { 0xc8ead0bee02cadd0ULL, 0x381c4d6a83a94cc0ULL, },
+ { 0x33b60e279e9989d0ULL, 0xe7f71f9b97ee3470ULL, },
+ { 0x217580abbfdd3e40ULL, 0x6779436687bc89f0ULL, },
+ { 0x2a3b944b84119e40ULL, 0x1299e2ecdfdc06e0ULL, }, /* 72 */
+ { 0x9506d1b4427e7a40ULL, 0xc274b51df420ee90ULL, },
+ { 0x1b2bb7962782ba40ULL, 0x9bf62dc42637b820ULL, },
+ { 0x91d16316b1663b40ULL, 0x3cf7c824fb128ca0ULL, },
+ { 0x8db2eb519fdeb4c0ULL, 0xbf14ed6888e32c20ULL, },
+ { 0x7b725dd5c1226930ULL, 0x3e97113378b181a0ULL, },
+ { 0xf21809564b05ea30ULL, 0xdf98ab944d8c5620ULL, },
+ { 0x3dcc402bfcefb9f4ULL, 0xf26a7a4530ab3a20ULL, },
+ { 0x81a8956a21043af4ULL, 0xe63ec4a9de07f3a0ULL, }, /* 80 */
+ { 0x14acc7eab115be94ULL, 0xa72fae300e450520ULL, },
+ { 0x4c5c3900181b6494ULL, 0xc26796e561c70ba0ULL, },
+ { 0x513451003792b1acULL, 0x5acad191d5b18fa0ULL, },
+ { 0x0daff27cb51538acULL, 0x31375ce2aea24b20ULL, },
+ { 0xbb9ebee52390b20cULL, 0xd8cfb350af547ea0ULL, },
+ { 0x4df25269204a3c0cULL, 0x07b9241bbd1b8320ULL, },
+ { 0x39b3c4d066371fb4ULL, 0x2a4dc00c264fb720ULL, },
+ { 0xf9aee458846dd0b4ULL, 0x79d838b37c524ca0ULL, }, /* 88 */
+ { 0x115f9e7f00744254ULL, 0x46ec87fe3540fa20ULL, },
+ { 0xb01458f6b0850854ULL, 0xde82246a25db24a0ULL, },
+ { 0xc18097bf5a7bb9ecULL, 0x4155f0da566748a0ULL, },
+ { 0x70c7391b1a7d90ecULL, 0x0400deec0a0cb020ULL, },
+ { 0xf7a41980bd958c4cULL, 0xedfeb14ff6d44fa0ULL, },
+ { 0x7906f19718fcf64cULL, 0x29e471752ecca820ULL, },
+ { 0xb6393967140b1974ULL, 0xbd0ed4c39361fc20ULL, },
+ { 0x74ecb57da4acfa74ULL, 0x36ea3f3dbcafcda0ULL, }, /* 96 */
+ { 0x5b14aa5e3f7c1b74ULL, 0xeb031f17fe2b7120ULL, },
+ { 0x0468573ef6087c74ULL, 0xe8ef35d2e05abea0ULL, },
+ { 0xd69cf5cf0de21d74ULL, 0x39f569701e89ae20ULL, },
+ { 0xf233f7a10f743514ULL, 0xf574fc00c1b755a0ULL, },
+ { 0x873c421a5ed469b4ULL, 0x96f393305dfcdf20ULL, },
+ { 0x17e80b0449fea354ULL, 0x2f05ddb06b40c2a0ULL, },
+ { 0x0741f67f982609f4ULL, 0x9c23f2dbc2b79820ULL, },
+ { 0x530275e3b2de7ff4ULL, 0xc6904e7f6f6c1aa0ULL, }, /* 104 */
+ { 0xf8214644bbe3f5f4ULL, 0xe44a0de01c974f20ULL, },
+ { 0xb59c90c0a8b66bf4ULL, 0x9abcf7a8e1391da0ULL, },
+ { 0xb67d543caed5e1f4ULL, 0x4ce8f72994d78e20ULL, },
+ { 0xcee67f5e9d2e224cULL, 0xba31bdf2ab48a220ULL, },
+ { 0x87acb43db40fad74ULL, 0x8a259794c40e3620ULL, },
+ { 0x45c27495332aeeccULL, 0xe81c4208ecf84a20ULL, },
+ { 0x50a99b794e1bc8f4ULL, 0x17cdf4c275d6de20ULL, },
+ };
+
+ 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_MADDV_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_MADDV_D(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDV_D__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDV_D__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-multiply/test_msa_maddv_h.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_maddv_h.c
new file mode 100644
index 0000000000..a9ee9b328a
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_maddv_h.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction MADDV.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Multiply";
+ char *instruction_name = "MADDV.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 */
+ { 0x0001000100010001ULL, 0x0001000100010001ULL, },
+ { 0x5557555755575557ULL, 0x5557555755575557ULL, },
+ { 0x0002000200020002ULL, 0x0002000200020002ULL, },
+ { 0x3336333633363336ULL, 0x3336333633363336ULL, },
+ { 0x0003000300030003ULL, 0x0003000300030003ULL, },
+ { 0x1c75c72071cb1c75ULL, 0xc72071cb1c75c720ULL, },
+ { 0x0004000400040004ULL, 0x0004000400040004ULL, },
+ { 0x0004000400040004ULL, 0x0004000400040004ULL, }, /* 8 */
+ { 0x0004000400040004ULL, 0x0004000400040004ULL, },
+ { 0x0004000400040004ULL, 0x0004000400040004ULL, },
+ { 0x0004000400040004ULL, 0x0004000400040004ULL, },
+ { 0x0004000400040004ULL, 0x0004000400040004ULL, },
+ { 0x0004000400040004ULL, 0x0004000400040004ULL, },
+ { 0x0004000400040004ULL, 0x0004000400040004ULL, },
+ { 0x0004000400040004ULL, 0x0004000400040004ULL, },
+ { 0x555a555a555a555aULL, 0x555a555a555a555aULL, }, /* 16 */
+ { 0x555a555a555a555aULL, 0x555a555a555a555aULL, },
+ { 0x8e3e8e3e8e3e8e3eULL, 0x8e3e8e3e8e3e8e3eULL, },
+ { 0xaab0aab0aab0aab0ULL, 0xaab0aab0aab0aab0ULL, },
+ { 0x2228222822282228ULL, 0x2228222822282228ULL, },
+ { 0x0006000600060006ULL, 0x0006000600060006ULL, },
+ { 0x685284c4a1366852ULL, 0x84c4a136685284c4ULL, },
+ { 0x555c555c555c555cULL, 0x555c555c555c555cULL, },
+ { 0x0007000700070007ULL, 0x0007000700070007ULL, }, /* 24 */
+ { 0x0007000700070007ULL, 0x0007000700070007ULL, },
+ { 0x1c791c791c791c79ULL, 0x1c791c791c791c79ULL, },
+ { 0xaab2aab2aab2aab2ULL, 0xaab2aab2aab2aab2ULL, },
+ { 0x666e666e666e666eULL, 0x666e666e666e666eULL, },
+ { 0x555d555d555d555dULL, 0x555d555d555d555dULL, },
+ { 0x098397bc25f50983ULL, 0x97bc25f5098397bcULL, },
+ { 0x0008000800080008ULL, 0x0008000800080008ULL, },
+ { 0x333c333c333c333cULL, 0x333c333c333c333cULL, }, /* 32 */
+ { 0x333c333c333c333cULL, 0x333c333c333c333cULL, },
+ { 0xaab4aab4aab4aab4ULL, 0xaab4aab4aab4aab4ULL, },
+ { 0x6670667066706670ULL, 0x6670667066706670ULL, },
+ { 0x2900290029002900ULL, 0x2900290029002900ULL, },
+ { 0x99a499a499a499a4ULL, 0x99a499a499a499a4ULL, },
+ { 0x16ccd2888e4416ccULL, 0xd2888e4416ccd288ULL, },
+ { 0xccd8ccd8ccd8ccd8ULL, 0xccd8ccd8ccd8ccd8ULL, },
+ { 0x99a599a599a599a5ULL, 0x99a599a599a599a5ULL, }, /* 40 */
+ { 0x99a599a599a599a5ULL, 0x99a599a599a599a5ULL, },
+ { 0x7783778377837783ULL, 0x7783778377837783ULL, },
+ { 0x6672667266726672ULL, 0x6672667266726672ULL, },
+ { 0xd716d716d716d716ULL, 0xd716d716d716d716ULL, },
+ { 0x333f333f333f333fULL, 0x333f333f333f333fULL, },
+ { 0xd289c178b067d289ULL, 0xc178b067d289c178ULL, },
+ { 0x000c000c000c000cULL, 0x000c000c000c000cULL, },
+ { 0x1c7ec72971d41c7eULL, 0xc72971d41c7ec729ULL, }, /* 48 */
+ { 0x1c7ec72971d41c7eULL, 0xc72971d41c7ec729ULL, },
+ { 0x84ca4be7130484caULL, 0x4be7130484ca4be7ULL, },
+ { 0x38f08e46e39c38f0ULL, 0x8e46e39c38f08e46ULL, },
+ { 0xb618c72ad83cb618ULL, 0xc72ad83cb618c72aULL, },
+ { 0x5562556355645562ULL, 0x5563556455625563ULL, },
+ { 0x78266eac81a47826ULL, 0x6eac81a478266eacULL, },
+ { 0x71d41c80c72c71d4ULL, 0x1c80c72c71d41c80ULL, },
+ { 0x5563556455655563ULL, 0x5564556555635564ULL, }, /* 56 */
+ { 0x5563556455655563ULL, 0x5564556555635564ULL, },
+ { 0x426d25fc098b426dULL, 0x25fc098b426d25fcULL, },
+ { 0x38f28e48e39e38f2ULL, 0x8e48e39e38f28e48ULL, },
+ { 0xeefe88982232eefeULL, 0x88982232eefe8898ULL, },
+ { 0x1c81c72c71d71c81ULL, 0xc72c71d71c81c72cULL, },
+ { 0x162f7500b75f162fULL, 0x7500b75f162f7500ULL, },
+ { 0x0010001000100010ULL, 0x0010001000100010ULL, },
+ { 0xcbf432a0c5949010ULL, 0x838136944f2980a0ULL, }, /* 64 */
+ { 0xf8a073846fdafa10ULL, 0x81e20820066ea470ULL, },
+ { 0x25e45efce9185a10ULL, 0xd1ca0ec2ee172160ULL, },
+ { 0x9e9a52589fdad390ULL, 0x88c19612bccdc0e0ULL, },
+ { 0xcb46933c4a203d90ULL, 0x8722679e7412e4b0ULL, },
+ { 0xec4ab9850c89add0ULL, 0x31736642d9934cc0ULL, },
+ { 0x15164543016689d0ULL, 0xd2dbe12880283470ULL, },
+ { 0xe4b8e50ad4893e40ULL, 0xb8628f18916689f0ULL, },
+ { 0x11fcd0824dc79e40ULL, 0x084a95ba790f06e0ULL, }, /* 72 */
+ { 0x3ac85c4042a47a40ULL, 0xa9b210a01fa4ee90ULL, },
+ { 0x4a6ce5241805ba40ULL, 0x2ff282a198ddb820ULL, },
+ { 0xda320a46aaa43b40ULL, 0xaa4ae1c91cf38ca0ULL, },
+ { 0x52e8fda26166b4c0ULL, 0x61416919eba92c20ULL, },
+ { 0x228a9d6934896930ULL, 0x46c81709fce781a0ULL, },
+ { 0xb250c28bc728ea30ULL, 0xc120763180fd5620ULL, },
+ { 0xeab115b4cc89b9f4ULL, 0x1e01ac71b6013a20ULL, },
+ { 0x1ffb192480fb3af4ULL, 0x7b68d8ef267cf3a0ULL, }, /* 80 */
+ { 0xf545d210101cbe94ULL, 0xdcc07635cb000520ULL, },
+ { 0x8b8730b052c06494ULL, 0x5ec03300e4000ba0ULL, },
+ { 0xaa30f5a0a980b1acULL, 0x51803b00ac008fa0ULL, },
+ { 0xa21071208c8038acULL, 0x9c00e50050004b20ULL, },
+ { 0x99f03080ba00b20cULL, 0x2000270000007ea0ULL, },
+ { 0xf850658020003c0cULL, 0x2000000000008320ULL, },
+ { 0x9900ed0040001fb4ULL, 0x400000000000b720ULL, },
+ { 0xf300c900c000d0b4ULL, 0x0000000000004ca0ULL, }, /* 88 */
+ { 0x4d00840000004254ULL, 0x000000000000fa20ULL, },
+ { 0x5f002c0000000854ULL, 0x00000000000024a0ULL, },
+ { 0xb00068000000b9ecULL, 0x00000000000048a0ULL, },
+ { 0x90004800000090ecULL, 0x000000000000b020ULL, },
+ { 0x7000200000008c4cULL, 0x0000000000004fa0ULL, },
+ { 0xd00060000000f64cULL, 0x000000000000a820ULL, },
+ { 0x0000400000001974ULL, 0x000000000000fc20ULL, },
+ { 0x000040000000fa74ULL, 0x000000000000cda0ULL, }, /* 96 */
+ { 0x0000400000001b74ULL, 0x0000000000007120ULL, },
+ { 0x0000400000007c74ULL, 0x000000000000bea0ULL, },
+ { 0x0000400000001d74ULL, 0x000000000000ae20ULL, },
+ { 0x0000000000003514ULL, 0x00000000000055a0ULL, },
+ { 0x00000000000069b4ULL, 0x000000000000df20ULL, },
+ { 0x000000000000a354ULL, 0x000000000000c2a0ULL, },
+ { 0x00000000000009f4ULL, 0x0000000000009820ULL, },
+ { 0x0000000000007ff4ULL, 0x0000000000001aa0ULL, }, /* 104 */
+ { 0x000000000000f5f4ULL, 0x0000000000004f20ULL, },
+ { 0x0000000000006bf4ULL, 0x0000000000001da0ULL, },
+ { 0x000000000000e1f4ULL, 0x0000000000008e20ULL, },
+ { 0x000000000000224cULL, 0x000000000000a220ULL, },
+ { 0x000000000000ad74ULL, 0x0000000000003620ULL, },
+ { 0x000000000000eeccULL, 0x0000000000004a20ULL, },
+ { 0x000000000000c8f4ULL, 0x000000000000de20ULL, },
+ };
+
+ 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_MADDV_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_MADDV_H(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDV_H__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDV_H__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-multiply/test_msa_maddv_w.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_maddv_w.c
new file mode 100644
index 0000000000..bc3f5d246e
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_maddv_w.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction MADDV.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Multiply";
+ char *instruction_name = "MADDV.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 */
+ { 0x0000000100000001ULL, 0x0000000100000001ULL, },
+ { 0x5555555755555557ULL, 0x5555555755555557ULL, },
+ { 0x0000000200000002ULL, 0x0000000200000002ULL, },
+ { 0x3333333633333336ULL, 0x3333333633333336ULL, },
+ { 0x0000000300000003ULL, 0x0000000300000003ULL, },
+ { 0x1c71c72071c71c75ULL, 0xc71c71cb1c71c720ULL, },
+ { 0x0000000400000004ULL, 0x0000000400000004ULL, },
+ { 0x0000000400000004ULL, 0x0000000400000004ULL, }, /* 8 */
+ { 0x0000000400000004ULL, 0x0000000400000004ULL, },
+ { 0x0000000400000004ULL, 0x0000000400000004ULL, },
+ { 0x0000000400000004ULL, 0x0000000400000004ULL, },
+ { 0x0000000400000004ULL, 0x0000000400000004ULL, },
+ { 0x0000000400000004ULL, 0x0000000400000004ULL, },
+ { 0x0000000400000004ULL, 0x0000000400000004ULL, },
+ { 0x0000000400000004ULL, 0x0000000400000004ULL, },
+ { 0x5555555a5555555aULL, 0x5555555a5555555aULL, }, /* 16 */
+ { 0x5555555a5555555aULL, 0x5555555a5555555aULL, },
+ { 0x38e38e3e38e38e3eULL, 0x38e38e3e38e38e3eULL, },
+ { 0xaaaaaab0aaaaaab0ULL, 0xaaaaaab0aaaaaab0ULL, },
+ { 0x2222222822222228ULL, 0x2222222822222228ULL, },
+ { 0x0000000600000006ULL, 0x0000000600000006ULL, },
+ { 0x12f684c4a12f6852ULL, 0x84bda13612f684c4ULL, },
+ { 0x5555555c5555555cULL, 0x5555555c5555555cULL, },
+ { 0x0000000700000007ULL, 0x0000000700000007ULL, }, /* 24 */
+ { 0x0000000700000007ULL, 0x0000000700000007ULL, },
+ { 0x71c71c7971c71c79ULL, 0x71c71c7971c71c79ULL, },
+ { 0xaaaaaab2aaaaaab2ULL, 0xaaaaaab2aaaaaab2ULL, },
+ { 0x6666666e6666666eULL, 0x6666666e6666666eULL, },
+ { 0x5555555d5555555dULL, 0x5555555d5555555dULL, },
+ { 0x5ed097bc25ed0983ULL, 0x97b425f55ed097bcULL, },
+ { 0x0000000800000008ULL, 0x0000000800000008ULL, },
+ { 0x3333333c3333333cULL, 0x3333333c3333333cULL, }, /* 32 */
+ { 0x3333333c3333333cULL, 0x3333333c3333333cULL, },
+ { 0xaaaaaab4aaaaaab4ULL, 0xaaaaaab4aaaaaab4ULL, },
+ { 0x6666667066666670ULL, 0x6666667066666670ULL, },
+ { 0x8f5c29008f5c2900ULL, 0x8f5c29008f5c2900ULL, },
+ { 0x999999a4999999a4ULL, 0x999999a4999999a4ULL, },
+ { 0x7d27d288c16c16ccULL, 0x38e38e447d27d288ULL, },
+ { 0xccccccd8ccccccd8ULL, 0xccccccd8ccccccd8ULL, },
+ { 0x999999a5999999a5ULL, 0x999999a5999999a5ULL, }, /* 40 */
+ { 0x999999a5999999a5ULL, 0x999999a5999999a5ULL, },
+ { 0x7777778377777783ULL, 0x7777778377777783ULL, },
+ { 0x6666667266666672ULL, 0x6666667266666672ULL, },
+ { 0x70a3d71670a3d716ULL, 0x70a3d71670a3d716ULL, },
+ { 0x3333333f3333333fULL, 0x3333333f3333333fULL, },
+ { 0x6c16c1787d27d289ULL, 0x5b05b0676c16c178ULL, },
+ { 0x0000000c0000000cULL, 0x0000000c0000000cULL, },
+ { 0x1c71c72971c71c7eULL, 0xc71c71d41c71c729ULL, }, /* 48 */
+ { 0x1c71c72971c71c7eULL, 0xc71c71d41c71c729ULL, },
+ { 0x2f684be712f684caULL, 0x4bda13042f684be7ULL, },
+ { 0x38e38e46e38e38f0ULL, 0x8e38e39c38e38e46ULL, },
+ { 0x1c71c72a0b60b618ULL, 0x2d82d83c1c71c72aULL, },
+ { 0x5555556355555562ULL, 0x5555556455555563ULL, },
+ { 0x0fcd6eac35ba7826ULL, 0x5ba781a40fcd6eacULL, },
+ { 0x71c71c80c71c71d4ULL, 0x1c71c72c71c71c80ULL, },
+ { 0x5555556455555563ULL, 0x5555556555555564ULL, }, /* 56 */
+ { 0x5555556455555563ULL, 0x5555556555555564ULL, },
+ { 0x97b425fc097b426dULL, 0x25ed098b97b425fcULL, },
+ { 0x38e38e48e38e38f2ULL, 0x8e38e39e38e38e48ULL, },
+ { 0x88888898eeeeeefeULL, 0x2222223288888898ULL, },
+ { 0x1c71c72c71c71c81ULL, 0xc71c71d71c71c72cULL, },
+ { 0x7e6b75000329162fULL, 0x87e6b75f7e6b7500ULL, },
+ { 0x0000001000000010ULL, 0x0000001000000010ULL, },
+ { 0xb10332a061639010ULL, 0x3a253694749880a0ULL, }, /* 64 */
+ { 0xc1c27384487afa10ULL, 0xbb9c0820e3b1a470ULL, },
+ { 0x35565efc0caf5a10ULL, 0x735b0ec23bd12160ULL, },
+ { 0xe6475258fb27d390ULL, 0x49d49612c9a1c0e0ULL, },
+ { 0xf706933ce23f3d90ULL, 0xcb4b679e38bae4b0ULL, },
+ { 0xabfab985e02cadd0ULL, 0x0836664283a94cc0ULL, },
+ { 0xa33845439e9989d0ULL, 0x5b9fe12897ee3470ULL, },
+ { 0x1df3e50abfdd3e40ULL, 0x6d858f1887bc89f0ULL, },
+ { 0x9187d08284119e40ULL, 0x254495badfdc06e0ULL, }, /* 72 */
+ { 0x88c55c40427e7a40ULL, 0x78ae10a0f420ee90ULL, },
+ { 0x3f78e5242782ba40ULL, 0x93ad82a12637b820ULL, },
+ { 0x28380a46b1663b40ULL, 0x255be1c9fb128ca0ULL, },
+ { 0xd928fda29fdeb4c0ULL, 0xfbd5691988e32c20ULL, },
+ { 0x53e49d69c1226930ULL, 0x0dbb170978b181a0ULL, },
+ { 0x3ca3c28b4b05ea30ULL, 0x9f6976314d8c5620ULL, },
+ { 0x621b15b4fcefb9f4ULL, 0x7f3fac7130ab3a20ULL, },
+ { 0x81b8192421043af4ULL, 0x7180d8efde07f3a0ULL, }, /* 80 */
+ { 0xa0a1d210b115be94ULL, 0x33a676350e450520ULL, },
+ { 0xe27e30b0181b6494ULL, 0x359b330061c70ba0ULL, },
+ { 0xe0f1f5a03792b1acULL, 0xe6a63b00d5b18fa0ULL, },
+ { 0x38af7120b51538acULL, 0x7938e500aea24b20ULL, },
+ { 0x7a4830802390b20cULL, 0x4b472700af547ea0ULL, },
+ { 0xcc2f6580204a3c0cULL, 0x37510000bd1b8320ULL, },
+ { 0x9ba9ed0066371fb4ULL, 0xeba90000264fb720ULL, },
+ { 0x7400c900846dd0b4ULL, 0xb6b700007c524ca0ULL, }, /* 88 */
+ { 0x7e4e840000744254ULL, 0xf24d00003540fa20ULL, },
+ { 0x242a2c00b0850854ULL, 0xdb00000025db24a0ULL, },
+ { 0x38a168005a7bb9ecULL, 0xa3000000566748a0ULL, },
+ { 0x6cb048001a7d90ecULL, 0x7d0000000a0cb020ULL, },
+ { 0xe4dc2000bd958c4cULL, 0x2f000000f6d44fa0ULL, },
+ { 0xbcc9600018fcf64cULL, 0x000000002ecca820ULL, },
+ { 0x739b4000140b1974ULL, 0x000000009361fc20ULL, },
+ { 0x8ed24000a4acfa74ULL, 0x00000000bcafcda0ULL, }, /* 96 */
+ { 0xc3dd40003f7c1b74ULL, 0x00000000fe2b7120ULL, },
+ { 0x1fac4000f6087c74ULL, 0x00000000e05abea0ULL, },
+ { 0x9e6f40000de21d74ULL, 0x000000001e89ae20ULL, },
+ { 0x637500000f743514ULL, 0x00000000c1b755a0ULL, },
+ { 0xd9b400005ed469b4ULL, 0x000000005dfcdf20ULL, },
+ { 0x0a50000049fea354ULL, 0x000000006b40c2a0ULL, },
+ { 0x07400000982609f4ULL, 0x00000000c2b79820ULL, },
+ { 0x57c00000b2de7ff4ULL, 0x000000006f6c1aa0ULL, }, /* 104 */
+ { 0x1d400000bbe3f5f4ULL, 0x000000001c974f20ULL, },
+ { 0x09c00000a8b66bf4ULL, 0x00000000e1391da0ULL, },
+ { 0x03400000aed5e1f4ULL, 0x0000000094d78e20ULL, },
+ { 0x7d8000009d2e224cULL, 0x00000000ab48a220ULL, },
+ { 0x3d000000b40fad74ULL, 0x00000000c40e3620ULL, },
+ { 0x96000000332aeeccULL, 0x00000000ecf84a20ULL, },
+ { 0xb40000004e1bc8f4ULL, 0x0000000075d6de20ULL, },
+ };
+
+ 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_MADDV_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_MADDV_W(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDV_W__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MADDV_W__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-multiply/test_msa_msubv_b.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_msubv_b.c
new file mode 100644
index 0000000000..808c49d050
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_msubv_b.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction MSUBV.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Multiply";
+ char *instruction_name = "MSUBV.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, },
+ { 0xa9a9a9a9a9a9a9a9ULL, 0xa9a9a9a9a9a9a9a9ULL, },
+ { 0xfefefefefefefefeULL, 0xfefefefefefefefeULL, },
+ { 0xcacacacacacacacaULL, 0xcacacacacacacacaULL, },
+ { 0xfdfdfdfdfdfdfdfdULL, 0xfdfdfdfdfdfdfdfdULL, },
+ { 0xe08b35e08b35e08bULL, 0x35e08b35e08b35e0ULL, },
+ { 0xfcfcfcfcfcfcfcfcULL, 0xfcfcfcfcfcfcfcfcULL, },
+ { 0xfcfcfcfcfcfcfcfcULL, 0xfcfcfcfcfcfcfcfcULL, }, /* 8 */
+ { 0xfcfcfcfcfcfcfcfcULL, 0xfcfcfcfcfcfcfcfcULL, },
+ { 0xfcfcfcfcfcfcfcfcULL, 0xfcfcfcfcfcfcfcfcULL, },
+ { 0xfcfcfcfcfcfcfcfcULL, 0xfcfcfcfcfcfcfcfcULL, },
+ { 0xfcfcfcfcfcfcfcfcULL, 0xfcfcfcfcfcfcfcfcULL, },
+ { 0xfcfcfcfcfcfcfcfcULL, 0xfcfcfcfcfcfcfcfcULL, },
+ { 0xfcfcfcfcfcfcfcfcULL, 0xfcfcfcfcfcfcfcfcULL, },
+ { 0xfcfcfcfcfcfcfcfcULL, 0xfcfcfcfcfcfcfcfcULL, },
+ { 0xa6a6a6a6a6a6a6a6ULL, 0xa6a6a6a6a6a6a6a6ULL, }, /* 16 */
+ { 0xa6a6a6a6a6a6a6a6ULL, 0xa6a6a6a6a6a6a6a6ULL, },
+ { 0xc2c2c2c2c2c2c2c2ULL, 0xc2c2c2c2c2c2c2c2ULL, },
+ { 0x5050505050505050ULL, 0x5050505050505050ULL, },
+ { 0xd8d8d8d8d8d8d8d8ULL, 0xd8d8d8d8d8d8d8d8ULL, },
+ { 0xfafafafafafafafaULL, 0xfafafafafafafafaULL, },
+ { 0x3caeca3caeca3caeULL, 0xca3caeca3caeca3cULL, },
+ { 0xa4a4a4a4a4a4a4a4ULL, 0xa4a4a4a4a4a4a4a4ULL, },
+ { 0xf9f9f9f9f9f9f9f9ULL, 0xf9f9f9f9f9f9f9f9ULL, }, /* 24 */
+ { 0xf9f9f9f9f9f9f9f9ULL, 0xf9f9f9f9f9f9f9f9ULL, },
+ { 0x8787878787878787ULL, 0x8787878787878787ULL, },
+ { 0x4e4e4e4e4e4e4e4eULL, 0x4e4e4e4e4e4e4e4eULL, },
+ { 0x9292929292929292ULL, 0x9292929292929292ULL, },
+ { 0xa3a3a3a3a3a3a3a3ULL, 0xa3a3a3a3a3a3a3a3ULL, },
+ { 0x447d0b447d0b447dULL, 0x0b447d0b447d0b44ULL, },
+ { 0xf8f8f8f8f8f8f8f8ULL, 0xf8f8f8f8f8f8f8f8ULL, },
+ { 0xc4c4c4c4c4c4c4c4ULL, 0xc4c4c4c4c4c4c4c4ULL, }, /* 32 */
+ { 0xc4c4c4c4c4c4c4c4ULL, 0xc4c4c4c4c4c4c4c4ULL, },
+ { 0x4c4c4c4c4c4c4c4cULL, 0x4c4c4c4c4c4c4c4cULL, },
+ { 0x9090909090909090ULL, 0x9090909090909090ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x5c5c5c5c5c5c5c5cULL, 0x5c5c5c5c5c5c5c5cULL, },
+ { 0x7834bc7834bc7834ULL, 0xbc7834bc7834bc78ULL, },
+ { 0x2828282828282828ULL, 0x2828282828282828ULL, },
+ { 0x5b5b5b5b5b5b5b5bULL, 0x5b5b5b5b5b5b5b5bULL, }, /* 40 */
+ { 0x5b5b5b5b5b5b5b5bULL, 0x5b5b5b5b5b5b5b5bULL, },
+ { 0x7d7d7d7d7d7d7d7dULL, 0x7d7d7d7d7d7d7d7dULL, },
+ { 0x8e8e8e8e8e8e8e8eULL, 0x8e8e8e8e8e8e8e8eULL, },
+ { 0xeaeaeaeaeaeaeaeaULL, 0xeaeaeaeaeaeaeaeaULL, },
+ { 0xc1c1c1c1c1c1c1c1ULL, 0xc1c1c1c1c1c1c1c1ULL, },
+ { 0x8877998877998877ULL, 0x9988779988779988ULL, },
+ { 0xf4f4f4f4f4f4f4f4ULL, 0xf4f4f4f4f4f4f4f4ULL, },
+ { 0xd7822cd7822cd782ULL, 0x2cd7822cd7822cd7ULL, }, /* 48 */
+ { 0xd7822cd7822cd782ULL, 0x2cd7822cd7822cd7ULL, },
+ { 0x1936fc1936fc1936ULL, 0xfc1936fc1936fc19ULL, },
+ { 0xba1064ba1064ba10ULL, 0x64ba1064ba1064baULL, },
+ { 0xd6e8c4d6e8c4d6e8ULL, 0xc4d6e8c4d6e8c4d6ULL, },
+ { 0x9d9e9c9d9e9c9d9eULL, 0x9c9d9e9c9d9e9c9dULL, },
+ { 0x54da5c54da5c54daULL, 0x5c54da5c54da5c54ULL, },
+ { 0x802cd4802cd4802cULL, 0xd4802cd4802cd480ULL, },
+ { 0x9c9d9b9c9d9b9c9dULL, 0x9b9c9d9b9c9d9b9cULL, }, /* 56 */
+ { 0x9c9d9b9c9d9b9c9dULL, 0x9b9c9d9b9c9d9b9cULL, },
+ { 0x0493750493750493ULL, 0x7504937504937504ULL, },
+ { 0xb80e62b80e62b80eULL, 0x62b80e62b80e62b8ULL, },
+ { 0x6802ce6802ce6802ULL, 0xce6802ce6802ce68ULL, },
+ { 0xd47f29d47f29d47fULL, 0x29d47f29d47f29d4ULL, },
+ { 0x00d1a100d1a100d1ULL, 0xa100d1a100d1a100ULL, },
+ { 0xf0f0f0f0f0f0f0f0ULL, 0xf0f0f0f0f0f0f0f0ULL, },
+ { 0xb00c4c60b06cb7f0ULL, 0xf77f776cecd7f060ULL, }, /* 64 */
+ { 0x58604c7ca826a4f0ULL, 0xb11e6ee016929090ULL, },
+ { 0xf81cf804c0e87df0ULL, 0x4436ec3e6ce920a0ULL, },
+ { 0x786634a810267370ULL, 0xf53f14eebe33c020ULL, },
+ { 0x20ba34c408e06070ULL, 0xafde0b62e8ee6050ULL, },
+ { 0x07b6347bdf77af30ULL, 0x6b8d72be2f6d1c40ULL, },
+ { 0x63ea34bd3a9aa230ULL, 0xad25d0d828d84290ULL, },
+ { 0x934834f6f477f4c0ULL, 0xc39e78e84b9ade10ULL, },
+ { 0x3304e07e0c39cdc0ULL, 0x56b6f646a1f16e20ULL, }, /* 72 */
+ { 0x8f38e0c0675cc0c0ULL, 0x984e54609a5c9470ULL, },
+ { 0xff949cdcb6fb47c0ULL, 0xa70e305f61233be0ULL, },
+ { 0xbfcea8bac85c91c0ULL, 0x2cb600377e0d9160ULL, },
+ { 0x3f18e45e189a8740ULL, 0xddbf28e7d05731e0ULL, },
+ { 0x6f76e497d277d9d0ULL, 0xf338d0f7f319cd60ULL, },
+ { 0x2fb0f075e4d823d0ULL, 0x78e0a0cf100323e0ULL, },
+ { 0x2f4f0c4c60779f0cULL, 0xcfff608f7fff9fe0ULL, },
+ { 0x379944bc60e9d40cULL, 0x2a66400d7d7a4f60ULL, }, /* 80 */
+ { 0x4a0b4408801e08acULL, 0x36fc80bb3c7401e0ULL, },
+ { 0x922d0cb800dcb0acULL, 0xfc5c807628f8dc60ULL, },
+ { 0xb24a046000c05044ULL, 0x30c080e6c008a460ULL, },
+ { 0x22a66ce00040c044ULL, 0x208000724030e4e0ULL, },
+ { 0xcc726c4000808024ULL, 0xe00000de0060dc60ULL, },
+ { 0xbc5e04c000000024ULL, 0xc00000bc004010e0ULL, },
+ { 0x7c5cac000000002cULL, 0x0000001c00c0f0e0ULL, },
+ { 0x9c4424000000002cULL, 0x000000d40080f060ULL, }, /* 88 */
+ { 0xa8cc2400000000ccULL, 0x0000004c000010e0ULL, },
+ { 0xc814ac00000000ccULL, 0x000000980000c060ULL, },
+ { 0x48e8e400000000a4ULL, 0x0000005800004060ULL, },
+ { 0x08d80c00000000a4ULL, 0x00000008000040e0ULL, },
+ { 0x30880c0000000084ULL, 0x000000380000c060ULL, },
+ { 0xf0b8e40000000084ULL, 0x00000070000000e0ULL, },
+ { 0xf0f04c000000004cULL, 0x000000f0000000e0ULL, },
+ { 0x709004000000004cULL, 0x000000d000000060ULL, }, /* 96 */
+ { 0xf0f06c000000004cULL, 0x00000070000000e0ULL, },
+ { 0x709064000000004cULL, 0x0000005000000060ULL, },
+ { 0xf0f08c000000004cULL, 0x000000f0000000e0ULL, },
+ { 0xa0d08c00000000ecULL, 0x0000009000000060ULL, },
+ { 0xc0708c000000008cULL, 0x000000f0000000e0ULL, },
+ { 0x80508c000000002cULL, 0x0000009000000060ULL, },
+ { 0x00f08c00000000ccULL, 0x000000f0000000e0ULL, },
+ { 0x00906400000000ccULL, 0x000000e000000060ULL, }, /* 104 */
+ { 0x00f06c00000000ccULL, 0x000000c0000000e0ULL, },
+ { 0x00900400000000ccULL, 0x0000008000000060ULL, },
+ { 0x00f04c00000000ccULL, 0x00000000000000e0ULL, },
+ { 0x00e0c400000000a4ULL, 0x00000000000000e0ULL, },
+ { 0x00c0ec00000000acULL, 0x00000000000000e0ULL, },
+ { 0x0080a40000000044ULL, 0x00000000000000e0ULL, },
+ { 0x00008c000000008cULL, 0x00000000000000e0ULL, },
+ };
+
+ 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_MSUBV_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_MSUBV_B(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUBV_B__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUBV_B__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-multiply/test_msa_msubv_d.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_msubv_d.c
new file mode 100644
index 0000000000..9722dbd99f
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_msubv_d.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction MSUBV.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Multiply";
+ char *instruction_name = "MSUBV.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, },
+ { 0xaaaaaaaaaaaaaaa9ULL, 0xaaaaaaaaaaaaaaa9ULL, },
+ { 0xfffffffffffffffeULL, 0xfffffffffffffffeULL, },
+ { 0xcccccccccccccccaULL, 0xcccccccccccccccaULL, },
+ { 0xfffffffffffffffdULL, 0xfffffffffffffffdULL, },
+ { 0xe38e38e38e38e38bULL, 0x38e38e38e38e38e0ULL, },
+ { 0xfffffffffffffffcULL, 0xfffffffffffffffcULL, },
+ { 0xfffffffffffffffcULL, 0xfffffffffffffffcULL, }, /* 8 */
+ { 0xfffffffffffffffcULL, 0xfffffffffffffffcULL, },
+ { 0xfffffffffffffffcULL, 0xfffffffffffffffcULL, },
+ { 0xfffffffffffffffcULL, 0xfffffffffffffffcULL, },
+ { 0xfffffffffffffffcULL, 0xfffffffffffffffcULL, },
+ { 0xfffffffffffffffcULL, 0xfffffffffffffffcULL, },
+ { 0xfffffffffffffffcULL, 0xfffffffffffffffcULL, },
+ { 0xfffffffffffffffcULL, 0xfffffffffffffffcULL, },
+ { 0xaaaaaaaaaaaaaaa6ULL, 0xaaaaaaaaaaaaaaa6ULL, }, /* 16 */
+ { 0xaaaaaaaaaaaaaaa6ULL, 0xaaaaaaaaaaaaaaa6ULL, },
+ { 0x71c71c71c71c71c2ULL, 0x71c71c71c71c71c2ULL, },
+ { 0x5555555555555550ULL, 0x5555555555555550ULL, },
+ { 0xddddddddddddddd8ULL, 0xddddddddddddddd8ULL, },
+ { 0xfffffffffffffffaULL, 0xfffffffffffffffaULL, },
+ { 0xed097b425ed097aeULL, 0xd097b425ed097b3cULL, },
+ { 0xaaaaaaaaaaaaaaa4ULL, 0xaaaaaaaaaaaaaaa4ULL, },
+ { 0xfffffffffffffff9ULL, 0xfffffffffffffff9ULL, }, /* 24 */
+ { 0xfffffffffffffff9ULL, 0xfffffffffffffff9ULL, },
+ { 0xe38e38e38e38e387ULL, 0xe38e38e38e38e387ULL, },
+ { 0x555555555555554eULL, 0x555555555555554eULL, },
+ { 0x9999999999999992ULL, 0x9999999999999992ULL, },
+ { 0xaaaaaaaaaaaaaaa3ULL, 0xaaaaaaaaaaaaaaa3ULL, },
+ { 0xa12f684bda12f67dULL, 0x12f684bda12f6844ULL, },
+ { 0xfffffffffffffff8ULL, 0xfffffffffffffff8ULL, },
+ { 0xccccccccccccccc4ULL, 0xccccccccccccccc4ULL, }, /* 32 */
+ { 0xccccccccccccccc4ULL, 0xccccccccccccccc4ULL, },
+ { 0x555555555555554cULL, 0x555555555555554cULL, },
+ { 0x9999999999999990ULL, 0x9999999999999990ULL, },
+ { 0xa3d70a3d70a3d700ULL, 0xa3d70a3d70a3d700ULL, },
+ { 0x666666666666665cULL, 0x666666666666665cULL, },
+ { 0xe93e93e93e93e934ULL, 0x2d82d82d82d82d78ULL, },
+ { 0x3333333333333328ULL, 0x3333333333333328ULL, },
+ { 0x666666666666665bULL, 0x666666666666665bULL, }, /* 40 */
+ { 0x666666666666665bULL, 0x666666666666665bULL, },
+ { 0x888888888888887dULL, 0x888888888888887dULL, },
+ { 0x999999999999998eULL, 0x999999999999998eULL, },
+ { 0x5c28f5c28f5c28eaULL, 0x5c28f5c28f5c28eaULL, },
+ { 0xccccccccccccccc1ULL, 0xccccccccccccccc1ULL, },
+ { 0x2d82d82d82d82d77ULL, 0x3e93e93e93e93e88ULL, },
+ { 0xfffffffffffffff4ULL, 0xfffffffffffffff4ULL, },
+ { 0xe38e38e38e38e382ULL, 0x38e38e38e38e38d7ULL, }, /* 48 */
+ { 0xe38e38e38e38e382ULL, 0x38e38e38e38e38d7ULL, },
+ { 0xd097b425ed097b36ULL, 0x097b425ed097b419ULL, },
+ { 0xc71c71c71c71c710ULL, 0x71c71c71c71c71baULL, },
+ { 0x49f49f49f49f49e8ULL, 0x38e38e38e38e38d6ULL, },
+ { 0xaaaaaaaaaaaaaa9eULL, 0xaaaaaaaaaaaaaa9dULL, },
+ { 0xf9add3c0ca4587daULL, 0x587e6b74f0329154ULL, },
+ { 0x8e38e38e38e38e2cULL, 0xe38e38e38e38e380ULL, },
+ { 0xaaaaaaaaaaaaaa9dULL, 0xaaaaaaaaaaaaaa9cULL, }, /* 56 */
+ { 0xaaaaaaaaaaaaaa9dULL, 0xaaaaaaaaaaaaaa9cULL, },
+ { 0x684bda12f684bd93ULL, 0x84bda12f684bda04ULL, },
+ { 0xc71c71c71c71c70eULL, 0x71c71c71c71c71b8ULL, },
+ { 0x1111111111111102ULL, 0x7777777777777768ULL, },
+ { 0xe38e38e38e38e37fULL, 0x38e38e38e38e38d4ULL, },
+ { 0x781948b0fcd6e9d1ULL, 0xc3f35ba781948b00ULL, },
+ { 0xfffffffffffffff0ULL, 0xfffffffffffffff0ULL, },
+ { 0x52ba41969e9c6ff0ULL, 0xcd6802158b677f60ULL, }, /* 64 */
+ { 0x63129bf5b78505f0ULL, 0x1556f7f61c4e5b90ULL, },
+ { 0x5a4c8855f350a5f0ULL, 0x6a36586fc42edea0ULL, },
+ { 0x5e6b001b04d82c70ULL, 0xe819332c365e3f20ULL, },
+ { 0x6ec35a7a1dc0c270ULL, 0x3008290cc7451b50ULL, },
+ { 0x37152f411fd35230ULL, 0xc7e3b2957c56b340ULL, },
+ { 0xcc49f1d861667630ULL, 0x1808e0646811cb90ULL, },
+ { 0xde8a7f544022c1c0ULL, 0x9886bc9978437610ULL, },
+ { 0xd5c46bb47bee61c0ULL, 0xed661d132023f920ULL, }, /* 72 */
+ { 0x6af92e4bbd8185c0ULL, 0x3d8b4ae20bdf1170ULL, },
+ { 0xe4d44869d87d45c0ULL, 0x6409d23bd9c847e0ULL, },
+ { 0x6e2e9ce94e99c4c0ULL, 0xc30837db04ed7360ULL, },
+ { 0x724d14ae60214b40ULL, 0x40eb1297771cd3e0ULL, },
+ { 0x848da22a3edd96d0ULL, 0xc168eecc874e7e60ULL, },
+ { 0x0de7f6a9b4fa15d0ULL, 0x2067546bb273a9e0ULL, },
+ { 0xc233bfd40310460cULL, 0x0d9585bacf54c5e0ULL, },
+ { 0x061015122724c70cULL, 0x0169d01f7cb17f60ULL, }, /* 80 */
+ { 0x23dacc726f603aacULL, 0xf3ea8c4eaa8b5ce0ULL, },
+ { 0xd82df953c25380acULL, 0xba87b7f0f99bbb60ULL, },
+ { 0x546cb94a0c5e7444ULL, 0x3818c320ce1bdf60ULL, },
+ { 0xa38f9428761ecf44ULL, 0x63113b9e681b66e0ULL, },
+ { 0x7dc23fbe59fe7924ULL, 0x156ddd68750e6260ULL, },
+ { 0x8a17717d36df5b24ULL, 0x36b1f5939596d2e0ULL, },
+ { 0x7e854cd9a677ce2cULL, 0xf2b6202eb36946e0ULL, },
+ { 0x246d8d067437a72cULL, 0x04c6347e9c1ff460ULL, }, /* 88 */
+ { 0xc48a013a554339ccULL, 0xcb81fd31acc4a5e0ULL, },
+ { 0xb971282c0b508fccULL, 0x20d62d6344ce5060ULL, },
+ { 0x835f812f0bc6a7a4ULL, 0x17bd6b5a08275460ULL, },
+ { 0xc0ee1b9557ab4aa4ULL, 0x170471a9d22d5fe0ULL, },
+ { 0xc6f66d89431f7984ULL, 0x5c6f5a646cad3f60ULL, },
+ { 0x5ae0b289f6ac0b84ULL, 0x6f9f6bc81fdb6be0ULL, },
+ { 0x2f584ee03fd2014cULL, 0xa7e34ccbd1bc3fe0ULL, },
+ { 0x5947927731cb724cULL, 0xf76af1f9a05f4160ULL, }, /* 96 */
+ { 0x68112ad490e3a34cULL, 0x7f944a22f5d630e0ULL, },
+ { 0x1cf6705c5faa944cULL, 0x801292d47291e660ULL, },
+ { 0x5519f2782cb0454cULL, 0x3d691c2dd53919e0ULL, },
+ { 0xe5c979861aac06ecULL, 0x585247d6e899e160ULL, },
+ { 0x2450b27896665b8cULL, 0x8276d8ad504f46e0ULL, },
+ { 0x2716d456a4a5ab2cULL, 0x46e1f3460c71c260ULL, },
+ { 0x5751460331251dccULL, 0xdc1dc7a4a693abe0ULL, },
+ { 0x3bf387b7f37473ccULL, 0x8efb4ff7cc92de60ULL, }, /* 104 */
+ { 0xc3103a3df066c9ccULL, 0x7d3b07351cd59ee0ULL, },
+ { 0x0d612554557c1fccULL, 0x5dbabfc2ac8ed560ULL, },
+ { 0x1cd018ef103475ccULL, 0xca277277956f49e0ULL, },
+ { 0x15d520225c2e79a4ULL, 0x08f2025804e95de0ULL, },
+ { 0x820f9c65be3ea1acULL, 0x37094edbda6ef1e0ULL, },
+ { 0x0f18515c62838744ULL, 0xcfbd4b5627d005e0ULL, },
+ { 0x11d549f26502488cULL, 0x8de999d53cdc99e0ULL, },
+ };
+
+ 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_MSUBV_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_MSUBV_D(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUBV_D__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUBV_D__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-multiply/test_msa_msubv_h.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_msubv_h.c
new file mode 100644
index 0000000000..6c059c779c
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_msubv_h.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction MSUBV.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Multiply";
+ char *instruction_name = "MSUBV.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, },
+ { 0xaaa9aaa9aaa9aaa9ULL, 0xaaa9aaa9aaa9aaa9ULL, },
+ { 0xfffefffefffefffeULL, 0xfffefffefffefffeULL, },
+ { 0xcccacccacccacccaULL, 0xcccacccacccacccaULL, },
+ { 0xfffdfffdfffdfffdULL, 0xfffdfffdfffdfffdULL, },
+ { 0xe38b38e08e35e38bULL, 0x38e08e35e38b38e0ULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, }, /* 8 */
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xfffcfffcfffcfffcULL, 0xfffcfffcfffcfffcULL, },
+ { 0xaaa6aaa6aaa6aaa6ULL, 0xaaa6aaa6aaa6aaa6ULL, }, /* 16 */
+ { 0xaaa6aaa6aaa6aaa6ULL, 0xaaa6aaa6aaa6aaa6ULL, },
+ { 0x71c271c271c271c2ULL, 0x71c271c271c271c2ULL, },
+ { 0x5550555055505550ULL, 0x5550555055505550ULL, },
+ { 0xddd8ddd8ddd8ddd8ULL, 0xddd8ddd8ddd8ddd8ULL, },
+ { 0xfffafffafffafffaULL, 0xfffafffafffafffaULL, },
+ { 0x97ae7b3c5eca97aeULL, 0x7b3c5eca97ae7b3cULL, },
+ { 0xaaa4aaa4aaa4aaa4ULL, 0xaaa4aaa4aaa4aaa4ULL, },
+ { 0xfff9fff9fff9fff9ULL, 0xfff9fff9fff9fff9ULL, }, /* 24 */
+ { 0xfff9fff9fff9fff9ULL, 0xfff9fff9fff9fff9ULL, },
+ { 0xe387e387e387e387ULL, 0xe387e387e387e387ULL, },
+ { 0x554e554e554e554eULL, 0x554e554e554e554eULL, },
+ { 0x9992999299929992ULL, 0x9992999299929992ULL, },
+ { 0xaaa3aaa3aaa3aaa3ULL, 0xaaa3aaa3aaa3aaa3ULL, },
+ { 0xf67d6844da0bf67dULL, 0x6844da0bf67d6844ULL, },
+ { 0xfff8fff8fff8fff8ULL, 0xfff8fff8fff8fff8ULL, },
+ { 0xccc4ccc4ccc4ccc4ULL, 0xccc4ccc4ccc4ccc4ULL, }, /* 32 */
+ { 0xccc4ccc4ccc4ccc4ULL, 0xccc4ccc4ccc4ccc4ULL, },
+ { 0x554c554c554c554cULL, 0x554c554c554c554cULL, },
+ { 0x9990999099909990ULL, 0x9990999099909990ULL, },
+ { 0xd700d700d700d700ULL, 0xd700d700d700d700ULL, },
+ { 0x665c665c665c665cULL, 0x665c665c665c665cULL, },
+ { 0xe9342d7871bce934ULL, 0x2d7871bce9342d78ULL, },
+ { 0x3328332833283328ULL, 0x3328332833283328ULL, },
+ { 0x665b665b665b665bULL, 0x665b665b665b665bULL, }, /* 40 */
+ { 0x665b665b665b665bULL, 0x665b665b665b665bULL, },
+ { 0x887d887d887d887dULL, 0x887d887d887d887dULL, },
+ { 0x998e998e998e998eULL, 0x998e998e998e998eULL, },
+ { 0x28ea28ea28ea28eaULL, 0x28ea28ea28ea28eaULL, },
+ { 0xccc1ccc1ccc1ccc1ULL, 0xccc1ccc1ccc1ccc1ULL, },
+ { 0x2d773e884f992d77ULL, 0x3e884f992d773e88ULL, },
+ { 0xfff4fff4fff4fff4ULL, 0xfff4fff4fff4fff4ULL, },
+ { 0xe38238d78e2ce382ULL, 0x38d78e2ce38238d7ULL, }, /* 48 */
+ { 0xe38238d78e2ce382ULL, 0x38d78e2ce38238d7ULL, },
+ { 0x7b36b419ecfc7b36ULL, 0xb419ecfc7b36b419ULL, },
+ { 0xc71071ba1c64c710ULL, 0x71ba1c64c71071baULL, },
+ { 0x49e838d627c449e8ULL, 0x38d627c449e838d6ULL, },
+ { 0xaa9eaa9daa9caa9eULL, 0xaa9daa9caa9eaa9dULL, },
+ { 0x87da91547e5c87daULL, 0x91547e5c87da9154ULL, },
+ { 0x8e2ce38038d48e2cULL, 0xe38038d48e2ce380ULL, },
+ { 0xaa9daa9caa9baa9dULL, 0xaa9caa9baa9daa9cULL, }, /* 56 */
+ { 0xaa9daa9caa9baa9dULL, 0xaa9caa9baa9daa9cULL, },
+ { 0xbd93da04f675bd93ULL, 0xda04f675bd93da04ULL, },
+ { 0xc70e71b81c62c70eULL, 0x71b81c62c70e71b8ULL, },
+ { 0x11027768ddce1102ULL, 0x7768ddce11027768ULL, },
+ { 0xe37f38d48e29e37fULL, 0x38d48e29e37f38d4ULL, },
+ { 0xe9d18b0048a1e9d1ULL, 0x8b0048a1e9d18b00ULL, },
+ { 0xfff0fff0fff0fff0ULL, 0xfff0fff0fff0fff0ULL, },
+ { 0x340ccd603a6c6ff0ULL, 0x7c7fc96cb0d77f60ULL, }, /* 64 */
+ { 0x07608c7c902605f0ULL, 0x7e1ef7e0f9925b90ULL, },
+ { 0xda1ca10416e8a5f0ULL, 0x2e36f13e11e9dea0ULL, },
+ { 0x6166ada860262c70ULL, 0x773f69ee43333f20ULL, },
+ { 0x34ba6cc4b5e0c270ULL, 0x78de98628bee1b50ULL, },
+ { 0x13b6467bf3775230ULL, 0xce8d99be266db340ULL, },
+ { 0xeaeababdfe9a7630ULL, 0x2d251ed87fd8cb90ULL, },
+ { 0x1b481af62b77c1c0ULL, 0x479e70e86e9a7610ULL, },
+ { 0xee042f7eb23961c0ULL, 0xf7b66a4686f1f920ULL, }, /* 72 */
+ { 0xc538a3c0bd5c85c0ULL, 0x564eef60e05c1170ULL, },
+ { 0xb5941adce7fb45c0ULL, 0xd00e7d5f672347e0ULL, },
+ { 0x25cef5ba555cc4c0ULL, 0x55b61e37e30d7360ULL, },
+ { 0xad18025e9e9a4b40ULL, 0x9ebf96e71457d3e0ULL, },
+ { 0xdd766297cb7796d0ULL, 0xb938e8f703197e60ULL, },
+ { 0x4db03d7538d815d0ULL, 0x3ee089cf7f03a9e0ULL, },
+ { 0x154fea4c3377460cULL, 0xe1ff538f49ffc5e0ULL, },
+ { 0x4a99edbce7e9c70cULL, 0x3f66800dba7a7f60ULL, }, /* 80 */
+ { 0xea0bfe08a81e3aacULL, 0xe7fcffbbd4745ce0ULL, },
+ { 0x3e2ddcb809dc80acULL, 0xc75ca276a8f8bb60ULL, },
+ { 0x5e4aa9605ec07444ULL, 0x6dc0dee66108df60ULL, },
+ { 0x03a670e01940cf44ULL, 0x05802472d23066e0ULL, },
+ { 0x8c72ca4059807924ULL, 0xb7002ade28606260ULL, },
+ { 0x945efbc07b005b24ULL, 0x4f00c3bc4040d2e0ULL, },
+ { 0xab5cc300f000ce2cULL, 0xf000bd1c6fc046e0ULL, },
+ { 0xd7445f001000a72cULL, 0x600018d43e80f460ULL, }, /* 88 */
+ { 0x66cca200e00039ccULL, 0xc000b74c5d00a5e0ULL, },
+ { 0x33140e00c0008fccULL, 0xc0005a98be005060ULL, },
+ { 0xafe8d8000000a7a4ULL, 0x00002a58c2005460ULL, },
+ { 0x99d8b80000004aa4ULL, 0x0000d6088c005fe0ULL, },
+ { 0xa388900000007984ULL, 0x0000413818003f60ULL, },
+ { 0xc5b8f00000000b84ULL, 0x0000fa7010006be0ULL, },
+ { 0x41f0c0000000014cULL, 0x00002bf0f0003fe0ULL, },
+ { 0x7490c0000000724cULL, 0x0000b9d0a0004160ULL, }, /* 96 */
+ { 0xb0f0c0000000a34cULL, 0x00008f70c00030e0ULL, },
+ { 0xed90c0000000944cULL, 0x000014508000e660ULL, },
+ { 0x0ff0c0000000454cULL, 0x00002ef0000019e0ULL, },
+ { 0xebd08000000006ecULL, 0x00001a900000e160ULL, },
+ { 0xf770000000005b8cULL, 0x000037f0000046e0ULL, },
+ { 0x825000000000ab2cULL, 0x000039900000c260ULL, },
+ { 0x5af0000000001dccULL, 0x000030f00000abe0ULL, },
+ { 0x22900000000073ccULL, 0x0000d1e00000de60ULL, }, /* 104 */
+ { 0x3bf000000000c9ccULL, 0x000083c000009ee0ULL, },
+ { 0xe990000000001fccULL, 0x0000c7800000d560ULL, },
+ { 0x0cf00000000075ccULL, 0x00000f00000049e0ULL, },
+ { 0x0ee00000000079a4ULL, 0x0000670000005de0ULL, },
+ { 0x77c000000000a1acULL, 0x00007f000000f1e0ULL, },
+ { 0x8380000000008744ULL, 0x00005700000005e0ULL, },
+ { 0xef0000000000488cULL, 0x0000ef00000099e0ULL, },
+ };
+
+ 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_MSUBV_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_MSUBV_H(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUBV_H__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUBV_H__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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-multiply/test_msa_msubv_w.c b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_msubv_w.c
new file mode 100644
index 0000000000..0a83db4787
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/int-multiply/test_msa_msubv_w.c
@@ -0,0 +1,214 @@
+/*
+ * Test program for MSA instruction MSUBV.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) + \
+ 3 * (RANDOM_INPUTS_SHORT_COUNT) * (RANDOM_INPUTS_SHORT_COUNT))
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Int Multiply";
+ char *instruction_name = "MSUBV.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, },
+ { 0xaaaaaaa9aaaaaaa9ULL, 0xaaaaaaa9aaaaaaa9ULL, },
+ { 0xfffffffefffffffeULL, 0xfffffffefffffffeULL, },
+ { 0xcccccccacccccccaULL, 0xcccccccacccccccaULL, },
+ { 0xfffffffdfffffffdULL, 0xfffffffdfffffffdULL, },
+ { 0xe38e38e08e38e38bULL, 0x38e38e35e38e38e0ULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, }, /* 8 */
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xfffffffcfffffffcULL, 0xfffffffcfffffffcULL, },
+ { 0xaaaaaaa6aaaaaaa6ULL, 0xaaaaaaa6aaaaaaa6ULL, }, /* 16 */
+ { 0xaaaaaaa6aaaaaaa6ULL, 0xaaaaaaa6aaaaaaa6ULL, },
+ { 0xc71c71c2c71c71c2ULL, 0xc71c71c2c71c71c2ULL, },
+ { 0x5555555055555550ULL, 0x5555555055555550ULL, },
+ { 0xddddddd8ddddddd8ULL, 0xddddddd8ddddddd8ULL, },
+ { 0xfffffffafffffffaULL, 0xfffffffafffffffaULL, },
+ { 0xed097b3c5ed097aeULL, 0x7b425ecaed097b3cULL, },
+ { 0xaaaaaaa4aaaaaaa4ULL, 0xaaaaaaa4aaaaaaa4ULL, },
+ { 0xfffffff9fffffff9ULL, 0xfffffff9fffffff9ULL, }, /* 24 */
+ { 0xfffffff9fffffff9ULL, 0xfffffff9fffffff9ULL, },
+ { 0x8e38e3878e38e387ULL, 0x8e38e3878e38e387ULL, },
+ { 0x5555554e5555554eULL, 0x5555554e5555554eULL, },
+ { 0x9999999299999992ULL, 0x9999999299999992ULL, },
+ { 0xaaaaaaa3aaaaaaa3ULL, 0xaaaaaaa3aaaaaaa3ULL, },
+ { 0xa12f6844da12f67dULL, 0x684bda0ba12f6844ULL, },
+ { 0xfffffff8fffffff8ULL, 0xfffffff8fffffff8ULL, },
+ { 0xccccccc4ccccccc4ULL, 0xccccccc4ccccccc4ULL, }, /* 32 */
+ { 0xccccccc4ccccccc4ULL, 0xccccccc4ccccccc4ULL, },
+ { 0x5555554c5555554cULL, 0x5555554c5555554cULL, },
+ { 0x9999999099999990ULL, 0x9999999099999990ULL, },
+ { 0x70a3d70070a3d700ULL, 0x70a3d70070a3d700ULL, },
+ { 0x6666665c6666665cULL, 0x6666665c6666665cULL, },
+ { 0x82d82d783e93e934ULL, 0xc71c71bc82d82d78ULL, },
+ { 0x3333332833333328ULL, 0x3333332833333328ULL, },
+ { 0x6666665b6666665bULL, 0x6666665b6666665bULL, }, /* 40 */
+ { 0x6666665b6666665bULL, 0x6666665b6666665bULL, },
+ { 0x8888887d8888887dULL, 0x8888887d8888887dULL, },
+ { 0x9999998e9999998eULL, 0x9999998e9999998eULL, },
+ { 0x8f5c28ea8f5c28eaULL, 0x8f5c28ea8f5c28eaULL, },
+ { 0xccccccc1ccccccc1ULL, 0xccccccc1ccccccc1ULL, },
+ { 0x93e93e8882d82d77ULL, 0xa4fa4f9993e93e88ULL, },
+ { 0xfffffff4fffffff4ULL, 0xfffffff4fffffff4ULL, },
+ { 0xe38e38d78e38e382ULL, 0x38e38e2ce38e38d7ULL, }, /* 48 */
+ { 0xe38e38d78e38e382ULL, 0x38e38e2ce38e38d7ULL, },
+ { 0xd097b419ed097b36ULL, 0xb425ecfcd097b419ULL, },
+ { 0xc71c71ba1c71c710ULL, 0x71c71c64c71c71baULL, },
+ { 0xe38e38d6f49f49e8ULL, 0xd27d27c4e38e38d6ULL, },
+ { 0xaaaaaa9daaaaaa9eULL, 0xaaaaaa9caaaaaa9dULL, },
+ { 0xf0329154ca4587daULL, 0xa4587e5cf0329154ULL, },
+ { 0x8e38e38038e38e2cULL, 0xe38e38d48e38e380ULL, },
+ { 0xaaaaaa9caaaaaa9dULL, 0xaaaaaa9baaaaaa9cULL, }, /* 56 */
+ { 0xaaaaaa9caaaaaa9dULL, 0xaaaaaa9baaaaaa9cULL, },
+ { 0x684bda04f684bd93ULL, 0xda12f675684bda04ULL, },
+ { 0xc71c71b81c71c70eULL, 0x71c71c62c71c71b8ULL, },
+ { 0x7777776811111102ULL, 0xddddddce77777768ULL, },
+ { 0xe38e38d48e38e37fULL, 0x38e38e29e38e38d4ULL, },
+ { 0x81948b00fcd6e9d1ULL, 0x781948a181948b00ULL, },
+ { 0xfffffff0fffffff0ULL, 0xfffffff0fffffff0ULL, },
+ { 0x4efccd609e9c6ff0ULL, 0xc5dac96c8b677f60ULL, }, /* 64 */
+ { 0x3e3d8c7cb78505f0ULL, 0x4463f7e01c4e5b90ULL, },
+ { 0xcaa9a104f350a5f0ULL, 0x8ca4f13ec42edea0ULL, },
+ { 0x19b8ada804d82c70ULL, 0xb62b69ee365e3f20ULL, },
+ { 0x08f96cc41dc0c270ULL, 0x34b49862c7451b50ULL, },
+ { 0x5405467b1fd35230ULL, 0xf7c999be7c56b340ULL, },
+ { 0x5cc7babd61667630ULL, 0xa4601ed86811cb90ULL, },
+ { 0xe20c1af64022c1c0ULL, 0x927a70e878437610ULL, },
+ { 0x6e782f7e7bee61c0ULL, 0xdabb6a462023f920ULL, }, /* 72 */
+ { 0x773aa3c0bd8185c0ULL, 0x8751ef600bdf1170ULL, },
+ { 0xc0871adcd87d45c0ULL, 0x6c527d5fd9c847e0ULL, },
+ { 0xd7c7f5ba4e99c4c0ULL, 0xdaa41e3704ed7360ULL, },
+ { 0x26d7025e60214b40ULL, 0x042a96e7771cd3e0ULL, },
+ { 0xac1b62973edd96d0ULL, 0xf244e8f7874e7e60ULL, },
+ { 0xc35c3d75b4fa15d0ULL, 0x609689cfb273a9e0ULL, },
+ { 0x9de4ea4c0310460cULL, 0x80c0538fcf54c5e0ULL, },
+ { 0xbd81edbc2724c70cULL, 0x7301800d7cb17f60ULL, }, /* 80 */
+ { 0xaebafe086f603aacULL, 0x35c5ffbbaa8b5ce0ULL, },
+ { 0xdf14dcb8c25380acULL, 0x3ef9a276f99bbb60ULL, },
+ { 0x5e0ea9600c5e7444ULL, 0x8ef3dee6ce1bdf60ULL, },
+ { 0x1c7370e0761ecf44ULL, 0x864a2472681b66e0ULL, },
+ { 0xb58eca4059fe7924ULL, 0x8c252ade750e6260ULL, },
+ { 0xfcc4fbc036df5b24ULL, 0x36a7c3bc9596d2e0ULL, },
+ { 0x57a2c300a677ce2cULL, 0x2922bd1cb36946e0ULL, },
+ { 0x88bd5f007437a72cULL, 0x45fd18d49c1ff460ULL, }, /* 88 */
+ { 0x2581a200554339ccULL, 0x6c99b74cacc4a5e0ULL, },
+ { 0x2d500e000b508fccULL, 0x1f975a9844ce5060ULL, },
+ { 0x5907d8000bc6a7a4ULL, 0x0eaa2a5808275460ULL, },
+ { 0xeab7b80057ab4aa4ULL, 0x8af4d608d22d5fe0ULL, },
+ { 0x95ab9000431f7984ULL, 0x840741386cad3f60ULL, },
+ { 0xf5ddf000f6ac0b84ULL, 0xd51bfa701fdb6be0ULL, },
+ { 0xdf7cc0003fd2014cULL, 0xb5052bf0d1bc3fe0ULL, },
+ { 0x3393c00031cb724cULL, 0x06abb9d0a05f4160ULL, }, /* 96 */
+ { 0xdb56c00090e3a34cULL, 0x7ff18f70f5d630e0ULL, },
+ { 0xa1b5c0005faa944cULL, 0x9e0514507291e660ULL, },
+ { 0xfa60c0002cb0454cULL, 0xc4182ef0d53919e0ULL, },
+ { 0xa6f680001aac06ecULL, 0x05ca1a90e899e160ULL, },
+ { 0x15a3000096665b8cULL, 0x0cec37f0504f46e0ULL, },
+ { 0xb79a0000a4a5ab2cULL, 0x578239900c71c260ULL, },
+ { 0xb70c000031251dccULL, 0xaa4c30f0a693abe0ULL, },
+ { 0x01140000f37473ccULL, 0x400dd1e0cc92de60ULL, }, /* 104 */
+ { 0xb1cc0000f066c9ccULL, 0x8cf683c01cd59ee0ULL, },
+ { 0xf8540000557c1fccULL, 0x0f82c780ac8ed560ULL, },
+ { 0xf88c0000103475ccULL, 0xa1f10f00956f49e0ULL, },
+ { 0x2e7000005c2e79a4ULL, 0xcf94670004e95de0ULL, },
+ { 0x96c00000be3ea1acULL, 0xdca57f00da6ef1e0ULL, },
+ { 0xbf00000062838744ULL, 0x368a570027d005e0ULL, },
+ { 0x4c0000006502488cULL, 0xcc98ef003cdc99e0ULL, },
+ };
+
+ 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_MSUBV_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_MSUBV_W(b128_random[i], b128_random[j],
+ b128_result[((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUBV_W__DDT(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ ((RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_INPUTS_SHORT_COUNT)) +
+ RANDOM_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_MSUBV_W__DSD(b128_random[i], b128_random[j],
+ b128_result[
+ ((PATTERN_INPUTS_SHORT_COUNT) *
+ (PATTERN_INPUTS_SHORT_COUNT)) +
+ (2 * (RANDOM_INPUTS_SHORT_COUNT) *
+ (RANDOM_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_128(isa_ase_name, group_name, 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/move/test_msa_move_v.c b/tests/tcg/mips/user/ase/msa/move/test_msa_move_v.c
new file mode 100644
index 0000000000..ef2aa6dbdd
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/move/test_msa_move_v.c
@@ -0,0 +1,149 @@
+/*
+ * Test program for MSA instruction MOVE.V
+ *
+ * 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_COUNT + RANDOM_INPUTS_COUNT)
+
+
+int32_t main(void)
+{
+ char *isa_ase_name = "MSA";
+ char *group_name = "Move";
+ char *instruction_name = "MOVE.V";
+ int32_t ret;
+ uint32_t i;
+ 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, },
+ { 0xf0f0f0f0f0f0f0f0ULL, 0xf0f0f0f0f0f0f0f0ULL, }, /* 8 */
+ { 0x0f0f0f0f0f0f0f0fULL, 0x0f0f0f0f0f0f0f0fULL, },
+ { 0xf83e0f83e0f83e0fULL, 0x83e0f83e0f83e0f8ULL, },
+ { 0x07c1f07c1f07c1f0ULL, 0x7c1f07c1f07c1f07ULL, },
+ { 0xfc0fc0fc0fc0fc0fULL, 0xc0fc0fc0fc0fc0fcULL, },
+ { 0x03f03f03f03f03f0ULL, 0x3f03f03f03f03f03ULL, },
+ { 0xfe03f80fe03f80feULL, 0x03f80fe03f80fe03ULL, },
+ { 0x01fc07f01fc07f01ULL, 0xfc07f01fc07f01fcULL, },
+ { 0xff00ff00ff00ff00ULL, 0xff00ff00ff00ff00ULL, }, /* 16 */
+ { 0x00ff00ff00ff00ffULL, 0x00ff00ff00ff00ffULL, },
+ { 0xff803fe00ff803feULL, 0x00ff803fe00ff803ULL, },
+ { 0x007fc01ff007fc01ULL, 0xff007fc01ff007fcULL, },
+ { 0xffc00ffc00ffc00fULL, 0xfc00ffc00ffc00ffULL, },
+ { 0x003ff003ff003ff0ULL, 0x03ff003ff003ff00ULL, },
+ { 0xffe003ff800ffe00ULL, 0x3ff800ffe003ff80ULL, },
+ { 0x001ffc007ff001ffULL, 0xc007ff001ffc007fULL, },
+ { 0xfff000fff000fff0ULL, 0x00fff000fff000ffULL, }, /* 24 */
+ { 0x000fff000fff000fULL, 0xff000fff000fff00ULL, },
+ { 0xfff8003ffe000fffULL, 0x8003ffe000fff800ULL, },
+ { 0x0007ffc001fff000ULL, 0x7ffc001fff0007ffULL, },
+ { 0xfffc000fffc000ffULL, 0xfc000fffc000fffcULL, },
+ { 0x0003fff0003fff00ULL, 0x03fff0003fff0003ULL, },
+ { 0xfffe0003fff8000fULL, 0xffe0003fff8000ffULL, },
+ { 0x0001fffc0007fff0ULL, 0x001fffc0007fff00ULL, },
+ { 0xffff0000ffff0000ULL, 0xffff0000ffff0000ULL, }, /* 32 */
+ { 0x0000ffff0000ffffULL, 0x0000ffff0000ffffULL, },
+ { 0xffff80003fffe000ULL, 0x0ffff80003fffe00ULL, },
+ { 0x00007fffc0001fffULL, 0xf00007fffc0001ffULL, },
+ { 0xffffc0000ffffc00ULL, 0x00ffffc0000ffffcULL, },
+ { 0x00003ffff00003ffULL, 0xff00003ffff00003ULL, },
+ { 0xffffe00003ffff80ULL, 0x000ffffe00003fffULL, },
+ { 0x00001ffffc00007fULL, 0xfff00001ffffc000ULL, },
+ { 0xfffff00000fffff0ULL, 0x0000fffff00000ffULL, }, /* 40 */
+ { 0x00000fffff00000fULL, 0xffff00000fffff00ULL, },
+ { 0xfffff800003ffffeULL, 0x00000fffff800003ULL, },
+ { 0x000007ffffc00001ULL, 0xfffff000007ffffcULL, },
+ { 0xfffffc00000fffffULL, 0xc00000fffffc0000ULL, },
+ { 0x000003fffff00000ULL, 0x3fffff000003ffffULL, },
+ { 0xfffffe000003ffffULL, 0xf800000fffffe000ULL, },
+ { 0x000001fffffc0000ULL, 0x07fffff000001fffULL, },
+ { 0xffffff000000ffffULL, 0xff000000ffffff00ULL, }, /* 48 */
+ { 0x000000ffffff0000ULL, 0x00ffffff000000ffULL, },
+ { 0xffffff8000003fffULL, 0xffe000000ffffff8ULL, },
+ { 0x0000007fffffc000ULL, 0x001ffffff0000007ULL, },
+ { 0xffffffc000000fffULL, 0xfffc000000ffffffULL, },
+ { 0x0000003ffffff000ULL, 0x0003ffffff000000ULL, },
+ { 0xffffffe0000003ffULL, 0xffff8000000fffffULL, },
+ { 0x0000001ffffffc00ULL, 0x00007ffffff00000ULL, },
+ { 0xfffffff0000000ffULL, 0xfffff0000000ffffULL, }, /* 56 */
+ { 0x0000000fffffff00ULL, 0x00000fffffff0000ULL, },
+ { 0xfffffff80000003fULL, 0xfffffe0000000fffULL, },
+ { 0x00000007ffffffc0ULL, 0x000001fffffff000ULL, },
+ { 0xfffffffc0000000fULL, 0xffffffc0000000ffULL, },
+ { 0x00000003fffffff0ULL, 0x0000003fffffff00ULL, },
+ { 0xfffffffe00000003ULL, 0xfffffff80000000fULL, },
+ { 0x00000001fffffffcULL, 0x00000007fffffff0ULL, },
+ { 0x886ae6cc28625540ULL, 0x4b670b5efe7bb00cULL, }, /* 64 */
+ { 0xfbbe00634d93c708ULL, 0x12f7bb1a153f52fcULL, },
+ { 0xac5aaeaab9cf8b80ULL, 0x27d8c6ffab2b2514ULL, },
+ { 0x704f164d5e31e24eULL, 0x8df188d8a942e2a0ULL, },
+ { 0xb9926b7c7daf4258ULL, 0xa1227caddcce65b6ULL, },
+ { 0xd027be89ff0a2ef9ULL, 0x170b5050fea53078ULL, },
+ { 0xb83b580665cabc4aULL, 0x91230822bff0ba62ULL, },
+ { 0xfc8f23f09aa6b782ULL, 0x93fd6637124275aeULL, },
+ { 0x201e09cd56aee649ULL, 0xef5de039a6a52758ULL, }, /* 72 */
+ { 0xa57cd91365d9e5d7ULL, 0x9321bc9881ecba5cULL, },
+ { 0xa2e8f6f5c9cbc61bULL, 0xb2c471545e0d7a12ULL, },
+ { 0xa89cf2f131a864aeULL, 0xd2a3e87a5db986e7ULL, },
+ { 0xe61438e9a652ea0aULL, 0xa85483d97879d41cULL, },
+ { 0x944a35fd192361a8ULL, 0xf3912da36a0b2d6bULL, },
+ { 0x4630426322bef79cULL, 0xeb5686f7cb19304eULL, },
+ { 0x8b5aa7a2f259deadULL, 0xd278cbcd696417e3ULL, },
+ };
+
+ reset_msa_registers();
+
+ gettimeofday(&start, NULL);
+
+ for (i = 0; i < TEST_COUNT_TOTAL; i++) {
+ if (i < PATTERN_INPUTS_COUNT) {
+ do_msa_MOVE_V(b128_pattern[i], b128_result[i]);
+ } else {
+ do_msa_MOVE_V(b128_random[i - PATTERN_INPUTS_COUNT],
+ b128_result[i]);
+ }
+ }
+
+ 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_128(isa_ase_name, group_name, 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/pack/test_msa_pckev_b.c b/tests/tcg/mips/user/ase/msa/pack/test_msa_pckev_b.c
index 4a4c9d6c64..2f4ffd9195 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,38 +123,38 @@ int32_t main(void)
{ 0xf71a3ffcbe639308ULL, 0xf1d842a04f4d314eULL, },
{ 0xd8ff2b145aaacf80ULL, 0xf1d842a04f4d314eULL, },
{ 0xf1d842a04f4d314eULL, 0xf1d842a04f4d314eULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */
- { 0x00000000fc000000ULL, 0x000015000000001aULL, },
- { 0x0000000014000000ULL, 0x0000ab00000000ffULL, },
- { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, },
- { 0x000040000000000cULL, 0x9300003f00120000ULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000800000000014ULL, 0x9300003f00120000ULL, },
- { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */
- { 0x0000000000000000ULL, 0xfb000000001500aaULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x0000000000000000ULL, 0x7000000000a916aaULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */
- { 0x00000800000000fcULL, 0x6200007be64b0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeccULL, },
- { 0x00006a0000550000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae63ULL, },
- { 0x0000be0000c70000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */
- { 0x00000800000000fcULL, 0xcf00002bae270000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x00005a00008b0000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x31000042168d0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae4dULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
+ { 0x675e7b0c6acc6240ULL, 0xd8a04d4ed8a04d4eULL, }, /* 80 */
+ { 0xf71a3ffcbe639308ULL, 0xa04ea04e5e0ccc40ULL, },
+ { 0xd8ff2b145aaacf80ULL, 0x4e4e0c401afc6308ULL, },
+ { 0xf1d842a04f4d314eULL, 0x4e40fc08ff14aa80ULL, },
+ { 0x675e7b0c6acc6240ULL, 0x40081480d8a04d4eULL, },
+ { 0xf71a3ffcbe639308ULL, 0x0880a04e5e0ccc40ULL, },
+ { 0xd8ff2b145aaacf80ULL, 0x804e0c401afc6308ULL, },
+ { 0xf1d842a04f4d314eULL, 0x4e40fc08ff14aa80ULL, },
+ { 0x675e7b0c6acc6240ULL, 0x40081480d8a04d4eULL, }, /* 88 */
+ { 0xf71a3ffcbe639308ULL, 0x0880a04e5e0ccc40ULL, },
+ { 0xd8ff2b145aaacf80ULL, 0x804e0c401afc6308ULL, },
+ { 0xf1d842a04f4d314eULL, 0x4e40fc08ff14aa80ULL, },
+ { 0x675e7b0c6acc6240ULL, 0x40081480d8a04d4eULL, },
+ { 0xf71a3ffcbe639308ULL, 0x0880a04e5e0ccc40ULL, },
+ { 0xd8ff2b145aaacf80ULL, 0x804e0c401afc6308ULL, },
+ { 0xf1d842a04f4d314eULL, 0x4e40fc08ff14aa80ULL, },
+ { 0x40081480d8a04d4eULL, 0x675e7b0c6acc6240ULL, }, /* 96 */
+ { 0x5e0ccc400880a04eULL, 0x675e7b0c6acc6240ULL, },
+ { 0x5e0ccc400c40804eULL, 0x675e7b0c6acc6240ULL, },
+ { 0x5e0ccc400c40404eULL, 0x675e7b0c6acc6240ULL, },
+ { 0x5e0ccc400c40404eULL, 0xf71a3ffcbe639308ULL, },
+ { 0x1afc63080c40404eULL, 0xf71a3ffcbe639308ULL, },
+ { 0x1afc6308fc08404eULL, 0xf71a3ffcbe639308ULL, },
+ { 0x1afc6308fc08084eULL, 0xf71a3ffcbe639308ULL, },
+ { 0x1afc6308fc08084eULL, 0xd8ff2b145aaacf80ULL, }, /* 104 */
+ { 0xff14aa80fc08084eULL, 0xd8ff2b145aaacf80ULL, },
+ { 0xff14aa801480084eULL, 0xd8ff2b145aaacf80ULL, },
+ { 0xff14aa801480804eULL, 0xd8ff2b145aaacf80ULL, },
+ { 0xff14aa801480804eULL, 0xf1d842a04f4d314eULL, },
+ { 0xd8a04d4e1480804eULL, 0xf1d842a04f4d314eULL, },
+ { 0xd8a04d4ea04e804eULL, 0xf1d842a04f4d314eULL, },
+ { 0xd8a04d4ea04e4e4eULL, 0xf1d842a04f4d314eULL, },
};
reset_msa_registers();
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 67df606aac..3f0bd47ffd 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,38 +123,38 @@ int32_t main(void)
{ 0xfbbe00634d93c708ULL, 0x704f164d5e31e24eULL, },
{ 0xac5aaeaab9cf8b80ULL, 0x704f164d5e31e24eULL, },
{ 0x704f164d5e31e24eULL, 0x704f164d5e31e24eULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */
- { 0x00000000fc000000ULL, 0x000015000000001aULL, },
- { 0x0000000014000000ULL, 0x0000ab00000000ffULL, },
- { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, },
- { 0x000040000000000cULL, 0x9300003f00120000ULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000800000000014ULL, 0x9300003f00120000ULL, },
- { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */
- { 0x0000000000000000ULL, 0xfb000000001500aaULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x0000000000000000ULL, 0x7000000000a916aaULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */
- { 0x00000800000000fcULL, 0x6200007be64b0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeccULL, },
- { 0x00006a0000550000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae63ULL, },
- { 0x0000be0000c70000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */
- { 0x00000800000000fcULL, 0xcf00002bae270000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x00005a00008b0000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x31000042168d0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae4dULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
+ { 0x886ae6cc28625540ULL, 0x704f164d5e31e24eULL, }, /* 80 */
+ { 0xfbbe00634d93c708ULL, 0x886ae6cc28625540ULL, },
+ { 0xac5aaeaab9cf8b80ULL, 0xfbbe00634d93c708ULL, },
+ { 0x704f164d5e31e24eULL, 0xac5aaeaab9cf8b80ULL, },
+ { 0x886ae6cc28625540ULL, 0x704f164d5e31e24eULL, },
+ { 0xfbbe00634d93c708ULL, 0x886ae6cc28625540ULL, },
+ { 0xac5aaeaab9cf8b80ULL, 0xfbbe00634d93c708ULL, },
+ { 0x704f164d5e31e24eULL, 0xac5aaeaab9cf8b80ULL, },
+ { 0x886ae6cc28625540ULL, 0x704f164d5e31e24eULL, }, /* 88 */
+ { 0xfbbe00634d93c708ULL, 0x886ae6cc28625540ULL, },
+ { 0xac5aaeaab9cf8b80ULL, 0xfbbe00634d93c708ULL, },
+ { 0x704f164d5e31e24eULL, 0xac5aaeaab9cf8b80ULL, },
+ { 0x886ae6cc28625540ULL, 0x704f164d5e31e24eULL, },
+ { 0xfbbe00634d93c708ULL, 0x886ae6cc28625540ULL, },
+ { 0xac5aaeaab9cf8b80ULL, 0xfbbe00634d93c708ULL, },
+ { 0x704f164d5e31e24eULL, 0xac5aaeaab9cf8b80ULL, },
+ { 0x704f164d5e31e24eULL, 0x886ae6cc28625540ULL, }, /* 96 */
+ { 0x704f164d5e31e24eULL, 0x886ae6cc28625540ULL, },
+ { 0x704f164d5e31e24eULL, 0x886ae6cc28625540ULL, },
+ { 0x704f164d5e31e24eULL, 0x886ae6cc28625540ULL, },
+ { 0x704f164d5e31e24eULL, 0xfbbe00634d93c708ULL, },
+ { 0x704f164d5e31e24eULL, 0xfbbe00634d93c708ULL, },
+ { 0x704f164d5e31e24eULL, 0xfbbe00634d93c708ULL, },
+ { 0x704f164d5e31e24eULL, 0xfbbe00634d93c708ULL, },
+ { 0x704f164d5e31e24eULL, 0xac5aaeaab9cf8b80ULL, }, /* 104 */
+ { 0x704f164d5e31e24eULL, 0xac5aaeaab9cf8b80ULL, },
+ { 0x704f164d5e31e24eULL, 0xac5aaeaab9cf8b80ULL, },
+ { 0x704f164d5e31e24eULL, 0xac5aaeaab9cf8b80ULL, },
+ { 0x704f164d5e31e24eULL, 0x704f164d5e31e24eULL, },
+ { 0x704f164d5e31e24eULL, 0x704f164d5e31e24eULL, },
+ { 0x704f164d5e31e24eULL, 0x704f164d5e31e24eULL, },
+ { 0x704f164d5e31e24eULL, 0x704f164d5e31e24eULL, },
};
reset_msa_registers();
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 22d043cf49..2eae01fa75 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,38 +123,38 @@ int32_t main(void)
{ 0xbb1a52fc0063c708ULL, 0x88d8e2a0164de24eULL, },
{ 0xc6ff2514aeaa8b80ULL, 0x88d8e2a0164de24eULL, },
{ 0x88d8e2a0164de24eULL, 0x88d8e2a0164de24eULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */
- { 0x00000000fc000000ULL, 0x000015000000001aULL, },
- { 0x0000000014000000ULL, 0x0000ab00000000ffULL, },
- { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, },
- { 0x000040000000000cULL, 0x9300003f00120000ULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000800000000014ULL, 0x9300003f00120000ULL, },
- { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */
- { 0x0000000000000000ULL, 0xfb000000001500aaULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x0000000000000000ULL, 0x7000000000a916aaULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */
- { 0x00000800000000fcULL, 0x6200007be64b0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeccULL, },
- { 0x00006a0000550000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae63ULL, },
- { 0x0000be0000c70000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */
- { 0x00000800000000fcULL, 0xcf00002bae270000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x00005a00008b0000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x31000042168d0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae4dULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
+ { 0x0b5eb00ce6cc5540ULL, 0xe2a0e24ee2a0e24eULL, }, /* 80 */
+ { 0xbb1a52fc0063c708ULL, 0xe24ee24eb00c5540ULL, },
+ { 0xc6ff2514aeaa8b80ULL, 0xe24e554052fcc708ULL, },
+ { 0x88d8e2a0164de24eULL, 0x5540c70825148b80ULL, },
+ { 0x0b5eb00ce6cc5540ULL, 0xc7088b80e2a0e24eULL, },
+ { 0xbb1a52fc0063c708ULL, 0x8b80e24eb00c5540ULL, },
+ { 0xc6ff2514aeaa8b80ULL, 0xe24e554052fcc708ULL, },
+ { 0x88d8e2a0164de24eULL, 0x5540c70825148b80ULL, },
+ { 0x0b5eb00ce6cc5540ULL, 0xc7088b80e2a0e24eULL, }, /* 88 */
+ { 0xbb1a52fc0063c708ULL, 0x8b80e24eb00c5540ULL, },
+ { 0xc6ff2514aeaa8b80ULL, 0xe24e554052fcc708ULL, },
+ { 0x88d8e2a0164de24eULL, 0x5540c70825148b80ULL, },
+ { 0x0b5eb00ce6cc5540ULL, 0xc7088b80e2a0e24eULL, },
+ { 0xbb1a52fc0063c708ULL, 0x8b80e24eb00c5540ULL, },
+ { 0xc6ff2514aeaa8b80ULL, 0xe24e554052fcc708ULL, },
+ { 0x88d8e2a0164de24eULL, 0x5540c70825148b80ULL, },
+ { 0xc7088b80e2a0e24eULL, 0x0b5eb00ce6cc5540ULL, }, /* 96 */
+ { 0xb00c55408b80e24eULL, 0x0b5eb00ce6cc5540ULL, },
+ { 0xb00c55405540e24eULL, 0x0b5eb00ce6cc5540ULL, },
+ { 0xb00c55405540e24eULL, 0x0b5eb00ce6cc5540ULL, },
+ { 0xb00c55405540e24eULL, 0xbb1a52fc0063c708ULL, },
+ { 0x52fcc7085540e24eULL, 0xbb1a52fc0063c708ULL, },
+ { 0x52fcc708c708e24eULL, 0xbb1a52fc0063c708ULL, },
+ { 0x52fcc708c708e24eULL, 0xbb1a52fc0063c708ULL, },
+ { 0x52fcc708c708e24eULL, 0xc6ff2514aeaa8b80ULL, }, /* 104 */
+ { 0x25148b80c708e24eULL, 0xc6ff2514aeaa8b80ULL, },
+ { 0x25148b808b80e24eULL, 0xc6ff2514aeaa8b80ULL, },
+ { 0x25148b808b80e24eULL, 0xc6ff2514aeaa8b80ULL, },
+ { 0x25148b808b80e24eULL, 0x88d8e2a0164de24eULL, },
+ { 0xe2a0e24e8b80e24eULL, 0x88d8e2a0164de24eULL, },
+ { 0xe2a0e24ee24ee24eULL, 0x88d8e2a0164de24eULL, },
+ { 0xe2a0e24ee24ee24eULL, 0x88d8e2a0164de24eULL, },
};
reset_msa_registers();
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 1a9c2df2b8..f7215d0e43 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,38 +123,38 @@ int32_t main(void)
{ 0x153f52fc4d93c708ULL, 0xa942e2a05e31e24eULL, },
{ 0xab2b2514b9cf8b80ULL, 0xa942e2a05e31e24eULL, },
{ 0xa942e2a05e31e24eULL, 0xa942e2a05e31e24eULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */
- { 0x00000000fc000000ULL, 0x000015000000001aULL, },
- { 0x0000000014000000ULL, 0x0000ab00000000ffULL, },
- { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, },
- { 0x000040000000000cULL, 0x9300003f00120000ULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000800000000014ULL, 0x9300003f00120000ULL, },
- { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */
- { 0x0000000000000000ULL, 0xfb000000001500aaULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x0000000000000000ULL, 0x7000000000a916aaULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */
- { 0x00000800000000fcULL, 0x6200007be64b0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeccULL, },
- { 0x00006a0000550000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae63ULL, },
- { 0x0000be0000c70000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */
- { 0x00000800000000fcULL, 0xcf00002bae270000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x00005a00008b0000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x31000042168d0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae4dULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
+ { 0xfe7bb00c28625540ULL, 0x5e31e24e5e31e24eULL, }, /* 80 */
+ { 0x153f52fc4d93c708ULL, 0x5e31e24e28625540ULL, },
+ { 0xab2b2514b9cf8b80ULL, 0x286255404d93c708ULL, },
+ { 0xa942e2a05e31e24eULL, 0x4d93c708b9cf8b80ULL, },
+ { 0xfe7bb00c28625540ULL, 0xb9cf8b805e31e24eULL, },
+ { 0x153f52fc4d93c708ULL, 0x5e31e24e28625540ULL, },
+ { 0xab2b2514b9cf8b80ULL, 0x286255404d93c708ULL, },
+ { 0xa942e2a05e31e24eULL, 0x4d93c708b9cf8b80ULL, },
+ { 0xfe7bb00c28625540ULL, 0xb9cf8b805e31e24eULL, }, /* 88 */
+ { 0x153f52fc4d93c708ULL, 0x5e31e24e28625540ULL, },
+ { 0xab2b2514b9cf8b80ULL, 0x286255404d93c708ULL, },
+ { 0xa942e2a05e31e24eULL, 0x4d93c708b9cf8b80ULL, },
+ { 0xfe7bb00c28625540ULL, 0xb9cf8b805e31e24eULL, },
+ { 0x153f52fc4d93c708ULL, 0x5e31e24e28625540ULL, },
+ { 0xab2b2514b9cf8b80ULL, 0x286255404d93c708ULL, },
+ { 0xa942e2a05e31e24eULL, 0x4d93c708b9cf8b80ULL, },
+ { 0xb9cf8b805e31e24eULL, 0xfe7bb00c28625540ULL, }, /* 96 */
+ { 0x286255405e31e24eULL, 0xfe7bb00c28625540ULL, },
+ { 0x286255405e31e24eULL, 0xfe7bb00c28625540ULL, },
+ { 0x286255405e31e24eULL, 0xfe7bb00c28625540ULL, },
+ { 0x286255405e31e24eULL, 0x153f52fc4d93c708ULL, },
+ { 0x4d93c7085e31e24eULL, 0x153f52fc4d93c708ULL, },
+ { 0x4d93c7085e31e24eULL, 0x153f52fc4d93c708ULL, },
+ { 0x4d93c7085e31e24eULL, 0x153f52fc4d93c708ULL, },
+ { 0x4d93c7085e31e24eULL, 0xab2b2514b9cf8b80ULL, }, /* 104 */
+ { 0xb9cf8b805e31e24eULL, 0xab2b2514b9cf8b80ULL, },
+ { 0xb9cf8b805e31e24eULL, 0xab2b2514b9cf8b80ULL, },
+ { 0xb9cf8b805e31e24eULL, 0xab2b2514b9cf8b80ULL, },
+ { 0xb9cf8b805e31e24eULL, 0xa942e2a05e31e24eULL, },
+ { 0x5e31e24e5e31e24eULL, 0xa942e2a05e31e24eULL, },
+ { 0x5e31e24e5e31e24eULL, 0xa942e2a05e31e24eULL, },
+ { 0x5e31e24e5e31e24eULL, 0xa942e2a05e31e24eULL, },
};
reset_msa_registers();
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 15ef3776ec..6355338332 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,38 +123,38 @@ int32_t main(void)
{ 0x12bb1552fb004dc7ULL, 0x8d88a9e270165ee2ULL, },
{ 0x27c6ab25acaeb98bULL, 0x8d88a9e270165ee2ULL, },
{ 0x8d88a9e270165ee2ULL, 0x8d88a9e270165ee2ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */
- { 0x00000000fc000000ULL, 0x000015000000001aULL, },
- { 0x0000000014000000ULL, 0x0000ab00000000ffULL, },
- { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, },
- { 0x000040000000000cULL, 0x9300003f00120000ULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000800000000014ULL, 0x9300003f00120000ULL, },
- { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */
- { 0x0000000000000000ULL, 0xfb000000001500aaULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x0000000000000000ULL, 0x7000000000a916aaULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */
- { 0x00000800000000fcULL, 0x6200007be64b0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeccULL, },
- { 0x00006a0000550000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae63ULL, },
- { 0x0000be0000c70000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */
- { 0x00000800000000fcULL, 0xcf00002bae270000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x00005a00008b0000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x31000042168d0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae4dULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
+ { 0x4b0bfeb088e62855ULL, 0x8da9705e8da9705eULL, }, /* 80 */
+ { 0x12bb1552fb004dc7ULL, 0x8d708d704bfe8828ULL, },
+ { 0x27c6ab25acaeb98bULL, 0x8d8d4b881215fb4dULL, },
+ { 0x8d88a9e270165ee2ULL, 0x8d4b12fb27abacb9ULL, },
+ { 0x4b0bfeb088e62855ULL, 0x8d1227ac8da9705eULL, },
+ { 0x12bb1552fb004dc7ULL, 0x8d278d704bfe8828ULL, },
+ { 0x27c6ab25acaeb98bULL, 0x8d8d4b881215fb4dULL, },
+ { 0x8d88a9e270165ee2ULL, 0x8d4b12fb27abacb9ULL, },
+ { 0x4b0bfeb088e62855ULL, 0x8d1227ac8da9705eULL, }, /* 88 */
+ { 0x12bb1552fb004dc7ULL, 0x8d278d704bfe8828ULL, },
+ { 0x27c6ab25acaeb98bULL, 0x8d8d4b881215fb4dULL, },
+ { 0x8d88a9e270165ee2ULL, 0x8d4b12fb27abacb9ULL, },
+ { 0x4b0bfeb088e62855ULL, 0x8d1227ac8da9705eULL, },
+ { 0x12bb1552fb004dc7ULL, 0x8d278d704bfe8828ULL, },
+ { 0x27c6ab25acaeb98bULL, 0x8d8d4b881215fb4dULL, },
+ { 0x8d88a9e270165ee2ULL, 0x8d4b12fb27abacb9ULL, },
+ { 0x8d1227ac8da9705eULL, 0x4b0bfeb088e62855ULL, }, /* 96 */
+ { 0x4bfe88288d278d70ULL, 0x4b0bfeb088e62855ULL, },
+ { 0x4bfe88284b888d8dULL, 0x4b0bfeb088e62855ULL, },
+ { 0x4bfe88284b884b8dULL, 0x4b0bfeb088e62855ULL, },
+ { 0x4bfe88284b884b4bULL, 0x12bb1552fb004dc7ULL, },
+ { 0x1215fb4d4b884b4bULL, 0x12bb1552fb004dc7ULL, },
+ { 0x1215fb4d12fb4b4bULL, 0x12bb1552fb004dc7ULL, },
+ { 0x1215fb4d12fb124bULL, 0x12bb1552fb004dc7ULL, },
+ { 0x1215fb4d12fb1212ULL, 0x27c6ab25acaeb98bULL, }, /* 104 */
+ { 0x27abacb912fb1212ULL, 0x27c6ab25acaeb98bULL, },
+ { 0x27abacb927ac1212ULL, 0x27c6ab25acaeb98bULL, },
+ { 0x27abacb927ac2712ULL, 0x27c6ab25acaeb98bULL, },
+ { 0x27abacb927ac2727ULL, 0x8d88a9e270165ee2ULL, },
+ { 0x8da9705e27ac2727ULL, 0x8d88a9e270165ee2ULL, },
+ { 0x8da9705e8d702727ULL, 0x8d88a9e270165ee2ULL, },
+ { 0x8da9705e8d708d27ULL, 0x8d88a9e270165ee2ULL, },
};
reset_msa_registers();
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 e3997cd9a5..ac75526fda 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,38 +123,38 @@ int32_t main(void)
{ 0x12f7bb1a153f52fcULL, 0x8df188d8a942e2a0ULL, },
{ 0x27d8c6ffab2b2514ULL, 0x8df188d8a942e2a0ULL, },
{ 0x8df188d8a942e2a0ULL, 0x8df188d8a942e2a0ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */
- { 0x00000000fc000000ULL, 0x000015000000001aULL, },
- { 0x0000000014000000ULL, 0x0000ab00000000ffULL, },
- { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, },
- { 0x000040000000000cULL, 0x9300003f00120000ULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000800000000014ULL, 0x9300003f00120000ULL, },
- { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */
- { 0x0000000000000000ULL, 0xfb000000001500aaULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x0000000000000000ULL, 0x7000000000a916aaULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */
- { 0x00000800000000fcULL, 0x6200007be64b0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeccULL, },
- { 0x00006a0000550000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae63ULL, },
- { 0x0000be0000c70000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */
- { 0x00000800000000fcULL, 0xcf00002bae270000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x00005a00008b0000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x31000042168d0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae4dULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
+ { 0x4b670b5efe7bb00cULL, 0x8df188d8a942e2a0ULL, }, /* 80 */
+ { 0x12f7bb1a153f52fcULL, 0x8df188d8a942e2a0ULL, },
+ { 0x27d8c6ffab2b2514ULL, 0x8df188d8a942e2a0ULL, },
+ { 0x8df188d8a942e2a0ULL, 0x8df188d8a942e2a0ULL, },
+ { 0x4b670b5efe7bb00cULL, 0x8df188d8a942e2a0ULL, },
+ { 0x12f7bb1a153f52fcULL, 0x8df188d8a942e2a0ULL, },
+ { 0x27d8c6ffab2b2514ULL, 0x8df188d8a942e2a0ULL, },
+ { 0x8df188d8a942e2a0ULL, 0x8df188d8a942e2a0ULL, },
+ { 0x4b670b5efe7bb00cULL, 0x8df188d8a942e2a0ULL, }, /* 88 */
+ { 0x12f7bb1a153f52fcULL, 0x8df188d8a942e2a0ULL, },
+ { 0x27d8c6ffab2b2514ULL, 0x8df188d8a942e2a0ULL, },
+ { 0x8df188d8a942e2a0ULL, 0x8df188d8a942e2a0ULL, },
+ { 0x4b670b5efe7bb00cULL, 0x8df188d8a942e2a0ULL, },
+ { 0x12f7bb1a153f52fcULL, 0x8df188d8a942e2a0ULL, },
+ { 0x27d8c6ffab2b2514ULL, 0x8df188d8a942e2a0ULL, },
+ { 0x8df188d8a942e2a0ULL, 0x8df188d8a942e2a0ULL, },
+ { 0x8df188d8a942e2a0ULL, 0x4b670b5efe7bb00cULL, }, /* 96 */
+ { 0x4b670b5efe7bb00cULL, 0x4b670b5efe7bb00cULL, },
+ { 0x4b670b5efe7bb00cULL, 0x4b670b5efe7bb00cULL, },
+ { 0x4b670b5efe7bb00cULL, 0x4b670b5efe7bb00cULL, },
+ { 0x4b670b5efe7bb00cULL, 0x12f7bb1a153f52fcULL, },
+ { 0x12f7bb1a153f52fcULL, 0x12f7bb1a153f52fcULL, },
+ { 0x12f7bb1a153f52fcULL, 0x12f7bb1a153f52fcULL, },
+ { 0x12f7bb1a153f52fcULL, 0x12f7bb1a153f52fcULL, },
+ { 0x12f7bb1a153f52fcULL, 0x27d8c6ffab2b2514ULL, }, /* 104 */
+ { 0x27d8c6ffab2b2514ULL, 0x27d8c6ffab2b2514ULL, },
+ { 0x27d8c6ffab2b2514ULL, 0x27d8c6ffab2b2514ULL, },
+ { 0x27d8c6ffab2b2514ULL, 0x27d8c6ffab2b2514ULL, },
+ { 0x27d8c6ffab2b2514ULL, 0x8df188d8a942e2a0ULL, },
+ { 0x8df188d8a942e2a0ULL, 0x8df188d8a942e2a0ULL, },
+ { 0x8df188d8a942e2a0ULL, 0x8df188d8a942e2a0ULL, },
+ { 0x8df188d8a942e2a0ULL, 0x8df188d8a942e2a0ULL, },
};
reset_msa_registers();
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 2a29ac0faf..12c1fa1ea5 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,38 +123,38 @@ int32_t main(void)
{ 0x12f7153ffbbe4d93ULL, 0x8df1a942704f5e31ULL, },
{ 0x27d8ab2bac5ab9cfULL, 0x8df1a942704f5e31ULL, },
{ 0x8df1a942704f5e31ULL, 0x8df1a942704f5e31ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */
- { 0x00000000fc000000ULL, 0x000015000000001aULL, },
- { 0x0000000014000000ULL, 0x0000ab00000000ffULL, },
- { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, },
- { 0x000040000000000cULL, 0x9300003f00120000ULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000800000000014ULL, 0x9300003f00120000ULL, },
- { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */
- { 0x0000000000000000ULL, 0xfb000000001500aaULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x0000000000000000ULL, 0x7000000000a916aaULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */
- { 0x00000800000000fcULL, 0x6200007be64b0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeccULL, },
- { 0x00006a0000550000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae63ULL, },
- { 0x0000be0000c70000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */
- { 0x00000800000000fcULL, 0xcf00002bae270000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x00005a00008b0000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x31000042168d0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae4dULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
+ { 0x4b67fe7b886a2862ULL, 0x8df1704f8df1704fULL, }, /* 80 */
+ { 0x12f7153ffbbe4d93ULL, 0x8df18df14b67886aULL, },
+ { 0x27d8ab2bac5ab9cfULL, 0x8df14b6712f7fbbeULL, },
+ { 0x8df1a942704f5e31ULL, 0x8df112f727d8ac5aULL, },
+ { 0x4b67fe7b886a2862ULL, 0x8df127d88df1704fULL, },
+ { 0x12f7153ffbbe4d93ULL, 0x8df18df14b67886aULL, },
+ { 0x27d8ab2bac5ab9cfULL, 0x8df14b6712f7fbbeULL, },
+ { 0x8df1a942704f5e31ULL, 0x8df112f727d8ac5aULL, },
+ { 0x4b67fe7b886a2862ULL, 0x8df127d88df1704fULL, }, /* 88 */
+ { 0x12f7153ffbbe4d93ULL, 0x8df18df14b67886aULL, },
+ { 0x27d8ab2bac5ab9cfULL, 0x8df14b6712f7fbbeULL, },
+ { 0x8df1a942704f5e31ULL, 0x8df112f727d8ac5aULL, },
+ { 0x4b67fe7b886a2862ULL, 0x8df127d88df1704fULL, },
+ { 0x12f7153ffbbe4d93ULL, 0x8df18df14b67886aULL, },
+ { 0x27d8ab2bac5ab9cfULL, 0x8df14b6712f7fbbeULL, },
+ { 0x8df1a942704f5e31ULL, 0x8df112f727d8ac5aULL, },
+ { 0x8df127d88df1704fULL, 0x4b67fe7b886a2862ULL, }, /* 96 */
+ { 0x4b67886a8df18df1ULL, 0x4b67fe7b886a2862ULL, },
+ { 0x4b67886a4b678df1ULL, 0x4b67fe7b886a2862ULL, },
+ { 0x4b67886a4b674b67ULL, 0x4b67fe7b886a2862ULL, },
+ { 0x4b67886a4b674b67ULL, 0x12f7153ffbbe4d93ULL, },
+ { 0x12f7fbbe4b674b67ULL, 0x12f7153ffbbe4d93ULL, },
+ { 0x12f7fbbe12f74b67ULL, 0x12f7153ffbbe4d93ULL, },
+ { 0x12f7fbbe12f712f7ULL, 0x12f7153ffbbe4d93ULL, },
+ { 0x12f7fbbe12f712f7ULL, 0x27d8ab2bac5ab9cfULL, }, /* 104 */
+ { 0x27d8ac5a12f712f7ULL, 0x27d8ab2bac5ab9cfULL, },
+ { 0x27d8ac5a27d812f7ULL, 0x27d8ab2bac5ab9cfULL, },
+ { 0x27d8ac5a27d827d8ULL, 0x27d8ab2bac5ab9cfULL, },
+ { 0x27d8ac5a27d827d8ULL, 0x8df1a942704f5e31ULL, },
+ { 0x8df1704f27d827d8ULL, 0x8df1a942704f5e31ULL, },
+ { 0x8df1704f8df127d8ULL, 0x8df1a942704f5e31ULL, },
+ { 0x8df1704f8df18df1ULL, 0x8df1a942704f5e31ULL, },
};
reset_msa_registers();
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 a3fbe25c6e..b8979c3f43 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,38 +123,38 @@ int32_t main(void)
{ 0x12f7bb1afbbe0063ULL, 0x8df188d8704f164dULL, },
{ 0x27d8c6ffac5aaeaaULL, 0x8df188d8704f164dULL, },
{ 0x8df188d8704f164dULL, 0x8df188d8704f164dULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */
- { 0x00000000fc000000ULL, 0x000015000000001aULL, },
- { 0x0000000014000000ULL, 0x0000ab00000000ffULL, },
- { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, },
- { 0x000040000000000cULL, 0x9300003f00120000ULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000800000000014ULL, 0x9300003f00120000ULL, },
- { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */
- { 0x0000000000000000ULL, 0xfb000000001500aaULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x0000000000000000ULL, 0x7000000000a916aaULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */
- { 0x00000800000000fcULL, 0x6200007be64b0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeccULL, },
- { 0x00006a0000550000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae63ULL, },
- { 0x0000be0000c70000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */
- { 0x00000800000000fcULL, 0xcf00002bae270000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x00005a00008b0000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x31000042168d0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae4dULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
+ { 0x4b670b5e886ae6ccULL, 0x8df188d88df188d8ULL, }, /* 80 */
+ { 0x12f7bb1afbbe0063ULL, 0x8df188d84b670b5eULL, },
+ { 0x27d8c6ffac5aaeaaULL, 0x8df188d812f7bb1aULL, },
+ { 0x8df188d8704f164dULL, 0x8df188d827d8c6ffULL, },
+ { 0x4b670b5e886ae6ccULL, 0x8df188d88df188d8ULL, },
+ { 0x12f7bb1afbbe0063ULL, 0x8df188d84b670b5eULL, },
+ { 0x27d8c6ffac5aaeaaULL, 0x8df188d812f7bb1aULL, },
+ { 0x8df188d8704f164dULL, 0x8df188d827d8c6ffULL, },
+ { 0x4b670b5e886ae6ccULL, 0x8df188d88df188d8ULL, }, /* 88 */
+ { 0x12f7bb1afbbe0063ULL, 0x8df188d84b670b5eULL, },
+ { 0x27d8c6ffac5aaeaaULL, 0x8df188d812f7bb1aULL, },
+ { 0x8df188d8704f164dULL, 0x8df188d827d8c6ffULL, },
+ { 0x4b670b5e886ae6ccULL, 0x8df188d88df188d8ULL, },
+ { 0x12f7bb1afbbe0063ULL, 0x8df188d84b670b5eULL, },
+ { 0x27d8c6ffac5aaeaaULL, 0x8df188d812f7bb1aULL, },
+ { 0x8df188d8704f164dULL, 0x8df188d827d8c6ffULL, },
+ { 0x8df188d88df188d8ULL, 0x4b670b5e886ae6ccULL, }, /* 96 */
+ { 0x4b670b5e8df188d8ULL, 0x4b670b5e886ae6ccULL, },
+ { 0x4b670b5e4b670b5eULL, 0x4b670b5e886ae6ccULL, },
+ { 0x4b670b5e4b670b5eULL, 0x4b670b5e886ae6ccULL, },
+ { 0x4b670b5e4b670b5eULL, 0x12f7bb1afbbe0063ULL, },
+ { 0x12f7bb1a4b670b5eULL, 0x12f7bb1afbbe0063ULL, },
+ { 0x12f7bb1a12f7bb1aULL, 0x12f7bb1afbbe0063ULL, },
+ { 0x12f7bb1a12f7bb1aULL, 0x12f7bb1afbbe0063ULL, },
+ { 0x12f7bb1a12f7bb1aULL, 0x27d8c6ffac5aaeaaULL, }, /* 104 */
+ { 0x27d8c6ff12f7bb1aULL, 0x27d8c6ffac5aaeaaULL, },
+ { 0x27d8c6ff27d8c6ffULL, 0x27d8c6ffac5aaeaaULL, },
+ { 0x27d8c6ff27d8c6ffULL, 0x27d8c6ffac5aaeaaULL, },
+ { 0x27d8c6ff27d8c6ffULL, 0x8df188d8704f164dULL, },
+ { 0x8df188d827d8c6ffULL, 0x8df188d8704f164dULL, },
+ { 0x8df188d88df188d8ULL, 0x8df188d8704f164dULL, },
+ { 0x8df188d88df188d8ULL, 0x8df188d8704f164dULL, },
};
reset_msa_registers();
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 eedb7d845b..1839a26ca7 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
@@ -123,38 +123,38 @@ int32_t main(void)
{ 0x0000000000000000ULL, 0x0000000000000000ULL, },
{ 0x8080808080808080ULL, 0x8080808080808080ULL, },
{ 0x0000000000000000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */
- { 0x00000000fc000000ULL, 0x000015000000001aULL, },
- { 0x0000000014000000ULL, 0x0000ab00000000ffULL, },
- { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, },
- { 0x000040000000000cULL, 0x9300003f00120000ULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000800000000014ULL, 0x9300003f00120000ULL, },
- { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */
- { 0x0000000000000000ULL, 0xfb000000001500aaULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x0000000000000000ULL, 0x7000000000a916aaULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */
- { 0x00000800000000fcULL, 0x6200007be64b0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeccULL, },
- { 0x00006a0000550000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae63ULL, },
- { 0x0000be0000c70000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */
- { 0x00000800000000fcULL, 0xcf00002bae270000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x00005a00008b0000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x31000042168d0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae4dULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
+ { 0x4040404040404040ULL, 0x4040404040404040ULL, }, /* 80 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x8080808080808080ULL, 0x8080808080808080ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x4040404040404040ULL, 0x4040404040404040ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x8080808080808080ULL, 0x8080808080808080ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x4040404040404040ULL, 0x4040404040404040ULL, }, /* 88 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x8080808080808080ULL, 0x8080808080808080ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x4040404040404040ULL, 0x4040404040404040ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x8080808080808080ULL, 0x8080808080808080ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 96 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 104 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
};
reset_msa_registers();
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 85a8f0de73..ebc198feb8 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
@@ -123,38 +123,38 @@ int32_t main(void)
{ 0x0000000000000000ULL, 0x0000000000000000ULL, },
{ 0xac5aaeaab9cf8b80ULL, 0xac5aaeaab9cf8b80ULL, },
{ 0x0000000000000000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */
- { 0x00000000fc000000ULL, 0x000015000000001aULL, },
- { 0x0000000014000000ULL, 0x0000ab00000000ffULL, },
- { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, },
- { 0x000040000000000cULL, 0x9300003f00120000ULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000800000000014ULL, 0x9300003f00120000ULL, },
- { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */
- { 0x0000000000000000ULL, 0xfb000000001500aaULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x0000000000000000ULL, 0x7000000000a916aaULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */
- { 0x00000800000000fcULL, 0x6200007be64b0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeccULL, },
- { 0x00006a0000550000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae63ULL, },
- { 0x0000be0000c70000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */
- { 0x00000800000000fcULL, 0xcf00002bae270000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x00005a00008b0000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x31000042168d0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae4dULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
+ { 0x886ae6cc28625540ULL, 0x886ae6cc28625540ULL, }, /* 80 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xac5aaeaab9cf8b80ULL, 0xac5aaeaab9cf8b80ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x886ae6cc28625540ULL, 0x886ae6cc28625540ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xac5aaeaab9cf8b80ULL, 0xac5aaeaab9cf8b80ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x886ae6cc28625540ULL, 0x886ae6cc28625540ULL, }, /* 88 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xac5aaeaab9cf8b80ULL, 0xac5aaeaab9cf8b80ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x886ae6cc28625540ULL, 0x886ae6cc28625540ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xac5aaeaab9cf8b80ULL, 0xac5aaeaab9cf8b80ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 96 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 104 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
};
reset_msa_registers();
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 8d416bc60b..a7240134d7 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
@@ -123,38 +123,38 @@ int32_t main(void)
{ 0x0000000000000000ULL, 0x0000000000000000ULL, },
{ 0x8b808b808b808b80ULL, 0x8b808b808b808b80ULL, },
{ 0x0000000000000000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */
- { 0x00000000fc000000ULL, 0x000015000000001aULL, },
- { 0x0000000014000000ULL, 0x0000ab00000000ffULL, },
- { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, },
- { 0x000040000000000cULL, 0x9300003f00120000ULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000800000000014ULL, 0x9300003f00120000ULL, },
- { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */
- { 0x0000000000000000ULL, 0xfb000000001500aaULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x0000000000000000ULL, 0x7000000000a916aaULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */
- { 0x00000800000000fcULL, 0x6200007be64b0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeccULL, },
- { 0x00006a0000550000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae63ULL, },
- { 0x0000be0000c70000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */
- { 0x00000800000000fcULL, 0xcf00002bae270000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x00005a00008b0000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x31000042168d0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae4dULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
+ { 0x5540554055405540ULL, 0x5540554055405540ULL, }, /* 80 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x8b808b808b808b80ULL, 0x8b808b808b808b80ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x5540554055405540ULL, 0x5540554055405540ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x8b808b808b808b80ULL, 0x8b808b808b808b80ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x5540554055405540ULL, 0x5540554055405540ULL, }, /* 88 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x8b808b808b808b80ULL, 0x8b808b808b808b80ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x5540554055405540ULL, 0x5540554055405540ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x8b808b808b808b80ULL, 0x8b808b808b808b80ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 96 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 104 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
};
reset_msa_registers();
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 fd8f02dbd4..607ac4fb53 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
@@ -123,38 +123,38 @@ int32_t main(void)
{ 0x0000000000000000ULL, 0x0000000000000000ULL, },
{ 0xb9cf8b80b9cf8b80ULL, 0xb9cf8b80b9cf8b80ULL, },
{ 0x0000000000000000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 80 */
- { 0x00000000fc000000ULL, 0x000015000000001aULL, },
- { 0x0000000014000000ULL, 0x0000ab00000000ffULL, },
- { 0x00000000a0000000ULL, 0x0000a900000000d8ULL, },
- { 0x000040000000000cULL, 0x9300003f00120000ULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000800000000014ULL, 0x9300003f00120000ULL, },
- { 0x00004e00000000a0ULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0x8800000000fee6aaULL, }, /* 88 */
- { 0x0000000000000000ULL, 0xfb000000001500aaULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x0000000000000000ULL, 0x7000000000a916aaULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 96 */
- { 0x00000800000000fcULL, 0x6200007be64b0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeccULL, },
- { 0x00006a0000550000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x9300003f00120000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae63ULL, },
- { 0x0000be0000c70000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, }, /* 104 */
- { 0x00000800000000fcULL, 0xcf00002bae270000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abaeaaULL, },
- { 0x00005a00008b0000ULL, 0x0000000000000000ULL, },
- { 0x000000000c000000ULL, 0x0000fe000000005eULL, },
- { 0x00000800000000fcULL, 0x31000042168d0000ULL, },
- { 0x0000000000000000ULL, 0xac00000000abae4dULL, },
- { 0x00004f0000e20000ULL, 0x0000000000000000ULL, },
+ { 0x2862554028625540ULL, 0x2862554028625540ULL, }, /* 80 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xb9cf8b80b9cf8b80ULL, 0xb9cf8b80b9cf8b80ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x2862554028625540ULL, 0x2862554028625540ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xb9cf8b80b9cf8b80ULL, 0xb9cf8b80b9cf8b80ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x2862554028625540ULL, 0x2862554028625540ULL, }, /* 88 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xb9cf8b80b9cf8b80ULL, 0xb9cf8b80b9cf8b80ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x2862554028625540ULL, 0x2862554028625540ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0xb9cf8b80b9cf8b80ULL, 0xb9cf8b80b9cf8b80ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 96 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, }, /* 104 */
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
+ { 0x0000000000000000ULL, 0x0000000000000000ULL, },
};
reset_msa_registers();
diff --git a/tests/tcg/mips/user/ase/msa/test_msa_compile_32r6eb.sh b/tests/tcg/mips/user/ase/msa/test_msa_compile_32r6eb.sh
new file mode 100755
index 0000000000..25192137b0
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/test_msa_compile_32r6eb.sh
@@ -0,0 +1,643 @@
+
+#
+# Bit Count
+# ---------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nloc_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nloc_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nloc_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nloc_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nlzc_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nlzc_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nlzc_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nlzc_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pcnt_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pcnt_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pcnt_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pcnt_d_32r6eb
+
+#
+# Bit move
+# --------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsl_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsl_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsl_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsl_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsr_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsr_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsr_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsr_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_bmnz_v.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bmnz_v_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_bmz_v.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bmz_v_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_bsel_v.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bsel_v_32r6eb
+
+#
+# Bit Set
+# -------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bclr_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bclr_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bclr_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bclr_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bneg_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bneg_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bneg_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bneg_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bset_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bset_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bset_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bset_d_32r6eb
+
+#
+# Fixed Multiply
+# --------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_madd_q_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_madd_q_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_madd_q_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_madd_q_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_maddr_q_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_maddr_q_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_maddr_q_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_maddr_q_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msub_q_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msub_q_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msub_q_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msub_q_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msubr_q_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msubr_q_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msubr_q_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msubr_q_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mul_q_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mul_q_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mul_q_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mul_q_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mulr_q_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mulr_q_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mulr_q_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mulr_q_w_32r6eb
+
+#
+# Float Max Min
+# -------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_a_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmax_a_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_a_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmax_a_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmax_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmax_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_a_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmin_a_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_a_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmin_a_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmin_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmin_d_32r6eb
+
+#
+# Int Add
+# -------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_add_a_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_add_a_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_add_a_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_add_a_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_a_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_a_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_a_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_a_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_s_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_u_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_u_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_addv_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_addv_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_addv_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_addv_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hadd_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hadd_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hadd_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hadd_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hadd_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hadd_u_d_32r6eb
+
+#
+# Int Average
+# -----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_s_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_u_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_u_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_s_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_u_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_u_d_32r6eb
+
+#
+# Int Compare
+# -----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ceq_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ceq_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ceq_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ceq_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_s_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_u_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_u_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_s_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_u_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_u_d_32r6eb
+
+#
+# Int Divide
+# ----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_s_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_u_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_u_d_32r6eb
+
+#
+# Int Dot Product
+# ---------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dotp_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dotp_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dotp_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dotp_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dotp_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dotp_u_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpadd_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpadd_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpadd_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpadd_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpadd_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpadd_u_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpsub_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpsub_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpsub_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpsub_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpsub_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpsub_u_d_32r6eb
+
+#
+# Int Max Min
+# -----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_a_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_a_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_a_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_a_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_s_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_u_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_u_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_a_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_a_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_a_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_a_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_s_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_u_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_u_d_32r6eb
+
+#
+# Int Modulo
+# ----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_s_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_u_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_u_d_32r6eb
+
+#
+# Int Multiply
+# ------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_maddv_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_maddv_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_maddv_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_maddv_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msubv_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msubv_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msubv_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msubv_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mulv_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mulv_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mulv_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mulv_d_32r6eb
+
+#
+# Int Subtract
+# ------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_s_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_u_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_u_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hsub_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hsub_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hsub_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hsub_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hsub_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hsub_u_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_s_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_u_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_u_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsus_u_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsus_u_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsus_u_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsus_u_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsuu_s_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsuu_s_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsuu_s_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsuu_s_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subv_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subv_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subv_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subv_d_32r6eb
+
+#
+# Interleave
+# ----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvev_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvev_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvev_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvev_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvod_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvod_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvod_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvod_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvl_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvl_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvl_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvl_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvr_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvr_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvr_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvr_d_32r6eb
+
+#
+# Logic
+# -----
+#
+/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_and_v.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_and_v_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_nor_v.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nor_v_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_or_v.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_or_v_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_xor_v.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_xor_v_32r6eb
+
+#
+# Move
+# ----
+#
+/opt/img/bin/mips-img-linux-gnu-gcc move/test_msa_move_v.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_move_v_32r6eb
+
+#
+# Pack
+# ----
+#
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckev_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckev_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckev_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckev_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckod_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckod_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckod_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckod_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_vshf_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_vshf_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_vshf_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_vshf_d_32r6eb
+
+#
+# Shift
+# -----
+#
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sll_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sll_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sll_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sll_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sra_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sra_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sra_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sra_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srar_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srar_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srar_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srar_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srl_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srl_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srl_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srl_d_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_b.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srlr_b_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_h.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srlr_h_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_w.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srlr_w_32r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_d.c \
+-EB -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srlr_d_32r6eb
diff --git a/tests/tcg/mips/user/ase/msa/test_msa_compile_32r6el.sh b/tests/tcg/mips/user/ase/msa/test_msa_compile_32r6el.sh
new file mode 100755
index 0000000000..1e10ff7621
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/test_msa_compile_32r6el.sh
@@ -0,0 +1,643 @@
+
+#
+# Bit Count
+# ---------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nloc_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nloc_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nloc_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nloc_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nlzc_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nlzc_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nlzc_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nlzc_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pcnt_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pcnt_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pcnt_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pcnt_d_32r6el
+
+#
+# Bit move
+# --------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsl_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsl_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsl_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsl_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsr_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsr_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsr_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_binsr_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_bmnz_v.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bmnz_v_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_bmz_v.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bmz_v_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_bsel_v.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bsel_v_32r6el
+
+#
+# Bit Set
+# -------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bclr_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bclr_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bclr_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bclr_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bneg_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bneg_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bneg_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bneg_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bset_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bset_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bset_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_bset_d_32r6el
+
+#
+# Fixed Multiply
+# --------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_madd_q_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_madd_q_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_madd_q_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_madd_q_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_maddr_q_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_maddr_q_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_maddr_q_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_maddr_q_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msub_q_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msub_q_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msub_q_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msub_q_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msubr_q_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msubr_q_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msubr_q_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msubr_q_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mul_q_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mul_q_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mul_q_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mul_q_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mulr_q_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mulr_q_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mulr_q_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mulr_q_w_32r6el
+
+#
+# Float Max Min
+# -------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_a_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmax_a_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_a_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmax_a_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmax_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmax_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_a_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmin_a_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_a_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmin_a_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmin_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_fmin_d_32r6el
+
+#
+# Int Add
+# -------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_add_a_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_add_a_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_add_a_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_add_a_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_a_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_a_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_a_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_a_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_s_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_u_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_adds_u_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_addv_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_addv_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_addv_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_addv_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hadd_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hadd_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hadd_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hadd_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hadd_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hadd_u_d_32r6el
+
+#
+# Int Average
+# -----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_s_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_u_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ave_u_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_s_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_u_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_aver_u_d_32r6el
+
+#
+# Int Compare
+# -----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ceq_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ceq_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ceq_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ceq_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_s_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_u_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_cle_u_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_s_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_u_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_clt_u_d_32r6el
+
+#
+# Int Divide
+# ----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_s_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_u_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_div_u_d_32r6el
+
+#
+# Int Dot Product
+# ---------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dotp_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dotp_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dotp_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dotp_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dotp_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dotp_u_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpadd_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpadd_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpadd_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpadd_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpadd_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpadd_u_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpsub_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpsub_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpsub_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpsub_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpsub_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_dpsub_u_d_32r6el
+
+#
+# Int Max Min
+# -----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_a_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_a_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_a_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_a_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_s_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_u_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_max_u_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_a_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_a_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_a_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_a_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_s_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_u_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_min_u_d_32r6el
+
+#
+# Int Modulo
+# ----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_s_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_u_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mod_u_d_32r6el
+
+#
+# Int Multiply
+# ------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_maddv_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_maddv_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_maddv_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_maddv_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msubv_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msubv_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msubv_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_msubv_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mulv_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mulv_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mulv_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_mulv_d_32r6el
+
+#
+# Int Subtract
+# ------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_s_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_u_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_asub_u_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hsub_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hsub_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hsub_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hsub_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hsub_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_hsub_u_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_s_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_u_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subs_u_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsus_u_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsus_u_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsus_u_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsus_u_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsuu_s_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsuu_s_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsuu_s_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subsuu_s_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subv_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subv_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subv_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_subv_d_32r6el
+
+#
+# Interleave
+# ----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvev_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvev_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvev_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvev_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvod_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvod_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvod_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvod_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvl_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvl_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvl_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvl_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvr_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvr_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvr_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_ilvr_d_32r6el
+
+#
+# Logic
+# -----
+#
+/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_and_v.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_and_v_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_nor_v.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_nor_v_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_or_v.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_or_v_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_xor_v.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_xor_v_32r6el
+
+#
+# Move
+# ----
+#
+/opt/img/bin/mips-img-linux-gnu-gcc move/test_msa_move_v.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_move_v_32r6el
+
+#
+# Pack
+# ----
+#
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckev_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckev_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckev_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckev_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckod_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckod_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckod_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_pckod_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_vshf_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_vshf_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_vshf_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_vshf_d_32r6el
+
+#
+# Shift
+# -----
+#
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sll_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sll_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sll_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sll_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sra_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sra_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sra_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_sra_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srar_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srar_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srar_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srar_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srl_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srl_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srl_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srl_d_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_b.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srlr_b_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_h.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srlr_h_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_w.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srlr_w_32r6el
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_d.c \
+-EL -static -mabi=32 -march=mips32r6 -mmsa -o /tmp/test_msa_srlr_d_32r6el
diff --git a/tests/tcg/mips/user/ase/msa/test_msa_compile_64r6eb.sh b/tests/tcg/mips/user/ase/msa/test_msa_compile_64r6eb.sh
new file mode 100755
index 0000000000..6bc8907a53
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/test_msa_compile_64r6eb.sh
@@ -0,0 +1,643 @@
+
+#
+# Bit Count
+# ---------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nloc_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nloc_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nloc_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nloc_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nloc_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nlzc_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nlzc_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nlzc_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_nlzc_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nlzc_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pcnt_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pcnt_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pcnt_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-count/test_msa_pcnt_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pcnt_d_64r6eb
+
+#
+# Bit move
+# --------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsl_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsl_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsl_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsl_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsr_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsr_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsr_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsr_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_bmnz_v.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bmnz_v_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_bmz_v.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bmz_v_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_bsel_v.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bsel_v_64r6eb
+
+#
+# Bit Set
+# -------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bclr_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bclr_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bclr_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bclr_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bclr_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bneg_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bneg_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bneg_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bneg_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bneg_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bset_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bset_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bset_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc bit-set/test_msa_bset_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bset_d_64r6eb
+
+#
+# Fixed Multiply
+# --------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_madd_q_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_madd_q_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_madd_q_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_madd_q_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_maddr_q_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_maddr_q_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_maddr_q_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_maddr_q_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msub_q_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msub_q_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msub_q_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msub_q_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msubr_q_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msubr_q_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msubr_q_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msubr_q_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mul_q_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mul_q_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mul_q_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mul_q_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mulr_q_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulr_q_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_mulr_q_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulr_q_w_64r6eb
+
+#
+# Float Max Min
+# -------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_a_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmax_a_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_a_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmax_a_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmax_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmax_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmax_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_a_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmin_a_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_a_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmin_a_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmin_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc float-max-min/test_msa_fmin_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_fmin_d_64r6eb
+
+#
+# Int Add
+# -------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_add_a_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_add_a_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_add_a_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_add_a_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_add_a_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_a_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_a_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_a_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_a_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_a_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_s_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_u_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_adds_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_u_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_addv_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_addv_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_addv_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_addv_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_addv_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-add/test_msa_hadd_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_u_d_64r6eb
+
+#
+# Int Average
+# -----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_s_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_u_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_ave_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_u_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_s_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_u_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-average/test_msa_aver_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_u_d_64r6eb
+
+#
+# Int Compare
+# -----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ceq_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ceq_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ceq_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_ceq_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ceq_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_s_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_u_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_cle_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_u_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_s_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_u_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-compare/test_msa_clt_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_u_d_64r6eb
+
+#
+# Int Divide
+# ----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_s_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_u_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-divide/test_msa_div_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_u_d_64r6eb
+
+#
+# Int Dot Product
+# ---------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dotp_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_u_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpadd_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpadd_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpadd_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpadd_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpadd_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpadd_u_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpsub_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpsub_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpsub_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpsub_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpsub_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpsub_u_d_64r6eb
+
+#
+# Int Max Min
+# -----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_a_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_a_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_a_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_a_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_a_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_s_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_u_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_max_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_u_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_a_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_a_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_a_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_a_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_a_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_s_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_u_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-max-min/test_msa_min_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_u_d_64r6eb
+
+#
+# Int Modulo
+# ----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_s_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_u_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-modulo/test_msa_mod_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_u_d_64r6eb
+
+#
+# Int Multiply
+# ------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_maddv_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_maddv_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_maddv_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_maddv_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msubv_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msubv_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msubv_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msubv_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulv_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulv_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulv_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_mulv_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulv_d_64r6eb
+
+#
+# Int Subtract
+# ------------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_s_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_u_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_asub_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_u_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_hsub_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_u_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_s_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_u_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subs_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_u_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsus_u_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsus_u_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsus_u_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsus_u_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsus_u_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsuu_s_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsuu_s_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsuu_s_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subsuu_s_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsuu_s_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subv_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subv_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subv_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc int-subtract/test_msa_subv_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subv_d_64r6eb
+
+#
+# Interleave
+# ----------
+#
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvev_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvev_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvev_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvev_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvev_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvod_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvod_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvod_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvod_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvod_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvl_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvl_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvl_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvl_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvl_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvr_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvr_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvr_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc interleave/test_msa_ilvr_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvr_d_64r6eb
+
+#
+# Logic
+# -----
+#
+/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_and_v.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_and_v_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_nor_v.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nor_v_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_or_v.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_or_v_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc logic/test_msa_xor_v.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_xor_v_64r6eb
+
+#
+# Move
+# ----
+#
+/opt/img/bin/mips-img-linux-gnu-gcc move/test_msa_move_v.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_move_v_64r6eb
+
+#
+# Pack
+# ----
+#
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckev_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckev_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckev_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckev_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckev_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckod_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckod_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckod_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_pckod_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckod_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_vshf_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_vshf_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_vshf_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc pack/test_msa_vshf_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_vshf_d_64r6eb
+
+#
+# Shift
+# -----
+#
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sll_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sll_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sll_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sll_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sll_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sra_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sra_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sra_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_sra_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sra_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srar_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srar_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srar_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srar_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srar_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srl_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srl_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srl_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srl_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srl_d_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_b.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srlr_b_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_h.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srlr_h_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_w.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srlr_w_64r6eb
+/opt/img/bin/mips-img-linux-gnu-gcc shift/test_msa_srlr_d.c \
+-EB -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srlr_d_64r6eb
diff --git a/tests/tcg/mips/user/ase/msa/test_msa_compile.sh b/tests/tcg/mips/user/ase/msa/test_msa_compile_64r6el.sh
index 2a39d892f0..4a92c55a4e 100755
--- a/tests/tcg/mips/user/ase/msa/test_msa_compile.sh
+++ b/tests/tcg/mips/user/ase/msa/test_msa_compile_64r6el.sh
@@ -4,555 +4,640 @@
# ---------
#
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nloc_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nloc_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nloc_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nloc_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nlzc_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nlzc_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nlzc_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nlzc_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pcnt_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pcnt_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pcnt_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pcnt_d_64r6el
#
# Bit move
# --------
#
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_b.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsl_b_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_h.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsl_h_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_w.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsl_w_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsl_d.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsl_d_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_b.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsr_b_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_h.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsr_h_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_w.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsr_w_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_binsr_d.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_binsr_d_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_bmnz_v.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bmnz_v_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_bmz_v.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bmz_v_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc bit-move/test_msa_bsel_v.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bsel_v_64r6el
#
# 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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bclr_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bclr_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bclr_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bclr_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bneg_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bneg_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bneg_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bneg_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bset_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bset_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bset_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_bset_d_64r6el
#
# 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
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_madd_q_h.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_madd_q_h_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_madd_q_w.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_madd_q_w_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_maddr_q_h.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_maddr_q_h_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_maddr_q_w.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_maddr_q_w_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msub_q_h.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msub_q_h_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msub_q_w.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msub_q_w_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msubr_q_h.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msubr_q_h_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc fixed-multiply/test_msa_msubr_q_w.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msubr_q_w_64r6el
+/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_64r6el
+/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_64r6el
+/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_64r6el
+/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_64r6el
#
# 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
+/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_64r6el
+/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_64r6el
+/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_64r6el
+/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_64r6el
+/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_64r6el
+/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_64r6el
+/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_64r6el
+/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_64r6el
#
# 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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_add_a_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_add_a_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_add_a_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_add_a_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_a_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_a_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_a_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_a_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_s_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_u_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_adds_u_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_addv_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_addv_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_addv_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_addv_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hadd_u_d_64r6el
#
# 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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_s_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_u_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ave_u_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_s_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_u_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_aver_u_d_64r6el
#
# 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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ceq_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ceq_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ceq_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ceq_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_s_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_u_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_cle_u_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_s_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_u_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_clt_u_d_64r6el
#
# 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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_s_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_u_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_div_u_d_64r6el
#
# 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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dotp_u_d_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_s_h.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpadd_s_h_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_s_w.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpadd_s_w_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_s_d.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpadd_s_d_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_u_h.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpadd_u_h_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_u_w.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpadd_u_w_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpadd_u_d.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpadd_u_d_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_s_h.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpsub_s_h_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_s_w.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpsub_s_w_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_s_d.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpsub_s_d_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_u_h.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpsub_u_h_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_u_w.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpsub_u_w_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-dot-product/test_msa_dpsub_u_d.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_dpsub_u_d_64r6el
#
# 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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_a_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_a_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_a_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_a_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_s_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_u_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_max_u_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_a_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_a_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_a_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_a_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_s_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_u_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_min_u_d_64r6el
#
# 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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_s_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_u_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mod_u_d_64r6el
#
# Int Multiply
# ------------
#
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_b.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_maddv_b_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_h.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_maddv_h_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_w.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_maddv_w_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_maddv_d.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_maddv_d_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_b.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msubv_b_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_h.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msubv_h_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_w.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msubv_w_64r6el
+/opt/img/bin/mips-img-linux-gnu-gcc int-multiply/test_msa_msubv_d.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_msubv_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulv_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulv_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulv_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_mulv_d_64r6el
#
# 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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_s_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_u_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_asub_u_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_hsub_u_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_s_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_s_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_s_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_s_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_u_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subs_u_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsus_u_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsus_u_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsus_u_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subsus_u_d_64r6el
+/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_64r6el
+/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_64r6el
+/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_64r6el
+/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_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subv_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subv_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subv_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_subv_d_64r6el
#
# 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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvev_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvev_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvev_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvev_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvod_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvod_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvod_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvod_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvl_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvl_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvl_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvl_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvr_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvr_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvr_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_ilvr_d_64r6el
#
# 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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_and_v_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_nor_v_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_or_v_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_xor_v_64r6el
+
+#
+# Move
+# ----
+#
+/opt/img/bin/mips-img-linux-gnu-gcc move/test_msa_move_v.c \
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_move_v_64r6el
#
# 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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckev_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckev_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckev_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckev_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckod_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckod_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckod_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_pckod_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_vshf_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_vshf_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_vshf_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_vshf_d_64r6el
#
# 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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sll_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sll_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sll_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sll_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sra_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sra_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sra_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_sra_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srar_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srar_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srar_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srar_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srl_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srl_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srl_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srl_d_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srlr_b_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srlr_h_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srlr_w_64r6el
/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
+-EL -static -mabi=64 -march=mips64r6 -mmsa -o /tmp/test_msa_srlr_d_64r6el
diff --git a/tests/tcg/mips/user/ase/msa/test_msa_run.sh b/tests/tcg/mips/user/ase/msa/test_msa_run.sh
deleted file mode 100755
index 278d93b614..0000000000
--- a/tests/tcg/mips/user/ase/msa/test_msa_run.sh
+++ /dev/null
@@ -1,326 +0,0 @@
-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
diff --git a/tests/tcg/mips/user/ase/msa/test_msa_run_32r6eb.sh b/tests/tcg/mips/user/ase/msa/test_msa_run_32r6eb.sh
new file mode 100644
index 0000000000..6c95e452cd
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/test_msa_run_32r6eb.sh
@@ -0,0 +1,371 @@
+PATH_TO_QEMU="../../../../../../mips64-linux-user/qemu-mips64"
+
+
+#
+# Bit Count
+# ---------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_d_32r6eb
+
+#
+# Bit move
+# --------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bmnz_v_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bmz_v_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bsel_v_32r6eb
+
+#
+# Bit Set
+# -------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_d_32r6eb
+
+#
+# Fixed Multiply
+# --------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_madd_q_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_madd_q_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddr_q_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddr_q_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msub_q_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msub_q_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubr_q_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubr_q_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mul_q_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mul_q_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulr_q_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulr_q_w_32r6eb
+
+#
+# Float Max Min
+# -------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_a_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_a_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_a_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_a_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_d_32r6eb
+
+#
+# Int Add
+# -------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_d_32r6eb
+
+#
+# Int Average
+# -----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_d_32r6eb
+
+#
+# Int Compare
+# -----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_d_32r6eb
+
+#
+# Int Divide
+# ----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_d_32r6eb
+
+#
+# Int Dot Product
+# ---------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_u_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_u_d_32r6eb
+
+#
+# Int Max Min
+# -----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_d_32r6eb
+
+#
+# Int Modulo
+# ----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_d_32r6eb
+
+#
+# Int Multiply
+# ------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_d_32r6eb
+
+#
+# Int Subtract
+# ------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_d_32r6eb
+
+#
+# Interleave
+# ----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_d_32r6eb
+
+#
+# Logic
+# -----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_and_v_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nor_v_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_or_v_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_xor_v_32r6eb
+
+#
+# Move
+# ----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_move_v_32r6eb
+
+#
+# Pack
+# ----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_d_32r6eb
+
+#
+# Shift
+# -----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_d_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_b_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_h_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_w_32r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_d_32r6eb
diff --git a/tests/tcg/mips/user/ase/msa/test_msa_run_32r6el.sh b/tests/tcg/mips/user/ase/msa/test_msa_run_32r6el.sh
new file mode 100755
index 0000000000..d4945da5e5
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/test_msa_run_32r6el.sh
@@ -0,0 +1,371 @@
+PATH_TO_QEMU="../../../../../../mips64el-linux-user/qemu-mips64el"
+
+
+#
+# Bit Count
+# ---------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_d_32r6el
+
+#
+# Bit move
+# --------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bmnz_v_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bmz_v_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bsel_v_32r6el
+
+#
+# Bit Set
+# -------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_d_32r6el
+
+#
+# Fixed Multiply
+# --------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_madd_q_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_madd_q_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddr_q_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddr_q_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msub_q_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msub_q_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubr_q_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubr_q_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mul_q_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mul_q_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulr_q_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulr_q_w_32r6el
+
+#
+# Float Max Min
+# -------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_a_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_a_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_a_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_a_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_d_32r6el
+
+#
+# Int Add
+# -------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_d_32r6el
+
+#
+# Int Average
+# -----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_d_32r6el
+
+#
+# Int Compare
+# -----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_d_32r6el
+
+#
+# Int Divide
+# ----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_d_32r6el
+
+#
+# Int Dot Product
+# ---------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_u_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_u_d_32r6el
+
+#
+# Int Max Min
+# -----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_d_32r6el
+
+#
+# Int Modulo
+# ----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_d_32r6el
+
+#
+# Int Multiply
+# ------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_d_32r6el
+
+#
+# Int Subtract
+# ------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_d_32r6el
+
+#
+# Interleave
+# ----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_d_32r6el
+
+#
+# Logic
+# -----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_and_v_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nor_v_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_or_v_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_xor_v_32r6el
+
+#
+# Move
+# ----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_move_v_32r6el
+
+#
+# Pack
+# ----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_d_32r6el
+
+#
+# Shift
+# -----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_d_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_b_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_h_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_w_32r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_d_32r6el
diff --git a/tests/tcg/mips/user/ase/msa/test_msa_run_64r6eb.sh b/tests/tcg/mips/user/ase/msa/test_msa_run_64r6eb.sh
new file mode 100755
index 0000000000..6de6d7cacf
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/test_msa_run_64r6eb.sh
@@ -0,0 +1,371 @@
+PATH_TO_QEMU="../../../../../../mips64-linux-user/qemu-mips64"
+
+
+#
+# Bit Count
+# ---------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_d_64r6eb
+
+#
+# Bit move
+# --------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bmnz_v_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bmz_v_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bsel_v_64r6eb
+
+#
+# Bit Set
+# -------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_d_64r6eb
+
+#
+# Fixed Multiply
+# --------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_madd_q_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_madd_q_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddr_q_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddr_q_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msub_q_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msub_q_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubr_q_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubr_q_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mul_q_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mul_q_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulr_q_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulr_q_w_64r6eb
+
+#
+# Float Max Min
+# -------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_a_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_a_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_a_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_a_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_d_64r6eb
+
+#
+# Int Add
+# -------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_d_64r6eb
+
+#
+# Int Average
+# -----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_d_64r6eb
+
+#
+# Int Compare
+# -----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_d_64r6eb
+
+#
+# Int Divide
+# ----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_d_64r6eb
+
+#
+# Int Dot Product
+# ---------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_u_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_u_d_64r6eb
+
+#
+# Int Max Min
+# -----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_d_64r6eb
+
+#
+# Int Modulo
+# ----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_d_64r6eb
+
+#
+# Int Multiply
+# ------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_d_64r6eb
+
+#
+# Int Subtract
+# ------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_d_64r6eb
+
+#
+# Interleave
+# ----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_d_64r6eb
+
+#
+# Logic
+# -----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_and_v_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nor_v_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_or_v_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_xor_v_64r6eb
+
+#
+# Move
+# ----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_move_v_64r6eb
+
+#
+# Pack
+# ----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_d_64r6eb
+
+#
+# Shift
+# -----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_d_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_b_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_h_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_w_64r6eb
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_d_64r6eb
diff --git a/tests/tcg/mips/user/ase/msa/test_msa_run_64r6el.sh b/tests/tcg/mips/user/ase/msa/test_msa_run_64r6el.sh
new file mode 100755
index 0000000000..979057df74
--- /dev/null
+++ b/tests/tcg/mips/user/ase/msa/test_msa_run_64r6el.sh
@@ -0,0 +1,371 @@
+PATH_TO_QEMU="../../../../../../mips64el-linux-user/qemu-mips64el"
+
+
+#
+# Bit Count
+# ---------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nloc_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nlzc_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pcnt_d_64r6el
+
+#
+# Bit move
+# --------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsl_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_binsr_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bmnz_v_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bmz_v_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bsel_v_64r6el
+
+#
+# Bit Set
+# -------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bclr_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bneg_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_bset_d_64r6el
+
+#
+# Fixed Multiply
+# --------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_madd_q_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_madd_q_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddr_q_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddr_q_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msub_q_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msub_q_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubr_q_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubr_q_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mul_q_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mul_q_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulr_q_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulr_q_w_64r6el
+
+#
+# Float Max Min
+# -------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_a_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_a_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmax_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_a_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_a_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_fmin_d_64r6el
+
+#
+# Int Add
+# -------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_add_a_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_a_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_adds_u_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_addv_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hadd_u_d_64r6el
+
+#
+# Int Average
+# -----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ave_u_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_aver_u_d_64r6el
+
+#
+# Int Compare
+# -----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ceq_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_cle_u_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_clt_u_d_64r6el
+
+#
+# Int Divide
+# ----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_div_u_d_64r6el
+
+#
+# Int Dot Product
+# ---------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dotp_u_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpadd_u_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_dpsub_u_d_64r6el
+
+#
+# Int Max Min
+# -----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_a_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_max_u_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_a_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_min_u_d_64r6el
+
+#
+# Int Modulo
+# ----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mod_u_d_64r6el
+
+#
+# Int Multiply
+# ------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_maddv_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_msubv_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_mulv_d_64r6el
+
+#
+# Int Subtract
+# ------------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_asub_u_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_hsub_u_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subs_u_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsus_u_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subsuu_s_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_subv_d_64r6el
+
+#
+# Interleave
+# ----------
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvev_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvod_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvl_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_ilvr_d_64r6el
+
+#
+# Logic
+# -----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_and_v_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_nor_v_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_or_v_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_xor_v_64r6el
+
+#
+# Move
+# ----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_move_v_64r6el
+
+#
+# Pack
+# ----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckev_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_pckod_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_vshf_d_64r6el
+
+#
+# Shift
+# -----
+#
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sll_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_sra_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srar_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srl_d_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_b_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_h_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_w_64r6el
+$PATH_TO_QEMU -cpu I6400 /tmp/test_msa_srlr_d_64r6el
diff --git a/tests/tcg/s390x/csst.c b/tests/tcg/s390x/csst.c
index 1dae9071fb..084d80af49 100644
--- a/tests/tcg/s390x/csst.c
+++ b/tests/tcg/s390x/csst.c
@@ -3,7 +3,7 @@
int main(void)
{
- uint64_t parmlist[] = {
+ uint64_t parmlist[] __attribute__((aligned(16))) = {
0xfedcba9876543210ull,
0,
0x7777777777777777ull,
diff --git a/tests/virtio-net-test.c b/tests/virtio-net-test.c
index 663cf7ea7e..7aa9622f30 100644
--- a/tests/virtio-net-test.c
+++ b/tests/virtio-net-test.c
@@ -184,21 +184,72 @@ static void announce_self(void *obj, void *data, QGuestAllocator *t_alloc)
QDict *rsp;
int ret;
uint16_t *proto = (uint16_t *)&buffer[12];
+ size_t total_received = 0;
+ uint64_t start, now, last_rxt, deadline;
+ /* Send a set of packets over a few second period */
rsp = qmp("{ 'execute' : 'announce-self', "
" 'arguments': {"
- " 'initial': 50, 'max': 550,"
- " 'rounds': 10, 'step': 50 } }");
+ " 'initial': 20, 'max': 100,"
+ " 'rounds': 300, 'step': 10, 'id': 'bob' } }");
assert(!qdict_haskey(rsp, "error"));
qobject_unref(rsp);
- /* Catch the packet and make sure it's a RARP */
+ /* Catch the first packet and make sure it's a RARP */
ret = qemu_recv(sv[0], &len, sizeof(len), 0);
g_assert_cmpint(ret, ==, sizeof(len));
len = ntohl(len);
ret = qemu_recv(sv[0], buffer, len, 0);
g_assert_cmpint(*proto, ==, htons(ETH_P_RARP));
+
+ /*
+ * Stop the announcment by settings rounds to 0 on the
+ * existing timer.
+ */
+ rsp = qmp("{ 'execute' : 'announce-self', "
+ " 'arguments': {"
+ " 'initial': 20, 'max': 100,"
+ " 'rounds': 0, 'step': 10, 'id': 'bob' } }");
+ assert(!qdict_haskey(rsp, "error"));
+ qobject_unref(rsp);
+
+ /* Now make sure the packets stop */
+
+ /* Times are in us */
+ start = g_get_monotonic_time();
+ /* 30 packets, max gap 100ms, * 4 for wiggle */
+ deadline = start + 1000 * (100 * 30 * 4);
+ last_rxt = start;
+
+ while (true) {
+ int saved_err;
+ ret = qemu_recv(sv[0], buffer, 60, MSG_DONTWAIT);
+ saved_err = errno;
+ now = g_get_monotonic_time();
+ g_assert_cmpint(now, <, deadline);
+
+ if (ret >= 0) {
+ if (ret) {
+ last_rxt = now;
+ }
+ total_received += ret;
+
+ /* Check it's not spewing loads */
+ g_assert_cmpint(total_received, <, 60 * 30 * 2);
+ } else {
+ g_assert_cmpint(saved_err, ==, EAGAIN);
+
+ /* 400ms, i.e. 4 worst case gaps */
+ if ((now - last_rxt) > (1000 * 100 * 4)) {
+ /* Nothings arrived for a while - must have stopped */
+ break;
+ };
+
+ /* 100ms */
+ g_usleep(1000 * 100);
+ }
+ };
}
static void virtio_net_test_cleanup(void *sockets)
diff --git a/tests/vm/basevm.py b/tests/vm/basevm.py
index 4847549592..64067c1075 100755
--- a/tests/vm/basevm.py
+++ b/tests/vm/basevm.py
@@ -18,7 +18,8 @@ import logging
import time
import datetime
sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
-from qemu import QEMUMachine, kvm_available
+from qemu import kvm_available
+from qemu.machine import QEMUMachine
import subprocess
import hashlib
import optparse