/*
 * 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* dex_lang_get_current_thread()
_EVAL_DEF_INTRINSICS_FUNC(GetCurrentThread,
                          dex_lang_get_current_thread,
                          kAttrReadNone | kAttrNoThrow,
                          kJavaThreadTy,
                          _EXPAND_ARG0())

// void dex_lang_test_suspend(Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(TestSuspend,
                          dex_lang_test_suspend,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG1(kJavaThreadTy))

// void dex_lang_check_suspend() /* Expands to GetCurrentThread/TestSuspend */
_EVAL_DEF_INTRINSICS_FUNC(CheckSuspend,
                          dex_lang_check_suspend,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG0())

// void dex_lang_mark_gc_card(Object* new_value, Object* object)
_EVAL_DEF_INTRINSICS_FUNC(MarkGCCard,
                          dex_lang_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 dex_lang_catch_targets(int dex_pc)
_EVAL_DEF_INTRINSICS_FUNC(CatchTargets,
                          dex_lang_catch_targets,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG1(kInt32ConstantTy))

// void dex_lang_throw_exception(JavaObject* exception)
_EVAL_DEF_INTRINSICS_FUNC(ThrowException,
                          dex_lang_throw_exception,
                          kAttrDoThrow,
                          kVoidTy,
                          _EXPAND_ARG1(kJavaObjectTy))

// JavaObject* dex_lang_get_current_exception()
_EVAL_DEF_INTRINSICS_FUNC(GetException,
                          dex_lang_get_current_exception,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaObjectTy,
                          _EXPAND_ARG0())

// bool dex_lang_is_exception_pending()
_EVAL_DEF_INTRINSICS_FUNC(IsExceptionPending,
                          dex_lang_is_exception_pending,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt1Ty,
                          _EXPAND_ARG0())

// int dex_lang_find_catch_block(Method* method, int try_item_offset)
_EVAL_DEF_INTRINSICS_FUNC(FindCatchBlock,
                          dex_lang_find_catch_block,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG2(kJavaMethodTy, kInt32ConstantTy))

// void dex_lang_throw_div_zero()
_EVAL_DEF_INTRINSICS_FUNC(ThrowDivZeroException,
                          dex_lang_throw_div_zero,
                          kAttrDoThrow,
                          kVoidTy,
                          _EXPAND_ARG0())

// void dex_lang_throw_null_pointer_exception(uint32_t dex_pc)
_EVAL_DEF_INTRINSICS_FUNC(ThrowNullPointerException,
                          dex_lang_throw_null_pointer_exception,
                          kAttrDoThrow,
                          kVoidTy,
                          _EXPAND_ARG1(kInt32ConstantTy))

// void dex_lang_throw_array_bounds(int index, int array_len)
_EVAL_DEF_INTRINSICS_FUNC(ThrowIndexOutOfBounds,
                          dex_lang_throw_array_bounds,
                          kAttrDoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kInt32Ty))

//----------------------------------------------------------------------------
// ConstString
//----------------------------------------------------------------------------

// JavaObject* dex_lang_const_string(uint32_t string_idx)
_EVAL_DEF_INTRINSICS_FUNC(ConstString,
                          dex_lang_const_string,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaObjectTy,
                          _EXPAND_ARG1(kInt32ConstantTy))

// JavaObject* dex_lang_load_string_from_dex_cache(Method* method, uint32_t string_idx)
_EVAL_DEF_INTRINSICS_FUNC(LoadStringFromDexCache,
                          dex_lang_load_string_from_dex_cache,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaObjectTy,
                          _EXPAND_ARG1(kInt32ConstantTy))

// JavaObject* dex_lang_resolve_string(Method* method, uint32_t string_idx)
_EVAL_DEF_INTRINSICS_FUNC(ResolveString,
                          dex_lang_resolve_string,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG2(kJavaMethodTy, kInt32ConstantTy))

//----------------------------------------------------------------------------
// ConstClass
//----------------------------------------------------------------------------

// JavaObject* dex_lang_const_class(uint32_t type_idx)
_EVAL_DEF_INTRINSICS_FUNC(ConstClass,
                          dex_lang_const_class,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaObjectTy,
                          _EXPAND_ARG1(kInt32ConstantTy))

// JavaObject* dex_lang_initialize_type_and_verify_access(uint32_t type_idx,
//                                                        Method* referrer,
//                                                        Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(InitializeTypeAndVerifyAccess,
                          dex_lang_initialize_type_and_verify_access,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy))

// JavaObject* dex_lang_load_type_from_dex_cache(uint32_t type_idx)
_EVAL_DEF_INTRINSICS_FUNC(LoadTypeFromDexCache,
                          dex_lang_load_type_from_dex_cache,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaObjectTy,
                          _EXPAND_ARG1(kInt32ConstantTy))

// JavaObject* dex_lang_initialize_type(uint32_t type_idx,
//                                      Method* referrer,
//                                      Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(InitializeType,
                          dex_lang_initialize_type,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy))

//----------------------------------------------------------------------------
// Lock
//----------------------------------------------------------------------------

// void dex_lang_lock_object(JavaObject* obj, Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(LockObject,
                          dex_lang_lock_object,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kJavaObjectTy, kJavaThreadTy))

