TargetInfo.h revision f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===--- TargetInfo.h - Expose information about the target -----*- C++ -*-===// 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// The LLVM Compiler Infrastructure 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// This file is distributed under the University of Illinois Open Source 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// License. See LICENSE.TXT for details. 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// This file defines the TargetInfo and TargetInfoImpl interfaces. 115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#ifndef LLVM_CLANG_BASIC_TARGETINFO_H 155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define LLVM_CLANG_BASIC_TARGETINFO_H 165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 17b8128140956c6f8f0ab143818775a81f4b4aa477Chris Lattner#include "llvm/Support/DataTypes.h" 185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <vector> 195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <string> 205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 21525a05093a4816af961fe2bc6b8a81c17e2e26c2Chris Lattnernamespace llvm { struct fltSemantics; } 22525a05093a4816af961fe2bc6b8a81c17e2e26c2Chris Lattner 235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace clang { 245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass Diagnostic; 267a9d49fd2bfac00e905b361ba76d26ab5b6c3b09Ted Kremenekclass SourceManager; 277a9d49fd2bfac00e905b361ba76d26ab5b6c3b09Ted Kremenek 285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace Builtin { struct Info; } 295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 3042e6737f2efb113563140ad794c21c7709250402Chris Lattner/// TargetInfo - This class exposes information about the current target. 315f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/// 325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass TargetInfo { 330eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner std::string Triple; 340eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattnerprotected: 355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// These are all caches for target values. 36d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner unsigned WCharWidth, WCharAlign; 37bbced580c92afa09cd4423a9bdc90ff61cb1e79aTed Kremenek 38bbced580c92afa09cd4423a9bdc90ff61cb1e79aTed Kremenek //==----------------------------------------------------------------==/ 39bbced580c92afa09cd4423a9bdc90ff61cb1e79aTed Kremenek // TargetInfo Construction. 40bbced580c92afa09cd4423a9bdc90ff61cb1e79aTed Kremenek //==----------------------------------------------------------------==/ 410eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner TargetInfo(const std::string &T) : Triple(T) { 420eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner // Set defaults. 430eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner WCharWidth = WCharAlign = 32; 440eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner } 45390161183919169c493916efac4c1e1b3828fea6Chris Lattner 46bbced580c92afa09cd4423a9bdc90ff61cb1e79aTed Kremenekpublic: 4742e6737f2efb113563140ad794c21c7709250402Chris Lattner /// CreateTargetInfo - Return the target info object for the specified target 4842e6737f2efb113563140ad794c21c7709250402Chris Lattner /// triple. 4942e6737f2efb113563140ad794c21c7709250402Chris Lattner static TargetInfo* CreateTargetInfo(const std::string &Triple); 50bbced580c92afa09cd4423a9bdc90ff61cb1e79aTed Kremenek 510eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual ~TargetInfo(); 52fb79f7cc00f9c1e04f11ed636eefb36d246b0fb8Ted Kremenek 535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer ///===---- Target property query methods --------------------------------===// 545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 555f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// getTargetDefines - Appends the target-specific #define values for this 565f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// target set to the specified buffer. 570eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual void getTargetDefines(std::vector<char> &DefineBuffer) const = 0; 585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// isCharSigned - Return true if 'char' is 'signed char' or false if it is 605f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// treated as 'unsigned char'. This is implementation defined according to 615f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// C99 6.2.5p15. In our implementation, this is target-specific. 620eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner bool isCharSigned() const { 635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // FIXME: implement correctly. 645f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return true; 655f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 665f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 67f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner /// getPointerWidth - Return the width of pointers on this target, for the 68f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner /// specified address space. FIXME: implement correctly. 69f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner uint64_t getPointerWidth(unsigned AddrSpace) const { return 32; } 70f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner uint64_t getPointerAlign(unsigned AddrSpace) const { return 32; } 715f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 72d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner /// getBoolInfo - Return the size of '_Bool' and C++ 'bool' for this target, 735f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// in bits. 740eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner void getBoolInfo(uint64_t &Size, unsigned &Align) const { 75d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner Size = Align = 8; // FIXME: implement correctly: wrong for ppc32. 765f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 78d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner /// getCharInfo - Return the size of 'char', 'signed char' and 795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 'unsigned char' for this target, in bits. 800eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner void getCharInfo(uint64_t &Size, unsigned &Align) const { 81d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner Size = Align = 8; // FIXME: implement correctly. 825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 84d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner /// getShortInfo - Return the size of 'signed short' and 'unsigned short' for 855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// this target, in bits. 860eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner void getShortInfo(uint64_t &Size, unsigned &Align) const { 87d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner Size = Align = 16; // FIXME: implement correctly. 885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 895f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 90d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner /// getIntInfo - Return the size of 'signed int' and 'unsigned int' for this 915f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// target, in bits. 920eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner void getIntInfo(uint64_t &Size, unsigned &Align) const { 93d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner Size = Align = 32; // FIXME: implement correctly. 945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 955f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 96d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner /// getLongInfo - Return the size of 'signed long' and 'unsigned long' for 975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// this target, in bits. 980eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner void getLongInfo(uint64_t &Size, unsigned &Align) const { 99d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner Size = Align = 32; // FIXME: implement correctly: wrong for ppc64/x86-64 1005f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1015f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 102d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner /// getLongLongInfo - Return the size of 'signed long long' and 1035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// 'unsigned long long' for this target, in bits. 1040eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner void getLongLongInfo(uint64_t &Size, unsigned &Align) const { 105d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner Size = Align = 64; // FIXME: implement correctly. 1065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1075f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 108525a05093a4816af961fe2bc6b8a81c17e2e26c2Chris Lattner /// getFloatInfo - Characterize 'float' for this target. 109525a05093a4816af961fe2bc6b8a81c17e2e26c2Chris Lattner void getFloatInfo(uint64_t &Size, unsigned &Align, 1100eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner const llvm::fltSemantics *&Format) const; 111692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner 112525a05093a4816af961fe2bc6b8a81c17e2e26c2Chris Lattner /// getDoubleInfo - Characterize 'double' for this target. 113525a05093a4816af961fe2bc6b8a81c17e2e26c2Chris Lattner void getDoubleInfo(uint64_t &Size, unsigned &Align, 1140eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner const llvm::fltSemantics *&Format) const; 115692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner 116525a05093a4816af961fe2bc6b8a81c17e2e26c2Chris Lattner /// getLongDoubleInfo - Characterize 'long double' for this target. 117d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner void getLongDoubleInfo(uint64_t &Size, unsigned &Align, 1180eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner const llvm::fltSemantics *&Format) const; 119692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner 120f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner unsigned getWCharWidth() const { return WCharWidth; } 121f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner unsigned getWCharAlign() const { return WCharAlign; } 122f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner 1235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// getIntMaxTWidth - Return the size of intmax_t and uintmax_t for this 1245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// target, in bits. 1250eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner unsigned getIntMaxTWidth() const { 1265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // FIXME: implement correctly. 1275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return 64; 1285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// getTargetBuiltins - Return information about target-specific builtins for 1315f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// the current primary target, and info about which builtins are non-portable 1325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// across the current set of primary and secondary targets. 1330eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual void getTargetBuiltins(const Builtin::Info *&Records, 1340eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner unsigned &NumRecords) const = 0; 1355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 136d19144b244f86227fcc2b0da794929fe83968dd5Chris Lattner /// getVAListDeclaration - Return the declaration to use for 137d19144b244f86227fcc2b0da794929fe83968dd5Chris Lattner /// __builtin_va_list, which is target-specific. 1380eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual const char *getVAListDeclaration() const = 0; 139fb5e5ba3c7708f3aef4db0ed30e8470b3ed4206aAnders Carlsson 1403346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson /// isValidGCCRegisterName - Returns whether the passed in string 1413346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson /// is a valid register name according to GCC. This is used by Sema for 1423346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson /// inline asm statements. 1433346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson bool isValidGCCRegisterName(const char *Name) const; 144d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson 145d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson // getNormalizedGCCRegisterName - Returns the "normalized" GCC register name. 146d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson // For example, on x86 it will return "ax" when "eax" is passed in. 147d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson const char *getNormalizedGCCRegisterName(const char *Name) const; 148d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson 149d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson enum ConstraintInfo { 150d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson CI_None = 0x00, 151d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson CI_AllowsMemory = 0x01, 152d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson CI_AllowsRegister = 0x02, 153ef09d2b70a3b6f04c5d31c4c2bab2b7849f22561Anders Carlsson CI_ReadWrite = 0x04 154d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson }; 155d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson 156d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson // validateOutputConstraint, validateInputConstraint - Checks that 157d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson // a constraint is valid and provides information about it. 158d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson // FIXME: These should return a real error instead of just true/false. 159d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson bool validateOutputConstraint(const char *Name, ConstraintInfo &Info) const; 160d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson bool validateInputConstraint (const char *Name, unsigned NumOutputs, 161d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson ConstraintInfo &info) const; 162a5694b8b0096215137bf1c273764ec93ac4898fdLauro Ramos Venancio 1630eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual std::string convertConstraint(const char Constraint) const { 1640eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner return std::string(1, Constraint); 1650eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner } 166d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson 167d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson // Returns a string of target-specific clobbers, in LLVM format. 1680eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual const char *getClobbers() const = 0; 169d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson 170d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner ///===---- Some helper methods ------------------------------------------===// 171d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner 1720eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner unsigned getBoolWidth() const { 17319009e6fe7e0f51d2e49f4c94928a048c11c5281Chris Lattner uint64_t Size; unsigned Align; 17498be4943e8dc4f3905629a7102668960873cf863Chris Lattner getBoolInfo(Size, Align); 17519009e6fe7e0f51d2e49f4c94928a048c11c5281Chris Lattner return static_cast<unsigned>(Size); 17619009e6fe7e0f51d2e49f4c94928a048c11c5281Chris Lattner } 17719009e6fe7e0f51d2e49f4c94928a048c11c5281Chris Lattner 1780eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner unsigned getCharWidth(bool isWide = false) const { 17998be4943e8dc4f3905629a7102668960873cf863Chris Lattner if (isWide) 180f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner return WCharWidth; 181d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner uint64_t Size; unsigned Align; 182f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner getCharInfo(Size, Align); 1831ff4f0cc794561e9a71f984551894be0f8660eadHartmut Kaiser return static_cast<unsigned>(Size); 184d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner } 185d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner 186f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner 1870eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner unsigned getIntWidth() const { 188d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner uint64_t Size; unsigned Align; 18998be4943e8dc4f3905629a7102668960873cf863Chris Lattner getIntInfo(Size, Align); 1901ff4f0cc794561e9a71f984551894be0f8660eadHartmut Kaiser return static_cast<unsigned>(Size); 191d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner } 192d2d2a11a91d7ddf468bfb70f66362d24806ed601Chris Lattner 1930eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner unsigned getLongWidth() const { 194ac60968d4541aa4e80fa71f64c36adfe5aa586e4Chris Lattner uint64_t Size; unsigned Align; 19598be4943e8dc4f3905629a7102668960873cf863Chris Lattner getLongInfo(Size, Align); 1961ff4f0cc794561e9a71f984551894be0f8660eadHartmut Kaiser return static_cast<unsigned>(Size); 197ac60968d4541aa4e80fa71f64c36adfe5aa586e4Chris Lattner } 198ac60968d4541aa4e80fa71f64c36adfe5aa586e4Chris Lattner 1990eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner unsigned getLongLongWidth() const { 200ac60968d4541aa4e80fa71f64c36adfe5aa586e4Chris Lattner uint64_t Size; unsigned Align; 20198be4943e8dc4f3905629a7102668960873cf863Chris Lattner getLongLongInfo(Size, Align); 2021ff4f0cc794561e9a71f984551894be0f8660eadHartmut Kaiser return static_cast<unsigned>(Size); 203ac60968d4541aa4e80fa71f64c36adfe5aa586e4Chris Lattner } 2047a4718e813e5e99d478567a482217c7eef8572c5Devang Patel 20544fe49c9ccf29b8e9b66ce1f2375be6ec591c03cAnders Carlsson /// getTargetPrefix - Return the target prefix used for identifying 20644fe49c9ccf29b8e9b66ce1f2375be6ec591c03cAnders Carlsson /// llvm intrinsics. 2070eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual const char *getTargetPrefix() const = 0; 20844fe49c9ccf29b8e9b66ce1f2375be6ec591c03cAnders Carlsson 209ae3607684c5978dc2d877141015056c9d24f17eaTed Kremenek /// getTargetTriple - Return the target triple of the primary target. 2100eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual const char *getTargetTriple() const { 2110eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner return Triple.c_str(); 2120eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner } 213ae3607684c5978dc2d877141015056c9d24f17eaTed Kremenek 214ae3607684c5978dc2d877141015056c9d24f17eaTed Kremenek const char *getTargetDescription() const { 2157a4718e813e5e99d478567a482217c7eef8572c5Devang Patel // FIXME ! 2167a4718e813e5e99d478567a482217c7eef8572c5Devang Patel // Hard code darwin-x86 for now. 2177a4718e813e5e99d478567a482217c7eef8572c5Devang Patel return "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:\ 2187a4718e813e5e99d478567a482217c7eef8572c5Devang Patel32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"; 2197a4718e813e5e99d478567a482217c7eef8572c5Devang Patel } 2203346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson 2213346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson struct GCCRegAlias { 2223346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson const char * const Aliases[5]; 2233346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson const char * const Register; 2243346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson }; 2250eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner 2260eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattnerprotected: 2270eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual void getGCCRegNames(const char * const *&Names, 2280eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner unsigned &NumNames) const = 0; 2293346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson virtual void getGCCRegAliases(const GCCRegAlias *&Aliases, 2303346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson unsigned &NumAliases) const = 0; 231d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson virtual bool validateAsmConstraint(char c, 232d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson TargetInfo::ConstraintInfo &info) const= 0; 2335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 2345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} // end namespace clang 2365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#endif 238