> - /* Avoid mode switch when restoring CPSR. */ > - env->uncached_cpsr = val & CPSR_M; > - cpsr_write(env, val, 0xffffffff); > + > + env->uncached_cpsr = env->cpsr_vmstate & CPSR_M; > + cpsr_write(env, env->cpsr_vmstate, 0xffffffff);
You've removed the helpful comment explaining why this wierdness exists. Please put it back. A comment in cpu.h explaining what cpsr_vmstate is for would also be nice. Specifically it's a hack[1] to transfer data between the pre_save/post_load hooks and the vmstate machinery. IMO "vmstate" is a sufficiently generic term that it could be confused with some actual cpu register, especially once we get round to implementing the hypervisor extensions. Paul [1] Maybe a necessary hack, but still a wart from requiring static table driven vmstate descriptions.