[gem5-dev] [M] Change in gem5/gem5[develop]: base,python: Added PcCountPair type and parameter
Zhantong Qiu has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/67193?usp=email ) ( 13 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one. )Change subject: base,python: Added PcCountPair type and parameter .. base,python: Added PcCountPair type and parameter This commit introduces a PcCountPair type that stores a Program Counter address and an integer of counts for the Program Counter address. The PcCountPair can be used in the same way and hashable in both C++ and Python. Change-Id: I66d93e2c6a1d286cb9dd795ba97f8d887f67d503 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/67193 Tested-by: kokoro Reviewed-by: Bobby Bruce Maintainer: Bobby Bruce --- A src/cpu/probes/pc_count_pair.hh M src/python/m5/params.py M src/python/pybind11/core.cc 3 files changed, 185 insertions(+), 0 deletions(-) Approvals: Bobby Bruce: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/src/cpu/probes/pc_count_pair.hh b/src/cpu/probes/pc_count_pair.hh new file mode 100644 index 000..fd6bc63 --- /dev/null +++ b/src/cpu/probes/pc_count_pair.hh @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2023 The Regents of the University of California. + * 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 __PC_COUNT_PAIR_HH__ +#define __PC_COUNT_PAIR_HH__ + +#include "base/types.hh" + +namespace gem5 +{ + +class PcCountPair +{ + + private: + +/** The Program Counter address */ +Addr pc; +/** The count of the Program Counter address */ +int count; + + public: + +/** Explicit constructor assigning the pc and count values */ +explicit constexpr PcCountPair(Addr _pc, int _count) : +pc(_pc), count(_count) {} + +/** Default constructor for parameter classes */ +PcCountPair() : pc(0), count(0) {} + +/** Returns the Program Counter address */ +constexpr Addr getPC() const { return pc; } +/** Returns the count of the Program */ +constexpr int getCount() const { return count; } + +/** Greater than comparison */ +constexpr bool +operator>(const PcCountPair& cc) const +{ +return count > cc.getCount(); +} + +/** Equal comparison */ +constexpr bool +operator==(const PcCountPair& cc) const +{ +return (pc == cc.getPC() && count == cc.getCount()); +} + +/** String format */ +std::string +to_string() const +{ +std::string s = "(" + std::to_string(pc) ++ "," + std::to_string(count) + ")"; +return s; +} + +/** Enable hashing for this parameter */ +struct HashFunction +{ +size_t operator()(const PcCountPair& item) const +{ +size_t xHash = std::hash()(item.pc); +size_t yHash = std::hash()(item.count); +return xHash * 2 + yHash; +} +}; + +}; + +} // namespace gem5 + +#endif // __PC_COUNT_PAIR_HH__ diff --git a/src/python/m5/params.py b/src/python/m5/params.py index e76380b..92e913b 100644 --- a/src/python/m5/params.py +++ b/src/python/m5/params.py @@ -854,6 +854,46 @@ return "0x%x" % int(val) +class PcCountPair(ParamValue): +# This parameter stores a Program Counter address and the a count value for +# the Program Counter address +cxx_type = "PcCountPair" +cmd_line_settable =
[gem5-dev] [M] Change in gem5/gem5[develop]: base,python: Added PcCountPair type and parameter
Zhantong Qiu has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/67193?usp=email ) Change subject: base,python: Added PcCountPair type and parameter .. base,python: Added PcCountPair type and parameter This commit introduces a PcCountPair type that stores a Program Counter address and an integer of counts for the Program Counter address. The PcCountPair can be used in the same way and hashable in both C++ and Python. Change-Id: I66d93e2c6a1d286cb9dd795ba97f8d887f67d503 --- A src/cpu/probes/pc_count_pair.hh M src/python/m5/params.py M src/python/pybind11/core.cc 3 files changed, 181 insertions(+), 0 deletions(-) diff --git a/src/cpu/probes/pc_count_pair.hh b/src/cpu/probes/pc_count_pair.hh new file mode 100644 index 000..2480777 --- /dev/null +++ b/src/cpu/probes/pc_count_pair.hh @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2023 The Regents of the University of California. + * 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 __PC_COUNT_PAIR_HH__ +#define __PC_COUNT_PAIR_HH__ + +#include "base/types.hh" + +namespace gem5 +{ + +class PcCountPair +{ + + private: + +/** The Program Counter address */ +uint64_t pc; +/** The count of the Program Counter address */ +int count; + + public: + +/** Explicit constructor assigning the pc and count values */ +explicit constexpr PcCountPair(uint64_t _pc, int _count) : +pc(_pc), count(_count) {} + +/** Default constructor for parameter classes */ +PcCountPair() : pc(0), count(0) {} + +/** Returns the Program Counter address */ +constexpr uint64_t getPC() const { return pc; } +/** Returns the count of the Program */ +constexpr int getCount() const { return count; } + +/** Greater than comparison */ +constexpr bool +operator>(const PcCountPair& cc) const +{ +return count > cc.getCount(); +} + +/** Equal comparison */ +constexpr bool +operator==(const PcCountPair& cc) const +{ +return (pc == cc.getPC() && count == cc.getCount()); +} + +/** String format */ +std::string +to_string() const +{ +std::string s = "(" + std::to_string(pc) ++ "," + std::to_string(count) + ")"; +return s; +} + +/** Enable hashing for this parameter */ +struct HashFunction +{ +size_t operator()(const PcCountPair& item) const +{ +size_t xHash = std::hash()(item.pc); +size_t yHash = std::hash()(item.count); +return xHash ^ yHash; +} +}; + +}; + +} // namespace gem5 + +#endif // __PC_COUNT_PAIR_HH__ diff --git a/src/python/m5/params.py b/src/python/m5/params.py index e76380b..aa8dc23 100644 --- a/src/python/m5/params.py +++ b/src/python/m5/params.py @@ -854,6 +854,46 @@ return "0x%x" % int(val) +class PcCountPair(ParamValue): +# This parameter stores a Program Counter address and the a count value for +# the Program Counter address +cxx_type = "PcCountPair" +cmd_line_settable = True + +def __init__(self, _pc, _count): +self.pc = _pc +self.count = _count + +def getPC(self): +return self.pc + +def getCount(self): +return self.count + +def getValue(self): +# convert Python PcCountPair into C++ PcCountPair +from _m5.pc import PcCountPair + +return