16f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers/*
26f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers * Copyright (C) 2012 The Android Open Source Project
36f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers *
46f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers * Licensed under the Apache License, Version 2.0 (the "License");
56f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers * you may not use this file except in compliance with the License.
66f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers * You may obtain a copy of the License at
76f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers *
86f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers *      http://www.apache.org/licenses/LICENSE-2.0
96f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers *
106f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers * Unless required by applicable law or agreed to in writing, software
116f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers * distributed under the License is distributed on an "AS IS" BASIS,
126f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers * See the License for the specific language governing permissions and
146f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers * limitations under the License.
156f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers */
166f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
176f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers#ifndef ART_RUNTIME_ENTRYPOINTS_RUNTIME_ASM_ENTRYPOINTS_H_
186f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers#define ART_RUNTIME_ENTRYPOINTS_RUNTIME_ASM_ENTRYPOINTS_H_
196f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
206f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersnamespace art {
216f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
226f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers#ifndef BUILDING_LIBART
236f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers#error "File and symbols only for use within libart."
246f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers#endif
256f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
266f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersextern "C" void* art_jni_dlsym_lookup_stub(JNIEnv*, jobject);
276f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersstatic inline const void* GetJniDlsymLookupStub() {
286f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers  return reinterpret_cast<const void*>(art_jni_dlsym_lookup_stub);
296f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers}
306f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
316f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers// Return the address of quick stub code for handling IMT conflicts.
32e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartierextern "C" void art_quick_imt_conflict_trampoline(ArtMethod*);
336f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersstatic inline const void* GetQuickImtConflictStub() {
346f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers  return reinterpret_cast<const void*>(art_quick_imt_conflict_trampoline);
356f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers}
366f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
376f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers// Return the address of quick stub code for bridging from quick code to the interpreter.
38e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartierextern "C" void art_quick_to_interpreter_bridge(ArtMethod*);
396f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersstatic inline const void* GetQuickToInterpreterBridge() {
406f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers  return reinterpret_cast<const void*>(art_quick_to_interpreter_bridge);
416f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers}
426f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
436f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers// Return the address of quick stub code for handling JNI calls.
44e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartierextern "C" void art_quick_generic_jni_trampoline(ArtMethod*);
456f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersstatic inline const void* GetQuickGenericJniStub() {
466f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers  return reinterpret_cast<const void*>(art_quick_generic_jni_trampoline);
476f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers}
486f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
496f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers// Return the address of quick stub code for handling transitions into the proxy invoke handler.
506f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersextern "C" void art_quick_proxy_invoke_handler();
516f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersstatic inline const void* GetQuickProxyInvokeHandler() {
526f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers  return reinterpret_cast<const void*>(art_quick_proxy_invoke_handler);
536f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers}
546f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
556f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers// Return the address of quick stub code for resolving a method at first call.
56e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartierextern "C" void art_quick_resolution_trampoline(ArtMethod*);
576f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersstatic inline const void* GetQuickResolutionStub() {
586f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers  return reinterpret_cast<const void*>(art_quick_resolution_trampoline);
596f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers}
606f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
616f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers// Entry point for quick code that performs deoptimization.
626f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersextern "C" void art_quick_deoptimize();
636f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersstatic inline const void* GetQuickDeoptimizationEntryPoint() {
646f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers  return reinterpret_cast<const void*>(art_quick_deoptimize);
656f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers}
666f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
676f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers// Return address of instrumentation entry point used by non-interpreter based tracing.
686f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersextern "C" void art_quick_instrumentation_entry(void*);
696f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersstatic inline const void* GetQuickInstrumentationEntryPoint() {
706f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers  return reinterpret_cast<const void*>(art_quick_instrumentation_entry);
716f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers}
726f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
730747466fca310eedea5fc49e37d54f240a0b3c0fSebastien Hertz// Stub to deoptimize from compiled code.
740747466fca310eedea5fc49e37d54f240a0b3c0fSebastien Hertzextern "C" void art_quick_deoptimize_from_compiled_code();
75d43b3ac88cd46b8815890188c9c2b9a3f1564648Mingyao Yang
766f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers// The return_pc of instrumentation exit stub.
776f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersextern "C" void art_quick_instrumentation_exit();
786f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogersstatic inline const void* GetQuickInstrumentationExitPc() {
796f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers  return reinterpret_cast<const void*>(art_quick_instrumentation_exit);
806f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers}
816f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
826f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers}  // namespace art
836f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers
846f3dbbadf4ce66982eb3d400e0a74cb73eb034f3Ian Rogers#endif  // ART_RUNTIME_ENTRYPOINTS_RUNTIME_ASM_ENTRYPOINTS_H_
85