blob: 887a62666fe064dd6c83a7e56264b20f7b99cbed [file] [log] [blame]
/*
* 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_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