// void dex_lang_unlock_object(JavaObject* obj, Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(UnlockObject,
                          dex_lang_unlock_object,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG2(kJavaObjectTy, kJavaThreadTy))

//----------------------------------------------------------------------------
// Cast
//----------------------------------------------------------------------------

// void dex_lang_check_cast(JavaObject* dest_type, JavaObject* src_type)
_EVAL_DEF_INTRINSICS_FUNC(CheckCast,
                          dex_lang_check_cast,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy))

// void dex_lang_hl_check_cast(uint32_t type_idx, JavaObject* obj)
_EVAL_DEF_INTRINSICS_FUNC(HLCheckCast,
                          dex_lang_hl_check_cast,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32ConstantTy, kJavaObjectTy))

// int dex_lang_is_assignable(JavaObject* dest_type, JavaObject* src_type)
_EVAL_DEF_INTRINSICS_FUNC(IsAssignable,
                          dex_lang_is_assignable,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy))

//----------------------------------------------------------------------------
// Allocation
//----------------------------------------------------------------------------

// JavaObject* dex_lang_alloc_object(uint32_t type_idx,
//                                   Method* referrer,
//                                   Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(AllocObject,
                          dex_lang_alloc_object,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy))

// JavaObject* dex_lang_alloc_object_with_access_check(uint32_t type_idx,
//                                                     Method* referrer,
//                                                     Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(AllocObjectWithAccessCheck,
                          dex_lang_alloc_object_with_access_check,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy))

//----------------------------------------------------------------------------
// Instance
//----------------------------------------------------------------------------

// JavaObject* dex_lang_new_instance(uint32_t type_idx)
_EVAL_DEF_INTRINSICS_FUNC(NewInstance,
                          dex_lang_new_instance,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG1(kInt32Ty))

// bool dex_lang_instance_of(uint32_t type_idx, JavaObject* ref)
_EVAL_DEF_INTRINSICS_FUNC(InstanceOf,
                          dex_lang_instance_of,
                          kAttrNone,
                          kInt32Ty,
                          _EXPAND_ARG2(kInt32Ty, kJavaObjectTy))

//----------------------------------------------------------------------------
// Array
//----------------------------------------------------------------------------

// JavaObject* dex_lang_new_array(uint32_t type_idx, uint32_t array_size)
_EVAL_DEF_INTRINSICS_FUNC(NewArray,
                          dex_lang_new_array,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG2(kInt32ConstantTy, kInt32Ty))

// uint32_t dex_lang_opt_array_length(int32_t opt_flags, JavaObject* array)
_EVAL_DEF_INTRINSICS_FUNC(OptArrayLength,
                          dex_lang_opt_array_length,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG2(kInt32Ty, kJavaObjectTy))

// uint32_t dex_lang_array_length(JavaObject* array)
_EVAL_DEF_INTRINSICS_FUNC(ArrayLength,
                          dex_lang_array_length,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG1(kJavaObjectTy))

// JavaObject* dex_lang_alloc_array(uint32_t type_idx,
//                                  Method* referrer,
//                                  uint32_t length,
//                                  Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(AllocArray,
                          dex_lang_alloc_array,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32Ty, kJavaThreadTy))

// JavaObject* dex_lang_alloc_array_with_access_check(uint32_t type_idx,
//                                                    Method* referrer,
//                                                    uint32_t length,
//                                                    Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(AllocArrayWithAccessCheck,
                          dex_lang_alloc_array_with_access_check,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32Ty, kJavaThreadTy))

// JavaObject* dex_lang_check_and_alloc_array(uint32_t type_idx,
//                                            Method* referrer,
//                                            uint32_t length,
//                                            Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(CheckAndAllocArray,
                          dex_lang_check_and_alloc_array,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32ConstantTy, kJavaThreadTy))

// JavaObject* dex_lang_check_and_alloc_array_with_access_check(uint32_t type_idx,
//                                                              Method* referrer,
//                                                              uint32_t length,
//                                                              Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(CheckAndAllocArrayWithAccessCheck,
                          dex_lang_check_and_alloc_array_with_access_check,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32ConstantTy, kJavaThreadTy))

// dex_lang_aget_* and dex_lang_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 dex_lang_aget_[type](JavaObject* array, uint32_t index)
_EVAL_DEF_INTRINSICS_FUNC(ArrayGet,
                          dex_lang_aget,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt32Ty, kArray),
                          _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(ArrayGetWide,
                          dex_lang_aget_wide,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt64Ty, kArray),
                          _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(ArrayGetObject,
                          dex_lang_aget_object,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kJavaObjectTy, kArray),
                          _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(ArrayGetBoolean,
                          dex_lang_aget_boolean,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt1Ty, kArray),
                          _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(ArrayGetByte,
                          dex_lang_aget_byte,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt8Ty, kArray),
                          _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(ArrayGetChar,
                          dex_lang_aget_char,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt16Ty, kArray),
                          _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(ArrayGetShort,
                          dex_lang_aget_short,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt16Ty, kArray),
                          _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))

