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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user