cpu.hh (12107:998b4c54ee51) | cpu.hh (12109:f29e9c5418aa) |
---|---|
1/* 2 * Copyright (c) 2011, 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 --- 82 unchanged lines hidden (view full) --- 91 */ 92class CheckerCPU : public BaseCPU, public ExecContext 93{ 94 protected: 95 typedef TheISA::MachInst MachInst; 96 typedef TheISA::FloatReg FloatReg; 97 typedef TheISA::FloatRegBits FloatRegBits; 98 typedef TheISA::MiscReg MiscReg; | 1/* 2 * Copyright (c) 2011, 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 --- 82 unchanged lines hidden (view full) --- 91 */ 92class CheckerCPU : public BaseCPU, public ExecContext 93{ 94 protected: 95 typedef TheISA::MachInst MachInst; 96 typedef TheISA::FloatReg FloatReg; 97 typedef TheISA::FloatRegBits FloatRegBits; 98 typedef TheISA::MiscReg MiscReg; |
99 using VecRegContainer = TheISA::VecRegContainer; |
|
99 100 /** id attached to all issued requests */ 101 MasterID masterId; 102 public: 103 void init() override; 104 105 typedef CheckerCPUParams Params; 106 CheckerCPU(Params *p); --- 113 unchanged lines hidden (view full) --- 220 FloatRegBits readFloatRegOperandBits(const StaticInst *si, 221 int idx) override 222 { 223 const RegId& reg = si->srcRegIdx(idx); 224 assert(reg.isFloatReg()); 225 return thread->readFloatRegBits(reg.index()); 226 } 227 | 100 101 /** id attached to all issued requests */ 102 MasterID masterId; 103 public: 104 void init() override; 105 106 typedef CheckerCPUParams Params; 107 CheckerCPU(Params *p); --- 113 unchanged lines hidden (view full) --- 221 FloatRegBits readFloatRegOperandBits(const StaticInst *si, 222 int idx) override 223 { 224 const RegId& reg = si->srcRegIdx(idx); 225 assert(reg.isFloatReg()); 226 return thread->readFloatRegBits(reg.index()); 227 } 228 |
229 /** 230 * Read source vector register operand. 231 */ 232 const VecRegContainer& readVecRegOperand(const StaticInst *si, 233 int idx) const override 234 { 235 const RegId& reg = si->srcRegIdx(idx); 236 assert(reg.isVecReg()); 237 return thread->readVecReg(reg); 238 } 239 240 /** 241 * Read destination vector register operand for modification. 242 */ 243 VecRegContainer& getWritableVecRegOperand(const StaticInst *si, 244 int idx) override 245 { 246 const RegId& reg = si->destRegIdx(idx); 247 assert(reg.isVecReg()); 248 return thread->getWritableVecReg(reg); 249 } 250 251 /** Vector Register Lane Interfaces. */ 252 /** @{ */ 253 /** Reads source vector 8bit operand. */ 254 virtual ConstVecLane8 255 readVec8BitLaneOperand(const StaticInst *si, int idx) const 256 override 257 { 258 const RegId& reg = si->destRegIdx(idx); 259 assert(reg.isVecReg()); 260 return thread->readVec8BitLaneReg(reg); 261 } 262 263 /** Reads source vector 16bit operand. */ 264 virtual ConstVecLane16 265 readVec16BitLaneOperand(const StaticInst *si, int idx) const 266 override 267 { 268 const RegId& reg = si->destRegIdx(idx); 269 assert(reg.isVecReg()); 270 return thread->readVec16BitLaneReg(reg); 271 } 272 273 /** Reads source vector 32bit operand. */ 274 virtual ConstVecLane32 275 readVec32BitLaneOperand(const StaticInst *si, int idx) const 276 override 277 { 278 const RegId& reg = si->destRegIdx(idx); 279 assert(reg.isVecReg()); 280 return thread->readVec32BitLaneReg(reg); 281 } 282 283 /** Reads source vector 64bit operand. */ 284 virtual ConstVecLane64 285 readVec64BitLaneOperand(const StaticInst *si, int idx) const 286 override 287 { 288 const RegId& reg = si->destRegIdx(idx); 289 assert(reg.isVecReg()); 290 return thread->readVec64BitLaneReg(reg); 291 } 292 293 /** Write a lane of the destination vector operand. */ 294 template <typename LD> 295 void 296 setVecLaneOperandT(const StaticInst *si, int idx, const LD& val) 297 { 298 const RegId& reg = si->destRegIdx(idx); 299 assert(reg.isVecReg()); 300 return thread->setVecLane(reg, val); 301 } 302 virtual void 303 setVecLaneOperand(const StaticInst *si, int idx, 304 const LaneData<LaneSize::Byte>& val) override 305 { 306 setVecLaneOperandT(si, idx, val); 307 } 308 virtual void 309 setVecLaneOperand(const StaticInst *si, int idx, 310 const LaneData<LaneSize::TwoByte>& val) override 311 { 312 setVecLaneOperandT(si, idx, val); 313 } 314 virtual void 315 setVecLaneOperand(const StaticInst *si, int idx, 316 const LaneData<LaneSize::FourByte>& val) override 317 { 318 setVecLaneOperandT(si, idx, val); 319 } 320 virtual void 321 setVecLaneOperand(const StaticInst *si, int idx, 322 const LaneData<LaneSize::EightByte>& val) override 323 { 324 setVecLaneOperandT(si, idx, val); 325 } 326 /** @} */ 327 328 VecElem readVecElemOperand(const StaticInst *si, int idx) const override 329 { 330 const RegId& reg = si->srcRegIdx(idx); 331 return thread->readVecElem(reg); 332 } 333 |
|
228 CCReg readCCRegOperand(const StaticInst *si, int idx) override 229 { 230 const RegId& reg = si->srcRegIdx(idx); 231 assert(reg.isCCReg()); 232 return thread->readCCReg(reg.index()); 233 } 234 235 template<typename T> 236 void setScalarResult(T&& t) 237 { 238 result.push(InstResult(std::forward<T>(t), 239 InstResult::ResultType::Scalar)); 240 } 241 | 334 CCReg readCCRegOperand(const StaticInst *si, int idx) override 335 { 336 const RegId& reg = si->srcRegIdx(idx); 337 assert(reg.isCCReg()); 338 return thread->readCCReg(reg.index()); 339 } 340 341 template<typename T> 342 void setScalarResult(T&& t) 343 { 344 result.push(InstResult(std::forward<T>(t), 345 InstResult::ResultType::Scalar)); 346 } 347 |
348 template<typename T> 349 void setVecResult(T&& t) 350 { 351 result.push(InstResult(std::forward<T>(t), 352 InstResult::ResultType::VecReg)); 353 } 354 355 template<typename T> 356 void setVecElemResult(T&& t) 357 { 358 result.push(InstResult(std::forward<T>(t), 359 InstResult::ResultType::VecElem)); 360 } 361 |
|
242 void setIntRegOperand(const StaticInst *si, int idx, 243 IntReg val) override 244 { 245 const RegId& reg = si->destRegIdx(idx); 246 assert(reg.isIntReg()); 247 thread->setIntReg(reg.index(), val); 248 setScalarResult(val); 249 } --- 19 unchanged lines hidden (view full) --- 269 void setCCRegOperand(const StaticInst *si, int idx, CCReg val) override 270 { 271 const RegId& reg = si->destRegIdx(idx); 272 assert(reg.isCCReg()); 273 thread->setCCReg(reg.index(), val); 274 setScalarResult((uint64_t)val); 275 } 276 | 362 void setIntRegOperand(const StaticInst *si, int idx, 363 IntReg val) override 364 { 365 const RegId& reg = si->destRegIdx(idx); 366 assert(reg.isIntReg()); 367 thread->setIntReg(reg.index(), val); 368 setScalarResult(val); 369 } --- 19 unchanged lines hidden (view full) --- 389 void setCCRegOperand(const StaticInst *si, int idx, CCReg val) override 390 { 391 const RegId& reg = si->destRegIdx(idx); 392 assert(reg.isCCReg()); 393 thread->setCCReg(reg.index(), val); 394 setScalarResult((uint64_t)val); 395 } 396 |
397 void setVecRegOperand(const StaticInst *si, int idx, 398 const VecRegContainer& val) override 399 { 400 const RegId& reg = si->destRegIdx(idx); 401 assert(reg.isVecReg()); 402 thread->setVecReg(reg, val); 403 setVecResult(val); 404 } 405 406 void setVecElemOperand(const StaticInst *si, int idx, 407 const VecElem val) override 408 { 409 const RegId& reg = si->destRegIdx(idx); 410 assert(reg.isVecElem()); 411 thread->setVecElem(reg, val); 412 setVecElemResult(val); 413 } 414 |
|
277 bool readPredicate() override { return thread->readPredicate(); } 278 void setPredicate(bool val) override 279 { 280 thread->setPredicate(val); 281 } 282 283 TheISA::PCState pcState() const override { return thread->pcState(); } 284 void pcState(const TheISA::PCState &val) override --- 199 unchanged lines hidden --- | 415 bool readPredicate() override { return thread->readPredicate(); } 416 void setPredicate(bool val) override 417 { 418 thread->setPredicate(val); 419 } 420 421 TheISA::PCState pcState() const override { return thread->pcState(); } 422 void pcState(const TheISA::PCState &val) override --- 199 unchanged lines hidden --- |