1292915Sdim//=-   MicroMips64r6InstrFormats.td - 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 microMIPS64r6 instruction formats.
11292915Sdim//
12292915Sdim//===----------------------------------------------------------------------===//
13292915Sdim
14292915Sdimclass DAUI_FM_MMR6 {
15292915Sdim  bits<5> rt;
16292915Sdim  bits<5> rs;
17292915Sdim  bits<16> imm;
18292915Sdim
19292915Sdim  bits<32> Inst;
20292915Sdim
21292915Sdim  let Inst{31-26} = 0b111100;
22292915Sdim  let Inst{25-21} = rt;
23292915Sdim  let Inst{20-16} = rs;
24292915Sdim  let Inst{15-0}  = imm;
25292915Sdim}
26292915Sdim
27292915Sdimclass POOL32I_ADD_IMM_FM_MMR6<bits<5> funct> {
28292915Sdim  bits<5> rs;
29292915Sdim  bits<16> imm;
30292915Sdim
31292915Sdim  bits<32> Inst;
32292915Sdim
33292915Sdim  let Inst{31-26} = 0b010000;
34292915Sdim  let Inst{25-21} = funct;
35292915Sdim  let Inst{20-16} = rs;
36292915Sdim  let Inst{15-0} = imm;
37292915Sdim}
38292915Sdim
39292915Sdimclass POOL32S_EXTBITS_FM_MMR6<bits<6> funct> {
40292915Sdim  bits<5> rt;
41292915Sdim  bits<5> rs;
42292915Sdim  bits<5> size;
43292915Sdim  bits<5> pos;
44292915Sdim
45292915Sdim  bits<32> Inst;
46292915Sdim
47292915Sdim  let Inst{31-26} = 0b010110;
48292915Sdim  let Inst{25-21} = rt;
49292915Sdim  let Inst{20-16} = rs;
50292915Sdim  let Inst{15-11} = size;
51292915Sdim  let Inst{10-6}  = pos;
52292915Sdim  let Inst{5-0}   = funct;
53292915Sdim}
54292915Sdim
55292915Sdimclass POOL32S_DALIGN_FM_MMR6 {
56292915Sdim  bits<5> rs;
57292915Sdim  bits<5> rt;
58292915Sdim  bits<5> rd;
59292915Sdim  bits<3> bp;
60292915Sdim
61292915Sdim  bits<32> Inst;
62292915Sdim
63292915Sdim  let Inst{31-26} = 0b010110;
64292915Sdim  let Inst{25-21} = rs;
65292915Sdim  let Inst{20-16} = rt;
66292915Sdim  let Inst{15-11} = rd;
67292915Sdim  let Inst{10-8}  = bp;
68292915Sdim  let Inst{7-6}   = 0b00;
69292915Sdim  let Inst{5-0}   = 0b011100;
70292915Sdim}
71292915Sdim
72292915Sdimclass POOL32A_DIVMOD_FM_MMR6<string instr_asm, bits<9> funct>
73292915Sdim    : MMR6Arch<instr_asm> {
74292915Sdim  bits<5> rd;
75292915Sdim  bits<5> rs;
76292915Sdim  bits<5> rt;
77292915Sdim
78292915Sdim  bits<32> Inst;
79292915Sdim
80292915Sdim  let Inst{31-26} = 0b010110;
81292915Sdim  let Inst{25-21} = rd;
82292915Sdim  let Inst{20-16} = rs;
83292915Sdim  let Inst{15-11} = rt;
84292915Sdim  let Inst{10-9}  = 0b00;
85292915Sdim  let Inst{8-0}  = funct;
86292915Sdim}
87