Implemented Support of IA interrupt and exception handlers:
[oota-llvm.git] / lib / Target / Hexagon / HexagonInstrFormatsV60.td
1 //==- HexagonInstrFormatsV60.td - Hexagon Instruction Formats -*- tablegen -==//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file describes the Hexagon V60 instruction classes in TableGen format.
11 //
12 //===----------------------------------------------------------------------===//
13
14 //----------------------------------------------------------------------------//
15 //                         Hexagon Intruction Flags +
16 //
17 //                        *** Must match BaseInfo.h ***
18 //----------------------------------------------------------------------------//
19
20 def TypeCVI_VA         : IType<13>;
21 def TypeCVI_VA_DV      : IType<14>;
22 def TypeCVI_VX         : IType<15>;
23 def TypeCVI_VX_DV      : IType<16>;
24 def TypeCVI_VP         : IType<17>;
25 def TypeCVI_VP_VS      : IType<18>;
26 def TypeCVI_VS         : IType<19>;
27 def TypeCVI_VINLANESAT : IType<20>;
28 def TypeCVI_VM_LD      : IType<21>;
29 def TypeCVI_VM_TMP_LD  : IType<22>;
30 def TypeCVI_VM_CUR_LD  : IType<23>;
31 def TypeCVI_VM_VP_LDU  : IType<24>;
32 def TypeCVI_VM_ST      : IType<25>;
33 def TypeCVI_VM_NEW_ST  : IType<26>;
34 def TypeCVI_VM_STU     : IType<27>;
35 def TypeCVI_HIST       : IType<28>;
36 //----------------------------------------------------------------------------//
37 //                         Intruction Classes Definitions +
38 //----------------------------------------------------------------------------//
39
40 let validSubTargets = HasV60SubT in
41 {
42 class CVI_VA_Resource<dag outs, dag ins, string asmstr,
43                        list<dag> pattern = [], string cstr = "",
44                        InstrItinClass itin = CVI_VA>
45    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VA>,
46      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
47
48 class CVI_VA_DV_Resource<dag outs, dag ins, string asmstr,
49                          list<dag> pattern = [], string cstr = "",
50                          InstrItinClass itin = CVI_VA_DV>
51    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VA_DV>,
52      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
53
54 class CVI_VX_Resource_long<dag outs, dag ins, string asmstr,
55                        list<dag> pattern = [], string cstr = "",
56                        InstrItinClass itin = CVI_VX_LONG>
57    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX>,
58      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
59
60 class CVI_VX_Resource_late<dag outs, dag ins, string asmstr,
61                        list<dag> pattern = [], string cstr = "",
62                        InstrItinClass itin = CVI_VX_LATE>
63    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX>,
64      Requires<[HasV60T, UseHVX]>;
65
66 class CVI_VX_Resource<dag outs, dag ins, string asmstr,
67                        list<dag> pattern = [], string cstr = "",
68                        InstrItinClass itin = CVI_VX>
69    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX>,
70      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
71
72 class CVI_VX_DV_Resource<dag outs, dag ins, string asmstr,
73                        list<dag> pattern = [], string cstr = "",
74                        InstrItinClass itin = CVI_VX_DV>
75    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX_DV>,
76      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
77
78 class CVI_VX_DV_Slot2_Resource<dag outs, dag ins, string asmstr,
79                        list<dag> pattern = [], string cstr = "",
80                        InstrItinClass itin = CVI_VX_DV_SLOT2>
81    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX_DV>,
82      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
83
84 class CVI_VX_DV_Resource_long<dag outs, dag ins, string asmstr,
85                          list<dag> pattern = [], string cstr = "",
86                          InstrItinClass itin = CVI_VX_DV_LONG>
87    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX_DV>,
88      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
89
90 class CVI_VP_Resource_long<dag outs, dag ins, string asmstr,
91                          list<dag> pattern = [], string cstr = "",
92                          InstrItinClass itin = CVI_VP_LONG>
93    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VP>,
94      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
95
96 class CVI_VP_VS_Resource_early<dag outs, dag ins, string asmstr,
97                          list<dag> pattern = [], string cstr = "",
98                          InstrItinClass itin = CVI_VP_VS_EARLY>
99    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VP_VS>,
100      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
101
102 class CVI_VP_VS_Resource_long<dag outs, dag ins, string asmstr,
103                          list<dag> pattern = [], string cstr = "",
104                          InstrItinClass itin = CVI_VP_VS_LONG>
105    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VP_VS>,
106      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
107
108 class CVI_VP_VS_Resource_long_early<dag outs, dag ins, string asmstr,
109                          list<dag> pattern = [], string cstr = "",
110                          InstrItinClass itin = CVI_VP_VS_LONG_EARLY>
111    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VP_VS>,
112      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
113
114 class CVI_VS_Resource<dag outs, dag ins, string asmstr,
115                          list<dag> pattern = [], string cstr = "",
116                          InstrItinClass itin = CVI_VS>
117    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VS>,
118      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
119
120 class CVI_VINLANESAT_Resource<dag outs, dag ins, string asmstr,
121                          list<dag> pattern = [], string cstr = "",
122                          InstrItinClass itin = CVI_VINLANESAT>
123    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VINLANESAT>,
124      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
125
126 class CVI_VS_Resource_long<dag outs, dag ins, string asmstr,
127                            list<dag> pattern = [], string cstr = "",
128                            InstrItinClass itin = CVI_VS>
129   : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VS>,
130      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
131
132 class CVI_VM_LD_Resource<dag outs, dag ins, string asmstr,
133                          list<dag> pattern = [], string cstr = "",
134                          InstrItinClass itin = CVI_VM_LD>
135    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_LD>,
136      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
137
138 class CVI_VM_LD_Resource_long<dag outs, dag ins, string asmstr,
139                               list<dag> pattern = [], string cstr = "",
140                          InstrItinClass itin = CVI_VM_LD>
141    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_LD>,
142      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
143
144 class CVI_VM_TMP_LD_Resource<dag outs, dag ins, string asmstr,
145                              list<dag> pattern = [], string cstr = "",
146                              InstrItinClass itin = CVI_VM_TMP_LD>
147    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_TMP_LD>,
148      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
149
150 class CVI_VM_TMP_LD_Resource_long<dag outs, dag ins, string asmstr,
151                                   list<dag> pattern = [], string cstr = "",
152                                   InstrItinClass itin = CVI_VM_TMP_LD>
153    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_TMP_LD>,
154      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
155
156 class CVI_VM_CUR_LD_Resource<dag outs, dag ins, string asmstr,
157                              list<dag> pattern = [], string cstr = "",
158                              InstrItinClass itin = CVI_VM_CUR_LD>
159    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_CUR_LD>,
160      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
161
162 class CVI_VM_VP_LDU_Resource<dag outs, dag ins, string asmstr,
163                              list<dag> pattern = [], string cstr = "",
164                              InstrItinClass itin = CVI_VM_VP_LDU>
165    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_VP_LDU>,
166      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
167
168 class CVI_VM_VP_LDU_Resource_long<dag outs, dag ins, string asmstr,
169                                   list<dag> pattern = [], string cstr = "",
170                                   InstrItinClass itin = CVI_VM_VP_LDU>
171    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_VP_LDU>,
172      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
173
174 class CVI_VM_ST_Resource<dag outs, dag ins, string asmstr,
175                          list<dag> pattern = [], string cstr = "",
176                          InstrItinClass itin = CVI_VM_ST>
177    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_ST>,
178      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
179
180 class CVI_VM_ST_Resource_long<dag outs, dag ins, string asmstr,
181                               list<dag> pattern = [], string cstr = "",
182                               InstrItinClass itin = CVI_VM_ST>
183    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_ST>,
184      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
185
186 class CVI_VM_NEW_ST_Resource<dag outs, dag ins, string asmstr,
187                              list<dag> pattern = [], string cstr = "",
188                              InstrItinClass itin = CVI_VM_NEW_ST>
189    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_NEW_ST>,
190      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
191
192 class CVI_VM_NEW_ST_Resource_long<dag outs, dag ins, string asmstr,
193                                   list<dag> pattern = [], string cstr = "",
194                                   InstrItinClass itin = CVI_VM_NEW_ST>
195    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_NEW_ST>,
196      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
197
198 class CVI_VM_STU_Resource<dag outs, dag ins, string asmstr,
199                           list<dag> pattern = [], string cstr = "",
200                           InstrItinClass itin = CVI_VM_STU>
201    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_STU>,
202      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
203
204 class CVI_VM_STU_Resource_long<dag outs, dag ins, string asmstr,
205                                list<dag> pattern = [], string cstr = "",
206                                InstrItinClass itin = CVI_VM_STU>
207    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VM_STU>,
208      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
209
210 class CVI_HIST_Resource<dag outs, dag ins, string asmstr,
211                         list<dag> pattern = [], string cstr = "",
212                         InstrItinClass itin = CVI_HIST>
213    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_HIST>,
214      OpcodeHexagon, Requires<[HasV60T, UseHVX]>;
215 }
216
217 let validSubTargets = HasV60SubT in
218 {
219 class CVI_VA_Resource1<dag outs, dag ins, string asmstr,
220                        list<dag> pattern = [], string cstr = "",
221                        InstrItinClass itin = CVI_VA>
222    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VA>,
223      Requires<[HasV60T, UseHVX]>;
224
225 class CVI_VX_DV_Resource1<dag outs, dag ins, string asmstr,
226                          list<dag> pattern = [], string cstr = "",
227                          InstrItinClass itin = CVI_VX_DV>
228    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_VX_DV>,
229      Requires<[HasV60T, UseHVX]>;
230
231 class CVI_HIST_Resource1<dag outs, dag ins, string asmstr,
232                         list<dag> pattern = [], string cstr = "",
233                         InstrItinClass itin = CVI_HIST>
234    : InstHexagon<outs, ins, asmstr, pattern, cstr, itin, TypeCVI_HIST>,
235      Requires<[HasV60T, UseHVX]>;
236 }
237
238