misc.isa (8209:9e3f7f00fa90) | misc.isa (8285:c38905a6fa32) |
---|---|
1// -*- mode:c++ -*- 2 3// Copyright (c) 2010 ARM Limited 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 --- 469 unchanged lines hidden (view full) --- 478 yieldIop = InstObjParams("yield", "YieldInst", "PredOp", \ 479 { "code" : "", "predicate_test" : predicateTest }) 480 header_output += BasicDeclare.subst(yieldIop) 481 decoder_output += BasicConstructor.subst(yieldIop) 482 exec_output += PredOpExecute.subst(yieldIop) 483 484 wfeCode = ''' 485#if FULL_SYSTEM | 1// -*- mode:c++ -*- 2 3// Copyright (c) 2010 ARM Limited 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 --- 469 unchanged lines hidden (view full) --- 478 yieldIop = InstObjParams("yield", "YieldInst", "PredOp", \ 479 { "code" : "", "predicate_test" : predicateTest }) 480 header_output += BasicDeclare.subst(yieldIop) 481 decoder_output += BasicConstructor.subst(yieldIop) 482 exec_output += PredOpExecute.subst(yieldIop) 483 484 wfeCode = ''' 485#if FULL_SYSTEM |
486 if (SevMailbox) { | 486 if (SevMailbox == 1) { |
487 SevMailbox = 0; 488 PseudoInst::quiesceSkip(xc->tcBase()); | 487 SevMailbox = 0; 488 PseudoInst::quiesceSkip(xc->tcBase()); |
489 } 490 else { | 489 } else { |
491 PseudoInst::quiesce(xc->tcBase()); 492 } 493#endif 494 ''' 495 wfeIop = InstObjParams("wfe", "WfeInst", "PredOp", \ 496 { "code" : wfeCode, "predicate_test" : predicateTest }, 497 ["IsNonSpeculative", "IsQuiesce", "IsSerializeAfter"]) 498 header_output += BasicDeclare.subst(wfeIop) 499 decoder_output += BasicConstructor.subst(wfeIop) 500 exec_output += QuiescePredOpExecute.subst(wfeIop) 501 502 wfiCode = ''' 503#if FULL_SYSTEM | 490 PseudoInst::quiesce(xc->tcBase()); 491 } 492#endif 493 ''' 494 wfeIop = InstObjParams("wfe", "WfeInst", "PredOp", \ 495 { "code" : wfeCode, "predicate_test" : predicateTest }, 496 ["IsNonSpeculative", "IsQuiesce", "IsSerializeAfter"]) 497 header_output += BasicDeclare.subst(wfeIop) 498 decoder_output += BasicConstructor.subst(wfeIop) 499 exec_output += QuiescePredOpExecute.subst(wfeIop) 500 501 wfiCode = ''' 502#if FULL_SYSTEM |
504 PseudoInst::quiesce(xc->tcBase()); | 503 // WFI doesn't sleep if interrupts are pending (masked or not) 504 if (xc->tcBase()->getCpuPtr()->getInterruptController()->checkRaw()) { 505 PseudoInst::quiesceSkip(xc->tcBase()); 506 } else { 507 PseudoInst::quiesce(xc->tcBase()); 508 } |
505#endif 506 ''' 507 wfiIop = InstObjParams("wfi", "WfiInst", "PredOp", \ 508 { "code" : wfiCode, "predicate_test" : predicateTest }, 509 ["IsNonSpeculative", "IsQuiesce", "IsSerializeAfter"]) 510 header_output += BasicDeclare.subst(wfiIop) 511 decoder_output += BasicConstructor.subst(wfiIop) 512 exec_output += QuiescePredOpExecute.subst(wfiIop) 513 514 sevCode = ''' 515 // Need a way for O3 to not scoreboard these accesses as pipe flushes. 516 SevMailbox = 1; 517 System *sys = xc->tcBase()->getSystemPtr(); 518 for (int x = 0; x < sys->numContexts(); x++) { 519 ThreadContext *oc = sys->getThreadContext(x); | 509#endif 510 ''' 511 wfiIop = InstObjParams("wfi", "WfiInst", "PredOp", \ 512 { "code" : wfiCode, "predicate_test" : predicateTest }, 513 ["IsNonSpeculative", "IsQuiesce", "IsSerializeAfter"]) 514 header_output += BasicDeclare.subst(wfiIop) 515 decoder_output += BasicConstructor.subst(wfiIop) 516 exec_output += QuiescePredOpExecute.subst(wfiIop) 517 518 sevCode = ''' 519 // Need a way for O3 to not scoreboard these accesses as pipe flushes. 520 SevMailbox = 1; 521 System *sys = xc->tcBase()->getSystemPtr(); 522 for (int x = 0; x < sys->numContexts(); x++) { 523 ThreadContext *oc = sys->getThreadContext(x); |
520 if (oc != xc->tcBase()) { | 524 if (oc == xc->tcBase()) 525 continue; 526 // Only wake if they were sleeping 527 if (oc->readMiscReg(MISCREG_SEV_MAILBOX) == 0) { |
521 oc->setMiscReg(MISCREG_SEV_MAILBOX, 1); | 528 oc->setMiscReg(MISCREG_SEV_MAILBOX, 1); |
529 PseudoInst::wakeCPU(xc->tcBase(), x); |
|
522 } 523 } 524 ''' 525 sevIop = InstObjParams("sev", "SevInst", "PredOp", \ 526 { "code" : sevCode, "predicate_test" : predicateTest }, 527 ["IsNonSpeculative", "IsSquashAfter"]) 528 header_output += BasicDeclare.subst(sevIop) 529 decoder_output += BasicConstructor.subst(sevIop) --- 236 unchanged lines hidden --- | 530 } 531 } 532 ''' 533 sevIop = InstObjParams("sev", "SevInst", "PredOp", \ 534 { "code" : sevCode, "predicate_test" : predicateTest }, 535 ["IsNonSpeculative", "IsSquashAfter"]) 536 header_output += BasicDeclare.subst(sevIop) 537 decoder_output += BasicConstructor.subst(sevIop) --- 236 unchanged lines hidden --- |