From 1b6355c89574c42c5b5f8014b994cf26dae4737d Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Sun, 17 Jan 2016 18:27:46 -0800 Subject: cpu. arch: add initiateMemRead() to ExecContext interface For historical reasons, the ExecContext interface had a single function, readMem(), that did two different things depending on whether the ExecContext supported atomic memory mode (i.e., AtomicSimpleCPU) or timing memory mode (all the other models). In the former case, it actually performed a memory read; in the latter case, it merely initiated a read access, and the read completion did not happen until later when a response packet arrived from the memory system. This led to some confusing things, including timing accesses being required to provide a pointer for the return data even though that pointer was only used in atomic mode. This patch splits this interface, adding a new initiateMemRead() function to the ExecContext interface to replace the timing-mode use of readMem(). For consistency and clarity, the readMemTiming() helper function in the ISA definitions is renamed to initiateMemRead() as well. For x86, where the access size is passed in explicitly, we can also get rid of the data parameter at this level. For other ISAs, where the access size is determined from the type of the data parameter, we have to keep the parameter for that purpose. --- src/arch/arm/isa/templates/mem.isa | 8 +++----- src/arch/arm/isa/templates/mem64.isa | 2 +- src/arch/arm/isa/templates/neon64.isa | 5 +---- 3 files changed, 5 insertions(+), 10 deletions(-) (limited to 'src/arch/arm') diff --git a/src/arch/arm/isa/templates/mem.isa b/src/arch/arm/isa/templates/mem.isa index bac1cd211..51f598f50 100644 --- a/src/arch/arm/isa/templates/mem.isa +++ b/src/arch/arm/isa/templates/mem.isa @@ -438,7 +438,8 @@ def template LoadInitiateAcc {{ if (%(predicate_test)s) { if (fault == NoFault) { - fault = readMemTiming(xc, traceData, EA, Mem, memAccessFlags); + fault = initiateMemRead(xc, traceData, EA, Mem, + memAccessFlags); } } else { xc->setPredicate(false); @@ -461,13 +462,10 @@ def template NeonLoadInitiateAcc {{ %(op_rd)s; %(ea_code)s; - MemUnion memUnion; - uint8_t *dataPtr = memUnion.bytes; - if (%(predicate_test)s) { if (fault == NoFault) { - fault = xc->readMem(EA, dataPtr, %(size)d, memAccessFlags); + fault = xc->initiateMemRead(EA, %(size)d, memAccessFlags); } } else { xc->setPredicate(false); diff --git a/src/arch/arm/isa/templates/mem64.isa b/src/arch/arm/isa/templates/mem64.isa index 72ee882a7..e831f17a5 100644 --- a/src/arch/arm/isa/templates/mem64.isa +++ b/src/arch/arm/isa/templates/mem64.isa @@ -191,7 +191,7 @@ def template Load64InitiateAcc {{ %(ea_code)s; if (fault == NoFault) { - fault = readMemTiming(xc, traceData, EA, Mem, memAccessFlags); + fault = initiateMemRead(xc, traceData, EA, Mem, memAccessFlags); } return fault; diff --git a/src/arch/arm/isa/templates/neon64.isa b/src/arch/arm/isa/templates/neon64.isa index 19dd50910..6356073c5 100644 --- a/src/arch/arm/isa/templates/neon64.isa +++ b/src/arch/arm/isa/templates/neon64.isa @@ -313,11 +313,8 @@ def template NeonLoadInitiateAcc64 {{ %(op_rd)s; %(ea_code)s; - MemUnion memUnion; - uint8_t *dataPtr = memUnion.bytes; - if (fault == NoFault) { - fault = xc->readMem(EA, dataPtr, accSize, memAccessFlags); + fault = xc->initiateMemRead(EA, accSize, memAccessFlags); } return fault; -- cgit v1.2.3