Lines Matching full:interpstate
59 * Save out PC, FP, InterpState, and registers to shadow space.
63 InterpState* interpState, int targetTrace)
67 unsigned preBytes = interpState->method->outsSize*4 + sizeof(StackSaveArea);
68 unsigned postBytes = interpState->method->registersSize*4;
81 if (interpState->entryPoint == kInterpEntryResume) {
82 interpState->entryPoint = kInterpEntryInstr;
85 if (interpState->jitResumeDPC == pc) {
89 LOGD("real %p DPC %p NPC %p", pc, interpState->jitResumeDPC,
90 interpState->jitResumeNPC);
106 shadowSpace->glue = interpState;
111 shadowSpace->method = interpState->method;
115 // Create a copy of the InterpState
116 memcpy(&(shadowSpace->interpState), interpState, sizeof(InterpState));
117 shadowSpace->interpState.fp = shadowSpace->shadowFP;
118 shadowSpace->interpState.interpStackEnd = (u1*)shadowSpace->registerSpace;
142 // Official InterpState structure
143 InterpState *realGlue = shadowSpace->glue;
165 realGlue->jitResumeNPC = shadowSpace->interpState.jitResumeNPC;
166 realGlue->jitResumeDPC = shadowSpace->interpState.jitResumeDPC;
260 InterpState *interpState)
363 interpState->jitState = kJitSingleStepEnd;
396 * of this value in their private InterpState structures and won't see
500 void resetTracehead(InterpState* interpState, JitEntry *slot)
507 void dvmJitAbortTraceSelect(InterpState* interpState)
509 if (interpState->jitState == kJitTSelect)
510 interpState->jitState = kJitDone;
618 int dvmCheckJit(const u2* pc, Thread* self, InterpState* interpState)
625 const u2 *lastPC = interpState->lastPC;
626 interpState->lastPC = pc;
628 switch (interpState->jitState) {
644 if (interpState->totalTraceLen != 0 &&
647 interpState->jitState = kJitTSelectEnd;
657 offset = lastPC - interpState->method->insns;
659 dvmGetMethodInsnsSize(interpState->method));
660 if (lastPC != interpState->currRunHead + interpState->currRunLen) {
663 currTraceRun = ++interpState->currTraceRun;
664 interpState->currRunLen = 0;
665 interpState->currRunHead = (u2*)lastPC;
666 interpState->trace[currTraceRun].frag.startOffset = offset;
667 interpState->trace[currTraceRun].frag.numInsts = 0;
668 interpState->trace[currTraceRun].frag.runEnd = false;
669 interpState->trace[currTraceRun].frag.hint = kJitHintNone;
671 interpState->trace[interpState->currTraceRun].frag.numInsts++;
672 interpState->totalTraceLen++;
673 interpState->currRunLen += len;
676 if (interpState->currTraceRun == (MAX_JIT_RUN_LEN - 1)) {
677 interpState->jitState = kJitTSelectEnd;
687 interpState->jitState = kJitTSelectEnd;
695 interpState->jitState = kJitTSelectEnd;
697 if (interpState->totalTraceLen >= JIT_MAX_TRACE_LEN) {
698 interpState->jitState = kJitTSelectEnd;
702 interpState->jitState = kJitDone;
712 if (interpState->totalTraceLen == 0) {
714 interpState->jitState = kJitDone;
720 sizeof(JitTraceRun) * (interpState->currTraceRun+1));
724 interpState->jitState = kJitDone;
728 interpState->trace[interpState->currTraceRun].frag.runEnd =
730 desc->method = interpState->method;
732 (char*)&(interpState->trace[0]),
733 sizeof(JitTraceRun) * (interpState->currTraceRun+1));
738 interpState->currTraceHead,kWorkOrderTrace,desc)) {
755 lookupAndAdd(interpState->currTraceHead, false);
759 interpState->jitState = kJitDone;
764 interpState->jitState = kJitSingleStepEnd;
767 interpState->entryPoint = kInterpEntryResume;
768 interpState->jitState = kJitDone;
776 if (selfVerificationDebugInterp(pc, self, interpState)) {
781 if (interpState->jitState != kJitSingleStepEnd) {
782 interpState->jitState = kJitDone;
801 interpState->jitState, interpState->entryPoint);
809 assert(switchInterp == false || interpState->jitState == kJitDone ||
810 interpState->jitState == kJitNot);
899 bool dvmJitCheckTraceRequest(Thread* self, InterpState* interpState)
903 intptr_t filterKey = ((intptr_t) interpState->pc) >>
910 if (interpState->jitState == kJitTSelectRequest &&
914 if (filterKey == interpState->threshFilter[i]) {
925 interpState->threshFilter[i] = filterKey;
926 interpState->jitState = kJitDone;
932 interpState->jitState = kJitDone;
939 if (interpState->jitState == kJitTSelectRequest ||
940 interpState->jitState == kJitTSelectRequestHot) {
941 JitEntry *slot = lookupAndAdd(interpState->pc, false);
949 interpState->jitState = kJitDone;
963 interpState->jitState = kJitDone;
964 resetTracehead(interpState, slot);
967 interpState->jitState = kJitDone;
981 switch (interpState->jitState) {
984 interpState->jitState = kJitTSelect;
985 interpState->currTraceHead = interpState->pc;
986 interpState->currTraceRun = 0;
987 interpState->totalTraceLen = 0;
988 interpState->currRunHead = interpState->pc;
989 interpState->currRunLen = 0;
990 interpState->trace[0].frag.startOffset =
991 interpState->pc - interpState->method->insns;
992 interpState->trace[0].frag.numInsts = 0;
993 interpState->trace[0].frag.runEnd = false;
994 interpState->trace[0].frag.hint = kJitHintNone;
995 interpState->lastPC = 0;
1006 interpState->jitState, interpState->entryPoint);
1013 interpState->jitState = kJitDone;
1021 assert(switchInterp == false || interpState->jitState == kJitDone);