131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- HexagonSubtarget.h - Define Subtarget for the Hexagon ---*- C++ -*-===// 2b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 3b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// The LLVM Compiler Infrastructure 4b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 5b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// This file is distributed under the University of Illinois Open Source 6b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// License. See LICENSE.TXT for details. 7b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 8b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===// 9b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 10b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// This file declares the Hexagon specific subclass of TargetSubtarget. 11b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 12b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===// 13b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 14b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#ifndef Hexagon_SUBTARGET_H 15b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_SUBTARGET_H 16b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 17b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/Target/TargetSubtargetInfo.h" 18b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "llvm/Target/TargetMachine.h" 19b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include <string> 20b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 21b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define GET_SUBTARGETINFO_HEADER 22b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "HexagonGenSubtargetInfo.inc" 23b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 24b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#define Hexagon_SMALL_DATA_THRESHOLD 8 257517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande#define Hexagon_SLOTS 4 26b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 27b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumnamespace llvm { 28b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 29b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumclass HexagonSubtarget : public HexagonGenSubtargetInfo { 30b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 31b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum bool UseMemOps; 327517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande bool ModeIEEERndNear; 33b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 34b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumpublic: 35b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum enum HexagonArchEnum { 367517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande V1, V2, V3, V4, V5 37b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum }; 38b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 39b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum HexagonArchEnum HexagonArchVersion; 40b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum std::string CPUString; 41b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum InstrItineraryData InstrItins; 42b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 43b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumpublic: 44b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS); 45b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 46b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum /// getInstrItins - Return the instruction itineraies based on subtarget 47b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum /// selection. 48b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum const InstrItineraryData &getInstrItineraryData() const { return InstrItins; } 49b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 50b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 51b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum /// ParseSubtargetFeatures - Parses features string setting specified 52b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum /// subtarget options. Definition of function is auto generated by tblgen. 53b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 54b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 55b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum bool hasV2TOps () const { return HexagonArchVersion >= V2; } 56b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum bool hasV2TOpsOnly () const { return HexagonArchVersion == V2; } 57b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum bool hasV3TOps () const { return HexagonArchVersion >= V3; } 58b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum bool hasV3TOpsOnly () const { return HexagonArchVersion == V3; } 59b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum bool hasV4TOps () const { return HexagonArchVersion >= V4; } 607517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande bool hasV4TOpsOnly () const { return HexagonArchVersion == V4; } 61b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum bool useMemOps () const { return HexagonArchVersion >= V4 && UseMemOps; } 627517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande bool hasV5TOps () const { return HexagonArchVersion >= V5; } 637517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande bool hasV5TOpsOnly () const { return HexagonArchVersion == V5; } 647517bbc91ae1c60d3c7df8b11642c7a5bb3d5a71Sirish Pande bool modeIEEERndNear () const { return ModeIEEERndNear; } 65b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 66b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum bool isSubtargetV2() const { return HexagonArchVersion == V2;} 67b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum const std::string &getCPUString () const { return CPUString; } 68b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 69b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum // Threshold for small data section 70b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum unsigned getSmallDataThreshold() const { 71b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum return Hexagon_SMALL_DATA_THRESHOLD; 72b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 73b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum const HexagonArchEnum &getHexagonArchVersion() const { 74b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum return HexagonArchVersion; 75b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 76b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum}; 77b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 78b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum} // end namespace llvm 79b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 80b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#endif 81