1 /* 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 58 // Thread* art_portable_get_current_thread() 59 _EVAL_DEF_INTRINSICS_FUNC(GetCurrentThread, 60 art_portable_get_current_thread, 61 kAttrReadNone | kAttrNoThrow, 62 kJavaThreadTy, 63 _EXPAND_ARG0()) 64 65 // void art_portable_test_suspend(Thread* thread) 66 _EVAL_DEF_INTRINSICS_FUNC(TestSuspend, 67 art_portable_test_suspend, 68 kAttrNoThrow, 69 kVoidTy, 70 _EXPAND_ARG1(kJavaThreadTy)) 71 72 // void art_portable_check_suspend() /* Expands to GetCurrentThread/TestSuspend */ 73 _EVAL_DEF_INTRINSICS_FUNC(CheckSuspend, 74 art_portable_check_suspend, 75 kAttrNoThrow, 76 kVoidTy, 77 _EXPAND_ARG0()) 78 79 // void art_portable_mark_gc_card(Object* new_value, Object* object) 80 _EVAL_DEF_INTRINSICS_FUNC(MarkGCCard, 81 art_portable_mark_gc_card, 82 kAttrNoThrow, 83 kVoidTy, 84 _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy)) 85 86 //---------------------------------------------------------------------------- 87 // Exception 88 //---------------------------------------------------------------------------- 89 90 // 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. 95 // bool art_portable_catch_targets(int dex_pc) 96 _EVAL_DEF_INTRINSICS_FUNC(CatchTargets, 97 art_portable_catch_targets, 98 kAttrReadOnly | kAttrNoThrow, 99 kInt32Ty, 100 _EXPAND_ARG1(kInt32ConstantTy)) 101 102 // void art_portable_throw_exception(JavaObject* exception) 103 _EVAL_DEF_INTRINSICS_FUNC(ThrowException, 104 art_portable_throw_exception, 105 kAttrDoThrow, 106 kVoidTy, 107 _EXPAND_ARG1(kJavaObjectTy)) 108 109 // void art_portable_hl_throw_exception(JavaObject* exception) 110 _EVAL_DEF_INTRINSICS_FUNC(HLThrowException, 111 art_portable_hl_throw_exception, 112 kAttrDoThrow, 113 kVoidTy, 114 _EXPAND_ARG1(kJavaObjectTy)) 115 116 // JavaObject* art_portable_get_current_exception() 117 _EVAL_DEF_INTRINSICS_FUNC(GetException, 118 art_portable_get_current_exception, 119 kAttrReadOnly | kAttrNoThrow, 120 kJavaObjectTy, 121 _EXPAND_ARG0()) 122 123 // bool art_portable_is_exception_pending() 124 _EVAL_DEF_INTRINSICS_FUNC(IsExceptionPending, 125 art_portable_is_exception_pending, 126 kAttrReadOnly | kAttrNoThrow, 127 kInt1Ty, 128 _EXPAND_ARG0()) 129 130 // int art_portable_find_catch_block(Method* method, int try_item_offset) 131 _EVAL_DEF_INTRINSICS_FUNC(FindCatchBlock, 132 art_portable_find_catch_block, 133 kAttrReadOnly | kAttrNoThrow, 134 kInt32Ty, 135 _EXPAND_ARG2(kJavaMethodTy, kInt32ConstantTy)) 136 137 // void art_portable_throw_div_zero() 138 _EVAL_DEF_INTRINSICS_FUNC(ThrowDivZeroException, 139 art_portable_throw_div_zero, 140 kAttrDoThrow, 141 kVoidTy, 142 _EXPAND_ARG0()) 143 144 // void art_portable_throw_null_pointer_exception(uint32_t dex_pc) 145 _EVAL_DEF_INTRINSICS_FUNC(ThrowNullPointerException, 146 art_portable_throw_null_pointer_exception, 147 kAttrDoThrow, 148 kVoidTy, 149 _EXPAND_ARG1(kInt32ConstantTy)) 150 151 // void art_portable_throw_array_bounds(int index, int array_len) 152 _EVAL_DEF_INTRINSICS_FUNC(ThrowIndexOutOfBounds, 153 art_portable_throw_array_bounds, 154 kAttrDoThrow, 155 kVoidTy, 156 _EXPAND_ARG2(kInt32Ty, kInt32Ty)) 157 158 //---------------------------------------------------------------------------- 159 // ConstString 160 //---------------------------------------------------------------------------- 161 162 // JavaObject* art_portable_const_string(uint32_t string_idx) 163 _EVAL_DEF_INTRINSICS_FUNC(ConstString, 164 art_portable_const_string, 165 kAttrReadOnly | kAttrNoThrow, 166 kJavaObjectTy, 167 _EXPAND_ARG1(kInt32ConstantTy)) 168 169 // JavaObject* art_portable_load_string_from_dex_cache(Method* method, uint32_t string_idx) 170 _EVAL_DEF_INTRINSICS_FUNC(LoadStringFromDexCache, 171 art_portable_load_string_from_dex_cache, 172 kAttrReadOnly | kAttrNoThrow, 173 kJavaObjectTy, 174 _EXPAND_ARG1(kInt32ConstantTy)) 175 176 // JavaObject* art_portable_resolve_string(Method* method, uint32_t string_idx) 177 _EVAL_DEF_INTRINSICS_FUNC(ResolveString, 178 art_portable_resolve_string, 179 kAttrNone, 180 kJavaObjectTy, 181 _EXPAND_ARG2(kJavaMethodTy, kInt32ConstantTy)) 182 183 //---------------------------------------------------------------------------- 184 // ConstClass 185 //---------------------------------------------------------------------------- 186 187 // JavaObject* art_portable_const_class(uint32_t type_idx) 188 _EVAL_DEF_INTRINSICS_FUNC(ConstClass, 189 art_portable_const_class, 190 kAttrReadOnly | kAttrNoThrow, 191 kJavaObjectTy, 192 _EXPAND_ARG1(kInt32ConstantTy)) 193 194 // JavaObject* art_portable_initialize_type_and_verify_access(uint32_t type_idx, 195 // Method* referrer, 196 // Thread* thread) 197 _EVAL_DEF_INTRINSICS_FUNC(InitializeTypeAndVerifyAccess, 198 art_portable_initialize_type_and_verify_access, 199 kAttrNone, 200 kJavaObjectTy, 201 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy)) 202 203 // JavaObject* art_portable_load_type_from_dex_cache(uint32_t type_idx) 204 _EVAL_DEF_INTRINSICS_FUNC(LoadTypeFromDexCache, 205 art_portable_load_type_from_dex_cache, 206 kAttrReadOnly | kAttrNoThrow, 207 kJavaObjectTy, 208 _EXPAND_ARG1(kInt32ConstantTy)) 209 210 // JavaObject* art_portable_initialize_type(uint32_t type_idx, 211 // Method* referrer, 212 // Thread* thread) 213 _EVAL_DEF_INTRINSICS_FUNC(InitializeType, 214 art_portable_initialize_type, 215 kAttrNone, 216 kJavaObjectTy, 217 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy)) 218 219 //---------------------------------------------------------------------------- 220 // Lock 221 //---------------------------------------------------------------------------- 222 223 // void art_portable_lock_object(JavaObject* obj, Thread* thread) 224 _EVAL_DEF_INTRINSICS_FUNC(LockObject, 225 art_portable_lock_object, 226 kAttrNoThrow, 227 kVoidTy, 228 _EXPAND_ARG2(kJavaObjectTy, kJavaThreadTy)) 229 230 // void art_portable_unlock_object(JavaObject* obj, Thread* thread) 231 _EVAL_DEF_INTRINSICS_FUNC(UnlockObject, 232 art_portable_unlock_object, 233 kAttrNone, 234 kVoidTy, 235 _EXPAND_ARG2(kJavaObjectTy, kJavaThreadTy)) 236 237 //---------------------------------------------------------------------------- 238 // Cast 239 //---------------------------------------------------------------------------- 240 241 // void art_portable_check_cast(JavaObject* dest_type, JavaObject* src_type) 242 _EVAL_DEF_INTRINSICS_FUNC(CheckCast, 243 art_portable_check_cast, 244 kAttrNone, 245 kVoidTy, 246 _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy)) 247 248 // void art_portable_hl_check_cast(uint32_t type_idx, JavaObject* obj) 249 _EVAL_DEF_INTRINSICS_FUNC(HLCheckCast, 250 art_portable_hl_check_cast, 251 kAttrReadOnly | kAttrNoThrow, 252 kVoidTy, 253 _EXPAND_ARG2(kInt32ConstantTy, kJavaObjectTy)) 254 255 // int art_portable_is_assignable(JavaObject* dest_type, JavaObject* src_type) 256 _EVAL_DEF_INTRINSICS_FUNC(IsAssignable, 257 art_portable_is_assignable, 258 kAttrReadOnly | kAttrNoThrow, 259 kInt32Ty, 260 _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy)) 261 262 //---------------------------------------------------------------------------- 263 // Allocation 264 //---------------------------------------------------------------------------- 265 266 // JavaObject* art_portable_alloc_object(uint32_t type_idx, 267 // Method* referrer, 268 // Thread* thread) 269 _EVAL_DEF_INTRINSICS_FUNC(AllocObject, 270 art_portable_alloc_object, 271 kAttrNone, 272 kJavaObjectTy, 273 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy)) 274 275 // JavaObject* art_portable_alloc_object_with_access_check(uint32_t type_idx, 276 // Method* referrer, 277 // Thread* thread) 278 _EVAL_DEF_INTRINSICS_FUNC(AllocObjectWithAccessCheck, 279 art_portable_alloc_object_with_access_check, 280 kAttrNone, 281 kJavaObjectTy, 282 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy)) 283 284 //---------------------------------------------------------------------------- 285 // Instance 286 //---------------------------------------------------------------------------- 287 288 // JavaObject* art_portable_new_instance(uint32_t type_idx) 289 _EVAL_DEF_INTRINSICS_FUNC(NewInstance, 290 art_portable_new_instance, 291 kAttrNone, 292 kJavaObjectTy, 293 _EXPAND_ARG1(kInt32Ty)) 294 295 // bool art_portable_instance_of(uint32_t type_idx, JavaObject* ref) 296 _EVAL_DEF_INTRINSICS_FUNC(InstanceOf, 297 art_portable_instance_of, 298 kAttrNone, 299 kInt32Ty, 300 _EXPAND_ARG2(kInt32Ty, kJavaObjectTy)) 301 302 //---------------------------------------------------------------------------- 303 // Array 304 //---------------------------------------------------------------------------- 305 306 // JavaObject* art_portable_new_array(uint32_t type_idx, uint32_t array_size) 307 _EVAL_DEF_INTRINSICS_FUNC(NewArray, 308 art_portable_new_array, 309 kAttrNone, 310 kJavaObjectTy, 311 _EXPAND_ARG2(kInt32ConstantTy, kInt32Ty)) 312 313 // uint32_t art_portable_opt_array_length(int32_t opt_flags, JavaObject* array) 314 _EVAL_DEF_INTRINSICS_FUNC(OptArrayLength, 315 art_portable_opt_array_length, 316 kAttrReadOnly | kAttrNoThrow, 317 kInt32Ty, 318 _EXPAND_ARG2(kInt32Ty, kJavaObjectTy)) 319 320 // uint32_t art_portable_array_length(JavaObject* array) 321 _EVAL_DEF_INTRINSICS_FUNC(ArrayLength, 322 art_portable_array_length, 323 kAttrReadOnly | kAttrNoThrow, 324 kInt32Ty, 325 _EXPAND_ARG1(kJavaObjectTy)) 326 327 // JavaObject* art_portable_alloc_array(uint32_t type_idx, 328 // Method* referrer, 329 // uint32_t length, 330 // Thread* thread) 331 _EVAL_DEF_INTRINSICS_FUNC(AllocArray, 332 art_portable_alloc_array, 333 kAttrNone, 334 kJavaObjectTy, 335 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32Ty, kJavaThreadTy)) 336 337 // JavaObject* art_portable_alloc_array_with_access_check(uint32_t type_idx, 338 // Method* referrer, 339 // uint32_t length, 340 // Thread* thread) 341 _EVAL_DEF_INTRINSICS_FUNC(AllocArrayWithAccessCheck, 342 art_portable_alloc_array_with_access_check, 343 kAttrNone, 344 kJavaObjectTy, 345 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32Ty, kJavaThreadTy)) 346 347 // JavaObject* art_portable_check_and_alloc_array(uint32_t type_idx, 348 // Method* referrer, 349 // uint32_t length, 350 // Thread* thread) 351 _EVAL_DEF_INTRINSICS_FUNC(CheckAndAllocArray, 352 art_portable_check_and_alloc_array, 353 kAttrNone, 354 kJavaObjectTy, 355 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32ConstantTy, kJavaThreadTy)) 356 357 // JavaObject* art_portable_check_and_alloc_array_with_access_check(uint32_t type_idx, 358 // Method* referrer, 359 // uint32_t length, 360 // Thread* thread) 361 _EVAL_DEF_INTRINSICS_FUNC(CheckAndAllocArrayWithAccessCheck, 362 art_portable_check_and_alloc_array_with_access_check, 363 kAttrNone, 364 kJavaObjectTy, 365 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kInt32ConstantTy, kJavaThreadTy)) 366 367 // art_portable_aget_* and art_portable_aput_* never generate exception since the 368 // necessary checking on arguments (e.g., array and index) has already done 369 // before invocation of these intrinsics. 370 // 371 // [type] void art_portable_aget_[type](JavaObject* array, uint32_t index) 372 _EVAL_DEF_INTRINSICS_FUNC(ArrayGet, 373 art_portable_aget, 374 kAttrReadOnly | kAttrNoThrow, 375 _JTYPE(kInt32Ty, kArray), 376 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) 377 378 _EVAL_DEF_INTRINSICS_FUNC(ArrayGetWide, 379 art_portable_aget_wide, 380 kAttrReadOnly | kAttrNoThrow, 381 _JTYPE(kInt64Ty, kArray), 382 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) 383 384 _EVAL_DEF_INTRINSICS_FUNC(ArrayGetObject, 385 art_portable_aget_object, 386 kAttrReadOnly | kAttrNoThrow, 387 _JTYPE(kJavaObjectTy, kArray), 388 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) 389 390 _EVAL_DEF_INTRINSICS_FUNC(ArrayGetBoolean, 391 art_portable_aget_boolean, 392 kAttrReadOnly | kAttrNoThrow, 393 _JTYPE(kInt1Ty, kArray), 394 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) 395 396 _EVAL_DEF_INTRINSICS_FUNC(ArrayGetByte, 397 art_portable_aget_byte, 398 kAttrReadOnly | kAttrNoThrow, 399 _JTYPE(kInt8Ty, kArray), 400 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) 401 402 _EVAL_DEF_INTRINSICS_FUNC(ArrayGetChar, 403 art_portable_aget_char, 404 kAttrReadOnly | kAttrNoThrow, 405 _JTYPE(kInt16Ty, kArray), 406 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) 407 408 _EVAL_DEF_INTRINSICS_FUNC(ArrayGetShort, 409 art_portable_aget_short, 410 kAttrReadOnly | kAttrNoThrow, 411 _JTYPE(kInt16Ty, kArray), 412 _EXPAND_ARG2(kJavaObjectTy, kInt32Ty)) 413 414 // void art_portable_aput_[type]([type] value, JavaObject* array, uint32_t index) 415 _EVAL_DEF_INTRINSICS_FUNC(ArrayPut, 416 art_portable_aput, 417 kAttrNoThrow, 418 kVoidTy, 419 _EXPAND_ARG3(_JTYPE(kInt32Ty, kArray), kJavaObjectTy, kInt32Ty)) 420 421 _EVAL_DEF_INTRINSICS_FUNC(ArrayPutWide, 422 art_portable_aput_wide, 423 kAttrNoThrow, 424 kVoidTy, 425 _EXPAND_ARG3(_JTYPE(kInt64Ty, kArray), kJavaObjectTy, kInt32Ty)) 426 427 _EVAL_DEF_INTRINSICS_FUNC(ArrayPutObject, 428 art_portable_aput_object, 429 kAttrNoThrow, 430 kVoidTy, 431 _EXPAND_ARG3(_JTYPE(kJavaObjectTy, kArray), kJavaObjectTy, kInt32Ty)) 432 433 _EVAL_DEF_INTRINSICS_FUNC(ArrayPutBoolean, 434 art_portable_aput_boolean, 435 kAttrNoThrow, 436 kVoidTy, 437 _EXPAND_ARG3(_JTYPE(kInt1Ty, kArray), kJavaObjectTy, kInt32Ty)) 438 439 _EVAL_DEF_INTRINSICS_FUNC(ArrayPutByte, 440 art_portable_aput_byte, 441 kAttrNoThrow, 442 kVoidTy, 443 _EXPAND_ARG3(_JTYPE(kInt8Ty, kArray), kJavaObjectTy, kInt32Ty)) 444 445 _EVAL_DEF_INTRINSICS_FUNC(ArrayPutChar, 446 art_portable_aput_char, 447 kAttrNoThrow, 448 kVoidTy, 449 _EXPAND_ARG3(_JTYPE(kInt16Ty, kArray), kJavaObjectTy, kInt32Ty)) 450 451 _EVAL_DEF_INTRINSICS_FUNC(ArrayPutShort, 452 art_portable_aput_short, 453 kAttrNoThrow, 454 kVoidTy, 455 _EXPAND_ARG3(_JTYPE(kInt16Ty, kArray), kJavaObjectTy, kInt32Ty)) 456 457 // void art_portable_check_put_array_element(JavaObject* value, JavaObject* array) 458 _EVAL_DEF_INTRINSICS_FUNC(CheckPutArrayElement, 459 art_portable_check_put_array_element, 460 kAttrNone, 461 kVoidTy, 462 _EXPAND_ARG2(kJavaObjectTy, kJavaObjectTy)) 463 464 // void art_portable_filled_new_array(Array* array, 465 // uint32_t elem_jty, ...) 466 _EVAL_DEF_INTRINSICS_FUNC(FilledNewArray, 467 art_portable_filled_new_array, 468 kAttrNoThrow, 469 kVoidTy, 470 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kVarArgTy)) 471 472 // void art_portable_fill_array_data(Method* referrer, 473 // uint32_t dex_pc, 474 // Array* array, 475 // uint32_t payload_offset) 476 _EVAL_DEF_INTRINSICS_FUNC(FillArrayData, 477 art_portable_fill_array_data, 478 kAttrNone, 479 kVoidTy, 480 _EXPAND_ARG4(kJavaMethodTy, kInt32ConstantTy, kJavaObjectTy, kInt32ConstantTy)) 481 482 // void art_portable_hl_fill_array_data(int32_t offset, JavaObject* array) 483 _EVAL_DEF_INTRINSICS_FUNC(HLFillArrayData, 484 art_portable_hl_fill_array_data, 485 kAttrNone, 486 kVoidTy, 487 _EXPAND_ARG2(kInt32ConstantTy, kJavaObjectTy)) 488 489 //---------------------------------------------------------------------------- 490 // Instance Field 491 //---------------------------------------------------------------------------- 492 493 // [type] art_portable_iget_[type](uint32_t field_idx, 494 // Method* referrer, 495 // JavaObject* obj) 496 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGet, 497 art_portable_iget, 498 kAttrNone, 499 _JTYPE(kInt32Ty, kField), 500 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) 501 502 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetWide, 503 art_portable_iget_wide, 504 kAttrNone, 505 _JTYPE(kInt64Ty, kField), 506 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) 507 508 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetObject, 509 art_portable_iget_object, 510 kAttrNone, 511 _JTYPE(kJavaObjectTy, kField), 512 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) 513 514 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetBoolean, 515 art_portable_iget_boolean, 516 kAttrNone, 517 _JTYPE(kInt1Ty, kField), 518 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) 519 520 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetByte, 521 art_portable_iget_byte, 522 kAttrNone, 523 _JTYPE(kInt8Ty, kField), 524 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) 525 526 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetChar, 527 art_portable_iget_char, 528 kAttrNone, 529 _JTYPE(kInt16Ty, kField), 530 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) 531 532 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetShort, 533 art_portable_iget_short, 534 kAttrNone, 535 _JTYPE(kInt16Ty, kField), 536 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy)) 537 538 // [type] art_portable_iget_[type].fast(int field_offset, 539 // bool is_volatile, 540 // JavaObject* obj) 541 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetFast, 542 art_portable_iget.fast, 543 kAttrReadOnly | kAttrNoThrow, 544 _JTYPE(kInt32Ty, kField), 545 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) 546 547 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetWideFast, 548 art_portable_iget_wide.fast, 549 kAttrReadOnly | kAttrNoThrow, 550 _JTYPE(kInt64Ty, kField), 551 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) 552 553 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetObjectFast, 554 art_portable_iget_object.fast, 555 kAttrReadOnly | kAttrNoThrow, 556 _JTYPE(kJavaObjectTy, kField), 557 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) 558 559 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetBooleanFast, 560 art_portable_iget_boolean.fast, 561 kAttrReadOnly | kAttrNoThrow, 562 _JTYPE(kInt1Ty, kField), 563 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) 564 565 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetByteFast, 566 art_portable_iget_byte.fast, 567 kAttrReadOnly | kAttrNoThrow, 568 _JTYPE(kInt8Ty, kField), 569 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) 570 571 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetCharFast, 572 art_portable_iget_char.fast, 573 kAttrReadOnly | kAttrNoThrow, 574 _JTYPE(kInt16Ty, kField), 575 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) 576 577 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldGetShortFast, 578 art_portable_iget_short.fast, 579 kAttrReadOnly | kAttrNoThrow, 580 _JTYPE(kInt16Ty, kField), 581 _EXPAND_ARG3(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy)) 582 583 // void art_portable_iput_[type](uint32_t field_idx, 584 // Method* referrer, 585 // JavaObject* obj, 586 // [type] new_value) 587 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPut, 588 art_portable_iput, 589 kAttrNone, 590 kVoidTy, 591 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt32Ty, kField))) 592 593 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutWide, 594 art_portable_iput_wide, 595 kAttrNone, 596 kVoidTy, 597 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt64Ty, kField))) 598 599 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutObject, 600 art_portable_iput_object, 601 kAttrNone, 602 kVoidTy, 603 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kJavaObjectTy, kField))) 604 605 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutBoolean, 606 art_portable_iput_boolean, 607 kAttrNone, 608 kVoidTy, 609 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt1Ty, kField))) 610 611 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutByte, 612 art_portable_iput_byte, 613 kAttrNone, 614 kVoidTy, 615 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt8Ty, kField))) 616 617 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutChar, 618 art_portable_iput_char, 619 kAttrNone, 620 kVoidTy, 621 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField))) 622 623 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutShort, 624 art_portable_iput_short, 625 kAttrNone, 626 kVoidTy, 627 _EXPAND_ARG4(kInt32ConstantTy, kJavaMethodTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField))) 628 629 // void art_portable_iput_[type].fast(int field_offset, 630 // bool is_volatile, 631 // JavaObject* obj, 632 // [type] new_value) 633 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutFast, 634 art_portable_iput.fast, 635 kAttrNoThrow, 636 kVoidTy, 637 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt32Ty, kField))) 638 639 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutWideFast, 640 art_portable_iput_wide.fast, 641 kAttrNoThrow, 642 kVoidTy, 643 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt64Ty, kField))) 644 645 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutObjectFast, 646 art_portable_iput_object.fast, 647 kAttrNoThrow, 648 kVoidTy, 649 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kJavaObjectTy, kField))) 650 651 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutBooleanFast, 652 art_portable_iput_boolean.fast, 653 kAttrNoThrow, 654 kVoidTy, 655 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt1Ty, kField))) 656 657 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutByteFast, 658 art_portable_iput_byte.fast, 659 kAttrNoThrow, 660 kVoidTy, 661 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt8Ty, kField))) 662 663 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutCharFast, 664 art_portable_iput_char.fast, 665 kAttrNoThrow, 666 kVoidTy, 667 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField))) 668 669 _EVAL_DEF_INTRINSICS_FUNC(InstanceFieldPutShortFast, 670 art_portable_iput_short.fast, 671 kAttrNoThrow, 672 kVoidTy, 673 _EXPAND_ARG4(kInt32ConstantTy, kInt1ConstantTy, kJavaObjectTy, _JTYPE(kInt16Ty, kField))) 674 675 //---------------------------------------------------------------------------- 676 // Static Field 677 //---------------------------------------------------------------------------- 678 679 // [type] art_portable_sget_[type](uint32_t field_idx, Method* referrer) 680 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGet, 681 art_portable_sget, 682 kAttrNone, 683 _JTYPE(kInt32Ty, kField), 684 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) 685 686 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetWide, 687 art_portable_sget_wide, 688 kAttrNone, 689 _JTYPE(kInt64Ty, kField), 690 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) 691 692 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetObject, 693 art_portable_sget_object, 694 kAttrNone, 695 _JTYPE(kJavaObjectTy, kField), 696 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) 697 698 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetBoolean, 699 art_portable_sget_boolean, 700 kAttrNone, 701 _JTYPE(kInt1Ty, kField), 702 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) 703 704 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetByte, 705 art_portable_sget_byte, 706 kAttrNone, 707 _JTYPE(kInt8Ty, kField), 708 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) 709 710 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetChar, 711 art_portable_sget_char, 712 kAttrNone, 713 _JTYPE(kInt16Ty, kField), 714 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) 715 716 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetShort, 717 art_portable_sget_short, 718 kAttrNone, 719 _JTYPE(kInt16Ty, kField), 720 _EXPAND_ARG2(kInt32ConstantTy, kJavaMethodTy)) 721 722 // [type] art_portable_sget_[type].fast(JavaObject* ssb, 723 // int field_offset, 724 // bool is_volatile) 725 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetFast, 726 art_portable_sget.fast, 727 kAttrReadOnly | kAttrNoThrow, 728 _JTYPE(kInt32Ty, kField), 729 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) 730 731 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetWideFast, 732 art_portable_sget_wide.fast, 733 kAttrReadOnly | kAttrNoThrow, 734 _JTYPE(kInt64Ty, kField), 735 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) 736 737 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetObjectFast, 738 art_portable_sget_object.fast, 739 kAttrReadOnly | kAttrNoThrow, 740 _JTYPE(kJavaObjectTy, kField), 741 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) 742 743 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetBooleanFast, 744 art_portable_sget_boolean.fast, 745 kAttrReadOnly | kAttrNoThrow, 746 _JTYPE(kInt1Ty, kField), 747 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) 748 749 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetByteFast, 750 art_portable_sget_byte.fast, 751 kAttrReadOnly | kAttrNoThrow, 752 _JTYPE(kInt8Ty, kField), 753 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) 754 755 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetCharFast, 756 art_portable_sget_char.fast, 757 kAttrReadOnly | kAttrNoThrow, 758 _JTYPE(kInt16Ty, kField), 759 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) 760 761 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldGetShortFast, 762 art_portable_sget_short.fast, 763 kAttrReadOnly | kAttrNoThrow, 764 _JTYPE(kInt16Ty, kField), 765 _EXPAND_ARG3(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy)) 766 767 // void art_portable_sput_[type](uint32_t field_idx, 768 // Method* referrer, 769 // [type] new_value) 770 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPut, 771 art_portable_sput, 772 kAttrNone, 773 kVoidTy, 774 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt32Ty, kField))) 775 776 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutWide, 777 art_portable_sput_wide, 778 kAttrNone, 779 kVoidTy, 780 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt64Ty, kField))) 781 782 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutObject, 783 art_portable_sput_object, 784 kAttrNone, 785 kVoidTy, 786 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kJavaObjectTy, kField))) 787 788 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutBoolean, 789 art_portable_sput_boolean, 790 kAttrNone, 791 kVoidTy, 792 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt1Ty, kField))) 793 794 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutByte, 795 art_portable_sput_byte, 796 kAttrNone, 797 kVoidTy, 798 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt8Ty, kField))) 799 800 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutChar, 801 art_portable_sput_char, 802 kAttrNone, 803 kVoidTy, 804 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt16Ty, kField))) 805 806 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutShort, 807 art_portable_sput_short, 808 kAttrNone, 809 kVoidTy, 810 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, _JTYPE(kInt16Ty, kField))) 811 812 // void art_portable_sput_[type].fast(JavaObject* ssb, 813 // int field_offset, 814 // bool is_volatile, 815 // [type] new_value) 816 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutFast, 817 art_portable_sput.fast, 818 kAttrNoThrow, 819 kVoidTy, 820 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt32Ty, kField))) 821 822 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutWideFast, 823 art_portable_sput_wide.fast, 824 kAttrNoThrow, 825 kVoidTy, 826 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt64Ty, kField))) 827 828 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutObjectFast, 829 art_portable_sput_object.fast, 830 kAttrNoThrow, 831 kVoidTy, 832 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kJavaObjectTy, kField))) 833 834 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutBooleanFast, 835 art_portable_sput_boolean.fast, 836 kAttrNoThrow, 837 kVoidTy, 838 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt1Ty, kField))) 839 840 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutByteFast, 841 art_portable_sput_byte.fast, 842 kAttrNoThrow, 843 kVoidTy, 844 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt8Ty, kField))) 845 846 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutCharFast, 847 art_portable_sput_char.fast, 848 kAttrNoThrow, 849 kVoidTy, 850 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt16Ty, kField))) 851 852 _EVAL_DEF_INTRINSICS_FUNC(StaticFieldPutShortFast, 853 art_portable_sput_short.fast, 854 kAttrNoThrow, 855 kVoidTy, 856 _EXPAND_ARG4(kJavaObjectTy, kInt32ConstantTy, kInt1ConstantTy, _JTYPE(kInt16Ty, kField))) 857 858 // JavaObject* art_portable_load_declaring_class_ssb(Method* method) 859 // Load the static storage base of the class that given method resides 860 _EVAL_DEF_INTRINSICS_FUNC(LoadDeclaringClassSSB, 861 art_portable_load_declaring_class_ssb, 862 kAttrReadOnly | kAttrNoThrow, 863 kJavaObjectTy, 864 _EXPAND_ARG1(kJavaMethodTy)) 865 866 // JavaObject* art_portable_init_and_load_class_ssb(uint32_t type_idx, 867 // Method* referrer, 868 // Thread* thread) 869 _EVAL_DEF_INTRINSICS_FUNC(InitializeAndLoadClassSSB, 870 art_portable_init_and_load_class_ssb, 871 kAttrNone, 872 kJavaObjectTy, 873 _EXPAND_ARG3(kInt32ConstantTy, kJavaMethodTy, kJavaThreadTy)) 874 875 //---------------------------------------------------------------------------- 876 // High-level Array get/put 877 // 878 // Similar to art_portable_aget/aput_xxx, but checks not yet performed. 879 // OptFlags contain info describing whether frontend has determined that 880 // null check and/or array bounds check may be skipped. 881 // 882 // [type] void art_portable_hl_aget_[type](int optFlags, JavaObject* array, uint32_t index) 883 _EVAL_DEF_INTRINSICS_FUNC(HLArrayGet, 884 art_portable_hl_aget, 885 kAttrReadOnly | kAttrNoThrow, 886 kInt32Ty, 887 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 888 889 _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetFloat, 890 art_portable_hl_aget_float, 891 kAttrReadOnly | kAttrNoThrow, 892 kFloatTy, 893 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 894 895 _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetWide, 896 art_portable_hl_aget_wide, 897 kAttrReadOnly | kAttrNoThrow, 898 kInt64Ty, 899 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 900 901 _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetDouble, 902 art_portable_hl_aget_double, 903 kAttrReadOnly | kAttrNoThrow, 904 kDoubleTy, 905 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 906 907 _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetObject, 908 art_portable_hl_aget_object, 909 kAttrReadOnly | kAttrNoThrow, 910 kJavaObjectTy, 911 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 912 913 _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetBoolean, 914 art_portable_hl_aget_boolean, 915 kAttrReadOnly | kAttrNoThrow, 916 kInt32Ty, 917 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 918 919 _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetByte, 920 art_portable_hl_aget_byte, 921 kAttrReadOnly | kAttrNoThrow, 922 kInt32Ty, 923 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 924 925 _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetChar, 926 art_portable_hl_aget_char, 927 kAttrReadOnly | kAttrNoThrow, 928 kInt32Ty, 929 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 930 931 _EVAL_DEF_INTRINSICS_FUNC(HLArrayGetShort, 932 art_portable_hl_aget_short, 933 kAttrReadOnly | kAttrNoThrow, 934 kInt32Ty, 935 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 936 937 // void art_portable_aput_[type](int optFlags, [type] value, JavaObject* array, uint32_t index) 938 _EVAL_DEF_INTRINSICS_FUNC(HLArrayPut, 939 art_portable_hl_aput, 940 kAttrNoThrow, 941 kVoidTy, 942 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) 943 944 _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutFloat, 945 art_portable_hl_aput_float, 946 kAttrNoThrow, 947 kVoidTy, 948 _EXPAND_ARG4(kInt32Ty, kFloatTy, kJavaObjectTy, kInt32Ty)) 949 950 _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutWide, 951 art_portable_hl_aput_wide, 952 kAttrNoThrow, 953 kVoidTy, 954 _EXPAND_ARG4(kInt32Ty, kInt64Ty, kJavaObjectTy, kInt32Ty)) 955 956 _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutDouble, 957 art_portable_hl_aput_double, 958 kAttrNoThrow, 959 kVoidTy, 960 _EXPAND_ARG4(kInt32Ty, kDoubleTy, kJavaObjectTy, kInt32Ty)) 961 962 _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutObject, 963 art_portable_hl_aput_object, 964 kAttrNoThrow, 965 kVoidTy, 966 _EXPAND_ARG4(kInt32Ty, kJavaObjectTy, kJavaObjectTy, kInt32Ty)) 967 968 _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutBoolean, 969 art_portable_hl_aput_boolean, 970 kAttrNoThrow, 971 kVoidTy, 972 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) 973 974 _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutByte, 975 art_portable_hl_aput_byte, 976 kAttrNoThrow, 977 kVoidTy, 978 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) 979 980 _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutChar, 981 art_portable_hl_aput_char, 982 kAttrNoThrow, 983 kVoidTy, 984 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) 985 986 _EVAL_DEF_INTRINSICS_FUNC(HLArrayPutShort, 987 art_portable_hl_aput_short, 988 kAttrNoThrow, 989 kVoidTy, 990 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) 991 992 //---------------------------------------------------------------------------- 993 // High-level Instance get/put 994 // 995 // Similar to art_portable_iget/iput_xxx, but checks not yet performed. 996 // OptFlags contain info describing whether frontend has determined that 997 // null check may be skipped. 998 // 999 // [type] void art_portable_hl_iget_[type](int optFlags, JavaObject* obj, uint32_t field_idx) 1000 _EVAL_DEF_INTRINSICS_FUNC(HLIGet, 1001 art_portable_hl_iget, 1002 kAttrReadOnly | kAttrNoThrow, 1003 kInt32Ty, 1004 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 1005 1006 _EVAL_DEF_INTRINSICS_FUNC(HLIGetFloat, 1007 art_portable_hl_iget_float, 1008 kAttrReadOnly | kAttrNoThrow, 1009 kFloatTy, 1010 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 1011 1012 _EVAL_DEF_INTRINSICS_FUNC(HLIGetWide, 1013 art_portable_hl_iget_wide, 1014 kAttrReadOnly | kAttrNoThrow, 1015 kInt64Ty, 1016 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 1017 1018 _EVAL_DEF_INTRINSICS_FUNC(HLIGetDouble, 1019 art_portable_hl_iget_double, 1020 kAttrReadOnly | kAttrNoThrow, 1021 kDoubleTy, 1022 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 1023 1024 _EVAL_DEF_INTRINSICS_FUNC(HLIGetObject, 1025 art_portable_hl_iget_object, 1026 kAttrReadOnly | kAttrNoThrow, 1027 kJavaObjectTy, 1028 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 1029 1030 _EVAL_DEF_INTRINSICS_FUNC(HLIGetBoolean, 1031 art_portable_hl_iget_boolean, 1032 kAttrReadOnly | kAttrNoThrow, 1033 kInt32Ty, 1034 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 1035 1036 _EVAL_DEF_INTRINSICS_FUNC(HLIGetByte, 1037 art_portable_hl_iget_byte, 1038 kAttrReadOnly | kAttrNoThrow, 1039 kInt32Ty, 1040 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 1041 1042 _EVAL_DEF_INTRINSICS_FUNC(HLIGetChar, 1043 art_portable_hl_iget_char, 1044 kAttrReadOnly | kAttrNoThrow, 1045 kInt32Ty, 1046 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 1047 1048 _EVAL_DEF_INTRINSICS_FUNC(HLIGetShort, 1049 art_portable_hl_iget_short, 1050 kAttrReadOnly | kAttrNoThrow, 1051 kInt32Ty, 1052 _EXPAND_ARG3(kInt32Ty, kJavaObjectTy, kInt32Ty)) 1053 1054 // void art_portable_iput_[type](int optFlags, [type] value, JavaObject* obj, uint32_t field_idx) 1055 _EVAL_DEF_INTRINSICS_FUNC(HLIPut, 1056 art_portable_hl_iput, 1057 kAttrNoThrow, 1058 kVoidTy, 1059 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) 1060 1061 _EVAL_DEF_INTRINSICS_FUNC(HLIPutFloat, 1062 art_portable_hl_iput_float, 1063 kAttrNoThrow, 1064 kVoidTy, 1065 _EXPAND_ARG4(kInt32Ty, kFloatTy, kJavaObjectTy, kInt32Ty)) 1066 1067 _EVAL_DEF_INTRINSICS_FUNC(HLIPutWide, 1068 art_portable_hl_iput_wide, 1069 kAttrNoThrow, 1070 kVoidTy, 1071 _EXPAND_ARG4(kInt32Ty, kInt64Ty, kJavaObjectTy, kInt32Ty)) 1072 1073 _EVAL_DEF_INTRINSICS_FUNC(HLIPutDouble, 1074 art_portable_hl_iput_double, 1075 kAttrNoThrow, 1076 kVoidTy, 1077 _EXPAND_ARG4(kInt32Ty, kDoubleTy, kJavaObjectTy, kInt32Ty)) 1078 1079 _EVAL_DEF_INTRINSICS_FUNC(HLIPutObject, 1080 art_portable_hl_iput_object, 1081 kAttrNoThrow, 1082 kVoidTy, 1083 _EXPAND_ARG4(kInt32Ty, kJavaObjectTy, kJavaObjectTy, kInt32Ty)) 1084 1085 _EVAL_DEF_INTRINSICS_FUNC(HLIPutBoolean, 1086 art_portable_hl_iput_boolean, 1087 kAttrNoThrow, 1088 kVoidTy, 1089 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) 1090 1091 _EVAL_DEF_INTRINSICS_FUNC(HLIPutByte, 1092 art_portable_hl_iput_byte, 1093 kAttrNoThrow, 1094 kVoidTy, 1095 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) 1096 1097 _EVAL_DEF_INTRINSICS_FUNC(HLIPutChar, 1098 art_portable_hl_iput_char, 1099 kAttrNoThrow, 1100 kVoidTy, 1101 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) 1102 1103 _EVAL_DEF_INTRINSICS_FUNC(HLIPutShort, 1104 art_portable_hl_iput_short, 1105 kAttrNoThrow, 1106 kVoidTy, 1107 _EXPAND_ARG4(kInt32Ty, kInt32Ty, kJavaObjectTy, kInt32Ty)) 1108 1109 //---------------------------------------------------------------------------- 1110 // 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 // 1117 // arg0: InvokeType [ignored if FilledNewArray] 1118 // arg1: method_idx [ignored if FilledNewArray] 1119 // 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, 1124 art_portable_hl_invoke.void, 1125 kAttrNone, 1126 kVoidTy, 1127 _EXPAND_ARG1(kVarArgTy)) 1128 1129 // INVOKE method returns object 1130 _EVAL_DEF_INTRINSICS_FUNC(HLInvokeObj, 1131 art_portable_hl_invoke.obj, 1132 kAttrNone, 1133 kJavaObjectTy, 1134 _EXPAND_ARG1(kVarArgTy)) 1135 1136 // INVOKE method returns int 1137 _EVAL_DEF_INTRINSICS_FUNC(HLInvokeInt, 1138 art_portable_hl_invoke.i32, 1139 kAttrNone, 1140 kInt32Ty, 1141 _EXPAND_ARG1(kVarArgTy)) 1142 1143 // INVOKE method returns float 1144 _EVAL_DEF_INTRINSICS_FUNC(HLInvokeFloat, 1145 art_portable_hl_invoke.f32, 1146 kAttrNone, 1147 kFloatTy, 1148 _EXPAND_ARG1(kVarArgTy)) 1149 1150 // INVOKE method returns long 1151 _EVAL_DEF_INTRINSICS_FUNC(HLInvokeLong, 1152 art_portable_hl_invoke.i64, 1153 kAttrNone, 1154 kInt64Ty, 1155 _EXPAND_ARG1(kVarArgTy)) 1156 1157 // INVOKE method returns double 1158 _EVAL_DEF_INTRINSICS_FUNC(HLInvokeDouble, 1159 art_portable_hl_invoke.f64, 1160 kAttrNone, 1161 kDoubleTy, 1162 _EXPAND_ARG1(kVarArgTy)) 1163 1164 // FILLED_NEW_ARRAY returns object 1165 _EVAL_DEF_INTRINSICS_FUNC(HLFilledNewArray, 1166 art_portable_hl_filled_new_array, 1167 kAttrNone, 1168 kJavaObjectTy, 1169 _EXPAND_ARG1(kVarArgTy)) 1170 1171 //---------------------------------------------------------------------------- 1172 // Invoke 1173 //---------------------------------------------------------------------------- 1174 1175 // Method* art_portable_find_static_method_with_access_check(uint32_t method_idx, 1176 // JavaObject* this, 1177 // Method* referrer, 1178 // Thread* thread) 1179 _EVAL_DEF_INTRINSICS_FUNC(FindStaticMethodWithAccessCheck, 1180 art_portable_find_static_method_with_access_check, 1181 kAttrNone, 1182 kJavaMethodTy, 1183 _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy)) 1184 1185 // Method* art_portable_find_direct_method_with_access_check(uint32_t method_idx, 1186 // JavaObject* this, 1187 // Method* referrer, 1188 // Thread* thread) 1189 _EVAL_DEF_INTRINSICS_FUNC(FindDirectMethodWithAccessCheck, 1190 art_portable_find_direct_method_with_access_check, 1191 kAttrNone, 1192 kJavaMethodTy, 1193 _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy)) 1194 1195 // Method* art_portable_find_virtual_method_with_access_check(uint32_t method_idx, 1196 // JavaObject* this, 1197 // Method* referrer, 1198 // Thread* thread) 1199 _EVAL_DEF_INTRINSICS_FUNC(FindVirtualMethodWithAccessCheck, 1200 art_portable_find_virtual_method_with_access_check, 1201 kAttrNone, 1202 kJavaMethodTy, 1203 _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy)) 1204 1205 // Method* art_portable_find_super_method_with_access_check(uint32_t method_idx, 1206 // JavaObject* this, 1207 // Method* referrer, 1208 // Thread* thread) 1209 _EVAL_DEF_INTRINSICS_FUNC(FindSuperMethodWithAccessCheck, 1210 art_portable_find_super_method_with_access_check, 1211 kAttrNone, 1212 kJavaMethodTy, 1213 _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy)) 1214 1215 // Method* art_portable_find_interface_method_with_access_check(uint32_t method_idx, 1216 // JavaObject* this, 1217 // Method* referrer, 1218 // Thread* thread) 1219 _EVAL_DEF_INTRINSICS_FUNC(FindInterfaceMethodWithAccessCheck, 1220 art_portable_find_interface_method_with_access_check, 1221 kAttrNone, 1222 kJavaMethodTy, 1223 _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy)) 1224 1225 // Method* art_portable_get_sd_callee_method_obj_addr(uint32_t method_idx) 1226 _EVAL_DEF_INTRINSICS_FUNC(GetSDCalleeMethodObjAddrFast, 1227 art_portable_get_sd_callee_method_obj_addr_fast, 1228 kAttrReadOnly | kAttrNoThrow, 1229 kJavaMethodTy, 1230 _EXPAND_ARG1(kInt32ConstantTy)) 1231 1232 // Method* art_portable_get_virtual_callee_method_obj_addr(uint32_t vtable_idx, 1233 // JavaObject* this) 1234 _EVAL_DEF_INTRINSICS_FUNC(GetVirtualCalleeMethodObjAddrFast, 1235 art_portable_get_virtual_callee_method_obj_addr_fast, 1236 kAttrReadOnly | kAttrNoThrow, 1237 kJavaMethodTy, 1238 _EXPAND_ARG2(kInt32ConstantTy, kJavaObjectTy)) 1239 1240 // Method* art_portable_get_interface_callee_method_obj_addr(uint32_t method_idx, 1241 // JavaObject* this, 1242 // Method* referrer, 1243 // Thread* thread) 1244 _EVAL_DEF_INTRINSICS_FUNC(GetInterfaceCalleeMethodObjAddrFast, 1245 art_portable_get_interface_callee_method_obj_addr_fast, 1246 kAttrNone, 1247 kJavaMethodTy, 1248 _EXPAND_ARG4(kInt32ConstantTy, kJavaObjectTy, kJavaMethodTy, kJavaThreadTy)) 1249 1250 // [type] art_portable_invoke.[type](Method* callee, ...) 1251 // INVOKE method returns void 1252 _EVAL_DEF_INTRINSICS_FUNC(InvokeRetVoid, 1253 art_portable_invoke.void, 1254 kAttrNone, 1255 kVoidTy, 1256 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) 1257 1258 // INVOKE method returns the value of type boolean 1259 _EVAL_DEF_INTRINSICS_FUNC(InvokeRetBoolean, 1260 art_portable_invoke.bool, 1261 kAttrNone, 1262 kInt1Ty, 1263 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) 1264 1265 // INVOKE method returns the value of type byte 1266 _EVAL_DEF_INTRINSICS_FUNC(InvokeRetByte, 1267 art_portable_invoke.byte, 1268 kAttrNone, 1269 kInt8Ty, 1270 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) 1271 1272 // INVOKE method returns the value of type char 1273 _EVAL_DEF_INTRINSICS_FUNC(InvokeRetChar, 1274 art_portable_invoke.char, 1275 kAttrNone, 1276 kInt16Ty, 1277 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) 1278 1279 // INVOKE method returns the value of type short 1280 _EVAL_DEF_INTRINSICS_FUNC(InvokeRetShort, 1281 art_portable_invoke.short, 1282 kAttrNone, 1283 kInt16Ty, 1284 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) 1285 1286 // INVOKE method returns the value of type int 1287 _EVAL_DEF_INTRINSICS_FUNC(InvokeRetInt, 1288 art_portable_invoke.int, 1289 kAttrNone, 1290 kInt32Ty, 1291 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) 1292 1293 // INVOKE method returns the value of type long 1294 _EVAL_DEF_INTRINSICS_FUNC(InvokeRetLong, 1295 art_portable_invoke.long, 1296 kAttrNone, 1297 kInt64Ty, 1298 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) 1299 1300 // INVOKE method returns the value of type float 1301 _EVAL_DEF_INTRINSICS_FUNC(InvokeRetFloat, 1302 art_portable_invoke.float, 1303 kAttrNone, 1304 kFloatTy, 1305 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) 1306 1307 // INVOKE method returns the value of type double 1308 _EVAL_DEF_INTRINSICS_FUNC(InvokeRetDouble, 1309 art_portable_invoke.double, 1310 kAttrNone, 1311 kDoubleTy, 1312 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) 1313 1314 // INVOKE method returns the value of type "object" 1315 _EVAL_DEF_INTRINSICS_FUNC(InvokeRetObject, 1316 art_portable_invoke.object, 1317 kAttrNone, 1318 kJavaObjectTy, 1319 _EXPAND_ARG2(kJavaMethodTy, kVarArgTy)) 1320 1321 //---------------------------------------------------------------------------- 1322 // Math 1323 //---------------------------------------------------------------------------- 1324 1325 // int art_portable_{div,rem}_int(int a, int b) 1326 _EVAL_DEF_INTRINSICS_FUNC(DivInt, 1327 art_portable_div_int, 1328 kAttrReadNone | kAttrNoThrow, 1329 kInt32Ty, 1330 _EXPAND_ARG2(kInt32Ty, kInt32Ty)) 1331 1332 _EVAL_DEF_INTRINSICS_FUNC(RemInt, 1333 art_portable_rem_int, 1334 kAttrReadNone | kAttrNoThrow, 1335 kInt32Ty, 1336 _EXPAND_ARG2(kInt32Ty, kInt32Ty)) 1337 1338 // long art_portable_{div,rem}_long(long a, long b) 1339 _EVAL_DEF_INTRINSICS_FUNC(DivLong, 1340 art_portable_div_long, 1341 kAttrReadNone | kAttrNoThrow, 1342 kInt64Ty, 1343 _EXPAND_ARG2(kInt64Ty, kInt64Ty)) 1344 1345 _EVAL_DEF_INTRINSICS_FUNC(RemLong, 1346 art_portable_rem_long, 1347 kAttrReadNone | kAttrNoThrow, 1348 kInt64Ty, 1349 _EXPAND_ARG2(kInt64Ty, kInt64Ty)) 1350 1351 // int64_t art_portable_d2l(double f) 1352 _EVAL_DEF_INTRINSICS_FUNC(D2L, 1353 art_portable_d2l, 1354 kAttrReadNone | kAttrNoThrow, 1355 kInt64Ty, 1356 _EXPAND_ARG1(kDoubleTy)) 1357 1358 // int32_t art_portable_d2l(double f) 1359 _EVAL_DEF_INTRINSICS_FUNC(D2I, 1360 art_portable_d2i, 1361 kAttrReadNone | kAttrNoThrow, 1362 kInt32Ty, 1363 _EXPAND_ARG1(kDoubleTy)) 1364 1365 // int64_t art_portable_f2l(float f) 1366 _EVAL_DEF_INTRINSICS_FUNC(F2L, 1367 art_portable_f2l, 1368 kAttrReadNone | kAttrNoThrow, 1369 kInt64Ty, 1370 _EXPAND_ARG1(kFloatTy)) 1371 1372 // int32_t art_portable_f2i(float f) 1373 _EVAL_DEF_INTRINSICS_FUNC(F2I, 1374 art_portable_f2i, 1375 kAttrReadNone | kAttrNoThrow, 1376 kInt32Ty, 1377 _EXPAND_ARG1(kFloatTy)) 1378 1379 //---------------------------------------------------------------------------- 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, 1387 art_portable_hl_sput, 1388 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, 1394 art_portable_hl_sput_object, 1395 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, 1401 art_portable_hl_sput_boolean, 1402 kAttrReadOnly | kAttrNoThrow, 1403 kVoidTy, 1404 _EXPAND_ARG2(kInt32Ty, kInt32Ty)) 1405 1406 // void sput_hl_byte(int field_idx, int val) 1407 _EVAL_DEF_INTRINSICS_FUNC(HLSputByte, 1408 art_portable_hl_sput_byte, 1409 kAttrReadOnly | kAttrNoThrow, 1410 kVoidTy, 1411 _EXPAND_ARG2(kInt32Ty, kInt32Ty)) 1412 1413 // void sput_hl_char(int field_idx, kInt16Ty val) 1414 _EVAL_DEF_INTRINSICS_FUNC(HLSputChar, 1415 art_portable_hl_sput_char, 1416 kAttrReadOnly | kAttrNoThrow, 1417 kVoidTy, 1418 _EXPAND_ARG2(kInt32Ty, kInt32Ty)) 1419 1420 // void sput_hl_short(int field_idx, int val) 1421 _EVAL_DEF_INTRINSICS_FUNC(HLSputShort, 1422 art_portable_hl_sput_short, 1423 kAttrReadOnly | kAttrNoThrow, 1424 kVoidTy, 1425 _EXPAND_ARG2(kInt32Ty, kInt32Ty)) 1426 1427 // void sput_hl_wide(int field_idx, long val) 1428 _EVAL_DEF_INTRINSICS_FUNC(HLSputWide, 1429 art_portable_hl_sput_wide, 1430 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, 1436 art_portable_hl_sput_double, 1437 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, 1443 art_portable_hl_sput_float, 1444 kAttrReadOnly | kAttrNoThrow, 1445 kVoidTy, 1446 _EXPAND_ARG2(kInt32Ty, kFloatTy)) 1447 1448 //---------------------------------------------------------------------------- 1449 // sget intrinsics to assist MIR to Greenland_ir conversion. 1450 // "HL" versions - will be deprecated when fast/slow path handling done 1451 // in the common frontend. 1452 //---------------------------------------------------------------------------- 1453 1454 // int sget_hl(int field_idx) 1455 _EVAL_DEF_INTRINSICS_FUNC(HLSget, 1456 art_portable_hl_sget, 1457 kAttrReadOnly | kAttrNoThrow, 1458 kInt32Ty, 1459 _EXPAND_ARG1(kInt32Ty)) 1460 1461 // object* sget_hl_object(int field_idx) 1462 _EVAL_DEF_INTRINSICS_FUNC(HLSgetObject, 1463 art_portable_hl_sget_object, 1464 kAttrReadOnly | kAttrNoThrow, 1465 kJavaObjectTy, 1466 _EXPAND_ARG1(kInt32Ty)) 1467 1468 // boolean sget_hl_boolean(int field_idx) 1469 _EVAL_DEF_INTRINSICS_FUNC(HLSgetBoolean, 1470 art_portable_hl_sget_boolean, 1471 kAttrReadOnly | kAttrNoThrow, 1472 kInt32Ty, 1473 _EXPAND_ARG1(kInt32Ty)) 1474 1475 // byte sget_hl_byte(int field_idx) 1476 _EVAL_DEF_INTRINSICS_FUNC(HLSgetByte, 1477 art_portable_hl_sget_byte, 1478 kAttrReadOnly | kAttrNoThrow, 1479 kInt32Ty, 1480 _EXPAND_ARG1(kInt32Ty)) 1481 1482 // char sget_hl_char(int field_idx) 1483 _EVAL_DEF_INTRINSICS_FUNC(HLSgetChar, 1484 art_portable_hl_sget_char, 1485 kAttrReadOnly | kAttrNoThrow, 1486 kInt32Ty, 1487 _EXPAND_ARG1(kInt32Ty)) 1488 1489 // char sget_hl_short(int field_idx) 1490 _EVAL_DEF_INTRINSICS_FUNC(HLSgetShort, 1491 art_portable_hl_sget_short, 1492 kAttrReadOnly | kAttrNoThrow, 1493 kInt32Ty, 1494 _EXPAND_ARG1(kInt32Ty)) 1495 1496 // char sget_hl_wide(int field_idx) 1497 _EVAL_DEF_INTRINSICS_FUNC(HLSgetWide, 1498 art_portable_hl_sget_wide, 1499 kAttrReadOnly | kAttrNoThrow, 1500 kInt64Ty, 1501 _EXPAND_ARG1(kInt32Ty)) 1502 1503 // char sget_hl_double(int field_idx) 1504 _EVAL_DEF_INTRINSICS_FUNC(HLSgetDouble, 1505 art_portable_hl_sget_double, 1506 kAttrReadOnly | kAttrNoThrow, 1507 kDoubleTy, 1508 _EXPAND_ARG1(kInt32Ty)) 1509 1510 // char sget_hl_float(int field_idx) 1511 _EVAL_DEF_INTRINSICS_FUNC(HLSgetFloat, 1512 art_portable_hl_sget_float, 1513 kAttrReadOnly | kAttrNoThrow, 1514 kFloatTy, 1515 _EXPAND_ARG1(kInt32Ty)) 1516 //---------------------------------------------------------------------------- 1517 // Monitor enter/exit 1518 //---------------------------------------------------------------------------- 1519 // uint32_t art_portable_monitor_enter(int optFlags, JavaObject* obj) 1520 _EVAL_DEF_INTRINSICS_FUNC(MonitorEnter, 1521 art_portable_monitor_enter, 1522 kAttrReadOnly | kAttrNoThrow, 1523 kVoidTy, 1524 _EXPAND_ARG2(kInt32Ty, kJavaObjectTy)) 1525 1526 // uint32_t art_portable_monitor_exit(int optFlags, JavaObject* obj) 1527 _EVAL_DEF_INTRINSICS_FUNC(MonitorExit, 1528 art_portable_monitor_exit, 1529 kAttrReadOnly | kAttrNoThrow, 1530 kVoidTy, 1531 _EXPAND_ARG2(kInt32Ty, kJavaObjectTy)) 1532 1533 //---------------------------------------------------------------------------- 1534 // Shadow Frame 1535 //---------------------------------------------------------------------------- 1536 1537 // void art_portable_alloca_shadow_frame(int num_entry) 1538 _EVAL_DEF_INTRINSICS_FUNC(AllocaShadowFrame, 1539 art_portable_alloca_shadow_frame, 1540 kAttrNoThrow, 1541 kVoidTy, 1542 _EXPAND_ARG1(kInt32ConstantTy)) 1543 1544 // void art_portable_set_vreg(int entry_idx, ...) 1545 _EVAL_DEF_INTRINSICS_FUNC(SetVReg, 1546 art_portable_set_vreg, 1547 kAttrNoThrow, 1548 kVoidTy, 1549 _EXPAND_ARG2(kInt32ConstantTy, kVarArgTy)) 1550 1551 // void art_portable_pop_shadow_frame() 1552 _EVAL_DEF_INTRINSICS_FUNC(PopShadowFrame, 1553 art_portable_pop_shadow_frame, 1554 kAttrNoThrow, 1555 kVoidTy, 1556 _EXPAND_ARG0()) 1557 1558 // void art_portable_update_dex_pc(uint32_t dex_pc) 1559 _EVAL_DEF_INTRINSICS_FUNC(UpdateDexPC, 1560 art_portable_update_dex_pc, 1561 kAttrNoThrow, 1562 kVoidTy, 1563 _EXPAND_ARG1(kInt32ConstantTy)) 1564 1565 //---------------------------------------------------------------------------- 1566 // FP Comparison 1567 //---------------------------------------------------------------------------- 1568 // int cmpl_float(float, float) 1569 _EVAL_DEF_INTRINSICS_FUNC(CmplFloat, 1570 art_portable_cmpl_float, 1571 kAttrReadOnly | kAttrNoThrow, 1572 kInt32Ty, 1573 _EXPAND_ARG2(kFloatTy, kFloatTy)) 1574 1575 // int cmpg_float(float, float) 1576 _EVAL_DEF_INTRINSICS_FUNC(CmpgFloat, 1577 art_portable_cmpg_float, 1578 kAttrReadOnly | kAttrNoThrow, 1579 kInt32Ty, 1580 _EXPAND_ARG2(kFloatTy, kFloatTy)) 1581 1582 // int cmpl_double(double, double) 1583 _EVAL_DEF_INTRINSICS_FUNC(CmplDouble, 1584 art_portable_cmpl_double, 1585 kAttrReadOnly | kAttrNoThrow, 1586 kInt32Ty, 1587 _EXPAND_ARG2(kDoubleTy, kDoubleTy)) 1588 1589 // int cmpg_double(double, double) 1590 _EVAL_DEF_INTRINSICS_FUNC(CmpgDouble, 1591 art_portable_cmpg_double, 1592 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, 1601 art_portable_cmp_long, 1602 kAttrReadOnly | kAttrNoThrow, 1603 kInt32Ty, 1604 _EXPAND_ARG2(kInt64Ty, kInt64Ty)) 1605 1606 //---------------------------------------------------------------------------- 1607 // 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, 1612 art_portable_const_int, 1613 kAttrReadOnly | kAttrNoThrow, 1614 kInt32Ty, 1615 _EXPAND_ARG1(kInt32Ty)) 1616 1617 // JavaObject* const_obj(int) 1618 _EVAL_DEF_INTRINSICS_FUNC(ConstObj, 1619 art_portable_const_obj, 1620 kAttrReadOnly | kAttrNoThrow, 1621 kJavaObjectTy, 1622 _EXPAND_ARG1(kInt32Ty)) 1623 1624 // long const_long(long) 1625 _EVAL_DEF_INTRINSICS_FUNC(ConstLong, 1626 art_portable_const_long, 1627 kAttrReadOnly | kAttrNoThrow, 1628 kInt64Ty, 1629 _EXPAND_ARG1(kInt64Ty)) 1630 1631 // float const_float(int) 1632 _EVAL_DEF_INTRINSICS_FUNC(ConstFloat, 1633 art_portable_const_Float, 1634 kAttrReadOnly | kAttrNoThrow, 1635 kFloatTy, 1636 _EXPAND_ARG1(kInt32Ty)) 1637 1638 // double const_double(long) 1639 _EVAL_DEF_INTRINSICS_FUNC(ConstDouble, 1640 art_portable_const_Double, 1641 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, 1652 art_portable_method_info, 1653 kAttrReadOnly | kAttrNoThrow, 1654 kVoidTy, 1655 _EXPAND_ARG0()) 1656 1657 // int copy_int(int) 1658 _EVAL_DEF_INTRINSICS_FUNC(CopyInt, 1659 art_portable_copy_int, 1660 kAttrReadOnly | kAttrNoThrow, 1661 kInt32Ty, 1662 _EXPAND_ARG1(kInt32Ty)) 1663 1664 // JavaObject* copy_obj(obj) 1665 _EVAL_DEF_INTRINSICS_FUNC(CopyObj, 1666 art_portable_copy_obj, 1667 kAttrReadOnly | kAttrNoThrow, 1668 kJavaObjectTy, 1669 _EXPAND_ARG1(kJavaObjectTy)) 1670 1671 // long copy_long(long) 1672 _EVAL_DEF_INTRINSICS_FUNC(CopyLong, 1673 art_portable_copy_long, 1674 kAttrReadOnly | kAttrNoThrow, 1675 kInt64Ty, 1676 _EXPAND_ARG1(kInt64Ty)) 1677 1678 // float copy_float(float) 1679 _EVAL_DEF_INTRINSICS_FUNC(CopyFloat, 1680 art_portable_copy_Float, 1681 kAttrReadOnly | kAttrNoThrow, 1682 kFloatTy, 1683 _EXPAND_ARG1(kFloatTy)) 1684 1685 // double copy_double(double) 1686 _EVAL_DEF_INTRINSICS_FUNC(CopyDouble, 1687 art_portable_copy_Double, 1688 kAttrReadOnly | kAttrNoThrow, 1689 kDoubleTy, 1690 _EXPAND_ARG1(kDoubleTy)) 1691 1692 //---------------------------------------------------------------------------- 1693 // 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, 1702 art_portable_shl_long, 1703 kAttrReadOnly | kAttrNoThrow, 1704 kInt64Ty, 1705 _EXPAND_ARG2(kInt64Ty,kInt32Ty)) 1706 // long shr_long(long,int) 1707 _EVAL_DEF_INTRINSICS_FUNC(SHRLong, 1708 art_portable_shr_long, 1709 kAttrReadOnly | kAttrNoThrow, 1710 kInt64Ty, 1711 _EXPAND_ARG2(kInt64Ty,kInt32Ty)) 1712 // long ushr_long(long,int) 1713 _EVAL_DEF_INTRINSICS_FUNC(USHRLong, 1714 art_portable_ushl_long, 1715 kAttrReadOnly | kAttrNoThrow, 1716 kInt64Ty, 1717 _EXPAND_ARG2(kInt64Ty,kInt32Ty)) 1718 // int shl_int(int,int) 1719 _EVAL_DEF_INTRINSICS_FUNC(SHLInt, 1720 art_portable_shl_int, 1721 kAttrReadOnly | kAttrNoThrow, 1722 kInt32Ty, 1723 _EXPAND_ARG2(kInt32Ty,kInt32Ty)) 1724 // long shr_int(int,int) 1725 _EVAL_DEF_INTRINSICS_FUNC(SHRInt, 1726 art_portable_shr_int, 1727 kAttrReadOnly | kAttrNoThrow, 1728 kInt32Ty, 1729 _EXPAND_ARG2(kInt32Ty,kInt32Ty)) 1730 // int ushr_long(int,int) 1731 _EVAL_DEF_INTRINSICS_FUNC(USHRInt, 1732 art_portable_ushl_int, 1733 kAttrReadOnly | kAttrNoThrow, 1734 kInt32Ty, 1735 _EXPAND_ARG2(kInt32Ty,kInt32Ty)) 1736 //---------------------------------------------------------------------------- 1737 // 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, 1745 art_portable_int_to_byte, 1746 kAttrReadOnly | kAttrNoThrow, 1747 kInt32Ty, 1748 _EXPAND_ARG1(kInt32Ty)) 1749 1750 // int int_to_char(int) 1751 _EVAL_DEF_INTRINSICS_FUNC(IntToChar, 1752 art_portable_int_to_char, 1753 kAttrReadOnly | kAttrNoThrow, 1754 kInt32Ty, 1755 _EXPAND_ARG1(kInt32Ty)) 1756 1757 // int int_to_short(int) 1758 _EVAL_DEF_INTRINSICS_FUNC(IntToShort, 1759 art_portable_int_to_short, 1760 kAttrReadOnly | kAttrNoThrow, 1761 kInt32Ty, 1762 _EXPAND_ARG1(kInt32Ty)) 1763 1764 //---------------------------------------------------------------------------- 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 1774 // 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 1797