Le 15/01/2018 à 19:37, Richard Henderson a écrit : > On 01/12/2018 04:43 PM, Laurent Vivier wrote: ... >> - dc->user = (env->sr & SR_S) == 0; >> +#if defined(CONFIG_SOFTMMU) >> + dc->user = (env->sr & SR_S) == 0 ? M68K_USER_FROM_MSR : 0; >> + dc->user |= (env->sfc & 4) == 0 ? M68K_USER_FROM_SFC : 0; >> + dc->user |= (env->dfc & 4) == 0 ? M68K_USER_FROM_DFC : 0; >> +#endif > > Really you should be extracting these from tb->flags.
Do I need to keep the dc->user variable? > You also need to end the TB when assigning to SFC and DFC. Otherwise the > generated code is not in sync with the register contents. I checked that and SFC and DFC are assigned by movec, and movec ends with gen_lookup_tb() that set s->is_jmp to DISAS_UPDATE, and this forces an exit from the loop and tcg_gen_exit_tb() (like move_to_sr()). Thanks, Laurent