Update for fmt 9.0.0

This commit is contained in:
Merry 2022-07-26 11:20:47 +01:00
parent 764b5fdb76
commit 1f51dceb60
15 changed files with 112 additions and 83 deletions

View file

@ -5,20 +5,17 @@
#include "dynarmic/frontend/A32/a32_location_descriptor.h" #include "dynarmic/frontend/A32/a32_location_descriptor.h"
#include <ostream>
#include <fmt/format.h> #include <fmt/format.h>
namespace Dynarmic::A32 { namespace Dynarmic::A32 {
std::ostream& operator<<(std::ostream& o, const LocationDescriptor& descriptor) { std::string ToString(const LocationDescriptor& descriptor) {
o << fmt::format("{{{:08x},{},{},{:08x}{}}}", return fmt::format("{{{:08x},{},{},{:08x}{}}}",
descriptor.PC(), descriptor.PC(),
descriptor.TFlag() ? "T" : "!T", descriptor.TFlag() ? "T" : "!T",
descriptor.EFlag() ? "E" : "!E", descriptor.EFlag() ? "E" : "!E",
descriptor.FPSCR().Value(), descriptor.FPSCR().Value(),
descriptor.SingleStepping() ? ",step" : ""); descriptor.SingleStepping() ? ",step" : "");
return o;
} }
} // namespace Dynarmic::A32 } // namespace Dynarmic::A32

View file

@ -6,9 +6,10 @@
#pragma once #pragma once
#include <functional> #include <functional>
#include <iosfwd> #include <string>
#include <tuple> #include <tuple>
#include <fmt/format.h>
#include <mcl/stdint.hpp> #include <mcl/stdint.hpp>
#include "dynarmic/frontend/A32/FPSCR.h" #include "dynarmic/frontend/A32/FPSCR.h"
@ -131,10 +132,9 @@ private:
/** /**
* Provides a string representation of a LocationDescriptor. * Provides a string representation of a LocationDescriptor.
* *
* @param o Output stream
* @param descriptor The descriptor to get a string representation of * @param descriptor The descriptor to get a string representation of
*/ */
std::ostream& operator<<(std::ostream& o, const LocationDescriptor& descriptor); std::string ToString(const LocationDescriptor& descriptor);
} // namespace Dynarmic::A32 } // namespace Dynarmic::A32
@ -152,3 +152,11 @@ struct hash<Dynarmic::A32::LocationDescriptor> {
} }
}; };
} // namespace std } // namespace std
template<>
struct fmt::formatter<Dynarmic::A32::LocationDescriptor> : fmt::formatter<std::string> {
template<typename FormatContext>
auto format(Dynarmic::A32::LocationDescriptor descriptor, FormatContext& ctx) const {
return formatter<std::string>::format(Dynarmic::A32::ToString(descriptor), ctx);
}
};

View file

@ -57,24 +57,4 @@ std::string RegListToString(RegList reg_list) {
return ret; return ret;
} }
std::ostream& operator<<(std::ostream& o, Reg reg) {
o << RegToString(reg);
return o;
}
std::ostream& operator<<(std::ostream& o, ExtReg reg) {
o << ExtRegToString(reg);
return o;
}
std::ostream& operator<<(std::ostream& o, CoprocReg reg) {
o << CoprocRegToString(reg);
return o;
}
std::ostream& operator<<(std::ostream& o, RegList reg_list) {
o << RegListToString(reg_list);
return o;
}
} // namespace Dynarmic::A32 } // namespace Dynarmic::A32

View file

