Features/QOM/CPU: Difference between revisions
(Status update: qom-cpu-alpha applied) |
(Update status with new qom-cpu-mips branch) |
||
Line 82: | Line 82: | ||
|- | |- | ||
|<del>qom-user</del> | |<del>qom-user</del> | ||
|type_init() | |<del>type_init()</del> | ||
|- | |- | ||
|<del>object_class_get_list()</del> | |<del>object_class_get_list()</del> | ||
Line 88: | Line 88: | ||
|- | |- | ||
|<del>qom-cpu</del> | |<del>qom-cpu</del> | ||
|qom-user | |<del>qom-user</del> | ||
|- | |- | ||
|<del>[https://github.com/afaerber/qemu-cpu/commits/qom-cpu-arm qom-cpu-arm]</del> | |<del>[https://github.com/afaerber/qemu-cpu/commits/qom-cpu-arm qom-cpu-arm]</del> | ||
Line 127: | Line 127: | ||
|- | |- | ||
|[https://github.com/afaerber/qemu-cpu/commits/qom-cpu-m68k qom-cpu-m68k] | |[https://github.com/afaerber/qemu-cpu/commits/qom-cpu-m68k qom-cpu-m68k] | ||
|<del>qom-cpu, qom-cpu-arm, qom-cpu-s390, qom-cpu-lm32</del>, qom-cpu-cris, qom-cpu-microblaze, qom-cpu-sh4 | |<del>qom-cpu, object_class_get_list(), qom-cpu-arm, qom-cpu-s390, qom-cpu-lm32</del>, qom-cpu-cris, qom-cpu-microblaze, qom-cpu-sh4 | ||
|- | |- | ||
|[https://github.com/afaerber/qemu-cpu/commits/qom-cpu- | |[https://github.com/afaerber/qemu-cpu/commits/qom-cpu-mips qom-cpu-mips] | ||
|<del>qom-cpu</del> | |<del>qom-cpu, qom-cpu-s390, qom-cpu-lm32</del>, qom-cpu-microblaze, qom-cpu-sh4, qom-cpu-m68k | ||
|} | |} |
Revision as of 21:42, 15 April 2012
Summary
Convert CPUState to QOM.
Motivation
- Short-term: Allow inspecting and modifying CPU properties via QOM.
- Short-term: Avoid common target code doing ifs or switches on CPU identifiers.
- target-arm/helper.c: cpu_reset_model_id()
- Short-term: Replace CPU_COMMON macro and duplicated reset code by inheritance.
- Mid-term: Avoid dependency of common code on #defines from cpu.h.
- 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
- 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.
Owner
- Name: Andreas Färber
- Email: afaerber@suse.de
Status
QOM CPUState exists, former CPUState is renamed to CPUArchState.
Individual targets have been converted, some are pending review, other conversions are being simplified.
Field movements from CPUArchState to CPUState (and subsequent removal of CPUArchState and CPU_COMMON) are waiting on completion of conversion of all targets.
Patch series and branches
NB: Due to hosting issues, branches have moved to GitHub.
name | depends on |
---|---|
qom-cpu-cris | |
qom-cpu-microblaze | |
qom-cpu-sh4, part 1 | |
qom-cpu-m68k | |
qom-cpu-mips |