From 649c239ceef2d107fae253b1008c6f214f242d73 Mon Sep 17 00:00:00 2001 From: Ali Saidi Date: Tue, 13 Sep 2011 12:58:08 -0400 Subject: LSQ: Only trigger a memory violation with a load/load if the value changes. Only create a memory ordering violation when the value could have changed between two subsequent loads, instead of just when loads go out-of-order to the same address. While not very common in the case of Alpha, with an architecture with a hardware table walker this can happen reasonably frequently beacuse a translation will miss and start a table walk and before the CPU re-schedules the faulting instruction another one will pass it to the same address (or cache block depending on the dendency checking). This patch has been tested with a couple of self-checking hand crafted programs to stress ordering between two cores. The performance improvement on SPEC benchmarks can be substantial (2-10%). --- src/arch/arm/faults.cc | 14 -------------- 1 file changed, 14 deletions(-) (limited to 'src/arch/arm/faults.cc') diff --git a/src/arch/arm/faults.cc b/src/arch/arm/faults.cc index 3c361404e..68c5fa0e8 100644 --- a/src/arch/arm/faults.cc +++ b/src/arch/arm/faults.cc @@ -75,9 +75,6 @@ template<> ArmFault::FaultVals ArmFaultVals::vals = template<> ArmFault::FaultVals ArmFaultVals::vals = {"Pipe Flush", 0x00, MODE_SVC, 0, 0, true, true}; // some dummy values -template<> ArmFault::FaultVals ArmFaultVals::vals = - {"ReExec Flush", 0x00, MODE_SVC, 0, 0, true, true}; // some dummy values - template<> ArmFault::FaultVals ArmFaultVals::vals = {"ArmSev Flush", 0x00, MODE_SVC, 0, 0, true, true}; // some dummy values Addr @@ -240,17 +237,6 @@ FlushPipe::invoke(ThreadContext *tc, StaticInstPtr inst) { tc->pcState(pc); } -void -ReExec::invoke(ThreadContext *tc, StaticInstPtr inst) { - DPRINTF(Faults, "Invoking ReExec Fault\n"); - - // Set the PC to then the faulting instruction. - // Net effect is simply squashing all instructions including this - // instruction and refetching/rexecuting current instruction - PCState pc = tc->pcState(); - tc->pcState(pc); -} - template void AbortFault::invoke(ThreadContext *tc, StaticInstPtr inst); template void AbortFault::invoke(ThreadContext *tc, -- cgit v1.2.3