1292915Sdim//===- MipsEVAInstrFormats.td - Mips Instruction Formats ---*- tablegen -*-===//
2292915Sdim//
3292915Sdim//                     The LLVM Compiler Infrastructure
4292915Sdim//
5292915Sdim// This file is distributed under the University of Illinois Open Source
6292915Sdim// License. See LICENSE.TXT for details.
7292915Sdim//
8292915Sdim//===----------------------------------------------------------------------===//
9292915Sdim//
10292915Sdim// This file describes Mips32r6 instruction formats.
11292915Sdim//
12292915Sdim//===----------------------------------------------------------------------===//
13292915Sdim
14292915Sdimclass MipsEVAInst : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther>,
15292915Sdim                    PredicateControl, StdArch {
16292915Sdim  let DecoderNamespace = "Mips";
17292915Sdim  let EncodingPredicates = [HasStdEnc];
18292915Sdim}
19292915Sdim
20292915Sdim//===----------------------------------------------------------------------===//
21292915Sdim//
22292915Sdim// Field Values
23292915Sdim//
24292915Sdim//===----------------------------------------------------------------------===//
25292915Sdim
26292915Sdim// Memory Load/Store EVA
27292915Sdimdef OPCODE6_LBE        : OPCODE6<0b101100>;
28292915Sdimdef OPCODE6_LBuE       : OPCODE6<0b101000>;
29292915Sdimdef OPCODE6_LHE        : OPCODE6<0b101101>;
30292915Sdimdef OPCODE6_LHuE       : OPCODE6<0b101001>;
31292915Sdimdef OPCODE6_LWE        : OPCODE6<0b101111>;
32292915Sdim
33292915Sdimdef OPCODE6_SBE        : OPCODE6<0b011100>;
34292915Sdimdef OPCODE6_SHE        : OPCODE6<0b011101>;
35292915Sdimdef OPCODE6_SWE        : OPCODE6<0b011111>;
36292915Sdim
37292915Sdim// load/store left/right EVA
38292915Sdimdef OPCODE6_LWLE       : OPCODE6<0b011001>;
39292915Sdimdef OPCODE6_LWRE       : OPCODE6<0b011010>;
40292915Sdimdef OPCODE6_SWLE       : OPCODE6<0b100001>;
41292915Sdimdef OPCODE6_SWRE       : OPCODE6<0b100010>;
42292915Sdim
43292915Sdim// Load-linked EVA, Store-conditional EVA
44292915Sdimdef OPCODE6_LLE        : OPCODE6<0b101110>;
45292915Sdimdef OPCODE6_SCE        : OPCODE6<0b011110>;
46292915Sdim
47292915Sdimdef OPCODE6_TLBINV     : OPCODE6<0b000011>;
48292915Sdimdef OPCODE6_TLBINVF    : OPCODE6<0b000100>;
49292915Sdim
50292915Sdimdef OPCODE6_CACHEE     : OPCODE6<0b011011>;
51292915Sdimdef OPCODE6_PREFE      : OPCODE6<0b100011>;
52292915Sdim
53292915Sdimdef OPGROUP_COP0       : OPGROUP<0b010000>;
54292915Sdim
55292915Sdim//===----------------------------------------------------------------------===//
56292915Sdim//
57292915Sdim// Encoding Formats
58292915Sdim//
59292915Sdim//===----------------------------------------------------------------------===//
60292915Sdim
61292915Sdimclass SPECIAL3_EVA_LOAD_STORE_FM<OPCODE6 Operation> : MipsEVAInst {
62292915Sdim  bits<21> addr;
63292915Sdim  bits<5> hint;
64292915Sdim  bits<5> base = addr{20-16};
65292915Sdim  bits<9> offset = addr{8-0};
66292915Sdim
67292915Sdim  bits<32> Inst;
68292915Sdim
69292915Sdim  let Inst{31-26} = OPGROUP_SPECIAL3.Value;
70292915Sdim  let Inst{25-21} = base;
71292915Sdim  let Inst{20-16} = hint;
72292915Sdim  let Inst{15-7}  = offset;
73292915Sdim  let Inst{6}     = 0;
74292915Sdim  let Inst{5-0}   = Operation.Value;
75292915Sdim}
76292915Sdim
77292915Sdimclass TLB_FM<OPCODE6 Operation> : MipsEVAInst {
78292915Sdim  bits<32> Inst;
79292915Sdim
80292915Sdim  let Inst{31-26} = OPGROUP_COP0.Value;
81292915Sdim  let Inst{25} = 1;       // CO
82292915Sdim  let Inst{24-6} = 0;
83292915Sdim  let Inst{5-0} = Operation.Value;
84292915Sdim}
85