fuzz_arm: Add vsub test
This commit is contained in:
parent
4c5de3905b
commit
c6c980dfd7
3 changed files with 13490 additions and 10 deletions
|
@ -459,34 +459,58 @@ struct VfpTest {
|
||||||
u32 final_fpscr;
|
u32 final_fpscr;
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_CASE("vfp: vadd", "[vfp]") {
|
static void RunVfpTests(u32 instr, std::vector<VfpTest> tests) {
|
||||||
Dynarmic::Jit jit{GetUserCallbacks()};
|
Dynarmic::Jit jit{GetUserCallbacks()};
|
||||||
code_mem.fill({});
|
code_mem.fill({});
|
||||||
code_mem[0] = 0xee323a01; // vadd.f32 s6, s4, s2
|
code_mem[0] = instr;
|
||||||
code_mem[1] = 0xeafffffe; // b +#0
|
code_mem[1] = 0xeafffffe; // b +#0
|
||||||
|
|
||||||
std::vector<VfpTest> tests {
|
printf("vfp test 0x%08x\r", instr);
|
||||||
#include "vadd.vfp_tests.inc"
|
|
||||||
};
|
|
||||||
|
|
||||||
for (const auto& test : tests) {
|
for (const auto& test : tests) {
|
||||||
jit.Regs()[15] = 0;
|
jit.Regs()[15] = 0;
|
||||||
jit.Cpsr() = 0x000001d0;
|
jit.Cpsr() = 0x000001d0;
|
||||||
jit.ExtRegs()[4] = test.a;
|
jit.ExtRegs()[4] = test.a;
|
||||||
jit.ExtRegs()[2] = test.b;
|
jit.ExtRegs()[6] = test.b;
|
||||||
jit.SetFpscr(test.initial_fpscr);
|
jit.SetFpscr(test.initial_fpscr);
|
||||||
|
|
||||||
jit.Run(2);
|
jit.Run(2);
|
||||||
|
|
||||||
|
const auto check = [&test, &jit](bool p) {
|
||||||
|
if (!p) {
|
||||||
|
printf("Failed test:\n");
|
||||||
|
printf("initial_fpscr: 0x%08x\n", test.initial_fpscr);
|
||||||
|
printf("a: 0x%08x (jit: 0x%08x)\n", test.a, jit.ExtRegs()[4]);
|
||||||
|
printf("b: 0x%08x (jit: 0x%08x)\n", test.b, jit.ExtRegs()[6]);
|
||||||
|
printf("result: 0x%08x (jit: 0x%08x)\n", test.result, jit.ExtRegs()[2]);
|
||||||
|
printf("final_fpscr: 0x%08x (jit: 0x%08x)\n", test.final_fpscr, jit.Fpscr());
|
||||||
|
FAIL();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
REQUIRE( jit.Regs()[15] == 4 );
|
REQUIRE( jit.Regs()[15] == 4 );
|
||||||
REQUIRE( jit.Cpsr() == 0x000001d0 );
|
REQUIRE( jit.Cpsr() == 0x000001d0 );
|
||||||
REQUIRE( jit.ExtRegs()[6] == test.result );
|
check( jit.ExtRegs()[2] == test.result );
|
||||||
REQUIRE( jit.ExtRegs()[4] == test.a );
|
check( jit.ExtRegs()[4] == test.a );
|
||||||
REQUIRE( jit.ExtRegs()[2] == test.b );
|
check( jit.ExtRegs()[6] == test.b );
|
||||||
REQUIRE( jit.Fpscr() == test.final_fpscr );
|
check( jit.Fpscr() == test.final_fpscr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("vfp: vadd", "[vfp]") {
|
||||||
|
// vadd.f32 s2, s4, s6
|
||||||
|
RunVfpTests(0xEE321A03, {
|
||||||
|
#include "vfp_vadd_f32.inc"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("vfp: vsub", "[vfp]") {
|
||||||
|
// vsub.f32 s2, s4, s6
|
||||||
|
RunVfpTests(0xEE321A43, {
|
||||||
|
#include "vfp_vsub_f32.inc"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
TEST_CASE("VFP: VMOV", "[JitX64][vfp]") {
|
TEST_CASE("VFP: VMOV", "[JitX64][vfp]") {
|
||||||
const auto is_valid = [](u32 instr) -> bool {
|
const auto is_valid = [](u32 instr) -> bool {
|
||||||
return Bits<0, 6>(instr) != 0b111111
|
return Bits<0, 6>(instr) != 0b111111
|
||||||
|
|
13456
tests/arm/vfp_vsub_f32.inc
Normal file
13456
tests/arm/vfp_vsub_f32.inc
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue