[gem5-dev] [M] Change in gem5/gem5[develop]: base,python: Added PcCountPair type and parameter

2023-02-22 Thread Zhantong Qiu (Gerrit) via gem5-dev
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

2023-01-06 Thread Zhantong Qiu (Gerrit) via gem5-dev
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