157a158,163
> void
> advancePC(PCState &pcState) const
> {
> pcState.advance();
> }
>
222,226c228
< Addr pc = xc->readPC();
< if (isThumb(pc))
< return pc + 4;
< else
< return pc + 8;
---
> return xc->pcState().instPC();
229d230
< // Perform an regular branch.
234,241c235,237
< Addr npc = xc->readNextPC();
< if (isThumb(npc)) {
< val &= ~mask(1);
< } else {
< val &= ~mask(2);
< }
< xc->setNextPC((npc & PcModeMask) |
< (val & ~PcModeMask));
---
> PCState pc = xc->pcState();
> pc.instNPC(val);
> xc->pcState(pc);
282,305c278,280
< Addr stateBits = xc->readPC() & PcModeMask;
< Addr jBit = PcJBit;
< Addr tBit = PcTBit;
< bool thumbEE = (stateBits == (tBit | jBit));
<
< Addr newPc = (val & ~PcModeMask);
< if (thumbEE) {
< if (bits(newPc, 0)) {
< newPc = newPc & ~mask(1);
< } else {
< panic("Bad thumbEE interworking branch address %#x.\n", newPc);
< }
< } else {
< if (bits(newPc, 0)) {
< stateBits = tBit;
< newPc = newPc & ~mask(1);
< } else if (!bits(newPc, 1)) {
< stateBits = 0;
< } else {
< warn("Bad interworking branch address %#x.\n", newPc);
< }
< }
< newPc = newPc | stateBits;
< xc->setNextPC(newPc);
---
> PCState pc = xc->pcState();
> pc.instIWNPC(val);
> xc->pcState(pc);
314,321c289,291
< Addr stateBits = xc->readPC() & PcModeMask;
< Addr jBit = PcJBit;
< Addr tBit = PcTBit;
< if (!jBit && !tBit) {
< setIWNextPC(xc, val);
< } else {
< setNextPC(xc, val);
< }
---
> PCState pc = xc->pcState();
> pc.instAIWNPC(val);
> xc->pcState(pc);