aboutsummaryrefslogtreecommitdiff
path: root/src/JitBlock.h
diff options
context:
space:
mode:
authorJesse Talavera-Greenberg <jesse@jesse.tg>2023-11-18 10:40:54 -0500
committerGitHub <noreply@github.com>2023-11-18 16:40:54 +0100
commit544fefa27f698f3a0d799a782dc03d3eb47561db (patch)
treeb4907fca30677cc4e1befb02301392f172eed543 /src/JitBlock.h
parentf2d7a290156b5aa62edc00644c55b00de73b6229 (diff)
Refactor the JIT to be object-oriented (#1879)
* Move TinyVector to a new file - So it's less sensitive to #include ordering * Forgot to include assert.h * Refactor ARMJIT_Memory into an object * Oops, forgot a declaration * Refactor ARMJIT to be contained in an object * Remove an unused function declaration * Add a missing #include * Remove a now-unused global * Use ARMJIT_Memory's own memory access functions * Fix some omissions in the ARM JIT * Move libandroid to be a member of ARMJIT_Memory instead of a global * Default-initialize most fields in ARMJIT_Compiler.h * Define NOOP_IF_NO_JIT * Finish refactoring the JIT to be object-oriented
Diffstat (limited to 'src/JitBlock.h')
-rw-r--r--src/JitBlock.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/JitBlock.h b/src/JitBlock.h
new file mode 100644
index 0000000..abd435b
--- /dev/null
+++ b/src/JitBlock.h
@@ -0,0 +1,61 @@
+/*
+ Copyright 2016-2023 melonDS team
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef MELONDS_JITBLOCK_H
+#define MELONDS_JITBLOCK_H
+
+#include "types.h"
+#include "TinyVector.h"
+
+namespace ARMJIT
+{
+typedef void (*JitBlockEntry)();
+
+class JitBlock
+{
+public:
+ JitBlock(u32 num, u32 literalHash, u32 numAddresses, u32 numLiterals)
+ {
+ Num = num;
+ NumAddresses = numAddresses;
+ NumLiterals = numLiterals;
+ Data.SetLength(numAddresses * 2 + numLiterals);
+ }
+
+ u32 StartAddr;
+ u32 StartAddrLocal;
+ u32 InstrHash, LiteralHash;
+ u8 Num;
+ u16 NumAddresses;
+ u16 NumLiterals;
+
+ JitBlockEntry EntryPoint;
+
+ u32* AddressRanges()
+ { return &Data[0]; }
+ u32* AddressMasks()
+ { return &Data[NumAddresses]; }
+ u32* Literals()
+ { return &Data[NumAddresses * 2]; }
+
+private:
+ TinyVector<u32> Data;
+};
+}
+
+#endif //MELONDS_JITBLOCK_H