mem: Add PortProxy read/write helper with explicit endianness

Change-Id: Ia9a11ca68b2892dafd02f2c37324b99b35c77d34
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-by: Jack Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/8146
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
Andreas Sandberg
2018-02-09 12:48:37 +00:00
parent d5231d14af
commit b78f216c15

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2011-2013 ARM Limited
* Copyright (c) 2011-2013, 2018 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@@ -123,6 +123,20 @@ class PortProxy
template <typename T>
void write(Addr address, T data) const;
/**
* Read sizeof(T) bytes from address and return as object T.
* Performs selected endianness transform.
*/
template <typename T>
T readGtoH(Addr address, ByteOrder guest_byte_order) const;
/**
* Write object T to address. Writes sizeof(T) bytes.
* Performs selected endianness transform.
*/
template <typename T>
void writeHtoG(Addr address, T data, ByteOrder guest_byte_order) const;
#if THE_ISA != NULL_ISA
/**
* Read sizeof(T) bytes from address and return as object T.
@@ -157,6 +171,23 @@ PortProxy::write(Addr address, T data) const
writeBlob(address, (uint8_t*)&data, sizeof(T));
}
template <typename T>
T
PortProxy::readGtoH(Addr address, ByteOrder byte_order) const
{
T data;
readBlob(address, (uint8_t*)&data, sizeof(T));
return gtoh(data, byte_order);
}
template <typename T>
void
PortProxy::writeHtoG(Addr address, T data, ByteOrder byte_order) const
{
data = htog(data, byte_order);
writeBlob(address, (uint8_t*)&data, sizeof(T));
}
#if THE_ISA != NULL_ISA
template <typename T>
T