This patch fixes processing of rfi instructions in icount mode.
In this mode writing to interrupt/peripheral state is controlled by can_do_io flag. This flag must be set explicitly before helper function invocation. Signed-off-by: Maria Klimushenkova <maria.klimushenkova@ispras.ru> Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru> Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
09a333ee3d
commit
a59d628f92
@ -3919,9 +3919,15 @@ static void gen_rfi(DisasContext *ctx)
|
|||||||
}
|
}
|
||||||
/* Restore CPU state */
|
/* Restore CPU state */
|
||||||
CHK_SV;
|
CHK_SV;
|
||||||
|
if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) {
|
||||||
|
gen_io_start();
|
||||||
|
}
|
||||||
gen_update_cfar(ctx, ctx->base.pc_next - 4);
|
gen_update_cfar(ctx, ctx->base.pc_next - 4);
|
||||||
gen_helper_rfi(cpu_env);
|
gen_helper_rfi(cpu_env);
|
||||||
gen_sync_exception(ctx);
|
gen_sync_exception(ctx);
|
||||||
|
if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) {
|
||||||
|
gen_io_end();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3933,9 +3939,15 @@ static void gen_rfid(DisasContext *ctx)
|
|||||||
#else
|
#else
|
||||||
/* Restore CPU state */
|
/* Restore CPU state */
|
||||||
CHK_SV;
|
CHK_SV;
|
||||||
|
if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) {
|
||||||
|
gen_io_start();
|
||||||
|
}
|
||||||
gen_update_cfar(ctx, ctx->base.pc_next - 4);
|
gen_update_cfar(ctx, ctx->base.pc_next - 4);
|
||||||
gen_helper_rfid(cpu_env);
|
gen_helper_rfid(cpu_env);
|
||||||
gen_sync_exception(ctx);
|
gen_sync_exception(ctx);
|
||||||
|
if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) {
|
||||||
|
gen_io_end();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user