1//==- HexagonInstrFormats.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 V4 instruction classes in TableGen format.
11//
12//===----------------------------------------------------------------------===//
13
14//----------------------------------------------------------------------------//
15//                         Hexagon Intruction Flags +
16//
17//                        *** Must match BaseInfo.h ***
18//----------------------------------------------------------------------------//
19
20def TypeMEMOP  : IType<9>;
21def TypeNV     : IType<10>;
22def TypePREFIX : IType<30>;
23
24//----------------------------------------------------------------------------//
25//                         Intruction Classes Definitions +
26//----------------------------------------------------------------------------//
27
28//
29// NV type instructions.
30//
31class NVInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
32             string cstr = "">
33  : InstHexagon<outs, ins, asmstr, pattern, cstr, NV_V4, TypeNV>;
34
35class NVInst_V4<dag outs, dag ins, string asmstr, list<dag> pattern = [],
36                string cstr = "">
37  : NVInst<outs, ins, asmstr, pattern, cstr>;
38
39// Definition of Post increment new value store.
40class NVInstPost_V4<dag outs, dag ins, string asmstr, list<dag> pattern = [],
41               string cstr = "">
42  : NVInst<outs, ins, asmstr, pattern, cstr>;
43
44// Post increment ST Instruction.
45let mayStore = 1 in
46class NVInstPI_V4<dag outs, dag ins, string asmstr, list<dag> pattern = [],
47               string cstr = "">
48  : NVInst<outs, ins, asmstr, pattern, cstr>;
49
50// New-value conditional branch.
51class NCJInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
52              string cstr = "">
53  : NVInst<outs, ins, asmstr, pattern, cstr>;
54
55let mayLoad = 1, mayStore = 1 in
56class MEMInst<dag outs, dag ins, string asmstr, list<dag> pattern = [],
57              string cstr = "">
58  : InstHexagon<outs, ins, asmstr, pattern, cstr, MEM_V4, TypeMEMOP>;
59
60class MEMInst_V4<dag outs, dag ins, string asmstr, list<dag> pattern = [],
61                 string cstr = "">
62  : MEMInst<outs, ins, asmstr, pattern, cstr>;
63
64let isCodeGenOnly = 1 in
65class EXTENDERInst<dag outs, dag ins, string asmstr, list<dag> pattern = []>
66  : InstHexagon<outs, ins, asmstr, pattern, "", PREFIX, TypePREFIX>;
67