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_PROF_COUNTER_INC,\ 26 "__mpl_prof_counter_inc", INTRNNOSIDEEFFECT | INTRNISSPECIAL, kArgTyVoid, kArgTyU32, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 27DEF_MIR_INTRINSIC(MPL_CLEAR_STACK,\ 28 "__mpl_clear_stack", kIntrnUndef, kArgTyVoid, kArgTyDynany, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 29DEF_MIR_INTRINSIC(MPL_GET_VTAB_FUNC,\ 30 "MCC_getFuncPtrFromVtab", kIntrnUndef, kArgTyA64, kArgTyDynany, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 31DEF_MIR_INTRINSIC(MPL_READ_OVTABLE_ENTRY,\ 32 "__mpl_const_offset", INTRNISPURE, kArgTyA32, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 33DEF_MIR_INTRINSIC(MPL_READ_OVTABLE_ENTRY2,\ 34 "__mpl_const_offset2", INTRNISPURE, kArgTyA32, kArgTyDynany, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 35DEF_MIR_INTRINSIC(MPL_READ_OVTABLE_ENTRY_LAZY,\ 36 "__mpl_const_offset_lazy", INTRNNOSIDEEFFECT, kArgTyA32, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 37DEF_MIR_INTRINSIC(MPL_READ_OVTABLE_ENTRY_VTAB_LAZY,\ 38 "__mpl_const_offset_vtab_lazy", INTRNISPURE, kArgTyDynany, kArgTyDynany, kArgTyDynany, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef) 39DEF_MIR_INTRINSIC(MPL_READ_OVTABLE_ENTRY_FIELD_LAZY,\ 40 "__mpl_const_offset_field_lazy", INTRNISPURE, kArgTyA32, kArgTyDynany, kArgTyDynany, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef) 41DEF_MIR_INTRINSIC(MPL_READ_ARRAYCLASS_CACHE_ENTRY,\ 42 "__mpl_const_arrayclass_cache", kIntrnUndef, kArgTyPtr, kArgTyU32, kArgTyDynany, kArgTyDynany, kArgTyUndef, kArgTyUndef, kArgTyUndef) 43 44// start of RC Intrinsics with one parameters 45DEF_MIR_INTRINSIC(MCCSetPermanent,\ 46 "MCC_SetObjectPermanent", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 47DEF_MIR_INTRINSIC(MCCIncRef,\ 48 "MCC_IncRef_NaiveRCFast", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 49DEF_MIR_INTRINSIC(MCCDecRef,\ 50 "MCC_DecRef_NaiveRCFast", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 51DEF_MIR_INTRINSIC(MCCDecRefReset,\ 52 "MCC_ClearLocalStackRef", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyPtr) 53DEF_MIR_INTRINSIC(MCCLoadRefSVol,\ 54 "MCC_LoadVolatileStaticField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 55DEF_MIR_INTRINSIC(MCCLoadRefS,\ 56 "MCC_LoadRefStatic", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 57DEF_MIR_INTRINSIC(MCCSetObjectPermanent,\ 58 "MCC_SetObjectPermanent", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 59 60// start of RC Intrinsics with two parameters 61DEF_MIR_INTRINSIC(MCCCheck,\ 62 "MCC_CheckRefCount", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyU32) 63DEF_MIR_INTRINSIC(MCCCheckArrayStore,\ 64 "MCC_Reflect_Check_Arraystore", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 65DEF_MIR_INTRINSIC(MCCIncDecRef,\ 66 "MCC_IncDecRef_NaiveRCFast", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 67DEF_MIR_INTRINSIC(MCCIncDecRefReset,\ 68 "MCC_IncDecRefReset", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyPtr) 69DEF_MIR_INTRINSIC(MCCDecRefResetPair,\ 70 "MCC_DecRefResetPair", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyPtr, kArgTyPtr) 71DEF_MIR_INTRINSIC(MCCLoadWeakVol,\ 72 "MCC_LoadVolatileWeakField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 73DEF_MIR_INTRINSIC(MCCLoadWeak,\ 74 "MCC_LoadWeakField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 75DEF_MIR_INTRINSIC(MCCLoadRef,\ 76 "MCC_LoadRefField_NaiveRCFast", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 77DEF_MIR_INTRINSIC(MCCLoadRefVol,\ 78 "MCC_LoadVolatileField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 79DEF_MIR_INTRINSIC(MCCWriteReferent,\ 80 "MCC_WriteReferent", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 81DEF_MIR_INTRINSIC(MCCWriteSVolNoInc,\ 82 "MCC_WriteVolatileStaticFieldNoInc", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 83DEF_MIR_INTRINSIC(MCCWriteSVolNoDec,\ 84 "MCC_WriteVolatileStaticFieldNoDec", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 85DEF_MIR_INTRINSIC(MCCWriteSVolNoRC,\ 86 "MCC_WriteVolatileStaticFieldNoRC", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 87DEF_MIR_INTRINSIC(MCCWriteSVol,\ 88 "MCC_WriteVolatileStaticField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 89DEF_MIR_INTRINSIC(MCCWriteSNoInc,\ 90 "MCC_WriteRefFieldStaticNoInc", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 91DEF_MIR_INTRINSIC(MCCWriteSNoDec,\ 92 "MCC_WriteRefFieldStaticNoDec", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 93DEF_MIR_INTRINSIC(MCCWriteSNoRC,\ 94 "MCC_WriteRefFieldStaticNoRC", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 95DEF_MIR_INTRINSIC(MCCWriteS,\ 96 "MCC_WriteRefFieldStatic", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef) 97 98// start of RC intrinsics with three parameters 99DEF_MIR_INTRINSIC(MCCWriteVolNoInc,\ 100 "MCC_WriteVolatileFieldNoInc", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 101DEF_MIR_INTRINSIC(MCCWriteVolNoDec,\ 102 "MCC_WriteVolatileFieldNoDec", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 103DEF_MIR_INTRINSIC(MCCWriteVolNoRC,\ 104 "MCC_WriteVolatileFieldNoRC", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 105DEF_MIR_INTRINSIC(MCCWriteVol,\ 106 "MCC_WriteVolatileField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 107DEF_MIR_INTRINSIC(MCCWriteNoInc,\ 108 "MCC_WriteRefFieldNoInc", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 109DEF_MIR_INTRINSIC(MCCWriteNoDec,\ 110 "MCC_WriteRefFieldNoDec", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 111DEF_MIR_INTRINSIC(MCCWriteNoRC,\ 112 "MCC_WriteRefFieldNoRC", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 113DEF_MIR_INTRINSIC(MCCWrite,\ 114 "MCC_WriteRefField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 115DEF_MIR_INTRINSIC(MCCWriteVolWeak,\ 116 "MCC_WriteVolatileWeakField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 117DEF_MIR_INTRINSIC(MCCWriteWeak,\ 118 "MCC_WriteWeakField", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef, kArgTyRef, kArgTyRef) 119 120DEF_MIR_INTRINSIC(MPL_MEMSET_LOCALVAR,\ 121 "", kIntrnUndef, kArgTyPtr, kArgTyU32, kArgTyU8, kArgTyU32, kArgTyUndef, kArgTyUndef, kArgTyUndef) 122DEF_MIR_INTRINSIC(MPL_SET_CLASS,\ 123 "", kIntrnUndef, kArgTyPtr, kArgTyPtr, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 124 125// start of GC Intrinsics 126DEF_MIR_INTRINSIC(MCCGCCheck,\ 127 "MCC_CheckObjAllocated", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 128 129// start of Profile Intrinsics 130DEF_MIR_INTRINSIC(MCCSaveProf,\ 131 "MCC_SaveProfile", INTRNISRC | INTRNNOSIDEEFFECT, kArgTyVoid, kArgTyRef) 132 133#include "intrinsic_c.def" 134#include "intrinsic_js.def" 135#include "intrinsic_js_eng.def" 136#include "intrinsic_vector.def" 137DEF_MIR_INTRINSIC(LAST,\ 138 nullptr, kIntrnUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef, kArgTyUndef) 139