More WIP architecture fixes (exception_handler/string_util)
This commit is contained in:
parent
096a0230c4
commit
be962e6de1
|
@ -13,6 +13,7 @@
|
|||
#include <functional>
|
||||
#include <vector>
|
||||
|
||||
#include "xenia/base/assert.h"
|
||||
#include "xenia/base/x64_context.h"
|
||||
|
||||
namespace xe {
|
||||
|
@ -41,11 +42,22 @@ class Exception {
|
|||
// Returns the platform-specific thread context info.
|
||||
X64Context* thread_context() const { return thread_context_; }
|
||||
|
||||
#if XE_ARCH_AMD64
|
||||
// Returns the program counter where the exception occurred.
|
||||
// RIP on x64.
|
||||
uint64_t pc() const { return thread_context_->rip; }
|
||||
// Sets the program counter where execution will resume.
|
||||
void set_resume_pc(uint64_t pc) { thread_context_->rip = pc; }
|
||||
#else
|
||||
// Returns the program counter where the exception occurred.
|
||||
// RIP on x64.
|
||||
uint64_t pc() const {
|
||||
assert_always();
|
||||
return 0;
|
||||
}
|
||||
// Sets the program counter where execution will resume.
|
||||
void set_resume_pc(uint64_t pc) { assert_always(); }
|
||||
#endif
|
||||
|
||||
// In case of AV, address that was read from/written to.
|
||||
uint64_t fault_address() const { return fault_address_; }
|
||||
|
|
|
@ -59,6 +59,9 @@ inline std::string to_hex_string(const vec128_t& value) {
|
|||
return std::string(buffer);
|
||||
}
|
||||
|
||||
#if XE_ARCH_AMD64
|
||||
|
||||
// TODO(DrChat): This should not exist. Force the caller to use vec128.
|
||||
inline std::string to_hex_string(const __m128& value) {
|
||||
char buffer[128];
|
||||
float f[4];
|
||||
|
@ -79,6 +82,8 @@ inline std::string to_string(const __m128& value) {
|
|||
return std::string(buffer);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
template <typename T>
|
||||
inline T from_string(const char* value, bool force_hex = false);
|
||||
|
||||
|
@ -182,6 +187,9 @@ inline vec128_t from_string<vec128_t>(const char* value, bool force_hex) {
|
|||
return v;
|
||||
}
|
||||
|
||||
#if XE_ARCH_AMD64
|
||||
|
||||
// TODO(DrChat): ?? Why is this here? Force the caller to use vec128.
|
||||
template <>
|
||||
inline __m128 from_string<__m128>(const char* value, bool force_hex) {
|
||||
__m128 v;
|
||||
|
@ -225,6 +233,8 @@ inline __m128 from_string<__m128>(const char* value, bool force_hex) {
|
|||
return v;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
template <typename T>
|
||||
inline T from_string(const std::string& value, bool force_hex = false) {
|
||||
return from_string<T>(value.c_str(), force_hex);
|
||||
|
|
Loading…
Reference in New Issue