On 08/02/2017 09:43 AM, Peter Maydell wrote: > + if (val & XPSR_EXCP) { > + /* This is a CPSR format value from an older QEMU. (We can tell > + * because values transferred in XPSR format always have zero > + * for the EXCP field, and CPSR format will always have bit 4 > + * set in CPSR_M.) Rearrange it into XPSR format. The significant > + * differences are that the T bit is not in the same place, the > + * primask/faultmask info may be in the CPSR I and F bits, and > + * we do not want the mode bits. > + */ > + uint32_t newval = val; > + > + newval &= (CPSR_NZCV | CPSR_Q | CPSR_IT | CPSR_GE); > + if (val & CPSR_T) { > + newval |= XPSR_T; > + } > + /* If the I or F bits are set then this is a migration from > + * an old QEMU which still stored the M profile FAULTMASK > + * and PRIMASK in env->daif. For a new QEMU, the data is > + * transferred using the vmstate_m_faultmask_primask subsection. > + */
The second comment seems sort of redundant with the first now. r~