TEMU  3.0
The Terma Emulator
Cpu.h
Go to the documentation of this file.
1 //===-- temu-c/Cpu.h - Micro-processor functions ----------------*- C++ -*-===//
2 //
3 // TEMU: The Terma Emulator
4 // (c) Terma 2015
5 // Authors: Mattias Holm <maho (at) terma.com>
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef TEMU_SUPPORT_CPU
10 #define TEMU_SUPPORT_CPU
35 #include <stdint.h>
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
50 TEMU_API uint64_t temu_cpuGetFreq(void *Cpu);
51 
66 TEMU_API void temu_cpuSetPc(void *Cpu, uint64_t Pc);
67 
79 TEMU_API uint64_t temu_cpuGetPc(void *Cpu);
80 
95 TEMU_API void temu_cpuReset(void *Cpu, int ResetType);
96 
114 TEMU_API uint64_t temu_cpuRun(void *Cpu, uint64_t Cycles);
115 
135 TEMU_API uint64_t temu_cpuStep(void *Cpu, uint64_t Steps);
136 
147 TEMU_API int temu_cpuTranslateAddress(void *Cpu, uint64_t Va, uint32_t flags,
148  uint64_t *physAddressResult);
149 
156 TEMU_API uint64_t temu_cpuGetReg(void *Cpu, unsigned Reg);
157 
164 TEMU_API void temu_cpuSetReg(void *Cpu, unsigned Reg, uint64_t Value);
165 
172 TEMU_API float temu_cpuGetFpr32(void *Cpu, unsigned Reg);
173 
180 TEMU_API uint32_t temu_cpuGetFpr32Bits(void *Cpu, unsigned Reg);
181 
188 TEMU_API void temu_cpuSetFpr32(void *Cpu, unsigned Reg, float Value);
189 
197 TEMU_API void temu_cpuSetFpr32Bits(void *Cpu, unsigned Reg, uint32_t Value);
198 
205 TEMU_API double temu_cpuGetFpr64(void *Cpu, unsigned Reg);
206 
213 TEMU_API uint64_t temu_cpuGetFpr64Bits(void *Cpu, unsigned Reg);
214 
221 TEMU_API void temu_cpuSetFpr64(void *Cpu, unsigned Reg, double Value);
222 
229 TEMU_API void temu_cpuSetFpr64Bits(void *Cpu, unsigned Reg, uint64_t Value);
230 
235 TEMU_API void temu_cpuEnableTraps(void *Cpu);
236 
241 TEMU_API void temu_cpuDisableTraps(void *Cpu);
242 
256 TEMU_API void temu_cpuRaiseTrap(void *Cpu, int Trap, unsigned Flags);
257 
258 /* Sparc specific functions */
259 
260 typedef void (*temu_SparcAsrHandler)(void *Cpu, uint32_t Instr);
261 // typedef void (*temu_SparcAsiHandler)(void *Cpu, temu_MemTransaction *MT);
262 
268 TEMU_API int temu_sparcGetWindowCount(void *Cpu);
269 
277 TEMU_API uint32_t temu_sparcGetWindowedReg(void *Cpu, int Window, unsigned Reg);
278 
286 TEMU_API void temu_sparcSetWindowedReg(void *Cpu, int Window, unsigned Reg,
287  uint32_t Value);
288 
294 TEMU_API void temu_sparcSetY(void *Cpu, uint64_t Value);
295 
301 TEMU_API uint64_t temu_sparcGetY(void *Cpu);
302 
309 TEMU_API void temu_sparcSetAsr(void *Cpu, unsigned Reg, uint64_t Value);
310 
317 TEMU_API uint64_t temu_sparcGetAsr(void *Cpu, unsigned Reg);
318 
325 TEMU_API void temu_sparcSetAsrWriter(void *Cpu, unsigned Asr,
326  temu_SparcAsrHandler Handler);
327 
334 TEMU_API void temu_sparcSetAsrReader(void *Cpu, unsigned Asr,
335  temu_SparcAsrHandler Handler);
336 
342 TEMU_API void temu_sparcSetPsr(void *Cpu, uint32_t Value);
343 
349 TEMU_API uint32_t temu_sparcGetPsr(void *Cpu);
350 
356 TEMU_API void temu_sparcSetTbr(void *Cpu, uint32_t Value);
357 
363 TEMU_API uint32_t temu_sparcGetTbr(void *Cpu);
364 
370 TEMU_API void temu_sparcSetWim(void *Cpu, uint32_t Value);
371 
377 TEMU_API uint32_t temu_sparcGetWim(void *Cpu);
378 
388 TEMU_API void temu_sparcSetNPc(void *Cpu, uint32_t Value);
389 
395 TEMU_API uint32_t temu_sparcGetNPc(void *Cpu);
396 
397 
403 TEMU_API void temu_armSetAPSR(void *Cpu, uint32_t Value);
409 TEMU_API uint32_t temu_armGetAPSR(void *Cpu);
415 TEMU_API void temu_armSetFPSCR(void *Cpu, uint32_t Value);
421 TEMU_API uint32_t temu_armGetFPSCR(void *Cpu);
422 
428 TEMU_API void temu_armSetFPEXC(void *Cpu, uint32_t Value);
434 TEMU_API uint32_t temu_armGetFPEXC(void *Cpu);
435 
443 TEMU_API void temu_armSetFPINST(void *Cpu, int Idx, uint32_t Value);
450 TEMU_API uint32_t temu_armGetFPINST(void *Cpu, int Idx);
451 
457 TEMU_API unsigned temu_armGetExecMode(void *Cpu);
463 TEMU_API void temu_armSetExecMode(void *Cpu, unsigned Mode);
464 
470 TEMU_API void temu_ppcSetCrReg(void *Cpu, uint32_t Value);
476 TEMU_API uint32_t temu_ppcGetCrReg(void *Cpu);
482 TEMU_API void temu_ppcSetXerReg(void *Cpu, uint32_t Value);
488 TEMU_API uint32_t temu_ppcGetXerReg(void *Cpu);
489 
495 TEMU_API void temu_ppcSetMsrReg(void *Cpu, uint64_t Value);
501 TEMU_API uint64_t temu_ppcGetMsrReg(void *Cpu);
507 TEMU_API void temu_ppcSetReserveAddress(void *Cpu, uint64_t reserveAddress);
513 TEMU_API uint64_t temu_ppcGetReserveAddress(void *Cpu);
530 TEMU_API void temu_ppcSetCtrReg(void *Cpu, uint32_t Value);
536 TEMU_API uint32_t temu_ppcGetCtrReg(void *Cpu);
542 TEMU_API void temu_ppcSetFpscrReg(void *Cpu, uint32_t Value);
548 TEMU_API uint32_t temu_ppcGetFpscrReg(void *Cpu);
554 TEMU_API void temu_ppcSetLrReg(void *Cpu, uint64_t Value);
560 TEMU_API uint64_t temu_ppcGetLrReg(void *Cpu);
567 TEMU_API void temu_cpuSetSpr(void *Cpu, unsigned RegId, uint64_t Value);
574 TEMU_API uint64_t temu_cpuGetSpr(void *Cpu, unsigned RegId);
575 
576 // Machine functions
577 
583 TEMU_API void *temu_cpuGetMachine(void *Cpu);
584 
600 TEMU_API void temu_machineReset(void *Machine, int ResetType);
601 
619 TEMU_API uint64_t temu_machineRun(void *Machine, uint64_t NanoSecs);
620 
621 typedef void (*temu_SafeCb)(void *);
622 
662 TEMU_API void temu_postCallback(void *Obj, temu_SafeCb Cb, void *Arg);
663 
671 TEMU_API uint64_t temu_cpuGetStat(void *Obj, int Stat);
678 TEMU_API void temu_cpuResetStat(void *Obj, int Stat);
679 
680 #ifdef __cplusplus
681 }
682 #endif
683 
684 #endif /* ! TEMU_SUPPORT_CPU */
TEMU_API uint32_t temu_ppcGetXerReg(void *Cpu)
TEMU_API uint64_t temu_sparcGetY(void *Cpu)
TEMU_API void temu_sparcSetWindowedReg(void *Cpu, int Window, unsigned Reg, uint32_t Value)
TEMU_API void temu_sparcSetTbr(void *Cpu, uint32_t Value)
TEMU_API void temu_sparcSetNPc(void *Cpu, uint32_t Value)
TEMU_API void temu_ppcClearAddressReservation(void *Cpu)
TEMU_API void temu_cpuEnableTraps(void *Cpu)
TEMU_API void * temu_cpuGetMachine(void *Cpu)
TEMU_API void temu_armSetExecMode(void *Cpu, unsigned Mode)
TEMU_API void temu_cpuRaiseTrap(void *Cpu, int Trap, unsigned Flags)
TEMU_API void temu_ppcSetFpscrReg(void *Cpu, uint32_t Value)
TEMU_API void temu_cpuSetSpr(void *Cpu, unsigned RegId, uint64_t Value)
TEMU_API void temu_ppcSetLrReg(void *Cpu, uint64_t Value)
TEMU_API void temu_cpuSetFpr64(void *Cpu, unsigned Reg, double Value)
TEMU_API uint32_t temu_sparcGetTbr(void *Cpu)
TEMU_API void temu_armSetAPSR(void *Cpu, uint32_t Value)
TEMU_API void temu_sparcSetAsr(void *Cpu, unsigned Reg, uint64_t Value)
TEMU_API uint32_t temu_sparcGetPsr(void *Cpu)
TEMU_API uint64_t temu_sparcGetAsr(void *Cpu, unsigned Reg)
void(* temu_SafeCb)(void *)
Definition: Cpu.h:621
TEMU_API void temu_armSetFPINST(void *Cpu, int Idx, uint32_t Value)
TEMU_API uint64_t temu_cpuGetPc(void *Cpu)
TEMU_API uint64_t temu_cpuRun(void *Cpu, uint64_t Cycles)
TEMU_API int temu_ppcIsReservationBitSet(void *Cpu)
TEMU_API uint32_t temu_ppcGetCtrReg(void *Cpu)
TEMU_API uint64_t temu_ppcGetMsrReg(void *Cpu)
TEMU_API uint64_t temu_cpuGetSpr(void *Cpu, unsigned RegId)
TEMU_API void temu_postCallback(void *Obj, temu_SafeCb Cb, void *Arg)
TEMU_API uint32_t temu_sparcGetWim(void *Cpu)
#define TEMU_API
Definition: Attributes.h:53
TEMU_API void temu_sparcSetPsr(void *Cpu, uint32_t Value)
TEMU_API unsigned temu_armGetExecMode(void *Cpu)
TEMU_API void temu_ppcSetXerReg(void *Cpu, uint32_t Value)
TEMU_API void temu_cpuSetFpr64Bits(void *Cpu, unsigned Reg, uint64_t Value)
TEMU_API void temu_machineReset(void *Machine, int ResetType)
TEMU_API int temu_cpuTranslateAddress(void *Cpu, uint64_t Va, uint32_t flags, uint64_t *physAddressResult)
TEMU_API uint32_t temu_armGetFPEXC(void *Cpu)
TEMU_API void temu_cpuSetReg(void *Cpu, unsigned Reg, uint64_t Value)
TEMU_API void temu_cpuSetFpr32Bits(void *Cpu, unsigned Reg, uint32_t Value)
TEMU_API int temu_sparcGetWindowCount(void *Cpu)
TEMU_API uint32_t temu_armGetFPINST(void *Cpu, int Idx)
TEMU_API uint32_t temu_ppcGetCrReg(void *Cpu)
TEMU_API void temu_sparcSetAsrReader(void *Cpu, unsigned Asr, temu_SparcAsrHandler Handler)
TEMU_API uint32_t temu_armGetFPSCR(void *Cpu)
TEMU_API void temu_ppcSetCrReg(void *Cpu, uint32_t Value)
TEMU_API uint64_t temu_cpuGetStat(void *Obj, int Stat)
TEMU_API uint64_t temu_cpuGetFpr64Bits(void *Cpu, unsigned Reg)
TEMU_API void temu_ppcSetMsrReg(void *Cpu, uint64_t Value)
TEMU_API uint64_t temu_machineRun(void *Machine, uint64_t NanoSecs)
TEMU_API uint64_t temu_cpuGetFreq(void *Cpu)
TEMU_API uint32_t temu_sparcGetNPc(void *Cpu)
TEMU_API void temu_ppcSetCtrReg(void *Cpu, uint32_t Value)
void(* temu_SparcAsrHandler)(void *Cpu, uint32_t Instr)
Definition: Cpu.h:260
TEMU_API void temu_armSetFPEXC(void *Cpu, uint32_t Value)
TEMU_API void temu_ppcSetReserveAddress(void *Cpu, uint64_t reserveAddress)
TEMU_API uint32_t temu_sparcGetWindowedReg(void *Cpu, int Window, unsigned Reg)
TEMU_API void temu_sparcSetY(void *Cpu, uint64_t Value)
TEMU_API uint64_t temu_ppcGetReserveAddress(void *Cpu)
TEMU_API void temu_sparcSetWim(void *Cpu, uint32_t Value)
TEMU_API void temu_cpuDisableTraps(void *Cpu)
TEMU_API uint32_t temu_armGetAPSR(void *Cpu)
TEMU_API void temu_cpuReset(void *Cpu, int ResetType)
TEMU_API double temu_cpuGetFpr64(void *Cpu, unsigned Reg)
TEMU_API uint32_t temu_ppcGetFpscrReg(void *Cpu)
TEMU_API void temu_sparcSetAsrWriter(void *Cpu, unsigned Asr, temu_SparcAsrHandler Handler)
TEMU_API uint64_t temu_ppcGetLrReg(void *Cpu)
TEMU_API uint32_t temu_cpuGetFpr32Bits(void *Cpu, unsigned Reg)
TEMU_API void temu_cpuSetFpr32(void *Cpu, unsigned Reg, float Value)
TEMU_API void temu_armSetFPSCR(void *Cpu, uint32_t Value)
TEMU_API uint64_t temu_cpuGetReg(void *Cpu, unsigned Reg)
TEMU_API float temu_cpuGetFpr32(void *Cpu, unsigned Reg)
TEMU_API void temu_cpuSetPc(void *Cpu, uint64_t Pc)
TEMU_API void temu_cpuResetStat(void *Obj, int Stat)
TEMU_API uint64_t temu_cpuStep(void *Cpu, uint64_t Steps)