• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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