blob: 6535259e16ffec9157df578719842900f718ba56 [file] [log] [blame]
Chris Lattner7c90f732006-02-05 05:50:24 +00001//===- SparcInstrFormats.td - Sparc Instruction Formats ----*- tablegen -*-===//
Misha Brukmanc42077d2004-09-22 21:38:42 +00002//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner4ee451d2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Misha Brukmanc42077d2004-09-22 21:38:42 +00007//
8//===----------------------------------------------------------------------===//
9
Evan Cheng64d80e32007-07-19 01:14:50 +000010class InstSP<dag outs, dag ins, string asmstr, list<dag> pattern> : Instruction {
Chris Lattnereee99bd2005-12-18 08:21:00 +000011 field bits<32> Inst;
12
Chris Lattner7c90f732006-02-05 05:50:24 +000013 let Namespace = "SP";
Chris Lattnereee99bd2005-12-18 08:21:00 +000014
15 bits<2> op;
16 let Inst{31-30} = op; // Top two bits are the 'op' field
17
Evan Cheng64d80e32007-07-19 01:14:50 +000018 dag OutOperandList = outs;
19 dag InOperandList = ins;
Chris Lattnereee99bd2005-12-18 08:21:00 +000020 let AsmString = asmstr;
21 let Pattern = pattern;
22}
23
Misha Brukmanc42077d2004-09-22 21:38:42 +000024//===----------------------------------------------------------------------===//
Chris Lattner7c90f732006-02-05 05:50:24 +000025// Format #2 instruction classes in the Sparc
Misha Brukmanc42077d2004-09-22 21:38:42 +000026//===----------------------------------------------------------------------===//
27
Chris Lattnereee99bd2005-12-18 08:21:00 +000028// Format 2 instructions
Evan Cheng64d80e32007-07-19 01:14:50 +000029class F2<dag outs, dag ins, string asmstr, list<dag> pattern>
30 : InstSP<outs, ins, asmstr, pattern> {
Misha Brukmanc42077d2004-09-22 21:38:42 +000031 bits<3> op2;
32 bits<22> imm22;
33 let op = 0; // op = 0
34 let Inst{24-22} = op2;
35 let Inst{21-0} = imm22;
36}
37
38// Specific F2 classes: SparcV8 manual, page 44
39//
Evan Cheng64d80e32007-07-19 01:14:50 +000040class F2_1<bits<3> op2Val, dag outs, dag ins, string asmstr, list<dag> pattern>
41 : F2<outs, ins, asmstr, pattern> {
Misha Brukmanc42077d2004-09-22 21:38:42 +000042 bits<5> rd;
Misha Brukmanc42077d2004-09-22 21:38:42 +000043
44 let op2 = op2Val;
Misha Brukmanc42077d2004-09-22 21:38:42 +000045
46 let Inst{29-25} = rd;
47}
48
Evan Cheng64d80e32007-07-19 01:14:50 +000049class F2_2<bits<4> condVal, bits<3> op2Val, dag outs, dag ins, string asmstr,
50 list<dag> pattern> : F2<outs, ins, asmstr, pattern> {
Misha Brukmanc42077d2004-09-22 21:38:42 +000051 bits<4> cond;
52 bit annul = 0; // currently unused
53
54 let cond = condVal;
55 let op2 = op2Val;
Misha Brukmanc42077d2004-09-22 21:38:42 +000056
57 let Inst{29} = annul;
58 let Inst{28-25} = cond;
59}
60
61//===----------------------------------------------------------------------===//
Chris Lattner7c90f732006-02-05 05:50:24 +000062// Format #3 instruction classes in the Sparc
Misha Brukmanc42077d2004-09-22 21:38:42 +000063//===----------------------------------------------------------------------===//
64
Evan Cheng64d80e32007-07-19 01:14:50 +000065class F3<dag outs, dag ins, string asmstr, list<dag> pattern>
66 : InstSP<outs, ins, asmstr, pattern> {
Misha Brukmanc42077d2004-09-22 21:38:42 +000067 bits<5> rd;
68 bits<6> op3;
69 bits<5> rs1;
70 let op{1} = 1; // Op = 2 or 3
71 let Inst{29-25} = rd;
72 let Inst{24-19} = op3;
73 let Inst{18-14} = rs1;
74}
75
76// Specific F3 classes: SparcV8 manual, page 44
77//
Evan Cheng64d80e32007-07-19 01:14:50 +000078class F3_1<bits<2> opVal, bits<6> op3val, dag outs, dag ins,
79 string asmstr, list<dag> pattern> : F3<outs, ins, asmstr, pattern> {
Chris Lattner7c90f732006-02-05 05:50:24 +000080 bits<8> asi = 0; // asi not currently used
Misha Brukmanc42077d2004-09-22 21:38:42 +000081 bits<5> rs2;
82
83 let op = opVal;
84 let op3 = op3val;
Misha Brukmanc42077d2004-09-22 21:38:42 +000085
86 let Inst{13} = 0; // i field = 0
87 let Inst{12-5} = asi; // address space identifier
88 let Inst{4-0} = rs2;
89}
90
Evan Cheng64d80e32007-07-19 01:14:50 +000091class F3_2<bits<2> opVal, bits<6> op3val, dag outs, dag ins,
92 string asmstr, list<dag> pattern> : F3<outs, ins, asmstr, pattern> {
Misha Brukmanc42077d2004-09-22 21:38:42 +000093 bits<13> simm13;
94
95 let op = opVal;
96 let op3 = op3val;
Misha Brukmanc42077d2004-09-22 21:38:42 +000097
98 let Inst{13} = 1; // i field = 1
99 let Inst{12-0} = simm13;
100}
101
102// floating-point
Evan Cheng64d80e32007-07-19 01:14:50 +0000103class F3_3<bits<2> opVal, bits<6> op3val, bits<9> opfval, dag outs, dag ins,
104 string asmstr, list<dag> pattern> : F3<outs, ins, asmstr, pattern> {
Misha Brukmanc42077d2004-09-22 21:38:42 +0000105 bits<5> rs2;
106
107 let op = opVal;
108 let op3 = op3val;
Misha Brukmanc42077d2004-09-22 21:38:42 +0000109
110 let Inst{13-5} = opfval; // fp opcode
111 let Inst{4-0} = rs2;
112}
Chris Lattneraca36b92006-09-01 22:28:02 +0000113
114