@ -5,10 +5,10 @@
#pragma once #pragma once
#include <iosfwd>
#include <string> #include <string>
#include <utility> #include <utility>
#include <fmt/format.h>
#include <mcl/assert.hpp> #include <mcl/assert.hpp>
#include <mcl/stdint.hpp> #include <mcl/stdint.hpp>
@ -72,11 +72,6 @@ const char* ExtRegToString(ExtReg reg);
const char* CoprocRegToString(CoprocReg reg); const char* CoprocRegToString(CoprocReg reg);
std::string RegListToString(RegList reg_list); std::string RegListToString(RegList reg_list);
std::ostream& operator<<(std::ostream& o, Reg reg);
std::ostream& operator<<(std::ostream& o, ExtReg reg);
std::ostream& operator<<(std::ostream& o, CoprocReg reg);
std::ostream& operator<<(std::ostream& o, RegList reg_list);
constexpr bool IsSingleExtReg(ExtReg reg) { constexpr bool IsSingleExtReg(ExtReg reg) {
return reg >= ExtReg::S0 && reg <= ExtReg::S31; return reg >= ExtReg::S0 && reg <= ExtReg::S31;
} }
@ -148,3 +143,35 @@ inline ExtReg ToVector(bool Q, size_t base, bool bit) {
} }
} // namespace Dynarmic::A32 } // namespace Dynarmic::A32
template<>
struct fmt::formatter<Dynarmic::A32::Reg> : fmt::formatter<const char*> {
template<typename FormatContext>
auto format(Dynarmic::A32::Reg reg, FormatContext& ctx) const {
return formatter<const char*>::format(Dynarmic::A32::RegToString(reg), ctx);
}
};
template<>
struct fmt::formatter<Dynarmic::A32::ExtReg> : fmt::formatter<const char*> {
template<typename FormatContext>
auto format(Dynarmic::A32::ExtReg reg, FormatContext& ctx) const {
return formatter<const char*>::format(Dynarmic::A32::ExtRegToString(reg), ctx);
}
};
template<>
struct fmt::formatter<Dynarmic::A32::CoprocReg> : fmt::formatter<const char*> {
template<typename FormatContext>
auto format(Dynarmic::A32::CoprocReg reg, FormatContext& ctx) const {
return formatter<const char*>::format(Dynarmic::A32::CoprocRegToString(reg), ctx);
}
};
template<>
struct fmt::formatter<Dynarmic::A32::RegList> : fmt::formatter<std::string> {
template<typename FormatContext>
auto format(Dynarmic::A32::RegList reg_list, FormatContext& ctx) const {
return formatter<std::string>::format(Dynarmic::A32::RegListToString(reg_list), ctx);
}
};

View file

@ -5,15 +5,12 @@
#include "dynarmic/frontend/A64/a64_location_descriptor.h" #include "dynarmic/frontend/A64/a64_location_descriptor.h"
#include <ostream>
#include <fmt/format.h> #include <fmt/format.h>
namespace Dynarmic::A64 { namespace Dynarmic::A64 {
std::ostream& operator<<(std::ostream& o, const LocationDescriptor& descriptor) { std::string ToString(const LocationDescriptor& descriptor) {
o << fmt::format("{{{}, {}{}}}", descriptor.PC(), descriptor.FPCR().Value(), descriptor.SingleStepping() ? ", step" : ""); return fmt::format("{{{}, {}{}}}", descriptor.PC(), descriptor.FPCR().Value(), descriptor.SingleStepping() ? ", step" : "");
return o;
} }
} // namespace Dynarmic::A64 } // namespace Dynarmic::A64

View file

@ -6,9 +6,10 @@
#pragma once #pragma once
#include <functional> #include <functional>
#include <iosfwd> #include <string>
#include <tuple> #include <tuple>
#include <fmt/format.h>
#include <mcl/bit/bit_field.hpp> #include <mcl/bit/bit_field.hpp>
#include <mcl/stdint.hpp> #include <mcl/stdint.hpp>
@ -84,10 +85,9 @@ private:
/** /**
* Provides a string representation of a LocationDescriptor. * Provides a string representation of a LocationDescriptor.
* *
* @param o Output stream
* @param descriptor The descriptor to get a string representation of * @param descriptor The descriptor to get a string representation of
*/ */
std::ostream& operator<<(std::ostream& o, const LocationDescriptor& descriptor); std::string ToString(const LocationDescriptor& descriptor);
} // namespace Dynarmic::A64 } // namespace Dynarmic::A64
@ -105,3 +105,11 @@ struct hash<Dynarmic::A64::LocationDescriptor> {
} }
}; };
} // namespace std } // namespace std
template<>
struct fmt::formatter<Dynarmic::A64::LocationDescriptor> : fmt::formatter<std::string> {
template<typename FormatContext>
auto format(Dynarmic::A64::LocationDescriptor descriptor, FormatContext& ctx) const {
return formatter<std::string>::format(Dynarmic::A64::ToString(descriptor), ctx);
}
};