// void dex_lang_aput_[type]([type] value, JavaObject* array, uint32_t index)
_EVAL_DEF_INTRINSICS_FUNC(ArrayPut,
                          dex_lang_aput,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG3(_JTYPE(kInt32Ty, kArray), kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(ArrayPutWide,
                          dex_lang_aput_wide,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG3(_JTYPE(kInt64Ty, kArray), kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(ArrayPutObject,
                          dex_lang_aput_object,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG3(_JTYPE(kJavaObjectTy, kArray), kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(ArrayPutBoolean,
                          dex_lang_aput_boolean,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG3(_JTYPE(kInt1Ty, kArray), kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(ArrayPutByte,
                          dex_lang_aput_byte,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG3(_JTYPE(kInt8Ty, kArray), kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(ArrayPutChar,
                          dex_lang_aput_char,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG3(_JTYPE(kInt16Ty, kArray), kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(ArrayPutShort,
                          dex_lang_aput_short,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG3(_JTYPE(kInt16Ty, kArray), kJavaObjectTy, kInt32Ty))

// void dex_lang_check_put_array_element(JavaObject* value, JavaObject* array)
_EVAL_DEF_INTRINSICS_FUNC(CheckPutArrayElement,
                          dex_lang_check_put_array_element,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy))

// void dex_lang_filled_new_array(Array* array,
//                                uint32_t elem_jty, ...)
_EVAL_DEF_INTRINSICS_FUNC(FilledNewArray,
                          dex_lang_filled_new_array,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kVarArgTy))

// void dex_lang_fill_array_data(Method* referrer,
//                               uint32_t dex_pc,
//                               Array* array,
//                               uint32_t payload_offset)
_EVAL_DEF_INTRINSICS_FUNC(FillArrayData,
                          dex_lang_fill_array_data,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG4(kJavaMethodTy, kInt32ConstantTy, kJavaObjectTy, kInt32ConstantTy))

// void dex_lang_hl_fill_array_data(int32_t offset, JavaObject* array)
_EVAL_DEF_INTRINSICS_FUNC(HLFillArrayData,
                          dex_lang_hl_fill_array_data,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32ConstantTy, kJavaObjectTy))

//----------------------------------------------------------------------------
// Instance Field
//----------------------------------------------------------------------------

// [type] dex_lang_iget_[type](uint32_t field_idx,
//                             Method* referrer,
//                             JavaObject* obj)
_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGet,
                          dex_lang_iget,
                          kAttrNone,
                          _JTYPE(kInt32Ty, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetWide,
                          dex_lang_iget_wide,
                          kAttrNone,
                          _JTYPE(kInt64Ty, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetObject,
                          dex_lang_iget_object,
                          kAttrNone,
                          _JTYPE(kJavaObjectTy, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetBoolean,
                          dex_lang_iget_boolean,
                          kAttrNone,
                          _JTYPE(kInt1Ty, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetByte,
                          dex_lang_iget_byte,
                          kAttrNone,
                          _JTYPE(kInt8Ty, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetChar,
                          dex_lang_iget_char,
                          kAttrNone,
                          _JTYPE(kInt16Ty, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetShort,
                          dex_lang_iget_short,
                          kAttrNone,
                          _JTYPE(kInt16Ty, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))

// [type] dex_lang_iget_[type].fast(int field_offset,
//                                  bool is_volatile,
//                                  JavaObject* obj)
_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetFast,
                          dex_lang_iget.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt32Ty, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetWideFast,
                          dex_lang_iget_wide.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt64Ty, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetObjectFast,
                          dex_lang_iget_object.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kJavaObjectTy, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetBooleanFast,
                          dex_lang_iget_boolean.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt1Ty, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetByteFast,
                          dex_lang_iget_byte.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt8Ty, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetCharFast,
                          dex_lang_iget_char.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt16Ty, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetShortFast,
                          dex_lang_iget_short.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt16Ty, kField),
                          _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))

// void dex_lang_iput_[type](uint32_t field_idx,
//                           Method* referrer,
//                           JavaObject* obj,
//                           [type] new_value)
_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPut,
                          dex_lang_iput,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt32Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutWide,
                          dex_lang_iput_wide,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt64Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutObject,
                          dex_lang_iput_object,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kJavaObjectTy, kField)))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutBoolean,
                          dex_lang_iput_boolean,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt1Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutByte,
                          dex_lang_iput_byte,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt8Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutChar,
                          dex_lang_iput_char,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutShort,
                          dex_lang_iput_short,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField)))

// void dex_lang_iput_[type].fast(int field_offset,
//                                bool is_volatile,
//                                JavaObject* obj,
//                                [type] new_value)
_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutFast,
                          dex_lang_iput.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt32Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutWideFast,
                          dex_lang_iput_wide.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt64Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutObjectFast,
                          dex_lang_iput_object.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kJavaObjectTy, kField)))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutBooleanFast,
                          dex_lang_iput_boolean.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt1Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutByteFast,
                          dex_lang_iput_byte.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt8Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutCharFast,
                          dex_lang_iput_char.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutShortFast,
                          dex_lang_iput_short.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField)))

//----------------------------------------------------------------------------
// Static Field
//----------------------------------------------------------------------------

