/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * Dalvik interpreter definitions. These are internal to the interpreter. * * This includes defines, types, function declarations, and inline functions * that are common to all interpreter implementations. * * Functions and globals declared here are defined in Interp.c. */ #ifndef DALVIK_INTERP_DEFS_H_ #define DALVIK_INTERP_DEFS_H_ #if defined(WITH_JIT) /* * Size of save area for callee-save FP regs, which are not automatically * saved by interpreter main because it doesn't use them (but Jit'd code * may). Save/restore routine is defined by target, and size should * be >= max needed by any target. */ #define JIT_CALLEE_SAVE_DOUBLE_COUNT 8 #endif /* * Portable interpreter. */ extern void dvmInterpretPortable(Thread* self); /* * "mterp" interpreter. */ extern void dvmMterpStd(Thread* self); /* * Get the "this" pointer from the current frame. */ Object* dvmGetThisPtr(const Method* method, const u4* fp); /* * Verify that our tracked local references are valid. */ void dvmInterpCheckTrackedRefs(Thread* self, const Method* method, int debugTrackedRefStart); /* * Process switch statement. */ extern "C" s4 dvmInterpHandlePackedSwitch(const u2* switchData, s4 testVal); extern "C" s4 dvmInterpHandleSparseSwitch(const u2* switchData, s4 testVal); /* * Process fill-array-data. */ extern "C" bool dvmInterpHandleFillArrayData(ArrayObject* arrayObject, const u2* arrayData); /* * Find an interface method. */ Method* dvmInterpFindInterfaceMethod(ClassObject* thisClass, u4 methodIdx, const Method* method, DvmDex* methodClassDex); /* * Determine if the debugger or profiler is currently active. */ static inline bool dvmDebuggerOrProfilerActive() { return gDvm.debuggerActive || gDvm.activeProfilers != 0; } #if defined(WITH_JIT) /* * Determine if the jit, debugger or profiler is currently active. Used when * selecting which interpreter to switch to. */ static inline bool dvmJitDebuggerOrProfilerActive() { return (gDvmJit.pProfTable != NULL) || dvmDebuggerOrProfilerActive(); } /* * Hide the translations and stick with the interpreter as long as one of the * following conditions is true. */ static inline bool dvmJitHideTranslation() { return (gDvm.sumThreadSuspendCount != 0) || (gDvmJit.codeCacheFull == true) || (gDvmJit.pProfTable == NULL); } #endif #endif // DALVIK_INTERP_DEFS_H_