blob: c8d8a79864fb8312d0564c1eae7cb4a6ea9f5c6a [file] [log] [blame]
/*
* Copyright (c) 2007-2008 The Florida State University
* Copyright (c) 2009 The University of Edinburgh
* Copyright (c) 2021 IBM Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met: redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer;
* redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution;
* neither the name of the copyright holders nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __POWER_PROCESS_HH__
#define __POWER_PROCESS_HH__
#include "sim/process.hh"
namespace gem5
{
GEM5_DEPRECATED_NAMESPACE(Loader, loader);
namespace loader
{
class ObjectFile;
} // namespace loader
class PowerProcess : public Process
{
protected:
void initState() override;
public:
PowerProcess(const ProcessParams &params, loader::ObjectFile *objFile);
template <typename IntType>
void argsInit(int pageSize);
};
} // namespace gem5
enum PowerHWCAPFeature
{
HWCAP_FEATURE_32 = 1ULL << 31, // Always set for powerpc64
HWCAP_FEATURE_64 = 1ULL << 30, // Always set for powerpc64
HWCAP_FEATURE_HAS_ALTIVEC = 1ULL << 28,
HWCAP_FEATURE_HAS_FPU = 1ULL << 27,
HWCAP_FEATURE_HAS_MMU = 1ULL << 26,
HWCAP_FEATURE_UNIFIED_CACHE = 1ULL << 24,
HWCAP_FEATURE_NO_TB = 1ULL << 20, // 601/403gx have no timebase
HWCAP_FEATURE_POWER4 = 1ULL << 19, // POWER4 ISA 2.00
HWCAP_FEATURE_POWER5 = 1ULL << 18, // POWER5 ISA 2.02
HWCAP_FEATURE_POWER5_PLUS = 1ULL << 17, // POWER5+ ISA 2.03
HWCAP_FEATURE_CELL_BE = 1ULL << 16, // CELL Broadband Engine
HWCAP_FEATURE_BOOKE = 1ULL << 15, // ISA Category Embedded
HWCAP_FEATURE_SMT = 1ULL << 14, // Simultaneous Multi-Threading
HWCAP_FEATURE_ICACHE_SNOOP = 1ULL << 13,
HWCAP_FEATURE_ARCH_2_05 = 1ULL << 12, // ISA 2.05
HWCAP_FEATURE_PA6T = 1ULL << 11, // PA Semi 6T Core
HWCAP_FEATURE_HAS_DFP = 1ULL << 10, // Decimal FP Unit
HWCAP_FEATURE_POWER6_EXT = 1ULL << 9, // P6 + mffgpr/mftgpr
HWCAP_FEATURE_ARCH_2_06 = 1ULL << 8, // ISA 2.06
HWCAP_FEATURE_HAS_VSX = 1ULL << 7, // P7 Vector Extension
HWCAP_FEATURE_PSERIES_PERFMON_COMPAT = 1ULL << 6,
HWCAP_FEATURE_TRUE_LE = 1ULL << 1,
HWCAP_FEATURE_PPC_LE = 1ULL << 0
};
enum PowerHWCAP2Feature
{
HWCAP2_FEATURE_ARCH_2_07 = 1ULL << 31, // ISA 2.07
HWCAP2_FEATURE_HAS_HTM = 1ULL << 30, // Hardware Transactional Memory
HWCAP2_FEATURE_HAS_DSCR = 1ULL << 29, // Data Stream Control Register
HWCAP2_FEATURE_HAS_EBB = 1ULL << 28, // Event Base Branching
HWCAP2_FEATURE_HAS_ISEL = 1ULL << 27, // Integer Select
HWCAP2_FEATURE_HAS_TAR = 1ULL << 26, // Target Address Register
HWCAP2_FEATURE_HAS_VCRYPTO = 1ULL << 25, // Vector AES category
HWCAP2_FEATURE_HTM_NOSC = 1ULL << 24,
HWCAP2_FEATURE_ARCH_3_00 = 1ULL << 23, // ISA 3.0
HWCAP2_FEATURE_HAS_IEEE128 = 1ULL << 22, // VSX IEEE Binary Float 128-bit
};
#endif // __POWER_PROCESS_HH__