MipsMSAInstrFormats.td revision cd81d94322a39503e4a3e87b6ee03d4fcb3465fb
19166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com//===- MipsMSAInstrFormats.td - Mips Instruction Formats ---*- tablegen -*-===//
29166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com//
39166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com//                     The LLVM Compiler Infrastructure
49166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com//
59166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com// This file is distributed under the University of Illinois Open Source
69166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com// License. See LICENSE.TXT for details.
79166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com//
89166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com//===----------------------------------------------------------------------===//
99166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
109166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comdef HasMSA : Predicate<"Subtarget->hasMSA()">,
119166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com             AssemblerPredicate<"FeatureMSA">;
129166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
139166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSAInst : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther> {
149166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Predicates = [HasMSA];
159166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{31-26} = 0b011110;
169166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
179166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
189166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA64Inst : MSAInst {
199166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Predicates = [HasMSA, HasMips64];
208d0a524a4847bc7e1cc63a93b78922739466c201caryclark@google.com}
219166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
22d892bd8ba676d34d4ce4a73ac7aad88e102fad70caryclark@google.comclass MSACBranch : MSAInst {
239166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{31-26} = 0b010001;
24cffbcc3b9665f2c928544b6fc6b8a0e22a4210fbcaryclark@google.com}
259166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
269166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSASpecial : MSAInst {
279166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{31-26} = 0b000000;
289166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
299166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
309166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA64Special : MSA64Inst {
319166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{31-26} = 0b000000;
329166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
339166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
349166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSAPseudo<dag outs, dag ins, list<dag> pattern,
359166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com                InstrItinClass itin = IIPseudo>:
368d0a524a4847bc7e1cc63a93b78922739466c201caryclark@google.com  MipsPseudo<outs, ins, pattern, itin> {
379166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Predicates = [HasMSA];
389166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
39d892bd8ba676d34d4ce4a73ac7aad88e102fad70caryclark@google.com
409166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA_BIT_B_FMT<bits<3> major, bits<6> minor>: MSAInst {
41cffbcc3b9665f2c928544b6fc6b8a0e22a4210fbcaryclark@google.com  bits<5> ws;
429166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wd;
439166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<3> m;
449166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
45cffbcc3b9665f2c928544b6fc6b8a0e22a4210fbcaryclark@google.com  let Inst{25-23} = major;
469166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{22-19} = 0b1110;
479166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{18-16} = m;
489166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{15-11} = ws;
499166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{10-6} = wd;
509166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{5-0} = minor;
519166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
529166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
539166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA_BIT_H_FMT<bits<3> major, bits<6> minor>: MSAInst {
548d0a524a4847bc7e1cc63a93b78922739466c201caryclark@google.com  bits<5> ws;
559166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wd;
56d892bd8ba676d34d4ce4a73ac7aad88e102fad70caryclark@google.com  bits<4> m;
579166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
589166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{25-23} = major;
599166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{22-20} = 0b110;
609166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{19-16} = m;
619166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{15-11} = ws;
629166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{10-6} = wd;
639166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{5-0} = minor;
649166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
659166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
669166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA_BIT_W_FMT<bits<3> major, bits<6> minor>: MSAInst {
679166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> ws;
689166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wd;
699166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> m;
709166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
719166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{25-23} = major;
729166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{22-21} = 0b10;
739166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{20-16} = m;
749166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{15-11} = ws;
759166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{10-6} = wd;
769166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{5-0} = minor;
778d0a524a4847bc7e1cc63a93b78922739466c201caryclark@google.com}
789166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
79d892bd8ba676d34d4ce4a73ac7aad88e102fad70caryclark@google.comclass MSA_BIT_D_FMT<bits<3> major, bits<6> minor>: MSAInst {
809166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> ws;
819166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wd;
829166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<6> m;
839166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
849166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{25-23} = major;
859166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{22} = 0b0;
869166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{21-16} = m;
879166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{15-11} = ws;
889166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{10-6} = wd;
899166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{5-0} = minor;
909166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
919166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
929166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA_2R_FILL_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst {
939166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> rs;
949166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wd;
959166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
9678e7b4e1b928fa69f672be3c743df6d6c3ecbcedtfarina@chromium.org  let Inst{25-18} = major;
979166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{17-16} = df;
989166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{15-11} = rs;
999166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{10-6} = wd;
1009166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{5-0} = minor;
1019166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
1029166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1039166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA_2R_FILL_D_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSA64Inst {
1049166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> rs;
1059166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wd;
1069166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1079166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{25-18} = major;
1089166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{17-16} = df;
1099166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{15-11} = rs;
1109166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{10-6} = wd;
1119166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{5-0} = minor;
1129166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
1139166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1149166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA_2R_FMT<bits<8> major, bits<2> df, bits<6> minor>: MSAInst {
1159166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> ws;
1169166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wd;
1179166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1189166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{25-18} = major;
1199166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{17-16} = df;
1209166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{15-11} = ws;
1219166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{10-6} = wd;
1229166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{5-0} = minor;
1239166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
1249166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1259166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA_2RF_FMT<bits<9> major, bits<1> df, bits<6> minor>: MSAInst {
1269166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> ws;
1279166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wd;
1289166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1299166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{25-17} = major;
1309166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{16} = df;
1319166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{15-11} = ws;
1329166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{10-6} = wd;
1339166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{5-0} = minor;
1349166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
1359166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1369166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA_3R_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
1379166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wt;
1389166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> ws;
1399166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wd;
1409166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1419166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{25-23} = major;
1429166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{22-21} = df;
1439166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{20-16} = wt;
1449166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{15-11} = ws;
1459166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{10-6} = wd;
1469166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{5-0} = minor;
1479166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
1489166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1499166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA_3RF_FMT<bits<4> major, bits<1> df, bits<6> minor>: MSAInst {
1509166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wt;
1519166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> ws;
1529166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wd;
1539166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1549166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{25-22} = major;
1559166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{21} = df;
1569166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{20-16} = wt;
1579166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{15-11} = ws;
1589166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{10-6} = wd;
1599166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{5-0} = minor;
1609166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
1619166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1629166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA_3R_INDEX_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
1639166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> rt;
1649166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> ws;
1659166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wd;
1669166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
167ad65a3e5fb1f94699f183551b828efbcc6a133cecaryclark@google.com  let Inst{25-23} = major;
1689166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{22-21} = df;
1699166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{20-16} = rt;
1709166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{15-11} = ws;
1719166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{10-6} = wd;
1729166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{5-0} = minor;
1739166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
1749166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1758d0a524a4847bc7e1cc63a93b78922739466c201caryclark@google.comclass MSA_ELM_FMT<bits<10> major, bits<6> minor>: MSAInst {
1769166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> ws;
1779166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> wd;
1789166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1799166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{25-16} = major;
1809166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{15-11} = ws;
1819166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{10-6} = wd;
1829166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{5-0} = minor;
1839166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
184d892bd8ba676d34d4ce4a73ac7aad88e102fad70caryclark@google.com
1859166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA_ELM_CFCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
1869166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> rd;
1879166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> cs;
1889166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1899166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{25-16} = major;
19078e7b4e1b928fa69f672be3c743df6d6c3ecbcedtfarina@chromium.org  let Inst{15-11} = cs;
1919166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{10-6} = rd;
1929166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  let Inst{5-0} = minor;
1939166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com}
1949166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
1959166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.comclass MSA_ELM_CTCMSA_FMT<bits<10> major, bits<6> minor>: MSAInst {
19678e7b4e1b928fa69f672be3c743df6d6c3ecbcedtfarina@chromium.org  bits<5> rs;
1979166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com  bits<5> cd;
1989166dcb3a0e8784bea83d76ae01aa338c049ae05caryclark@google.com
199  let Inst{25-16} = major;
200  let Inst{15-11} = rs;
201  let Inst{10-6} = cd;
202  let Inst{5-0} = minor;
203}
204
205class MSA_ELM_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
206  bits<4> n;
207  bits<5> ws;
208  bits<5> wd;
209
210  let Inst{25-22} = major;
211  let Inst{21-20} = 0b00;
212  let Inst{19-16} = n{3-0};
213  let Inst{15-11} = ws;
214  let Inst{10-6} = wd;
215  let Inst{5-0} = minor;
216}
217
218class MSA_ELM_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
219  bits<4> n;
220  bits<5> ws;
221  bits<5> wd;
222
223  let Inst{25-22} = major;
224  let Inst{21-19} = 0b100;
225  let Inst{18-16} = n{2-0};
226  let Inst{15-11} = ws;
227  let Inst{10-6} = wd;
228  let Inst{5-0} = minor;
229}
230
231class MSA_ELM_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
232  bits<4> n;
233  bits<5> ws;
234  bits<5> wd;
235
236  let Inst{25-22} = major;
237  let Inst{21-18} = 0b1100;
238  let Inst{17-16} = n{1-0};
239  let Inst{15-11} = ws;
240  let Inst{10-6} = wd;
241  let Inst{5-0} = minor;
242}
243
244class MSA_ELM_D_FMT<bits<4> major, bits<6> minor>: MSAInst {
245  bits<4> n;
246  bits<5> ws;
247  bits<5> wd;
248
249  let Inst{25-22} = major;
250  let Inst{21-17} = 0b11100;
251  let Inst{16} = n{0};
252  let Inst{15-11} = ws;
253  let Inst{10-6} = wd;
254  let Inst{5-0} = minor;
255}
256
257class MSA_ELM_COPY_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
258  bits<4> n;
259  bits<5> ws;
260  bits<5> rd;
261
262  let Inst{25-22} = major;
263  let Inst{21-20} = 0b00;
264  let Inst{19-16} = n{3-0};
265  let Inst{15-11} = ws;
266  let Inst{10-6} = rd;
267  let Inst{5-0} = minor;
268}
269
270class MSA_ELM_COPY_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
271  bits<4> n;
272  bits<5> ws;
273  bits<5> rd;
274
275  let Inst{25-22} = major;
276  let Inst{21-19} = 0b100;
277  let Inst{18-16} = n{2-0};
278  let Inst{15-11} = ws;
279  let Inst{10-6} = rd;
280  let Inst{5-0} = minor;
281}
282
283class MSA_ELM_COPY_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
284  bits<4> n;
285  bits<5> ws;
286  bits<5> rd;
287
288  let Inst{25-22} = major;
289  let Inst{21-18} = 0b1100;
290  let Inst{17-16} = n{1-0};
291  let Inst{15-11} = ws;
292  let Inst{10-6} = rd;
293  let Inst{5-0} = minor;
294}
295
296class MSA_ELM_COPY_D_FMT<bits<4> major, bits<6> minor>: MSA64Inst {
297  bits<4> n;
298  bits<5> ws;
299  bits<5> rd;
300
301  let Inst{25-22} = major;
302  let Inst{21-17} = 0b11100;
303  let Inst{16} = n{0};
304  let Inst{15-11} = ws;
305  let Inst{10-6} = rd;
306  let Inst{5-0} = minor;
307}
308
309class MSA_ELM_INSERT_B_FMT<bits<4> major, bits<6> minor>: MSAInst {
310  bits<6> n;
311  bits<5> rs;
312  bits<5> wd;
313
314  let Inst{25-22} = major;
315  let Inst{21-20} = 0b00;
316  let Inst{19-16} = n{3-0};
317  let Inst{15-11} = rs;
318  let Inst{10-6} = wd;
319  let Inst{5-0} = minor;
320}
321
322class MSA_ELM_INSERT_H_FMT<bits<4> major, bits<6> minor>: MSAInst {
323  bits<6> n;
324  bits<5> rs;
325  bits<5> wd;
326
327  let Inst{25-22} = major;
328  let Inst{21-19} = 0b100;
329  let Inst{18-16} = n{2-0};
330  let Inst{15-11} = rs;
331  let Inst{10-6} = wd;
332  let Inst{5-0} = minor;
333}
334
335class MSA_ELM_INSERT_W_FMT<bits<4> major, bits<6> minor>: MSAInst {
336  bits<6> n;
337  bits<5> rs;
338  bits<5> wd;
339
340  let Inst{25-22} = major;
341  let Inst{21-18} = 0b1100;
342  let Inst{17-16} = n{1-0};
343  let Inst{15-11} = rs;
344  let Inst{10-6} = wd;
345  let Inst{5-0} = minor;
346}
347
348class MSA_ELM_INSERT_D_FMT<bits<4> major, bits<6> minor>: MSA64Inst {
349  bits<6> n;
350  bits<5> rs;
351  bits<5> wd;
352
353  let Inst{25-22} = major;
354  let Inst{21-17} = 0b11100;
355  let Inst{16} = n{0};
356  let Inst{15-11} = rs;
357  let Inst{10-6} = wd;
358  let Inst{5-0} = minor;
359}
360
361class MSA_I5_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
362  bits<5> imm;
363  bits<5> ws;
364  bits<5> wd;
365
366  let Inst{25-23} = major;
367  let Inst{22-21} = df;
368  let Inst{20-16} = imm;
369  let Inst{15-11} = ws;
370  let Inst{10-6} = wd;
371  let Inst{5-0} = minor;
372}
373
374class MSA_I8_FMT<bits<2> major, bits<6> minor>: MSAInst {
375  bits<8> u8;
376  bits<5> ws;
377  bits<5> wd;
378
379  let Inst{25-24} = major;
380  let Inst{23-16} = u8;
381  let Inst{15-11} = ws;
382  let Inst{10-6} = wd;
383  let Inst{5-0} = minor;
384}
385
386class MSA_I10_FMT<bits<3> major, bits<2> df, bits<6> minor>: MSAInst {
387  bits<10> s10;
388  bits<5> wd;
389
390  let Inst{25-23} = major;
391  let Inst{22-21} = df;
392  let Inst{20-11} = s10;
393  let Inst{10-6} = wd;
394  let Inst{5-0} = minor;
395}
396
397class MSA_MI10_FMT<bits<2> df, bits<4> minor>: MSAInst {
398  bits<21> addr;
399  bits<5> wd;
400
401  let Inst{25-16} = addr{9-0};
402  let Inst{15-11} = addr{20-16};
403  let Inst{10-6} = wd;
404  let Inst{5-2} = minor;
405  let Inst{1-0} = df;
406}
407
408class MSA_VEC_FMT<bits<5> major, bits<6> minor>: MSAInst {
409  bits<5> wt;
410  bits<5> ws;
411  bits<5> wd;
412
413  let Inst{25-21} = major;
414  let Inst{20-16} = wt;
415  let Inst{15-11} = ws;
416  let Inst{10-6} = wd;
417  let Inst{5-0} = minor;
418}
419
420class MSA_CBRANCH_FMT<bits<3> major, bits<2> df>: MSACBranch {
421  bits<16> offset;
422  bits<5> wt;
423
424  let Inst{25-23} = major;
425  let Inst{22-21} = df;
426  let Inst{20-16} = wt;
427  let Inst{15-0} = offset;
428}
429
430class MSA_CBRANCH_V_FMT<bits<5> major>: MSACBranch {
431  bits<16> offset;
432  bits<5> wt;
433
434  let Inst{25-21} = major;
435  let Inst{20-16} = wt;
436  let Inst{15-0} = offset;
437}
438
439class SPECIAL_LSA_FMT<bits<6> minor>: MSASpecial {
440  bits<5> rs;
441  bits<5> rt;
442  bits<5> rd;
443  bits<2> sa;
444
445  let Inst{25-21} = rs;
446  let Inst{20-16} = rt;
447  let Inst{15-11} = rd;
448  let Inst{10-8} = 0b000;
449  let Inst{7-6} = sa;
450  let Inst{5-0} = minor;
451}
452
453class SPECIAL_DLSA_FMT<bits<6> minor>: MSA64Special {
454  bits<5> rs;
455  bits<5> rt;
456  bits<5> rd;
457  bits<2> sa;
458
459  let Inst{25-21} = rs;
460  let Inst{20-16} = rt;
461  let Inst{15-11} = rd;
462  let Inst{10-8} = 0b000;
463  let Inst{7-6} = sa;
464  let Inst{5-0} = minor;
465}
466