thread_context.hh (9441:1133617844c8) | thread_context.hh (9920:028e4da64b42) |
---|---|
1/* 2 * Copyright (c) 2011-2012 ARM Limited | 1/* 2 * Copyright (c) 2011-2012 ARM Limited |
3 * Copyright (c) 2013 Advanced Micro Devices, Inc. |
|
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 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated --- 80 unchanged lines hidden (view full) --- 91 */ 92class ThreadContext 93{ 94 protected: 95 typedef TheISA::MachInst MachInst; 96 typedef TheISA::IntReg IntReg; 97 typedef TheISA::FloatReg FloatReg; 98 typedef TheISA::FloatRegBits FloatRegBits; | 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 11 * terms below provided that you ensure that this notice is replicated --- 80 unchanged lines hidden (view full) --- 92 */ 93class ThreadContext 94{ 95 protected: 96 typedef TheISA::MachInst MachInst; 97 typedef TheISA::IntReg IntReg; 98 typedef TheISA::FloatReg FloatReg; 99 typedef TheISA::FloatRegBits FloatRegBits; |
100 typedef TheISA::CCReg CCReg; |
|
99 typedef TheISA::MiscReg MiscReg; 100 public: 101 102 enum Status 103 { 104 /// Running. Instructions should be executed only when 105 /// the context is in this state. 106 Active, --- 88 unchanged lines hidden (view full) --- 195 // New accessors for new decoder. 196 // 197 virtual uint64_t readIntReg(int reg_idx) = 0; 198 199 virtual FloatReg readFloatReg(int reg_idx) = 0; 200 201 virtual FloatRegBits readFloatRegBits(int reg_idx) = 0; 202 | 101 typedef TheISA::MiscReg MiscReg; 102 public: 103 104 enum Status 105 { 106 /// Running. Instructions should be executed only when 107 /// the context is in this state. 108 Active, --- 88 unchanged lines hidden (view full) --- 197 // New accessors for new decoder. 198 // 199 virtual uint64_t readIntReg(int reg_idx) = 0; 200 201 virtual FloatReg readFloatReg(int reg_idx) = 0; 202 203 virtual FloatRegBits readFloatRegBits(int reg_idx) = 0; 204 |
205 virtual CCReg readCCReg(int reg_idx) = 0; 206 |
|
203 virtual void setIntReg(int reg_idx, uint64_t val) = 0; 204 205 virtual void setFloatReg(int reg_idx, FloatReg val) = 0; 206 207 virtual void setFloatRegBits(int reg_idx, FloatRegBits val) = 0; 208 | 207 virtual void setIntReg(int reg_idx, uint64_t val) = 0; 208 209 virtual void setFloatReg(int reg_idx, FloatReg val) = 0; 210 211 virtual void setFloatRegBits(int reg_idx, FloatRegBits val) = 0; 212 |
213 virtual void setCCReg(int reg_idx, CCReg val) = 0; 214 |
|
209 virtual TheISA::PCState pcState() = 0; 210 211 virtual void pcState(const TheISA::PCState &val) = 0; 212 213 virtual void pcStateNoRecord(const TheISA::PCState &val) = 0; 214 215 virtual Addr instAddr() = 0; 216 --- 6 unchanged lines hidden (view full) --- 223 virtual MiscReg readMiscReg(int misc_reg) = 0; 224 225 virtual void setMiscRegNoEffect(int misc_reg, const MiscReg &val) = 0; 226 227 virtual void setMiscReg(int misc_reg, const MiscReg &val) = 0; 228 229 virtual int flattenIntIndex(int reg) = 0; 230 virtual int flattenFloatIndex(int reg) = 0; | 215 virtual TheISA::PCState pcState() = 0; 216 217 virtual void pcState(const TheISA::PCState &val) = 0; 218 219 virtual void pcStateNoRecord(const TheISA::PCState &val) = 0; 220 221 virtual Addr instAddr() = 0; 222 --- 6 unchanged lines hidden (view full) --- 229 virtual MiscReg readMiscReg(int misc_reg) = 0; 230 231 virtual void setMiscRegNoEffect(int misc_reg, const MiscReg &val) = 0; 232 233 virtual void setMiscReg(int misc_reg, const MiscReg &val) = 0; 234 235 virtual int flattenIntIndex(int reg) = 0; 236 virtual int flattenFloatIndex(int reg) = 0; |
237 virtual int flattenCCIndex(int reg) = 0; |
|
231 232 virtual uint64_t 233 readRegOtherThread(int misc_reg, ThreadID tid) 234 { 235 return 0; 236 } 237 238 virtual void --- 39 unchanged lines hidden (view full) --- 278 virtual void setIntRegFlat(int idx, uint64_t val) = 0; 279 280 virtual FloatReg readFloatRegFlat(int idx) = 0; 281 virtual void setFloatRegFlat(int idx, FloatReg val) = 0; 282 283 virtual FloatRegBits readFloatRegBitsFlat(int idx) = 0; 284 virtual void setFloatRegBitsFlat(int idx, FloatRegBits val) = 0; 285 | 238 239 virtual uint64_t 240 readRegOtherThread(int misc_reg, ThreadID tid) 241 { 242 return 0; 243 } 244 245 virtual void --- 39 unchanged lines hidden (view full) --- 285 virtual void setIntRegFlat(int idx, uint64_t val) = 0; 286 287 virtual FloatReg readFloatRegFlat(int idx) = 0; 288 virtual void setFloatRegFlat(int idx, FloatReg val) = 0; 289 290 virtual FloatRegBits readFloatRegBitsFlat(int idx) = 0; 291 virtual void setFloatRegBitsFlat(int idx, FloatRegBits val) = 0; 292 |
293 virtual CCReg readCCRegFlat(int idx) = 0; 294 virtual void setCCRegFlat(int idx, CCReg val) = 0; |
|
286 /** @} */ 287 288}; 289 290/** 291 * ProxyThreadContext class that provides a way to implement a 292 * ThreadContext without having to derive from it. ThreadContext is an 293 * abstract class, so anything that derives from it and uses its --- 92 unchanged lines hidden (view full) --- 386 { return actualTC->readIntReg(reg_idx); } 387 388 FloatReg readFloatReg(int reg_idx) 389 { return actualTC->readFloatReg(reg_idx); } 390 391 FloatRegBits readFloatRegBits(int reg_idx) 392 { return actualTC->readFloatRegBits(reg_idx); } 393 | 295 /** @} */ 296 297}; 298 299/** 300 * ProxyThreadContext class that provides a way to implement a 301 * ThreadContext without having to derive from it. ThreadContext is an 302 * abstract class, so anything that derives from it and uses its --- 92 unchanged lines hidden (view full) --- 395 { return actualTC->readIntReg(reg_idx); } 396 397 FloatReg readFloatReg(int reg_idx) 398 { return actualTC->readFloatReg(reg_idx); } 399 400 FloatRegBits readFloatRegBits(int reg_idx) 401 { return actualTC->readFloatRegBits(reg_idx); } 402 |
403 CCReg readCCReg(int reg_idx) 404 { return actualTC->readCCReg(reg_idx); } 405 |
|
394 void setIntReg(int reg_idx, uint64_t val) 395 { actualTC->setIntReg(reg_idx, val); } 396 397 void setFloatReg(int reg_idx, FloatReg val) 398 { actualTC->setFloatReg(reg_idx, val); } 399 400 void setFloatRegBits(int reg_idx, FloatRegBits val) 401 { actualTC->setFloatRegBits(reg_idx, val); } 402 | 406 void setIntReg(int reg_idx, uint64_t val) 407 { actualTC->setIntReg(reg_idx, val); } 408 409 void setFloatReg(int reg_idx, FloatReg val) 410 { actualTC->setFloatReg(reg_idx, val); } 411 412 void setFloatRegBits(int reg_idx, FloatRegBits val) 413 { actualTC->setFloatRegBits(reg_idx, val); } 414 |
415 void setCCReg(int reg_idx, CCReg val) 416 { actualTC->setCCReg(reg_idx, val); } 417 |
|
403 TheISA::PCState pcState() { return actualTC->pcState(); } 404 405 void pcState(const TheISA::PCState &val) { actualTC->pcState(val); } 406 407 void pcStateNoRecord(const TheISA::PCState &val) { actualTC->pcState(val); } 408 409 Addr instAddr() { return actualTC->instAddr(); } 410 Addr nextInstAddr() { return actualTC->nextInstAddr(); } --- 17 unchanged lines hidden (view full) --- 428 { return actualTC->setMiscReg(misc_reg, val); } 429 430 int flattenIntIndex(int reg) 431 { return actualTC->flattenIntIndex(reg); } 432 433 int flattenFloatIndex(int reg) 434 { return actualTC->flattenFloatIndex(reg); } 435 | 418 TheISA::PCState pcState() { return actualTC->pcState(); } 419 420 void pcState(const TheISA::PCState &val) { actualTC->pcState(val); } 421 422 void pcStateNoRecord(const TheISA::PCState &val) { actualTC->pcState(val); } 423 424 Addr instAddr() { return actualTC->instAddr(); } 425 Addr nextInstAddr() { return actualTC->nextInstAddr(); } --- 17 unchanged lines hidden (view full) --- 443 { return actualTC->setMiscReg(misc_reg, val); } 444 445 int flattenIntIndex(int reg) 446 { return actualTC->flattenIntIndex(reg); } 447 448 int flattenFloatIndex(int reg) 449 { return actualTC->flattenFloatIndex(reg); } 450 |
451 int flattenCCIndex(int reg) 452 { return actualTC->flattenCCIndex(reg); } 453 |
|
436 unsigned readStCondFailures() 437 { return actualTC->readStCondFailures(); } 438 439 void setStCondFailures(unsigned sc_failures) 440 { actualTC->setStCondFailures(sc_failures); } 441 442 // @todo: Fix this! 443 bool misspeculating() { return actualTC->misspeculating(); } --- 15 unchanged lines hidden (view full) --- 459 void setFloatRegFlat(int idx, FloatReg val) 460 { actualTC->setFloatRegFlat(idx, val); } 461 462 FloatRegBits readFloatRegBitsFlat(int idx) 463 { return actualTC->readFloatRegBitsFlat(idx); } 464 465 void setFloatRegBitsFlat(int idx, FloatRegBits val) 466 { actualTC->setFloatRegBitsFlat(idx, val); } | 454 unsigned readStCondFailures() 455 { return actualTC->readStCondFailures(); } 456 457 void setStCondFailures(unsigned sc_failures) 458 { actualTC->setStCondFailures(sc_failures); } 459 460 // @todo: Fix this! 461 bool misspeculating() { return actualTC->misspeculating(); } --- 15 unchanged lines hidden (view full) --- 477 void setFloatRegFlat(int idx, FloatReg val) 478 { actualTC->setFloatRegFlat(idx, val); } 479 480 FloatRegBits readFloatRegBitsFlat(int idx) 481 { return actualTC->readFloatRegBitsFlat(idx); } 482 483 void setFloatRegBitsFlat(int idx, FloatRegBits val) 484 { actualTC->setFloatRegBitsFlat(idx, val); } |
485 486 CCReg readCCRegFlat(int idx) 487 { return actualTC->readCCRegFlat(idx); } 488 489 void setCCRegFlat(int idx, CCReg val) 490 { actualTC->setCCRegFlat(idx, val); } |
|
467}; 468 469/** @{ */ 470/** 471 * Thread context serialization helpers 472 * 473 * These helper functions provide a way to the data in a 474 * ThreadContext. They are provided as separate helper function since --- 23 unchanged lines hidden --- | 491}; 492 493/** @{ */ 494/** 495 * Thread context serialization helpers 496 * 497 * These helper functions provide a way to the data in a 498 * ThreadContext. They are provided as separate helper function since --- 23 unchanged lines hidden --- |