diff options
author | Gabe Black <gabeblack@google.com> | 2018-01-23 23:57:48 -0800 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-03-26 22:33:52 +0000 |
commit | 81050be736f0d7ac71e7f862a4f34b1ed6787716 (patch) | |
tree | 7270526d3375cf0464c07a6c4e2feefbb16faba1 /src/arch/sparc/insts/static_inst.hh | |
parent | f6a28e5fc2e698cb7c6f35bb2476a1cce9f689d2 (diff) | |
download | gem5-81050be736f0d7ac71e7f862a4f34b1ed6787716.tar.xz |
arch: Add a virtual asBytes function to the StaticInst class.
This function takes a pointer to a buffer and the current size of the
buffer as a pass by reference argument. If the size of the buffer is
sufficient, the function stores a binary representation of itself
(generally the ISA defined instruction encoding) in the buffer, and
sets the size argument to how much space it used. This could be used
by ISAs which have two instruction sizes (ARM and thumb, for example).
If the buffer size isn't sufficient, then the size parameter should be
set to what size is required, and then the function should return
without modifying the buffer.
The buffer itself should be aligned to the same standard as memory
returned by new, specifically "The pointer returned shall be suitably
aligned so that it can be converted to a pointer of any complete object
type and then used to access the object or array in the storage
allocated...". This will avoid having to memcpy buffers to avoid
unaligned accesses.
To standardize the representation of the data, it should be stored in
the buffer as little endian. Since most hosts (including ARM and x86
hosts) will be little endian, this will almost always be a no-op.
Change-Id: I2f31aa0b4f9c0126b44f47a881c2901243279bd6
Reviewed-on: https://gem5-review.googlesource.com/7562
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/arch/sparc/insts/static_inst.hh')
-rw-r--r-- | src/arch/sparc/insts/static_inst.hh | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/arch/sparc/insts/static_inst.hh b/src/arch/sparc/insts/static_inst.hh index cc5a60225..9e15c8dab 100644 --- a/src/arch/sparc/insts/static_inst.hh +++ b/src/arch/sparc/insts/static_inst.hh @@ -105,6 +105,12 @@ class SparcStaticInst : public StaticInst static bool passesFpCondition(uint32_t fcc, uint32_t condition); static bool passesCondition(uint32_t codes, uint32_t condition); + + size_t + asBytes(void *buf, size_t size) override + { + return simpleAsBytes(buf, size, machInst); + } }; } |