1//===-- CSKY.td - Describe the CSKY Target Machine ---------*- tablegen -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9include "llvm/Target/Target.td"
10
11//===----------------------------------------------------------------------===//
12// CSKY subtarget features and instruction predicates.
13//===----------------------------------------------------------------------===//
14def ModeHardFloat :
15  SubtargetFeature<"hard-float", "UseHardFloat",
16                   "true", "Use hard floating point features">;
17def ModeHardFloatABI :
18  SubtargetFeature<"hard-float-abi", "UseHardFloatABI",
19                   "true", "Use hard floating point ABI to pass args">;
20
21def FeatureFPUV2_SF
22    : SubtargetFeature<"fpuv2_sf", "HasFPUv2SingleFloat", "true",
23                       "Enable FPUv2 single float instructions">;
24def HasFPUv2_SF : Predicate<"Subtarget->hasFPUv2SingleFloat()">,
25                  AssemblerPredicate<(all_of FeatureFPUV2_SF),
26                  "Enable FPUv2 single float instructions">;
27
28def FeatureFPUV2_DF
29    : SubtargetFeature<"fpuv2_df", "HasFPUv2DoubleFloat", "true",
30                       "Enable FPUv2 double float instructions">;
31def HasFPUv2_DF : Predicate<"Subtarget->hasFPUv2DoubleFloat()">,
32                  AssemblerPredicate<(all_of FeatureFPUV2_DF),
33                  "Enable FPUv2 double float instructions">;
34
35def FeatureFdivdu : SubtargetFeature<"fdivdu", "HasFdivdu", "true",
36                                     "Enable float divide instructions">;
37def HasFdivdu : Predicate<"Subtarget->hasFdivdu()">,
38                AssemblerPredicate<(all_of FeatureFdivdu),
39                "Enable float divide instructions">;
40
41def FeatureFPUV3_HI
42    : SubtargetFeature<"fpuv3_hi", "HasFPUv3HalfWord", "true",
43                       "Enable FPUv3 harf word converting instructions">;
44def HasFPUv3_HI : Predicate<"Subtarget->hasFPUv3HalfWord()">,
45                  AssemblerPredicate<(all_of FeatureFPUV3_HI),
46                  "Enable FPUv3 harf word converting instructions">;
47
48def FeatureFPUV3_HF
49    : SubtargetFeature<"fpuv3_hf", "HasFPUv3HalfFloat", "true",
50                       "Enable FPUv3 harf precision operate instructions">;
51def HasFPUv3_HF : Predicate<"Subtarget->hasFPUv3HalfFloat()">,
52                  AssemblerPredicate<(all_of FeatureFPUV3_HF),
53                  "Enable FPUv3 harf precision operate instructions">;
54
55def FeatureFPUV3_SF
56    : SubtargetFeature<"fpuv3_sf", "HasFPUv3SingleFloat", "true",
57                       "Enable FPUv3 single float instructions">;
58def HasFPUv3_SF : Predicate<"Subtarget->hasFPUv3SingleFloat()">,
59                  AssemblerPredicate<(all_of FeatureFPUV3_SF),
60                  "Enable FPUv3 single float instructions">;
61
62def FeatureFPUV3_DF
63    : SubtargetFeature<"fpuv3_df", "HasFPUv3DoubleFloat", "true",
64                       "Enable FPUv3 double float instructions">;
65def HasFPUv3_DF : Predicate<"Subtarget->hasFPUv3DoubleFloat()">,
66                  AssemblerPredicate<(all_of FeatureFPUV3_DF),
67                  "Enable FPUv3 double float instructions">;
68
69def HasFLOATE1
70    : SubtargetFeature<"floate1", "HasFLOATE1", "true", "Support CSKY floate1 instructions">;
71def iHasFLOATE1 : Predicate<"Subtarget->hasFLOATE1()">,
72             AssemblerPredicate<(all_of HasFLOATE1),
73             "Support CSKY floate1 instructions">;
74
75def HasFLOAT1E2
76    : SubtargetFeature<"float1e2", "HasFLOAT1E2", "true", "Support CSKY float1e2 instructions">;
77def iHasFLOAT1E2 : Predicate<"Subtarget->hasFLOAT1E2()">,
78             AssemblerPredicate<(all_of HasFLOAT1E2),
79             "Support CSKY float1e2 instructions">;
80
81def HasFLOAT1E3
82    : SubtargetFeature<"float1e3", "HasFLOAT1E3", "true", "Support CSKY float1e3 instructions">;
83def iHasFLOAT1E3 : Predicate<"Subtarget->hasFLOAT1E3()">,
84             AssemblerPredicate<(all_of HasFLOAT1E3),
85             "Support CSKY float1e3 instructions">;
86
87def HasFLOAT3E4
88    : SubtargetFeature<"float3e4", "HasFLOAT3E4", "true", "Support CSKY float3e4 instructions">;
89def iHasFLOAT3E4 : Predicate<"Subtarget->hasFLOAT3E4()">,
90             AssemblerPredicate<(all_of HasFLOAT3E4),
91             "Support CSKY float3e4 instructions">;
92
93def HasFLOAT7E60
94    : SubtargetFeature<"float7e60", "HasFLOAT7E60", "true", "Support CSKY float7e60 instructions">;
95def iHasFLOAT7E60 : Predicate<"Subtarget->hasFLOAT7E60()">,
96             AssemblerPredicate<(all_of HasFLOAT7E60),
97             "Support CSKY float7e60 instructions">;
98
99def FeatureHWDiv : SubtargetFeature<"hwdiv", "HasHardwareDivide", "true",
100                                    "Enable divide instrutions">;
101def HasHWDiv : Predicate<"Subtarget->hasHardwareDivide()">,
102               AssemblerPredicate<(all_of FeatureHWDiv),
103               "Enable divide instrutions">;
104
105def FeatureSTM : SubtargetFeature<"multiple_stld", "HasSTM", "true",
106                                  "Enable multiple load/store instrutions">;
107def HasSTM : Predicate<"Subtarget->hasSTM()">,
108             AssemblerPredicate<(all_of FeatureSTM),
109             "Enable multiple load/store instrutions">;
110
111def FeaturePushPop : SubtargetFeature<"pushpop", "HasPushPop", "true",
112                                      "Enable push/pop instrutions">;
113def HasPushPop : Predicate<"Subtarget->hasPushPop()">,
114                 AssemblerPredicate<(all_of FeaturePushPop),
115                 "Enable push/pop instrutions">;
116
117def FeatureDSP
118    : SubtargetFeature<"edsp", "HasDSP", "true", "Enable DSP instrutions">;
119def HasDSP : Predicate<"Subtarget->hasDSP()">,
120             AssemblerPredicate<(all_of FeatureDSP),
121             "Enable DSP instrutions">;
122
123def HasDSP1E2
124    : SubtargetFeature<"dsp1e2", "HasDSP1E2", "true", "Support CSKY dsp1e2 instructions">;
125def iHasDSP1E2 : Predicate<"Subtarget->hasDSP1E2()">,
126             AssemblerPredicate<(all_of HasDSP1E2),
127             "Support CSKY dsp1e2 instructions">;
128
129def HasDSPE60
130    : SubtargetFeature<"dspe60", "HasDSPE60", "true", "Support CSKY dspe60 instructions">;
131def iHasDSPE60 : Predicate<"Subtarget->hasDSPE60()">,
132             AssemblerPredicate<(all_of HasDSPE60),
133             "Support CSKY dspe60 instructions">;
134
135def FeatureDSPV2 : SubtargetFeature<"dspv2", "HasDSPV2", "true",
136                                    "Enable DSP V2.0 instrutions">;
137def HasDSPV2 : Predicate<"Subtarget->hasDSPV2()">,
138               AssemblerPredicate<(all_of FeatureDSPV2),
139               "Enable DSP V2.0 instrutions">;
140
141def FeatureDSP_Silan : SubtargetFeature<"dsp_silan", "HasDSP_Silan", "true",
142                                    "Enable DSP Silan instrutions">;
143def HasDSP_Silan : Predicate<"Subtarget->hasDSP_Silan()">,
144               AssemblerPredicate<(all_of FeatureDSP_Silan),
145               "Enable DSP Silan instrutions">;
146
147// Atomic Support
148def FeatureBTST16 : SubtargetFeature<"btst16", "HasBTST16", "true",
149                                     "Use the 16-bit btsti instruction">;
150def HasBTST16 : Predicate<"Subtarget->hasBTST16()">,
151                   AssemblerPredicate<(all_of FeatureBTST16),
152                   "Use the 16-bit btsti instruction">;
153
154// Atomic Support
155def FeatureExtendLrw : SubtargetFeature<"elrw", "HasExtendLrw", "true",
156                                        "Use the extend LRW instruction">;
157def HasExtendLrw : Predicate<"Subtarget->hasExtendLrw()">,
158                   AssemblerPredicate<(all_of FeatureExtendLrw),
159                   "Use the extend LRW instruction">;
160
161def FeatureTrust : SubtargetFeature<"trust", "HasTrust", "true",
162                                    "Enable trust instructions">;
163def HasTrust : Predicate<"Subtarget->hasTrust()">,
164               AssemblerPredicate<(all_of FeatureTrust),
165               "Enable trust instructions">;
166
167def FeatureJAVA
168    : SubtargetFeature<"java", "HasJAVA", "true", "Enable java instructions">;
169def HasJAVA : Predicate<"Subtarget->hasJAVA()">,
170              AssemblerPredicate<(all_of FeatureJAVA),
171              "Enable java instructions">;
172
173def FeatureCache
174    : SubtargetFeature<"cache", "HasCache", "true", "Enable cache">;
175def HasCache : Predicate<"Subtarget->hasCache()">,
176              AssemblerPredicate<(all_of FeatureCache),
177              "Enable cache">;
178
179def FeatureNVIC
180    : SubtargetFeature<"nvic", "HasNVIC", "true", "Enable NVIC">;
181def HasNVIC : Predicate<"Subtarget->hasNVIC()">,
182              AssemblerPredicate<(all_of FeatureNVIC),
183              "Enable NVIC">;
184
185def FeatureDoloop : SubtargetFeature<"doloop", "HasDoloop", "true",
186                                     "Enable doloop instructions">;
187def HasDoloop : Predicate<"Subtarget->hasDoloop()">,
188                AssemblerPredicate<(all_of FeatureDoloop),
189                "Enable doloop instructions">;
190
191// Other features than instructions
192def FeatureHighreg : SubtargetFeature<"high-registers", "HasHighRegisters",
193                                      "true", "Enable r16-r31 registers">;
194def HasHighRegisters : Predicate<"Subtarget->hasHighRegisters()">,
195                       AssemblerPredicate<(all_of FeatureHighreg),
196                       "Enable r16-r31 registers">;
197
198def FeatureSmart : SubtargetFeature<"smart", "SmartMode", "true",
199                                    "Let CPU work in Smart Mode">;
200def SmartMode : Predicate<"Subtarget->smartMode()">,
201                AssemblerPredicate<(all_of FeatureSmart),
202                "Let CPU work in Smart Mode">;
203
204def FeatureVDSPV2 : SubtargetFeature<"vdspv2", "HasVDSPV2", "true",
205                                     "Enable vdsp-v2 instructions">;
206def HasVDSPV2 : Predicate<"Subtarget->hasVDSPV2()">,
207                AssemblerPredicate<(all_of FeatureVDSPV2),
208                "Enable vdsp-v2 instructions">;
209
210def HasVDSPV2_FLOAT : Predicate<"Subtarget->hasVDSPV2_FLOAT()">;
211def HasVDSPV2_HALF: Predicate<"Subtarget->hasVDSPV2_HALF()">;
212
213def HasVDSP2E3
214    : SubtargetFeature<"vdsp2e3", "HasVDSP2E3", "true", "Support CSKY vdsp2e3 instructions">;
215def iHasVDSP2E3 : Predicate<"Subtarget->hasVDSP2E3()">,
216             AssemblerPredicate<(all_of HasVDSP2E3),
217             "Support CSKY vdsp2e3 instructions">;
218
219def HasVDSP2E60F
220    : SubtargetFeature<"vdsp2e60f", "HasVDSP2E60F", "true", "Support CSKY vdsp2e60f instructions">;
221def iHasVDSP2E60F : Predicate<"Subtarget->hasVDSP2E60F()">,
222             AssemblerPredicate<(all_of HasVDSP2E60F),
223             "Support CSKY vdsp2e60f instructions">;
224
225def FeatureHardTP : SubtargetFeature<"hard-tp", "ReadTPHard", "true",
226                                     "Enable TLS Pointer register">;
227def ReadTPHard : Predicate<"Subtarget->readTPHard()">,
228                 AssemblerPredicate<(all_of FeatureHardTP),
229                 "Enable TLS Pointer register">;
230
231def FeatureSoftTP : SubtargetFeature<"soft-tp", "ReadTPHard", "false",
232                                     "Disable TLS Pointer register">;
233
234def FeatureIstack : SubtargetFeature<"istack", "EnableInterruptAttribute",
235                                     "true", "Enable interrput attribute">;
236def EnableInterruptAttribute
237    : Predicate<"Subtarget->enableInterruptAttribute()">,
238      AssemblerPredicate<(all_of FeatureIstack),
239      "Enable interrput attribute">;
240
241def FeatureConstPool : SubtargetFeature<"constpool", "DumpConstPool", "true",
242                                        "Dump the constant pool by compiler">;
243def DumpConstPool : Predicate<"Subtarget->dumpConstPool()">,
244                    AssemblerPredicate<(all_of FeatureConstPool),
245                    "Dump the constant pool by compiler">;
246
247def FeatureStackSize : SubtargetFeature<"stack-size", "EnableStackSize", "true",
248                                        "Output stack size information">;
249def EnableStackSize : Predicate<"Subtarget->enableStackSize()">,
250                      AssemblerPredicate<(all_of FeatureStackSize),
251                      "Output stack size information">;
252
253def FeatureCCRT
254    : SubtargetFeature<"ccrt", "UseCCRT", "true", "Use CSKY compiler runtime">;
255def UseCCRT : Predicate<"Subtarget->useCCRT()">,
256              AssemblerPredicate<(all_of FeatureCCRT),
257              "Use CSKY compiler runtime">;
258
259def FeatureVDSPV1_128 : SubtargetFeature<"vdspv1", "HasVDSPV1_128", "true",
260                                         "Enable 128bit vdsp-v1 instructions">;
261def HasVDSPV1_128 : Predicate<"Subtarget->hasVDSPV1_128()">,
262                    AssemblerPredicate<(all_of FeatureVDSPV1_128),
263                    "Enable 128bit vdsp-v1 instructions">;
264
265def HasE1
266    : SubtargetFeature<"e1", "HasE1", "true", "Support CSKY e1 instructions",
267                       [FeatureExtendLrw]>;
268def iHasE1 : Predicate<"Subtarget->hasE1()">,
269             AssemblerPredicate<(all_of HasE1),
270             "Support CSKY e1 instructions">;
271
272def HasE2
273    : SubtargetFeature<"e2", "HasE2", "true", "Support CSKY e2 instructions",
274                       [HasE1]>;
275def iHasE2 : Predicate<"Subtarget->hasE2()">,
276             AssemblerPredicate<(all_of HasE2),
277             "Support CSKY e2 instructions">;
278
279def Has2E3 : SubtargetFeature<"2e3", "Has2E3", "true",
280                              "Support CSKY 2e3 instructions", [HasE2]>;
281def iHas2E3 : Predicate<"Subtarget->has2E3()">,
282              AssemblerPredicate<(all_of Has2E3),
283              "Support CSKY 2e3 instructions">;
284
285def HasMP : SubtargetFeature<"mp", "HasMP", "true",
286                                "Support CSKY mp instructions", [Has2E3]>;
287def iHasMP : Predicate<"Subtarget->hasMP()">,
288                AssemblerPredicate<(all_of HasMP),
289                "Support CSKY mp instructions">;
290
291def Has3E3r1 : SubtargetFeature<"3e3r1", "Has3E3r1", "true",
292                                "Support CSKY 3e3r1 instructions">;
293def iHas3E3r1 : Predicate<"Subtarget->has3E3r1()">,
294                AssemblerPredicate<(all_of Has3E3r1),
295                "Support CSKY 3e3r1 instructions">;
296
297def Has3r1E3r2 : SubtargetFeature<"3e3r2", "Has3r1E3r2", "true",
298                                  "Support CSKY 3e3r2 instructions",
299                                  [Has3E3r1, FeatureDoloop]>;
300def iHas3r1E3r2 : Predicate<"Subtarget->has3r1E3r2()">,
301                  AssemblerPredicate<(all_of Has3r1E3r2),
302                  "Support CSKY 3e3r2 instructions">;
303
304def Has3r2E3r3
305    : SubtargetFeature<"3e3r3", "Has3r2E3r3", "true",
306                       "Support CSKY 3e3r3 instructions", [FeatureDoloop]>;
307def iHas3r2E3r3 : Predicate<"Subtarget->has3r2E3r3()">,
308                  AssemblerPredicate<(all_of Has3r2E3r3),
309                  "Support CSKY 3e3r3 instructions">;
310
311def Has3E7 : SubtargetFeature<"3e7", "Has3E7", "true",
312                              "Support CSKY 3e7 instructions", [Has2E3]>;
313def iHas3E7 : Predicate<"Subtarget->has3E7()">,
314              AssemblerPredicate<(all_of Has3E7),
315              "Support CSKY 3e7 instructions">;
316
317def HasMP1E2 : SubtargetFeature<"mp1e2", "HasMP1E2", "true",
318                                "Support CSKY mp1e2 instructions", [Has3E7]>;
319def iHasMP1E2 : Predicate<"Subtarget->hasMP1E2()">,
320                AssemblerPredicate<(all_of HasMP1E2),
321                "Support CSKY mp1e2 instructions">;
322
323def Has7E10 : SubtargetFeature<"7e10", "Has7E10", "true",
324                               "Support CSKY 7e10 instructions", [Has3E7]>;
325def iHas7E10 : Predicate<"Subtarget->has7E10()">,
326               AssemblerPredicate<(all_of Has7E10),
327               "Support CSKY 7e10 instructions">;
328
329def Has10E60 : SubtargetFeature<"10e60", "Has10E60", "true",
330                               "Support CSKY 10e60 instructions", [Has7E10]>;
331def iHas10E60 : Predicate<"Subtarget->has10E60()">,
332               AssemblerPredicate<(all_of Has10E60),
333               "Support CSKY 10e60 instructions">;
334
335//===----------------------------------------------------------------------===//
336// CSKY Processor subtarget features.
337//===----------------------------------------------------------------------===//
338
339def ProcCK801 : SubtargetFeature<"ck801", "CSKYProcFamily", "CK801",
340                                 "CSKY ck801 processors", []>;
341def isCK801 : Predicate<"Subtarget->isCK801()">,
342              AssemblerPredicate<(all_of ProcCK801)>;
343def ProcCK802 : SubtargetFeature<"ck802", "CSKYProcFamily", "CK802",
344                                 "CSKY ck802 processors", []>;
345def ProcCK803 : SubtargetFeature<"ck803", "CSKYProcFamily", "CK803",
346                                 "CSKY ck803 processors", []>;
347def ProcCK803S : SubtargetFeature<"ck803s", "CSKYProcFamily", "CK803S",
348                                 "CSKY ck803s processors", []>;
349def ProcCK804 : SubtargetFeature<"ck804", "CSKYProcFamily", "CK804",
350                                 "CSKY ck804 processors", []>;
351def ProcCK805 : SubtargetFeature<"ck805", "CSKYProcFamily", "CK805",
352                                 "CSKY ck805 processors", []>;
353def ProcCK807 : SubtargetFeature<"ck807", "CSKYProcFamily", "CK807",
354                                 "CSKY ck807 processors", []>;
355def ProcCK810 : SubtargetFeature<"ck810", "CSKYProcFamily", "CK810",
356                                 "CSKY ck810 processors", []>;
357def ProcCK810V : SubtargetFeature<"ck810v", "CSKYProcFamily", "CK810V",
358                                 "CSKY ck810v processors", []>;
359def ProcCK860 : SubtargetFeature<"ck860", "CSKYProcFamily", "CK860",
360                                 "CSKY ck860 processors", []>;
361def ProcCK860V : SubtargetFeature<"ck860v", "CSKYProcFamily", "CK860V",
362                                 "CSKY ck860v processors", []>;
363
364//===----------------------------------------------------------------------===//
365// Registers, calling conventions, instruction descriptions.
366//===----------------------------------------------------------------------===//
367
368include "CSKYRegisterInfo.td"
369include "CSKYCallingConv.td"
370include "CSKYInstrInfo.td"
371
372//===----------------------------------------------------------------------===//
373// CSKY processors supported.
374//===----------------------------------------------------------------------===//
375
376def : ProcessorModel<"generic", NoSchedModel, []>;
377
378// CK801 series
379class CK801<string n, SchedMachineModel m, list<SubtargetFeature> f,
380            list<SubtargetFeature> tunef = []>
381    : ProcessorModel<n, m, !listconcat(f, [HasE1, FeatureTrust, FeatureBTST16, ProcCK801]), !listconcat(tunef, [])>;
382
383def : CK801<"ck801", NoSchedModel, []>;
384def : CK801<"ck801t", NoSchedModel, []>;
385def : CK801<"e801", NoSchedModel, []>;
386
387// CK802 series
388class CK802<string n, SchedMachineModel m, list<SubtargetFeature> f,
389            list<SubtargetFeature> tunef = []>
390    : ProcessorModel<n, m, !listconcat(f, [HasE2, FeatureTrust, FeatureBTST16, FeatureNVIC, ProcCK802]), !listconcat(tunef, [])>;
391
392def : CK802<"ck802", NoSchedModel, []>;
393def : CK802<"ck802t", NoSchedModel, []>;
394def : CK802<"ck802j", NoSchedModel, [FeatureJAVA]>;
395def : CK802<"e802", NoSchedModel, []>;
396def : CK802<"e802t", NoSchedModel, []>;
397def : CK802<"s802", NoSchedModel, []>;
398def : CK802<"s802t", NoSchedModel, []>;
399
400// CK803 series
401class CK803<string n, SchedMachineModel m, list<SubtargetFeature> f,
402            list<SubtargetFeature> tunef = []>
403    : ProcessorModel<n, m, !listconcat(f, [Has2E3, HasMP, FeatureTrust, FeatureBTST16, FeatureNVIC, FeatureHWDiv, ProcCK803]), !listconcat(tunef, [])>;
404
405def : CK803<"ck803", NoSchedModel, []>;
406def : CK803<"ck803h", NoSchedModel, []>;
407def : CK803<"ck803t", NoSchedModel, []>;
408def : CK803<"ck803ht", NoSchedModel, []>;
409def : CK803<"ck803f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
410def : CK803<"ck803fh", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
411def : CK803<"ck803e", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>;
412def : CK803<"ck803eh", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>;
413def : CK803<"ck803et", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>;
414def : CK803<"ck803eht", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>;
415def : CK803<"ck803ef", NoSchedModel,
416            [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
417def : CK803<"ck803efh", NoSchedModel,
418            [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
419def : CK803<"ck803ft", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
420def : CK803<"ck803eft", NoSchedModel,
421            [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
422def : CK803<"ck803efht", NoSchedModel,
423            [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
424def : CK803<"ck803r1", NoSchedModel, [Has3E3r1, Has3r2E3r3, FeatureDSPV2]>;
425def : CK803<"ck803hr1", NoSchedModel, [Has3E3r1, Has3r2E3r3, FeatureDSPV2]>;
426def : CK803<"ck803tr1", NoSchedModel, [Has3E3r1, Has3r2E3r3, FeatureDSPV2]>;
427def : CK803<"ck803htr1", NoSchedModel, [Has3E3r1, Has3r2E3r3, FeatureDSPV2]>;
428def : CK803<"ck803fr1", NoSchedModel,
429            [Has3E3r1, Has3r2E3r3, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureDSPV2]>;
430def : CK803<"ck803fhr1", NoSchedModel,
431            [Has3E3r1, Has3r2E3r3, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureDSPV2]>;
432def : CK803<"ck803er1", NoSchedModel,
433            [Has3E3r1, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;
434def : CK803<"ck803etr1", NoSchedModel,
435            [Has3E3r1, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;
436def : CK803<"ck803ehr1", NoSchedModel,
437            [Has3E3r1, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;
438def : CK803<"ck803ehtr1", NoSchedModel,
439            [Has3E3r1, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;
440def : CK803<"ck803efr1", NoSchedModel,
441            [Has3E3r1, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
442def : CK803<"ck803efhr1", NoSchedModel,
443            [Has3E3r1, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
444def : CK803<"ck803ftr1", NoSchedModel, [Has3E3r1, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureDSPV2]>;
445def : CK803<"ck803eftr1", NoSchedModel,
446            [Has3E3r1, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
447def : CK803<"ck803efhtr1", NoSchedModel,
448            [Has3E3r1, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
449def : CK803<"ck803r2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;
450def : CK803<"ck803hr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;
451def : CK803<"ck803tr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;
452def : CK803<"ck803htr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;
453def : CK803<"ck803fr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
454def : CK803<"ck803fhr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
455def : CK803<"ck803er2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;
456def : CK803<"ck803etr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;
457def : CK803<"ck803ehr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;
458def : CK803<"ck803ehtr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;
459def : CK803<"ck803efr2", NoSchedModel,
460            [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
461def : CK803<"ck803efhr2", NoSchedModel,
462            [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
463def : CK803<"ck803ftr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
464def : CK803<"ck803eftr2", NoSchedModel,
465            [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
466def : CK803<"ck803efhtr2", NoSchedModel,
467            [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
468def : CK803<"ck803r3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;
469def : CK803<"ck803hr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;
470def : CK803<"ck803tr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;
471def : CK803<"ck803htr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;
472def : CK803<"ck803fr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
473def : CK803<"ck803fhr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
474def : CK803<"ck803er3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;
475def : CK803<"ck803etr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;
476def : CK803<"ck803ehr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;
477def : CK803<"ck803ehtr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;
478def : CK803<"ck803efr3", NoSchedModel,
479            [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
480def : CK803<"ck803efhr3", NoSchedModel,
481            [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
482def : CK803<"ck803ftr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
483def : CK803<"ck803eftr3", NoSchedModel,
484            [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
485def : CK803<"ck803efhtr3", NoSchedModel,
486            [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
487def : CK803<"s803", NoSchedModel, [Has3r1E3r2, Has3r2E3r3]>;
488def : CK803<"s803t", NoSchedModel, [Has3r1E3r2, Has3r2E3r3]>;
489def : CK803<"e803", NoSchedModel, [Has3r1E3r2, Has3r2E3r3]>;
490def : CK803<"e803t", NoSchedModel, [Has3r1E3r2, Has3r2E3r3]>;
491
492// CK803S series
493class CK803S<string n, SchedMachineModel m, list<SubtargetFeature> f,
494list<SubtargetFeature> tunef = []> : CK803<n, m, !listconcat(f, [Has3E3r1, ProcCK803S]), tunef>;
495
496def : CK803S<"ck803s", NoSchedModel, []>;
497def : CK803S<"ck803sn", NoSchedModel, [FeatureDSP_Silan]>;
498def : CK803S<"ck803st", NoSchedModel, []>;
499def : CK803S<"ck803snt", NoSchedModel, [FeatureDSP_Silan]>;
500def : CK803S<"ck803sf", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
501def : CK803S<"ck803sfn", NoSchedModel, [FeatureFPUV2_SF, FeatureDSP_Silan, HasFLOATE1, HasFLOAT1E3]>;
502def : CK803S<"ck803se", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>;
503def : CK803S<"ck803sen", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSP_Silan]>;
504def : CK803S<"ck803sef", NoSchedModel,
505             [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
506def : CK803S<"ck803sefn", NoSchedModel,
507             [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, FeatureDSP_Silan,
508              HasFLOATE1, HasFLOAT1E3]>;
509def : CK803S<"ck803seft", NoSchedModel,
510             [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
511def : CK803S<"ck803sefnt", NoSchedModel,
512             [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, FeatureDSP_Silan,
513              HasFLOATE1, HasFLOAT1E3]>;
514
515// CK804 series
516class CK804<string n, SchedMachineModel m, list<SubtargetFeature> f,
517            list<SubtargetFeature> tunef = []>
518    : CK803<n, m, !listconcat(f, [Has3r1E3r2, Has3r2E3r3, ProcCK804]), !listconcat(tunef, [])>;
519
520def : CK804<"ck804", NoSchedModel, []>;
521def : CK804<"ck804h", NoSchedModel, []>;
522def : CK804<"ck804t", NoSchedModel, []>;
523def : CK804<"ck804ht", NoSchedModel, []>;
524def : CK804<"ck804f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
525def : CK804<"ck804fh", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
526def : CK804<"ck804e", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>;
527def : CK804<"ck804et", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>;
528def : CK804<"ck804eh", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>;
529def : CK804<"ck804eht", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>;
530def : CK804<"ck804ef", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
531def : CK804<"ck804efh", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
532def : CK804<"ck804ft", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
533def : CK804<"ck804eft", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
534def : CK804<"ck804efht", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
535def : CK804<"e804d", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>;
536def : CK804<"e804dt", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>;
537def : CK804<"e804f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
538def : CK804<"e804ft", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
539def : CK804<"e804df", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
540def : CK804<"e804dft", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;
541
542// CK805 series
543class CK805<string n, SchedMachineModel m, list<SubtargetFeature> f,
544            list<SubtargetFeature> tunef = []>
545    : CK803<n, m, !listconcat(f, [FeatureHighreg, FeatureVDSPV2, HasVDSP2E3, Has3r1E3r2, Has3r2E3r3, ProcCK805]),
546            !listconcat(tunef, [])>;
547
548def : CK805<"ck805", NoSchedModel, []>;
549def : CK805<"i805", NoSchedModel, []>;
550def : CK805<"ck805t", NoSchedModel, []>;
551def : CK805<"i805f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
552def : CK805<"ck805f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
553def : CK805<"ck805e", NoSchedModel, [FeatureDSPV2]>;
554def : CK805<"ck805ef", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
555def : CK805<"ck805et", NoSchedModel, [FeatureDSPV2]>;
556def : CK805<"ck805ft", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
557def : CK805<"ck805eft", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;
558
559// CK807 series
560class CK807<string n, SchedMachineModel m, list<SubtargetFeature> f,
561            list<SubtargetFeature> tunef = []>
562    : ProcessorModel<n, m, !listconcat(f,
563    [ Has3E7, HasMP, HasMP1E2, FeatureTrust, FeatureHWDiv, FeatureDSP, HasDSP1E2, HasDSPE60,
564      FeatureHighreg, FeatureHardTP, FeatureNVIC, FeatureCache, ProcCK807]), !listconcat(tunef, [])>;
565
566def : CK807<"ck807", NoSchedModel, []>;
567def : CK807<"c807", NoSchedModel, []>;
568def : CK807<"r807", NoSchedModel, []>;
569def : CK807<"ck807e", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>;
570def : CK807<"ck807f", NoSchedModel,
571            [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
572             HasFLOATE1, HasFLOAT1E2, HasFLOAT1E3, HasFLOAT3E4]>;
573def : CK807<"c807f", NoSchedModel,
574            [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
575             HasFLOATE1, HasFLOAT1E2, HasFLOAT1E3, HasFLOAT3E4]>;
576def : CK807<"r807f", NoSchedModel,
577            [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
578             HasFLOATE1, HasFLOAT1E2, HasFLOAT1E3, HasFLOAT3E4]>;
579def : CK807<"ck807ef", NoSchedModel, [
580  FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, FeatureFPUV2_DF,
581  FeatureFdivdu, HasFLOATE1, HasFLOAT1E2, HasFLOAT1E3, HasFLOAT3E4]>;
582
583// CK810 series
584class CK810<string n, SchedMachineModel m, list<SubtargetFeature> f,
585            list<SubtargetFeature> tunef = []>
586    : ProcessorModel<n, m, !listconcat(f,
587    [ Has7E10, HasMP, HasMP1E2, FeatureTrust, FeatureHWDiv, FeatureDSP, HasDSP1E2, HasDSPE60,
588      FeatureHighreg, FeatureHardTP, FeatureNVIC, FeatureCache, ProcCK810]), !listconcat(tunef, [])>;
589
590def : CK810<"ck810", NoSchedModel, []>;
591def : CK810<"ck810e", NoSchedModel, []>;
592def : CK810<"ck810t", NoSchedModel, []>;
593def : CK810<"ck810et", NoSchedModel, []>;
594def : CK810<"c810", NoSchedModel,
595            [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
596             HasFLOATE1, HasFLOAT1E2]>;
597def : CK810<"ck810f", NoSchedModel,
598            [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
599             HasFLOATE1, HasFLOAT1E2]>;
600def : CK810<"ck810ef", NoSchedModel,
601            [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
602             HasFLOATE1, HasFLOAT1E2]>;
603def : CK810<"ck810ft", NoSchedModel,
604            [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
605             HasFLOATE1, HasFLOAT1E2]>;
606def : CK810<"ck810eft", NoSchedModel,
607            [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
608             HasFLOATE1, HasFLOAT1E2]>;
609def : CK810<"c810t", NoSchedModel,
610            [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
611             HasFLOATE1, HasFLOAT1E2]>;
612
613class CK810V<string n, SchedMachineModel m, list<SubtargetFeature> f,
614             list<SubtargetFeature> tunef = []>
615    : CK810<n, m, !listconcat(f, [FeatureVDSPV1_128, ProcCK810V]), !listconcat(tunef, [])>;
616
617def : CK810V<"ck810v", NoSchedModel, []>;
618def : CK810V<"ck810ev", NoSchedModel, []>;
619def : CK810V<"ck810tv", NoSchedModel, []>;
620def : CK810V<"ck810etv", NoSchedModel, []>;
621def : CK810V<"ck810fv", NoSchedModel, [
622  FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
623  HasFLOATE1, HasFLOAT1E2
624]>;
625def : CK810V<"ck810efv", NoSchedModel, [
626  FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
627  HasFLOATE1, HasFLOAT1E2
628]>;
629def : CK810V<"c810v", NoSchedModel, [
630  FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
631  HasFLOATE1, HasFLOAT1E2
632]>;
633def : CK810V<"ck810ftv", NoSchedModel, [
634  FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
635  HasFLOATE1, HasFLOAT1E2
636]>;
637def : CK810V<"ck810eftv", NoSchedModel, [
638  FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
639  HasFLOATE1, HasFLOAT1E2
640]>;
641def : CK810V<"c810tv", NoSchedModel, [
642  FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,
643  HasFLOATE1, HasFLOAT1E2
644]>;
645
646// CK860 series
647class CK860<string n, SchedMachineModel m, list<SubtargetFeature> f,
648            list<SubtargetFeature> tunef = []>
649    : ProcessorModel<n, m, !listconcat(f,
650    [ Has10E60, HasMP, HasMP1E2, Has3r1E3r2, Has3r2E3r3, FeatureTrust, FeatureBTST16, FeatureHWDiv, HasDSPE60,
651      FeatureHighreg, FeatureHardTP, FeatureNVIC, FeatureCache, ProcCK860]), !listconcat(tunef, [])>;
652
653class CK860V<string n, SchedMachineModel m, list<SubtargetFeature> f,
654             list<SubtargetFeature> tunef = []>
655    : CK860<n, m, !listconcat(f, [FeatureVDSPV2, HasVDSP2E60F, ProcCK860V]), !listconcat(tunef, [])>;
656
657def : CK860<"ck860", NoSchedModel, []>;
658def : CK860<"ck860f", NoSchedModel,
659            [FeatureFPUV3_HI, FeatureFPUV3_HF, FeatureFPUV3_SF, FeatureFPUV3_DF, HasFLOAT7E60]>;
660def : CK860<"c860", NoSchedModel,
661            [FeatureFPUV3_HI, FeatureFPUV3_HF, FeatureFPUV3_SF, FeatureFPUV3_DF, HasFLOAT7E60]>;
662def : CK860V<"c860v", NoSchedModel,
663             [FeatureFPUV3_HI, FeatureFPUV3_HF, FeatureFPUV3_SF, FeatureFPUV3_DF, HasFLOAT7E60]>;
664def : CK860V<"ck860v", NoSchedModel, []>;
665def : CK860V<"ck860fv", NoSchedModel,
666             [FeatureFPUV3_HI, FeatureFPUV3_HF, FeatureFPUV3_SF, FeatureFPUV3_DF, HasFLOAT7E60]>;
667
668//===----------------------------------------------------------------------===//
669// Define the CSKY target.
670//===----------------------------------------------------------------------===//
671
672def CSKYInstrInfo : InstrInfo;
673
674
675def CSKYAsmParser : AsmParser {
676  let ShouldEmitMatchRegisterAltName = 1;
677  let AllowDuplicateRegisterNames = 1;
678}
679
680def CSKYAsmWriter : AsmWriter {
681  int PassSubtarget = 1;
682}
683
684def CSKY : Target {
685  let InstructionSet = CSKYInstrInfo;
686  let AssemblyParsers = [CSKYAsmParser];
687  let AssemblyWriters = [CSKYAsmWriter];
688  let AllowRegisterRenaming = 1;
689}
690