47c47
< if(passesCondition(CcrIcc, COND2))
---
> if(passesCondition(Ccr<3:0>, COND2))
53c53
< if(passesCondition(CcrXcc, COND2))
---
> if(passesCondition(Ccr<7:4>, COND2))
61c61
< if(passesCondition(CcrIcc, COND2))
---
> if(passesCondition(Ccr<3:0>, COND2))
127c127
< 0x08: addc({{Rd = Rs1.sdw + Rs2_or_imm13 + CcrIccC;}});
---
> 0x08: addc({{Rd = Rs1.sdw + Rs2_or_imm13 + Ccr<0:0>;}});
131c131
< YValue = Rd<63:32>;
---
> Y = Rd<63:32>;
135c135
< YValue = Rd.sdw;
---
> Y = Rd.sdw;
137c137
< 0x0C: subc({{Rd.sdw = Rs1.sdw + (~Rs2_or_imm13) + 1 + CcrIccC;}});
---
> 0x0C: subc({{Rd.sdw = Rs1.sdw + (~Rs2_or_imm13) + 1 + Ccr<0:0>}});
146c146
< Rd.udw = ((YValue << 32) | Rs1.udw<31:0>) / Rs2_or_imm13;
---
> Rd.udw = ((Y << 32) | Rs1.udw<31:0>) / Rs2_or_imm13;
156c156
< Rd.udw = ((int64_t)((YValue << 32) | Rs1.sdw<31:0>)) / Rs2_or_imm13.sdw;
---
> Rd.udw = ((int64_t)((Y << 32) | Rs1.sdw<31:0>)) / Rs2_or_imm13.sdw;
190c190
< int64_t carryin = CcrIccC;
---
> int64_t carryin = Ccr<0:0>;
201c201
< YValue = resTemp<63:32>;}},
---
> Y = resTemp<63:32>;}},
206c206
< YValue = resTemp<63:32>;}},
---
> Y = resTemp<63:32>;}},
210c210
< int64_t carryin = CcrIccC;
---
> int64_t carryin = Ccr<0:0>;
227c227
< resTemp = (uint64_t)((YValue << 32) | Rs1.udw<31:0>) / val2;
---
> resTemp = (uint64_t)((Y << 32) | Rs1.udw<31:0>) / val2;
243c243
< Rd = resTemp = (int64_t)((YValue << 32) | Rs1.sdw<31:0>) / val2;
---
> Rd = resTemp = (int64_t)((Y << 32) | Rs1.sdw<31:0>) / val2;
298,300c298,300
< ((CcrIccN
< ^ CcrIccV) << 32);
< if(!YValue<0:>)
---
> ((Ccr<3:3>
> ^ Ccr<1:1>) << 32);
> if(!Y<0:>)
303c303
< YValue = YValue<31:1> | (savedLSB << 31);}},
---
> Y = Y<31:1> | (savedLSB << 31);}},
324,366c324,337
< 0x28: decode RS1 {
< 0x0: rdy({{Rd = YValue;}});
< 0x2: rdccr({{Rd = Ccr;}});
< 0x3: rdasi({{Rd = Asi;}});
< 0x4: PrivTick::rdtick({{Rd = Tick;}});
< 0x5: rdpc({{Rd = xc->readPC();}});
< 0x6: rdfprs({{Rd = Fprs;}});
< 0xF: decode I {
< 0x0: Nop::membar({{/*Membar isn't needed yet*/}});
< 0x1: Nop::stbar({{/*Stbar isn't needed yet*/}});
< }
< }
< 0x2A: decode RS1 {
< format Priv
< {
< 0x0: rdprtpc({{
< Rd = xc->readMiscReg(MISCREG_TPC_BASE + Tl);
< }});
< 0x1: rdprtnpc({{
< Rd = xc->readMiscReg(MISCREG_TNPC_BASE + Tl);
< }});
< 0x2: rdprtstate({{
< Rd = xc->readMiscReg(MISCREG_TSTATE_BASE + Tl);
< }});
< 0x3: rdprtt({{
< Rd = xc->readMiscReg(MISCREG_TT_BASE + Tl);
< }});
< 0x4: rdprtick({{Rd = Tick;}});
< 0x5: rdprtba({{Rd = Tba;}});
< 0x6: rdprpstate({{Rd = Pstate;}});
< 0x7: rdprtl({{Rd = Tl;}});
< 0x8: rdprpil({{Rd = Pil;}});
< 0x9: rdprcwp({{Rd = Cwp;}});
< 0xA: rdprcansave({{Rd = Cansave;}});
< 0xB: rdprcanrestore({{Rd = Canrestore;}});
< 0xC: rdprcleanwin({{Rd = Cleanwin;}});
< 0xD: rdprotherwin({{Rd = Otherwin;}});
< 0xE: rdprwstate({{Rd = Wstate;}});
< }
< //The floating point queue isn't implemented right now.
< 0xF: Trap::rdprfq({{fault = new IllegalInstruction;}});
< 0x1F: Priv::rdprver({{Rd = Ver;}});
< }
---
> // XXX might want a format rdipr thing here
> 0x28: rdasr({{
> Rd = xc->readMiscRegWithEffect(RS1 + AsrStart, fault);
> }});
> 0x29: rdhpr({{
> // XXX Need to protect with format that traps non-priv/priv
> // access
> Rd = xc->readMiscRegWithEffect(RS1 + HprStart, fault);
> }});
> 0x2A: rdpr({{
> // XXX Need to protect with format that traps non-priv
> // access
> Rd = xc->readMiscRegWithEffect(RS1 + PrStart, fault);
> }});
371c342
< fault = new SpillNOther(WstateOther);
---
> fault = new SpillNOther(Wstate<5:3>);
373c344
< fault = new SpillNNormal(WstateNormal);
---
> fault = new SpillNNormal(Wstate<2:0>);
382c353
< if(passesCondition(CcrIcc, COND4))
---
> if(passesCondition(Ccr<3:0>, COND4))
388c359
< if(passesCondition(CcrXcc, COND4))
---
> if(passesCondition(Ccr<7:4>, COND4))
422,428c393,395
< 0x30: decode RD {
< 0x0: wry({{Y = Rs1 ^ Rs2_or_imm13;}});
< 0x2: wrccr({{Ccr = Rs1 ^ Rs2_or_imm13;}});
< 0x3: wrasi({{Asi = Rs1 ^ Rs2_or_imm13;}});
< 0x6: wrfprs({{Asi = Rs1 ^ Rs2_or_imm13;}});
< 0xF: Trap::sir({{fault = new SoftwareInitiatedReset;}});
< }
---
> 0x30: wrasr({{
> xc->setMiscRegWithEffect(RD + AsrStart, Rs1 ^ Rs2_or_imm13);
> }});
433,464c400,409
< 0x32: decode RD {
< format Priv
< {
< 0x0: wrprtpc({{
< xc->setMiscReg(MISCREG_TPC_BASE + Tl,
< Rs1 ^ Rs2_or_imm13);
< }});
< 0x1: wrprtnpc({{
< xc->setMiscReg(MISCREG_TNPC_BASE + Tl,
< Rs1 ^ Rs2_or_imm13);
< }});
< 0x2: wrprtstate({{
< xc->setMiscReg(MISCREG_TSTATE_BASE + Tl,
< Rs1 ^ Rs2_or_imm13);
< }});
< 0x3: wrprtt({{
< xc->setMiscReg(MISCREG_TT_BASE + Tl,
< Rs1 ^ Rs2_or_imm13);
< }});
< 0x4: wrprtick({{Tick = Rs1 ^ Rs2_or_imm13;}});
< 0x5: wrprtba({{Tba = Rs1 ^ Rs2_or_imm13;}});
< 0x6: wrprpstate({{Pstate = Rs1 ^ Rs2_or_imm13;}});
< 0x7: wrprtl({{Tl = Rs1 ^ Rs2_or_imm13;}});
< 0x8: wrprpil({{Pil = Rs1 ^ Rs2_or_imm13;}});
< 0x9: wrprcwp({{Cwp = Rs1 ^ Rs2_or_imm13;}});
< 0xA: wrprcansave({{Cansave = Rs1 ^ Rs2_or_imm13;}});
< 0xB: wrprcanrestore({{Canrestore = Rs1 ^ Rs2_or_imm13;}});
< 0xC: wrprcleanwin({{Cleanwin = Rs1 ^ Rs2_or_imm13;}});
< 0xD: wrprotherwin({{Otherwin = Rs1 ^ Rs2_or_imm13;}});
< 0xE: wrprwstate({{Wstate = Rs1 ^ Rs2_or_imm13;}});
< }
< }
---
> 0x32: wrpr({{
> // XXX Need to protect with format that traps non-priv
> // access
> xc->setMiscRegWithEffect(RD + PrStart, Rs1 ^ Rs2_or_imm13);
> }});
> 0x33: wrhpr({{
> // XXX Need to protect with format that traps non-priv/priv
> // access
> xc->setMiscRegWithEffect(RD + HprStart, Rs1 ^ Rs2_or_imm13);
> }});
495c440
< fault = new FillNOther(WstateOther);
---
> fault = new FillNOther(Wstate<5:3>);
497c442
< fault = new FillNNormal(WstateNormal);
---
> fault = new FillNNormal(Wstate<2:0>);
514c459
< if(passesCondition(CcrIcc, COND2))
---
> if(passesCondition(Ccr<3:0>, COND2))
527c472
< if(passesCondition(CcrXcc, COND2))
---
> if(passesCondition(Ccr<7:4>, COND2))
548c493
< fault = new SpillNOther(WstateOther);
---
> fault = new SpillNOther(Wstate<5:3>);
550c495
< fault = new SpillNNormal(WstateNormal);
---
> fault = new SpillNNormal(Wstate<2:0>);
578c523
< fault = new FillNOther(WstateOther);
---
> fault = new FillNOther(Wstate<5:3>);
580c525
< fault = new FillNNormal(WstateNormal);
---
> fault = new FillNNormal(Wstate<2:0>);
597,602c542,549
< Cwp = xc->readMiscReg(MISCREG_TSTATE_CWP_BASE + Tl);
< Asi = xc->readMiscReg(MISCREG_TSTATE_ASI_BASE + Tl);
< Ccr = xc->readMiscReg(MISCREG_TSTATE_CCR_BASE + Tl);
< Pstate = xc->readMiscReg(MISCREG_TSTATE_PSTATE_BASE + Tl);
< NPC = xc->readMiscReg(MISCREG_TNPC_BASE + Tl);
< NNPC = NPC + 4;
---
>
> Cwp = Tstate<4:0>;
> Pstate = Tstate<20:8>;
> Asi = Tstate<31:24>;
> Ccr = Tstate<39:32>;
> Gl = Tstate<42:40>;
> NPC = Tnpc;
> NNPC = Tnpc + 4;
608,613c555,561
< Cwp = xc->readMiscReg(MISCREG_TSTATE_CWP_BASE + Tl);
< Asi = xc->readMiscReg(MISCREG_TSTATE_ASI_BASE + Tl);
< Ccr = xc->readMiscReg(MISCREG_TSTATE_CCR_BASE + Tl);
< Pstate = xc->readMiscReg(MISCREG_TSTATE_PSTATE_BASE + Tl);
< NPC = xc->readMiscReg(MISCREG_TPC_BASE + Tl);
< NNPC = xc->readMiscReg(MISCREG_TNPC_BASE + Tl);
---
> Cwp = Tstate<4:0>;
> Pstate = Tstate<20:8>;
> Asi = Tstate<31:24>;
> Ccr = Tstate<39:32>;
> Gl = Tstate<42:40>;
> NPC = Tpc;
> NNPC = Tnpc + 4;