cpu.cc (13601:f5c84915eb7f) | cpu.cc (13610:5d5404ac6288) |
---|---|
1/* 2 * Copyright (c) 2011-2012, 2014, 2016, 2017, 2019 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 --- 145 unchanged lines hidden (view full) --- 154 commit(this, params), 155 156 /* It is mandatory that all SMT threads use the same renaming mode as 157 * they are sharing registers and rename */ 158 vecMode(RenameMode<TheISA::ISA>::init(params->isa[0])), 159 regFile(params->numPhysIntRegs, 160 params->numPhysFloatRegs, 161 params->numPhysVecRegs, | 1/* 2 * Copyright (c) 2011-2012, 2014, 2016, 2017, 2019 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 --- 145 unchanged lines hidden (view full) --- 154 commit(this, params), 155 156 /* It is mandatory that all SMT threads use the same renaming mode as 157 * they are sharing registers and rename */ 158 vecMode(RenameMode<TheISA::ISA>::init(params->isa[0])), 159 regFile(params->numPhysIntRegs, 160 params->numPhysFloatRegs, 161 params->numPhysVecRegs, |
162 params->numPhysVecPredRegs, |
|
162 params->numPhysCCRegs, 163 vecMode), 164 165 freeList(name() + ".freelist", ®File), 166 167 rob(this, params), 168 169 scoreboard(name() + ".scoreboard", --- 83 unchanged lines hidden (view full) --- 253 "or edit your workload size."); 254 } 255 } 256 257 //Make Sure That this a Valid Architeture 258 assert(params->numPhysIntRegs >= numThreads * TheISA::NumIntRegs); 259 assert(params->numPhysFloatRegs >= numThreads * TheISA::NumFloatRegs); 260 assert(params->numPhysVecRegs >= numThreads * TheISA::NumVecRegs); | 163 params->numPhysCCRegs, 164 vecMode), 165 166 freeList(name() + ".freelist", ®File), 167 168 rob(this, params), 169 170 scoreboard(name() + ".scoreboard", --- 83 unchanged lines hidden (view full) --- 254 "or edit your workload size."); 255 } 256 } 257 258 //Make Sure That this a Valid Architeture 259 assert(params->numPhysIntRegs >= numThreads * TheISA::NumIntRegs); 260 assert(params->numPhysFloatRegs >= numThreads * TheISA::NumFloatRegs); 261 assert(params->numPhysVecRegs >= numThreads * TheISA::NumVecRegs); |
262 assert(params->numPhysVecPredRegs >= numThreads * TheISA::NumVecPredRegs); |
|
261 assert(params->numPhysCCRegs >= numThreads * TheISA::NumCCRegs); 262 263 rename.setScoreboard(&scoreboard); 264 iew.setScoreboard(&scoreboard); 265 266 // Setup the rename map for whichever stages need it. 267 for (ThreadID tid = 0; tid < numThreads; tid++) { 268 isa[tid] = params->isa[tid]; --- 51 unchanged lines hidden (view full) --- 320 RegId lrid = RegId(VecElemClass, ridx, ldx); 321 PhysRegIdPtr phys_elem = freeList.getVecElem(); 322 renameMap[tid].setEntry(lrid, phys_elem); 323 commitRenameMap[tid].setEntry(lrid, phys_elem); 324 } 325 } 326 } 327 | 263 assert(params->numPhysCCRegs >= numThreads * TheISA::NumCCRegs); 264 265 rename.setScoreboard(&scoreboard); 266 iew.setScoreboard(&scoreboard); 267 268 // Setup the rename map for whichever stages need it. 269 for (ThreadID tid = 0; tid < numThreads; tid++) { 270 isa[tid] = params->isa[tid]; --- 51 unchanged lines hidden (view full) --- 322 RegId lrid = RegId(VecElemClass, ridx, ldx); 323 PhysRegIdPtr phys_elem = freeList.getVecElem(); 324 renameMap[tid].setEntry(lrid, phys_elem); 325 commitRenameMap[tid].setEntry(lrid, phys_elem); 326 } 327 } 328 } 329 |
330 for (RegIndex ridx = 0; ridx < TheISA::NumVecPredRegs; ++ridx) { 331 PhysRegIdPtr phys_reg = freeList.getVecPredReg(); 332 renameMap[tid].setEntry(RegId(VecPredRegClass, ridx), phys_reg); 333 commitRenameMap[tid].setEntry( 334 RegId(VecPredRegClass, ridx), phys_reg); 335 } 336 |
|
328 for (RegIndex ridx = 0; ridx < TheISA::NumCCRegs; ++ridx) { 329 PhysRegIdPtr phys_reg = freeList.getCCReg(); 330 renameMap[tid].setEntry(RegId(CCRegClass, ridx), phys_reg); 331 commitRenameMap[tid].setEntry(RegId(CCRegClass, ridx), phys_reg); 332 } 333 } 334 335 rename.setRenameMap(renameMap); --- 197 unchanged lines hidden (view full) --- 533 .desc("number of vector regfile reads") 534 .prereq(vecRegfileReads); 535 536 vecRegfileWrites 537 .name(name() + ".vec_regfile_writes") 538 .desc("number of vector regfile writes") 539 .prereq(vecRegfileWrites); 540 | 337 for (RegIndex ridx = 0; ridx < TheISA::NumCCRegs; ++ridx) { 338 PhysRegIdPtr phys_reg = freeList.getCCReg(); 339 renameMap[tid].setEntry(RegId(CCRegClass, ridx), phys_reg); 340 commitRenameMap[tid].setEntry(RegId(CCRegClass, ridx), phys_reg); 341 } 342 } 343 344 rename.setRenameMap(renameMap); --- 197 unchanged lines hidden (view full) --- 542 .desc("number of vector regfile reads") 543 .prereq(vecRegfileReads); 544 545 vecRegfileWrites 546 .name(name() + ".vec_regfile_writes") 547 .desc("number of vector regfile writes") 548 .prereq(vecRegfileWrites); 549 |
550 vecPredRegfileReads 551 .name(name() + ".pred_regfile_reads") 552 .desc("number of predicate regfile reads") 553 .prereq(vecPredRegfileReads); 554 555 vecPredRegfileWrites 556 .name(name() + ".pred_regfile_writes") 557 .desc("number of predicate regfile writes") 558 .prereq(vecPredRegfileWrites); 559 |
|
541 ccRegfileReads 542 .name(name() + ".cc_regfile_reads") 543 .desc("number of cc regfile reads") 544 .prereq(ccRegfileReads); 545 546 ccRegfileWrites 547 .name(name() + ".cc_regfile_writes") 548 .desc("number of cc regfile writes") --- 329 unchanged lines hidden (view full) --- 878 // Unbind Float Regs from Rename Map 879 for (RegId reg_id(FloatRegClass, 0); reg_id.index() < TheISA::NumFloatRegs; 880 reg_id.index()++) { 881 PhysRegIdPtr phys_reg = renameMap[tid].lookup(reg_id); 882 scoreboard.unsetReg(phys_reg); 883 freeList.addReg(phys_reg); 884 } 885 | 560 ccRegfileReads 561 .name(name() + ".cc_regfile_reads") 562 .desc("number of cc regfile reads") 563 .prereq(ccRegfileReads); 564 565 ccRegfileWrites 566 .name(name() + ".cc_regfile_writes") 567 .desc("number of cc regfile writes") --- 329 unchanged lines hidden (view full) --- 897 // Unbind Float Regs from Rename Map 898 for (RegId reg_id(FloatRegClass, 0); reg_id.index() < TheISA::NumFloatRegs; 899 reg_id.index()++) { 900 PhysRegIdPtr phys_reg = renameMap[tid].lookup(reg_id); 901 scoreboard.unsetReg(phys_reg); 902 freeList.addReg(phys_reg); 903 } 904 |
905 // Unbind Float Regs from Rename Map 906 for (unsigned preg = 0; preg < TheISA::NumVecPredRegs; preg++) { 907 PhysRegIdPtr phys_reg = renameMap[tid].lookup( 908 RegId(VecPredRegClass, preg)); 909 scoreboard.unsetReg(phys_reg); 910 freeList.addReg(phys_reg); 911 } 912 |
|
886 // Unbind condition-code Regs from Rename Map 887 for (RegId reg_id(CCRegClass, 0); reg_id.index() < TheISA::NumCCRegs; 888 reg_id.index()++) { 889 PhysRegIdPtr phys_reg = renameMap[tid].lookup(reg_id); 890 scoreboard.unsetReg(phys_reg); 891 freeList.addReg(phys_reg); 892 } 893 --- 435 unchanged lines hidden (view full) --- 1329auto 1330FullO3CPU<Impl>::readVecElem(PhysRegIdPtr phys_reg) const -> const VecElem& 1331{ 1332 vecRegfileReads++; 1333 return regFile.readVecElem(phys_reg); 1334} 1335 1336template <class Impl> | 913 // Unbind condition-code Regs from Rename Map 914 for (RegId reg_id(CCRegClass, 0); reg_id.index() < TheISA::NumCCRegs; 915 reg_id.index()++) { 916 PhysRegIdPtr phys_reg = renameMap[tid].lookup(reg_id); 917 scoreboard.unsetReg(phys_reg); 918 freeList.addReg(phys_reg); 919 } 920 --- 435 unchanged lines hidden (view full) --- 1356auto 1357FullO3CPU<Impl>::readVecElem(PhysRegIdPtr phys_reg) const -> const VecElem& 1358{ 1359 vecRegfileReads++; 1360 return regFile.readVecElem(phys_reg); 1361} 1362 1363template <class Impl> |
1364auto 1365FullO3CPU<Impl>::readVecPredReg(PhysRegIdPtr phys_reg) const 1366 -> const VecPredRegContainer& 1367{ 1368 vecPredRegfileReads++; 1369 return regFile.readVecPredReg(phys_reg); 1370} 1371 1372template <class Impl> 1373auto 1374FullO3CPU<Impl>::getWritableVecPredReg(PhysRegIdPtr phys_reg) 1375 -> VecPredRegContainer& 1376{ 1377 vecPredRegfileWrites++; 1378 return regFile.getWritableVecPredReg(phys_reg); 1379} 1380 1381template <class Impl> |
|
1337CCReg 1338FullO3CPU<Impl>::readCCReg(PhysRegIdPtr phys_reg) 1339{ 1340 ccRegfileReads++; 1341 return regFile.readCCReg(phys_reg); 1342} 1343 1344template <class Impl> --- 25 unchanged lines hidden (view full) --- 1370FullO3CPU<Impl>::setVecElem(PhysRegIdPtr phys_reg, const VecElem& val) 1371{ 1372 vecRegfileWrites++; 1373 regFile.setVecElem(phys_reg, val); 1374} 1375 1376template <class Impl> 1377void | 1382CCReg 1383FullO3CPU<Impl>::readCCReg(PhysRegIdPtr phys_reg) 1384{ 1385 ccRegfileReads++; 1386 return regFile.readCCReg(phys_reg); 1387} 1388 1389template <class Impl> --- 25 unchanged lines hidden (view full) --- 1415FullO3CPU<Impl>::setVecElem(PhysRegIdPtr phys_reg, const VecElem& val) 1416{ 1417 vecRegfileWrites++; 1418 regFile.setVecElem(phys_reg, val); 1419} 1420 1421template <class Impl> 1422void |
1423FullO3CPU<Impl>::setVecPredReg(PhysRegIdPtr phys_reg, 1424 const VecPredRegContainer& val) 1425{ 1426 vecPredRegfileWrites++; 1427 regFile.setVecPredReg(phys_reg, val); 1428} 1429 1430template <class Impl> 1431void |
|
1378FullO3CPU<Impl>::setCCReg(PhysRegIdPtr phys_reg, CCReg val) 1379{ 1380 ccRegfileWrites++; 1381 regFile.setCCReg(phys_reg, val); 1382} 1383 1384template <class Impl> 1385RegVal --- 43 unchanged lines hidden (view full) --- 1429 ThreadID tid) const -> const VecElem& 1430{ 1431 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1432 RegId(VecElemClass, reg_idx, ldx)); 1433 return readVecElem(phys_reg); 1434} 1435 1436template <class Impl> | 1432FullO3CPU<Impl>::setCCReg(PhysRegIdPtr phys_reg, CCReg val) 1433{ 1434 ccRegfileWrites++; 1435 regFile.setCCReg(phys_reg, val); 1436} 1437 1438template <class Impl> 1439RegVal --- 43 unchanged lines hidden (view full) --- 1483 ThreadID tid) const -> const VecElem& 1484{ 1485 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1486 RegId(VecElemClass, reg_idx, ldx)); 1487 return readVecElem(phys_reg); 1488} 1489 1490template <class Impl> |
1491auto 1492FullO3CPU<Impl>::readArchVecPredReg(int reg_idx, ThreadID tid) const 1493 -> const VecPredRegContainer& 1494{ 1495 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1496 RegId(VecPredRegClass, reg_idx)); 1497 return readVecPredReg(phys_reg); 1498} 1499 1500template <class Impl> 1501auto 1502FullO3CPU<Impl>::getWritableArchVecPredReg(int reg_idx, ThreadID tid) 1503 -> VecPredRegContainer& 1504{ 1505 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1506 RegId(VecPredRegClass, reg_idx)); 1507 return getWritableVecPredReg(phys_reg); 1508} 1509 1510template <class Impl> |
|
1437CCReg 1438FullO3CPU<Impl>::readArchCCReg(int reg_idx, ThreadID tid) 1439{ 1440 ccRegfileReads++; 1441 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1442 RegId(CCRegClass, reg_idx)); 1443 1444 return regFile.readCCReg(phys_reg); --- 38 unchanged lines hidden (view full) --- 1483{ 1484 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1485 RegId(VecElemClass, reg_idx, ldx)); 1486 setVecElem(phys_reg, val); 1487} 1488 1489template <class Impl> 1490void | 1511CCReg 1512FullO3CPU<Impl>::readArchCCReg(int reg_idx, ThreadID tid) 1513{ 1514 ccRegfileReads++; 1515 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1516 RegId(CCRegClass, reg_idx)); 1517 1518 return regFile.readCCReg(phys_reg); --- 38 unchanged lines hidden (view full) --- 1557{ 1558 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1559 RegId(VecElemClass, reg_idx, ldx)); 1560 setVecElem(phys_reg, val); 1561} 1562 1563template <class Impl> 1564void |
1565FullO3CPU<Impl>::setArchVecPredReg(int reg_idx, const VecPredRegContainer& val, 1566 ThreadID tid) 1567{ 1568 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1569 RegId(VecPredRegClass, reg_idx)); 1570 setVecPredReg(phys_reg, val); 1571} 1572 1573template <class Impl> 1574void |
|
1491FullO3CPU<Impl>::setArchCCReg(int reg_idx, CCReg val, ThreadID tid) 1492{ 1493 ccRegfileWrites++; 1494 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1495 RegId(CCRegClass, reg_idx)); 1496 1497 regFile.setCCReg(phys_reg, val); 1498} --- 306 unchanged lines hidden --- | 1575FullO3CPU<Impl>::setArchCCReg(int reg_idx, CCReg val, ThreadID tid) 1576{ 1577 ccRegfileWrites++; 1578 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1579 RegId(CCRegClass, reg_idx)); 1580 1581 regFile.setCCReg(phys_reg, val); 1582} --- 306 unchanged lines hidden --- |