MicroMipsInstrFormats.td revision 5c042162beb3c2dd556e00aab84c4278a69cd5b1
15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class MMArch {
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  string Arch = "micromips";
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  list<dag> Pattern = [];
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ADD_FM_MM<bits<6> op, bits<10> funct> : MMArch {
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<5> rt;
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<5> rs;
903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<5> rd;
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<32> Inst;
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{31-26} = op;
1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{25-21} = rt;
1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{20-16} = rs;
1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{15-11} = rd;
1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{10}    = 0;
1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{9-0}   = funct;
1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class ADDI_FM_MM<bits<6> op> : MMArch {
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<5>  rs;
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<5>  rt;
2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<16> imm16;
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<32> Inst;
2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{31-26} = op;
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{25-21} = rt;
3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{20-16} = rs;
3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{15-0}  = imm16;
3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class SLTI_FM_MM<bits<6> op> : MMArch {
3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<5> rt;
3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<5> rs;
3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<16> imm16;
3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<32> Inst;
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{31-26} = op;
4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{25-21} = rs;
4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{20-16} = rt;
4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{15-0}  = imm16;
4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class LUI_FM_MM : MMArch {
4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<5> rt;
4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<16> imm16;
5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<32> Inst;
5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{31-26} = 0x10;
5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{25-21} = 0xd;
5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{20-16} = rt;
5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{15-0}  = imm16;
5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class MULT_FM_MM<bits<10> funct> : MMArch {
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<5>  rs;
6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<5>  rt;
6203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<32> Inst;
6403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{31-26} = 0x00;
6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{25-21} = rt;
6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{20-16} = rs;
6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{15-6}  = funct;
6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{5-0}   = 0x3c;
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class SRA_FM_MM<bits<10> funct, bit rotate> : MMArch {
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<5> rd;
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<5> rt;
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<5> shamt;
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<32> Inst;
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{31-26} = 0;
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{25-21} = rd;
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{20-16} = rt;
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{15-11} = shamt;
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{10}    = rotate;
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{9-0}   = funct;
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class SRLV_FM_MM<bits<10> funct, bit rotate> : MMArch {
886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<5> rd;
896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<5> rt;
906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<5> rs;
916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<32> Inst;
936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{31-26} = 0;
956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{25-21} = rt;
966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{20-16} = rs;
976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{15-11} = rd;
986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{10}    = rotate;
996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{9-0}   = funct;
1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class LW_FM_MM<bits<6> op> : MMArch {
1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<5> rt;
1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<21> addr;
1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<32> Inst;
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{31-26} = op;
1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{25-21} = rt;
1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{20-16} = addr{20-16};
1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{15-0}  = addr{15-0};
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class LWL_FM_MM<bits<4> funct> {
1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<5> rt;
1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<21> addr;
1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<32> Inst;
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{31-26} = 0x18;
1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{25-21} = rt;
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{20-16} = addr{20-16};
1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{15-12} = funct;
1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{11-0}  = addr{11-0};
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class CMov_F_I_FM_MM<bits<7> func> : MMArch {
1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<5> rd;
1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<5> rs;
1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<3> fcc;
1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
13203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bits<32> Inst;
13303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
13403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{31-26} = 0x15;
13503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{25-21} = rd;
13603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{20-16} = rs;
13703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{15-13} = fcc;
13803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{12-6}  = func;
13903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  let Inst{5-0}   = 0x3b;
14003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class MTLO_FM_MM<bits<10> funct> : MMArch {
1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<5> rs;
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<32> Inst;
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{31-26} = 0x00;
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{25-21} = 0x00;
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{20-16} = rs;
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{15-6}  = funct;
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{5-0}   = 0x3c;
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class MFLO_FM_MM<bits<10> funct> : MMArch {
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<5> rd;
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<32> Inst;
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{31-26} = 0x00;
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{25-21} = 0x00;
1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{20-16} = rd;
1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{15-6}  = funct;
1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{5-0}   = 0x3c;
1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class CLO_FM_MM<bits<10> funct> : MMArch {
1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<5> rd;
1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<5> rs;
1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bits<32> Inst;
1716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{31-26} = 0x00;
1736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{25-21} = rd;
1746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{20-16} = rs;
1756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{15-6}  = funct;
1766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{5-0}   = 0x3c;
1776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class SEB_FM_MM<bits<10> funct> : MMArch {
1806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<5> rd;
1816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<5> rt;
1826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<32> Inst;
1846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{31-26} = 0x00;
1866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{25-21} = rd;
1876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{20-16} = rt;
1886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{15-6}  = funct;
1896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{5-0}   = 0x3c;
1906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
1916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class EXT_FM_MM<bits<6> funct> : MMArch {
1936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<5> rt;
1946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<5> rs;
1956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<5> pos;
1966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<5> size;
1976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<32> Inst;
1996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{31-26} = 0x00;
2016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{25-21} = rt;
2026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{20-16} = rs;
2036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{15-11} = size;
2046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{10-6}  = pos;
2056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{5-0}   = funct;
2066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
2076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class J_FM_MM<bits<6> op> : MMArch {
2096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<26> target;
2106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<32> Inst;
2126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{31-26} = op;
2146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{25-0}  = target;
2156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
2166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class JR_FM_MM<bits<8> funct> : MMArch {
2186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<5> rs;
2196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bits<32> Inst;
2216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
2226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{31-21} = 0x00;
2236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  let Inst{20-16} = rs;
2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{15-14} = 0x0;
2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  let Inst{13-6}  = funct;
226  let Inst{5-0}   = 0x3c;
227}
228
229class JALR_FM_MM<bits<10> funct> : MMArch {
230  bits<5> rs;
231  bits<5> rd;
232
233  bits<32> Inst;
234
235  let Inst{31-26} = 0x00;
236  let Inst{25-21} = rd;
237  let Inst{20-16} = rs;
238  let Inst{15-6}  = funct;
239  let Inst{5-0}   = 0x3c;
240}
241
242class BEQ_FM_MM<bits<6> op> : MMArch {
243  bits<5>  rs;
244  bits<5>  rt;
245  bits<16> offset;
246
247  bits<32> Inst;
248
249  let Inst{31-26} = op;
250  let Inst{25-21} = rt;
251  let Inst{20-16} = rs;
252  let Inst{15-0}  = offset;
253}
254
255class BGEZ_FM_MM<bits<5> funct> : MMArch {
256  bits<5>  rs;
257  bits<16> offset;
258
259  bits<32> Inst;
260
261  let Inst{31-26} = 0x10;
262  let Inst{25-21} = funct;
263  let Inst{20-16} = rs;
264  let Inst{15-0}  = offset;
265}
266
267class BGEZAL_FM_MM<bits<5> funct> : MMArch {
268  bits<5>  rs;
269  bits<16> offset;
270
271  bits<32> Inst;
272
273  let Inst{31-26} = 0x10;
274  let Inst{25-21} = funct;
275  let Inst{20-16} = rs;
276  let Inst{15-0}  = offset;
277}
278