TargetInfo.h revision 364af81157a81cf34bb058a7d5b0185020e5164b
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// 102b59a2cbfdb93fcf1a4a303e1ea7753ff1c7b319Nate Begeman// This file defines the TargetInfo interface. 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: 35cd4fc42896f926ffc081e1c4a8bf4cd647883c14Chris Lattner // Target values set by the ctor of the actual target implementation. Default 36cd4fc42896f926ffc081e1c4a8bf4cd647883c14Chris Lattner // values are specified by the TargetInfo constructor. 379e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner bool CharIsSigned; 38927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner unsigned char PointerWidth, PointerAlign; 39927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner unsigned char WCharWidth, WCharAlign; 40927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner unsigned char IntWidth, IntAlign; 4161538a7d1336f3ef3cb81e09f11a1cbb282bcf81Eli Friedman unsigned char FloatWidth, FloatAlign; 42927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner unsigned char DoubleWidth, DoubleAlign; 4361538a7d1336f3ef3cb81e09f11a1cbb282bcf81Eli Friedman unsigned char LongDoubleWidth, LongDoubleAlign; 44927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner unsigned char LongWidth, LongAlign; 45927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner unsigned char LongLongWidth, LongLongAlign; 46364af81157a81cf34bb058a7d5b0185020e5164bSanjiv Gupta char *DescriptionString; 47c8b1227fa8c17d9881815e40c04e19334be536f8Nate Begeman 48cd4fc42896f926ffc081e1c4a8bf4cd647883c14Chris Lattner const llvm::fltSemantics *FloatFormat, *DoubleFormat, *LongDoubleFormat; 49bbced580c92afa09cd4423a9bdc90ff61cb1e79aTed Kremenek 50cd4fc42896f926ffc081e1c4a8bf4cd647883c14Chris Lattner // TargetInfo Constructor. Default initializes all fields. 51cd4fc42896f926ffc081e1c4a8bf4cd647883c14Chris Lattner TargetInfo(const std::string &T); 52390161183919169c493916efac4c1e1b3828fea6Chris Lattner 53bbced580c92afa09cd4423a9bdc90ff61cb1e79aTed Kremenekpublic: 5442e6737f2efb113563140ad794c21c7709250402Chris Lattner /// CreateTargetInfo - Return the target info object for the specified target 5542e6737f2efb113563140ad794c21c7709250402Chris Lattner /// triple. 5642e6737f2efb113563140ad794c21c7709250402Chris Lattner static TargetInfo* CreateTargetInfo(const std::string &Triple); 57bbced580c92afa09cd4423a9bdc90ff61cb1e79aTed Kremenek 580eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual ~TargetInfo(); 59fb79f7cc00f9c1e04f11ed636eefb36d246b0fb8Ted Kremenek 609c4bea1fa7291035325575c02d33552a124d8ef3Chris Lattner ///===---- Target Data Type Query Methods -------------------------------===// 615f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 625f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// isCharSigned - Return true if 'char' is 'signed char' or false if it is 635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// treated as 'unsigned char'. This is implementation defined according to 645f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// C99 6.2.5p15. In our implementation, this is target-specific. 659e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner bool isCharSigned() const { return CharIsSigned; } 665f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 67f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner /// getPointerWidth - Return the width of pointers on this target, for the 68927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner /// specified address space. 69927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner uint64_t getPointerWidth(unsigned AddrSpace) const { 70927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner return AddrSpace == 0 ? PointerWidth : getPointerWidthV(AddrSpace); 71927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner } 72927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner uint64_t getPointerAlign(unsigned AddrSpace) const { 73927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner return AddrSpace == 0 ? PointerAlign : getPointerAlignV(AddrSpace); 74927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner } 75927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner virtual uint64_t getPointerWidthV(unsigned AddrSpace) const { 76927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner return PointerWidth; 77927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner } 78927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner virtual uint64_t getPointerAlignV(unsigned AddrSpace) const { 79927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner return PointerAlign; 80927686fe8c968ca786fa44d2353eebf59c4f5b8aChris Lattner } 815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 829e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// getBoolWidth/Align - Return the size of '_Bool' and C++ 'bool' for this 839e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// target, in bits. 849e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner unsigned getBoolWidth(bool isWide = false) const { return 8; } // FIXME 859e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner unsigned getBoolAlign(bool isWide = false) const { return 8; } // FIXME 865f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 879e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner unsigned getCharWidth(bool isWide = false) const { 889e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner return isWide ? getWCharWidth() : 8; // FIXME 895f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 909e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner unsigned getCharAlign(bool isWide = false) const { 919e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner return isWide ? getWCharAlign() : 8; // FIXME 925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 935f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 949e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// getShortWidth/Align - Return the size of 'signed short' and 959e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// 'unsigned short' for this target, in bits. 969e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner unsigned getShortWidth() const { return 16; } // FIXME 979e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner unsigned getShortAlign() const { return 16; } // FIXME 985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 999e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// getIntWidth/Align - Return the size of 'signed int' and 'unsigned int' for 1009e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// this target, in bits. 1012621fd1d6d3c5eadcae246859f62738645df7540Chris Lattner unsigned getIntWidth() const { return IntWidth; } 1022621fd1d6d3c5eadcae246859f62738645df7540Chris Lattner unsigned getIntAlign() const { return IntAlign; } 1035f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1049e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// getLongWidth/Align - Return the size of 'signed long' and 'unsigned long' 1059e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// for this target, in bits. 1068059e997ee05e4aa87f7e21fed630429a140ee53Chris Lattner unsigned getLongWidth() const { return LongWidth; } 1078059e997ee05e4aa87f7e21fed630429a140ee53Chris Lattner unsigned getLongAlign() const { return LongAlign; } 108692233e90a99c3a81dd04879d36eb9688f137c44Chris Lattner 1099e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// getLongLongWidth/Align - Return the size of 'signed long long' and 1109e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// 'unsigned long long' for this target, in bits. 111ec10f5886526124ba733fbd0ef8665d576285daaChris Lattner unsigned getLongLongWidth() const { return LongLongWidth; } 112ec10f5886526124ba733fbd0ef8665d576285daaChris Lattner unsigned getLongLongAlign() const { return LongLongAlign; } 1139e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner 1149e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// getWcharWidth/Align - Return the size of 'wchar_t' for this target, in 1159e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// bits. 116f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner unsigned getWCharWidth() const { return WCharWidth; } 117f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner unsigned getWCharAlign() const { return WCharAlign; } 118f72a44330b9d9a4b2d93e9b91cfb8ab7bd4a0643Chris Lattner 1199e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// getFloatWidth/Align/Format - Return the size/align/format of 'float'. 12061538a7d1336f3ef3cb81e09f11a1cbb282bcf81Eli Friedman unsigned getFloatWidth() const { return FloatWidth; } 12161538a7d1336f3ef3cb81e09f11a1cbb282bcf81Eli Friedman unsigned getFloatAlign() const { return FloatAlign; } 122b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner const llvm::fltSemantics &getFloatFormat() const { return *FloatFormat; } 1239e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner 1249e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// getDoubleWidth/Align/Format - Return the size/align/format of 'double'. 125c8b1227fa8c17d9881815e40c04e19334be536f8Nate Begeman unsigned getDoubleWidth() const { return DoubleWidth; } 126c8b1227fa8c17d9881815e40c04e19334be536f8Nate Begeman unsigned getDoubleAlign() const { return DoubleAlign; } 127b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner const llvm::fltSemantics &getDoubleFormat() const { return *DoubleFormat; } 1289e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner 1299e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// getLongDoubleWidth/Align/Format - Return the size/align/format of 'long 1309e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner /// double'. 13161538a7d1336f3ef3cb81e09f11a1cbb282bcf81Eli Friedman unsigned getLongDoubleWidth() const { return LongDoubleWidth; } 13261538a7d1336f3ef3cb81e09f11a1cbb282bcf81Eli Friedman unsigned getLongDoubleAlign() const { return LongDoubleAlign; } 133b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner const llvm::fltSemantics &getLongDoubleFormat() const { 134b7cfe88e88cb4f46308de89cf3f0c81bfe624128Chris Lattner return *LongDoubleFormat; 135cd4fc42896f926ffc081e1c4a8bf4cd647883c14Chris Lattner } 1369e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner 1375f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// getIntMaxTWidth - Return the size of intmax_t and uintmax_t for this 1385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// target, in bits. 1390eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner unsigned getIntMaxTWidth() const { 1405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer // FIXME: implement correctly. 1415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return 64; 1425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 1435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 1449c4bea1fa7291035325575c02d33552a124d8ef3Chris Lattner ///===---- Other target property query methods --------------------------===// 1459c4bea1fa7291035325575c02d33552a124d8ef3Chris Lattner 1469c4bea1fa7291035325575c02d33552a124d8ef3Chris Lattner /// getTargetDefines - Appends the target-specific #define values for this 1479c4bea1fa7291035325575c02d33552a124d8ef3Chris Lattner /// target set to the specified buffer. 1489c4bea1fa7291035325575c02d33552a124d8ef3Chris Lattner virtual void getTargetDefines(std::vector<char> &DefineBuffer) const = 0; 1499c4bea1fa7291035325575c02d33552a124d8ef3Chris Lattner 1505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// getTargetBuiltins - Return information about target-specific builtins for 1515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// the current primary target, and info about which builtins are non-portable 1525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer /// across the current set of primary and secondary targets. 1530eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual void getTargetBuiltins(const Builtin::Info *&Records, 1540eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner unsigned &NumRecords) const = 0; 1555f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 156d19144b244f86227fcc2b0da794929fe83968dd5Chris Lattner /// getVAListDeclaration - Return the declaration to use for 157d19144b244f86227fcc2b0da794929fe83968dd5Chris Lattner /// __builtin_va_list, which is target-specific. 1580eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual const char *getVAListDeclaration() const = 0; 159fb5e5ba3c7708f3aef4db0ed30e8470b3ed4206aAnders Carlsson 1603346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson /// isValidGCCRegisterName - Returns whether the passed in string 1613346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson /// is a valid register name according to GCC. This is used by Sema for 1623346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson /// inline asm statements. 1633346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson bool isValidGCCRegisterName(const char *Name) const; 164d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson 165d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson // getNormalizedGCCRegisterName - Returns the "normalized" GCC register name. 166d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson // For example, on x86 it will return "ax" when "eax" is passed in. 167d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson const char *getNormalizedGCCRegisterName(const char *Name) const; 168d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson 169d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson enum ConstraintInfo { 170d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson CI_None = 0x00, 171d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson CI_AllowsMemory = 0x01, 172d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson CI_AllowsRegister = 0x02, 173ef09d2b70a3b6f04c5d31c4c2bab2b7849f22561Anders Carlsson CI_ReadWrite = 0x04 174d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson }; 175d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson 176d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson // validateOutputConstraint, validateInputConstraint - Checks that 177d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson // a constraint is valid and provides information about it. 178d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson // FIXME: These should return a real error instead of just true/false. 179d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson bool validateOutputConstraint(const char *Name, ConstraintInfo &Info) const; 180d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson bool validateInputConstraint (const char *Name, unsigned NumOutputs, 181d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson ConstraintInfo &info) const; 182a5694b8b0096215137bf1c273764ec93ac4898fdLauro Ramos Venancio 1830eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual std::string convertConstraint(const char Constraint) const { 1840eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner return std::string(1, Constraint); 1850eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner } 186d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson 187d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson // Returns a string of target-specific clobbers, in LLVM format. 1880eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual const char *getClobbers() const = 0; 189d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson 1907a4718e813e5e99d478567a482217c7eef8572c5Devang Patel 19144fe49c9ccf29b8e9b66ce1f2375be6ec591c03cAnders Carlsson /// getTargetPrefix - Return the target prefix used for identifying 19244fe49c9ccf29b8e9b66ce1f2375be6ec591c03cAnders Carlsson /// llvm intrinsics. 1930eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual const char *getTargetPrefix() const = 0; 19444fe49c9ccf29b8e9b66ce1f2375be6ec591c03cAnders Carlsson 195ae3607684c5978dc2d877141015056c9d24f17eaTed Kremenek /// getTargetTriple - Return the target triple of the primary target. 1969e9b6dc3fd413f5341fab54b681420eeb21cd169Chris Lattner const char *getTargetTriple() const { 1970eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner return Triple.c_str(); 1980eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner } 199ae3607684c5978dc2d877141015056c9d24f17eaTed Kremenek 200ae3607684c5978dc2d877141015056c9d24f17eaTed Kremenek const char *getTargetDescription() const { 201364af81157a81cf34bb058a7d5b0185020e5164bSanjiv Gupta return DescriptionString; 2027a4718e813e5e99d478567a482217c7eef8572c5Devang Patel } 2033346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson 2043346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson struct GCCRegAlias { 2053346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson const char * const Aliases[5]; 2063346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson const char * const Register; 2073346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson }; 2082621fd1d6d3c5eadcae246859f62738645df7540Chris Lattner 2092621fd1d6d3c5eadcae246859f62738645df7540Chris Lattner virtual bool useGlobalsForAutomaticVariables() const {return false;} 2100eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner 2110eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattnerprotected: 2120eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner virtual void getGCCRegNames(const char * const *&Names, 2130eaed12e634dfd14f44620f63b8d3276fed028ddChris Lattner unsigned &NumNames) const = 0; 2143346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson virtual void getGCCRegAliases(const GCCRegAlias *&Aliases, 2153346ae6bba10da0d08c8d548134ddab4e13d040fAnders Carlsson unsigned &NumAliases) const = 0; 216d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson virtual bool validateAsmConstraint(char c, 217d04c6e23f2e10eeb9936778d67f4a1c4a14cc4f6Anders Carlsson TargetInfo::ConstraintInfo &info) const= 0; 2185f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 2195f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2205f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer} // end namespace clang 2215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 2225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#endif 223