blob: 887a62666fe064dd6c83a7e56264b20f7b99cbed [file] [log] [blame]
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17// DEF_INTRINSICS_FUNC(ID, NAME, ATTR, RET_TYPE,
18// ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE)
19#ifndef DEF_INTRINSICS_FUNC
20# error "missing DEF_INTRINSICS_FUNC definition!"
21#endif
22
23#define _EVAL_DEF_INTRINSICS_FUNC(ID, NAME, ATTR, RET_TYPE, ...) \
24 DEF_INTRINSICS_FUNC(ID, NAME, ATTR, RET_TYPE, __VA_ARGS__)
25
26#define _EXPAND_ARG0() kNone, kNone, kNone, kNone, kNone
27#define _EXPAND_ARG1(ARG1) ARG1, kNone, kNone, kNone, kNone
28#define _EXPAND_ARG2(ARG1, ARG2) ARG1, ARG2, kNone, kNone, kNone
29#define _EXPAND_ARG3(ARG1, ARG2, ARG3) ARG1, ARG2, ARG3, kNone, kNone
30#define _EXPAND_ARG4(ARG1, ARG2, ARG3, ARG4) ARG1, ARG2, ARG3, ARG4, kNone
31#define _EXPAND_ARG5(ARG1, ARG2, ARG3, ARG4, ARG5) \
32 ARG1, ARG2, ARG3, ARG4, ARG5
33
34#define _JTYPE(TYPE, SPACE) _JTYPE_OF_ ## TYPE ## _UNDER_ ## SPACE
35
36// Note: These should be consistent with the type return from
37// IRBuilder::GetJType([type], kArray).
38#define _JTYPE_OF_kInt1Ty_UNDER_kArray kInt8Ty
39#define _JTYPE_OF_kInt8Ty_UNDER_kArray kInt8Ty
40#define _JTYPE_OF_kInt16Ty_UNDER_kArray kInt16Ty
41#define _JTYPE_OF_kInt32Ty_UNDER_kArray kInt32Ty
42#define _JTYPE_OF_kInt64Ty_UNDER_kArray kInt64Ty
43#define _JTYPE_OF_kJavaObjectTy_UNDER_kArray kJavaObjectTy
44
45// Note: These should be consistent with the type return from
46// IRBuilder::GetJType([type], kField).
47#define _JTYPE_OF_kInt1Ty_UNDER_kField kInt32Ty
48#define _JTYPE_OF_kInt8Ty_UNDER_kField kInt32Ty
49#define _JTYPE_OF_kInt16Ty_UNDER_kField kInt32Ty
50#define _JTYPE_OF_kInt32Ty_UNDER_kField kInt32Ty
51#define _JTYPE_OF_kInt64Ty_UNDER_kField kInt64Ty
52#define _JTYPE_OF_kJavaObjectTy_UNDER_kField kJavaObjectTy
53
54//----------------------------------------------------------------------------
55// Thread
56//----------------------------------------------------------------------------
57
Ian Rogers76ae4fe2013-02-27 16:03:41 -080058// Thread* art_portable_get_current_thread()
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -070059_EVAL_DEF_INTRINSICS_FUNC(GetCurrentThread,
Ian Rogers76ae4fe2013-02-27 16:03:41 -080060 art_portable_get_current_thread,
Shih-wei Liao21d28f52012-06-12 05:55:00 -070061 kAttrReadNone | kAttrNoThrow,
62 kJavaThreadTy,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -070063 _EXPAND_ARG0())
64
Ian Rogers76ae4fe2013-02-27 16:03:41 -080065// void art_portable_test_suspend(Thread* thread)
Shih-wei Liao21d28f52012-06-12 05:55:00 -070066_EVAL_DEF_INTRINSICS_FUNC(TestSuspend,
Ian Rogers76ae4fe2013-02-27 16:03:41 -080067 art_portable_test_suspend,
Shih-wei Liao21d28f52012-06-12 05:55:00 -070068 kAttrNoThrow,
69 kVoidTy,
70 _EXPAND_ARG1(kJavaThreadTy))
71
Ian Rogers76ae4fe2013-02-27 16:03:41 -080072// void art_portable_check_suspend() /* Expands to GetCurrentThread/TestSuspend */
Shih-wei Liao21d28f52012-06-12 05:55:00 -070073_EVAL_DEF_INTRINSICS_FUNC(CheckSuspend,
Ian Rogers76ae4fe2013-02-27 16:03:41 -080074 art_portable_check_suspend,
Shih-wei Liao21d28f52012-06-12 05:55:00 -070075 kAttrNoThrow,
76 kVoidTy,
77 _EXPAND_ARG0())
78
Ian Rogers76ae4fe2013-02-27 16:03:41 -080079// void art_portable_mark_gc_card(Object* new_value, Object* object)
Shih-wei Liao21d28f52012-06-12 05:55:00 -070080_EVAL_DEF_INTRINSICS_FUNC(MarkGCCard,
Ian Rogers76ae4fe2013-02-27 16:03:41 -080081 art_portable_mark_gc_card,
Shih-wei Liao21d28f52012-06-12 05:55:00 -070082 kAttrNoThrow,
83 kVoidTy,
84 _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy))
85
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -070086//----------------------------------------------------------------------------
87// Exception
88//----------------------------------------------------------------------------
89
Bill Buzbeec9f40dd2012-08-15 11:35:25 -070090// Should not expand - introduces the catch targets for a potentially
91// throwing instruction. The result is a switch key and this
92// instruction will be followed by a switch statement. The catch
93// targets will be enumerated as cases of the switch, with the fallthrough
94// designating the block containing the potentially throwing instruction.
Ian Rogers76ae4fe2013-02-27 16:03:41 -080095// bool art_portable_catch_targets(int dex_pc)
Bill Buzbeec9f40dd2012-08-15 11:35:25 -070096_EVAL_DEF_INTRINSICS_FUNC(CatchTargets,
Ian Rogers76ae4fe2013-02-27 16:03:41 -080097 art_portable_catch_targets,
Bill Buzbeec9f40dd2012-08-15 11:35:25 -070098 kAttrReadOnly | kAttrNoThrow,
99 kInt32Ty,
100 _EXPAND_ARG1(kInt32ConstantTy))
101
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800102// void art_portable_throw_exception(JavaObject* exception)
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700103_EVAL_DEF_INTRINSICS_FUNC(ThrowException,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800104 art_portable_throw_exception,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700105 kAttrDoThrow,
106 kVoidTy,
107 _EXPAND_ARG1(kJavaObjectTy))
108
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800109// void art_portable_hl_throw_exception(JavaObject* exception)
TDYa127f71bf5a2012-07-29 20:09:52 -0700110_EVAL_DEF_INTRINSICS_FUNC(HLThrowException,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800111 art_portable_hl_throw_exception,
TDYa127f71bf5a2012-07-29 20:09:52 -0700112 kAttrDoThrow,
113 kVoidTy,
114 _EXPAND_ARG1(kJavaObjectTy))
115
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800116// JavaObject* art_portable_get_current_exception()
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700117_EVAL_DEF_INTRINSICS_FUNC(GetException,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800118 art_portable_get_current_exception,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700119 kAttrReadOnly | kAttrNoThrow,
Bill Buzbeec9f40dd2012-08-15 11:35:25 -0700120 kJavaObjectTy,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700121 _EXPAND_ARG0())
122
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800123// bool art_portable_is_exception_pending()
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700124_EVAL_DEF_INTRINSICS_FUNC(IsExceptionPending,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800125 art_portable_is_exception_pending,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700126 kAttrReadOnly | kAttrNoThrow,
127 kInt1Ty,
128 _EXPAND_ARG0())
129
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800130// int art_portable_find_catch_block(Method* method, int try_item_offset)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700131_EVAL_DEF_INTRINSICS_FUNC(FindCatchBlock,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800132 art_portable_find_catch_block,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700133 kAttrReadOnly | kAttrNoThrow,
134 kInt32Ty,
135 _EXPAND_ARG2(kJavaMethodTy, kInt32ConstantTy))
136
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800137// void art_portable_throw_div_zero()
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700138_EVAL_DEF_INTRINSICS_FUNC(ThrowDivZeroException,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800139 art_portable_throw_div_zero,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700140 kAttrDoThrow,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700141 kVoidTy,
142 _EXPAND_ARG0())
143
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800144// void art_portable_throw_null_pointer_exception(uint32_t dex_pc)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700145_EVAL_DEF_INTRINSICS_FUNC(ThrowNullPointerException,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800146 art_portable_throw_null_pointer_exception,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700147 kAttrDoThrow,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700148 kVoidTy,
149 _EXPAND_ARG1(kInt32ConstantTy))
150
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800151// void art_portable_throw_array_bounds(int index, int array_len)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700152_EVAL_DEF_INTRINSICS_FUNC(ThrowIndexOutOfBounds,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800153 art_portable_throw_array_bounds,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700154 kAttrDoThrow,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700155 kVoidTy,
156 _EXPAND_ARG2(kInt32Ty, kInt32Ty))
157
158//----------------------------------------------------------------------------
159// ConstString
160//----------------------------------------------------------------------------
161
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800162// JavaObject* art_portable_const_string(uint32_t string_idx)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700163_EVAL_DEF_INTRINSICS_FUNC(ConstString,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800164 art_portable_const_string,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700165 kAttrReadOnly | kAttrNoThrow,
166 kJavaObjectTy,
167 _EXPAND_ARG1(kInt32ConstantTy))
168
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800169// JavaObject* art_portable_load_string_from_dex_cache(Method* method, uint32_t string_idx)
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700170_EVAL_DEF_INTRINSICS_FUNC(LoadStringFromDexCache,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800171 art_portable_load_string_from_dex_cache,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700172 kAttrReadOnly | kAttrNoThrow,
173 kJavaObjectTy,
174 _EXPAND_ARG1(kInt32ConstantTy))
175
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800176// JavaObject* art_portable_resolve_string(Method* method, uint32_t string_idx)
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700177_EVAL_DEF_INTRINSICS_FUNC(ResolveString,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800178 art_portable_resolve_string,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700179 kAttrNone,
180 kJavaObjectTy,
181 _EXPAND_ARG2(kJavaMethodTy, kInt32ConstantTy))
182
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700183//----------------------------------------------------------------------------
buzbee101305f2012-06-28 18:00:56 -0700184// ConstClass
185//----------------------------------------------------------------------------
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700186
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800187// JavaObject* art_portable_const_class(uint32_t type_idx)
buzbee101305f2012-06-28 18:00:56 -0700188_EVAL_DEF_INTRINSICS_FUNC(ConstClass,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800189 art_portable_const_class,
buzbee101305f2012-06-28 18:00:56 -0700190 kAttrReadOnly | kAttrNoThrow,
191 kJavaObjectTy,
192 _EXPAND_ARG1(kInt32ConstantTy))
193
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800194// JavaObject* art_portable_initialize_type_and_verify_access(uint32_t type_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700195// Method* referrer,
196// Thread* thread)
197_EVAL_DEF_INTRINSICS_FUNC(InitializeTypeAndVerifyAccess,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800198 art_portable_initialize_type_and_verify_access,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700199 kAttrNone,
200 kJavaObjectTy,
201 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy))
202
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800203// JavaObject* art_portable_load_type_from_dex_cache(uint32_t type_idx)
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700204_EVAL_DEF_INTRINSICS_FUNC(LoadTypeFromDexCache,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800205 art_portable_load_type_from_dex_cache,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700206 kAttrReadOnly | kAttrNoThrow,
207 kJavaObjectTy,
208 _EXPAND_ARG1(kInt32ConstantTy))
209
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800210// JavaObject* art_portable_initialize_type(uint32_t type_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700211// Method* referrer,
212// Thread* thread)
213_EVAL_DEF_INTRINSICS_FUNC(InitializeType,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800214 art_portable_initialize_type,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700215 kAttrNone,
216 kJavaObjectTy,
217 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy))
218
buzbee101305f2012-06-28 18:00:56 -0700219//----------------------------------------------------------------------------
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700220// Lock
buzbee101305f2012-06-28 18:00:56 -0700221//----------------------------------------------------------------------------
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700222
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800223// void art_portable_lock_object(JavaObject* obj, Thread* thread)
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700224_EVAL_DEF_INTRINSICS_FUNC(LockObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800225 art_portable_lock_object,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700226 kAttrNoThrow,
227 kVoidTy,
228 _EXPAND_ARG2(kJavaObjectTy, kJavaThreadTy))
229
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800230// void art_portable_unlock_object(JavaObject* obj, Thread* thread)
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700231_EVAL_DEF_INTRINSICS_FUNC(UnlockObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800232 art_portable_unlock_object,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700233 kAttrNone,
234 kVoidTy,
235 _EXPAND_ARG2(kJavaObjectTy, kJavaThreadTy))
236
237//----------------------------------------------------------------------------
238// Cast
239//----------------------------------------------------------------------------
240
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800241// void art_portable_check_cast(JavaObject* dest_type, JavaObject* src_type)
buzbee101305f2012-06-28 18:00:56 -0700242_EVAL_DEF_INTRINSICS_FUNC(CheckCast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800243 art_portable_check_cast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700244 kAttrNone,
245 kVoidTy,
246 _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy))
247
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800248// void art_portable_hl_check_cast(uint32_t type_idx, JavaObject* obj)
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700249_EVAL_DEF_INTRINSICS_FUNC(HLCheckCast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800250 art_portable_hl_check_cast,
buzbee101305f2012-06-28 18:00:56 -0700251 kAttrReadOnly | kAttrNoThrow,
252 kVoidTy,
253 _EXPAND_ARG2(kInt32ConstantTy, kJavaObjectTy))
254
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800255// int art_portable_is_assignable(JavaObject* dest_type, JavaObject* src_type)
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700256_EVAL_DEF_INTRINSICS_FUNC(IsAssignable,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800257 art_portable_is_assignable,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700258 kAttrReadOnly | kAttrNoThrow,
259 kInt32Ty,
260 _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy))
261
262//----------------------------------------------------------------------------
263// Allocation
264//----------------------------------------------------------------------------
265
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800266// JavaObject* art_portable_alloc_object(uint32_t type_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700267// Method* referrer,
268// Thread* thread)
269_EVAL_DEF_INTRINSICS_FUNC(AllocObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800270 art_portable_alloc_object,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700271 kAttrNone,
272 kJavaObjectTy,
273 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy))
274
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800275// JavaObject* art_portable_alloc_object_with_access_check(uint32_t type_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700276// Method* referrer,
277// Thread* thread)
278_EVAL_DEF_INTRINSICS_FUNC(AllocObjectWithAccessCheck,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800279 art_portable_alloc_object_with_access_check,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700280 kAttrNone,
281 kJavaObjectTy,
282 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy))
283
buzbee101305f2012-06-28 18:00:56 -0700284//----------------------------------------------------------------------------
buzbee8fa0fda2012-06-27 15:44:52 -0700285// Instance
buzbee4f1181f2012-06-22 13:52:12 -0700286//----------------------------------------------------------------------------
287
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800288// JavaObject* art_portable_new_instance(uint32_t type_idx)
buzbee4f1181f2012-06-22 13:52:12 -0700289_EVAL_DEF_INTRINSICS_FUNC(NewInstance,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800290 art_portable_new_instance,
buzbee4f1181f2012-06-22 13:52:12 -0700291 kAttrNone,
292 kJavaObjectTy,
293 _EXPAND_ARG1(kInt32Ty))
294
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800295// bool art_portable_instance_of(uint32_t type_idx, JavaObject* ref)
buzbee8fa0fda2012-06-27 15:44:52 -0700296_EVAL_DEF_INTRINSICS_FUNC(InstanceOf,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800297 art_portable_instance_of,
buzbee8fa0fda2012-06-27 15:44:52 -0700298 kAttrNone,
buzbee4f4dfc72012-07-02 14:54:44 -0700299 kInt32Ty,
buzbee8fa0fda2012-06-27 15:44:52 -0700300 _EXPAND_ARG2(kInt32Ty, kJavaObjectTy))
301
buzbee4f1181f2012-06-22 13:52:12 -0700302//----------------------------------------------------------------------------
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700303// Array
304//----------------------------------------------------------------------------
305
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800306// JavaObject* art_portable_new_array(uint32_t type_idx, uint32_t array_size)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700307_EVAL_DEF_INTRINSICS_FUNC(NewArray,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800308 art_portable_new_array,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700309 kAttrNone,
310 kJavaObjectTy,
311 _EXPAND_ARG2(kInt32ConstantTy, kInt32Ty))
312
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800313// uint32_t art_portable_opt_array_length(int32_t opt_flags, JavaObject* array)
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700314_EVAL_DEF_INTRINSICS_FUNC(OptArrayLength,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800315 art_portable_opt_array_length,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700316 kAttrReadOnly | kAttrNoThrow,
317 kInt32Ty,
318 _EXPAND_ARG2(kInt32Ty, kJavaObjectTy))
319
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800320// uint32_t art_portable_array_length(JavaObject* array)
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700321_EVAL_DEF_INTRINSICS_FUNC(ArrayLength,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800322 art_portable_array_length,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700323 kAttrReadOnly | kAttrNoThrow,
324 kInt32Ty,
325 _EXPAND_ARG1(kJavaObjectTy))
326
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800327// JavaObject* art_portable_alloc_array(uint32_t type_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700328// Method* referrer,
329// uint32_t length,
330// Thread* thread)
331_EVAL_DEF_INTRINSICS_FUNC(AllocArray,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800332 art_portable_alloc_array,
buzbee101305f2012-06-28 18:00:56 -0700333 kAttrNone,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700334 kJavaObjectTy,
335 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32Ty, kJavaThreadTy))
336
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800337// JavaObject* art_portable_alloc_array_with_access_check(uint32_t type_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700338// Method* referrer,
339// uint32_t length,
340// Thread* thread)
341_EVAL_DEF_INTRINSICS_FUNC(AllocArrayWithAccessCheck,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800342 art_portable_alloc_array_with_access_check,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700343 kAttrNone,
344 kJavaObjectTy,
345 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32Ty, kJavaThreadTy))
346
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800347// JavaObject* art_portable_check_and_alloc_array(uint32_t type_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700348// Method* referrer,
349// uint32_t length,
350// Thread* thread)
351_EVAL_DEF_INTRINSICS_FUNC(CheckAndAllocArray,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800352 art_portable_check_and_alloc_array,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700353 kAttrNone,
354 kJavaObjectTy,
355 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32ConstantTy, kJavaThreadTy))
356
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800357// JavaObject* art_portable_check_and_alloc_array_with_access_check(uint32_t type_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700358// Method* referrer,
359// uint32_t length,
360// Thread* thread)
361_EVAL_DEF_INTRINSICS_FUNC(CheckAndAllocArrayWithAccessCheck,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800362 art_portable_check_and_alloc_array_with_access_check,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700363 kAttrNone,
364 kJavaObjectTy,
365 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32ConstantTy, kJavaThreadTy))
buzbee101305f2012-06-28 18:00:56 -0700366
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800367// art_portable_aget_* and art_portable_aput_* never generate exception since the
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700368// necessary checking on arguments (e.g., array and index) has already done
369// before invocation of these intrinsics.
370//
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800371// [type] void art_portable_aget_[type](JavaObject* array, uint32_t index)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700372_EVAL_DEF_INTRINSICS_FUNC(ArrayGet,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800373 art_portable_aget,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700374 kAttrReadOnly | kAttrNoThrow,
375 _JTYPE(kInt32Ty, kArray),
376 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))
377
378_EVAL_DEF_INTRINSICS_FUNC(ArrayGetWide,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800379 art_portable_aget_wide,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700380 kAttrReadOnly | kAttrNoThrow,
381 _JTYPE(kInt64Ty, kArray),
382 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))
383
384_EVAL_DEF_INTRINSICS_FUNC(ArrayGetObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800385 art_portable_aget_object,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700386 kAttrReadOnly | kAttrNoThrow,
387 _JTYPE(kJavaObjectTy, kArray),
388 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))
389
390_EVAL_DEF_INTRINSICS_FUNC(ArrayGetBoolean,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800391 art_portable_aget_boolean,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700392 kAttrReadOnly | kAttrNoThrow,
393 _JTYPE(kInt1Ty, kArray),
394 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))
395
396_EVAL_DEF_INTRINSICS_FUNC(ArrayGetByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800397 art_portable_aget_byte,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700398 kAttrReadOnly | kAttrNoThrow,
399 _JTYPE(kInt8Ty, kArray),
400 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))
401
402_EVAL_DEF_INTRINSICS_FUNC(ArrayGetChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800403 art_portable_aget_char,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700404 kAttrReadOnly | kAttrNoThrow,
405 _JTYPE(kInt16Ty, kArray),
406 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))
407
408_EVAL_DEF_INTRINSICS_FUNC(ArrayGetShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800409 art_portable_aget_short,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700410 kAttrReadOnly | kAttrNoThrow,
411 _JTYPE(kInt16Ty, kArray),
412 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty))
413
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800414// void art_portable_aput_[type]([type] value, JavaObject* array, uint32_t index)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700415_EVAL_DEF_INTRINSICS_FUNC(ArrayPut,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800416 art_portable_aput,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700417 kAttrNoThrow,
418 kVoidTy,
419 _EXPAND_ARG3(_JTYPE(kInt32Ty, kArray), kJavaObjectTy, kInt32Ty))
420
421_EVAL_DEF_INTRINSICS_FUNC(ArrayPutWide,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800422 art_portable_aput_wide,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700423 kAttrNoThrow,
424 kVoidTy,
425 _EXPAND_ARG3(_JTYPE(kInt64Ty, kArray), kJavaObjectTy, kInt32Ty))
426
427_EVAL_DEF_INTRINSICS_FUNC(ArrayPutObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800428 art_portable_aput_object,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700429 kAttrNoThrow,
430 kVoidTy,
431 _EXPAND_ARG3(_JTYPE(kJavaObjectTy, kArray), kJavaObjectTy, kInt32Ty))
432
433_EVAL_DEF_INTRINSICS_FUNC(ArrayPutBoolean,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800434 art_portable_aput_boolean,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700435 kAttrNoThrow,
436 kVoidTy,
437 _EXPAND_ARG3(_JTYPE(kInt1Ty, kArray), kJavaObjectTy, kInt32Ty))
438
439_EVAL_DEF_INTRINSICS_FUNC(ArrayPutByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800440 art_portable_aput_byte,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700441 kAttrNoThrow,
442 kVoidTy,
443 _EXPAND_ARG3(_JTYPE(kInt8Ty, kArray), kJavaObjectTy, kInt32Ty))
444
445_EVAL_DEF_INTRINSICS_FUNC(ArrayPutChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800446 art_portable_aput_char,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700447 kAttrNoThrow,
448 kVoidTy,
449 _EXPAND_ARG3(_JTYPE(kInt16Ty, kArray), kJavaObjectTy, kInt32Ty))
450
451_EVAL_DEF_INTRINSICS_FUNC(ArrayPutShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800452 art_portable_aput_short,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700453 kAttrNoThrow,
454 kVoidTy,
455 _EXPAND_ARG3(_JTYPE(kInt16Ty, kArray), kJavaObjectTy, kInt32Ty))
456
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800457// void art_portable_check_put_array_element(JavaObject* value, JavaObject* array)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700458_EVAL_DEF_INTRINSICS_FUNC(CheckPutArrayElement,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800459 art_portable_check_put_array_element,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700460 kAttrNone,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700461 kVoidTy,
462 _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy))
463
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800464// void art_portable_filled_new_array(Array* array,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700465// uint32_t elem_jty, ...)
466_EVAL_DEF_INTRINSICS_FUNC(FilledNewArray,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800467 art_portable_filled_new_array,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700468 kAttrNoThrow,
469 kVoidTy,
470 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kVarArgTy))
471
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800472// void art_portable_fill_array_data(Method* referrer,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700473// uint32_t dex_pc,
474// Array* array,
475// uint32_t payload_offset)
476_EVAL_DEF_INTRINSICS_FUNC(FillArrayData,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800477 art_portable_fill_array_data,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700478 kAttrNone,
479 kVoidTy,
480 _EXPAND_ARG4(kJavaMethodTy, kInt32ConstantTy, kJavaObjectTy, kInt32ConstantTy))
481
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800482// void art_portable_hl_fill_array_data(int32_t offset, JavaObject* array)
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700483_EVAL_DEF_INTRINSICS_FUNC(HLFillArrayData,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800484 art_portable_hl_fill_array_data,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700485 kAttrNone,
486 kVoidTy,
487 _EXPAND_ARG2(kInt32ConstantTy, kJavaObjectTy))
488
489//----------------------------------------------------------------------------
490// Instance Field
491//----------------------------------------------------------------------------
492
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800493// [type] art_portable_iget_[type](uint32_t field_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700494// Method* referrer,
495// JavaObject* obj)
496_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGet,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800497 art_portable_iget,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700498 kAttrNone,
499 _JTYPE(kInt32Ty, kField),
500 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))
501
502_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetWide,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800503 art_portable_iget_wide,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700504 kAttrNone,
505 _JTYPE(kInt64Ty, kField),
506 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))
507
508_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800509 art_portable_iget_object,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700510 kAttrNone,
511 _JTYPE(kJavaObjectTy, kField),
512 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))
513
514_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetBoolean,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800515 art_portable_iget_boolean,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700516 kAttrNone,
517 _JTYPE(kInt1Ty, kField),
518 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))
519
520_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800521 art_portable_iget_byte,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700522 kAttrNone,
523 _JTYPE(kInt8Ty, kField),
524 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))
525
526_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800527 art_portable_iget_char,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700528 kAttrNone,
529 _JTYPE(kInt16Ty, kField),
530 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))
531
532_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800533 art_portable_iget_short,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700534 kAttrNone,
535 _JTYPE(kInt16Ty, kField),
536 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy))
537
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800538// [type] art_portable_iget_[type].fast(int field_offset,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700539// bool is_volatile,
540// JavaObject* obj)
541_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800542 art_portable_iget.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700543 kAttrReadOnly | kAttrNoThrow,
544 _JTYPE(kInt32Ty, kField),
545 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))
546
547_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetWideFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800548 art_portable_iget_wide.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700549 kAttrReadOnly | kAttrNoThrow,
550 _JTYPE(kInt64Ty, kField),
551 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))
552
553_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetObjectFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800554 art_portable_iget_object.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700555 kAttrReadOnly | kAttrNoThrow,
556 _JTYPE(kJavaObjectTy, kField),
557 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))
558
559_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetBooleanFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800560 art_portable_iget_boolean.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700561 kAttrReadOnly | kAttrNoThrow,
562 _JTYPE(kInt1Ty, kField),
563 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))
564
565_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetByteFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800566 art_portable_iget_byte.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700567 kAttrReadOnly | kAttrNoThrow,
568 _JTYPE(kInt8Ty, kField),
569 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))
570
571_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetCharFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800572 art_portable_iget_char.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700573 kAttrReadOnly | kAttrNoThrow,
574 _JTYPE(kInt16Ty, kField),
575 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))
576
577_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetShortFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800578 art_portable_iget_short.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700579 kAttrReadOnly | kAttrNoThrow,
580 _JTYPE(kInt16Ty, kField),
581 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy))
582
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800583// void art_portable_iput_[type](uint32_t field_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700584// Method* referrer,
585// JavaObject* obj,
586// [type] new_value)
587_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPut,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800588 art_portable_iput,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700589 kAttrNone,
590 kVoidTy,
591 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt32Ty, kField)))
592
593_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutWide,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800594 art_portable_iput_wide,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700595 kAttrNone,
596 kVoidTy,
597 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt64Ty, kField)))
598
599_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800600 art_portable_iput_object,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700601 kAttrNone,
602 kVoidTy,
603 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kJavaObjectTy, kField)))
604
605_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutBoolean,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800606 art_portable_iput_boolean,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700607 kAttrNone,
608 kVoidTy,
609 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt1Ty, kField)))
610
611_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800612 art_portable_iput_byte,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700613 kAttrNone,
614 kVoidTy,
615 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt8Ty, kField)))
616
617_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800618 art_portable_iput_char,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700619 kAttrNone,
620 kVoidTy,
621 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField)))
622
623_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800624 art_portable_iput_short,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700625 kAttrNone,
626 kVoidTy,
627 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField)))
628
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800629// void art_portable_iput_[type].fast(int field_offset,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700630// bool is_volatile,
631// JavaObject* obj,
632// [type] new_value)
633_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800634 art_portable_iput.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700635 kAttrNoThrow,
636 kVoidTy,
637 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt32Ty, kField)))
638
639_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutWideFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800640 art_portable_iput_wide.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700641 kAttrNoThrow,
642 kVoidTy,
643 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt64Ty, kField)))
644
645_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutObjectFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800646 art_portable_iput_object.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700647 kAttrNoThrow,
648 kVoidTy,
649 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kJavaObjectTy, kField)))
650
651_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutBooleanFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800652 art_portable_iput_boolean.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700653 kAttrNoThrow,
654 kVoidTy,
655 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt1Ty, kField)))
656
657_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutByteFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800658 art_portable_iput_byte.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700659 kAttrNoThrow,
660 kVoidTy,
661 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt8Ty, kField)))
662
663_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutCharFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800664 art_portable_iput_char.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700665 kAttrNoThrow,
666 kVoidTy,
667 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField)))
668
669_EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutShortFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800670 art_portable_iput_short.fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700671 kAttrNoThrow,
672 kVoidTy,
673 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField)))
674
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700675//----------------------------------------------------------------------------
676// Static Field
677//----------------------------------------------------------------------------
678
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800679// [type] art_portable_sget_[type](uint32_t field_idx, Method* referrer)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700680_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGet,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800681 art_portable_sget,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700682 kAttrNone,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700683 _JTYPE(kInt32Ty, kField),
684 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))
685
686_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetWide,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800687 art_portable_sget_wide,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700688 kAttrNone,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700689 _JTYPE(kInt64Ty, kField),
690 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))
691
692_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800693 art_portable_sget_object,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700694 kAttrNone,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700695 _JTYPE(kJavaObjectTy, kField),
696 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))
697
698_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetBoolean,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800699 art_portable_sget_boolean,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700700 kAttrNone,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700701 _JTYPE(kInt1Ty, kField),
702 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))
703
704_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800705 art_portable_sget_byte,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700706 kAttrNone,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700707 _JTYPE(kInt8Ty, kField),
708 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))
709
710_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800711 art_portable_sget_char,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700712 kAttrNone,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700713 _JTYPE(kInt16Ty, kField),
714 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))
715
716_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800717 art_portable_sget_short,
Shih-wei Liao21d28f52012-06-12 05:55:00 -0700718 kAttrNone,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700719 _JTYPE(kInt16Ty, kField),
720 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy))
721
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800722// [type] art_portable_sget_[type].fast(JavaObject* ssb,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700723// int field_offset,
724// bool is_volatile)
725_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800726 art_portable_sget.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700727 kAttrReadOnly | kAttrNoThrow,
728 _JTYPE(kInt32Ty, kField),
729 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))
730
731_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetWideFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800732 art_portable_sget_wide.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700733 kAttrReadOnly | kAttrNoThrow,
734 _JTYPE(kInt64Ty, kField),
735 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))
736
737_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetObjectFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800738 art_portable_sget_object.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700739 kAttrReadOnly | kAttrNoThrow,
740 _JTYPE(kJavaObjectTy, kField),
741 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))
742
743_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetBooleanFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800744 art_portable_sget_boolean.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700745 kAttrReadOnly | kAttrNoThrow,
746 _JTYPE(kInt1Ty, kField),
747 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))
748
749_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetByteFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800750 art_portable_sget_byte.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700751 kAttrReadOnly | kAttrNoThrow,
752 _JTYPE(kInt8Ty, kField),
753 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))
754
755_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetCharFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800756 art_portable_sget_char.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700757 kAttrReadOnly | kAttrNoThrow,
758 _JTYPE(kInt16Ty, kField),
759 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))
760
761_EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetShortFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800762 art_portable_sget_short.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700763 kAttrReadOnly | kAttrNoThrow,
764 _JTYPE(kInt16Ty, kField),
765 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy))
766
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800767// void art_portable_sput_[type](uint32_t field_idx,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700768// Method* referrer,
769// [type] new_value)
770_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPut,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800771 art_portable_sput,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700772 kAttrNone,
773 kVoidTy,
774 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt32Ty, kField)))
775
776_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutWide,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800777 art_portable_sput_wide,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700778 kAttrNone,
779 kVoidTy,
780 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt64Ty, kField)))
781
782_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800783 art_portable_sput_object,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700784 kAttrNone,
785 kVoidTy,
786 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kJavaObjectTy, kField)))
787
788_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutBoolean,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800789 art_portable_sput_boolean,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700790 kAttrNone,
791 kVoidTy,
792 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt1Ty, kField)))
793
794_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800795 art_portable_sput_byte,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700796 kAttrNone,
797 kVoidTy,
798 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt8Ty, kField)))
799
800_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800801 art_portable_sput_char,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700802 kAttrNone,
803 kVoidTy,
804 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt16Ty, kField)))
805
806_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800807 art_portable_sput_short,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700808 kAttrNone,
809 kVoidTy,
810 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt16Ty, kField)))
811
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800812// void art_portable_sput_[type].fast(JavaObject* ssb,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700813// int field_offset,
814// bool is_volatile,
815// [type] new_value)
816_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800817 art_portable_sput.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700818 kAttrNoThrow,
819 kVoidTy,
820 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt32Ty, kField)))
821
822_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutWideFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800823 art_portable_sput_wide.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700824 kAttrNoThrow,
825 kVoidTy,
826 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt64Ty, kField)))
827
828_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutObjectFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800829 art_portable_sput_object.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700830 kAttrNoThrow,
831 kVoidTy,
832 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kJavaObjectTy, kField)))
833
834_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutBooleanFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800835 art_portable_sput_boolean.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700836 kAttrNoThrow,
837 kVoidTy,
838 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt1Ty, kField)))
839
840_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutByteFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800841 art_portable_sput_byte.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700842 kAttrNoThrow,
843 kVoidTy,
844 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt8Ty, kField)))
845
846_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutCharFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800847 art_portable_sput_char.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700848 kAttrNoThrow,
849 kVoidTy,
850 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt16Ty, kField)))
851
852_EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutShortFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800853 art_portable_sput_short.fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700854 kAttrNoThrow,
855 kVoidTy,
856 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt16Ty, kField)))
857
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800858// JavaObject* art_portable_load_declaring_class_ssb(Method* method)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700859// Load the static storage base of the class that given method resides
860_EVAL_DEF_INTRINSICS_FUNC(LoadDeclaringClassSSB,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800861 art_portable_load_declaring_class_ssb,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700862 kAttrReadOnly | kAttrNoThrow,
863 kJavaObjectTy,
864 _EXPAND_ARG1(kJavaMethodTy))
865
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800866// JavaObject* art_portable_init_and_load_class_ssb(uint32_t type_idx,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700867// Method* referrer,
868// Thread* thread)
869_EVAL_DEF_INTRINSICS_FUNC(InitializeAndLoadClassSSB,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800870 art_portable_init_and_load_class_ssb,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -0700871 kAttrNone,
872 kJavaObjectTy,
873 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy))
874
875//----------------------------------------------------------------------------
buzbee8fa0fda2012-06-27 15:44:52 -0700876// High-level Array get/put
877//
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800878// Similar to art_portable_aget/aput_xxx, but checks not yet performed.
buzbee8fa0fda2012-06-27 15:44:52 -0700879// OptFlags contain info describing whether frontend has determined that
880// null check and/or array bounds check may be skipped.
881//
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800882// [type] void art_portable_hl_aget_[type](int optFlags, JavaObject* array, uint32_t index)
buzbee8fa0fda2012-06-27 15:44:52 -0700883_EVAL_DEF_INTRINSICS_FUNC(HLArrayGet,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800884 art_portable_hl_aget,
buzbee8fa0fda2012-06-27 15:44:52 -0700885 kAttrReadOnly | kAttrNoThrow,
886 kInt32Ty,
887 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
888
889_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetFloat,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800890 art_portable_hl_aget_float,
buzbee8fa0fda2012-06-27 15:44:52 -0700891 kAttrReadOnly | kAttrNoThrow,
892 kFloatTy,
893 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
894
895_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetWide,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800896 art_portable_hl_aget_wide,
buzbee8fa0fda2012-06-27 15:44:52 -0700897 kAttrReadOnly | kAttrNoThrow,
898 kInt64Ty,
899 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
900
901_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetDouble,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800902 art_portable_hl_aget_double,
buzbee8fa0fda2012-06-27 15:44:52 -0700903 kAttrReadOnly | kAttrNoThrow,
904 kDoubleTy,
905 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
906
907_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800908 art_portable_hl_aget_object,
buzbee8fa0fda2012-06-27 15:44:52 -0700909 kAttrReadOnly | kAttrNoThrow,
910 kJavaObjectTy,
911 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
912
913_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetBoolean,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800914 art_portable_hl_aget_boolean,
buzbee8fa0fda2012-06-27 15:44:52 -0700915 kAttrReadOnly | kAttrNoThrow,
buzbee76592632012-06-29 15:18:35 -0700916 kInt32Ty,
buzbee8fa0fda2012-06-27 15:44:52 -0700917 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
918
919_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800920 art_portable_hl_aget_byte,
buzbee8fa0fda2012-06-27 15:44:52 -0700921 kAttrReadOnly | kAttrNoThrow,
buzbee76592632012-06-29 15:18:35 -0700922 kInt32Ty,
buzbee8fa0fda2012-06-27 15:44:52 -0700923 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
924
925_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800926 art_portable_hl_aget_char,
buzbee8fa0fda2012-06-27 15:44:52 -0700927 kAttrReadOnly | kAttrNoThrow,
buzbee76592632012-06-29 15:18:35 -0700928 kInt32Ty,
buzbee8fa0fda2012-06-27 15:44:52 -0700929 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
930
931_EVAL_DEF_INTRINSICS_FUNC(HLArrayGetShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800932 art_portable_hl_aget_short,
buzbee8fa0fda2012-06-27 15:44:52 -0700933 kAttrReadOnly | kAttrNoThrow,
buzbee76592632012-06-29 15:18:35 -0700934 kInt32Ty,
buzbee8fa0fda2012-06-27 15:44:52 -0700935 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
936
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800937// void art_portable_aput_[type](int optFlags, [type] value, JavaObject* array, uint32_t index)
buzbee8fa0fda2012-06-27 15:44:52 -0700938_EVAL_DEF_INTRINSICS_FUNC(HLArrayPut,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800939 art_portable_hl_aput,
buzbee8fa0fda2012-06-27 15:44:52 -0700940 kAttrNoThrow,
941 kVoidTy,
942 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))
943
944_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutFloat,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800945 art_portable_hl_aput_float,
buzbee8fa0fda2012-06-27 15:44:52 -0700946 kAttrNoThrow,
947 kVoidTy,
948 _EXPAND_ARG4(kInt32Ty, kFloatTy, kJavaObjectTy, kInt32Ty))
949
950_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutWide,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800951 art_portable_hl_aput_wide,
buzbee8fa0fda2012-06-27 15:44:52 -0700952 kAttrNoThrow,
953 kVoidTy,
954 _EXPAND_ARG4(kInt32Ty, kInt64Ty, kJavaObjectTy, kInt32Ty))
955
956_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutDouble,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800957 art_portable_hl_aput_double,
buzbee8fa0fda2012-06-27 15:44:52 -0700958 kAttrNoThrow,
959 kVoidTy,
960 _EXPAND_ARG4(kInt32Ty, kDoubleTy, kJavaObjectTy, kInt32Ty))
961
962_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800963 art_portable_hl_aput_object,
buzbee8fa0fda2012-06-27 15:44:52 -0700964 kAttrNoThrow,
965 kVoidTy,
966 _EXPAND_ARG4(kInt32Ty, kJavaObjectTy, kJavaObjectTy, kInt32Ty))
967
968_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutBoolean,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800969 art_portable_hl_aput_boolean,
buzbee8fa0fda2012-06-27 15:44:52 -0700970 kAttrNoThrow,
971 kVoidTy,
buzbee76592632012-06-29 15:18:35 -0700972 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))
buzbee8fa0fda2012-06-27 15:44:52 -0700973
974_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800975 art_portable_hl_aput_byte,
buzbee8fa0fda2012-06-27 15:44:52 -0700976 kAttrNoThrow,
977 kVoidTy,
buzbee76592632012-06-29 15:18:35 -0700978 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))
buzbee8fa0fda2012-06-27 15:44:52 -0700979
980_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800981 art_portable_hl_aput_char,
buzbee8fa0fda2012-06-27 15:44:52 -0700982 kAttrNoThrow,
983 kVoidTy,
buzbee76592632012-06-29 15:18:35 -0700984 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))
buzbee8fa0fda2012-06-27 15:44:52 -0700985
986_EVAL_DEF_INTRINSICS_FUNC(HLArrayPutShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800987 art_portable_hl_aput_short,
buzbee8fa0fda2012-06-27 15:44:52 -0700988 kAttrNoThrow,
989 kVoidTy,
buzbee76592632012-06-29 15:18:35 -0700990 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))
buzbee8fa0fda2012-06-27 15:44:52 -0700991
992//----------------------------------------------------------------------------
buzbee101305f2012-06-28 18:00:56 -0700993// High-level Instance get/put
994//
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800995// Similar to art_portable_iget/iput_xxx, but checks not yet performed.
buzbee101305f2012-06-28 18:00:56 -0700996// OptFlags contain info describing whether frontend has determined that
997// null check may be skipped.
998//
Ian Rogers76ae4fe2013-02-27 16:03:41 -0800999// [type] void art_portable_hl_iget_[type](int optFlags, JavaObject* obj, uint32_t field_idx)
buzbee101305f2012-06-28 18:00:56 -07001000_EVAL_DEF_INTRINSICS_FUNC(HLIGet,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001001 art_portable_hl_iget,
buzbee101305f2012-06-28 18:00:56 -07001002 kAttrReadOnly | kAttrNoThrow,
1003 kInt32Ty,
1004 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
1005
1006_EVAL_DEF_INTRINSICS_FUNC(HLIGetFloat,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001007 art_portable_hl_iget_float,
buzbee101305f2012-06-28 18:00:56 -07001008 kAttrReadOnly | kAttrNoThrow,
1009 kFloatTy,
1010 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
1011
1012_EVAL_DEF_INTRINSICS_FUNC(HLIGetWide,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001013 art_portable_hl_iget_wide,
buzbee101305f2012-06-28 18:00:56 -07001014 kAttrReadOnly | kAttrNoThrow,
1015 kInt64Ty,
1016 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
1017
1018_EVAL_DEF_INTRINSICS_FUNC(HLIGetDouble,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001019 art_portable_hl_iget_double,
buzbee101305f2012-06-28 18:00:56 -07001020 kAttrReadOnly | kAttrNoThrow,
1021 kDoubleTy,
1022 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
1023
1024_EVAL_DEF_INTRINSICS_FUNC(HLIGetObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001025 art_portable_hl_iget_object,
buzbee101305f2012-06-28 18:00:56 -07001026 kAttrReadOnly | kAttrNoThrow,
1027 kJavaObjectTy,
1028 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
1029
1030_EVAL_DEF_INTRINSICS_FUNC(HLIGetBoolean,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001031 art_portable_hl_iget_boolean,
buzbee101305f2012-06-28 18:00:56 -07001032 kAttrReadOnly | kAttrNoThrow,
buzbee76592632012-06-29 15:18:35 -07001033 kInt32Ty,
buzbee101305f2012-06-28 18:00:56 -07001034 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
1035
1036_EVAL_DEF_INTRINSICS_FUNC(HLIGetByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001037 art_portable_hl_iget_byte,
buzbee101305f2012-06-28 18:00:56 -07001038 kAttrReadOnly | kAttrNoThrow,
buzbee76592632012-06-29 15:18:35 -07001039 kInt32Ty,
buzbee101305f2012-06-28 18:00:56 -07001040 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
1041
1042_EVAL_DEF_INTRINSICS_FUNC(HLIGetChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001043 art_portable_hl_iget_char,
buzbee101305f2012-06-28 18:00:56 -07001044 kAttrReadOnly | kAttrNoThrow,
buzbee76592632012-06-29 15:18:35 -07001045 kInt32Ty,
buzbee101305f2012-06-28 18:00:56 -07001046 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
1047
1048_EVAL_DEF_INTRINSICS_FUNC(HLIGetShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001049 art_portable_hl_iget_short,
buzbee101305f2012-06-28 18:00:56 -07001050 kAttrReadOnly | kAttrNoThrow,
buzbee76592632012-06-29 15:18:35 -07001051 kInt32Ty,
buzbee101305f2012-06-28 18:00:56 -07001052 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty))
1053
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001054// void art_portable_iput_[type](int optFlags, [type] value, JavaObject* obj, uint32_t field_idx)
buzbee101305f2012-06-28 18:00:56 -07001055_EVAL_DEF_INTRINSICS_FUNC(HLIPut,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001056 art_portable_hl_iput,
buzbee101305f2012-06-28 18:00:56 -07001057 kAttrNoThrow,
1058 kVoidTy,
1059 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))
1060
1061_EVAL_DEF_INTRINSICS_FUNC(HLIPutFloat,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001062 art_portable_hl_iput_float,
buzbee101305f2012-06-28 18:00:56 -07001063 kAttrNoThrow,
1064 kVoidTy,
1065 _EXPAND_ARG4(kInt32Ty, kFloatTy, kJavaObjectTy, kInt32Ty))
1066
1067_EVAL_DEF_INTRINSICS_FUNC(HLIPutWide,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001068 art_portable_hl_iput_wide,
buzbee101305f2012-06-28 18:00:56 -07001069 kAttrNoThrow,
1070 kVoidTy,
1071 _EXPAND_ARG4(kInt32Ty, kInt64Ty, kJavaObjectTy, kInt32Ty))
1072
1073_EVAL_DEF_INTRINSICS_FUNC(HLIPutDouble,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001074 art_portable_hl_iput_double,
buzbee101305f2012-06-28 18:00:56 -07001075 kAttrNoThrow,
1076 kVoidTy,
1077 _EXPAND_ARG4(kInt32Ty, kDoubleTy, kJavaObjectTy, kInt32Ty))
1078
1079_EVAL_DEF_INTRINSICS_FUNC(HLIPutObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001080 art_portable_hl_iput_object,
buzbee101305f2012-06-28 18:00:56 -07001081 kAttrNoThrow,
1082 kVoidTy,
1083 _EXPAND_ARG4(kInt32Ty, kJavaObjectTy, kJavaObjectTy, kInt32Ty))
1084
1085_EVAL_DEF_INTRINSICS_FUNC(HLIPutBoolean,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001086 art_portable_hl_iput_boolean,
buzbee101305f2012-06-28 18:00:56 -07001087 kAttrNoThrow,
1088 kVoidTy,
buzbee76592632012-06-29 15:18:35 -07001089 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))
buzbee101305f2012-06-28 18:00:56 -07001090
1091_EVAL_DEF_INTRINSICS_FUNC(HLIPutByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001092 art_portable_hl_iput_byte,
buzbee101305f2012-06-28 18:00:56 -07001093 kAttrNoThrow,
1094 kVoidTy,
buzbee76592632012-06-29 15:18:35 -07001095 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))
buzbee101305f2012-06-28 18:00:56 -07001096
1097_EVAL_DEF_INTRINSICS_FUNC(HLIPutChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001098 art_portable_hl_iput_char,
buzbee101305f2012-06-28 18:00:56 -07001099 kAttrNoThrow,
1100 kVoidTy,
buzbee76592632012-06-29 15:18:35 -07001101 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))
buzbee101305f2012-06-28 18:00:56 -07001102
1103_EVAL_DEF_INTRINSICS_FUNC(HLIPutShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001104 art_portable_hl_iput_short,
buzbee101305f2012-06-28 18:00:56 -07001105 kAttrNoThrow,
1106 kVoidTy,
buzbee76592632012-06-29 15:18:35 -07001107 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty))
buzbee101305f2012-06-28 18:00:56 -07001108
1109//----------------------------------------------------------------------------
buzbee6969d502012-06-15 16:40:31 -07001110// High-level Invokes (fast-path determination not yet performed)
1111//
1112// NOTE: We expect these intrinsics to be temporary. Once calling conventions are
1113// fully merged, the unified front end will lower down to the
1114// InvokeRetxxx() intrinsics in the next section and these will be
1115// removed.
1116//
buzbee101305f2012-06-28 18:00:56 -07001117// arg0: InvokeType [ignored if FilledNewArray]
1118// arg1: method_idx [ignored if FilledNewArray]
buzbee6969d502012-06-15 16:40:31 -07001119// arg2: optimization_flags (primary to note whether null checking is needed)
1120// [arg3..argN]: actual arguments
1121//----------------------------------------------------------------------------
1122// INVOKE method returns void
1123_EVAL_DEF_INTRINSICS_FUNC(HLInvokeVoid,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001124 art_portable_hl_invoke.void,
buzbee6969d502012-06-15 16:40:31 -07001125 kAttrNone,
1126 kVoidTy,
1127 _EXPAND_ARG1(kVarArgTy))
1128
1129// INVOKE method returns object
1130_EVAL_DEF_INTRINSICS_FUNC(HLInvokeObj,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001131 art_portable_hl_invoke.obj,
buzbee6969d502012-06-15 16:40:31 -07001132 kAttrNone,
1133 kJavaObjectTy,
1134 _EXPAND_ARG1(kVarArgTy))
1135
1136// INVOKE method returns int
1137_EVAL_DEF_INTRINSICS_FUNC(HLInvokeInt,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001138 art_portable_hl_invoke.i32,
buzbee6969d502012-06-15 16:40:31 -07001139 kAttrNone,
1140 kInt32Ty,
1141 _EXPAND_ARG1(kVarArgTy))
1142
1143// INVOKE method returns float
1144_EVAL_DEF_INTRINSICS_FUNC(HLInvokeFloat,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001145 art_portable_hl_invoke.f32,
buzbee6969d502012-06-15 16:40:31 -07001146 kAttrNone,
1147 kFloatTy,
1148 _EXPAND_ARG1(kVarArgTy))
1149
1150// INVOKE method returns long
1151_EVAL_DEF_INTRINSICS_FUNC(HLInvokeLong,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001152 art_portable_hl_invoke.i64,
buzbee6969d502012-06-15 16:40:31 -07001153 kAttrNone,
1154 kInt64Ty,
1155 _EXPAND_ARG1(kVarArgTy))
1156
1157// INVOKE method returns double
1158_EVAL_DEF_INTRINSICS_FUNC(HLInvokeDouble,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001159 art_portable_hl_invoke.f64,
buzbee6969d502012-06-15 16:40:31 -07001160 kAttrNone,
1161 kDoubleTy,
1162 _EXPAND_ARG1(kVarArgTy))
1163
buzbee101305f2012-06-28 18:00:56 -07001164// FILLED_NEW_ARRAY returns object
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001165_EVAL_DEF_INTRINSICS_FUNC(HLFilledNewArray,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001166 art_portable_hl_filled_new_array,
buzbee101305f2012-06-28 18:00:56 -07001167 kAttrNone,
1168 kJavaObjectTy,
1169 _EXPAND_ARG1(kVarArgTy))
1170
buzbee6969d502012-06-15 16:40:31 -07001171//----------------------------------------------------------------------------
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001172// Invoke
1173//----------------------------------------------------------------------------
1174
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001175// Method* art_portable_find_static_method_with_access_check(uint32_t method_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001176// JavaObject* this,
1177// Method* referrer,
1178// Thread* thread)
1179_EVAL_DEF_INTRINSICS_FUNC(FindStaticMethodWithAccessCheck,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001180 art_portable_find_static_method_with_access_check,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001181 kAttrNone,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001182 kJavaMethodTy,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001183 _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy))
1184
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001185// Method* art_portable_find_direct_method_with_access_check(uint32_t method_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001186// JavaObject* this,
1187// Method* referrer,
1188// Thread* thread)
1189_EVAL_DEF_INTRINSICS_FUNC(FindDirectMethodWithAccessCheck,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001190 art_portable_find_direct_method_with_access_check,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001191 kAttrNone,
1192 kJavaMethodTy,
1193 _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy))
1194
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001195// Method* art_portable_find_virtual_method_with_access_check(uint32_t method_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001196// JavaObject* this,
1197// Method* referrer,
1198// Thread* thread)
1199_EVAL_DEF_INTRINSICS_FUNC(FindVirtualMethodWithAccessCheck,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001200 art_portable_find_virtual_method_with_access_check,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001201 kAttrNone,
1202 kJavaMethodTy,
1203 _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy))
1204
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001205// Method* art_portable_find_super_method_with_access_check(uint32_t method_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001206// JavaObject* this,
1207// Method* referrer,
1208// Thread* thread)
1209_EVAL_DEF_INTRINSICS_FUNC(FindSuperMethodWithAccessCheck,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001210 art_portable_find_super_method_with_access_check,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001211 kAttrNone,
1212 kJavaMethodTy,
1213 _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy))
1214
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001215// Method* art_portable_find_interface_method_with_access_check(uint32_t method_idx,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001216// JavaObject* this,
1217// Method* referrer,
1218// Thread* thread)
1219_EVAL_DEF_INTRINSICS_FUNC(FindInterfaceMethodWithAccessCheck,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001220 art_portable_find_interface_method_with_access_check,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001221 kAttrNone,
1222 kJavaMethodTy,
1223 _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy))
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001224
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001225// Method* art_portable_get_sd_callee_method_obj_addr(uint32_t method_idx)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001226_EVAL_DEF_INTRINSICS_FUNC(GetSDCalleeMethodObjAddrFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001227 art_portable_get_sd_callee_method_obj_addr_fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001228 kAttrReadOnly | kAttrNoThrow,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001229 kJavaMethodTy,
1230 _EXPAND_ARG1(kInt32ConstantTy))
1231
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001232// Method* art_portable_get_virtual_callee_method_obj_addr(uint32_t vtable_idx,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001233// JavaObject* this)
1234_EVAL_DEF_INTRINSICS_FUNC(GetVirtualCalleeMethodObjAddrFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001235 art_portable_get_virtual_callee_method_obj_addr_fast,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001236 kAttrReadOnly | kAttrNoThrow,
1237 kJavaMethodTy,
1238 _EXPAND_ARG2(kInt32ConstantTy, kJavaObjectTy))
1239
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001240// Method* art_portable_get_interface_callee_method_obj_addr(uint32_t method_idx,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001241// JavaObject* this,
1242// Method* referrer,
1243// Thread* thread)
1244_EVAL_DEF_INTRINSICS_FUNC(GetInterfaceCalleeMethodObjAddrFast,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001245 art_portable_get_interface_callee_method_obj_addr_fast,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001246 kAttrNone,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001247 kJavaMethodTy,
1248 _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy))
1249
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001250// [type] art_portable_invoke.[type](Method* callee, ...)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001251// INVOKE method returns void
1252_EVAL_DEF_INTRINSICS_FUNC(InvokeRetVoid,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001253 art_portable_invoke.void,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001254 kAttrNone,
1255 kVoidTy,
1256 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))
1257
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001258// INVOKE method returns the value of type boolean
1259_EVAL_DEF_INTRINSICS_FUNC(InvokeRetBoolean,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001260 art_portable_invoke.bool,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001261 kAttrNone,
1262 kInt1Ty,
1263 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))
1264
1265// INVOKE method returns the value of type byte
1266_EVAL_DEF_INTRINSICS_FUNC(InvokeRetByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001267 art_portable_invoke.byte,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001268 kAttrNone,
1269 kInt8Ty,
1270 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))
1271
1272// INVOKE method returns the value of type char
1273_EVAL_DEF_INTRINSICS_FUNC(InvokeRetChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001274 art_portable_invoke.char,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001275 kAttrNone,
1276 kInt16Ty,
1277 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))
1278
1279// INVOKE method returns the value of type short
1280_EVAL_DEF_INTRINSICS_FUNC(InvokeRetShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001281 art_portable_invoke.short,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001282 kAttrNone,
1283 kInt16Ty,
1284 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))
1285
1286// INVOKE method returns the value of type int
1287_EVAL_DEF_INTRINSICS_FUNC(InvokeRetInt,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001288 art_portable_invoke.int,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001289 kAttrNone,
1290 kInt32Ty,
1291 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))
1292
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001293// INVOKE method returns the value of type long
1294_EVAL_DEF_INTRINSICS_FUNC(InvokeRetLong,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001295 art_portable_invoke.long,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001296 kAttrNone,
1297 kInt64Ty,
1298 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))
1299
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001300// INVOKE method returns the value of type float
1301_EVAL_DEF_INTRINSICS_FUNC(InvokeRetFloat,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001302 art_portable_invoke.float,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001303 kAttrNone,
1304 kFloatTy,
1305 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))
1306
1307// INVOKE method returns the value of type double
1308_EVAL_DEF_INTRINSICS_FUNC(InvokeRetDouble,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001309 art_portable_invoke.double,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001310 kAttrNone,
1311 kDoubleTy,
1312 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))
1313
1314// INVOKE method returns the value of type "object"
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001315_EVAL_DEF_INTRINSICS_FUNC(InvokeRetObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001316 art_portable_invoke.object,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001317 kAttrNone,
1318 kJavaObjectTy,
1319 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy))
1320
1321//----------------------------------------------------------------------------
1322// Math
1323//----------------------------------------------------------------------------
1324
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001325// int art_portable_{div,rem}_int(int a, int b)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001326_EVAL_DEF_INTRINSICS_FUNC(DivInt,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001327 art_portable_div_int,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001328 kAttrReadNone | kAttrNoThrow,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001329 kInt32Ty,
1330 _EXPAND_ARG2(kInt32Ty, kInt32Ty))
1331
1332_EVAL_DEF_INTRINSICS_FUNC(RemInt,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001333 art_portable_rem_int,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001334 kAttrReadNone | kAttrNoThrow,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001335 kInt32Ty,
1336 _EXPAND_ARG2(kInt32Ty, kInt32Ty))
1337
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001338// long art_portable_{div,rem}_long(long a, long b)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001339_EVAL_DEF_INTRINSICS_FUNC(DivLong,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001340 art_portable_div_long,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001341 kAttrReadNone | kAttrNoThrow,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001342 kInt64Ty,
1343 _EXPAND_ARG2(kInt64Ty, kInt64Ty))
1344
1345_EVAL_DEF_INTRINSICS_FUNC(RemLong,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001346 art_portable_rem_long,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001347 kAttrReadNone | kAttrNoThrow,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001348 kInt64Ty,
1349 _EXPAND_ARG2(kInt64Ty, kInt64Ty))
1350
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001351// int64_t art_portable_d2l(double f)
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001352_EVAL_DEF_INTRINSICS_FUNC(D2L,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001353 art_portable_d2l,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001354 kAttrReadNone | kAttrNoThrow,
1355 kInt64Ty,
1356 _EXPAND_ARG1(kDoubleTy))
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001357
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001358// int32_t art_portable_d2l(double f)
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001359_EVAL_DEF_INTRINSICS_FUNC(D2I,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001360 art_portable_d2i,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001361 kAttrReadNone | kAttrNoThrow,
1362 kInt32Ty,
1363 _EXPAND_ARG1(kDoubleTy))
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001364
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001365// int64_t art_portable_f2l(float f)
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001366_EVAL_DEF_INTRINSICS_FUNC(F2L,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001367 art_portable_f2l,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001368 kAttrReadNone | kAttrNoThrow,
1369 kInt64Ty,
1370 _EXPAND_ARG1(kFloatTy))
1371
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001372// int32_t art_portable_f2i(float f)
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001373_EVAL_DEF_INTRINSICS_FUNC(F2I,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001374 art_portable_f2i,
Shih-wei Liao21d28f52012-06-12 05:55:00 -07001375 kAttrReadNone | kAttrNoThrow,
1376 kInt32Ty,
1377 _EXPAND_ARG1(kFloatTy))
1378
buzbee8fa0fda2012-06-27 15:44:52 -07001379//----------------------------------------------------------------------------
1380// sput intrinsics to assist MIR to Greenland_ir conversion.
1381// "HL" versions - will be deprecated when fast/slow path handling done
1382// in the common frontend.
1383//----------------------------------------------------------------------------
1384
1385// void sput_hl(int field_idx, int val)
1386_EVAL_DEF_INTRINSICS_FUNC(HLSput,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001387 art_portable_hl_sput,
buzbee8fa0fda2012-06-27 15:44:52 -07001388 kAttrReadOnly | kAttrNoThrow,
1389 kVoidTy,
1390 _EXPAND_ARG2(kInt32Ty, kInt32Ty))
1391
1392// void sput_hl_object(int field_idx, object* val)
1393_EVAL_DEF_INTRINSICS_FUNC(HLSputObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001394 art_portable_hl_sput_object,
buzbee8fa0fda2012-06-27 15:44:52 -07001395 kAttrReadOnly | kAttrNoThrow,
1396 kVoidTy,
1397 _EXPAND_ARG2(kInt32Ty, kJavaObjectTy))
1398
1399// void sput_hl_boolean(int field_idx, kInt1Ty)
1400_EVAL_DEF_INTRINSICS_FUNC(HLSputBoolean,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001401 art_portable_hl_sput_boolean,
buzbee8fa0fda2012-06-27 15:44:52 -07001402 kAttrReadOnly | kAttrNoThrow,
1403 kVoidTy,
buzbee76592632012-06-29 15:18:35 -07001404 _EXPAND_ARG2(kInt32Ty, kInt32Ty))
buzbee8fa0fda2012-06-27 15:44:52 -07001405
1406// void sput_hl_byte(int field_idx, int val)
1407_EVAL_DEF_INTRINSICS_FUNC(HLSputByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001408 art_portable_hl_sput_byte,
buzbee8fa0fda2012-06-27 15:44:52 -07001409 kAttrReadOnly | kAttrNoThrow,
1410 kVoidTy,
buzbee76592632012-06-29 15:18:35 -07001411 _EXPAND_ARG2(kInt32Ty, kInt32Ty))
buzbee8fa0fda2012-06-27 15:44:52 -07001412
1413// void sput_hl_char(int field_idx, kInt16Ty val)
1414_EVAL_DEF_INTRINSICS_FUNC(HLSputChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001415 art_portable_hl_sput_char,
buzbee8fa0fda2012-06-27 15:44:52 -07001416 kAttrReadOnly | kAttrNoThrow,
1417 kVoidTy,
buzbee76592632012-06-29 15:18:35 -07001418 _EXPAND_ARG2(kInt32Ty, kInt32Ty))
buzbee8fa0fda2012-06-27 15:44:52 -07001419
1420// void sput_hl_short(int field_idx, int val)
1421_EVAL_DEF_INTRINSICS_FUNC(HLSputShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001422 art_portable_hl_sput_short,
buzbee8fa0fda2012-06-27 15:44:52 -07001423 kAttrReadOnly | kAttrNoThrow,
1424 kVoidTy,
buzbee76592632012-06-29 15:18:35 -07001425 _EXPAND_ARG2(kInt32Ty, kInt32Ty))
buzbee8fa0fda2012-06-27 15:44:52 -07001426
1427// void sput_hl_wide(int field_idx, long val)
1428_EVAL_DEF_INTRINSICS_FUNC(HLSputWide,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001429 art_portable_hl_sput_wide,
buzbee8fa0fda2012-06-27 15:44:52 -07001430 kAttrReadOnly | kAttrNoThrow,
1431 kVoidTy,
1432 _EXPAND_ARG2(kInt32Ty, kInt64Ty))
1433
1434// void sput_hl_double(int field_idx, double val)
1435_EVAL_DEF_INTRINSICS_FUNC(HLSputDouble,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001436 art_portable_hl_sput_double,
buzbee8fa0fda2012-06-27 15:44:52 -07001437 kAttrReadOnly | kAttrNoThrow,
1438 kVoidTy,
1439 _EXPAND_ARG2(kInt32Ty, kDoubleTy))
1440
1441// void sput_hl_float(int field_idx, float val)
1442_EVAL_DEF_INTRINSICS_FUNC(HLSputFloat,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001443 art_portable_hl_sput_float,
buzbee8fa0fda2012-06-27 15:44:52 -07001444 kAttrReadOnly | kAttrNoThrow,
1445 kVoidTy,
1446 _EXPAND_ARG2(kInt32Ty, kFloatTy))
buzbee2cfc6392012-05-07 14:51:40 -07001447
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001448//----------------------------------------------------------------------------
buzbee4f1181f2012-06-22 13:52:12 -07001449// sget intrinsics to assist MIR to Greenland_ir conversion.
buzbee8fa0fda2012-06-27 15:44:52 -07001450// "HL" versions - will be deprecated when fast/slow path handling done
1451// in the common frontend.
buzbee4f1181f2012-06-22 13:52:12 -07001452//----------------------------------------------------------------------------
1453
buzbee8fa0fda2012-06-27 15:44:52 -07001454// int sget_hl(int field_idx)
1455_EVAL_DEF_INTRINSICS_FUNC(HLSget,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001456 art_portable_hl_sget,
buzbee8fa0fda2012-06-27 15:44:52 -07001457 kAttrReadOnly | kAttrNoThrow,
1458 kInt32Ty,
1459 _EXPAND_ARG1(kInt32Ty))
1460
1461// object* sget_hl_object(int field_idx)
1462_EVAL_DEF_INTRINSICS_FUNC(HLSgetObject,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001463 art_portable_hl_sget_object,
buzbee4f1181f2012-06-22 13:52:12 -07001464 kAttrReadOnly | kAttrNoThrow,
1465 kJavaObjectTy,
1466 _EXPAND_ARG1(kInt32Ty))
1467
buzbee8fa0fda2012-06-27 15:44:52 -07001468// boolean sget_hl_boolean(int field_idx)
1469_EVAL_DEF_INTRINSICS_FUNC(HLSgetBoolean,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001470 art_portable_hl_sget_boolean,
buzbee8fa0fda2012-06-27 15:44:52 -07001471 kAttrReadOnly | kAttrNoThrow,
buzbee76592632012-06-29 15:18:35 -07001472 kInt32Ty,
buzbee8fa0fda2012-06-27 15:44:52 -07001473 _EXPAND_ARG1(kInt32Ty))
1474
1475// byte sget_hl_byte(int field_idx)
1476_EVAL_DEF_INTRINSICS_FUNC(HLSgetByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001477 art_portable_hl_sget_byte,
buzbee8fa0fda2012-06-27 15:44:52 -07001478 kAttrReadOnly | kAttrNoThrow,
buzbee76592632012-06-29 15:18:35 -07001479 kInt32Ty,
buzbee8fa0fda2012-06-27 15:44:52 -07001480 _EXPAND_ARG1(kInt32Ty))
1481
1482// char sget_hl_char(int field_idx)
1483_EVAL_DEF_INTRINSICS_FUNC(HLSgetChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001484 art_portable_hl_sget_char,
buzbee8fa0fda2012-06-27 15:44:52 -07001485 kAttrReadOnly | kAttrNoThrow,
buzbee76592632012-06-29 15:18:35 -07001486 kInt32Ty,
buzbee8fa0fda2012-06-27 15:44:52 -07001487 _EXPAND_ARG1(kInt32Ty))
1488
1489// char sget_hl_short(int field_idx)
1490_EVAL_DEF_INTRINSICS_FUNC(HLSgetShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001491 art_portable_hl_sget_short,
buzbee8fa0fda2012-06-27 15:44:52 -07001492 kAttrReadOnly | kAttrNoThrow,
buzbee76592632012-06-29 15:18:35 -07001493 kInt32Ty,
buzbee8fa0fda2012-06-27 15:44:52 -07001494 _EXPAND_ARG1(kInt32Ty))
1495
1496// char sget_hl_wide(int field_idx)
1497_EVAL_DEF_INTRINSICS_FUNC(HLSgetWide,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001498 art_portable_hl_sget_wide,
buzbee8fa0fda2012-06-27 15:44:52 -07001499 kAttrReadOnly | kAttrNoThrow,
1500 kInt64Ty,
1501 _EXPAND_ARG1(kInt32Ty))
1502
1503// char sget_hl_double(int field_idx)
1504_EVAL_DEF_INTRINSICS_FUNC(HLSgetDouble,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001505 art_portable_hl_sget_double,
buzbee8fa0fda2012-06-27 15:44:52 -07001506 kAttrReadOnly | kAttrNoThrow,
1507 kDoubleTy,
1508 _EXPAND_ARG1(kInt32Ty))
1509
1510// char sget_hl_float(int field_idx)
1511_EVAL_DEF_INTRINSICS_FUNC(HLSgetFloat,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001512 art_portable_hl_sget_float,
buzbee8fa0fda2012-06-27 15:44:52 -07001513 kAttrReadOnly | kAttrNoThrow,
1514 kFloatTy,
1515 _EXPAND_ARG1(kInt32Ty))
1516//----------------------------------------------------------------------------
1517// Monitor enter/exit
1518//----------------------------------------------------------------------------
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001519// uint32_t art_portable_monitor_enter(int optFlags, JavaObject* obj)
buzbee8fa0fda2012-06-27 15:44:52 -07001520_EVAL_DEF_INTRINSICS_FUNC(MonitorEnter,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001521 art_portable_monitor_enter,
buzbee8fa0fda2012-06-27 15:44:52 -07001522 kAttrReadOnly | kAttrNoThrow,
1523 kVoidTy,
buzbee76592632012-06-29 15:18:35 -07001524 _EXPAND_ARG2(kInt32Ty, kJavaObjectTy))
buzbee8fa0fda2012-06-27 15:44:52 -07001525
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001526// uint32_t art_portable_monitor_exit(int optFlags, JavaObject* obj)
buzbee8fa0fda2012-06-27 15:44:52 -07001527_EVAL_DEF_INTRINSICS_FUNC(MonitorExit,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001528 art_portable_monitor_exit,
buzbee8fa0fda2012-06-27 15:44:52 -07001529 kAttrReadOnly | kAttrNoThrow,
1530 kVoidTy,
buzbee76592632012-06-29 15:18:35 -07001531 _EXPAND_ARG2(kInt32Ty, kJavaObjectTy))
buzbee8fa0fda2012-06-27 15:44:52 -07001532
buzbee4f1181f2012-06-22 13:52:12 -07001533//----------------------------------------------------------------------------
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001534// Shadow Frame
1535//----------------------------------------------------------------------------
1536
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001537// void art_portable_alloca_shadow_frame(int num_entry)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001538_EVAL_DEF_INTRINSICS_FUNC(AllocaShadowFrame,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001539 art_portable_alloca_shadow_frame,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001540 kAttrNoThrow,
1541 kVoidTy,
TDYa127ce4cc0d2012-11-18 16:59:53 -08001542 _EXPAND_ARG1(kInt32ConstantTy))
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001543
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001544// void art_portable_set_vreg(int entry_idx, ...)
TDYa1278e950c12012-11-02 09:58:19 -07001545_EVAL_DEF_INTRINSICS_FUNC(SetVReg,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001546 art_portable_set_vreg,
TDYa1278e950c12012-11-02 09:58:19 -07001547 kAttrNoThrow,
1548 kVoidTy,
1549 _EXPAND_ARG2(kInt32ConstantTy, kVarArgTy))
1550
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001551// void art_portable_pop_shadow_frame()
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001552_EVAL_DEF_INTRINSICS_FUNC(PopShadowFrame,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001553 art_portable_pop_shadow_frame,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001554 kAttrNoThrow,
1555 kVoidTy,
1556 _EXPAND_ARG0())
1557
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001558// void art_portable_update_dex_pc(uint32_t dex_pc)
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001559_EVAL_DEF_INTRINSICS_FUNC(UpdateDexPC,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001560 art_portable_update_dex_pc,
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001561 kAttrNoThrow,
1562 kVoidTy,
1563 _EXPAND_ARG1(kInt32ConstantTy))
1564
buzbee2cfc6392012-05-07 14:51:40 -07001565//----------------------------------------------------------------------------
buzbee76592632012-06-29 15:18:35 -07001566// FP Comparison
1567//----------------------------------------------------------------------------
1568// int cmpl_float(float, float)
1569_EVAL_DEF_INTRINSICS_FUNC(CmplFloat,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001570 art_portable_cmpl_float,
buzbee76592632012-06-29 15:18:35 -07001571 kAttrReadOnly | kAttrNoThrow,
1572 kInt32Ty,
1573 _EXPAND_ARG2(kFloatTy, kFloatTy))
1574
1575// int cmpg_float(float, float)
1576_EVAL_DEF_INTRINSICS_FUNC(CmpgFloat,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001577 art_portable_cmpg_float,
buzbee76592632012-06-29 15:18:35 -07001578 kAttrReadOnly | kAttrNoThrow,
1579 kInt32Ty,
1580 _EXPAND_ARG2(kFloatTy, kFloatTy))
1581
1582// int cmpl_double(double, double)
1583_EVAL_DEF_INTRINSICS_FUNC(CmplDouble,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001584 art_portable_cmpl_double,
buzbee76592632012-06-29 15:18:35 -07001585 kAttrReadOnly | kAttrNoThrow,
1586 kInt32Ty,
1587 _EXPAND_ARG2(kDoubleTy, kDoubleTy))
1588
1589// int cmpg_double(double, double)
1590_EVAL_DEF_INTRINSICS_FUNC(CmpgDouble,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001591 art_portable_cmpg_double,
buzbee76592632012-06-29 15:18:35 -07001592 kAttrReadOnly | kAttrNoThrow,
1593 kInt32Ty,
1594 _EXPAND_ARG2(kDoubleTy, kDoubleTy))
1595
1596//----------------------------------------------------------------------------
1597// Long Comparison
1598//----------------------------------------------------------------------------
1599// int cmp_long(long, long)
1600_EVAL_DEF_INTRINSICS_FUNC(CmpLong,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001601 art_portable_cmp_long,
buzbee76592632012-06-29 15:18:35 -07001602 kAttrReadOnly | kAttrNoThrow,
1603 kInt32Ty,
1604 _EXPAND_ARG2(kInt64Ty, kInt64Ty))
1605
1606//----------------------------------------------------------------------------
buzbee2cfc6392012-05-07 14:51:40 -07001607// Const intrinsics to assist MIR to Greenland_ir conversion. Should not materialize
1608// For simplicity, all use integer input
1609//----------------------------------------------------------------------------
1610// int const_int(int)
1611_EVAL_DEF_INTRINSICS_FUNC(ConstInt,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001612 art_portable_const_int,
buzbee2cfc6392012-05-07 14:51:40 -07001613 kAttrReadOnly | kAttrNoThrow,
1614 kInt32Ty,
1615 _EXPAND_ARG1(kInt32Ty))
1616
Bill Buzbeec9f40dd2012-08-15 11:35:25 -07001617// JavaObject* const_obj(int)
buzbee2cfc6392012-05-07 14:51:40 -07001618_EVAL_DEF_INTRINSICS_FUNC(ConstObj,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001619 art_portable_const_obj,
buzbee2cfc6392012-05-07 14:51:40 -07001620 kAttrReadOnly | kAttrNoThrow,
1621 kJavaObjectTy,
1622 _EXPAND_ARG1(kInt32Ty))
1623
Bill Buzbeec9f40dd2012-08-15 11:35:25 -07001624// long const_long(long)
buzbee2cfc6392012-05-07 14:51:40 -07001625_EVAL_DEF_INTRINSICS_FUNC(ConstLong,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001626 art_portable_const_long,
buzbee2cfc6392012-05-07 14:51:40 -07001627 kAttrReadOnly | kAttrNoThrow,
1628 kInt64Ty,
1629 _EXPAND_ARG1(kInt64Ty))
1630
Bill Buzbeec9f40dd2012-08-15 11:35:25 -07001631// float const_float(int)
buzbee2cfc6392012-05-07 14:51:40 -07001632_EVAL_DEF_INTRINSICS_FUNC(ConstFloat,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001633 art_portable_const_Float,
buzbee2cfc6392012-05-07 14:51:40 -07001634 kAttrReadOnly | kAttrNoThrow,
1635 kFloatTy,
1636 _EXPAND_ARG1(kInt32Ty))
1637
Bill Buzbeec9f40dd2012-08-15 11:35:25 -07001638// double const_double(long)
buzbee2cfc6392012-05-07 14:51:40 -07001639_EVAL_DEF_INTRINSICS_FUNC(ConstDouble,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001640 art_portable_const_Double,
buzbee2cfc6392012-05-07 14:51:40 -07001641 kAttrReadOnly | kAttrNoThrow,
1642 kDoubleTy,
1643 _EXPAND_ARG1(kInt64Ty))
1644
1645
1646//----------------------------------------------------------------------------
1647// Copy intrinsics to assist MIR to Greenland_ir conversion. Should not materialize
1648//----------------------------------------------------------------------------
1649
1650// void method_info(void)
1651_EVAL_DEF_INTRINSICS_FUNC(MethodInfo,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001652 art_portable_method_info,
buzbee2cfc6392012-05-07 14:51:40 -07001653 kAttrReadOnly | kAttrNoThrow,
1654 kVoidTy,
1655 _EXPAND_ARG0())
1656
1657// int copy_int(int)
1658_EVAL_DEF_INTRINSICS_FUNC(CopyInt,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001659 art_portable_copy_int,
buzbee2cfc6392012-05-07 14:51:40 -07001660 kAttrReadOnly | kAttrNoThrow,
1661 kInt32Ty,
1662 _EXPAND_ARG1(kInt32Ty))
1663
Logan Chien75e4b602012-07-23 14:24:12 -07001664// JavaObject* copy_obj(obj)
buzbee2cfc6392012-05-07 14:51:40 -07001665_EVAL_DEF_INTRINSICS_FUNC(CopyObj,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001666 art_portable_copy_obj,
buzbee2cfc6392012-05-07 14:51:40 -07001667 kAttrReadOnly | kAttrNoThrow,
1668 kJavaObjectTy,
1669 _EXPAND_ARG1(kJavaObjectTy))
1670
buzbee2a83e8f2012-07-13 16:42:30 -07001671// long copy_long(long)
buzbee2cfc6392012-05-07 14:51:40 -07001672_EVAL_DEF_INTRINSICS_FUNC(CopyLong,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001673 art_portable_copy_long,
buzbee2cfc6392012-05-07 14:51:40 -07001674 kAttrReadOnly | kAttrNoThrow,
1675 kInt64Ty,
1676 _EXPAND_ARG1(kInt64Ty))
1677
Logan Chien75e4b602012-07-23 14:24:12 -07001678// float copy_float(float)
buzbee2cfc6392012-05-07 14:51:40 -07001679_EVAL_DEF_INTRINSICS_FUNC(CopyFloat,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001680 art_portable_copy_Float,
buzbee2cfc6392012-05-07 14:51:40 -07001681 kAttrReadOnly | kAttrNoThrow,
1682 kFloatTy,
1683 _EXPAND_ARG1(kFloatTy))
1684
Logan Chien75e4b602012-07-23 14:24:12 -07001685// double copy_double(double)
buzbee2cfc6392012-05-07 14:51:40 -07001686_EVAL_DEF_INTRINSICS_FUNC(CopyDouble,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001687 art_portable_copy_Double,
buzbee2cfc6392012-05-07 14:51:40 -07001688 kAttrReadOnly | kAttrNoThrow,
1689 kDoubleTy,
1690 _EXPAND_ARG1(kDoubleTy))
1691
buzbee101305f2012-06-28 18:00:56 -07001692//----------------------------------------------------------------------------
buzbee2a83e8f2012-07-13 16:42:30 -07001693// Shift intrinsics. Shift semantics for Dalvik are a bit different than
1694// the llvm shift operators. For 32-bit shifts, the shift count is constrained
1695// to the range of 0..31, while for 64-bit shifts we limit to 0..63.
1696// Further, the shift count for Long shifts in Dalvik is 32 bits, while
1697// llvm requires a 64-bit shift count. For GBC, we represent shifts as an
1698// intrinsic to allow most efficient target-dependent lowering.
1699//----------------------------------------------------------------------------
1700// long shl_long(long,int)
1701_EVAL_DEF_INTRINSICS_FUNC(SHLLong,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001702 art_portable_shl_long,
buzbee2a83e8f2012-07-13 16:42:30 -07001703 kAttrReadOnly | kAttrNoThrow,
1704 kInt64Ty,
1705 _EXPAND_ARG2(kInt64Ty,kInt32Ty))
1706// long shr_long(long,int)
1707_EVAL_DEF_INTRINSICS_FUNC(SHRLong,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001708 art_portable_shr_long,
buzbee2a83e8f2012-07-13 16:42:30 -07001709 kAttrReadOnly | kAttrNoThrow,
1710 kInt64Ty,
1711 _EXPAND_ARG2(kInt64Ty,kInt32Ty))
1712// long ushr_long(long,int)
1713_EVAL_DEF_INTRINSICS_FUNC(USHRLong,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001714 art_portable_ushl_long,
buzbee2a83e8f2012-07-13 16:42:30 -07001715 kAttrReadOnly | kAttrNoThrow,
1716 kInt64Ty,
1717 _EXPAND_ARG2(kInt64Ty,kInt32Ty))
1718// int shl_int(int,int)
1719_EVAL_DEF_INTRINSICS_FUNC(SHLInt,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001720 art_portable_shl_int,
buzbee2a83e8f2012-07-13 16:42:30 -07001721 kAttrReadOnly | kAttrNoThrow,
1722 kInt32Ty,
1723 _EXPAND_ARG2(kInt32Ty,kInt32Ty))
1724// long shr_int(int,int)
1725_EVAL_DEF_INTRINSICS_FUNC(SHRInt,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001726 art_portable_shr_int,
buzbee2a83e8f2012-07-13 16:42:30 -07001727 kAttrReadOnly | kAttrNoThrow,
1728 kInt32Ty,
1729 _EXPAND_ARG2(kInt32Ty,kInt32Ty))
1730// int ushr_long(int,int)
1731_EVAL_DEF_INTRINSICS_FUNC(USHRInt,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001732 art_portable_ushl_int,
buzbee2a83e8f2012-07-13 16:42:30 -07001733 kAttrReadOnly | kAttrNoThrow,
1734 kInt32Ty,
1735 _EXPAND_ARG2(kInt32Ty,kInt32Ty))
1736//----------------------------------------------------------------------------
buzbee101305f2012-06-28 18:00:56 -07001737// Conversion instrinsics. Note: these should eventually be removed. We
1738// can express these directly in bitcode, but by using intrinsics the
1739// Quick compiler can be more efficient. Some extra optimization infrastructure
1740// will have to be developed to undo the bitcode verbosity when these are
1741// done inline.
1742//----------------------------------------------------------------------------
1743// int int_to_byte(int)
1744_EVAL_DEF_INTRINSICS_FUNC(IntToByte,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001745 art_portable_int_to_byte,
buzbee101305f2012-06-28 18:00:56 -07001746 kAttrReadOnly | kAttrNoThrow,
1747 kInt32Ty,
1748 _EXPAND_ARG1(kInt32Ty))
1749
1750// int int_to_char(int)
1751_EVAL_DEF_INTRINSICS_FUNC(IntToChar,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001752 art_portable_int_to_char,
buzbee101305f2012-06-28 18:00:56 -07001753 kAttrReadOnly | kAttrNoThrow,
1754 kInt32Ty,
1755 _EXPAND_ARG1(kInt32Ty))
1756
1757// int int_to_short(int)
1758_EVAL_DEF_INTRINSICS_FUNC(IntToShort,
Ian Rogers76ae4fe2013-02-27 16:03:41 -08001759 art_portable_int_to_short,
buzbee101305f2012-06-28 18:00:56 -07001760 kAttrReadOnly | kAttrNoThrow,
1761 kInt32Ty,
1762 _EXPAND_ARG1(kInt32Ty))
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001763
Sebastien Hertz0d43d542013-02-27 19:02:16 +01001764//----------------------------------------------------------------------------
1765// Memory barrier
1766//----------------------------------------------------------------------------
1767// void constructor_barrier()
1768_EVAL_DEF_INTRINSICS_FUNC(ConstructorBarrier,
1769 art_portable_constructor_barrier,
1770 kAttrReadOnly | kAttrNoThrow,
1771 kVoidTy,
1772 _EXPAND_ARG0())
1773
Shih-wei Liaoe94d9b22012-05-22 09:01:24 -07001774// Clean up all internal used macros
1775#undef _EXPAND_ARG0
1776#undef _EXPAND_ARG1
1777#undef _EXPAND_ARG2
1778#undef _EXPAND_ARG3
1779#undef _EXPAND_ARG4
1780#undef _EXPAND_ARG5
1781
1782#undef _JTYPE_OF_kInt1Ty_UNDER_kArray
1783#undef _JTYPE_OF_kInt8Ty_UNDER_kArray
1784#undef _JTYPE_OF_kInt16Ty_UNDER_kArray
1785#undef _JTYPE_OF_kInt32Ty_UNDER_kArray
1786#undef _JTYPE_OF_kInt64Ty_UNDER_kArray
1787#undef _JTYPE_OF_kJavaObjectTy_UNDER_kArray
1788
1789#undef _JTYPE_OF_kInt1Ty_UNDER_kField
1790#undef _JTYPE_OF_kInt8Ty_UNDER_kField
1791#undef _JTYPE_OF_kInt16Ty_UNDER_kField
1792#undef _JTYPE_OF_kInt32Ty_UNDER_kField
1793#undef _JTYPE_OF_kInt64Ty_UNDER_kField
1794#undef _JTYPE_OF_kJavaObjectTy_UNDER_kField
1795
1796#undef DEF_INTRINSICS_FUNC