1/* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16// DEF_MIR_INTRINSIC(STR, NAME, INTRN_CLASS, RETURN_TYPE, ARG0, ARG1, ARG2, ARG3, ARG4, ARG5) 17DEF_MIR_INTRINSIC(UNDEFINED,\ 18 nullptr, kIntrnUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 19DEF_MIR_INTRINSIC(DEX_ATOMIC_INC,\ 20 "__dex_ainc", kIntrnIsAtomic, kArgTyI32, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 21DEF_MIR_INTRINSIC(DEX_ATOMIC_DEC,\ 22 "__dex_adec", kIntrnIsAtomic, kArgTyI32, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 23DEF_MIR_INTRINSIC(MPL_ATOMIC_EXCHANGE_PTR,\ 24 "__mpl_atomic_exchange_ptr", kIntrnIsAtomic, kArgTyPtr, kArgTyPtr, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 25DEF_MIR_INTRINSIC(MPL_CLINIT_CHECK,\ 26 "__mpl_clinit_check", INTRNISJAVA | INTRNNOSIDEEFFECT | INTRNISSPECIAL, kArgTyVoid, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 27DEF_MIR_INTRINSIC(MPL_PROF_COUNTER_INC,\ 28 "__mpl_prof_counter_inc", INTRNNOSIDEEFFECT | INTRNISSPECIAL, kArgTyVoid, kArgTyU32, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 29DEF_MIR_INTRINSIC(MPL_CLEAR_STACK,\ 30 "__mpl_clear_stack", kIntrnUndef, kArgTyVoid, kArgTyDynany, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 31DEF_MIR_INTRINSIC(MPL_GET_VTAB_FUNC,\ 32 "MCC_getFuncPtrFromVtab", kIntrnUndef, kArgTyA64, kArgTyDynany, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 33DEF_MIR_INTRINSIC(MPL_READ_STATIC_OFFSET_TAB,\ 34 "__mpl_read_static_offset", INTRNISJAVA | INTRNNOSIDEEFFECT, kArgTyDynany, kArgTyDynany, kArgTyU32, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 35DEF_MIR_INTRINSIC(MPL_READ_OVTABLE_ENTRY,\ 36 "__mpl_const_offset", INTRNISPURE, kArgTyA32, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 37DEF_MIR_INTRINSIC(MPL_READ_OVTABLE_ENTRY2,\ 38 "__mpl_const_offset2", INTRNISPURE, kArgTyA32, kArgTyDynany, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 39DEF_MIR_INTRINSIC(MPL_READ_OVTABLE_ENTRY_LAZY,\ 40 "__mpl_const_offset_lazy", INTRNNOSIDEEFFECT, kArgTyA32, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 41DEF_MIR_INTRINSIC(MPL_READ_OVTABLE_ENTRY_VTAB_LAZY,\ 42 "__mpl_const_offset_vtab_lazy", INTRNISPURE, kArgTyDynany, kArgTyDynany, kArgTyDynany, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef) 43DEF_MIR_INTRINSIC(MPL_READ_OVTABLE_ENTRY_FIELD_LAZY,\ 44 "__mpl_const_offset_field_lazy", INTRNISPURE, kArgTyA32, kArgTyDynany, kArgTyDynany, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef) 45DEF_MIR_INTRINSIC(MPL_BOUNDARY_CHECK,\ 46 "", INTRNISJAVA | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyU1, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 47DEF_MIR_INTRINSIC(MPL_READ_ARRAYCLASS_CACHE_ENTRY,\ 48 "__mpl_const_arrayclass_cache", kIntrnUndef, kArgTyPtr, kArgTyU32, kArgTyDynany, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef) 49 50// start of RC Intrinsics with one parameters 51DEF_MIR_INTRINSIC(MCCSetPermanent,\ 52 "MCC_SetObjectPermanent", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 53DEF_MIR_INTRINSIC(MCCIncRef,\ 54 "MCC_IncRef_NaiveRCFast", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 55DEF_MIR_INTRINSIC(MCCDecRef,\ 56 "MCC_DecRef_NaiveRCFast", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 57DEF_MIR_INTRINSIC(MCCDecRefReset,\ 58 "MCC_ClearLocalStackRef", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyPtr) 59DEF_MIR_INTRINSIC(MCCLoadRefSVol,\ 60 "MCC_LoadVolatileStaticField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 61DEF_MIR_INTRINSIC(MCCLoadRefS,\ 62 "MCC_LoadRefStatic", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 63DEF_MIR_INTRINSIC(MCCSetObjectPermanent,\ 64 "MCC_SetObjectPermanent", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 65 66// start of RC Intrinsics with two parameters 67DEF_MIR_INTRINSIC(MCCCheck,\ 68 "MCC_CheckRefCount", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyU32) 69DEF_MIR_INTRINSIC(MCCCheckArrayStore,\ 70 "MCC_Reflect_Check_Arraystore", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 71DEF_MIR_INTRINSIC(MCCIncDecRef,\ 72 "MCC_IncDecRef_NaiveRCFast", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 73DEF_MIR_INTRINSIC(MCCIncDecRefReset,\ 74 "MCC_IncDecRefReset", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyPtr) 75DEF_MIR_INTRINSIC(MCCDecRefResetPair,\ 76 "MCC_DecRefResetPair", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyPtr, kArgTyPtr) 77DEF_MIR_INTRINSIC(MCCLoadWeakVol,\ 78 "MCC_LoadVolatileWeakField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 79DEF_MIR_INTRINSIC(MCCLoadWeak,\ 80 "MCC_LoadWeakField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 81DEF_MIR_INTRINSIC(MCCLoadRef,\ 82 "MCC_LoadRefField_NaiveRCFast", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 83DEF_MIR_INTRINSIC(MCCLoadRefVol,\ 84 "MCC_LoadVolatileField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 85DEF_MIR_INTRINSIC(MCCWriteReferent,\ 86 "MCC_WriteReferent", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 87DEF_MIR_INTRINSIC(MCCWriteSVolNoInc,\ 88 "MCC_WriteVolatileStaticFieldNoInc", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 89DEF_MIR_INTRINSIC(MCCWriteSVolNoDec,\ 90 "MCC_WriteVolatileStaticFieldNoDec", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 91DEF_MIR_INTRINSIC(MCCWriteSVolNoRC,\ 92 "MCC_WriteVolatileStaticFieldNoRC", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 93DEF_MIR_INTRINSIC(MCCWriteSVol,\ 94 "MCC_WriteVolatileStaticField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 95DEF_MIR_INTRINSIC(MCCWriteSNoInc,\ 96 "MCC_WriteRefFieldStaticNoInc", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 97DEF_MIR_INTRINSIC(MCCWriteSNoDec,\ 98 "MCC_WriteRefFieldStaticNoDec", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 99DEF_MIR_INTRINSIC(MCCWriteSNoRC,\ 100 "MCC_WriteRefFieldStaticNoRC", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 101DEF_MIR_INTRINSIC(MCCWriteS,\ 102 "MCC_WriteRefFieldStatic", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 103 104// start of RC intrinsics with three parameters 105DEF_MIR_INTRINSIC(MCCWriteVolNoInc,\ 106 "MCC_WriteVolatileFieldNoInc", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 107DEF_MIR_INTRINSIC(MCCWriteVolNoDec,\ 108 "MCC_WriteVolatileFieldNoDec", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 109DEF_MIR_INTRINSIC(MCCWriteVolNoRC,\ 110 "MCC_WriteVolatileFieldNoRC", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 111DEF_MIR_INTRINSIC(MCCWriteVol,\ 112 "MCC_WriteVolatileField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 113DEF_MIR_INTRINSIC(MCCWriteNoInc,\ 114 "MCC_WriteRefFieldNoInc", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 115DEF_MIR_INTRINSIC(MCCWriteNoDec,\ 116 "MCC_WriteRefFieldNoDec", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 117DEF_MIR_INTRINSIC(MCCWriteNoRC,\ 118 "MCC_WriteRefFieldNoRC", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 119DEF_MIR_INTRINSIC(MCCWrite,\ 120 "MCC_WriteRefField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 121DEF_MIR_INTRINSIC(MCCWriteVolWeak,\ 122 "MCC_WriteVolatileWeakField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 123DEF_MIR_INTRINSIC(MCCWriteWeak,\ 124 "MCC_WriteWeakField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 125 126DEF_MIR_INTRINSIC(MPL_CLEANUP_LOCALREFVARS,\ 127 "__mpl_cleanup_localrefvars", INTRNISJAVA | INTRNNOSIDEEFFECT | INTRNISSPECIAL, kArgTyUndef, kArgTyRef, kArgTyRef, kArgTyRef, kArgTyRef, kArgTyRef, kArgTyRef) 128DEF_MIR_INTRINSIC(MPL_CLEANUP_LOCALREFVARS_SKIP,\ 129 "__mpl_cleanup_localrefvars_skip", INTRNISJAVA | INTRNNOSIDEEFFECT | INTRNISSPECIAL, kArgTyUndef, kArgTyRef, kArgTyRef, kArgTyRef, kArgTyRef, kArgTyRef, kArgTyRef) 130DEF_MIR_INTRINSIC(MPL_MEMSET_LOCALVAR,\ 131 "", kIntrnUndef, kArgTyPtr, kArgTyU32, kArgTyU8, kArgTyU32, kArgTyUndef, kArgTyUndef, kArgTyUndef) 132DEF_MIR_INTRINSIC(MPL_SET_CLASS,\ 133 "", kIntrnUndef, kArgTyPtr, kArgTyPtr, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 134DEF_MIR_INTRINSIC(MPL_CLEANUP_NORETESCOBJS,\ 135 "__mpl_cleanup_noretescobjs", INTRNISJAVA | INTRNNOSIDEEFFECT | INTRNISSPECIAL, kArgTyUndef, kArgTyRef, kArgTyRef,\ 136 kArgTyRef, kArgTyRef, kArgTyRef, kArgTyRef) 137 138// start of GC Intrinsics 139DEF_MIR_INTRINSIC(MCCGCCheck,\ 140 "MCC_CheckObjAllocated", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 141 142// start of Profile Intrinsics 143DEF_MIR_INTRINSIC(MCCSaveProf,\ 144 "MCC_SaveProfile", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 145 146#include "intrinsic_java.def" 147#include "simplifyintrinsics.def" 148#include "intrinsic_c.def" 149#include "intrinsic_js.def" 150#include "intrinsic_js_eng.def" 151#include "dex2mpl/dexintrinsic.def" 152#include "intrinsic_dai.def" 153#include "intrinsic_vector.def" 154DEF_MIR_INTRINSIC(LAST,\ 155 nullptr, kIntrnUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 156