iew.hh (3125:febd811bccc6) iew.hh (4329:52057dbec096)
1/*
2 * Copyright (c) 2004-2006 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

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

110 StageStatus dispatchStatus[Impl::MaxThreads];
111 /** Execute status. */
112 StageStatus exeStatus;
113 /** Writeback status. */
114 StageStatus wbStatus;
115
116 public:
117 /** Constructs a DefaultIEW with the given parameters. */
1/*
2 * Copyright (c) 2004-2006 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

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

110 StageStatus dispatchStatus[Impl::MaxThreads];
111 /** Execute status. */
112 StageStatus exeStatus;
113 /** Writeback status. */
114 StageStatus wbStatus;
115
116 public:
117 /** Constructs a DefaultIEW with the given parameters. */
118 DefaultIEW(Params *params);
118 DefaultIEW(O3CPU *_cpu, Params *params);
119
120 /** Returns the name of the DefaultIEW stage. */
121 std::string name() const;
122
123 /** Registers statistics. */
124 void regStats();
125
126 /** Initializes stage; sends back the number of free IQ and LSQ entries. */
127 void initStage();
128
129 /** Returns the dcache port. */
130 Port *getDcachePort() { return ldstQueue.getDcachePort(); }
131
119
120 /** Returns the name of the DefaultIEW stage. */
121 std::string name() const;
122
123 /** Registers statistics. */
124 void regStats();
125
126 /** Initializes stage; sends back the number of free IQ and LSQ entries. */
127 void initStage();
128
129 /** Returns the dcache port. */
130 Port *getDcachePort() { return ldstQueue.getDcachePort(); }
131
132 /** Sets CPU pointer for IEW, IQ, and LSQ. */
133 void setCPU(O3CPU *cpu_ptr);
134
135 /** Sets main time buffer used for backwards communication. */
136 void setTimeBuffer(TimeBuffer<TimeStruct> *tb_ptr);
137
138 /** Sets time buffer for getting instructions coming from rename. */
139 void setRenameQueue(TimeBuffer<RenameStruct> *rq_ptr);
140
141 /** Sets time buffer to pass on instructions to commit. */
142 void setIEWQueue(TimeBuffer<IEWStruct> *iq_ptr);

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

362 std::queue<DynInstPtr> insts[Impl::MaxThreads];
363
364 /** Skid buffer between rename and IEW. */
365 std::queue<DynInstPtr> skidBuffer[Impl::MaxThreads];
366
367 /** Scoreboard pointer. */
368 Scoreboard* scoreboard;
369
132 /** Sets main time buffer used for backwards communication. */
133 void setTimeBuffer(TimeBuffer<TimeStruct> *tb_ptr);
134
135 /** Sets time buffer for getting instructions coming from rename. */
136 void setRenameQueue(TimeBuffer<RenameStruct> *rq_ptr);
137
138 /** Sets time buffer to pass on instructions to commit. */
139 void setIEWQueue(TimeBuffer<IEWStruct> *iq_ptr);

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

359 std::queue<DynInstPtr> insts[Impl::MaxThreads];
360
361 /** Skid buffer between rename and IEW. */
362 std::queue<DynInstPtr> skidBuffer[Impl::MaxThreads];
363
364 /** Scoreboard pointer. */
365 Scoreboard* scoreboard;
366
370 public:
371 /** Instruction queue. */
372 IQ instQueue;
373
374 /** Load / store queue. */
375 LSQ ldstQueue;
376
377 /** Pointer to the functional unit pool. */
378 FUPool *fuPool;
379
380 private:
381 /** CPU pointer. */
382 O3CPU *cpu;
383
384 /** Records if IEW has written to the time buffer this cycle, so that the
385 * CPU can deschedule itself if there is no activity.
386 */
387 bool wroteToTimeBuffer;

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

393
394 /** Stages that are telling IEW to stall. */
395 Stalls stalls[Impl::MaxThreads];
396
397 /** Debug function to print instructions that are issued this cycle. */
398 void printAvailableInsts();
399
400 public:
367 private:
368 /** CPU pointer. */
369 O3CPU *cpu;
370
371 /** Records if IEW has written to the time buffer this cycle, so that the
372 * CPU can deschedule itself if there is no activity.
373 */
374 bool wroteToTimeBuffer;

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

380
381 /** Stages that are telling IEW to stall. */
382 Stalls stalls[Impl::MaxThreads];
383
384 /** Debug function to print instructions that are issued this cycle. */
385 void printAvailableInsts();
386
387 public:
388 /** Instruction queue. */
389 IQ instQueue;
390
391 /** Load / store queue. */
392 LSQ ldstQueue;
393
394 /** Pointer to the functional unit pool. */
395 FUPool *fuPool;
401 /** Records if the LSQ needs to be updated on the next cycle, so that
402 * IEW knows if there will be activity on the next cycle.
403 */
404 bool updateLSQNextCycle;
405
406 private:
407 /** Records if there is a fetch redirect on this cycle for each thread. */
408 bool fetchRedirect[Impl::MaxThreads];

--- 143 unchanged lines hidden ---
396 /** Records if the LSQ needs to be updated on the next cycle, so that
397 * IEW knows if there will be activity on the next cycle.
398 */
399 bool updateLSQNextCycle;
400
401 private:
402 /** Records if there is a fetch redirect on this cycle for each thread. */
403 bool fetchRedirect[Impl::MaxThreads];

--- 143 unchanged lines hidden ---