/* * 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. */ // DEF_INTRINSICS_FUNC(ID, NAME, ATTR, RET_TYPE, // ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) #ifndef DEF_INTRINSICS_FUNC # error "missing DEF_INTRINSICS_FUNC definition!" #endif #define _EVAL_DEF_INTRINSICS_FUNC(ID, NAME, ATTR, RET_TYPE, ...) \ DEF_INTRINSICS_FUNC(ID, NAME, ATTR, RET_TYPE, __VA_ARGS__) #define _EXPAND_ARG0() kNone, kNone, kNone, kNone, kNone #define _EXPAND_ARG1(ARG1) ARG1, kNone, kNone, kNone, kNone #define _EXPAND_ARG2(ARG1, ARG2) ARG1, ARG2, kNone, kNone, kNone #define _EXPAND_ARG3(ARG1, ARG2, ARG3) ARG1, ARG2, ARG3, kNone, kNone #define _EXPAND_ARG4(ARG1, ARG2, ARG3, ARG4) ARG1, ARG2, ARG3, ARG4, kNone #define _EXPAND_ARG5(ARG1, ARG2, ARG3, ARG4, ARG5) \ ARG1, ARG2, ARG3, ARG4, ARG5 #define _JTYPE(TYPE, SPACE) _JTYPE_OF_ ## TYPE ## _UNDER_ ## SPACE // Note: These should be consistent with the type return from // IRBuilder::GetJType([type], kArray). #define _JTYPE_OF_kInt1Ty_UNDER_kArray kInt8Ty #define _JTYPE_OF_kInt8Ty_UNDER_kArray kInt8Ty #define _JTYPE_OF_kInt16Ty_UNDER_kArray kInt16Ty #define _JTYPE_OF_kInt32Ty_UNDER_kArray kInt32Ty #define _JTYPE_OF_kInt64Ty_UNDER_kArray kInt64Ty #define _JTYPE_OF_kJavaObjectTy_UNDER_kArray kJavaObjectTy // Note: These should be consistent with the type return from // IRBuilder::GetJType([type], kField). #define _JTYPE_OF_kInt1Ty_UNDER_kField kInt32Ty #define _JTYPE_OF_kInt8Ty_UNDER_kField kInt32Ty #define _JTYPE_OF_kInt16Ty_UNDER_kField kInt32Ty #define _JTYPE_OF_kInt32Ty_UNDER_kField kInt32Ty #define _JTYPE_OF_kInt64Ty_UNDER_kField kInt64Ty #define _JTYPE_OF_kJavaObjectTy_UNDER_kField kJavaObjectTy //---------------------------------------------------------------------------- // Thread //---------------------------------------------------------------------------- // Thread* art_portable_get_current_thread() _EVAL_DEF_INTRINSICS_FUNC(GetCurrentThread, art_portable_get_current_thread, kAttrReadNone | kAttrNoThrow, kJavaThreadTy, _EXPAND_ARG0()) // void art_portable_test_suspend(Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(TestSuspend, art_portable_test_suspend, kAttrNoThrow, kVoidTy, _EXPAND_ARG1(kJavaThreadTy)) // void art_portable_check_suspend() /* Expands to GetCurrentThread/TestSuspend */ _EVAL_DEF_INTRINSICS_FUNC(CheckSuspend, art_portable_check_suspend, kAttrNoThrow, kVoidTy, _EXPAND_ARG0()) // void art_portable_mark_gc_card(Object* new_value, Object* object) _EVAL_DEF_INTRINSICS_FUNC(MarkGCCard, art_portable_mark_gc_card, kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy)) //---------------------------------------------------------------------------- // Exception //---------------------------------------------------------------------------- // Should not expand - introduces the catch targets for a potentially // throwing instruction. The result is a switch key and this // instruction will be followed by a switch statement. The catch // targets will be enumerated as cases of the switch, with the fallthrough // designating the block containing the potentially throwing instruction. // bool art_portable_catch_targets(int dex_pc) _EVAL_DEF_INTRINSICS_FUNC(CatchTargets, art_portable_catch_targets, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kInt32ConstantTy)) // void art_portable_throw_exception(JavaObject* exception) _EVAL_DEF_INTRINSICS_FUNC(ThrowException, art_portable_throw_exception, kAttrDoThrow, kVoidTy, _EXPAND_ARG1(kJavaObjectTy)) // void art_portable_hl_throw_exception(JavaObject* exception) _EVAL_DEF_INTRINSICS_FUNC(HLThrowException, art_portable_hl_throw_exception, kAttrDoThrow, kVoidTy, _EXPAND_ARG1(kJavaObjectTy)) // JavaObject* art_portable_get_current_exception() _EVAL_DEF_INTRINSICS_FUNC(GetException, art_portable_get_current_exception, kAttrReadOnly | kAttrNoThrow, kJavaObjectTy, _EXPAND_ARG0()) // bool art_portable_is_exception_pending() _EVAL_DEF_INTRINSICS_FUNC(IsExceptionPending, art_portable_is_exception_pending, kAttrReadOnly | kAttrNoThrow, kInt1Ty, _EXPAND_ARG0()) // int art_portable_find_catch_block(Method* method, int try_item_offset) _EVAL_DEF_INTRINSICS_FUNC(FindCatchBlock, art_portable_find_catch_block, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG2(kJavaMethodTy, kInt32ConstantTy)) // void art_portable_throw_div_zero() _EVAL_DEF_INTRINSICS_FUNC(ThrowDivZeroException, art_portable_throw_div_zero, kAttrDoThrow, kVoidTy, _EXPAND_ARG0()) // void art_portable_throw_null_pointer_exception(uint32_t dex_pc) _EVAL_DEF_INTRINSICS_FUNC(ThrowNullPointerException, art_portable_throw_null_pointer_exception, kAttrDoThrow, kVoidTy, _EXPAND_ARG1(kInt32ConstantTy)) // void art_portable_throw_array_bounds(int index, int array_len) _EVAL_DEF_INTRINSICS_FUNC(ThrowIndexOutOfBounds, art_portable_throw_array_bounds, kAttrDoThrow, kVoidTy, _EXPAND_ARG2(kInt32Ty, kInt32Ty)) //---------------------------------------------------------------------------- // ConstString //---------------------------------------------------------------------------- // JavaObject* art_portable_const_string(uint32_t string_idx) _EVAL_DEF_INTRINSICS_FUNC(ConstString, art_portable_const_string, kAttrReadOnly | kAttrNoThrow, kJavaObjectTy, _EXPAND_ARG1(kInt32ConstantTy)) // JavaObject* art_portable_load_string_from_dex_cache(Method* method, uint32_t string_idx) _EVAL_DEF_INTRINSICS_FUNC(LoadStringFromDexCache, art_portable_load_string_from_dex_cache, kAttrReadOnly | kAttrNoThrow, kJavaObjectTy, _EXPAND_ARG1(kInt32ConstantTy)) // JavaObject* art_portable_resolve_string(Method* method, uint32_t string_idx) _EVAL_DEF_INTRINSICS_FUNC(ResolveString, art_portable_resolve_string, kAttrNone, kJavaObjectTy, _EXPAND_ARG2(kJavaMethodTy, kInt32ConstantTy)) //---------------------------------------------------------------------------- // ConstClass //---------------------------------------------------------------------------- // JavaObject* art_portable_const_class(uint32_t type_idx) _EVAL_DEF_INTRINSICS_FUNC(ConstClass, art_portable_const_class, kAttrReadOnly | kAttrNoThrow, kJavaObjectTy, _EXPAND_ARG1(kInt32ConstantTy)) // JavaObject* art_portable_initialize_type_and_verify_access(uint32_t type_idx, // Method* referrer, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(InitializeTypeAndVerifyAccess, art_portable_initialize_type_and_verify_access, kAttrNone, kJavaObjectTy, _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy)) // JavaObject* art_portable_load_type_from_dex_cache(uint32_t type_idx) _EVAL_DEF_INTRINSICS_FUNC(LoadTypeFromDexCache, art_portable_load_type_from_dex_cache, kAttrReadOnly | kAttrNoThrow, kJavaObjectTy, _EXPAND_ARG1(kInt32ConstantTy)) // JavaObject* art_portable_initialize_type(uint32_t type_idx, // Method* referrer, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(InitializeType, art_portable_initialize_type, kAttrNone, kJavaObjectTy, _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy)) //---------------------------------------------------------------------------- // Lock //---------------------------------------------------------------------------- // void art_portable_lock_object(JavaObject* obj, Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(LockObject, art_portable_lock_object, kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kJavaObjectTy, kJavaThreadTy)) // void art_portable_unlock_object(JavaObject* obj, Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(UnlockObject, art_portable_unlock_object, kAttrNone, kVoidTy, _EXPAND_ARG2(kJavaObjectTy, kJavaThreadTy)) //---------------------------------------------------------------------------- // Cast //---------------------------------------------------------------------------- // void art_portable_check_cast(JavaObject* dest_type, JavaObject* src_type) _EVAL_DEF_INTRINSICS_FUNC(CheckCast, art_portable_check_cast, kAttrNone, kVoidTy, _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy)) // void art_portable_hl_check_cast(uint32_t type_idx, JavaObject* obj) _EVAL_DEF_INTRINSICS_FUNC(HLCheckCast, art_portable_hl_check_cast, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kInt32ConstantTy, kJavaObjectTy)) // int art_portable_is_assignable(JavaObject* dest_type, JavaObject* src_type) _EVAL_DEF_INTRINSICS_FUNC(IsAssignable, art_portable_is_assignable, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy)) //---------------------------------------------------------------------------- // Allocation //---------------------------------------------------------------------------- // JavaObject* art_portable_alloc_object(uint32_t type_idx, // Method* referrer, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(AllocObject, art_portable_alloc_object, kAttrNone, kJavaObjectTy, _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy)) // JavaObject* art_portable_alloc_object_with_access_check(uint32_t type_idx, // Method* referrer, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(AllocObjectWithAccessCheck, art_portable_alloc_object_with_access_check, kAttrNone, kJavaObjectTy, _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy)) //---------------------------------------------------------------------------- // Instance //---------------------------------------------------------------------------- // JavaObject* art_portable_new_instance(uint32_t type_idx) _EVAL_DEF_INTRINSICS_FUNC(NewInstance, art_portable_new_instance, kAttrNone, kJavaObjectTy, _EXPAND_ARG1(kInt32Ty)) // bool art_portable_instance_of(uint32_t type_idx, JavaObject* ref) _EVAL_DEF_INTRINSICS_FUNC(InstanceOf, art_portable_instance_of, kAttrNone, kInt32Ty, _EXPAND_ARG2(kInt32Ty, kJavaObjectTy)) //---------------------------------------------------------------------------- // Array //---------------------------------------------------------------------------- // JavaObject* art_portable_new_array(uint32_t type_idx, uint32_t array_size) _EVAL_DEF_INTRINSICS_FUNC(NewArray, art_portable_new_array, kAttrNone, kJavaObjectTy, _EXPAND_ARG2(kInt32ConstantTy, kInt32Ty)) // uint32_t art_portable_opt_array_length(int32_t opt_flags, JavaObject* array) _EVAL_DEF_INTRINSICS_FUNC(OptArrayLength, art_portable_opt_array_length, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG2(kInt32Ty, kJavaObjectTy)) // uint32_t art_portable_array_length(JavaObject* array) _EVAL_DEF_INTRINSICS_FUNC(ArrayLength, art_portable_array_length, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kJavaObjectTy)) // JavaObject* art_portable_alloc_array(uint32_t type_idx, // Method* referrer, // uint32_t length, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(AllocArray, art_portable_alloc_array, kAttrNone, kJavaObjectTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32Ty, kJavaThreadTy)) // JavaObject* art_portable_alloc_array_with_access_check(uint32_t type_idx, // Method* referrer, // uint32_t length, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(AllocArrayWithAccessCheck, art_portable_alloc_array_with_access_check, kAttrNone, kJavaObjectTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32Ty, kJavaThreadTy)) // JavaObject* art_portable_check_and_alloc_array(uint32_t type_idx, // Method* referrer, // uint32_t length, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(CheckAndAllocArray, art_portable_check_and_alloc_array, kAttrNone, kJavaObjectTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32ConstantTy, kJavaThreadTy)) // JavaObject* art_portable_check_and_alloc_array_with_access_check(uint32_t type_idx, // Method* referrer, // uint32_t length, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(CheckAndAllocArrayWithAccessCheck, art_portable_check_and_alloc_array_with_access_check, kAttrNone, kJavaObjectTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32ConstantTy, kJavaThreadTy)) // art_portable_aget_* and art_portable_aput_* never generate exception since the // necessary checking on arguments (e.g., array and index) has already done // before invocation of these intrinsics. // // [type] void art_portable_aget_[type](JavaObject* array, uint32_t index) _EVAL_DEF_INTRINSICS_FUNC(ArrayGet, art_portable_aget, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt32Ty, kArray), _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(ArrayGetWide, art_portable_aget_wide, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt64Ty, kArray), _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(ArrayGetObject, art_portable_aget_object, kAttrReadOnly | kAttrNoThrow, _JTYPE(kJavaObjectTy, kArray), _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(ArrayGetBoolean, art_portable_aget_boolean, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt1Ty, kArray), _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(ArrayGetByte, art_portable_aget_byte, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt8Ty, kArray), _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(ArrayGetChar, art_portable_aget_char, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt16Ty, kArray), _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(ArrayGetShort, art_portable_aget_short, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt16Ty, kArray), _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) // void art_portable_aput_[type]([type] value, JavaObject* array, uint32_t index) _EVAL_DEF_INTRINSICS_FUNC(ArrayPut, art_portable_aput, kAttrNoThrow, kVoidTy, _EXPAND_ARG3(_JTYPE(kInt32Ty, kArray), kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(ArrayPutWide, art_portable_aput_wide, kAttrNoThrow, kVoidTy, _EXPAND_ARG3(_JTYPE(kInt64Ty, kArray), kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(ArrayPutObject, art_portable_aput_object, kAttrNoThrow, kVoidTy, _EXPAND_ARG3(_JTYPE(kJavaObjectTy, kArray), kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(ArrayPutBoolean, art_portable_aput_boolean, kAttrNoThrow, kVoidTy, _EXPAND_ARG3(_JTYPE(kInt1Ty, kArray), kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(ArrayPutByte, art_portable_aput_byte, kAttrNoThrow, kVoidTy, _EXPAND_ARG3(_JTYPE(kInt8Ty, kArray), kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(ArrayPutChar, art_portable_aput_char, kAttrNoThrow, kVoidTy, _EXPAND_ARG3(_JTYPE(kInt16Ty, kArray), kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(ArrayPutShort, art_portable_aput_short, kAttrNoThrow, kVoidTy, _EXPAND_ARG3(_JTYPE(kInt16Ty, kArray), kJavaObjectTy, kInt32Ty)) // void art_portable_check_put_array_element(JavaObject* value, JavaObject* array) _EVAL_DEF_INTRINSICS_FUNC(CheckPutArrayElement, art_portable_check_put_array_element, kAttrNone, kVoidTy, _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy)) // void art_portable_filled_new_array(Array* array, // uint32_t elem_jty, ...) _EVAL_DEF_INTRINSICS_FUNC(FilledNewArray, art_portable_filled_new_array, kAttrNoThrow, kVoidTy, _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kVarArgTy)) // void art_portable_fill_array_data(Method* referrer, // uint32_t dex_pc, // Array* array, // uint32_t payload_offset) _EVAL_DEF_INTRINSICS_FUNC(FillArrayData, art_portable_fill_array_data, kAttrNone, kVoidTy, _EXPAND_ARG4(kJavaMethodTy, kInt32ConstantTy, kJavaObjectTy, kInt32ConstantTy)) // void art_portable_hl_fill_array_data(int32_t offset, JavaObject* array) _EVAL_DEF_INTRINSICS_FUNC(HLFillArrayData, art_portable_hl_fill_array_data, kAttrNone, kVoidTy, _EXPAND_ARG2(kInt32ConstantTy, kJavaObjectTy)) //---------------------------------------------------------------------------- // Instance Field //---------------------------------------------------------------------------- // [type] art_portable_iget_[type](uint32_t field_idx, // Method* referrer, // JavaObject* obj) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGet, art_portable_iget, kAttrNone, _JTYPE(kInt32Ty, kField), _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetWide, art_portable_iget_wide, kAttrNone, _JTYPE(kInt64Ty, kField), _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetObject, art_portable_iget_object, kAttrNone, _JTYPE(kJavaObjectTy, kField), _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetBoolean, art_portable_iget_boolean, kAttrNone, _JTYPE(kInt1Ty, kField), _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetByte, art_portable_iget_byte, kAttrNone, _JTYPE(kInt8Ty, kField), _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetChar, art_portable_iget_char, kAttrNone, _JTYPE(kInt16Ty, kField), _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetShort, art_portable_iget_short, kAttrNone, _JTYPE(kInt16Ty, kField), _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) // [type] art_portable_iget_[type].fast(int field_offset, // bool is_volatile, // JavaObject* obj) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetFast, art_portable_iget.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt32Ty, kField), _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetWideFast, art_portable_iget_wide.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt64Ty, kField), _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetObjectFast, art_portable_iget_object.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kJavaObjectTy, kField), _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetBooleanFast, art_portable_iget_boolean.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt1Ty, kField), _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetByteFast, art_portable_iget_byte.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt8Ty, kField), _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetCharFast, art_portable_iget_char.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt16Ty, kField), _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetShortFast, art_portable_iget_short.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt16Ty, kField), _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) // void art_portable_iput_[type](uint32_t field_idx, // Method* referrer, // JavaObject* obj, // [type] new_value) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPut, art_portable_iput, kAttrNone, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt32Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutWide, art_portable_iput_wide, kAttrNone, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt64Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutObject, art_portable_iput_object, kAttrNone, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kJavaObjectTy, kField))) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutBoolean, art_portable_iput_boolean, kAttrNone, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt1Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutByte, art_portable_iput_byte, kAttrNone, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt8Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutChar, art_portable_iput_char, kAttrNone, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutShort, art_portable_iput_short, kAttrNone, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField))) // void art_portable_iput_[type].fast(int field_offset, // bool is_volatile, // JavaObject* obj, // [type] new_value) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutFast, art_portable_iput.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt32Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutWideFast, art_portable_iput_wide.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt64Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutObjectFast, art_portable_iput_object.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kJavaObjectTy, kField))) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutBooleanFast, art_portable_iput_boolean.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt1Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutByteFast, art_portable_iput_byte.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt8Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutCharFast, art_portable_iput_char.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutShortFast, art_portable_iput_short.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField))) //---------------------------------------------------------------------------- // Static Field //---------------------------------------------------------------------------- // [type] art_portable_sget_[type](uint32_t field_idx, Method* referrer) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGet, art_portable_sget, kAttrNone, _JTYPE(kInt32Ty, kField), _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetWide, art_portable_sget_wide, kAttrNone, _JTYPE(kInt64Ty, kField), _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetObject, art_portable_sget_object, kAttrNone, _JTYPE(kJavaObjectTy, kField), _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetBoolean, art_portable_sget_boolean, kAttrNone, _JTYPE(kInt1Ty, kField), _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetByte, art_portable_sget_byte, kAttrNone, _JTYPE(kInt8Ty, kField), _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetChar, art_portable_sget_char, kAttrNone, _JTYPE(kInt16Ty, kField), _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetShort, art_portable_sget_short, kAttrNone, _JTYPE(kInt16Ty, kField), _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) // [type] art_portable_sget_[type].fast(JavaObject* ssb, // int field_offset, // bool is_volatile) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetFast, art_portable_sget.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt32Ty, kField), _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetWideFast, art_portable_sget_wide.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt64Ty, kField), _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetObjectFast, art_portable_sget_object.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kJavaObjectTy, kField), _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetBooleanFast, art_portable_sget_boolean.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt1Ty, kField), _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetByteFast, art_portable_sget_byte.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt8Ty, kField), _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetCharFast, art_portable_sget_char.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt16Ty, kField), _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetShortFast, art_portable_sget_short.fast, kAttrReadOnly | kAttrNoThrow, _JTYPE(kInt16Ty, kField), _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) // void art_portable_sput_[type](uint32_t field_idx, // Method* referrer, // [type] new_value) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPut, art_portable_sput, kAttrNone, kVoidTy, _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt32Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutWide, art_portable_sput_wide, kAttrNone, kVoidTy, _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt64Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutObject, art_portable_sput_object, kAttrNone, kVoidTy, _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kJavaObjectTy, kField))) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutBoolean, art_portable_sput_boolean, kAttrNone, kVoidTy, _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt1Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutByte, art_portable_sput_byte, kAttrNone, kVoidTy, _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt8Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutChar, art_portable_sput_char, kAttrNone, kVoidTy, _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt16Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutShort, art_portable_sput_short, kAttrNone, kVoidTy, _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt16Ty, kField))) // void art_portable_sput_[type].fast(JavaObject* ssb, // int field_offset, // bool is_volatile, // [type] new_value) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutFast, art_portable_sput.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt32Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutWideFast, art_portable_sput_wide.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt64Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutObjectFast, art_portable_sput_object.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kJavaObjectTy, kField))) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutBooleanFast, art_portable_sput_boolean.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt1Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutByteFast, art_portable_sput_byte.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt8Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutCharFast, art_portable_sput_char.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt16Ty, kField))) _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutShortFast, art_portable_sput_short.fast, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt16Ty, kField))) // JavaObject* art_portable_load_declaring_class_ssb(Method* method) // Load the static storage base of the class that given method resides _EVAL_DEF_INTRINSICS_FUNC(LoadDeclaringClassSSB, art_portable_load_declaring_class_ssb, kAttrReadOnly | kAttrNoThrow, kJavaObjectTy, _EXPAND_ARG1(kJavaMethodTy)) // JavaObject* art_portable_load_class_ssb_from_dex_cache(uint32_t type_idx) _EVAL_DEF_INTRINSICS_FUNC(LoadClassSSBFromDexCache, art_portable_load_class_ssb_from_dex_cache, kAttrReadOnly | kAttrNoThrow, kJavaObjectTy, _EXPAND_ARG1(kInt32ConstantTy)) // JavaObject* art_portable_init_and_load_class_ssb(uint32_t type_idx, // Method* referrer, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(InitializeAndLoadClassSSB, art_portable_init_and_load_class_ssb, kAttrNone, kJavaObjectTy, _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy)) //---------------------------------------------------------------------------- // High-level Array get/put // // Similar to art_portable_aget/aput_xxx, but checks not yet performed. // OptFlags contain info describing whether frontend has determined that // null check and/or array bounds check may be skipped. // // [type] void art_portable_hl_aget_[type](int optFlags, JavaObject* array, uint32_t index) _EVAL_DEF_INTRINSICS_FUNC(HLArrayGet, art_portable_hl_aget, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetFloat, art_portable_hl_aget_float, kAttrReadOnly | kAttrNoThrow, kFloatTy, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetWide, art_portable_hl_aget_wide, kAttrReadOnly | kAttrNoThrow, kInt64Ty, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetDouble, art_portable_hl_aget_double, kAttrReadOnly | kAttrNoThrow, kDoubleTy, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetObject, art_portable_hl_aget_object, kAttrReadOnly | kAttrNoThrow, kJavaObjectTy, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetBoolean, art_portable_hl_aget_boolean, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetByte, art_portable_hl_aget_byte, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetChar, art_portable_hl_aget_char, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetShort, art_portable_hl_aget_short, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) // void art_portable_aput_[type](int optFlags, [type] value, JavaObject* array, uint32_t index) _EVAL_DEF_INTRINSICS_FUNC(HLArrayPut, art_portable_hl_aput, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutFloat, art_portable_hl_aput_float, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kFloatTy, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutWide, art_portable_hl_aput_wide, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kInt64Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutDouble, art_portable_hl_aput_double, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kDoubleTy, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutObject, art_portable_hl_aput_object, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kJavaObjectTy, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutBoolean, art_portable_hl_aput_boolean, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutByte, art_portable_hl_aput_byte, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutChar, art_portable_hl_aput_char, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutShort, art_portable_hl_aput_short, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) //---------------------------------------------------------------------------- // High-level Instance get/put // // Similar to art_portable_iget/iput_xxx, but checks not yet performed. // OptFlags contain info describing whether frontend has determined that // null check may be skipped. // // [type] void art_portable_hl_iget_[type](int optFlags, JavaObject* obj, uint32_t field_idx) _EVAL_DEF_INTRINSICS_FUNC(HLIGet, art_portable_hl_iget, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIGetFloat, art_portable_hl_iget_float, kAttrReadOnly | kAttrNoThrow, kFloatTy, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIGetWide, art_portable_hl_iget_wide, kAttrReadOnly | kAttrNoThrow, kInt64Ty, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIGetDouble, art_portable_hl_iget_double, kAttrReadOnly | kAttrNoThrow, kDoubleTy, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIGetObject, art_portable_hl_iget_object, kAttrReadOnly | kAttrNoThrow, kJavaObjectTy, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIGetBoolean, art_portable_hl_iget_boolean, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIGetByte, art_portable_hl_iget_byte, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIGetChar, art_portable_hl_iget_char, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIGetShort, art_portable_hl_iget_short, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) // void art_portable_iput_[type](int optFlags, [type] value, JavaObject* obj, uint32_t field_idx) _EVAL_DEF_INTRINSICS_FUNC(HLIPut, art_portable_hl_iput, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIPutFloat, art_portable_hl_iput_float, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kFloatTy, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIPutWide, art_portable_hl_iput_wide, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kInt64Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIPutDouble, art_portable_hl_iput_double, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kDoubleTy, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIPutObject, art_portable_hl_iput_object, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kJavaObjectTy, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIPutBoolean, art_portable_hl_iput_boolean, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIPutByte, art_portable_hl_iput_byte, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIPutChar, art_portable_hl_iput_char, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(HLIPutShort, art_portable_hl_iput_short, kAttrNoThrow, kVoidTy, _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) //---------------------------------------------------------------------------- // High-level Invokes (fast-path determination not yet performed) // // NOTE: We expect these intrinsics to be temporary. Once calling conventions are // fully merged, the unified front end will lower down to the // InvokeRetxxx() intrinsics in the next section and these will be // removed. // // arg0: InvokeType [ignored if FilledNewArray] // arg1: method_idx [ignored if FilledNewArray] // arg2: optimization_flags (primary to note whether null checking is needed) // [arg3..argN]: actual arguments //---------------------------------------------------------------------------- // INVOKE method returns void _EVAL_DEF_INTRINSICS_FUNC(HLInvokeVoid, art_portable_hl_invoke.void, kAttrNone, kVoidTy, _EXPAND_ARG1(kVarArgTy)) // INVOKE method returns object _EVAL_DEF_INTRINSICS_FUNC(HLInvokeObj, art_portable_hl_invoke.obj, kAttrNone, kJavaObjectTy, _EXPAND_ARG1(kVarArgTy)) // INVOKE method returns int _EVAL_DEF_INTRINSICS_FUNC(HLInvokeInt, art_portable_hl_invoke.i32, kAttrNone, kInt32Ty, _EXPAND_ARG1(kVarArgTy)) // INVOKE method returns float _EVAL_DEF_INTRINSICS_FUNC(HLInvokeFloat, art_portable_hl_invoke.f32, kAttrNone, kFloatTy, _EXPAND_ARG1(kVarArgTy)) // INVOKE method returns long _EVAL_DEF_INTRINSICS_FUNC(HLInvokeLong, art_portable_hl_invoke.i64, kAttrNone, kInt64Ty, _EXPAND_ARG1(kVarArgTy)) // INVOKE method returns double _EVAL_DEF_INTRINSICS_FUNC(HLInvokeDouble, art_portable_hl_invoke.f64, kAttrNone, kDoubleTy, _EXPAND_ARG1(kVarArgTy)) // FILLED_NEW_ARRAY returns object _EVAL_DEF_INTRINSICS_FUNC(HLFilledNewArray, art_portable_hl_filled_new_array, kAttrNone, kJavaObjectTy, _EXPAND_ARG1(kVarArgTy)) //---------------------------------------------------------------------------- // Invoke //---------------------------------------------------------------------------- // Method* art_portable_find_static_method_with_access_check(uint32_t method_idx, // JavaObject* this, // Method* referrer, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(FindStaticMethodWithAccessCheck, art_portable_find_static_method_with_access_check, kAttrNone, kJavaMethodTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy)) // Method* art_portable_find_direct_method_with_access_check(uint32_t method_idx, // JavaObject* this, // Method* referrer, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(FindDirectMethodWithAccessCheck, art_portable_find_direct_method_with_access_check, kAttrNone, kJavaMethodTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy)) // Method* art_portable_find_virtual_method_with_access_check(uint32_t method_idx, // JavaObject* this, // Method* referrer, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(FindVirtualMethodWithAccessCheck, art_portable_find_virtual_method_with_access_check, kAttrNone, kJavaMethodTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy)) // Method* art_portable_find_super_method_with_access_check(uint32_t method_idx, // JavaObject* this, // Method* referrer, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(FindSuperMethodWithAccessCheck, art_portable_find_super_method_with_access_check, kAttrNone, kJavaMethodTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy)) // Method* art_portable_find_interface_method_with_access_check(uint32_t method_idx, // JavaObject* this, // Method* referrer, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(FindInterfaceMethodWithAccessCheck, art_portable_find_interface_method_with_access_check, kAttrNone, kJavaMethodTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy)) // Method* art_portable_get_sd_callee_method_obj_addr(uint32_t method_idx) _EVAL_DEF_INTRINSICS_FUNC(GetSDCalleeMethodObjAddrFast, art_portable_get_sd_callee_method_obj_addr_fast, kAttrReadOnly | kAttrNoThrow, kJavaMethodTy, _EXPAND_ARG1(kInt32ConstantTy)) // Method* art_portable_get_virtual_callee_method_obj_addr(uint32_t vtable_idx, // JavaObject* this) _EVAL_DEF_INTRINSICS_FUNC(GetVirtualCalleeMethodObjAddrFast, art_portable_get_virtual_callee_method_obj_addr_fast, kAttrReadOnly | kAttrNoThrow, kJavaMethodTy, _EXPAND_ARG2(kInt32ConstantTy, kJavaObjectTy)) // Method* art_portable_get_interface_callee_method_obj_addr(uint32_t method_idx, // JavaObject* this, // Method* referrer, // Thread* thread) _EVAL_DEF_INTRINSICS_FUNC(GetInterfaceCalleeMethodObjAddrFast, art_portable_get_interface_callee_method_obj_addr_fast, kAttrNone, kJavaMethodTy, _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy)) // [type] art_portable_invoke.[type](Method* callee, ...) // INVOKE method returns void _EVAL_DEF_INTRINSICS_FUNC(InvokeRetVoid, art_portable_invoke.void, kAttrNone, kVoidTy, _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) // INVOKE method returns the value of type boolean _EVAL_DEF_INTRINSICS_FUNC(InvokeRetBoolean, art_portable_invoke.bool, kAttrNone, kInt1Ty, _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) // INVOKE method returns the value of type byte _EVAL_DEF_INTRINSICS_FUNC(InvokeRetByte, art_portable_invoke.byte, kAttrNone, kInt8Ty, _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) // INVOKE method returns the value of type char _EVAL_DEF_INTRINSICS_FUNC(InvokeRetChar, art_portable_invoke.char, kAttrNone, kInt16Ty, _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) // INVOKE method returns the value of type short _EVAL_DEF_INTRINSICS_FUNC(InvokeRetShort, art_portable_invoke.short, kAttrNone, kInt16Ty, _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) // INVOKE method returns the value of type int _EVAL_DEF_INTRINSICS_FUNC(InvokeRetInt, art_portable_invoke.int, kAttrNone, kInt32Ty, _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) // INVOKE method returns the value of type long _EVAL_DEF_INTRINSICS_FUNC(InvokeRetLong, art_portable_invoke.long, kAttrNone, kInt64Ty, _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) // INVOKE method returns the value of type float _EVAL_DEF_INTRINSICS_FUNC(InvokeRetFloat, art_portable_invoke.float, kAttrNone, kFloatTy, _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) // INVOKE method returns the value of type double _EVAL_DEF_INTRINSICS_FUNC(InvokeRetDouble, art_portable_invoke.double, kAttrNone, kDoubleTy, _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) // INVOKE method returns the value of type "object" _EVAL_DEF_INTRINSICS_FUNC(InvokeRetObject, art_portable_invoke.object, kAttrNone, kJavaObjectTy, _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) //---------------------------------------------------------------------------- // Math //---------------------------------------------------------------------------- // int art_portable_{div,rem}_int(int a, int b) _EVAL_DEF_INTRINSICS_FUNC(DivInt, art_portable_div_int, kAttrReadNone | kAttrNoThrow, kInt32Ty, _EXPAND_ARG2(kInt32Ty, kInt32Ty)) _EVAL_DEF_INTRINSICS_FUNC(RemInt, art_portable_rem_int, kAttrReadNone | kAttrNoThrow, kInt32Ty, _EXPAND_ARG2(kInt32Ty, kInt32Ty)) // long art_portable_{div,rem}_long(long a, long b) _EVAL_DEF_INTRINSICS_FUNC(DivLong, art_portable_div_long, kAttrReadNone | kAttrNoThrow, kInt64Ty, _EXPAND_ARG2(kInt64Ty, kInt64Ty)) _EVAL_DEF_INTRINSICS_FUNC(RemLong, art_portable_rem_long, kAttrReadNone | kAttrNoThrow, kInt64Ty, _EXPAND_ARG2(kInt64Ty, kInt64Ty)) // int64_t art_portable_d2l(double f) _EVAL_DEF_INTRINSICS_FUNC(D2L, art_portable_d2l, kAttrReadNone | kAttrNoThrow, kInt64Ty, _EXPAND_ARG1(kDoubleTy)) // int32_t art_portable_d2l(double f) _EVAL_DEF_INTRINSICS_FUNC(D2I, art_portable_d2i, kAttrReadNone | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kDoubleTy)) // int64_t art_portable_f2l(float f) _EVAL_DEF_INTRINSICS_FUNC(F2L, art_portable_f2l, kAttrReadNone | kAttrNoThrow, kInt64Ty, _EXPAND_ARG1(kFloatTy)) // int32_t art_portable_f2i(float f) _EVAL_DEF_INTRINSICS_FUNC(F2I, art_portable_f2i, kAttrReadNone | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kFloatTy)) //---------------------------------------------------------------------------- // sput intrinsics to assist MIR to Greenland_ir conversion. // "HL" versions - will be deprecated when fast/slow path handling done // in the common frontend. //---------------------------------------------------------------------------- // void sput_hl(int field_idx, int val) _EVAL_DEF_INTRINSICS_FUNC(HLSput, art_portable_hl_sput, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kInt32Ty, kInt32Ty)) // void sput_hl_object(int field_idx, object* val) _EVAL_DEF_INTRINSICS_FUNC(HLSputObject, art_portable_hl_sput_object, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kInt32Ty, kJavaObjectTy)) // void sput_hl_boolean(int field_idx, kInt1Ty) _EVAL_DEF_INTRINSICS_FUNC(HLSputBoolean, art_portable_hl_sput_boolean, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kInt32Ty, kInt32Ty)) // void sput_hl_byte(int field_idx, int val) _EVAL_DEF_INTRINSICS_FUNC(HLSputByte, art_portable_hl_sput_byte, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kInt32Ty, kInt32Ty)) // void sput_hl_char(int field_idx, kInt16Ty val) _EVAL_DEF_INTRINSICS_FUNC(HLSputChar, art_portable_hl_sput_char, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kInt32Ty, kInt32Ty)) // void sput_hl_short(int field_idx, int val) _EVAL_DEF_INTRINSICS_FUNC(HLSputShort, art_portable_hl_sput_short, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kInt32Ty, kInt32Ty)) // void sput_hl_wide(int field_idx, long val) _EVAL_DEF_INTRINSICS_FUNC(HLSputWide, art_portable_hl_sput_wide, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kInt32Ty, kInt64Ty)) // void sput_hl_double(int field_idx, double val) _EVAL_DEF_INTRINSICS_FUNC(HLSputDouble, art_portable_hl_sput_double, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kInt32Ty, kDoubleTy)) // void sput_hl_float(int field_idx, float val) _EVAL_DEF_INTRINSICS_FUNC(HLSputFloat, art_portable_hl_sput_float, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kInt32Ty, kFloatTy)) //---------------------------------------------------------------------------- // sget intrinsics to assist MIR to Greenland_ir conversion. // "HL" versions - will be deprecated when fast/slow path handling done // in the common frontend. //---------------------------------------------------------------------------- // int sget_hl(int field_idx) _EVAL_DEF_INTRINSICS_FUNC(HLSget, art_portable_hl_sget, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kInt32Ty)) // object* sget_hl_object(int field_idx) _EVAL_DEF_INTRINSICS_FUNC(HLSgetObject, art_portable_hl_sget_object, kAttrReadOnly | kAttrNoThrow, kJavaObjectTy, _EXPAND_ARG1(kInt32Ty)) // boolean sget_hl_boolean(int field_idx) _EVAL_DEF_INTRINSICS_FUNC(HLSgetBoolean, art_portable_hl_sget_boolean, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kInt32Ty)) // byte sget_hl_byte(int field_idx) _EVAL_DEF_INTRINSICS_FUNC(HLSgetByte, art_portable_hl_sget_byte, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kInt32Ty)) // char sget_hl_char(int field_idx) _EVAL_DEF_INTRINSICS_FUNC(HLSgetChar, art_portable_hl_sget_char, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kInt32Ty)) // char sget_hl_short(int field_idx) _EVAL_DEF_INTRINSICS_FUNC(HLSgetShort, art_portable_hl_sget_short, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kInt32Ty)) // char sget_hl_wide(int field_idx) _EVAL_DEF_INTRINSICS_FUNC(HLSgetWide, art_portable_hl_sget_wide, kAttrReadOnly | kAttrNoThrow, kInt64Ty, _EXPAND_ARG1(kInt32Ty)) // char sget_hl_double(int field_idx) _EVAL_DEF_INTRINSICS_FUNC(HLSgetDouble, art_portable_hl_sget_double, kAttrReadOnly | kAttrNoThrow, kDoubleTy, _EXPAND_ARG1(kInt32Ty)) // char sget_hl_float(int field_idx) _EVAL_DEF_INTRINSICS_FUNC(HLSgetFloat, art_portable_hl_sget_float, kAttrReadOnly | kAttrNoThrow, kFloatTy, _EXPAND_ARG1(kInt32Ty)) //---------------------------------------------------------------------------- // Monitor enter/exit //---------------------------------------------------------------------------- // uint32_t art_portable_monitor_enter(int optFlags, JavaObject* obj) _EVAL_DEF_INTRINSICS_FUNC(MonitorEnter, art_portable_monitor_enter, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kInt32Ty, kJavaObjectTy)) // uint32_t art_portable_monitor_exit(int optFlags, JavaObject* obj) _EVAL_DEF_INTRINSICS_FUNC(MonitorExit, art_portable_monitor_exit, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kInt32Ty, kJavaObjectTy)) //---------------------------------------------------------------------------- // Shadow Frame //---------------------------------------------------------------------------- // void art_portable_alloca_shadow_frame(int num_entry) _EVAL_DEF_INTRINSICS_FUNC(AllocaShadowFrame, art_portable_alloca_shadow_frame, kAttrNoThrow, kVoidTy, _EXPAND_ARG1(kInt32ConstantTy)) // void art_portable_set_vreg(int entry_idx, ...) _EVAL_DEF_INTRINSICS_FUNC(SetVReg, art_portable_set_vreg, kAttrNoThrow, kVoidTy, _EXPAND_ARG2(kInt32ConstantTy, kVarArgTy)) // void art_portable_pop_shadow_frame() _EVAL_DEF_INTRINSICS_FUNC(PopShadowFrame, art_portable_pop_shadow_frame, kAttrNoThrow, kVoidTy, _EXPAND_ARG0()) // void art_portable_update_dex_pc(uint32_t dex_pc) _EVAL_DEF_INTRINSICS_FUNC(UpdateDexPC, art_portable_update_dex_pc, kAttrNoThrow, kVoidTy, _EXPAND_ARG1(kInt32ConstantTy)) //---------------------------------------------------------------------------- // FP Comparison //---------------------------------------------------------------------------- // int cmpl_float(float, float) _EVAL_DEF_INTRINSICS_FUNC(CmplFloat, art_portable_cmpl_float, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG2(kFloatTy, kFloatTy)) // int cmpg_float(float, float) _EVAL_DEF_INTRINSICS_FUNC(CmpgFloat, art_portable_cmpg_float, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG2(kFloatTy, kFloatTy)) // int cmpl_double(double, double) _EVAL_DEF_INTRINSICS_FUNC(CmplDouble, art_portable_cmpl_double, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG2(kDoubleTy, kDoubleTy)) // int cmpg_double(double, double) _EVAL_DEF_INTRINSICS_FUNC(CmpgDouble, art_portable_cmpg_double, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG2(kDoubleTy, kDoubleTy)) //---------------------------------------------------------------------------- // Long Comparison //---------------------------------------------------------------------------- // int cmp_long(long, long) _EVAL_DEF_INTRINSICS_FUNC(CmpLong, art_portable_cmp_long, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG2(kInt64Ty, kInt64Ty)) //---------------------------------------------------------------------------- // Const intrinsics to assist MIR to Greenland_ir conversion. Should not materialize // For simplicity, all use integer input //---------------------------------------------------------------------------- // int const_int(int) _EVAL_DEF_INTRINSICS_FUNC(ConstInt, art_portable_const_int, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kInt32Ty)) // JavaObject* const_obj(int) _EVAL_DEF_INTRINSICS_FUNC(ConstObj, art_portable_const_obj, kAttrReadOnly | kAttrNoThrow, kJavaObjectTy, _EXPAND_ARG1(kInt32Ty)) // long const_long(long) _EVAL_DEF_INTRINSICS_FUNC(ConstLong, art_portable_const_long, kAttrReadOnly | kAttrNoThrow, kInt64Ty, _EXPAND_ARG1(kInt64Ty)) // float const_float(int) _EVAL_DEF_INTRINSICS_FUNC(ConstFloat, art_portable_const_Float, kAttrReadOnly | kAttrNoThrow, kFloatTy, _EXPAND_ARG1(kInt32Ty)) // double const_double(long) _EVAL_DEF_INTRINSICS_FUNC(ConstDouble, art_portable_const_Double, kAttrReadOnly | kAttrNoThrow, kDoubleTy, _EXPAND_ARG1(kInt64Ty)) //---------------------------------------------------------------------------- // Copy intrinsics to assist MIR to Greenland_ir conversion. Should not materialize //---------------------------------------------------------------------------- // void method_info(void) _EVAL_DEF_INTRINSICS_FUNC(MethodInfo, art_portable_method_info, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG0()) // int copy_int(int) _EVAL_DEF_INTRINSICS_FUNC(CopyInt, art_portable_copy_int, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kInt32Ty)) // JavaObject* copy_obj(obj) _EVAL_DEF_INTRINSICS_FUNC(CopyObj, art_portable_copy_obj, kAttrReadOnly | kAttrNoThrow, kJavaObjectTy, _EXPAND_ARG1(kJavaObjectTy)) // long copy_long(long) _EVAL_DEF_INTRINSICS_FUNC(CopyLong, art_portable_copy_long, kAttrReadOnly | kAttrNoThrow, kInt64Ty, _EXPAND_ARG1(kInt64Ty)) // float copy_float(float) _EVAL_DEF_INTRINSICS_FUNC(CopyFloat, art_portable_copy_Float, kAttrReadOnly | kAttrNoThrow, kFloatTy, _EXPAND_ARG1(kFloatTy)) // double copy_double(double) _EVAL_DEF_INTRINSICS_FUNC(CopyDouble, art_portable_copy_Double, kAttrReadOnly | kAttrNoThrow, kDoubleTy, _EXPAND_ARG1(kDoubleTy)) //---------------------------------------------------------------------------- // Shift intrinsics. Shift semantics for Dalvik are a bit different than // the llvm shift operators. For 32-bit shifts, the shift count is constrained // to the range of 0..31, while for 64-bit shifts we limit to 0..63. // Further, the shift count for Long shifts in Dalvik is 32 bits, while // llvm requires a 64-bit shift count. For GBC, we represent shifts as an // intrinsic to allow most efficient target-dependent lowering. //---------------------------------------------------------------------------- // long shl_long(long,int) _EVAL_DEF_INTRINSICS_FUNC(SHLLong, art_portable_shl_long, kAttrReadOnly | kAttrNoThrow, kInt64Ty, _EXPAND_ARG2(kInt64Ty,kInt32Ty)) // long shr_long(long,int) _EVAL_DEF_INTRINSICS_FUNC(SHRLong, art_portable_shr_long, kAttrReadOnly | kAttrNoThrow, kInt64Ty, _EXPAND_ARG2(kInt64Ty,kInt32Ty)) // long ushr_long(long,int) _EVAL_DEF_INTRINSICS_FUNC(USHRLong, art_portable_ushl_long, kAttrReadOnly | kAttrNoThrow, kInt64Ty, _EXPAND_ARG2(kInt64Ty,kInt32Ty)) // int shl_int(int,int) _EVAL_DEF_INTRINSICS_FUNC(SHLInt, art_portable_shl_int, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG2(kInt32Ty,kInt32Ty)) // long shr_int(int,int) _EVAL_DEF_INTRINSICS_FUNC(SHRInt, art_portable_shr_int, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG2(kInt32Ty,kInt32Ty)) // int ushr_long(int,int) _EVAL_DEF_INTRINSICS_FUNC(USHRInt, art_portable_ushl_int, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG2(kInt32Ty,kInt32Ty)) //---------------------------------------------------------------------------- // Conversion instrinsics. Note: these should eventually be removed. We // can express these directly in bitcode, but by using intrinsics the // Quick compiler can be more efficient. Some extra optimization infrastructure // will have to be developed to undo the bitcode verbosity when these are // done inline. //---------------------------------------------------------------------------- // int int_to_byte(int) _EVAL_DEF_INTRINSICS_FUNC(IntToByte, art_portable_int_to_byte, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kInt32Ty)) // int int_to_char(int) _EVAL_DEF_INTRINSICS_FUNC(IntToChar, art_portable_int_to_char, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kInt32Ty)) // int int_to_short(int) _EVAL_DEF_INTRINSICS_FUNC(IntToShort, art_portable_int_to_short, kAttrReadOnly | kAttrNoThrow, kInt32Ty, _EXPAND_ARG1(kInt32Ty)) //---------------------------------------------------------------------------- // Memory barrier //---------------------------------------------------------------------------- // void constructor_barrier() _EVAL_DEF_INTRINSICS_FUNC(ConstructorBarrier, art_portable_constructor_barrier, kAttrReadOnly | kAttrNoThrow, kVoidTy, _EXPAND_ARG0()) // Clean up all internal used macros #undef _EXPAND_ARG0 #undef _EXPAND_ARG1 #undef _EXPAND_ARG2 #undef _EXPAND_ARG3 #undef _EXPAND_ARG4 #undef _EXPAND_ARG5 #undef _JTYPE_OF_kInt1Ty_UNDER_kArray #undef _JTYPE_OF_kInt8Ty_UNDER_kArray #undef _JTYPE_OF_kInt16Ty_UNDER_kArray #undef _JTYPE_OF_kInt32Ty_UNDER_kArray #undef _JTYPE_OF_kInt64Ty_UNDER_kArray #undef _JTYPE_OF_kJavaObjectTy_UNDER_kArray #undef _JTYPE_OF_kInt1Ty_UNDER_kField #undef _JTYPE_OF_kInt8Ty_UNDER_kField #undef _JTYPE_OF_kInt16Ty_UNDER_kField #undef _JTYPE_OF_kInt32Ty_UNDER_kField #undef _JTYPE_OF_kInt64Ty_UNDER_kField #undef _JTYPE_OF_kJavaObjectTy_UNDER_kField #undef DEF_INTRINSICS_FUNC