/*
 * 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,
                          kAttrReadOnly | kAttrNoThrow,
                           kJavaThreadTy,
                          _EXPAND_ARG0())

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

// 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,
                          kAttrNoThrow,
                          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,
                          kAttrNoThrow,
                          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,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32Ty, kInt32Ty))

// void dex_lang_throw(exception_object)
_EVAL_DEF_INTRINSICS_FUNC(Throw,
                          dex_lang_throw,
                          kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG1(kJavaObjectTy))

// void dex_lang_throw_verification_error(int info1, int info2)
_EVAL_DEF_INTRINSICS_FUNC(ThrowVerificationError,
                          dex_lang_throw_verification_error,
                          kAttrNoThrow,
                          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_const_string(uint32_t string_idx)
_EVAL_DEF_INTRINSICS_FUNC(ConstStringFast,
                          dex_lang_const_string.fast,
                          kAttrReadOnly | kAttrNoThrow,
                          kJavaObjectTy,
                          _EXPAND_ARG1(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))

//----------------------------------------------------------------------------
// CheckCast
//----------------------------------------------------------------------------
// void dex_lang_check_cast(uint32_t type_idx, JavaObject* obj)
_EVAL_DEF_INTRINSICS_FUNC(CheckCast,
                          dex_lang_check_cast,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kInt32ConstantTy, kJavaObjectTy))

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

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

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

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

// 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,
                          kAttrReadOnly | kAttrNoThrow,
                          kVoidTy,
                          _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy))

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

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

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

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

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

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

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

_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetShort,
                          dex_lang_sget_short,
                          kAttrReadOnly,
                          _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(FilledNewArray,
                          dex_lang_hl_filled_new_array,
                          kAttrNone,
                          kJavaObjectTy,
                          _EXPAND_ARG1(kVarArgTy))

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

// Method* dex_lang_get_callee_method_obj_addr(uint32_t method_idx,
//                                             JavaObject* this,
//                                             Method* referrer,
//                                             Thread* thread,
//                                             InvokeType type)
_EVAL_DEF_INTRINSICS_FUNC(GetCalleeMethodObjAddr,
                          dex_lang_get_callee_method_obj_addr,
                          kAttrReadOnly,
                          kJavaMethodTy,
                          _EXPAND_ARG5(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy, kInt32ConstantTy))

// 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,
                          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,
                          kAttrReadOnly,
                          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 in Dalvik register category 1
_EVAL_DEF_INTRINSICS_FUNC(InvokeRetCat1,
                          dex_lang_invoke.i32,
                          kAttrNone,
                          kInt32Ty,
                          _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))

// INVOKE method returns the value of type in Dalvik register category 2
_EVAL_DEF_INTRINSICS_FUNC(InvokeRetCat2,
                          dex_lang_invoke.i64,
                          kAttrNone,
                          kInt64Ty,
                          _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))

// INVOKE method returns the value of type in Dalvik register category "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,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt32Ty,
                          _EXPAND_ARG2(kInt32Ty, kInt32Ty))

_EVAL_DEF_INTRINSICS_FUNC(RemInt,
                          dex_lang_rem_int,
                          kAttrReadOnly | 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,
                          kAttrReadOnly | kAttrNoThrow,
                          kInt64Ty,
                          _EXPAND_ARG2(kInt64Ty, kInt64Ty))

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

//----------------------------------------------------------------------------
// Suspend Test
//----------------------------------------------------------------------------

// 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())
//----------------------------------------------------------------------------
// 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_byte,
                          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
