isa.cc (8549:7cff2156c998) | isa.cc (8733:64a7bf8fa56c) |
---|---|
1/* | 1/* |
2 * Copyright (c) 2010 ARM Limited | 2 * Copyright (c) 2010-2011 ARM Limited |
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 --- 23 unchanged lines hidden (view full) --- 34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 * 37 * Authors: Gabe Black 38 * Ali Saidi 39 */ 40 41#include "arch/arm/isa.hh" | 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 --- 23 unchanged lines hidden (view full) --- 34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 * 37 * Authors: Gabe Black 38 * Ali Saidi 39 */ 40 41#include "arch/arm/isa.hh" |
42#include "config/use_checker.hh" |
|
42#include "debug/Arm.hh" 43#include "debug/MiscRegs.hh" 44#include "sim/faults.hh" 45#include "sim/stat_control.hh" 46#include "sim/system.hh" 47 | 43#include "debug/Arm.hh" 44#include "debug/MiscRegs.hh" 45#include "sim/faults.hh" 46#include "sim/stat_control.hh" 47#include "sim/system.hh" 48 |
49#if USE_CHECKER 50#include "cpu/checker/cpu.hh" 51#endif 52 |
|
48namespace ArmISA 49{ 50 51void 52ISA::clear() 53{ 54 SCTLR sctlr_rst = miscRegs[MISCREG_SCTLR_RST]; 55 uint32_t midr = miscRegs[MISCREG_MIDR]; --- 218 unchanged lines hidden (view full) --- 274 tc->getDTBPtr()->invalidateMiscReg(); 275 } 276 277 DPRINTF(Arm, "Updating CPSR from %#x to %#x f:%d i:%d a:%d mode:%#x\n", 278 miscRegs[misc_reg], cpsr, cpsr.f, cpsr.i, cpsr.a, cpsr.mode); 279 PCState pc = tc->pcState(); 280 pc.nextThumb(cpsr.t); 281 pc.nextJazelle(cpsr.j); | 53namespace ArmISA 54{ 55 56void 57ISA::clear() 58{ 59 SCTLR sctlr_rst = miscRegs[MISCREG_SCTLR_RST]; 60 uint32_t midr = miscRegs[MISCREG_MIDR]; --- 218 unchanged lines hidden (view full) --- 279 tc->getDTBPtr()->invalidateMiscReg(); 280 } 281 282 DPRINTF(Arm, "Updating CPSR from %#x to %#x f:%d i:%d a:%d mode:%#x\n", 283 miscRegs[misc_reg], cpsr, cpsr.f, cpsr.i, cpsr.a, cpsr.mode); 284 PCState pc = tc->pcState(); 285 pc.nextThumb(cpsr.t); 286 pc.nextJazelle(cpsr.j); |
287#if USE_CHECKER 288 tc->pcStateNoRecord(pc); 289#else |
|
282 tc->pcState(pc); | 290 tc->pcState(pc); |
291#endif //USE_CHECKER |
|
283 } else if (misc_reg >= MISCREG_CP15_UNIMP_START && 284 misc_reg < MISCREG_CP15_END) { 285 panic("Unimplemented CP15 register %s wrote with %#x.\n", 286 miscRegName[misc_reg], val); 287 } else { 288 switch (misc_reg) { 289 case MISCREG_CPACR: 290 { --- 86 unchanged lines hidden (view full) --- 377 if (!other_sctlr.c && oc->status() != ThreadContext::Halted) 378 return; 379 } 380 381 for (x = 0; x < sys->numContexts(); x++) { 382 oc = sys->getThreadContext(x); 383 oc->getDTBPtr()->allCpusCaching(); 384 oc->getITBPtr()->allCpusCaching(); | 292 } else if (misc_reg >= MISCREG_CP15_UNIMP_START && 293 misc_reg < MISCREG_CP15_END) { 294 panic("Unimplemented CP15 register %s wrote with %#x.\n", 295 miscRegName[misc_reg], val); 296 } else { 297 switch (misc_reg) { 298 case MISCREG_CPACR: 299 { --- 86 unchanged lines hidden (view full) --- 386 if (!other_sctlr.c && oc->status() != ThreadContext::Halted) 387 return; 388 } 389 390 for (x = 0; x < sys->numContexts(); x++) { 391 oc = sys->getThreadContext(x); 392 oc->getDTBPtr()->allCpusCaching(); 393 oc->getITBPtr()->allCpusCaching(); |
394#if USE_CHECKER 395 CheckerCPU *checker = 396 dynamic_cast<CheckerCPU*>(oc->getCheckerCpuPtr()); 397 if (checker) { 398 checker->getDTBPtr()->allCpusCaching(); 399 checker->getITBPtr()->allCpusCaching(); 400 } 401#endif |
|
385 } 386 return; 387 } 388 case MISCREG_TLBTR: 389 case MISCREG_MVFR0: 390 case MISCREG_MVFR1: 391 case MISCREG_MPIDR: 392 case MISCREG_FPSID: 393 return; 394 case MISCREG_TLBIALLIS: 395 case MISCREG_TLBIALL: 396 sys = tc->getSystemPtr(); 397 for (x = 0; x < sys->numContexts(); x++) { 398 oc = sys->getThreadContext(x); 399 assert(oc->getITBPtr() && oc->getDTBPtr()); 400 oc->getITBPtr()->flushAll(); 401 oc->getDTBPtr()->flushAll(); | 402 } 403 return; 404 } 405 case MISCREG_TLBTR: 406 case MISCREG_MVFR0: 407 case MISCREG_MVFR1: 408 case MISCREG_MPIDR: 409 case MISCREG_FPSID: 410 return; 411 case MISCREG_TLBIALLIS: 412 case MISCREG_TLBIALL: 413 sys = tc->getSystemPtr(); 414 for (x = 0; x < sys->numContexts(); x++) { 415 oc = sys->getThreadContext(x); 416 assert(oc->getITBPtr() && oc->getDTBPtr()); 417 oc->getITBPtr()->flushAll(); 418 oc->getDTBPtr()->flushAll(); |
419#if USE_CHECKER 420 CheckerCPU *checker = 421 dynamic_cast<CheckerCPU*>(oc->getCheckerCpuPtr()); 422 if (checker) { 423 checker->getITBPtr()->flushAll(); 424 checker->getDTBPtr()->flushAll(); 425 } 426#endif |
|
402 } 403 return; 404 case MISCREG_ITLBIALL: 405 tc->getITBPtr()->flushAll(); 406 return; 407 case MISCREG_DTLBIALL: 408 tc->getDTBPtr()->flushAll(); 409 return; 410 case MISCREG_TLBIMVAIS: 411 case MISCREG_TLBIMVA: 412 sys = tc->getSystemPtr(); 413 for (x = 0; x < sys->numContexts(); x++) { 414 oc = sys->getThreadContext(x); 415 assert(oc->getITBPtr() && oc->getDTBPtr()); 416 oc->getITBPtr()->flushMvaAsid(mbits(newVal, 31, 12), 417 bits(newVal, 7,0)); 418 oc->getDTBPtr()->flushMvaAsid(mbits(newVal, 31, 12), 419 bits(newVal, 7,0)); | 427 } 428 return; 429 case MISCREG_ITLBIALL: 430 tc->getITBPtr()->flushAll(); 431 return; 432 case MISCREG_DTLBIALL: 433 tc->getDTBPtr()->flushAll(); 434 return; 435 case MISCREG_TLBIMVAIS: 436 case MISCREG_TLBIMVA: 437 sys = tc->getSystemPtr(); 438 for (x = 0; x < sys->numContexts(); x++) { 439 oc = sys->getThreadContext(x); 440 assert(oc->getITBPtr() && oc->getDTBPtr()); 441 oc->getITBPtr()->flushMvaAsid(mbits(newVal, 31, 12), 442 bits(newVal, 7,0)); 443 oc->getDTBPtr()->flushMvaAsid(mbits(newVal, 31, 12), 444 bits(newVal, 7,0)); |
445#if USE_CHECKER 446 CheckerCPU *checker = 447 dynamic_cast<CheckerCPU*>(oc->getCheckerCpuPtr()); 448 if (checker) { 449 checker->getITBPtr()->flushMvaAsid(mbits(newVal, 31, 12), 450 bits(newVal, 7,0)); 451 checker->getDTBPtr()->flushMvaAsid(mbits(newVal, 31, 12), 452 bits(newVal, 7,0)); 453 } 454#endif |
|
420 } 421 return; 422 case MISCREG_TLBIASIDIS: 423 case MISCREG_TLBIASID: 424 sys = tc->getSystemPtr(); 425 for (x = 0; x < sys->numContexts(); x++) { 426 oc = sys->getThreadContext(x); 427 assert(oc->getITBPtr() && oc->getDTBPtr()); 428 oc->getITBPtr()->flushAsid(bits(newVal, 7,0)); 429 oc->getDTBPtr()->flushAsid(bits(newVal, 7,0)); | 455 } 456 return; 457 case MISCREG_TLBIASIDIS: 458 case MISCREG_TLBIASID: 459 sys = tc->getSystemPtr(); 460 for (x = 0; x < sys->numContexts(); x++) { 461 oc = sys->getThreadContext(x); 462 assert(oc->getITBPtr() && oc->getDTBPtr()); 463 oc->getITBPtr()->flushAsid(bits(newVal, 7,0)); 464 oc->getDTBPtr()->flushAsid(bits(newVal, 7,0)); |
465#if USE_CHECKER 466 CheckerCPU *checker = 467 dynamic_cast<CheckerCPU*>(oc->getCheckerCpuPtr()); 468 if (checker) { 469 checker->getITBPtr()->flushAsid(bits(newVal, 7,0)); 470 checker->getDTBPtr()->flushAsid(bits(newVal, 7,0)); 471 } 472#endif |
|
430 } 431 return; 432 case MISCREG_TLBIMVAAIS: 433 case MISCREG_TLBIMVAA: 434 sys = tc->getSystemPtr(); 435 for (x = 0; x < sys->numContexts(); x++) { 436 oc = sys->getThreadContext(x); 437 assert(oc->getITBPtr() && oc->getDTBPtr()); 438 oc->getITBPtr()->flushMva(mbits(newVal, 31,12)); 439 oc->getDTBPtr()->flushMva(mbits(newVal, 31,12)); | 473 } 474 return; 475 case MISCREG_TLBIMVAAIS: 476 case MISCREG_TLBIMVAA: 477 sys = tc->getSystemPtr(); 478 for (x = 0; x < sys->numContexts(); x++) { 479 oc = sys->getThreadContext(x); 480 assert(oc->getITBPtr() && oc->getDTBPtr()); 481 oc->getITBPtr()->flushMva(mbits(newVal, 31,12)); 482 oc->getDTBPtr()->flushMva(mbits(newVal, 31,12)); |
483#if USE_CHECKER 484 CheckerCPU *checker = 485 dynamic_cast<CheckerCPU*>(oc->getCheckerCpuPtr()); 486 if (checker) { 487 checker->getITBPtr()->flushMva(mbits(newVal, 31,12)); 488 checker->getDTBPtr()->flushMva(mbits(newVal, 31,12)); 489 } 490#endif |
|
440 } 441 return; 442 case MISCREG_ITLBIMVA: 443 tc->getITBPtr()->flushMvaAsid(mbits(newVal, 31, 12), 444 bits(newVal, 7,0)); 445 return; 446 case MISCREG_DTLBIMVA: 447 tc->getDTBPtr()->flushMvaAsid(mbits(newVal, 31, 12), --- 107 unchanged lines hidden --- | 491 } 492 return; 493 case MISCREG_ITLBIMVA: 494 tc->getITBPtr()->flushMvaAsid(mbits(newVal, 31, 12), 495 bits(newVal, 7,0)); 496 return; 497 case MISCREG_DTLBIMVA: 498 tc->getDTBPtr()->flushMvaAsid(mbits(newVal, 31, 12), --- 107 unchanged lines hidden --- |