Index: src/a64/simulator-a64.h |
diff --git a/src/a64/simulator-a64.h b/src/a64/simulator-a64.h |
index 535f287096a317e9ce157b17c033f2184399d0ed..195d3d1b171f3e57c0860a5422142c7349c09a79 100644 |
--- a/src/a64/simulator-a64.h |
+++ b/src/a64/simulator-a64.h |
@@ -665,17 +665,48 @@ class Simulator : public DecoderVisitor { |
void CheckMemoryAccess(uint8_t* address, uint8_t* stack); |
uint64_t MemoryRead(uint8_t* address, unsigned num_bytes); |
- uint8_t MemoryRead8(uint8_t* address); |
- uint16_t MemoryRead16(uint8_t* address); |
- uint32_t MemoryRead32(uint8_t* address); |
+ template <typename T> |
+ T MemoryRead(uint8_t* address) { |
+ ASSERT(address != NULL); |
+ T read = 0; |
+ memcpy(&read, address, sizeof(T)); |
+ return read; |
+ } |
+ uint8_t MemoryRead8(uint8_t* address) { |
+ return MemoryRead<uint8_t>(address); |
+ } |
+ uint16_t MemoryRead16(uint8_t* address) { |
+ return MemoryRead<uint16_t>(address); |
+ } |
+ uint32_t MemoryRead32(uint8_t* address) { |
+ return MemoryRead<uint32_t>(address); |
+ } |
+ uint64_t MemoryRead64(uint8_t* address) { |
+ return MemoryRead<uint64_t>(address); |
+ } |
float MemoryReadFP32(uint8_t* address); |
- uint64_t MemoryRead64(uint8_t* address); |
double MemoryReadFP64(uint8_t* address); |
void MemoryWrite(uint8_t* address, uint64_t value, unsigned num_bytes); |
- void MemoryWrite32(uint8_t* address, uint32_t value); |
+ template <typename T> |
+ void MemoryWrite(uint8_t* address, T value) { |
+ ASSERT(address != NULL); |
+ LogWrite(address, value, sizeof(T)); |
+ memcpy(address, &value, sizeof(T)); |
+ } |
+ void MemoryWrite8(uint8_t* address, uint8_t value) { |
+ MemoryWrite<uint8_t>(address, value); |
+ } |
+ void MemoryWrite16(uint8_t* address, uint16_t value) { |
+ MemoryWrite<uint16_t>(address, value); |
+ } |
+ void MemoryWrite32(uint8_t* address, uint32_t value) { |
+ MemoryWrite<uint32_t>(address, value); |
+ } |
+ void MemoryWrite64(uint8_t* address, uint64_t value) { |
+ MemoryWrite<uint64_t>(address, value); |
+ } |
void MemoryWriteFP32(uint8_t* address, float value); |
- void MemoryWrite64(uint8_t* address, uint64_t value); |
void MemoryWriteFP64(uint8_t* address, double value); |
int64_t ShiftOperand(unsigned reg_size, |