fetch.hh (13641:648f3106ebdf) | fetch.hh (14195:c5efdb3319aa) |
---|---|
1/* 2 * Copyright (c) 2010-2012, 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 --- 45 unchanged lines hidden (view full) --- 54#include "cpu/translation.hh" 55#include "enums/FetchPolicy.hh" 56#include "mem/packet.hh" 57#include "mem/port.hh" 58#include "sim/eventq.hh" 59#include "sim/probe/probe.hh" 60 61struct DerivO3CPUParams; | 1/* 2 * Copyright (c) 2010-2012, 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 --- 45 unchanged lines hidden (view full) --- 54#include "cpu/translation.hh" 55#include "enums/FetchPolicy.hh" 56#include "mem/packet.hh" 57#include "mem/port.hh" 58#include "sim/eventq.hh" 59#include "sim/probe/probe.hh" 60 61struct DerivO3CPUParams; |
62template <class Impl> 63class FullO3CPU; |
|
62 63/** 64 * DefaultFetch class handles both single threaded and SMT fetch. Its 65 * width is specified by the parameters; each cycle it tries to fetch 66 * that many instructions. It supports using a branch predictor to 67 * predict direction and targets. 68 * It supports the idling functionality of the CPU by indicating to 69 * the CPU when it is active and inactive. --- 10 unchanged lines hidden (view full) --- 80 81 /** Typedefs from the CPU policy. */ 82 typedef typename CPUPol::FetchStruct FetchStruct; 83 typedef typename CPUPol::TimeStruct TimeStruct; 84 85 /** Typedefs from ISA. */ 86 typedef TheISA::MachInst MachInst; 87 | 64 65/** 66 * DefaultFetch class handles both single threaded and SMT fetch. Its 67 * width is specified by the parameters; each cycle it tries to fetch 68 * that many instructions. It supports using a branch predictor to 69 * predict direction and targets. 70 * It supports the idling functionality of the CPU by indicating to 71 * the CPU when it is active and inactive. --- 10 unchanged lines hidden (view full) --- 82 83 /** Typedefs from the CPU policy. */ 84 typedef typename CPUPol::FetchStruct FetchStruct; 85 typedef typename CPUPol::TimeStruct TimeStruct; 86 87 /** Typedefs from ISA. */ 88 typedef TheISA::MachInst MachInst; 89 |
90 /** 91 * IcachePort class for instruction fetch. 92 */ 93 class IcachePort : public MasterPort 94 { 95 protected: 96 /** Pointer to fetch. */ 97 DefaultFetch<Impl> *fetch; 98 99 public: 100 /** Default constructor. */ 101 IcachePort(DefaultFetch<Impl> *_fetch, FullO3CPU<Impl>* _cpu) 102 : MasterPort(_cpu->name() + ".icache_port", _cpu), fetch(_fetch) 103 { } 104 105 protected: 106 107 /** Timing version of receive. Handles setting fetch to the 108 * proper status to start fetching. */ 109 virtual bool recvTimingResp(PacketPtr pkt); 110 111 /** Handles doing a retry of a failed fetch. */ 112 virtual void recvReqRetry(); 113 }; 114 |
|
88 class FetchTranslation : public BaseTLB::Translation 89 { 90 protected: 91 DefaultFetch<Impl> *fetch; 92 93 public: 94 FetchTranslation(DefaultFetch<Impl> *_fetch) 95 : fetch(_fetch) --- 252 unchanged lines hidden (view full) --- 348 Addr fetchBufferAlignPC(Addr addr) 349 { 350 return (addr & ~(fetchBufferMask)); 351 } 352 353 /** The decoder. */ 354 TheISA::Decoder *decoder[Impl::MaxThreads]; 355 | 115 class FetchTranslation : public BaseTLB::Translation 116 { 117 protected: 118 DefaultFetch<Impl> *fetch; 119 120 public: 121 FetchTranslation(DefaultFetch<Impl> *_fetch) 122 : fetch(_fetch) --- 252 unchanged lines hidden (view full) --- 375 Addr fetchBufferAlignPC(Addr addr) 376 { 377 return (addr & ~(fetchBufferMask)); 378 } 379 380 /** The decoder. */ 381 TheISA::Decoder *decoder[Impl::MaxThreads]; 382 |
383 MasterPort &getInstPort() { return icachePort; } 384 |
|
356 private: 357 DynInstPtr buildInst(ThreadID tid, StaticInstPtr staticInst, 358 StaticInstPtr curMacroop, TheISA::PCState thisPC, 359 TheISA::PCState nextPC, bool trace); 360 361 /** Returns the appropriate thread to fetch, given the fetch policy. */ 362 ThreadID getFetchingThread(); 363 --- 142 unchanged lines hidden (view full) --- 506 /** Thread ID being fetched. */ 507 ThreadID threadFetched; 508 509 /** Checks if there is an interrupt pending. If there is, fetch 510 * must stop once it is not fetching PAL instructions. 511 */ 512 bool interruptPending; 513 | 385 private: 386 DynInstPtr buildInst(ThreadID tid, StaticInstPtr staticInst, 387 StaticInstPtr curMacroop, TheISA::PCState thisPC, 388 TheISA::PCState nextPC, bool trace); 389 390 /** Returns the appropriate thread to fetch, given the fetch policy. */ 391 ThreadID getFetchingThread(); 392 --- 142 unchanged lines hidden (view full) --- 535 /** Thread ID being fetched. */ 536 ThreadID threadFetched; 537 538 /** Checks if there is an interrupt pending. If there is, fetch 539 * must stop once it is not fetching PAL instructions. 540 */ 541 bool interruptPending; 542 |
543 /** Instruction port. Note that it has to appear after the fetch stage. */ 544 IcachePort icachePort; 545 |
|
514 /** Set to true if a pipelined I-cache request should be issued. */ 515 bool issuePipelinedIfetch[Impl::MaxThreads]; 516 517 /** Event used to delay fault generation of translation faults */ 518 FinishTranslationEvent finishTranslationEvent; 519 520 // @todo: Consider making these vectors and tracking on a per thread basis. 521 /** Stat for total number of cycles stalled due to an icache miss. */ --- 52 unchanged lines hidden --- | 546 /** Set to true if a pipelined I-cache request should be issued. */ 547 bool issuePipelinedIfetch[Impl::MaxThreads]; 548 549 /** Event used to delay fault generation of translation faults */ 550 FinishTranslationEvent finishTranslationEvent; 551 552 // @todo: Consider making these vectors and tracking on a per thread basis. 553 /** Stat for total number of cycles stalled due to an icache miss. */ --- 52 unchanged lines hidden --- |