25 #include <stdio.h>
26 #include <sys/types.h>
27
28 #include "precompiled.hpp"
29 #include "asm/assembler.hpp"
30 #include "asm/assembler.inline.hpp"
31 #include "interpreter/interpreter.hpp"
32
33 #ifndef PRODUCT
34 const uintptr_t Assembler::asm_bp = 0x00007fffee09ac88;
35 #endif
36
37 #include "compiler/disassembler.hpp"
38 #include "memory/resourceArea.hpp"
39 #include "runtime/interfaceSupport.inline.hpp"
40 #include "runtime/sharedRuntime.hpp"
41 #include "immediate_aarch64.hpp"
42
43 extern "C" void entry(CodeBuffer *cb);
44
45 #define __ _masm.
46 #ifdef PRODUCT
47 #define BLOCK_COMMENT(str) /* nothing */
48 #else
49 #define BLOCK_COMMENT(str) block_comment(str)
50 #endif
51
52 #define BIND(label) bind(label); __ BLOCK_COMMENT(#label ":")
53
54 static float unpack(unsigned value);
55
56 short Assembler::SIMD_Size_in_bytes[] = {
57 // T8B, T16B, T4H, T8H, T2S, T4S, T1D, T2D, T1Q
58 8, 16, 8, 16, 8, 16, 8, 16, 16
59 };
60
61 #ifdef ASSERT
62 static void asm_check(const unsigned int *insns, const unsigned int *insns1, size_t len) {
63 bool ok = true;
64 for (unsigned int i = 0; i < len; i++) {
65 if (insns[i] != insns1[i]) {
66 ok = false;
67 printf("Ours:\n");
68 Disassembler::decode((address)&insns1[i], (address)&insns1[i+1]);
69 printf("Theirs:\n");
70 Disassembler::decode((address)&insns[i], (address)&insns[i+1]);
71 printf("\n");
72 }
73 }
74 assert(ok, "Assembler smoke test failed");
75 }
76
77 void entry(CodeBuffer *cb) {
78
79 // {
80 // for (int i = 0; i < 256; i+=16)
81 // {
82 // printf("\"%20.20g\", ", unpack(i));
83 // printf("\"%20.20g\", ", unpack(i+1));
84 // }
85 // printf("\n");
86 // }
87
88 Assembler _masm(cb);
89 address entry = __ pc();
90
91 // Smoke test for assembler
92
93 // BEGIN Generated code -- do not edit
94 // Generated by aarch64-asmtest.py
95 Label back, forth;
96 __ bind(back);
97
98 // ArithOp
99 __ add(r26, r23, r13, Assembler::LSL, 32); // add x26, x23, x13, LSL #32
100 __ sub(r12, r24, r9, Assembler::LSR, 37); // sub x12, x24, x9, LSR #37
101 __ adds(r28, r15, r8, Assembler::ASR, 39); // adds x28, x15, x8, ASR #39
102 __ subs(r7, r28, r30, Assembler::ASR, 57); // subs x7, x28, x30, ASR #57
103 __ addw(r9, r22, r27, Assembler::ASR, 15); // add w9, w22, w27, ASR #15
104 __ subw(r3, r13, r18, Assembler::ASR, 30); // sub w3, w13, w18, ASR #30
105 __ addsw(r14, r26, r8, Assembler::ASR, 17); // adds w14, w26, w8, ASR #17
106 __ subsw(r0, r22, r12, Assembler::ASR, 21); // subs w0, w22, w12, ASR #21
107 __ andr(r0, r15, r26, Assembler::LSL, 20); // and x0, x15, x26, LSL #20
108 __ orr(r26, r5, r17, Assembler::LSL, 61); // orr x26, x5, x17, LSL #61
109 __ eor(r24, r13, r2, Assembler::LSL, 32); // eor x24, x13, x2, LSL #32
110 __ ands(r28, r3, r17, Assembler::ASR, 35); // ands x28, x3, x17, ASR #35
111 __ andw(r25, r16, r29, Assembler::LSR, 18); // and w25, w16, w29, LSR #18
112 __ orrw(r13, r18, r11, Assembler::LSR, 9); // orr w13, w18, w11, LSR #9
113 __ eorw(r5, r5, r18, Assembler::LSR, 15); // eor w5, w5, w18, LSR #15
114 __ andsw(r2, r23, r27, Assembler::ASR, 26); // ands w2, w23, w27, ASR #26
115 __ bic(r27, r28, r16, Assembler::LSR, 45); // bic x27, x28, x16, LSR #45
116 __ orn(r8, r25, r26, Assembler::ASR, 37); // orn x8, x25, x26, ASR #37
117 __ eon(r29, r17, r13, Assembler::LSR, 63); // eon x29, x17, x13, LSR #63
118 __ bics(r28, r24, r2, Assembler::LSR, 31); // bics x28, x24, x2, LSR #31
119 __ bicw(r19, r26, r7, Assembler::ASR, 3); // bic w19, w26, w7, ASR #3
120 __ ornw(r6, r24, r10, Assembler::ASR, 3); // orn w6, w24, w10, ASR #3
121 __ eonw(r4, r21, r1, Assembler::LSR, 29); // eon w4, w21, w1, LSR #29
122 __ bicsw(r16, r21, r0, Assembler::LSR, 19); // bics w16, w21, w0, LSR #19
123
124 // AddSubImmOp
125 __ addw(r17, r12, 379u); // add w17, w12, #379
126 __ addsw(r30, r1, 22u); // adds w30, w1, #22
127 __ subw(r29, r5, 126u); // sub w29, w5, #126
128 __ subsw(r6, r24, 960u); // subs w6, w24, #960
129 __ add(r0, r13, 104u); // add x0, x13, #104
130 __ adds(r8, r6, 663u); // adds x8, x6, #663
131 __ sub(r10, r5, 516u); // sub x10, x5, #516
132 __ subs(r1, r3, 1012u); // subs x1, x3, #1012
133
134 // LogicalImmOp
135 __ andw(r6, r11, 4294049777ull); // and w6, w11, #0xfff1fff1
136 __ orrw(r28, r5, 4294966791ull); // orr w28, w5, #0xfffffe07
137 __ eorw(r1, r20, 134217216ull); // eor w1, w20, #0x7fffe00
138 __ andsw(r7, r18, 1048576ull); // ands w7, w18, #0x100000
139 __ andr(r14, r12, 9223372036854775808ull); // and x14, x12, #0x8000000000000000
140 __ orr(r9, r11, 562675075514368ull); // orr x9, x11, #0x1ffc000000000
141 __ eor(r17, r0, 18014398509481728ull); // eor x17, x0, #0x3fffffffffff00
142 __ ands(r1, r8, 18446744073705357315ull); // ands x1, x8, #0xffffffffffc00003
143
144 // AbsOp
145 __ b(__ pc()); // b .
146 __ b(back); // b back
147 __ b(forth); // b forth
148 __ bl(__ pc()); // bl .
149 __ bl(back); // bl back
150 __ bl(forth); // bl forth
151
152 // RegAndAbsOp
153 __ cbzw(r10, __ pc()); // cbz w10, .
154 __ cbzw(r10, back); // cbz w10, back
155 __ cbzw(r10, forth); // cbz w10, forth
156 __ cbnzw(r8, __ pc()); // cbnz w8, .
157 __ cbnzw(r8, back); // cbnz w8, back
158 __ cbnzw(r8, forth); // cbnz w8, forth
159 __ cbz(r11, __ pc()); // cbz x11, .
160 __ cbz(r11, back); // cbz x11, back
161 __ cbz(r11, forth); // cbz x11, forth
162 __ cbnz(r29, __ pc()); // cbnz x29, .
163 __ cbnz(r29, back); // cbnz x29, back
164 __ cbnz(r29, forth); // cbnz x29, forth
165 __ adr(r19, __ pc()); // adr x19, .
166 __ adr(r19, back); // adr x19, back
167 __ adr(r19, forth); // adr x19, forth
168 __ _adrp(r19, __ pc()); // adrp x19, .
169
170 // RegImmAbsOp
171 __ tbz(r22, 6, __ pc()); // tbz x22, #6, .
172 __ tbz(r22, 6, back); // tbz x22, #6, back
173 __ tbz(r22, 6, forth); // tbz x22, #6, forth
174 __ tbnz(r12, 11, __ pc()); // tbnz x12, #11, .
175 __ tbnz(r12, 11, back); // tbnz x12, #11, back
176 __ tbnz(r12, 11, forth); // tbnz x12, #11, forth
177
178 // MoveWideImmOp
179 __ movnw(r0, 6301, 0); // movn w0, #6301, lsl 0
180 __ movzw(r7, 20886, 0); // movz w7, #20886, lsl 0
181 __ movkw(r27, 18617, 0); // movk w27, #18617, lsl 0
182 __ movn(r12, 22998, 16); // movn x12, #22998, lsl 16
183 __ movz(r20, 1532, 16); // movz x20, #1532, lsl 16
184 __ movk(r8, 5167, 32); // movk x8, #5167, lsl 32
185
186 // BitfieldOp
187 __ sbfm(r15, r17, 24, 28); // sbfm x15, x17, #24, #28
188 __ bfmw(r15, r9, 14, 25); // bfm w15, w9, #14, #25
189 __ ubfmw(r27, r25, 6, 31); // ubfm w27, w25, #6, #31
190 __ sbfm(r19, r2, 23, 31); // sbfm x19, x2, #23, #31
191 __ bfm(r12, r21, 10, 6); // bfm x12, x21, #10, #6
192 __ ubfm(r22, r0, 26, 16); // ubfm x22, x0, #26, #16
193
194 // ExtractOp
195 __ extrw(r3, r3, r20, 27); // extr w3, w3, w20, #27
196 __ extr(r8, r30, r3, 54); // extr x8, x30, x3, #54
197
198 // CondBranchOp
199 __ br(Assembler::EQ, __ pc()); // b.EQ .
200 __ br(Assembler::EQ, back); // b.EQ back
201 __ br(Assembler::EQ, forth); // b.EQ forth
202 __ br(Assembler::NE, __ pc()); // b.NE .
203 __ br(Assembler::NE, back); // b.NE back
204 __ br(Assembler::NE, forth); // b.NE forth
205 __ br(Assembler::HS, __ pc()); // b.HS .
206 __ br(Assembler::HS, back); // b.HS back
207 __ br(Assembler::HS, forth); // b.HS forth
208 __ br(Assembler::CS, __ pc()); // b.CS .
209 __ br(Assembler::CS, back); // b.CS back
210 __ br(Assembler::CS, forth); // b.CS forth
211 __ br(Assembler::LO, __ pc()); // b.LO .
212 __ br(Assembler::LO, back); // b.LO back
213 __ br(Assembler::LO, forth); // b.LO forth
214 __ br(Assembler::CC, __ pc()); // b.CC .
215 __ br(Assembler::CC, back); // b.CC back
216 __ br(Assembler::CC, forth); // b.CC forth
217 __ br(Assembler::MI, __ pc()); // b.MI .
218 __ br(Assembler::MI, back); // b.MI back
219 __ br(Assembler::MI, forth); // b.MI forth
220 __ br(Assembler::PL, __ pc()); // b.PL .
221 __ br(Assembler::PL, back); // b.PL back
222 __ br(Assembler::PL, forth); // b.PL forth
223 __ br(Assembler::VS, __ pc()); // b.VS .
224 __ br(Assembler::VS, back); // b.VS back
225 __ br(Assembler::VS, forth); // b.VS forth
226 __ br(Assembler::VC, __ pc()); // b.VC .
227 __ br(Assembler::VC, back); // b.VC back
228 __ br(Assembler::VC, forth); // b.VC forth
229 __ br(Assembler::HI, __ pc()); // b.HI .
230 __ br(Assembler::HI, back); // b.HI back
231 __ br(Assembler::HI, forth); // b.HI forth
232 __ br(Assembler::LS, __ pc()); // b.LS .
233 __ br(Assembler::LS, back); // b.LS back
234 __ br(Assembler::LS, forth); // b.LS forth
235 __ br(Assembler::GE, __ pc()); // b.GE .
236 __ br(Assembler::GE, back); // b.GE back
237 __ br(Assembler::GE, forth); // b.GE forth
238 __ br(Assembler::LT, __ pc()); // b.LT .
239 __ br(Assembler::LT, back); // b.LT back
240 __ br(Assembler::LT, forth); // b.LT forth
241 __ br(Assembler::GT, __ pc()); // b.GT .
242 __ br(Assembler::GT, back); // b.GT back
243 __ br(Assembler::GT, forth); // b.GT forth
244 __ br(Assembler::LE, __ pc()); // b.LE .
245 __ br(Assembler::LE, back); // b.LE back
246 __ br(Assembler::LE, forth); // b.LE forth
247 __ br(Assembler::AL, __ pc()); // b.AL .
248 __ br(Assembler::AL, back); // b.AL back
249 __ br(Assembler::AL, forth); // b.AL forth
250 __ br(Assembler::NV, __ pc()); // b.NV .
251 __ br(Assembler::NV, back); // b.NV back
252 __ br(Assembler::NV, forth); // b.NV forth
253
254 // ImmOp
255 __ svc(12999); // svc #12999
256 __ hvc(2665); // hvc #2665
257 __ smc(9002); // smc #9002
258 __ brk(14843); // brk #14843
259 __ hlt(25964); // hlt #25964
260
261 // Op
262 __ nop(); // nop
263 __ eret(); // eret
264 __ drps(); // drps
265 __ isb(); // isb
266
267 // SystemOp
268 __ dsb(Assembler::ST); // dsb ST
269 __ dmb(Assembler::OSHST); // dmb OSHST
270
271 // OneRegOp
272 __ br(r16); // br x16
273 __ blr(r20); // blr x20
274
275 // LoadStoreExclusiveOp
276 __ stxr(r10, r27, r8); // stxr w10, x27, [x8]
277 __ stlxr(r0, r1, r21); // stlxr w0, x1, [x21]
278 __ ldxr(r17, r29); // ldxr x17, [x29]
279 __ ldaxr(r29, r28); // ldaxr x29, [x28]
280 __ stlr(r1, r23); // stlr x1, [x23]
281 __ ldar(r21, r20); // ldar x21, [x20]
282
283 // LoadStoreExclusiveOp
284 __ stxrw(r22, r27, r19); // stxr w22, w27, [x19]
285 __ stlxrw(r11, r16, r6); // stlxr w11, w16, [x6]
286 __ ldxrw(r18, r0); // ldxr w18, [x0]
287 __ ldaxrw(r4, r10); // ldaxr w4, [x10]
288 __ stlrw(r24, r22); // stlr w24, [x22]
289 __ ldarw(r10, r19); // ldar w10, [x19]
290
291 // LoadStoreExclusiveOp
292 __ stxrh(r1, r5, r30); // stxrh w1, w5, [x30]
293 __ stlxrh(r8, r12, r17); // stlxrh w8, w12, [x17]
294 __ ldxrh(r9, r14); // ldxrh w9, [x14]
295 __ ldaxrh(r7, r1); // ldaxrh w7, [x1]
296 __ stlrh(r5, r16); // stlrh w5, [x16]
297 __ ldarh(r2, r12); // ldarh w2, [x12]
298
299 // LoadStoreExclusiveOp
300 __ stxrb(r10, r12, r3); // stxrb w10, w12, [x3]
301 __ stlxrb(r28, r14, r26); // stlxrb w28, w14, [x26]
302 __ ldxrb(r30, r10); // ldxrb w30, [x10]
303 __ ldaxrb(r14, r21); // ldaxrb w14, [x21]
304 __ stlrb(r13, r9); // stlrb w13, [x9]
305 __ ldarb(r22, r27); // ldarb w22, [x27]
306
307 // LoadStoreExclusiveOp
308 __ ldxp(r28, r19, r11); // ldxp x28, x19, [x11]
309 __ ldaxp(r30, r19, r2); // ldaxp x30, x19, [x2]
310 __ stxp(r2, r23, r1, r0); // stxp w2, x23, x1, [x0]
311 __ stlxp(r12, r16, r13, r15); // stlxp w12, x16, x13, [x15]
312
313 // LoadStoreExclusiveOp
314 __ ldxpw(r18, r21, r13); // ldxp w18, w21, [x13]
315 __ ldaxpw(r11, r30, r8); // ldaxp w11, w30, [x8]
316 __ stxpw(r24, r13, r11, r1); // stxp w24, w13, w11, [x1]
317 __ stlxpw(r26, r21, r27, r13); // stlxp w26, w21, w27, [x13]
318
319 // base_plus_unscaled_offset
320 // LoadStoreOp
321 __ str(r11, Address(r20, -103)); // str x11, [x20, -103]
322 __ strw(r28, Address(r16, 62)); // str w28, [x16, 62]
323 __ strb(r27, Address(r9, -9)); // strb w27, [x9, -9]
324 __ strh(r2, Address(r25, -50)); // strh w2, [x25, -50]
325 __ ldr(r4, Address(r2, -241)); // ldr x4, [x2, -241]
326 __ ldrw(r30, Address(r20, -31)); // ldr w30, [x20, -31]
327 __ ldrb(r18, Address(r23, -23)); // ldrb w18, [x23, -23]
328 __ ldrh(r29, Address(r26, -1)); // ldrh w29, [x26, -1]
329 __ ldrsb(r1, Address(r9, 6)); // ldrsb x1, [x9, 6]
330 __ ldrsh(r11, Address(r12, 19)); // ldrsh x11, [x12, 19]
331 __ ldrshw(r11, Address(r1, -50)); // ldrsh w11, [x1, -50]
332 __ ldrsw(r19, Address(r24, 41)); // ldrsw x19, [x24, 41]
333 __ ldrd(v24, Address(r24, 95)); // ldr d24, [x24, 95]
334 __ ldrs(v15, Address(r5, -43)); // ldr s15, [x5, -43]
335 __ strd(v21, Address(r27, 1)); // str d21, [x27, 1]
336 __ strs(v23, Address(r13, -107)); // str s23, [x13, -107]
337
338 // pre
339 // LoadStoreOp
340 __ str(r11, Address(__ pre(r0, 8))); // str x11, [x0, 8]!
341 __ strw(r3, Address(__ pre(r0, 29))); // str w3, [x0, 29]!
342 __ strb(r11, Address(__ pre(r14, 9))); // strb w11, [x14, 9]!
343 __ strh(r29, Address(__ pre(r24, -3))); // strh w29, [x24, -3]!
344 __ ldr(r13, Address(__ pre(r17, -144))); // ldr x13, [x17, -144]!
345 __ ldrw(r12, Address(__ pre(r22, -6))); // ldr w12, [x22, -6]!
346 __ ldrb(r13, Address(__ pre(r12, -10))); // ldrb w13, [x12, -10]!
347 __ ldrh(r0, Address(__ pre(r21, -21))); // ldrh w0, [x21, -21]!
348 __ ldrsb(r23, Address(__ pre(r7, 4))); // ldrsb x23, [x7, 4]!
349 __ ldrsh(r3, Address(__ pre(r7, -53))); // ldrsh x3, [x7, -53]!
350 __ ldrshw(r28, Address(__ pre(r5, -7))); // ldrsh w28, [x5, -7]!
351 __ ldrsw(r24, Address(__ pre(r9, -18))); // ldrsw x24, [x9, -18]!
352 __ ldrd(v14, Address(__ pre(r11, 12))); // ldr d14, [x11, 12]!
353 __ ldrs(v19, Address(__ pre(r12, -67))); // ldr s19, [x12, -67]!
354 __ strd(v20, Address(__ pre(r0, -253))); // str d20, [x0, -253]!
355 __ strs(v8, Address(__ pre(r0, 64))); // str s8, [x0, 64]!
356
357 // post
358 // LoadStoreOp
359 __ str(r4, Address(__ post(r28, -94))); // str x4, [x28], -94
360 __ strw(r12, Address(__ post(r7, -54))); // str w12, [x7], -54
361 __ strb(r27, Address(__ post(r10, -24))); // strb w27, [x10], -24
362 __ strh(r6, Address(__ post(r8, 27))); // strh w6, [x8], 27
363 __ ldr(r14, Address(__ post(r10, -202))); // ldr x14, [x10], -202
364 __ ldrw(r16, Address(__ post(r5, -41))); // ldr w16, [x5], -41
365 __ ldrb(r2, Address(__ post(r14, 9))); // ldrb w2, [x14], 9
366 __ ldrh(r28, Address(__ post(r13, -20))); // ldrh w28, [x13], -20
367 __ ldrsb(r9, Address(__ post(r13, -31))); // ldrsb x9, [x13], -31
368 __ ldrsh(r3, Address(__ post(r24, -36))); // ldrsh x3, [x24], -36
369 __ ldrshw(r20, Address(__ post(r3, 6))); // ldrsh w20, [x3], 6
370 __ ldrsw(r7, Address(__ post(r19, -1))); // ldrsw x7, [x19], -1
371 __ ldrd(v30, Address(__ post(r8, -130))); // ldr d30, [x8], -130
372 __ ldrs(v25, Address(__ post(r15, 21))); // ldr s25, [x15], 21
373 __ strd(v14, Address(__ post(r23, 90))); // str d14, [x23], 90
374 __ strs(v8, Address(__ post(r0, -33))); // str s8, [x0], -33
375
376 // base_plus_reg
377 // LoadStoreOp
378 __ str(r10, Address(r18, r21, Address::sxtw(3))); // str x10, [x18, w21, sxtw #3]
379 __ strw(r4, Address(r13, r22, Address::sxtw(2))); // str w4, [x13, w22, sxtw #2]
380 __ strb(r13, Address(r0, r19, Address::uxtw(0))); // strb w13, [x0, w19, uxtw #0]
381 __ strh(r12, Address(r27, r6, Address::sxtw(0))); // strh w12, [x27, w6, sxtw #0]
382 __ ldr(r0, Address(r8, r16, Address::lsl(0))); // ldr x0, [x8, x16, lsl #0]
383 __ ldrw(r0, Address(r4, r26, Address::sxtx(0))); // ldr w0, [x4, x26, sxtx #0]
384 __ ldrb(r14, Address(r25, r5, Address::sxtw(0))); // ldrb w14, [x25, w5, sxtw #0]
385 __ ldrh(r9, Address(r4, r18, Address::uxtw(0))); // ldrh w9, [x4, w18, uxtw #0]
386 __ ldrsb(r27, Address(r4, r7, Address::lsl(0))); // ldrsb x27, [x4, x7, lsl #0]
387 __ ldrsh(r15, Address(r17, r30, Address::sxtw(0))); // ldrsh x15, [x17, w30, sxtw #0]
388 __ ldrshw(r16, Address(r0, r22, Address::sxtw(0))); // ldrsh w16, [x0, w22, sxtw #0]
389 __ ldrsw(r22, Address(r10, r30, Address::sxtx(2))); // ldrsw x22, [x10, x30, sxtx #2]
390 __ ldrd(v29, Address(r21, r10, Address::sxtx(3))); // ldr d29, [x21, x10, sxtx #3]
391 __ ldrs(v3, Address(r11, r19, Address::uxtw(0))); // ldr s3, [x11, w19, uxtw #0]
392 __ strd(v13, Address(r28, r29, Address::uxtw(3))); // str d13, [x28, w29, uxtw #3]
393 __ strs(v23, Address(r29, r5, Address::sxtx(2))); // str s23, [x29, x5, sxtx #2]
394
395 // base_plus_scaled_offset
396 // LoadStoreOp
397 __ str(r5, Address(r8, 12600)); // str x5, [x8, 12600]
398 __ strw(r29, Address(r24, 7880)); // str w29, [x24, 7880]
399 __ strb(r19, Address(r17, 1566)); // strb w19, [x17, 1566]
400 __ strh(r13, Address(r19, 3984)); // strh w13, [x19, 3984]
401 __ ldr(r19, Address(r23, 13632)); // ldr x19, [x23, 13632]
402 __ ldrw(r23, Address(r29, 6264)); // ldr w23, [x29, 6264]
403 __ ldrb(r22, Address(r11, 2012)); // ldrb w22, [x11, 2012]
404 __ ldrh(r3, Address(r10, 3784)); // ldrh w3, [x10, 3784]
405 __ ldrsb(r8, Address(r16, 1951)); // ldrsb x8, [x16, 1951]
406 __ ldrsh(r23, Address(r20, 3346)); // ldrsh x23, [x20, 3346]
407 __ ldrshw(r2, Address(r1, 3994)); // ldrsh w2, [x1, 3994]
408 __ ldrsw(r4, Address(r17, 7204)); // ldrsw x4, [x17, 7204]
409 __ ldrd(v20, Address(r27, 14400)); // ldr d20, [x27, 14400]
410 __ ldrs(v25, Address(r14, 8096)); // ldr s25, [x14, 8096]
411 __ strd(v26, Address(r10, 15024)); // str d26, [x10, 15024]
412 __ strs(v9, Address(r3, 6936)); // str s9, [x3, 6936]
413
414 // pcrel
415 // LoadStoreOp
416 __ ldr(r27, forth); // ldr x27, forth
417 __ ldrw(r11, __ pc()); // ldr w11, .
418
419 // LoadStoreOp
420 __ prfm(Address(r3, -187)); // prfm PLDL1KEEP, [x3, -187]
421
422 // LoadStoreOp
423 __ prfm(__ pc()); // prfm PLDL1KEEP, .
424
425 // LoadStoreOp
426 __ prfm(Address(r29, r14, Address::lsl(0))); // prfm PLDL1KEEP, [x29, x14, lsl #0]
427
428 // LoadStoreOp
429 __ prfm(Address(r4, 13312)); // prfm PLDL1KEEP, [x4, 13312]
430
431 // AddSubCarryOp
432 __ adcw(r21, r1, r7); // adc w21, w1, w7
433 __ adcsw(r8, r5, r7); // adcs w8, w5, w7
434 __ sbcw(r7, r27, r14); // sbc w7, w27, w14
435 __ sbcsw(r27, r4, r17); // sbcs w27, w4, w17
436 __ adc(r0, r28, r0); // adc x0, x28, x0
437 __ adcs(r12, r24, r30); // adcs x12, x24, x30
438 __ sbc(r0, r25, r15); // sbc x0, x25, x15
439 __ sbcs(r1, r24, r3); // sbcs x1, x24, x3
440
441 // AddSubExtendedOp
442 __ addw(r18, r24, r20, ext::uxtb, 2); // add w18, w24, w20, uxtb #2
443 __ addsw(r13, r28, r10, ext::uxth, 1); // adds w13, w28, w10, uxth #1
444 __ sub(r15, r16, r2, ext::sxth, 2); // sub x15, x16, x2, sxth #2
445 __ subsw(r29, r13, r13, ext::uxth, 2); // subs w29, w13, w13, uxth #2
446 __ add(r12, r20, r12, ext::sxtw, 3); // add x12, x20, x12, sxtw #3
447 __ adds(r30, r27, r11, ext::sxtb, 1); // adds x30, x27, x11, sxtb #1
448 __ sub(r14, r7, r1, ext::sxtw, 2); // sub x14, x7, x1, sxtw #2
449 __ subs(r29, r3, r27, ext::sxth, 1); // subs x29, x3, x27, sxth #1
450
451 // ConditionalCompareOp
452 __ ccmnw(r0, r13, 14u, Assembler::MI); // ccmn w0, w13, #14, MI
453 __ ccmpw(r22, r18, 6u, Assembler::CC); // ccmp w22, w18, #6, CC
454 __ ccmn(r18, r30, 14u, Assembler::VS); // ccmn x18, x30, #14, VS
455 __ ccmp(r10, r19, 12u, Assembler::HI); // ccmp x10, x19, #12, HI
456
457 // ConditionalCompareImmedOp
458 __ ccmnw(r6, 18, 2, Assembler::LE); // ccmn w6, #18, #2, LE
459 __ ccmpw(r9, 13, 4, Assembler::HI); // ccmp w9, #13, #4, HI
460 __ ccmn(r21, 11, 11, Assembler::LO); // ccmn x21, #11, #11, LO
461 __ ccmp(r4, 13, 2, Assembler::VC); // ccmp x4, #13, #2, VC
462
463 // ConditionalSelectOp
464 __ cselw(r12, r2, r22, Assembler::HI); // csel w12, w2, w22, HI
465 __ csincw(r24, r16, r17, Assembler::HS); // csinc w24, w16, w17, HS
466 __ csinvw(r6, r7, r16, Assembler::LT); // csinv w6, w7, w16, LT
467 __ csnegw(r11, r27, r22, Assembler::LS); // csneg w11, w27, w22, LS
468 __ csel(r10, r3, r29, Assembler::LT); // csel x10, x3, x29, LT
469 __ csinc(r12, r26, r27, Assembler::CC); // csinc x12, x26, x27, CC
470 __ csinv(r15, r10, r21, Assembler::GT); // csinv x15, x10, x21, GT
471 __ csneg(r30, r23, r9, Assembler::GT); // csneg x30, x23, x9, GT
472
473 // TwoRegOp
474 __ rbitw(r30, r10); // rbit w30, w10
475 __ rev16w(r29, r15); // rev16 w29, w15
476 __ revw(r29, r30); // rev w29, w30
477 __ clzw(r25, r21); // clz w25, w21
478 __ clsw(r4, r0); // cls w4, w0
479 __ rbit(r18, r21); // rbit x18, x21
480 __ rev16(r29, r16); // rev16 x29, x16
481 __ rev32(r21, r20); // rev32 x21, x20
482 __ rev(r6, r19); // rev x6, x19
483 __ clz(r30, r3); // clz x30, x3
484 __ cls(r21, r19); // cls x21, x19
485
486 // ThreeRegOp
487 __ udivw(r11, r24, r0); // udiv w11, w24, w0
488 __ sdivw(r27, r25, r14); // sdiv w27, w25, w14
489 __ lslvw(r3, r14, r18); // lslv w3, w14, w18
490 __ lsrvw(r7, r15, r24); // lsrv w7, w15, w24
491 __ asrvw(r28, r17, r25); // asrv w28, w17, w25
492 __ rorvw(r2, r26, r28); // rorv w2, w26, w28
493 __ udiv(r5, r25, r26); // udiv x5, x25, x26
494 __ sdiv(r27, r16, r18); // sdiv x27, x16, x18
495 __ lslv(r6, r21, r12); // lslv x6, x21, x12
496 __ lsrv(r0, r4, r12); // lsrv x0, x4, x12
497 __ asrv(r27, r17, r28); // asrv x27, x17, x28
498 __ rorv(r28, r2, r18); // rorv x28, x2, x18
499 __ umulh(r10, r15, r14); // umulh x10, x15, x14
500 __ smulh(r14, r3, r25); // smulh x14, x3, x25
501
502 // FourRegMulOp
503 __ maddw(r15, r19, r14, r5); // madd w15, w19, w14, w5
504 __ msubw(r16, r4, r26, r25); // msub w16, w4, w26, w25
505 __ madd(r4, r2, r2, r12); // madd x4, x2, x2, x12
506 __ msub(r29, r17, r8, r7); // msub x29, x17, x8, x7
507 __ smaddl(r3, r4, r25, r4); // smaddl x3, w4, w25, x4
508 __ smsubl(r26, r25, r4, r17); // smsubl x26, w25, w4, x17
509 __ umaddl(r0, r26, r17, r23); // umaddl x0, w26, w17, x23
510 __ umsubl(r15, r21, r28, r17); // umsubl x15, w21, w28, x17
511
512 // ThreeRegFloatOp
513 __ fmuls(v27, v10, v3); // fmul s27, s10, s3
514 __ fdivs(v0, v7, v25); // fdiv s0, s7, s25
515 __ fadds(v9, v6, v15); // fadd s9, s6, s15
516 __ fsubs(v29, v15, v10); // fsub s29, s15, s10
517 __ fmuls(v2, v17, v7); // fmul s2, s17, s7
518 __ fmuld(v11, v11, v23); // fmul d11, d11, d23
519 __ fdivd(v7, v29, v23); // fdiv d7, d29, d23
520 __ faddd(v14, v27, v11); // fadd d14, d27, d11
521 __ fsubd(v11, v4, v24); // fsub d11, d4, d24
522 __ fmuld(v12, v15, v14); // fmul d12, d15, d14
523
524 // FourRegFloatOp
525 __ fmadds(v20, v11, v28, v13); // fmadd s20, s11, s28, s13
526 __ fmsubs(v11, v12, v23, v30); // fmsub s11, s12, s23, s30
527 __ fnmadds(v26, v14, v9, v13); // fnmadd s26, s14, s9, s13
528 __ fnmadds(v10, v7, v5, v29); // fnmadd s10, s7, s5, s29
529 __ fmaddd(v15, v3, v11, v12); // fmadd d15, d3, d11, d12
530 __ fmsubd(v15, v30, v30, v17); // fmsub d15, d30, d30, d17
531 __ fnmaddd(v19, v20, v15, v15); // fnmadd d19, d20, d15, d15
532 __ fnmaddd(v9, v21, v2, v9); // fnmadd d9, d21, d2, d9
533
534 // TwoRegFloatOp
535 __ fmovs(v27, v7); // fmov s27, s7
536 __ fabss(v29, v30); // fabs s29, s30
537 __ fnegs(v17, v1); // fneg s17, s1
538 __ fsqrts(v2, v6); // fsqrt s2, s6
539 __ fcvts(v10, v3); // fcvt d10, s3
540 __ fmovd(v24, v11); // fmov d24, d11
541 __ fabsd(v7, v1); // fabs d7, d1
542 __ fnegd(v11, v0); // fneg d11, d0
543 __ fsqrtd(v3, v18); // fsqrt d3, d18
544 __ fcvtd(v28, v6); // fcvt s28, d6
545
546 // FloatConvertOp
547 __ fcvtzsw(r22, v6); // fcvtzs w22, s6
548 __ fcvtzs(r0, v27); // fcvtzs x0, s27
549 __ fcvtzdw(r26, v2); // fcvtzs w26, d2
550 __ fcvtzd(r5, v7); // fcvtzs x5, d7
551 __ scvtfws(v28, r11); // scvtf s28, w11
552 __ scvtfs(v25, r13); // scvtf s25, x13
553 __ scvtfwd(v11, r23); // scvtf d11, w23
554 __ scvtfd(v19, r8); // scvtf d19, x8
555 __ fmovs(r18, v21); // fmov w18, s21
556 __ fmovd(r25, v20); // fmov x25, d20
557 __ fmovs(v19, r18); // fmov s19, w18
558 __ fmovd(v2, r29); // fmov d2, x29
559
560 // TwoRegFloatOp
561 __ fcmps(v22, v8); // fcmp s22, s8
562 __ fcmpd(v21, v19); // fcmp d21, d19
563 __ fcmps(v20, 0.0); // fcmp s20, #0.0
564 __ fcmpd(v11, 0.0); // fcmp d11, #0.0
565
566 // LoadStorePairOp
567 __ stpw(r20, r6, Address(r15, -32)); // stp w20, w6, [x15, #-32]
568 __ ldpw(r27, r14, Address(r3, -208)); // ldp w27, w14, [x3, #-208]
569 __ ldpsw(r17, r10, Address(r11, -80)); // ldpsw x17, x10, [x11, #-80]
570 __ stp(r7, r7, Address(r14, 64)); // stp x7, x7, [x14, #64]
571 __ ldp(r12, r23, Address(r0, 112)); // ldp x12, x23, [x0, #112]
572
573 // LoadStorePairOp
574 __ stpw(r13, r7, Address(__ pre(r6, -80))); // stp w13, w7, [x6, #-80]!
575 __ ldpw(r30, r16, Address(__ pre(r2, -144))); // ldp w30, w16, [x2, #-144]!
576 __ ldpsw(r4, r1, Address(__ pre(r26, -144))); // ldpsw x4, x1, [x26, #-144]!
577 __ stp(r23, r14, Address(__ pre(r11, 64))); // stp x23, x14, [x11, #64]!
578 __ ldp(r29, r27, Address(__ pre(r21, -192))); // ldp x29, x27, [x21, #-192]!
579
580 // LoadStorePairOp
581 __ stpw(r22, r5, Address(__ post(r21, -48))); // stp w22, w5, [x21], #-48
582 __ ldpw(r27, r17, Address(__ post(r6, -32))); // ldp w27, w17, [x6], #-32
583 __ ldpsw(r17, r6, Address(__ post(r1, -80))); // ldpsw x17, x6, [x1], #-80
584 __ stp(r13, r20, Address(__ post(r21, -208))); // stp x13, x20, [x21], #-208
585 __ ldp(r30, r27, Address(__ post(r10, 80))); // ldp x30, x27, [x10], #80
586
587 // LoadStorePairOp
588 __ stnpw(r5, r17, Address(r11, 16)); // stnp w5, w17, [x11, #16]
589 __ ldnpw(r14, r4, Address(r26, -96)); // ldnp w14, w4, [x26, #-96]
590 __ stnp(r23, r29, Address(r12, 32)); // stnp x23, x29, [x12, #32]
591 __ ldnp(r0, r6, Address(r21, -80)); // ldnp x0, x6, [x21, #-80]
592
593 // LdStSIMDOp
594 __ ld1(v15, __ T8B, Address(r26)); // ld1 {v15.8B}, [x26]
595 __ ld1(v23, v24, __ T16B, Address(__ post(r11, 32))); // ld1 {v23.16B, v24.16B}, [x11], 32
596 __ ld1(v8, v9, v10, __ T1D, Address(__ post(r23, r7))); // ld1 {v8.1D, v9.1D, v10.1D}, [x23], x7
597 __ ld1(v19, v20, v21, v22, __ T8H, Address(__ post(r25, 64))); // ld1 {v19.8H, v20.8H, v21.8H, v22.8H}, [x25], 64
598 __ ld1r(v29, __ T8B, Address(r17)); // ld1r {v29.8B}, [x17]
599 __ ld1r(v24, __ T4S, Address(__ post(r23, 4))); // ld1r {v24.4S}, [x23], 4
600 __ ld1r(v10, __ T1D, Address(__ post(r5, r25))); // ld1r {v10.1D}, [x5], x25
601 __ ld2(v18, v19, __ T2D, Address(r10)); // ld2 {v18.2D, v19.2D}, [x10]
602 __ ld2(v12, v13, __ T4H, Address(__ post(r15, 16))); // ld2 {v12.4H, v13.4H}, [x15], 16
603 __ ld2r(v25, v26, __ T16B, Address(r18)); // ld2r {v25.16B, v26.16B}, [x18]
604 __ ld2r(v1, v2, __ T2S, Address(__ post(r30, 8))); // ld2r {v1.2S, v2.2S}, [x30], 8
605 __ ld2r(v16, v17, __ T2D, Address(__ post(r18, r9))); // ld2r {v16.2D, v17.2D}, [x18], x9
606 __ ld3(v25, v26, v27, __ T4S, Address(__ post(r12, r2))); // ld3 {v25.4S, v26.4S, v27.4S}, [x12], x2
607 __ ld3(v26, v27, v28, __ T2S, Address(r19)); // ld3 {v26.2S, v27.2S, v28.2S}, [x19]
608 __ ld3r(v15, v16, v17, __ T8H, Address(r21)); // ld3r {v15.8H, v16.8H, v17.8H}, [x21]
609 __ ld3r(v25, v26, v27, __ T4S, Address(__ post(r13, 12))); // ld3r {v25.4S, v26.4S, v27.4S}, [x13], 12
610 __ ld3r(v14, v15, v16, __ T1D, Address(__ post(r28, r29))); // ld3r {v14.1D, v15.1D, v16.1D}, [x28], x29
611 __ ld4(v17, v18, v19, v20, __ T8H, Address(__ post(r29, 64))); // ld4 {v17.8H, v18.8H, v19.8H, v20.8H}, [x29], 64
612 __ ld4(v27, v28, v29, v30, __ T8B, Address(__ post(r7, r0))); // ld4 {v27.8B, v28.8B, v29.8B, v30.8B}, [x7], x0
613 __ ld4r(v24, v25, v26, v27, __ T8B, Address(r18)); // ld4r {v24.8B, v25.8B, v26.8B, v27.8B}, [x18]
614 __ ld4r(v0, v1, v2, v3, __ T4H, Address(__ post(r26, 8))); // ld4r {v0.4H, v1.4H, v2.4H, v3.4H}, [x26], 8
615 __ ld4r(v12, v13, v14, v15, __ T2S, Address(__ post(r25, r2))); // ld4r {v12.2S, v13.2S, v14.2S, v15.2S}, [x25], x2
616
617 // SHA512SIMDOp
618 __ sha512h(v22, __ T2D, v27, v4); // sha512h q22, q27, v4.2D
619 __ sha512h2(v7, __ T2D, v6, v1); // sha512h2 q7, q6, v1.2D
620 __ sha512su0(v26, __ T2D, v15); // sha512su0 v26.2D, v15.2D
621 __ sha512su1(v2, __ T2D, v13, v13); // sha512su1 v2.2D, v13.2D, v13.2D
622
623 // SpecialCases
624 __ ccmn(zr, zr, 3u, Assembler::LE); // ccmn xzr, xzr, #3, LE
625 __ ccmnw(zr, zr, 5u, Assembler::EQ); // ccmn wzr, wzr, #5, EQ
626 __ ccmp(zr, 1, 4u, Assembler::NE); // ccmp xzr, 1, #4, NE
627 __ ccmpw(zr, 2, 2, Assembler::GT); // ccmp wzr, 2, #2, GT
628 __ extr(zr, zr, zr, 0); // extr xzr, xzr, xzr, 0
629 __ stlxp(r0, zr, zr, sp); // stlxp w0, xzr, xzr, [sp]
630 __ stlxpw(r2, zr, zr, r3); // stlxp w2, wzr, wzr, [x3]
631 __ stxp(r4, zr, zr, r5); // stxp w4, xzr, xzr, [x5]
632 __ stxpw(r6, zr, zr, sp); // stxp w6, wzr, wzr, [sp]
633 __ dup(v0, __ T16B, zr); // dup v0.16b, wzr
634 __ mov(v1, __ T1D, 0, zr); // mov v1.d[0], xzr
635 __ mov(v1, __ T2S, 1, zr); // mov v1.s[1], wzr
636 __ mov(v1, __ T4H, 2, zr); // mov v1.h[2], wzr
637 __ mov(v1, __ T8B, 3, zr); // mov v1.b[3], wzr
638 __ ld1(v31, v0, __ T2D, Address(__ post(r1, r0))); // ld1 {v31.2d, v0.2d}, [x1], x0
639
640 // FloatImmediateOp
641 __ fmovd(v0, 2.0); // fmov d0, #2.0
642 __ fmovd(v0, 2.125); // fmov d0, #2.125
643 __ fmovd(v0, 4.0); // fmov d0, #4.0
644 __ fmovd(v0, 4.25); // fmov d0, #4.25
645 __ fmovd(v0, 8.0); // fmov d0, #8.0
646 __ fmovd(v0, 8.5); // fmov d0, #8.5
647 __ fmovd(v0, 16.0); // fmov d0, #16.0
648 __ fmovd(v0, 17.0); // fmov d0, #17.0
649 __ fmovd(v0, 0.125); // fmov d0, #0.125
650 __ fmovd(v0, 0.1328125); // fmov d0, #0.1328125
651 __ fmovd(v0, 0.25); // fmov d0, #0.25
652 __ fmovd(v0, 0.265625); // fmov d0, #0.265625
653 __ fmovd(v0, 0.5); // fmov d0, #0.5
654 __ fmovd(v0, 0.53125); // fmov d0, #0.53125
655 __ fmovd(v0, 1.0); // fmov d0, #1.0
656 __ fmovd(v0, 1.0625); // fmov d0, #1.0625
657 __ fmovd(v0, -2.0); // fmov d0, #-2.0
658 __ fmovd(v0, -2.125); // fmov d0, #-2.125
659 __ fmovd(v0, -4.0); // fmov d0, #-4.0
660 __ fmovd(v0, -4.25); // fmov d0, #-4.25
661 __ fmovd(v0, -8.0); // fmov d0, #-8.0
662 __ fmovd(v0, -8.5); // fmov d0, #-8.5
663 __ fmovd(v0, -16.0); // fmov d0, #-16.0
664 __ fmovd(v0, -17.0); // fmov d0, #-17.0
665 __ fmovd(v0, -0.125); // fmov d0, #-0.125
666 __ fmovd(v0, -0.1328125); // fmov d0, #-0.1328125
667 __ fmovd(v0, -0.25); // fmov d0, #-0.25
668 __ fmovd(v0, -0.265625); // fmov d0, #-0.265625
669 __ fmovd(v0, -0.5); // fmov d0, #-0.5
670 __ fmovd(v0, -0.53125); // fmov d0, #-0.53125
671 __ fmovd(v0, -1.0); // fmov d0, #-1.0
672 __ fmovd(v0, -1.0625); // fmov d0, #-1.0625
673
674 // LSEOp
675 __ swp(Assembler::xword, r24, r24, r4); // swp x24, x24, [x4]
676 __ ldadd(Assembler::xword, r20, r16, r0); // ldadd x20, x16, [x0]
677 __ ldbic(Assembler::xword, r4, r21, r11); // ldclr x4, x21, [x11]
678 __ ldeor(Assembler::xword, r30, r16, r22); // ldeor x30, x16, [x22]
679 __ ldorr(Assembler::xword, r4, r15, r23); // ldset x4, x15, [x23]
680 __ ldsmin(Assembler::xword, r26, r6, r12); // ldsmin x26, x6, [x12]
681 __ ldsmax(Assembler::xword, r15, r14, r15); // ldsmax x15, x14, [x15]
682 __ ldumin(Assembler::xword, r9, r25, r29); // ldumin x9, x25, [x29]
683 __ ldumax(Assembler::xword, r11, r20, r12); // ldumax x11, x20, [x12]
684
685 // LSEOp
686 __ swpa(Assembler::xword, r18, r22, r16); // swpa x18, x22, [x16]
687 __ ldadda(Assembler::xword, r21, r24, r26); // ldadda x21, x24, [x26]
688 __ ldbica(Assembler::xword, r6, r6, r16); // ldclra x6, x6, [x16]
689 __ ldeora(Assembler::xword, r16, r25, r16); // ldeora x16, x25, [x16]
690 __ ldorra(Assembler::xword, r28, r24, r16); // ldseta x28, x24, [x16]
691 __ ldsmina(Assembler::xword, r26, r15, r10); // ldsmina x26, x15, [x10]
692 __ ldsmaxa(Assembler::xword, r13, r14, r20); // ldsmaxa x13, x14, [x20]
693 __ ldumina(Assembler::xword, r1, r23, r30); // ldumina x1, x23, [x30]
694 __ ldumaxa(Assembler::xword, r14, r2, r6); // ldumaxa x14, x2, [x6]
695
696 // LSEOp
697 __ swpal(Assembler::xword, r3, r8, r25); // swpal x3, x8, [x25]
698 __ ldaddal(Assembler::xword, r0, r27, r30); // ldaddal x0, x27, [x30]
699 __ ldbical(Assembler::xword, r5, r5, r30); // ldclral x5, x5, [x30]
700 __ ldeoral(Assembler::xword, r11, r25, r0); // ldeoral x11, x25, [x0]
701 __ ldorral(Assembler::xword, zr, r0, r19); // ldsetal xzr, x0, [x19]
702 __ ldsminal(Assembler::xword, r29, r26, r9); // ldsminal x29, x26, [x9]
703 __ ldsmaxal(Assembler::xword, r26, r12, r15); // ldsmaxal x26, x12, [x15]
704 __ lduminal(Assembler::xword, r11, r11, r18); // lduminal x11, x11, [x18]
705 __ ldumaxal(Assembler::xword, r25, r22, r24); // ldumaxal x25, x22, [x24]
706
707 // LSEOp
708 __ swpl(Assembler::xword, r0, r17, r11); // swpl x0, x17, [x11]
709 __ ldaddl(Assembler::xword, r6, r29, r6); // ldaddl x6, x29, [x6]
710 __ ldbicl(Assembler::xword, r5, r5, r21); // ldclrl x5, x5, [x21]
711 __ ldeorl(Assembler::xword, r19, r16, r18); // ldeorl x19, x16, [x18]
712 __ ldorrl(Assembler::xword, r30, r27, r28); // ldsetl x30, x27, [x28]
713 __ ldsminl(Assembler::xword, r1, r28, r1); // ldsminl x1, x28, [x1]
714 __ ldsmaxl(Assembler::xword, r20, r29, r16); // ldsmaxl x20, x29, [x16]
715 __ lduminl(Assembler::xword, r13, r10, r29); // lduminl x13, x10, [x29]
716 __ ldumaxl(Assembler::xword, r29, r19, r22); // ldumaxl x29, x19, [x22]
717
718 // LSEOp
719 __ swp(Assembler::word, r10, r4, sp); // swp w10, w4, [sp]
720 __ ldadd(Assembler::word, r21, r8, sp); // ldadd w21, w8, [sp]
721 __ ldbic(Assembler::word, r19, r10, r28); // ldclr w19, w10, [x28]
722 __ ldeor(Assembler::word, r2, r25, r5); // ldeor w2, w25, [x5]
723 __ ldorr(Assembler::word, r3, r8, r22); // ldset w3, w8, [x22]
724 __ ldsmin(Assembler::word, r19, r13, r5); // ldsmin w19, w13, [x5]
725 __ ldsmax(Assembler::word, r29, r24, r21); // ldsmax w29, w24, [x21]
726 __ ldumin(Assembler::word, r26, r24, r3); // ldumin w26, w24, [x3]
727 __ ldumax(Assembler::word, r24, r26, r23); // ldumax w24, w26, [x23]
728
729 // LSEOp
730 __ swpa(Assembler::word, r15, r21, r3); // swpa w15, w21, [x3]
731 __ ldadda(Assembler::word, r24, r8, r25); // ldadda w24, w8, [x25]
732 __ ldbica(Assembler::word, r20, r16, r17); // ldclra w20, w16, [x17]
733 __ ldeora(Assembler::word, r2, r1, r0); // ldeora w2, w1, [x0]
734 __ ldorra(Assembler::word, r24, r4, r3); // ldseta w24, w4, [x3]
735 __ ldsmina(Assembler::word, r12, zr, r28); // ldsmina w12, wzr, [x28]
736 __ ldsmaxa(Assembler::word, r10, r26, r2); // ldsmaxa w10, w26, [x2]
737 __ ldumina(Assembler::word, r12, r18, sp); // ldumina w12, w18, [sp]
738 __ ldumaxa(Assembler::word, r1, r13, r29); // ldumaxa w1, w13, [x29]
739
740 // LSEOp
741 __ swpal(Assembler::word, r0, r19, r12); // swpal w0, w19, [x12]
742 __ ldaddal(Assembler::word, r17, r22, r13); // ldaddal w17, w22, [x13]
743 __ ldbical(Assembler::word, r28, r30, sp); // ldclral w28, w30, [sp]
744 __ ldeoral(Assembler::word, r1, r26, r28); // ldeoral w1, w26, [x28]
745 __ ldorral(Assembler::word, r4, r30, r4); // ldsetal w4, w30, [x4]
746 __ ldsminal(Assembler::word, r6, r30, r26); // ldsminal w6, w30, [x26]
747 __ ldsmaxal(Assembler::word, r18, r9, r8); // ldsmaxal w18, w9, [x8]
748 __ lduminal(Assembler::word, r12, r0, r20); // lduminal w12, w0, [x20]
749 __ ldumaxal(Assembler::word, r1, r24, r2); // ldumaxal w1, w24, [x2]
750
751 // LSEOp
752 __ swpl(Assembler::word, r0, r9, r24); // swpl w0, w9, [x24]
753 __ ldaddl(Assembler::word, r26, r16, r30); // ldaddl w26, w16, [x30]
754 __ ldbicl(Assembler::word, r3, r10, r23); // ldclrl w3, w10, [x23]
755 __ ldeorl(Assembler::word, r10, r4, r18); // ldeorl w10, w4, [x18]
756 __ ldorrl(Assembler::word, r2, r11, r8); // ldsetl w2, w11, [x8]
757 __ ldsminl(Assembler::word, r10, r15, r17); // ldsminl w10, w15, [x17]
758 __ ldsmaxl(Assembler::word, r2, r10, r12); // ldsmaxl w2, w10, [x12]
759 __ lduminl(Assembler::word, r12, r15, r13); // lduminl w12, w15, [x13]
760 __ ldumaxl(Assembler::word, r2, r7, r20); // ldumaxl w2, w7, [x20]
761
762 __ bind(forth);
763
764 /*
765 aarch64ops.o: file format elf64-littleaarch64
766
767
768 Disassembly of section .text:
769
770 0000000000000000 <back>:
771 0: 8b0d82fa add x26, x23, x13, lsl #32
772 4: cb49970c sub x12, x24, x9, lsr #37
773 8: ab889dfc adds x28, x15, x8, asr #39
774 c: eb9ee787 subs x7, x28, x30, asr #57
775 10: 0b9b3ec9 add w9, w22, w27, asr #15
776 14: 4b9279a3 sub w3, w13, w18, asr #30
777 18: 2b88474e adds w14, w26, w8, asr #17
778 1c: 6b8c56c0 subs w0, w22, w12, asr #21
779 20: 8a1a51e0 and x0, x15, x26, lsl #20
780 24: aa11f4ba orr x26, x5, x17, lsl #61
781 28: ca0281b8 eor x24, x13, x2, lsl #32
782 2c: ea918c7c ands x28, x3, x17, asr #35
783 30: 0a5d4a19 and w25, w16, w29, lsr #18
784 34: 2a4b264d orr w13, w18, w11, lsr #9
785 38: 4a523ca5 eor w5, w5, w18, lsr #15
786 3c: 6a9b6ae2 ands w2, w23, w27, asr #26
787 40: 8a70b79b bic x27, x28, x16, lsr #45
788 44: aaba9728 orn x8, x25, x26, asr #37
789 48: ca6dfe3d eon x29, x17, x13, lsr #63
790 4c: ea627f1c bics x28, x24, x2, lsr #31
791 50: 0aa70f53 bic w19, w26, w7, asr #3
792 54: 2aaa0f06 orn w6, w24, w10, asr #3
793 58: 4a6176a4 eon w4, w21, w1, lsr #29
794 5c: 6a604eb0 bics w16, w21, w0, lsr #19
795 60: 1105ed91 add w17, w12, #0x17b
796 64: 3100583e adds w30, w1, #0x16
797 68: 5101f8bd sub w29, w5, #0x7e
798 6c: 710f0306 subs w6, w24, #0x3c0
799 70: 9101a1a0 add x0, x13, #0x68
800 74: b10a5cc8 adds x8, x6, #0x297
801 78: d10810aa sub x10, x5, #0x204
802 7c: f10fd061 subs x1, x3, #0x3f4
803 80: 120cb166 and w6, w11, #0xfff1fff1
804 84: 321764bc orr w28, w5, #0xfffffe07
805 88: 52174681 eor w1, w20, #0x7fffe00
806 8c: 720c0247 ands w7, w18, #0x100000
807 90: 9241018e and x14, x12, #0x8000000000000000
808 94: b25a2969 orr x9, x11, #0x1ffc000000000
809 98: d278b411 eor x17, x0, #0x3fffffffffff00
810 9c: f26aad01 ands x1, x8, #0xffffffffffc00003
811 a0: 14000000 b a0 <back+0xa0>
812 a4: 17ffffd7 b 0 <back>
813 a8: 140001f2 b 870 <forth>
814 ac: 94000000 bl ac <back+0xac>
815 b0: 97ffffd4 bl 0 <back>
816 b4: 940001ef bl 870 <forth>
817 b8: 3400000a cbz w10, b8 <back+0xb8>
818 bc: 34fffa2a cbz w10, 0 <back>
819 c0: 34003d8a cbz w10, 870 <forth>
820 c4: 35000008 cbnz w8, c4 <back+0xc4>
821 c8: 35fff9c8 cbnz w8, 0 <back>
822 cc: 35003d28 cbnz w8, 870 <forth>
823 d0: b400000b cbz x11, d0 <back+0xd0>
824 d4: b4fff96b cbz x11, 0 <back>
825 d8: b4003ccb cbz x11, 870 <forth>
826 dc: b500001d cbnz x29, dc <back+0xdc>
827 e0: b5fff91d cbnz x29, 0 <back>
828 e4: b5003c7d cbnz x29, 870 <forth>
829 e8: 10000013 adr x19, e8 <back+0xe8>
830 ec: 10fff8b3 adr x19, 0 <back>
831 f0: 10003c13 adr x19, 870 <forth>
832 f4: 90000013 adrp x19, 0 <back>
833 f8: 36300016 tbz w22, #6, f8 <back+0xf8>
834 fc: 3637f836 tbz w22, #6, 0 <back>
835 100: 36303b96 tbz w22, #6, 870 <forth>
836 104: 3758000c tbnz w12, #11, 104 <back+0x104>
837 108: 375ff7cc tbnz w12, #11, 0 <back>
838 10c: 37583b2c tbnz w12, #11, 870 <forth>
839 110: 128313a0 mov w0, #0xffffe762 // #-6302
840 114: 528a32c7 mov w7, #0x5196 // #20886
841 118: 7289173b movk w27, #0x48b9
842 11c: 92ab3acc mov x12, #0xffffffffa629ffff // #-1507196929
843 120: d2a0bf94 mov x20, #0x5fc0000 // #100401152
844 124: f2c285e8 movk x8, #0x142f, lsl #32
845 128: 9358722f sbfx x15, x17, #24, #5
846 12c: 330e652f bfxil w15, w9, #14, #12
847 130: 53067f3b lsr w27, w25, #6
848 134: 93577c53 sbfx x19, x2, #23, #9
849 138: b34a1aac bfi x12, x21, #54, #7
850 13c: d35a4016 ubfiz x22, x0, #38, #17
851 140: 13946c63 extr w3, w3, w20, #27
852 144: 93c3dbc8 extr x8, x30, x3, #54
853 148: 54000000 b.eq 148 <back+0x148> // b.none
854 14c: 54fff5a0 b.eq 0 <back> // b.none
855 150: 54003900 b.eq 870 <forth> // b.none
856 154: 54000001 b.ne 154 <back+0x154> // b.any
857 158: 54fff541 b.ne 0 <back> // b.any
858 15c: 540038a1 b.ne 870 <forth> // b.any
859 160: 54000002 b.cs 160 <back+0x160> // b.hs, b.nlast
860 164: 54fff4e2 b.cs 0 <back> // b.hs, b.nlast
861 168: 54003842 b.cs 870 <forth> // b.hs, b.nlast
862 16c: 54000002 b.cs 16c <back+0x16c> // b.hs, b.nlast
863 170: 54fff482 b.cs 0 <back> // b.hs, b.nlast
864 174: 540037e2 b.cs 870 <forth> // b.hs, b.nlast
865 178: 54000003 b.cc 178 <back+0x178> // b.lo, b.ul, b.last
866 17c: 54fff423 b.cc 0 <back> // b.lo, b.ul, b.last
867 180: 54003783 b.cc 870 <forth> // b.lo, b.ul, b.last
868 184: 54000003 b.cc 184 <back+0x184> // b.lo, b.ul, b.last
869 188: 54fff3c3 b.cc 0 <back> // b.lo, b.ul, b.last
870 18c: 54003723 b.cc 870 <forth> // b.lo, b.ul, b.last
871 190: 54000004 b.mi 190 <back+0x190> // b.first
872 194: 54fff364 b.mi 0 <back> // b.first
873 198: 540036c4 b.mi 870 <forth> // b.first
874 19c: 54000005 b.pl 19c <back+0x19c> // b.nfrst
875 1a0: 54fff305 b.pl 0 <back> // b.nfrst
876 1a4: 54003665 b.pl 870 <forth> // b.nfrst
877 1a8: 54000006 b.vs 1a8 <back+0x1a8>
878 1ac: 54fff2a6 b.vs 0 <back>
879 1b0: 54003606 b.vs 870 <forth>
880 1b4: 54000007 b.vc 1b4 <back+0x1b4>
881 1b8: 54fff247 b.vc 0 <back>
882 1bc: 540035a7 b.vc 870 <forth>
883 1c0: 54000008 b.hi 1c0 <back+0x1c0> // b.pmore
884 1c4: 54fff1e8 b.hi 0 <back> // b.pmore
885 1c8: 54003548 b.hi 870 <forth> // b.pmore
886 1cc: 54000009 b.ls 1cc <back+0x1cc> // b.plast
887 1d0: 54fff189 b.ls 0 <back> // b.plast
888 1d4: 540034e9 b.ls 870 <forth> // b.plast
889 1d8: 5400000a b.ge 1d8 <back+0x1d8> // b.tcont
890 1dc: 54fff12a b.ge 0 <back> // b.tcont
891 1e0: 5400348a b.ge 870 <forth> // b.tcont
892 1e4: 5400000b b.lt 1e4 <back+0x1e4> // b.tstop
893 1e8: 54fff0cb b.lt 0 <back> // b.tstop
894 1ec: 5400342b b.lt 870 <forth> // b.tstop
895 1f0: 5400000c b.gt 1f0 <back+0x1f0>
896 1f4: 54fff06c b.gt 0 <back>
897 1f8: 540033cc b.gt 870 <forth>
898 1fc: 5400000d b.le 1fc <back+0x1fc>
899 200: 54fff00d b.le 0 <back>
900 204: 5400336d b.le 870 <forth>
901 208: 5400000e b.al 208 <back+0x208>
902 20c: 54ffefae b.al 0 <back>
903 210: 5400330e b.al 870 <forth>
904 214: 5400000f b.nv 214 <back+0x214>
905 218: 54ffef4f b.nv 0 <back>
906 21c: 540032af b.nv 870 <forth>
907 220: d40658e1 svc #0x32c7
908 224: d4014d22 hvc #0xa69
909 228: d4046543 smc #0x232a
910 22c: d4273f60 brk #0x39fb
911 230: d44cad80 hlt #0x656c
912 234: d503201f nop
913 238: d69f03e0 eret
914 23c: d6bf03e0 drps
915 240: d5033fdf isb
916 244: d5033e9f dsb st
917 248: d50332bf dmb oshst
918 24c: d61f0200 br x16
919 250: d63f0280 blr x20
920 254: c80a7d1b stxr w10, x27, [x8]
921 258: c800fea1 stlxr w0, x1, [x21]
922 25c: c85f7fb1 ldxr x17, [x29]
923 260: c85fff9d ldaxr x29, [x28]
924 264: c89ffee1 stlr x1, [x23]
925 268: c8dffe95 ldar x21, [x20]
926 26c: 88167e7b stxr w22, w27, [x19]
927 270: 880bfcd0 stlxr w11, w16, [x6]
928 274: 885f7c12 ldxr w18, [x0]
929 278: 885ffd44 ldaxr w4, [x10]
930 27c: 889ffed8 stlr w24, [x22]
931 280: 88dffe6a ldar w10, [x19]
932 284: 48017fc5 stxrh w1, w5, [x30]
933 288: 4808fe2c stlxrh w8, w12, [x17]
934 28c: 485f7dc9 ldxrh w9, [x14]
935 290: 485ffc27 ldaxrh w7, [x1]
936 294: 489ffe05 stlrh w5, [x16]
937 298: 48dffd82 ldarh w2, [x12]
938 29c: 080a7c6c stxrb w10, w12, [x3]
939 2a0: 081cff4e stlxrb w28, w14, [x26]
940 2a4: 085f7d5e ldxrb w30, [x10]
941 2a8: 085ffeae ldaxrb w14, [x21]
942 2ac: 089ffd2d stlrb w13, [x9]
943 2b0: 08dfff76 ldarb w22, [x27]
944 2b4: c87f4d7c ldxp x28, x19, [x11]
945 2b8: c87fcc5e ldaxp x30, x19, [x2]
946 2bc: c8220417 stxp w2, x23, x1, [x0]
947 2c0: c82cb5f0 stlxp w12, x16, x13, [x15]
948 2c4: 887f55b2 ldxp w18, w21, [x13]
949 2c8: 887ff90b ldaxp w11, w30, [x8]
950 2cc: 88382c2d stxp w24, w13, w11, [x1]
951 2d0: 883aedb5 stlxp w26, w21, w27, [x13]
952 2d4: f819928b stur x11, [x20, #-103]
953 2d8: b803e21c stur w28, [x16, #62]
954 2dc: 381f713b sturb w27, [x9, #-9]
955 2e0: 781ce322 sturh w2, [x25, #-50]
956 2e4: f850f044 ldur x4, [x2, #-241]
957 2e8: b85e129e ldur w30, [x20, #-31]
958 2ec: 385e92f2 ldurb w18, [x23, #-23]
959 2f0: 785ff35d ldurh w29, [x26, #-1]
960 2f4: 39801921 ldrsb x1, [x9, #6]
961 2f8: 7881318b ldursh x11, [x12, #19]
962 2fc: 78dce02b ldursh w11, [x1, #-50]
963 300: b8829313 ldursw x19, [x24, #41]
964 304: fc45f318 ldur d24, [x24, #95]
965 308: bc5d50af ldur s15, [x5, #-43]
966 30c: fc001375 stur d21, [x27, #1]
967 310: bc1951b7 stur s23, [x13, #-107]
968 314: f8008c0b str x11, [x0, #8]!
969 318: b801dc03 str w3, [x0, #29]!
970 31c: 38009dcb strb w11, [x14, #9]!
971 320: 781fdf1d strh w29, [x24, #-3]!
972 324: f8570e2d ldr x13, [x17, #-144]!
973 328: b85faecc ldr w12, [x22, #-6]!
974 32c: 385f6d8d ldrb w13, [x12, #-10]!
975 330: 785ebea0 ldrh w0, [x21, #-21]!
976 334: 38804cf7 ldrsb x23, [x7, #4]!
977 338: 789cbce3 ldrsh x3, [x7, #-53]!
978 33c: 78df9cbc ldrsh w28, [x5, #-7]!
979 340: b89eed38 ldrsw x24, [x9, #-18]!
980 344: fc40cd6e ldr d14, [x11, #12]!
981 348: bc5bdd93 ldr s19, [x12, #-67]!
982 34c: fc103c14 str d20, [x0, #-253]!
983 350: bc040c08 str s8, [x0, #64]!
984 354: f81a2784 str x4, [x28], #-94
985 358: b81ca4ec str w12, [x7], #-54
986 35c: 381e855b strb w27, [x10], #-24
987 360: 7801b506 strh w6, [x8], #27
988 364: f853654e ldr x14, [x10], #-202
989 368: b85d74b0 ldr w16, [x5], #-41
990 36c: 384095c2 ldrb w2, [x14], #9
991 370: 785ec5bc ldrh w28, [x13], #-20
992 374: 389e15a9 ldrsb x9, [x13], #-31
993 378: 789dc703 ldrsh x3, [x24], #-36
994 37c: 78c06474 ldrsh w20, [x3], #6
995 380: b89ff667 ldrsw x7, [x19], #-1
996 384: fc57e51e ldr d30, [x8], #-130
997 388: bc4155f9 ldr s25, [x15], #21
998 38c: fc05a6ee str d14, [x23], #90
999 390: bc1df408 str s8, [x0], #-33
1000 394: f835da4a str x10, [x18, w21, sxtw #3]
1001 398: b836d9a4 str w4, [x13, w22, sxtw #2]
1002 39c: 3833580d strb w13, [x0, w19, uxtw #0]
1003 3a0: 7826cb6c strh w12, [x27, w6, sxtw]
1004 3a4: f8706900 ldr x0, [x8, x16]
1005 3a8: b87ae880 ldr w0, [x4, x26, sxtx]
1006 3ac: 3865db2e ldrb w14, [x25, w5, sxtw #0]
1007 3b0: 78724889 ldrh w9, [x4, w18, uxtw]
1008 3b4: 38a7789b ldrsb x27, [x4, x7, lsl #0]
1009 3b8: 78beca2f ldrsh x15, [x17, w30, sxtw]
1010 3bc: 78f6c810 ldrsh w16, [x0, w22, sxtw]
1011 3c0: b8bef956 ldrsw x22, [x10, x30, sxtx #2]
1012 3c4: fc6afabd ldr d29, [x21, x10, sxtx #3]
1013 3c8: bc734963 ldr s3, [x11, w19, uxtw]
1014 3cc: fc3d5b8d str d13, [x28, w29, uxtw #3]
1015 3d0: bc25fbb7 str s23, [x29, x5, sxtx #2]
1016 3d4: f9189d05 str x5, [x8, #12600]
1017 3d8: b91ecb1d str w29, [x24, #7880]
1018 3dc: 39187a33 strb w19, [x17, #1566]
1019 3e0: 791f226d strh w13, [x19, #3984]
1020 3e4: f95aa2f3 ldr x19, [x23, #13632]
1021 3e8: b9587bb7 ldr w23, [x29, #6264]
1022 3ec: 395f7176 ldrb w22, [x11, #2012]
1023 3f0: 795d9143 ldrh w3, [x10, #3784]
1024 3f4: 399e7e08 ldrsb x8, [x16, #1951]
1025 3f8: 799a2697 ldrsh x23, [x20, #3346]
1026 3fc: 79df3422 ldrsh w2, [x1, #3994]
1027 400: b99c2624 ldrsw x4, [x17, #7204]
1028 404: fd5c2374 ldr d20, [x27, #14400]
1029 408: bd5fa1d9 ldr s25, [x14, #8096]
1030 40c: fd1d595a str d26, [x10, #15024]
1031 410: bd1b1869 str s9, [x3, #6936]
1032 414: 580022fb ldr x27, 870 <forth>
1033 418: 1800000b ldr w11, 418 <back+0x418>
1034 41c: f8945060 prfum pldl1keep, [x3, #-187]
1035 420: d8000000 prfm pldl1keep, 420 <back+0x420>
1036 424: f8ae6ba0 prfm pldl1keep, [x29, x14]
1037 428: f99a0080 prfm pldl1keep, [x4, #13312]
1038 42c: 1a070035 adc w21, w1, w7
1039 430: 3a0700a8 adcs w8, w5, w7
1040 434: 5a0e0367 sbc w7, w27, w14
1041 438: 7a11009b sbcs w27, w4, w17
1042 43c: 9a000380 adc x0, x28, x0
1043 440: ba1e030c adcs x12, x24, x30
1044 444: da0f0320 sbc x0, x25, x15
1045 448: fa030301 sbcs x1, x24, x3
1046 44c: 0b340b12 add w18, w24, w20, uxtb #2
1047 450: 2b2a278d adds w13, w28, w10, uxth #1
1048 454: cb22aa0f sub x15, x16, w2, sxth #2
1049 458: 6b2d29bd subs w29, w13, w13, uxth #2
1050 45c: 8b2cce8c add x12, x20, w12, sxtw #3
1051 460: ab2b877e adds x30, x27, w11, sxtb #1
1052 464: cb21c8ee sub x14, x7, w1, sxtw #2
1053 468: eb3ba47d subs x29, x3, w27, sxth #1
1054 46c: 3a4d400e ccmn w0, w13, #0xe, mi // mi = first
1055 470: 7a5232c6 ccmp w22, w18, #0x6, cc // cc = lo, ul, last
1056 474: ba5e624e ccmn x18, x30, #0xe, vs
1057 478: fa53814c ccmp x10, x19, #0xc, hi // hi = pmore
1058 47c: 3a52d8c2 ccmn w6, #0x12, #0x2, le
1059 480: 7a4d8924 ccmp w9, #0xd, #0x4, hi // hi = pmore
1060 484: ba4b3aab ccmn x21, #0xb, #0xb, cc // cc = lo, ul, last
1061 488: fa4d7882 ccmp x4, #0xd, #0x2, vc
1062 48c: 1a96804c csel w12, w2, w22, hi // hi = pmore
1063 490: 1a912618 csinc w24, w16, w17, cs // cs = hs, nlast
1064 494: 5a90b0e6 csinv w6, w7, w16, lt // lt = tstop
1065 498: 5a96976b csneg w11, w27, w22, ls // ls = plast
1066 49c: 9a9db06a csel x10, x3, x29, lt // lt = tstop
1067 4a0: 9a9b374c csinc x12, x26, x27, cc // cc = lo, ul, last
1068 4a4: da95c14f csinv x15, x10, x21, gt
1069 4a8: da89c6fe csneg x30, x23, x9, gt
1070 4ac: 5ac0015e rbit w30, w10
1071 4b0: 5ac005fd rev16 w29, w15
1072 4b4: 5ac00bdd rev w29, w30
1073 4b8: 5ac012b9 clz w25, w21
1074 4bc: 5ac01404 cls w4, w0
1075 4c0: dac002b2 rbit x18, x21
1076 4c4: dac0061d rev16 x29, x16
1077 4c8: dac00a95 rev32 x21, x20
1078 4cc: dac00e66 rev x6, x19
1079 4d0: dac0107e clz x30, x3
1080 4d4: dac01675 cls x21, x19
1081 4d8: 1ac00b0b udiv w11, w24, w0
1082 4dc: 1ace0f3b sdiv w27, w25, w14
1083 4e0: 1ad221c3 lsl w3, w14, w18
1084 4e4: 1ad825e7 lsr w7, w15, w24
1085 4e8: 1ad92a3c asr w28, w17, w25
1086 4ec: 1adc2f42 ror w2, w26, w28
1087 4f0: 9ada0b25 udiv x5, x25, x26
1088 4f4: 9ad20e1b sdiv x27, x16, x18
1089 4f8: 9acc22a6 lsl x6, x21, x12
1090 4fc: 9acc2480 lsr x0, x4, x12
1091 500: 9adc2a3b asr x27, x17, x28
1092 504: 9ad22c5c ror x28, x2, x18
1093 508: 9bce7dea umulh x10, x15, x14
1094 50c: 9b597c6e smulh x14, x3, x25
1095 510: 1b0e166f madd w15, w19, w14, w5
1096 514: 1b1ae490 msub w16, w4, w26, w25
1097 518: 9b023044 madd x4, x2, x2, x12
1098 51c: 9b089e3d msub x29, x17, x8, x7
1099 520: 9b391083 smaddl x3, w4, w25, x4
1100 524: 9b24c73a smsubl x26, w25, w4, x17
1101 528: 9bb15f40 umaddl x0, w26, w17, x23
1102 52c: 9bbcc6af umsubl x15, w21, w28, x17
1103 530: 1e23095b fmul s27, s10, s3
1104 534: 1e3918e0 fdiv s0, s7, s25
1105 538: 1e2f28c9 fadd s9, s6, s15
1106 53c: 1e2a39fd fsub s29, s15, s10
1107 540: 1e270a22 fmul s2, s17, s7
1108 544: 1e77096b fmul d11, d11, d23
1109 548: 1e771ba7 fdiv d7, d29, d23
1110 54c: 1e6b2b6e fadd d14, d27, d11
1111 550: 1e78388b fsub d11, d4, d24
1112 554: 1e6e09ec fmul d12, d15, d14
1113 558: 1f1c3574 fmadd s20, s11, s28, s13
1114 55c: 1f17f98b fmsub s11, s12, s23, s30
1115 560: 1f2935da fnmadd s26, s14, s9, s13
1116 564: 1f2574ea fnmadd s10, s7, s5, s29
1117 568: 1f4b306f fmadd d15, d3, d11, d12
1118 56c: 1f5ec7cf fmsub d15, d30, d30, d17
1119 570: 1f6f3e93 fnmadd d19, d20, d15, d15
1120 574: 1f6226a9 fnmadd d9, d21, d2, d9
1121 578: 1e2040fb fmov s27, s7
1122 57c: 1e20c3dd fabs s29, s30
1123 580: 1e214031 fneg s17, s1
1124 584: 1e21c0c2 fsqrt s2, s6
1125 588: 1e22c06a fcvt d10, s3
1126 58c: 1e604178 fmov d24, d11
1127 590: 1e60c027 fabs d7, d1
1128 594: 1e61400b fneg d11, d0
1129 598: 1e61c243 fsqrt d3, d18
1130 59c: 1e6240dc fcvt s28, d6
1131 5a0: 1e3800d6 fcvtzs w22, s6
1132 5a4: 9e380360 fcvtzs x0, s27
1133 5a8: 1e78005a fcvtzs w26, d2
1134 5ac: 9e7800e5 fcvtzs x5, d7
1135 5b0: 1e22017c scvtf s28, w11
1136 5b4: 9e2201b9 scvtf s25, x13
1137 5b8: 1e6202eb scvtf d11, w23
1138 5bc: 9e620113 scvtf d19, x8
1139 5c0: 1e2602b2 fmov w18, s21
1140 5c4: 9e660299 fmov x25, d20
1141 5c8: 1e270253 fmov s19, w18
1142 5cc: 9e6703a2 fmov d2, x29
1143 5d0: 1e2822c0 fcmp s22, s8
1144 5d4: 1e7322a0 fcmp d21, d19
1145 5d8: 1e202288 fcmp s20, #0.0
1146 5dc: 1e602168 fcmp d11, #0.0
1147 5e0: 293c19f4 stp w20, w6, [x15, #-32]
1148 5e4: 2966387b ldp w27, w14, [x3, #-208]
1149 5e8: 69762971 ldpsw x17, x10, [x11, #-80]
1150 5ec: a9041dc7 stp x7, x7, [x14, #64]
1151 5f0: a9475c0c ldp x12, x23, [x0, #112]
1152 5f4: 29b61ccd stp w13, w7, [x6, #-80]!
1153 5f8: 29ee405e ldp w30, w16, [x2, #-144]!
1154 5fc: 69ee0744 ldpsw x4, x1, [x26, #-144]!
1155 600: a9843977 stp x23, x14, [x11, #64]!
1156 604: a9f46ebd ldp x29, x27, [x21, #-192]!
1157 608: 28ba16b6 stp w22, w5, [x21], #-48
1158 60c: 28fc44db ldp w27, w17, [x6], #-32
1159 610: 68f61831 ldpsw x17, x6, [x1], #-80
1160 614: a8b352ad stp x13, x20, [x21], #-208
1161 618: a8c56d5e ldp x30, x27, [x10], #80
1162 61c: 28024565 stnp w5, w17, [x11, #16]
1163 620: 2874134e ldnp w14, w4, [x26, #-96]
1164 624: a8027597 stnp x23, x29, [x12, #32]
1165 628: a87b1aa0 ldnp x0, x6, [x21, #-80]
1166 62c: 0c40734f ld1 {v15.8b}, [x26]
1167 630: 4cdfa177 ld1 {v23.16b, v24.16b}, [x11], #32
1168 634: 0cc76ee8 ld1 {v8.1d-v10.1d}, [x23], x7
1169 638: 4cdf2733 ld1 {v19.8h-v22.8h}, [x25], #64
1170 63c: 0d40c23d ld1r {v29.8b}, [x17]
1171 640: 4ddfcaf8 ld1r {v24.4s}, [x23], #4
1172 644: 0dd9ccaa ld1r {v10.1d}, [x5], x25
1173 648: 4c408d52 ld2 {v18.2d, v19.2d}, [x10]
1174 64c: 0cdf85ec ld2 {v12.4h, v13.4h}, [x15], #16
1175 650: 4d60c259 ld2r {v25.16b, v26.16b}, [x18]
1176 654: 0dffcbc1 ld2r {v1.2s, v2.2s}, [x30], #8
1177 658: 4de9ce50 ld2r {v16.2d, v17.2d}, [x18], x9
1178 65c: 4cc24999 ld3 {v25.4s-v27.4s}, [x12], x2
1179 660: 0c404a7a ld3 {v26.2s-v28.2s}, [x19]
1180 664: 4d40e6af ld3r {v15.8h-v17.8h}, [x21]
1181 668: 4ddfe9b9 ld3r {v25.4s-v27.4s}, [x13], #12
1182 66c: 0dddef8e ld3r {v14.1d-v16.1d}, [x28], x29
1183 670: 4cdf07b1 ld4 {v17.8h-v20.8h}, [x29], #64
1184 674: 0cc000fb ld4 {v27.8b-v30.8b}, [x7], x0
1185 678: 0d60e258 ld4r {v24.8b-v27.8b}, [x18]
1186 67c: 0dffe740 ld4r {v0.4h-v3.4h}, [x26], #8
1187 680: 0de2eb2c ld4r {v12.2s-v15.2s}, [x25], x2
1188 684: ce648376 sha512h q22, q27, v4.2d
1189 688: ce6184c7 sha512h2 q7, q6, v1.2d
1190 68c: cec081fa sha512su0 v26.2d, v15.2d
1191 690: ce6d89a2 sha512su1 v2.2d, v13.2d, v13.2d
1192 694: ba5fd3e3 ccmn xzr, xzr, #0x3, le
1193 698: 3a5f03e5 ccmn wzr, wzr, #0x5, eq // eq = none
1194 69c: fa411be4 ccmp xzr, #0x1, #0x4, ne // ne = any
1195 6a0: 7a42cbe2 ccmp wzr, #0x2, #0x2, gt
1196 6a4: 93df03ff ror xzr, xzr, #0
1197 6a8: c820ffff stlxp w0, xzr, xzr, [sp]
1198 6ac: 8822fc7f stlxp w2, wzr, wzr, [x3]
1199 6b0: c8247cbf stxp w4, xzr, xzr, [x5]
1200 6b4: 88267fff stxp w6, wzr, wzr, [sp]
1201 6b8: 4e010fe0 dup v0.16b, wzr
1202 6bc: 4e081fe1 mov v1.d[0], xzr
1203 6c0: 4e0c1fe1 mov v1.s[1], wzr
1204 6c4: 4e0a1fe1 mov v1.h[2], wzr
1205 6c8: 4e071fe1 mov v1.b[3], wzr
1206 6cc: 4cc0ac3f ld1 {v31.2d, v0.2d}, [x1], x0
1207 6d0: 1e601000 fmov d0, #2.000000000000000000e+00
1208 6d4: 1e603000 fmov d0, #2.125000000000000000e+00
1209 6d8: 1e621000 fmov d0, #4.000000000000000000e+00
1210 6dc: 1e623000 fmov d0, #4.250000000000000000e+00
1211 6e0: 1e641000 fmov d0, #8.000000000000000000e+00
1212 6e4: 1e643000 fmov d0, #8.500000000000000000e+00
1213 6e8: 1e661000 fmov d0, #1.600000000000000000e+01
1214 6ec: 1e663000 fmov d0, #1.700000000000000000e+01
1215 6f0: 1e681000 fmov d0, #1.250000000000000000e-01
1216 6f4: 1e683000 fmov d0, #1.328125000000000000e-01
1217 6f8: 1e6a1000 fmov d0, #2.500000000000000000e-01
1218 6fc: 1e6a3000 fmov d0, #2.656250000000000000e-01
1219 700: 1e6c1000 fmov d0, #5.000000000000000000e-01
1220 704: 1e6c3000 fmov d0, #5.312500000000000000e-01
1221 708: 1e6e1000 fmov d0, #1.000000000000000000e+00
1222 70c: 1e6e3000 fmov d0, #1.062500000000000000e+00
1223 710: 1e701000 fmov d0, #-2.000000000000000000e+00
1224 714: 1e703000 fmov d0, #-2.125000000000000000e+00
1225 718: 1e721000 fmov d0, #-4.000000000000000000e+00
1226 71c: 1e723000 fmov d0, #-4.250000000000000000e+00
1227 720: 1e741000 fmov d0, #-8.000000000000000000e+00
1228 724: 1e743000 fmov d0, #-8.500000000000000000e+00
1229 728: 1e761000 fmov d0, #-1.600000000000000000e+01
1230 72c: 1e763000 fmov d0, #-1.700000000000000000e+01
1231 730: 1e781000 fmov d0, #-1.250000000000000000e-01
1232 734: 1e783000 fmov d0, #-1.328125000000000000e-01
1233 738: 1e7a1000 fmov d0, #-2.500000000000000000e-01
1234 73c: 1e7a3000 fmov d0, #-2.656250000000000000e-01
1235 740: 1e7c1000 fmov d0, #-5.000000000000000000e-01
1236 744: 1e7c3000 fmov d0, #-5.312500000000000000e-01
1237 748: 1e7e1000 fmov d0, #-1.000000000000000000e+00
1238 74c: 1e7e3000 fmov d0, #-1.062500000000000000e+00
1239 750: f8388098 swp x24, x24, [x4]
1240 754: f8340010 ldadd x20, x16, [x0]
1241 758: f8241175 ldclr x4, x21, [x11]
1242 75c: f83e22d0 ldeor x30, x16, [x22]
1243 760: f82432ef ldset x4, x15, [x23]
1244 764: f83a5186 ldsmin x26, x6, [x12]
1245 768: f82f41ee ldsmax x15, x14, [x15]
1246 76c: f82973b9 ldumin x9, x25, [x29]
1247 770: f82b6194 ldumax x11, x20, [x12]
1248 774: f8b28216 swpa x18, x22, [x16]
1249 778: f8b50358 ldadda x21, x24, [x26]
1250 77c: f8a61206 ldclra x6, x6, [x16]
1251 780: f8b02219 ldeora x16, x25, [x16]
1252 784: f8bc3218 ldseta x28, x24, [x16]
1253 788: f8ba514f ldsmina x26, x15, [x10]
1254 78c: f8ad428e ldsmaxa x13, x14, [x20]
1255 790: f8a173d7 ldumina x1, x23, [x30]
1256 794: f8ae60c2 ldumaxa x14, x2, [x6]
1257 798: f8e38328 swpal x3, x8, [x25]
1258 79c: f8e003db ldaddal x0, x27, [x30]
1259 7a0: f8e513c5 ldclral x5, x5, [x30]
1260 7a4: f8eb2019 ldeoral x11, x25, [x0]
1261 7a8: f8ff3260 ldsetal xzr, x0, [x19]
1262 7ac: f8fd513a ldsminal x29, x26, [x9]
1263 7b0: f8fa41ec ldsmaxal x26, x12, [x15]
1264 7b4: f8eb724b lduminal x11, x11, [x18]
1265 7b8: f8f96316 ldumaxal x25, x22, [x24]
1266 7bc: f8608171 swpl x0, x17, [x11]
1267 7c0: f86600dd ldaddl x6, x29, [x6]
1268 7c4: f86512a5 ldclrl x5, x5, [x21]
1269 7c8: f8732250 ldeorl x19, x16, [x18]
1270 7cc: f87e339b ldsetl x30, x27, [x28]
1271 7d0: f861503c ldsminl x1, x28, [x1]
1272 7d4: f874421d ldsmaxl x20, x29, [x16]
1273 7d8: f86d73aa lduminl x13, x10, [x29]
1274 7dc: f87d62d3 ldumaxl x29, x19, [x22]
1275 7e0: b82a83e4 swp w10, w4, [sp]
1276 7e4: b83503e8 ldadd w21, w8, [sp]
1277 7e8: b833138a ldclr w19, w10, [x28]
1278 7ec: b82220b9 ldeor w2, w25, [x5]
1279 7f0: b82332c8 ldset w3, w8, [x22]
1280 7f4: b83350ad ldsmin w19, w13, [x5]
1281 7f8: b83d42b8 ldsmax w29, w24, [x21]
1282 7fc: b83a7078 ldumin w26, w24, [x3]
1283 800: b83862fa ldumax w24, w26, [x23]
1284 804: b8af8075 swpa w15, w21, [x3]
1285 808: b8b80328 ldadda w24, w8, [x25]
1286 80c: b8b41230 ldclra w20, w16, [x17]
1287 810: b8a22001 ldeora w2, w1, [x0]
1288 814: b8b83064 ldseta w24, w4, [x3]
1289 818: b8ac539f ldsmina w12, wzr, [x28]
1290 81c: b8aa405a ldsmaxa w10, w26, [x2]
1291 820: b8ac73f2 ldumina w12, w18, [sp]
1292 824: b8a163ad ldumaxa w1, w13, [x29]
1293 828: b8e08193 swpal w0, w19, [x12]
1294 82c: b8f101b6 ldaddal w17, w22, [x13]
1295 830: b8fc13fe ldclral w28, w30, [sp]
1296 834: b8e1239a ldeoral w1, w26, [x28]
1297 838: b8e4309e ldsetal w4, w30, [x4]
1298 83c: b8e6535e ldsminal w6, w30, [x26]
1299 840: b8f24109 ldsmaxal w18, w9, [x8]
1300 844: b8ec7280 lduminal w12, w0, [x20]
1301 848: b8e16058 ldumaxal w1, w24, [x2]
1302 84c: b8608309 swpl w0, w9, [x24]
1303 850: b87a03d0 ldaddl w26, w16, [x30]
1304 854: b86312ea ldclrl w3, w10, [x23]
1305 858: b86a2244 ldeorl w10, w4, [x18]
1306 85c: b862310b ldsetl w2, w11, [x8]
1307 860: b86a522f ldsminl w10, w15, [x17]
1308 864: b862418a ldsmaxl w2, w10, [x12]
1309 868: b86c71af lduminl w12, w15, [x13]
1310 86c: b8626287 ldumaxl w2, w7, [x20]
1311 */
1312
1313 static const unsigned int insns[] =
1314 {
1315 0x8b0d82fa, 0xcb49970c, 0xab889dfc, 0xeb9ee787,
1316 0x0b9b3ec9, 0x4b9279a3, 0x2b88474e, 0x6b8c56c0,
1317 0x8a1a51e0, 0xaa11f4ba, 0xca0281b8, 0xea918c7c,
1318 0x0a5d4a19, 0x2a4b264d, 0x4a523ca5, 0x6a9b6ae2,
1319 0x8a70b79b, 0xaaba9728, 0xca6dfe3d, 0xea627f1c,
1320 0x0aa70f53, 0x2aaa0f06, 0x4a6176a4, 0x6a604eb0,
1321 0x1105ed91, 0x3100583e, 0x5101f8bd, 0x710f0306,
1322 0x9101a1a0, 0xb10a5cc8, 0xd10810aa, 0xf10fd061,
1323 0x120cb166, 0x321764bc, 0x52174681, 0x720c0247,
1324 0x9241018e, 0xb25a2969, 0xd278b411, 0xf26aad01,
1325 0x14000000, 0x17ffffd7, 0x140001f2, 0x94000000,
1326 0x97ffffd4, 0x940001ef, 0x3400000a, 0x34fffa2a,
1327 0x34003d8a, 0x35000008, 0x35fff9c8, 0x35003d28,
1328 0xb400000b, 0xb4fff96b, 0xb4003ccb, 0xb500001d,
1329 0xb5fff91d, 0xb5003c7d, 0x10000013, 0x10fff8b3,
1330 0x10003c13, 0x90000013, 0x36300016, 0x3637f836,
1331 0x36303b96, 0x3758000c, 0x375ff7cc, 0x37583b2c,
1332 0x128313a0, 0x528a32c7, 0x7289173b, 0x92ab3acc,
1333 0xd2a0bf94, 0xf2c285e8, 0x9358722f, 0x330e652f,
1334 0x53067f3b, 0x93577c53, 0xb34a1aac, 0xd35a4016,
1335 0x13946c63, 0x93c3dbc8, 0x54000000, 0x54fff5a0,
1336 0x54003900, 0x54000001, 0x54fff541, 0x540038a1,
1337 0x54000002, 0x54fff4e2, 0x54003842, 0x54000002,
1338 0x54fff482, 0x540037e2, 0x54000003, 0x54fff423,
1339 0x54003783, 0x54000003, 0x54fff3c3, 0x54003723,
1340 0x54000004, 0x54fff364, 0x540036c4, 0x54000005,
1341 0x54fff305, 0x54003665, 0x54000006, 0x54fff2a6,
1342 0x54003606, 0x54000007, 0x54fff247, 0x540035a7,
1343 0x54000008, 0x54fff1e8, 0x54003548, 0x54000009,
1344 0x54fff189, 0x540034e9, 0x5400000a, 0x54fff12a,
1345 0x5400348a, 0x5400000b, 0x54fff0cb, 0x5400342b,
1346 0x5400000c, 0x54fff06c, 0x540033cc, 0x5400000d,
1347 0x54fff00d, 0x5400336d, 0x5400000e, 0x54ffefae,
1348 0x5400330e, 0x5400000f, 0x54ffef4f, 0x540032af,
1349 0xd40658e1, 0xd4014d22, 0xd4046543, 0xd4273f60,
1350 0xd44cad80, 0xd503201f, 0xd69f03e0, 0xd6bf03e0,
1351 0xd5033fdf, 0xd5033e9f, 0xd50332bf, 0xd61f0200,
1352 0xd63f0280, 0xc80a7d1b, 0xc800fea1, 0xc85f7fb1,
1353 0xc85fff9d, 0xc89ffee1, 0xc8dffe95, 0x88167e7b,
1354 0x880bfcd0, 0x885f7c12, 0x885ffd44, 0x889ffed8,
1355 0x88dffe6a, 0x48017fc5, 0x4808fe2c, 0x485f7dc9,
1356 0x485ffc27, 0x489ffe05, 0x48dffd82, 0x080a7c6c,
1357 0x081cff4e, 0x085f7d5e, 0x085ffeae, 0x089ffd2d,
1358 0x08dfff76, 0xc87f4d7c, 0xc87fcc5e, 0xc8220417,
1359 0xc82cb5f0, 0x887f55b2, 0x887ff90b, 0x88382c2d,
1360 0x883aedb5, 0xf819928b, 0xb803e21c, 0x381f713b,
1361 0x781ce322, 0xf850f044, 0xb85e129e, 0x385e92f2,
1362 0x785ff35d, 0x39801921, 0x7881318b, 0x78dce02b,
1363 0xb8829313, 0xfc45f318, 0xbc5d50af, 0xfc001375,
1364 0xbc1951b7, 0xf8008c0b, 0xb801dc03, 0x38009dcb,
1365 0x781fdf1d, 0xf8570e2d, 0xb85faecc, 0x385f6d8d,
1366 0x785ebea0, 0x38804cf7, 0x789cbce3, 0x78df9cbc,
1367 0xb89eed38, 0xfc40cd6e, 0xbc5bdd93, 0xfc103c14,
1368 0xbc040c08, 0xf81a2784, 0xb81ca4ec, 0x381e855b,
1369 0x7801b506, 0xf853654e, 0xb85d74b0, 0x384095c2,
1370 0x785ec5bc, 0x389e15a9, 0x789dc703, 0x78c06474,
1371 0xb89ff667, 0xfc57e51e, 0xbc4155f9, 0xfc05a6ee,
1372 0xbc1df408, 0xf835da4a, 0xb836d9a4, 0x3833580d,
1373 0x7826cb6c, 0xf8706900, 0xb87ae880, 0x3865db2e,
1374 0x78724889, 0x38a7789b, 0x78beca2f, 0x78f6c810,
1375 0xb8bef956, 0xfc6afabd, 0xbc734963, 0xfc3d5b8d,
1376 0xbc25fbb7, 0xf9189d05, 0xb91ecb1d, 0x39187a33,
1377 0x791f226d, 0xf95aa2f3, 0xb9587bb7, 0x395f7176,
1378 0x795d9143, 0x399e7e08, 0x799a2697, 0x79df3422,
1379 0xb99c2624, 0xfd5c2374, 0xbd5fa1d9, 0xfd1d595a,
1380 0xbd1b1869, 0x580022fb, 0x1800000b, 0xf8945060,
1381 0xd8000000, 0xf8ae6ba0, 0xf99a0080, 0x1a070035,
1382 0x3a0700a8, 0x5a0e0367, 0x7a11009b, 0x9a000380,
1383 0xba1e030c, 0xda0f0320, 0xfa030301, 0x0b340b12,
1384 0x2b2a278d, 0xcb22aa0f, 0x6b2d29bd, 0x8b2cce8c,
1385 0xab2b877e, 0xcb21c8ee, 0xeb3ba47d, 0x3a4d400e,
1386 0x7a5232c6, 0xba5e624e, 0xfa53814c, 0x3a52d8c2,
1387 0x7a4d8924, 0xba4b3aab, 0xfa4d7882, 0x1a96804c,
1388 0x1a912618, 0x5a90b0e6, 0x5a96976b, 0x9a9db06a,
1389 0x9a9b374c, 0xda95c14f, 0xda89c6fe, 0x5ac0015e,
1390 0x5ac005fd, 0x5ac00bdd, 0x5ac012b9, 0x5ac01404,
1391 0xdac002b2, 0xdac0061d, 0xdac00a95, 0xdac00e66,
1392 0xdac0107e, 0xdac01675, 0x1ac00b0b, 0x1ace0f3b,
1393 0x1ad221c3, 0x1ad825e7, 0x1ad92a3c, 0x1adc2f42,
1394 0x9ada0b25, 0x9ad20e1b, 0x9acc22a6, 0x9acc2480,
1395 0x9adc2a3b, 0x9ad22c5c, 0x9bce7dea, 0x9b597c6e,
1396 0x1b0e166f, 0x1b1ae490, 0x9b023044, 0x9b089e3d,
1397 0x9b391083, 0x9b24c73a, 0x9bb15f40, 0x9bbcc6af,
1398 0x1e23095b, 0x1e3918e0, 0x1e2f28c9, 0x1e2a39fd,
1399 0x1e270a22, 0x1e77096b, 0x1e771ba7, 0x1e6b2b6e,
1400 0x1e78388b, 0x1e6e09ec, 0x1f1c3574, 0x1f17f98b,
1401 0x1f2935da, 0x1f2574ea, 0x1f4b306f, 0x1f5ec7cf,
1402 0x1f6f3e93, 0x1f6226a9, 0x1e2040fb, 0x1e20c3dd,
1403 0x1e214031, 0x1e21c0c2, 0x1e22c06a, 0x1e604178,
1404 0x1e60c027, 0x1e61400b, 0x1e61c243, 0x1e6240dc,
1405 0x1e3800d6, 0x9e380360, 0x1e78005a, 0x9e7800e5,
1406 0x1e22017c, 0x9e2201b9, 0x1e6202eb, 0x9e620113,
1407 0x1e2602b2, 0x9e660299, 0x1e270253, 0x9e6703a2,
1408 0x1e2822c0, 0x1e7322a0, 0x1e202288, 0x1e602168,
1409 0x293c19f4, 0x2966387b, 0x69762971, 0xa9041dc7,
1410 0xa9475c0c, 0x29b61ccd, 0x29ee405e, 0x69ee0744,
1411 0xa9843977, 0xa9f46ebd, 0x28ba16b6, 0x28fc44db,
1412 0x68f61831, 0xa8b352ad, 0xa8c56d5e, 0x28024565,
1413 0x2874134e, 0xa8027597, 0xa87b1aa0, 0x0c40734f,
1414 0x4cdfa177, 0x0cc76ee8, 0x4cdf2733, 0x0d40c23d,
1415 0x4ddfcaf8, 0x0dd9ccaa, 0x4c408d52, 0x0cdf85ec,
1416 0x4d60c259, 0x0dffcbc1, 0x4de9ce50, 0x4cc24999,
1417 0x0c404a7a, 0x4d40e6af, 0x4ddfe9b9, 0x0dddef8e,
1418 0x4cdf07b1, 0x0cc000fb, 0x0d60e258, 0x0dffe740,
1419 0x0de2eb2c, 0xce648376, 0xce6184c7, 0xcec081fa,
1420 0xce6d89a2, 0xba5fd3e3, 0x3a5f03e5, 0xfa411be4,
1421 0x7a42cbe2, 0x93df03ff, 0xc820ffff, 0x8822fc7f,
1422 0xc8247cbf, 0x88267fff, 0x4e010fe0, 0x4e081fe1,
1423 0x4e0c1fe1, 0x4e0a1fe1, 0x4e071fe1, 0x4cc0ac3f,
1424 0x1e601000, 0x1e603000, 0x1e621000, 0x1e623000,
1425 0x1e641000, 0x1e643000, 0x1e661000, 0x1e663000,
1426 0x1e681000, 0x1e683000, 0x1e6a1000, 0x1e6a3000,
1427 0x1e6c1000, 0x1e6c3000, 0x1e6e1000, 0x1e6e3000,
1428 0x1e701000, 0x1e703000, 0x1e721000, 0x1e723000,
1429 0x1e741000, 0x1e743000, 0x1e761000, 0x1e763000,
1430 0x1e781000, 0x1e783000, 0x1e7a1000, 0x1e7a3000,
1431 0x1e7c1000, 0x1e7c3000, 0x1e7e1000, 0x1e7e3000,
1432 0xf8388098, 0xf8340010, 0xf8241175, 0xf83e22d0,
1433 0xf82432ef, 0xf83a5186, 0xf82f41ee, 0xf82973b9,
1434 0xf82b6194, 0xf8b28216, 0xf8b50358, 0xf8a61206,
1435 0xf8b02219, 0xf8bc3218, 0xf8ba514f, 0xf8ad428e,
1436 0xf8a173d7, 0xf8ae60c2, 0xf8e38328, 0xf8e003db,
1437 0xf8e513c5, 0xf8eb2019, 0xf8ff3260, 0xf8fd513a,
1438 0xf8fa41ec, 0xf8eb724b, 0xf8f96316, 0xf8608171,
1439 0xf86600dd, 0xf86512a5, 0xf8732250, 0xf87e339b,
1440 0xf861503c, 0xf874421d, 0xf86d73aa, 0xf87d62d3,
1441 0xb82a83e4, 0xb83503e8, 0xb833138a, 0xb82220b9,
1442 0xb82332c8, 0xb83350ad, 0xb83d42b8, 0xb83a7078,
1443 0xb83862fa, 0xb8af8075, 0xb8b80328, 0xb8b41230,
1444 0xb8a22001, 0xb8b83064, 0xb8ac539f, 0xb8aa405a,
1445 0xb8ac73f2, 0xb8a163ad, 0xb8e08193, 0xb8f101b6,
1446 0xb8fc13fe, 0xb8e1239a, 0xb8e4309e, 0xb8e6535e,
1447 0xb8f24109, 0xb8ec7280, 0xb8e16058, 0xb8608309,
1448 0xb87a03d0, 0xb86312ea, 0xb86a2244, 0xb862310b,
1449 0xb86a522f, 0xb862418a, 0xb86c71af, 0xb8626287,
1450
1451 };
1452 // END Generated code -- do not edit
1453
1454 asm_check((unsigned int *)entry, insns, sizeof insns / sizeof insns[0]);
1455
1456 {
1457 address PC = __ pc();
1458 __ ld1(v0, __ T16B, Address(r16)); // No offset
1459 __ ld1(v0, __ T8H, __ post(r16, 16)); // Post-index
1460 __ ld2(v0, v1, __ T8H, __ post(r24, 16 * 2)); // Post-index
1461 __ ld1(v0, __ T16B, __ post(r16, r17)); // Register post-index
1462 static const unsigned int vector_insns[] = {
1463 0x4c407200, // ld1 {v0.16b}, [x16]
1464 0x4cdf7600, // ld1 {v0.8h}, [x16], #16
1465 0x4cdf8700, // ld2 {v0.8h, v1.8h}, [x24], #32
1466 0x4cd17200, // ld1 {v0.16b}, [x16], x17
1467 };
1468 asm_check((unsigned int *)PC, vector_insns,
1469 sizeof vector_insns / sizeof vector_insns[0]);
1470 }
1471 }
1472 #endif // ASSERT
1473
1474 #undef __
1475
1476 void Assembler::emit_data64(jlong data,
1477 relocInfo::relocType rtype,
1478 int format) {
1479 if (rtype == relocInfo::none) {
1480 emit_int64(data);
1481 } else {
1482 emit_data64(data, Relocation::spec_simple(rtype), format);
1483 }
1484 }
1485
1486 void Assembler::emit_data64(jlong data,
1487 RelocationHolder const& rspec,
1488 int format) {
1489
1490 assert(inst_mark() != NULL, "must be inside InstructionMark");
1491 // Do not use AbstractAssembler::relocate, which is not intended for
1492 // embedded words. Instead, relocate to the enclosing instruction.
1493 code_section()->relocate(inst_mark(), rspec, format);
1494 emit_int64(data);
1495 }
|
25 #include <stdio.h>
26 #include <sys/types.h>
27
28 #include "precompiled.hpp"
29 #include "asm/assembler.hpp"
30 #include "asm/assembler.inline.hpp"
31 #include "interpreter/interpreter.hpp"
32
33 #ifndef PRODUCT
34 const uintptr_t Assembler::asm_bp = 0x00007fffee09ac88;
35 #endif
36
37 #include "compiler/disassembler.hpp"
38 #include "memory/resourceArea.hpp"
39 #include "runtime/interfaceSupport.inline.hpp"
40 #include "runtime/sharedRuntime.hpp"
41 #include "immediate_aarch64.hpp"
42
43 extern "C" void entry(CodeBuffer *cb);
44
45 #ifdef PRODUCT
46 #define BLOCK_COMMENT(str) /* nothing */
47 #else
48 #define BLOCK_COMMENT(str) block_comment(str)
49 #endif
50
51 #define BIND(label) bind(label); __ BLOCK_COMMENT(#label ":")
52
53 static float unpack(unsigned value);
54
55 short Assembler::SIMD_Size_in_bytes[] = {
56 // T8B, T16B, T4H, T8H, T2S, T4S, T1D, T2D, T1Q
57 8, 16, 8, 16, 8, 16, 8, 16, 16
58 };
59
60 void Assembler::emit_data64(jlong data,
61 relocInfo::relocType rtype,
62 int format) {
63 if (rtype == relocInfo::none) {
64 emit_int64(data);
65 } else {
66 emit_data64(data, Relocation::spec_simple(rtype), format);
67 }
68 }
69
70 void Assembler::emit_data64(jlong data,
71 RelocationHolder const& rspec,
72 int format) {
73
74 assert(inst_mark() != NULL, "must be inside InstructionMark");
75 // Do not use AbstractAssembler::relocate, which is not intended for
76 // embedded words. Instead, relocate to the enclosing instruction.
77 code_section()->relocate(inst_mark(), rspec, format);
78 emit_int64(data);
79 }
|