// [type] dex_lang_sget_[type](uint32_t field_idx, Method* referrer)
_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGet,
                          dex_lang_sget,
                          kAttrNone,
                          _JTYPE(kInt32Ty, kField),
                          _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetWide,
                          dex_lang_sget_wide,
                          kAttrNone,
                          _JTYPE(kInt64Ty, kField),
                          _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetObject,
                          dex_lang_sget_object,
                          kAttrNone,
                          _JTYPE(kJavaObjectTy, kField),
                          _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetBoolean,
                          dex_lang_sget_boolean,
                          kAttrNone,
                          _JTYPE(kInt1Ty, kField),
                          _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetByte,
                          dex_lang_sget_byte,
                          kAttrNone,
                          _JTYPE(kInt8Ty, kField),
                          _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetChar,
                          dex_lang_sget_char,
                          kAttrNone,
                          _JTYPE(kInt16Ty, kField),
                          _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetShort,
                          dex_lang_sget_short,
                          kAttrNone,
                          _JTYPE(kInt16Ty, kField),
                          _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))

// [type] dex_lang_sget_[type].fast(JavaObject* ssb,
//                                  int field_offset,
//                                  bool is_volatile)
_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetFast,
                          dex_lang_sget.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt32Ty, kField),
                          _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetWideFast,
                          dex_lang_sget_wide.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt64Ty, kField),
                          _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetObjectFast,
                          dex_lang_sget_object.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kJavaObjectTy, kField),
                          _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetBooleanFast,
                          dex_lang_sget_boolean.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt1Ty, kField),
                          _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetByteFast,
                          dex_lang_sget_byte.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt8Ty, kField),
                          _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetCharFast,
                          dex_lang_sget_char.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt16Ty, kField),
                          _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetShortFast,
                          dex_lang_sget_short.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          _JTYPE(kInt16Ty, kField),
                          _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))

// void dex_lang_sput_[type](uint32_t field_idx,
//                           Method* referrer,
//                           [type] new_value)
_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPut,
                          dex_lang_sput,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt32Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutWide,
                          dex_lang_sput_wide,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt64Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutObject,
                          dex_lang_sput_object,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kJavaObjectTy, kField)))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutBoolean,
                          dex_lang_sput_boolean,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt1Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutByte,
                          dex_lang_sput_byte,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt8Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutChar,
                          dex_lang_sput_char,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt16Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutShort,
                          dex_lang_sput_short,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt16Ty, kField)))

// void dex_lang_sput_[type].fast(JavaObject* ssb,
//                                int field_offset,
//                                bool is_volatile,
//                                [type] new_value)
_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutFast,
                          dex_lang_sput.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt32Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutWideFast,
                          dex_lang_sput_wide.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt64Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutObjectFast,
                          dex_lang_sput_object.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kJavaObjectTy, kField)))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutBooleanFast,
                          dex_lang_sput_boolean.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt1Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutByteFast,
                          dex_lang_sput_byte.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt8Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutCharFast,
                          dex_lang_sput_char.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt16Ty, kField)))

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutShortFast,
                          dex_lang_sput_short.fast,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt16Ty, kField)))

// JavaObject* dex_lang_load_declaring_class_ssb(Method* method)
// Load the static storage base of the class that given method resides
_EVAL_DEF_INTRINSICS_FUNC(LoadDeclaringClassSSB,
                          dex_lang_load_declaring_class_ssb,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaObjectTy,
                          _EXPAND_ARG1(kJavaMethodTy))

// JavaObject* dex_lang_load_class_ssb_from_dex_cache(uint32_t type_idx)
_EVAL_DEF_INTRINSICS_FUNC(LoadClassSSBFromDexCache,
                          dex_lang_load_class_ssb_from_dex_cache,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaObjectTy,
                          _EXPAND_ARG1(kInt32ConstantTy))

// JavaObject* dex_lang_init_and_load_class_ssb(uint32_t type_idx,
//                                              Method* referrer,
//                                              Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(InitializeAndLoadClassSSB,
                          dex_lang_init_and_load_class_ssb,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy))

//----------------------------------------------------------------------------
// High-level Array get/put
//
// Similar to dex_lang_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 dex_lang_hl_aget_[type](int optFlags, JavaObject* array, uint32_t index)
_EVAL_DEF_INTRINSICS_FUNC(HLArrayGet,
                          dex_lang_hl_aget,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetFloat,
                          dex_lang_hl_aget_float,
                          kAttrReadOnly | kAttrNoThrow,
                          kFloatTy,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetWide,
                          dex_lang_hl_aget_wide,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt64Ty,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetDouble,
                          dex_lang_hl_aget_double,
                          kAttrReadOnly | kAttrNoThrow,
                          kDoubleTy,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetObject,
                          dex_lang_hl_aget_object,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaObjectTy,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetBoolean,
                          dex_lang_hl_aget_boolean,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetByte,
                          dex_lang_hl_aget_byte,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetChar,
                          dex_lang_hl_aget_char,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetShort,
                          dex_lang_hl_aget_short,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

// void dex_lang_aput_[type](int optFlags, [type] value, JavaObject* array, uint32_t index)
_EVAL_DEF_INTRINSICS_FUNC(HLArrayPut,
                          dex_lang_hl_aput,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutFloat,
                          dex_lang_hl_aput_float,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kFloatTy, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutWide,
                          dex_lang_hl_aput_wide,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kInt64Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutDouble,
                          dex_lang_hl_aput_double,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kDoubleTy, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutObject,
                          dex_lang_hl_aput_object,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kJavaObjectTy, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutBoolean,
                          dex_lang_hl_aput_boolean,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutByte,
                          dex_lang_hl_aput_byte,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutChar,
                          dex_lang_hl_aput_char,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutShort,
                          dex_lang_hl_aput_short,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))

