Files
Xenia-Canary/src/xenia/base/x64_context.h

124 lines
2.3 KiB
C++

/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2015 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#ifndef XENIA_BASE_X64_CONTEXT_H_
#define XENIA_BASE_X64_CONTEXT_H_
#include <cstdint>
#include <string>
#include "xenia/base/platform.h"
#include "xenia/base/vec128.h"
#if XE_ARCH_AMD64
#include <xmmintrin.h>
#endif
namespace xe {
class X64Context;
#if XE_ARCH_AMD64
enum class X64Register {
// NOTE: this order matches 1:1 with the order in the X64Context.
// NOTE: this order matches 1:1 with a string table in the x64_context.cc.
kRip,
kEflags,
kRax,
kRcx,
kRdx,
kRbx,
kRsp,
kRbp,
kRsi,
kRdi,
kR8,
kR9,
kR10,
kR11,
kR12,
kR13,
kR14,
kR15,
kXmm0,
kXmm1,
kXmm2,
kXmm3,
kXmm4,
kXmm5,
kXmm6,
kXmm7,
kXmm8,
kXmm9,
kXmm10,
kXmm11,
kXmm12,
kXmm13,
kXmm14,
kXmm15,
};
class X64Context {
public:
uint64_t rip;
uint32_t eflags;
union {
struct {
uint64_t rax;
uint64_t rcx;
uint64_t rdx;
uint64_t rbx;
uint64_t rsp;
uint64_t rbp;
uint64_t rsi;
uint64_t rdi;
uint64_t r8;
uint64_t r9;
uint64_t r10;
uint64_t r11;
uint64_t r12;
uint64_t r13;
uint64_t r14;
uint64_t r15;
};
uint64_t int_registers[16];
};
union {
struct {
vec128_t xmm0;
vec128_t xmm1;
vec128_t xmm2;
vec128_t xmm3;
vec128_t xmm4;
vec128_t xmm5;
vec128_t xmm6;
vec128_t xmm7;
vec128_t xmm8;
vec128_t xmm9;
vec128_t xmm10;
vec128_t xmm11;
vec128_t xmm12;
vec128_t xmm13;
vec128_t xmm14;
vec128_t xmm15;
};
vec128_t xmm_registers[16];
};
static const char* GetRegisterName(X64Register reg);
std::string GetStringFromValue(X64Register reg, bool hex) const;
void SetValueFromString(X64Register reg, std::string value, bool hex);
};
#endif // XE_ARCH_AMD64
} // namespace xe
#endif // XENIA_BASE_X64_CONTEXT_H_