View file

@ -30,14 +30,4 @@ std::string VecToString(Vec vec) {
return fmt::format("v{}", static_cast<size_t>(vec)); return fmt::format("v{}", static_cast<size_t>(vec));
} }
std::ostream& operator<<(std::ostream& o, Reg reg) {
o << RegToString(reg);
return o;
}
std::ostream& operator<<(std::ostream& o, Vec vec) {
o << VecToString(vec);
return o;
}
} // namespace Dynarmic::A64 } // namespace Dynarmic::A64

View file

@ -5,9 +5,9 @@
#pragma once #pragma once
#include <iosfwd>
#include <string> #include <string>
#include <fmt/format.h>
#include <mcl/assert.hpp> #include <mcl/assert.hpp>
#include <mcl/stdint.hpp> #include <mcl/stdint.hpp>
@ -101,9 +101,6 @@ const char* CondToString(Cond cond);
std::string RegToString(Reg reg); std::string RegToString(Reg reg);
std::string VecToString(Vec vec); std::string VecToString(Vec vec);
std::ostream& operator<<(std::ostream& o, Reg reg);
std::ostream& operator<<(std::ostream& o, Vec vec);
constexpr size_t RegNumber(Reg reg) { constexpr size_t RegNumber(Reg reg) {
return static_cast<size_t>(reg); return static_cast<size_t>(reg);
} }
@ -127,3 +124,19 @@ inline Vec operator+(Vec vec, size_t number) {
} }
} // namespace Dynarmic::A64 } // namespace Dynarmic::A64
template<>
struct fmt::formatter<Dynarmic::A64::Reg> : fmt::formatter<std::string> {
template<typename FormatContext>
auto format(Dynarmic::A64::Reg reg, FormatContext& ctx) const {
return formatter<std::string>::format(Dynarmic::A64::RegToString(reg), ctx);
}
};
template<>
struct fmt::formatter<Dynarmic::A64::Vec> : fmt::formatter<std::string> {
template<typename FormatContext>
auto format(Dynarmic::A64::Vec vec, FormatContext& ctx) const {
return formatter<std::string>::format(Dynarmic::A64::VecToString(vec), ctx);
}
};

View file

@ -5,15 +5,12 @@
#include "dynarmic/ir/location_descriptor.h" #include "dynarmic/ir/location_descriptor.h"
#include <ostream>
#include <fmt/format.h> #include <fmt/format.h>
namespace Dynarmic::IR { namespace Dynarmic::IR {
std::ostream& operator<<(std::ostream& o, const LocationDescriptor& descriptor) { std::string ToString(const LocationDescriptor& descriptor) {
o << fmt::format("{{{:016x}}}", descriptor.Value()); return fmt::format("{{{:016x}}}", descriptor.Value());
return o;
} }
} // namespace Dynarmic::IR } // namespace Dynarmic::IR

View file

@ -6,8 +6,9 @@
#pragma once #pragma once
#include <functional> #include <functional>
#include <iosfwd> #include <string>
#include <fmt/format.h>
#include <mcl/stdint.hpp> #include <mcl/stdint.hpp>
namespace Dynarmic::IR { namespace Dynarmic::IR {
@ -31,7 +32,7 @@ private:
u64 value; u64 value;
}; };
std::ostream& operator<<(std::ostream& o, const LocationDescriptor& descriptor); std::string ToString(const LocationDescriptor& descriptor);
inline bool operator<(const LocationDescriptor& x, const LocationDescriptor& y) noexcept { inline bool operator<(const LocationDescriptor& x, const LocationDescriptor& y) noexcept {
return x.Value() < y.Value(); return x.Value() < y.Value();
@ -53,3 +54,11 @@ struct hash<Dynarmic::IR::LocationDescriptor> {
} }
}; };
} // namespace std } // namespace std
template<>
struct fmt::formatter<Dynarmic::IR::LocationDescriptor> : fmt::formatter<std::string> {
template<typename FormatContext>
auto format(Dynarmic::IR::LocationDescriptor descriptor, FormatContext& ctx) const {
return formatter<std::string>::format(ToString(descriptor), ctx);
}
};

