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