| 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,
|
|
|