blob: b418f184ab7f72c0d9d9a1c6002108e854504ceb [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 "tests/kelvin_isa/kelvin_test.h"
int main() {
test_alu_b_vv("vabsd.b.vv", 0x00, 0x00, 0x00);
test_alu_b_vv("vabsd.b.vv", 0x7f, 0x7f, 0x00);
test_alu_b_vv("vabsd.b.vv", 0x80, 0x80, 0x00);
test_alu_b_vv("vabsd.b.vv", 0xff, 0xff, 0x00);
test_alu_b_vv("vabsd.b.vv", 0x7f, 0x80, 0xff);
test_alu_b_vv("vabsd.b.vv", 0x80, 0x7f, 0xff);
test_alu_b_vv("vabsd.b.vv", 0x7f, 0xff, 0x80);
test_alu_b_vv("vabsd.b.vv", 0xff, 0x7f, 0x80);
test_alu_b_vv("vabsd.b.vv", 0x80, 0xff, 0x7f);
test_alu_b_vv("vabsd.b.vv", 0xff, 0x80, 0x7f);
test_alu_b_vv("vabsd.b.vv", 0xcc, 0x55, 0x89);
test_alu_b_vv("vabsd.b.vv", 0x55, 0xcc, 0x89);
test_alu_h_vv("vabsd.h.vv", 0x0000, 0x0000, 0x0000);
test_alu_h_vv("vabsd.h.vv", 0x7fff, 0x7fff, 0x0000);
test_alu_h_vv("vabsd.h.vv", 0x8000, 0x8000, 0x0000);
test_alu_h_vv("vabsd.h.vv", 0xffff, 0xffff, 0x0000);
test_alu_h_vv("vabsd.h.vv", 0x7fff, 0x8000, 0xffff);
test_alu_h_vv("vabsd.h.vv", 0x8000, 0x7fff, 0xffff);
test_alu_h_vv("vabsd.h.vv", 0x7fff, 0xffff, 0x8000);
test_alu_h_vv("vabsd.h.vv", 0xffff, 0x7fff, 0x8000);
test_alu_h_vv("vabsd.h.vv", 0x8000, 0xffff, 0x7fff);
test_alu_h_vv("vabsd.h.vv", 0xffff, 0x8000, 0x7fff);
test_alu_h_vv("vabsd.h.vv", 0xcccc, 0x5555, 0x8889);
test_alu_h_vv("vabsd.h.vv", 0x5555, 0xcccc, 0x8889);
test_alu_w_vv("vabsd.w.vv", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vv("vabsd.w.vv", 0x7fffffff, 0x7fffffff, 0x00000000);
test_alu_w_vv("vabsd.w.vv", 0x80000000, 0x80000000, 0x00000000);
test_alu_w_vv("vabsd.w.vv", 0xffffffff, 0xffffffff, 0x00000000);
test_alu_w_vv("vabsd.w.vv", 0x7fffffff, 0x80000000, 0xffffffff);
test_alu_w_vv("vabsd.w.vv", 0x80000000, 0x7fffffff, 0xffffffff);
test_alu_w_vv("vabsd.w.vv", 0x7fffffff, 0xffffffff, 0x80000000);
test_alu_w_vv("vabsd.w.vv", 0xffffffff, 0x7fffffff, 0x80000000);
test_alu_w_vv("vabsd.w.vv", 0x80000000, 0xffffffff, 0x7fffffff);
test_alu_w_vv("vabsd.w.vv", 0xffffffff, 0x80000000, 0x7fffffff);
test_alu_w_vv("vabsd.w.vv", 0xcccccccc, 0x55555555, 0x88888889);
test_alu_w_vv("vabsd.w.vv", 0x55555555, 0xcccccccc, 0x88888889);
test_alu_b_vv("vabsd.b.u.vv", 0x00, 0x00, 0x00);
test_alu_b_vv("vabsd.b.u.vv", 0x7f, 0x7f, 0x00);
test_alu_b_vv("vabsd.b.u.vv", 0x80, 0x80, 0x00);
test_alu_b_vv("vabsd.b.u.vv", 0xff, 0xff, 0x00);
test_alu_b_vv("vabsd.b.u.vv", 0x7f, 0x80, 0x01);
test_alu_b_vv("vabsd.b.u.vv", 0x80, 0x7f, 0x01);
test_alu_b_vv("vabsd.b.u.vv", 0x7f, 0xff, 0x80);
test_alu_b_vv("vabsd.b.u.vv", 0xff, 0x7f, 0x80);
test_alu_b_vv("vabsd.b.u.vv", 0x80, 0xff, 0x7f);
test_alu_b_vv("vabsd.b.u.vv", 0xff, 0x80, 0x7f);
test_alu_b_vv("vabsd.b.u.vv", 0xcc, 0x55, 0x77);
test_alu_b_vv("vabsd.b.u.vv", 0x55, 0xcc, 0x77);
test_alu_h_vv("vabsd.h.u.vv", 0x0000, 0x0000, 0x0000);
test_alu_h_vv("vabsd.h.u.vv", 0x7fff, 0x7fff, 0x0000);
test_alu_h_vv("vabsd.h.u.vv", 0x8000, 0x8000, 0x0000);
test_alu_h_vv("vabsd.h.u.vv", 0xffff, 0xffff, 0x0000);
test_alu_h_vv("vabsd.h.u.vv", 0x7fff, 0x8000, 0x0001);
test_alu_h_vv("vabsd.h.u.vv", 0x8000, 0x7fff, 0x0001);
test_alu_h_vv("vabsd.h.u.vv", 0x7fff, 0xffff, 0x8000);
test_alu_h_vv("vabsd.h.u.vv", 0xffff, 0x7fff, 0x8000);
test_alu_h_vv("vabsd.h.u.vv", 0x8000, 0xffff, 0x7fff);
test_alu_h_vv("vabsd.h.u.vv", 0xffff, 0x8000, 0x7fff);
test_alu_h_vv("vabsd.h.u.vv", 0xcccc, 0x5555, 0x7777);
test_alu_h_vv("vabsd.h.u.vv", 0x5555, 0xcccc, 0x7777);
test_alu_w_vv("vabsd.w.u.vv", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vv("vabsd.w.u.vv", 0x7fffffff, 0x7fffffff, 0x00000000);
test_alu_w_vv("vabsd.w.u.vv", 0x80000000, 0x80000000, 0x00000000);
test_alu_w_vv("vabsd.w.u.vv", 0xffffffff, 0xffffffff, 0x00000000);
test_alu_w_vv("vabsd.w.u.vv", 0x7fffffff, 0x80000000, 0x00000001);
test_alu_w_vv("vabsd.w.u.vv", 0x80000000, 0x7fffffff, 0x00000001);
test_alu_w_vv("vabsd.w.u.vv", 0x7fffffff, 0xffffffff, 0x80000000);
test_alu_w_vv("vabsd.w.u.vv", 0xffffffff, 0x7fffffff, 0x80000000);
test_alu_w_vv("vabsd.w.u.vv", 0x80000000, 0xffffffff, 0x7fffffff);
test_alu_w_vv("vabsd.w.u.vv", 0xffffffff, 0x80000000, 0x7fffffff);
test_alu_w_vv("vabsd.w.u.vv", 0xcccccccc, 0x55555555, 0x77777777);
test_alu_w_vv("vabsd.w.u.vv", 0x55555555, 0xcccccccc, 0x77777777);
test_alu_b_vv("vadd.b.vv", 0x00, 0x01, 0x01);
test_alu_b_vv("vadd.b.vv", 0xff, 0x01, 0x00);
test_alu_b_vv("vadd.b.vv", 0xa0, 0x5f, 0xff);
test_alu_h_vv("vadd.h.vv", 0x0000, 0x0001, 0x0001);
test_alu_h_vv("vadd.h.vv", 0x00ff, 0x0001, 0x0100);
test_alu_h_vv("vadd.h.vv", 0xffff, 0x0001, 0x0000);
test_alu_h_vv("vadd.h.vv", 0xa05f, 0x5fa0, 0xffff);
test_alu_w_vv("vadd.w.vv", 0x00000000, 0x00000001, 0x00000001);
test_alu_w_vv("vadd.w.vv", 0x000000ff, 0x00000001, 0x00000100);
test_alu_w_vv("vadd.w.vv", 0x0000ffff, 0x00000001, 0x00010000);
test_alu_w_vv("vadd.w.vv", 0xffffffff, 0x00000001, 0x00000000);
test_alu_w_vv("vadd.w.vv", 0xa05f1234, 0x5fa0edcb, 0xffffffff);
test_alu_b_vv("vadds.b.vv", 0x00, 0x01, 0x01);
test_alu_b_vv("vadds.b.vv", 0x7f, 0x01, 0x7f);
test_alu_b_vv("vadds.b.vv", 0xff, 0x01, 0x00);
test_alu_b_vv("vadds.b.vv", 0x80, 0x01, 0x81);
test_alu_b_vv("vadds.b.vv", 0x80, 0x80, 0x80);
test_alu_b_vv("vadds.b.vv", 0x80, 0xff, 0x80);
test_alu_b_vv("vadds.b.vv", 0x7f, 0x7f, 0x7f);
test_alu_b_vv("vadds.b.vv", 0x7f, 0x80, 0xff);
test_alu_b_vv("vadds.b.vv", 0x7f, 0xff, 0x7e);
test_alu_b_vv("vadds.b.vv", 0xff, 0xff, 0xfe);
test_alu_b_vv("vadds.b.vv", 0xa0, 0x5f, 0xff);
test_alu_h_vv("vadds.h.vv", 0x0000, 0x0001, 0x0001);
test_alu_h_vv("vadds.h.vv", 0x007f, 0x0001, 0x0080);
test_alu_h_vv("vadds.h.vv", 0x00ff, 0x0001, 0x0100);
test_alu_h_vv("vadds.h.vv", 0x7fff, 0x0001, 0x7fff);
test_alu_h_vv("vadds.h.vv", 0xffff, 0x0001, 0x0000);
test_alu_h_vv("vadds.h.vv", 0x0080, 0x0001, 0x0081);
test_alu_h_vv("vadds.h.vv", 0x0080, 0x00ff, 0x017f);
test_alu_h_vv("vadds.h.vv", 0x8000, 0x0001, 0x8001);
test_alu_h_vv("vadds.h.vv", 0x8000, 0x8000, 0x8000);
test_alu_h_vv("vadds.h.vv", 0x8000, 0xffff, 0x8000);
test_alu_h_vv("vadds.h.vv", 0x7fff, 0x7fff, 0x7fff);
test_alu_h_vv("vadds.h.vv", 0x7fff, 0x8000, 0xffff);
test_alu_h_vv("vadds.h.vv", 0x7fff, 0xffff, 0x7ffe);
test_alu_h_vv("vadds.h.vv", 0xffff, 0xffff, 0xfffe);
test_alu_h_vv("vadds.h.vv", 0xa05f, 0x5fa0, 0xffff);
test_alu_w_vv("vadds.w.vv", 0x00000000, 0x00000001, 0x00000001);
test_alu_w_vv("vadds.w.vv", 0x000000ff, 0x00000001, 0x00000100);
test_alu_w_vv("vadds.w.vv", 0x0000ffff, 0x00000001, 0x00010000);
test_alu_w_vv("vadds.w.vv", 0x7fffffff, 0x00000001, 0x7fffffff);
test_alu_w_vv("vadds.w.vv", 0xffffffff, 0x00000001, 0x00000000);
test_alu_w_vv("vadds.w.vv", 0x80000000, 0x00000001, 0x80000001);
test_alu_w_vv("vadds.w.vv", 0x80000000, 0x80000000, 0x80000000);
test_alu_w_vv("vadds.w.vv", 0x80000000, 0x7fffffff, 0xffffffff);
test_alu_w_vv("vadds.w.vv", 0x80000000, 0xffffffff, 0x80000000);
test_alu_w_vv("vadds.w.vv", 0x7fffffff, 0x80000000, 0xffffffff);
test_alu_w_vv("vadds.w.vv", 0x7fffffff, 0x7fffffff, 0x7fffffff);
test_alu_w_vv("vadds.w.vv", 0x7fffffff, 0xffffffff, 0x7ffffffe);
test_alu_w_vv("vadds.w.vv", 0xffffffff, 0xffffffff, 0xfffffffe);
test_alu_w_vv("vadds.w.vv", 0xa05f1234, 0x5fa0edcb, 0xffffffff);
test_alu_b_vv("vadds.b.u.vv", 0x00, 0x01, 0x01);
test_alu_b_vv("vadds.b.u.vv", 0x7f, 0x01, 0x80);
test_alu_b_vv("vadds.b.u.vv", 0xff, 0x01, 0xff);
test_alu_b_vv("vadds.b.u.vv", 0x80, 0x01, 0x81);
test_alu_b_vv("vadds.b.u.vv", 0x80, 0x80, 0xff);
test_alu_b_vv("vadds.b.u.vv", 0x80, 0xff, 0xff);
test_alu_b_vv("vadds.b.u.vv", 0x7f, 0x7f, 0xfe);
test_alu_b_vv("vadds.b.u.vv", 0x7f, 0x80, 0xff);
test_alu_b_vv("vadds.b.u.vv", 0x7f, 0xff, 0xff);
test_alu_b_vv("vadds.b.u.vv", 0xff, 0xff, 0xff);
test_alu_b_vv("vadds.b.u.vv", 0xa0, 0x5f, 0xff);
test_alu_h_vv("vadds.h.u.vv", 0x0000, 0x0001, 0x0001);
test_alu_h_vv("vadds.h.u.vv", 0x007f, 0x0001, 0x0080);
test_alu_h_vv("vadds.h.u.vv", 0x00ff, 0x0001, 0x0100);
test_alu_h_vv("vadds.h.u.vv", 0x7fff, 0x0001, 0x8000);
test_alu_h_vv("vadds.h.u.vv", 0xffff, 0x0001, 0xffff);
test_alu_h_vv("vadds.h.u.vv", 0x0080, 0x0001, 0x0081);
test_alu_h_vv("vadds.h.u.vv", 0x0080, 0x00ff, 0x017f);
test_alu_h_vv("vadds.h.u.vv", 0x8000, 0x0001, 0x8001);
test_alu_h_vv("vadds.h.u.vv", 0x8000, 0x8000, 0xffff);
test_alu_h_vv("vadds.h.u.vv", 0x8000, 0xffff, 0xffff);
test_alu_h_vv("vadds.h.u.vv", 0x7fff, 0x7fff, 0xfffe);
test_alu_h_vv("vadds.h.u.vv", 0x7fff, 0x8000, 0xffff);
test_alu_h_vv("vadds.h.u.vv", 0x7fff, 0xffff, 0xffff);
test_alu_h_vv("vadds.h.u.vv", 0xffff, 0xffff, 0xffff);
test_alu_h_vv("vadds.h.u.vv", 0xa05f, 0x5fa0, 0xffff);
test_alu_w_vv("vadds.w.u.vv", 0x00000000, 0x00000001, 0x00000001);
test_alu_w_vv("vadds.w.u.vv", 0x000000ff, 0x00000001, 0x00000100);
test_alu_w_vv("vadds.w.u.vv", 0x0000ffff, 0x00000001, 0x00010000);
test_alu_w_vv("vadds.w.u.vv", 0x7fffffff, 0x00000001, 0x80000000);
test_alu_w_vv("vadds.w.u.vv", 0xffffffff, 0x00000001, 0xffffffff);
test_alu_w_vv("vadds.w.u.vv", 0x80000000, 0x00000001, 0x80000001);
test_alu_w_vv("vadds.w.u.vv", 0x80000000, 0x80000000, 0xffffffff);
test_alu_w_vv("vadds.w.u.vv", 0x80000000, 0x7fffffff, 0xffffffff);
test_alu_w_vv("vadds.w.u.vv", 0x80000000, 0xffffffff, 0xffffffff);
test_alu_w_vv("vadds.w.u.vv", 0x7fffffff, 0x80000000, 0xffffffff);
test_alu_w_vv("vadds.w.u.vv", 0x7fffffff, 0x7fffffff, 0xfffffffe);
test_alu_w_vv("vadds.w.u.vv", 0x7fffffff, 0xffffffff, 0xffffffff);
test_alu_w_vv("vadds.w.u.vv", 0xffffffff, 0xffffffff, 0xffffffff);
test_alu_w_vv("vadds.w.u.vv", 0xa05f1234, 0x5fa0edcb, 0xffffffff);
test_aluw_h_vv("vaddw.h.vv", 0x00, 0x01, 0x0001);
test_aluw_h_vv("vaddw.h.vv", 0x7f, 0x01, 0x0080);
test_aluw_h_vv("vaddw.h.vv", 0xff, 0x01, 0x0000);
test_aluw_h_vv("vaddw.h.vv", 0x80, 0x01, 0xff81);
test_aluw_h_vv("vaddw.h.vv", 0x80, 0x80, 0xff00);
test_aluw_h_vv("vaddw.h.vv", 0x80, 0xff, 0xff7f);
test_aluw_h_vv("vaddw.h.vv", 0x7f, 0x7f, 0x00fe);
test_aluw_h_vv("vaddw.h.vv", 0x7f, 0x80, 0xffff);
test_aluw_h_vv("vaddw.h.vv", 0x7f, 0xff, 0x007e);
test_aluw_h_vv("vaddw.h.vv", 0xff, 0xff, 0xfffe);
test_aluw_h_vv("vaddw.h.vv", 0xa0, 0x5f, 0xffff);
test_aluw_w_vv("vaddw.w.vv", 0x0000, 0x0001, 0x00000001);
test_aluw_w_vv("vaddw.w.vv", 0x007f, 0x0001, 0x00000080);
test_aluw_w_vv("vaddw.w.vv", 0x00ff, 0x0001, 0x00000100);
test_aluw_w_vv("vaddw.w.vv", 0x7fff, 0x0001, 0x00008000);
test_aluw_w_vv("vaddw.w.vv", 0xffff, 0x0001, 0x00000000);
test_aluw_w_vv("vaddw.w.vv", 0x0080, 0x0001, 0x00000081);
test_aluw_w_vv("vaddw.w.vv", 0x0080, 0x00ff, 0x0000017f);
test_aluw_w_vv("vaddw.w.vv", 0x8000, 0x0001, 0xffff8001);
test_aluw_w_vv("vaddw.w.vv", 0x8000, 0x8000, 0xffff0000);
test_aluw_w_vv("vaddw.w.vv", 0x8000, 0xffff, 0xffff7fff);
test_aluw_w_vv("vaddw.w.vv", 0x7fff, 0x7fff, 0x0000fffe);
test_aluw_w_vv("vaddw.w.vv", 0x7fff, 0x8000, 0xffffffff);
test_aluw_w_vv("vaddw.w.vv", 0x7fff, 0xffff, 0x00007ffe);
test_aluw_w_vv("vaddw.w.vv", 0xffff, 0xffff, 0xfffffffe);
test_aluw_w_vv("vaddw.w.vv", 0xa05f, 0x5fa0, 0xffffffff);
test_aluw_h_vv("vaddw.h.u.vv", 0x00, 0x01, 0x0001);
test_aluw_h_vv("vaddw.h.u.vv", 0x7f, 0x01, 0x0080);
test_aluw_h_vv("vaddw.h.u.vv", 0xff, 0x01, 0x0100);
test_aluw_h_vv("vaddw.h.u.vv", 0x80, 0x01, 0x0081);
test_aluw_h_vv("vaddw.h.u.vv", 0x80, 0x80, 0x0100);
test_aluw_h_vv("vaddw.h.u.vv", 0x80, 0xff, 0x017f);
test_aluw_h_vv("vaddw.h.u.vv", 0x7f, 0x7f, 0x00fe);
test_aluw_h_vv("vaddw.h.u.vv", 0x7f, 0x80, 0x00ff);
test_aluw_h_vv("vaddw.h.u.vv", 0x7f, 0xff, 0x017e);
test_aluw_h_vv("vaddw.h.u.vv", 0xff, 0xff, 0x01fe);
test_aluw_h_vv("vaddw.h.u.vv", 0xa0, 0x5f, 0x00ff);
test_aluw_w_vv("vaddw.w.u.vv", 0x0000, 0x0001, 0x00000001);
test_aluw_w_vv("vaddw.w.u.vv", 0x007f, 0x0001, 0x00000080);
test_aluw_w_vv("vaddw.w.u.vv", 0x00ff, 0x0001, 0x00000100);
test_aluw_w_vv("vaddw.w.u.vv", 0x7fff, 0x0001, 0x00008000);
test_aluw_w_vv("vaddw.w.u.vv", 0xffff, 0x0001, 0x00010000);
test_aluw_w_vv("vaddw.w.u.vv", 0x0080, 0x0001, 0x00000081);
test_aluw_w_vv("vaddw.w.u.vv", 0x0080, 0x00ff, 0x0000017f);
test_aluw_w_vv("vaddw.w.u.vv", 0x8000, 0x0001, 0x00008001);
test_aluw_w_vv("vaddw.w.u.vv", 0x8000, 0x8000, 0x00010000);
test_aluw_w_vv("vaddw.w.u.vv", 0x8000, 0xffff, 0x00017fff);
test_aluw_w_vv("vaddw.w.u.vv", 0x7fff, 0x7fff, 0x0000fffe);
test_aluw_w_vv("vaddw.w.u.vv", 0x7fff, 0x8000, 0x0000ffff);
test_aluw_w_vv("vaddw.w.u.vv", 0x7fff, 0xffff, 0x00017ffe);
test_aluw_w_vv("vaddw.w.u.vv", 0xffff, 0xffff, 0x0001fffe);
test_aluw_w_vv("vaddw.w.u.vv", 0xa05f, 0x5fa0, 0x0000ffff);
test_alu_b_vv("vhadd.b.vv", 0x05, 0x08, 0x06);
test_alu_b_vv("vhadd.b.vv", 0x7e, 0x7f, 0x7e);
test_alu_b_vv("vhadd.b.vv", 0x7f, 0x80, 0xff);
test_alu_b_vv("vhadd.b.vv", 0xfe, 0xff, 0xfe);
test_alu_b_vv("vhadd.b.vv", 0x55, 0xaa, 0xff);
test_alu_b_vv("vhadd.b.vv", 0x33, 0x66, 0x4c);
test_alu_h_vv("vhadd.h.vv", 0x0055, 0x0088, 0x006e);
test_alu_h_vv("vhadd.h.vv", 0x7ffe, 0x7fff, 0x7ffe);
test_alu_h_vv("vhadd.h.vv", 0x7fff, 0x8000, 0xffff);
test_alu_h_vv("vhadd.h.vv", 0xfffe, 0xffff, 0xfffe);
test_alu_h_vv("vhadd.h.vv", 0x5555, 0xaaaa, 0xffff);
test_alu_h_vv("vhadd.h.vv", 0x3333, 0x6666, 0x4ccc);
test_alu_w_vv("vhadd.w.vv", 0x00000055, 0x00000088, 0x0000006e);
test_alu_w_vv("vhadd.w.vv", 0x7ffffffe, 0x7fffffff, 0x7ffffffe);
test_alu_w_vv("vhadd.w.vv", 0x7fffffff, 0x80000000, 0xffffffff);
test_alu_w_vv("vhadd.w.vv", 0xfffffffe, 0xffffffff, 0xfffffffe);
test_alu_w_vv("vhadd.w.vv", 0x55555555, 0xaaaaaaaa, 0xffffffff);
test_alu_w_vv("vhadd.w.vv", 0x33333333, 0x66666666, 0x4ccccccc);
test_alu_b_vv("vhadd.b.u.vv", 0x05, 0x08, 0x06);
test_alu_b_vv("vhadd.b.u.vv", 0x7e, 0x7f, 0x7e);
test_alu_b_vv("vhadd.b.u.vv", 0x7f, 0x80, 0x7f);
test_alu_b_vv("vhadd.b.u.vv", 0xfe, 0xff, 0xfe);
test_alu_b_vv("vhadd.b.u.vv", 0x55, 0xaa, 0x7f);
test_alu_b_vv("vhadd.b.u.vv", 0x33, 0x66, 0x4c);
test_alu_h_vv("vhadd.h.u.vv", 0x0055, 0x0088, 0x006e);
test_alu_h_vv("vhadd.h.u.vv", 0x7ffe, 0x7fff, 0x7ffe);
test_alu_h_vv("vhadd.h.u.vv", 0x7fff, 0x8000, 0x7fff);
test_alu_h_vv("vhadd.h.u.vv", 0xfffe, 0xffff, 0xfffe);
test_alu_h_vv("vhadd.h.u.vv", 0x5555, 0xaaaa, 0x7fff);
test_alu_h_vv("vhadd.h.u.vv", 0x3333, 0x6666, 0x4ccc);
test_alu_w_vv("vhadd.w.u.vv", 0x00000055, 0x00000088, 0x0000006e);
test_alu_w_vv("vhadd.w.u.vv", 0x7ffffffe, 0x7fffffff, 0x7ffffffe);
test_alu_w_vv("vhadd.w.u.vv", 0x7fffffff, 0x80000000, 0x7fffffff);
test_alu_w_vv("vhadd.w.u.vv", 0xfffffffe, 0xffffffff, 0xfffffffe);
test_alu_w_vv("vhadd.w.u.vv", 0x55555555, 0xaaaaaaaa, 0x7fffffff);
test_alu_w_vv("vhadd.w.u.vv", 0x33333333, 0x66666666, 0x4ccccccc);
test_alu_b_vv("vhadd.b.r.vv", 0x05, 0x08, 0x07);
test_alu_b_vv("vhadd.b.r.vv", 0x7e, 0x7f, 0x7f);
test_alu_b_vv("vhadd.b.r.vv", 0x7f, 0x80, 0x00);
test_alu_b_vv("vhadd.b.r.vv", 0xfe, 0xff, 0xff);
test_alu_b_vv("vhadd.b.r.vv", 0x55, 0xaa, 0x00);
test_alu_b_vv("vhadd.b.r.vv", 0x33, 0x66, 0x4d);
test_alu_h_vv("vhadd.h.r.vv", 0x0055, 0x0088, 0x006f);
test_alu_h_vv("vhadd.h.r.vv", 0x7ffe, 0x7fff, 0x7fff);
test_alu_h_vv("vhadd.h.r.vv", 0x7fff, 0x8000, 0x0000);
test_alu_h_vv("vhadd.h.r.vv", 0xfffe, 0xffff, 0xffff);
test_alu_h_vv("vhadd.h.r.vv", 0x5555, 0xaaaa, 0x0000);
test_alu_h_vv("vhadd.h.r.vv", 0x3333, 0x6666, 0x4ccd);
test_alu_w_vv("vhadd.w.r.vv", 0x00000055, 0x00000088, 0x0000006f);
test_alu_w_vv("vhadd.w.r.vv", 0x7ffffffe, 0x7fffffff, 0x7fffffff);
test_alu_w_vv("vhadd.w.r.vv", 0x7fffffff, 0x80000000, 0x00000000);
test_alu_w_vv("vhadd.w.r.vv", 0xfffffffe, 0xffffffff, 0xffffffff);
test_alu_w_vv("vhadd.w.r.vv", 0x55555555, 0xaaaaaaaa, 0x00000000);
test_alu_w_vv("vhadd.w.r.vv", 0x33333333, 0x66666666, 0x4ccccccd);
test_alu_b_vv("vhadd.b.ur.vv", 0x05, 0x08, 0x07);
test_alu_b_vv("vhadd.b.ur.vv", 0x7e, 0x7f, 0x7f);
test_alu_b_vv("vhadd.b.ur.vv", 0x7f, 0x80, 0x80);
test_alu_b_vv("vhadd.b.ur.vv", 0xfe, 0xff, 0xff);
test_alu_b_vv("vhadd.b.ur.vv", 0x55, 0xaa, 0x80);
test_alu_b_vv("vhadd.b.ur.vv", 0x33, 0x66, 0x4d);
test_alu_h_vv("vhadd.h.ur.vv", 0x0055, 0x0088, 0x006f);
test_alu_h_vv("vhadd.h.ur.vv", 0x7ffe, 0x7fff, 0x7fff);
test_alu_h_vv("vhadd.h.ur.vv", 0x7fff, 0x8000, 0x8000);
test_alu_h_vv("vhadd.h.ur.vv", 0xfffe, 0xffff, 0xffff);
test_alu_h_vv("vhadd.h.ur.vv", 0x5555, 0xaaaa, 0x8000);
test_alu_h_vv("vhadd.h.ur.vv", 0x3333, 0x6666, 0x4ccd);
test_alu_w_vv("vhadd.w.ur.vv", 0x00000055, 0x00000088, 0x0000006f);
test_alu_w_vv("vhadd.w.ur.vv", 0x7ffffffe, 0x7fffffff, 0x7fffffff);
test_alu_w_vv("vhadd.w.ur.vv", 0x7fffffff, 0x80000000, 0x80000000);
test_alu_w_vv("vhadd.w.ur.vv", 0xfffffffe, 0xffffffff, 0xffffffff);
test_alu_w_vv("vhadd.w.ur.vv", 0x55555555, 0xaaaaaaaa, 0x80000000);
test_alu_w_vv("vhadd.w.ur.vv", 0x33333333, 0x66666666, 0x4ccccccd);
test_alu_b_vv("vhsub.b.vv", 0x05, 0x08, 0xfe);
test_alu_b_vv("vhsub.b.vv", 0x7e, 0x7f, 0xff);
test_alu_b_vv("vhsub.b.vv", 0x7f, 0x80, 0x7f);
test_alu_b_vv("vhsub.b.vv", 0x80, 0x7f, 0x80);
test_alu_b_vv("vhsub.b.vv", 0xfe, 0xff, 0xff);
test_alu_b_vv("vhsub.b.vv", 0x55, 0xaa, 0x55);
test_alu_b_vv("vhsub.b.vv", 0x33, 0x66, 0xe6);
test_alu_h_vv("vhsub.h.vv", 0x0055, 0x0087, 0xffe7);
test_alu_h_vv("vhsub.h.vv", 0x7ffe, 0x7fff, 0xffff);
test_alu_h_vv("vhsub.h.vv", 0x7fff, 0x8000, 0x7fff);
test_alu_h_vv("vhsub.h.vv", 0x8000, 0x7fff, 0x8000);
test_alu_h_vv("vhsub.h.vv", 0xfffe, 0xffff, 0xffff);
test_alu_h_vv("vhsub.h.vv", 0x5555, 0xaaaa, 0x5555);
test_alu_h_vv("vhsub.h.vv", 0x3333, 0x6666, 0xe666);
test_alu_w_vv("vhsub.w.vv", 0x00000055, 0x00000088, 0xffffffe6);
test_alu_w_vv("vhsub.w.vv", 0x7ffffffe, 0x7fffffff, 0xffffffff);
test_alu_w_vv("vhsub.w.vv", 0x7fffffff, 0x80000000, 0x7fffffff);
test_alu_w_vv("vhsub.w.vv", 0x80000000, 0x7fffffff, 0x80000000);
test_alu_w_vv("vhsub.w.vv", 0xfffffffe, 0xffffffff, 0xffffffff);
test_alu_w_vv("vhsub.w.vv", 0x55555555, 0xaaaaaaaa, 0x55555555);
test_alu_w_vv("vhsub.w.vv", 0x33333333, 0x66666666, 0xe6666666);
test_alu_b_vv("vhsub.b.u.vv", 0x05, 0x07, 0xff);
test_alu_b_vv("vhsub.b.u.vv", 0x7e, 0x7f, 0xff);
test_alu_b_vv("vhsub.b.u.vv", 0x7f, 0x80, 0xff);
test_alu_b_vv("vhsub.b.u.vv", 0x80, 0x7f, 0x00);
test_alu_b_vv("vhsub.b.u.vv", 0xfe, 0xff, 0xff);
test_alu_b_vv("vhsub.b.u.vv", 0x55, 0xaa, 0xd5);
test_alu_b_vv("vhsub.b.u.vv", 0x33, 0x66, 0xe6);
test_alu_h_vv("vhsub.h.u.vv", 0x0055, 0x0087, 0xffe7);
test_alu_h_vv("vhsub.h.u.vv", 0x7ffe, 0x7fff, 0xffff);
test_alu_h_vv("vhsub.h.u.vv", 0x7fff, 0x8000, 0xffff);
test_alu_h_vv("vhsub.h.u.vv", 0x8000, 0x7fff, 0x0000);
test_alu_h_vv("vhsub.h.u.vv", 0xfffe, 0xffff, 0xffff);
test_alu_h_vv("vhsub.h.u.vv", 0x5555, 0xaaaa, 0xd555);
test_alu_h_vv("vhsub.h.u.vv", 0x3333, 0x6666, 0xe666);
test_alu_w_vv("vhsub.w.u.vv", 0x00000055, 0x00000087, 0xffffffe7);
test_alu_w_vv("vhsub.w.u.vv", 0x7ffffffe, 0x7fffffff, 0xffffffff);
test_alu_w_vv("vhsub.w.u.vv", 0x7fffffff, 0x80000000, 0xffffffff);
test_alu_w_vv("vhsub.w.u.vv", 0x80000000, 0x7fffffff, 0x00000000);
test_alu_w_vv("vhsub.w.u.vv", 0xfffffffe, 0xffffffff, 0xffffffff);
test_alu_w_vv("vhsub.w.u.vv", 0x55555555, 0xaaaaaaaa, 0xd5555555);
test_alu_w_vv("vhsub.w.u.vv", 0x33333333, 0x66666666, 0xe6666666);
test_alu_b_vv("vhsub.b.r.vv", 0x05, 0x07, 0xff);
test_alu_b_vv("vhsub.b.r.vv", 0x7e, 0x7f, 0x00);
test_alu_b_vv("vhsub.b.r.vv", 0x7f, 0x80, 0x80);
test_alu_b_vv("vhsub.b.r.vv", 0x80, 0x7f, 0x81);
test_alu_b_vv("vhsub.b.r.vv", 0xfe, 0xff, 0x00);
test_alu_b_vv("vhsub.b.r.vv", 0x55, 0xaa, 0x56);
test_alu_b_vv("vhsub.b.r.vv", 0x33, 0x66, 0xe7);
test_alu_h_vv("vhsub.h.r.vv", 0x0055, 0x0087, 0xffe7);
test_alu_h_vv("vhsub.h.r.vv", 0x7ffe, 0x7fff, 0x0000);
test_alu_h_vv("vhsub.h.r.vv", 0x7fff, 0x8000, 0x8000);
test_alu_h_vv("vhsub.h.r.vv", 0x8000, 0x7fff, 0x8001);
test_alu_h_vv("vhsub.h.r.vv", 0xfffe, 0xffff, 0x0000);
test_alu_h_vv("vhsub.h.r.vv", 0x5555, 0xaaaa, 0x5556);
test_alu_h_vv("vhsub.h.r.vv", 0x3333, 0x6666, 0xe667);
test_alu_w_vv("vhsub.w.r.vv", 0x00000055, 0x00000087, 0xffffffe7);
test_alu_w_vv("vhsub.w.r.vv", 0x7ffffffe, 0x7fffffff, 0x00000000);
test_alu_w_vv("vhsub.w.r.vv", 0x7fffffff, 0x80000000, 0x80000000);
test_alu_w_vv("vhsub.w.r.vv", 0x80000000, 0x7fffffff, 0x80000001);
test_alu_w_vv("vhsub.w.r.vv", 0xfffffffe, 0xffffffff, 0x00000000);
test_alu_w_vv("vhsub.w.r.vv", 0x55555555, 0xaaaaaaaa, 0x55555556);
test_alu_w_vv("vhsub.w.r.vv", 0x33333333, 0x66666666, 0xe6666667);
test_alu_b_vv("vhsub.b.ur.vv", 0x05, 0x07, 0xff);
test_alu_b_vv("vhsub.b.ur.vv", 0x7e, 0x7f, 0x00);
test_alu_b_vv("vhsub.b.ur.vv", 0x7f, 0x80, 0x00);
test_alu_b_vv("vhsub.b.ur.vv", 0x80, 0x7f, 0x01);
test_alu_b_vv("vhsub.b.ur.vv", 0xfe, 0xff, 0x00);
test_alu_b_vv("vhsub.b.ur.vv", 0x55, 0xaa, 0xd6);
test_alu_b_vv("vhsub.b.ur.vv", 0x33, 0x66, 0xe7);
test_alu_h_vv("vhsub.h.ur.vv", 0x0055, 0x0087, 0xffe7);
test_alu_h_vv("vhsub.h.ur.vv", 0x7ffe, 0x7fff, 0x0000);
test_alu_h_vv("vhsub.h.ur.vv", 0x7fff, 0x8000, 0x0000);
test_alu_h_vv("vhsub.h.ur.vv", 0x8000, 0x7fff, 0x0001);
test_alu_h_vv("vhsub.h.ur.vv", 0xfffe, 0xffff, 0x0000);
test_alu_h_vv("vhsub.h.ur.vv", 0x5555, 0xaaaa, 0xd556);
test_alu_h_vv("vhsub.h.ur.vv", 0x3333, 0x6666, 0xe667);
test_alu_w_vv("vhsub.w.ur.vv", 0x00000055, 0x00000087, 0xffffffe7);
test_alu_w_vv("vhsub.w.ur.vv", 0x7ffffffe, 0x7fffffff, 0x00000000);
test_alu_w_vv("vhsub.w.ur.vv", 0x7fffffff, 0x80000000, 0x00000000);
test_alu_w_vv("vhsub.w.ur.vv", 0x80000000, 0x7fffffff, 0x00000001);
test_alu_w_vv("vhsub.w.ur.vv", 0xfffffffe, 0xffffffff, 0x00000000);
test_alu_w_vv("vhsub.w.ur.vv", 0x55555555, 0xaaaaaaaa, 0xd5555556);
test_alu_w_vv("vhsub.w.ur.vv", 0x33333333, 0x66666666, 0xe6666667);
test_alu_b_vx("vrsub.b.vx", 0x00, 0x00, 0x00);
test_alu_b_vx("vrsub.b.vx", 0x12, 0x34, 0x22);
test_alu_b_vx("vrsub.b.vx", 0x34, 0x12, 0xde);
test_alu_b_vx("vrsub.b.vx", 0x00, 0x00, 0x00);
test_alu_b_vx("vrsub.b.vx", 0x00, 0x7f, 0x7f);
test_alu_b_vx("vrsub.b.vx", 0x00, 0x80, 0x80);
test_alu_b_vx("vrsub.b.vx", 0x00, 0xff, 0xff);
test_alu_b_vx("vrsub.b.vx", 0x7f, 0x00, 0x81);
test_alu_b_vx("vrsub.b.vx", 0x7f, 0x7f, 0x00);
test_alu_b_vx("vrsub.b.vx", 0x7f, 0x80, 0x01);
test_alu_b_vx("vrsub.b.vx", 0x7f, 0xff, 0x80);
test_alu_b_vx("vrsub.b.vx", 0x80, 0x00, 0x80);
test_alu_b_vx("vrsub.b.vx", 0x80, 0x7f, 0xff);
test_alu_b_vx("vrsub.b.vx", 0x80, 0x80, 0x00);
test_alu_b_vx("vrsub.b.vx", 0x80, 0xff, 0x7f);
test_alu_b_vx("vrsub.b.vx", 0xff, 0x00, 0x01);
test_alu_b_vx("vrsub.b.vx", 0xff, 0x7f, 0x80);
test_alu_b_vx("vrsub.b.vx", 0xff, 0x80, 0x81);
test_alu_b_vx("vrsub.b.vx", 0xff, 0xff, 0x00);
test_alu_h_vx("vrsub.h.vx", 0x0000, 0x0000, 0x0000);
test_alu_h_vx("vrsub.h.vx", 0x1234, 0x3456, 0x2222);
test_alu_h_vx("vrsub.h.vx", 0x3456, 0x1234, 0xddde);
test_alu_h_vx("vrsub.h.vx", 0x0000, 0x0000, 0x0000);
test_alu_h_vx("vrsub.h.vx", 0x0000, 0x7fff, 0x7fff);
test_alu_h_vx("vrsub.h.vx", 0x0000, 0x8000, 0x8000);
test_alu_h_vx("vrsub.h.vx", 0x0000, 0xffff, 0xffff);
test_alu_h_vx("vrsub.h.vx", 0x7fff, 0x0000, 0x8001);
test_alu_h_vx("vrsub.h.vx", 0x7fff, 0x7fff, 0x0000);
test_alu_h_vx("vrsub.h.vx", 0x7fff, 0x8000, 0x0001);
test_alu_h_vx("vrsub.h.vx", 0x7fff, 0xffff, 0x8000);
test_alu_h_vx("vrsub.h.vx", 0x8000, 0x0000, 0x8000);
test_alu_h_vx("vrsub.h.vx", 0x8000, 0x7fff, 0xffff);
test_alu_h_vx("vrsub.h.vx", 0x8000, 0x8000, 0x0000);
test_alu_h_vx("vrsub.h.vx", 0x8000, 0xffff, 0x7fff);
test_alu_h_vx("vrsub.h.vx", 0xffff, 0x0000, 0x0001);
test_alu_h_vx("vrsub.h.vx", 0xffff, 0x7fff, 0x8000);
test_alu_h_vx("vrsub.h.vx", 0xffff, 0x8000, 0x8001);
test_alu_h_vx("vrsub.h.vx", 0xffff, 0xffff, 0x0000);
test_alu_w_vx("vrsub.w.vx", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vx("vrsub.w.vx", 0x12345678, 0x3456789a, 0x22222222);
test_alu_w_vx("vrsub.w.vx", 0x3456789a, 0x12345678, 0xddddddde);
test_alu_w_vx("vrsub.w.vx", 0x00000000, 0x00000000, 0x00000000);
test_alu_w_vx("vrsub.w.vx", 0x00000000, 0x7fffffff, 0x7fffffff);
test_alu_w_vx("vrsub.w.vx", 0x00000000, 0x80000000, 0x80000000);
test_alu_w_vx("vrsub.w.vx", 0x00000000, 0xffffffff, 0xffffffff);
test_alu_w_vx("vrsub.w.vx", 0x7fffffff, 0x00000000, 0x80000001);
test_alu_w_vx("vrsub.w.vx", 0x7fffffff, 0x7fffffff, 0x00000000);
test_alu_w_vx("vrsub.w.vx", 0x7fffffff, 0x80000000, 0x00000001);
test_alu_w_vx("vrsub.w.vx", 0x7fffffff, 0xffffffff, 0x80000000);
test_alu_w_vx("vrsub.w.vx", 0x80000000, 0x00000000, 0x80000000);
test_alu_w_vx("vrsub.w.vx", 0x80000000, 0x7fffffff, 0xffffffff);
test_alu_w_vx("vrsub.w.vx", 0x80000000, 0x80000000, 0x00000000);
test_alu_w_vx("vrsub.w.vx", 0x80000000, 0xffffffff, 0x7fffffff);
test_alu_w_vx("vrsub.w.vx", 0xffffffff, 0x00000000, 0x00000001);
test_alu_w_vx("vrsub.w.vx", 0xffffffff, 0x7fffffff, 0x80000000);
test_alu_w_vx("vrsub.w.vx", 0xffffffff, 0x80000000, 0x80000001);
test_alu_w_vx("vrsub.w.vx", 0xffffffff, 0xffffffff, 0x00000000);
test_alu_b_vv("vsub.b.vv", 0x00, 0x01, 0xff);
test_alu_b_vv("vsub.b.vv", 0xff, 0x01, 0xfe);
test_alu_b_vv("vsub.b.vv", 0xa0, 0x5f, 0x41);
test_alu_h_vv("vsub.h.vv", 0x0000, 0x0001, 0xffff);
test_alu_h_vv("vsub.h.vv", 0x00ff, 0x0001, 0x00fe);
test_alu_h_vv("vsub.h.vv", 0xffff, 0x0001, 0xfffe);
test_alu_h_vv("vsub.h.vv", 0xa05f, 0x5fa0, 0x40bf);
test_alu_w_vv("vsub.w.vv", 0x00000000, 0x00000001, 0xffffffff);
test_alu_w_vv("vsub.w.vv", 0x000000ff, 0x00000001, 0x000000fe);
test_alu_w_vv("vsub.w.vv", 0x0000ffff, 0x00000001, 0x0000fffe);
test_alu_w_vv("vsub.w.vv", 0xffffffff, 0x00000001, 0xfffffffe);
test_alu_w_vv("vsub.w.vv", 0xa05f1234, 0x5fa0edcb, 0x40be2469);
test_alu_b_vv("vsubs.b.vv", 0x00, 0x01, 0xff);
test_alu_b_vv("vsubs.b.vv", 0x7f, 0x01, 0x7e);
test_alu_b_vv("vsubs.b.vv", 0x7f, 0x80, 0x7f);
test_alu_b_vv("vsubs.b.vv", 0xff, 0x01, 0xfe);
test_alu_b_vv("vsubs.b.vv", 0x80, 0x01, 0x80);
test_alu_b_vv("vsubs.b.vv", 0x80, 0x80, 0x00);
test_alu_b_vv("vsubs.b.vv", 0x80, 0xff, 0x81);
test_alu_b_vv("vsubs.b.vv", 0x7f, 0x7f, 0x00);
test_alu_b_vv("vsubs.b.vv", 0x7f, 0x80, 0x7f);
test_alu_b_vv("vsubs.b.vv", 0x7f, 0xff, 0x7f);
test_alu_b_vv("vsubs.b.vv", 0x80, 0x7f, 0x80);
test_alu_b_vv("vsubs.b.vv", 0xff, 0xff, 0x00);
test_alu_b_vv("vsubs.b.vv", 0xa0, 0x5f, 0x80);
test_alu_h_vv("vsubs.h.vv", 0x0000, 0x0001, 0xffff);
test_alu_h_vv("vsubs.h.vv", 0x007f, 0x0001, 0x007e);
test_alu_h_vv("vsubs.h.vv", 0x00ff, 0x0001, 0x00fe);
test_alu_h_vv("vsubs.h.vv", 0x7fff, 0x0001, 0x7ffe);
test_alu_h_vv("vsubs.h.vv", 0x7fff, 0x8000, 0x7fff);
test_alu_h_vv("vsubs.h.vv", 0xffff, 0x0001, 0xfffe);
test_alu_h_vv("vsubs.h.vv", 0x0080, 0x0001, 0x007f);
test_alu_h_vv("vsubs.h.vv", 0x0080, 0x00ff, 0xff81);
test_alu_h_vv("vsubs.h.vv", 0x8000, 0x7fff, 0x8000);
test_alu_h_vv("vsubs.h.vv", 0x8000, 0x0001, 0x8000);
test_alu_h_vv("vsubs.h.vv", 0x8000, 0x8000, 0x0000);
test_alu_h_vv("vsubs.h.vv", 0x8000, 0xffff, 0x8001);
test_alu_h_vv("vsubs.h.vv", 0x7fff, 0x7fff, 0x0000);
test_alu_h_vv("vsubs.h.vv", 0x7fff, 0x8000, 0x7fff);
test_alu_h_vv("vsubs.h.vv", 0x7fff, 0xffff, 0x7fff);
test_alu_h_vv("vsubs.h.vv", 0xffff, 0xffff, 0x0000);
test_alu_h_vv("vsubs.h.vv", 0xa05f, 0x5fa0, 0x8000);
test_alu_w_vv("vsubs.w.vv", 0x00000000, 0x00000001, 0xffffffff);
test_alu_w_vv("vsubs.w.vv", 0x000000ff, 0x00000001, 0x000000fe);
test_alu_w_vv("vsubs.w.vv", 0x0000ffff, 0x00000001, 0x0000fffe);
test_alu_w_vv("vsubs.w.vv", 0x7fffffff, 0x00000001, 0x7ffffffe);
test_alu_w_vv("vsubs.w.vv", 0x7fffffff, 0x80000000, 0x7fffffff);
test_alu_w_vv("vsubs.w.vv", 0xffffffff, 0x00000001, 0xfffffffe);
test_alu_w_vv("vsubs.w.vv", 0x80000000, 0x00000001, 0x80000000);
test_alu_w_vv("vsubs.w.vv", 0x80000000, 0x80000000, 0x00000000);
test_alu_w_vv("vsubs.w.vv", 0x80000000, 0x7fffffff, 0x80000000);
test_alu_w_vv("vsubs.w.vv", 0x80000000, 0xffffffff, 0x80000001);
test_alu_w_vv("vsubs.w.vv", 0x7fffffff, 0x80000000, 0x7fffffff);
test_alu_w_vv("vsubs.w.vv", 0x7fffffff, 0x7fffffff, 0x00000000);
test_alu_w_vv("vsubs.w.vv", 0x7fffffff, 0xffffffff, 0x7fffffff);
test_alu_w_vv("vsubs.w.vv", 0xffffffff, 0xffffffff, 0x00000000);
test_alu_w_vv("vsubs.w.vv", 0xa05f1234, 0x5fa0edcb, 0x80000000);
test_alu_b_vv("vsubs.b.u.vv", 0x00, 0x01, 0x00);
test_alu_b_vv("vsubs.b.u.vv", 0x7f, 0x01, 0x7e);
test_alu_b_vv("vsubs.b.u.vv", 0x80, 0x7f, 0x01);
test_alu_b_vv("vsubs.b.u.vv", 0xff, 0x01, 0xfe);
test_alu_b_vv("vsubs.b.u.vv", 0x80, 0x01, 0x7f);
test_alu_b_vv("vsubs.b.u.vv", 0x80, 0x80, 0x00);
test_alu_b_vv("vsubs.b.u.vv", 0x80, 0xff, 0x00);
test_alu_b_vv("vsubs.b.u.vv", 0x7f, 0x7f, 0x00);
test_alu_b_vv("vsubs.b.u.vv", 0x7f, 0x80, 0x00);
test_alu_b_vv("vsubs.b.u.vv", 0x7f, 0xff, 0x00);
test_alu_b_vv("vsubs.b.u.vv", 0xff, 0xff, 0x00);
test_alu_b_vv("vsubs.b.u.vv", 0xa0, 0x5f, 0x41);
test_alu_h_vv("vsubs.h.u.vv", 0x0000, 0x0001, 0x0000);
test_alu_h_vv("vsubs.h.u.vv", 0x007f, 0x0001, 0x007e);
test_alu_h_vv("vsubs.h.u.vv", 0x00ff, 0x0001, 0x00fe);
test_alu_h_vv("vsubs.h.u.vv", 0x7fff, 0x0001, 0x7ffe);
test_alu_h_vv("vsubs.h.u.vv", 0x7fff, 0x8000, 0x0000);
test_alu_h_vv("vsubs.h.u.vv", 0xffff, 0x0001, 0xfffe);
test_alu_h_vv("vsubs.h.u.vv", 0x0080, 0x0001, 0x007f);
test_alu_h_vv("vsubs.h.u.vv", 0x0080, 0x00ff, 0x0000);
test_alu_h_vv("vsubs.h.u.vv", 0x8000, 0x0001, 0x7fff);
test_alu_h_vv("vsubs.h.u.vv", 0x8000, 0x7fff, 0x0001);
test_alu_h_vv("vsubs.h.u.vv", 0x8000, 0x8000, 0x0000);
test_alu_h_vv("vsubs.h.u.vv", 0x8000, 0xffff, 0x0000);
test_alu_h_vv("vsubs.h.u.vv", 0x7fff, 0x7fff, 0x0000);
test_alu_h_vv("vsubs.h.u.vv", 0x7fff, 0x8000, 0x0000);
test_alu_h_vv("vsubs.h.u.vv", 0x7fff, 0xffff, 0x0000);
test_alu_h_vv("vsubs.h.u.vv", 0xffff, 0xffff, 0x0000);
test_alu_h_vv("vsubs.h.u.vv", 0xa05f, 0x5fa0, 0x40bf);
test_alu_w_vv("vsubs.w.u.vv", 0x00000000, 0x00000001, 0x00000000);
test_alu_w_vv("vsubs.w.u.vv", 0x000000ff, 0x00000001, 0x000000fe);
test_alu_w_vv("vsubs.w.u.vv", 0x0000ffff, 0x00000001, 0x0000fffe);
test_alu_w_vv("vsubs.w.u.vv", 0x7fffffff, 0x00000001, 0x7ffffffe);
test_alu_w_vv("vsubs.w.u.vv", 0x7fffffff, 0x80000000, 0x00000000);
test_alu_w_vv("vsubs.w.u.vv", 0xffffffff, 0x00000001, 0xfffffffe);
test_alu_w_vv("vsubs.w.u.vv", 0x80000000, 0x00000001, 0x7fffffff);
test_alu_w_vv("vsubs.w.u.vv", 0x80000000, 0x80000000, 0x00000000);
test_alu_w_vv("vsubs.w.u.vv", 0x80000000, 0x7fffffff, 0x00000001);
test_alu_w_vv("vsubs.w.u.vv", 0x80000000, 0xffffffff, 0x00000000);
test_alu_w_vv("vsubs.w.u.vv", 0x7fffffff, 0x80000000, 0x00000000);
test_alu_w_vv("vsubs.w.u.vv", 0x7fffffff, 0x7fffffff, 0x00000000);
test_alu_w_vv("vsubs.w.u.vv", 0x7fffffff, 0xffffffff, 0x00000000);
test_alu_w_vv("vsubs.w.u.vv", 0xffffffff, 0xffffffff, 0x00000000);
test_alu_w_vv("vsubs.w.u.vv", 0xa05f1234, 0x5fa0edcb, 0x40be2469);
test_aluw_h_vv("vsubw.h.vv", 0x00, 0x01, 0xffff);
test_aluw_h_vv("vsubw.h.vv", 0x7f, 0x01, 0x007e);
test_aluw_h_vv("vsubw.h.vv", 0x80, 0x7f, 0xff01);
test_aluw_h_vv("vsubw.h.vv", 0xff, 0x01, 0xfffe);
test_aluw_h_vv("vsubw.h.vv", 0x80, 0x01, 0xff7f);
test_aluw_h_vv("vsubw.h.vv", 0x80, 0x80, 0x0000);
test_aluw_h_vv("vsubw.h.vv", 0x80, 0xff, 0xff81);
test_aluw_h_vv("vsubw.h.vv", 0x7f, 0x7f, 0x0000);
test_aluw_h_vv("vsubw.h.vv", 0x7f, 0x80, 0x00ff);
test_aluw_h_vv("vsubw.h.vv", 0x7f, 0xff, 0x0080);
test_aluw_h_vv("vsubw.h.vv", 0xff, 0xff, 0x0000);
test_aluw_h_vv("vsubw.h.vv", 0xa0, 0x5f, 0xff41);
test_aluw_w_vv("vsubw.w.vv", 0x0000, 0x0001, 0xffffffff);
test_aluw_w_vv("vsubw.w.vv", 0x007f, 0x0001, 0x0000007e);
test_aluw_w_vv("vsubw.w.vv", 0x00ff, 0x0001, 0x000000fe);
test_aluw_w_vv("vsubw.w.vv", 0x7fff, 0x0001, 0x00007ffe);
test_aluw_w_vv("vsubw.w.vv", 0x8000, 0x7fff, 0xffff0001);
test_aluw_w_vv("vsubw.w.vv", 0xffff, 0x0001, 0xfffffffe);
test_aluw_w_vv("vsubw.w.vv", 0x0080, 0x0001, 0x0000007f);
test_aluw_w_vv("vsubw.w.vv", 0x0080, 0x00ff, 0xffffff81);
test_aluw_w_vv("vsubw.w.vv", 0x8000, 0x0001, 0xffff7fff);
test_aluw_w_vv("vsubw.w.vv", 0x8000, 0x8000, 0x00000000);
test_aluw_w_vv("vsubw.w.vv", 0x8000, 0xffff, 0xffff8001);
test_aluw_w_vv("vsubw.w.vv", 0x7fff, 0x7fff, 0x00000000);
test_aluw_w_vv("vsubw.w.vv", 0x7fff, 0x8000, 0x0000ffff);
test_aluw_w_vv("vsubw.w.vv", 0x7fff, 0xffff, 0x00008000);
test_aluw_w_vv("vsubw.w.vv", 0xffff, 0xffff, 0x00000000);
test_aluw_w_vv("vsubw.w.vv", 0xa05f, 0x5fa0, 0xffff40bf);
test_aluw_h_vv("vsubw.h.u.vv", 0x00, 0x01, 0xffff);
test_aluw_h_vv("vsubw.h.u.vv", 0x7f, 0x01, 0x007e);
test_aluw_h_vv("vsubw.h.u.vv", 0x80, 0x7f, 0x0001);
test_aluw_h_vv("vsubw.h.u.vv", 0xff, 0x01, 0x00fe);
test_aluw_h_vv("vsubw.h.u.vv", 0x80, 0x01, 0x007f);
test_aluw_h_vv("vsubw.h.u.vv", 0x80, 0x80, 0x0000);
test_aluw_h_vv("vsubw.h.u.vv", 0x80, 0xff, 0xff81);
test_aluw_h_vv("vsubw.h.u.vv", 0x7f, 0x7f, 0x0000);
test_aluw_h_vv("vsubw.h.u.vv", 0x7f, 0x80, 0xffff);
test_aluw_h_vv("vsubw.h.u.vv", 0x7f, 0xff, 0xff80);
test_aluw_h_vv("vsubw.h.u.vv", 0xff, 0xff, 0x0000);
test_aluw_h_vv("vsubw.h.u.vv", 0xa0, 0x5f, 0x0041);
test_aluw_w_vv("vsubw.w.u.vv", 0x0000, 0x0001, 0xffffffff);
test_aluw_w_vv("vsubw.w.u.vv", 0x007f, 0x0001, 0x0000007e);
test_aluw_w_vv("vsubw.w.u.vv", 0x00ff, 0x0001, 0x000000fe);
test_aluw_w_vv("vsubw.w.u.vv", 0x7fff, 0x0001, 0x00007ffe);
test_aluw_w_vv("vsubw.w.u.vv", 0xffff, 0x0001, 0x0000fffe);
test_aluw_w_vv("vsubw.w.u.vv", 0x0080, 0x0001, 0x0000007f);
test_aluw_w_vv("vsubw.w.u.vv", 0x0080, 0x00ff, 0xffffff81);
test_aluw_w_vv("vsubw.w.u.vv", 0x8000, 0x0001, 0x00007fff);
test_aluw_w_vv("vsubw.w.u.vv", 0x8000, 0x7fff, 0x00000001);
test_aluw_w_vv("vsubw.w.u.vv", 0x8000, 0x8000, 0x00000000);
test_aluw_w_vv("vsubw.w.u.vv", 0x8000, 0xffff, 0xffff8001);
test_aluw_w_vv("vsubw.w.u.vv", 0x7fff, 0x7fff, 0x00000000);
test_aluw_w_vv("vsubw.w.u.vv", 0x7fff, 0x8000, 0xffffffff);
test_aluw_w_vv("vsubw.w.u.vv", 0x7fff, 0xffff, 0xffff8000);
test_aluw_w_vv("vsubw.w.u.vv", 0xffff, 0xffff, 0x00000000);
test_aluw_w_vv("vsubw.w.u.vv", 0xa05f, 0x5fa0, 0x000040bf);
return 0;
}