thread_context.hh (12106:7784fac1b159) | thread_context.hh (12109:f29e9c5418aa) |
---|---|
1/* | 1/* |
2 * Copyright (c) 2011-2012 ARM Limited | 2 * Copyright (c) 2011-2012, 2016 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 9 * to a hardware implementation of the functionality of the software 10 * licensed hereunder. You may use the software subject to the license --- 84 unchanged lines hidden (view full) --- 95{ 96 protected: 97 typedef TheISA::MachInst MachInst; 98 typedef TheISA::IntReg IntReg; 99 typedef TheISA::FloatReg FloatReg; 100 typedef TheISA::FloatRegBits FloatRegBits; 101 typedef TheISA::CCReg CCReg; 102 typedef TheISA::MiscReg MiscReg; | 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 9 * to a hardware implementation of the functionality of the software 10 * licensed hereunder. You may use the software subject to the license --- 84 unchanged lines hidden (view full) --- 95{ 96 protected: 97 typedef TheISA::MachInst MachInst; 98 typedef TheISA::IntReg IntReg; 99 typedef TheISA::FloatReg FloatReg; 100 typedef TheISA::FloatRegBits FloatRegBits; 101 typedef TheISA::CCReg CCReg; 102 typedef TheISA::MiscReg MiscReg; |
103 using VecRegContainer = TheISA::VecRegContainer; 104 using VecElem = TheISA::VecElem; |
|
103 public: 104 105 enum Status 106 { 107 /// Running. Instructions should be executed only when 108 /// the context is in this state. 109 Active, 110 --- 96 unchanged lines hidden (view full) --- 207 // New accessors for new decoder. 208 // 209 virtual uint64_t readIntReg(int reg_idx) = 0; 210 211 virtual FloatReg readFloatReg(int reg_idx) = 0; 212 213 virtual FloatRegBits readFloatRegBits(int reg_idx) = 0; 214 | 105 public: 106 107 enum Status 108 { 109 /// Running. Instructions should be executed only when 110 /// the context is in this state. 111 Active, 112 --- 96 unchanged lines hidden (view full) --- 209 // New accessors for new decoder. 210 // 211 virtual uint64_t readIntReg(int reg_idx) = 0; 212 213 virtual FloatReg readFloatReg(int reg_idx) = 0; 214 215 virtual FloatRegBits readFloatRegBits(int reg_idx) = 0; 216 |
217 virtual const VecRegContainer& readVecReg(const RegId& reg) const = 0; 218 virtual VecRegContainer& getWritableVecReg(const RegId& reg) = 0; 219 220 /** Vector Register Lane Interfaces. */ 221 /** @{ */ 222 /** Reads source vector 8bit operand. */ 223 virtual ConstVecLane8 224 readVec8BitLaneReg(const RegId& reg) const = 0; 225 226 /** Reads source vector 16bit operand. */ 227 virtual ConstVecLane16 228 readVec16BitLaneReg(const RegId& reg) const = 0; 229 230 /** Reads source vector 32bit operand. */ 231 virtual ConstVecLane32 232 readVec32BitLaneReg(const RegId& reg) const = 0; 233 234 /** Reads source vector 64bit operand. */ 235 virtual ConstVecLane64 236 readVec64BitLaneReg(const RegId& reg) const = 0; 237 238 /** Write a lane of the destination vector register. */ 239 virtual void setVecLane(const RegId& reg, 240 const LaneData<LaneSize::Byte>& val) = 0; 241 virtual void setVecLane(const RegId& reg, 242 const LaneData<LaneSize::TwoByte>& val) = 0; 243 virtual void setVecLane(const RegId& reg, 244 const LaneData<LaneSize::FourByte>& val) = 0; 245 virtual void setVecLane(const RegId& reg, 246 const LaneData<LaneSize::EightByte>& val) = 0; 247 /** @} */ 248 249 virtual const VecElem& readVecElem(const RegId& reg) const = 0; 250 |
|
215 virtual CCReg readCCReg(int reg_idx) = 0; 216 217 virtual void setIntReg(int reg_idx, uint64_t val) = 0; 218 219 virtual void setFloatReg(int reg_idx, FloatReg val) = 0; 220 221 virtual void setFloatRegBits(int reg_idx, FloatRegBits val) = 0; 222 | 251 virtual CCReg readCCReg(int reg_idx) = 0; 252 253 virtual void setIntReg(int reg_idx, uint64_t val) = 0; 254 255 virtual void setFloatReg(int reg_idx, FloatReg val) = 0; 256 257 virtual void setFloatRegBits(int reg_idx, FloatRegBits val) = 0; 258 |
259 virtual void setVecReg(const RegId& reg, const VecRegContainer& val) = 0; 260 261 virtual void setVecElem(const RegId& reg, const VecElem& val) = 0; 262 |
|
223 virtual void setCCReg(int reg_idx, CCReg val) = 0; 224 225 virtual TheISA::PCState pcState() = 0; 226 227 virtual void pcState(const TheISA::PCState &val) = 0; 228 229 void 230 setNPC(Addr val) --- 67 unchanged lines hidden (view full) --- 298 virtual void setIntRegFlat(int idx, uint64_t val) = 0; 299 300 virtual FloatReg readFloatRegFlat(int idx) = 0; 301 virtual void setFloatRegFlat(int idx, FloatReg val) = 0; 302 303 virtual FloatRegBits readFloatRegBitsFlat(int idx) = 0; 304 virtual void setFloatRegBitsFlat(int idx, FloatRegBits val) = 0; 305 | 263 virtual void setCCReg(int reg_idx, CCReg val) = 0; 264 265 virtual TheISA::PCState pcState() = 0; 266 267 virtual void pcState(const TheISA::PCState &val) = 0; 268 269 void 270 setNPC(Addr val) --- 67 unchanged lines hidden (view full) --- 338 virtual void setIntRegFlat(int idx, uint64_t val) = 0; 339 340 virtual FloatReg readFloatRegFlat(int idx) = 0; 341 virtual void setFloatRegFlat(int idx, FloatReg val) = 0; 342 343 virtual FloatRegBits readFloatRegBitsFlat(int idx) = 0; 344 virtual void setFloatRegBitsFlat(int idx, FloatRegBits val) = 0; 345 |
346 virtual const VecRegContainer& readVecRegFlat(int idx) const = 0; 347 virtual VecRegContainer& getWritableVecRegFlat(int idx) = 0; 348 virtual void setVecRegFlat(int idx, const VecRegContainer& val) = 0; 349 350 virtual const VecElem& readVecElemFlat(const RegIndex& idx, 351 const ElemIndex& elemIdx) const = 0; 352 virtual void setVecElemFlat(const RegIndex& idx, const ElemIndex& elemIdx, 353 const VecElem& val) = 0; 354 |
|
306 virtual CCReg readCCRegFlat(int idx) = 0; 307 virtual void setCCRegFlat(int idx, CCReg val) = 0; 308 /** @} */ 309 310}; 311 312/** 313 * ProxyThreadContext class that provides a way to implement a --- 102 unchanged lines hidden (view full) --- 416 { return actualTC->readIntReg(reg_idx); } 417 418 FloatReg readFloatReg(int reg_idx) 419 { return actualTC->readFloatReg(reg_idx); } 420 421 FloatRegBits readFloatRegBits(int reg_idx) 422 { return actualTC->readFloatRegBits(reg_idx); } 423 | 355 virtual CCReg readCCRegFlat(int idx) = 0; 356 virtual void setCCRegFlat(int idx, CCReg val) = 0; 357 /** @} */ 358 359}; 360 361/** 362 * ProxyThreadContext class that provides a way to implement a --- 102 unchanged lines hidden (view full) --- 465 { return actualTC->readIntReg(reg_idx); } 466 467 FloatReg readFloatReg(int reg_idx) 468 { return actualTC->readFloatReg(reg_idx); } 469 470 FloatRegBits readFloatRegBits(int reg_idx) 471 { return actualTC->readFloatRegBits(reg_idx); } 472 |
473 const VecRegContainer& readVecReg(const RegId& reg) const 474 { return actualTC->readVecReg(reg); } 475 476 VecRegContainer& getWritableVecReg(const RegId& reg) 477 { return actualTC->getWritableVecReg(reg); } 478 479 /** Vector Register Lane Interfaces. */ 480 /** @{ */ 481 /** Reads source vector 8bit operand. */ 482 ConstVecLane8 483 readVec8BitLaneReg(const RegId& reg) const 484 { return actualTC->readVec8BitLaneReg(reg); } 485 486 /** Reads source vector 16bit operand. */ 487 ConstVecLane16 488 readVec16BitLaneReg(const RegId& reg) const 489 { return actualTC->readVec16BitLaneReg(reg); } 490 491 /** Reads source vector 32bit operand. */ 492 ConstVecLane32 493 readVec32BitLaneReg(const RegId& reg) const 494 { return actualTC->readVec32BitLaneReg(reg); } 495 496 /** Reads source vector 64bit operand. */ 497 ConstVecLane64 498 readVec64BitLaneReg(const RegId& reg) const 499 { return actualTC->readVec64BitLaneReg(reg); } 500 501 /** Write a lane of the destination vector register. */ 502 virtual void setVecLane(const RegId& reg, 503 const LaneData<LaneSize::Byte>& val) 504 { return actualTC->setVecLane(reg, val); } 505 virtual void setVecLane(const RegId& reg, 506 const LaneData<LaneSize::TwoByte>& val) 507 { return actualTC->setVecLane(reg, val); } 508 virtual void setVecLane(const RegId& reg, 509 const LaneData<LaneSize::FourByte>& val) 510 { return actualTC->setVecLane(reg, val); } 511 virtual void setVecLane(const RegId& reg, 512 const LaneData<LaneSize::EightByte>& val) 513 { return actualTC->setVecLane(reg, val); } 514 /** @} */ 515 516 const VecElem& readVecElem(const RegId& reg) const 517 { return actualTC->readVecElem(reg); } 518 |
|
424 CCReg readCCReg(int reg_idx) 425 { return actualTC->readCCReg(reg_idx); } 426 427 void setIntReg(int reg_idx, uint64_t val) 428 { actualTC->setIntReg(reg_idx, val); } 429 430 void setFloatReg(int reg_idx, FloatReg val) 431 { actualTC->setFloatReg(reg_idx, val); } 432 433 void setFloatRegBits(int reg_idx, FloatRegBits val) 434 { actualTC->setFloatRegBits(reg_idx, val); } 435 | 519 CCReg readCCReg(int reg_idx) 520 { return actualTC->readCCReg(reg_idx); } 521 522 void setIntReg(int reg_idx, uint64_t val) 523 { actualTC->setIntReg(reg_idx, val); } 524 525 void setFloatReg(int reg_idx, FloatReg val) 526 { actualTC->setFloatReg(reg_idx, val); } 527 528 void setFloatRegBits(int reg_idx, FloatRegBits val) 529 { actualTC->setFloatRegBits(reg_idx, val); } 530 |
531 void setVecReg(const RegId& reg, const VecRegContainer& val) 532 { actualTC->setVecReg(reg, val); } 533 534 void setVecElem(const RegId& reg, const VecElem& val) 535 { actualTC->setVecElem(reg, val); } 536 |
|
436 void setCCReg(int reg_idx, CCReg val) 437 { actualTC->setCCReg(reg_idx, val); } 438 439 TheISA::PCState pcState() { return actualTC->pcState(); } 440 441 void pcState(const TheISA::PCState &val) { actualTC->pcState(val); } 442 443 void pcStateNoRecord(const TheISA::PCState &val) { actualTC->pcState(val); } --- 46 unchanged lines hidden (view full) --- 490 { actualTC->setFloatRegFlat(idx, val); } 491 492 FloatRegBits readFloatRegBitsFlat(int idx) 493 { return actualTC->readFloatRegBitsFlat(idx); } 494 495 void setFloatRegBitsFlat(int idx, FloatRegBits val) 496 { actualTC->setFloatRegBitsFlat(idx, val); } 497 | 537 void setCCReg(int reg_idx, CCReg val) 538 { actualTC->setCCReg(reg_idx, val); } 539 540 TheISA::PCState pcState() { return actualTC->pcState(); } 541 542 void pcState(const TheISA::PCState &val) { actualTC->pcState(val); } 543 544 void pcStateNoRecord(const TheISA::PCState &val) { actualTC->pcState(val); } --- 46 unchanged lines hidden (view full) --- 591 { actualTC->setFloatRegFlat(idx, val); } 592 593 FloatRegBits readFloatRegBitsFlat(int idx) 594 { return actualTC->readFloatRegBitsFlat(idx); } 595 596 void setFloatRegBitsFlat(int idx, FloatRegBits val) 597 { actualTC->setFloatRegBitsFlat(idx, val); } 598 |
599 const VecRegContainer& readVecRegFlat(int id) const 600 { return actualTC->readVecRegFlat(id); } 601 602 VecRegContainer& getWritableVecRegFlat(int id) 603 { return actualTC->getWritableVecRegFlat(id); } 604 605 void setVecRegFlat(int idx, const VecRegContainer& val) 606 { actualTC->setVecRegFlat(idx, val); } 607 608 const VecElem& readVecElemFlat(const RegIndex& id, 609 const ElemIndex& elemIndex) const 610 { return actualTC->readVecElemFlat(id, elemIndex); } 611 612 void setVecElemFlat(const RegIndex& id, const ElemIndex& elemIndex, 613 const VecElem& val) 614 { actualTC->setVecElemFlat(id, elemIndex, val); } 615 |
|
498 CCReg readCCRegFlat(int idx) 499 { return actualTC->readCCRegFlat(idx); } 500 501 void setCCRegFlat(int idx, CCReg val) 502 { actualTC->setCCRegFlat(idx, val); } 503}; 504 505/** @{ */ --- 28 unchanged lines hidden --- | 616 CCReg readCCRegFlat(int idx) 617 { return actualTC->readCCRegFlat(idx); } 618 619 void setCCRegFlat(int idx, CCReg val) 620 { actualTC->setCCRegFlat(idx, val); } 621}; 622 623/** @{ */ --- 28 unchanged lines hidden --- |