//----------------------------------------------------------------------------
// High-level Instance get/put
//
// Similar to dex_lang_iget/iput_xxx, but checks not yet performed.
// OptFlags contain info describing whether frontend has determined that
// null check may be skipped.
//
// [type] void dex_lang_hl_iget_[type](int optFlags, JavaObject* obj, uint32_t field_idx)
_EVAL_DEF_INTRINSICS_FUNC(HLIGet,
                          dex_lang_hl_iget,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIGetFloat,
                          dex_lang_hl_iget_float,
                          kAttrReadOnly | kAttrNoThrow,
                          kFloatTy,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIGetWide,
                          dex_lang_hl_iget_wide,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt64Ty,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIGetDouble,
                          dex_lang_hl_iget_double,
                          kAttrReadOnly | kAttrNoThrow,
                          kDoubleTy,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIGetObject,
                          dex_lang_hl_iget_object,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaObjectTy,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIGetBoolean,
                          dex_lang_hl_iget_boolean,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIGetByte,
                          dex_lang_hl_iget_byte,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIGetChar,
                          dex_lang_hl_iget_char,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIGetShort,
                          dex_lang_hl_iget_short,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))

// void dex_lang_iput_[type](int optFlags, [type] value, JavaObject* obj, uint32_t field_idx)
_EVAL_DEF_INTRINSICS_FUNC(HLIPut,
                          dex_lang_hl_iput,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIPutFloat,
                          dex_lang_hl_iput_float,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kFloatTy, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIPutWide,
                          dex_lang_hl_iput_wide,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kInt64Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIPutDouble,
                          dex_lang_hl_iput_double,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kDoubleTy, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIPutObject,
                          dex_lang_hl_iput_object,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kJavaObjectTy, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIPutBoolean,
                          dex_lang_hl_iput_boolean,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIPutByte,
                          dex_lang_hl_iput_byte,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIPutChar,
                          dex_lang_hl_iput_char,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(HLIPutShort,
                          dex_lang_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,
                          dex_lang_hl_invoke.void,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG1(kVarArgTy))

// INVOKE method returns object
_EVAL_DEF_INTRINSICS_FUNC(HLInvokeObj,
                          dex_lang_hl_invoke.obj,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG1(kVarArgTy))

// INVOKE method returns int
_EVAL_DEF_INTRINSICS_FUNC(HLInvokeInt,
                          dex_lang_hl_invoke.i32,
                          kAttrNone,
                          kInt32Ty,
                          _EXPAND_ARG1(kVarArgTy))

// INVOKE method returns float
_EVAL_DEF_INTRINSICS_FUNC(HLInvokeFloat,
                          dex_lang_hl_invoke.f32,
                          kAttrNone,
                          kFloatTy,
                          _EXPAND_ARG1(kVarArgTy))

// INVOKE method returns long
_EVAL_DEF_INTRINSICS_FUNC(HLInvokeLong,
                          dex_lang_hl_invoke.i64,
                          kAttrNone,
                          kInt64Ty,
                          _EXPAND_ARG1(kVarArgTy))

// INVOKE method returns double
_EVAL_DEF_INTRINSICS_FUNC(HLInvokeDouble,
                          dex_lang_hl_invoke.f64,
                          kAttrNone,
                          kDoubleTy,
                          _EXPAND_ARG1(kVarArgTy))

// FILLED_NEW_ARRAY returns object
_EVAL_DEF_INTRINSICS_FUNC(HLFilledNewArray,
                          dex_lang_hl_filled_new_array,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG1(kVarArgTy))

//----------------------------------------------------------------------------
// Invoke
//----------------------------------------------------------------------------

// Method* dex_lang_find_static_method_with_access_check(uint32_t method_idx,
//                                                       JavaObject* this,
//                                                       Method* referrer,
//                                                       Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(FindStaticMethodWithAccessCheck,
                          dex_lang_find_static_method_with_access_check,
                          kAttrNone,
                          kJavaMethodTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy))

// Method* dex_lang_find_direct_method_with_access_check(uint32_t method_idx,
//                                                       JavaObject* this,
//                                                       Method* referrer,
//                                                       Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(FindDirectMethodWithAccessCheck,
                          dex_lang_find_direct_method_with_access_check,
                          kAttrNone,
                          kJavaMethodTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy))

// Method* dex_lang_find_virtual_method_with_access_check(uint32_t method_idx,
//                                                        JavaObject* this,
//                                                        Method* referrer,
//                                                        Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(FindVirtualMethodWithAccessCheck,
                          dex_lang_find_virtual_method_with_access_check,
                          kAttrNone,
                          kJavaMethodTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy))

// Method* dex_lang_find_super_method_with_access_check(uint32_t method_idx,
//                                                      JavaObject* this,
//                                                      Method* referrer,
//                                                      Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(FindSuperMethodWithAccessCheck,
                          dex_lang_find_super_method_with_access_check,
                          kAttrNone,
                          kJavaMethodTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy))

// Method* dex_lang_find_interface_method_with_access_check(uint32_t method_idx,
//                                                          JavaObject* this,
//                                                          Method* referrer,
//                                                          Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(FindInterfaceMethodWithAccessCheck,
                          dex_lang_find_interface_method_with_access_check,
                          kAttrNone,
                          kJavaMethodTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy))

