/* * Copyright (C) 2019 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. */ #ifndef ART_RUNTIME_NTERP_HELPERS_H_ #define ART_RUNTIME_NTERP_HELPERS_H_ #include "quick/quick_method_frame_info.h" namespace art { class ArtMethod; /** * The frame size nterp will use for the given method. */ size_t NterpGetFrameSize(ArtMethod* method, InstructionSet isa = kRuntimeISA) REQUIRES_SHARED(Locks::mutator_lock_); /** * Returns the QuickMethodFrameInfo of the given frame corresponding to the * given method. */ QuickMethodFrameInfo NterpFrameInfo(ArtMethod** frame) REQUIRES_SHARED(Locks::mutator_lock_); /** * Returns the dex PC at which the given nterp frame is executing. */ uint32_t NterpGetDexPC(ArtMethod** frame) REQUIRES_SHARED(Locks::mutator_lock_); /** * Returns the reference array to be used by the GC to visit references in an * nterp frame. */ uintptr_t NterpGetReferenceArray(ArtMethod** frame) REQUIRES_SHARED(Locks::mutator_lock_); /** * Returns the dex register array to be used by the GC to update references in * an nterp frame. */ uintptr_t NterpGetRegistersArray(ArtMethod** frame) REQUIRES_SHARED(Locks::mutator_lock_); /** * Returns the nterp landing pad for catching an exception. */ uintptr_t NterpGetCatchHandler(); /** * Returns the value of dex register number `vreg` in the given frame. */ uint32_t NterpGetVReg(ArtMethod** frame, uint16_t vreg) REQUIRES_SHARED(Locks::mutator_lock_); /** * Returns the value of dex register number `vreg` in the given frame if it is a * reference. Return 0 otehrwise. */ uint32_t NterpGetVRegReference(ArtMethod** frame, uint16_t vreg) REQUIRES_SHARED(Locks::mutator_lock_); /** * Returns whether the given method can run with nterp. The instruction set can * be passed for cross-compilation. */ bool CanMethodUseNterp(ArtMethod* method, InstructionSet isa = kRuntimeISA) REQUIRES_SHARED(Locks::mutator_lock_); } // namespace art #endif // ART_RUNTIME_NTERP_HELPERS_H_