TEMU  4.0
The Terma Emulator
PowerPC.h
Go to the documentation of this file.
1 //===-- temu-c/PowerPC.h - PowerPC Architecture Interfaces --------*- C++
2 //-*-===//
3 //
4 // TEMU: The Terma Emulator
5 // (c) Terma 2018
6 // Authors: Mattias Holm <maho (at) terma.com>
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef TEMU_POWERPC_H
11 #define TEMU_POWERPC_H
12 
13 #include "temu-c/Memory/Memory.h"
14 #include "temu-c/Support/Objsys.h"
15 #include <stdint.h>
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 /*!
22  Interface for PowerPC specific functionality
23  */
24 typedef struct temu_PowerPCIface {
25  uint64_t (*getXER)(const void *Cpu); //!< Get XER register
26  void (*setXER)(void *Cpu, uint64_t Value); //!< Set XER register
27  uint32_t (*getCR)(const void *Cpu); //!< Get CR register
28  void (*setCR)(void *Cpu, uint32_t Value); //!< Set XER register
29  uint64_t (*getMSR)(const void *Cpu); //!< Get MSR register
30  void (*setMSR)(void *Cpu, uint64_t Value); //!< Set MSR register
31  uint64_t (*getReserveAddress)(const void *Obj); //!< Get reserved address as used by `lwarx` and `stwcx`
32  void (*setReserveAddress)(const void *Obj, uint64_t address); //!< Set reserved address as used by `lwarx` and `stwcx`
33  int (*isReservationBitSet)(const void *Obj); //!< Check if reserved address as used by `lwarx` and `stwcx` is set
34  void (*clearAddressReservation)(const void *Obj); //!< Clear reserved address as used by `lwarx` and `stwcx`
35  uint32_t (*getCTR)(const void *Cpu); //!< Get CTR register
36  void (*setCTR)(void *Cpu, uint32_t Value); //!< Set CTR register
37  uint64_t (*getLR)(const void *Cpu); //!< Get LR register
38  void (*setLR)(void *Cpu, uint64_t Value); //!< Set LR register
39  uint32_t (*getFPSCR)(const void *Cpu); //!< Get FPSCR register
40  void (*setFPSCR)(void *Cpu, uint32_t Value); //!< Set FPSCR register
41  void (*installEAResource)(void *Obj, unsigned RID,
42  temu_MemAccessIfaceRef Device); //!< Install EA resource
43 } temu_PowerPCIface;
44 
45 #define TEMU_POWERPC_IFACE_TYPE "temu::PowerPCIface"
46 TEMU_IFACE_REFERENCE_TYPE(temu_PowerPC);
47 
48 #ifdef __cplusplus
49 }
50 #endif
51 
52 #endif /* ! TEMU_POWERPC_H */
temu_PowerPCIface::installEAResource
void(* installEAResource)(void *Obj, unsigned RID, temu_MemAccessIfaceRef Device)
Install EA resource.
Definition: PowerPC.h:41
temu_PowerPCIface::setCR
void(* setCR)(void *Cpu, uint32_t Value)
Set XER register.
Definition: PowerPC.h:28
temu_PowerPCIface::setFPSCR
void(* setFPSCR)(void *Cpu, uint32_t Value)
Set FPSCR register.
Definition: PowerPC.h:40
temu_PowerPCIface::setLR
void(* setLR)(void *Cpu, uint64_t Value)
Set LR register.
Definition: PowerPC.h:38
temu_PowerPCIface::setMSR
void(* setMSR)(void *Cpu, uint64_t Value)
Set MSR register.
Definition: PowerPC.h:30
temu_PowerPCIface
Definition: PowerPC.h:24
temu_PowerPCIface::clearAddressReservation
void(* clearAddressReservation)(const void *Obj)
Clear reserved address as used by lwarx and stwcx
Definition: PowerPC.h:34
temu_PowerPCIface::setReserveAddress
void(* setReserveAddress)(const void *Obj, uint64_t address)
Set reserved address as used by lwarx and stwcx
Definition: PowerPC.h:32
temu_PowerPCIface::setCTR
void(* setCTR)(void *Cpu, uint32_t Value)
Set CTR register.
Definition: PowerPC.h:36
temu_PowerPCIface::isReservationBitSet
int(* isReservationBitSet)(const void *Obj)
Check if reserved address as used by lwarx and stwcx is set.
Definition: PowerPC.h:33
temu_PowerPCIface::setXER
void(* setXER)(void *Cpu, uint64_t Value)
Set XER register.
Definition: PowerPC.h:26