From b963b339b9d0f5a4583e62f32766f085ad95529e Mon Sep 17 00:00:00 2001 From: Korey Sewell Date: Sun, 19 Jun 2011 21:43:42 -0400 Subject: inorder: se: squash after syscalls --- src/cpu/inorder/cpu.cc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/cpu/inorder/cpu.cc') diff --git a/src/cpu/inorder/cpu.cc b/src/cpu/inorder/cpu.cc index fbd4a6068..d8552d9d3 100644 --- a/src/cpu/inorder/cpu.cc +++ b/src/cpu/inorder/cpu.cc @@ -1713,7 +1713,16 @@ InOrderCPU::wakeup() void InOrderCPU::syscallContext(Fault fault, ThreadID tid, DynInstPtr inst, int delay) { - //@todo: squash behind syscall + // Syscall must be non-speculative, so squash from last stage + unsigned squash_stage = NumStages - 1; + inst->setSquashInfo(squash_stage); + + // Squash In Pipeline Stage + pipelineStage[squash_stage]->setupSquash(inst, tid); + + // Schedule Squash Through-out Resource Pool + resPool->scheduleEvent( + (InOrderCPU::CPUEventType)ResourcePool::SquashAll, inst, 0); scheduleCpuEvent(Syscall, fault, tid, inst, delay, Syscall_Pri); } -- cgit v1.2.3