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