1/* 2 * Copyright 2012, The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef BCC_SUPPORT_TARGET_COMPILER_CONFIGS_H 18#define BCC_SUPPORT_TARGET_COMPILER_CONFIGS_H 19 20#include "bcc/Config/Config.h" 21#include "bcc/Support/CompilerConfig.h" 22 23namespace bcc { 24 25//===----------------------------------------------------------------------===// 26// ARM 27//===----------------------------------------------------------------------===// 28#if defined(PROVIDE_ARM_CODEGEN) 29class ARMCompilerConfig : public CompilerConfig { 30private: 31 bool mEnableNEON; 32 33 static void GetFeatureVector(std::vector<std::string> &pAttributes, 34 bool pEnableNEON); 35 36public: 37 ARMCompilerConfig(); 38 39 // Return true if config has been changed after returning from this function. 40 bool enableNEON(bool pEnable = true); 41}; 42#endif // defined(PROVIDE_ARM_CODEGEN) 43 44//===----------------------------------------------------------------------===// 45// MIPS 46//===----------------------------------------------------------------------===// 47#if defined(PROVIDE_MIPS_CODEGEN) 48class MipsCompilerConfig : public CompilerConfig { 49public: 50 MipsCompilerConfig() : CompilerConfig(DEFAULT_MIPS_TRIPLE_STRING) {} 51}; 52#endif // defined(PROVIDE_MIPS_CODEGEN) 53 54//===----------------------------------------------------------------------===// 55// X86 and X86_64 56//===----------------------------------------------------------------------===// 57#if defined(PROVIDE_X86_CODEGEN) 58class X86FamilyCompilerConfigBase : public CompilerConfig { 59protected: 60 X86FamilyCompilerConfigBase(const std::string &pTriple) 61 : CompilerConfig(pTriple) { 62 // Disable frame pointer elimination optimization on x86 family. 63 getTargetOptions().NoFramePointerElim = true; 64 getTargetOptions().UseInitArray = true; 65 return; 66 } 67}; 68 69class X86_32CompilerConfig : public X86FamilyCompilerConfigBase { 70public: 71 X86_32CompilerConfig() : 72 X86FamilyCompilerConfigBase(DEFAULT_X86_TRIPLE_STRING) { } 73}; 74 75class X86_64CompilerConfig : public X86FamilyCompilerConfigBase { 76public: 77 X86_64CompilerConfig() : 78 X86FamilyCompilerConfigBase(DEFAULT_X86_64_TRIPLE_STRING) { 79 setCodeModel(llvm::CodeModel::Medium); 80 } 81}; 82#endif // defined(PROVIDE_X86_CODEGEN) 83 84//===----------------------------------------------------------------------===// 85// Default target 86//===----------------------------------------------------------------------===// 87class DefaultCompilerConfig : public 88#if defined(DEFAULT_ARM_CODEGEN) 89 ARMCompilerConfig 90#elif defined(DEFAULT_MIPS_CODEGEN) 91 MipsCompilerConfig 92#elif defined(DEFAULT_X86_CODEGEN) 93 X86_32CompilerConfig 94#elif defined(DEFAULT_X86_64_CODEGEN) 95 X86_64CompilerConfig 96#else 97# error "Unsupported Default Target!" 98#endif 99{ }; 100 101} // end namespace bcc 102 103#endif // BCC_SUPPORT_TARGET_COMPILER_CONFIGS_H 104