/*
 * 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
