From 2403f367b12ef8c7b13e9c80c5c3af422b190817 Mon Sep 17 00:00:00 2001 From: Ben Vanik Date: Sat, 8 Feb 2014 22:00:21 -0800 Subject: [PATCH] MachineInfo --- src/alloy/backend/backend.cc | 1 + src/alloy/backend/backend.h | 3 +++ src/alloy/backend/ivm/ivm_backend.cc | 14 ++++++++++ src/alloy/backend/machine_info.h | 39 ++++++++++++++++++++++++++++ src/alloy/backend/sources.gypi | 1 + src/alloy/backend/x64/x64_backend.cc | 14 ++++++++++ 6 files changed, 72 insertions(+) create mode 100644 src/alloy/backend/machine_info.h diff --git a/src/alloy/backend/backend.cc b/src/alloy/backend/backend.cc index 2f6531fb5..d49fb713e 100644 --- a/src/alloy/backend/backend.cc +++ b/src/alloy/backend/backend.cc @@ -18,6 +18,7 @@ using namespace alloy::runtime; Backend::Backend(Runtime* runtime) : runtime_(runtime) { + xe_zero_struct(&machine_info_, sizeof(machine_info_)); } Backend::~Backend() { diff --git a/src/alloy/backend/backend.h b/src/alloy/backend/backend.h index 885844d3f..b6c2c431e 100644 --- a/src/alloy/backend/backend.h +++ b/src/alloy/backend/backend.h @@ -11,6 +11,7 @@ #define ALLOY_BACKEND_BACKEND_H_ #include +#include namespace alloy { namespace runtime { class Runtime; } } @@ -27,6 +28,7 @@ public: virtual ~Backend(); runtime::Runtime* runtime() const { return runtime_; } + const MachineInfo* machine_info() const { return &machine_info_; } virtual int Initialize(); @@ -37,6 +39,7 @@ public: protected: runtime::Runtime* runtime_; + MachineInfo machine_info_; }; diff --git a/src/alloy/backend/ivm/ivm_backend.cc b/src/alloy/backend/ivm/ivm_backend.cc index bb2a42f67..6bd51037f 100644 --- a/src/alloy/backend/ivm/ivm_backend.cc +++ b/src/alloy/backend/ivm/ivm_backend.cc @@ -34,6 +34,20 @@ int IVMBackend::Initialize() { return result; } + machine_info_.register_sets[0] = { + 0, + "gpr", + MachineInfo::RegisterSet::INT_TYPES, + 10, + }; + machine_info_.register_sets[1] = { + 1, + "vec", + MachineInfo::RegisterSet::FLOAT_TYPES | + MachineInfo::RegisterSet::VEC_TYPES, + 10, + }; + alloy::tracing::WriteEvent(EventType::Init({ })); diff --git a/src/alloy/backend/machine_info.h b/src/alloy/backend/machine_info.h new file mode 100644 index 000000000..2aa7add22 --- /dev/null +++ b/src/alloy/backend/machine_info.h @@ -0,0 +1,39 @@ +/** + ****************************************************************************** + * Xenia : Xbox 360 Emulator Research Project * + ****************************************************************************** + * Copyright 2014 Ben Vanik. All rights reserved. * + * Released under the BSD license - see LICENSE in the root for more details. * + ****************************************************************************** + */ + +#ifndef ALLOY_BACKEND_MACHINE_INFO_H_ +#define ALLOY_BACKEND_MACHINE_INFO_H_ + +#include + + +namespace alloy { +namespace backend { + + +struct MachineInfo { + struct RegisterSet { + enum Types { + INT_TYPES = (1 << 1), + FLOAT_TYPES = (1 << 2), + VEC_TYPES = (1 << 3), + }; + uint8_t id; + char name[4]; + uint32_t types; + uint32_t count; + } register_sets[8]; +}; + + +} // namespace backend +} // namespace alloy + + +#endif // ALLOY_BACKEND_MACHINE_INFO_H_ diff --git a/src/alloy/backend/sources.gypi b/src/alloy/backend/sources.gypi index 154cd75ad..41419ac7a 100644 --- a/src/alloy/backend/sources.gypi +++ b/src/alloy/backend/sources.gypi @@ -5,6 +5,7 @@ 'assembler.h', 'backend.cc', 'backend.h', + 'machine_info.h', 'tracing.h', ], diff --git a/src/alloy/backend/x64/x64_backend.cc b/src/alloy/backend/x64/x64_backend.cc index 031dc6bda..8c1968571 100644 --- a/src/alloy/backend/x64/x64_backend.cc +++ b/src/alloy/backend/x64/x64_backend.cc @@ -41,6 +41,20 @@ int X64Backend::Initialize() { return result; } + machine_info_.register_sets[0] = { + 0, + "gpr", + MachineInfo::RegisterSet::INT_TYPES, + 10, + }; + machine_info_.register_sets[1] = { + 1, + "xmm", + MachineInfo::RegisterSet::FLOAT_TYPES | + MachineInfo::RegisterSet::VEC_TYPES, + 10, + }; + code_cache_ = new X64CodeCache(); result = code_cache_->Initialize(); if (result) {