3 * Copyright 2003 Ximian, Inc
4 * Copyright 2003-2011 Novell Inc
5 * Copyright 2011 Xamarin Inc
6 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
8 MINI_OP(OP_LOAD
, "load", NONE
, NONE
, NONE
)
9 MINI_OP(OP_LDADDR
, "ldaddr", IREG
, NONE
, NONE
)
10 MINI_OP(OP_STORE
, "store", NONE
, NONE
, NONE
)
11 MINI_OP(OP_NOP
, "nop", NONE
, NONE
, NONE
)
12 MINI_OP(OP_HARD_NOP
, "hard_nop", NONE
, NONE
, NONE
)
13 MINI_OP(OP_RELAXED_NOP
, "relaxed_nop", NONE
, NONE
, NONE
)
14 MINI_OP(OP_PHI
, "phi", IREG
, NONE
, NONE
)
15 MINI_OP(OP_FPHI
, "fphi", FREG
, NONE
, NONE
)
16 MINI_OP(OP_VPHI
, "vphi", VREG
, NONE
, NONE
)
17 MINI_OP(OP_COMPARE
, "compare", NONE
, IREG
, IREG
)
18 MINI_OP(OP_COMPARE_IMM
, "compare_imm", NONE
, IREG
, NONE
)
19 MINI_OP(OP_FCOMPARE
, "fcompare", NONE
, FREG
, FREG
)
20 MINI_OP(OP_RCOMPARE
, "rcompare", NONE
, FREG
, FREG
)
21 MINI_OP(OP_LCOMPARE
, "lcompare", NONE
, LREG
, LREG
)
22 MINI_OP(OP_ICOMPARE
, "icompare", NONE
, IREG
, IREG
)
23 MINI_OP(OP_ICOMPARE_IMM
, "icompare_imm", NONE
, IREG
, NONE
)
24 MINI_OP(OP_LCOMPARE_IMM
, "lcompare_imm", NONE
, LREG
, NONE
)
25 MINI_OP(OP_LOCAL
, "local", NONE
, NONE
, NONE
)
26 MINI_OP(OP_ARG
, "arg", NONE
, NONE
, NONE
)
27 /* inst_imm contains the local index */
28 MINI_OP(OP_GSHAREDVT_LOCAL
, "gsharedvt_local", NONE
, NONE
, NONE
)
29 MINI_OP(OP_GSHAREDVT_ARG_REGOFFSET
, "gsharedvt_arg_regoffset", NONE
, NONE
, NONE
)
31 * Represents passing a valuetype argument which has not been decomposed yet.
32 * inst_p0 points to the call.
34 MINI_OP(OP_OUTARG_VT
, "outarg_vt", NONE
, VREG
, NONE
)
35 MINI_OP(OP_OUTARG_VTRETADDR
, "outarg_vtretaddr", IREG
, NONE
, NONE
)
36 MINI_OP(OP_SETRET
, "setret", NONE
, IREG
, NONE
)
37 MINI_OP(OP_SETFRET
, "setfret", FREG
, FREG
, NONE
)
38 MINI_OP(OP_SETLRET
, "setlret", NONE
, IREG
, IREG
)
39 MINI_OP(OP_LOCALLOC
, "localloc", IREG
, IREG
, NONE
)
40 MINI_OP(OP_LOCALLOC_IMM
, "localloc_imm", IREG
, NONE
, NONE
)
41 MINI_OP(OP_CHECK_THIS
, "check_this", NONE
, IREG
, NONE
)
42 MINI_OP(OP_SEQ_POINT
, "seq_point", NONE
, NONE
, NONE
)
43 MINI_OP(OP_IL_SEQ_POINT
, "il_seq_point", NONE
, NONE
, NONE
)
44 MINI_OP(OP_IMPLICIT_EXCEPTION
, "implicit_exception", NONE
, NONE
, NONE
)
45 MINI_OP(OP_BOX
, "box", IREG
, IREG
, NONE
)
46 /* A box of the int value in inst_c0 */
47 MINI_OP(OP_BOX_ICONST
, "box_iconst", IREG
, NONE
, NONE
)
48 /* Same as OP_MOVE, ins->dreg is an objref of type ins->klass */
49 MINI_OP(OP_TYPED_OBJREF
, "typed_objref", IREG
, IREG
, NONE
)
51 /* CALL opcodes need to stay together, see MONO_IS_CALL macro */
52 MINI_OP(OP_VOIDCALL
, "voidcall", NONE
, NONE
, NONE
)
53 MINI_OP(OP_VOIDCALL_REG
, "voidcall_reg", NONE
, IREG
, NONE
)
54 MINI_OP(OP_VOIDCALL_MEMBASE
, "voidcall_membase", NONE
, IREG
, NONE
)
55 MINI_OP(OP_CALL
, "call", IREG
, NONE
, NONE
)
56 MINI_OP(OP_CALL_REG
, "call_reg", IREG
, IREG
, NONE
)
57 MINI_OP(OP_CALL_MEMBASE
, "call_membase", IREG
, IREG
, NONE
)
58 MINI_OP(OP_FCALL
, "fcall", FREG
, NONE
, NONE
)
59 MINI_OP(OP_FCALL_REG
, "fcall_reg", FREG
, IREG
, NONE
)
60 MINI_OP(OP_FCALL_MEMBASE
, "fcall_membase", FREG
, IREG
, NONE
)
61 MINI_OP(OP_RCALL
, "rcall", FREG
, NONE
, NONE
)
62 MINI_OP(OP_RCALL_REG
, "rcall_reg", FREG
, IREG
, NONE
)
63 MINI_OP(OP_RCALL_MEMBASE
, "rcall_membase", FREG
, IREG
, NONE
)
64 MINI_OP(OP_LCALL
, "lcall", LREG
, NONE
, NONE
)
65 MINI_OP(OP_LCALL_REG
, "lcall_reg", LREG
, IREG
, NONE
)
66 MINI_OP(OP_LCALL_MEMBASE
, "lcall_membase", LREG
, IREG
, NONE
)
67 MINI_OP(OP_VCALL
, "vcall", VREG
, NONE
, NONE
)
68 MINI_OP(OP_VCALL_REG
, "vcall_reg", VREG
, IREG
, NONE
)
69 MINI_OP(OP_VCALL_MEMBASE
, "vcall_membase", VREG
, IREG
, NONE
)
70 /* Represents the decomposed vcall which doesn't return a vtype no more */
71 MINI_OP(OP_VCALL2
, "vcall2", NONE
, NONE
, NONE
)
72 MINI_OP(OP_VCALL2_REG
, "vcall2_reg", NONE
, IREG
, NONE
)
73 MINI_OP(OP_VCALL2_MEMBASE
, "vcall2_membase", NONE
, IREG
, NONE
)
74 MINI_OP(OP_DYN_CALL
, "dyn_call", NONE
, IREG
, IREG
)
76 MINI_OP(OP_ICONST
, "iconst", IREG
, NONE
, NONE
)
77 MINI_OP(OP_I8CONST
, "i8const", LREG
, NONE
, NONE
)
78 MINI_OP(OP_R4CONST
, "r4const", FREG
, NONE
, NONE
)
79 MINI_OP(OP_R8CONST
, "r8const", FREG
, NONE
, NONE
)
80 MINI_OP(OP_DUMMY_ICONST
, "dummy_iconst", IREG
, NONE
, NONE
)
81 MINI_OP(OP_DUMMY_I8CONST
, "dummy_i8const", LREG
, NONE
, NONE
)
82 MINI_OP(OP_DUMMY_R8CONST
, "dummy_r8const", FREG
, NONE
, NONE
)
83 MINI_OP(OP_DUMMY_R4CONST
, "dummy_r4const", FREG
, NONE
, NONE
)
84 MINI_OP(OP_DUMMY_VZERO
, "dummy_vzero", VREG
, NONE
, NONE
)
85 MINI_OP(OP_REGVAR
, "regvar", NONE
, NONE
, NONE
)
86 MINI_OP(OP_REGOFFSET
, "regoffset", NONE
, NONE
, NONE
)
87 MINI_OP(OP_VTARG_ADDR
, "vtarg_addr", NONE
, NONE
, NONE
)
88 MINI_OP(OP_LABEL
, "label", NONE
, NONE
, NONE
)
89 MINI_OP(OP_SWITCH
, "switch", NONE
, IREG
, NONE
)
90 MINI_OP(OP_THROW
, "throw", NONE
, IREG
, NONE
)
91 MINI_OP(OP_RETHROW
, "rethrow", NONE
, IREG
, NONE
)
94 * Vararg calls are implemented as follows:
95 * - the caller emits a hidden argument just before the varargs argument. this
96 * 'signature cookie' argument contains the signature describing the the call.
97 * - all implicit arguments are passed in memory right after the signature cookie, i.e.
98 * the stack will look like this:
103 * - the OP_ARGLIST opcode in the callee computes the address of the sig cookie argument
104 * on the stack and saves it into its sreg1.
105 * - mono_ArgIterator_Setup receives this value and uses it to find the signature and
108 MINI_OP(OP_ARGLIST
, "arglist", NONE
, IREG
, NONE
)
110 /* MONO_IS_STORE_MEMBASE depends on the order here */
111 MINI_OP(OP_STORE_MEMBASE_REG
,"store_membase_reg", IREG
, IREG
, NONE
)
112 MINI_OP(OP_STOREI1_MEMBASE_REG
, "storei1_membase_reg", IREG
, IREG
, NONE
)
113 MINI_OP(OP_STOREI2_MEMBASE_REG
, "storei2_membase_reg", IREG
, IREG
, NONE
)
114 MINI_OP(OP_STOREI4_MEMBASE_REG
, "storei4_membase_reg", IREG
, IREG
, NONE
)
115 MINI_OP(OP_STOREI8_MEMBASE_REG
, "storei8_membase_reg", IREG
, LREG
, NONE
)
116 MINI_OP(OP_STORER4_MEMBASE_REG
, "storer4_membase_reg", IREG
, FREG
, NONE
)
117 MINI_OP(OP_STORER8_MEMBASE_REG
, "storer8_membase_reg", IREG
, FREG
, NONE
)
119 #if defined(TARGET_X86) || defined(TARGET_AMD64)
120 MINI_OP(OP_STOREX_MEMBASE_REG
, "storex_membase_reg", IREG
, XREG
, NONE
)
121 MINI_OP(OP_STOREX_ALIGNED_MEMBASE_REG
, "storex_aligned_membase_reg", IREG
, XREG
, NONE
)
122 MINI_OP(OP_STOREX_NTA_MEMBASE_REG
, "storex_nta_membase_reg", IREG
, XREG
, NONE
)
125 MINI_OP(OP_STORE_MEMBASE_IMM
,"store_membase_imm", IREG
, NONE
, NONE
)
126 MINI_OP(OP_STOREI1_MEMBASE_IMM
, "storei1_membase_imm", IREG
, NONE
, NONE
)
127 MINI_OP(OP_STOREI2_MEMBASE_IMM
, "storei2_membase_imm", IREG
, NONE
, NONE
)
128 MINI_OP(OP_STOREI4_MEMBASE_IMM
, "storei4_membase_imm", IREG
, NONE
, NONE
)
129 MINI_OP(OP_STOREI8_MEMBASE_IMM
, "storei8_membase_imm", IREG
, NONE
, NONE
)
130 MINI_OP(OP_STOREX_MEMBASE
, "storex_membase", IREG
, XREG
, NONE
)
131 MINI_OP(OP_STOREV_MEMBASE
, "storev_membase", IREG
, VREG
, NONE
)
133 /* MONO_IS_LOAD_MEMBASE depends on the order here */
134 MINI_OP(OP_LOAD_MEMBASE
, "load_membase", IREG
, IREG
, NONE
)
135 MINI_OP(OP_LOADI1_MEMBASE
,"loadi1_membase", IREG
, IREG
, NONE
)
136 MINI_OP(OP_LOADU1_MEMBASE
,"loadu1_membase", IREG
, IREG
, NONE
)
137 MINI_OP(OP_LOADI2_MEMBASE
,"loadi2_membase", IREG
, IREG
, NONE
)
138 MINI_OP(OP_LOADU2_MEMBASE
,"loadu2_membase", IREG
, IREG
, NONE
)
139 MINI_OP(OP_LOADI4_MEMBASE
,"loadi4_membase", IREG
, IREG
, NONE
)
140 MINI_OP(OP_LOADU4_MEMBASE
,"loadu4_membase", IREG
, IREG
, NONE
)
141 MINI_OP(OP_LOADI8_MEMBASE
,"loadi8_membase", LREG
, IREG
, NONE
)
142 MINI_OP(OP_LOADR4_MEMBASE
,"loadr4_membase", FREG
, IREG
, NONE
)
143 MINI_OP(OP_LOADR8_MEMBASE
,"loadr8_membase", FREG
, IREG
, NONE
)
145 MINI_OP(OP_LOADX_MEMBASE
, "loadx_membase", XREG
, IREG
, NONE
)
147 #if defined(TARGET_X86) || defined(TARGET_AMD64)
148 MINI_OP(OP_LOADX_ALIGNED_MEMBASE
, "loadx_aligned_membase", XREG
, IREG
, NONE
)
151 MINI_OP(OP_LOADV_MEMBASE
, "loadv_membase", VREG
, IREG
, NONE
)
153 /* indexed loads: dreg = load at (sreg1 + sreg2)*/
154 MINI_OP(OP_LOAD_MEMINDEX
, "load_memindex", IREG
, IREG
, IREG
)
155 MINI_OP(OP_LOADI1_MEMINDEX
,"loadi1_memindex", IREG
, IREG
, IREG
)
156 MINI_OP(OP_LOADU1_MEMINDEX
,"loadu1_memindex", IREG
, IREG
, IREG
)
157 MINI_OP(OP_LOADI2_MEMINDEX
,"loadi2_memindex", IREG
, IREG
, IREG
)
158 MINI_OP(OP_LOADU2_MEMINDEX
,"loadu2_memindex", IREG
, IREG
, IREG
)
159 MINI_OP(OP_LOADI4_MEMINDEX
,"loadi4_memindex", IREG
, IREG
, IREG
)
160 MINI_OP(OP_LOADU4_MEMINDEX
,"loadu4_memindex", IREG
, IREG
, IREG
)
161 MINI_OP(OP_LOADI8_MEMINDEX
,"loadi8_memindex", IREG
, IREG
, IREG
)
162 MINI_OP(OP_LOADR4_MEMINDEX
,"loadr4_memindex", FREG
, IREG
, IREG
)
163 MINI_OP(OP_LOADR8_MEMINDEX
,"loadr8_memindex", FREG
, IREG
, IREG
)
164 /* indexed stores: store sreg1 at (destbasereg + sreg2) */
165 /* MONO_IS_STORE_MEMINDEX depends on the order here */
166 MINI_OP(OP_STORE_MEMINDEX
,"store_memindex", IREG
, IREG
, IREG
)
167 MINI_OP(OP_STOREI1_MEMINDEX
,"storei1_memindex", IREG
, IREG
, IREG
)
168 MINI_OP(OP_STOREI2_MEMINDEX
,"storei2_memindex", IREG
, IREG
, IREG
)
169 MINI_OP(OP_STOREI4_MEMINDEX
,"storei4_memindex", IREG
, IREG
, IREG
)
170 MINI_OP(OP_STOREI8_MEMINDEX
,"storei8_memindex", IREG
, IREG
, IREG
)
171 MINI_OP(OP_STORER4_MEMINDEX
,"storer4_memindex", IREG
, FREG
, IREG
)
172 MINI_OP(OP_STORER8_MEMINDEX
,"storer8_memindex", IREG
, FREG
, IREG
)
174 MINI_OP(OP_LOAD_MEM
,"load_mem", IREG
, NONE
, NONE
)
175 MINI_OP(OP_LOADU1_MEM
,"loadu1_mem", IREG
, NONE
, NONE
)
176 MINI_OP(OP_LOADU2_MEM
,"loadu2_mem", IREG
, NONE
, NONE
)
177 MINI_OP(OP_LOADI4_MEM
,"loadi4_mem", IREG
, NONE
, NONE
)
178 MINI_OP(OP_LOADU4_MEM
,"loadu4_mem", IREG
, NONE
, NONE
)
179 MINI_OP(OP_LOADI8_MEM
,"loadi8_mem", IREG
, NONE
, NONE
)
181 MINI_OP(OP_MOVE
, "move", IREG
, IREG
, NONE
)
182 MINI_OP(OP_LMOVE
, "lmove", LREG
, LREG
, NONE
)
183 MINI_OP(OP_FMOVE
, "fmove", FREG
, FREG
, NONE
)
184 MINI_OP(OP_VMOVE
, "vmove", VREG
, VREG
, NONE
)
185 MINI_OP(OP_RMOVE
, "rmove", FREG
, FREG
, NONE
)
188 * All 4 of these are only available when soft float isn't active. They
189 * perform no conversions; they simply move values back and forth.
191 MINI_OP(OP_MOVE_F_TO_I4
, "move_f_to_i4", IREG
, FREG
, NONE
)
192 MINI_OP(OP_MOVE_I4_TO_F
, "move_i4_to_f", FREG
, IREG
, NONE
)
193 /* These 2 are only available on 64-bit targets. */
194 MINI_OP(OP_MOVE_F_TO_I8
, "move_f_to_i8", IREG
, FREG
, NONE
)
195 MINI_OP(OP_MOVE_I8_TO_F
, "move_i8_to_f", FREG
, IREG
, NONE
)
197 MINI_OP(OP_VZERO
, "vzero", VREG
, NONE
, NONE
)
199 MINI_OP(OP_ADD_IMM
, "add_imm", IREG
, IREG
, NONE
)
200 MINI_OP(OP_SUB_IMM
, "sub_imm", IREG
, IREG
, NONE
)
201 MINI_OP(OP_MUL_IMM
, "mul_imm", IREG
, IREG
, NONE
)
202 MINI_OP(OP_DIV_IMM
, "div_imm", IREG
, IREG
, NONE
)
203 MINI_OP(OP_DIV_UN_IMM
, "div_un_imm", IREG
, IREG
, NONE
)
204 MINI_OP(OP_REM_IMM
, "rem_imm", IREG
, IREG
, NONE
)
205 MINI_OP(OP_REM_UN_IMM
, "rem_un_imm", IREG
, IREG
, NONE
)
206 MINI_OP(OP_AND_IMM
, "and_imm", IREG
, IREG
, NONE
)
207 MINI_OP(OP_OR_IMM
, "or_imm", IREG
, IREG
, NONE
)
208 MINI_OP(OP_XOR_IMM
, "xor_imm", IREG
, IREG
, NONE
)
209 MINI_OP(OP_SHL_IMM
, "shl_imm", IREG
, IREG
, NONE
)
210 MINI_OP(OP_SHR_IMM
, "shr_imm", IREG
, IREG
, NONE
)
211 MINI_OP(OP_SHR_UN_IMM
, "shr_un_imm", IREG
, IREG
, NONE
)
213 MINI_OP(OP_BR
, "br", NONE
, NONE
, NONE
)
214 /* Similar to old OP_JMP, but the passing of arguments is done similarly to calls */
215 MINI_OP(OP_TAILCALL
, "tailcall", NONE
, NONE
, NONE
)
216 MINI_OP(OP_TAILCALL_PARAMETER
, "tailcall_parameter", NONE
, NONE
, NONE
) // no code, just size
217 MINI_OP(OP_TAILCALL_REG
, "tailcall_reg", NONE
, IREG
, NONE
)
218 MINI_OP(OP_TAILCALL_MEMBASE
, "tailcall_membase", NONE
, IREG
, NONE
)
219 MINI_OP(OP_BREAK
, "break", NONE
, NONE
, NONE
)
221 MINI_OP(OP_CEQ
, "ceq", IREG
, NONE
, NONE
)
222 MINI_OP(OP_CGT
, "cgt", IREG
, NONE
, NONE
)
223 MINI_OP(OP_CGT_UN
,"cgt_un", IREG
, NONE
, NONE
)
224 MINI_OP(OP_CLT
, "clt", IREG
, NONE
, NONE
)
225 MINI_OP(OP_CLT_UN
,"clt_un", IREG
, NONE
, NONE
)
227 /* exceptions: must be in the same order as the matching CEE_ branch opcodes */
228 MINI_OP(OP_COND_EXC_EQ
, "cond_exc_eq", NONE
, NONE
, NONE
)
229 MINI_OP(OP_COND_EXC_GE
, "cond_exc_ge", NONE
, NONE
, NONE
)
230 MINI_OP(OP_COND_EXC_GT
, "cond_exc_gt", NONE
, NONE
, NONE
)
231 MINI_OP(OP_COND_EXC_LE
, "cond_exc_le", NONE
, NONE
, NONE
)
232 MINI_OP(OP_COND_EXC_LT
, "cond_exc_lt", NONE
, NONE
, NONE
)
233 MINI_OP(OP_COND_EXC_NE_UN
, "cond_exc_ne_un", NONE
, NONE
, NONE
)
234 MINI_OP(OP_COND_EXC_GE_UN
, "cond_exc_ge_un", NONE
, NONE
, NONE
)
235 MINI_OP(OP_COND_EXC_GT_UN
, "cond_exc_gt_un", NONE
, NONE
, NONE
)
236 MINI_OP(OP_COND_EXC_LE_UN
, "cond_exc_le_un", NONE
, NONE
, NONE
)
237 MINI_OP(OP_COND_EXC_LT_UN
, "cond_exc_lt_un", NONE
, NONE
, NONE
)
239 MINI_OP(OP_COND_EXC_OV
, "cond_exc_ov", NONE
, NONE
, NONE
)
240 MINI_OP(OP_COND_EXC_NO
, "cond_exc_no", NONE
, NONE
, NONE
)
241 MINI_OP(OP_COND_EXC_C
, "cond_exc_c", NONE
, NONE
, NONE
)
242 MINI_OP(OP_COND_EXC_NC
, "cond_exc_nc", NONE
, NONE
, NONE
)
244 MINI_OP(OP_COND_EXC_IEQ
, "cond_exc_ieq", NONE
, NONE
, NONE
)
245 MINI_OP(OP_COND_EXC_IGE
, "cond_exc_ige", NONE
, NONE
, NONE
)
246 MINI_OP(OP_COND_EXC_IGT
, "cond_exc_igt", NONE
, NONE
, NONE
)
247 MINI_OP(OP_COND_EXC_ILE
, "cond_exc_ile", NONE
, NONE
, NONE
)
248 MINI_OP(OP_COND_EXC_ILT
, "cond_exc_ilt", NONE
, NONE
, NONE
)
249 MINI_OP(OP_COND_EXC_INE_UN
, "cond_exc_ine_un", NONE
, NONE
, NONE
)
250 MINI_OP(OP_COND_EXC_IGE_UN
, "cond_exc_ige_un", NONE
, NONE
, NONE
)
251 MINI_OP(OP_COND_EXC_IGT_UN
, "cond_exc_igt_un", NONE
, NONE
, NONE
)
252 MINI_OP(OP_COND_EXC_ILE_UN
, "cond_exc_ile_un", NONE
, NONE
, NONE
)
253 MINI_OP(OP_COND_EXC_ILT_UN
, "cond_exc_ilt_un", NONE
, NONE
, NONE
)
255 MINI_OP(OP_COND_EXC_IOV
, "cond_exc_iov", NONE
, NONE
, NONE
)
256 MINI_OP(OP_COND_EXC_INO
, "cond_exc_ino", NONE
, NONE
, NONE
)
257 MINI_OP(OP_COND_EXC_IC
, "cond_exc_ic", NONE
, NONE
, NONE
)
258 MINI_OP(OP_COND_EXC_INC
, "cond_exc_inc", NONE
, NONE
, NONE
)
260 /* 64 bit opcodes: must be in the same order as the matching CEE_ opcodes: binops_op_map */
261 MINI_OP(OP_LADD
, "long_add", LREG
, LREG
, LREG
)
262 MINI_OP(OP_LSUB
, "long_sub", LREG
, LREG
, LREG
)
263 MINI_OP(OP_LMUL
, "long_mul", LREG
, LREG
, LREG
)
264 MINI_OP(OP_LDIV
, "long_div", LREG
, LREG
, LREG
)
265 MINI_OP(OP_LDIV_UN
, "long_div_un", LREG
, LREG
, LREG
)
266 MINI_OP(OP_LREM
, "long_rem", LREG
, LREG
, LREG
)
267 MINI_OP(OP_LREM_UN
, "long_rem_un", LREG
, LREG
, LREG
)
268 MINI_OP(OP_LAND
, "long_and", LREG
, LREG
, LREG
)
269 MINI_OP(OP_LOR
, "long_or", LREG
, LREG
, LREG
)
270 MINI_OP(OP_LXOR
, "long_xor", LREG
, LREG
, LREG
)
271 MINI_OP(OP_LSHL
, "long_shl", LREG
, LREG
, IREG
)
272 MINI_OP(OP_LSHR
, "long_shr", LREG
, LREG
, IREG
)
273 MINI_OP(OP_LSHR_UN
, "long_shr_un", LREG
, LREG
, IREG
)
275 /* 64 bit opcodes: must be in the same order as the matching CEE_ opcodes: unops_op_map */
276 MINI_OP(OP_LNEG
, "long_neg", LREG
, LREG
, NONE
)
277 MINI_OP(OP_LNOT
, "long_not", LREG
, LREG
, NONE
)
278 MINI_OP(OP_LCONV_TO_I1
,"long_conv_to_i1", IREG
, LREG
, NONE
)
279 MINI_OP(OP_LCONV_TO_I2
,"long_conv_to_i2", IREG
, LREG
, NONE
)
280 MINI_OP(OP_LCONV_TO_I4
,"long_conv_to_i4", IREG
, LREG
, NONE
)
281 MINI_OP(OP_LCONV_TO_I8
,"long_conv_to_i8", LREG
, LREG
, NONE
)
282 MINI_OP(OP_LCONV_TO_R4
,"long_conv_to_r4", FREG
, LREG
, NONE
)
283 MINI_OP(OP_LCONV_TO_R8
,"long_conv_to_r8", FREG
, LREG
, NONE
)
284 MINI_OP(OP_LCONV_TO_U4
,"long_conv_to_u4", IREG
, LREG
, NONE
)
285 MINI_OP(OP_LCONV_TO_U8
,"long_conv_to_u8", LREG
, LREG
, NONE
)
287 MINI_OP(OP_LCONV_TO_U2
, "long_conv_to_u2", IREG
, LREG
, NONE
)
288 MINI_OP(OP_LCONV_TO_U1
, "long_conv_to_u1", IREG
, LREG
, NONE
)
289 MINI_OP(OP_LCONV_TO_I
, "long_conv_to_i", LREG
, LREG
, NONE
)
290 MINI_OP(OP_LCONV_TO_OVF_I
,"long_conv_to_ovf_i", LREG
, LREG
, NONE
)
291 MINI_OP(OP_LCONV_TO_OVF_U
,"long_conv_to_ovf_u", LREG
, LREG
, NONE
)
293 MINI_OP(OP_LADD_OVF
, "long_add_ovf", LREG
, LREG
, LREG
)
294 MINI_OP(OP_LADD_OVF_UN
, "long_add_ovf_un", LREG
, LREG
, LREG
)
295 MINI_OP(OP_LMUL_OVF
, "long_mul_ovf", LREG
, LREG
, LREG
)
296 MINI_OP(OP_LMUL_OVF_UN
, "long_mul_ovf_un", LREG
, LREG
, LREG
)
297 MINI_OP(OP_LSUB_OVF
, "long_sub_ovf", LREG
, LREG
, LREG
)
298 MINI_OP(OP_LSUB_OVF_UN
, "long_sub_ovf_un", LREG
, LREG
, LREG
)
300 MINI_OP(OP_LCONV_TO_OVF_I1_UN
,"long_conv_to_ovf_i1_un", LREG
, LREG
, NONE
)
301 MINI_OP(OP_LCONV_TO_OVF_I2_UN
,"long_conv_to_ovf_i2_un", LREG
, LREG
, NONE
)
302 MINI_OP(OP_LCONV_TO_OVF_I4_UN
,"long_conv_to_ovf_i4_un", LREG
, LREG
, NONE
)
303 MINI_OP(OP_LCONV_TO_OVF_I8_UN
,"long_conv_to_ovf_i8_un", LREG
, LREG
, NONE
)
304 MINI_OP(OP_LCONV_TO_OVF_U1_UN
,"long_conv_to_ovf_u1_un", LREG
, LREG
, NONE
)
305 MINI_OP(OP_LCONV_TO_OVF_U2_UN
,"long_conv_to_ovf_u2_un", LREG
, LREG
, NONE
)
306 MINI_OP(OP_LCONV_TO_OVF_U4_UN
,"long_conv_to_ovf_u4_un", LREG
, LREG
, NONE
)
307 MINI_OP(OP_LCONV_TO_OVF_U8_UN
,"long_conv_to_ovf_u8_un", LREG
, LREG
, NONE
)
308 MINI_OP(OP_LCONV_TO_OVF_I_UN
, "long_conv_to_ovf_i_un", LREG
, LREG
, NONE
)
309 MINI_OP(OP_LCONV_TO_OVF_U_UN
, "long_conv_to_ovf_u_un", LREG
, LREG
, NONE
)
311 MINI_OP(OP_LCONV_TO_OVF_I1
,"long_conv_to_ovf_i1", LREG
, LREG
, NONE
)
312 MINI_OP(OP_LCONV_TO_OVF_U1
,"long_conv_to_ovf_u1", LREG
, LREG
, NONE
)
313 MINI_OP(OP_LCONV_TO_OVF_I2
,"long_conv_to_ovf_i2", LREG
, LREG
, NONE
)
314 MINI_OP(OP_LCONV_TO_OVF_U2
,"long_conv_to_ovf_u2", LREG
, LREG
, NONE
)
315 MINI_OP(OP_LCONV_TO_OVF_I4
,"long_conv_to_ovf_i4", LREG
, LREG
, NONE
)
316 MINI_OP(OP_LCONV_TO_OVF_U4
,"long_conv_to_ovf_u4", LREG
, LREG
, NONE
)
317 MINI_OP(OP_LCONV_TO_OVF_I8
,"long_conv_to_ovf_i8", LREG
, LREG
, NONE
)
318 MINI_OP(OP_LCONV_TO_OVF_U8
,"long_conv_to_ovf_u8", LREG
, LREG
, NONE
)
320 /* mono_decompose_long_opts () depends on the order here */
321 MINI_OP(OP_LCEQ
, "long_ceq", IREG
, NONE
, NONE
)
322 MINI_OP(OP_LCGT
, "long_cgt", IREG
, NONE
, NONE
)
323 MINI_OP(OP_LCGT_UN
,"long_cgt_un", IREG
, NONE
, NONE
)
324 MINI_OP(OP_LCLT
, "long_clt", IREG
, NONE
, NONE
)
325 MINI_OP(OP_LCLT_UN
,"long_clt_un", IREG
, NONE
, NONE
)
327 MINI_OP(OP_LCONV_TO_R_UN
,"long_conv_to_r_un", FREG
, LREG
, NONE
)
328 MINI_OP(OP_LCONV_TO_U
, "long_conv_to_u", IREG
, LREG
, NONE
)
330 MINI_OP(OP_LADD_IMM
, "long_add_imm", LREG
, LREG
, NONE
)
331 MINI_OP(OP_LSUB_IMM
, "long_sub_imm", LREG
, LREG
, NONE
)
332 MINI_OP(OP_LMUL_IMM
, "long_mul_imm", LREG
, LREG
, NONE
)
333 MINI_OP(OP_LAND_IMM
, "long_and_imm", LREG
, LREG
, NONE
)
334 MINI_OP(OP_LOR_IMM
, "long_or_imm", LREG
, LREG
, NONE
)
335 MINI_OP(OP_LXOR_IMM
, "long_xor_imm", LREG
, LREG
, NONE
)
336 MINI_OP(OP_LSHL_IMM
, "long_shl_imm", LREG
, LREG
, NONE
)
337 MINI_OP(OP_LSHR_IMM
, "long_shr_imm", LREG
, LREG
, NONE
)
338 MINI_OP(OP_LSHR_UN_IMM
, "long_shr_un_imm", LREG
, LREG
, NONE
)
339 MINI_OP(OP_LDIV_IMM
, "long_div_imm", LREG
, LREG
, NONE
)
340 MINI_OP(OP_LDIV_UN_IMM
, "long_div_un_imm", LREG
, LREG
, NONE
)
341 MINI_OP(OP_LREM_IMM
, "long_rem_imm", LREG
, LREG
, NONE
)
342 MINI_OP(OP_LREM_UN_IMM
, "long_rem_un_imm", LREG
, LREG
, NONE
)
344 /* mono_decompose_long_opts () depends on the order here */
345 MINI_OP(OP_LBEQ
, "long_beq", NONE
, NONE
, NONE
)
346 MINI_OP(OP_LBGE
, "long_bge", NONE
, NONE
, NONE
)
347 MINI_OP(OP_LBGT
, "long_bgt", NONE
, NONE
, NONE
)
348 MINI_OP(OP_LBLE
, "long_ble", NONE
, NONE
, NONE
)
349 MINI_OP(OP_LBLT
, "long_blt", NONE
, NONE
, NONE
)
350 MINI_OP(OP_LBNE_UN
, "long_bne_un", NONE
, NONE
, NONE
)
351 MINI_OP(OP_LBGE_UN
, "long_bge_un", NONE
, NONE
, NONE
)
352 MINI_OP(OP_LBGT_UN
, "long_bgt_un", NONE
, NONE
, NONE
)
353 MINI_OP(OP_LBLE_UN
, "long_ble_un", NONE
, NONE
, NONE
)
354 MINI_OP(OP_LBLT_UN
, "long_blt_un", NONE
, NONE
, NONE
)
356 /* Variants of the original opcodes which take the two parts of the long as two arguments */
357 MINI_OP(OP_LCONV_TO_R8_2
,"long_conv_to_r8_2", FREG
, IREG
, IREG
)
358 MINI_OP(OP_LCONV_TO_R4_2
,"long_conv_to_r4_2", FREG
, IREG
, IREG
)
359 MINI_OP(OP_LCONV_TO_R_UN_2
,"long_conv_to_r_un_2", FREG
, IREG
, IREG
)
360 MINI_OP(OP_LCONV_TO_OVF_I4_2
,"long_conv_to_ovf_i4_2", IREG
, IREG
, IREG
)
362 /* 32 bit opcodes: must be in the same order as the matching CEE_ opcodes: binops_op_map */
363 MINI_OP(OP_IADD
, "int_add", IREG
, IREG
, IREG
)
364 MINI_OP(OP_ISUB
, "int_sub", IREG
, IREG
, IREG
)
365 MINI_OP(OP_IMUL
, "int_mul", IREG
, IREG
, IREG
)
366 MINI_OP(OP_IDIV
, "int_div", IREG
, IREG
, IREG
)
367 MINI_OP(OP_IDIV_UN
, "int_div_un", IREG
, IREG
, IREG
)
368 MINI_OP(OP_IREM
, "int_rem", IREG
, IREG
, IREG
)
369 MINI_OP(OP_IREM_UN
, "int_rem_un", IREG
, IREG
, IREG
)
370 MINI_OP(OP_IAND
, "int_and", IREG
, IREG
, IREG
)
371 MINI_OP(OP_IOR
, "int_or", IREG
, IREG
, IREG
)
372 MINI_OP(OP_IXOR
, "int_xor", IREG
, IREG
, IREG
)
373 MINI_OP(OP_ISHL
, "int_shl", IREG
, IREG
, IREG
)
374 MINI_OP(OP_ISHR
, "int_shr", IREG
, IREG
, IREG
)
375 MINI_OP(OP_ISHR_UN
, "int_shr_un", IREG
, IREG
, IREG
)
377 /* 32 bit opcodes: must be in the same order as the matching CEE_ opcodes: unops_op_map */
378 MINI_OP(OP_INEG
, "int_neg", IREG
, IREG
, NONE
)
379 MINI_OP(OP_INOT
, "int_not", IREG
, IREG
, NONE
)
380 MINI_OP(OP_ICONV_TO_I1
,"int_conv_to_i1", IREG
, IREG
, NONE
)
381 MINI_OP(OP_ICONV_TO_I2
,"int_conv_to_i2", IREG
, IREG
, NONE
)
382 MINI_OP(OP_ICONV_TO_I4
,"int_conv_to_i4", IREG
, IREG
, NONE
)
383 MINI_OP(OP_ICONV_TO_I8
,"int_conv_to_i8", LREG
, IREG
, NONE
)
384 MINI_OP(OP_ICONV_TO_R4
,"int_conv_to_r4", FREG
, IREG
, NONE
)
385 MINI_OP(OP_ICONV_TO_R8
,"int_conv_to_r8", FREG
, IREG
, NONE
)
386 MINI_OP(OP_ICONV_TO_U4
,"int_conv_to_u4", IREG
, IREG
, NONE
)
387 MINI_OP(OP_ICONV_TO_U8
,"int_conv_to_u8", LREG
, IREG
, NONE
)
389 MINI_OP(OP_ICONV_TO_R_UN
, "int_conv_to_r_un", FREG
, IREG
, NONE
)
390 MINI_OP(OP_ICONV_TO_U
, "int_conv_to_u", IREG
, IREG
, NONE
)
392 /* 32 bit opcodes: must be in the same order as the matching CEE_ opcodes: ovfops_op_map */
393 MINI_OP(OP_ICONV_TO_U2
, "int_conv_to_u2", IREG
, IREG
, NONE
)
394 MINI_OP(OP_ICONV_TO_U1
, "int_conv_to_u1", IREG
, IREG
, NONE
)
395 MINI_OP(OP_ICONV_TO_I
, "int_conv_to_i", IREG
, IREG
, NONE
)
396 MINI_OP(OP_ICONV_TO_OVF_I
,"int_conv_to_ovf_i", IREG
, IREG
, NONE
)
397 MINI_OP(OP_ICONV_TO_OVF_U
,"int_conv_to_ovf_u", IREG
, IREG
, NONE
)
398 MINI_OP(OP_IADD_OVF
, "int_add_ovf", IREG
, IREG
, IREG
)
399 MINI_OP(OP_IADD_OVF_UN
, "int_add_ovf_un", IREG
, IREG
, IREG
)
400 MINI_OP(OP_IMUL_OVF
, "int_mul_ovf", IREG
, IREG
, IREG
)
401 MINI_OP(OP_IMUL_OVF_UN
, "int_mul_ovf_un", IREG
, IREG
, IREG
)
402 MINI_OP(OP_ISUB_OVF
, "int_sub_ovf", IREG
, IREG
, IREG
)
403 MINI_OP(OP_ISUB_OVF_UN
, "int_sub_ovf_un", IREG
, IREG
, IREG
)
405 /* 32 bit opcodes: must be in the same order as the matching CEE_ opcodes: ovf2ops_op_map */
406 MINI_OP(OP_ICONV_TO_OVF_I1_UN
,"int_conv_to_ovf_i1_un", IREG
, IREG
, NONE
)
407 MINI_OP(OP_ICONV_TO_OVF_I2_UN
,"int_conv_to_ovf_i2_un", IREG
, IREG
, NONE
)
408 MINI_OP(OP_ICONV_TO_OVF_I4_UN
,"int_conv_to_ovf_i4_un", IREG
, IREG
, NONE
)
409 MINI_OP(OP_ICONV_TO_OVF_I8_UN
,"int_conv_to_ovf_i8_un", IREG
, IREG
, NONE
)
410 MINI_OP(OP_ICONV_TO_OVF_U1_UN
,"int_conv_to_ovf_u1_un", IREG
, IREG
, NONE
)
411 MINI_OP(OP_ICONV_TO_OVF_U2_UN
,"int_conv_to_ovf_u2_un", IREG
, IREG
, NONE
)
412 MINI_OP(OP_ICONV_TO_OVF_U4_UN
,"int_conv_to_ovf_u4_un", IREG
, IREG
, NONE
)
413 MINI_OP(OP_ICONV_TO_OVF_U8_UN
,"int_conv_to_ovf_u8_un", IREG
, IREG
, NONE
)
414 MINI_OP(OP_ICONV_TO_OVF_I_UN
, "int_conv_to_ovf_i_un", IREG
, IREG
, NONE
)
415 MINI_OP(OP_ICONV_TO_OVF_U_UN
, "int_conv_to_ovf_u_un", IREG
, IREG
, NONE
)
417 /* 32 bit opcodes: must be in the same order as the matching CEE_ opcodes: ovf3ops_op_map */
418 MINI_OP(OP_ICONV_TO_OVF_I1
,"int_conv_to_ovf_i1", IREG
, IREG
, NONE
)
419 MINI_OP(OP_ICONV_TO_OVF_U1
,"int_conv_to_ovf_u1", IREG
, IREG
, NONE
)
420 MINI_OP(OP_ICONV_TO_OVF_I2
,"int_conv_to_ovf_i2", IREG
, IREG
, NONE
)
421 MINI_OP(OP_ICONV_TO_OVF_U2
,"int_conv_to_ovf_u2", IREG
, IREG
, NONE
)
422 MINI_OP(OP_ICONV_TO_OVF_I4
,"int_conv_to_ovf_i4", IREG
, IREG
, NONE
)
423 MINI_OP(OP_ICONV_TO_OVF_U4
,"int_conv_to_ovf_u4", IREG
, IREG
, NONE
)
424 MINI_OP(OP_ICONV_TO_OVF_I8
,"int_conv_to_ovf_i8", IREG
, IREG
, NONE
)
425 MINI_OP(OP_ICONV_TO_OVF_U8
,"int_conv_to_ovf_u8", IREG
, IREG
, NONE
)
427 MINI_OP(OP_IADC
, "int_adc", IREG
, IREG
, IREG
)
428 MINI_OP(OP_IADC_IMM
, "int_adc_imm", IREG
, IREG
, NONE
)
429 MINI_OP(OP_ISBB
, "int_sbb", IREG
, IREG
, IREG
)
430 MINI_OP(OP_ISBB_IMM
, "int_sbb_imm", IREG
, IREG
, NONE
)
431 MINI_OP(OP_IADDCC
, "int_addcc", IREG
, IREG
, IREG
)
432 MINI_OP(OP_ISUBCC
, "int_subcc", IREG
, IREG
, IREG
)
434 MINI_OP(OP_IADD_IMM
, "int_add_imm", IREG
, IREG
, NONE
)
435 MINI_OP(OP_ISUB_IMM
, "int_sub_imm", IREG
, IREG
, NONE
)
436 MINI_OP(OP_IMUL_IMM
, "int_mul_imm", IREG
, IREG
, NONE
)
437 MINI_OP(OP_IDIV_IMM
, "int_div_imm", IREG
, IREG
, NONE
)
438 MINI_OP(OP_IDIV_UN_IMM
, "int_div_un_imm", IREG
, IREG
, NONE
)
439 MINI_OP(OP_IREM_IMM
, "int_rem_imm", IREG
, IREG
, NONE
)
440 MINI_OP(OP_IREM_UN_IMM
, "int_rem_un_imm", IREG
, IREG
, NONE
)
441 MINI_OP(OP_IAND_IMM
, "int_and_imm", IREG
, IREG
, NONE
)
442 MINI_OP(OP_IOR_IMM
, "int_or_imm", IREG
, IREG
, NONE
)
443 MINI_OP(OP_IXOR_IMM
, "int_xor_imm", IREG
, IREG
, NONE
)
444 MINI_OP(OP_ISHL_IMM
, "int_shl_imm", IREG
, IREG
, NONE
)
445 MINI_OP(OP_ISHR_IMM
, "int_shr_imm", IREG
, IREG
, NONE
)
446 MINI_OP(OP_ISHR_UN_IMM
, "int_shr_un_imm", IREG
, IREG
, NONE
)
448 MINI_OP(OP_ICEQ
, "int_ceq", IREG
, NONE
, NONE
)
449 MINI_OP(OP_ICGT
, "int_cgt", IREG
, NONE
, NONE
)
450 MINI_OP(OP_ICGT_UN
,"int_cgt_un", IREG
, NONE
, NONE
)
451 MINI_OP(OP_ICLT
, "int_clt", IREG
, NONE
, NONE
)
452 MINI_OP(OP_ICLT_UN
,"int_clt_un", IREG
, NONE
, NONE
)
454 MINI_OP(OP_ICNEQ
, "int_cneq", IREG
, NONE
, NONE
)
455 MINI_OP(OP_ICGE
, "int_cge", IREG
, NONE
, NONE
)
456 MINI_OP(OP_ICLE
, "int_cle", IREG
, NONE
, NONE
)
457 MINI_OP(OP_ICGE_UN
,"int_cge_un", IREG
, NONE
, NONE
)
458 MINI_OP(OP_ICLE_UN
,"int_cle_un", IREG
, NONE
, NONE
)
460 MINI_OP(OP_IBEQ
, "int_beq", NONE
, NONE
, NONE
)
461 MINI_OP(OP_IBGE
, "int_bge", NONE
, NONE
, NONE
)
462 MINI_OP(OP_IBGT
, "int_bgt", NONE
, NONE
, NONE
)
463 MINI_OP(OP_IBLE
, "int_ble", NONE
, NONE
, NONE
)
464 MINI_OP(OP_IBLT
, "int_blt", NONE
, NONE
, NONE
)
465 MINI_OP(OP_IBNE_UN
, "int_bne_un", NONE
, NONE
, NONE
)
466 MINI_OP(OP_IBGE_UN
, "int_bge_un", NONE
, NONE
, NONE
)
467 MINI_OP(OP_IBGT_UN
, "int_bgt_un", NONE
, NONE
, NONE
)
468 MINI_OP(OP_IBLE_UN
, "int_ble_un", NONE
, NONE
, NONE
)
469 MINI_OP(OP_IBLT_UN
, "int_blt_un", NONE
, NONE
, NONE
)
471 MINI_OP(OP_FBEQ
, "float_beq", NONE
, NONE
, NONE
)
472 MINI_OP(OP_FBGE
, "float_bge", NONE
, NONE
, NONE
)
473 MINI_OP(OP_FBGT
, "float_bgt", NONE
, NONE
, NONE
)
474 MINI_OP(OP_FBLE
, "float_ble", NONE
, NONE
, NONE
)
475 MINI_OP(OP_FBLT
, "float_blt", NONE
, NONE
, NONE
)
476 MINI_OP(OP_FBNE_UN
, "float_bne_un", NONE
, NONE
, NONE
)
477 MINI_OP(OP_FBGE_UN
, "float_bge_un", NONE
, NONE
, NONE
)
478 MINI_OP(OP_FBGT_UN
, "float_bgt_un", NONE
, NONE
, NONE
)
479 MINI_OP(OP_FBLE_UN
, "float_ble_un", NONE
, NONE
, NONE
)
480 MINI_OP(OP_FBLT_UN
, "float_blt_un", NONE
, NONE
, NONE
)
482 MINI_OP(OP_RBEQ
, "r4_beq", NONE
, NONE
, NONE
)
483 MINI_OP(OP_RBGE
, "r4_bge", NONE
, NONE
, NONE
)
484 MINI_OP(OP_RBGT
, "r4_bgt", NONE
, NONE
, NONE
)
485 MINI_OP(OP_RBLE
, "r4_ble", NONE
, NONE
, NONE
)
486 MINI_OP(OP_RBLT
, "r4_blt", NONE
, NONE
, NONE
)
487 MINI_OP(OP_RBNE_UN
, "r4_bne_un", NONE
, NONE
, NONE
)
488 MINI_OP(OP_RBGE_UN
, "r4_bge_un", NONE
, NONE
, NONE
)
489 MINI_OP(OP_RBGT_UN
, "r4_bgt_un", NONE
, NONE
, NONE
)
490 MINI_OP(OP_RBLE_UN
, "r4_ble_un", NONE
, NONE
, NONE
)
491 MINI_OP(OP_RBLT_UN
, "r4_blt_un", NONE
, NONE
, NONE
)
493 /* float opcodes: must be in the same order as the matching CEE_ opcodes: binops_op_map */
494 MINI_OP(OP_FADD
, "float_add", FREG
, FREG
, FREG
)
495 MINI_OP(OP_FSUB
, "float_sub", FREG
, FREG
, FREG
)
496 MINI_OP(OP_FMUL
, "float_mul", FREG
, FREG
, FREG
)
497 MINI_OP(OP_FDIV
, "float_div", FREG
, FREG
, FREG
)
498 MINI_OP(OP_FDIV_UN
,"float_div_un", FREG
, FREG
, FREG
)
499 MINI_OP(OP_FREM
, "float_rem", FREG
, FREG
, FREG
)
500 MINI_OP(OP_FREM_UN
,"float_rem_un", FREG
, FREG
, FREG
)
502 /* r4 opcodes: must be in the same order as the matching CEE_ opcodes: binops_op_map */
503 MINI_OP(OP_RADD
, "r4_add", FREG
, FREG
, FREG
)
504 MINI_OP(OP_RSUB
, "r4_sub", FREG
, FREG
, FREG
)
505 MINI_OP(OP_RMUL
, "r4_mul", FREG
, FREG
, FREG
)
506 MINI_OP(OP_RDIV
, "r4_div", FREG
, FREG
, FREG
)
507 MINI_OP(OP_RDIV_UN
,"r4_div_un", FREG
, FREG
, FREG
)
508 MINI_OP(OP_RREM
, "r4_rem", FREG
, FREG
, FREG
)
509 MINI_OP(OP_RREM_UN
,"r4_rem_un", FREG
, FREG
, FREG
)
511 /* float opcodes: must be in the same order as the matching CEE_ opcodes: unops_op_map */
512 MINI_OP(OP_FNEG
, "float_neg", FREG
, FREG
, NONE
)
513 MINI_OP(OP_FNOT
, "float_not", FREG
, FREG
, NONE
)
514 MINI_OP(OP_FCONV_TO_I1
,"float_conv_to_i1", IREG
, FREG
, NONE
)
515 MINI_OP(OP_FCONV_TO_I2
,"float_conv_to_i2", IREG
, FREG
, NONE
)
516 MINI_OP(OP_FCONV_TO_I4
,"float_conv_to_i4", IREG
, FREG
, NONE
)
517 MINI_OP(OP_FCONV_TO_I8
,"float_conv_to_i8", LREG
, FREG
, NONE
)
518 MINI_OP(OP_FCONV_TO_R4
,"float_conv_to_r4", FREG
, FREG
, NONE
)
519 MINI_OP(OP_FCONV_TO_R8
,"float_conv_to_r8", FREG
, FREG
, NONE
)
520 MINI_OP(OP_FCONV_TO_U4
,"float_conv_to_u4", IREG
, FREG
, NONE
)
521 MINI_OP(OP_FCONV_TO_U8
,"float_conv_to_u8", LREG
, FREG
, NONE
)
523 MINI_OP(OP_RNEG
, "r4_neg", FREG
, FREG
, NONE
)
524 MINI_OP(OP_RNOT
, "r4_not", FREG
, FREG
, NONE
)
525 MINI_OP(OP_RCONV_TO_I1
,"r4_conv_to_i1", IREG
, FREG
, NONE
)
526 MINI_OP(OP_RCONV_TO_I2
,"r4_conv_to_i2", IREG
, FREG
, NONE
)
527 MINI_OP(OP_RCONV_TO_I4
,"r4_conv_to_i4", IREG
, FREG
, NONE
)
528 MINI_OP(OP_RCONV_TO_I8
,"r4_conv_to_i8", LREG
, FREG
, NONE
)
529 MINI_OP(OP_RCONV_TO_R4
,"r4_conv_to_r4", FREG
, FREG
, NONE
)
530 MINI_OP(OP_RCONV_TO_R8
,"r4_conv_to_r8", FREG
, FREG
, NONE
)
531 MINI_OP(OP_RCONV_TO_U4
,"r4_conv_to_u4", IREG
, FREG
, NONE
)
532 MINI_OP(OP_RCONV_TO_U8
,"r4_conv_to_u8", LREG
, FREG
, NONE
)
534 /* float opcodes: must be in the same order as the matching CEE_ opcodes: ovfops_op_map */
535 MINI_OP(OP_FCONV_TO_U2
, "float_conv_to_u2", IREG
, FREG
, NONE
)
536 MINI_OP(OP_FCONV_TO_U1
, "float_conv_to_u1", IREG
, FREG
, NONE
)
537 MINI_OP(OP_FCONV_TO_I
, "float_conv_to_i", IREG
, FREG
, NONE
)
538 MINI_OP(OP_FCONV_TO_OVF_I
,"float_conv_to_ovf_i", IREG
, FREG
, NONE
)
539 MINI_OP(OP_FCONV_TO_OVF_U
,"float_conv_to_ovd_u", IREG
, FREG
, NONE
)
541 /* float opcodes: must be in the same order as the matching CEE_ opcodes: ovfops_op_map */
542 MINI_OP(OP_FADD_OVF
, "float_add_ovf", FREG
, FREG
, FREG
)
543 MINI_OP(OP_FADD_OVF_UN
, "float_add_ovf_un", FREG
, FREG
, FREG
)
544 MINI_OP(OP_FMUL_OVF
, "float_mul_ovf", FREG
, FREG
, FREG
)
545 MINI_OP(OP_FMUL_OVF_UN
, "float_mul_ovf_un", FREG
, FREG
, FREG
)
546 MINI_OP(OP_FSUB_OVF
, "float_sub_ovf", FREG
, FREG
, FREG
)
547 MINI_OP(OP_FSUB_OVF_UN
, "float_sub_ovf_un", FREG
, FREG
, FREG
)
549 MINI_OP(OP_FCONV_TO_OVF_I1_UN
,"float_conv_to_ovf_i1_un", IREG
, FREG
, NONE
)
550 MINI_OP(OP_FCONV_TO_OVF_I2_UN
,"float_conv_to_ovf_i2_un", IREG
, FREG
, NONE
)
551 MINI_OP(OP_FCONV_TO_OVF_I4_UN
,"float_conv_to_ovf_i4_un", IREG
, FREG
, NONE
)
552 MINI_OP(OP_FCONV_TO_OVF_I8_UN
,"float_conv_to_ovf_i8_un", LREG
, FREG
, NONE
)
553 MINI_OP(OP_FCONV_TO_OVF_U1_UN
,"float_conv_to_ovf_u1_un", IREG
, FREG
, NONE
)
554 MINI_OP(OP_FCONV_TO_OVF_U2_UN
,"float_conv_to_ovf_u2_un", IREG
, FREG
, NONE
)
555 MINI_OP(OP_FCONV_TO_OVF_U4_UN
,"float_conv_to_ovf_u4_un", IREG
, FREG
, NONE
)
556 MINI_OP(OP_FCONV_TO_OVF_U8_UN
,"float_conv_to_ovf_u8_un", LREG
, FREG
, NONE
)
557 MINI_OP(OP_FCONV_TO_OVF_I_UN
, "float_conv_to_ovf_i_un", IREG
, FREG
, NONE
)
558 MINI_OP(OP_FCONV_TO_OVF_U_UN
, "float_conv_to_ovf_u_un", IREG
, FREG
, NONE
)
560 MINI_OP(OP_FCONV_TO_OVF_I1
,"float_conv_to_ovf_i1", IREG
, FREG
, NONE
)
561 MINI_OP(OP_FCONV_TO_OVF_U1
,"float_conv_to_ovf_u1", IREG
, FREG
, NONE
)
562 MINI_OP(OP_FCONV_TO_OVF_I2
,"float_conv_to_ovf_i2", IREG
, FREG
, NONE
)
563 MINI_OP(OP_FCONV_TO_OVF_U2
,"float_conv_to_ovf_u2", IREG
, FREG
, NONE
)
564 MINI_OP(OP_FCONV_TO_OVF_I4
,"float_conv_to_ovf_i4", IREG
, FREG
, NONE
)
565 MINI_OP(OP_FCONV_TO_OVF_U4
,"float_conv_to_ovf_u4", IREG
, FREG
, NONE
)
566 MINI_OP(OP_FCONV_TO_OVF_I8
,"float_conv_to_ovf_i8", LREG
, FREG
, NONE
)
567 MINI_OP(OP_FCONV_TO_OVF_U8
,"float_conv_to_ovf_u8", LREG
, FREG
, NONE
)
569 /* These do the comparison too */
570 MINI_OP(OP_FCEQ
, "float_ceq", IREG
, FREG
, FREG
)
571 MINI_OP(OP_FCGT
, "float_cgt", IREG
, FREG
, FREG
)
572 MINI_OP(OP_FCGT_UN
,"float_cgt_un", IREG
, FREG
, FREG
)
573 MINI_OP(OP_FCLT
, "float_clt", IREG
, FREG
, FREG
)
574 MINI_OP(OP_FCLT_UN
,"float_clt_un", IREG
, FREG
, FREG
)
576 MINI_OP(OP_FCNEQ
, "float_cneq", IREG
, FREG
, FREG
)
577 MINI_OP(OP_FCGE
, "float_cge", IREG
, FREG
, FREG
)
578 MINI_OP(OP_FCLE
, "float_cle", IREG
, FREG
, FREG
)
580 MINI_OP(OP_FCEQ_MEMBASE
, "float_ceq_membase", IREG
, FREG
, IREG
)
581 MINI_OP(OP_FCGT_MEMBASE
, "float_cgt_membase", IREG
, FREG
, IREG
)
582 MINI_OP(OP_FCGT_UN_MEMBASE
,"float_cgt_un_membase", IREG
, FREG
, IREG
)
583 MINI_OP(OP_FCLT_MEMBASE
, "float_clt_membase", IREG
, FREG
, IREG
)
584 MINI_OP(OP_FCLT_UN_MEMBASE
,"float_clt_un_membase", IREG
, FREG
, IREG
)
586 MINI_OP(OP_FCONV_TO_U
, "float_conv_to_u", IREG
, FREG
, NONE
)
587 MINI_OP(OP_CKFINITE
, "ckfinite", FREG
, FREG
, NONE
)
589 /* r4 opcodes: must be in the same order as the matching CEE_ opcodes: ovfops_op_map */
590 MINI_OP(OP_RCONV_TO_U2
, "r4_conv_to_u2", IREG
, FREG
, NONE
)
591 MINI_OP(OP_RCONV_TO_U1
, "r4_conv_to_u1", IREG
, FREG
, NONE
)
592 MINI_OP(OP_RCONV_TO_I
, "r4_conv_to_i", IREG
, FREG
, NONE
)
593 MINI_OP(OP_RCONV_TO_OVF_I
,"r4_conv_to_ovf_i", IREG
, FREG
, NONE
)
594 MINI_OP(OP_RCONV_TO_OVF_U
,"r4_conv_to_ovd_u", IREG
, FREG
, NONE
)
596 /* r4 opcodes: must be in the same order as the matching CEE_ opcodes: ovfops_op_map */
597 MINI_OP(OP_RADD_OVF
, "r4_add_ovf", FREG
, FREG
, FREG
)
598 MINI_OP(OP_RADD_OVF_UN
, "r4_add_ovf_un", FREG
, FREG
, FREG
)
599 MINI_OP(OP_RMUL_OVF
, "r4_mul_ovf", FREG
, FREG
, FREG
)
600 MINI_OP(OP_RMUL_OVF_UN
, "r4_mul_ovf_un", FREG
, FREG
, FREG
)
601 MINI_OP(OP_RSUB_OVF
, "r4_sub_ovf", FREG
, FREG
, FREG
)
602 MINI_OP(OP_RSUB_OVF_UN
, "r4_sub_ovf_un", FREG
, FREG
, FREG
)
604 MINI_OP(OP_RCONV_TO_OVF_I1_UN
,"r4_conv_to_ovf_i1_un", IREG
, FREG
, NONE
)
605 MINI_OP(OP_RCONV_TO_OVF_I2_UN
,"r4_conv_to_ovf_i2_un", IREG
, FREG
, NONE
)
606 MINI_OP(OP_RCONV_TO_OVF_I4_UN
,"r4_conv_to_ovf_i4_un", IREG
, FREG
, NONE
)
607 MINI_OP(OP_RCONV_TO_OVF_I8_UN
,"r4_conv_to_ovf_i8_un", IREG
, FREG
, NONE
)
608 MINI_OP(OP_RCONV_TO_OVF_U1_UN
,"r4_conv_to_ovf_u1_un", IREG
, FREG
, NONE
)
609 MINI_OP(OP_RCONV_TO_OVF_U2_UN
,"r4_conv_to_ovf_u2_un", IREG
, FREG
, NONE
)
610 MINI_OP(OP_RCONV_TO_OVF_U4_UN
,"r4_conv_to_ovf_u4_un", IREG
, FREG
, NONE
)
611 MINI_OP(OP_RCONV_TO_OVF_U8_UN
,"r4_conv_to_ovf_u8_un", IREG
, FREG
, NONE
)
612 MINI_OP(OP_RCONV_TO_OVF_I_UN
, "r4_conv_to_ovf_i_un", IREG
, FREG
, NONE
)
613 MINI_OP(OP_RCONV_TO_OVF_U_UN
, "r4_conv_to_ovf_u_un", IREG
, FREG
, NONE
)
615 MINI_OP(OP_RCONV_TO_OVF_I1
,"r4_conv_to_ovf_i1", IREG
, FREG
, NONE
)
616 MINI_OP(OP_RCONV_TO_OVF_U1
,"r4_conv_to_ovf_u1", IREG
, FREG
, NONE
)
617 MINI_OP(OP_RCONV_TO_OVF_I2
,"r4_conv_to_ovf_i2", IREG
, FREG
, NONE
)
618 MINI_OP(OP_RCONV_TO_OVF_U2
,"r4_conv_to_ovf_u2", IREG
, FREG
, NONE
)
619 MINI_OP(OP_RCONV_TO_OVF_I4
,"r4_conv_to_ovf_i4", IREG
, FREG
, NONE
)
620 MINI_OP(OP_RCONV_TO_OVF_U4
,"r4_conv_to_ovf_u4", IREG
, FREG
, NONE
)
621 MINI_OP(OP_RCONV_TO_OVF_I8
,"r4_conv_to_ovf_i8", IREG
, FREG
, NONE
)
622 MINI_OP(OP_RCONV_TO_OVF_U8
,"r4_conv_to_ovf_u8", IREG
, FREG
, NONE
)
624 /* r4 opcodes: must be in the same order as the matching CEE_ opcodes: ceqops_op_map */
625 MINI_OP(OP_RCEQ
, "r4_ceq", IREG
, FREG
, FREG
)
626 MINI_OP(OP_RCGT
, "r4_cgt", IREG
, FREG
, FREG
)
627 MINI_OP(OP_RCGT_UN
,"r4_cgt_un", IREG
, FREG
, FREG
)
628 MINI_OP(OP_RCLT
, "r4_clt", IREG
, FREG
, FREG
)
629 MINI_OP(OP_RCLT_UN
,"r4_clt_un", IREG
, FREG
, FREG
)
631 MINI_OP(OP_RCNEQ
, "r4_cneq", IREG
, FREG
, FREG
)
632 MINI_OP(OP_RCGE
, "r4_cge", IREG
, FREG
, FREG
)
633 MINI_OP(OP_RCLE
, "r4_cle", IREG
, FREG
, FREG
)
635 /* Return the low 32 bits of a double vreg */
636 MINI_OP(OP_FGETLOW32
, "float_getlow32", IREG
, FREG
, NONE
)
637 /* Return the high 32 bits of a double vreg */
638 MINI_OP(OP_FGETHIGH32
, "float_gethigh32", IREG
, FREG
, NONE
)
640 MINI_OP(OP_JUMP_TABLE
, "jump_table", IREG
, NONE
, NONE
)
643 MINI_OP(OP_AOTCONST
, "aotconst", IREG
, NONE
, NONE
)
644 MINI_OP(OP_PATCH_INFO
, "patch_info", NONE
, NONE
, NONE
)
645 MINI_OP(OP_GOT_ENTRY
, "got_entry", IREG
, IREG
, NONE
)
647 /* exception related opcodes */
648 MINI_OP(OP_CALL_HANDLER
, "call_handler", NONE
, NONE
, NONE
)
649 MINI_OP(OP_START_HANDLER
, "start_handler", NONE
, NONE
, NONE
)
650 MINI_OP(OP_ENDFILTER
, "endfilter", NONE
, IREG
, NONE
)
651 MINI_OP(OP_ENDFINALLY
, "endfinally", NONE
, NONE
, NONE
)
653 * Returns the exception object passed to catch clauses in
654 * by the EH code in a register.
656 MINI_OP(OP_GET_EX_OBJ
, "get_ex_obj", IREG
, NONE
, NONE
)
658 /* inline (long)int * (long)int */
659 MINI_OP(OP_BIGMUL
, "bigmul", LREG
, IREG
, IREG
)
660 MINI_OP(OP_BIGMUL_UN
, "bigmul_un", LREG
, IREG
, IREG
)
661 MINI_OP(OP_IMIN_UN
, "int_min_un", IREG
, IREG
, IREG
)
662 MINI_OP(OP_IMAX_UN
, "int_max_un", IREG
, IREG
, IREG
)
663 MINI_OP(OP_LMIN_UN
, "long_min_un", LREG
, LREG
, LREG
)
664 MINI_OP(OP_LMAX_UN
, "long_max_un", LREG
, LREG
, LREG
)
666 MINI_OP(OP_MIN
, "min", IREG
, IREG
, IREG
)
667 MINI_OP(OP_MAX
, "max", IREG
, IREG
, IREG
)
669 MINI_OP(OP_IMIN
, "int_min", IREG
, IREG
, IREG
)
670 MINI_OP(OP_IMAX
, "int_max", IREG
, IREG
, IREG
)
671 MINI_OP(OP_LMIN
, "long_min", LREG
, LREG
, LREG
)
672 MINI_OP(OP_LMAX
, "long_max", LREG
, LREG
, LREG
)
673 MINI_OP(OP_RMAX
, "rmax", FREG
, FREG
, FREG
)
674 MINI_OP(OP_RMIN
, "rmin", FREG
, FREG
, FREG
)
675 MINI_OP(OP_RPOW
, "rpow", FREG
, FREG
, FREG
)
676 MINI_OP(OP_FMAX
, "fmax", FREG
, FREG
, FREG
)
677 MINI_OP(OP_FMIN
, "fmin", FREG
, FREG
, FREG
)
678 MINI_OP(OP_FPOW
, "fpow", FREG
, FREG
, FREG
)
679 MINI_OP(OP_RCOPYSIGN
,"rcopysign", FREG
, FREG
, FREG
)
680 MINI_OP(OP_FCOPYSIGN
,"fcopysign", FREG
, FREG
, FREG
)
682 /* opcodes most architecture have */
683 MINI_OP(OP_ADC
, "adc", IREG
, IREG
, IREG
)
684 MINI_OP(OP_ADC_IMM
, "adc_imm", IREG
, IREG
, NONE
)
685 MINI_OP(OP_SBB
, "sbb", IREG
, IREG
, IREG
)
686 MINI_OP(OP_SBB_IMM
, "sbb_imm", IREG
, IREG
, NONE
)
687 MINI_OP(OP_ADDCC
, "addcc", IREG
, IREG
, IREG
)
688 MINI_OP(OP_ADDCC_IMM
, "addcc_imm", IREG
, IREG
, NONE
)
689 MINI_OP(OP_SUBCC
, "subcc", IREG
, IREG
, IREG
)
690 MINI_OP(OP_SUBCC_IMM
, "subcc_imm", IREG
, IREG
, NONE
)
691 MINI_OP(OP_BR_REG
, "br_reg", NONE
, IREG
, NONE
)
692 MINI_OP(OP_SEXT_I1
, "sext_i1", IREG
, IREG
, NONE
)
693 MINI_OP(OP_SEXT_I2
, "sext_i2", IREG
, IREG
, NONE
)
694 MINI_OP(OP_SEXT_I4
, "sext_i4", LREG
, IREG
, NONE
)
695 MINI_OP(OP_ZEXT_I1
, "zext_i1", IREG
, IREG
, NONE
)
696 MINI_OP(OP_ZEXT_I2
, "zext_i2", IREG
, IREG
, NONE
)
697 MINI_OP(OP_ZEXT_I4
, "zext_i4", LREG
, IREG
, NONE
)
698 MINI_OP(OP_CNE
, "cne", NONE
, NONE
, NONE
)
699 MINI_OP(OP_TRUNC_I4
, "trunc_i4", IREG
, LREG
, NONE
)
700 /* to implement the upper half of long32 add and sub */
701 MINI_OP(OP_ADD_OVF_CARRY
, "add_ovf_carry", IREG
, IREG
, IREG
)
702 MINI_OP(OP_SUB_OVF_CARRY
, "sub_ovf_carry", IREG
, IREG
, IREG
)
703 MINI_OP(OP_ADD_OVF_UN_CARRY
, "add_ovf_un_carry", IREG
, IREG
, IREG
)
704 MINI_OP(OP_SUB_OVF_UN_CARRY
, "sub_ovf_un_carry", IREG
, IREG
, IREG
)
706 /* instructions with explicit long arguments to deal with 64-bit ilp32 machines */
707 MINI_OP(OP_LADDCC
, "laddcc", LREG
, LREG
, LREG
)
708 MINI_OP(OP_LSUBCC
, "lsubcc", LREG
, LREG
, LREG
)
711 /* FP functions usually done by the CPU */
712 MINI_OP(OP_SIN
, "sin", FREG
, FREG
, NONE
)
713 MINI_OP(OP_COS
, "cos", FREG
, FREG
, NONE
)
714 MINI_OP(OP_ABS
, "abs", FREG
, FREG
, NONE
)
715 MINI_OP(OP_TAN
, "tan", FREG
, FREG
, NONE
)
716 MINI_OP(OP_ATAN
, "atan", FREG
, FREG
, NONE
)
717 MINI_OP(OP_SQRT
, "sqrt", FREG
, FREG
, NONE
)
718 MINI_OP(OP_ROUND
, "round", FREG
, FREG
, NONE
)
719 MINI_OP(OP_CEIL
, "ceil", FREG
, FREG
, NONE
)
720 MINI_OP(OP_FLOOR
, "floor", FREG
, FREG
, NONE
)
721 MINI_OP3(OP_FMA
, "fma", FREG
, FREG
, FREG
, FREG
)
722 MINI_OP(OP_SINF
, "sinf", FREG
, FREG
, NONE
)
723 MINI_OP(OP_COSF
, "cosf", FREG
, FREG
, NONE
)
724 MINI_OP(OP_EXPF
, "expf", FREG
, FREG
, NONE
)
725 MINI_OP(OP_EXP
, "exp", FREG
, FREG
, NONE
)
726 MINI_OP(OP_LOG
, "log", FREG
, FREG
, NONE
)
727 MINI_OP(OP_LOG2
, "log2", FREG
, FREG
, NONE
)
728 MINI_OP(OP_LOG2F
, "log2f", FREG
, FREG
, NONE
)
729 MINI_OP(OP_LOG10
, "log10", FREG
, FREG
, NONE
)
730 MINI_OP(OP_LOG10F
, "log10f", FREG
, FREG
, NONE
)
731 MINI_OP(OP_TRUNC
, "trunc", FREG
, FREG
, NONE
)
732 MINI_OP(OP_TRUNCF
, "truncf", FREG
, FREG
, NONE
)
733 MINI_OP(OP_ABSF
, "absf", FREG
, FREG
, NONE
)
734 MINI_OP(OP_SQRTF
, "sqrtf", FREG
, FREG
, NONE
)
735 MINI_OP(OP_CEILF
, "ceilf", FREG
, FREG
, NONE
)
736 MINI_OP(OP_FLOORF
, "floorf", FREG
, FREG
, NONE
)
737 MINI_OP3(OP_FMAF
, "fmaf", FREG
, FREG
, FREG
, FREG
)
739 /* Operations that can be computed at constants at JIT time */
740 MINI_OP(OP_ACOS
, "acos", FREG
, FREG
, NONE
)
741 MINI_OP(OP_SINH
, "sinh", FREG
, FREG
, NONE
)
742 MINI_OP(OP_ACOSH
, "acosh", FREG
, FREG
, NONE
)
743 MINI_OP(OP_ASIN
, "asin", FREG
, FREG
, NONE
)
744 MINI_OP(OP_ASINH
, "asinh", FREG
, FREG
, NONE
)
745 MINI_OP(OP_ATANH
, "atanh2", FREG
, FREG
, NONE
)
746 MINI_OP(OP_CBRT
, "cbrt", FREG
, FREG
, NONE
)
747 MINI_OP(OP_COSH
, "cosh", FREG
, FREG
, NONE
)
748 MINI_OP(OP_TANH
, "tanh", FREG
, FREG
, NONE
)
750 /* to optimize strings */
751 MINI_OP(OP_STRLEN
, "strlen", IREG
, IREG
, NONE
)
752 MINI_OP(OP_NEWARR
, "newarr", IREG
, IREG
, NONE
)
753 /* Load a readonly length field from [sreg1+inst_imm] */
754 MINI_OP(OP_LDLEN
, "ldlen", IREG
, IREG
, NONE
)
755 /* inst_p0 is the exception name to throw or NULL */
756 MINI_OP(OP_BOUNDS_CHECK
, "bounds_check", NONE
, IREG
, IREG
)
758 MINI_OP(OP_ISINST
, "isinst", IREG
, IREG
, NONE
)
759 MINI_OP(OP_CASTCLASS
, "castclass", IREG
, IREG
, NONE
)
760 /* get adress of element in a 2D array */
761 MINI_OP(OP_LDELEMA2D
, "ldelema2d", NONE
, NONE
, NONE
)
762 /* inlined small memcpy with constant length */
763 MINI_OP(OP_MEMCPY
, "memcpy", NONE
, NONE
, NONE
)
764 /* inlined small memset with constant length */
765 MINI_OP(OP_MEMSET
, "memset", NONE
, NONE
, NONE
)
766 MINI_OP(OP_SAVE_LMF
, "save_lmf", NONE
, NONE
, NONE
)
767 MINI_OP(OP_RESTORE_LMF
, "restore_lmf", NONE
, NONE
, NONE
)
769 MINI_OP3(OP_MEMMOVE
, "memmove", NONE
, IREG
, IREG
, IREG
)
772 MINI_OP(OP_CARD_TABLE_WBARRIER
, "card_table_wbarrier", NONE
, IREG
, IREG
)
774 /* arch-dep tls access */
775 MINI_OP(OP_TLS_GET
, "tls_get", IREG
, NONE
, NONE
)
776 MINI_OP(OP_TLS_GET_REG
, "tls_get_reg", IREG
, IREG
, NONE
)
777 /* inst_offset contains the TLS offset */
778 MINI_OP(OP_TLS_SET
, "tls_set", NONE
, IREG
, NONE
)
779 MINI_OP(OP_TLS_SET_REG
, "tls_set_reg", NONE
, IREG
, IREG
)
781 MINI_OP(OP_LOAD_GOTADDR
, "load_gotaddr", IREG
, NONE
, NONE
)
782 MINI_OP(OP_DUMMY_USE
, "dummy_use", NONE
, IREG
, NONE
)
783 MINI_OP(OP_NOT_REACHED
, "not_reached", NONE
, NONE
, NONE
)
784 MINI_OP(OP_NOT_NULL
, "not_null", NONE
, IREG
, NONE
)
788 #if defined(TARGET_X86) || defined(TARGET_AMD64) || defined(TARGET_WASM)
790 MINI_OP(OP_ADDPS
, "addps", XREG
, XREG
, XREG
)
791 MINI_OP(OP_DIVPS
, "divps", XREG
, XREG
, XREG
)
792 MINI_OP(OP_MULPS
, "mulps", XREG
, XREG
, XREG
)
793 MINI_OP(OP_SUBPS
, "subps", XREG
, XREG
, XREG
)
794 MINI_OP(OP_MAXPS
, "maxps", XREG
, XREG
, XREG
)
795 MINI_OP(OP_MINPS
, "minps", XREG
, XREG
, XREG
)
796 MINI_OP(OP_COMPPS
, "compps", XREG
, XREG
, XREG
)
797 MINI_OP(OP_ANDPS
, "andps", XREG
, XREG
, XREG
)
798 MINI_OP(OP_ANDNPS
, "andnps", XREG
, XREG
, XREG
)
799 MINI_OP(OP_ORPS
, "orps", XREG
, XREG
, XREG
)
800 MINI_OP(OP_XORPS
, "xorps", XREG
, XREG
, XREG
)
801 MINI_OP(OP_HADDPS
, "haddps", XREG
, XREG
, XREG
)
802 MINI_OP(OP_HSUBPS
, "hsubps", XREG
, XREG
, XREG
)
803 MINI_OP(OP_ADDSUBPS
, "addsubps", XREG
, XREG
, XREG
)
804 MINI_OP(OP_DUPPS_LOW
, "dupps_low", XREG
, XREG
, NONE
)
805 MINI_OP(OP_DUPPS_HIGH
, "dupps_high", XREG
, XREG
, NONE
)
807 MINI_OP(OP_RSQRTPS
, "rsqrtps", XREG
, XREG
, NONE
)
808 MINI_OP(OP_SQRTPS
, "sqrtps", XREG
, XREG
, NONE
)
809 MINI_OP(OP_RCPPS
, "rcpps", XREG
, XREG
, NONE
)
811 MINI_OP(OP_PSHUFLEW_HIGH
, "pshuflew_high", XREG
, XREG
, NONE
)
812 MINI_OP(OP_PSHUFLEW_LOW
, "pshuflew_low", XREG
, XREG
, NONE
)
813 MINI_OP(OP_PSHUFLED
, "pshufled", XREG
, XREG
, NONE
)
814 MINI_OP(OP_SHUFPS
, "shufps", XREG
, XREG
, XREG
)
815 MINI_OP(OP_SHUFPD
, "shufpd", XREG
, XREG
, XREG
)
817 MINI_OP(OP_ADDPD
, "addpd", XREG
, XREG
, XREG
)
818 MINI_OP(OP_DIVPD
, "divpd", XREG
, XREG
, XREG
)
819 MINI_OP(OP_MULPD
, "mulpd", XREG
, XREG
, XREG
)
820 MINI_OP(OP_SUBPD
, "subpd", XREG
, XREG
, XREG
)
821 MINI_OP(OP_MAXPD
, "maxpd", XREG
, XREG
, XREG
)
822 MINI_OP(OP_MINPD
, "minpd", XREG
, XREG
, XREG
)
823 MINI_OP(OP_COMPPD
, "comppd", XREG
, XREG
, XREG
)
824 MINI_OP(OP_ANDPD
, "andpd", XREG
, XREG
, XREG
)
825 MINI_OP(OP_ANDNPD
, "andnpd", XREG
, XREG
, XREG
)
826 MINI_OP(OP_ORPD
, "orpd", XREG
, XREG
, XREG
)
827 MINI_OP(OP_XORPD
, "xorpd", XREG
, XREG
, XREG
)
828 MINI_OP(OP_HADDPD
, "haddpd", XREG
, XREG
, XREG
)
829 MINI_OP(OP_HSUBPD
, "hsubpd", XREG
, XREG
, XREG
)
830 MINI_OP(OP_ADDSUBPD
, "addsubpd", XREG
, XREG
, XREG
)
831 MINI_OP(OP_DUPPD
, "duppd", XREG
, XREG
, NONE
)
833 MINI_OP(OP_SQRTPD
, "sqrtpd", XREG
, XREG
, NONE
)
835 MINI_OP(OP_EXTRACT_MASK
, "extract_mask", IREG
, XREG
, NONE
)
837 MINI_OP(OP_PAND
, "pand", XREG
, XREG
, XREG
)
838 MINI_OP(OP_PANDN
, "pandn", XREG
, XREG
, XREG
)
839 MINI_OP(OP_POR
, "por", XREG
, XREG
, XREG
)
840 MINI_OP(OP_PXOR
, "pxor", XREG
, XREG
, XREG
)
842 MINI_OP(OP_PADDB
, "paddb", XREG
, XREG
, XREG
)
843 MINI_OP(OP_PADDW
, "paddw", XREG
, XREG
, XREG
)
844 MINI_OP(OP_PADDD
, "paddd", XREG
, XREG
, XREG
)
845 MINI_OP(OP_PADDQ
, "paddq", XREG
, XREG
, XREG
)
847 MINI_OP(OP_PSUBB
, "psubb", XREG
, XREG
, XREG
)
848 MINI_OP(OP_PSUBW
, "psubw", XREG
, XREG
, XREG
)
849 MINI_OP(OP_PSUBD
, "psubd", XREG
, XREG
, XREG
)
850 MINI_OP(OP_PSUBQ
, "psubq", XREG
, XREG
, XREG
)
852 MINI_OP(OP_PMAXB_UN
, "pmaxb_un", XREG
, XREG
, XREG
)
853 MINI_OP(OP_PMAXW_UN
, "pmaxw_un", XREG
, XREG
, XREG
)
854 MINI_OP(OP_PMAXD_UN
, "pmaxd_un", XREG
, XREG
, XREG
)
856 MINI_OP(OP_PMAXB
, "pmaxb", XREG
, XREG
, XREG
)
857 MINI_OP(OP_PMAXW
, "pmaxw", XREG
, XREG
, XREG
)
858 MINI_OP(OP_PMAXD
, "pmaxd", XREG
, XREG
, XREG
)
860 MINI_OP(OP_PAVGB_UN
, "pavgb_un", XREG
, XREG
, XREG
)
861 MINI_OP(OP_PAVGW_UN
, "pavgw_un", XREG
, XREG
, XREG
)
863 MINI_OP(OP_PMINB_UN
, "pminb_un", XREG
, XREG
, XREG
)
864 MINI_OP(OP_PMINW_UN
, "pminw_un", XREG
, XREG
, XREG
)
865 MINI_OP(OP_PMIND_UN
, "pmind_un", XREG
, XREG
, XREG
)
867 MINI_OP(OP_PMINB
, "pminb", XREG
, XREG
, XREG
)
868 MINI_OP(OP_PMINW
, "pminw", XREG
, XREG
, XREG
)
869 MINI_OP(OP_PMIND
, "pmind", XREG
, XREG
, XREG
)
871 MINI_OP(OP_PCMPEQB
, "pcmpeqb", XREG
, XREG
, XREG
)
872 MINI_OP(OP_PCMPEQW
, "pcmpeqw", XREG
, XREG
, XREG
)
873 MINI_OP(OP_PCMPEQD
, "pcmpeqd", XREG
, XREG
, XREG
)
874 MINI_OP(OP_PCMPEQQ
, "pcmpeqq", XREG
, XREG
, XREG
)
876 MINI_OP(OP_PCMPGTB
, "pcmpgtb", XREG
, XREG
, XREG
)
877 MINI_OP(OP_PCMPGTW
, "pcmpgtw", XREG
, XREG
, XREG
)
878 MINI_OP(OP_PCMPGTD
, "pcmpgtd", XREG
, XREG
, XREG
)
879 MINI_OP(OP_PCMPGTQ
, "pcmpgtq", XREG
, XREG
, XREG
)
881 MINI_OP(OP_PSUM_ABS_DIFF
, "psum_abs_diff", XREG
, XREG
, XREG
)
883 MINI_OP(OP_UNPACK_LOWB
, "unpack_lowb", XREG
, XREG
, XREG
)
884 MINI_OP(OP_UNPACK_LOWW
, "unpack_loww", XREG
, XREG
, XREG
)
885 MINI_OP(OP_UNPACK_LOWD
, "unpack_lowd", XREG
, XREG
, XREG
)
886 MINI_OP(OP_UNPACK_LOWQ
, "unpack_lowq", XREG
, XREG
, XREG
)
887 MINI_OP(OP_UNPACK_LOWPS
, "unpack_lowps", XREG
, XREG
, XREG
)
888 MINI_OP(OP_UNPACK_LOWPD
, "unpack_lowpd", XREG
, XREG
, XREG
)
890 MINI_OP(OP_UNPACK_HIGHB
, "unpack_highb", XREG
, XREG
, XREG
)
891 MINI_OP(OP_UNPACK_HIGHW
, "unpack_highw", XREG
, XREG
, XREG
)
892 MINI_OP(OP_UNPACK_HIGHD
, "unpack_highd", XREG
, XREG
, XREG
)
893 MINI_OP(OP_UNPACK_HIGHQ
, "unpack_highq", XREG
, XREG
, XREG
)
894 MINI_OP(OP_UNPACK_HIGHPS
, "unpack_highps", XREG
, XREG
, XREG
)
895 MINI_OP(OP_UNPACK_HIGHPD
, "unpack_highpd", XREG
, XREG
, XREG
)
897 MINI_OP(OP_PACKW
, "packw", XREG
, XREG
, XREG
)
898 MINI_OP(OP_PACKD
, "packd", XREG
, XREG
, XREG
)
900 MINI_OP(OP_PACKW_UN
, "packw_un", XREG
, XREG
, XREG
)
901 MINI_OP(OP_PACKD_UN
, "packd_un", XREG
, XREG
, XREG
)
903 MINI_OP(OP_PADDB_SAT
, "paddb_sat", XREG
, XREG
, XREG
)
904 MINI_OP(OP_PADDB_SAT_UN
, "paddb_sat_un", XREG
, XREG
, XREG
)
906 MINI_OP(OP_PADDW_SAT
, "paddw_sat", XREG
, XREG
, XREG
)
907 MINI_OP(OP_PADDW_SAT_UN
, "paddw_sat_un", XREG
, XREG
, XREG
)
909 MINI_OP(OP_PSUBB_SAT
, "psubb_sat", XREG
, XREG
, XREG
)
910 MINI_OP(OP_PSUBB_SAT_UN
, "psubb_sat_un", XREG
, XREG
, XREG
)
912 MINI_OP(OP_PSUBW_SAT
, "psubw_sat", XREG
, XREG
, XREG
)
913 MINI_OP(OP_PSUBW_SAT_UN
, "psubw_sat_un", XREG
, XREG
, XREG
)
915 MINI_OP(OP_PMULW
, "pmulw", XREG
, XREG
, XREG
)
916 MINI_OP(OP_PMULD
, "pmuld", XREG
, XREG
, XREG
)
917 /* Multiplies two 32 bit numbers into a 64 bit one */
918 MINI_OP(OP_PMULQ
, "pmulq", XREG
, XREG
, XREG
)
920 MINI_OP(OP_PMULW_HIGH_UN
, "pmulw_high_un", XREG
, XREG
, XREG
)
921 MINI_OP(OP_PMULW_HIGH
, "pmulw_high", XREG
, XREG
, XREG
)
923 /*SSE2 Shift ops must have the _reg version right after as code depends on this ordering.*/
924 MINI_OP(OP_PSHRW
, "pshrw", XREG
, XREG
, NONE
)
925 MINI_OP(OP_PSHRW_REG
, "pshrw_reg", XREG
, XREG
, XREG
)
927 MINI_OP(OP_PSARW
, "psarw", XREG
, XREG
, NONE
)
928 MINI_OP(OP_PSARW_REG
, "psarw_reg", XREG
, XREG
, XREG
)
930 MINI_OP(OP_PSHLW
, "pshlw", XREG
, XREG
, NONE
)
931 MINI_OP(OP_PSHLW_REG
, "pshlw_reg", XREG
, XREG
, XREG
)
933 MINI_OP(OP_PSHRD
, "pshrd", XREG
, XREG
, NONE
)
934 MINI_OP(OP_PSHRD_REG
, "pshrd_reg", XREG
, XREG
, XREG
)
936 MINI_OP(OP_PSHRQ
, "pshrq", XREG
, XREG
, NONE
)
937 MINI_OP(OP_PSHRQ_REG
, "pshrq_reg", XREG
, XREG
, XREG
)
939 MINI_OP(OP_PSARD
, "psard", XREG
, XREG
, NONE
)
940 MINI_OP(OP_PSARD_REG
, "psard_reg", XREG
, XREG
, XREG
)
942 MINI_OP(OP_PSHLD
, "pshld", XREG
, XREG
, NONE
)
943 MINI_OP(OP_PSHLD_REG
, "pshld_reg", XREG
, XREG
, XREG
)
945 MINI_OP(OP_PSHLQ
, "pshlq", XREG
, XREG
, NONE
)
946 MINI_OP(OP_PSHLQ_REG
, "pshlq_reg", XREG
, XREG
, XREG
)
948 MINI_OP(OP_EXTRACT_I4
, "extract_i4", IREG
, XREG
, NONE
)
949 MINI_OP(OP_ICONV_TO_R4_RAW
, "iconv_to_r4_raw", FREG
, IREG
, NONE
)
951 MINI_OP(OP_EXTRACT_I2
, "extract_i2", IREG
, XREG
, NONE
)
952 MINI_OP(OP_EXTRACT_U2
, "extract_u2", IREG
, XREG
, NONE
)
953 MINI_OP(OP_EXTRACT_I1
, "extract_i1", IREG
, XREG
, NONE
)
954 MINI_OP(OP_EXTRACT_U1
, "extract_u1", IREG
, XREG
, NONE
)
955 MINI_OP(OP_EXTRACT_R4
, "extract_r4", FREG
, XREG
, NONE
)
956 MINI_OP(OP_EXTRACT_R8
, "extract_r8", FREG
, XREG
, NONE
)
957 MINI_OP(OP_EXTRACT_I8
, "extract_i8", LREG
, XREG
, NONE
)
960 MINI_OP(OP_INSERT_I1
, "insert_i1", XREG
, XREG
, IREG
)
961 MINI_OP(OP_INSERT_I4
, "insert_i4", XREG
, XREG
, IREG
)
962 MINI_OP(OP_INSERT_I8
, "insert_i8", XREG
, XREG
, LREG
)
963 MINI_OP(OP_INSERT_R4
, "insert_r4", XREG
, XREG
, FREG
)
964 MINI_OP(OP_INSERT_R8
, "insert_r8", XREG
, XREG
, FREG
)
966 MINI_OP(OP_INSERT_I2
, "insert_i2", XREG
, XREG
, IREG
)
968 MINI_OP(OP_EXTRACTX_U2
, "extractx_u2", IREG
, XREG
, NONE
)
970 /*these slow ops are modeled around the availability of a fast 2 bytes insert op*/
971 /*insertx_u1_slow takes old value and new value as source regs */
972 MINI_OP(OP_INSERTX_U1_SLOW
, "insertx_u1_slow", XREG
, IREG
, IREG
)
973 /*insertx_i4_slow takes target xreg and new value as source regs */
974 MINI_OP(OP_INSERTX_I4_SLOW
, "insertx_i4_slow", XREG
, XREG
, IREG
)
976 MINI_OP(OP_INSERTX_R4_SLOW
, "insertx_r4_slow", XREG
, XREG
, FREG
)
977 MINI_OP(OP_INSERTX_R8_SLOW
, "insertx_r8_slow", XREG
, XREG
, FREG
)
978 MINI_OP(OP_INSERTX_I8_SLOW
, "insertx_i8_slow", XREG
, XREG
, LREG
)
980 MINI_OP(OP_FCONV_TO_R4_X
, "fconv_to_r4_x", XREG
, FREG
, NONE
)
981 MINI_OP(OP_FCONV_TO_R8_X
, "fconv_to_r8_x", XREG
, FREG
, NONE
)
982 MINI_OP(OP_XCONV_R8_TO_I4
, "xconv_r8_to_i4", IREG
, XREG
, NONE
)
983 MINI_OP(OP_ICONV_TO_X
, "iconv_to_x", XREG
, IREG
, NONE
)
985 MINI_OP(OP_EXPAND_I1
, "expand_i1", XREG
, IREG
, NONE
)
986 MINI_OP(OP_EXPAND_I2
, "expand_i2", XREG
, IREG
, NONE
)
987 MINI_OP(OP_EXPAND_I4
, "expand_i4", XREG
, IREG
, NONE
)
988 MINI_OP(OP_EXPAND_R4
, "expand_r4", XREG
, FREG
, NONE
)
989 MINI_OP(OP_EXPAND_I8
, "expand_i8", XREG
, IREG
, NONE
)
990 MINI_OP(OP_EXPAND_R8
, "expand_r8", XREG
, FREG
, NONE
)
992 MINI_OP(OP_PREFETCH_MEMBASE
, "prefetch_membase", NONE
, IREG
, NONE
)
994 MINI_OP(OP_CVTDQ2PD
, "cvtdq2pd", XREG
, XREG
, NONE
)
995 MINI_OP(OP_CVTDQ2PS
, "cvtdq2ps", XREG
, XREG
, NONE
)
996 MINI_OP(OP_CVTPD2DQ
, "cvtpd2dq", XREG
, XREG
, NONE
)
997 MINI_OP(OP_CVTPD2PS
, "cvtpd2ps", XREG
, XREG
, NONE
)
998 MINI_OP(OP_CVTPS2DQ
, "cvtps2dq", XREG
, XREG
, NONE
)
999 MINI_OP(OP_CVTPS2PD
, "cvtps2pd", XREG
, XREG
, NONE
)
1000 MINI_OP(OP_CVTTPD2DQ
, "cvttpd2dq", XREG
, XREG
, NONE
)
1001 MINI_OP(OP_CVTTPS2DQ
, "cvttps2dq", XREG
, XREG
, NONE
)
1003 /* r4 dot product */
1004 /* multiply all 4 single precision float elements, add them together, and store the result to the lowest element */
1005 MINI_OP(OP_DPPS
, "dpps", XREG
, XREG
, XREG
)
1008 /* inst_c1 is target type */
1009 MINI_OP(OP_SSE_LOADU
, "sse_loadu", XREG
, XREG
, NONE
)
1010 MINI_OP(OP_SSE_MOVMSK
, "sse_movmsk", IREG
, XREG
, NONE
)
1011 MINI_OP(OP_SSE_STORE
, "sse_store", NONE
, XREG
, XREG
)
1012 MINI_OP(OP_SSE_STORES
, "sse_stores", NONE
, XREG
, XREG
)
1013 MINI_OP(OP_SSE_MOVS
, "sse_movs", XREG
, XREG
, NONE
)
1014 MINI_OP(OP_SSE_MOVS2
, "sse_movs2", XREG
, XREG
, XREG
)
1015 MINI_OP(OP_SSE_MOVEHL
, "sse_movehl", XREG
, XREG
, XREG
)
1016 MINI_OP(OP_SSE_MOVELH
, "sse_movelh", XREG
, XREG
, XREG
)
1017 MINI_OP(OP_SSE_UNPACKLO
, "sse_unpacklo", XREG
, XREG
, XREG
)
1018 MINI_OP(OP_SSE_UNPACKHI
, "sse_unpackhi", XREG
, XREG
, XREG
)
1019 MINI_OP(OP_SSE_SHUFFLE
, "sse_shuffle", XREG
, XREG
, XREG
)
1020 MINI_OP(OP_SSE_AND
, "sse_and", XREG
, XREG
, XREG
)
1021 MINI_OP(OP_SSE_OR
, "sse_or", XREG
, XREG
, XREG
)
1022 MINI_OP(OP_SSE_XOR
, "sse_xor", XREG
, XREG
, XREG
)
1023 MINI_OP(OP_SSE_ANDN
, "sse_andn", XREG
, XREG
, XREG
)
1026 MINI_OP(OP_SSE2_PACKUS
, "sse2_packus", XREG
, XREG
, XREG
)
1027 MINI_OP(OP_SSE2_SRLI
, "sse2_srli", XREG
, XREG
, XREG
)
1028 MINI_OP(OP_SSE2_SHUFFLE
, "sse2_shuffle", XREG
, XREG
, XREG
)
1031 MINI_OP(OP_SSE3_MOVDDUP
, "sse3_movddup", XREG
, XREG
, NONE
)
1034 MINI_OP(OP_SSSE3_SHUFFLE
, "ssse3_shuffle", XREG
, XREG
, XREG
)
1037 /* inst_c0 is the rounding mode: 0 = round, 1 = floor, 2 = ceiling */
1038 MINI_OP(OP_SSE41_ROUNDPD
, "roundpd", XREG
, XREG
, NONE
)
1039 MINI_OP(OP_SSE41_ROUNDSS
, "roundss", XREG
, XREG
, NONE
)
1040 MINI_OP3(OP_SSE41_INSERT
, "sse41_insert", XREG
, XREG
, XREG
, IREG
)
1041 MINI_OP(OP_SSE41_PTESTZ
, "sse41_ptestz", IREG
, XREG
, XREG
)
1044 /* Count trailing zeroes, return 32/64 if the input is 0 */
1045 MINI_OP(OP_CTTZ32
, "cttz32", IREG
, IREG
, NONE
)
1046 MINI_OP(OP_CTTZ64
, "cttz64", LREG
, LREG
, NONE
)
1047 MINI_OP(OP_BEXTR32
, "bextr32", IREG
, IREG
, IREG
)
1048 MINI_OP(OP_BEXTR64
, "bextr64", LREG
, LREG
, LREG
)
1051 MINI_OP(OP_BZHI32
, "bzhi32", IREG
, IREG
, IREG
)
1052 MINI_OP(OP_BZHI64
, "bzhi64", LREG
, LREG
, LREG
)
1053 MINI_OP(OP_PEXT32
, "pext32", IREG
, IREG
, IREG
)
1054 MINI_OP(OP_PEXT64
, "pext64", LREG
, LREG
, LREG
)
1055 MINI_OP(OP_PDEP32
, "pdep32", IREG
, IREG
, IREG
)
1056 MINI_OP(OP_PDEP64
, "pdep64", LREG
, LREG
, LREG
)
1057 MINI_OP(OP_MULX_H32
, "mulxh32", IREG
, IREG
, IREG
)
1058 MINI_OP(OP_MULX_H64
, "mulxh64", LREG
, LREG
, LREG
)
1059 MINI_OP3(OP_MULX_HL32
, "mulxhl32", IREG
, IREG
, IREG
, IREG
)
1060 MINI_OP3(OP_MULX_HL64
, "mulxhl64", LREG
, LREG
, LREG
, LREG
)
1064 MINI_OP(OP_CREATE_SCALAR_UNSAFE
, "create_scalar_unsafe", XREG
, XREG
, NONE
)
1066 MINI_OP(OP_XMOVE
, "xmove", XREG
, XREG
, NONE
)
1067 MINI_OP(OP_XZERO
, "xzero", XREG
, NONE
, NONE
)
1068 MINI_OP(OP_XONES
, "xones", XREG
, NONE
, NONE
)
1069 MINI_OP(OP_XPHI
, "xphi", XREG
, NONE
, NONE
)
1072 * These are used for efficient implementation of the
1073 * atomic methods on Interlocked, Volatile, and Thread.
1074 * This is done only on architectures that support it,
1075 * as per mono_arch_opcode_supported ().
1077 * Note that while the 32-bit variants are used on
1078 * both 32-bit and 64-bit systems, the 64-bit variants
1079 * are only used if the system is 64-bit. If that is
1080 * not the case, the fallback code in the runtime is
1081 * used instead. This is done because decomposing the
1082 * 64-bit variants to instructions operating on 32-bit
1083 * registers is very complicated on some architectures.
1085 * For memory_barrier and load/store instructions, the
1086 * inst.backend.memory_barrier_kind field indicates
1087 * which semantics to use.
1089 * Where relevant, all of these return the new value at
1090 * the given memory location after performing the
1094 MINI_OP(OP_MEMORY_BARRIER
, "memory_barrier", NONE
, NONE
, NONE
)
1096 MINI_OP(OP_ATOMIC_LOAD_I1
, "atomic_load_i1", IREG
, IREG
, NONE
)
1097 MINI_OP(OP_ATOMIC_LOAD_I2
, "atomic_load_i2", IREG
, IREG
, NONE
)
1098 MINI_OP(OP_ATOMIC_LOAD_I4
, "atomic_load_i4", IREG
, IREG
, NONE
)
1099 MINI_OP(OP_ATOMIC_LOAD_I8
, "atomic_load_i8", IREG
, IREG
, NONE
)
1100 MINI_OP(OP_ATOMIC_LOAD_U1
, "atomic_load_u1", IREG
, IREG
, NONE
)
1101 MINI_OP(OP_ATOMIC_LOAD_U2
, "atomic_load_u2", IREG
, IREG
, NONE
)
1102 MINI_OP(OP_ATOMIC_LOAD_U4
, "atomic_load_u4", IREG
, IREG
, NONE
)
1103 MINI_OP(OP_ATOMIC_LOAD_U8
, "atomic_load_u8", IREG
, IREG
, NONE
)
1104 MINI_OP(OP_ATOMIC_LOAD_R4
, "atomic_load_r4", FREG
, IREG
, NONE
)
1105 MINI_OP(OP_ATOMIC_LOAD_R8
, "atomic_load_r8", FREG
, IREG
, NONE
)
1107 MINI_OP(OP_ATOMIC_STORE_I1
, "atomic_store_i1", IREG
, IREG
, NONE
)
1108 MINI_OP(OP_ATOMIC_STORE_I2
, "atomic_store_i2", IREG
, IREG
, NONE
)
1109 MINI_OP(OP_ATOMIC_STORE_I4
, "atomic_store_i4", IREG
, IREG
, NONE
)
1110 MINI_OP(OP_ATOMIC_STORE_I8
, "atomic_store_i8", IREG
, IREG
, NONE
)
1111 MINI_OP(OP_ATOMIC_STORE_U1
, "atomic_store_u1", IREG
, IREG
, NONE
)
1112 MINI_OP(OP_ATOMIC_STORE_U2
, "atomic_store_u2", IREG
, IREG
, NONE
)
1113 MINI_OP(OP_ATOMIC_STORE_U4
, "atomic_store_u4", IREG
, IREG
, NONE
)
1114 MINI_OP(OP_ATOMIC_STORE_U8
, "atomic_store_u8", IREG
, IREG
, NONE
)
1115 MINI_OP(OP_ATOMIC_STORE_R4
, "atomic_store_r4", IREG
, FREG
, NONE
)
1116 MINI_OP(OP_ATOMIC_STORE_R8
, "atomic_store_r8", IREG
, FREG
, NONE
)
1118 MINI_OP(OP_ATOMIC_ADD_I4
, "atomic_add_i4", IREG
, IREG
, IREG
)
1119 MINI_OP(OP_ATOMIC_ADD_I8
, "atomic_add_i8", IREG
, IREG
, IREG
)
1121 MINI_OP(OP_ATOMIC_EXCHANGE_I4
, "atomic_exchange_i4", IREG
, IREG
, IREG
)
1122 MINI_OP(OP_ATOMIC_EXCHANGE_I8
, "atomic_exchange_i8", IREG
, IREG
, IREG
)
1124 MINI_OP3(OP_ATOMIC_CAS_I4
, "atomic_cas_i4", IREG
, IREG
, IREG
, IREG
)
1125 MINI_OP3(OP_ATOMIC_CAS_I8
, "atomic_cas_i8", IREG
, IREG
, IREG
, IREG
)
1127 /* Conditional move opcodes.
1128 * Must be in the same order as the matching CEE_B... opcodes
1129 * sreg2 will be assigned to dreg if the condition is true.
1130 * sreg1 should be equal to dreg and models the fact the instruction doesn't necessary
1131 * modify dreg. The sreg1==dreg condition could be violated by SSA, so the local
1132 * register allocator or the code generator should generate a mov dreg, sreg1 before
1133 * the cmov in those cases.
1134 * These opcodes operate on pointer sized values.
1136 MINI_OP(OP_CMOV_IEQ
, "cmov_ieq", IREG
, IREG
, IREG
)
1137 MINI_OP(OP_CMOV_IGE
, "cmov_ige", IREG
, IREG
, IREG
)
1138 MINI_OP(OP_CMOV_IGT
, "cmov_igt", IREG
, IREG
, IREG
)
1139 MINI_OP(OP_CMOV_ILE
, "cmov_ile", IREG
, IREG
, IREG
)
1140 MINI_OP(OP_CMOV_ILT
, "cmov_ilt", IREG
, IREG
, IREG
)
1141 MINI_OP(OP_CMOV_INE_UN
, "cmov_ine_un", IREG
, IREG
, IREG
)
1142 MINI_OP(OP_CMOV_IGE_UN
, "cmov_ige_un", IREG
, IREG
, IREG
)
1143 MINI_OP(OP_CMOV_IGT_UN
, "cmov_igt_un", IREG
, IREG
, IREG
)
1144 MINI_OP(OP_CMOV_ILE_UN
, "cmov_ile_un", IREG
, IREG
, IREG
)
1145 MINI_OP(OP_CMOV_ILT_UN
, "cmov_ilt_un", IREG
, IREG
, IREG
)
1147 MINI_OP(OP_CMOV_LEQ
, "cmov_leq", IREG
, IREG
, IREG
)
1148 MINI_OP(OP_CMOV_LGE
, "cmov_lge", IREG
, IREG
, IREG
)
1149 MINI_OP(OP_CMOV_LGT
, "cmov_lgt", IREG
, IREG
, IREG
)
1150 MINI_OP(OP_CMOV_LLE
, "cmov_lle", IREG
, IREG
, IREG
)
1151 MINI_OP(OP_CMOV_LLT
, "cmov_llt", IREG
, IREG
, IREG
)
1152 MINI_OP(OP_CMOV_LNE_UN
, "cmov_lne_un", IREG
, IREG
, IREG
)
1153 MINI_OP(OP_CMOV_LGE_UN
, "cmov_lge_un", IREG
, IREG
, IREG
)
1154 MINI_OP(OP_CMOV_LGT_UN
, "cmov_lgt_un", IREG
, IREG
, IREG
)
1155 MINI_OP(OP_CMOV_LLE_UN
, "cmov_lle_un", IREG
, IREG
, IREG
)
1156 MINI_OP(OP_CMOV_LLT_UN
, "cmov_llt_un", IREG
, IREG
, IREG
)
1158 /* Debugging support */
1160 * Marks the start of the live range of the variable in inst_c0, that is the
1161 * first instruction where the variable has a value.
1163 MINI_OP(OP_LIVERANGE_START
, "liverange_start", NONE
, NONE
, NONE
)
1165 * Marks the end of the live range of the variable in inst_c0, that is the
1166 * first instruction where the variable no longer has a value.
1168 MINI_OP(OP_LIVERANGE_END
, "liverange_end", NONE
, NONE
, NONE
)
1172 * mono_arch_output_basic_block () will set the backend.pc_offset field to the current pc
1175 MINI_OP(OP_GC_LIVENESS_DEF
, "gc_liveness_def", NONE
, NONE
, NONE
)
1176 MINI_OP(OP_GC_LIVENESS_USE
, "gc_liveness_use", NONE
, NONE
, NONE
)
1179 * This marks the location inside a basic block where a GC tracked spill slot has been
1180 * defined. The spill slot is assumed to be alive until the end of the bblock.
1182 MINI_OP(OP_GC_SPILL_SLOT_LIVENESS_DEF
, "gc_spill_slot_liveness_def", NONE
, NONE
, NONE
)
1185 * This marks the location inside a basic block where a GC tracked param area slot has
1186 * been defined. The slot is assumed to be alive until the next call.
1188 MINI_OP(OP_GC_PARAM_SLOT_LIVENESS_DEF
, "gc_param_slot_liveness_def", NONE
, NONE
, NONE
)
1190 MINI_OP(OP_GC_SAFE_POINT
, "gc_safe_point", NONE
, IREG
, NONE
)
1193 * Check if the class given by sreg1 was inited, if not, call
1194 * mono_generic_class_init_trampoline () though a trampoline.
1195 * Since the trampoline saves all registers, this doesn't clobber
1198 MINI_OP(OP_GENERIC_CLASS_INIT
, "generic_class_init", NONE
, IREG
, NONE
)
1200 /* Arch specific opcodes */
1201 #if defined(TARGET_X86) || defined(TARGET_AMD64)
1202 MINI_OP(OP_X86_TEST_NULL
, "x86_test_null", NONE
, IREG
, NONE
)
1203 MINI_OP(OP_X86_COMPARE_MEMBASE_REG
,"x86_compare_membase_reg", NONE
, IREG
, IREG
)
1204 MINI_OP(OP_X86_COMPARE_MEMBASE_IMM
,"x86_compare_membase_imm", NONE
, IREG
, NONE
)
1205 MINI_OP(OP_X86_COMPARE_MEM_IMM
, "x86_compare_mem_imm", NONE
, NONE
, NONE
)
1206 MINI_OP(OP_X86_COMPARE_MEMBASE8_IMM
,"x86_compare_membase8_imm", NONE
, IREG
, NONE
)
1207 MINI_OP(OP_X86_COMPARE_REG_MEMBASE
,"x86_compare_reg_membase", NONE
, IREG
, IREG
)
1208 MINI_OP(OP_X86_INC_REG
, "x86_inc_reg", IREG
, IREG
, NONE
)
1209 MINI_OP(OP_X86_INC_MEMBASE
, "x86_inc_membase", NONE
, IREG
, NONE
)
1210 MINI_OP(OP_X86_DEC_REG
, "x86_dec_reg", IREG
, IREG
, NONE
)
1211 MINI_OP(OP_X86_DEC_MEMBASE
, "x86_dec_membase", NONE
, IREG
, NONE
)
1212 MINI_OP(OP_X86_ADD_MEMBASE_IMM
, "x86_add_membase_imm", NONE
, IREG
, NONE
)
1213 MINI_OP(OP_X86_SUB_MEMBASE_IMM
, "x86_sub_membase_imm", NONE
, IREG
, NONE
)
1214 MINI_OP(OP_X86_AND_MEMBASE_IMM
, "x86_and_membase_imm", NONE
, IREG
, NONE
)
1215 MINI_OP(OP_X86_OR_MEMBASE_IMM
, "x86_or_membase_imm", NONE
, IREG
, NONE
)
1216 MINI_OP(OP_X86_XOR_MEMBASE_IMM
, "x86_xor_membase_imm", NONE
, IREG
, NONE
)
1217 MINI_OP(OP_X86_ADD_MEMBASE_REG
, "x86_add_membase_reg", NONE
, IREG
, IREG
)
1218 MINI_OP(OP_X86_SUB_MEMBASE_REG
, "x86_sub_membase_reg", NONE
, IREG
, IREG
)
1219 MINI_OP(OP_X86_AND_MEMBASE_REG
, "x86_and_membase_reg", NONE
, IREG
, IREG
)
1220 MINI_OP(OP_X86_OR_MEMBASE_REG
, "x86_or_membase_reg", NONE
, IREG
, IREG
)
1221 MINI_OP(OP_X86_XOR_MEMBASE_REG
, "x86_xor_membase_reg", NONE
, IREG
, IREG
)
1222 MINI_OP(OP_X86_MUL_MEMBASE_REG
, "x86_mul_membase_reg", NONE
, IREG
, IREG
)
1224 MINI_OP(OP_X86_ADD_REG_MEMBASE
, "x86_add_reg_membase", IREG
, IREG
, IREG
)
1225 MINI_OP(OP_X86_SUB_REG_MEMBASE
, "x86_sub_reg_membase", IREG
, IREG
, IREG
)
1226 MINI_OP(OP_X86_MUL_REG_MEMBASE
, "x86_mul_reg_membase", IREG
, IREG
, IREG
)
1227 MINI_OP(OP_X86_AND_REG_MEMBASE
, "x86_and_reg_membase", IREG
, IREG
, IREG
)
1228 MINI_OP(OP_X86_OR_REG_MEMBASE
, "x86_or_reg_membase", IREG
, IREG
, IREG
)
1229 MINI_OP(OP_X86_XOR_REG_MEMBASE
, "x86_xor_reg_membase", IREG
, IREG
, IREG
)
1231 MINI_OP(OP_X86_PUSH_MEMBASE
, "x86_push_membase", NONE
, IREG
, NONE
)
1232 MINI_OP(OP_X86_PUSH_IMM
, "x86_push_imm", NONE
, NONE
, NONE
)
1233 MINI_OP(OP_X86_PUSH
, "x86_push", NONE
, IREG
, NONE
)
1234 MINI_OP(OP_X86_PUSH_OBJ
, "x86_push_obj", NONE
, IREG
, NONE
)
1235 MINI_OP(OP_X86_PUSH_GOT_ENTRY
, "x86_push_got_entry", NONE
, IREG
, NONE
)
1236 MINI_OP(OP_X86_LEA
, "x86_lea", IREG
, IREG
, IREG
)
1237 MINI_OP(OP_X86_LEA_MEMBASE
, "x86_lea_membase", IREG
, IREG
, NONE
)
1238 MINI_OP(OP_X86_XCHG
, "x86_xchg", NONE
, IREG
, IREG
)
1239 MINI_OP(OP_X86_FPOP
, "x86_fpop", NONE
, FREG
, NONE
)
1240 MINI_OP(OP_X86_FP_LOAD_I8
, "x86_fp_load_i8", FREG
, IREG
, NONE
)
1241 MINI_OP(OP_X86_FP_LOAD_I4
, "x86_fp_load_i4", FREG
, IREG
, NONE
)
1242 MINI_OP(OP_X86_SETEQ_MEMBASE
, "x86_seteq_membase", NONE
, IREG
, NONE
)
1243 MINI_OP(OP_X86_SETNE_MEMBASE
, "x86_setne_membase", NONE
, IREG
, NONE
)
1244 MINI_OP(OP_X86_FXCH
, "x86_fxch", NONE
, NONE
, NONE
)
1247 #if defined(TARGET_AMD64)
1248 MINI_OP(OP_AMD64_TEST_NULL
, "amd64_test_null", NONE
, IREG
, NONE
)
1249 MINI_OP(OP_AMD64_SET_XMMREG_R4
, "amd64_set_xmmreg_r4", FREG
, FREG
, NONE
)
1250 MINI_OP(OP_AMD64_SET_XMMREG_R8
, "amd64_set_xmmreg_r8", FREG
, FREG
, NONE
)
1251 MINI_OP(OP_AMD64_ICOMPARE_MEMBASE_REG
, "amd64_icompare_membase_reg", NONE
, IREG
, IREG
)
1252 MINI_OP(OP_AMD64_ICOMPARE_MEMBASE_IMM
, "amd64_icompare_membase_imm", NONE
, IREG
, NONE
)
1253 MINI_OP(OP_AMD64_ICOMPARE_REG_MEMBASE
, "amd64_icompare_reg_membase", NONE
, IREG
, IREG
)
1254 MINI_OP(OP_AMD64_COMPARE_MEMBASE_REG
, "amd64_compare_membase_reg", NONE
, IREG
, IREG
)
1255 MINI_OP(OP_AMD64_COMPARE_MEMBASE_IMM
, "amd64_compare_membase_imm", NONE
, IREG
, NONE
)
1256 MINI_OP(OP_AMD64_COMPARE_REG_MEMBASE
, "amd64_compare_reg_membase", NONE
, IREG
, IREG
)
1258 MINI_OP(OP_AMD64_ADD_MEMBASE_REG
, "amd64_add_membase_reg", NONE
, IREG
, IREG
)
1259 MINI_OP(OP_AMD64_SUB_MEMBASE_REG
, "amd64_sub_membase_reg", NONE
, IREG
, IREG
)
1260 MINI_OP(OP_AMD64_AND_MEMBASE_REG
, "amd64_and_membase_reg", NONE
, IREG
, IREG
)
1261 MINI_OP(OP_AMD64_OR_MEMBASE_REG
, "amd64_or_membase_reg", NONE
, IREG
, IREG
)
1262 MINI_OP(OP_AMD64_XOR_MEMBASE_REG
, "amd64_xor_membase_reg", NONE
, IREG
, IREG
)
1263 MINI_OP(OP_AMD64_MUL_MEMBASE_REG
, "amd64_mul_membase_reg", NONE
, IREG
, IREG
)
1265 MINI_OP(OP_AMD64_ADD_MEMBASE_IMM
, "amd64_add_membase_imm", NONE
, IREG
, NONE
)
1266 MINI_OP(OP_AMD64_SUB_MEMBASE_IMM
, "amd64_sub_membase_imm", NONE
, IREG
, NONE
)
1267 MINI_OP(OP_AMD64_AND_MEMBASE_IMM
, "amd64_and_membase_imm", NONE
, IREG
, NONE
)
1268 MINI_OP(OP_AMD64_OR_MEMBASE_IMM
, "amd64_or_membase_imm", NONE
, IREG
, NONE
)
1269 MINI_OP(OP_AMD64_XOR_MEMBASE_IMM
, "amd64_xor_membase_imm", NONE
, IREG
, NONE
)
1270 MINI_OP(OP_AMD64_MUL_MEMBASE_IMM
, "amd64_mul_membase_imm", NONE
, IREG
, NONE
)
1271 MINI_OP(OP_AMD64_LEA_MEMBASE
, "amd64_lea_membase", IREG
, IREG
, NONE
)
1273 MINI_OP(OP_AMD64_ADD_REG_MEMBASE
, "amd64_add_reg_membase", IREG
, IREG
, IREG
)
1274 MINI_OP(OP_AMD64_SUB_REG_MEMBASE
, "amd64_sub_reg_membase", IREG
, IREG
, IREG
)
1275 MINI_OP(OP_AMD64_AND_REG_MEMBASE
, "amd64_and_reg_membase", IREG
, IREG
, IREG
)
1276 MINI_OP(OP_AMD64_OR_REG_MEMBASE
, "amd64_or_reg_membase", IREG
, IREG
, IREG
)
1277 MINI_OP(OP_AMD64_XOR_REG_MEMBASE
, "amd64_xor_reg_membase", IREG
, IREG
, IREG
)
1278 MINI_OP(OP_AMD64_MUL_REG_MEMBASE
, "amd64_mul_reg_membase", IREG
, IREG
, IREG
)
1280 MINI_OP(OP_AMD64_LOADI8_MEMINDEX
, "amd64_loadi8_memindex", IREG
, IREG
, IREG
)
1281 MINI_OP(OP_AMD64_SAVE_SP_TO_LMF
, "amd64_save_sp_to_lmf", NONE
, NONE
, NONE
)
1284 #if defined(TARGET_POWERPC)
1285 MINI_OP(OP_PPC_SUBFIC
, "ppc_subfic", IREG
, IREG
, NONE
)
1286 MINI_OP(OP_PPC_SUBFZE
, "ppc_subfze", IREG
, IREG
, NONE
)
1287 MINI_OP(OP_PPC_CHECK_FINITE
, "ppc_check_finite", NONE
, IREG
, NONE
)
1288 MINI_OP(OP_PPC_CEIL
, "ppc_ceil", FREG
, FREG
, NONE
)
1289 MINI_OP(OP_PPC_FLOOR
, "ppc_floor", FREG
, FREG
, NONE
)
1290 MINI_OP(OP_PPC_TRUNC
, "ppc_trunc", FREG
, FREG
, NONE
)
1293 #if defined(TARGET_ARM) || defined(TARGET_ARM64)
1294 MINI_OP(OP_ARM_RSBS_IMM
, "arm_rsbs_imm", IREG
, IREG
, NONE
)
1295 MINI_OP(OP_ARM_RSC_IMM
, "arm_rsc_imm", IREG
, IREG
, NONE
)
1296 /* Set dreg to an r4 value */
1297 MINI_OP(OP_ARM_SETFREG_R4
, "arm_setfreg_r4", FREG
, FREG
, NONE
)
1300 #if defined(TARGET_SPARC)
1301 MINI_OP(OP_SPARC_BRZ
, "sparc_brz", NONE
, NONE
, NONE
)
1302 MINI_OP(OP_SPARC_BRLEZ
, "sparc_brlez", NONE
, NONE
, NONE
)
1303 MINI_OP(OP_SPARC_BRLZ
, "sparc_brlz", NONE
, NONE
, NONE
)
1304 MINI_OP(OP_SPARC_BRNZ
, "sparc_brnz", NONE
, NONE
, NONE
)
1305 MINI_OP(OP_SPARC_BRGZ
, "sparc_brgz", NONE
, NONE
, NONE
)
1306 MINI_OP(OP_SPARC_BRGEZ
, "sparc_brgez", NONE
, NONE
, NONE
)
1307 MINI_OP(OP_SPARC_COND_EXC_EQZ
, "sparc_cond_exc_eqz", NONE
, NONE
, NONE
)
1308 MINI_OP(OP_SPARC_COND_EXC_GEZ
, "sparc_cond_exc_gez", NONE
, NONE
, NONE
)
1309 MINI_OP(OP_SPARC_COND_EXC_GTZ
, "sparc_cond_exc_gtz", NONE
, NONE
, NONE
)
1310 MINI_OP(OP_SPARC_COND_EXC_LEZ
, "sparc_cond_exc_lez", NONE
, NONE
, NONE
)
1311 MINI_OP(OP_SPARC_COND_EXC_LTZ
, "sparc_cond_exc_ltz", NONE
, NONE
, NONE
)
1312 MINI_OP(OP_SPARC_COND_EXC_NEZ
, "sparc_cond_exc_nez", NONE
, NONE
, NONE
)
1315 #if defined(TARGET_S390X)
1316 MINI_OP(OP_S390_LOADARG
, "s390_loadarg", NONE
, NONE
, NONE
)
1317 MINI_OP(OP_S390_ARGREG
, "s390_argreg", NONE
, NONE
, NONE
)
1318 MINI_OP(OP_S390_ARGPTR
, "s390_argptr", NONE
, NONE
, NONE
)
1319 MINI_OP(OP_S390_STKARG
, "s390_stkarg", NONE
, NONE
, NONE
)
1320 MINI_OP(OP_S390_MOVE
, "s390_move", IREG
, IREG
, NONE
)
1321 MINI_OP(OP_S390_SETF4RET
, "s390_setf4ret", FREG
, FREG
, NONE
)
1322 MINI_OP(OP_S390_BKCHAIN
, "s390_bkchain", IREG
, IREG
, NONE
)
1323 MINI_OP(OP_S390_LADD
, "s390_long_add", LREG
, IREG
, IREG
)
1324 MINI_OP(OP_S390_LADD_OVF
, "s390_long_add_ovf", LREG
, IREG
, IREG
)
1325 MINI_OP(OP_S390_LADD_OVF_UN
, "s390_long_add_ovf_un", LREG
, IREG
, IREG
)
1326 MINI_OP(OP_S390_LSUB
, "s390_long_sub", LREG
, IREG
, IREG
)
1327 MINI_OP(OP_S390_LSUB_OVF
, "s390_long_sub_ovf", LREG
, IREG
, IREG
)
1328 MINI_OP(OP_S390_LSUB_OVF_UN
, "s390_long_sub_ovf_un", LREG
, IREG
, IREG
)
1329 MINI_OP(OP_S390_LNEG
, "s390_long_neg", LREG
, IREG
, IREG
)
1330 MINI_OP(OP_S390_IADD_OVF
, "s390_int_add_ovf", IREG
, IREG
, IREG
)
1331 MINI_OP(OP_S390_IADD_OVF_UN
, "s390_int_add_ovf_un", IREG
, IREG
, IREG
)
1332 MINI_OP(OP_S390_ISUB_OVF
, "s390_int_sub_ovf", IREG
, IREG
, IREG
)
1333 MINI_OP(OP_S390_ISUB_OVF_UN
, "s390_int_sub_ovf_un", IREG
, IREG
, IREG
)
1334 MINI_OP(OP_S390_CRJ
, "s390_crj", IREG
, IREG
, IREG
)
1335 MINI_OP(OP_S390_CLRJ
, "s390_crj_un", IREG
, IREG
, IREG
)
1336 MINI_OP(OP_S390_CGRJ
, "s390_cgrj", LREG
, LREG
, IREG
)
1337 MINI_OP(OP_S390_CLGRJ
, "s390_cgrj_un", LREG
, LREG
, IREG
)
1338 MINI_OP(OP_S390_CIJ
, "s390_cij", IREG
, NONE
, NONE
)
1339 MINI_OP(OP_S390_CLIJ
, "s390_cij_un", IREG
, IREG
, NONE
)
1340 MINI_OP(OP_S390_CGIJ
, "s390_cgij", LREG
, NONE
, NONE
)
1341 MINI_OP(OP_S390_CLGIJ
, "s390_cgij_un", LREG
, NONE
, NONE
)
1344 #if defined(TARGET_MIPS)
1345 MINI_OP(OP_MIPS_BEQ
, "mips_beq", NONE
, IREG
, IREG
)
1346 MINI_OP(OP_MIPS_BGEZ
, "mips_bgez", NONE
, IREG
, NONE
)
1347 MINI_OP(OP_MIPS_BGTZ
, "mips_bgtz", NONE
, IREG
, NONE
)
1348 MINI_OP(OP_MIPS_BLEZ
, "mips_blez", NONE
, IREG
, NONE
)
1349 MINI_OP(OP_MIPS_BLTZ
, "mips_bltz", NONE
, IREG
, NONE
)
1350 MINI_OP(OP_MIPS_BNE
, "mips_bne", NONE
, IREG
, IREG
)
1351 MINI_OP(OP_MIPS_CVTSD
, "mips_cvtsd", FREG
, FREG
, NONE
)
1352 MINI_OP(OP_MIPS_FBEQ
, "mips_fbeq", NONE
, FREG
, FREG
)
1353 MINI_OP(OP_MIPS_FBGE
, "mips_fbge", NONE
, FREG
, FREG
)
1354 MINI_OP(OP_MIPS_FBGE_UN
, "mips_fbge_un", NONE
, FREG
, FREG
)
1355 MINI_OP(OP_MIPS_FBGT
, "mips_fbgt", NONE
, FREG
, FREG
)
1356 MINI_OP(OP_MIPS_FBGT_UN
, "mips_fbgt_un", NONE
, FREG
, FREG
)
1357 MINI_OP(OP_MIPS_FBLE
, "mips_fble", NONE
, FREG
, FREG
)
1358 MINI_OP(OP_MIPS_FBLE_UN
, "mips_fble_un", NONE
, FREG
, FREG
)
1359 MINI_OP(OP_MIPS_FBLT
, "mips_fblt", NONE
, FREG
, FREG
)
1360 MINI_OP(OP_MIPS_FBLT_UN
, "mips_fblt_un", NONE
, FREG
, FREG
)
1361 MINI_OP(OP_MIPS_FBNE
, "mips_fbne", NONE
, FREG
, FREG
)
1362 MINI_OP(OP_MIPS_FBFALSE
, "mips_fbfalse", NONE
, NONE
, NONE
)
1363 MINI_OP(OP_MIPS_FBTRUE
, "mips_fbtrue", NONE
, NONE
, NONE
)
1364 MINI_OP(OP_MIPS_LWC1
, "mips_lwc1", NONE
, NONE
, NONE
)
1365 MINI_OP(OP_MIPS_MTC1S
, "mips_mtc1_s", FREG
, IREG
, NONE
)
1366 MINI_OP(OP_MIPS_MTC1S_2
, "mips_mtc1_s2", FREG
, IREG
, IREG
)
1367 MINI_OP(OP_MIPS_MFC1S
, "mips_mfc1_s", IREG
, FREG
, NONE
)
1368 MINI_OP(OP_MIPS_MTC1D
, "mips_mtc1_d", FREG
, IREG
, NONE
)
1369 MINI_OP(OP_MIPS_MFC1D
, "mips_mfc1_d", IREG
, FREG
, NONE
)
1370 MINI_OP(OP_MIPS_NOP
, "mips_nop", NONE
, NONE
, NONE
)
1371 MINI_OP(OP_MIPS_SLTI
, "mips_slti", IREG
, IREG
, NONE
)
1372 MINI_OP(OP_MIPS_SLT
, "mips_slt", IREG
, IREG
, IREG
)
1373 MINI_OP(OP_MIPS_SLTIU
, "mips_sltiu", IREG
, IREG
, NONE
)
1374 MINI_OP(OP_MIPS_SLTU
, "mips_sltu", IREG
, IREG
, IREG
)
1376 MINI_OP(OP_MIPS_COND_EXC_EQ
, "mips_cond_exc_eq", NONE
, IREG
, IREG
)
1377 MINI_OP(OP_MIPS_COND_EXC_GE
, "mips_cond_exc_ge", NONE
, IREG
, IREG
)
1378 MINI_OP(OP_MIPS_COND_EXC_GT
, "mips_cond_exc_gt", NONE
, IREG
, IREG
)
1379 MINI_OP(OP_MIPS_COND_EXC_LE
, "mips_cond_exc_le", NONE
, IREG
, IREG
)
1380 MINI_OP(OP_MIPS_COND_EXC_LT
, "mips_cond_exc_lt", NONE
, IREG
, IREG
)
1381 MINI_OP(OP_MIPS_COND_EXC_NE_UN
, "mips_cond_exc_ne_un", NONE
, IREG
, IREG
)
1382 MINI_OP(OP_MIPS_COND_EXC_GE_UN
, "mips_cond_exc_ge_un", NONE
, IREG
, IREG
)
1383 MINI_OP(OP_MIPS_COND_EXC_GT_UN
, "mips_cond_exc_gt_un", NONE
, IREG
, IREG
)
1384 MINI_OP(OP_MIPS_COND_EXC_LE_UN
, "mips_cond_exc_le_un", NONE
, IREG
, IREG
)
1385 MINI_OP(OP_MIPS_COND_EXC_LT_UN
, "mips_cond_exc_lt_un", NONE
, IREG
, IREG
)
1387 MINI_OP(OP_MIPS_COND_EXC_OV
, "mips_cond_exc_ov", NONE
, IREG
, IREG
)
1388 MINI_OP(OP_MIPS_COND_EXC_NO
, "mips_cond_exc_no", NONE
, IREG
, IREG
)
1389 MINI_OP(OP_MIPS_COND_EXC_C
, "mips_cond_exc_c", NONE
, IREG
, IREG
)
1390 MINI_OP(OP_MIPS_COND_EXC_NC
, "mips_cond_exc_nc", NONE
, IREG
, IREG
)
1392 MINI_OP(OP_MIPS_COND_EXC_IEQ
, "mips_cond_exc_ieq", NONE
, IREG
, IREG
)
1393 MINI_OP(OP_MIPS_COND_EXC_IGE
, "mips_cond_exc_ige", NONE
, IREG
, IREG
)
1394 MINI_OP(OP_MIPS_COND_EXC_IGT
, "mips_cond_exc_igt", NONE
, IREG
, IREG
)
1395 MINI_OP(OP_MIPS_COND_EXC_ILE
, "mips_cond_exc_ile", NONE
, IREG
, IREG
)
1396 MINI_OP(OP_MIPS_COND_EXC_ILT
, "mips_cond_exc_ilt", NONE
, IREG
, IREG
)
1397 MINI_OP(OP_MIPS_COND_EXC_INE_UN
, "mips_cond_exc_ine_un", NONE
, IREG
, IREG
)
1398 MINI_OP(OP_MIPS_COND_EXC_IGE_UN
, "mips_cond_exc_ige_un", NONE
, IREG
, IREG
)
1399 MINI_OP(OP_MIPS_COND_EXC_IGT_UN
, "mips_cond_exc_igt_un", NONE
, IREG
, IREG
)
1400 MINI_OP(OP_MIPS_COND_EXC_ILE_UN
, "mips_cond_exc_ile_un", NONE
, IREG
, IREG
)
1401 MINI_OP(OP_MIPS_COND_EXC_ILT_UN
, "mips_cond_exc_ilt_un", NONE
, IREG
, IREG
)
1403 MINI_OP(OP_MIPS_COND_EXC_IOV
, "mips_cond_exc_iov", NONE
, IREG
, IREG
)
1404 MINI_OP(OP_MIPS_COND_EXC_INO
, "mips_cond_exc_ino", NONE
, IREG
, IREG
)
1405 MINI_OP(OP_MIPS_COND_EXC_IC
, "mips_cond_exc_ic", NONE
, IREG
, IREG
)
1406 MINI_OP(OP_MIPS_COND_EXC_INC
, "mips_cond_exc_inc", NONE
, IREG
, IREG
)
1410 #if defined(TARGET_ARM64)
1411 /* Branch if sreg1 == 0 */
1412 MINI_OP(OP_ARM64_CBZW
, "arm64_cbzw", NONE
, IREG
, NONE
)
1413 MINI_OP(OP_ARM64_CBZX
, "arm64_cbzx", NONE
, IREG
, NONE
)
1414 /* Branch if sreg1 != 0 */
1415 MINI_OP(OP_ARM64_CBNZW
, "arm64_cbnzw", NONE
, IREG
, NONE
)
1416 MINI_OP(OP_ARM64_CBNZX
, "arm64_cbnzx", NONE
, IREG
, NONE
)
1419 /* Same as OUTARG_VT, but has a dreg */
1420 MINI_OP(OP_LLVM_OUTARG_VT
, "llvm_outarg_vt", IREG
, VREG
, NONE
)
1422 MINI_OP(OP_OBJC_GET_SELECTOR
, "objc_get_selector", IREG
, NONE
, NONE
)
1424 MINI_OP(OP_GET_SP
, "get_sp", IREG
, NONE
, NONE
)
1425 MINI_OP(OP_SET_SP
, "set_sp", NONE
, IREG
, NONE
)
1427 MINI_OP(OP_GET_LAST_ERROR
, "get_last_error", IREG
, NONE
, NONE
)
1430 * Fill out a MonoContext contained in a MonoProfilerCallContext. This only
1431 * stores the stack pointer, frame pointer, and callee-saved registers. This
1432 * should be enough to locate arguments and variables.
1434 MINI_OP(OP_FILL_PROF_CALL_CTX
, "fill_prof_call_ctx", NONE
, IREG
, NONE
)
1436 /* LLVM only, compare 2 vectors for equality, set dreg to 1/0 */
1437 MINI_OP(OP_XEQUAL
, "xequal", IREG
, XREG
, XREG
)
1438 /* Per element compate, inst_c0 contains a CompRelation */
1439 MINI_OP(OP_XCOMPARE
, "xcompare", XREG
, XREG
, XREG
)
1440 MINI_OP(OP_XCOMPARE_FP
, "xcompare_fp", XREG
, XREG
, XREG
)
1441 /* Binary op, inst_c0 contains the operation */
1442 MINI_OP(OP_XBINOP
, "xbinop", XREG
, XREG
, XREG
)
1443 MINI_OP(OP_XCAST
, "xcast", XREG
, XREG
, NONE
)
1444 /* Extract element of vector */
1445 /* The index is assumed to be in range */
1446 /* inst_i0 is the element type */
1447 MINI_OP(OP_XEXTRACT_I32
, "xextract_i32", IREG
, XREG
, IREG
)
1448 MINI_OP(OP_XEXTRACT_I64
, "xextract_i64", LREG
, XREG
, IREG
)
1449 MINI_OP(OP_XEXTRACT_R8
, "xextract_r8", FREG
, XREG
, IREG
)
1451 MINI_OP(OP_XEXTRACT_R4
, "xextract_r4", FREG
, XREG
, IREG
)
1453 MINI_OP(OP_LZCNT32
, "lzcnt32", IREG
, IREG
, NONE
)
1454 MINI_OP(OP_LZCNT64
, "lzcnt64", LREG
, LREG
, NONE
)
1455 MINI_OP(OP_POPCNT32
, "popcnt32", IREG
, IREG
, NONE
)
1456 MINI_OP(OP_POPCNT64
, "popcnt64", LREG
, LREG
, NONE
)