TEMU  4.4
The Terma Emulator
CpuUnstable.h
Go to the documentation of this file.
1 //===-- temu-c/CpuUnstable.h - Generic CPU Layout ---------------*- C++ -*-===//
2 //
3 // TEMU: The Terma Emulator
4 // (c) Terma 2024
5 // Authors: Mattias Holm <maho (at) terma.com>
6 //
7 //===----------------------------------------------------------------------===//
8 #ifndef TEMU_CPU_UNSTABLE_H
9 #define TEMU_CPU_UNSTABLE_H
10 
11 #include "temu-c/Target/Cpu.h"
12 #include "temu-c/Support/Events.h"
13 #include "temu-c/Memory/Memory.h"
14 #include "temu-c/Models/Power.h"
15 
16 #include <setjmp.h>
17 #include <stdint.h>
18 #include <stdlib.h>
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 // These structures are unstable and should not be relied on in user code
25 // Types in this file are subject to:
26 // - Additions
27 // - Removal
28 // - Change, even between patch versions
29 
30 typedef struct {
31  jmp_buf buf;
32 } temu_jmp_buf_t;
33 
34 typedef enum {
39 } temu_InstrClass;
40 
41 typedef enum {
48 } temu_StatClass;
49 
50 typedef struct {
51  uint64_t InstrClassCounter[4];
54  uint64_t GeneratedBlocks;
56  uint64_t ConnectedChains;
58 
66 
67  uint64_t AtcFetchHits;
68  uint64_t AtcReadHits;
69  uint64_t AtcWriteHits;
70  uint64_t AtcFetchMisses;
71  uint64_t AtcReadMisses;
72  uint64_t AtcWriteMisses;
73  uint64_t AtcFullFlushes;
76  uint64_t MMUFlushes;
77  uint64_t SyncOps;
78 
79  uint64_t LastBlockPageVA;
80  uint64_t LastBlockPA;
81 
82  uint64_t EarlyReturns;
83 
84  uint64_t AtcFetchIRMisses;
85  uint64_t BypassReads;
86  uint64_t BypassWrites;
89  uint64_t TrapsRaised;
90  uint64_t InterruptsTaken;
92 
93  uint64_t AccumulatedTime;
95 
96  uint64_t CasaCount;
97 } temu_ExecutionStatistics;
98 
99 typedef struct RootPattern RootPattern;
100 
101 #define TEMU_NUMBER_OF_TRACE_ENTRIES 4096
102 
103 typedef enum {
116 } temu_TraceType;
117 
118 typedef struct {
119  uint64_t StepCount; // Steps in processor
120  uint64_t PC; // Program counter
121  uint64_t TimeStampCounter; // Host timestamp counter
122  temu_TraceType Type; // Kind of trace entry
123  uint32_t Instruction; // Instruction if tracing entry is an instruction
124 } temu_CpuTraceEntry;
125 
126 typedef struct {
127  unsigned CurrentEntry;
128  temu_CpuTraceEntry Entry[TEMU_NUMBER_OF_TRACE_ENTRIES];
129 } temu_CpuTrace;
130 
131 typedef struct {
132  void *Data;
133  void (*Call)(void *, void *);
134 } temu_CallOp;
135 
136 typedef struct {
138 
139  int64_t IdleSteps;
140 
142  temu_jmp_buf_t jmpbuf;
143  uint32_t Flags;
144  uint32_t CPUId; //!< Local CPU core ID
145  int32_t CPUType;
146  uint32_t CPUIndex; //!< Global CPU ID
147 
149  uint32_t StickyFlags;
150 
151  int64_t NullEventID;
153 
155  temu_ExecutionStatistics Stats;
157 
158  // Binary translation helper values
159  uint64_t BlockPC;
160  uint64_t BlockSteps;
161 
162  void *memSpace; // Memory space, direct pointer
164  //temu_PDCIfaceRef PDCManager;
165 
166  intptr_t bac_i_diff; // Branch arc cache / intermediate difference
168  uint64_t bacValidity[32]; // Normally only uses 16 of these (4096 bytes /
169  // page, divided by 64)
170  uint64_t HostFlags; // For speeding up ICC operations
171 
173 
174  RootPattern *CodePatterns;
175 
176  uint8_t ExitOnSync;
177 
181 
183 
184  uint64_t SkipNextIdleTag;
185 
186 #ifdef TEMU_DEBUG_CORE
187  temu_CpuTrace Trace;
188 #endif
189 
192  temu_CallOp *CallOps;
193 } temu_Cpu;
194 
195 #ifdef __cplusplus
196 }
197 #endif
198 
199 #endif // !TEMU_CPU_UNSTABLE_H
temu_Cpu::HostFlags
uint64_t HostFlags
Definition: CpuUnstable.h:170
teIC_Alu
@ teIC_Alu
Definition: CpuUnstable.h:35
teTT_Instr
@ teTT_Instr
Definition: CpuUnstable.h:104
temu_Cpu::EnableExecutionTimeStat
uint8_t EnableExecutionTimeStat
Definition: CpuUnstable.h:154
TEMU_NUMBER_OF_TRACE_ENTRIES
#define TEMU_NUMBER_OF_TRACE_ENTRIES
Definition: CpuUnstable.h:101
temu_ExecutionStatistics::BypassReads
uint64_t BypassReads
Definition: CpuUnstable.h:85
temu_CpuTraceEntry::StepCount
uint64_t StepCount
Definition: CpuUnstable.h:119
teTT_Unknown
@ teTT_Unknown
Definition: CpuUnstable.h:109
temu_ExecutionStatistics::AtcReadMisses
uint64_t AtcReadMisses
Definition: CpuUnstable.h:71
temu_ExecutionStatistics::AtcWriteMisses
uint64_t AtcWriteMisses
Definition: CpuUnstable.h:72
temu_ExecutionStatistics::InstrClassCounter
uint64_t InstrClassCounter[4]
Definition: CpuUnstable.h:51
temu_Cpu::jmpbuf
temu_jmp_buf_t jmpbuf
Definition: CpuUnstable.h:142
temu_ExecutionStatistics::BlocksWithoutUncondBranches
uint64_t BlocksWithoutUncondBranches
Definition: CpuUnstable.h:65
temu_Cpu::CallOpsCapacity
size_t CallOpsCapacity
Definition: CpuUnstable.h:191
temu_Cpu::Target
temu_TargetExecutionIfaceRef Target
Definition: CpuUnstable.h:156
temu_ExecutionStatistics::ConnectedChains
uint64_t ConnectedChains
Definition: CpuUnstable.h:56
temu_Cpu::ForceReturnResult
temu_CpuExitReason ForceReturnResult
Definition: CpuUnstable.h:172
RootPattern
struct RootPattern RootPattern
Definition: CpuUnstable.h:99
temu_jmp_buf_t::buf
jmp_buf buf
Definition: CpuUnstable.h:31
temu_Cpu::CPUIndex
uint32_t CPUIndex
Global CPU ID.
Definition: CpuUnstable.h:146
temu_ExecutionStatistics::AtcWriteHits
uint64_t AtcWriteHits
Definition: CpuUnstable.h:69
temu_ExecutionStatistics::AtcFullFlushes
uint64_t AtcFullFlushes
Definition: CpuUnstable.h:73
temu_CallOp::Call
void(* Call)(void *, void *)
Definition: CpuUnstable.h:133
temu_Cpu::bac_i_diff
intptr_t bac_i_diff
Definition: CpuUnstable.h:166
temu_Cpu::branchArcCache
void * branchArcCache
Definition: CpuUnstable.h:167
temu_Cpu::CallOps
temu_CallOp * CallOps
Definition: CpuUnstable.h:192
temu_CallOp::Data
void * Data
Definition: CpuUnstable.h:132
teIC_Mem
@ teIC_Mem
Definition: CpuUnstable.h:36
temu_CpuTraceEntry::TimeStampCounter
uint64_t TimeStampCounter
Definition: CpuUnstable.h:121
temu_Cpu::State
temu_CpuState State
Definition: CpuUnstable.h:141
temu_Cpu::CPUType
int32_t CPUType
Definition: CpuUnstable.h:145
temu_Cpu::CodePatterns
RootPattern * CodePatterns
Definition: CpuUnstable.h:174
temu_ExecutionStatistics::EarlyReturns
uint64_t EarlyReturns
Definition: CpuUnstable.h:82
temu_Cpu::writeTransaction
temu_MemTransaction * writeTransaction
Definition: CpuUnstable.h:180
temu_Cpu::CPUId
uint32_t CPUId
Local CPU core ID.
Definition: CpuUnstable.h:144
temu_CpuTrace::CurrentEntry
unsigned CurrentEntry
Definition: CpuUnstable.h:127
temu_ExecutionStatistics::ExecutedTrampolines
uint64_t ExecutedTrampolines
Definition: CpuUnstable.h:57
temu_Cpu::ExitOnSync
uint8_t ExitOnSync
Definition: CpuUnstable.h:176
temu_ExecutionStatistics::TrapsRaised
uint64_t TrapsRaised
Definition: CpuUnstable.h:89
temu_CpuTraceEntry::PC
uint64_t PC
Definition: CpuUnstable.h:120
temu_ExecutionStatistics::ExecutedTranslatedInstructions
uint64_t ExecutedTranslatedInstructions
Definition: CpuUnstable.h:53
temu_ExecutionStatistics::BlocksWithUncondBranches
uint64_t BlocksWithUncondBranches
Definition: CpuUnstable.h:64
temu_Cpu::IdleSteps
int64_t IdleSteps
Definition: CpuUnstable.h:139
teSC_ExecutedTranslatedBlocks
@ teSC_ExecutedTranslatedBlocks
Definition: CpuUnstable.h:46
temu_ExecutionStatistics::AccumulatedSyncTime
uint64_t AccumulatedSyncTime
Definition: CpuUnstable.h:94
teTT_Attribute
@ teTT_Attribute
Definition: CpuUnstable.h:108
teTT_RebindPC
@ teTT_RebindPC
Definition: CpuUnstable.h:113
temu_CpuTrace::Entry
temu_CpuTraceEntry Entry[TEMU_NUMBER_OF_TRACE_ENTRIES]
Definition: CpuUnstable.h:128
temu_Cpu::StickyFlags
uint32_t StickyFlags
Definition: CpuUnstable.h:149
temu_ExecutionStatistics::ExecutedTranslatedBlocks
uint64_t ExecutedTranslatedBlocks
Definition: CpuUnstable.h:52
temu_ExecutionStatistics::AtcReadHits
uint64_t AtcReadHits
Definition: CpuUnstable.h:68
temu_ExecutionStatistics::MMUFlushes
uint64_t MMUFlushes
Definition: CpuUnstable.h:76
temu_Cpu::bacValidity
uint64_t bacValidity[32]
Definition: CpuUnstable.h:168
temu_ExecutionStatistics::AtcFetchHits
uint64_t AtcFetchHits
Definition: CpuUnstable.h:67
temu_ExecutionStatistics::CasaCount
uint64_t CasaCount
Definition: CpuUnstable.h:96
temu_ExecutionStatistics::BlocksIndirectBranches
uint64_t BlocksIndirectBranches
Definition: CpuUnstable.h:62
temu_Cpu::Flags
uint32_t Flags
Definition: CpuUnstable.h:143
teIC_Branch
@ teIC_Branch
Definition: CpuUnstable.h:37
temu_Cpu::NullEventID
int64_t NullEventID
Definition: CpuUnstable.h:151
teTT_Illegal
@ teTT_Illegal
Definition: CpuUnstable.h:112
temu_Cpu::ExitReason
temu_CpuExitReason ExitReason
Definition: CpuUnstable.h:182
teSC_MemInstr
@ teSC_MemInstr
Definition: CpuUnstable.h:43
temu_ExecutionStatistics::BlocksWithoutBranches
uint64_t BlocksWithoutBranches
Definition: CpuUnstable.h:59
temu_ExecutionStatistics::ForceCacheMissWrites
uint64_t ForceCacheMissWrites
Definition: CpuUnstable.h:88
temu_Cpu::readTransaction
temu_MemTransaction * readTransaction
Definition: CpuUnstable.h:179
temu_Cpu::Stats
temu_ExecutionStatistics Stats
Definition: CpuUnstable.h:155
temu_ExecutionStatistics::AccumulatedTime
uint64_t AccumulatedTime
Definition: CpuUnstable.h:93
temu_ExecutionStatistics::BypassWrites
uint64_t BypassWrites
Definition: CpuUnstable.h:86
teSC_FloatInstr
@ teSC_FloatInstr
Definition: CpuUnstable.h:45
teTT_Trampoline
@ teTT_Trampoline
Definition: CpuUnstable.h:107
teSC_AluInstr
@ teSC_AluInstr
Definition: CpuUnstable.h:42
teTT_Idle
@ teTT_Idle
Definition: CpuUnstable.h:111
temu_Cpu::memSpace
void * memSpace
Definition: CpuUnstable.h:162
temu_Cpu::EnterHaltedEventID
int64_t EnterHaltedEventID
Definition: CpuUnstable.h:152
teSC_BranchInstr
@ teSC_BranchInstr
Definition: CpuUnstable.h:44
teTT_RebindNPC
@ teTT_RebindNPC
Definition: CpuUnstable.h:114
temu_ExecutionStatistics::TranslatedInstructions
uint64_t TranslatedInstructions
Definition: CpuUnstable.h:55
temu_Cpu::Super
temu_TimeSource Super
Definition: CpuUnstable.h:137
temu_ExecutionStatistics::EndOfPageFallthroughs
uint64_t EndOfPageFallthroughs
Definition: CpuUnstable.h:91
temu_ExecutionStatistics::AtcSuperPageEvictions
uint64_t AtcSuperPageEvictions
Definition: CpuUnstable.h:75
temu_ExecutionStatistics::BlocksWithAnnulledBranches
uint64_t BlocksWithAnnulledBranches
Definition: CpuUnstable.h:61
temu_Cpu::BlockPC
uint64_t BlockPC
Definition: CpuUnstable.h:159
teSC_ExecutedTranslatedInstrs
@ teSC_ExecutedTranslatedInstrs
Definition: CpuUnstable.h:47
teTT_Interrupt
@ teTT_Interrupt
Definition: CpuUnstable.h:115
temu_ExecutionStatistics::BlocksWithoutAnnulledBranches
uint64_t BlocksWithoutAnnulledBranches
Definition: CpuUnstable.h:60
temu_Cpu::fetchTransaction
temu_MemTransaction * fetchTransaction
Definition: CpuUnstable.h:178
teTT_Enter
@ teTT_Enter
Definition: CpuUnstable.h:105
temu_Cpu::PowerState
temu_PowerState PowerState
Definition: CpuUnstable.h:148
teTT_Profile
@ teTT_Profile
Definition: CpuUnstable.h:110
temu_ExecutionStatistics::BlocksRelativeBranches
uint64_t BlocksRelativeBranches
Definition: CpuUnstable.h:63
temu_ExecutionStatistics::AtcFetchMisses
uint64_t AtcFetchMisses
Definition: CpuUnstable.h:70
temu_ExecutionStatistics::AtcFetchIRMisses
uint64_t AtcFetchIRMisses
Definition: CpuUnstable.h:84
temu_Cpu::BlockSteps
uint64_t BlockSteps
Definition: CpuUnstable.h:160
temu_ExecutionStatistics::LastBlockPA
uint64_t LastBlockPA
Definition: CpuUnstable.h:80
temu_CpuTraceEntry::Type
temu_TraceType Type
Definition: CpuUnstable.h:122
temu_ExecutionStatistics::GeneratedBlocks
uint64_t GeneratedBlocks
Definition: CpuUnstable.h:54
temu_Cpu::SkipNextIdleTag
uint64_t SkipNextIdleTag
Definition: CpuUnstable.h:184
temu_Cpu::CallOpsSize
size_t CallOpsSize
Definition: CpuUnstable.h:190
teTT_Exit
@ teTT_Exit
Definition: CpuUnstable.h:106
temu_ExecutionStatistics::AtcUserPageEvictions
uint64_t AtcUserPageEvictions
Definition: CpuUnstable.h:74
temu_CpuTraceEntry::Instruction
uint32_t Instruction
Definition: CpuUnstable.h:123
temu_ExecutionStatistics::SyncOps
uint64_t SyncOps
Definition: CpuUnstable.h:77
temu_ExecutionStatistics::ForceCacheMissReads
uint64_t ForceCacheMissReads
Definition: CpuUnstable.h:87
temu_ExecutionStatistics::InterruptsTaken
uint64_t InterruptsTaken
Definition: CpuUnstable.h:90
temu_ExecutionStatistics::LastBlockPageVA
uint64_t LastBlockPageVA
Definition: CpuUnstable.h:79
teIC_Float
@ teIC_Float
Definition: CpuUnstable.h:38
temu_Cpu::memAccess
temu_MemAccessIfaceRef memAccess
Definition: CpuUnstable.h:163