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~

Reply via email to