// Method* dex_lang_get_sd_callee_method_obj_addr(uint32_t method_idx)
_EVAL_DEF_INTRINSICS_FUNC(GetSDCalleeMethodObjAddrFast,
                          dex_lang_get_sd_callee_method_obj_addr_fast,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaMethodTy,
                          _EXPAND_ARG1(kInt32ConstantTy))

// Method* dex_lang_get_virtual_callee_method_obj_addr(uint32_t vtable_idx,
//                                                     JavaObject* this)
_EVAL_DEF_INTRINSICS_FUNC(GetVirtualCalleeMethodObjAddrFast,
                          dex_lang_get_virtual_callee_method_obj_addr_fast,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaMethodTy,
                          _EXPAND_ARG2(kInt32ConstantTy, kJavaObjectTy))

// Method* dex_lang_get_interface_callee_method_obj_addr(uint32_t method_idx,
//                                                       JavaObject* this,
//                                                       Method* referrer,
//                                                       Thread* thread)
_EVAL_DEF_INTRINSICS_FUNC(GetInterfaceCalleeMethodObjAddrFast,
                          dex_lang_get_interface_callee_method_obj_addr_fast,
                          kAttrNone,
                          kJavaMethodTy,
                          _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy))

// [type] dex_lang_invoke.[type](Method* callee, ...)
// INVOKE method returns void
_EVAL_DEF_INTRINSICS_FUNC(InvokeRetVoid,
                          dex_lang_invoke.void,
                          kAttrNone,
                          kVoidTy,
                          _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))

// INVOKE method returns the value of type boolean
_EVAL_DEF_INTRINSICS_FUNC(InvokeRetBoolean,
                          dex_lang_invoke.bool,
                          kAttrNone,
                          kInt1Ty,
                          _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))

// INVOKE method returns the value of type byte
_EVAL_DEF_INTRINSICS_FUNC(InvokeRetByte,
                          dex_lang_invoke.byte,
                          kAttrNone,
                          kInt8Ty,
                          _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))

// INVOKE method returns the value of type char
_EVAL_DEF_INTRINSICS_FUNC(InvokeRetChar,
                          dex_lang_invoke.char,
                          kAttrNone,
                          kInt16Ty,
                          _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))

// INVOKE method returns the value of type short
_EVAL_DEF_INTRINSICS_FUNC(InvokeRetShort,
                          dex_lang_invoke.short,
                          kAttrNone,
                          kInt16Ty,
                          _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))

// INVOKE method returns the value of type int
_EVAL_DEF_INTRINSICS_FUNC(InvokeRetInt,
                          dex_lang_invoke.int,
                          kAttrNone,
                          kInt32Ty,
                          _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))

// INVOKE method returns the value of type long
_EVAL_DEF_INTRINSICS_FUNC(InvokeRetLong,
                          dex_lang_invoke.long,
                          kAttrNone,
                          kInt64Ty,
                          _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))

// INVOKE method returns the value of type float
_EVAL_DEF_INTRINSICS_FUNC(InvokeRetFloat,
                          dex_lang_invoke.float,
                          kAttrNone,
                          kFloatTy,
                          _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))

// INVOKE method returns the value of type double
_EVAL_DEF_INTRINSICS_FUNC(InvokeRetDouble,
                          dex_lang_invoke.double,
                          kAttrNone,
                          kDoubleTy,
                          _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))

// INVOKE method returns the value of type "object"
_EVAL_DEF_INTRINSICS_FUNC(InvokeRetObject,
                          dex_lang_invoke.object,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))

//----------------------------------------------------------------------------
// Math
//----------------------------------------------------------------------------

// int dex_lang_{div,rem}_int(int a, int b)
_EVAL_DEF_INTRINSICS_FUNC(DivInt,
                          dex_lang_div_int,
                          kAttrReadNone | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG2(kInt32Ty, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(RemInt,
                          dex_lang_rem_int,
                          kAttrReadNone | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG2(kInt32Ty, kInt32Ty))

// long dex_lang_{div,rem}_long(long a, long b)
_EVAL_DEF_INTRINSICS_FUNC(DivLong,
                          dex_lang_div_long,
                          kAttrReadNone | kAttrNoThrow,
                          kInt64Ty,
                          _EXPAND_ARG2(kInt64Ty, kInt64Ty))

_EVAL_DEF_INTRINSICS_FUNC(RemLong,
                          dex_lang_rem_long,
                          kAttrReadNone | kAttrNoThrow,
                          kInt64Ty,
                          _EXPAND_ARG2(kInt64Ty, kInt64Ty))

// int64_t dex_lang_d2l(double f)
_EVAL_DEF_INTRINSICS_FUNC(D2L,
                          dex_lang_d2l,
                          kAttrReadNone | kAttrNoThrow,
                          kInt64Ty,
                          _EXPAND_ARG1(kDoubleTy))

// int32_t dex_lang_d2l(double f)
_EVAL_DEF_INTRINSICS_FUNC(D2I,
                          dex_lang_d2i,
                          kAttrReadNone | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG1(kDoubleTy))

// int64_t dex_lang_f2l(float f)
_EVAL_DEF_INTRINSICS_FUNC(F2L,
                          dex_lang_f2l,
                          kAttrReadNone | kAttrNoThrow,
                          kInt64Ty,
                          _EXPAND_ARG1(kFloatTy))

// int32_t dex_lang_f2i(float f)
_EVAL_DEF_INTRINSICS_FUNC(F2I,
                          dex_lang_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,
                          dex_lang_hl_sput,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kInt32Ty))

// void sput_hl_object(int field_idx, object* val)
_EVAL_DEF_INTRINSICS_FUNC(HLSputObject,
                          dex_lang_hl_sput_object,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kJavaObjectTy))

// void sput_hl_boolean(int field_idx, kInt1Ty)
_EVAL_DEF_INTRINSICS_FUNC(HLSputBoolean,
                          dex_lang_hl_sput_boolean,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kInt32Ty))

// void sput_hl_byte(int field_idx, int val)
_EVAL_DEF_INTRINSICS_FUNC(HLSputByte,
                          dex_lang_hl_sput_byte,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kInt32Ty))

// void sput_hl_char(int field_idx, kInt16Ty val)
_EVAL_DEF_INTRINSICS_FUNC(HLSputChar,
                          dex_lang_hl_sput_char,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kInt32Ty))

// void sput_hl_short(int field_idx, int val)
_EVAL_DEF_INTRINSICS_FUNC(HLSputShort,
                          dex_lang_hl_sput_short,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kInt32Ty))

// void sput_hl_wide(int field_idx, long val)
_EVAL_DEF_INTRINSICS_FUNC(HLSputWide,
                          dex_lang_hl_sput_wide,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kInt64Ty))

// void sput_hl_double(int field_idx, double val)
_EVAL_DEF_INTRINSICS_FUNC(HLSputDouble,
                          dex_lang_hl_sput_double,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kDoubleTy))

// void sput_hl_float(int field_idx, float val)
_EVAL_DEF_INTRINSICS_FUNC(HLSputFloat,
                          dex_lang_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,
                          dex_lang_hl_sget,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG1(kInt32Ty))

// object* sget_hl_object(int field_idx)
_EVAL_DEF_INTRINSICS_FUNC(HLSgetObject,
                          dex_lang_hl_sget_object,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaObjectTy,
                          _EXPAND_ARG1(kInt32Ty))

// boolean sget_hl_boolean(int field_idx)
_EVAL_DEF_INTRINSICS_FUNC(HLSgetBoolean,
                          dex_lang_hl_sget_boolean,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG1(kInt32Ty))

// byte sget_hl_byte(int field_idx)
_EVAL_DEF_INTRINSICS_FUNC(HLSgetByte,
                          dex_lang_hl_sget_byte,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG1(kInt32Ty))

// char sget_hl_char(int field_idx)
_EVAL_DEF_INTRINSICS_FUNC(HLSgetChar,
                          dex_lang_hl_sget_char,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG1(kInt32Ty))

// char sget_hl_short(int field_idx)
_EVAL_DEF_INTRINSICS_FUNC(HLSgetShort,
                          dex_lang_hl_sget_short,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG1(kInt32Ty))

// char sget_hl_wide(int field_idx)
_EVAL_DEF_INTRINSICS_FUNC(HLSgetWide,
                          dex_lang_hl_sget_wide,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt64Ty,
                          _EXPAND_ARG1(kInt32Ty))

// char sget_hl_double(int field_idx)
_EVAL_DEF_INTRINSICS_FUNC(HLSgetDouble,
                          dex_lang_hl_sget_double,
                          kAttrReadOnly | kAttrNoThrow,
                          kDoubleTy,
                          _EXPAND_ARG1(kInt32Ty))

// char sget_hl_float(int field_idx)
_EVAL_DEF_INTRINSICS_FUNC(HLSgetFloat,
                          dex_lang_hl_sget_float,
                          kAttrReadOnly | kAttrNoThrow,
                          kFloatTy,
                          _EXPAND_ARG1(kInt32Ty))
//----------------------------------------------------------------------------
// Monitor enter/exit
//----------------------------------------------------------------------------
// uint32_t dex_lang_monitor_enter(int optFlags, JavaObject* obj)
_EVAL_DEF_INTRINSICS_FUNC(MonitorEnter,
                          dex_lang_monitor_enter,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kJavaObjectTy))

// uint32_t dex_lang_monitor_exit(int optFlags, JavaObject* obj)
_EVAL_DEF_INTRINSICS_FUNC(MonitorExit,
                          dex_lang_monitor_exit,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kJavaObjectTy))

//----------------------------------------------------------------------------
// Shadow Frame
//----------------------------------------------------------------------------

// void dex_lang_alloca_shadow_frame(int num_entry)
_EVAL_DEF_INTRINSICS_FUNC(AllocaShadowFrame,
                          dex_lang_alloca_shadow_frame,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG1(kInt32ConstantTy))

// void dex_lang_set_shadow_frame_entry(JavaObject* obj, int entry_idx)
_EVAL_DEF_INTRINSICS_FUNC(SetShadowFrameEntry,
                          dex_lang_set_shadow_frame_entry,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kJavaObjectTy, kInt32ConstantTy))

// void dex_lang_pop_shadow_frame()
_EVAL_DEF_INTRINSICS_FUNC(PopShadowFrame,
                          dex_lang_pop_shadow_frame,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG0())

