1#include "host/KReplaySystem.hh"
2#include "host/KTestSystem.hh"
3#include "host/Option.hh"
5#include <egg/core/ExpHeap.hh>
7#if defined(__arm64__) || defined(__aarch64__)
8static void FlushDenormalsToZero() {
10 asm(
"mrs %0, fpcr" :
"=r"(fpcr));
11 asm(
"msr fpcr, %0" ::
"r"(fpcr | (1 << 24)));
13#elif defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)
16static void FlushDenormalsToZero() {
17 _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);
21static void *s_memorySpace =
nullptr;
24static void InitMemory() {
25 s_memorySpace = malloc(MEMORY_SPACE_SIZE);
26 s_rootHeap = EGG::ExpHeap::create(s_memorySpace, MEMORY_SPACE_SIZE, DEFAULT_OPT);
27 s_rootHeap->setName(
"EGGRoot");
28 s_rootHeap->becomeCurrentHeap();
30 EGG::SceneManager::SetRootHeap(s_rootHeap);
33int main(
int argc,
char **argv) {
34 FlushDenormalsToZero();
40 const std::unordered_map<std::string, std::function<
KSystem *()>> modeMap = {
41 {
"test", []() ->
KSystem * {
return KTestSystem::CreateInstance(); }},
42 {
"replay", []() ->
KSystem * {
return KReplaySystem::CreateInstance(); }},
46 PANIC(
"Too few arguments!");
53 std::optional<Host::EOption> flag = Host::Option::CheckFlag(argv[1]);
58 if (*flag != Host::EOption::Mode) {
59 PANIC(
"First flag expected to be mode!");
63 const std::string mode = argv[2];
65 auto it = modeMap.find(mode);
66 if (it != modeMap.end()) {
69 PANIC(
"Invalid mode!");
74 return sys->
run() ? 0 : 1;
A high-level representation of a memory heap for managing dynamic memory allocation....
Base interface for a Kinoko system.
virtual void init()=0
Initializes the system.
virtual void parseOptions(int argc, char **argv)=0
Parses non-generic command line options.
virtual bool run()=0
Executes a run.