MicroMipsInstrFormats.td revision da0860f78e6e43aca3333a7815b2f9bc0f8dfac0
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MMArch {
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  string Arch = "micromips";
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list<dag> Pattern = [];
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ADD_FM_MM<bits<6> op, bits<10> funct> : MMArch {
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<5> rt;
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<5> rs;
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<5> rd;
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<32> Inst;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{31-26} = op;
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  let Inst{25-21} = rt;
155e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)  let Inst{20-16} = rs;
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  let Inst{15-11} = rd;
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  let Inst{10}    = 0;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{9-0}   = funct;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class ADDI_FM_MM<bits<6> op> : MMArch {
223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bits<5>  rs;
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  bits<5>  rt;
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bits<16> imm16;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<32> Inst;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{31-26} = op;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  let Inst{25-21} = rt;
30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  let Inst{20-16} = rs;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{15-0}  = imm16;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SLTI_FM_MM<bits<6> op> : MMArch {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<5> rt;
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bits<5> rs;
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bits<16> imm16;
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bits<32> Inst;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  let Inst{31-26} = op;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{25-21} = rs;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{20-16} = rt;
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  let Inst{15-0}  = imm16;
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class LUI_FM_MM : MMArch {
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bits<5> rt;
493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bits<16> imm16;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<32> Inst;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{31-26} = 0x10;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{25-21} = 0xd;
553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  let Inst{20-16} = rt;
563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  let Inst{15-0}  = imm16;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MULT_FM_MM<bits<10> funct> : MMArch {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<5>  rs;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<5>  rt;
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  bits<32> Inst;
64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  let Inst{31-26} = 0x00;
66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  let Inst{25-21} = rt;
67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  let Inst{20-16} = rs;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{15-6}  = funct;
69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  let Inst{5-0}   = 0x3c;
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass SRA_FM_MM<bits<10> funct, bit rotate> : MMArch {
73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  bits<5> rd;
74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  bits<5> rt;
75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  bits<5> shamt;
76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  bits<32> Inst;
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{31-26} = 0;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{25-21} = rd;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{20-16} = rt;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{15-11} = shamt;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{10}    = rotate;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{9-0}   = funct;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SRLV_FM_MM<bits<10> funct, bit rotate> : MMArch {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<5> rd;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<5> rt;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<5> rs;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<32> Inst;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{31-26} = 0;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{25-21} = rt;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{20-16} = rs;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{15-11} = rd;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{10}    = rotate;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{9-0}   = funct;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LW_FM_MM<bits<6> op> : MMArch {
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<5> rt;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<21> addr;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (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> {
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bits<5> rt;
116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  bits<21> addr;
117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  bits<32> Inst;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{31-26} = 0x18;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{25-21} = rt;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{20-16} = addr{20-16};
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{15-12} = funct;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  let Inst{11-0}  = addr{11-0};
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)