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