mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 09:13:55 -06:00
target/ppc: Disconnect hflags from MSR
Copying flags directly from msr has drawbacks: (1) msr bits mean different things per cpu, (2) msr has 64 bits on 64 cpus while tb->flags has only 32 bits. Create a enum to define these bits. Document the origin of each bit and validate those bits that must match MSR. This fixes the truncation of env->hflags to tb->flags, because we no longer have hflags bits set above bit 31. Most of the code in ppc_tr_init_disas_context is moved over to hreg_compute_hflags. Some of it is simple extractions from msr, some requires examining other cpu flags. Anything that is moved becomes a simple extract from hflags in ppc_tr_init_disas_context. Several existing bugs are left in ppc_tr_init_disas_context, where additional changes are required -- to be addressed in future patches. Remove a broken #if 0 block. Reported-by: Ivan Warren <ivan@vmfacility.fr> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20210323184340.619757-3-richard.henderson@linaro.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
edece45d4a
commit
2df4fe7abe
3 changed files with 95 additions and 50 deletions
|
@ -585,6 +585,31 @@ enum {
|
|||
POWERPC_FLAG_HID0_LE = 0x00400000,
|
||||
};
|
||||
|
||||
/*
|
||||
* Bits for env->hflags.
|
||||
*
|
||||
* Most of these bits overlap with corresponding bits in MSR,
|
||||
* but some come from other sources. Those that do come from
|
||||
* the MSR are validated in hreg_compute_hflags.
|
||||
*/
|
||||
enum {
|
||||
HFLAGS_LE = 0, /* MSR_LE -- comes from elsewhere on 601 */
|
||||
HFLAGS_HV = 1, /* computed from MSR_HV and other state */
|
||||
HFLAGS_64 = 2, /* computed from MSR_CE and MSR_SF */
|
||||
HFLAGS_DR = 4, /* MSR_DR */
|
||||
HFLAGS_IR = 5, /* MSR_IR */
|
||||
HFLAGS_SPE = 6, /* from MSR_SPE if cpu has SPE; avoid overlap w/ MSR_VR */
|
||||
HFLAGS_VSX = 7, /* from MSR_VSX if cpu has VSX; avoid overlap w/ MSR_AP */
|
||||
HFLAGS_TM = 8, /* computed from MSR_TM */
|
||||
HFLAGS_BE = 9, /* MSR_BE -- from elsewhere on embedded ppc */
|
||||
HFLAGS_SE = 10, /* MSR_SE -- from elsewhere on embedded ppc */
|
||||
HFLAGS_FP = 13, /* MSR_FP */
|
||||
HFLAGS_PR = 14, /* MSR_PR */
|
||||
HFLAGS_SA = 22, /* MSR_SA */
|
||||
HFLAGS_AP = 23, /* MSR_AP */
|
||||
HFLAGS_VR = 25, /* MSR_VR if cpu has VRE */
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Floating point status and control register */
|
||||
#define FPSCR_DRN2 34 /* Decimal Floating-Point rounding control */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue