1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2014 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker #ifndef ART_RUNTIME_ENTRYPOINTS_QUICK_QUICK_DEFAULT_EXTERNS_H_ 18*795d594fSAndroid Build Coastguard Worker #define ART_RUNTIME_ENTRYPOINTS_QUICK_QUICK_DEFAULT_EXTERNS_H_ 19*795d594fSAndroid Build Coastguard Worker 20*795d594fSAndroid Build Coastguard Worker #include <cstdint> 21*795d594fSAndroid Build Coastguard Worker 22*795d594fSAndroid Build Coastguard Worker namespace art HIDDEN { 23*795d594fSAndroid Build Coastguard Worker namespace mirror { 24*795d594fSAndroid Build Coastguard Worker class Array; 25*795d594fSAndroid Build Coastguard Worker class Class; 26*795d594fSAndroid Build Coastguard Worker class Object; 27*795d594fSAndroid Build Coastguard Worker } // namespace mirror 28*795d594fSAndroid Build Coastguard Worker class ArtMethod; 29*795d594fSAndroid Build Coastguard Worker } // namespace art 30*795d594fSAndroid Build Coastguard Worker 31*795d594fSAndroid Build Coastguard Worker // These are extern declarations of assembly stubs with common names. 32*795d594fSAndroid Build Coastguard Worker 33*795d594fSAndroid Build Coastguard Worker // Cast entrypoints. 34*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_check_instance_of(art::mirror::Object*, art::mirror::Class*); 35*795d594fSAndroid Build Coastguard Worker 36*795d594fSAndroid Build Coastguard Worker // Resolution and initialization entrypoints. 37*795d594fSAndroid Build Coastguard Worker extern "C" void* art_quick_initialize_static_storage(art::mirror::Class*); 38*795d594fSAndroid Build Coastguard Worker extern "C" void* art_quick_resolve_type(uint32_t); 39*795d594fSAndroid Build Coastguard Worker extern "C" void* art_quick_resolve_type_and_verify_access(uint32_t); 40*795d594fSAndroid Build Coastguard Worker extern "C" void* art_quick_resolve_method_handle(uint32_t); 41*795d594fSAndroid Build Coastguard Worker extern "C" void* art_quick_resolve_method_type(uint32_t); 42*795d594fSAndroid Build Coastguard Worker extern "C" void* art_quick_resolve_string(uint32_t); 43*795d594fSAndroid Build Coastguard Worker 44*795d594fSAndroid Build Coastguard Worker // Field entrypoints. 45*795d594fSAndroid Build Coastguard Worker extern "C" int art_quick_set8_instance(uint32_t, void*, int8_t); 46*795d594fSAndroid Build Coastguard Worker extern "C" int art_quick_set8_static(uint32_t, int8_t); 47*795d594fSAndroid Build Coastguard Worker extern "C" int art_quick_set16_instance(uint32_t, void*, int16_t); 48*795d594fSAndroid Build Coastguard Worker extern "C" int art_quick_set16_static(uint32_t, int16_t); 49*795d594fSAndroid Build Coastguard Worker extern "C" int art_quick_set32_instance(uint32_t, void*, int32_t); 50*795d594fSAndroid Build Coastguard Worker extern "C" int art_quick_set32_static(uint32_t, int32_t); 51*795d594fSAndroid Build Coastguard Worker extern "C" int art_quick_set64_instance(uint32_t, void*, int64_t); 52*795d594fSAndroid Build Coastguard Worker extern "C" int art_quick_set64_static(uint32_t, int64_t); 53*795d594fSAndroid Build Coastguard Worker extern "C" int art_quick_set_obj_instance(uint32_t, void*, void*); 54*795d594fSAndroid Build Coastguard Worker extern "C" int art_quick_set_obj_static(uint32_t, void*); 55*795d594fSAndroid Build Coastguard Worker extern "C" ssize_t art_quick_get_byte_instance(uint32_t, void*); 56*795d594fSAndroid Build Coastguard Worker extern "C" size_t art_quick_get_boolean_instance(uint32_t, void*); 57*795d594fSAndroid Build Coastguard Worker extern "C" ssize_t art_quick_get_byte_static(uint32_t); 58*795d594fSAndroid Build Coastguard Worker extern "C" size_t art_quick_get_boolean_static(uint32_t); 59*795d594fSAndroid Build Coastguard Worker extern "C" ssize_t art_quick_get_short_instance(uint32_t, void*); 60*795d594fSAndroid Build Coastguard Worker extern "C" size_t art_quick_get_char_instance(uint32_t, void*); 61*795d594fSAndroid Build Coastguard Worker extern "C" ssize_t art_quick_get_short_static(uint32_t); 62*795d594fSAndroid Build Coastguard Worker extern "C" size_t art_quick_get_char_static(uint32_t); 63*795d594fSAndroid Build Coastguard Worker extern "C" ssize_t art_quick_get32_instance(uint32_t, void*); 64*795d594fSAndroid Build Coastguard Worker extern "C" ssize_t art_quick_get32_static(uint32_t); 65*795d594fSAndroid Build Coastguard Worker extern "C" int64_t art_quick_get64_instance(uint32_t, void*); 66*795d594fSAndroid Build Coastguard Worker extern "C" int64_t art_quick_get64_static(uint32_t); 67*795d594fSAndroid Build Coastguard Worker extern "C" void* art_quick_get_obj_instance(uint32_t, void*); 68*795d594fSAndroid Build Coastguard Worker extern "C" void* art_quick_get_obj_static(uint32_t); 69*795d594fSAndroid Build Coastguard Worker 70*795d594fSAndroid Build Coastguard Worker // Array entrypoints. 71*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_aput_obj_with_null_and_bound_check(art::mirror::Array*, int32_t, 72*795d594fSAndroid Build Coastguard Worker art::mirror::Object*); 73*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_aput_obj_with_bound_check(art::mirror::Array*, int32_t, 74*795d594fSAndroid Build Coastguard Worker art::mirror::Object*); 75*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_aput_obj(art::mirror::Array*, int32_t, art::mirror::Object*); 76*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_handle_fill_data(void*, void*); 77*795d594fSAndroid Build Coastguard Worker 78*795d594fSAndroid Build Coastguard Worker // Lock entrypoints. 79*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_lock_object(art::mirror::Object*); 80*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_unlock_object(art::mirror::Object*); 81*795d594fSAndroid Build Coastguard Worker 82*795d594fSAndroid Build Coastguard Worker // Lock entrypoints that do not inline any behavior (e.g., thin-locks). 83*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_lock_object_no_inline(art::mirror::Object*); 84*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_unlock_object_no_inline(art::mirror::Object*); 85*795d594fSAndroid Build Coastguard Worker 86*795d594fSAndroid Build Coastguard Worker // Math entrypoints. 87*795d594fSAndroid Build Coastguard Worker extern "C" int64_t art_quick_d2l(double); 88*795d594fSAndroid Build Coastguard Worker extern "C" int64_t art_quick_f2l(float); 89*795d594fSAndroid Build Coastguard Worker extern "C" float art_quick_l2f(int64_t); 90*795d594fSAndroid Build Coastguard Worker extern "C" int64_t art_quick_ldiv(int64_t, int64_t); 91*795d594fSAndroid Build Coastguard Worker extern "C" int64_t art_quick_lmod(int64_t, int64_t); 92*795d594fSAndroid Build Coastguard Worker extern "C" int64_t art_quick_lmul(int64_t, int64_t); 93*795d594fSAndroid Build Coastguard Worker extern "C" uint64_t art_quick_lshl(uint64_t, uint32_t); 94*795d594fSAndroid Build Coastguard Worker extern "C" uint64_t art_quick_lshr(uint64_t, uint32_t); 95*795d594fSAndroid Build Coastguard Worker extern "C" uint64_t art_quick_lushr(uint64_t, uint32_t); 96*795d594fSAndroid Build Coastguard Worker extern "C" int64_t art_quick_mul_long(int64_t, int64_t); 97*795d594fSAndroid Build Coastguard Worker extern "C" uint64_t art_quick_shl_long(uint64_t, uint32_t); 98*795d594fSAndroid Build Coastguard Worker extern "C" uint64_t art_quick_shr_long(uint64_t, uint32_t); 99*795d594fSAndroid Build Coastguard Worker extern "C" uint64_t art_quick_ushr_long(uint64_t, uint32_t); 100*795d594fSAndroid Build Coastguard Worker 101*795d594fSAndroid Build Coastguard Worker // Intrinsic entrypoints. 102*795d594fSAndroid Build Coastguard Worker extern "C" int32_t art_quick_indexof(void*, uint32_t, uint32_t); 103*795d594fSAndroid Build Coastguard Worker extern "C" int32_t art_quick_string_compareto(void*, void*); 104*795d594fSAndroid Build Coastguard Worker extern "C" void* art_quick_memcpy(void*, const void*, size_t); 105*795d594fSAndroid Build Coastguard Worker 106*795d594fSAndroid Build Coastguard Worker // Invoke entrypoints. 107*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_imt_conflict_trampoline(art::ArtMethod*); 108*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_resolution_trampoline(art::ArtMethod*); 109*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_to_interpreter_bridge(art::ArtMethod*); 110*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_invoke_direct_trampoline_with_access_check(uint32_t, void*); 111*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_invoke_interface_trampoline_with_access_check(uint32_t, void*); 112*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_invoke_static_trampoline_with_access_check(uint32_t, void*); 113*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_invoke_super_trampoline_with_access_check(uint32_t, void*); 114*795d594fSAndroid Build Coastguard Worker 115*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_invoke_virtual_trampoline_with_access_check(uint32_t, void*); 116*795d594fSAndroid Build Coastguard Worker 117*795d594fSAndroid Build Coastguard Worker // JNI read barrier entrypoint. Note: Preserves all registers. 118*795d594fSAndroid Build Coastguard Worker extern "C" void art_jni_read_barrier(art::ArtMethod* method); 119*795d594fSAndroid Build Coastguard Worker 120*795d594fSAndroid Build Coastguard Worker // JNI method start entrypoint. Note: Custom calling convention. 121*795d594fSAndroid Build Coastguard Worker extern "C" void art_jni_method_start(); 122*795d594fSAndroid Build Coastguard Worker extern "C" void art_jni_monitored_method_start(); 123*795d594fSAndroid Build Coastguard Worker extern "C" void art_jni_method_end(); 124*795d594fSAndroid Build Coastguard Worker extern "C" void art_jni_monitored_method_end(); 125*795d594fSAndroid Build Coastguard Worker extern "C" void art_jni_method_entry_hook(); 126*795d594fSAndroid Build Coastguard Worker 127*795d594fSAndroid Build Coastguard Worker // JNI lock/unlock entrypoints. Note: Custom calling convention. 128*795d594fSAndroid Build Coastguard Worker extern "C" void art_jni_lock_object(art::mirror::Object*); 129*795d594fSAndroid Build Coastguard Worker extern "C" void art_jni_lock_object_no_inline(art::mirror::Object*); 130*795d594fSAndroid Build Coastguard Worker extern "C" void art_jni_unlock_object(art::mirror::Object*); 131*795d594fSAndroid Build Coastguard Worker extern "C" void art_jni_unlock_object_no_inline(art::mirror::Object*); 132*795d594fSAndroid Build Coastguard Worker 133*795d594fSAndroid Build Coastguard Worker // Polymorphic invoke entrypoints. 134*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_invoke_polymorphic(uint32_t, void*); 135*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_invoke_polymorphic_with_hidden_receiver(uint32_t, void*); 136*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_invoke_custom(uint32_t, void*); 137*795d594fSAndroid Build Coastguard Worker 138*795d594fSAndroid Build Coastguard Worker // Thread entrypoints. 139*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_test_suspend(); 140*795d594fSAndroid Build Coastguard Worker 141*795d594fSAndroid Build Coastguard Worker // Throw entrypoints. 142*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_deliver_exception(art::mirror::Object*); 143*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_throw_array_bounds(int32_t index, int32_t limit); 144*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_throw_div_zero(); 145*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_throw_null_pointer_exception(); 146*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_throw_null_pointer_exception_from_signal(uintptr_t address); 147*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_throw_stack_overflow(void*); 148*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_throw_string_bounds(int32_t index, int32_t limit); 149*795d594fSAndroid Build Coastguard Worker 150*795d594fSAndroid Build Coastguard Worker // Inline cache. 151*795d594fSAndroid Build Coastguard Worker extern "C" void art_quick_update_inline_cache(); 152*795d594fSAndroid Build Coastguard Worker 153*795d594fSAndroid Build Coastguard Worker #endif // ART_RUNTIME_ENTRYPOINTS_QUICK_QUICK_DEFAULT_EXTERNS_H_ 154