execute.cc (10464:2a0fe8bca031) execute.cc (10527:d0c2ba70dc12)
1/*
2 * Copyright (c) 2013-2014 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 1669 unchanged lines hidden (view full) ---

1678unsigned int
1679Execute::drain()
1680{
1681 DPRINTF(Drain, "MinorExecute drain\n");
1682
1683 if (drainState == NotDraining) {
1684 cpu.wakeupOnEvent(Pipeline::ExecuteStageId);
1685
1/*
2 * Copyright (c) 2013-2014 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 1669 unchanged lines hidden (view full) ---

1678unsigned int
1679Execute::drain()
1680{
1681 DPRINTF(Drain, "MinorExecute drain\n");
1682
1683 if (drainState == NotDraining) {
1684 cpu.wakeupOnEvent(Pipeline::ExecuteStageId);
1685
1686 /* Go to DrainCurrentInst if we're not between operations
1687 * this should probably test the LSQ as well. Or maybe
1688 * just always go to DrainCurrentInst anyway */
1689 if (lastCommitWasEndOfMacroop)
1686 /* Go to DrainCurrentInst if we're between microops
1687 * or waiting on an unbufferable memory operation.
1688 * Otherwise we can go straight to DrainHaltFetch
1689 */
1690 if (isInbetweenInsts())
1690 setDrainState(DrainHaltFetch);
1691 else
1692 setDrainState(DrainCurrentInst);
1693 }
1694
1695 return (isDrained() ? 0 : 1);
1696}
1697

--- 41 unchanged lines hidden ---
1691 setDrainState(DrainHaltFetch);
1692 else
1693 setDrainState(DrainCurrentInst);
1694 }
1695
1696 return (isDrained() ? 0 : 1);
1697}
1698

--- 41 unchanged lines hidden ---