@@ -1609,7 +1609,17 @@ static void gen_mfpr(int ra, int regno)
if (regno == 250) {
/* WALL_TIME */
- gen_helper_get_time(cpu_ir[ra]);
+ if (use_iocount) {
+ /* Mark as an IO operation because we read the time. */
+ gen_io_start();
+ gen_helper_get_time(cpu_ir[ra]);
+ gen_io_end();
+ /* Other targets break the TB to be able to take timer
+ interrupts immediately. This doesn't apply to Alpha
+ because we never take interrupts in PALmode. */
+ } else {
+ gen_helper_get_time(cpu_ir[ra]);
+ }
return;
}
@@ -1661,7 +1671,14 @@ static ExitStatus gen_mtpr(DisasContext *ctx, int rb, int regno)
case 251:
/* ALARM */
- gen_helper_set_alarm(tmp);
+ if (use_icount) {
+ /* Mark as an IO operation because we reference the time. */
+ gen_io_start();
+ gen_helper_set_alarm(tmp);
+ gen_io_end();
+ } else {
+ gen_helper_set_alarm(tmp);
+ }
break;
default: