Line data Source code
1 : #ifdef __PLUMED_HAS_ASMJIT
2 : // This file is part of AsmJit project <https://asmjit.com>
3 : //
4 : // See asmjit.h or LICENSE.md for license and copyright information
5 : // SPDX-License-Identifier: Zlib
6 :
7 : #ifndef ASMJIT_ARM_A64EMITTER_H_INCLUDED
8 : #define ASMJIT_ARM_A64EMITTER_H_INCLUDED
9 :
10 : #include "emitter.h"
11 : #include "support.h"
12 : #include "a64instdb.h"
13 : #include "a64operand.h"
14 :
15 : ASMJIT_BEGIN_SUB_NAMESPACE(a64)
16 :
17 : #define ASMJIT_INST_0x(NAME, ID) \
18 : inline Error NAME() { return _emitter()->_emitI(Inst::kId##ID); }
19 :
20 : #define ASMJIT_INST_1x(NAME, ID, T0) \
21 : inline Error NAME(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID, o0); }
22 :
23 : #define ASMJIT_INST_2x(NAME, ID, T0, T1) \
24 : inline Error NAME(const T0& o0, const T1& o1) { return _emitter()->_emitI(Inst::kId##ID, o0, o1); }
25 :
26 : #define ASMJIT_INST_3x(NAME, ID, T0, T1, T2) \
27 : inline Error NAME(const T0& o0, const T1& o1, const T2& o2) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2); }
28 :
29 : #define ASMJIT_INST_4x(NAME, ID, T0, T1, T2, T3) \
30 : inline Error NAME(const T0& o0, const T1& o1, const T2& o2, const T3& o3) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2, o3); }
31 :
32 : #define ASMJIT_INST_5x(NAME, ID, T0, T1, T2, T3, T4) \
33 : inline Error NAME(const T0& o0, const T1& o1, const T2& o2, const T3& o3, const T4& o4) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2, o3, o4); }
34 :
35 : #define ASMJIT_INST_6x(NAME, ID, T0, T1, T2, T3, T4, T5) \
36 : inline Error NAME(const T0& o0, const T1& o1, const T2& o2, const T3& o3, const T4& o4, const T5& o5) { return _emitter()->_emitI(Inst::kId##ID, o0, o1, o2, o3, o4, o5); }
37 :
38 : #define ASMJIT_INST_1cc(NAME, ID, T0) \
39 : inline Error NAME(const T0& o0) { return _emitter()->_emitI(Inst::kId##ID, o0); } \
40 : \
41 : inline Error NAME(CondCode cc, const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, cc), o0); } \
42 : \
43 : inline Error NAME##_eq(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kEQ), o0); } \
44 : inline Error NAME##_ne(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kNE), o0); } \
45 : inline Error NAME##_cs(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kCS), o0); } \
46 : inline Error NAME##_hs(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kHS), o0); } \
47 : inline Error NAME##_cc(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kCC), o0); } \
48 : inline Error NAME##_lo(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kLO), o0); } \
49 : inline Error NAME##_mi(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kMI), o0); } \
50 : inline Error NAME##_pl(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kPL), o0); } \
51 : inline Error NAME##_vs(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kVS), o0); } \
52 : inline Error NAME##_vc(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kVC), o0); } \
53 : inline Error NAME##_hi(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kHI), o0); } \
54 : inline Error NAME##_ls(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kLS), o0); } \
55 : inline Error NAME##_ge(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kGE), o0); } \
56 : inline Error NAME##_lt(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kLT), o0); } \
57 : inline Error NAME##_gt(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kGT), o0); } \
58 : inline Error NAME##_le(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kLE), o0); } \
59 : inline Error NAME##_al(const T0& o0) { return _emitter()->_emitI(BaseInst::composeARMInstId(Inst::kId##ID, CondCode::kAL), o0); }
60 :
61 : //! \addtogroup asmjit_a64
62 : //! \{
63 :
64 : //! ARM emitter.
65 : //!
66 : //! NOTE: This class cannot be instantiated, you can only cast to it and use it as emitter that emits to either
67 : //! \ref Assembler, \ref Builder, or \ref Compiler (use withcaution with \ref Compiler as it expects virtual
68 : //! registers to be used).
69 : template<typename This>
70 : struct EmitterExplicitT {
71 : //! \cond
72 :
73 : // These two are unfortunately reported by the sanitizer. We know what we do, however, the sanitizer doesn't.
74 : // I have tried to use reinterpret_cast instead, but that would generate bad code when compiled by MSC.
75 : ASMJIT_ATTRIBUTE_NO_SANITIZE_UNDEF inline This* _emitter() noexcept { return static_cast<This*>(this); }
76 : ASMJIT_ATTRIBUTE_NO_SANITIZE_UNDEF inline const This* _emitter() const noexcept { return static_cast<const This*>(this); }
77 :
78 : //! \endcond
79 :
80 : // --------------------------------------------------------------------------
81 : // [Options]
82 : // --------------------------------------------------------------------------
83 :
84 : protected:
85 : inline This& _addInstOptions(InstOptions options) noexcept {
86 : static_cast<This*>(this)->addInstOptions(options);
87 : return *static_cast<This*>(this);
88 : }
89 :
90 : public:
91 : //! \name General Purpose Instructions
92 : //! \{
93 :
94 : ASMJIT_INST_3x(adc, Adc, Gp, Gp, Gp)
95 : ASMJIT_INST_3x(adcs, Adcs, Gp, Gp, Gp)
96 :
97 : ASMJIT_INST_3x(add, Add, Gp, Gp, Gp)
98 : ASMJIT_INST_4x(add, Add, Gp, Gp, Gp, Imm)
99 0 : ASMJIT_INST_3x(add, Add, Gp, Gp, Imm)
100 : ASMJIT_INST_4x(add, Add, Gp, Gp, Imm, Imm)
101 : ASMJIT_INST_3x(adds, Adds, Gp, Gp, Gp)
102 : ASMJIT_INST_3x(adds, Adds, Gp, Gp, Imm)
103 : ASMJIT_INST_4x(adds, Adds, Gp, Gp, Gp, Imm)
104 : ASMJIT_INST_4x(adds, Adds, Gp, Gp, Imm, Imm)
105 :
106 : ASMJIT_INST_2x(adr, Adr, Gp, Imm)
107 : ASMJIT_INST_2x(adr, Adr, Gp, Label)
108 : ASMJIT_INST_2x(adrp, Adrp, Gp, Imm)
109 : ASMJIT_INST_2x(adrp, Adrp, Gp, Label)
110 :
111 : ASMJIT_INST_3x(and_, And, Gp, Gp, Imm)
112 : ASMJIT_INST_3x(and_, And, Gp, Gp, Gp)
113 : ASMJIT_INST_4x(and_, And, Gp, Gp, Gp, Imm)
114 : ASMJIT_INST_3x(ands, Ands, Gp, Gp, Imm)
115 : ASMJIT_INST_3x(ands, Ands, Gp, Gp, Gp)
116 : ASMJIT_INST_4x(ands, Ands, Gp, Gp, Gp, Imm)
117 :
118 : ASMJIT_INST_3x(asr, Asr, Gp, Gp, Imm)
119 : ASMJIT_INST_3x(asr, Asr, Gp, Gp, Gp)
120 : ASMJIT_INST_3x(asrv, Asrv, Gp, Gp, Gp)
121 :
122 : ASMJIT_INST_2x(at, At, Imm, Gp)
123 :
124 : ASMJIT_INST_3x(bfc, Bfc, Gp, Imm, Imm)
125 : ASMJIT_INST_4x(bfi, Bfi, Gp, Gp, Imm, Imm)
126 : ASMJIT_INST_4x(bfm, Bfm, Gp, Gp, Imm, Imm)
127 : ASMJIT_INST_4x(bfxil, Bfxil, Gp, Gp, Imm, Imm)
128 :
129 : ASMJIT_INST_3x(bic, Bic, Gp, Gp, Imm);
130 : ASMJIT_INST_3x(bic, Bic, Gp, Gp, Gp);
131 : ASMJIT_INST_4x(bic, Bic, Gp, Gp, Gp, Imm);
132 : ASMJIT_INST_3x(bics, Bics, Gp, Gp, Imm);
133 : ASMJIT_INST_3x(bics, Bics, Gp, Gp, Gp);
134 : ASMJIT_INST_4x(bics, Bics, Gp, Gp, Gp, Imm);
135 :
136 : ASMJIT_INST_1x(brk, Brk, Imm)
137 :
138 : ASMJIT_INST_4x(ccmn, Ccmn, Gp, Gp, Imm, Imm);
139 : ASMJIT_INST_4x(ccmn, Ccmn, Gp, Imm, Imm, Imm);
140 : ASMJIT_INST_4x(ccmp, Ccmp, Gp, Gp, Imm, Imm);
141 : ASMJIT_INST_4x(ccmp, Ccmp, Gp, Imm, Imm, Imm);
142 :
143 : ASMJIT_INST_3x(cinc, Cinc, Gp, Gp, Imm);
144 : ASMJIT_INST_3x(cinv, Cinv, Gp, Gp, Imm);
145 :
146 : ASMJIT_INST_1x(clrex, Clrex, Imm)
147 :
148 : ASMJIT_INST_2x(cls, Cls, Gp, Gp)
149 : ASMJIT_INST_2x(clz, Clz, Gp, Gp)
150 :
151 : ASMJIT_INST_2x(cmn, Cmn, Gp, Gp)
152 : ASMJIT_INST_3x(cmn, Cmn, Gp, Gp, Imm)
153 : ASMJIT_INST_2x(cmn, Cmn, Gp, Imm)
154 : ASMJIT_INST_3x(cmn, Cmn, Gp, Imm, Imm)
155 : ASMJIT_INST_2x(cmp, Cmp, Gp, Gp)
156 : ASMJIT_INST_3x(cmp, Cmp, Gp, Gp, Imm)
157 : ASMJIT_INST_2x(cmp, Cmp, Gp, Imm)
158 : ASMJIT_INST_3x(cmp, Cmp, Gp, Imm, Imm)
159 :
160 : ASMJIT_INST_3x(cneg, Cneg, Gp, Gp, Imm);
161 :
162 : ASMJIT_INST_4x(csel, Csel, Gp, Gp, Gp, Imm);
163 : ASMJIT_INST_2x(cset, Cset, Gp, Imm);
164 : ASMJIT_INST_2x(csetm, Csetm, Gp, Imm);
165 :
166 : ASMJIT_INST_4x(csinc, Csinc, Gp, Gp, Gp, Imm);
167 : ASMJIT_INST_4x(csinv, Csinv, Gp, Gp, Gp, Imm);
168 : ASMJIT_INST_4x(csneg, Csneg, Gp, Gp, Gp, Imm);
169 :
170 : ASMJIT_INST_2x(dc, Dc, Imm, Gp)
171 : ASMJIT_INST_1x(dmb, Dmb, Imm)
172 : ASMJIT_INST_1x(dsb, Dsb, Imm)
173 : ASMJIT_INST_0x(drps, Drps)
174 :
175 : ASMJIT_INST_3x(eon, Eon, Gp, Gp, Gp)
176 : ASMJIT_INST_4x(eon, Eon, Gp, Gp, Gp, Imm)
177 :
178 : ASMJIT_INST_3x(eor, Eor, Gp, Gp, Imm)
179 : ASMJIT_INST_3x(eor, Eor, Gp, Gp, Gp)
180 : ASMJIT_INST_4x(eor, Eor, Gp, Gp, Gp, Imm)
181 :
182 : ASMJIT_INST_0x(eret, Eret)
183 : ASMJIT_INST_0x(esb, Esb)
184 :
185 : ASMJIT_INST_4x(extr, Extr, Gp, Gp, Gp, Imm)
186 :
187 : ASMJIT_INST_1x(hlt, Hlt, Imm)
188 : ASMJIT_INST_1x(hvc, Hvc, Imm)
189 : ASMJIT_INST_2x(ic, Ic, Imm, Gp)
190 : ASMJIT_INST_1x(isb, Isb, Imm)
191 :
192 : ASMJIT_INST_3x(lsl, Lsl, Gp, Gp, Imm)
193 : ASMJIT_INST_3x(lsl, Lsl, Gp, Gp, Gp)
194 : ASMJIT_INST_3x(lslv, Lslv, Gp, Gp, Gp)
195 :
196 : ASMJIT_INST_3x(lsr, Lsr, Gp, Gp, Imm)
197 : ASMJIT_INST_3x(lsr, Lsr, Gp, Gp, Gp)
198 : ASMJIT_INST_3x(lsrv, Lsrv, Gp, Gp, Gp)
199 :
200 : ASMJIT_INST_4x(madd, Madd, Gp, Gp, Gp, Gp)
201 : ASMJIT_INST_3x(mneg, Mneg, Gp, Gp, Gp)
202 :
203 0 : ASMJIT_INST_2x(mov, Mov, Gp, Gp)
204 0 : ASMJIT_INST_2x(mov, Mov, Gp, Imm)
205 : ASMJIT_INST_2x(movk, Movk, Gp, Imm)
206 : ASMJIT_INST_3x(movk, Movk, Gp, Imm, Imm)
207 : ASMJIT_INST_2x(movn, Movn, Gp, Imm)
208 : ASMJIT_INST_3x(movn, Movn, Gp, Imm, Imm)
209 : ASMJIT_INST_2x(movz, Movz, Gp, Imm)
210 : ASMJIT_INST_3x(movz, Movz, Gp, Imm, Imm)
211 :
212 : ASMJIT_INST_2x(mrs, Mrs, Gp, Imm)
213 : ASMJIT_INST_2x(msr, Msr, Imm, Gp)
214 : ASMJIT_INST_2x(msr, Msr, Imm, Imm)
215 :
216 : ASMJIT_INST_4x(msub, Msub, Gp, Gp, Gp, Gp)
217 : ASMJIT_INST_3x(mul, Mul, Gp, Gp, Gp)
218 :
219 : ASMJIT_INST_2x(mvn, Mvn, Gp, Gp)
220 : ASMJIT_INST_3x(mvn, Mvn, Gp, Gp, Imm)
221 :
222 : ASMJIT_INST_2x(neg, Neg, Gp, Gp)
223 : ASMJIT_INST_3x(neg, Neg, Gp, Gp, Imm)
224 : ASMJIT_INST_2x(negs, Negs, Gp, Gp)
225 : ASMJIT_INST_3x(negs, Negs, Gp, Gp, Imm)
226 :
227 : ASMJIT_INST_2x(ngc, Ngc, Gp, Gp)
228 : ASMJIT_INST_2x(ngcs, Ngcs, Gp, Gp)
229 :
230 : ASMJIT_INST_3x(orn, Orn, Gp, Gp, Gp)
231 : ASMJIT_INST_4x(orn, Orn, Gp, Gp, Gp, Imm)
232 :
233 : ASMJIT_INST_3x(orr, Orr, Gp, Gp, Imm)
234 : ASMJIT_INST_3x(orr, Orr, Gp, Gp, Gp)
235 : ASMJIT_INST_4x(orr, Orr, Gp, Gp, Gp, Imm)
236 :
237 : ASMJIT_INST_2x(rbit, Rbit, Gp, Gp)
238 0 : ASMJIT_INST_1x(ret, Ret, Gp)
239 :
240 : ASMJIT_INST_2x(rev, Rev, Gp, Gp)
241 : ASMJIT_INST_2x(rev16, Rev16, Gp, Gp)
242 : ASMJIT_INST_2x(rev32, Rev32, Gp, Gp)
243 : ASMJIT_INST_2x(rev64, Rev64, Gp, Gp)
244 :
245 : ASMJIT_INST_3x(ror, Ror, Gp, Gp, Imm)
246 : ASMJIT_INST_3x(ror, Ror, Gp, Gp, Gp)
247 : ASMJIT_INST_3x(rorv, Rorv, Gp, Gp, Gp)
248 :
249 : ASMJIT_INST_3x(sbc, Sbc, Gp, Gp, Gp)
250 : ASMJIT_INST_3x(sbcs, Sbcs, Gp, Gp, Gp)
251 :
252 : ASMJIT_INST_4x(sbfiz, Sbfiz, Gp, Gp, Imm, Imm)
253 : ASMJIT_INST_4x(sbfm, Sbfm, Gp, Gp, Imm, Imm)
254 : ASMJIT_INST_4x(sbfx, Sbfx, Gp, Gp, Imm, Imm)
255 :
256 : ASMJIT_INST_3x(sdiv, Sdiv, Gp, Gp, Gp)
257 :
258 : ASMJIT_INST_4x(smaddl, Smaddl, Gp, Gp, Gp, Gp)
259 : ASMJIT_INST_1x(smc, Smc, Imm)
260 : ASMJIT_INST_3x(smnegl, Smnegl, Gp, Gp, Gp)
261 : ASMJIT_INST_4x(smsubl, Smsubl, Gp, Gp, Gp, Gp)
262 : ASMJIT_INST_3x(smulh, Smulh, Gp, Gp, Gp)
263 : ASMJIT_INST_3x(smull, Smull, Gp, Gp, Gp)
264 :
265 : ASMJIT_INST_3x(sub, Sub, Gp, Gp, Gp)
266 : ASMJIT_INST_4x(sub, Sub, Gp, Gp, Gp, Imm)
267 0 : ASMJIT_INST_3x(sub, Sub, Gp, Gp, Imm)
268 : ASMJIT_INST_4x(sub, Sub, Gp, Gp, Imm, Imm)
269 : ASMJIT_INST_3x(subs, Subs, Gp, Gp, Gp)
270 : ASMJIT_INST_4x(subs, Subs, Gp, Gp, Gp, Imm)
271 : ASMJIT_INST_3x(subs, Subs, Gp, Gp, Imm)
272 : ASMJIT_INST_4x(subs, Subs, Gp, Gp, Imm, Imm)
273 :
274 : ASMJIT_INST_1x(svc, Svc, Imm)
275 :
276 : ASMJIT_INST_2x(sxtb, Sxtb, Gp, Gp)
277 : ASMJIT_INST_2x(sxth, Sxth, Gp, Gp)
278 : ASMJIT_INST_2x(sxtw, Sxtw, Gp, Gp)
279 :
280 : ASMJIT_INST_4x(sys, Sys, Imm, Imm, Imm, Imm)
281 : ASMJIT_INST_5x(sys, Sys, Imm, Imm, Imm, Imm, Gp)
282 :
283 : ASMJIT_INST_2x(tlbi, Tlbi, Imm, Gp)
284 : ASMJIT_INST_2x(tst, Tst, Gp, Imm)
285 : ASMJIT_INST_2x(tst, Tst, Gp, Gp)
286 : ASMJIT_INST_3x(tst, Tst, Gp, Gp, Imm)
287 :
288 : ASMJIT_INST_3x(udiv, Udiv, Gp, Gp, Gp)
289 :
290 : ASMJIT_INST_4x(ubfiz, Ubfiz, Gp, Gp, Imm, Imm)
291 : ASMJIT_INST_4x(ubfm, Ubfm, Gp, Gp, Imm, Imm)
292 : ASMJIT_INST_4x(ubfx, Ubfx, Gp, Gp, Imm, Imm)
293 :
294 : ASMJIT_INST_4x(umaddl, Umaddl, Gp, Gp, Gp, Gp)
295 : ASMJIT_INST_3x(umnegl, Umnegl, Gp, Gp, Gp)
296 : ASMJIT_INST_4x(umsubl, Umsubl, Gp, Gp, Gp, Gp)
297 : ASMJIT_INST_3x(umull, Umull, Gp, Gp, Gp)
298 : ASMJIT_INST_3x(umulh, Umulh, Gp, Gp, Gp)
299 :
300 : ASMJIT_INST_2x(uxtb, Uxtb, Gp, Gp)
301 : ASMJIT_INST_2x(uxth, Uxth, Gp, Gp)
302 :
303 : ASMJIT_INST_0x(csdb, Csdb)
304 : ASMJIT_INST_1x(dcps1, Dcps1, Imm)
305 : ASMJIT_INST_1x(dcps2, Dcps2, Imm)
306 : ASMJIT_INST_1x(dcps3, Dcps3, Imm)
307 : ASMJIT_INST_0x(dgh, Dgh)
308 : ASMJIT_INST_0x(pssbb, Pssbb)
309 : ASMJIT_INST_0x(ssbb, Ssbb)
310 : ASMJIT_INST_1x(udf, Udf, Imm)
311 : ASMJIT_INST_1x(setf8, Setf8, Gp)
312 : ASMJIT_INST_1x(setf16, Setf16, Gp)
313 :
314 : //! \}
315 :
316 : //! \name ARMv8.4 Instructions
317 : //! \{
318 :
319 : ASMJIT_INST_0x(cfinv, Cfinv)
320 :
321 : //! \}
322 :
323 : //! \name ARMv8.5 Instructions
324 : //! \{
325 :
326 : ASMJIT_INST_0x(axflag, Axflag)
327 : ASMJIT_INST_0x(xaflag, Xaflag)
328 :
329 : //! \}
330 :
331 : //! \name Branch Instructions
332 : //! \{
333 :
334 : ASMJIT_INST_1cc(b, B, Imm)
335 0 : ASMJIT_INST_1cc(b, B, Label)
336 : ASMJIT_INST_1x(bl, Bl, Imm)
337 : ASMJIT_INST_1x(bl, Bl, Label)
338 : ASMJIT_INST_1x(blr, Blr, Gp)
339 : ASMJIT_INST_1x(br, Br, Gp)
340 : ASMJIT_INST_2x(cbz, Cbz, Gp, Imm)
341 : ASMJIT_INST_2x(cbz, Cbz, Gp, Label)
342 : ASMJIT_INST_2x(cbnz, Cbnz, Gp, Imm)
343 : ASMJIT_INST_2x(cbnz, Cbnz, Gp, Label)
344 : ASMJIT_INST_3x(tbnz, Tbnz, Gp, Imm, Imm)
345 : ASMJIT_INST_3x(tbnz, Tbnz, Gp, Imm, Label)
346 : ASMJIT_INST_3x(tbz, Tbz, Gp, Imm, Imm)
347 : ASMJIT_INST_3x(tbz, Tbz, Gp, Imm, Label)
348 :
349 : //! \}
350 :
351 : //! \name Load & Store Instructions
352 : //! \{
353 :
354 : ASMJIT_INST_3x(cas, Cas, Gp, Gp, Mem)
355 : ASMJIT_INST_3x(casa, Casa, Gp, Gp, Mem)
356 : ASMJIT_INST_3x(casab, Casab, Gp, Gp, Mem)
357 : ASMJIT_INST_3x(casah, Casah, Gp, Gp, Mem)
358 : ASMJIT_INST_3x(casal, Casal, Gp, Gp, Mem)
359 : ASMJIT_INST_3x(casalb, Casalb, Gp, Gp, Mem)
360 : ASMJIT_INST_3x(casalh, Casalh, Gp, Gp, Mem)
361 : ASMJIT_INST_3x(casb, Casb, Gp, Gp, Mem)
362 : ASMJIT_INST_3x(cash, Cash, Gp, Gp, Mem)
363 : ASMJIT_INST_3x(casl, Casl, Gp, Gp, Mem)
364 : ASMJIT_INST_3x(caslb, Caslb, Gp, Gp, Mem)
365 : ASMJIT_INST_3x(caslh, Caslh, Gp, Gp, Mem)
366 :
367 : ASMJIT_INST_5x(casp, Casp, Gp, Gp, Gp, Gp, Mem)
368 : ASMJIT_INST_5x(caspa, Caspa, Gp, Gp, Gp, Gp, Mem)
369 : ASMJIT_INST_5x(caspal, Caspal, Gp, Gp, Gp, Gp, Mem)
370 : ASMJIT_INST_5x(caspl, Caspl, Gp, Gp, Gp, Gp, Mem)
371 :
372 : ASMJIT_INST_3x(ldadd, Ldadd, Gp, Gp, Mem)
373 : ASMJIT_INST_3x(ldadda, Ldadda, Gp, Gp, Mem)
374 : ASMJIT_INST_3x(ldaddab, Ldaddab, Gp, Gp, Mem)
375 : ASMJIT_INST_3x(ldaddah, Ldaddah, Gp, Gp, Mem)
376 : ASMJIT_INST_3x(ldaddal, Ldaddal, Gp, Gp, Mem)
377 : ASMJIT_INST_3x(ldaddalb, Ldaddalb, Gp, Gp, Mem)
378 : ASMJIT_INST_3x(ldaddalh, Ldaddalh, Gp, Gp, Mem)
379 : ASMJIT_INST_3x(ldaddb, Ldaddb, Gp, Gp, Mem)
380 : ASMJIT_INST_3x(ldaddh, Ldaddh, Gp, Gp, Mem)
381 : ASMJIT_INST_3x(ldaddl, Ldaddl, Gp, Gp, Mem)
382 : ASMJIT_INST_3x(ldaddlb, Ldaddlb, Gp, Gp, Mem)
383 : ASMJIT_INST_3x(ldaddlh, Ldaddlh, Gp, Gp, Mem)
384 :
385 : ASMJIT_INST_2x(ldar, Ldar, Gp, Mem)
386 : ASMJIT_INST_2x(ldarb, Ldarb, Gp, Mem)
387 : ASMJIT_INST_2x(ldarh, Ldarh, Gp, Mem)
388 :
389 : ASMJIT_INST_2x(ldaxr, Ldaxr, Gp, Mem)
390 : ASMJIT_INST_2x(ldaxrb, Ldaxrb, Gp, Mem)
391 : ASMJIT_INST_2x(ldaxrh, Ldaxrh, Gp, Mem)
392 :
393 : ASMJIT_INST_3x(ldclr, Ldclr, Gp, Gp, Mem)
394 : ASMJIT_INST_3x(ldclra, Ldclra, Gp, Gp, Mem)
395 : ASMJIT_INST_3x(ldclrab, Ldclrab, Gp, Gp, Mem)
396 : ASMJIT_INST_3x(ldclrah, Ldclrah, Gp, Gp, Mem)
397 : ASMJIT_INST_3x(ldclral, Ldclral, Gp, Gp, Mem)
398 : ASMJIT_INST_3x(ldclralb, Ldclralb, Gp, Gp, Mem)
399 : ASMJIT_INST_3x(ldclralh, Ldclralh, Gp, Gp, Mem)
400 : ASMJIT_INST_3x(ldclrb, Ldclrb, Gp, Gp, Mem)
401 : ASMJIT_INST_3x(ldclrh, Ldclrh, Gp, Gp, Mem)
402 : ASMJIT_INST_3x(ldclrl, Ldclrl, Gp, Gp, Mem)
403 : ASMJIT_INST_3x(ldclrlb, Ldclrlb, Gp, Gp, Mem)
404 : ASMJIT_INST_3x(ldclrlh, Ldclrlh, Gp, Gp, Mem)
405 :
406 : ASMJIT_INST_3x(ldeor, Ldeor, Gp, Gp, Mem)
407 : ASMJIT_INST_3x(ldeora, Ldeora, Gp, Gp, Mem)
408 : ASMJIT_INST_3x(ldeorab, Ldeorab, Gp, Gp, Mem)
409 : ASMJIT_INST_3x(ldeorah, Ldeorah, Gp, Gp, Mem)
410 : ASMJIT_INST_3x(ldeoral, Ldeoral, Gp, Gp, Mem)
411 : ASMJIT_INST_3x(ldeoralb, Ldeoralb, Gp, Gp, Mem)
412 : ASMJIT_INST_3x(ldeoralh, Ldeoralh, Gp, Gp, Mem)
413 : ASMJIT_INST_3x(ldeorb, Ldeorb, Gp, Gp, Mem)
414 : ASMJIT_INST_3x(ldeorh, Ldeorh, Gp, Gp, Mem)
415 : ASMJIT_INST_3x(ldeorl, Ldeorl, Gp, Gp, Mem)
416 : ASMJIT_INST_3x(ldeorlb, Ldeorlb, Gp, Gp, Mem)
417 : ASMJIT_INST_3x(ldeorlh, Ldeorlh, Gp, Gp, Mem)
418 :
419 : ASMJIT_INST_2x(ldlar, Ldlar, Gp, Mem)
420 : ASMJIT_INST_2x(ldlarb, Ldlarb, Gp, Mem)
421 : ASMJIT_INST_2x(ldlarh, Ldlarh, Gp, Mem)
422 :
423 : ASMJIT_INST_3x(ldnp, Ldnp, Gp, Gp, Mem)
424 :
425 : ASMJIT_INST_3x(ldp, Ldp, Gp, Gp, Mem)
426 : ASMJIT_INST_3x(ldpsw, Ldpsw, Gp, Gp, Mem)
427 :
428 0 : ASMJIT_INST_2x(ldr, Ldr, Gp, Mem)
429 0 : ASMJIT_INST_2x(ldrb, Ldrb, Gp, Mem)
430 0 : ASMJIT_INST_2x(ldrh, Ldrh, Gp, Mem)
431 : ASMJIT_INST_2x(ldrsb, Ldrsb, Gp, Mem)
432 : ASMJIT_INST_2x(ldrsh, Ldrsh, Gp, Mem)
433 : ASMJIT_INST_2x(ldrsw, Ldrsw, Gp, Mem)
434 :
435 : ASMJIT_INST_3x(ldset, Ldset, Gp, Gp, Mem)
436 : ASMJIT_INST_3x(ldseta, Ldseta, Gp, Gp, Mem)
437 : ASMJIT_INST_3x(ldsetab, Ldsetab, Gp, Gp, Mem)
438 : ASMJIT_INST_3x(ldsetah, Ldsetah, Gp, Gp, Mem)
439 : ASMJIT_INST_3x(ldsetal, Ldsetal, Gp, Gp, Mem)
440 : ASMJIT_INST_3x(ldsetalb, Ldsetalb, Gp, Gp, Mem)
441 : ASMJIT_INST_3x(ldsetalh, Ldsetalh, Gp, Gp, Mem)
442 : ASMJIT_INST_3x(ldsetb, Ldsetb, Gp, Gp, Mem)
443 : ASMJIT_INST_3x(ldseth, Ldseth, Gp, Gp, Mem)
444 : ASMJIT_INST_3x(ldsetl, Ldsetl, Gp, Gp, Mem)
445 : ASMJIT_INST_3x(ldsetlb, Ldsetlb, Gp, Gp, Mem)
446 : ASMJIT_INST_3x(ldsetlh, Ldsetlh, Gp, Gp, Mem)
447 :
448 : ASMJIT_INST_3x(ldsmax, Ldsmax, Gp, Gp, Mem)
449 : ASMJIT_INST_3x(ldsmaxa, Ldsmaxa, Gp, Gp, Mem)
450 : ASMJIT_INST_3x(ldsmaxab, Ldsmaxab, Gp, Gp, Mem)
451 : ASMJIT_INST_3x(ldsmaxah, Ldsmaxah, Gp, Gp, Mem)
452 : ASMJIT_INST_3x(ldsmaxal, Ldsmaxal, Gp, Gp, Mem)
453 : ASMJIT_INST_3x(ldsmaxalb, Ldsmaxalb, Gp, Gp, Mem)
454 : ASMJIT_INST_3x(ldsmaxalh, Ldsmaxalh, Gp, Gp, Mem)
455 : ASMJIT_INST_3x(ldsmaxb, Ldsmaxb, Gp, Gp, Mem)
456 : ASMJIT_INST_3x(ldsmaxh, Ldsmaxh, Gp, Gp, Mem)
457 : ASMJIT_INST_3x(ldsmaxl, Ldsmaxl, Gp, Gp, Mem)
458 : ASMJIT_INST_3x(ldsmaxlb, Ldsmaxlb, Gp, Gp, Mem)
459 : ASMJIT_INST_3x(ldsmaxlh, Ldsmaxlh, Gp, Gp, Mem)
460 :
461 : ASMJIT_INST_3x(ldsmin, Ldsmin, Gp, Gp, Mem)
462 : ASMJIT_INST_3x(ldsmina, Ldsmina, Gp, Gp, Mem)
463 : ASMJIT_INST_3x(ldsminab, Ldsminab, Gp, Gp, Mem)
464 : ASMJIT_INST_3x(ldsminah, Ldsminah, Gp, Gp, Mem)
465 : ASMJIT_INST_3x(ldsminal, Ldsminal, Gp, Gp, Mem)
466 : ASMJIT_INST_3x(ldsminalb, Ldsminalb, Gp, Gp, Mem)
467 : ASMJIT_INST_3x(ldsminalh, Ldsminalh, Gp, Gp, Mem)
468 : ASMJIT_INST_3x(ldsminb, Ldsminb, Gp, Gp, Mem)
469 : ASMJIT_INST_3x(ldsminh, Ldsminh, Gp, Gp, Mem)
470 : ASMJIT_INST_3x(ldsminl, Ldsminl, Gp, Gp, Mem)
471 : ASMJIT_INST_3x(ldsminlb, Ldsminlb, Gp, Gp, Mem)
472 : ASMJIT_INST_3x(ldsminlh, Ldsminlh, Gp, Gp, Mem)
473 :
474 : ASMJIT_INST_2x(ldtr, Ldtr, Gp, Mem)
475 : ASMJIT_INST_2x(ldtrb, Ldtrb, Gp, Mem)
476 : ASMJIT_INST_2x(ldtrh, Ldtrh, Gp, Mem)
477 : ASMJIT_INST_2x(ldtrsb, Ldtrsb, Gp, Mem)
478 : ASMJIT_INST_2x(ldtrsh, Ldtrsh, Gp, Mem)
479 : ASMJIT_INST_2x(ldtrsw, Ldtrsw, Gp, Mem)
480 :
481 : ASMJIT_INST_3x(ldumax, Ldumax, Gp, Gp, Mem)
482 : ASMJIT_INST_3x(ldumaxa, Ldumaxa, Gp, Gp, Mem)
483 : ASMJIT_INST_3x(ldumaxab, Ldumaxab, Gp, Gp, Mem)
484 : ASMJIT_INST_3x(ldumaxah, Ldumaxah, Gp, Gp, Mem)
485 : ASMJIT_INST_3x(ldumaxal, Ldumaxal, Gp, Gp, Mem)
486 : ASMJIT_INST_3x(ldumaxalb, Ldumaxalb, Gp, Gp, Mem)
487 : ASMJIT_INST_3x(ldumaxalh, Ldumaxalh, Gp, Gp, Mem)
488 : ASMJIT_INST_3x(ldumaxb, Ldumaxb, Gp, Gp, Mem)
489 : ASMJIT_INST_3x(ldumaxh, Ldumaxh, Gp, Gp, Mem)
490 : ASMJIT_INST_3x(ldumaxl, Ldumaxl, Gp, Gp, Mem)
491 : ASMJIT_INST_3x(ldumaxlb, Ldumaxlb, Gp, Gp, Mem)
492 : ASMJIT_INST_3x(ldumaxlh, Ldumaxlh, Gp, Gp, Mem)
493 :
494 : ASMJIT_INST_3x(ldumin, Ldumin, Gp, Gp, Mem)
495 : ASMJIT_INST_3x(ldumina, Ldumina, Gp, Gp, Mem)
496 : ASMJIT_INST_3x(lduminab, Lduminab, Gp, Gp, Mem)
497 : ASMJIT_INST_3x(lduminah, Lduminah, Gp, Gp, Mem)
498 : ASMJIT_INST_3x(lduminal, Lduminal, Gp, Gp, Mem)
499 : ASMJIT_INST_3x(lduminalb, Lduminalb, Gp, Gp, Mem)
500 : ASMJIT_INST_3x(lduminalh, Lduminalh, Gp, Gp, Mem)
501 : ASMJIT_INST_3x(lduminb, Lduminb, Gp, Gp, Mem)
502 : ASMJIT_INST_3x(lduminh, Lduminh, Gp, Gp, Mem)
503 : ASMJIT_INST_3x(lduminl, Lduminl, Gp, Gp, Mem)
504 : ASMJIT_INST_3x(lduminlb, Lduminlb, Gp, Gp, Mem)
505 : ASMJIT_INST_3x(lduminlh, Lduminlh, Gp, Gp, Mem)
506 :
507 : ASMJIT_INST_2x(ldur, Ldur, Gp, Mem)
508 : ASMJIT_INST_2x(ldurb, Ldurb, Gp, Mem)
509 : ASMJIT_INST_2x(ldurh, Ldurh, Gp, Mem)
510 : ASMJIT_INST_2x(ldursb, Ldursb, Gp, Mem)
511 : ASMJIT_INST_2x(ldursh, Ldursh, Gp, Mem)
512 : ASMJIT_INST_2x(ldursw, Ldursw, Gp, Mem)
513 :
514 : ASMJIT_INST_3x(ldxp, Ldxp, Gp, Gp, Mem)
515 : ASMJIT_INST_3x(ldaxp, Ldaxp, Gp, Gp, Mem)
516 :
517 : ASMJIT_INST_2x(ldxr, Ldxr, Gp, Mem)
518 : ASMJIT_INST_2x(ldxrb, Ldxrb, Gp, Mem)
519 : ASMJIT_INST_2x(ldxrh, Ldxrh, Gp, Mem)
520 :
521 : ASMJIT_INST_2x(stadd, Stadd, Gp, Mem)
522 : ASMJIT_INST_2x(staddb, Staddb, Gp, Mem)
523 : ASMJIT_INST_2x(staddh, Staddh, Gp, Mem)
524 : ASMJIT_INST_2x(staddl, Staddl, Gp, Mem)
525 : ASMJIT_INST_2x(staddlb, Staddlb, Gp, Mem)
526 : ASMJIT_INST_2x(staddlh, Staddlh, Gp, Mem)
527 :
528 : ASMJIT_INST_2x(stclr, Stclr, Gp, Mem)
529 : ASMJIT_INST_2x(stclrb, Stclrb, Gp, Mem)
530 : ASMJIT_INST_2x(stclrh, Stclrh, Gp, Mem)
531 : ASMJIT_INST_2x(stclrl, Stclrl, Gp, Mem)
532 : ASMJIT_INST_2x(stclrlb, Stclrlb, Gp, Mem)
533 : ASMJIT_INST_2x(stclrlh, Stclrlh, Gp, Mem)
534 :
535 : ASMJIT_INST_2x(steor, Steor, Gp, Mem)
536 : ASMJIT_INST_2x(steorb, Steorb, Gp, Mem)
537 : ASMJIT_INST_2x(steorh, Steorh, Gp, Mem)
538 : ASMJIT_INST_2x(steorl, Steorl, Gp, Mem)
539 : ASMJIT_INST_2x(steorlb, Steorlb, Gp, Mem)
540 : ASMJIT_INST_2x(steorlh, Steorlh, Gp, Mem)
541 :
542 : ASMJIT_INST_2x(stllr, Stllr, Gp, Mem)
543 : ASMJIT_INST_2x(stllrb, Stllrb, Gp, Mem)
544 : ASMJIT_INST_2x(stllrh, Stllrh, Gp, Mem)
545 :
546 : ASMJIT_INST_2x(stlr, Stllr, Gp, Mem)
547 : ASMJIT_INST_2x(stlrb, Stllrb, Gp, Mem)
548 : ASMJIT_INST_2x(stlrh, Stllrh, Gp, Mem)
549 :
550 : ASMJIT_INST_3x(stlxr, Stlxr, Gp, Gp, Mem)
551 : ASMJIT_INST_3x(stlxrb, Stlxrb, Gp, Gp, Mem)
552 : ASMJIT_INST_3x(stlxrh, Stlxrh, Gp, Gp, Mem)
553 :
554 : ASMJIT_INST_3x(stnp, Stnp, Gp, Gp, Mem)
555 : ASMJIT_INST_3x(stp, Stp, Gp, Gp, Mem)
556 :
557 0 : ASMJIT_INST_2x(str, Str, Gp, Mem)
558 0 : ASMJIT_INST_2x(strb, Strb, Gp, Mem)
559 0 : ASMJIT_INST_2x(strh, Strh, Gp, Mem)
560 :
561 : ASMJIT_INST_2x(stset, Stset, Gp, Mem)
562 : ASMJIT_INST_2x(stsetb, Stsetb, Gp, Mem)
563 : ASMJIT_INST_2x(stseth, Stseth, Gp, Mem)
564 : ASMJIT_INST_2x(stsetl, Stsetl, Gp, Mem)
565 : ASMJIT_INST_2x(stsetlb, Stsetlb, Gp, Mem)
566 : ASMJIT_INST_2x(stsetlh, Stsetlh, Gp, Mem)
567 :
568 : ASMJIT_INST_2x(stsmax, Stsmax, Gp, Mem)
569 : ASMJIT_INST_2x(stsmaxb, Stsmaxb, Gp, Mem)
570 : ASMJIT_INST_2x(stsmaxh, Stsmaxh, Gp, Mem)
571 : ASMJIT_INST_2x(stsmaxl, Stsmaxl, Gp, Mem)
572 : ASMJIT_INST_2x(stsmaxlb, Stsmaxlb, Gp, Mem)
573 : ASMJIT_INST_2x(stsmaxlh, Stsmaxlh, Gp, Mem)
574 :
575 : ASMJIT_INST_2x(stsmin, Stsmin, Gp, Mem)
576 : ASMJIT_INST_2x(stsminb, Stsminb, Gp, Mem)
577 : ASMJIT_INST_2x(stsminh, Stsminh, Gp, Mem)
578 : ASMJIT_INST_2x(stsminl, Stsminl, Gp, Mem)
579 : ASMJIT_INST_2x(stsminlb, Stsminlb, Gp, Mem)
580 : ASMJIT_INST_2x(stsminlh, Stsminlh, Gp, Mem)
581 :
582 : ASMJIT_INST_2x(sttr, Sttr, Gp, Mem)
583 : ASMJIT_INST_2x(sttrb, Sttrb, Gp, Mem)
584 : ASMJIT_INST_2x(sttrh, Sttrh, Gp, Mem)
585 :
586 : ASMJIT_INST_2x(stumax, Stumax, Gp, Mem)
587 : ASMJIT_INST_2x(stumaxb, Stumaxb, Gp, Mem)
588 : ASMJIT_INST_2x(stumaxh, Stumaxh, Gp, Mem)
589 : ASMJIT_INST_2x(stumaxl, Stumaxl, Gp, Mem)
590 : ASMJIT_INST_2x(stumaxlb, Stumaxlb, Gp, Mem)
591 : ASMJIT_INST_2x(stumaxlh, Stumaxlh, Gp, Mem)
592 :
593 : ASMJIT_INST_2x(stumin, Stumin, Gp, Mem)
594 : ASMJIT_INST_2x(stuminb, Stuminb, Gp, Mem)
595 : ASMJIT_INST_2x(stuminh, Stuminh, Gp, Mem)
596 : ASMJIT_INST_2x(stuminl, Stuminl, Gp, Mem)
597 : ASMJIT_INST_2x(stuminlb, Stuminlb, Gp, Mem)
598 : ASMJIT_INST_2x(stuminlh, Stuminlh, Gp, Mem)
599 :
600 : ASMJIT_INST_2x(stur, Stur, Gp, Mem)
601 : ASMJIT_INST_2x(sturb, Sturb, Gp, Mem)
602 : ASMJIT_INST_2x(sturh, Sturh, Gp, Mem)
603 :
604 : ASMJIT_INST_4x(stxp, Stxp, Gp, Gp, Gp, Mem)
605 : ASMJIT_INST_4x(stlxp, Stlxp, Gp, Gp, Gp, Mem)
606 :
607 : ASMJIT_INST_3x(stxr, Stxr, Gp, Gp, Mem)
608 : ASMJIT_INST_3x(stxrb, Stxrb, Gp, Gp, Mem)
609 : ASMJIT_INST_3x(stxrh, Stxrh, Gp, Gp, Mem)
610 :
611 : ASMJIT_INST_3x(swp, Swp, Gp, Gp, Mem)
612 : ASMJIT_INST_3x(swpa, Swpa, Gp, Gp, Mem)
613 : ASMJIT_INST_3x(swpab, Swpab, Gp, Gp, Mem)
614 : ASMJIT_INST_3x(swpah, Swpah, Gp, Gp, Mem)
615 : ASMJIT_INST_3x(swpal, Swpal, Gp, Gp, Mem)
616 : ASMJIT_INST_3x(swpalb, Swpalb, Gp, Gp, Mem)
617 : ASMJIT_INST_3x(swpalh, Swpalh, Gp, Gp, Mem)
618 : ASMJIT_INST_3x(swpb, Swpb, Gp, Gp, Mem)
619 : ASMJIT_INST_3x(swph, Swph, Gp, Gp, Mem)
620 : ASMJIT_INST_3x(swpl, Swpl, Gp, Gp, Mem)
621 : ASMJIT_INST_3x(swplb, Swplb, Gp, Gp, Mem)
622 : ASMJIT_INST_3x(swplh, Swplh, Gp, Gp, Mem)
623 : //! \}
624 :
625 : //! \name CRC Instructions (ARMv8.1-A, optional in ARMv8.0-A)
626 : //! \{
627 :
628 : ASMJIT_INST_3x(crc32b, Crc32b, Gp, Gp, Gp);
629 : ASMJIT_INST_3x(crc32h, Crc32h, Gp, Gp, Gp);
630 : ASMJIT_INST_3x(crc32w, Crc32w, Gp, Gp, Gp);
631 : ASMJIT_INST_3x(crc32x, Crc32x, Gp, Gp, Gp);
632 :
633 : ASMJIT_INST_3x(crc32cb, Crc32cb, Gp, Gp, Gp);
634 : ASMJIT_INST_3x(crc32ch, Crc32ch, Gp, Gp, Gp);
635 : ASMJIT_INST_3x(crc32cw, Crc32cw, Gp, Gp, Gp);
636 : ASMJIT_INST_3x(crc32cx, Crc32cx, Gp, Gp, Gp);
637 :
638 : //! \}
639 :
640 : //! \name MTE Instructions
641 : //! \{
642 :
643 : ASMJIT_INST_2x(autda, Autda, Gp, Gp);
644 : ASMJIT_INST_2x(autdb, Autdb, Gp, Gp);
645 : ASMJIT_INST_1x(autdza, Autdza, Gp);
646 : ASMJIT_INST_1x(autdzb, Autdzb, Gp);
647 : ASMJIT_INST_2x(autia, Autia, Gp, Gp);
648 : ASMJIT_INST_0x(autia1716, Autia1716);
649 : ASMJIT_INST_0x(autiasp, Autiasp);
650 : ASMJIT_INST_0x(autiaz, Autiaz);
651 : ASMJIT_INST_2x(autib, Autib, Gp, Gp);
652 : ASMJIT_INST_0x(autib1716, Autib1716);
653 : ASMJIT_INST_0x(autibsp, Autibsp);
654 : ASMJIT_INST_0x(autibz, Autibz);
655 : ASMJIT_INST_1x(autiza, Autiza, Gp);
656 : ASMJIT_INST_1x(autizb, Autizb, Gp);
657 :
658 : ASMJIT_INST_3x(gmi, Gmi, Gp, Gp, Gp);
659 :
660 : ASMJIT_INST_2x(cmpp, Cmpp, Gp, Gp);
661 : ASMJIT_INST_4x(addg, Addg, Gp, Gp, Imm, Imm);
662 :
663 : ASMJIT_INST_2x(ldg, Ldg, Gp, Mem)
664 : ASMJIT_INST_2x(ldgm, Ldgm, Gp, Mem)
665 : ASMJIT_INST_2x(ldraa, Ldraa, Gp, Mem)
666 : ASMJIT_INST_2x(ldrab, Ldrab, Gp, Mem)
667 :
668 : ASMJIT_INST_2x(pacda, Pacda, Gp, Gp);
669 : ASMJIT_INST_2x(pacdb, Pacdb, Gp, Gp);
670 : ASMJIT_INST_1x(pacdza, Pacdza, Gp);
671 : ASMJIT_INST_1x(pacdzb, Pacdzb, Gp);
672 : ASMJIT_INST_3x(pacga, Pacga, Gp, Gp, Gp);
673 :
674 : ASMJIT_INST_3x(subp, Subp, Gp, Gp, Gp);
675 : ASMJIT_INST_3x(subps, Subps, Gp, Gp, Gp);
676 : ASMJIT_INST_4x(subg, Subg, Gp, Gp, Imm, Imm);
677 :
678 : ASMJIT_INST_2x(st2g, St2g, Gp, Mem)
679 : ASMJIT_INST_2x(stg, Stg, Gp, Mem)
680 : ASMJIT_INST_3x(stgp, Stgp, Gp, Gp, Mem)
681 : ASMJIT_INST_2x(stgm, Stgm, Gp, Mem)
682 : ASMJIT_INST_2x(stzg, Stzg, Gp, Mem)
683 : ASMJIT_INST_2x(stz2g, Stz2g, Gp, Mem)
684 : ASMJIT_INST_2x(stzgm, Stzgm, Gp, Mem)
685 :
686 : ASMJIT_INST_1x(xpacd, Xpacd, Gp);
687 : ASMJIT_INST_1x(xpaci, Xpaci, Gp);
688 : ASMJIT_INST_0x(xpaclri, Xpaclri);
689 :
690 : //! \}
691 :
692 : //! \name Hint Instructions
693 : //! \{
694 :
695 : ASMJIT_INST_1x(hint, Hint, Imm)
696 : ASMJIT_INST_0x(nop, Nop)
697 : ASMJIT_INST_0x(sev, Sev)
698 : ASMJIT_INST_0x(sevl, Sevl)
699 : ASMJIT_INST_0x(wfe, Wfe)
700 : ASMJIT_INST_0x(wfi, Wfi)
701 : ASMJIT_INST_0x(yield, Yield)
702 :
703 : //! \}
704 :
705 : //! \name SIMD & FP Instructions
706 : //! \{
707 :
708 : ASMJIT_INST_2x(abs, Abs_v, Vec, Vec);
709 : ASMJIT_INST_3x(add, Add_v, Vec, Vec, Vec);
710 : ASMJIT_INST_3x(addhn, Addhn_v, Vec, Vec, Vec);
711 : ASMJIT_INST_3x(addhn2, Addhn2_v, Vec, Vec, Vec);
712 : ASMJIT_INST_2x(addp, Addp_v, Vec, Vec);
713 : ASMJIT_INST_3x(addp, Addp_v, Vec, Vec, Vec);
714 : ASMJIT_INST_2x(addv, Addv_v, Vec, Vec);
715 : ASMJIT_INST_3x(and_, And_v, Vec, Vec, Vec);
716 : ASMJIT_INST_2x(bic, Bic_v, Vec, Imm);
717 : ASMJIT_INST_3x(bic, Bic_v, Vec, Vec, Vec);
718 : ASMJIT_INST_3x(bic, Bic_v, Vec, Imm, Imm);
719 : ASMJIT_INST_3x(bif, Bif_v, Vec, Vec, Vec);
720 : ASMJIT_INST_3x(bit, Bit_v, Vec, Vec, Vec);
721 : ASMJIT_INST_3x(bsl, Bsl_v, Vec, Vec, Vec);
722 : ASMJIT_INST_2x(cls, Cls_v, Vec, Vec);
723 : ASMJIT_INST_2x(clz, Clz_v, Vec, Vec);
724 : ASMJIT_INST_3x(cmeq, Cmeq_v, Vec, Vec, Vec);
725 : ASMJIT_INST_3x(cmeq, Cmeq_v, Vec, Vec, Imm);
726 : ASMJIT_INST_3x(cmge, Cmge_v, Vec, Vec, Vec);
727 : ASMJIT_INST_3x(cmge, Cmge_v, Vec, Vec, Imm);
728 : ASMJIT_INST_3x(cmgt, Cmgt_v, Vec, Vec, Vec);
729 : ASMJIT_INST_3x(cmgt, Cmgt_v, Vec, Vec, Imm);
730 : ASMJIT_INST_3x(cmhi, Cmhi_v, Vec, Vec, Vec);
731 : ASMJIT_INST_3x(cmhs, Cmhs_v, Vec, Vec, Vec);
732 : ASMJIT_INST_3x(cmle, Cmle_v, Vec, Vec, Imm);
733 : ASMJIT_INST_3x(cmlt, Cmlt_v, Vec, Vec, Imm);
734 : ASMJIT_INST_3x(cmtst, Cmtst_v, Vec, Vec, Vec);
735 : ASMJIT_INST_2x(cnt, Cnt_v, Vec, Vec);
736 : ASMJIT_INST_2x(dup, Dup_v, Vec, Gp);
737 : ASMJIT_INST_2x(dup, Dup_v, Vec, Vec);
738 : ASMJIT_INST_3x(eor, Eor_v, Vec, Vec, Vec);
739 : ASMJIT_INST_4x(ext, Ext_v, Vec, Vec, Vec, Imm);
740 : ASMJIT_INST_3x(fabd, Fabd_v, Vec, Vec, Vec);
741 : ASMJIT_INST_2x(fabs, Fabs_v, Vec, Vec);
742 : ASMJIT_INST_3x(facge, Facge_v, Vec, Vec, Vec);
743 : ASMJIT_INST_3x(facgt, Facgt_v, Vec, Vec, Vec);
744 : ASMJIT_INST_3x(fadd, Fadd_v, Vec, Vec, Vec);
745 : ASMJIT_INST_2x(faddp, Faddp_v, Vec, Vec);
746 : ASMJIT_INST_3x(faddp, Faddp_v, Vec, Vec, Vec);
747 : ASMJIT_INST_4x(fccmp, Fccmp_v, Vec, Vec, Imm, Imm);
748 : ASMJIT_INST_4x(fccmpe, Fccmpe_v, Vec, Vec, Imm, Imm);
749 : ASMJIT_INST_3x(fcmeq, Fcmeq_v, Vec, Vec, Vec);
750 : ASMJIT_INST_3x(fcmeq, Fcmeq_v, Vec, Vec, Imm);
751 : ASMJIT_INST_3x(fcmge, Fcmge_v, Vec, Vec, Vec);
752 : ASMJIT_INST_3x(fcmge, Fcmge_v, Vec, Vec, Imm);
753 : ASMJIT_INST_3x(fcmgt, Fcmgt_v, Vec, Vec, Vec);
754 : ASMJIT_INST_3x(fcmgt, Fcmgt_v, Vec, Vec, Imm);
755 : ASMJIT_INST_3x(fcmle, Fcmle_v, Vec, Vec, Imm);
756 : ASMJIT_INST_3x(fcmlt, Fcmlt_v, Vec, Vec, Imm);
757 : ASMJIT_INST_2x(fcmp, Fcmp_v, Vec, Vec);
758 : ASMJIT_INST_2x(fcmp, Fcmp_v, Vec, Imm);
759 : ASMJIT_INST_2x(fcmpe, Fcmpe_v, Vec, Vec);
760 : ASMJIT_INST_2x(fcmpe, Fcmpe_v, Vec, Imm);
761 : ASMJIT_INST_4x(fcsel, Fcsel_v, Vec, Vec, Vec, Imm);
762 : ASMJIT_INST_2x(fcvt, Fcvt_v, Vec, Vec);
763 : ASMJIT_INST_2x(fcvtas, Fcvtas_v, Gp, Vec);
764 : ASMJIT_INST_2x(fcvtas, Fcvtas_v, Vec, Vec);
765 : ASMJIT_INST_2x(fcvtau, Fcvtau_v, Gp, Vec);
766 : ASMJIT_INST_2x(fcvtau, Fcvtau_v, Vec, Vec);
767 : ASMJIT_INST_2x(fcvtl, Fcvtl_v, Vec, Vec);
768 : ASMJIT_INST_2x(fcvtl2, Fcvtl2_v, Vec, Vec);
769 : ASMJIT_INST_2x(fcvtms, Fcvtms_v, Gp, Vec);
770 : ASMJIT_INST_2x(fcvtms, Fcvtms_v, Vec, Vec);
771 : ASMJIT_INST_2x(fcvtmu, Fcvtmu_v, Gp, Vec);
772 : ASMJIT_INST_2x(fcvtmu, Fcvtmu_v, Vec, Vec);
773 : ASMJIT_INST_2x(fcvtn, Fcvtn_v, Vec, Vec);
774 : ASMJIT_INST_2x(fcvtn2, Fcvtn2_v, Vec, Vec);
775 : ASMJIT_INST_2x(fcvtns, Fcvtns_v, Gp, Vec);
776 : ASMJIT_INST_2x(fcvtns, Fcvtns_v, Vec, Vec);
777 : ASMJIT_INST_2x(fcvtnu, Fcvtnu_v, Gp, Vec);
778 : ASMJIT_INST_2x(fcvtnu, Fcvtnu_v, Vec, Vec);
779 : ASMJIT_INST_2x(fcvtps, Fcvtps_v, Gp, Vec);
780 : ASMJIT_INST_2x(fcvtps, Fcvtps_v, Vec, Vec);
781 : ASMJIT_INST_2x(fcvtpu, Fcvtpu_v, Gp, Vec);
782 : ASMJIT_INST_2x(fcvtpu, Fcvtpu_v, Vec, Vec);
783 : ASMJIT_INST_2x(fcvtxn, Fcvtxn_v, Vec, Vec);
784 : ASMJIT_INST_2x(fcvtxn2, Fcvtxn2_v, Vec, Vec);
785 : ASMJIT_INST_2x(fcvtzs, Fcvtzs_v, Gp, Vec);
786 : ASMJIT_INST_3x(fcvtzs, Fcvtzs_v, Gp, Vec, Imm);
787 : ASMJIT_INST_2x(fcvtzs, Fcvtzs_v, Vec, Vec);
788 : ASMJIT_INST_3x(fcvtzs, Fcvtzs_v, Vec, Vec, Imm);
789 : ASMJIT_INST_2x(fcvtzu, Fcvtzu_v, Gp, Vec);
790 : ASMJIT_INST_3x(fcvtzu, Fcvtzu_v, Gp, Vec, Imm);
791 : ASMJIT_INST_2x(fcvtzu, Fcvtzu_v, Vec, Vec);
792 : ASMJIT_INST_3x(fcvtzu, Fcvtzu_v, Vec, Vec, Imm);
793 : ASMJIT_INST_3x(fdiv, Fdiv_v, Vec, Vec, Vec);
794 : ASMJIT_INST_4x(fmadd, Fmadd_v, Vec, Vec, Vec, Vec);
795 : ASMJIT_INST_3x(fmax, Fmax_v, Vec, Vec, Vec);
796 : ASMJIT_INST_3x(fmaxnm, Fmaxnm_v, Vec, Vec, Vec);
797 : ASMJIT_INST_3x(fmaxnmp, Fmaxnmp_v, Vec, Vec, Vec);
798 : ASMJIT_INST_2x(fmaxnmp, Fmaxnmp_v, Vec, Vec);
799 : ASMJIT_INST_2x(fmaxnmv, Fmaxnmv_v, Vec, Vec);
800 : ASMJIT_INST_3x(fmaxp, Fmaxp_v, Vec, Vec, Vec);
801 : ASMJIT_INST_2x(fmaxp, Fmaxp_v, Vec, Vec);
802 : ASMJIT_INST_2x(fmaxv, Fmaxv_v, Vec, Vec);
803 : ASMJIT_INST_3x(fmin, Fmin_v, Vec, Vec, Vec);
804 : ASMJIT_INST_3x(fminnm, Fminnm_v, Vec, Vec, Vec);
805 : ASMJIT_INST_2x(fminnmv, Fminnmv_v, Vec, Vec);
806 : ASMJIT_INST_3x(fminnmp, Fminnmp_v, Vec, Vec, Vec);
807 : ASMJIT_INST_2x(fminnmp, Fminnmp_v, Vec, Vec);
808 : ASMJIT_INST_2x(fminp, Fminp_v, Vec, Vec);
809 : ASMJIT_INST_3x(fminp, Fminp_v, Vec, Vec, Vec);
810 : ASMJIT_INST_2x(fminv, Fminv_v, Vec, Vec);
811 : ASMJIT_INST_3x(fmla, Fmla_v, Vec, Vec, Vec);
812 : ASMJIT_INST_3x(fmls, Fmls_v, Vec, Vec, Vec);
813 : ASMJIT_INST_2x(fmov, Fmov_v, Gp, Vec);
814 : ASMJIT_INST_2x(fmov, Fmov_v, Vec, Gp);
815 0 : ASMJIT_INST_2x(fmov, Fmov_v, Vec, Vec);
816 : ASMJIT_INST_2x(fmov, Fmov_v, Vec, Imm);
817 : ASMJIT_INST_4x(fmsub, Fmsub_v, Vec, Vec, Vec, Vec);
818 : ASMJIT_INST_3x(fmul, Fmul_v, Vec, Vec, Vec);
819 : ASMJIT_INST_3x(fmulx, Fmulx_v, Vec, Vec, Vec);
820 : ASMJIT_INST_2x(fneg, Fneg_v, Vec, Vec);
821 : ASMJIT_INST_4x(fnmadd, Fnmadd_v, Vec, Vec, Vec, Vec);
822 : ASMJIT_INST_4x(fnmsub, Fnmsub_v, Vec, Vec, Vec, Vec);
823 : ASMJIT_INST_3x(fnmul, Fnmul_v, Vec, Vec, Vec);
824 : ASMJIT_INST_2x(frecpe, Frecpe_v, Vec, Vec);
825 : ASMJIT_INST_3x(frecps, Frecps_v, Vec, Vec, Vec);
826 : ASMJIT_INST_2x(frecpx, Frecpx_v, Vec, Vec);
827 : ASMJIT_INST_2x(frint32x, Frint32x_v, Vec, Vec);
828 : ASMJIT_INST_2x(frint32z, Frint32z_v, Vec, Vec);
829 : ASMJIT_INST_2x(frint64x, Frint64x_v, Vec, Vec);
830 : ASMJIT_INST_2x(frint64z, Frint64z_v, Vec, Vec);
831 : ASMJIT_INST_2x(frinta, Frinta_v, Vec, Vec);
832 : ASMJIT_INST_2x(frinti, Frinti_v, Vec, Vec);
833 : ASMJIT_INST_2x(frintm, Frintm_v, Vec, Vec);
834 : ASMJIT_INST_2x(frintn, Frintn_v, Vec, Vec);
835 : ASMJIT_INST_2x(frintp, Frintp_v, Vec, Vec);
836 : ASMJIT_INST_2x(frintx, Frintx_v, Vec, Vec);
837 : ASMJIT_INST_2x(frintz, Frintz_v, Vec, Vec);
838 : ASMJIT_INST_2x(frsqrte, Frsqrte_v, Vec, Vec);
839 : ASMJIT_INST_3x(frsqrts, Frsqrts_v, Vec, Vec, Vec);
840 : ASMJIT_INST_2x(fsqrt, Fsqrt_v, Vec, Vec);
841 : ASMJIT_INST_3x(fsub, Fsub_v, Vec, Vec, Vec);
842 : ASMJIT_INST_2x(ins, Ins_v, Vec, Gp);
843 : ASMJIT_INST_2x(ins, Ins_v, Vec, Vec);
844 : ASMJIT_INST_2x(ld1, Ld1_v, Vec, Mem);
845 : ASMJIT_INST_3x(ld1, Ld1_v, Vec, Vec, Mem);
846 : ASMJIT_INST_4x(ld1, Ld1_v, Vec, Vec, Vec, Mem);
847 : ASMJIT_INST_5x(ld1, Ld1_v, Vec, Vec, Vec, Vec, Mem);
848 : ASMJIT_INST_2x(ld1r, Ld1r_v, Vec, Mem);
849 : ASMJIT_INST_3x(ld2, Ld2_v, Vec, Vec, Mem);
850 : ASMJIT_INST_3x(ld2r, Ld2r_v, Vec, Vec, Mem);
851 : ASMJIT_INST_4x(ld3, Ld3_v, Vec, Vec, Vec, Mem);
852 : ASMJIT_INST_4x(ld3r, Ld3r_v, Vec, Vec, Vec, Mem);
853 : ASMJIT_INST_5x(ld4, Ld4_v, Vec, Vec, Vec, Vec, Mem);
854 : ASMJIT_INST_5x(ld4r, Ld4r_v, Vec, Vec, Vec, Vec, Mem);
855 : ASMJIT_INST_3x(ldnp, Ldnp_v, Vec, Vec, Mem);
856 : ASMJIT_INST_3x(ldp, Ldp_v, Vec, Vec, Mem);
857 0 : ASMJIT_INST_2x(ldr, Ldr_v, Vec, Mem);
858 : ASMJIT_INST_2x(ldur, Ldur_v, Vec, Mem);
859 : ASMJIT_INST_3x(mla, Mla_v, Vec, Vec, Vec);
860 : ASMJIT_INST_3x(mls, Mls_v, Vec, Vec, Vec);
861 0 : ASMJIT_INST_2x(mov, Mov_v, Vec, Vec);
862 : ASMJIT_INST_2x(mov, Mov_v, Gp, Vec);
863 : ASMJIT_INST_2x(mov, Mov_v, Vec, Gp);
864 : ASMJIT_INST_2x(movi, Movi_v, Vec, Imm);
865 : ASMJIT_INST_3x(movi, Movi_v, Vec, Imm, Imm);
866 : ASMJIT_INST_3x(mul, Mul_v, Vec, Vec, Vec);
867 : ASMJIT_INST_2x(mvn, Mvn_v, Vec, Vec);
868 : ASMJIT_INST_2x(mvni, Mvni_v, Vec, Imm);
869 : ASMJIT_INST_3x(mvni, Mvni_v, Vec, Imm, Imm);
870 : ASMJIT_INST_2x(neg, Neg_v, Vec, Vec);
871 : ASMJIT_INST_2x(not_, Not_v, Vec, Vec);
872 : ASMJIT_INST_3x(orn, Orn_v, Vec, Vec, Vec);
873 : ASMJIT_INST_2x(orr, Orr_v, Vec, Imm);
874 : ASMJIT_INST_3x(orr, Orr_v, Vec, Vec, Vec);
875 : ASMJIT_INST_3x(orr, Orr_v, Vec, Imm, Imm);
876 : ASMJIT_INST_3x(pmul, Pmul_v, Vec, Vec, Vec);
877 : ASMJIT_INST_3x(pmull, Pmull_v, Vec, Vec, Vec);
878 : ASMJIT_INST_3x(pmull2, Pmull2_v, Vec, Vec, Vec);
879 : ASMJIT_INST_3x(raddhn, Raddhn_v, Vec, Vec, Vec);
880 : ASMJIT_INST_3x(raddhn2, Raddhn2_v, Vec, Vec, Vec);
881 : ASMJIT_INST_2x(rbit, Rbit_v, Vec, Vec);
882 : ASMJIT_INST_2x(rev16, Rev16_v, Vec, Vec);
883 : ASMJIT_INST_2x(rev32, Rev32_v, Vec, Vec);
884 : ASMJIT_INST_2x(rev64, Rev64_v, Vec, Vec);
885 : ASMJIT_INST_3x(rshrn, Rshrn_v, Vec, Vec, Imm);
886 : ASMJIT_INST_3x(rshrn2, Rshrn2_v, Vec, Vec, Imm);
887 : ASMJIT_INST_3x(rsubhn, Rsubhn_v, Vec, Vec, Vec);
888 : ASMJIT_INST_3x(rsubhn2, Rsubhn2_v, Vec, Vec, Vec);
889 : ASMJIT_INST_3x(saba, Saba_v, Vec, Vec, Vec);
890 : ASMJIT_INST_3x(sabal, Sabal_v, Vec, Vec, Vec);
891 : ASMJIT_INST_3x(sabal2, Sabal2_v, Vec, Vec, Vec);
892 : ASMJIT_INST_3x(sabd, Sabd_v, Vec, Vec, Vec);
893 : ASMJIT_INST_3x(sabdl, Sabdl_v, Vec, Vec, Vec);
894 : ASMJIT_INST_3x(sabdl2, Sabdl2_v, Vec, Vec, Vec);
895 : ASMJIT_INST_2x(sadalp, Sadalp_v, Vec, Vec);
896 : ASMJIT_INST_3x(saddl, Saddl_v, Vec, Vec, Vec);
897 : ASMJIT_INST_3x(saddl2, Saddl2_v, Vec, Vec, Vec);
898 : ASMJIT_INST_2x(saddlp, Saddlp_v, Vec, Vec);
899 : ASMJIT_INST_2x(saddlv, Saddlv_v, Vec, Vec);
900 : ASMJIT_INST_3x(saddw, Saddw_v, Vec, Vec, Vec);
901 : ASMJIT_INST_3x(saddw2, Saddw2_v, Vec, Vec, Vec);
902 : ASMJIT_INST_2x(scvtf, Scvtf_v, Vec, Gp);
903 : ASMJIT_INST_3x(scvtf, Scvtf_v, Vec, Gp, Imm);
904 : ASMJIT_INST_2x(scvtf, Scvtf_v, Vec, Vec);
905 : ASMJIT_INST_3x(scvtf, Scvtf_v, Vec, Vec, Imm);
906 : ASMJIT_INST_3x(shadd, Shadd_v, Vec, Vec, Vec);
907 : ASMJIT_INST_3x(shl, Shl_v, Vec, Vec, Imm);
908 : ASMJIT_INST_3x(shll, Shll_v, Vec, Vec, Imm);
909 : ASMJIT_INST_3x(shll2, Shll2_v, Vec, Vec, Imm);
910 : ASMJIT_INST_3x(shrn, Shrn_v, Vec, Vec, Imm);
911 : ASMJIT_INST_3x(shrn2, Shrn2_v, Vec, Vec, Imm);
912 : ASMJIT_INST_3x(shsub, Shsub_v, Vec, Vec, Vec);
913 : ASMJIT_INST_3x(sli, Sli_v, Vec, Vec, Imm);
914 : ASMJIT_INST_3x(smax, Smax_v, Vec, Vec, Vec);
915 : ASMJIT_INST_3x(smaxp, Smaxp_v, Vec, Vec, Vec);
916 : ASMJIT_INST_2x(smaxv, Smaxv_v, Vec, Vec);
917 : ASMJIT_INST_3x(smin, Smin_v, Vec, Vec, Vec);
918 : ASMJIT_INST_3x(sminp, Sminp_v, Vec, Vec, Vec);
919 : ASMJIT_INST_2x(sminv, Sminv_v, Vec, Vec);
920 : ASMJIT_INST_3x(smlal, Smlal_v, Vec, Vec, Vec);
921 : ASMJIT_INST_3x(smlal2, Smlal2_v, Vec, Vec, Vec);
922 : ASMJIT_INST_3x(smlsl, Smlsl_v, Vec, Vec, Vec);
923 : ASMJIT_INST_3x(smlsl2, Smlsl2_v, Vec, Vec, Vec);
924 : ASMJIT_INST_2x(smov, Smov_v, Gp, Vec);
925 : ASMJIT_INST_3x(smull, Smull_v, Vec, Vec, Vec);
926 : ASMJIT_INST_3x(smull2, Smull2_v, Vec, Vec, Vec);
927 : ASMJIT_INST_2x(sqabs, Sqabs_v, Vec, Vec);
928 : ASMJIT_INST_3x(sqadd, Sqadd_v, Vec, Vec, Vec);
929 : ASMJIT_INST_3x(sqdmlal, Sqdmlal_v, Vec, Vec, Vec);
930 : ASMJIT_INST_3x(sqdmlal2, Sqdmlal2_v, Vec, Vec, Vec);
931 : ASMJIT_INST_3x(sqdmlsl, Sqdmlsl_v, Vec, Vec, Vec);
932 : ASMJIT_INST_3x(sqdmlsl2, Sqdmlsl2_v, Vec, Vec, Vec);
933 : ASMJIT_INST_3x(sqdmulh, Sqdmulh_v, Vec, Vec, Vec);
934 : ASMJIT_INST_3x(sqdmull, Sqdmull_v, Vec, Vec, Vec);
935 : ASMJIT_INST_3x(sqdmull2, Sqdmull2_v, Vec, Vec, Vec);
936 : ASMJIT_INST_2x(sqneg, Sqneg_v, Vec, Vec);
937 : ASMJIT_INST_3x(sqrdmulh, Sqrdmulh_v, Vec, Vec, Vec);
938 : ASMJIT_INST_3x(sqrshl, Sqrshl_v, Vec, Vec, Vec);
939 : ASMJIT_INST_3x(sqrshrn, Sqrshrn_v, Vec, Vec, Imm);
940 : ASMJIT_INST_3x(sqrshrn2, Sqrshrn2_v, Vec, Vec, Imm);
941 : ASMJIT_INST_3x(sqrshrun, Sqrshrun_v, Vec, Vec, Imm);
942 : ASMJIT_INST_3x(sqrshrun2, Sqrshrun2_v, Vec, Vec, Imm);
943 : ASMJIT_INST_3x(sqshl, Sqshl_v, Vec, Vec, Vec);
944 : ASMJIT_INST_3x(sqshl, Sqshl_v, Vec, Vec, Imm);
945 : ASMJIT_INST_3x(sqshlu, Sqshlu_v, Vec, Vec, Imm);
946 : ASMJIT_INST_3x(sqshrn, Sqshrn_v, Vec, Vec, Imm);
947 : ASMJIT_INST_3x(sqshrn2, Sqshrn2_v, Vec, Vec, Imm);
948 : ASMJIT_INST_3x(sqshrun, Sqshrun_v, Vec, Vec, Imm);
949 : ASMJIT_INST_3x(sqshrun2, Sqshrun2_v, Vec, Vec, Imm);
950 : ASMJIT_INST_3x(sqsub, Sqsub_v, Vec, Vec, Vec);
951 : ASMJIT_INST_2x(sqxtn, Sqxtn_v, Vec, Vec);
952 : ASMJIT_INST_2x(sqxtn2, Sqxtn2_v, Vec, Vec);
953 : ASMJIT_INST_2x(sqxtun, Sqxtun_v, Vec, Vec);
954 : ASMJIT_INST_2x(sqxtun2, Sqxtun2_v, Vec, Vec);
955 : ASMJIT_INST_3x(srhadd, Srhadd_v, Vec, Vec, Vec);
956 : ASMJIT_INST_3x(sri, Sri_v, Vec, Vec, Imm);
957 : ASMJIT_INST_3x(srshl, Srshl_v, Vec, Vec, Vec);
958 : ASMJIT_INST_3x(srshr, Srshr_v, Vec, Vec, Imm);
959 : ASMJIT_INST_3x(srsra, Srsra_v, Vec, Vec, Imm);
960 : ASMJIT_INST_3x(sshl, Sshl_v, Vec, Vec, Vec);
961 : ASMJIT_INST_3x(sshll, Sshll_v, Vec, Vec, Imm);
962 : ASMJIT_INST_3x(sshll2, Sshll2_v, Vec, Vec, Imm);
963 : ASMJIT_INST_3x(sshr, Sshr_v, Vec, Vec, Imm);
964 : ASMJIT_INST_3x(ssra, Ssra_v, Vec, Vec, Imm);
965 : ASMJIT_INST_3x(ssubl, Ssubl_v, Vec, Vec, Vec);
966 : ASMJIT_INST_3x(ssubl2, Ssubl2_v, Vec, Vec, Vec);
967 : ASMJIT_INST_3x(ssubw, Ssubw_v, Vec, Vec, Vec);
968 : ASMJIT_INST_3x(ssubw2, Ssubw2_v, Vec, Vec, Vec);
969 : ASMJIT_INST_2x(st1, St1_v, Vec, Mem);
970 : ASMJIT_INST_3x(st1, St1_v, Vec, Vec, Mem);
971 : ASMJIT_INST_4x(st1, St1_v, Vec, Vec, Vec, Mem);
972 : ASMJIT_INST_5x(st1, St1_v, Vec, Vec, Vec, Vec, Mem);
973 : ASMJIT_INST_3x(st2, St2_v, Vec, Vec, Mem);
974 : ASMJIT_INST_4x(st3, St3_v, Vec, Vec, Vec, Mem);
975 : ASMJIT_INST_5x(st4, St4_v, Vec, Vec, Vec, Vec, Mem);
976 : ASMJIT_INST_3x(stnp, Stnp_v, Vec, Vec, Mem);
977 : ASMJIT_INST_3x(stp, Stp_v, Vec, Vec, Mem);
978 0 : ASMJIT_INST_2x(str, Str_v, Vec, Mem);
979 : ASMJIT_INST_2x(stur, Stur_v, Vec, Mem);
980 : ASMJIT_INST_3x(sub, Sub_v, Vec, Vec, Vec);
981 : ASMJIT_INST_3x(subhn, Subhn_v, Vec, Vec, Vec);
982 : ASMJIT_INST_3x(subhn2, Subhn2_v, Vec, Vec, Vec);
983 : ASMJIT_INST_2x(suqadd, Suqadd_v, Vec, Vec);
984 : ASMJIT_INST_2x(sxtl, Sxtl_v, Vec, Vec);
985 : ASMJIT_INST_2x(sxtl2, Sxtl2_v, Vec, Vec);
986 : ASMJIT_INST_3x(tbl, Tbl_v, Vec, Vec, Vec);
987 : ASMJIT_INST_4x(tbl, Tbl_v, Vec, Vec, Vec, Vec);
988 : ASMJIT_INST_5x(tbl, Tbl_v, Vec, Vec, Vec, Vec, Vec);
989 : ASMJIT_INST_6x(tbl, Tbl_v, Vec, Vec, Vec, Vec, Vec, Vec);
990 : ASMJIT_INST_3x(tbx, Tbx_v, Vec, Vec, Vec);
991 : ASMJIT_INST_4x(tbx, Tbx_v, Vec, Vec, Vec, Vec);
992 : ASMJIT_INST_5x(tbx, Tbx_v, Vec, Vec, Vec, Vec, Vec);
993 : ASMJIT_INST_6x(tbx, Tbx_v, Vec, Vec, Vec, Vec, Vec, Vec);
994 : ASMJIT_INST_3x(trn1, Trn1_v, Vec, Vec, Vec);
995 : ASMJIT_INST_3x(trn2, Trn2_v, Vec, Vec, Vec);
996 : ASMJIT_INST_3x(uaba, Uaba_v, Vec, Vec, Vec);
997 : ASMJIT_INST_3x(uabal, Uabal_v, Vec, Vec, Vec);
998 : ASMJIT_INST_3x(uabal2, Uabal2_v, Vec, Vec, Vec);
999 : ASMJIT_INST_3x(uabd, Uabd_v, Vec, Vec, Vec);
1000 : ASMJIT_INST_3x(uabdl, Uabdl_v, Vec, Vec, Vec);
1001 : ASMJIT_INST_3x(uabdl2, Uabdl2_v, Vec, Vec, Vec);
1002 : ASMJIT_INST_2x(uadalp, Uadalp_v, Vec, Vec);
1003 : ASMJIT_INST_3x(uaddl, Uaddl_v, Vec, Vec, Vec);
1004 : ASMJIT_INST_3x(uaddl2, Uaddl2_v, Vec, Vec, Vec);
1005 : ASMJIT_INST_2x(uaddlp, Uaddlp_v, Vec, Vec);
1006 : ASMJIT_INST_2x(uaddlv, Uaddlv_v, Vec, Vec);
1007 : ASMJIT_INST_3x(uaddw, Uaddw_v, Vec, Vec, Vec);
1008 : ASMJIT_INST_3x(uaddw2, Uaddw2_v, Vec, Vec, Vec);
1009 : ASMJIT_INST_2x(ucvtf, Ucvtf_v, Vec, Gp);
1010 : ASMJIT_INST_3x(ucvtf, Ucvtf_v, Vec, Gp, Imm);
1011 : ASMJIT_INST_2x(ucvtf, Ucvtf_v, Vec, Vec);
1012 : ASMJIT_INST_3x(ucvtf, Ucvtf_v, Vec, Vec, Imm);
1013 : ASMJIT_INST_3x(uhadd, Uhadd_v, Vec, Vec, Vec);
1014 : ASMJIT_INST_3x(uhsub, Uhsub_v, Vec, Vec, Vec);
1015 : ASMJIT_INST_3x(umax, Umax_v, Vec, Vec, Vec);
1016 : ASMJIT_INST_3x(umaxp, Umaxp_v, Vec, Vec, Vec);
1017 : ASMJIT_INST_2x(umaxv, Umaxv_v, Vec, Vec);
1018 : ASMJIT_INST_3x(umin, Umin_v, Vec, Vec, Vec);
1019 : ASMJIT_INST_3x(uminp, Uminp_v, Vec, Vec, Vec);
1020 : ASMJIT_INST_2x(uminv, Uminv_v, Vec, Vec);
1021 : ASMJIT_INST_3x(umlal, Umlal_v, Vec, Vec, Vec);
1022 : ASMJIT_INST_3x(umlal2, Umlal2_v, Vec, Vec, Vec);
1023 : ASMJIT_INST_3x(umlsl, Umlsl_v, Vec, Vec, Vec);
1024 : ASMJIT_INST_3x(umlsl2, Umlsl2_v, Vec, Vec, Vec);
1025 : ASMJIT_INST_2x(umov, Umov_v, Gp, Vec);
1026 : ASMJIT_INST_3x(umull, Umull_v, Vec, Vec, Vec);
1027 : ASMJIT_INST_3x(umull2, Umull2_v, Vec, Vec, Vec);
1028 : ASMJIT_INST_3x(uqadd, Uqadd_v, Vec, Vec, Vec);
1029 : ASMJIT_INST_3x(uqrshl, Uqrshl_v, Vec, Vec, Vec);
1030 : ASMJIT_INST_3x(uqrshl, Uqrshl_v, Vec, Vec, Imm);
1031 : ASMJIT_INST_3x(uqrshrn, Uqrshrn_v, Vec, Vec, Imm);
1032 : ASMJIT_INST_3x(uqrshrn2, Uqrshrn2_v, Vec, Vec, Imm);
1033 : ASMJIT_INST_3x(uqshl, Uqshl_v, Vec, Vec, Vec);
1034 : ASMJIT_INST_3x(uqshl, Uqshl_v, Vec, Vec, Imm);
1035 : ASMJIT_INST_3x(uqshrn, Uqshrn_v, Vec, Vec, Imm);
1036 : ASMJIT_INST_3x(uqshrn2, Uqshrn2_v, Vec, Vec, Imm);
1037 : ASMJIT_INST_3x(uqsub, Uqsub_v, Vec, Vec, Vec);
1038 : ASMJIT_INST_2x(uqxtn, Uqxtn_v, Vec, Vec);
1039 : ASMJIT_INST_2x(uqxtn2, Uqxtn2_v, Vec, Vec);
1040 : ASMJIT_INST_2x(urecpe, Urecpe_v, Vec, Vec);
1041 : ASMJIT_INST_3x(urhadd, Urhadd_v, Vec, Vec, Vec);
1042 : ASMJIT_INST_3x(urshl, Urshl_v, Vec, Vec, Vec);
1043 : ASMJIT_INST_3x(urshr, Urshr_v, Vec, Vec, Imm);
1044 : ASMJIT_INST_2x(ursqrte, Ursqrte_v, Vec, Vec);
1045 : ASMJIT_INST_3x(ursra, Ursra_v, Vec, Vec, Imm);
1046 : ASMJIT_INST_3x(ushl, Ushl_v, Vec, Vec, Vec);
1047 : ASMJIT_INST_3x(ushll, Ushll_v, Vec, Vec, Imm);
1048 : ASMJIT_INST_3x(ushll2, Ushll2_v, Vec, Vec, Imm);
1049 : ASMJIT_INST_3x(ushr, Ushr_v, Vec, Vec, Imm);
1050 : ASMJIT_INST_2x(usqadd, Usqadd_v, Vec, Vec);
1051 : ASMJIT_INST_3x(usra, Usra_v, Vec, Vec, Imm);
1052 : ASMJIT_INST_3x(usubl, Usubl_v, Vec, Vec, Vec);
1053 : ASMJIT_INST_3x(usubl2, Usubl2_v, Vec, Vec, Vec);
1054 : ASMJIT_INST_3x(usubw, Usubw_v, Vec, Vec, Vec);
1055 : ASMJIT_INST_3x(usubw2, Usubw2_v, Vec, Vec, Vec);
1056 : ASMJIT_INST_2x(uxtl, Uxtl_v, Vec, Vec);
1057 : ASMJIT_INST_2x(uxtl2, Uxtl2_v, Vec, Vec);
1058 : ASMJIT_INST_3x(uzp1, Uzp1_v, Vec, Vec, Vec);
1059 : ASMJIT_INST_3x(uzp2, Uzp2_v, Vec, Vec, Vec);
1060 : ASMJIT_INST_2x(xtn, Xtn_v, Vec, Vec);
1061 : ASMJIT_INST_2x(xtn2, Xtn2_v, Vec, Vec);
1062 : ASMJIT_INST_3x(zip1, Zip1_v, Vec, Vec, Vec);
1063 : ASMJIT_INST_3x(zip2, Zip2_v, Vec, Vec, Vec);
1064 :
1065 : //! \}
1066 :
1067 : //! \name AES Instructions
1068 : //! \{
1069 :
1070 : ASMJIT_INST_2x(aesd, Aesd_v, Vec, Vec);
1071 : ASMJIT_INST_2x(aese, Aese_v, Vec, Vec);
1072 : ASMJIT_INST_2x(aesimc, Aesimc_v, Vec, Vec);
1073 : ASMJIT_INST_2x(aesmc, Aesmc_v, Vec, Vec);
1074 :
1075 : //! \}
1076 :
1077 : //! \name SHA1 Instructions
1078 : //! \{
1079 :
1080 : ASMJIT_INST_3x(sha1c, Sha1c_v, Vec, Vec, Vec);
1081 : ASMJIT_INST_2x(sha1h, Sha1h_v, Vec, Vec);
1082 : ASMJIT_INST_3x(sha1m, Sha1m_v, Vec, Vec, Vec);
1083 : ASMJIT_INST_3x(sha1p, Sha1p_v, Vec, Vec, Vec);
1084 : ASMJIT_INST_3x(sha1su0, Sha1su0_v, Vec, Vec, Vec);
1085 : ASMJIT_INST_2x(sha1su1, Sha1su1_v, Vec, Vec);
1086 :
1087 : //! \}
1088 :
1089 : //! \name SHA2 Instructions
1090 : //! \{
1091 :
1092 : ASMJIT_INST_3x(sha256h, Sha256h_v, Vec, Vec, Vec);
1093 : ASMJIT_INST_3x(sha256h2, Sha256h2_v, Vec, Vec, Vec);
1094 : ASMJIT_INST_2x(sha256su0, Sha256su0_v, Vec, Vec);
1095 : ASMJIT_INST_3x(sha256su1, Sha256su1_v, Vec, Vec, Vec);
1096 :
1097 : //! \}
1098 :
1099 : //! \name RDMA Instructions (ARMv8.1-A)
1100 : //! \{
1101 :
1102 : ASMJIT_INST_3x(sqrdmlah, Sqrdmlah_v, Vec, Vec, Vec);
1103 : ASMJIT_INST_3x(sqrdmlsh, Sqrdmlsh_v, Vec, Vec, Vec);
1104 :
1105 : //! \}
1106 :
1107 : //! \name FCMA Instruction (ARMv8.3-A)
1108 : //! \{
1109 :
1110 : ASMJIT_INST_4x(fcadd, Fcadd_v, Vec, Vec, Vec, Imm);
1111 : ASMJIT_INST_4x(fcmla, Fcmla_v, Vec, Vec, Vec, Imm);
1112 :
1113 : //! \}
1114 :
1115 : //! \name FJCVTZS Instruction (ARMv8.3-A)
1116 : //! \{
1117 :
1118 : ASMJIT_INST_2x(fjcvtzs, Fjcvtzs_v, Gp, Vec);
1119 :
1120 : //! \}
1121 :
1122 : //! \name FP16FML Instructions (ARMv8.4-A, optional in ARMv8.2-A)
1123 : //! \{
1124 :
1125 : ASMJIT_INST_3x(fmlal, Fmlal_v, Vec, Vec, Vec);
1126 : ASMJIT_INST_3x(fmlal2, Fmlal2_v, Vec, Vec, Vec);
1127 : ASMJIT_INST_3x(fmlsl, Fmlsl_v, Vec, Vec, Vec);
1128 : ASMJIT_INST_3x(fmlsl2, Fmlsl2_v, Vec, Vec, Vec);
1129 :
1130 :
1131 : //! \}
1132 :
1133 : //! \name SHA3 Instructions (ARMv8.4-A, optional in ARMv8.2-A)
1134 : //! \{
1135 :
1136 : ASMJIT_INST_4x(bcax, Bcax_v, Vec, Vec, Vec, Vec);
1137 : ASMJIT_INST_4x(eor3, Eor3_v, Vec, Vec, Vec, Vec);
1138 : ASMJIT_INST_3x(rax1, Rax1_v, Vec, Vec, Vec);
1139 : ASMJIT_INST_4x(xar, Xar_v, Vec, Vec, Vec, Imm);
1140 :
1141 : //! \}
1142 :
1143 : //! \name SHA512 Instructions (ARMv8.4-A)
1144 : //! \{
1145 :
1146 : ASMJIT_INST_3x(sha512h, Sha512h_v, Vec, Vec, Vec);
1147 : ASMJIT_INST_3x(sha512h2, Sha512h2_v, Vec, Vec, Vec);
1148 : ASMJIT_INST_2x(sha512su0, Sha512su0_v, Vec, Vec);
1149 : ASMJIT_INST_3x(sha512su1, Sha512su1_v, Vec, Vec, Vec);
1150 :
1151 : //! \}
1152 :
1153 : //! \name SM3 Instructions (ARMv8.4-A)
1154 : //! \{
1155 :
1156 : ASMJIT_INST_3x(sm3partw1, Sm3partw1_v, Vec, Vec, Vec);
1157 : ASMJIT_INST_3x(sm3partw2, Sm3partw2_v, Vec, Vec, Vec);
1158 : ASMJIT_INST_4x(sm3ss1, Sm3ss1_v, Vec, Vec, Vec, Vec);
1159 : ASMJIT_INST_3x(sm3tt1a, Sm3tt1a_v, Vec, Vec, Vec);
1160 : ASMJIT_INST_3x(sm3tt1b, Sm3tt1b_v, Vec, Vec, Vec);
1161 : ASMJIT_INST_3x(sm3tt2a, Sm3tt2a_v, Vec, Vec, Vec);
1162 : ASMJIT_INST_3x(sm3tt2b, Sm3tt2b_v, Vec, Vec, Vec);
1163 :
1164 : //! \}
1165 :
1166 : //! \name SM4 Instructions (ARMv8.4-A)
1167 : //! \{
1168 :
1169 : ASMJIT_INST_2x(sm4e, Sm4e_v, Vec, Vec);
1170 : ASMJIT_INST_3x(sm4ekey, Sm4ekey_v, Vec, Vec, Vec);
1171 :
1172 : //! \}
1173 :
1174 : //! \name DOTPROD Instructions (ARMv8.4-A, optional in ARMv8.2-A)
1175 : //! \{
1176 :
1177 : ASMJIT_INST_3x(sdot, Sdot_v, Vec, Vec, Vec);
1178 : ASMJIT_INST_3x(udot, Udot_v, Vec, Vec, Vec);
1179 :
1180 : //! \}
1181 :
1182 : //! \name BF16 Instructions (ARMv8.6-A)
1183 : //! \{
1184 :
1185 : ASMJIT_INST_2x(bfcvt, Bfcvt_v, Vec, Vec);
1186 : ASMJIT_INST_2x(bfcvtn, Bfcvtn_v, Vec, Vec);
1187 : ASMJIT_INST_2x(bfcvtn2, Bfcvtn2_v, Vec, Vec);
1188 : ASMJIT_INST_3x(bfmlalb, Bfmlalb_v, Vec, Vec, Vec);
1189 : ASMJIT_INST_3x(bfmlalt, Bfmlalt_v, Vec, Vec, Vec);
1190 : ASMJIT_INST_3x(bfmmla, Bfmmla_v, Vec, Vec, Vec);
1191 : ASMJIT_INST_3x(bfdot, Bfdot_v, Vec, Vec, Vec);
1192 :
1193 : //! \}
1194 :
1195 : //! \name I8MM Instructions (ARMv8.6-A)
1196 : //! \{
1197 :
1198 : ASMJIT_INST_3x(smmla, Smmla_v, Vec, Vec, Vec);
1199 : ASMJIT_INST_3x(sudot, Sudot_v, Vec, Vec, Vec);
1200 : ASMJIT_INST_3x(ummla, Ummla_v, Vec, Vec, Vec);
1201 : ASMJIT_INST_3x(usdot, Usdot_v, Vec, Vec, Vec);
1202 : ASMJIT_INST_3x(usmmla, Usmmla_v, Vec, Vec, Vec);
1203 :
1204 : //! \}
1205 : };
1206 :
1207 : //! Emitter (ARM).
1208 : //!
1209 : //! \note This class cannot be instantiated, you can only cast to it and use it as emitter that emits to either
1210 : //! `a64::Assembler`, `a64::Builder`, or `a64::Compiler` (use with caution with `a64::Compiler` as it requires
1211 : //! virtual registers).
1212 : class Emitter : public BaseEmitter, public EmitterExplicitT<Emitter> {
1213 : ASMJIT_NONCONSTRUCTIBLE(Emitter)
1214 : };
1215 :
1216 : //! \}
1217 :
1218 : #undef ASMJIT_INST_0x
1219 : #undef ASMJIT_INST_1x
1220 : #undef ASMJIT_INST_2x
1221 : #undef ASMJIT_INST_3x
1222 : #undef ASMJIT_INST_4x
1223 : #undef ASMJIT_INST_5x
1224 : #undef ASMJIT_INST_6x
1225 : #undef ASMJIT_INST_1cc
1226 :
1227 : ASMJIT_END_SUB_NAMESPACE
1228 :
1229 : #endif // ASMJIT_ARM_A64EMITTER_H_INCLUDED
1230 :
1231 : #endif // __PLUMED_HAS_ASMJIT
|