decoder.isa revision 2022
18150SN/A//////////////////////////////////////////////////////////////////// 28150SN/A// 311957Sgabeblack@google.com// The actual decoder specification 411957Sgabeblack@google.com// 511957Sgabeblack@google.com 611957Sgabeblack@google.comdecode OP default Trap::unknown({{illegal_instruction}}) { 711957Sgabeblack@google.com 811957Sgabeblack@google.com 0x0: decode OP2 { 911957Sgabeblack@google.com 0x0: Trap::illtrap({{illegal_instruction}}); //ILLTRAP 1011957Sgabeblack@google.com 0x1: Branch::bpcc({{ 1111957Sgabeblack@google.com switch((CC12 << 1) | CC02) 1211957Sgabeblack@google.com { 1311957Sgabeblack@google.com case 1: case 3: 1411957Sgabeblack@google.com throw illegal_instruction; 1511957Sgabeblack@google.com case 0: 1611957Sgabeblack@google.com if(passesCondition(xc->regs.MiscRegs.ccrFields.icc, COND2)) 1711957Sgabeblack@google.com ;//branchHere 1811957Sgabeblack@google.com break; 1911957Sgabeblack@google.com case 2: 2011957Sgabeblack@google.com if(passesCondition(xc->regs.MiscRegs.ccrFields.xcc, COND2)) 2111957Sgabeblack@google.com ;//branchHere 2211957Sgabeblack@google.com break; 2311957Sgabeblack@google.com } 2411957Sgabeblack@google.com }});//BPcc 2511957Sgabeblack@google.com 0x2: Branch::bicc({{ 2611957Sgabeblack@google.com if(passesCondition(xc->regs.MiscRegs.ccrFields.icc, COND2)) 2711957Sgabeblack@google.com ;//branchHere 2811957Sgabeblack@google.com }});//Bicc 2911957Sgabeblack@google.com 0x3: Branch::bpr({{ 3011957Sgabeblack@google.com switch(RCOND) 3111957Sgabeblack@google.com { 3211957Sgabeblack@google.com case 0: case 4: 3311957Sgabeblack@google.com throw illegal_instruction; 3411957Sgabeblack@google.com case 1: 3511957Sgabeblack@google.com if(Rs1 == 0) ;//branchHere 3611957Sgabeblack@google.com break; 3711957Sgabeblack@google.com case 2: 3811957Sgabeblack@google.com if(Rs1 <= 0) ;//branchHere 3911957Sgabeblack@google.com break; 4011957Sgabeblack@google.com case 3: 4111957Sgabeblack@google.com if(Rs1 < 0) ;//branchHere 4211957Sgabeblack@google.com break; 4311957Sgabeblack@google.com case 5: 4411957Sgabeblack@google.com if(Rs1 != 0) ;//branchHere 4511957Sgabeblack@google.com break; 4611957Sgabeblack@google.com case 6: 4711957Sgabeblack@google.com if(Rs1 > 0) ;//branchHere 4811957Sgabeblack@google.com break; 4911957Sgabeblack@google.com case 7: 5011957Sgabeblack@google.com if(Rs1 >= 0) ;//branchHere 5111957Sgabeblack@google.com break; 5211957Sgabeblack@google.com } 5311957Sgabeblack@google.com }}); //BPr 5411957Sgabeblack@google.com 0x4: IntegerOp::sethi({{Rd = (IMM22 << 10) & 0xFFFFFC00;}}); //SETHI (or NOP if rd == 0 and imm == 0) 5511957Sgabeblack@google.com 0x5: Trap::fbpfcc({{throw fp_disabled;}}); //FBPfcc 5611957Sgabeblack@google.com 0x6: Trap::fbfcc({{throw fp_disabled;}}); //FBfcc 5711957Sgabeblack@google.com } 5811957Sgabeblack@google.com 0x1: Branch::call({{ 5911957Sgabeblack@google.com //branch here 6011957Sgabeblack@google.com Rd = xc->pc; 6111957Sgabeblack@google.com }}); 6211957Sgabeblack@google.com 0x2: decode OP3 { 6311957Sgabeblack@google.com format IntegerOp { 6411957Sgabeblack@google.com 0x00: add({{ 6511957Sgabeblack@google.com INT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 6611957Sgabeblack@google.com Rd = Rs1.sdw + val2; 6711957Sgabeblack@google.com }});//ADD 6811957Sgabeblack@google.com 0x01: and({{ 6911957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.udw); 7011957Sgabeblack@google.com Rd = Rs1.udw & val2; 7111957Sgabeblack@google.com }});//AND 7211957Sgabeblack@google.com 0x02: or({{ 7311957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.udw); 7411957Sgabeblack@google.com Rd = Rs1.udw | val2; 7511957Sgabeblack@google.com }});//OR 7611957Sgabeblack@google.com 0x03: xor({{ 7711957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.udw); 7811957Sgabeblack@google.com Rd = Rs1.udw ^ val2; 7911957Sgabeblack@google.com }});//XOR 8011957Sgabeblack@google.com 0x04: sub({{ 8111957Sgabeblack@google.com INT64 val2 = ~((UINT64)(I ? SIMM13.sdw : Rs2.udw))+1; 8211957Sgabeblack@google.com Rd = Rs1.sdw + val2; 8311957Sgabeblack@google.com }});//SUB 8411957Sgabeblack@google.com 0x05: andn({{ 8511957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.udw); 8611957Sgabeblack@google.com Rd = Rs1.udw & ~val2; 8711957Sgabeblack@google.com }});//ANDN 8811957Sgabeblack@google.com 0x06: orn({{ 8911957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.udw); 9011957Sgabeblack@google.com Rd = Rs1.udw | ~val2; 9111957Sgabeblack@google.com }});//ORN 9211957Sgabeblack@google.com 0x07: xnor({{ 9311957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.udw); 9411957Sgabeblack@google.com Rd = ~(Rs1.udw ^ val2); 9511957Sgabeblack@google.com }});//XNOR 9611957Sgabeblack@google.com 0x08: addc({{ 9711957Sgabeblack@google.com INT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 9811957Sgabeblack@google.com INT64 carryin = xc->regs.MiscRegs.ccrfields.iccfields.c; 9911957Sgabeblack@google.com Rd = Rs1.sdw + val2 + carryin; 10011957Sgabeblack@google.com }});//ADDC 10111957Sgabeblack@google.com 0x09: mulx({{ 10211957Sgabeblack@google.com INT64 val2 = (I ? SIMM13.sdw : Rs2); 10311957Sgabeblack@google.com Rd = Rs1 * val2; 10411957Sgabeblack@google.com }});//MULX 10511957Sgabeblack@google.com 0x0A: umul({{ 10611957Sgabeblack@google.com UINT64 resTemp, val2 = (I ? SIMM13.sdw : Rs2.udw); 10711957Sgabeblack@google.com Rd = resTemp = Rs1.udw<31:0> * val2<31:0>; 10811957Sgabeblack@google.com xc->regs.MiscRegs.yFields.value = resTemp<63:32>; 10911957Sgabeblack@google.com }});//UMUL 11011957Sgabeblack@google.com 0x0B: smul({{ 11111957Sgabeblack@google.com INT64 resTemp, val2 = (I ? SIMM13.sdw : Rs2.sdw); 11211957Sgabeblack@google.com rd.sdw = resTemp = Rs1.sdw<31:0> * val2<31:0>; 11311957Sgabeblack@google.com xc->regs.MiscRegs.yFields.value = resTemp<63:32>; 11411957Sgabeblack@google.com }});//SMUL 11511957Sgabeblack@google.com 0x0C: subc({{ 11611957Sgabeblack@google.com INT64 val2 = ~((INT64)(I ? SIMM13.sdw : Rs2.sdw))+1; 11711957Sgabeblack@google.com INT64 carryin = xc->regs.MiscRegs.ccrfields.iccfields.c; 11811957Sgabeblack@google.com Rd.sdw = Rs1.sdw + val2 + carryin; 11911957Sgabeblack@google.com }});//SUBC 12011957Sgabeblack@google.com 0x0D: udivx({{ 12111957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.udw); 12211957Sgabeblack@google.com if(val2 == 0) throw division_by_zero; 12311957Sgabeblack@google.com Rd.udw = Rs1.udw / val2; 12411957Sgabeblack@google.com }});//UDIVX 12511957Sgabeblack@google.com 0x0E: udiv({{ 12611957Sgabeblack@google.com UINT32 resTemp, val2 = (I ? SIMM13.sw : Rs2.udw<31:0>); 12711957Sgabeblack@google.com if(val2 == 0) throw division_by_zero; 12811957Sgabeblack@google.com resTemp = (UINT64)((xc->regs.MiscRegs.yFields.value << 32) | Rs1.udw<31:0>) / val2; 12911957Sgabeblack@google.com INT32 overflow = (resTemp<63:32> != 0); 13011957Sgabeblack@google.com if(overflow) rd.udw = resTemp = 0xFFFFFFFF; 13111957Sgabeblack@google.com else rd.udw = resTemp; 13211957Sgabeblack@google.com }}); //UDIV 13311957Sgabeblack@google.com 0x0F: sdiv({{ 13411957Sgabeblack@google.com INT32 resTemp, val2 = (I ? SIMM13.sw : Rs2.sdw<31:0>); 13511957Sgabeblack@google.com if(val2 == 0) throw division_by_zero; 13611957Sgabeblack@google.com Rd.sdw = resTemp = (INT64)((xc->regs.MiscRegs.yFields.value << 32) | Rs1.sdw<31:0>) / val2; 13711957Sgabeblack@google.com INT32 overflow = (resTemp<63:31> != 0); 13811957Sgabeblack@google.com INT32 underflow = (resTemp<63:> && resTemp<62:31> != 0xFFFFFFFF); 13911957Sgabeblack@google.com if(overflow) rd.udw = resTemp = 0x7FFFFFFF; 14011957Sgabeblack@google.com else if(underflow) rd.udw = resTemp = 0xFFFFFFFF80000000; 14111957Sgabeblack@google.com else rd.udw = resTemp; 14211957Sgabeblack@google.com }});//SDIV 14311957Sgabeblack@google.com } 14411957Sgabeblack@google.com format IntegerOpCc { 14511957Sgabeblack@google.com 0x10: addcc({{ 14611957Sgabeblack@google.com INT64 resTemp, val2 = (I ? SIMM13.sdw : Rs2); 14711957Sgabeblack@google.com Rd = resTemp = Rs1 + val2;}}, 14811957Sgabeblack@google.com {{((Rs1 & 0xFFFFFFFF + val2 & 0xFFFFFFFF) >> 31)}}, 14911957Sgabeblack@google.com {{Rs1<31:> == val2<31:> && val2<31:> != resTemp<31:>}}, 15011957Sgabeblack@google.com {{((Rs1 >> 1) + (val2 >> 1) + (Rs1 & val2 & 0x1))<63:>}}, 15111957Sgabeblack@google.com {{Rs1<63:> == val2<63:> && val2<63:> != resTemp<63:>}} 15211957Sgabeblack@google.com );//ADDcc 15311957Sgabeblack@google.com 0x11: andcc({{ 15411957Sgabeblack@google.com INT64 val2 = (I ? SIMM13.sdw : Rs2); 15511957Sgabeblack@google.com Rd = Rs1 & val2;}} 15611957Sgabeblack@google.com ,{{0}},{{0}},{{0}},{{0}});//ANDcc 15711957Sgabeblack@google.com 0x12: orcc({{ 15811957Sgabeblack@google.com INT64 val2 = (I ? SIMM13.sdw : Rs2); 15911957Sgabeblack@google.com Rd = Rs1 | val2;}} 16011957Sgabeblack@google.com ,{{0}},{{0}},{{0}},{{0}});//ORcc 16111957Sgabeblack@google.com 0x13: xorcc({{ 16211957Sgabeblack@google.com INT64 val2 = (I ? SIMM13.sdw : Rs2); 16311957Sgabeblack@google.com Rd = Rs1 ^ val2;}} 16411957Sgabeblack@google.com ,{{0}},{{0}},{{0}},{{0}});//XORcc 16511957Sgabeblack@google.com 0x14: subcc({{ 16611957Sgabeblack@google.com INT64 resTemp, val2 = (INT64)(I ? SIMM13.sdw : Rs2); 16711957Sgabeblack@google.com Rd = resTemp = Rs1 - val2;}}, 16811957Sgabeblack@google.com {{((Rs1 & 0xFFFFFFFF + (~val2) & 0xFFFFFFFF + 1) >> 31)}}, 16911957Sgabeblack@google.com {{Rs1<31:> != val2<31:> && Rs1<31:> != resTemp<31:>}}, 17011957Sgabeblack@google.com {{((Rs1 >> 1) + (~val2) >> 1) + ((Rs1 | ~val2) & 0x1))<63:>}}, 17111957Sgabeblack@google.com {{Rs1<63:> != val2<63:> && Rs1<63:> != resTemp<63:>}} 17211957Sgabeblack@google.com );//SUBcc 17311957Sgabeblack@google.com 0x15: andncc({{ 17411957Sgabeblack@google.com INT64 val2 = (I ? SIMM13.sdw : Rs2); 17511957Sgabeblack@google.com Rd = Rs1 & ~val2;}} 17611957Sgabeblack@google.com ,{{0}},{{0}},{{0}},{{0}});//ANDNcc 17711957Sgabeblack@google.com 0x16: orncc({{ 17811957Sgabeblack@google.com INT64 val2 = (I ? SIMM13.sdw : Rs2); 17911957Sgabeblack@google.com Rd = Rs1 | ~val2;}} 18011957Sgabeblack@google.com ,{{0}},{{0}},{{0}},{{0}});//ORNcc 18111957Sgabeblack@google.com 0x17: xnorcc({{ 18211957Sgabeblack@google.com INT64 val2 = (I ? SIMM13.sdw : Rs2); 18311957Sgabeblack@google.com Rd = ~(Rs1 ^ val2);}} 18411957Sgabeblack@google.com ,{{0}},{{0}},{{0}},{{0}});//XNORcc 18511957Sgabeblack@google.com 0x18: addccc({{ 18611957Sgabeblack@google.com INT64 resTemp, val2 = (I ? SIMM13.sdw : Rs2); 18711957Sgabeblack@google.com INT64 carryin = xc->regs.MiscRegs.ccrfields.iccfields.c; 18811957Sgabeblack@google.com Rd = resTemp = Rs1 + val2 + carryin;}}, 18911957Sgabeblack@google.com {{((Rs1 & 0xFFFFFFFF + val2 & 0xFFFFFFFF) >> 31 + carryin)}}, 19011957Sgabeblack@google.com {{Rs1<31:> == val2<31:> && val2<31:> != resTemp<31:>}}, 19111957Sgabeblack@google.com {{((Rs1 >> 1) + (val2 >> 1) + ((Rs1 & val2) | (carryin & (Rs1 | val2)) & 0x1))<63:>}}, 19211957Sgabeblack@google.com {{Rs1<63:> == val2<63:> && val2<63:> != resTemp<63:>}} 19311957Sgabeblack@google.com );//ADDCcc 19411957Sgabeblack@google.com 0x1A: umulcc({{ 19511957Sgabeblack@google.com UINT64 resTemp, val2 = (I ? SIMM13.sdw : Rs2); 19611957Sgabeblack@google.com Rd = resTemp = Rs1.udw<31:0> * val2<31:0>; 19711957Sgabeblack@google.com xc->regs.MiscRegs.yFields.value = resTemp<63:32>;}} 19811957Sgabeblack@google.com ,{{0}},{{0}},{{0}},{{0}});//UMULcc 19911957Sgabeblack@google.com 0x1B: smulcc({{ 20011957Sgabeblack@google.com INT64 resTemp, val2 = (I ? SIMM13.sdw : Rs2); 20111957Sgabeblack@google.com Rd = resTemp = Rs1.sdw<31:0> * val2<31:0>; 20211957Sgabeblack@google.com xc->regs.MiscRegs.yFields.value = resTemp<63:32>;}} 20311957Sgabeblack@google.com ,{{0}},{{0}},{{0}},{{0}});//SMULcc 20411957Sgabeblack@google.com 0x1C: subccc({{ 20511957Sgabeblack@google.com INT64 resTemp, val2 = (INT64)(I ? SIMM13.sdw : Rs2); 20611957Sgabeblack@google.com INT64 carryin = xc->regs.MiscRegs.ccrfields.iccfields.c; 20711957Sgabeblack@google.com Rd = resTemp = Rs1 + ~(val2 + carryin) + 1;}}, 20811957Sgabeblack@google.com {{((Rs1 & 0xFFFFFFFF + (~(val2 + carryin)) & 0xFFFFFFFF + 1) >> 31)}}, 20911957Sgabeblack@google.com {{Rs1<31:> != val2<31:> && Rs1<31:> != resTemp<31:>}}, 21011957Sgabeblack@google.com {{((Rs1 >> 1) + (~(val2 + carryin)) >> 1) + ((Rs1 | ~(val2+carryin)) & 0x1))<63:>}}, 21111957Sgabeblack@google.com {{Rs1<63:> != val2<63:> && Rs1<63:> != resTemp<63:>}} 21211957Sgabeblack@google.com );//SUBCcc 21311957Sgabeblack@google.com 0x1D: udivxcc({{ 21411957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.udw); 21511957Sgabeblack@google.com if(val2 == 0) throw division_by_zero; 21611957Sgabeblack@google.com Rd.udw = Rs1.udw / val2;}} 21711957Sgabeblack@google.com ,{{0}},{{0}},{{0}},{{0}});//UDIVXcc 21811957Sgabeblack@google.com 0x1E: udivcc({{ 21911957Sgabeblack@google.com UINT32 resTemp, val2 = (I ? SIMM13.sw : Rs2.udw<31:0>); 22011957Sgabeblack@google.com if(val2 == 0) throw division_by_zero; 22111957Sgabeblack@google.com resTemp = (UINT64)((xc->regs.MiscRegs.yFields.value << 32) | Rs1.udw<31:0>) / val2; 22211957Sgabeblack@google.com INT32 overflow = (resTemp<63:32> != 0); 22311957Sgabeblack@google.com if(overflow) rd.udw = resTemp = 0xFFFFFFFF; 22411957Sgabeblack@google.com else rd.udw = resTemp;}}, 22511957Sgabeblack@google.com {{0}}, 22611957Sgabeblack@google.com {{overflow}}, 22711957Sgabeblack@google.com {{0}}, 22811957Sgabeblack@google.com {{0}} 22911957Sgabeblack@google.com );//UDIVcc 23011957Sgabeblack@google.com 0x1F: sdivcc({{ 23111957Sgabeblack@google.com INT32 resTemp, val2 = (I ? SIMM13.sw : Rs2.sdw<31:0>); 23211957Sgabeblack@google.com if(val2 == 0) throw division_by_zero; 23311957Sgabeblack@google.com Rd.sdw = resTemp = (INT64)((xc->regs.MiscRegs.yFields.value << 32) | Rs1.sdw<31:0>) / val2; 23411957Sgabeblack@google.com INT32 overflow = (resTemp<63:31> != 0); 23511957Sgabeblack@google.com INT32 underflow = (resTemp<63:> && resTemp<62:31> != 0xFFFFFFFF); 23611957Sgabeblack@google.com if(overflow) rd.udw = resTemp = 0x7FFFFFFF; 23711957Sgabeblack@google.com else if(underflow) rd.udw = resTemp = 0xFFFFFFFF80000000; 23811957Sgabeblack@google.com else rd.udw = resTemp;}}, 23911957Sgabeblack@google.com {{0}}, 24011957Sgabeblack@google.com {{overflow || underflow}}, 24111957Sgabeblack@google.com {{0}}, 24211957Sgabeblack@google.com {{0}} 24311957Sgabeblack@google.com );//SDIVcc 24411957Sgabeblack@google.com 0x20: taddcc({{ 24511957Sgabeblack@google.com INT64 resTemp, val2 = (I ? SIMM13.sdw : Rs2); 24611957Sgabeblack@google.com Rd = resTemp = Rs1 + val2; 24711957Sgabeblack@google.com INT32 overflow = Rs1<1:0> || val2<1:0> || (Rs1<31:> == val2<31:> && val2<31:> != resTemp<31:>);}}, 24811957Sgabeblack@google.com {{((Rs1 & 0xFFFFFFFF + val2 & 0xFFFFFFFF) >> 31)}}, 24911957Sgabeblack@google.com {{overflow}}, 25011957Sgabeblack@google.com {{((Rs1 >> 1) + (val2 >> 1) + (Rs1 & val2 & 0x1))<63:>}}, 25111957Sgabeblack@google.com {{Rs1<63:> == val2<63:> && val2<63:> != resTemp<63:>}} 25211957Sgabeblack@google.com );//TADDcc 25311957Sgabeblack@google.com 0x21: tsubcc({{ 25411957Sgabeblack@google.com INT64 resTemp, val2 = (I ? SIMM13.sdw : Rs2); 25511957Sgabeblack@google.com Rd = resTemp = Rs1 + val2; 25611957Sgabeblack@google.com INT32 overflow = Rs1<1:0> || val2<1:0> || (Rs1<31:> == val2<31:> && val2<31:> != resTemp<31:>);}}, 25711957Sgabeblack@google.com {{(Rs1 & 0xFFFFFFFF + val2 & 0xFFFFFFFF) >> 31)}}, 25811957Sgabeblack@google.com {{overflow}}, 25911957Sgabeblack@google.com {{((Rs1 >> 1) + (val2 >> 1) + (Rs1 & val2 & 0x1))<63:>}}, 26011957Sgabeblack@google.com {{Rs1<63:> == val2<63:> && val2<63:> != resTemp<63:>}} 26111957Sgabeblack@google.com );//TSUBcc 26211957Sgabeblack@google.com 0x22: taddcctv({{ 26311957Sgabeblack@google.com INT64 resTemp, val2 = (I ? SIMM13.sdw : Rs2); 26411957Sgabeblack@google.com Rd = resTemp = Rs1 + val2; 26511957Sgabeblack@google.com INT32 overflow = Rs1<1:0> || val2<1:0> || (Rs1<31:> == val2<31:> && val2<31:> != resTemp<31:>); 26611957Sgabeblack@google.com if(overflow) throw tag_overflow;}}, 26711957Sgabeblack@google.com {{((Rs1 & 0xFFFFFFFF + val2 & 0xFFFFFFFF) >> 31)}}, 26811957Sgabeblack@google.com {{overflow}}, 26911957Sgabeblack@google.com {{((Rs1 >> 1) + (val2 >> 1) + (Rs1 & val2 & 0x1))<63:>}}, 27011957Sgabeblack@google.com {{Rs1<63:> == val2<63:> && val2<63:> != resTemp<63:>}} 27111957Sgabeblack@google.com );//TADDccTV 27211957Sgabeblack@google.com 0x23: tsubcctv({{ 27311957Sgabeblack@google.com INT64 resTemp, val2 = (I ? SIMM13.sdw : Rs2); 27411957Sgabeblack@google.com Rd = resTemp = Rs1 + val2; 27511957Sgabeblack@google.com INT32 overflow = Rs1<1:0> || val2<1:0> || (Rs1<31:> == val2<31:> && val2<31:> != resTemp<31:>); 27611957Sgabeblack@google.com if(overflow) throw tag_overflow;}}, 27711957Sgabeblack@google.com {{((Rs1 & 0xFFFFFFFF + val2 & 0xFFFFFFFF) >> 31)}}, 27811957Sgabeblack@google.com {{overflow}}, 27911957Sgabeblack@google.com {{((Rs1 >> 1) + (val2 >> 1) + (Rs1 & val2 & 0x1))<63:>}}, 28011957Sgabeblack@google.com {{Rs1<63:> == val2<63:> && val2<63:> != resTemp<63:>}} 28111957Sgabeblack@google.com );//TSUBccTV 28211957Sgabeblack@google.com 0x24: mulscc({{ 28311957Sgabeblack@google.com INT64 resTemp, multiplicand = (I ? SIMM13.sdw : Rs2); 28411957Sgabeblack@google.com INT32 multiplier = Rs1<31:0>; 28511957Sgabeblack@google.com INT32 savedLSB = Rs1<0:>; 28611957Sgabeblack@google.com multiplier = multipler<31:1> | 28711957Sgabeblack@google.com ((xc->regs.MiscRegs.ccrFields.iccFields.n 28811957Sgabeblack@google.com ^ xc->regs.MiscRegs.ccrFields.iccFields.v) << 32); 28911957Sgabeblack@google.com if(!xc->regs.MiscRegs.yFields.value<0:>) 29011957Sgabeblack@google.com multiplicand = 0; 29111957Sgabeblack@google.com Rd = resTemp = multiplicand + multiplier; 29211957Sgabeblack@google.com xc->regs.MiscRegs.yFields.value = xc->regs.MiscRegs.yFields.value<31:1> | (savedLSB << 31);}}, 29311957Sgabeblack@google.com {{((multiplicand & 0xFFFFFFFF + multiplier & 0xFFFFFFFF) >> 31)}}, 29411957Sgabeblack@google.com {{multiplicand<31:> == multiplier<31:> && multiplier<31:> != resTemp<31:>}}, 29511957Sgabeblack@google.com {{((multiplicand >> 1) + (multiplier >> 1) + (multiplicand & multiplier & 0x1))<63:>}}, 29611957Sgabeblack@google.com {{multiplicand<63:> == multiplier<63:> && multiplier<63:> != resTemp<63:>}} 29711957Sgabeblack@google.com );//MULScc 29811957Sgabeblack@google.com } 29911957Sgabeblack@google.com format IntegerOp 30011957Sgabeblack@google.com { 30111957Sgabeblack@google.com 0x25: decode X { 30211957Sgabeblack@google.com 0x0: sll({{Rd = Rs1 << (I ? SHCNT32 : Rs2<4:0>);}}); //SLL 30311957Sgabeblack@google.com 0x1: sllx({{Rd = Rs1 << (I ? SHCNT64 : Rs2<5:0>);}}); //SLLX 30411957Sgabeblack@google.com } 30511957Sgabeblack@google.com 0x26: decode X { 30611957Sgabeblack@google.com 0x0: srl({{Rd = Rs1.udw<31:0> >> (I ? SHCNT32 : Rs2<4:0>);}}); //SRL 30711957Sgabeblack@google.com 0x1: srlx({{Rd = Rs1.udw >> (I ? SHCNT64 : Rs2<5:0>);}});//SRLX 30811957Sgabeblack@google.com } 30911957Sgabeblack@google.com 0x27: decode X { 31011957Sgabeblack@google.com 0x0: sra({{Rd = Rs1.sdw<31:0> >> (I ? SHCNT32 : Rs2<4:0>);}}); //SRA 31111957Sgabeblack@google.com 0x1: srax({{Rd = Rs1.sdw >> (I ? SHCNT64 : Rs2<5:0>);}});//SRAX 31211957Sgabeblack@google.com } 31311957Sgabeblack@google.com 0x28: decode RS1 { 31411957Sgabeblack@google.com 0x0: rdy({{Rd = xc->regs.MiscRegs.yFields.value;}}); //RDY 31511957Sgabeblack@google.com 0x2: rdccr({{Rd = xc->regs.MiscRegs.ccr;}}); //RDCCR 31611957Sgabeblack@google.com 0x3: rdasi({{Rd = xc->regs.MiscRegs.asi;}}); //RDASI 31711957Sgabeblack@google.com 0x4: rdtick({{ 31811957Sgabeblack@google.com if(xc->regs.MiscRegs.pstateFields.priv == 0 && 31911957Sgabeblack@google.com xc->regs.MiscRegs.tickFields.npt == 1) 32011957Sgabeblack@google.com throw privileged_action; 32111957Sgabeblack@google.com Rd = xc->regs.MiscRegs.tick; 32211957Sgabeblack@google.com }});//RDTICK 32311957Sgabeblack@google.com 0x5: rdpc({{Rd = xc->regs.pc;}}); //RDPC 32411957Sgabeblack@google.com 0x6: rdfprs({{Rd = xc->regs.MiscRegs.fprs;}}); //RDFPRS 32511957Sgabeblack@google.com 0xF: decode I { 32611957Sgabeblack@google.com 0x0: Noop::membar({{//Membar isn't needed yet}}); //MEMBAR 32711957Sgabeblack@google.com 0x1: Noop::stbar({{//Stbar isn/'t needed yet}}); //STBAR 32811957Sgabeblack@google.com } 32911957Sgabeblack@google.com } 33011957Sgabeblack@google.com 33111957Sgabeblack@google.com 0x2A: decode RS1 { 33211957Sgabeblack@google.com 0x0: rdprtpc({{checkPriv Rd = xc->regs.MiscRegs.tpc[xc->regs.MiscRegs.tl];}}); 33311957Sgabeblack@google.com 0x1: rdprtnpc({{checkPriv Rd = xc->regs.MiscRegs.tnpc[xc->regs.MiscRegs.tl];}}); 33411957Sgabeblack@google.com 0x2: rdprtstate({{checkPriv Rd = xc->regs.MiscRegs.tstate[xc->regs.MiscRegs.tl];}}); 33511957Sgabeblack@google.com 0x3: rdprtt({{checkPriv Rd = xc->regs.MiscRegs.tt[xc->regs.MiscRegs.tl];}}); 33611957Sgabeblack@google.com 0x4: rdprtick({{checkPriv Rd = xc->regs.MiscRegs.tick;}}); 33711957Sgabeblack@google.com 0x5: rdprtba({{checkPriv Rd = xc->regs.MiscRegs.tba;}}); 33811957Sgabeblack@google.com 0x6: rdprpstate({{checkPriv Rd = xc->regs.MiscRegs.pstate;}}); 33911957Sgabeblack@google.com 0x7: rdprtl({{checkPriv Rd = xc->regs.MiscRegs.tl;}}); 34011957Sgabeblack@google.com 0x8: rdprpil({{checkPriv Rd = xc->regs.MiscRegs.pil;}}); 34111957Sgabeblack@google.com 0x9: rdprcwp({{checkPriv Rd = xc->regs.MiscRegs.cwp;}}); 34211957Sgabeblack@google.com 0xA: rdprcansave({{checkPriv Rd = xc->regs.MiscRegs.cansave;}}); 34311957Sgabeblack@google.com 0xB: rdprcanrestore({{checkPriv Rd = xc->regs.MiscRegs.canrestore;}}); 34411957Sgabeblack@google.com 0xC: rdprcleanwin({{checkPriv Rd = xc->regs.MiscRegs.cleanwin;}}); 34511957Sgabeblack@google.com 0xD: rdprotherwin({{checkPriv Rd = xc->regs.MiscRegs.otherwin;}}); 34611957Sgabeblack@google.com 0xE: rdprwstate({{checkPriv Rd = xc->regs.MiscRegs.wstate;}}); 34711957Sgabeblack@google.com 0xF: rdprfq({{throw illegal_instruction;}}); //The floating point queue isn't implemented right now. 34811957Sgabeblack@google.com } 34911957Sgabeblack@google.com 0x2B: BasicOperate::flushw({{\\window toilet}}); //FLUSHW 35011957Sgabeblack@google.com 0x2C: movcc({{ 35111957Sgabeblack@google.com ccBank = (CC24 << 2) | (CC14 << 1) | (CC04 << 0); 35211957Sgabeblack@google.com switch(ccBank) 35311957Sgabeblack@google.com { 35411957Sgabeblack@google.com case 0: case 1: case 2: case 3: 35511957Sgabeblack@google.com throw fp_disabled; 35611957Sgabeblack@google.com break; 35711957Sgabeblack@google.com case 5: case 7: 35811957Sgabeblack@google.com throw illegal_instruction; 35911957Sgabeblack@google.com break; 36011957Sgabeblack@google.com case 4: 36111957Sgabeblack@google.com if(passesCondition(xc->regs.MiscRegs.ccrFields.icc, COND4)) 36211957Sgabeblack@google.com Rd = (I ? SIMM11.sdw : RS2); 36311957Sgabeblack@google.com break; 36411957Sgabeblack@google.com case 6: 36511957Sgabeblack@google.com if(passesCondition(xc->regs.MiscRegs.ccrFields.xcc, COND4)) 36611957Sgabeblack@google.com Rd = (I ? SIMM11.sdw : RS2); 36711957Sgabeblack@google.com break; 36811957Sgabeblack@google.com } 36911957Sgabeblack@google.com }});//MOVcc 37011957Sgabeblack@google.com 0x2D: sdivx({{ 37111957Sgabeblack@google.com INT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 37211957Sgabeblack@google.com if(val2 == 0) throw division_by_zero; 37311957Sgabeblack@google.com Rd.sdw = Rs1.sdw / val2; 37411957Sgabeblack@google.com }});//SDIVX 37511957Sgabeblack@google.com 0x2E: decode RS1 { 37611957Sgabeblack@google.com 0x0: IntegerOp::popc({{ 37711957Sgabeblack@google.com INT64 count = 0, val2 = (I ? SIMM13.sdw : Rs2.sdw); 37811957Sgabeblack@google.com UINT8 oneBits[] = {0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4} 37911957Sgabeblack@google.com for(unsigned int x = 0; x < 16; x++) 38011957Sgabeblack@google.com { 38111957Sgabeblack@google.com count += oneBits[val2 & 0xF]; 38211957Sgabeblack@google.com val2 >> 4; 38311957Sgabeblack@google.com } 38411957Sgabeblack@google.com }});//POPC 38511957Sgabeblack@google.com } 38611957Sgabeblack@google.com 0x2F: movr({{ 38711957Sgabeblack@google.com UINT64 val2 = (I ? SIMM10.sdw : Rs2.sdw); 38811957Sgabeblack@google.com switch(RCOND) 38911957Sgabeblack@google.com { 39011957Sgabeblack@google.com case 0: case 4: 39111957Sgabeblack@google.com throw illegal_instruction; 39211957Sgabeblack@google.com break; 39311957Sgabeblack@google.com case 1: 39411957Sgabeblack@google.com if(Rs1 == 0) Rd = val2; 39511957Sgabeblack@google.com break; 39611957Sgabeblack@google.com case 2: 39711957Sgabeblack@google.com if(Rs1 <= 0) Rd = val2; 39811957Sgabeblack@google.com break; 39911957Sgabeblack@google.com case 3: 40011957Sgabeblack@google.com if(Rs1 = 0) Rd = val2; 40111957Sgabeblack@google.com break; 40211957Sgabeblack@google.com case 5: 40311957Sgabeblack@google.com if(Rs1 != 0) Rd = val2; 40411957Sgabeblack@google.com break; 40511957Sgabeblack@google.com case 6: 40611957Sgabeblack@google.com if(Rs1 > 0) Rd = val2; 40711957Sgabeblack@google.com break; 40811957Sgabeblack@google.com case 7: 40911957Sgabeblack@google.com if(Rs1 >= 0) Rd = val2; 41011957Sgabeblack@google.com break; 41111957Sgabeblack@google.com } 41211957Sgabeblack@google.com }});//MOVR 41311957Sgabeblack@google.com 0x30: decode RD { 41411957Sgabeblack@google.com 0x0: wry({{ 41511957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 41611957Sgabeblack@google.com xc->regs.MiscRegs.y = Rs1 ^ val2; 41711957Sgabeblack@google.com }});//WRY 41811957Sgabeblack@google.com 0x2: wrccr({{ 41911957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 42011957Sgabeblack@google.com xc->regs.MiscRegs.ccr = Rs1 ^ val2; 42111957Sgabeblack@google.com }});//WRCCR 42211957Sgabeblack@google.com 0x3: wrasi({{ 42311957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 42411957Sgabeblack@google.com xc->regs.MiscRegs.asi = Rs1 ^ val2; 42511957Sgabeblack@google.com }});//WRASI 42611957Sgabeblack@google.com 0x6: wrfprs({{ 42711957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 42811957Sgabeblack@google.com xc->regs.MiscRegs.asi = Rs1 ^ val2; 42911957Sgabeblack@google.com }});//WRFPRS 43011957Sgabeblack@google.com 0xF: Trap::sir({{software_initiated_reset}}); //SIR 43111957Sgabeblack@google.com } 43211957Sgabeblack@google.com 0x31: decode FCN { 43311957Sgabeblack@google.com 0x0: BasicOperate::saved({{\\Boogy Boogy}}); //SAVED 43411957Sgabeblack@google.com 0x1: BasicOperate::restored({{\\Boogy Boogy}}); //RESTORED 43511957Sgabeblack@google.com } 43611957Sgabeblack@google.com 0x32: decode RD { 43711957Sgabeblack@google.com 0x0: wrprtpc({{checkPriv 43811957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 43911957Sgabeblack@google.com xc->regs.MiscRegs.tpc[xc->regs.MiscRegs.tl] = Rs1 ^ val2; 44011957Sgabeblack@google.com }}); 44111957Sgabeblack@google.com 0x1: wrprtnpc({{checkPriv 44211957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 44311957Sgabeblack@google.com xc->regs.MiscRegs.tnpc[xc->regs.MiscRegs.tl] = Rs1 ^ val2; 44411957Sgabeblack@google.com }}); 44511957Sgabeblack@google.com 0x2: wrprtstate({{checkPriv 44611957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 44711957Sgabeblack@google.com xc->regs.MiscRegs.tstate[xc->regs.MiscRegs.tl] = Rs1 ^ val2; 44811957Sgabeblack@google.com }}); 44911957Sgabeblack@google.com 0x3: wrprtt({{checkPriv 45011957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 45111957Sgabeblack@google.com xc->regs.MiscRegs.tt[xc->regs.MiscRegs.tl] = Rs1 ^ val2; 45211957Sgabeblack@google.com }}); 45311957Sgabeblack@google.com 0x4: wrprtick({{checkPriv 45411957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 45511957Sgabeblack@google.com xc->regs.MiscRegs.tick = Rs1 ^ val2; 45611957Sgabeblack@google.com }}); 45711957Sgabeblack@google.com 0x5: wrprtba({{checkPriv 45811957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 45911957Sgabeblack@google.com xc->regs.MiscRegs.tba = Rs1 ^ val2; 46011957Sgabeblack@google.com }}); 46111957Sgabeblack@google.com 0x6: wrprpstate({{checkPriv 46211957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 46311957Sgabeblack@google.com xc->regs.MiscRegs.pstate = Rs1 ^ val2; 46411957Sgabeblack@google.com }}); 46511957Sgabeblack@google.com 0x7: wrprtl({{checkPriv 46611957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 46711957Sgabeblack@google.com xc->regs.MiscRegs.tl = Rs1 ^ val2; 46811957Sgabeblack@google.com }}); 46911957Sgabeblack@google.com 0x8: wrprpil({{checkPriv 47011957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 47111957Sgabeblack@google.com xc->regs.MiscRegs.pil = Rs1 ^ val2; 47211957Sgabeblack@google.com }}); 47311957Sgabeblack@google.com 0x9: wrprcwp({{checkPriv 47411957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 47511957Sgabeblack@google.com xc->regs.MiscRegs.cwp = Rs1 ^ val2; 47611957Sgabeblack@google.com }}); 47711957Sgabeblack@google.com 0xA: wrprcansave({{checkPriv 47811957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 47911957Sgabeblack@google.com xc->regs.MiscRegs.cansave = Rs1 ^ val2; 48011957Sgabeblack@google.com }}); 48111957Sgabeblack@google.com 0xB: wrprcanrestore({{checkPriv 48211957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 48311957Sgabeblack@google.com xc->regs.MiscRegs.canrestore = Rs1 ^ val2; 48411957Sgabeblack@google.com }}); 48511957Sgabeblack@google.com 0xC: wrprcleanwin({{checkPriv 48611957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 48711957Sgabeblack@google.com xc->regs.MiscRegs.cleanwin = Rs1 ^ val2; 48811957Sgabeblack@google.com }}); 48911957Sgabeblack@google.com 0xD: wrprotherwin({{checkPriv 49011957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 49111957Sgabeblack@google.com xc->regs.MiscRegs.otherwin = Rs1 ^ val2; 49211957Sgabeblack@google.com }}); 49311957Sgabeblack@google.com 0xE: wrprwstate({{checkPriv 49411957Sgabeblack@google.com UINT64 val2 = (I ? SIMM13.sdw : Rs2.sdw); 49511957Sgabeblack@google.com xc->regs.MiscRegs.wstate = Rs1 ^ val2; 49611957Sgabeblack@google.com }}); 49711957Sgabeblack@google.com } 49811957Sgabeblack@google.com 49911957Sgabeblack@google.com 0x34: Trap::fpop1({{Throw fp_disabled;}}); //FPOP1 50011957Sgabeblack@google.com 0x35: Trap::fpop2({{Throw fp_disabled;}}); //FPOP2 50111957Sgabeblack@google.com 50211957Sgabeblack@google.com 50311957Sgabeblack@google.com 0x38: Branch::jmpl({{//Stuff}}); //JMPL 50411957Sgabeblack@google.com 0x39: Branch::return({{//Other Stuff}}); //RETURN 50511957Sgabeblack@google.com 0x3A: Trap::tcc({{ 50611957Sgabeblack@google.com switch((CC14 << 1) | (CC04 << 0)) 50711957Sgabeblack@google.com { 50811957Sgabeblack@google.com case 1: case 3: 50911957Sgabeblack@google.com throw illegal_instruction; 51011957Sgabeblack@google.com case 0: 51111957Sgabeblack@google.com if(passesCondition(xc->regs.MiscRegs.ccrFields.icc, machInst<25:28>)) 51211957Sgabeblack@google.com throw trap_instruction; 51311957Sgabeblack@google.com break; 51411957Sgabeblack@google.com case 2: 51511957Sgabeblack@google.com if(passesCondition(xc->regs.MiscRegs.ccrFields.xcc, machInst<25:28>)) 51611957Sgabeblack@google.com throw trap_instruction; 51711957Sgabeblack@google.com break; 51811957Sgabeblack@google.com } 51911957Sgabeblack@google.com }}); //Tcc 52011957Sgabeblack@google.com 0x3B: BasicOperate::flush({{//Lala}}); //FLUSH 52111957Sgabeblack@google.com 0x3C: BasicOperate::save({{//leprechauns); //SAVE 52211957Sgabeblack@google.com 0x3D: BasicOperate::restore({{//Eat my short int}}); //RESTORE 52311957Sgabeblack@google.com 0x3E: decode FCN { 52411957Sgabeblack@google.com 0x1: BasicOperate::done({{//Done thing}}); //DONE 52511957Sgabeblack@google.com 0x2: BasicOperate::retry({{//Retry thing}}); //RETRY 52611957Sgabeblack@google.com } 52711957Sgabeblack@google.com } 52811957Sgabeblack@google.com } 52911957Sgabeblack@google.com 0x3: decode OP3 { 53011957Sgabeblack@google.com format Mem { 53111957Sgabeblack@google.com 0x00: lduw({{Rd.uw = Mem.uw;}}); //LDUW 53211957Sgabeblack@google.com 0x01: ldub({{Rd.ub = Mem.ub;}}); //LDUB 53311957Sgabeblack@google.com 0x02: lduh({{Rd.uhw = Mem.uhw;}}); //LDUH 53411957Sgabeblack@google.com 0x03: ldd({{ 53511957Sgabeblack@google.com UINT64 val = Mem.udw; 53611957Sgabeblack@google.com setIntReg(RD & (~1), val<31:0>); 53711957Sgabeblack@google.com setIntReg(RD | 1, val<63:32>); 53811957Sgabeblack@google.com }});//LDD 53911957Sgabeblack@google.com 0x04: stw({{Mem.sw = Rd.sw;}}); //STW 54011957Sgabeblack@google.com 0x05: stb({{Mem.sb = Rd.sb;}}); //STB 54111957Sgabeblack@google.com 0x06: sth({{Mem.shw = Rd.shw;}}); //STH 54211957Sgabeblack@google.com 0x07: std({{ 54311957Sgabeblack@google.com Mem.udw = readIntReg(RD & (~1))<31:0> | (readIntReg(RD | 1)<31:0> << 32); 54411957Sgabeblack@google.com }});//STD 54511957Sgabeblack@google.com 0x08: ldsw({{Rd.sw = Mem.sw;}}); //LDSW 54611957Sgabeblack@google.com 0x09: ldsb({{Rd.sb = Mem.sb;}}); //LDSB 54711957Sgabeblack@google.com 0x0A: ldsh({{Rd.shw = Mem.shw;}}); //LDSH 54811957Sgabeblack@google.com 0x0B: ldx({{Rd.udw = Mem.udw;}}); //LDX 54911957Sgabeblack@google.com 55011957Sgabeblack@google.com 0x0D: ldstub({{ 55111957Sgabeblack@google.com Rd.ub = Mem.ub; 55211957Sgabeblack@google.com Mem.ub = 0xFF; 55311957Sgabeblack@google.com }}); //LDSTUB 55411957Sgabeblack@google.com 0x0E: stx({{Rd.udw = Mem.udw;}}); //STX 55511957Sgabeblack@google.com 0x0F: swap({{ 55611957Sgabeblack@google.com UINT32 temp = Rd.uw; 55711957Sgabeblack@google.com Rd.uw = Mem.uw; 55811957Sgabeblack@google.com Mem.uw = temp; 55911957Sgabeblack@google.com }}); //SWAP 56011957Sgabeblack@google.com 0x10: lduwa({{Rd.uw = Mem.uw;}}); //LDUWA 56111957Sgabeblack@google.com 0x11: lduba({{Rd.ub = Mem.ub;}}); //LDUBA 56211957Sgabeblack@google.com 0x12: lduha({{Rd.uhw = Mem.uhw;}}); //LDUHA 56311957Sgabeblack@google.com 0x13: ldda({{ 56411957Sgabeblack@google.com UINT64 val = Mem.udw; 56511957Sgabeblack@google.com setIntReg(RD & (~1), val<31:0>); 56611957Sgabeblack@google.com setIntReg(RD | 1, val<63:32>); 56711957Sgabeblack@google.com }}); //LDDA 56811957Sgabeblack@google.com 0x14: stwa({{Mem.uw = Rd.uw;}}); //STWA 56911957Sgabeblack@google.com 0x15: stba({{Mem.ub = Rd.ub;}}); //STBA 57011957Sgabeblack@google.com 0x16: stha({{Mem.uhw = Rd.uhw;}}); //STHA 57111957Sgabeblack@google.com 0x17: stda({{ 57211957Sgabeblack@google.com Mem.udw = readIntReg(RD & (~1))<31:0> | (readIntReg(RD | 1)<31:0> << 32); 57311957Sgabeblack@google.com }}); //STDA 57411957Sgabeblack@google.com 0x18: ldswa({{Rd.sw = Mem.sw;}}); //LDSWA 57511957Sgabeblack@google.com 0x19: ldsba({{Rd.sb = Mem.sb;}}); //LDSBA 57611957Sgabeblack@google.com 0x1A: ldsha({{Rd.shw = Mem.shw;}}); //LDSHA 57711957Sgabeblack@google.com 0x1B: ldxa({{Rd.sdw = Mem.sdw;}}); //LDXA 57811957Sgabeblack@google.com 57911957Sgabeblack@google.com 0x1D: ldstuba({{ 58011957Sgabeblack@google.com Rd.ub = Mem.ub; 58111957Sgabeblack@google.com Mem.ub = 0xFF; 58211957Sgabeblack@google.com }}); //LDSTUBA 58311957Sgabeblack@google.com 0x1E: stxa({{Mem.sdw = Rd.sdw}}); //STXA 58411957Sgabeblack@google.com 0x1F: swapa({{ 58511957Sgabeblack@google.com UINT32 temp = Rd.uw; 58611957Sgabeblack@google.com Rd.uw = Mem.uw; 58711957Sgabeblack@google.com Mem.uw = temp; 58811957Sgabeblack@google.com }}); //SWAPA 58911957Sgabeblack@google.com 0x20: Trap::ldf({{throw fp_disabled;}}); //LDF 59011957Sgabeblack@google.com 0x21: decode X { 59111957Sgabeblack@google.com 0x0: Trap::ldfsr({{throw fp_disabled;}}); //LDFSR 59211957Sgabeblack@google.com 0x1: Trap::ldxfsr({{throw fp_disabled;}}); //LDXFSR 59311957Sgabeblack@google.com } 59411957Sgabeblack@google.com 0x22: Trap::ldqf({{throw fp_disabled;}}); //LDQF 59511957Sgabeblack@google.com 0x23: Trap::lddf({{throw fp_disabled;}}); //LDDF 59611957Sgabeblack@google.com 0x24: Trap::stf({{throw fp_disabled;}}); //STF 59711957Sgabeblack@google.com 0x25: decode X { 59811957Sgabeblack@google.com 0x0: Trap::stfsr({{throw fp_disabled;}}); //STFSR 59911957Sgabeblack@google.com 0x1: Trap::stxfsr({{throw fp_disabled;}}); //STXFSR 60011957Sgabeblack@google.com } 60111957Sgabeblack@google.com 0x26: Trap::stqf({{throw fp_disabled;}}); //STQF 60211957Sgabeblack@google.com 0x27: Trap::stdf({{throw fp_disabled;}}); //STDF 60311957Sgabeblack@google.com 60411957Sgabeblack@google.com 60511957Sgabeblack@google.com 60611957Sgabeblack@google.com 60711957Sgabeblack@google.com 60811957Sgabeblack@google.com 0x2D: Noop::prefetch({{ }}); //PREFETCH 60911957Sgabeblack@google.com 61011957Sgabeblack@google.com 61111957Sgabeblack@google.com 0x30: Trap::ldfa({{throw fp_disabled;}}); //LDFA 61211957Sgabeblack@google.com 61311957Sgabeblack@google.com 0x32: Trap::ldqfa({{throw fp_disabled;}}); //LDQFA 61411957Sgabeblack@google.com 0x33: Trap::lddfa({{throw fp_disabled;}}); //LDDFA 61511957Sgabeblack@google.com 0x34: Trap::stfa({{throw fp_disabled;}}); //STFA 61611957Sgabeblack@google.com 0x35: Trap::stqfa({{throw fp_disabled;}}); //STQFA 61711957Sgabeblack@google.com 0x36: Trap::stdfa({{throw fp_disabled;}}); //STDFA 61811957Sgabeblack@google.com 61911957Sgabeblack@google.com 62011957Sgabeblack@google.com 62111957Sgabeblack@google.com 62211957Sgabeblack@google.com 62311957Sgabeblack@google.com 0x3C: Cas::casa( 62411957Sgabeblack@google.com {{UINT64 val = Mem.uw; 62511957Sgabeblack@google.com if(Rs2.uw == val) 62611957Sgabeblack@google.com Mem.uw = Rd.uw; 62711957Sgabeblack@google.com Rd.uw = val; 62811957Sgabeblack@google.com }}); //CASA 62911957Sgabeblack@google.com 0x3D: Noop::prefetcha({{ }}); //PREFETCHA 63011957Sgabeblack@google.com 0x3E: Cas::casxa( 63111957Sgabeblack@google.com {{UINT64 val = Mem.udw; 63211957Sgabeblack@google.com if(Rs2 == val) 63311957Sgabeblack@google.com Mem.udw = Rd; 63411957Sgabeblack@google.com Rd = val; 63511957Sgabeblack@google.com }}); //CASXA 63611957Sgabeblack@google.com } 63711957Sgabeblack@google.com } 63811957Sgabeblack@google.com} 63911957Sgabeblack@google.com