From 81050be736f0d7ac71e7f862a4f34b1ed6787716 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Tue, 23 Jan 2018 23:57:48 -0800 Subject: 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 Maintainer: Gabe Black --- src/arch/arm/insts/static_inst.hh | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/arch/arm') diff --git a/src/arch/arm/insts/static_inst.hh b/src/arch/arm/insts/static_inst.hh index c68880c97..3ed374ab1 100644 --- a/src/arch/arm/insts/static_inst.hh +++ b/src/arch/arm/insts/static_inst.hh @@ -505,6 +505,12 @@ class ArmStaticInst : public StaticInst { return static_cast(machInst & (mask(instSize() * 8))); } + + size_t + asBytes(void *buf, size_t max_size) override + { + return simpleAsBytes(buf, max_size, machInst); + } }; } -- cgit v1.2.3