blob: 2d869a6069804c153be68fe08c0302c2eba7feac [file] [log] [blame]
/*
* Copyright 2023 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <cstdio>
#include "tests/kelvin_isa/kelvin_test.h"
void test_vdmulh() {
const uint32_t in0[4] = {0x23456789, 0x543210fe, 0x02305670, 0xedcba987};
const uint32_t ref[2][4] = {{0xea8d6858, 0xcccd6c0b, 0xfeab4536, 0x0b11daa9},
{0x129163c0, 0x2c52cda5, 0x0126fb26, 0xf66aa338}};
uint32_t dut[2][4];
vdup_w_x(v16, in0[0]);
vdup_w_x(v17, in0[1]);
vdup_w_x(v18, in0[2]);
vdup_w_x(v19, in0[3]);
vdmulh_w_rn_vx_m(v0, v16, 0xb22a768b);
vdmulh_w_rn_vx_m(v4, v16, 0x43623453);
vst_w_l_xx(v0, dut[0] + 0, 1);
vst_w_l_xx(v1, dut[0] + 1, 1);
vst_w_l_xx(v2, dut[0] + 2, 1);
vst_w_l_xx(v3, dut[0] + 3, 1);
vst_w_l_xx(v4, dut[1] + 0, 1);
vst_w_l_xx(v5, dut[1] + 1, 1);
vst_w_l_xx(v6, dut[1] + 2, 1);
vst_w_l_xx(v7, dut[1] + 3, 1);
for (int j = 0; j < 2; ++j) {
for (int i = 0; i < 4; ++i) {
const uint32_t r = ref[j][i];
const uint32_t d = dut[j][i];
if (r != d) {
printf("**test_vdmulh(%d,%d) %08lx %08lx\n", j, i, r, d);
exit(-1);
}
}
}
}
int main() {
test_alu_b_vv("vmul.b.vv", 0x00, 0x00, 0x00);
test_alu_b_vv("vmul.b.vv", 0x55, 0x00, 0x00);
test_alu_b_vv("vmul.b.vv", 0x02, 0x03, 0x06);
test_alu_b_vv("vmul.b.vv", 0x12, 0x06, 0x6c);
test_alu_b_vv("vmul.b.vv", 0x12, 0x09, 0xa2);
test_alu_b_vv("vmul.b.vv", 0x55, 0x03, 0xff);
test_alu_b_vv("vmul.b.vv", 0x55, 0x05, 0xa9);
test_alu_b_vv("vmul.b.vv", 0x54, 0x32, 0x68);
test_alu_b_vv("vmul.b.vv", 0x80, 0x7f, 0x80);
test_alu_b_vv("vmul.b.vv", 0x80, 0x80, 0x00);
test_alu_b_vv("vmul.b.vv", 0x80, 0x81, 0x80);
test_alu_b_vv("vmul.b.vv", 0xed, 0x23, 0x67);
test_alu_b_vv("vmul.b.vv", 0x54, 0x89, 0xf4);
test_alu_b_vv("vmul.b.vv", 0xcb, 0x07, 0x8d);
test_alu_b_vv("vmul.b.vv", 0xcb, 0x98, 0x88);
test_alu_b_vv("vmul.b.vv", 0xcb, 0xde, 0x0a);
test_alu_h_vv("vmul.h.vv", 0x0000, 0x0000, 0x0000);
test_alu_h_vv("vmul.h.vv", 0x5555, 0x0000, 0x0000);
test_alu_h_vv("vmul.h.vv", 0x0002, 0x0003, 0x0006);
test_alu_h_vv("vmul.h.vv", 0x1234, 0x0006, 0x6d38);
test_alu_h_vv("vmul.h.vv", 0x1234, 0x0009, 0xa3d4);
test_alu_h_vv("vmul.h.vv", 0x5555, 0x0003, 0xffff);
test_alu_h_vv("vmul.h.vv", 0x5555, 0x0005, 0xaaa9);
test_alu_h_vv("vmul.h.vv", 0x5432, 0x1234, 0x9e28);
test_alu_h_vv("vmul.h.vv", 0x5432, 0x89ab, 0xff66);
test_alu_h_vv("vmul.h.vv", 0x8000, 0x7fff, 0x8000);
test_alu_h_vv("vmul.h.vv", 0x8000, 0x8000, 0x0000);
test_alu_h_vv("vmul.h.vv", 0x8000, 0x8001, 0x8000);
test_alu_h_vv("vmul.h.vv", 0xedcb, 0x1234, 0x933c);
test_alu_h_vv("vmul.h.vv", 0xedcb, 0x89ab, 0x7999);
test_alu_h_vv("vmul.h.vv", 0xcba9, 0x0007, 0x919f);
test_alu_h_vv("vmul.h.vv", 0xcb98, 0x9876, 0x1810);
test_alu_h_vv("vmul.h.vv", 0xcb98, 0xdef3, 0x1148);
test_alu_w_vv("vmul.w.vv", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vv("vmul.w.vv", 0x55555555, 0x00000000, 0x00000000);
test_alu_w_vv("vmul.w.vv", 0x00000002, 0x00000003, 0x00000006);
test_alu_w_vv("vmul.w.vv", 0x12345678, 0x00000006, 0x6d3a06d0);
test_alu_w_vv("vmul.w.vv", 0x12345678, 0x00000009, 0xa3d70a38);
test_alu_w_vv("vmul.w.vv", 0x55555555, 0x00000003, 0xffffffff);
test_alu_w_vv("vmul.w.vv", 0x55555555, 0x00000005, 0xaaaaaaa9);
test_alu_w_vv("vmul.w.vv", 0x23456789, 0x02305670, 0x3ad551f0);
test_alu_w_vv("vmul.w.vv", 0x543210fe, 0x12345678, 0x98c54b10);
test_alu_w_vv("vmul.w.vv", 0x543210fe, 0x89abcdef, 0xfa034322);
test_alu_w_vv("vmul.w.vv", 0x80000000, 0x7fffffff, 0x80000000);
test_alu_w_vv("vmul.w.vv", 0x80000000, 0x80000000, 0x00000000);
test_alu_w_vv("vmul.w.vv", 0x80000000, 0x80000001, 0x80000000);
test_alu_w_vv("vmul.w.vv", 0xedcba987, 0x12345678, 0xcfd6d148);
test_alu_w_vv("vmul.w.vv", 0xedcba987, 0x89abcdef, 0x94116009);
test_alu_w_vv("vmul.w.vv", 0xcba98765, 0x00000007, 0x91a2b3c3);
test_alu_w_vv("vmul.w.vv", 0xcba98765, 0x98765432, 0xc81795ba);
test_alu_w_vv("vmul.w.vv", 0xcba98765, 0xdef34567, 0xbd92b2a3);
test_alu_b_vv("vmulh.b.vv", 0x00, 0x00, 0x00);
test_alu_b_vv("vmulh.b.vv", 0x55, 0x00, 0x00);
test_alu_b_vv("vmulh.b.vv", 0x02, 0x03, 0x00);
test_alu_b_vv("vmulh.b.vv", 0x12, 0x06, 0x00);
test_alu_b_vv("vmulh.b.vv", 0x12, 0x09, 0x00);
test_alu_b_vv("vmulh.b.vv", 0x55, 0x03, 0x00);
test_alu_b_vv("vmulh.b.vv", 0x55, 0x05, 0x01);
test_alu_b_vv("vmulh.b.vv", 0x54, 0x32, 0x10);
test_alu_b_vv("vmulh.b.vv", 0xed, 0x23, 0xfd);
test_alu_b_vv("vmulh.b.vv", 0x54, 0x89, 0xd8);
test_alu_b_vv("vmulh.b.vv", 0x80, 0x7f, 0xc0);
test_alu_b_vv("vmulh.b.vv", 0x80, 0x80, 0x40);
test_alu_b_vv("vmulh.b.vv", 0x80, 0x81, 0x3f);
test_alu_b_vv("vmulh.b.vv", 0xcb, 0x07, 0xfe);
test_alu_b_vv("vmulh.b.vv", 0xcb, 0x98, 0x15);
test_alu_b_vv("vmulh.b.vv", 0xcb, 0xde, 0x07);
test_alu_h_vv("vmulh.h.vv", 0x0000, 0x0000, 0x0000);
test_alu_h_vv("vmulh.h.vv", 0x5555, 0x0000, 0x0000);
test_alu_h_vv("vmulh.h.vv", 0x0002, 0x0003, 0x0000);
test_alu_h_vv("vmulh.h.vv", 0x1234, 0x0006, 0x0000);
test_alu_h_vv("vmulh.h.vv", 0x1234, 0x0009, 0x0000);
test_alu_h_vv("vmulh.h.vv", 0x5555, 0x0003, 0x0000);
test_alu_h_vv("vmulh.h.vv", 0x5555, 0x0005, 0x0001);
test_alu_h_vv("vmulh.h.vv", 0x5432, 0x1234, 0x05fc);
test_alu_h_vv("vmulh.h.vv", 0x5432, 0x89ab, 0xd914);
test_alu_h_vv("vmulh.h.vv", 0x8000, 0x7fff, 0xc000);
test_alu_h_vv("vmulh.h.vv", 0x8000, 0x8000, 0x4000);
test_alu_h_vv("vmulh.h.vv", 0x8000, 0x8001, 0x3fff);
test_alu_h_vv("vmulh.h.vv", 0xedcb, 0x1234, 0xfeb4);
test_alu_h_vv("vmulh.h.vv", 0xedcb, 0x89ab, 0x086a);
test_alu_h_vv("vmulh.h.vv", 0xcba9, 0x0007, 0xfffe);
test_alu_h_vv("vmulh.h.vv", 0xcb98, 0x9876, 0x1532);
test_alu_h_vv("vmulh.h.vv", 0xcb98, 0xdef3, 0x06c4);
test_alu_w_vv("vmulh.w.vv", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vv("vmulh.w.vv", 0x55555555, 0x00000000, 0x00000000);
test_alu_w_vv("vmulh.w.vv", 0x00000002, 0x00000003, 0x00000000);
test_alu_w_vv("vmulh.w.vv", 0x12345678, 0x00000006, 0x00000000);
test_alu_w_vv("vmulh.w.vv", 0x12345678, 0x00000009, 0x00000000);
test_alu_w_vv("vmulh.w.vv", 0x55555555, 0x00000003, 0x00000000);
test_alu_w_vv("vmulh.w.vv", 0x55555555, 0x00000005, 0x00000001);
test_alu_w_vv("vmulh.w.vv", 0x23456789, 0x02305670, 0x004d33bb);
test_alu_w_vv("vmulh.w.vv", 0x543210fe, 0x12345678, 0x05fcbbcd);
test_alu_w_vv("vmulh.w.vv", 0x543210fe, 0x89abcdef, 0xd9153b45);
test_alu_w_vv("vmulh.w.vv", 0x80000000, 0x7fffffff, 0xc0000000);
test_alu_w_vv("vmulh.w.vv", 0x80000000, 0x80000000, 0x40000000);
test_alu_w_vv("vmulh.w.vv", 0x80000000, 0x80000001, 0x3fffffff);
test_alu_w_vv("vmulh.w.vv", 0xedcba987, 0x12345678, 0xfeb49923);
test_alu_w_vv("vmulh.w.vv", 0xedcba987, 0x89abcdef, 0x086a1c97);
test_alu_w_vv("vmulh.w.vv", 0xcba98765, 0x00000007, 0xfffffffe);
test_alu_w_vv("vmulh.w.vv", 0xcba98765, 0x98765432, 0x152aefec);
test_alu_w_vv("vmulh.w.vv", 0xcba98765, 0xdef34567, 0x06c1bfbf);
test_alu_b_vv("vmulh.b.r.vv", 0x00, 0x00, 0x00);
test_alu_b_vv("vmulh.b.r.vv", 0x55, 0x00, 0x00);
test_alu_b_vv("vmulh.b.r.vv", 0x02, 0x03, 0x00);
test_alu_b_vv("vmulh.b.r.vv", 0x12, 0x06, 0x00);
test_alu_b_vv("vmulh.b.r.vv", 0x12, 0x09, 0x01);
test_alu_b_vv("vmulh.b.r.vv", 0x55, 0x03, 0x01);
test_alu_b_vv("vmulh.b.r.vv", 0x55, 0x05, 0x02);
test_alu_b_vv("vmulh.b.r.vv", 0x54, 0x32, 0x10);
test_alu_b_vv("vmulh.b.r.vv", 0x80, 0x7f, 0xc1);
test_alu_b_vv("vmulh.b.r.vv", 0x80, 0x80, 0x40);
test_alu_b_vv("vmulh.b.r.vv", 0x80, 0x81, 0x40);
test_alu_b_vv("vmulh.b.r.vv", 0xed, 0x23, 0xfd);
test_alu_b_vv("vmulh.b.r.vv", 0x54, 0x89, 0xd9);
test_alu_b_vv("vmulh.b.r.vv", 0xcb, 0x07, 0xff);
test_alu_b_vv("vmulh.b.r.vv", 0xcb, 0x98, 0x16);
test_alu_b_vv("vmulh.b.r.vv", 0xcb, 0xde, 0x07);
test_alu_h_vv("vmulh.h.r.vv", 0x0000, 0x0000, 0x0000);
test_alu_h_vv("vmulh.h.r.vv", 0x5555, 0x0000, 0x0000);
test_alu_h_vv("vmulh.h.r.vv", 0x0002, 0x0003, 0x0000);
test_alu_h_vv("vmulh.h.r.vv", 0x1234, 0x0006, 0x0000);
test_alu_h_vv("vmulh.h.r.vv", 0x1234, 0x0009, 0x0001);
test_alu_h_vv("vmulh.h.r.vv", 0x5555, 0x0003, 0x0001);
test_alu_h_vv("vmulh.h.r.vv", 0x5555, 0x0005, 0x0002);
test_alu_h_vv("vmulh.h.r.vv", 0x5432, 0x1234, 0x05fd);
test_alu_h_vv("vmulh.h.r.vv", 0x5432, 0x89ab, 0xd915);
test_alu_h_vv("vmulh.h.r.vv", 0x8000, 0x7fff, 0xc001);
test_alu_h_vv("vmulh.h.r.vv", 0x8000, 0x8000, 0x4000);
test_alu_h_vv("vmulh.h.r.vv", 0x8000, 0x8001, 0x4000);
test_alu_h_vv("vmulh.h.r.vv", 0xedcb, 0x1234, 0xfeb5);
test_alu_h_vv("vmulh.h.r.vv", 0xedcb, 0x89ab, 0x086a);
test_alu_h_vv("vmulh.h.r.vv", 0xcba9, 0x0007, 0xffff);
test_alu_h_vv("vmulh.h.r.vv", 0xcb98, 0x9876, 0x1532);
test_alu_h_vv("vmulh.h.r.vv", 0xcb98, 0xdef3, 0x06c4);
test_alu_w_vv("vmulh.w.r.vv", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vv("vmulh.w.r.vv", 0x55555555, 0x00000000, 0x00000000);
test_alu_w_vv("vmulh.w.r.vv", 0x00000002, 0x00000003, 0x00000000);
test_alu_w_vv("vmulh.w.r.vv", 0x12345678, 0x00000006, 0x00000000);
test_alu_w_vv("vmulh.w.r.vv", 0x12345678, 0x00000009, 0x00000001);
test_alu_w_vv("vmulh.w.r.vv", 0x55555555, 0x00000003, 0x00000001);
test_alu_w_vv("vmulh.w.r.vv", 0x55555555, 0x00000005, 0x00000002);
test_alu_w_vv("vmulh.w.r.vv", 0x23456789, 0x02305670, 0x004d33bb);
test_alu_w_vv("vmulh.w.r.vv", 0x543210fe, 0x12345678, 0x05fcbbce);
test_alu_w_vv("vmulh.w.r.vv", 0x543210fe, 0x89abcdef, 0xd9153b46);
test_alu_w_vv("vmulh.w.r.vv", 0x80000000, 0x7fffffff, 0xc0000001);
test_alu_w_vv("vmulh.w.r.vv", 0x80000000, 0x80000000, 0x40000000);
test_alu_w_vv("vmulh.w.r.vv", 0x80000000, 0x80000001, 0x40000000);
test_alu_w_vv("vmulh.w.r.vv", 0xedcba987, 0x12345678, 0xfeb49924);
test_alu_w_vv("vmulh.w.r.vv", 0xedcba987, 0x89abcdef, 0x086a1c98);
test_alu_w_vv("vmulh.w.r.vv", 0xcba98765, 0x00000007, 0xffffffff);
test_alu_w_vv("vmulh.w.r.vv", 0xcba98765, 0x98765432, 0x152aefed);
test_alu_w_vv("vmulh.w.r.vv", 0xcba98765, 0xdef34567, 0x06c1bfc0);
test_alu_b_vv("vmulhu.b.vv", 0x00, 0x00, 0x00);
test_alu_b_vv("vmulhu.b.vv", 0x55, 0x00, 0x00);
test_alu_b_vv("vmulhu.b.vv", 0x02, 0x03, 0x00);
test_alu_b_vv("vmulhu.b.vv", 0x12, 0x06, 0x00);
test_alu_b_vv("vmulhu.b.vv", 0x12, 0x09, 0x00);
test_alu_b_vv("vmulhu.b.vv", 0x55, 0x03, 0x00);
test_alu_b_vv("vmulhu.b.vv", 0x55, 0x05, 0x01);
test_alu_b_vv("vmulhu.b.vv", 0x54, 0x32, 0x10);
test_alu_b_vv("vmulhu.b.vv", 0x80, 0x7f, 0x3f);
test_alu_b_vv("vmulhu.b.vv", 0x80, 0x80, 0x40);
test_alu_b_vv("vmulhu.b.vv", 0x80, 0x81, 0x40);
test_alu_b_vv("vmulhu.b.vv", 0xed, 0x23, 0x20);
test_alu_b_vv("vmulhu.b.vv", 0x54, 0x89, 0x2c);
test_alu_b_vv("vmulhu.b.vv", 0xcb, 0x07, 0x05);
test_alu_b_vv("vmulhu.b.vv", 0xcb, 0x98, 0x78);
test_alu_b_vv("vmulhu.b.vv", 0xcb, 0xde, 0xb0);
test_alu_h_vv("vmulhu.h.vv", 0x0000, 0x0000, 0x0000);
test_alu_h_vv("vmulhu.h.vv", 0x5555, 0x0000, 0x0000);
test_alu_h_vv("vmulhu.h.vv", 0x0002, 0x0003, 0x0000);
test_alu_h_vv("vmulhu.h.vv", 0x1234, 0x0006, 0x0000);
test_alu_h_vv("vmulhu.h.vv", 0x1234, 0x0009, 0x0000);
test_alu_h_vv("vmulhu.h.vv", 0x5555, 0x0003, 0x0000);
test_alu_h_vv("vmulhu.h.vv", 0x5555, 0x0005, 0x0001);
test_alu_h_vv("vmulhu.h.vv", 0x5432, 0x1234, 0x05fc);
test_alu_h_vv("vmulhu.h.vv", 0x5432, 0x89ab, 0x2d46);
test_alu_h_vv("vmulhu.h.vv", 0x8000, 0x7fff, 0x3fff);
test_alu_h_vv("vmulhu.h.vv", 0x8000, 0x8000, 0x4000);
test_alu_h_vv("vmulhu.h.vv", 0x8000, 0x8001, 0x4000);
test_alu_h_vv("vmulhu.h.vv", 0xedcb, 0x1234, 0x10e8);
test_alu_h_vv("vmulhu.h.vv", 0xedcb, 0x89ab, 0x7fe0);
test_alu_h_vv("vmulhu.h.vv", 0xcba9, 0x0007, 0x0005);
test_alu_h_vv("vmulhu.h.vv", 0xcb98, 0x9876, 0x7940);
test_alu_h_vv("vmulhu.h.vv", 0xcb98, 0xdef3, 0xb14f);
test_alu_w_vv("vmulhu.w.vv", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vv("vmulhu.w.vv", 0x55555555, 0x00000000, 0x00000000);
test_alu_w_vv("vmulhu.w.vv", 0x00000002, 0x00000003, 0x00000000);
test_alu_w_vv("vmulhu.w.vv", 0x12345678, 0x00000006, 0x00000000);
test_alu_w_vv("vmulhu.w.vv", 0x12345678, 0x00000009, 0x00000000);
test_alu_w_vv("vmulhu.w.vv", 0x55555555, 0x00000003, 0x00000000);
test_alu_w_vv("vmulhu.w.vv", 0x55555555, 0x00000005, 0x00000001);
test_alu_w_vv("vmulhu.w.vv", 0x23456789, 0x02305670, 0x004d33bb);
test_alu_w_vv("vmulhu.w.vv", 0x543210fe, 0x12345678, 0x05fcbbcd);
test_alu_w_vv("vmulhu.w.vv", 0x543210fe, 0x89abcdef, 0x2d474c43);
test_alu_w_vv("vmulhu.w.vv", 0x80000000, 0x7fffffff, 0x3fffffff);
test_alu_w_vv("vmulhu.w.vv", 0x80000000, 0x80000000, 0x40000000);
test_alu_w_vv("vmulhu.w.vv", 0x80000000, 0x80000001, 0x40000000);
test_alu_w_vv("vmulhu.w.vv", 0xedcba987, 0x12345678, 0x10e8ef9b);
test_alu_w_vv("vmulhu.w.vv", 0xedcba987, 0x89abcdef, 0x7fe1940d);
test_alu_w_vv("vmulhu.w.vv", 0xcba98765, 0x00000007, 0x00000005);
test_alu_w_vv("vmulhu.w.vv", 0xcba98765, 0x98765432, 0x794acb83);
test_alu_w_vv("vmulhu.w.vv", 0xcba98765, 0xdef34567, 0xb15e8c8b);
test_alu_b_vv("vmulhu.b.r.vv", 0x00, 0x00, 0x00);
test_alu_b_vv("vmulhu.b.r.vv", 0x55, 0x00, 0x00);
test_alu_b_vv("vmulhu.b.r.vv", 0x02, 0x03, 0x00);
test_alu_b_vv("vmulhu.b.r.vv", 0x12, 0x06, 0x00);
test_alu_b_vv("vmulhu.b.r.vv", 0x12, 0x09, 0x01);
test_alu_b_vv("vmulhu.b.r.vv", 0x55, 0x03, 0x01);
test_alu_b_vv("vmulhu.b.r.vv", 0x55, 0x05, 0x02);
test_alu_b_vv("vmulhu.b.r.vv", 0x54, 0x32, 0x10);
test_alu_b_vv("vmulhu.b.r.vv", 0xed, 0x23, 0x20);
test_alu_b_vv("vmulhu.b.r.vv", 0x54, 0x89, 0x2d);
test_alu_b_vv("vmulhu.b.r.vv", 0x80, 0x7f, 0x40);
test_alu_b_vv("vmulhu.b.r.vv", 0x80, 0x80, 0x40);
test_alu_b_vv("vmulhu.b.r.vv", 0x80, 0x81, 0x41);
test_alu_b_vv("vmulhu.b.r.vv", 0xcb, 0x07, 0x06);
test_alu_b_vv("vmulhu.b.r.vv", 0xcb, 0x98, 0x79);
test_alu_b_vv("vmulhu.b.r.vv", 0xcb, 0xde, 0xb0);
test_alu_h_vv("vmulhu.h.r.vv", 0x0000, 0x0000, 0x0000);
test_alu_h_vv("vmulhu.h.r.vv", 0x5555, 0x0000, 0x0000);
test_alu_h_vv("vmulhu.h.r.vv", 0x0002, 0x0003, 0x0000);
test_alu_h_vv("vmulhu.h.r.vv", 0x1234, 0x0006, 0x0000);
test_alu_h_vv("vmulhu.h.r.vv", 0x1234, 0x0009, 0x0001);
test_alu_h_vv("vmulhu.h.r.vv", 0x5555, 0x0003, 0x0001);
test_alu_h_vv("vmulhu.h.r.vv", 0x5555, 0x0005, 0x0002);
test_alu_h_vv("vmulhu.h.r.vv", 0x5432, 0x1234, 0x05fd);
test_alu_h_vv("vmulhu.h.r.vv", 0x5432, 0x89ab, 0x2d47);
test_alu_h_vv("vmulhu.h.r.vv", 0x8000, 0x7fff, 0x4000);
test_alu_h_vv("vmulhu.h.r.vv", 0x8000, 0x8000, 0x4000);
test_alu_h_vv("vmulhu.h.r.vv", 0x8000, 0x8001, 0x4001);
test_alu_h_vv("vmulhu.h.r.vv", 0xedcb, 0x1234, 0x10e9);
test_alu_h_vv("vmulhu.h.r.vv", 0xedcb, 0x89ab, 0x7fe0);
test_alu_h_vv("vmulhu.h.r.vv", 0xcba9, 0x0007, 0x0006);
test_alu_h_vv("vmulhu.h.r.vv", 0xcb98, 0x9876, 0x7940);
test_alu_h_vv("vmulhu.h.r.vv", 0xcb98, 0xdef3, 0xb14f);
test_alu_w_vv("vmulhu.w.r.vv", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vv("vmulhu.w.r.vv", 0x55555555, 0x00000000, 0x00000000);
test_alu_w_vv("vmulhu.w.r.vv", 0x00000002, 0x00000003, 0x00000000);
test_alu_w_vv("vmulhu.w.r.vv", 0x12345678, 0x00000006, 0x00000000);
test_alu_w_vv("vmulhu.w.r.vv", 0x12345678, 0x00000009, 0x00000001);
test_alu_w_vv("vmulhu.w.r.vv", 0x55555555, 0x00000003, 0x00000001);
test_alu_w_vv("vmulhu.w.r.vv", 0x55555555, 0x00000005, 0x00000002);
test_alu_w_vv("vmulhu.w.r.vv", 0x23456789, 0x02305670, 0x004d33bb);
test_alu_w_vv("vmulhu.w.r.vv", 0x543210fe, 0x12345678, 0x05fcbbce);
test_alu_w_vv("vmulhu.w.r.vv", 0x543210fe, 0x89abcdef, 0x2d474c44);
test_alu_w_vv("vmulhu.w.r.vv", 0x80000000, 0x7fffffff, 0x40000000);
test_alu_w_vv("vmulhu.w.r.vv", 0x80000000, 0x80000000, 0x40000000);
test_alu_w_vv("vmulhu.w.r.vv", 0x80000000, 0x80000001, 0x40000001);
test_alu_w_vv("vmulhu.w.r.vv", 0xedcba987, 0x12345678, 0x10e8ef9c);
test_alu_w_vv("vmulhu.w.r.vv", 0xedcba987, 0x89abcdef, 0x7fe1940e);
test_alu_w_vv("vmulhu.w.r.vv", 0xcba98765, 0x00000007, 0x00000006);
test_alu_w_vv("vmulhu.w.r.vv", 0xcba98765, 0x98765432, 0x794acb84);
test_alu_w_vv("vmulhu.w.r.vv", 0xcba98765, 0xdef34567, 0xb15e8c8c);
test_alu_b_vv("vmuls.b.vv", 0x00, 0x00, 0x00);
test_alu_b_vv("vmuls.b.vv", 0x55, 0x00, 0x00);
test_alu_b_vv("vmuls.b.vv", 0x02, 0x03, 0x06);
test_alu_b_vv("vmuls.b.vv", 0x12, 0x06, 0x6c);
test_alu_b_vv("vmuls.b.vv", 0x12, 0x09, 0x7f);
test_alu_b_vv("vmuls.b.vv", 0x55, 0x03, 0x7f);
test_alu_b_vv("vmuls.b.vv", 0x55, 0x05, 0x7f);
test_alu_b_vv("vmuls.b.vv", 0x54, 0x32, 0x7f);
test_alu_b_vv("vmuls.b.vv", 0xed, 0x23, 0x80);
test_alu_b_vv("vmuls.b.vv", 0x54, 0x89, 0x80);
test_alu_b_vv("vmuls.b.vv", 0x80, 0x7f, 0x80);
test_alu_b_vv("vmuls.b.vv", 0x80, 0x80, 0x7f);
test_alu_b_vv("vmuls.b.vv", 0x80, 0x81, 0x7f);
test_alu_b_vv("vmuls.b.vv", 0xcb, 0x07, 0x80);
test_alu_b_vv("vmuls.b.vv", 0xcb, 0x98, 0x7f);
test_alu_b_vv("vmuls.b.vv", 0xcb, 0xde, 0x7f);
test_alu_h_vv("vmuls.h.vv", 0x0000, 0x0000, 0x0000);
test_alu_h_vv("vmuls.h.vv", 0x5555, 0x0000, 0x0000);
test_alu_h_vv("vmuls.h.vv", 0x0002, 0x0003, 0x0006);
test_alu_h_vv("vmuls.h.vv", 0x1234, 0x0006, 0x6d38);
test_alu_h_vv("vmuls.h.vv", 0x1234, 0x0009, 0x7fff);
test_alu_h_vv("vmuls.h.vv", 0x5555, 0x0003, 0x7fff);
test_alu_h_vv("vmuls.h.vv", 0x5555, 0x0005, 0x7fff);
test_alu_h_vv("vmuls.h.vv", 0x5432, 0x1234, 0x7fff);
test_alu_h_vv("vmuls.h.vv", 0x5432, 0x89ab, 0x8000);
test_alu_h_vv("vmuls.h.vv", 0x8000, 0x7fff, 0x8000);
test_alu_h_vv("vmuls.h.vv", 0x8000, 0x8000, 0x7fff);
test_alu_h_vv("vmuls.h.vv", 0x8000, 0x8001, 0x7fff);
test_alu_h_vv("vmuls.h.vv", 0xedcb, 0x1234, 0x8000);
test_alu_h_vv("vmuls.h.vv", 0xedcb, 0x89ab, 0x7fff);
test_alu_h_vv("vmuls.h.vv", 0xcba9, 0x0007, 0x8000);
test_alu_h_vv("vmuls.h.vv", 0xcb98, 0x9876, 0x7fff);
test_alu_h_vv("vmuls.h.vv", 0xcb98, 0xdef3, 0x7fff);
test_alu_w_vv("vmuls.w.vv", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vv("vmuls.w.vv", 0x55555555, 0x00000000, 0x00000000);
test_alu_w_vv("vmuls.w.vv", 0x00000002, 0x00000003, 0x00000006);
test_alu_w_vv("vmuls.w.vv", 0x12345678, 0x00000006, 0x6d3a06d0);
test_alu_w_vv("vmuls.w.vv", 0x12345678, 0x00000009, 0x7fffffff);
test_alu_w_vv("vmuls.w.vv", 0x55555555, 0x00000003, 0x7fffffff);
test_alu_w_vv("vmuls.w.vv", 0x55555555, 0x00000005, 0x7fffffff);
test_alu_w_vv("vmuls.w.vv", 0x23456789, 0x02305670, 0x7fffffff);
test_alu_w_vv("vmuls.w.vv", 0x543210fe, 0x12345678, 0x7fffffff);
test_alu_w_vv("vmuls.w.vv", 0x543210fe, 0x89abcdef, 0x80000000);
test_alu_w_vv("vmuls.w.vv", 0x80000000, 0x7fffffff, 0x80000000);
test_alu_w_vv("vmuls.w.vv", 0x80000000, 0x80000000, 0x7fffffff);
test_alu_w_vv("vmuls.w.vv", 0x80000000, 0x80000001, 0x7fffffff);
test_alu_w_vv("vmuls.w.vv", 0xedcba987, 0x12345678, 0x80000000);
test_alu_w_vv("vmuls.w.vv", 0xedcba987, 0x89abcdef, 0x7fffffff);
test_alu_w_vv("vmuls.w.vv", 0xcba98765, 0x00000007, 0x80000000);
test_alu_w_vv("vmuls.w.vv", 0xcba98765, 0x98765432, 0x7fffffff);
test_alu_w_vv("vmuls.w.vv", 0xcba98765, 0xdef34567, 0x7fffffff);
test_alu_b_vv("vmuls.b.u.vv", 0x00, 0x00, 0x00);
test_alu_b_vv("vmuls.b.u.vv", 0x55, 0x00, 0x00);
test_alu_b_vv("vmuls.b.u.vv", 0x02, 0x03, 0x06);
test_alu_b_vv("vmuls.b.u.vv", 0x12, 0x06, 0x6c);
test_alu_b_vv("vmuls.b.u.vv", 0x12, 0x09, 0xa2);
test_alu_b_vv("vmuls.b.u.vv", 0x55, 0x03, 0xff);
test_alu_b_vv("vmuls.b.u.vv", 0x55, 0x05, 0xff);
test_alu_b_vv("vmuls.b.u.vv", 0x54, 0x32, 0xff);
test_alu_b_vv("vmuls.b.u.vv", 0xed, 0x23, 0xff);
test_alu_b_vv("vmuls.b.u.vv", 0x54, 0x89, 0xff);
test_alu_b_vv("vmuls.b.u.vv", 0x80, 0x7f, 0xff);
test_alu_b_vv("vmuls.b.u.vv", 0x80, 0x80, 0xff);
test_alu_b_vv("vmuls.b.u.vv", 0x80, 0x81, 0xff);
test_alu_b_vv("vmuls.b.u.vv", 0xcb, 0x07, 0xff);
test_alu_b_vv("vmuls.b.u.vv", 0xcb, 0x98, 0xff);
test_alu_b_vv("vmuls.b.u.vv", 0xcb, 0xde, 0xff);
test_alu_h_vv("vmuls.h.u.vv", 0x0000, 0x0000, 0x0000);
test_alu_h_vv("vmuls.h.u.vv", 0x5555, 0x0000, 0x0000);
test_alu_h_vv("vmuls.h.u.vv", 0x0002, 0x0003, 0x0006);
test_alu_h_vv("vmuls.h.u.vv", 0x1234, 0x0006, 0x6d38);
test_alu_h_vv("vmuls.h.u.vv", 0x1234, 0x0009, 0xa3d4);
test_alu_h_vv("vmuls.h.u.vv", 0x5555, 0x0003, 0xffff);
test_alu_h_vv("vmuls.h.u.vv", 0x5555, 0x0005, 0xffff);
test_alu_h_vv("vmuls.h.u.vv", 0x5432, 0x1234, 0xffff);
test_alu_h_vv("vmuls.h.u.vv", 0x5432, 0x89ab, 0xffff);
test_alu_h_vv("vmuls.h.u.vv", 0x8000, 0x7fff, 0xffff);
test_alu_h_vv("vmuls.h.u.vv", 0x8000, 0x8000, 0xffff);
test_alu_h_vv("vmuls.h.u.vv", 0x8000, 0x8001, 0xffff);
test_alu_h_vv("vmuls.h.u.vv", 0xedcb, 0x1234, 0xffff);
test_alu_h_vv("vmuls.h.u.vv", 0xedcb, 0x89ab, 0xffff);
test_alu_h_vv("vmuls.h.u.vv", 0xcba9, 0x0007, 0xffff);
test_alu_h_vv("vmuls.h.u.vv", 0xcb98, 0x9876, 0xffff);
test_alu_h_vv("vmuls.h.u.vv", 0xcb98, 0xdef3, 0xffff);
test_alu_w_vv("vmuls.w.u.vv", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vv("vmuls.w.u.vv", 0x55555555, 0x00000000, 0x00000000);
test_alu_w_vv("vmuls.w.u.vv", 0x00000002, 0x00000003, 0x00000006);
test_alu_w_vv("vmuls.w.u.vv", 0x12345678, 0x00000006, 0x6d3a06d0);
test_alu_w_vv("vmuls.w.u.vv", 0x12345678, 0x00000009, 0xa3d70a38);
test_alu_w_vv("vmuls.w.u.vv", 0x55555555, 0x00000003, 0xffffffff);
test_alu_w_vv("vmuls.w.u.vv", 0x55555555, 0x00000005, 0xffffffff);
test_alu_w_vv("vmuls.w.u.vv", 0x23456789, 0x02305670, 0xffffffff);
test_alu_w_vv("vmuls.w.u.vv", 0x543210fe, 0x12345678, 0xffffffff);
test_alu_w_vv("vmuls.w.u.vv", 0x543210fe, 0x89abcdef, 0xffffffff);
test_alu_w_vv("vmuls.w.u.vv", 0x80000000, 0x7fffffff, 0xffffffff);
test_alu_w_vv("vmuls.w.u.vv", 0x80000000, 0x80000000, 0xffffffff);
test_alu_w_vv("vmuls.w.u.vv", 0x80000000, 0x80000001, 0xffffffff);
test_alu_w_vv("vmuls.w.u.vv", 0xedcba987, 0x12345678, 0xffffffff);
test_alu_w_vv("vmuls.w.u.vv", 0xedcba987, 0x89abcdef, 0xffffffff);
test_alu_w_vv("vmuls.w.u.vv", 0xcba98765, 0x00000007, 0xffffffff);
test_alu_w_vv("vmuls.w.u.vv", 0xcba98765, 0x98765432, 0xffffffff);
test_alu_w_vv("vmuls.w.u.vv", 0xcba98765, 0xdef34567, 0xffffffff);
test_aluw_h_vv("vmulw.h.vv", 0x00, 0x00, 0x0000);
test_aluw_h_vv("vmulw.h.vv", 0x55, 0x00, 0x0000);
test_aluw_h_vv("vmulw.h.vv", 0x02, 0x03, 0x0006);
test_aluw_h_vv("vmulw.h.vv", 0x12, 0x06, 0x006c);
test_aluw_h_vv("vmulw.h.vv", 0x12, 0x09, 0x00a2);
test_aluw_h_vv("vmulw.h.vv", 0x55, 0x03, 0x00ff);
test_aluw_h_vv("vmulw.h.vv", 0x55, 0x05, 0x01a9);
test_aluw_h_vv("vmulw.h.vv", 0x54, 0x32, 0x1068);
test_aluw_h_vv("vmulw.h.vv", 0xed, 0x23, 0xfd67);
test_aluw_h_vv("vmulw.h.vv", 0x54, 0x89, 0xd8f4);
test_aluw_h_vv("vmulw.h.vv", 0x80, 0x7f, 0xc080);
test_aluw_h_vv("vmulw.h.vv", 0x80, 0x80, 0x4000);
test_aluw_h_vv("vmulw.h.vv", 0x80, 0x81, 0x3f80);
test_aluw_h_vv("vmulw.h.vv", 0xcb, 0x07, 0xfe8d);
test_aluw_h_vv("vmulw.h.vv", 0xcb, 0x98, 0x1588);
test_aluw_h_vv("vmulw.h.vv", 0xcb, 0xde, 0x070a);
test_aluw_w_vv("vmulw.w.vv", 0x0000, 0x0000, 0x00000000);
test_aluw_w_vv("vmulw.w.vv", 0x5555, 0x0000, 0x00000000);
test_aluw_w_vv("vmulw.w.vv", 0x0002, 0x0003, 0x00000006);
test_aluw_w_vv("vmulw.w.vv", 0x1234, 0x0006, 0x00006d38);
test_aluw_w_vv("vmulw.w.vv", 0x1234, 0x0009, 0x0000a3d4);
test_aluw_w_vv("vmulw.w.vv", 0x5555, 0x0003, 0x0000ffff);
test_aluw_w_vv("vmulw.w.vv", 0x5555, 0x0005, 0x0001aaa9);
test_aluw_w_vv("vmulw.w.vv", 0x5432, 0x1234, 0x05fc9e28);
test_aluw_w_vv("vmulw.w.vv", 0x5432, 0x89ab, 0xd914ff66);
test_aluw_w_vv("vmulw.w.vv", 0x8000, 0x7fff, 0xc0008000);
test_aluw_w_vv("vmulw.w.vv", 0x8000, 0x8000, 0x40000000);
test_aluw_w_vv("vmulw.w.vv", 0x8000, 0x8001, 0x3fff8000);
test_aluw_w_vv("vmulw.w.vv", 0xedcb, 0x1234, 0xfeb4933c);
test_aluw_w_vv("vmulw.w.vv", 0xedcb, 0x89ab, 0x086a7999);
test_aluw_w_vv("vmulw.w.vv", 0xcba9, 0x0007, 0xfffe919f);
test_aluw_w_vv("vmulw.w.vv", 0xcb98, 0x9876, 0x15321810);
test_aluw_w_vv("vmulw.w.vv", 0xcb98, 0xdef3, 0x06c41148);
test_aluw_h_vv("vmulw.h.u.vv", 0x00, 0x00, 0x0000);
test_aluw_h_vv("vmulw.h.u.vv", 0x55, 0x00, 0x0000);
test_aluw_h_vv("vmulw.h.u.vv", 0x02, 0x03, 0x0006);
test_aluw_h_vv("vmulw.h.u.vv", 0x12, 0x06, 0x006c);
test_aluw_h_vv("vmulw.h.u.vv", 0x12, 0x09, 0x00a2);
test_aluw_h_vv("vmulw.h.u.vv", 0x55, 0x03, 0x00ff);
test_aluw_h_vv("vmulw.h.u.vv", 0x55, 0x05, 0x01a9);
test_aluw_h_vv("vmulw.h.u.vv", 0x54, 0x32, 0x1068);
test_aluw_h_vv("vmulw.h.u.vv", 0xed, 0x23, 0x2067);
test_aluw_h_vv("vmulw.h.u.vv", 0x54, 0x89, 0x2cf4);
test_aluw_h_vv("vmulw.h.u.vv", 0x80, 0x7f, 0x3f80);
test_aluw_h_vv("vmulw.h.u.vv", 0x80, 0x80, 0x4000);
test_aluw_h_vv("vmulw.h.u.vv", 0x80, 0x81, 0x4080);
test_aluw_h_vv("vmulw.h.u.vv", 0xcb, 0x07, 0x058d);
test_aluw_h_vv("vmulw.h.u.vv", 0xcb, 0x98, 0x7888);
test_aluw_h_vv("vmulw.h.u.vv", 0xcb, 0xde, 0xb00a);
test_aluw_w_vv("vmulw.w.u.vv", 0x0000, 0x0000, 0x00000000);
test_aluw_w_vv("vmulw.w.u.vv", 0x5555, 0x0000, 0x00000000);
test_aluw_w_vv("vmulw.w.u.vv", 0x0002, 0x0003, 0x00000006);
test_aluw_w_vv("vmulw.w.u.vv", 0x1234, 0x0006, 0x00006d38);
test_aluw_w_vv("vmulw.w.u.vv", 0x1234, 0x0009, 0x0000a3d4);
test_aluw_w_vv("vmulw.w.u.vv", 0x5555, 0x0003, 0x0000ffff);
test_aluw_w_vv("vmulw.w.u.vv", 0x5555, 0x0005, 0x0001aaa9);
test_aluw_w_vv("vmulw.w.u.vv", 0x5432, 0x1234, 0x05fc9e28);
test_aluw_w_vv("vmulw.w.u.vv", 0x5432, 0x89ab, 0x2d46ff66);
test_aluw_w_vv("vmulw.w.u.vv", 0x8000, 0x7fff, 0x3fff8000);
test_aluw_w_vv("vmulw.w.u.vv", 0x8000, 0x8000, 0x40000000);
test_aluw_w_vv("vmulw.w.u.vv", 0x8000, 0x8001, 0x40008000);
test_aluw_w_vv("vmulw.w.u.vv", 0xedcb, 0x1234, 0x10e8933c);
test_aluw_w_vv("vmulw.w.u.vv", 0xedcb, 0x89ab, 0x7fe07999);
test_aluw_w_vv("vmulw.w.u.vv", 0xcba9, 0x0007, 0x0005919f);
test_aluw_w_vv("vmulw.w.u.vv", 0xcb98, 0x9876, 0x79401810);
test_aluw_w_vv("vmulw.w.u.vv", 0xcb98, 0xdef3, 0xb14f1148);
test_alu_b_vv("vdmulh.b.vv", 0x00, 0x00, 0x00);
test_alu_b_vv("vdmulh.b.vv", 0x55, 0x00, 0x00);
test_alu_b_vv("vdmulh.b.vv", 0x02, 0x03, 0x00);
test_alu_b_vv("vdmulh.b.vv", 0x12, 0x06, 0x00);
test_alu_b_vv("vdmulh.b.vv", 0x12, 0x09, 0x01);
test_alu_b_vv("vdmulh.b.vv", 0x55, 0x03, 0x01);
test_alu_b_vv("vdmulh.b.vv", 0x55, 0x05, 0x03);
test_alu_b_vv("vdmulh.b.vv", 0x54, 0x32, 0x20);
test_alu_b_vv("vdmulh.b.vv", 0xed, 0x23, 0xfa);
test_alu_b_vv("vdmulh.b.vv", 0x54, 0x89, 0xb1);
test_alu_b_vv("vdmulh.b.vv", 0xcb, 0x07, 0xfd);
test_alu_b_vv("vdmulh.b.vv", 0xcb, 0x98, 0x2b);
test_alu_b_vv("vdmulh.b.vv", 0xcb, 0xde, 0x0e);
test_alu_b_vv("vdmulh.b.vv", 0x40, 0x40, 0x20);
test_alu_b_vv("vdmulh.b.vv", 0x40, 0x80, 0xc0);
test_alu_b_vv("vdmulh.b.vv", 0x80, 0x3f, 0xc1);
test_alu_b_vv("vdmulh.b.vv", 0x80, 0x40, 0xc0);
test_alu_b_vv("vdmulh.b.vv", 0x80, 0x41, 0xbf);
test_alu_b_vv("vdmulh.b.vv", 0x80, 0x7f, 0x81);
test_alu_b_vv("vdmulh.b.vv", 0x80, 0x80, 0x7f);
test_alu_b_vv("vdmulh.b.vv", 0x80, 0x81, 0x7f);
test_alu_b_vv("vdmulh.b.vv", 0xff, 0xff, 0x00);
test_alu_h_vv("vdmulh.h.vv", 0x0000, 0x0000, 0x0000);
test_alu_h_vv("vdmulh.h.vv", 0x5555, 0x0000, 0x0000);
test_alu_h_vv("vdmulh.h.vv", 0x0002, 0x0003, 0x0000);
test_alu_h_vv("vdmulh.h.vv", 0x1234, 0x0006, 0x0000);
test_alu_h_vv("vdmulh.h.vv", 0x1234, 0x0009, 0x0001);
test_alu_h_vv("vdmulh.h.vv", 0x5555, 0x0003, 0x0001);
test_alu_h_vv("vdmulh.h.vv", 0x5555, 0x0005, 0x0003);
test_alu_h_vv("vdmulh.h.vv", 0x5432, 0x1234, 0x0bf9);
test_alu_h_vv("vdmulh.h.vv", 0x5432, 0x89ab, 0xb229);
test_alu_h_vv("vdmulh.h.vv", 0xedcb, 0x1234, 0xfd69);
test_alu_h_vv("vdmulh.h.vv", 0xedcb, 0x89ab, 0x10d4);
test_alu_h_vv("vdmulh.h.vv", 0xcba9, 0x0007, 0xfffd);
test_alu_h_vv("vdmulh.h.vv", 0xcb98, 0x9876, 0x2a64);
test_alu_h_vv("vdmulh.h.vv", 0xcb98, 0xdef3, 0x0d88);
test_alu_h_vv("vdmulh.h.vv", 0x4000, 0x4000, 0x2000);
test_alu_h_vv("vdmulh.h.vv", 0x4000, 0x8000, 0xc000);
test_alu_h_vv("vdmulh.h.vv", 0x8000, 0x3fff, 0xc001);
test_alu_h_vv("vdmulh.h.vv", 0x8000, 0x4000, 0xc000);
test_alu_h_vv("vdmulh.h.vv", 0x8000, 0x4001, 0xbfff);
test_alu_h_vv("vdmulh.h.vv", 0x8000, 0x7fff, 0x8001);
test_alu_h_vv("vdmulh.h.vv", 0x8000, 0x8000, 0x7fff);
test_alu_h_vv("vdmulh.h.vv", 0x8000, 0x8001, 0x7fff);
test_alu_h_vv("vdmulh.h.vv", 0xffff, 0xffff, 0x0000);
test_alu_w_vv("vdmulh.w.vv", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vv("vdmulh.w.vv", 0x55555555, 0x00000000, 0x00000000);
test_alu_w_vv("vdmulh.w.vv", 0x00000002, 0x00000003, 0x00000000);
test_alu_w_vv("vdmulh.w.vv", 0x12345678, 0x00000006, 0x00000000);
test_alu_w_vv("vdmulh.w.vv", 0x12345678, 0x00000009, 0x00000001);
test_alu_w_vv("vdmulh.w.vv", 0x55555555, 0x00000003, 0x00000001);
test_alu_w_vv("vdmulh.w.vv", 0x55555555, 0x00000005, 0x00000003);
test_alu_w_vv("vdmulh.w.vv", 0x23456789, 0x02305670, 0x009a6776);
test_alu_w_vv("vdmulh.w.vv", 0x543210fe, 0x12345678, 0x0bf9779b);
test_alu_w_vv("vdmulh.w.vv", 0x543210fe, 0x89abcdef, 0xb22a768b);
test_alu_w_vv("vdmulh.w.vv", 0xedcba987, 0x12345678, 0xfd693247);
test_alu_w_vv("vdmulh.w.vv", 0xedcba987, 0x89abcdef, 0x10d4392f);
test_alu_w_vv("vdmulh.w.vv", 0xcba98765, 0x00000007, 0xfffffffd);
test_alu_w_vv("vdmulh.w.vv", 0xcba98765, 0x98765432, 0x2a55dfd9);
test_alu_w_vv("vdmulh.w.vv", 0xcba98765, 0xdef34567, 0x0d837f7f);
test_alu_w_vv("vdmulh.w.vv", 0x40000000, 0x40000000, 0x20000000);
test_alu_w_vv("vdmulh.w.vv", 0x40000000, 0x80000000, 0xc0000000);
test_alu_w_vv("vdmulh.w.vv", 0x80000000, 0x3fffffff, 0xc0000001);
test_alu_w_vv("vdmulh.w.vv", 0x80000000, 0x40000000, 0xc0000000);
test_alu_w_vv("vdmulh.w.vv", 0x80000000, 0x40000001, 0xbfffffff);
test_alu_w_vv("vdmulh.w.vv", 0x80000000, 0x7fffffff, 0x80000001);
test_alu_w_vv("vdmulh.w.vv", 0x80000000, 0x80000000, 0x7fffffff);
test_alu_w_vv("vdmulh.w.vv", 0x80000000, 0x80000001, 0x7fffffff);
test_alu_w_vv("vdmulh.w.vv", 0xffffffff, 0xffffffff, 0x00000000);
test_alu_b_vv("vdmulh.b.r.vv", 0x00, 0x00, 0x00);
test_alu_b_vv("vdmulh.b.r.vv", 0x55, 0x00, 0x00);
test_alu_b_vv("vdmulh.b.r.vv", 0x02, 0x03, 0x00);
test_alu_b_vv("vdmulh.b.r.vv", 0x12, 0x06, 0x01);
test_alu_b_vv("vdmulh.b.r.vv", 0x12, 0x09, 0x01);
test_alu_b_vv("vdmulh.b.r.vv", 0x55, 0x03, 0x02);
test_alu_b_vv("vdmulh.b.r.vv", 0x55, 0x05, 0x03);
test_alu_b_vv("vdmulh.b.r.vv", 0x54, 0x32, 0x21);
test_alu_b_vv("vdmulh.b.r.vv", 0xed, 0x23, 0xfb);
test_alu_b_vv("vdmulh.b.r.vv", 0x54, 0x89, 0xb2);
test_alu_b_vv("vdmulh.b.r.vv", 0xcb, 0x07, 0xfd);
test_alu_b_vv("vdmulh.b.r.vv", 0xcb, 0x98, 0x2b);
test_alu_b_vv("vdmulh.b.r.vv", 0xcb, 0xde, 0x0e);
test_alu_b_vv("vdmulh.b.r.vv", 0x40, 0x40, 0x20);
test_alu_b_vv("vdmulh.b.r.vv", 0x40, 0x80, 0xc0);
test_alu_b_vv("vdmulh.b.r.vv", 0x80, 0x3f, 0xc1);
test_alu_b_vv("vdmulh.b.r.vv", 0x80, 0x40, 0xc0);
test_alu_b_vv("vdmulh.b.r.vv", 0x80, 0x41, 0xbf);
test_alu_b_vv("vdmulh.b.r.vv", 0x80, 0x7f, 0x81);
test_alu_b_vv("vdmulh.b.r.vv", 0x80, 0x80, 0x7f);
test_alu_b_vv("vdmulh.b.r.vv", 0x80, 0x81, 0x7f);
test_alu_b_vv("vdmulh.b.r.vv", 0xff, 0xff, 0x00);
test_alu_h_vv("vdmulh.h.r.vv", 0x0000, 0x0000, 0x0000);
test_alu_h_vv("vdmulh.h.r.vv", 0x5555, 0x0000, 0x0000);
test_alu_h_vv("vdmulh.h.r.vv", 0x0002, 0x0003, 0x0000);
test_alu_h_vv("vdmulh.h.r.vv", 0x1234, 0x0006, 0x0001);
test_alu_h_vv("vdmulh.h.r.vv", 0x1234, 0x0009, 0x0001);
test_alu_h_vv("vdmulh.h.r.vv", 0x5555, 0x0003, 0x0002);
test_alu_h_vv("vdmulh.h.r.vv", 0x5555, 0x0005, 0x0003);
test_alu_h_vv("vdmulh.h.r.vv", 0x5432, 0x1234, 0x0bf9);
test_alu_h_vv("vdmulh.h.r.vv", 0x5432, 0x89ab, 0xb22a);
test_alu_h_vv("vdmulh.h.r.vv", 0xedcb, 0x1234, 0xfd69);
test_alu_h_vv("vdmulh.h.r.vv", 0xedcb, 0x89ab, 0x10d5);
test_alu_h_vv("vdmulh.h.r.vv", 0xcba9, 0x0007, 0xfffd);
test_alu_h_vv("vdmulh.h.r.vv", 0xcb98, 0x9876, 0x2a64);
test_alu_h_vv("vdmulh.h.r.vv", 0xcb98, 0xdef3, 0x0d88);
test_alu_h_vv("vdmulh.h.r.vv", 0x4000, 0x4000, 0x2000);
test_alu_h_vv("vdmulh.h.r.vv", 0x4000, 0x8000, 0xc000);
test_alu_h_vv("vdmulh.h.r.vv", 0x8000, 0x3fff, 0xc001);
test_alu_h_vv("vdmulh.h.r.vv", 0x8000, 0x4000, 0xc000);
test_alu_h_vv("vdmulh.h.r.vv", 0x8000, 0x4001, 0xbfff);
test_alu_h_vv("vdmulh.h.r.vv", 0x8000, 0x7fff, 0x8001);
test_alu_h_vv("vdmulh.h.r.vv", 0x8000, 0x8000, 0x7fff);
test_alu_h_vv("vdmulh.h.r.vv", 0x8000, 0x8001, 0x7fff);
test_alu_h_vv("vdmulh.h.r.vv", 0xffff, 0xffff, 0x0000);
test_alu_w_vv("vdmulh.w.r.vv", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vv("vdmulh.w.r.vv", 0x55555555, 0x00000000, 0x00000000);
test_alu_w_vv("vdmulh.w.r.vv", 0x00000002, 0x00000003, 0x00000000);
test_alu_w_vv("vdmulh.w.r.vv", 0x12345678, 0x00000006, 0x00000001);
test_alu_w_vv("vdmulh.w.r.vv", 0x12345678, 0x00000009, 0x00000001);
test_alu_w_vv("vdmulh.w.r.vv", 0x55555555, 0x00000003, 0x00000002);
test_alu_w_vv("vdmulh.w.r.vv", 0x55555555, 0x00000005, 0x00000003);
test_alu_w_vv("vdmulh.w.r.vv", 0x23456789, 0x02305670, 0x009a6776);
test_alu_w_vv("vdmulh.w.r.vv", 0x543210fe, 0x12345678, 0x0bf9779b);
test_alu_w_vv("vdmulh.w.r.vv", 0x543210fe, 0x89abcdef, 0xb22a768c);
test_alu_w_vv("vdmulh.w.r.vv", 0xedcba987, 0x12345678, 0xfd693248);
test_alu_w_vv("vdmulh.w.r.vv", 0xedcba987, 0x89abcdef, 0x10d4392f);
test_alu_w_vv("vdmulh.w.r.vv", 0xcba98765, 0x00000007, 0xfffffffd);
test_alu_w_vv("vdmulh.w.r.vv", 0xcba98765, 0x98765432, 0x2a55dfda);
test_alu_w_vv("vdmulh.w.r.vv", 0xcba98765, 0xdef34567, 0x0d837f7f);
test_alu_w_vv("vdmulh.w.r.vv", 0x40000000, 0x40000000, 0x20000000);
test_alu_w_vv("vdmulh.w.r.vv", 0x40000000, 0x80000000, 0xc0000000);
test_alu_w_vv("vdmulh.w.r.vv", 0x80000000, 0x3fffffff, 0xc0000001);
test_alu_w_vv("vdmulh.w.r.vv", 0x80000000, 0x40000000, 0xc0000000);
test_alu_w_vv("vdmulh.w.r.vv", 0x80000000, 0x40000001, 0xbfffffff);
test_alu_w_vv("vdmulh.w.r.vv", 0x80000000, 0x7fffffff, 0x80000001);
test_alu_w_vv("vdmulh.w.r.vv", 0x80000000, 0x80000000, 0x7fffffff);
test_alu_w_vv("vdmulh.w.r.vv", 0x80000000, 0x80000001, 0x7fffffff);
test_alu_w_vv("vdmulh.w.r.vv", 0xffffffff, 0xffffffff, 0x00000000);
test_alu_b_vv("vdmulh.b.rn.vv", 0x00, 0x00, 0x00);
test_alu_b_vv("vdmulh.b.rn.vv", 0x55, 0x00, 0x00);
test_alu_b_vv("vdmulh.b.rn.vv", 0x02, 0x03, 0x00);
test_alu_b_vv("vdmulh.b.rn.vv", 0x12, 0x06, 0x01);
test_alu_b_vv("vdmulh.b.rn.vv", 0x12, 0x09, 0x01);
test_alu_b_vv("vdmulh.b.rn.vv", 0x55, 0x03, 0x02);
test_alu_b_vv("vdmulh.b.rn.vv", 0x55, 0x05, 0x03);
test_alu_b_vv("vdmulh.b.rn.vv", 0x54, 0x32, 0x21);
test_alu_b_vv("vdmulh.b.rn.vv", 0xed, 0x23, 0xfa);
test_alu_b_vv("vdmulh.b.rn.vv", 0x54, 0x89, 0xb1);
test_alu_b_vv("vdmulh.b.rn.vv", 0xcb, 0x07, 0xfc);
test_alu_b_vv("vdmulh.b.rn.vv", 0xcb, 0x98, 0x2b);
test_alu_b_vv("vdmulh.b.rn.vv", 0xcb, 0xde, 0x0e);
test_alu_b_vv("vdmulh.b.rn.vv", 0x40, 0x40, 0x20);
test_alu_b_vv("vdmulh.b.rn.vv", 0x40, 0x80, 0xbf);
test_alu_b_vv("vdmulh.b.rn.vv", 0x80, 0x3f, 0xc0);
test_alu_b_vv("vdmulh.b.rn.vv", 0x80, 0x40, 0xbf);
test_alu_b_vv("vdmulh.b.rn.vv", 0x80, 0x41, 0xbe);
test_alu_b_vv("vdmulh.b.rn.vv", 0x80, 0x7f, 0x80);
test_alu_b_vv("vdmulh.b.rn.vv", 0x80, 0x80, 0x7f);
test_alu_b_vv("vdmulh.b.rn.vv", 0x80, 0x81, 0x7f);
test_alu_b_vv("vdmulh.b.rn.vv", 0xff, 0xff, 0x00);
test_alu_h_vv("vdmulh.h.rn.vv", 0x0000, 0x0000, 0x0000);
test_alu_h_vv("vdmulh.h.rn.vv", 0x5555, 0x0000, 0x0000);
test_alu_h_vv("vdmulh.h.rn.vv", 0x0002, 0x0003, 0x0000);
test_alu_h_vv("vdmulh.h.rn.vv", 0x1234, 0x0006, 0x0001);
test_alu_h_vv("vdmulh.h.rn.vv", 0x1234, 0x0009, 0x0001);
test_alu_h_vv("vdmulh.h.rn.vv", 0x5555, 0x0003, 0x0002);
test_alu_h_vv("vdmulh.h.rn.vv", 0x5555, 0x0005, 0x0003);
test_alu_h_vv("vdmulh.h.rn.vv", 0x5432, 0x1234, 0x0bf9);
test_alu_h_vv("vdmulh.h.rn.vv", 0x5432, 0x89ab, 0xb229);
test_alu_h_vv("vdmulh.h.rn.vv", 0xedcb, 0x1234, 0xfd68);
test_alu_h_vv("vdmulh.h.rn.vv", 0xedcb, 0x89ab, 0x10d5);
test_alu_h_vv("vdmulh.h.rn.vv", 0xcba9, 0x0007, 0xfffc);
test_alu_h_vv("vdmulh.h.rn.vv", 0xcb98, 0x9876, 0x2a64);
test_alu_h_vv("vdmulh.h.rn.vv", 0xcb98, 0xdef3, 0x0d88);
test_alu_h_vv("vdmulh.h.rn.vv", 0x4000, 0x4000, 0x2000);
test_alu_h_vv("vdmulh.h.rn.vv", 0x4000, 0x8000, 0xbfff);
test_alu_h_vv("vdmulh.h.rn.vv", 0x8000, 0x3fff, 0xc000);
test_alu_h_vv("vdmulh.h.rn.vv", 0x8000, 0x4000, 0xbfff);
test_alu_h_vv("vdmulh.h.rn.vv", 0x8000, 0x4001, 0xbffe);
test_alu_h_vv("vdmulh.h.rn.vv", 0x8000, 0x7fff, 0x8000);
test_alu_h_vv("vdmulh.h.rn.vv", 0x8000, 0x8000, 0x7fff);
test_alu_h_vv("vdmulh.h.rn.vv", 0x8000, 0x8001, 0x7fff);
test_alu_h_vv("vdmulh.h.rn.vv", 0xffff, 0xffff, 0x0000);
test_alu_w_vv("vdmulh.w.rn.vv", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vv("vdmulh.w.rn.vv", 0x55555555, 0x00000000, 0x00000000);
test_alu_w_vv("vdmulh.w.rn.vv", 0x00000002, 0x00000003, 0x00000000);
test_alu_w_vv("vdmulh.w.rn.vv", 0x12345678, 0x00000006, 0x00000001);
test_alu_w_vv("vdmulh.w.rn.vv", 0x12345678, 0x00000009, 0x00000001);
test_alu_w_vv("vdmulh.w.rn.vv", 0x55555555, 0x00000003, 0x00000002);
test_alu_w_vv("vdmulh.w.rn.vv", 0x55555555, 0x00000005, 0x00000003);
test_alu_w_vv("vdmulh.w.rn.vv", 0x23456789, 0x02305670, 0x009a6776);
test_alu_w_vv("vdmulh.w.rn.vv", 0x543210fe, 0x12345678, 0x0bf9779b);
test_alu_w_vv("vdmulh.w.rn.vv", 0x543210fe, 0x89abcdef, 0xb22a768b);
test_alu_w_vv("vdmulh.w.rn.vv", 0xedcba987, 0x12345678, 0xfd693247);
test_alu_w_vv("vdmulh.w.rn.vv", 0xedcba987, 0x89abcdef, 0x10d4392f);
test_alu_w_vv("vdmulh.w.rn.vv", 0xcba98765, 0x00000007, 0xfffffffc);
test_alu_w_vv("vdmulh.w.rn.vv", 0xcba98765, 0x98765432, 0x2a55dfda);
test_alu_w_vv("vdmulh.w.rn.vv", 0xcba98765, 0xdef34567, 0x0d837f7f);
test_alu_w_vv("vdmulh.w.rn.vv", 0xcba98765, 0xdef34567, 0x0d837f7f);
test_alu_w_vv("vdmulh.w.rn.vv", 0x40000000, 0x40000000, 0x20000000);
test_alu_w_vv("vdmulh.w.rn.vv", 0x40000000, 0x80000000, 0xbfffffff);
test_alu_w_vv("vdmulh.w.rn.vv", 0x80000000, 0x3fffffff, 0xc0000000);
test_alu_w_vv("vdmulh.w.rn.vv", 0x80000000, 0x40000000, 0xbfffffff);
test_alu_w_vv("vdmulh.w.rn.vv", 0x80000000, 0x40000001, 0xbffffffe);
test_alu_w_vv("vdmulh.w.rn.vv", 0x80000000, 0x7fffffff, 0x80000000);
test_alu_w_vv("vdmulh.w.rn.vv", 0x80000000, 0x80000000, 0x7fffffff);
test_alu_w_vv("vdmulh.w.rn.vv", 0x80000000, 0x80000001, 0x7fffffff);
test_alu_w_vv("vdmulh.w.rn.vv", 0xffffffff, 0xffffffff, 0x00000000);
test_alu_b_vv3("vmacc.b.vv", 0x02, 0x03, 0x04, 0x0a);
test_alu_h_vv3("vmacc.h.vv", 0x0002, 0x0003, 0x0004, 0x000a);
test_alu_w_vv3("vmacc.w.vv", 0x00000002, 0x00000003, 0x00000004, 0x0000000a);
test_alu_b_vv3("vmadd.b.vv", 0x02, 0x03, 0x04, 0x0e);
test_alu_h_vv3("vmadd.h.vv", 0x00000002, 0x0003, 0x0004, 0x000e);
test_alu_w_vv3("vmadd.w.vv", 0x00000002, 0x00000003, 0x00000004, 0x0000000e);
test_alu_w_vv("vdmulh.w.vv", 0xffffce81, 0x45393280, 0xffffe53b);
test_alu_w_vv("vdmulh.w.vv", 0x00001d92, 0x6ca85b00, 0x0000191a);
test_alu_w_vv("vdmulh.w.vv", 0x000085ac, 0x4fea6280, 0x00005374);
test_alu_w_vv("vdmulh.w.vv", 0x00005305, 0x4805ec00, 0x00002eb6);
test_alu_w_vv("vdmulh.w.vv", 0xffffd8b0, 0x70daa300, 0xffffdd56);
test_alu_w_vv("vdmulh.w.r.vv", 0xffffce81, 0x45393280, 0xffffe53b);
test_alu_w_vv("vdmulh.w.r.vv", 0x00001d92, 0x6ca85b00, 0x0000191a);
test_alu_w_vv("vdmulh.w.r.vv", 0x000085ac, 0x4fea6280, 0x00005375);
test_alu_w_vv("vdmulh.w.r.vv", 0x00005305, 0x4805ec00, 0x00002eb7);
test_alu_w_vv("vdmulh.w.r.vv", 0xffffd8b0, 0x70daa300, 0xffffdd57);
test_alu_w_vv("vdmulh.w.rn.vv", 0xffffce81, 0x45393280, 0xffffe53a);
test_alu_w_vv("vdmulh.w.rn.vv", 0x00001d92, 0x6ca85b00, 0x0000191a);
test_alu_w_vv("vdmulh.w.rn.vv", 0x000085ac, 0x4fea6280, 0x00005375);
test_alu_w_vv("vdmulh.w.rn.vv", 0x00005305, 0x4805ec00, 0x00002eb7);
test_alu_w_vv("vdmulh.w.rn.vv", 0xffffd8b0, 0x70daa300, 0xffffdd56);
test_vdmulh();
return 0;
}