View file

@ -7,7 +7,6 @@
#include <algorithm> #include <algorithm>
#include <fmt/ostream.h>
#include <mcl/assert.hpp> #include <mcl/assert.hpp>
#include "dynarmic/ir/opcodes.h" #include "dynarmic/ir/opcodes.h"

View file

@ -73,8 +73,4 @@ std::string GetNameOf(Opcode op) {
return OpcodeInfo::opcode_info.at(static_cast<size_t>(op)).name; return OpcodeInfo::opcode_info.at(static_cast<size_t>(op)).name;
} }
std::ostream& operator<<(std::ostream& o, Opcode opcode) {
return o << GetNameOf(opcode);
}
} // namespace Dynarmic::IR } // namespace Dynarmic::IR

View file

@ -5,9 +5,9 @@
#pragma once #pragma once
#include <iosfwd>
#include <string> #include <string>
#include <fmt/format.h>
#include <mcl/stdint.hpp> #include <mcl/stdint.hpp>
namespace Dynarmic::IR { namespace Dynarmic::IR {
@ -43,6 +43,12 @@ Type GetArgTypeOf(Opcode op, size_t arg_index);
/// Get the name of an opcode. /// Get the name of an opcode.
std::string GetNameOf(Opcode op); std::string GetNameOf(Opcode op);
std::ostream& operator<<(std::ostream& o, Opcode opcode);
} // namespace Dynarmic::IR } // namespace Dynarmic::IR
template<>
struct fmt::formatter<Dynarmic::IR::Opcode> : fmt::formatter<std::string> {
template<typename FormatContext>
auto format(Dynarmic::IR::Opcode op, FormatContext& ctx) const {
return formatter<std::string>::format(Dynarmic::IR::GetNameOf(op), ctx);
}
};

View file

@ -43,8 +43,4 @@ bool AreTypesCompatible(Type t1, Type t2) {
return t1 == t2 || t1 == Type::Opaque || t2 == Type::Opaque; return t1 == t2 || t1 == Type::Opaque || t2 == Type::Opaque;
} }
std::ostream& operator<<(std::ostream& o, Type type) {
return o << GetNameOf(type);
}
} // namespace Dynarmic::IR } // namespace Dynarmic::IR

View file

@ -5,9 +5,9 @@
#pragma once #pragma once
#include <iosfwd>
#include <string> #include <string>
#include <fmt/format.h>
#include <mcl/stdint.hpp> #include <mcl/stdint.hpp>
namespace Dynarmic::IR { namespace Dynarmic::IR {
@ -49,6 +49,12 @@ std::string GetNameOf(Type type);
/// @returns true if t1 and t2 are compatible types /// @returns true if t1 and t2 are compatible types
bool AreTypesCompatible(Type t1, Type t2); bool AreTypesCompatible(Type t1, Type t2);
std::ostream& operator<<(std::ostream& o, Type type);
} // namespace Dynarmic::IR } // namespace Dynarmic::IR
template<>
struct fmt::formatter<Dynarmic::IR::Type> : fmt::formatter<std::string> {
template<typename FormatContext>
auto format(Dynarmic::IR::Type type, FormatContext& ctx) const {
return formatter<std::string>::format(Dynarmic::IR::GetNameOf(type), ctx);
}
};