aboutsummaryrefslogtreecommitdiff
path: root/externals/dynarmic/src/dynarmic/backend/x64/verbose_debugging_output.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'externals/dynarmic/src/dynarmic/backend/x64/verbose_debugging_output.cpp')
-rw-r--r--externals/dynarmic/src/dynarmic/backend/x64/verbose_debugging_output.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/externals/dynarmic/src/dynarmic/backend/x64/verbose_debugging_output.cpp b/externals/dynarmic/src/dynarmic/backend/x64/verbose_debugging_output.cpp
new file mode 100644
index 0000000000..3378786c46
--- /dev/null
+++ b/externals/dynarmic/src/dynarmic/backend/x64/verbose_debugging_output.cpp
@@ -0,0 +1,56 @@
+/* This file is part of the dynarmic project.
+ * Copyright (c) 2023 MerryMage
+ * SPDX-License-Identifier: 0BSD
+ */
+
+#include "dynarmic/backend/x64/verbose_debugging_output.h"
+
+#include <iterator>
+
+#include <fmt/format.h>
+
+#include "dynarmic/backend/x64/hostloc.h"
+
+namespace Dynarmic::Backend::X64 {
+
+void PrintVerboseDebuggingOutputLine(RegisterData& reg_data, HostLoc hostloc, size_t inst_index, size_t bitsize) {
+ fmt::print("dynarmic debug: %{:05} = ", inst_index);
+
+ Vector value = [&]() -> Vector {
+ if (HostLocIsGPR(hostloc)) {
+ return {reg_data.gprs[HostLocToReg64(hostloc).getIdx()], 0};
+ } else if (HostLocIsXMM(hostloc)) {
+ return reg_data.xmms[HostLocToXmm(hostloc).getIdx()];
+ } else if (HostLocIsSpill(hostloc)) {
+ return (*reg_data.spill)[static_cast<size_t>(hostloc) - static_cast<size_t>(HostLoc::FirstSpill)];
+ } else {
+ fmt::print("invalid hostloc! ");
+ return {0, 0};
+ }
+ }();
+
+ switch (bitsize) {
+ case 8:
+ fmt::print("{:02x}", value[0] & 0xff);
+ break;
+ case 16:
+ fmt::print("{:04x}", value[0] & 0xffff);
+ break;
+ case 32:
+ fmt::print("{:08x}", value[0] & 0xffffffff);
+ break;
+ case 64:
+ fmt::print("{:016x}", value[0]);
+ break;
+ case 128:
+ fmt::print("{:016x}{:016x}", value[1], value[0]);
+ break;
+ default:
+ fmt::print("invalid bitsize!");
+ break;
+ }
+
+ fmt::print("\n");
+}
+
+} // namespace Dynarmic::Backend::X64