From 5e6568dffa33fe851936e462f7f025d34fee8b9f Mon Sep 17 00:00:00 2001 From: Lioncash Date: Fri, 17 May 2019 14:08:23 -0400 Subject: [PATCH] A64/fuzz_with_unicorn: Avoid repeated unnecessary library calls in RunTestInstance() Repeatedly retrieving the vectors and registers from unicorn involves copying the entire set of registers and vectors by value instead of simply retrieving a reference to them. Instead, we can just do the work once and print out the values. While we're at it, also make our bracing consistent. --- tests/A64/fuzz_with_unicorn.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/tests/A64/fuzz_with_unicorn.cpp b/tests/A64/fuzz_with_unicorn.cpp index 5d78ec56..afa27531 100644 --- a/tests/A64/fuzz_with_unicorn.cpp +++ b/tests/A64/fuzz_with_unicorn.cpp @@ -199,15 +199,18 @@ static void RunTestInstance(Dynarmic::A64::Jit& jit, A64Unicorn& uni, A64TestEnv SCOPE_FAIL { fmt::print("Instruction Listing:\n"); - for (u32 instruction : instructions) + for (u32 instruction : instructions) { fmt::print("{:08x} {}\n", instruction, Common::DisassembleAArch64(instruction)); + } fmt::print("\n"); fmt::print("Initial register listing:\n"); - for (size_t i = 0; i < regs.size(); ++i) + for (size_t i = 0; i < regs.size(); ++i) { fmt::print("{:3s}: {:016x}\n", static_cast(i), regs[i]); - for (size_t i = 0; i < vecs.size(); ++i) + } + for (size_t i = 0; i < vecs.size(); ++i) { fmt::print("{:3s}: {}\n", static_cast(i), vecs[i]); + } fmt::print("sp : {:016x}\n", initial_sp); fmt::print("pc : {:016x}\n", instructions_start); fmt::print("p : {:08x}\n", pstate); @@ -221,10 +224,14 @@ static void RunTestInstance(Dynarmic::A64::Jit& jit, A64Unicorn& uni, A64TestEnv fmt::print("Final register listing:\n"); fmt::print(" unicorn dynarmic\n"); - for (size_t i = 0; i < regs.size(); ++i) - fmt::print("{:3s}: {:016x} {:016x} {}\n", static_cast(i), uni.GetRegisters()[i], jit.GetRegisters()[i], uni.GetRegisters()[i] != jit.GetRegisters()[i] ? "*" : ""); - for (size_t i = 0; i < vecs.size(); ++i) - fmt::print("{:3s}: {} {} {}\n", static_cast(i), uni.GetVectors()[i], jit.GetVectors()[i], uni.GetVectors()[i] != jit.GetVectors()[i] ? "*" : ""); + const auto uni_regs = uni.GetRegisters(); + for (size_t i = 0; i < regs.size(); ++i) { + fmt::print("{:3s}: {:016x} {:016x} {}\n", static_cast(i), uni_regs[i], jit.GetRegisters()[i], uni_regs[i] != jit.GetRegisters()[i] ? "*" : ""); + } + const auto uni_vecs = uni.GetVectors(); + for (size_t i = 0; i < vecs.size(); ++i) { + fmt::print("{:3s}: {} {} {}\n", static_cast(i), uni_vecs[i], jit.GetVectors()[i], uni_vecs[i] != jit.GetVectors()[i] ? "*" : ""); + } fmt::print("sp : {:016x} {:016x} {}\n", uni.GetSP(), jit.GetSP(), uni.GetSP() != jit.GetSP() ? "*" : ""); fmt::print("pc : {:016x} {:016x} {}\n", uni.GetPC(), jit.GetPC(), uni.GetPC() != jit.GetPC() ? "*" : ""); fmt::print("p : {:08x} {:08x} {}\n", uni.GetPstate(), jit.GetPstate(), (uni.GetPstate() & 0xF0000000) != (jit.GetPstate() & 0xF0000000) ? "*" : "");