cpu.cc (12105:742d80361989) | cpu.cc (12106:7784fac1b159) |
---|---|
1/* 2 * Copyright (c) 2011-2012, 2014 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 --- 286 unchanged lines hidden (view full) --- 295 296 // Initialize rename map to assign physical registers to the 297 // architectural registers for active threads only. 298 for (ThreadID tid = 0; tid < active_threads; tid++) { 299 for (RegIndex ridx = 0; ridx < TheISA::NumIntRegs; ++ridx) { 300 // Note that we can't use the rename() method because we don't 301 // want special treatment for the zero register at this point 302 PhysRegIdPtr phys_reg = freeList.getIntReg(); | 1/* 2 * Copyright (c) 2011-2012, 2014 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 --- 286 unchanged lines hidden (view full) --- 295 296 // Initialize rename map to assign physical registers to the 297 // architectural registers for active threads only. 298 for (ThreadID tid = 0; tid < active_threads; tid++) { 299 for (RegIndex ridx = 0; ridx < TheISA::NumIntRegs; ++ridx) { 300 // Note that we can't use the rename() method because we don't 301 // want special treatment for the zero register at this point 302 PhysRegIdPtr phys_reg = freeList.getIntReg(); |
303 renameMap[tid].setIntEntry(ridx, phys_reg); 304 commitRenameMap[tid].setIntEntry(ridx, phys_reg); | 303 renameMap[tid].setEntry(RegId(IntRegClass, ridx), phys_reg); 304 commitRenameMap[tid].setEntry(RegId(IntRegClass, ridx), phys_reg); |
305 } 306 307 for (RegIndex ridx = 0; ridx < TheISA::NumFloatRegs; ++ridx) { 308 PhysRegIdPtr phys_reg = freeList.getFloatReg(); | 305 } 306 307 for (RegIndex ridx = 0; ridx < TheISA::NumFloatRegs; ++ridx) { 308 PhysRegIdPtr phys_reg = freeList.getFloatReg(); |
309 renameMap[tid].setFloatEntry(ridx, phys_reg); 310 commitRenameMap[tid].setFloatEntry(ridx, phys_reg); | 309 renameMap[tid].setEntry(RegId(FloatRegClass, ridx), phys_reg); 310 commitRenameMap[tid].setEntry( 311 RegId(FloatRegClass, ridx), phys_reg); |
311 } 312 313 for (RegIndex ridx = 0; ridx < TheISA::NumCCRegs; ++ridx) { 314 PhysRegIdPtr phys_reg = freeList.getCCReg(); | 312 } 313 314 for (RegIndex ridx = 0; ridx < TheISA::NumCCRegs; ++ridx) { 315 PhysRegIdPtr phys_reg = freeList.getCCReg(); |
315 renameMap[tid].setCCEntry(ridx, phys_reg); 316 commitRenameMap[tid].setCCEntry(ridx, phys_reg); | 316 renameMap[tid].setEntry(RegId(CCRegClass, ridx), phys_reg); 317 commitRenameMap[tid].setEntry(RegId(CCRegClass, ridx), phys_reg); |
317 } 318 } 319 320 rename.setRenameMap(renameMap); 321 commit.setRenameMap(commitRenameMap); 322 rename.setFreeList(&freeList); 323 324 // Setup the ROB for whichever stages need it. --- 458 unchanged lines hidden (view full) --- 783 ThreadContext *src_tc; 784 if (FullSystem) 785 src_tc = system->threadContexts[tid]; 786 else 787 src_tc = tcBase(tid); 788 789 //Bind Int Regs to Rename Map 790 | 318 } 319 } 320 321 rename.setRenameMap(renameMap); 322 commit.setRenameMap(commitRenameMap); 323 rename.setFreeList(&freeList); 324 325 // Setup the ROB for whichever stages need it. --- 458 unchanged lines hidden (view full) --- 784 ThreadContext *src_tc; 785 if (FullSystem) 786 src_tc = system->threadContexts[tid]; 787 else 788 src_tc = tcBase(tid); 789 790 //Bind Int Regs to Rename Map 791 |
791 for (RegId reg_id(IntRegClass, 0); reg_id.regIdx < TheISA::NumIntRegs; 792 reg_id.regIdx++) { | 792 for (RegId reg_id(IntRegClass, 0); reg_id.index() < TheISA::NumIntRegs; 793 reg_id.index()++) { |
793 PhysRegIdPtr phys_reg = freeList.getIntReg(); 794 renameMap[tid].setEntry(reg_id, phys_reg); 795 scoreboard.setReg(phys_reg); 796 } 797 798 //Bind Float Regs to Rename Map | 794 PhysRegIdPtr phys_reg = freeList.getIntReg(); 795 renameMap[tid].setEntry(reg_id, phys_reg); 796 scoreboard.setReg(phys_reg); 797 } 798 799 //Bind Float Regs to Rename Map |
799 for (RegId reg_id(FloatRegClass, 0); reg_id.regIdx < TheISA::NumFloatRegs; 800 reg_id.regIdx++) { | 800 for (RegId reg_id(FloatRegClass, 0); reg_id.index() < TheISA::NumFloatRegs; 801 reg_id.index()++) { |
801 PhysRegIdPtr phys_reg = freeList.getFloatReg(); 802 renameMap[tid].setEntry(reg_id, phys_reg); 803 scoreboard.setReg(phys_reg); 804 } 805 806 //Bind condition-code Regs to Rename Map | 802 PhysRegIdPtr phys_reg = freeList.getFloatReg(); 803 renameMap[tid].setEntry(reg_id, phys_reg); 804 scoreboard.setReg(phys_reg); 805 } 806 807 //Bind condition-code Regs to Rename Map |
807 for (RegId reg_id(CCRegClass, 0); reg_id.regIdx < TheISA::NumCCRegs; 808 reg_id.regIdx++) { | 808 for (RegId reg_id(CCRegClass, 0); reg_id.index() < TheISA::NumCCRegs; 809 reg_id.index()++) { |
809 PhysRegIdPtr phys_reg = freeList.getCCReg(); 810 renameMap[tid].setEntry(reg_id, phys_reg); 811 scoreboard.setReg(phys_reg); 812 } 813 814 //Copy Thread Data Into RegFile 815 //this->copyFromTC(tid); 816 --- 20 unchanged lines hidden (view full) --- 837 // this->copyToTC(tid); 838 839 840 // @todo: 2-27-2008: Fix how we free up rename mappings 841 // here to alleviate the case for double-freeing registers 842 // in SMT workloads. 843 844 // Unbind Int Regs from Rename Map | 810 PhysRegIdPtr phys_reg = freeList.getCCReg(); 811 renameMap[tid].setEntry(reg_id, phys_reg); 812 scoreboard.setReg(phys_reg); 813 } 814 815 //Copy Thread Data Into RegFile 816 //this->copyFromTC(tid); 817 --- 20 unchanged lines hidden (view full) --- 838 // this->copyToTC(tid); 839 840 841 // @todo: 2-27-2008: Fix how we free up rename mappings 842 // here to alleviate the case for double-freeing registers 843 // in SMT workloads. 844 845 // Unbind Int Regs from Rename Map |
845 for (RegId reg_id(IntRegClass, 0); reg_id.regIdx < TheISA::NumIntRegs; 846 reg_id.regIdx++) { | 846 for (RegId reg_id(IntRegClass, 0); reg_id.index() < TheISA::NumIntRegs; 847 reg_id.index()++) { |
847 PhysRegIdPtr phys_reg = renameMap[tid].lookup(reg_id); 848 scoreboard.unsetReg(phys_reg); 849 freeList.addReg(phys_reg); 850 } 851 852 // Unbind Float Regs from Rename Map | 848 PhysRegIdPtr phys_reg = renameMap[tid].lookup(reg_id); 849 scoreboard.unsetReg(phys_reg); 850 freeList.addReg(phys_reg); 851 } 852 853 // Unbind Float Regs from Rename Map |
853 for (RegId reg_id(FloatRegClass, 0); reg_id.regIdx < TheISA::NumFloatRegs; 854 reg_id.regIdx++) { | 854 for (RegId reg_id(FloatRegClass, 0); reg_id.index() < TheISA::NumFloatRegs; 855 reg_id.index()++) { |
855 PhysRegIdPtr phys_reg = renameMap[tid].lookup(reg_id); 856 scoreboard.unsetReg(phys_reg); 857 freeList.addReg(phys_reg); 858 } 859 860 // Unbind condition-code Regs from Rename Map | 856 PhysRegIdPtr phys_reg = renameMap[tid].lookup(reg_id); 857 scoreboard.unsetReg(phys_reg); 858 freeList.addReg(phys_reg); 859 } 860 861 // Unbind condition-code Regs from Rename Map |
861 for (RegId reg_id(CCRegClass, 0); reg_id.regIdx < TheISA::NumCCRegs; 862 reg_id.regIdx++) { | 862 for (RegId reg_id(CCRegClass, 0); reg_id.index() < TheISA::NumCCRegs; 863 reg_id.index()++) { |
863 PhysRegIdPtr phys_reg = renameMap[tid].lookup(reg_id); 864 scoreboard.unsetReg(phys_reg); 865 freeList.addReg(phys_reg); 866 } 867 868 // Squash Throughout Pipeline 869 DynInstPtr inst = commit.rob->readHeadInst(tid); 870 InstSeqNum squash_seq_num = inst->seqNum; --- 424 unchanged lines hidden (view full) --- 1295 regFile.setCCReg(phys_reg, val); 1296} 1297 1298template <class Impl> 1299uint64_t 1300FullO3CPU<Impl>::readArchIntReg(int reg_idx, ThreadID tid) 1301{ 1302 intRegfileReads++; | 864 PhysRegIdPtr phys_reg = renameMap[tid].lookup(reg_id); 865 scoreboard.unsetReg(phys_reg); 866 freeList.addReg(phys_reg); 867 } 868 869 // Squash Throughout Pipeline 870 DynInstPtr inst = commit.rob->readHeadInst(tid); 871 InstSeqNum squash_seq_num = inst->seqNum; --- 424 unchanged lines hidden (view full) --- 1296 regFile.setCCReg(phys_reg, val); 1297} 1298 1299template <class Impl> 1300uint64_t 1301FullO3CPU<Impl>::readArchIntReg(int reg_idx, ThreadID tid) 1302{ 1303 intRegfileReads++; |
1303 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookupInt(reg_idx); | 1304 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1305 RegId(IntRegClass, reg_idx)); |
1304 1305 return regFile.readIntReg(phys_reg); 1306} 1307 1308template <class Impl> 1309float 1310FullO3CPU<Impl>::readArchFloatReg(int reg_idx, ThreadID tid) 1311{ 1312 fpRegfileReads++; | 1306 1307 return regFile.readIntReg(phys_reg); 1308} 1309 1310template <class Impl> 1311float 1312FullO3CPU<Impl>::readArchFloatReg(int reg_idx, ThreadID tid) 1313{ 1314 fpRegfileReads++; |
1313 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookupFloat(reg_idx); | 1315 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1316 RegId(FloatRegClass, reg_idx)); |
1314 1315 return regFile.readFloatReg(phys_reg); 1316} 1317 1318template <class Impl> 1319uint64_t 1320FullO3CPU<Impl>::readArchFloatRegInt(int reg_idx, ThreadID tid) 1321{ 1322 fpRegfileReads++; | 1317 1318 return regFile.readFloatReg(phys_reg); 1319} 1320 1321template <class Impl> 1322uint64_t 1323FullO3CPU<Impl>::readArchFloatRegInt(int reg_idx, ThreadID tid) 1324{ 1325 fpRegfileReads++; |
1323 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookupFloat(reg_idx); | 1326 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1327 RegId(FloatRegClass, reg_idx)); |
1324 1325 return regFile.readFloatRegBits(phys_reg); 1326} 1327 1328template <class Impl> 1329CCReg 1330FullO3CPU<Impl>::readArchCCReg(int reg_idx, ThreadID tid) 1331{ 1332 ccRegfileReads++; | 1328 1329 return regFile.readFloatRegBits(phys_reg); 1330} 1331 1332template <class Impl> 1333CCReg 1334FullO3CPU<Impl>::readArchCCReg(int reg_idx, ThreadID tid) 1335{ 1336 ccRegfileReads++; |
1333 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookupCC(reg_idx); | 1337 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1338 RegId(CCRegClass, reg_idx)); |
1334 1335 return regFile.readCCReg(phys_reg); 1336} 1337 1338template <class Impl> 1339void 1340FullO3CPU<Impl>::setArchIntReg(int reg_idx, uint64_t val, ThreadID tid) 1341{ 1342 intRegfileWrites++; | 1339 1340 return regFile.readCCReg(phys_reg); 1341} 1342 1343template <class Impl> 1344void 1345FullO3CPU<Impl>::setArchIntReg(int reg_idx, uint64_t val, ThreadID tid) 1346{ 1347 intRegfileWrites++; |
1343 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookupInt(reg_idx); | 1348 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1349 RegId(IntRegClass, reg_idx)); |
1344 1345 regFile.setIntReg(phys_reg, val); 1346} 1347 1348template <class Impl> 1349void 1350FullO3CPU<Impl>::setArchFloatReg(int reg_idx, float val, ThreadID tid) 1351{ 1352 fpRegfileWrites++; | 1350 1351 regFile.setIntReg(phys_reg, val); 1352} 1353 1354template <class Impl> 1355void 1356FullO3CPU<Impl>::setArchFloatReg(int reg_idx, float val, ThreadID tid) 1357{ 1358 fpRegfileWrites++; |
1353 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookupFloat(reg_idx); | 1359 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1360 RegId(FloatRegClass, reg_idx)); |
1354 1355 regFile.setFloatReg(phys_reg, val); 1356} 1357 1358template <class Impl> 1359void 1360FullO3CPU<Impl>::setArchFloatRegInt(int reg_idx, uint64_t val, ThreadID tid) 1361{ 1362 fpRegfileWrites++; | 1361 1362 regFile.setFloatReg(phys_reg, val); 1363} 1364 1365template <class Impl> 1366void 1367FullO3CPU<Impl>::setArchFloatRegInt(int reg_idx, uint64_t val, ThreadID tid) 1368{ 1369 fpRegfileWrites++; |
1363 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookupFloat(reg_idx); | 1370 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1371 RegId(FloatRegClass, reg_idx)); |
1364 1365 regFile.setFloatRegBits(phys_reg, val); 1366} 1367 1368template <class Impl> 1369void 1370FullO3CPU<Impl>::setArchCCReg(int reg_idx, CCReg val, ThreadID tid) 1371{ 1372 ccRegfileWrites++; | 1372 1373 regFile.setFloatRegBits(phys_reg, val); 1374} 1375 1376template <class Impl> 1377void 1378FullO3CPU<Impl>::setArchCCReg(int reg_idx, CCReg val, ThreadID tid) 1379{ 1380 ccRegfileWrites++; |
1373 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookupCC(reg_idx); | 1381 PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup( 1382 RegId(CCRegClass, reg_idx)); |
1374 1375 regFile.setCCReg(phys_reg, val); 1376} 1377 1378template <class Impl> 1379TheISA::PCState 1380FullO3CPU<Impl>::pcState(ThreadID tid) 1381{ --- 302 unchanged lines hidden --- | 1383 1384 regFile.setCCReg(phys_reg, val); 1385} 1386 1387template <class Impl> 1388TheISA::PCState 1389FullO3CPU<Impl>::pcState(ThreadID tid) 1390{ --- 302 unchanged lines hidden --- |