131d157ae1ac2cd9c787dc3c1d28e64c682803844Jia Liu//===-- SparcSubtarget.cpp - SPARC Subtarget Information ------------------===//
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 implements the SPARC specific subclass of TargetSubtargetInfo.
110d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner//
120d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner//===----------------------------------------------------------------------===//
130d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner
147c90f73a1b06040d971a3dd95a491031ae6238d5Chris Lattner#include "SparcSubtarget.h"
15ffc0e73046f737d75e0a62b3a83ef19bcef111e3Evan Cheng#include "Sparc.h"
163e74d6fdd248e20a280f1dff3da9a6c689c2c4c3Evan Cheng#include "llvm/Support/TargetRegistry.h"
1794214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng
1894214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng#define GET_SUBTARGETINFO_TARGET_DESC
19ebdeeab812beec0385b445f3d4c41a114e0d972fEvan Cheng#define GET_SUBTARGETINFO_CTOR
20385e930d55f3ecd3c9538823dfa5896a12461845Evan Cheng#include "SparcGenSubtargetInfo.inc"
2194214703d97d8d9dfca88174ffc7e94820a85e62Evan Cheng
220d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattnerusing namespace llvm;
230d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner
242d24e2a396a1d211baaeedf32148a3b657240170David Blaikievoid SparcSubtarget::anchor() { }
252d24e2a396a1d211baaeedf32148a3b657240170David Blaikie
26276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan ChengSparcSubtarget::SparcSubtarget(const std::string &TT, const std::string &CPU,
27276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng                               const std::string &FS,  bool is64Bit) :
280ddff1b5359433faf2eb1c4ff5320ddcbd42f52fEvan Cheng  SparcGenSubtargetInfo(TT, CPU, FS),
2987c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner  IsV9(false),
3087c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner  V8DeprecatedInsts(false),
3187c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner  IsVIS(false),
3287c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner  Is64Bit(is64Bit) {
33184cc4ac60dc853fac3baa5e96d5f662d311b2fbChris Lattner
340d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner  // Determine default and user specified characteristics
35276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng  std::string CPUName = CPU;
36276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng  if (CPUName.empty()) {
37276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng    if (is64Bit)
38276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng      CPUName = "v9";
39276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng    else
40276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng      CPUName = "v8";
4187c06d617917f4a388fbe9db81198e13cde3e431Chris Lattner  }
42276365dd4bc0c2160f91fd8062ae1fc90c86c324Evan Cheng  IsV9 = CPUName == "v9";
430d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner
440d170a7969e7e36ad00afe596f2937f0c74d2b49Chris Lattner  // Parse features string.
450ddff1b5359433faf2eb1c4ff5320ddcbd42f52fEvan Cheng  ParseSubtargetFeatures(CPUName, FS);
46d74ea2bbd8bb630331f35ead42d385249bd42af8Chris Lattner}
47