Features/QOM/CPU: Difference between revisions

From QEMU
(Update status with new qom-cpu-alpha branch and obsolete the qom-cpu dependency)
m (Fix typo)
Line 13: Line 13:
#* NXP LPC43xx: Cortex-M4 + Cortex-M0
#* NXP LPC43xx: Cortex-M4 + Cortex-M0
#* ARM big.LITTLE: Cortex-A15 + Cortex-A7
#* ARM big.LITTLE: Cortex-A15 + Cortex-A7
#* Freescale Vybrid VF6xx/VFP7xx: Cortex-A5 + Cortex-M4
#* Freescale Vybrid VF6xx/VF7xx: Cortex-A5 + Cortex-M4
# Long-term: Work towards allowing to compile multiple targets into one executable.
# Long-term: Work towards allowing to compile multiple targets into one executable.
#* Renesas R-Car H1, M1A: ARM Cortex-A9 + SH-4A
#* Renesas R-Car H1, M1A: ARM Cortex-A9 + SH-4A

Revision as of 11:12, 7 April 2012

QOM CPU

Convert CPUState to QOM.

Motivation

  1. Short-term: Allow inspecting and modifying CPU properties via QOM.
  2. Short-term: Avoid common target code doing ifs or switches on CPU identifiers.
    • target-arm/helper.c: cpu_reset_model_id()
  3. Short-term: Replace CPU_COMMON macro and duplicated reset code by inheritance.
  4. Mid-term: Avoid dependency of common code on #defines from cpu.h.
  5. Mid-term: Ease instantiation of mixed software-visible cores within one target, e.g.
    • NXP LPC43xx: Cortex-M4 + Cortex-M0
    • ARM big.LITTLE: Cortex-A15 + Cortex-A7
    • Freescale Vybrid VF6xx/VF7xx: Cortex-A5 + Cortex-M4
  6. Long-term: Work towards allowing to compile multiple targets into one executable.
    • Renesas R-Car H1, M1A: ARM Cortex-A9 + SH-4A
    • Renesas R-Home S1: ARM Cortex-A9 + SH-4A + ARM7TDMI-S

"CPU" name conflict

Identifier current interim final
struct CPU$archState or
struct CPUState_$arch
defined in target-*/cpu.h ???
#define CPUState alias to CPU$archState / CPUState_$arch dropped in favor of CPU
struct CPUClass class
#define CPU_CLASS(class) cast macro for class
struct CPU object
#define CPU(obj) cast macro for object
#define CPU_GET_CLASS(obj) macro to obtain class pointer

Resolved by renaming existing CPUState to CPUArchState and by using struct CPUState for the object state, while using CPU(obj) as macro for casting.

Status

NB: Due to hosting issues, branches have moved to GitHub.

name depends on
type_init()
qom-user type_init()
object_class_get_list()
qom-cpu qom-user
qom-cpu-arm qom-cpu
qom-cpu-unicore32 qom-cpu
qom-cpu-s390 qom-cpu
qom-cpu-x86, part 1 qom-cpu
qom-cpu-sparc qom-cpu
qom-cpu-ppc qom-cpu
qom-cpu-alpha qom-cpu
qom-cpu-sh4 (to be updated) qom-cpu, object_realize()
qom-cpu-others (to be split up) qom-cpu