blob: 5d9d6d890d98bcde6b1b07da9b1d740d644f189e [file] [log] [blame]
Jia Liu31d157a2012-02-18 12:03:15 +00001//===-- HexagonSubtarget.h - Define Subtarget for the Hexagon ---*- C++ -*-===//
Tony Linthicumb4b54152011-12-12 21:14:40 +00002//
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 declares the Hexagon specific subclass of TargetSubtarget.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef Hexagon_SUBTARGET_H
15#define Hexagon_SUBTARGET_H
16
17#include "llvm/Target/TargetSubtargetInfo.h"
18#include "llvm/Target/TargetMachine.h"
19#include <string>
20
21#define GET_SUBTARGETINFO_HEADER
22#include "HexagonGenSubtargetInfo.inc"
23
24#define Hexagon_SMALL_DATA_THRESHOLD 8
Sirish Pande7517bbc2012-05-10 20:20:25 +000025#define Hexagon_SLOTS 4
Tony Linthicumb4b54152011-12-12 21:14:40 +000026
27namespace llvm {
28
29class HexagonSubtarget : public HexagonGenSubtargetInfo {
30
31 bool UseMemOps;
Sirish Pande7517bbc2012-05-10 20:20:25 +000032 bool ModeIEEERndNear;
Tony Linthicumb4b54152011-12-12 21:14:40 +000033
34public:
35 enum HexagonArchEnum {
Sirish Pande7517bbc2012-05-10 20:20:25 +000036 V1, V2, V3, V4, V5
Tony Linthicumb4b54152011-12-12 21:14:40 +000037 };
38
39 HexagonArchEnum HexagonArchVersion;
40 std::string CPUString;
41 InstrItineraryData InstrItins;
42
43public:
44 HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS);
45
46 /// getInstrItins - Return the instruction itineraies based on subtarget
47 /// selection.
48 const InstrItineraryData &getInstrItineraryData() const { return InstrItins; }
49
50
51 /// ParseSubtargetFeatures - Parses features string setting specified
52 /// subtarget options. Definition of function is auto generated by tblgen.
53 void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
54
55 bool hasV2TOps () const { return HexagonArchVersion >= V2; }
56 bool hasV2TOpsOnly () const { return HexagonArchVersion == V2; }
57 bool hasV3TOps () const { return HexagonArchVersion >= V3; }
58 bool hasV3TOpsOnly () const { return HexagonArchVersion == V3; }
59 bool hasV4TOps () const { return HexagonArchVersion >= V4; }
Sirish Pande7517bbc2012-05-10 20:20:25 +000060 bool hasV4TOpsOnly () const { return HexagonArchVersion == V4; }
Tony Linthicumb4b54152011-12-12 21:14:40 +000061 bool useMemOps () const { return HexagonArchVersion >= V4 && UseMemOps; }
Sirish Pande7517bbc2012-05-10 20:20:25 +000062 bool hasV5TOps () const { return HexagonArchVersion >= V5; }
63 bool hasV5TOpsOnly () const { return HexagonArchVersion == V5; }
64 bool modeIEEERndNear () const { return ModeIEEERndNear; }
Tony Linthicumb4b54152011-12-12 21:14:40 +000065
66 bool isSubtargetV2() const { return HexagonArchVersion == V2;}
67 const std::string &getCPUString () const { return CPUString; }
68
69 // Threshold for small data section
70 unsigned getSmallDataThreshold() const {
71 return Hexagon_SMALL_DATA_THRESHOLD;
72 }
73 const HexagonArchEnum &getHexagonArchVersion() const {
74 return HexagonArchVersion;
75 }
76};
77
78} // end namespace llvm
79
80#endif