45,48c45
< // Check if we are going to interrupt because of something
< setReg(miscReg, val);
< tc->getCpuPtr()->checkInterrupts = true;
< tc->getCpuPtr()->post_interrupt(hstick_match);
---
> setReg(miscReg, val);;
55a53,54
> tc->getCpuPtr()->checkInterrupts = true;
> tc->getCpuPtr()->post_interrupt(soft_interrupt);
98a98,100
> case MISCREG_HINTP:
> setReg(miscReg, val);
>
207,209c209,213
< tc->getCpuPtr()->post_interrupt(soft_interrupt);
< tc->getCpuPtr()->checkInterrupts = true;
< softint |= ULL(1) << 16;
---
> if (!(tc->readMiscReg(MISCREG_STICK_CMPR) & (ULL(1) << 63))) {
> tc->getCpuPtr()->post_interrupt(soft_interrupt);
> tc->getCpuPtr()->checkInterrupts = true;
> setRegWithEffect(MISCREG_SOFTINT, softint | (ULL(1) << 16), tc);
> }
228,229c232,236
< tc->getCpuPtr()->post_interrupt(hstick_match);
< tc->getCpuPtr()->checkInterrupts = true;
---
> if (!(tc->readMiscReg(MISCREG_HSTICK_CMPR) & (ULL(1) << 63))) {
> setRegWithEffect(MISCREG_HINTP, 1, tc);
> tc->getCpuPtr()->post_interrupt(hstick_match);
> tc->getCpuPtr()->checkInterrupts = true;
> }