/*
 * Copyright (C) 2012 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.
 */

#define RUNTIME_SUPPORT_FUNC_LIST(V) \
  V(LockObject, "art_lock_object_from_code") \
  V(UnlockObject, "art_unlock_object_from_code") \
  V(GetCurrentThread, "art_get_current_thread_from_code") \
  V(SetCurrentThread, "art_set_current_thread_from_code") \
  V(TestSuspend, "art_test_suspend_from_code") \
  V(ThrowException, "art_throw_exception_from_code") \
  V(ThrowNullPointerException, "art_throw_null_pointer_exception_from_code") \
  V(ThrowDivZeroException, "art_throw_div_zero_from_code") \
  V(ThrowIndexOutOfBounds, "art_throw_array_bounds_from_code") \
  V(InitializeTypeAndVerifyAccess, "art_initialize_type_and_verify_access_from_code") \
  V(InitializeType, "art_initialize_type_from_code") \
  V(IsAssignable, "art_is_assignable_from_code") \
  V(CheckCast, "art_check_cast_from_code") \
  V(AllocObject, "art_alloc_object_from_code") \
  V(AllocObjectWithAccessCheck, "art_alloc_object_from_code_with_access_check") \
  V(AllocArray, "art_alloc_array_from_code") \
  V(AllocArrayWithAccessCheck, "art_alloc_array_from_code_with_access_check") \
  V(CheckAndAllocArray, "art_check_and_alloc_array_from_code") \
  V(CheckAndAllocArrayWithAccessCheck, "art_check_and_alloc_array_from_code_with_access_check") \
  V(FindInstanceField, "art_find_instance_field_from_code") \
  V(FindStaticField, "art_find_static_field_from_code") \
  V(ResolveString, "art_resolve_string_from_code") \
  V(ResolveMethod, "art_resolve_method_from_code") \
  V(Set32Static, "art_set32_static_from_code") \
  V(Set64Static, "art_set64_static_from_code") \
  V(SetObjectStatic, "art_set_obj_static_from_code") \
  V(Get32Static, "art_get32_static_from_code") \
  V(Get64Static, "art_get64_static_from_code") \
  V(GetObjectStatic, "art_get_obj_static_from_code") \
  V(Set32Instance, "art_set32_instance_from_code") \
  V(Set64Instance, "art_set64_instance_from_code") \
  V(SetObjectInstance, "art_set_obj_instance_from_code") \
  V(Get32Instance, "art_get32_instance_from_code") \
  V(Get64Instance, "art_get64_instance_from_code") \
  V(GetObjectInstance, "art_get_obj_instance_from_code") \
  V(InitializeStaticStorage, "art_initialize_static_storage_from_code") \
  V(IsExceptionPending, "art_is_exception_pending_from_code") \
  V(FindCatchBlock, "art_find_catch_block_from_code") \
  V(ObjectInit, "art_object_init_from_code") \
  V(FindInterfaceMethod, "art_find_interface_method_from_code")
