Path: blob/master/runtime/compiler/env/J9CPU.hpp
6000 views
/*******************************************************************************1* Copyright (c) 2000, 2020 IBM Corp. and others2*3* This program and the accompanying materials are made available under4* the terms of the Eclipse Public License 2.0 which accompanies this5* distribution and is available at https://www.eclipse.org/legal/epl-2.0/6* or the Apache License, Version 2.0 which accompanies this distribution and7* is available at https://www.apache.org/licenses/LICENSE-2.0.8*9* This Source Code may also be made available under the following10* Secondary Licenses when the conditions for such availability set11* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU12* General Public License, version 2 with the GNU Classpath13* Exception [1] and GNU General Public License, version 2 with the14* OpenJDK Assembly Exception [2].15*16* [1] https://www.gnu.org/software/classpath/license.html17* [2] http://openjdk.java.net/legal/assembly-exception.html18*19* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception20*******************************************************************************/2122#ifndef J9_CPU_INCL23#define J9_CPU_INCL2425/*26* The following #define and typedef must appear before any #includes in this file27*/28#ifndef J9_CPU_CONNECTOR29#define J9_CPU_CONNECTOR30namespace J9 { class CPU; }31namespace J9 { typedef CPU CPUConnector; }32#endif3334#include "env/OMRCPU.hpp"3536namespace J937{38class OMR_EXTENSIBLE CPU : public OMR::CPUConnector39{40protected:4142CPU() : OMR::CPUConnector() {}43CPU(const OMRProcessorDesc& processorDescription) : OMR::CPUConnector(processorDescription) {}4445/**46* @brief Contains the list of processor features exploited by the compiler, initialized via TR::CPU::initializeFeatureMasks()47*/48static OMRProcessorDesc _supportedFeatureMasks;4950/**51* @brief _isSupportedFeatureMasksEnabled tells you whether _supportedFeatureMasks was used for masking out unused processor features52*/53static bool _isSupportedFeatureMasksEnabled;5455public:5657/**58* @brief A factory method used to construct a CPU object based on the underlying hardware59* @param[in] omrPortLib : the port library60* @return TR::CPU61*/62static TR::CPU detect(OMRPortLibrary * const omrPortLib);6364/**65* @brief A factory method used to construct a CPU object based on user customized processorDescription66* @param[in] OMRProcessorDesc : the processor description67* @return TR::CPU68*/69static TR::CPU customize(OMRProcessorDesc processorDescription);7071/**72* @brief Intialize _supportedFeatureMasks to the list of processor features that will be exploited by the compiler and set _isSupportedFeatureMasksEnabled to true73* @return void74*/75static void enableFeatureMasks();7677bool supportsFeature(uint32_t feature);7879const char *getProcessorVendorId();80uint32_t getProcessorSignature();81};82}8384#endif858687