/
blockmanager.h
88 lines (69 loc) · 1.88 KB
/
blockmanager.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#pragma once
#include "types.h"
#include "recompiler.h"
#include "compiledblock.h"
struct pginfo
{
u32 invalidates;
union
{
struct
{
u32 ManualCheck:1; //bit 0 :1-> manual check , 0 -> locked check
u32 reserved:31; //bit 1-31: reserved
};
u32 full;
} flags;
};
extern u32* block_stack_pointer;
#define PAGE_MANUALCHECK 1
pginfo GetPageInfo(u32 address);
#define FindBlock FindBlock_fast
#define FindCode FindCode_fast
extern "C" { // called from asm
CompiledBlockInfo* __fastcall FindBlock_fast(u32 address);
BasicBlockEP* __fastcall FindCode_fast(u32 address);
}
void RegisterBlock(CompiledBlockInfo* block);
void UnRegisterBlock(CompiledBlockInfo* block);
CompiledBlockInfo* bm_ReverseLookup(void* code_ptr);
int FreeSuspendedBlocks();
CompiledBlockInfo* FindOrRecompileBlock(u32 pc);
void __fastcall SuspendBlock(CompiledBlockInfo* block);
void __fastcall SuspendAllBlocks();
void __fastcall _SuspendAllBlocks();
CompiledBlockInfo* __fastcall FindBlock_full_compile(u32 address,CompiledBlockInfo* fastblock);
void InitBlockManager();
void ResetBlockManager();
void TermBlockManager();
void* dyna_malloc(u32 size);
void* dyna_realloc(void*ptr,u32 oldsize,u32 newsize);
void* dyna_finalize(void* ptr,u32 oldsize,u32 newsize);
void dyna_profiler_tick(void* addr);
struct bm_stats
{
u32 block_count;
u32 block_size;
u32 cache_size;
u64 CompileTimeMilisecs;
u32 locked_blocks;
u32 locked_block_calls_delta;
u32 manual_blocks;
u32 manual_block_calls_delta;
u32 full_lookups;
u32 fast_lookups;
};
void bm_GetStats(bm_stats* stats);
//#define _BM_CACHE_STATS
#define LOOKUP_HASH_SIZE 0x4000
#define LOOKUP_HASH_MASK (LOOKUP_HASH_SIZE-1)
extern CompiledBlockInfo* BlockLookupGuess[LOOKUP_HASH_SIZE];
//#define COUNT_BLOCK_LOCKTYPE_USAGE
extern u32 manbs;
extern u32 lockbs;
#define DYNA_MEM_POOL_SIZE 24*1024*1024
extern "C"
{
extern u8* DynarecCache;
extern u32 DynarecCacheSize;
}