SparcSubtarget.h revision 2b9355f2d9888d6a011353610b9ca24818de59a2
165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn//===-- SparcSubtarget.h - Define Subtarget for the SPARC -------*- C++ -*-===// 265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// 365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// The LLVM Compiler Infrastructure 465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// 565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// This file is distributed under the University of Illinois Open Source 665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// License. See LICENSE.TXT for details. 765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// 865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn//===----------------------------------------------------------------------===// 965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// 1065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// This file declares the SPARC specific subclass of TargetSubtargetInfo. 1165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// 1265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn//===----------------------------------------------------------------------===// 1365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 1465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#ifndef SPARC_SUBTARGET_H 1565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define SPARC_SUBTARGET_H 1665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 1765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "llvm/Target/TargetSubtargetInfo.h" 1865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include <string> 1965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define GET_SUBTARGETINFO_HEADER 2165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "SparcGenSubtargetInfo.inc" 2265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennnamespace llvm { 2465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennclass StringRef; 2565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennclass SparcSubtarget : public SparcGenSubtargetInfo { 2765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn virtual void anchor(); 2865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool IsV9; 2965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool V8DeprecatedInsts; 3065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool IsVIS; 3165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool Is64Bit; 3265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 3365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennpublic: 3465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn SparcSubtarget(const std::string &TT, const std::string &CPU, 3565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn const std::string &FS, bool is64bit); 3665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 3765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool isV9() const { return IsV9; } 3865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool isVIS() const { return IsVIS; } 3965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool useDeprecatedV8Instructions() const { return V8DeprecatedInsts; } 4065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 4165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /// ParseSubtargetFeatures - Parses features string setting specified 4265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /// subtarget options. Definition of function is auto generated by tblgen. 4365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn void ParseSubtargetFeatures(StringRef CPU, StringRef FS); 4465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 4565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn bool is64Bit() const { return Is64Bit; } 4665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn std::string getDataLayout() const { 4765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn const char *p; 4865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (is64Bit()) { 4965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn p = "E-p:64:64:64-i64:64:64-f64:64:64-f128:128:128-n32:64"; 5065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } else { 5165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn p = "E-p:32:32:32-i64:64:64-f64:64:64-f128:64:64-n32"; 5265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 5365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return std::string(p); 5465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 5565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /// The 64-bit ABI uses biased stack and frame pointers, so the stack frame 5765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /// of the current function is the area from [%sp+BIAS] to [%fp+BIAS]. 5865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn int64_t getStackPointerBias() const { 5965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return is64Bit() ? 2047 : 0; 6065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 6165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn}; 62 63} // end namespace llvm 64 65#endif 66