131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- SparcSubtarget.h - Define Subtarget for the SPARC -------*- C++ -*-===//
20d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner//
30d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner//                     The LLVM Compiler Infrastructure
40d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner//
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details.
70d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner//
80d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner//===----------------------------------------------------------------------===//
90d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner//
105b1b4489cf3a0f56f8be0673fc5cc380a32d277bEvan Cheng// This file declares the SPARC specific subclass of TargetSubtargetInfo.
110d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner//
120d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner//===----------------------------------------------------------------------===//
130d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner
140d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner#ifndef SPARC_SUBTARGET_H
150d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner#define SPARC_SUBTARGET_H
160d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner
175b1b4489cf3a0f56f8be0673fc5cc380a32d277bEvan Cheng#include "llvm/Target/TargetSubtargetInfo.h"
180d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner#include <string>
190d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner
2094214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng#define GET_SUBTARGETINFO_HEADER
21385e930d55f3ecd3c9538823dfa5896a12461845Evan Cheng#include "SparcGenSubtargetInfo.inc"
2294214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng
230d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattnernamespace llvm {
240ddff1b5359433faf2eb1c4ff5320ddcbd42f52fEvan Chengclass StringRef;
253be03406c9c3b2075d5ae416499af2f15f703d6fDaniel Dunbar
2694214703d97d8d9dfca88174ffc7e94820a85e62Evan Chengclass SparcSubtarget : public SparcGenSubtargetInfo {
272d24e2a396a1d211baaeedf32148a3b657240170David Blaikie  virtual void anchor();
284dcfaac2e390fdd0e8a562aeccb666178bd8664cChris Lattner  bool IsV9;
294dcfaac2e390fdd0e8a562aeccb666178bd8664cChris Lattner  bool V8DeprecatedInsts;
304dcfaac2e390fdd0e8a562aeccb666178bd8664cChris Lattner  bool IsVIS;
3187c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner  bool Is64Bit;
3287c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner
330d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattnerpublic:
34276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng  SparcSubtarget(const std::string &TT, const std::string &CPU,
35276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng                 const std::string &FS, bool is64bit);
360d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner
374dcfaac2e390fdd0e8a562aeccb666178bd8664cChris Lattner  bool isV9() const { return IsV9; }
384dcfaac2e390fdd0e8a562aeccb666178bd8664cChris Lattner  bool isVIS() const { return IsVIS; }
394dcfaac2e390fdd0e8a562aeccb666178bd8664cChris Lattner  bool useDeprecatedV8Instructions() const { return V8DeprecatedInsts; }
400d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner
410d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner  /// ParseSubtargetFeatures - Parses features string setting specified
420d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner  /// subtarget options.  Definition of function is auto generated by tblgen.
430ddff1b5359433faf2eb1c4ff5320ddcbd42f52fEvan Cheng  void ParseSubtargetFeatures(StringRef CPU, StringRef FS);
4487c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner
4587c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner  bool is64Bit() const { return Is64Bit; }
4687c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner  std::string getDataLayout() const {
4787c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner    const char *p;
4887c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner    if (is64Bit()) {
4987c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner      p = "E-p:64:64:64-i64:64:64-f64:64:64-f128:128:128-n32:64";
5087c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner    } else {
5187c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner      p = "E-p:32:32:32-i64:64:64-f64:64:64-f128:64:64-n32";
5287c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner    }
5387c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner    return std::string(p);
5487c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner  }
550d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner};
560d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner
570d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner} // end namespace llvm
580d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner
590d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner#endif
60