// void dex_lang_update_dex_pc(uint32_t dex_pc)
_EVAL_DEF_INTRINSICS_FUNC(UpdateDexPC,
                          dex_lang_update_dex_pc,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG1(kInt32ConstantTy))

//----------------------------------------------------------------------------
// FP Comparison
//----------------------------------------------------------------------------
// int cmpl_float(float, float)
_EVAL_DEF_INTRINSICS_FUNC(CmplFloat,
                          dex_lang_cmpl_float,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG2(kFloatTy, kFloatTy))

// int cmpg_float(float, float)
_EVAL_DEF_INTRINSICS_FUNC(CmpgFloat,
                          dex_lang_cmpg_float,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG2(kFloatTy, kFloatTy))

// int cmpl_double(double, double)
_EVAL_DEF_INTRINSICS_FUNC(CmplDouble,
                          dex_lang_cmpl_double,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG2(kDoubleTy, kDoubleTy))

// int cmpg_double(double, double)
_EVAL_DEF_INTRINSICS_FUNC(CmpgDouble,
                          dex_lang_cmpg_double,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG2(kDoubleTy, kDoubleTy))

//----------------------------------------------------------------------------
// Long Comparison
//----------------------------------------------------------------------------
// int cmp_long(long, long)
_EVAL_DEF_INTRINSICS_FUNC(CmpLong,
                          dex_lang_cmp_long,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG2(kInt64Ty, kInt64Ty))

//----------------------------------------------------------------------------
// Switch
//----------------------------------------------------------------------------
// void sparse_switch(int, int)
_EVAL_DEF_INTRINSICS_FUNC(SparseSwitch,
                          dex_lang_sparse_switch,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kInt32Ty))

// void packed_switch(int, int)
_EVAL_DEF_INTRINSICS_FUNC(PackedSwitch,
                          dex_lang_packed_switch,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kInt32Ty))

//----------------------------------------------------------------------------
// 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,
                          dex_lang_const_int,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG1(kInt32Ty))

// JavaObject* const_obj(int)
_EVAL_DEF_INTRINSICS_FUNC(ConstObj,
                          dex_lang_const_obj,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaObjectTy,
                          _EXPAND_ARG1(kInt32Ty))

// long const_long(long)
_EVAL_DEF_INTRINSICS_FUNC(ConstLong,
                          dex_lang_const_long,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt64Ty,
                          _EXPAND_ARG1(kInt64Ty))

// float const_float(int)
_EVAL_DEF_INTRINSICS_FUNC(ConstFloat,
                          dex_lang_const_Float,
                          kAttrReadOnly | kAttrNoThrow,
                          kFloatTy,
                          _EXPAND_ARG1(kInt32Ty))

// double const_double(long)
_EVAL_DEF_INTRINSICS_FUNC(ConstDouble,
                          dex_lang_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,
                          dex_lang_method_info,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG0())

// int copy_int(int)
_EVAL_DEF_INTRINSICS_FUNC(CopyInt,
                          dex_lang_copy_int,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG1(kInt32Ty))

// int copy_obj(obj)
_EVAL_DEF_INTRINSICS_FUNC(CopyObj,
                          dex_lang_copy_obj,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaObjectTy,
                          _EXPAND_ARG1(kJavaObjectTy))

// long copy_long(long)
_EVAL_DEF_INTRINSICS_FUNC(CopyLong,
                          dex_lang_copy_long,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt64Ty,
                          _EXPAND_ARG1(kInt64Ty))

// int copy_float(float)
_EVAL_DEF_INTRINSICS_FUNC(CopyFloat,
                          dex_lang_copy_Float,
                          kAttrReadOnly | kAttrNoThrow,
                          kFloatTy,
                          _EXPAND_ARG1(kFloatTy))

// int copy_double(double)
_EVAL_DEF_INTRINSICS_FUNC(CopyDouble,
                          dex_lang_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,
                          dex_lang_shl_long,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt64Ty,
                          _EXPAND_ARG2(kInt64Ty,kInt32Ty))
// long shr_long(long,int)
_EVAL_DEF_INTRINSICS_FUNC(SHRLong,
                          dex_lang_shr_long,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt64Ty,
                          _EXPAND_ARG2(kInt64Ty,kInt32Ty))
// long ushr_long(long,int)
_EVAL_DEF_INTRINSICS_FUNC(USHRLong,
                          dex_lang_ushl_long,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt64Ty,
                          _EXPAND_ARG2(kInt64Ty,kInt32Ty))
// int shl_int(int,int)
_EVAL_DEF_INTRINSICS_FUNC(SHLInt,
                          dex_lang_shl_int,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG2(kInt32Ty,kInt32Ty))
// long shr_int(int,int)
_EVAL_DEF_INTRINSICS_FUNC(SHRInt,
                          dex_lang_shr_int,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG2(kInt32Ty,kInt32Ty))
// int ushr_long(int,int)
_EVAL_DEF_INTRINSICS_FUNC(USHRInt,
                          dex_lang_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,
                          dex_lang_int_to_byte,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG1(kInt32Ty))

// int int_to_char(int)
_EVAL_DEF_INTRINSICS_FUNC(IntToChar,
                          dex_lang_int_to_char,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG1(kInt32Ty))

// int int_to_short(int)
_EVAL_DEF_INTRINSICS_FUNC(IntToShort,
                          dex_lang_int_to_short,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG1(kInt32Ty))

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