thread_context.hh (13611:c8b7847b4171) | thread_context.hh (13622:ba31c2a23eca) |
---|---|
1/* 2 * Copyright (c) 2011-2012, 2016-2018 ARM Limited 3 * Copyright (c) 2013 Advanced Micro Devices, Inc. 4 * All rights reserved 5 * 6 * The license below extends only to copyright in the software and shall 7 * not be construed as granting a license to any other intellectual 8 * property including but not limited to intellectual property relating --- 81 unchanged lines hidden (view full) --- 90 * ThreadState is an abstract class that exactly defines the 91 * interface; the ExecContext is a more implicit interface that must 92 * be implemented so that the ISA can access whatever state it needs. 93 */ 94class ThreadContext 95{ 96 protected: 97 typedef TheISA::MachInst MachInst; | 1/* 2 * Copyright (c) 2011-2012, 2016-2018 ARM Limited 3 * Copyright (c) 2013 Advanced Micro Devices, Inc. 4 * All rights reserved 5 * 6 * The license below extends only to copyright in the software and shall 7 * not be construed as granting a license to any other intellectual 8 * property including but not limited to intellectual property relating --- 81 unchanged lines hidden (view full) --- 90 * ThreadState is an abstract class that exactly defines the 91 * interface; the ExecContext is a more implicit interface that must 92 * be implemented so that the ISA can access whatever state it needs. 93 */ 94class ThreadContext 95{ 96 protected: 97 typedef TheISA::MachInst MachInst; |
98 typedef TheISA::CCReg CCReg; | |
99 using VecRegContainer = TheISA::VecRegContainer; 100 using VecElem = TheISA::VecElem; 101 using VecPredRegContainer = TheISA::VecPredRegContainer; 102 103 public: 104 105 enum Status 106 { --- 136 unchanged lines hidden (view full) --- 243 /** @} */ 244 245 virtual const VecElem& readVecElem(const RegId& reg) const = 0; 246 247 virtual const VecPredRegContainer& readVecPredReg(const RegId& reg) 248 const = 0; 249 virtual VecPredRegContainer& getWritableVecPredReg(const RegId& reg) = 0; 250 | 98 using VecRegContainer = TheISA::VecRegContainer; 99 using VecElem = TheISA::VecElem; 100 using VecPredRegContainer = TheISA::VecPredRegContainer; 101 102 public: 103 104 enum Status 105 { --- 136 unchanged lines hidden (view full) --- 242 /** @} */ 243 244 virtual const VecElem& readVecElem(const RegId& reg) const = 0; 245 246 virtual const VecPredRegContainer& readVecPredReg(const RegId& reg) 247 const = 0; 248 virtual VecPredRegContainer& getWritableVecPredReg(const RegId& reg) = 0; 249 |
251 virtual CCReg readCCReg(int reg_idx) = 0; | 250 virtual RegVal readCCReg(int reg_idx) = 0; |
252 253 virtual void setIntReg(int reg_idx, RegVal val) = 0; 254 255 virtual void setFloatReg(int reg_idx, RegVal val) = 0; 256 257 virtual void setVecReg(const RegId& reg, const VecRegContainer& val) = 0; 258 259 virtual void setVecElem(const RegId& reg, const VecElem& val) = 0; 260 261 virtual void setVecPredReg(const RegId& reg, 262 const VecPredRegContainer& val) = 0; 263 | 251 252 virtual void setIntReg(int reg_idx, RegVal val) = 0; 253 254 virtual void setFloatReg(int reg_idx, RegVal val) = 0; 255 256 virtual void setVecReg(const RegId& reg, const VecRegContainer& val) = 0; 257 258 virtual void setVecElem(const RegId& reg, const VecElem& val) = 0; 259 260 virtual void setVecPredReg(const RegId& reg, 261 const VecPredRegContainer& val) = 0; 262 |
264 virtual void setCCReg(int reg_idx, CCReg val) = 0; | 263 virtual void setCCReg(int reg_idx, RegVal val) = 0; |
265 266 virtual TheISA::PCState pcState() = 0; 267 268 virtual void pcState(const TheISA::PCState &val) = 0; 269 270 void 271 setNPC(Addr val) 272 { --- 77 unchanged lines hidden (view full) --- 350 virtual void setVecElemFlat(const RegIndex& idx, const ElemIndex& elemIdx, 351 const VecElem& val) = 0; 352 353 virtual const VecPredRegContainer& readVecPredRegFlat(int idx) const = 0; 354 virtual VecPredRegContainer& getWritableVecPredRegFlat(int idx) = 0; 355 virtual void setVecPredRegFlat(int idx, 356 const VecPredRegContainer& val) = 0; 357 | 264 265 virtual TheISA::PCState pcState() = 0; 266 267 virtual void pcState(const TheISA::PCState &val) = 0; 268 269 void 270 setNPC(Addr val) 271 { --- 77 unchanged lines hidden (view full) --- 349 virtual void setVecElemFlat(const RegIndex& idx, const ElemIndex& elemIdx, 350 const VecElem& val) = 0; 351 352 virtual const VecPredRegContainer& readVecPredRegFlat(int idx) const = 0; 353 virtual VecPredRegContainer& getWritableVecPredRegFlat(int idx) = 0; 354 virtual void setVecPredRegFlat(int idx, 355 const VecPredRegContainer& val) = 0; 356 |
358 virtual CCReg readCCRegFlat(int idx) = 0; 359 virtual void setCCRegFlat(int idx, CCReg val) = 0; | 357 virtual RegVal readCCRegFlat(int idx) = 0; 358 virtual void setCCRegFlat(int idx, RegVal val) = 0; |
360 /** @} */ 361 362}; 363 364/** 365 * ProxyThreadContext class that provides a way to implement a 366 * ThreadContext without having to derive from it. ThreadContext is an 367 * abstract class, so anything that derives from it and uses its --- 149 unchanged lines hidden (view full) --- 517 { return actualTC->readVecElem(reg); } 518 519 const VecPredRegContainer& readVecPredReg(const RegId& reg) const 520 { return actualTC->readVecPredReg(reg); } 521 522 VecPredRegContainer& getWritableVecPredReg(const RegId& reg) 523 { return actualTC->getWritableVecPredReg(reg); } 524 | 359 /** @} */ 360 361}; 362 363/** 364 * ProxyThreadContext class that provides a way to implement a 365 * ThreadContext without having to derive from it. ThreadContext is an 366 * abstract class, so anything that derives from it and uses its --- 149 unchanged lines hidden (view full) --- 516 { return actualTC->readVecElem(reg); } 517 518 const VecPredRegContainer& readVecPredReg(const RegId& reg) const 519 { return actualTC->readVecPredReg(reg); } 520 521 VecPredRegContainer& getWritableVecPredReg(const RegId& reg) 522 { return actualTC->getWritableVecPredReg(reg); } 523 |
525 CCReg readCCReg(int reg_idx) | 524 RegVal readCCReg(int reg_idx) |
526 { return actualTC->readCCReg(reg_idx); } 527 528 void setIntReg(int reg_idx, RegVal val) 529 { actualTC->setIntReg(reg_idx, val); } 530 531 void setFloatReg(int reg_idx, RegVal val) 532 { actualTC->setFloatReg(reg_idx, val); } 533 534 void setVecReg(const RegId& reg, const VecRegContainer& val) 535 { actualTC->setVecReg(reg, val); } 536 537 void setVecPredReg(const RegId& reg, const VecPredRegContainer& val) 538 { actualTC->setVecPredReg(reg, val); } 539 540 void setVecElem(const RegId& reg, const VecElem& val) 541 { actualTC->setVecElem(reg, val); } 542 | 525 { return actualTC->readCCReg(reg_idx); } 526 527 void setIntReg(int reg_idx, RegVal val) 528 { actualTC->setIntReg(reg_idx, val); } 529 530 void setFloatReg(int reg_idx, RegVal val) 531 { actualTC->setFloatReg(reg_idx, val); } 532 533 void setVecReg(const RegId& reg, const VecRegContainer& val) 534 { actualTC->setVecReg(reg, val); } 535 536 void setVecPredReg(const RegId& reg, const VecPredRegContainer& val) 537 { actualTC->setVecPredReg(reg, val); } 538 539 void setVecElem(const RegId& reg, const VecElem& val) 540 { actualTC->setVecElem(reg, val); } 541 |
543 void setCCReg(int reg_idx, CCReg val) | 542 void setCCReg(int reg_idx, RegVal val) |
544 { actualTC->setCCReg(reg_idx, val); } 545 546 TheISA::PCState pcState() { return actualTC->pcState(); } 547 548 void pcState(const TheISA::PCState &val) { actualTC->pcState(val); } 549 550 void pcStateNoRecord(const TheISA::PCState &val) { actualTC->pcState(val); } 551 --- 65 unchanged lines hidden (view full) --- 617 { return actualTC->readVecPredRegFlat(id); } 618 619 VecPredRegContainer& getWritableVecPredRegFlat(int id) 620 { return actualTC->getWritableVecPredRegFlat(id); } 621 622 void setVecPredRegFlat(int idx, const VecPredRegContainer& val) 623 { actualTC->setVecPredRegFlat(idx, val); } 624 | 543 { actualTC->setCCReg(reg_idx, val); } 544 545 TheISA::PCState pcState() { return actualTC->pcState(); } 546 547 void pcState(const TheISA::PCState &val) { actualTC->pcState(val); } 548 549 void pcStateNoRecord(const TheISA::PCState &val) { actualTC->pcState(val); } 550 --- 65 unchanged lines hidden (view full) --- 616 { return actualTC->readVecPredRegFlat(id); } 617 618 VecPredRegContainer& getWritableVecPredRegFlat(int id) 619 { return actualTC->getWritableVecPredRegFlat(id); } 620 621 void setVecPredRegFlat(int idx, const VecPredRegContainer& val) 622 { actualTC->setVecPredRegFlat(idx, val); } 623 |
625 CCReg readCCRegFlat(int idx) | 624 RegVal readCCRegFlat(int idx) |
626 { return actualTC->readCCRegFlat(idx); } 627 | 625 { return actualTC->readCCRegFlat(idx); } 626 |
628 void setCCRegFlat(int idx, CCReg val) | 627 void setCCRegFlat(int idx, RegVal val) |
629 { actualTC->setCCRegFlat(idx, val); } 630}; 631 632/** @{ */ 633/** 634 * Thread context serialization helpers 635 * 636 * These helper functions provide a way to the data in a --- 24 unchanged lines hidden --- | 628 { actualTC->setCCRegFlat(idx, val); } 629}; 630 631/** @{ */ 632/** 633 * Thread context serialization helpers 634 * 635 * These helper functions provide a way to the data in a --- 24 unchanged lines hidden --- |