Hung-Wei Hsu has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/67917?usp=email )
Change subject: dev: add method to set initial register value out of
constructor.
......................................................................
dev: add method to set initial register value out of constructor.
The initial value of register is set in constructor but there is no
standard way to assign the initial value and default value at the same
time out of that. So we decided to add an extra method to set the
initialValue to current register value. The usecase would be:
reg.get().field1 = val1;
reg.get().field2 = val2;
reg.resetInitialValue();
Change-Id: Ibc5454e2945cc6aff943e6599043edd8ca442f5f
---
M src/dev/reg_bank.hh
M src/dev/reg_bank.test.cc
2 files changed, 43 insertions(+), 0 deletions(-)
diff --git a/src/dev/reg_bank.hh b/src/dev/reg_bank.hh
index 3d8dc57..3a89a00 100644
--- a/src/dev/reg_bank.hh
+++ b/src/dev/reg_bank.hh
@@ -759,6 +759,9 @@
// constructor. This is intended to be used in a resetter function.
const Data &initialValue() const { return _resetData; }
+ // Reset the initial value, which is normally set in the
constructor,
+ // to the register's current value.
+ void resetInitialValue() { _resetData = _data; }
/*
* Interface for accessing the register's state, for use by the
diff --git a/src/dev/reg_bank.test.cc b/src/dev/reg_bank.test.cc
index 4439526..c618ef1 100644
--- a/src/dev/reg_bank.test.cc
+++ b/src/dev/reg_bank.test.cc
@@ -881,6 +881,28 @@
EXPECT_EQ(reg.get(), initial_value);
}
+// Set initial value later than constructor
+TEST_F(TypedRegisterTest, LateInitialValueAssignment)
+{
+ BackingType initial_value = reg.get();
+ BackingType new_initial_value = initial_value + 1;
+
+ reg.get() = new_initial_value;
+ reg.resetInitialValue();
+
+ EXPECT_EQ(reg.get(), new_initial_value);
+ EXPECT_EQ(reg.initialValue(), new_initial_value);
+
+ reg.get() = new_initial_value + 1;
+ EXPECT_EQ(reg.get(), new_initial_value + 1);
+ EXPECT_EQ(reg.initialValue(), new_initial_value);
+
+ reg.reset();
+
+ EXPECT_EQ(reg.get(), new_initial_value);
+ EXPECT_EQ(reg.initialValue(), new_initial_value);
+}
+
// Set a custom resetter for a register.
TEST_F(TypedRegisterTest, Resetter)
{
--
To view, visit
https://gem5-review.googlesource.com/c/public/gem5/+/67917?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ibc5454e2945cc6aff943e6599043edd8ca442f5f
Gerrit-Change-Number: 67917
Gerrit-PatchSet: 1
Gerrit-Owner: Hung-Wei Hsu <hungwei...@google.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org