xref: /llvm-project/llvm/lib/Target/Mips/MipsMTInstrFormats.td (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
17323f7acSSimon Dardis//===-- MipsMTInstrFormats.td - Mips Instruction Formats ---*- tablegen -*-===//
27323f7acSSimon Dardis//
3*2946cd70SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth// See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
67323f7acSSimon Dardis//
77323f7acSSimon Dardis//===----------------------------------------------------------------------===//
87323f7acSSimon Dardis
97323f7acSSimon Dardis//===----------------------------------------------------------------------===//
107323f7acSSimon Dardis//  Describe the MIPS MT instructions format
117323f7acSSimon Dardis//
127323f7acSSimon Dardis//  opcode - operation code.
137323f7acSSimon Dardis//  rt     - destination register
147323f7acSSimon Dardis//
157323f7acSSimon Dardis//===----------------------------------------------------------------------===//
167323f7acSSimon Dardis
17f909058aSSimon Dardisclass MipsMTInst : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther> {
187323f7acSSimon Dardis  let DecoderNamespace = "Mips";
197323f7acSSimon Dardis  let EncodingPredicates = [HasStdEnc];
207323f7acSSimon Dardis}
217323f7acSSimon Dardis
227323f7acSSimon Dardisclass OPCODE1<bits<1> Val> {
237323f7acSSimon Dardis  bits<1> Value = Val;
247323f7acSSimon Dardis}
257323f7acSSimon Dardis
262de1ddbdSSimon Dardisdef OPCODE_SC_D : OPCODE1<0b0>;
272de1ddbdSSimon Dardisdef OPCODE_SC_E : OPCODE1<0b1>;
287323f7acSSimon Dardis
297323f7acSSimon Dardisclass FIELD5<bits<5> Val> {
307323f7acSSimon Dardis  bits<5> Value = Val;
317323f7acSSimon Dardis}
327323f7acSSimon Dardis
337323f7acSSimon Dardisdef FIELD5_1_DMT_EMT  : FIELD5<0b00001>;
347323f7acSSimon Dardisdef FIELD5_2_DMT_EMT  : FIELD5<0b01111>;
352de1ddbdSSimon Dardisdef FIELD5_1_2_DVPE_EVPE : FIELD5<0b00000>;
36de5ed0c5SSimon Dardisdef FIELD5_MFTR : FIELD5<0b01000>;
37de5ed0c5SSimon Dardisdef FIELD5_MTTR : FIELD5<0b01100>;
387323f7acSSimon Dardis
397323f7acSSimon Dardisclass COP0_MFMC0_MT<FIELD5 Op1, FIELD5 Op2, OPCODE1 sc> : MipsMTInst {
407323f7acSSimon Dardis  bits<32> Inst;
417323f7acSSimon Dardis
427323f7acSSimon Dardis  bits<5> rt;
437323f7acSSimon Dardis  let Inst{31-26} = 0b010000; // COP0
447323f7acSSimon Dardis  let Inst{25-21} = 0b01011;  // MFMC0
457323f7acSSimon Dardis  let Inst{20-16} = rt;
467323f7acSSimon Dardis  let Inst{15-11} = Op1.Value;
477323f7acSSimon Dardis  let Inst{10-6}  = Op2.Value;
487323f7acSSimon Dardis  let Inst{5}     = sc.Value;
497323f7acSSimon Dardis  let Inst{4-3}   = 0b00;
507323f7acSSimon Dardis  let Inst{2-0}   = 0b001;
517323f7acSSimon Dardis}
5276eb647eSSimon Dardis
53de5ed0c5SSimon Dardisclass COP0_MFTTR_MT<FIELD5 Op> : MipsMTInst {
54de5ed0c5SSimon Dardis  bits<32> Inst;
55de5ed0c5SSimon Dardis
56de5ed0c5SSimon Dardis  bits<5> rt;
57de5ed0c5SSimon Dardis  bits<5> rd;
58de5ed0c5SSimon Dardis  bits<1> u;
59de5ed0c5SSimon Dardis  bits<1> h;
60de5ed0c5SSimon Dardis  bits<3> sel;
61de5ed0c5SSimon Dardis  let Inst{31-26} = 0b010000; // COP0
62de5ed0c5SSimon Dardis  let Inst{25-21} = Op.Value; // MFMC0
63de5ed0c5SSimon Dardis  let Inst{20-16} = rt;
64de5ed0c5SSimon Dardis  let Inst{15-11} = rd;
65de5ed0c5SSimon Dardis  let Inst{10-6}  = 0b00000;  // rx - currently unsupported.
66de5ed0c5SSimon Dardis  let Inst{5}     = u;
67de5ed0c5SSimon Dardis  let Inst{4}     = h;
68de5ed0c5SSimon Dardis  let Inst{3}     = 0b0;
69de5ed0c5SSimon Dardis  let Inst{2-0}   = sel;
70de5ed0c5SSimon Dardis}
71de5ed0c5SSimon Dardis
7276eb647eSSimon Dardisclass SPECIAL3_MT_FORK : MipsMTInst {
7376eb647eSSimon Dardis  bits<32> Inst;
7476eb647eSSimon Dardis
7576eb647eSSimon Dardis  bits<5> rs;
7676eb647eSSimon Dardis  bits<5> rt;
7776eb647eSSimon Dardis  bits<5> rd;
7876eb647eSSimon Dardis  let Inst{31-26} = 0b011111; // SPECIAL3
7976eb647eSSimon Dardis  let Inst{25-21} = rs;
8076eb647eSSimon Dardis  let Inst{20-16} = rt;
8176eb647eSSimon Dardis  let Inst{15-11} = rd;
8276eb647eSSimon Dardis  let Inst{10-6}  = 0b00000;
8376eb647eSSimon Dardis  let Inst{5-0}   = 0b001000; // FORK
8476eb647eSSimon Dardis}
8576eb647eSSimon Dardis
8676eb647eSSimon Dardisclass SPECIAL3_MT_YIELD : MipsMTInst {
8776eb647eSSimon Dardis  bits<32> Inst;
8876eb647eSSimon Dardis
8976eb647eSSimon Dardis  bits<5> rs;
9076eb647eSSimon Dardis  bits<5> rd;
9176eb647eSSimon Dardis  let Inst{31-26} = 0b011111; // SPECIAL3
9276eb647eSSimon Dardis  let Inst{25-21} = rs;
9376eb647eSSimon Dardis  let Inst{20-16} = 0b00000;
9476eb647eSSimon Dardis  let Inst{15-11} = rd;
9576eb647eSSimon Dardis  let Inst{10-6}  = 0b00000;
9676eb647eSSimon Dardis  let Inst{5-0}   = 0b001001; // FORK
9776eb647eSSimon Dardis}
98