decoder.isa revision 2224
12381SN/A//////////////////////////////////////////////////////////////////// 213732Snikos.nikoleris@arm.com// 38949Sandreas.hansson@arm.com// The actual decoder specification 48949Sandreas.hansson@arm.com// 58949Sandreas.hansson@arm.com 68949Sandreas.hansson@arm.comdecode OP default Trap::unknown({{IllegalInstruction}}) { 78949Sandreas.hansson@arm.com 88949Sandreas.hansson@arm.com 0x0: decode OP2 { 98949Sandreas.hansson@arm.com 0x0: Trap::illtrap({{illegal_instruction}}); //ILLTRAP 108949Sandreas.hansson@arm.com 0x1: Branch::bpcc({{ 118949Sandreas.hansson@arm.com switch((CC12 << 1) | CC02) 128949Sandreas.hansson@arm.com { 138949Sandreas.hansson@arm.com case 1: 142592SN/A case 3: 1510975Sdavid.hashe@amd.com fault = new IllegalInstruction; 162381SN/A case 0: 172381SN/A if(passesCondition(xc->regs.MiscRegs.ccrFields.icc, COND2)) 182381SN/A ;//branchHere 192381SN/A break; 202381SN/A case 2: 212381SN/A if(passesCondition(xc->regs.MiscRegs.ccrFields.xcc, COND2)) 222381SN/A ;//branchHere 232381SN/A break; 242381SN/A } 252381SN/A }});//BPcc 262381SN/A 0x2: Branch::bicc({{ 272381SN/A if(passesCondition(xc->regs.MiscRegs.ccrFields.icc, COND2)) 282381SN/A ;//branchHere 292381SN/A }});//Bicc 302381SN/A 0x3: Branch::bpr({{ 312381SN/A switch(RCOND) 322381SN/A { 332381SN/A case 0: 342381SN/A case 4: 352381SN/A fault = new IllegalInstruction; 362381SN/A case 1: 372381SN/A if(Rs1 == 0) 382381SN/A ;//branchHere 392381SN/A break; 402665Ssaidi@eecs.umich.edu case 2: 412665Ssaidi@eecs.umich.edu if(Rs1 <= 0) 422665Ssaidi@eecs.umich.edu ;//branchHere 432665Ssaidi@eecs.umich.edu break; 449031Sandreas.hansson@arm.com case 3: 4512349Snikos.nikoleris@arm.com if(Rs1 < 0) 462381SN/A ;//branchHere 472381SN/A break; 482381SN/A case 5: 492381SN/A if(Rs1 != 0) 502662Sstever@eecs.umich.edu ;//branchHere 512381SN/A break; 522381SN/A case 6: 532381SN/A if(Rs1 > 0) 542381SN/A ;//branchHere 552381SN/A break; 568229Snate@binkert.org case 7: 573348Sbinkertn@umich.edu if(Rs1 >= 0) 583348Sbinkertn@umich.edu ;//branchHere 593348Sbinkertn@umich.edu break; 6013856Sodanrc@yahoo.com.br } 615735Snate@binkert.org }}); //BPr 624024Sbinkertn@umich.edu //SETHI (or NOP if rd == 0 and imm == 0) 635735Snate@binkert.org 0x4: IntegerOp::sethi({{Rd = (IMM22 << 10) & 0xFFFFFC00;}}); 6412334Sgabeblack@google.com 0x5: Trap::fbpfcc({{throw fp_disabled;}}); //FBPfcc 655314Sstever@gmail.com 0x6: Trap::fbfcc({{throw fp_disabled;}}); //FBfcc 666216Snate@binkert.org } 6713347Sgabeblack@google.com 0x1: Branch::call({{ 682392SN/A //branch here 694167Sbinkertn@umich.edu Rd = xc->pc; 702394SN/A }}); 718737Skoansin.tan@gmail.com 0x2: decode OP3 { 723349Sbinkertn@umich.edu format IntegerOp { 732394SN/A 0x00: add({{ 742812Srdreslin@umich.edu int64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 7512351Snikos.nikoleris@arm.com Rd = Rs1.sdw + val2; 762812Srdreslin@umich.edu }});//ADD 774022Sstever@eecs.umich.edu 0x01: and({{ 784022Sstever@eecs.umich.edu uint64_t val2 = (I ? SIMM13.sdw : Rs2.udw); 795735Snate@binkert.org Rd = Rs1.udw & val2; 805735Snate@binkert.org }});//AND 814022Sstever@eecs.umich.edu 0x02: or({{ 825735Snate@binkert.org uint64_t val2 = (I ? SIMM13.sdw : Rs2.udw); 835735Snate@binkert.org Rd = Rs1.udw | val2; 845735Snate@binkert.org }});//OR 854022Sstever@eecs.umich.edu 0x03: xor({{ 864022Sstever@eecs.umich.edu uint64_t val2 = (I ? SIMM13.sdw : Rs2.udw); 874022Sstever@eecs.umich.edu Rd = Rs1.udw ^ val2; 884022Sstever@eecs.umich.edu }});//XOR 894473Sstever@eecs.umich.edu 0x04: sub({{ 905319Sstever@gmail.com int64_t val2 = ~((uint64_t)(I ? SIMM13.sdw : Rs2.udw))+1; 914022Sstever@eecs.umich.edu Rd = Rs1.sdw + val2; 924022Sstever@eecs.umich.edu }});//SUB 9311199Sandreas.hansson@arm.com 0x05: andn({{ 9411199Sandreas.hansson@arm.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.udw); 9512344Snikos.nikoleris@arm.com Rd = Rs1.udw & ~val2; 9610883Sali.jafri@arm.com }});//ANDN 974022Sstever@eecs.umich.edu 0x06: orn({{ 9813367Syuetsu.kodama@riken.jp uint64_t val2 = (I ? SIMM13.sdw : Rs2.udw); 994022Sstever@eecs.umich.edu Rd = Rs1.udw | ~val2; 1004022Sstever@eecs.umich.edu }});//ORN 1014022Sstever@eecs.umich.edu 0x07: xnor({{ 10210886Sandreas.hansson@arm.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.udw); 1034022Sstever@eecs.umich.edu Rd = ~(Rs1.udw ^ val2); 1047465Ssteve.reinhardt@amd.com }});//XNOR 1054628Sstever@eecs.umich.edu 0x08: addc({{ 1067465Ssteve.reinhardt@amd.com int64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 1077465Ssteve.reinhardt@amd.com int64_t carryin = xc->regs.MiscRegs.ccrfields.iccfields.c; 1084022Sstever@eecs.umich.edu Rd = Rs1.sdw + val2 + carryin; 1094022Sstever@eecs.umich.edu }});//ADDC 11010885Sandreas.hansson@arm.com 0x09: mulx({{ 11110885Sandreas.hansson@arm.com int64_t val2 = (I ? SIMM13.sdw : Rs2); 1124626Sstever@eecs.umich.edu Rd = Rs1 * val2; 1134626Sstever@eecs.umich.edu }});//MULX 1147669Ssteve.reinhardt@amd.com 0x0A: umul({{ 1154626Sstever@eecs.umich.edu uint64_t resTemp, val2 = (I ? SIMM13.sdw : Rs2.udw); 1164040Ssaidi@eecs.umich.edu Rd = resTemp = Rs1.udw<31:0> * val2<31:0>; 1174040Ssaidi@eecs.umich.edu xc->regs.MiscRegs.yFields.value = resTemp<63:32>; 1185650Sgblack@eecs.umich.edu }});//UMUL 1195650Sgblack@eecs.umich.edu 0x0B: smul({{ 12011256Santhony.gutierrez@amd.com int64_t resTemp, val2 = (I ? SIMM13.sdw : Rs2.sdw); 12111256Santhony.gutierrez@amd.com rd.sdw = resTemp = Rs1.sdw<31:0> * val2<31:0>; 12212347Snikos.nikoleris@arm.com xc->regs.MiscRegs.yFields.value = resTemp<63:32>; 12312347Snikos.nikoleris@arm.com }});//SMUL 12412347Snikos.nikoleris@arm.com 0x0C: subc({{ 12512347Snikos.nikoleris@arm.com int64_t val2 = ~((int64_t)(I ? SIMM13.sdw : Rs2.sdw))+1; 1264870Sstever@eecs.umich.edu int64_t carryin = xc->regs.MiscRegs.ccrfields.iccfields.c; 1274870Sstever@eecs.umich.edu Rd.sdw = Rs1.sdw + val2 + carryin; 1284870Sstever@eecs.umich.edu }});//SUBC 1294870Sstever@eecs.umich.edu 0x0D: udivx({{ 1304870Sstever@eecs.umich.edu uint64_t val2 = (I ? SIMM13.sdw : Rs2.udw); 1314870Sstever@eecs.umich.edu if(val2 == 0) throw division_by_zero; 1328436SBrad.Beckmann@amd.com Rd.udw = Rs1.udw / val2; 1338436SBrad.Beckmann@amd.com }});//UDIVX 1345314Sstever@gmail.com 0x0E: udiv({{ 1355314Sstever@gmail.com uint32_t resTemp, val2 = (I ? SIMM13.sw : Rs2.udw<31:0>); 1368184Ssomayeh@cs.wisc.edu if(val2 == 0) 13710886Sandreas.hansson@arm.com fault = new DivisionByZero; 13810886Sandreas.hansson@arm.com resTemp = (uint64_t)((xc->regs.MiscRegs.yFields.value << 32) 1394022Sstever@eecs.umich.edu | Rs1.udw<31:0>) / val2; 1404022Sstever@eecs.umich.edu int32_t overflow = (resTemp<63:32> != 0); 1414022Sstever@eecs.umich.edu if(overflow) 1424022Sstever@eecs.umich.edu rd.udw = resTemp = 0xFFFFFFFF; 1435735Snate@binkert.org else 1445735Snate@binkert.org rd.udw = resTemp; 1455735Snate@binkert.org }}); //UDIV 1464022Sstever@eecs.umich.edu 0x0F: sdiv({{ 1474022Sstever@eecs.umich.edu int32_t resTemp, val2 = (I ? SIMM13.sw : Rs2.sdw<31:0>); 1484626Sstever@eecs.umich.edu if(val2 == 0) 1494626Sstever@eecs.umich.edu fault = new DivisionByZero; 1507465Ssteve.reinhardt@amd.com 1514022Sstever@eecs.umich.edu Rd.sdw = (int64_t)((xc->regs.MiscRegs.yFields.value << 32) | 15212347Snikos.nikoleris@arm.com Rs1.sdw<31:0>) / val2; 15311284Sandreas.hansson@arm.com resTemp = Rd.sdw; 1544626Sstever@eecs.umich.edu int32_t overflow = (resTemp<63:31> != 0); 1554626Sstever@eecs.umich.edu int32_t underflow = 1564626Sstever@eecs.umich.edu (resTemp<63:> && resTemp<62:31> != 0xFFFFFFFF); 15711199Sandreas.hansson@arm.com if(overflow) 1584022Sstever@eecs.umich.edu rd.udw = resTemp = 0x7FFFFFFF; 1594022Sstever@eecs.umich.edu else if(underflow) 1606076Sgblack@eecs.umich.edu rd.udw = resTemp = 0xFFFFFFFF80000000; 1614626Sstever@eecs.umich.edu else 1624870Sstever@eecs.umich.edu rd.udw = resTemp; 1635314Sstever@gmail.com }});//SDIV 1648184Ssomayeh@cs.wisc.edu } 16511600Sandreas.hansson@arm.com format IntegerOpCc { 1664022Sstever@eecs.umich.edu 0x10: addcc({{ 1674022Sstever@eecs.umich.edu int64_t resTemp, val2 = (I ? SIMM13.sdw : Rs2); 1684022Sstever@eecs.umich.edu Rd = resTemp = Rs1 + val2;}}, 1695735Snate@binkert.org {{((Rs1 & 0xFFFFFFFF + val2 & 0xFFFFFFFF) >> 31)}}, 1705735Snate@binkert.org {{Rs1<31:> == val2<31:> && val2<31:> != resTemp<31:>}}, 1715735Snate@binkert.org {{((Rs1 >> 1) + (val2 >> 1) + (Rs1 & val2 & 0x1))<63:>}}, 1725735Snate@binkert.org {{Rs1<63:> == val2<63:> && val2<63:> != resTemp<63:>}} 1735735Snate@binkert.org );//ADDcc 1745735Snate@binkert.org 0x11: andcc({{ 1755735Snate@binkert.org int64_t val2 = (I ? SIMM13.sdw : Rs2); 1764022Sstever@eecs.umich.edu Rd = Rs1 & val2;}}, 1775735Snate@binkert.org {{0}},{{0}},{{0}},{{0}});//ANDcc 1785735Snate@binkert.org 0x12: orcc({{ 1794022Sstever@eecs.umich.edu int64_t val2 = (I ? SIMM13.sdw : Rs2); 1805735Snate@binkert.org Rd = Rs1 | val2;}}, 1814022Sstever@eecs.umich.edu {{0}},{{0}},{{0}},{{0}});//ORcc 1824022Sstever@eecs.umich.edu 0x13: xorcc({{ 1834022Sstever@eecs.umich.edu int64_t val2 = (I ? SIMM13.sdw : Rs2); 1845735Snate@binkert.org Rd = Rs1 ^ val2;}}, 1854022Sstever@eecs.umich.edu {{0}},{{0}},{{0}},{{0}});//XORcc 1864022Sstever@eecs.umich.edu 0x14: subcc({{ 1874022Sstever@eecs.umich.edu int64_t resTemp, val2 = (int64_t)(I ? SIMM13.sdw : Rs2); 1884022Sstever@eecs.umich.edu Rd = resTemp = Rs1 - val2;}}, 1894022Sstever@eecs.umich.edu {{((Rs1 & 0xFFFFFFFF + (~val2) & 0xFFFFFFFF + 1) >> 31)}}, 1904022Sstever@eecs.umich.edu {{Rs1<31:> != val2<31:> && Rs1<31:> != resTemp<31:>}}, 1915735Snate@binkert.org {{((Rs1 >> 1) + (~val2) >> 1) + 1925735Snate@binkert.org ((Rs1 | ~val2) & 0x1))<63:>}}, 1935735Snate@binkert.org {{Rs1<63:> != val2<63:> && Rs1<63:> != resTemp<63:>}} 1944022Sstever@eecs.umich.edu );//SUBcc 1954022Sstever@eecs.umich.edu 0x15: andncc({{ 1964022Sstever@eecs.umich.edu int64_t val2 = (I ? SIMM13.sdw : Rs2); 1974022Sstever@eecs.umich.edu Rd = Rs1 & ~val2;}}, 1984022Sstever@eecs.umich.edu {{0}},{{0}},{{0}},{{0}});//ANDNcc 19910583SCurtis.Dunham@arm.com 0x16: orncc({{ 20010583SCurtis.Dunham@arm.com int64_t val2 = (I ? SIMM13.sdw : Rs2); 20110583SCurtis.Dunham@arm.com Rd = Rs1 | ~val2;}}, 20210583SCurtis.Dunham@arm.com {{0}},{{0}},{{0}},{{0}});//ORNcc 20310583SCurtis.Dunham@arm.com 0x17: xnorcc({{ 20411284Sandreas.hansson@arm.com int64_t val2 = (I ? SIMM13.sdw : Rs2); 20510583SCurtis.Dunham@arm.com Rd = ~(Rs1 ^ val2);}}, 20610583SCurtis.Dunham@arm.com {{0}},{{0}},{{0}},{{0}});//XNORcc 20711199Sandreas.hansson@arm.com 0x18: addccc({{ 20812347Snikos.nikoleris@arm.com int64_t resTemp, val2 = (I ? SIMM13.sdw : Rs2); 20911600Sandreas.hansson@arm.com int64_t carryin = xc->regs.MiscRegs.ccrfields.iccfields.c; 21011199Sandreas.hansson@arm.com Rd = resTemp = Rs1 + val2 + carryin;}}, 21111199Sandreas.hansson@arm.com {{((Rs1 & 0xFFFFFFFF + val2 & 0xFFFFFFFF) >> 31 21211199Sandreas.hansson@arm.com + carryin)}}, 21311199Sandreas.hansson@arm.com {{Rs1<31:> == val2<31:> && val2<31:> != resTemp<31:>}}, 21411199Sandreas.hansson@arm.com {{((Rs1 >> 1) + (val2 >> 1) + 21511199Sandreas.hansson@arm.com ((Rs1 & val2) | (carryin & (Rs1 | val2)) & 0x1))<63:>}}, 21610570Sandreas.hansson@arm.com {{Rs1<63:> == val2<63:> && val2<63:> != resTemp<63:>}} 21710570Sandreas.hansson@arm.com );//ADDCcc 21810570Sandreas.hansson@arm.com 0x1A: umulcc({{ 21910570Sandreas.hansson@arm.com uint64_t resTemp, val2 = (I ? SIMM13.sdw : Rs2); 22010570Sandreas.hansson@arm.com Rd = resTemp = Rs1.udw<31:0> * val2<31:0>; 22110570Sandreas.hansson@arm.com xc->regs.MiscRegs.yFields.value = resTemp<63:32>;}}, 2224022Sstever@eecs.umich.edu {{0}},{{0}},{{0}},{{0}});//UMULcc 2236102Sgblack@eecs.umich.edu 0x1B: smulcc({{ 22410343SCurtis.Dunham@arm.com int64_t resTemp, val2 = (I ? SIMM13.sdw : Rs2); 22510343SCurtis.Dunham@arm.com Rd = resTemp = Rs1.sdw<31:0> * val2<31:0>; 22610343SCurtis.Dunham@arm.com xc->regs.MiscRegs.yFields.value = resTemp<63:32>;}} 22710343SCurtis.Dunham@arm.com ,{{0}},{{0}},{{0}},{{0}});//SMULcc 2284870Sstever@eecs.umich.edu 0x1C: subccc({{ 2295314Sstever@gmail.com int64_t resTemp, val2 = (int64_t)(I ? SIMM13.sdw : Rs2); 2308184Ssomayeh@cs.wisc.edu int64_t carryin = xc->regs.MiscRegs.ccrfields.iccfields.c; 2314022Sstever@eecs.umich.edu Rd = resTemp = Rs1 + ~(val2 + carryin) + 1;}}, 23211294Sandreas.hansson@arm.com {{((Rs1 & 0xFFFFFFFF + (~(val2 + carryin)) & 0xFFFFFFFF + 1) >> 31)}}, 2335735Snate@binkert.org {{Rs1<31:> != val2<31:> && Rs1<31:> != resTemp<31:>}}, 2345735Snate@binkert.org {{((Rs1 >> 1) + (~(val2 + carryin)) >> 1) + ((Rs1 | ~(val2+carryin)) & 0x1))<63:>}}, 2354022Sstever@eecs.umich.edu {{Rs1<63:> != val2<63:> && Rs1<63:> != resTemp<63:>}} 2364022Sstever@eecs.umich.edu );//SUBCcc 2374022Sstever@eecs.umich.edu 0x1D: udivxcc({{ 2385735Snate@binkert.org uint64_t val2 = (I ? SIMM13.sdw : Rs2.udw); 2395735Snate@binkert.org if(val2 == 0) throw division_by_zero; 2404022Sstever@eecs.umich.edu Rd.udw = Rs1.udw / val2;}} 2414022Sstever@eecs.umich.edu ,{{0}},{{0}},{{0}},{{0}});//UDIVXcc 2425735Snate@binkert.org 0x1E: udivcc({{ 2435735Snate@binkert.org uint32_t resTemp, val2 = (I ? SIMM13.sw : Rs2.udw<31:0>); 2445735Snate@binkert.org if(val2 == 0) throw division_by_zero; 2454022Sstever@eecs.umich.edu resTemp = (uint64_t)((xc->regs.MiscRegs.yFields.value << 32) | Rs1.udw<31:0>) / val2; 2465735Snate@binkert.org int32_t overflow = (resTemp<63:32> != 0); 2475735Snate@binkert.org if(overflow) rd.udw = resTemp = 0xFFFFFFFF; 2484022Sstever@eecs.umich.edu else rd.udw = resTemp;}}, 2494022Sstever@eecs.umich.edu {{0}}, 2502381SN/A {{overflow}}, 2512662Sstever@eecs.umich.edu {{0}}, 2522662Sstever@eecs.umich.edu {{0}} 2532662Sstever@eecs.umich.edu );//UDIVcc 2542662Sstever@eecs.umich.edu 0x1F: sdivcc({{ 2552662Sstever@eecs.umich.edu int32_t resTemp, val2 = (I ? SIMM13.sw : Rs2.sdw<31:0>); 2562381SN/A if(val2 == 0) throw division_by_zero; 2579044SAli.Saidi@ARM.com Rd.sdw = resTemp = (int64_t)((xc->regs.MiscRegs.yFields.value << 32) | Rs1.sdw<31:0>) / val2; 2582381SN/A int32_t overflow = (resTemp<63:31> != 0); 2592813Srdreslin@umich.edu int32_t underflow = (resTemp<63:> && resTemp<62:31> != 0xFFFFFFFF); 2605735Snate@binkert.org if(overflow) rd.udw = resTemp = 0x7FFFFFFF; 2615735Snate@binkert.org else if(underflow) rd.udw = resTemp = 0xFFFFFFFF80000000; 2624022Sstever@eecs.umich.edu else rd.udw = resTemp;}}, 2635735Snate@binkert.org {{0}}, 2645735Snate@binkert.org {{overflow || underflow}}, 26510938Sandreas.hansson@arm.com {{0}}, 26610938Sandreas.hansson@arm.com {{0}} 26712349Snikos.nikoleris@arm.com );//SDIVcc 26810938Sandreas.hansson@arm.com 0x20: taddcc({{ 26913732Snikos.nikoleris@arm.com int64_t resTemp, val2 = (I ? SIMM13.sdw : Rs2); 27013732Snikos.nikoleris@arm.com Rd = resTemp = Rs1 + val2; 27113732Snikos.nikoleris@arm.com int32_t overflow = Rs1<1:0> || val2<1:0> || (Rs1<31:> == val2<31:> && val2<31:> != resTemp<31:>);}}, 27211284Sandreas.hansson@arm.com {{((Rs1 & 0xFFFFFFFF + val2 & 0xFFFFFFFF) >> 31)}}, 27311284Sandreas.hansson@arm.com {{overflow}}, 27411284Sandreas.hansson@arm.com {{((Rs1 >> 1) + (val2 >> 1) + (Rs1 & val2 & 0x1))<63:>}}, 27511284Sandreas.hansson@arm.com {{Rs1<63:> == val2<63:> && val2<63:> != resTemp<63:>}} 27610938Sandreas.hansson@arm.com );//TADDcc 27710938Sandreas.hansson@arm.com 0x21: tsubcc({{ 27810938Sandreas.hansson@arm.com int64_t resTemp, val2 = (I ? SIMM13.sdw : Rs2); 27911284Sandreas.hansson@arm.com Rd = resTemp = Rs1 + val2; 28011284Sandreas.hansson@arm.com int32_t overflow = Rs1<1:0> || val2<1:0> || (Rs1<31:> == val2<31:> && val2<31:> != resTemp<31:>);}}, 28111284Sandreas.hansson@arm.com {{(Rs1 & 0xFFFFFFFF + val2 & 0xFFFFFFFF) >> 31)}}, 28211284Sandreas.hansson@arm.com {{overflow}}, 28311284Sandreas.hansson@arm.com {{((Rs1 >> 1) + (val2 >> 1) + (Rs1 & val2 & 0x1))<63:>}}, 28411284Sandreas.hansson@arm.com {{Rs1<63:> == val2<63:> && val2<63:> != resTemp<63:>}} 28511284Sandreas.hansson@arm.com );//TSUBcc 28611284Sandreas.hansson@arm.com 0x22: taddcctv({{ 28711284Sandreas.hansson@arm.com int64_t resTemp, val2 = (I ? SIMM13.sdw : Rs2); 28810938Sandreas.hansson@arm.com Rd = resTemp = Rs1 + val2; 28912346Snikos.nikoleris@arm.com int32_t overflow = Rs1<1:0> || val2<1:0> || (Rs1<31:> == val2<31:> && val2<31:> != resTemp<31:>); 29012346Snikos.nikoleris@arm.com if(overflow) throw tag_overflow;}}, 29112346Snikos.nikoleris@arm.com {{((Rs1 & 0xFFFFFFFF + val2 & 0xFFFFFFFF) >> 31)}}, 29212346Snikos.nikoleris@arm.com {{overflow}}, 29312349Snikos.nikoleris@arm.com {{((Rs1 >> 1) + (val2 >> 1) + (Rs1 & val2 & 0x1))<63:>}}, 29412349Snikos.nikoleris@arm.com {{Rs1<63:> == val2<63:> && val2<63:> != resTemp<63:>}} 29512349Snikos.nikoleris@arm.com );//TADDccTV 29612349Snikos.nikoleris@arm.com 0x23: tsubcctv({{ 29711057Sandreas.hansson@arm.com int64_t resTemp, val2 = (I ? SIMM13.sdw : Rs2); 29811057Sandreas.hansson@arm.com Rd = resTemp = Rs1 + val2; 29911057Sandreas.hansson@arm.com int32_t overflow = Rs1<1:0> || val2<1:0> || (Rs1<31:> == val2<31:> && val2<31:> != resTemp<31:>); 30011057Sandreas.hansson@arm.com if(overflow) throw tag_overflow;}}, 30110938Sandreas.hansson@arm.com {{((Rs1 & 0xFFFFFFFF + val2 & 0xFFFFFFFF) >> 31)}}, 30210938Sandreas.hansson@arm.com {{overflow}}, 30310938Sandreas.hansson@arm.com {{((Rs1 >> 1) + (val2 >> 1) + (Rs1 & val2 & 0x1))<63:>}}, 30410938Sandreas.hansson@arm.com {{Rs1<63:> == val2<63:> && val2<63:> != resTemp<63:>}} 30510938Sandreas.hansson@arm.com );//TSUBccTV 30610938Sandreas.hansson@arm.com 0x24: mulscc({{ 30710938Sandreas.hansson@arm.com int64_t resTemp, multiplicand = (I ? SIMM13.sdw : Rs2); 30810938Sandreas.hansson@arm.com int32_t multiplier = Rs1<31:0>; 30910938Sandreas.hansson@arm.com int32_t savedLSB = Rs1<0:>; 31010938Sandreas.hansson@arm.com multiplier = multipler<31:1> | 31110938Sandreas.hansson@arm.com ((xc->regs.MiscRegs.ccrFields.iccFields.n 31210938Sandreas.hansson@arm.com ^ xc->regs.MiscRegs.ccrFields.iccFields.v) << 32); 31310938Sandreas.hansson@arm.com if(!xc->regs.MiscRegs.yFields.value<0:>) 31410938Sandreas.hansson@arm.com multiplicand = 0; 31510938Sandreas.hansson@arm.com Rd = resTemp = multiplicand + multiplier; 31610938Sandreas.hansson@arm.com xc->regs.MiscRegs.yFields.value = xc->regs.MiscRegs.yFields.value<31:1> | (savedLSB << 31);}}, 3175735Snate@binkert.org {{((multiplicand & 0xFFFFFFFF + multiplier & 0xFFFFFFFF) >> 31)}}, 3185735Snate@binkert.org {{multiplicand<31:> == multiplier<31:> && multiplier<31:> != resTemp<31:>}}, 3195735Snate@binkert.org {{((multiplicand >> 1) + (multiplier >> 1) + (multiplicand & multiplier & 0x1))<63:>}}, 3205735Snate@binkert.org {{multiplicand<63:> == multiplier<63:> && multiplier<63:> != resTemp<63:>}} 3214022Sstever@eecs.umich.edu );//MULScc 3224022Sstever@eecs.umich.edu } 3235735Snate@binkert.org format IntegerOp 3244870Sstever@eecs.umich.edu { 3254870Sstever@eecs.umich.edu 0x25: decode X { 32612351Snikos.nikoleris@arm.com 0x0: sll({{Rd = Rs1 << (I ? SHCNT32 : Rs2<4:0>);}}); //SLL 32712351Snikos.nikoleris@arm.com 0x1: sllx({{Rd = Rs1 << (I ? SHCNT64 : Rs2<5:0>);}}); //SLLX 3285735Snate@binkert.org } 32912749Sgiacomo.travaglini@arm.com 0x26: decode X { 3304870Sstever@eecs.umich.edu 0x0: srl({{Rd = Rs1.udw<31:0> >> (I ? SHCNT32 : Rs2<4:0>);}}); //SRL 3312566SN/A 0x1: srlx({{Rd = Rs1.udw >> (I ? SHCNT64 : Rs2<5:0>);}});//SRLX 3325735Snate@binkert.org } 33312633Sodanrc@yahoo.com.br 0x27: decode X { 33412633Sodanrc@yahoo.com.br 0x0: sra({{Rd = Rs1.sdw<31:0> >> (I ? SHCNT32 : Rs2<4:0>);}}); //SRA 3355735Snate@binkert.org 0x1: srax({{Rd = Rs1.sdw >> (I ? SHCNT64 : Rs2<5:0>);}});//SRAX 33612633Sodanrc@yahoo.com.br } 3375735Snate@binkert.org 0x28: decode RS1 { 3382566SN/A 0x0: rdy({{Rd = xc->regs.MiscRegs.yFields.value;}}); //RDY 3392566SN/A 0x2: rdccr({{Rd = xc->regs.MiscRegs.ccr;}}); //RDCCR 3402566SN/A 0x3: rdasi({{Rd = xc->regs.MiscRegs.asi;}}); //RDASI 3415735Snate@binkert.org 0x4: rdtick({{ 3425735Snate@binkert.org if(xc->regs.MiscRegs.pstateFields.priv == 0 && 3432381SN/A xc->regs.MiscRegs.tickFields.npt == 1) 3442381SN/A throw privileged_action; 34510028SGiacomo.Gabrielli@arm.com Rd = xc->regs.MiscRegs.tick; 34610028SGiacomo.Gabrielli@arm.com }});//RDTICK 34710028SGiacomo.Gabrielli@arm.com 0x5: rdpc({{Rd = xc->regs.pc;}}); //RDPC 3485735Snate@binkert.org 0x6: rdfprs({{Rd = xc->regs.MiscRegs.fprs;}}); //RDFPRS 3496227Snate@binkert.org 0xF: decode I { 3502381SN/A 0x0: Noop::membar({{//Membar isn't needed yet}}); //MEMBAR 3515735Snate@binkert.org 0x1: Noop::stbar({{//Stbar isn/'t needed yet}}); //STBAR 35210723Sandreas.hansson@arm.com } 3538668Sgeoffrey.blake@arm.com } 35410723Sandreas.hansson@arm.com 3558668Sgeoffrey.blake@arm.com 0x2A: decode RS1 { 35612966SMatteo.Andreozzi@arm.com 0x0: rdprtpc({{checkPriv Rd = xc->regs.MiscRegs.tpc[xc->regs.MiscRegs.tl];}}); 35712966SMatteo.Andreozzi@arm.com 0x1: rdprtnpc({{checkPriv Rd = xc->regs.MiscRegs.tnpc[xc->regs.MiscRegs.tl];}}); 35812966SMatteo.Andreozzi@arm.com 0x2: rdprtstate({{checkPriv Rd = xc->regs.MiscRegs.tstate[xc->regs.MiscRegs.tl];}}); 3592641Sstever@eecs.umich.edu 0x3: rdprtt({{checkPriv Rd = xc->regs.MiscRegs.tt[xc->regs.MiscRegs.tl];}}); 3602811Srdreslin@umich.edu 0x4: rdprtick({{checkPriv Rd = xc->regs.MiscRegs.tick;}}); 3619547Sandreas.hansson@arm.com 0x5: rdprtba({{checkPriv Rd = xc->regs.MiscRegs.tba;}}); 36210694SMarco.Balboni@ARM.com 0x6: rdprpstate({{checkPriv Rd = xc->regs.MiscRegs.pstate;}}); 36310405Sandreas.hansson@arm.com 0x7: rdprtl({{checkPriv Rd = xc->regs.MiscRegs.tl;}}); 36410405Sandreas.hansson@arm.com 0x8: rdprpil({{checkPriv Rd = xc->regs.MiscRegs.pil;}}); 36510405Sandreas.hansson@arm.com 0x9: rdprcwp({{checkPriv Rd = xc->regs.MiscRegs.cwp;}}); 36610405Sandreas.hansson@arm.com 0xA: rdprcansave({{checkPriv Rd = xc->regs.MiscRegs.cansave;}}); 3679547Sandreas.hansson@arm.com 0xB: rdprcanrestore({{checkPriv Rd = xc->regs.MiscRegs.canrestore;}}); 36810694SMarco.Balboni@ARM.com 0xC: rdprcleanwin({{checkPriv Rd = xc->regs.MiscRegs.cleanwin;}}); 3693218Sgblack@eecs.umich.edu 0xD: rdprotherwin({{checkPriv Rd = xc->regs.MiscRegs.otherwin;}}); 3709547Sandreas.hansson@arm.com 0xE: rdprwstate({{checkPriv Rd = xc->regs.MiscRegs.wstate;}}); 37111127Sandreas.hansson@arm.com 0xF: rdprfq({{throw illegal_instruction;}}); //The floating point queue isn't implemented right now. 37211127Sandreas.hansson@arm.com } 37311127Sandreas.hansson@arm.com 0x2B: BasicOperate::flushw({{\\window toilet}}); //FLUSHW 37411127Sandreas.hansson@arm.com 0x2C: movcc({{ 37511127Sandreas.hansson@arm.com ccBank = (CC24 << 2) | (CC14 << 1) | (CC04 << 0); 37611127Sandreas.hansson@arm.com switch(ccBank) 37711127Sandreas.hansson@arm.com { 37811127Sandreas.hansson@arm.com case 0: case 1: case 2: case 3: 37910694SMarco.Balboni@ARM.com throw fp_disabled; 38010694SMarco.Balboni@ARM.com break; 38110694SMarco.Balboni@ARM.com case 5: case 7: 38210694SMarco.Balboni@ARM.com throw illegal_instruction; 38310405Sandreas.hansson@arm.com break; 38410405Sandreas.hansson@arm.com case 4: 3859547Sandreas.hansson@arm.com if(passesCondition(xc->regs.MiscRegs.ccrFields.icc, COND4)) 38610694SMarco.Balboni@ARM.com Rd = (I ? SIMM11.sdw : RS2); 3873218Sgblack@eecs.umich.edu break; 3885735Snate@binkert.org case 6: 3895735Snate@binkert.org if(passesCondition(xc->regs.MiscRegs.ccrFields.xcc, COND4)) 39013892Sgabeblack@google.com Rd = (I ? SIMM11.sdw : RS2); 3919542Sandreas.hansson@arm.com break; 39213892Sgabeblack@google.com } 3939542Sandreas.hansson@arm.com }});//MOVcc 3949542Sandreas.hansson@arm.com 0x2D: sdivx({{ 3959542Sandreas.hansson@arm.com int64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 3969542Sandreas.hansson@arm.com if(val2 == 0) throw division_by_zero; 39713892Sgabeblack@google.com Rd.sdw = Rs1.sdw / val2; 3989542Sandreas.hansson@arm.com }});//SDIVX 39913892Sgabeblack@google.com 0x2E: decode RS1 { 4009542Sandreas.hansson@arm.com 0x0: IntegerOp::popc({{ 4019542Sandreas.hansson@arm.com int64_t count = 0, val2 = (I ? SIMM13.sdw : Rs2.sdw); 4029542Sandreas.hansson@arm.com uint8_t oneBits[] = {0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4} 4039542Sandreas.hansson@arm.com for(unsigned int x = 0; x < 16; x++) 4045735Snate@binkert.org { 4055735Snate@binkert.org count += oneBits[val2 & 0xF]; 4065735Snate@binkert.org val2 >> 4; 4079542Sandreas.hansson@arm.com } 4089542Sandreas.hansson@arm.com }});//POPC 4092641Sstever@eecs.umich.edu } 4102641Sstever@eecs.umich.edu 0x2F: movr({{ 4112641Sstever@eecs.umich.edu uint64_t val2 = (I ? SIMM10.sdw : Rs2.sdw); 4125315Sstever@gmail.com switch(RCOND) 4135315Sstever@gmail.com { 4145315Sstever@gmail.com case 0: case 4: 4155315Sstever@gmail.com throw illegal_instruction; 4169044SAli.Saidi@ARM.com break; 4175735Snate@binkert.org case 1: 4185735Snate@binkert.org if(Rs1 == 0) Rd = val2; 4195735Snate@binkert.org break; 4205735Snate@binkert.org case 2: 4215735Snate@binkert.org if(Rs1 <= 0) Rd = val2; 4225735Snate@binkert.org break; 4235735Snate@binkert.org case 3: 4245314Sstever@gmail.com if(Rs1 = 0) Rd = val2; 4255314Sstever@gmail.com break; 4265314Sstever@gmail.com case 5: 4275735Snate@binkert.org if(Rs1 != 0) Rd = val2; 4285314Sstever@gmail.com break; 4295314Sstever@gmail.com case 6: 4305314Sstever@gmail.com if(Rs1 > 0) Rd = val2; 4315314Sstever@gmail.com break; 4325314Sstever@gmail.com case 7: 4335314Sstever@gmail.com if(Rs1 >= 0) Rd = val2; 4345314Sstever@gmail.com break; 4355314Sstever@gmail.com } 4365314Sstever@gmail.com }});//MOVR 4375314Sstever@gmail.com 0x30: decode RD { 4385314Sstever@gmail.com 0x0: wry({{ 4395314Sstever@gmail.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4405314Sstever@gmail.com xc->regs.MiscRegs.y = Rs1 ^ val2; 4415314Sstever@gmail.com }});//WRY 4425735Snate@binkert.org 0x2: wrccr({{ 4435735Snate@binkert.org uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4445735Snate@binkert.org xc->regs.MiscRegs.ccr = Rs1 ^ val2; 4455314Sstever@gmail.com }});//WRCCR 4465315Sstever@gmail.com 0x3: wrasi({{ 4475735Snate@binkert.org uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4485735Snate@binkert.org xc->regs.MiscRegs.asi = Rs1 ^ val2; 4495315Sstever@gmail.com }});//WRASI 4505735Snate@binkert.org 0x6: wrfprs({{ 4515735Snate@binkert.org uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4525314Sstever@gmail.com xc->regs.MiscRegs.asi = Rs1 ^ val2; 4535314Sstever@gmail.com }});//WRFPRS 4545735Snate@binkert.org 0xF: Trap::sir({{software_initiated_reset}}); //SIR 4555735Snate@binkert.org } 4565735Snate@binkert.org 0x31: decode FCN { 4575735Snate@binkert.org 0x0: BasicOperate::saved({{\\Boogy Boogy}}); //SAVED 4585314Sstever@gmail.com 0x1: BasicOperate::restored({{\\Boogy Boogy}}); //RESTORED 4595735Snate@binkert.org } 4605735Snate@binkert.org 0x32: decode RD { 4615735Snate@binkert.org 0x0: wrprtpc({{checkPriv 4625315Sstever@gmail.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4635735Snate@binkert.org xc->regs.MiscRegs.tpc[xc->regs.MiscRegs.tl] = Rs1 ^ val2; 4645735Snate@binkert.org }}); 4655314Sstever@gmail.com 0x1: wrprtnpc({{checkPriv 4665735Snate@binkert.org uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4675735Snate@binkert.org xc->regs.MiscRegs.tnpc[xc->regs.MiscRegs.tl] = Rs1 ^ val2; 4685735Snate@binkert.org }}); 4695735Snate@binkert.org 0x2: wrprtstate({{checkPriv 4705735Snate@binkert.org uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4715314Sstever@gmail.com xc->regs.MiscRegs.tstate[xc->regs.MiscRegs.tl] = Rs1 ^ val2; 4725314Sstever@gmail.com }}); 4735314Sstever@gmail.com 0x3: wrprtt({{checkPriv 4745735Snate@binkert.org uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4755735Snate@binkert.org xc->regs.MiscRegs.tt[xc->regs.MiscRegs.tl] = Rs1 ^ val2; 4765735Snate@binkert.org }}); 4775735Snate@binkert.org 0x4: wrprtick({{checkPriv 4789542Sandreas.hansson@arm.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4795735Snate@binkert.org xc->regs.MiscRegs.tick = Rs1 ^ val2; 4805735Snate@binkert.org }}); 4815735Snate@binkert.org 0x5: wrprtba({{checkPriv 4822662Sstever@eecs.umich.edu uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4832641Sstever@eecs.umich.edu xc->regs.MiscRegs.tba = Rs1 ^ val2; 4849542Sandreas.hansson@arm.com }}); 4859542Sandreas.hansson@arm.com 0x6: wrprpstate({{checkPriv 4869542Sandreas.hansson@arm.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4879542Sandreas.hansson@arm.com xc->regs.MiscRegs.pstate = Rs1 ^ val2; 4889542Sandreas.hansson@arm.com }}); 4899542Sandreas.hansson@arm.com 0x7: wrprtl({{checkPriv 4909542Sandreas.hansson@arm.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4919542Sandreas.hansson@arm.com xc->regs.MiscRegs.tl = Rs1 ^ val2; 4929542Sandreas.hansson@arm.com }}); 4939542Sandreas.hansson@arm.com 0x8: wrprpil({{checkPriv 4949542Sandreas.hansson@arm.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4959542Sandreas.hansson@arm.com xc->regs.MiscRegs.pil = Rs1 ^ val2; 4969542Sandreas.hansson@arm.com }}); 4979542Sandreas.hansson@arm.com 0x9: wrprcwp({{checkPriv 4989542Sandreas.hansson@arm.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 4999542Sandreas.hansson@arm.com xc->regs.MiscRegs.cwp = Rs1 ^ val2; 5009542Sandreas.hansson@arm.com }}); 5019542Sandreas.hansson@arm.com 0xA: wrprcansave({{checkPriv 5029542Sandreas.hansson@arm.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 5039542Sandreas.hansson@arm.com xc->regs.MiscRegs.cansave = Rs1 ^ val2; 5049543Ssascha.bischoff@arm.com }}); 5059543Ssascha.bischoff@arm.com 0xB: wrprcanrestore({{checkPriv 5069543Ssascha.bischoff@arm.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 5079543Ssascha.bischoff@arm.com xc->regs.MiscRegs.canrestore = Rs1 ^ val2; 5089543Ssascha.bischoff@arm.com }}); 5099543Ssascha.bischoff@arm.com 0xC: wrprcleanwin({{checkPriv 5109543Ssascha.bischoff@arm.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 5119543Ssascha.bischoff@arm.com xc->regs.MiscRegs.cleanwin = Rs1 ^ val2; 5129543Ssascha.bischoff@arm.com }}); 5139543Ssascha.bischoff@arm.com 0xD: wrprotherwin({{checkPriv 5149543Ssascha.bischoff@arm.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 5159543Ssascha.bischoff@arm.com xc->regs.MiscRegs.otherwin = Rs1 ^ val2; 5169543Ssascha.bischoff@arm.com }}); 5179543Ssascha.bischoff@arm.com 0xE: wrprwstate({{checkPriv 5189543Ssascha.bischoff@arm.com uint64_t val2 = (I ? SIMM13.sdw : Rs2.sdw); 5199543Ssascha.bischoff@arm.com xc->regs.MiscRegs.wstate = Rs1 ^ val2; 5209543Ssascha.bischoff@arm.com }}); 5219543Ssascha.bischoff@arm.com } 5229543Ssascha.bischoff@arm.com 5235735Snate@binkert.org 0x34: Trap::fpop1({{Throw fp_disabled;}}); //FPOP1 5245735Snate@binkert.org 0x35: Trap::fpop2({{Throw fp_disabled;}}); //FPOP2 5254022Sstever@eecs.umich.edu 5262811Srdreslin@umich.edu 5275735Snate@binkert.org 0x38: Branch::jmpl({{//Stuff}}); //JMPL 5284022Sstever@eecs.umich.edu 0x39: Branch::return({{//Other Stuff}}); //RETURN 5292811Srdreslin@umich.edu 0x3A: Trap::tcc({{ 53010583SCurtis.Dunham@arm.com switch((CC14 << 1) | (CC04 << 0)) 53110583SCurtis.Dunham@arm.com { 53210583SCurtis.Dunham@arm.com case 1: case 3: 53310583SCurtis.Dunham@arm.com throw illegal_instruction; 53410583SCurtis.Dunham@arm.com case 0: 53511287Sandreas.hansson@arm.com if(passesCondition(xc->regs.MiscRegs.ccrFields.icc, machInst<25:28>)) 53611287Sandreas.hansson@arm.com throw trap_instruction; 53711287Sandreas.hansson@arm.com break; 53811287Sandreas.hansson@arm.com case 2: 53911287Sandreas.hansson@arm.com if(passesCondition(xc->regs.MiscRegs.ccrFields.xcc, machInst<25:28>)) 54011287Sandreas.hansson@arm.com throw trap_instruction; 54111287Sandreas.hansson@arm.com break; 54211287Sandreas.hansson@arm.com } 54311287Sandreas.hansson@arm.com }}); //Tcc 54410583SCurtis.Dunham@arm.com 0x3B: BasicOperate::flush({{//Lala}}); //FLUSH 54510583SCurtis.Dunham@arm.com 0x3C: BasicOperate::save({{//leprechauns); //SAVE 54611199Sandreas.hansson@arm.com 0x3D: BasicOperate::restore({{//Eat my short int}}); //RESTORE 54712347Snikos.nikoleris@arm.com 0x3E: decode FCN { 54811600Sandreas.hansson@arm.com 0x1: BasicOperate::done({{//Done thing}}); //DONE 54911199Sandreas.hansson@arm.com 0x2: BasicOperate::retry({{//Retry thing}}); //RETRY 55010583SCurtis.Dunham@arm.com } 55111286Sandreas.hansson@arm.com } 55211286Sandreas.hansson@arm.com } 55311286Sandreas.hansson@arm.com 0x3: decode OP3 { 55411286Sandreas.hansson@arm.com format Mem { 55511286Sandreas.hansson@arm.com 0x00: lduw({{Rd.uw = Mem.uw;}}); //LDUW 55610583SCurtis.Dunham@arm.com 0x01: ldub({{Rd.ub = Mem.ub;}}); //LDUB 55710583SCurtis.Dunham@arm.com 0x02: lduh({{Rd.uhw = Mem.uhw;}}); //LDUH 55810583SCurtis.Dunham@arm.com 0x03: ldd({{ 55910583SCurtis.Dunham@arm.com uint64_t val = Mem.udw; 5602812Srdreslin@umich.edu setIntReg(RD & (~1), val<31:0>); 56113350Snikos.nikoleris@arm.com setIntReg(RD | 1, val<63:32>); 56213350Snikos.nikoleris@arm.com }});//LDD 56313350Snikos.nikoleris@arm.com 0x04: stw({{Mem.sw = Rd.sw;}}); //STW 56413350Snikos.nikoleris@arm.com 0x05: stb({{Mem.sb = Rd.sb;}}); //STB 56513350Snikos.nikoleris@arm.com 0x06: sth({{Mem.shw = Rd.shw;}}); //STH 56613350Snikos.nikoleris@arm.com 0x07: std({{ 56711284Sandreas.hansson@arm.com Mem.udw = readIntReg(RD & (~1))<31:0> | (readIntReg(RD | 1)<31:0> << 32); 56811284Sandreas.hansson@arm.com }});//STD 56911284Sandreas.hansson@arm.com 0x08: ldsw({{Rd.sw = Mem.sw;}}); //LDSW 57011284Sandreas.hansson@arm.com 0x09: ldsb({{Rd.sb = Mem.sb;}}); //LDSB 57111284Sandreas.hansson@arm.com 0x0A: ldsh({{Rd.shw = Mem.shw;}}); //LDSH 57211284Sandreas.hansson@arm.com 0x0B: ldx({{Rd.udw = Mem.udw;}}); //LDX 57311284Sandreas.hansson@arm.com 57411284Sandreas.hansson@arm.com 0x0D: ldstub({{ 57511284Sandreas.hansson@arm.com Rd.ub = Mem.ub; 57611284Sandreas.hansson@arm.com Mem.ub = 0xFF; 57711284Sandreas.hansson@arm.com }}); //LDSTUB 57811284Sandreas.hansson@arm.com 0x0E: stx({{Rd.udw = Mem.udw;}}); //STX 57911284Sandreas.hansson@arm.com 0x0F: swap({{ 58011284Sandreas.hansson@arm.com uint32_t temp = Rd.uw; 58111284Sandreas.hansson@arm.com Rd.uw = Mem.uw; 58211284Sandreas.hansson@arm.com Mem.uw = temp; 58311284Sandreas.hansson@arm.com }}); //SWAP 58411284Sandreas.hansson@arm.com 0x10: lduwa({{Rd.uw = Mem.uw;}}); //LDUWA 58511284Sandreas.hansson@arm.com 0x11: lduba({{Rd.ub = Mem.ub;}}); //LDUBA 58611284Sandreas.hansson@arm.com 0x12: lduha({{Rd.uhw = Mem.uhw;}}); //LDUHA 58711284Sandreas.hansson@arm.com 0x13: ldda({{ 58810567Sandreas.hansson@arm.com uint64_t val = Mem.udw; 58910567Sandreas.hansson@arm.com setIntReg(RD & (~1), val<31:0>); 59011284Sandreas.hansson@arm.com setIntReg(RD | 1, val<63:32>); 59111284Sandreas.hansson@arm.com }}); //LDDA 59210567Sandreas.hansson@arm.com 0x14: stwa({{Mem.uw = Rd.uw;}}); //STWA 59311284Sandreas.hansson@arm.com 0x15: stba({{Mem.ub = Rd.ub;}}); //STBA 59411284Sandreas.hansson@arm.com 0x16: stha({{Mem.uhw = Rd.uhw;}}); //STHA 59511284Sandreas.hansson@arm.com 0x17: stda({{ 59611284Sandreas.hansson@arm.com Mem.udw = readIntReg(RD & (~1))<31:0> | (readIntReg(RD | 1)<31:0> << 32); 59711284Sandreas.hansson@arm.com }}); //STDA 59811284Sandreas.hansson@arm.com 0x18: ldswa({{Rd.sw = Mem.sw;}}); //LDSWA 59911284Sandreas.hansson@arm.com 0x19: ldsba({{Rd.sb = Mem.sb;}}); //LDSBA 60011284Sandreas.hansson@arm.com 0x1A: ldsha({{Rd.shw = Mem.shw;}}); //LDSHA 60111284Sandreas.hansson@arm.com 0x1B: ldxa({{Rd.sdw = Mem.sdw;}}); //LDXA 60211284Sandreas.hansson@arm.com 60311284Sandreas.hansson@arm.com 0x1D: ldstuba({{ 60411284Sandreas.hansson@arm.com Rd.ub = Mem.ub; 60511284Sandreas.hansson@arm.com Mem.ub = 0xFF; 60611284Sandreas.hansson@arm.com }}); //LDSTUBA 60711284Sandreas.hansson@arm.com 0x1E: stxa({{Mem.sdw = Rd.sdw}}); //STXA 60811284Sandreas.hansson@arm.com 0x1F: swapa({{ 60911284Sandreas.hansson@arm.com uint32_t temp = Rd.uw; 61011284Sandreas.hansson@arm.com Rd.uw = Mem.uw; 61111284Sandreas.hansson@arm.com Mem.uw = temp; 61211284Sandreas.hansson@arm.com }}); //SWAPA 61311284Sandreas.hansson@arm.com 0x20: Trap::ldf({{throw fp_disabled;}}); //LDF 61411284Sandreas.hansson@arm.com 0x21: decode X { 61511284Sandreas.hansson@arm.com 0x0: Trap::ldfsr({{throw fp_disabled;}}); //LDFSR 61611284Sandreas.hansson@arm.com 0x1: Trap::ldxfsr({{throw fp_disabled;}}); //LDXFSR 61711284Sandreas.hansson@arm.com } 61811284Sandreas.hansson@arm.com 0x22: Trap::ldqf({{throw fp_disabled;}}); //LDQF 61911284Sandreas.hansson@arm.com 0x23: Trap::lddf({{throw fp_disabled;}}); //LDDF 62011284Sandreas.hansson@arm.com 0x24: Trap::stf({{throw fp_disabled;}}); //STF 62111284Sandreas.hansson@arm.com 0x25: decode X { 6224870Sstever@eecs.umich.edu 0x0: Trap::stfsr({{throw fp_disabled;}}); //STFSR 62311284Sandreas.hansson@arm.com 0x1: Trap::stxfsr({{throw fp_disabled;}}); //STXFSR 62411284Sandreas.hansson@arm.com } 62511284Sandreas.hansson@arm.com 0x26: Trap::stqf({{throw fp_disabled;}}); //STQF 62611284Sandreas.hansson@arm.com 0x27: Trap::stdf({{throw fp_disabled;}}); //STDF 62711284Sandreas.hansson@arm.com 62811284Sandreas.hansson@arm.com 62911284Sandreas.hansson@arm.com 63011284Sandreas.hansson@arm.com 63111284Sandreas.hansson@arm.com 63211284Sandreas.hansson@arm.com 0x2D: Noop::prefetch({{ }}); //PREFETCH 63311284Sandreas.hansson@arm.com 63411284Sandreas.hansson@arm.com 63511284Sandreas.hansson@arm.com 0x30: Trap::ldfa({{throw fp_disabled;}}); //LDFA 63611284Sandreas.hansson@arm.com 63711284Sandreas.hansson@arm.com 0x32: Trap::ldqfa({{throw fp_disabled;}}); //LDQFA 63811284Sandreas.hansson@arm.com 0x33: Trap::lddfa({{throw fp_disabled;}}); //LDDFA 63911284Sandreas.hansson@arm.com 0x34: Trap::stfa({{throw fp_disabled;}}); //STFA 64011284Sandreas.hansson@arm.com 0x35: Trap::stqfa({{throw fp_disabled;}}); //STQFA 64111284Sandreas.hansson@arm.com 0x36: Trap::stdfa({{throw fp_disabled;}}); //STDFA 64211284Sandreas.hansson@arm.com 64311284Sandreas.hansson@arm.com 64411284Sandreas.hansson@arm.com 64511284Sandreas.hansson@arm.com 64611284Sandreas.hansson@arm.com 64711284Sandreas.hansson@arm.com 0x3C: Cas::casa( 64811284Sandreas.hansson@arm.com {{uint64_t val = Mem.uw; 64911284Sandreas.hansson@arm.com if(Rs2.uw == val) 65011746Snikos.nikoleris@arm.com Mem.uw = Rd.uw; 65111284Sandreas.hansson@arm.com Rd.uw = val; 65211284Sandreas.hansson@arm.com }}); //CASA 65311284Sandreas.hansson@arm.com 0x3D: Noop::prefetcha({{ }}); //PREFETCHA 65411284Sandreas.hansson@arm.com 0x3E: Cas::casxa( 65511284Sandreas.hansson@arm.com {{uint64_t val = Mem.udw; 65612346Snikos.nikoleris@arm.com if(Rs2 == val) 65713732Snikos.nikoleris@arm.com Mem.udw = Rd; 65813732Snikos.nikoleris@arm.com Rd = val; 65913732Snikos.nikoleris@arm.com }}); //CASXA 66013732Snikos.nikoleris@arm.com } 66113732Snikos.nikoleris@arm.com } 66213732Snikos.nikoleris@arm.com} 66313732Snikos.nikoleris@arm.com