Merge pull request #1382 from vlj/llvm

Llvm: Increase test runs and implement TWI/TW/TDI/TD
This commit is contained in:
Ivan 2015-12-30 17:46:42 +03:00
commit e748fc294b
3 changed files with 503 additions and 406 deletions

View file

@ -279,8 +279,8 @@ public:
namespace
{
template <class... Args>
void verify_instruction_against_interpreter_using_random_inputs(int s, int n, void (Compiler::*recomp_fn)(Args...), void (PPUInterpreter::*interp_fn)(Args...), Args... args)
template <int n, class... Args>
void verify_instruction_against_interpreter_using_random_inputs(void (Compiler::*recomp_fn)(Args...), void (PPUInterpreter::*interp_fn)(Args...), Args... args)
{
InitializeNativeTarget();
InitializeNativeTargetAsmPrinter();
@ -299,7 +299,7 @@ namespace
u32 addr = vm::alloc(1024, vm::memory_location_t::main);
PPUState input;
for (int i = s; i < (n + s); i++) {
for (int i = 0; i < n; i++) {
input.SetRandom(0x10000);
input.Store(*s_ppu_state);
@ -350,10 +350,10 @@ namespace
#define VERIFY_INSTRUCTION_AGAINST_INTERPRETER_USING_RANDOM_INPUT(fn, s, n, ...) \
#define TEST_INSTRUCTION_USING_RANDOM_INPUT(name, fn, s, n, ...) \
#define TEST_INSTRUCTION_USING_RANDOM_INPUT(name, fn, n, ...) \
TEST_METHOD(random_##name) \
{ \
verify_instruction_against_interpreter_using_random_inputs(s, n, &TestCompiler::fn, &PPUInterpreter::fn, ##__VA_ARGS__); \
verify_instruction_against_interpreter_using_random_inputs<n>(&TestCompiler::fn, &PPUInterpreter::fn, ##__VA_ARGS__); \
}
#define TEST_INSTRUCTION_USING_DETERMINED_INPUT(name, fn, ...) \
@ -374,411 +374,411 @@ namespace
TEST_CLASS(ppu_llvm_test_class)
{
TEST_INSTRUCTION_USING_RANDOM_INPUT(MFVSCR, MFVSCR, 0, 5, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTVSCR, MTVSCR, 0, 5, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDCUW, VADDCUW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDFP, VADDFP,0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDSBS, VADDSBS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDSHS, VADDSHS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDSWS, VADDSWS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDUBM, VADDUBM, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDUBS, VADDUBS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDUHM, VADDUHM, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDUHS, VADDUHS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDUWM, VADDUWM, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDUWS, VADDUWS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAND, VAND, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VANDC, VANDC, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAVGSB, VAVGSB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAVGSH, VAVGSH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAVGSW, VAVGSW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAVGUB, VAVGUB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAVGUH, VAVGUH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAVGUW, VAVGUW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCFSX1, VCFSX, 0, 5, 0u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCFSX2, VCFSX, 5, 5, 0u, 3u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCFUX1, VCFUX, 0, 5, 0u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCFUX2, VCFUX, 5, 5, 0u, 2u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPBFP1, VCMPBFP, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPBFP2, VCMPBFP, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPBFP_1, VCMPBFP_, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPBFP_2, VCMPBFP_, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQFP1, VCMPEQFP, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQFP2, VCMPEQFP, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQFP_1, VCMPEQFP_, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQFP_2, VCMPEQFP_, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUB1, VCMPEQUB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUB2, VCMPEQUB, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUB_1, VCMPEQUB_, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUB_2, VCMPEQUB_, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUH1, VCMPEQUH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUH2, VCMPEQUH, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUH_1, VCMPEQUH_, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUH_2, VCMPEQUH_, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUW1, VCMPEQUW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUW2, VCMPEQUW, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUW_1, VCMPEQUW_, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUW_2, VCMPEQUW_, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGEFP1, VCMPGEFP, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGEFP2, VCMPGEFP, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGEFP_1, VCMPGEFP_, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGEFP_2, VCMPGEFP_, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTFP1, VCMPGTFP, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTFP2, VCMPGTFP, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTFP_1, VCMPGTFP_, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTFP_2, VCMPGTFP_, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSB1, VCMPGTSB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSB2, VCMPGTSB, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSB_1, VCMPGTSB_, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSB_2, VCMPGTSB_, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSH1, VCMPGTSH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSH2, VCMPGTSH, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSH_1, VCMPGTSH_, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSH_2, VCMPGTSH_, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSW1, VCMPGTSW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSW2, VCMPGTSW, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSW_1, VCMPGTSW_, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSW_2, VCMPGTSW_, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUB1, VCMPGTUB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUB2, VCMPGTUB, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUB_1, VCMPGTUB_, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUB_2, VCMPGTUB_, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUH1, VCMPGTUH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUH2, VCMPGTUH, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUH_1, VCMPGTUH_, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUH_2, VCMPGTUH_, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUW1, VCMPGTUW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUW2, VCMPGTUW, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUW_1, VCMPGTUW_, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUW_2, VCMPGTUW_, 5, 5, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCTSXS1, VCTSXS, 0, 5, 0u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCTSXS2, VCTSXS, 5, 5, 0u, 3u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCTUXS1, VCTUXS, 0, 5, 0u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCTUXS2, VCTUXS, 5, 5, 0u, 3u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VEXPTEFP, VEXPTEFP, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VLOGEFP, VLOGEFP, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMADDFP, VMADDFP, 0, 5, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXFP, VMAXFP, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXSB, VMAXSB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXSH, VMAXSH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXSW, VMAXSW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXUB, VMAXUB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXUH, VMAXUH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXUW, VMAXUW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMHADDSHS, VMHADDSHS, 0, 5, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMHRADDSHS, VMHRADDSHS, 0, 5, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINFP, VMINFP, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINSB, VMINSB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINSH, VMINSH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINSW, VMINSW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINUB, VMINUB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINUH, VMINUH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINUW, VMINUW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMLADDUHM, VMLADDUHM, 0, 5, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMRGHB, VMRGHB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMRGHH, VMRGHH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMRGHW, VMRGHW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMRGLB, VMRGLB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMRGLH, VMRGLH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMRGLW, VMRGLW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMSUMMBM, VMSUMMBM, 0, 5, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMSUMSHM, VMSUMSHM, 0, 5, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMSUMSHS, VMSUMSHS, 0, 5, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMSUMUBM, VMSUMUBM, 0, 5, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMSUMUHM, VMSUMUHM, 0, 5, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMSUMUHS, VMSUMUHS, 0, 5, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULESB, VMULESB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULESH, VMULESH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULEUB, VMULEUB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULEUH, VMULEUH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULOSB, VMULOSB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULOSH, VMULOSH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULOUB, VMULOUB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULOUH, VMULOUH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VNMSUBFP, VNMSUBFP, 0, 5, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VNOR, VNOR, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VOR, VOR, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPERM, VPERM, 0, 5, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKPX, VPKPX, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKSHSS, VPKSHSS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKSHUS, VPKSHUS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKSWSS, VPKSWSS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKSWUS, VPKSWUS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKUHUM, VPKUHUM, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKUHUS, VPKUHUS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKUWUM, VPKUWUM, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKUWUS, VPKUWUS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VREFP, VREFP, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRFIM, VRFIM, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRFIN, VRFIN, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRFIP, VRFIP, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRFIZ, VRFIZ, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRLB, VRLB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRLH, VRLH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRLW, VRLW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRSQRTEFP, VRSQRTEFP, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSEL, VSEL, 0, 5, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSL, VSL, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSLB, VSLB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSLDOI, VSLDOI, 0, 5, 0u, 1u, 2u, 6u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSLH, VSLH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSLO, VSLO, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSLW, VSLW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSPLTB, VSPLTB, 0, 5, 0u, 3u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSPLTH, VSPLTH, 0, 5, 0u, 3u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSPLTISB, VSPLTISB, 0, 5, 0u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSPLTISH, VSPLTISH, 0, 5, 0u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSPLTISW, VSPLTISW, 0, 5, 0u, -12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSPLTW, VSPLTW, 0, 5, 0u, 3u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSR, VSR, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRAB, VSRAB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRAH, VSRAH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRAW, VSRAW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRB, VSRB, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRH, VSRH, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRO, VSRO, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRW, VSRW, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBFP, VSUBFP, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBSBS, VSUBSBS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBSHS, VSUBSHS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBSWS, VSUBSWS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBUBM, VSUBUBM, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBUBS, VSUBUBS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBUHM, VSUBUHM, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBUHS, VSUBUHS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBUWM, VSUBUWM, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBUWS, VSUBUWS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUMSWS, VSUMSWS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUM2SWS, VSUM2SWS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUM4SBS, VSUM4SBS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUM4SHS, VSUM4SHS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUM4UBS, VSUM4UBS, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VUPKHPX, VUPKHPX, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VUPKHSB, VUPKHSB, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VUPKHSH, VUPKHSH, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VUPKLPX, VUPKLPX, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VUPKLSB, VUPKLSB, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VUPKLSH, VUPKLSH, 0, 5, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VXOR, VXOR, 0, 5, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MFVSCR, MFVSCR, 50, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTVSCR, MTVSCR, 50, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDCUW, VADDCUW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDFP, VADDFP, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDSBS, VADDSBS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDSHS, VADDSHS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDSWS, VADDSWS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDUBM, VADDUBM, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDUBS, VADDUBS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDUHM, VADDUHM, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDUHS, VADDUHS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDUWM, VADDUWM, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VADDUWS, VADDUWS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAND, VAND, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VANDC, VANDC, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAVGSB, VAVGSB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAVGSH, VAVGSH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAVGSW, VAVGSW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAVGUB, VAVGUB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAVGUH, VAVGUH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VAVGUW, VAVGUW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCFSX1, VCFSX, 50, 0u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCFSX2, VCFSX, 50, 0u, 3u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCFUX1, VCFUX, 50, 0u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCFUX2, VCFUX, 50, 0u, 2u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPBFP1, VCMPBFP, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPBFP2, VCMPBFP, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPBFP_1, VCMPBFP_, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPBFP_2, VCMPBFP_, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQFP1, VCMPEQFP, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQFP2, VCMPEQFP, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQFP_1, VCMPEQFP_, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQFP_2, VCMPEQFP_, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUB1, VCMPEQUB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUB2, VCMPEQUB, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUB_1, VCMPEQUB_, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUB_2, VCMPEQUB_, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUH1, VCMPEQUH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUH2, VCMPEQUH, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUH_1, VCMPEQUH_, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUH_2, VCMPEQUH_, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUW1, VCMPEQUW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUW2, VCMPEQUW, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUW_1, VCMPEQUW_, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPEQUW_2, VCMPEQUW_, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGEFP1, VCMPGEFP, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGEFP2, VCMPGEFP, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGEFP_1, VCMPGEFP_, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGEFP_2, VCMPGEFP_, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTFP1, VCMPGTFP, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTFP2, VCMPGTFP, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTFP_1, VCMPGTFP_, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTFP_2, VCMPGTFP_, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSB1, VCMPGTSB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSB2, VCMPGTSB, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSB_1, VCMPGTSB_, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSB_2, VCMPGTSB_, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSH1, VCMPGTSH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSH2, VCMPGTSH, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSH_1, VCMPGTSH_, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSH_2, VCMPGTSH_, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSW1, VCMPGTSW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSW2, VCMPGTSW, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSW_1, VCMPGTSW_, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTSW_2, VCMPGTSW_, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUB1, VCMPGTUB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUB2, VCMPGTUB, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUB_1, VCMPGTUB_, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUB_2, VCMPGTUB_, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUH1, VCMPGTUH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUH2, VCMPGTUH, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUH_1, VCMPGTUH_, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUH_2, VCMPGTUH_, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUW1, VCMPGTUW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUW2, VCMPGTUW, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUW_1, VCMPGTUW_, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCMPGTUW_2, VCMPGTUW_, 50, 0u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCTSXS1, VCTSXS, 50, 0u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCTSXS2, VCTSXS, 50, 0u, 3u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCTUXS1, VCTUXS, 50, 0u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VCTUXS2, VCTUXS, 50, 0u, 3u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VEXPTEFP, VEXPTEFP, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VLOGEFP, VLOGEFP, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMADDFP, VMADDFP, 50, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXFP, VMAXFP, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXSB, VMAXSB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXSH, VMAXSH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXSW, VMAXSW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXUB, VMAXUB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXUH, VMAXUH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMAXUW, VMAXUW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMHADDSHS, VMHADDSHS, 50, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMHRADDSHS, VMHRADDSHS, 50, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINFP, VMINFP, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINSB, VMINSB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINSH, VMINSH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINSW, VMINSW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINUB, VMINUB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINUH, VMINUH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMINUW, VMINUW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMLADDUHM, VMLADDUHM, 50, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMRGHB, VMRGHB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMRGHH, VMRGHH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMRGHW, VMRGHW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMRGLB, VMRGLB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMRGLH, VMRGLH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMRGLW, VMRGLW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMSUMMBM, VMSUMMBM, 50, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMSUMSHM, VMSUMSHM, 50, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMSUMSHS, VMSUMSHS, 50, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMSUMUBM, VMSUMUBM, 50, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMSUMUHM, VMSUMUHM, 50, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMSUMUHS, VMSUMUHS, 50, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULESB, VMULESB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULESH, VMULESH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULEUB, VMULEUB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULEUH, VMULEUH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULOSB, VMULOSB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULOSH, VMULOSH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULOUB, VMULOUB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VMULOUH, VMULOUH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VNMSUBFP, VNMSUBFP, 50, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VNOR, VNOR, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VOR, VOR, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPERM, VPERM, 50, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKPX, VPKPX, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKSHSS, VPKSHSS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKSHUS, VPKSHUS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKSWSS, VPKSWSS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKSWUS, VPKSWUS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKUHUM, VPKUHUM, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKUHUS, VPKUHUS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKUWUM, VPKUWUM, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VPKUWUS, VPKUWUS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VREFP, VREFP, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRFIM, VRFIM, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRFIN, VRFIN, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRFIP, VRFIP, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRFIZ, VRFIZ, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRLB, VRLB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRLH, VRLH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRLW, VRLW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VRSQRTEFP, VRSQRTEFP, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSEL, VSEL, 50, 0u, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSL, VSL, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSLB, VSLB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSLDOI, VSLDOI, 50, 0u, 1u, 2u, 6u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSLH, VSLH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSLO, VSLO, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSLW, VSLW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSPLTB, VSPLTB, 50, 0u, 3u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSPLTH, VSPLTH, 50, 0u, 3u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSPLTISB, VSPLTISB, 50, 0u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSPLTISH, VSPLTISH, 50, 0u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSPLTISW, VSPLTISW, 50, 0u, -12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSPLTW, VSPLTW, 50, 0u, 3u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSR, VSR, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRAB, VSRAB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRAH, VSRAH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRAW, VSRAW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRB, VSRB, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRH, VSRH, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRO, VSRO, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSRW, VSRW, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBFP, VSUBFP, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBSBS, VSUBSBS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBSHS, VSUBSHS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBSWS, VSUBSWS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBUBM, VSUBUBM, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBUBS, VSUBUBS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBUHM, VSUBUHM, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBUHS, VSUBUHS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBUWM, VSUBUWM, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUBUWS, VSUBUWS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUMSWS, VSUMSWS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUM2SWS, VSUM2SWS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUM4SBS, VSUM4SBS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUM4SHS, VSUM4SHS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VSUM4UBS, VSUM4UBS, 50, 0u, 1u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VUPKHPX, VUPKHPX, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VUPKHSB, VUPKHSB, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VUPKHSH, VUPKHSH, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VUPKLPX, VUPKLPX, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VUPKLSB, VUPKLSB, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VUPKLSH, VUPKLSH, 50, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(VXOR, VXOR, 50, 0u, 1u, 2u);
// TODO: Rest of the vector instructions
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULLI, MULLI, 0, 5, 1u, 2u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULLI, MULLI, 50, 1u, 2u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFIC1, SUBFIC, 0, 5, 1u, 2u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFIC2, SUBFIC, 10, 5, 1u, 2u, -12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFIC3, SUBFIC, 15, 5, 1u, 2u, 32767);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFIC4, SUBFIC, 20, 5, 1u, 2u, -32767);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFIC5, SUBFIC, 25, 5, 1u, 2u, 0);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFIC6, SUBFIC, 30, 5, 0u, 1u, -1);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFIC1, SUBFIC, 50, 1u, 2u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFIC2, SUBFIC, 10, 1u, 2u, -12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFIC3, SUBFIC, 15, 1u, 2u, 32767);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFIC4, SUBFIC, 20, 1u, 2u, -32767);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFIC5, SUBFIC, 25, 1u, 2u, 0);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFIC6, SUBFIC, 30, 0u, 1u, -1);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMPLI1, CMPLI, 0, 5, 1u, 0u, 7u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMPLI2, CMPLI, 5, 5, 1u, 1u, 7u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMPI1, CMPI, 0, 5, 5u, 0u, 7u, -12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMPI2, CMPI, 5, 5, 5u, 1u, 7u, -12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDIC, ADDIC, 0, 5, 1u, 2u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDIC_, ADDIC_, 0, 5, 1u, 2u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDI1, ADDI, 0, 5, 1u, 2u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDI2, ADDI, 5, 5, 0u, 2u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDIS1, ADDIS, 0, 5, 1u, 2u, -12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDIS2, ADDIS, 5, 5, 0u, 2u, -12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMPLI1, CMPLI, 50, 1u, 0u, 7u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMPLI2, CMPLI, 50, 1u, 1u, 7u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMPI1, CMPI, 50, 5u, 0u, 7u, -12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMPI2, CMPI, 50, 5u, 1u, 7u, -12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDIC, ADDIC, 50, 1u, 2u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDIC_, ADDIC_, 50, 1u, 2u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDI1, ADDI, 50, 1u, 2u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDI2, ADDI, 50, 0u, 2u, 12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDIS1, ADDIS, 50, 1u, 2u, -12345);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDIS2, ADDIS, 50, 0u, 2u, -12345);
// TODO: BC
// TODO: SC
// TODO: B
TEST_INSTRUCTION_USING_RANDOM_INPUT(MCRF1, MCRF, 0, 5, 0u, 7u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MCRF2, MCRF, 5, 5, 6u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MCRF1, MCRF, 50, 0u, 7u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MCRF2, MCRF, 50, 6u, 2u);
// TODO: BCLR
TEST_INSTRUCTION_USING_RANDOM_INPUT(CRNOR, CRNOR, 0, 5, 0u, 7u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CRANDC, CRANDC, 0, 5, 5u, 6u, 7u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ISYNC, ISYNC, 0, 5);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CRXOR, CRXOR, 0, 5, 7u, 7u, 7u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CRNAND, CRNAND, 0, 5, 3u, 4u, 5u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CRAND, CRAND, 0, 5, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CREQV, CREQV, 0, 5, 2u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CRORC, CRORC, 0, 5, 3u, 4u, 5u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CROR, CROR, 0, 5, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CRNOR, CRNOR, 50, 0u, 7u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CRANDC, CRANDC, 50, 5u, 6u, 7u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ISYNC, ISYNC, 5);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CRXOR, CRXOR, 50, 7u, 7u, 7u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CRNAND, CRNAND, 50, 3u, 4u, 5u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CRAND, CRAND, 50, 1u, 2u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CREQV, CREQV, 50, 2u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CRORC, CRORC, 50, 3u, 4u, 5u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CROR, CROR, 50, 6u, 7u, 0u);
// TODO: BCCTR
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLWIMI1, RLWIMI, 0, 5, 7u, 8u, 9u, 12u, 25u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLWIMI2, RLWIMI, 5, 5, 21u, 22u, 21u, 18u, 24u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLWINM1, RLWINM, 0, 5, 7u, 8u, 9u, 12u, 25u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLWINM2, RLWINM, 5, 5, 21u, 22u, 21u, 18u, 24u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLWNM1, RLWNM, 0, 5, 7u, 8u, 9u, 12u, 25u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLWNM2, RLWNM, 5, 5, 21u, 22u, 21u, 18u, 24u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ORI, ORI, 0, 5, 25u, 29u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ORIS, ORIS, 0, 5, 7u, 31u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(XORI, XORI, 0, 5, 0u, 19u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(XORIS, XORIS, 0, 5, 3u, 14u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ANDI_, ANDI_, 0, 5, 16u, 7u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ANDIS_, ANDIS_, 0, 5, 23u, 21u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDICL1, RLDICL, 0, 5, 7u, 8u, 9u, 12u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDICL2, RLDICL, 5, 5, 21u, 22u, 43u, 43u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDICR1, RLDICR, 0, 5, 7u, 8u, 0u, 12u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDICR2, RLDICR, 5, 5, 21u, 22u, 63u, 43u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDIC1, RLDIC, 0, 5, 7u, 8u, 9u, 12u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDIC2, RLDIC, 5, 5, 21u, 22u, 23u, 43u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDIMI1, RLDIMI, 0, 5, 7u, 8u, 9u, 12u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDIMI2, RLDIMI, 5, 5, 21u, 22u, 23u, 43u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDC_LR1, RLDC_LR, 0, 5, 7u, 8u, 9u, 12u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDC_LR2, RLDC_LR, 5, 5, 21u, 22u, 23u, 43u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMP1, CMP, 0, 5, 3u, 0u, 9u, 31u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMP2, CMP, 5, 5, 6u, 1u, 23u, 14u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFC1, SUBFC, 0, 5, 0u, 1u, 2u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFC2, SUBFC, 5, 5, 0u, 1u, 2u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDC1, ADDC, 0, 5, 0u, 1u, 2u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDC2, ADDC, 5, 5, 0u, 1u, 2u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHDU1, MULHDU, 0, 5, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHDU2, MULHDU, 5, 5, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHWU1, MULHWU, 0, 5, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHWU2, MULHWU, 5, 5, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLWIMI1, RLWIMI, 50, 7u, 8u, 9u, 12u, 25u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLWIMI2, RLWIMI, 50, 21u, 22u, 21u, 18u, 24u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLWINM1, RLWINM, 50, 7u, 8u, 9u, 12u, 25u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLWINM2, RLWINM, 50, 21u, 22u, 21u, 18u, 24u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLWNM1, RLWNM, 50, 7u, 8u, 9u, 12u, 25u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLWNM2, RLWNM, 50, 21u, 22u, 21u, 18u, 24u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ORI, ORI, 50, 25u, 29u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ORIS, ORIS, 50, 7u, 31u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(XORI, XORI, 50, 0u, 19u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(XORIS, XORIS, 50, 3u, 14u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ANDI_, ANDI_, 50, 16u, 7u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ANDIS_, ANDIS_, 50, 23u, 21u, 12345u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDICL1, RLDICL, 50, 7u, 8u, 9u, 12u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDICL2, RLDICL, 50, 21u, 22u, 43u, 43u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDICR1, RLDICR, 50, 7u, 8u, 0u, 12u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDICR2, RLDICR, 50, 21u, 22u, 63u, 43u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDIC1, RLDIC, 50, 7u, 8u, 9u, 12u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDIC2, RLDIC, 50, 21u, 22u, 23u, 43u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDIMI1, RLDIMI, 50, 7u, 8u, 9u, 12u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDIMI2, RLDIMI, 50, 21u, 22u, 23u, 43u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDC_LR1, RLDC_LR, 50, 7u, 8u, 9u, 12u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(RLDC_LR2, RLDC_LR, 50, 21u, 22u, 23u, 43u, 1u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMP1, CMP, 50, 3u, 0u, 9u, 31u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMP2, CMP, 50, 6u, 1u, 23u, 14u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFC1, SUBFC, 50, 0u, 1u, 2u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFC2, SUBFC, 50, 0u, 1u, 2u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDC1, ADDC, 50, 0u, 1u, 2u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDC2, ADDC, 50, 0u, 1u, 2u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHDU1, MULHDU, 50, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHDU2, MULHDU, 50, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHWU1, MULHWU, 50, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHWU2, MULHWU, 50, 21u, 22u, 23u, 1u);
// TODO: MFOCRF
TEST_INSTRUCTION_USING_RANDOM_INPUT(SLW1, SLW, 0, 5, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SLW2, SLW, 5, 5, 5u, 6u, 7u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CNTLZW1, CNTLZW, 0, 5, 5u, 6u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CNTLZW2, CNTLZW, 5, 5, 5u, 6u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SLD1, SLD, 0, 5, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SLD2, SLD, 5, 5, 5u, 6u, 7u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(AND1, AND, 0, 5, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(AND2, AND, 5, 5, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMPL1, CMPL, 0, 5, 3u, 0u, 9u, 31u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMPL2, CMPL, 5, 5, 6u, 1u, 23u, 14u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBF1, SUBF, 0, 5, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBF2, SUBF, 5, 5, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CNTLZD1, CNTLZD, 0, 5, 5u, 6u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CNTLZD2, CNTLZD, 5, 5, 5u, 6u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ANDC1, ANDC, 0, 5, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ANDC2, ANDC, 5, 5, 5u, 6u, 7u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHD1, MULHD, 0, 5, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHD2, MULHD, 5, 5, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHW1, MULHW, 0, 5, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHW2, MULHW, 5, 5, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(NEG1, NEG, 0, 5, 7u, 8u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(NEG2, NEG, 5, 5, 21u, 22u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(NOR1, NOR, 0, 5, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(NOR2, NOR, 5, 5, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFE1, SUBFE, 0, 5, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFE2, SUBFE, 5, 5, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDE1, ADDE, 0, 5, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDE2, ADDE, 5, 5, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTOCRF1, MTOCRF, 0, 5, 7u, 8u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTOCRF2, MTOCRF, 5, 5, 0u, 22u, 1u)
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDZE1, ADDZE, 0, 5, 7u, 8u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDZE2, ADDZE, 5, 5, 21u, 22u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFZE1, SUBFZE, 0, 5, 7u, 8u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFZE2, SUBFZE, 5, 5, 21u, 22u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFME1, SUBFME, 0, 5, 7u, 8u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFME2, SUBFME, 5, 5, 21u, 22u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULLD1, MULLD, 0, 5, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULLD2, MULLD, 5, 5, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDME1, ADDME, 0, 5, 7u, 8u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDME2, ADDME, 5, 5, 21u, 22u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULLW1, MULLW, 0, 5, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULLW2, MULLW, 5, 5, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADD1, ADD, 0, 5, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADD2, ADD, 5, 5, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EQV1, EQV, 0, 5, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EQV2, EQV, 5, 5, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(XOR1, XOR, 0, 5, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(XOR2, XOR, 5, 5, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MFSPR1, MFSPR, 0, 5, 5u, 0x20u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MFSPR2, MFSPR, 5, 5, 5u, 0x100u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MFSPR3, MFSPR, 10, 5, 5u, 0x120u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MFSPR4, MFSPR, 15, 5, 5u, 0x8u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SLW1, SLW, 50, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SLW2, SLW, 50, 5u, 6u, 7u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CNTLZW1, CNTLZW, 50, 5u, 6u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CNTLZW2, CNTLZW, 50, 5u, 6u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SLD1, SLD, 50, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SLD2, SLD, 50, 5u, 6u, 7u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(AND1, AND, 50, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(AND2, AND, 50, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMPL1, CMPL, 50, 3u, 0u, 9u, 31u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CMPL2, CMPL, 50, 6u, 1u, 23u, 14u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBF1, SUBF, 50, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBF2, SUBF, 50, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CNTLZD1, CNTLZD, 50, 5u, 6u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(CNTLZD2, CNTLZD, 50, 5u, 6u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ANDC1, ANDC, 50, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ANDC2, ANDC, 50, 5u, 6u, 7u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHD1, MULHD, 50, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHD2, MULHD, 50, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHW1, MULHW, 50, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULHW2, MULHW, 50, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(NEG1, NEG, 50, 7u, 8u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(NEG2, NEG, 50, 21u, 22u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(NOR1, NOR, 50, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(NOR2, NOR, 50, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFE1, SUBFE, 50, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFE2, SUBFE, 50, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDE1, ADDE, 50, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDE2, ADDE, 50, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTOCRF1, MTOCRF, 50, 7u, 8u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTOCRF2, MTOCRF, 50, 0u, 22u, 1u)
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDZE1, ADDZE, 50, 7u, 8u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDZE2, ADDZE, 50, 21u, 22u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFZE1, SUBFZE, 50, 7u, 8u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFZE2, SUBFZE, 50, 21u, 22u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFME1, SUBFME, 50, 7u, 8u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SUBFME2, SUBFME, 50, 21u, 22u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULLD1, MULLD, 50, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULLD2, MULLD, 50, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDME1, ADDME, 50, 7u, 8u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADDME2, ADDME, 50, 21u, 22u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULLW1, MULLW, 50, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MULLW2, MULLW, 50, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADD1, ADD, 50, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ADD2, ADD, 50, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EQV1, EQV, 50, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EQV2, EQV, 50, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(XOR1, XOR, 50, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(XOR2, XOR, 50, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MFSPR1, MFSPR, 50, 5u, 0x20u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MFSPR2, MFSPR, 50, 5u, 0x100u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MFSPR3, MFSPR, 10, 5u, 0x120u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MFSPR4, MFSPR, 15, 5u, 0x8u);
// TODO: MFTB
TEST_INSTRUCTION_USING_RANDOM_INPUT(ORC1, ORC, 0, 5, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ORC2, ORC, 5, 5, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(OR1, OR, 0, 5, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(OR2, OR, 5, 5, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVDU1, DIVDU, 0, 5, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVDU2, DIVDU, 5, 5, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVWU1, DIVWU, 0, 5, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVWU2, DIVWU, 5, 5, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTSPR1, MTSPR, 0, 5, 0x20u, 5u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTSPR2, MTSPR, 5, 5, 0x100u, 5u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTSPR3, MTSPR, 10, 5, 0x120u, 5u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTSPR4, MTSPR, 15, 5, 0x8u, 5u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(NAND1, NAND, 0, 5, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(NAND2, NAND, 5, 5, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVD1, DIVD, 0, 5, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVD2, DIVD, 5, 5, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVW1, DIVW, 0, 5, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVW2, DIVW, 5, 5, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRW1, SRW, 0, 5, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRW2, SRW, 5, 5, 5u, 6u, 7u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRD1, SRD, 0, 5, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRD2, SRD, 5, 5, 5u, 6u, 7u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ORC1, ORC, 50, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(ORC2, ORC, 50, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(OR1, OR, 50, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(OR2, OR, 50, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVDU1, DIVDU, 50, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVDU2, DIVDU, 50, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVWU1, DIVWU, 50, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVWU2, DIVWU, 50, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTSPR1, MTSPR, 50, 0x20u, 5u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTSPR2, MTSPR, 50, 0x100u, 5u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTSPR3, MTSPR, 10, 0x120u, 5u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTSPR4, MTSPR, 15, 0x8u, 5u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(NAND1, NAND, 50, 7u, 8u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(NAND2, NAND, 50, 21u, 22u, 23u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVD1, DIVD, 50, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVD2, DIVD, 50, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVW1, DIVW, 50, 7u, 8u, 9u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(DIVW2, DIVW, 50, 21u, 22u, 23u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRW1, SRW, 50, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRW2, SRW, 50, 5u, 6u, 7u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRD1, SRD, 50, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRD2, SRD, 50, 5u, 6u, 7u, 1u);
// TODO: SYNC
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAW1, SRAW, 0, 5, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAW2, SRAW, 5, 5, 5u, 6u, 7u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAD1, SRAD, 0, 5, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAD2, SRAD, 5, 5, 5u, 6u, 7u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAWI1, SRAWI, 0, 5, 5u, 6u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAWI2, SRAWI, 5, 5, 5u, 6u, 12u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAWI3, SRAWI, 10, 5, 5u, 6u, 22u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAWI4, SRAWI, 15, 5, 5u, 6u, 31u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRADI11, SRADI1, 0, 5, 5u, 6u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRADI12, SRADI1, 5, 5, 5u, 6u, 12u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRADI13, SRADI1, 10, 5, 5u, 6u, 48u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRADI14, SRADI1, 15, 5, 5u, 6u, 63u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EIEIO, EIEIO, 0, 5);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EXTSH1, EXTSH, 0, 5, 6u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EXTSH2, EXTSH, 5, 5, 6u, 9u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EXTSB1, EXTSB, 0, 5, 3u, 5u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EXTSB2, EXTSB, 5, 5, 3u, 5u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EXTSW1, EXTSW, 0, 5, 25u, 29u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EXTSW2, EXTSW, 5, 5, 25u, 29u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAW1, SRAW, 50, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAW2, SRAW, 50, 5u, 6u, 7u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAD1, SRAD, 50, 5u, 6u, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAD2, SRAD, 50, 5u, 6u, 7u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAWI1, SRAWI, 50, 5u, 6u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAWI2, SRAWI, 50, 5u, 6u, 12u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAWI3, SRAWI, 10, 5u, 6u, 22u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRAWI4, SRAWI, 15, 5u, 6u, 31u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRADI11, SRADI1, 50, 5u, 6u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRADI12, SRADI1, 50, 5u, 6u, 12u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRADI13, SRADI1, 10, 5u, 6u, 48u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(SRADI14, SRADI1, 15, 5u, 6u, 63u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EIEIO, EIEIO, 5);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EXTSH1, EXTSH, 50, 6u, 9u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EXTSH2, EXTSH, 50, 6u, 9u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EXTSB1, EXTSB, 50, 3u, 5u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EXTSB2, EXTSB, 50, 3u, 5u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EXTSW1, EXTSW, 50, 25u, 29u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(EXTSW2, EXTSW, 50, 25u, 29u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FDIVS, FDIVS, 0, 5, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FSUBS, FSUBS, 0, 5, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FADDS, FADDS, 0, 5, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FSQRTS, FSQRTS, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FRES, FRES, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMULS, FMULS, 0, 5, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMADDS, FMADDS, 0, 5, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMSUBS, FMSUBS, 0, 5, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FNMSUBS, FNMSUBS, 0, 5, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FNMADDS, FNMADDS, 0, 5, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB11, MTFSB1, 0, 5, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB12, MTFSB1, 5, 5, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB13, MTFSB1, 10, 5, 25u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB14, MTFSB1, 15, 5, 31u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MCRFS1, MCRFS, 0, 5, 0u, 7u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MCRFS2, MCRFS, 5, 5, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MCRFS3, MCRFS, 10, 5, 5u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MCRFS4, MCRFS, 15, 5, 5u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB01, MTFSB0, 0, 5, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB02, MTFSB0, 5, 5, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB03, MTFSB0, 10, 5, 25u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB04, MTFSB0, 15, 5, 31u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSFI1, MTFSFI, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSFI2, MTFSFI, 5, 5, 2u, 6u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSFI3, MTFSFI, 10, 5, 5u, 11u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSFI4, MTFSFI, 15, 5, 7u, 14u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MFFS, MFFS, 0, 5, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSF1, MTFSF, 0, 5, 0u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSF2, MTFSF, 5, 5, 2u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSF3, MTFSF, 10, 5, 5u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSF4, MTFSF, 15, 5, 7u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FCMPU, FCMPU, 0, 5, 5u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FRSP, FRSP, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FCTIW, FCTIW, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FCTIWZ, FCTIWZ, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FDIV, FDIV, 0, 5, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FSUB, FSUB, 0, 5, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FADD, FADD, 0, 5, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FSQRT, FSQRT, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FSEL, FSEL, 0, 5, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMUL, FMUL, 0, 5, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FRSQRTE, FRSQRTE, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMSUB, FMSUB, 0, 5, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMADD, FMADD, 0, 5, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FNMSUB, FNMSUB, 0, 5, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FNMADD, FNMADD, 0, 5, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FCMPO, FCMPO, 0, 5, 3u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FNEG, FNEG, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMR, FMR, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FNABS, FNABS, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FABS, FABS, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FCTID1, FCTID, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FCFID2, FCTID, 0, 5, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FDIVS, FDIVS, 50, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FSUBS, FSUBS, 50, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FADDS, FADDS, 50, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FSQRTS, FSQRTS, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FRES, FRES, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMULS, FMULS, 50, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMADDS, FMADDS, 50, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMSUBS, FMSUBS, 50, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FNMSUBS, FNMSUBS, 50, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FNMADDS, FNMADDS, 50, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB11, MTFSB1, 50, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB12, MTFSB1, 50, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB13, MTFSB1, 10, 25u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB14, MTFSB1, 15, 31u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MCRFS1, MCRFS, 50, 0u, 7u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MCRFS2, MCRFS, 50, 7u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MCRFS3, MCRFS, 10, 5u, 2u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MCRFS4, MCRFS, 15, 5u, 3u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB01, MTFSB0, 50, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB02, MTFSB0, 50, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB03, MTFSB0, 10, 25u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSB04, MTFSB0, 15, 31u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSFI1, MTFSFI, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSFI2, MTFSFI, 50, 2u, 6u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSFI3, MTFSFI, 10, 5u, 11u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSFI4, MTFSFI, 15, 7u, 14u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MFFS, MFFS, 50, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSF1, MTFSF, 50, 0u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSF2, MTFSF, 50, 2u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSF3, MTFSF, 10, 5u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(MTFSF4, MTFSF, 15, 7u, 0u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FCMPU, FCMPU, 50, 5u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FRSP, FRSP, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FCTIW, FCTIW, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FCTIWZ, FCTIWZ, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FDIV, FDIV, 50, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FSUB, FSUB, 50, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FADD, FADD, 50, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FSQRT, FSQRT, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FSEL, FSEL, 50, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMUL, FMUL, 50, 0u, 1u, 2u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FRSQRTE, FRSQRTE, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMSUB, FMSUB, 50, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMADD, FMADD, 50, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FNMSUB, FNMSUB, 50, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FNMADD, FNMADD, 50, 0u, 1u, 2u, 3u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FCMPO, FCMPO, 50, 3u, 0u, 1u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FNEG, FNEG, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FMR, FMR, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FNABS, FNABS, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FABS, FABS, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FCTID1, FCTID, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_RANDOM_INPUT(FCFID2, FCTID, 50, 0u, 1u, 0u);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(SUBFIC1, SUBFIC, 1u, 2u, -32767);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(SUBFIC2, SUBFIC, 1u, 2u, -1);
@ -911,9 +911,9 @@ TEST_CLASS(ppu_llvm_test_class)
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STWX1, STWX, 3u, 0u, 23u);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STWX2, STWX, 3u, 14u, 23u);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STWUX, STWUX, 3u, 14u, 23u);
// TEST_INSTRUCTION_USING_DETERMINED_INPUT(STVLX1, STVLX, 0u, 0u, 23u); // Crashes
// TEST_INSTRUCTION_USING_DETERMINED_INPUT(STVLX2, STVLX, 0u, 14u, 23u); // Crashes
// TEST_INSTRUCTION_USING_DETERMINED_INPUT(STVLX3, STVLX, 0u, 21u, 23u); // Crashes
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STVLX1, STVLX, 0u, 0u, 23u);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STVLX2, STVLX, 0u, 14u, 23u);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STVLX3, STVLX, 0u, 21u, 23u);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STWBRX, STWBRX, 3u, 14u, 23u);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STD1, STD, 3u, 0u, 0x10000);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STD2, STD, 3u, 14u, 0x10000);
@ -929,8 +929,8 @@ TEST_CLASS(ppu_llvm_test_class)
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STFSX1, STFSX, 3u, 0u, 23u);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STFSX2, STFSX, 3u, 14u, 23u);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STVRX1, STVRX, 0u, 0u, 23u);
// TEST_INSTRUCTION_USING_DETERMINED_INPUT(STVRX2, STVRX, 0u, 14u, 23u); // Crashes
// TEST_INSTRUCTION_USING_DETERMINED_INPUT(STVRX3, STVRX, 0u, 21u, 23u); // Crashes
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STVRX2, STVRX, 0u, 14u, 23u);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STVRX3, STVRX, 0u, 21u, 23u);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STFSUX, STFSUX, 3u, 14u, 23u);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STFD1, STFD, 3u, 0u, 0x10000);
TEST_INSTRUCTION_USING_DETERMINED_INPUT(STFD2, STFD, 3u, 14u, 0x10000);

View file

@ -362,6 +362,17 @@ static void wrapped_fast_stop(PPUThread &CPU)
CPU.fast_stop();
}
static void wrapped_trap(PPUThread &CPU, u32) noexcept {
try
{
throw EXCEPTION("trap");
}
catch (...)
{
CPU.pending_exception = std::current_exception();
}
}
std::pair<Executable, llvm::ExecutionEngine *> RecompilationEngine::compile(const std::string & name, u32 start_address, u32 instruction_count) {
std::unique_ptr<llvm::Module> module = Compiler::create_module(m_llvm_context);
@ -375,6 +386,7 @@ std::pair<Executable, llvm::ExecutionEngine *> RecompilationEngine::compile(cons
function_ptrs["get_timebased_time"] = reinterpret_cast<void*>(get_timebased_time);
function_ptrs["wrappedExecutePPUFuncByIndex"] = reinterpret_cast<void*>(wrappedExecutePPUFuncByIndex);
function_ptrs["wrappedDoSyscall"] = reinterpret_cast<void*>(wrappedDoSyscall);
function_ptrs["trap"] = reinterpret_cast<void*>(wrapped_trap);
#define REGISTER_FUNCTION_PTR(name) \
function_ptrs[#name] = reinterpret_cast<void*>(PPUInterpreter::name##_impl);

View file

@ -48,11 +48,67 @@ void Compiler::NOP() {
}
void Compiler::TDI(u32 to, u32 ra, s32 simm16) {
CompilationError("TDI");
llvm::Value *gpr_a = GetGpr(ra);
llvm::Value *cst_simm16 = m_ir_builder->getInt64(simm16);
llvm::Value *trap_condition = m_ir_builder->getFalse();
if (to & 0x10)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpSLT(gpr_a, cst_simm16));
if (to & 0x8)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpSGT(gpr_a, cst_simm16));
if (to & 0x4)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpEQ(gpr_a, cst_simm16));
if (to & 0x2)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpULT(gpr_a, cst_simm16));
if (to & 0x1)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpUGT(gpr_a, cst_simm16));
llvm::BasicBlock *trap_block = GetBasicBlockFromAddress(m_state.current_instruction_address, "trap_block");
llvm::BasicBlock *normal_execution = GetBasicBlockFromAddress(m_state.current_instruction_address, "normal_execution");
m_ir_builder->CreateCondBr(trap_condition, trap_block, normal_execution);
m_ir_builder->SetInsertPoint(trap_block);
Call<void>("trap");
m_ir_builder->CreateRet(m_ir_builder->getInt32(ExecutionStatus::ExecutionStatusPropagateException));
m_ir_builder->SetInsertPoint(normal_execution);
}
void Compiler::TWI(u32 to, u32 ra, s32 simm16) {
CompilationError("TWI");
llvm::Value *gpr_a = GetGpr(ra, 32);
llvm::Value *cst_simm16 = m_ir_builder->getInt32(simm16);
llvm::Value *trap_condition = m_ir_builder->getFalse();
if (to & 0x10)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpSLT(gpr_a, cst_simm16));
if (to & 0x8)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpSGT(gpr_a, cst_simm16));
if (to & 0x4)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpEQ(gpr_a, cst_simm16));
if (to & 0x2)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpULT(gpr_a, cst_simm16));
if (to & 0x1)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpUGT(gpr_a, cst_simm16));
llvm::BasicBlock *trap_block = GetBasicBlockFromAddress(m_state.current_instruction_address, "trap_block");
llvm::BasicBlock *normal_execution = GetBasicBlockFromAddress(m_state.current_instruction_address, "normal_execution");
m_ir_builder->CreateCondBr(trap_condition, trap_block, normal_execution);
m_ir_builder->SetInsertPoint(trap_block);
Call<void>("trap");
m_ir_builder->CreateRet(m_ir_builder->getInt32(ExecutionStatus::ExecutionStatusPropagateException));
m_ir_builder->SetInsertPoint(normal_execution);
}
void Compiler::MFVSCR(u32 vd) {
@ -2198,7 +2254,35 @@ void Compiler::CMP(u32 crfd, u32 l, u32 ra, u32 rb) {
}
void Compiler::TW(u32 to, u32 ra, u32 rb) {
CompilationError("TW");
llvm::Value *gpr_a = GetGpr(ra, 32);
llvm::Value *gpr_b = GetGpr(rb, 32);
llvm::Value *trap_condition = m_ir_builder->getFalse();
if (to & 0x10)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpSLT(gpr_a, gpr_b));
if (to & 0x8)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpSGT(gpr_a, gpr_b));
if (to & 0x4)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpEQ(gpr_a, gpr_b));
if (to & 0x2)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpULT(gpr_a, gpr_b));
if (to & 0x1)
trap_condition = m_ir_builder->CreateOr(trap_condition,
m_ir_builder->CreateICmpUGT(gpr_a, gpr_b));
llvm::BasicBlock *trap_block = GetBasicBlockFromAddress(m_state.current_instruction_address, "trap_block");
llvm::BasicBlock *normal_execution = GetBasicBlockFromAddress(m_state.current_instruction_address, "normal_execution");
m_ir_builder->CreateCondBr(trap_condition, trap_block, normal_execution);
m_ir_builder->SetInsertPoint(trap_block);
Call<void>("trap");
m_ir_builder->CreateRet(m_ir_builder->getInt32(ExecutionStatus::ExecutionStatusPropagateException));
m_ir_builder->SetInsertPoint(normal_execution);
}
void Compiler::LVSL(u32 vd, u32 ra, u32 rb) {
@ -2555,7 +2639,8 @@ void Compiler::ANDC(u32 ra, u32 rs, u32 rb, u32 rc) {
}
void Compiler::TD(u32 to, u32 ra, u32 rb) {
CompilationError("TD");
Call<void>("trap");
m_ir_builder->CreateRet(m_ir_builder->getInt32(ExecutionStatus::ExecutionStatusPropagateException));
}
void Compiler::LVEWX(u32 vd, u32 ra, u32 rb) {