T-EMU  2
The Terma Emulator
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
Cpu.h
Go to the documentation of this file.
1 //===-- temu-c/Cpu.h - CPU Interfaces ---------------------------*- C++ -*-===//
2 //
3 // T-EMU: The Terma Emulator
4 // (c) Terma 2015
5 // Authors: Mattias Holm <maho (at) terma.com>
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef TEMU_CPU_H
10 #define TEMU_CPU_H
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 #include "temu-c/Support/Objsys.h"
17 
18 #include <stdint.h>
19 
20 typedef enum {
23  teCS_Idling,
28 
30 typedef enum {
34 
35 typedef enum {
40  teCER_Break,
46 
47 // ATC flags
48 #define TEMU_ATC_FETCH 1
49 #define TEMU_ATC_READ (1 << 1)
50 #define TEMU_ATC_WRITE (1 << 2)
51 #define TEMU_ATC_USER (1 << 3)
52 #define TEMU_ATC_SUPER (1 << 4)
53 #define TEMU_ATC_HYPER (1 << 5)
54 
55 
56 // Named struct type here keeps libclang happy
57 
137 typedef struct temu_CpuIface {
138  void (*reset)(void *Cpu, int ResetType);
139  temu_CpuExitReason (*run)(void *Cpu, uint64_t Cycles);
140  temu_CpuExitReason (*runUntil)(void *Cpu, uint64_t Cycles);
141  temu_CpuExitReason (*step)(void *Cpu, uint64_t Steps);
142  temu_CpuExitReason (*stepUntil)(void *Cpu, uint64_t Steps, uint64_t Cycles);
143 
144  void __attribute__((noreturn)) (*raiseTrap)(void *Obj, int Trap);
145  void (*enterIdleMode)(void *Obj);
146  void __attribute__((noreturn)) (*exitEmuCore)(void *Cpu, temu_CpuExitReason Reason);
147 
148  uint64_t (*getFreq)(void *Cpu);
149  int64_t (*getCycles)(void *Cpu);
150  int64_t (*getSteps)(void *Cpu);
151  temu_CpuState (*getState)(void *Cpu);
152  void (*setPc)(void *Cpu, uint64_t Pc);
153  uint64_t (*getPc)(void *Cpu);
154  void (*setGpr)(void *Cpu, int Reg, uint64_t Value);
155  uint64_t (*getGpr)(void *Cpu, unsigned Reg);
156  void (*setFpr32)(void *Cpu, unsigned Reg, uint32_t Value);
157  uint32_t (*getFpr32)(void *Cpu, unsigned Reg);
158  void (*setFpr64)(void *Cpu, unsigned Reg, uint64_t Value);
159  uint64_t (*getFpr64)(void *Cpu, unsigned Reg);
160  void (*setSpr)(void *Cpu, unsigned Reg, uint64_t Value);
161  uint64_t (*getSpr)(void *Cpu, unsigned Reg);
162  int (*getRegId)(void *Cpu, const char *RegName);
163  const char* (*getRegName)(void *Cpu, int RegId);
164  uint32_t (*assemble)(void *Cpu, const char *AsmStr);
165  char* (*disassemble)(void *Cpu, uint32_t Instr);
166  void (*enableTraps)(void *Cpu);
167  void (*disableTraps)(void *Cpu);
168  void (*invalidateAtc)(void *Obj, uint64_t Addr, uint64_t Pages,
169  uint32_t Flags);
170 
171  uint64_t (*translateAddress)(void *Cpu, uint64_t Va, uint32_t *Flags);
172 
174  void (*setPowerState)(void *Cpu, temu_PowerState Ps);
175 
176  void (*enableTrapEvents)(void *Cpu);
177  void (*disableTrapEvents)(void *Cpu);
178 
179  void (*enableErrorModeEvents)(void *Cpu);
180  void (*disableErrorModeEvents)(void *Cpu);
181 } temu_CpuIface;
182 
183 TEMU_IFACE_REFERENCE_TYPE(temu_Cpu);
184 
185 typedef struct {
186  uint32_t TrapId;
188 
189 
190 #ifdef __cplusplus
191 }
192 #endif
193 
194 #endif /* ! TEMU_CPU_H */
uint32_t TrapId
Definition: Cpu.h:186
temu_CpuState
Definition: Cpu.h:20
temu_CpuState(* getState)(void *Cpu)
Definition: Cpu.h:151
uint64_t(* getGpr)(void *Cpu, unsigned Reg)
Definition: Cpu.h:155
struct temu_CpuIface temu_CpuIface
Common CPU interface.
Exited due to halting (e.g. sparc error mode)
Definition: Cpu.h:38
Other early exit reason.
Definition: Cpu.h:44
void int Trap
Definition: Cpu.h:144
temu_CpuExitReason(* step)(void *Cpu, uint64_t Steps)
Definition: Cpu.h:141
uint32_t(* getFpr32)(void *Cpu, unsigned Reg)
Definition: Cpu.h:157
TEMU_IFACE_REFERENCE_TYPE(temu_Cpu)
void(* enableTraps)(void *Cpu)
Definition: Cpu.h:166
void(* invalidateAtc)(void *Obj, uint64_t Addr, uint64_t Pages, uint32_t Flags)
Definition: Cpu.h:168
temu_CpuExitReason
Definition: Cpu.h:35
Exited due to watchpoint write hit.
Definition: Cpu.h:43
void(* setFpr32)(void *Cpu, unsigned Reg, uint32_t Value)
Definition: Cpu.h:156
uint64_t(* getFreq)(void *Cpu)
Definition: Cpu.h:148
void(* disableTraps)(void *Cpu)
Definition: Cpu.h:167
Normal all ok CPU state.
Definition: Cpu.h:21
void(* enterIdleMode)(void *Obj)
Definition: Cpu.h:145
uint64_t(* getPc)(void *Cpu)
Definition: Cpu.h:153
temu_PowerState(* getPowerState)(void *Cpu)
Definition: Cpu.h:173
uint64_t(* getSpr)(void *Cpu, unsigned Reg)
Definition: Cpu.h:161
System is powered off.
Definition: Cpu.h:31
void temu_CpuExitReason Reason
Definition: Cpu.h:146
Exited due to watchpoint read hit.
Definition: Cpu.h:42
int(* getRegId)(void *Cpu, const char *RegName)
Definition: Cpu.h:162
void __attribute__((noreturn))(*raiseTrap)(void *Obj
Exited due to breakpoint hit.
Definition: Cpu.h:41
int64_t(* getCycles)(void *Cpu)
Definition: Cpu.h:149
void(* setSpr)(void *Cpu, unsigned Reg, uint64_t Value)
Definition: Cpu.h:160
temu_PowerState
Used to indicate whether a model is powered on.
Definition: Cpu.h:30
System is powered on.
Definition: Cpu.h:32
temu_CpuExitReason(* runUntil)(void *Cpu, uint64_t Cycles)
Definition: Cpu.h:140
void(* enableErrorModeEvents)(void *Cpu)
Definition: Cpu.h:179
void(* setGpr)(void *Cpu, int Reg, uint64_t Value)
Definition: Cpu.h:154
void(* disableErrorModeEvents)(void *Cpu)
Definition: Cpu.h:180
uint32_t(* assemble)(void *Cpu, const char *AsmStr)
Definition: Cpu.h:164
Normal exit (cannot be passed to early exit)
Definition: Cpu.h:36
temu_CpuExitReason(* stepUntil)(void *Cpu, uint64_t Steps, uint64_t Cycles)
Definition: Cpu.h:142
uint64_t(* getFpr64)(void *Cpu, unsigned Reg)
Definition: Cpu.h:159
Common CPU interface.
Definition: Cpu.h:137
temu_CpuExitReason(* run)(void *Cpu, uint64_t Cycles)
Definition: Cpu.h:139
void(* reset)(void *Cpu, int ResetType)
Definition: Cpu.h:138
void(* setPc)(void *Cpu, uint64_t Pc)
Definition: Cpu.h:152
void(* setFpr64)(void *Cpu, unsigned Reg, uint64_t Value)
Definition: Cpu.h:158
uint64_t(* translateAddress)(void *Cpu, uint64_t Va, uint32_t *Flags)
Definition: Cpu.h:171
int64_t(* getSteps)(void *Cpu)
Definition: Cpu.h:150
Exited due to trap (sync trap)
Definition: Cpu.h:37
void(* setPowerState)(void *Cpu, temu_PowerState Ps)
Definition: Cpu.h:174
void(* disableTrapEvents)(void *Cpu)
Definition: Cpu.h:177
void(* enableTrapEvents)(void *Cpu)
Definition: Cpu.h:176