Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/cpu/aarch64/vm/assembler_aarch64.cpp
32285 views
1
/*
2
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
3
* Copyright (c) 2014, 2020 Red Hat Inc. All rights reserved.
4
* reserved. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE
5
* HEADER.
6
*
7
* This code is free software; you can redistribute it and/or modify it
8
* under the terms of the GNU General Public License version 2 only, as
9
* published by the Free Software Foundation.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*
25
*/
26
27
#include <stdio.h>
28
#include <sys/types.h>
29
30
#include "precompiled.hpp"
31
#include "asm/assembler.hpp"
32
#include "asm/assembler.inline.hpp"
33
#include "interpreter/interpreter.hpp"
34
35
#ifndef PRODUCT
36
const unsigned long Assembler::asm_bp = 0x0000007fa8092b5c;
37
#endif
38
39
#include "compiler/disassembler.hpp"
40
#include "memory/resourceArea.hpp"
41
#include "runtime/interfaceSupport.hpp"
42
#include "runtime/sharedRuntime.hpp"
43
#include "immediate_aarch64.hpp"
44
45
// #include "gc_interface/collectedHeap.inline.hpp"
46
// #include "interpreter/interpreter.hpp"
47
// #include "memory/cardTableModRefBS.hpp"
48
// #include "prims/methodHandles.hpp"
49
// #include "runtime/biasedLocking.hpp"
50
// #include "runtime/interfaceSupport.hpp"
51
// #include "runtime/objectMonitor.hpp"
52
// #include "runtime/os.hpp"
53
// #include "runtime/sharedRuntime.hpp"
54
// #include "runtime/stubRoutines.hpp"
55
// #if INCLUDE_ALL_GCS
56
// #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
57
// #include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp"
58
// #include "gc_implementation/g1/heapRegion.hpp"
59
// #endif
60
61
62
extern "C" void entry(CodeBuffer *cb);
63
64
#define __ _masm.
65
#ifdef PRODUCT
66
#define BLOCK_COMMENT(str) /* nothing */
67
#else
68
#define BLOCK_COMMENT(str) block_comment(str)
69
#endif
70
71
#define BIND(label) bind(label); __ BLOCK_COMMENT(#label ":")
72
73
static float unpack(unsigned value);
74
75
#ifdef ASSERT
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(r19, r22, r7, Assembler::LSL, 28); // add x19, x22, x7, LSL #28
100
__ sub(r16, r11, r10, Assembler::LSR, 13); // sub x16, x11, x10, LSR #13
101
__ adds(r27, r13, r28, Assembler::ASR, 2); // adds x27, x13, x28, ASR #2
102
__ subs(r20, r28, r26, Assembler::ASR, 41); // subs x20, x28, x26, ASR #41
103
__ addw(r8, r19, r19, Assembler::ASR, 19); // add w8, w19, w19, ASR #19
104
__ subw(r4, r9, r10, Assembler::LSL, 14); // sub w4, w9, w10, LSL #14
105
__ addsw(r8, r11, r30, Assembler::LSL, 13); // adds w8, w11, w30, LSL #13
106
__ subsw(r0, r25, r19, Assembler::LSL, 9); // subs w0, w25, w19, LSL #9
107
__ andr(r20, r0, r21, Assembler::LSL, 19); // and x20, x0, x21, LSL #19
108
__ orr(r21, r14, r20, Assembler::LSL, 17); // orr x21, x14, x20, LSL #17
109
__ eor(r25, r28, r1, Assembler::LSL, 51); // eor x25, x28, x1, LSL #51
110
__ ands(r10, r27, r11, Assembler::ASR, 15); // ands x10, x27, x11, ASR #15
111
__ andw(r25, r5, r12, Assembler::ASR, 23); // and w25, w5, w12, ASR #23
112
__ orrw(r18, r14, r10, Assembler::LSR, 4); // orr w18, w14, w10, LSR #4
113
__ eorw(r4, r21, r5, Assembler::ASR, 22); // eor w4, w21, w5, ASR #22
114
__ andsw(r21, r0, r5, Assembler::ASR, 29); // ands w21, w0, w5, ASR #29
115
__ bic(r26, r30, r6, Assembler::ASR, 37); // bic x26, x30, x6, ASR #37
116
__ orn(r3, r1, r13, Assembler::LSR, 29); // orn x3, x1, x13, LSR #29
117
__ eon(r0, r28, r9, Assembler::LSL, 47); // eon x0, x28, x9, LSL #47
118
__ bics(r29, r5, r28, Assembler::LSL, 46); // bics x29, x5, x28, LSL #46
119
__ bicw(r9, r18, r7, Assembler::LSR, 20); // bic w9, w18, w7, LSR #20
120
__ ornw(r26, r13, r25, Assembler::ASR, 24); // orn w26, w13, w25, ASR #24
121
__ eonw(r25, r4, r19, Assembler::LSL, 6); // eon w25, w4, w19, LSL #6
122
__ bicsw(r5, r26, r4, Assembler::LSR, 24); // bics w5, w26, w4, LSR #24
123
124
// AddSubImmOp
125
__ addw(r7, r19, 340u); // add w7, w19, #340
126
__ addsw(r8, r0, 401u); // adds w8, w0, #401
127
__ subw(r29, r20, 163u); // sub w29, w20, #163
128
__ subsw(r8, r23, 759u); // subs w8, w23, #759
129
__ add(r1, r12, 523u); // add x1, x12, #523
130
__ adds(r2, r11, 426u); // adds x2, x11, #426
131
__ sub(r14, r29, 716u); // sub x14, x29, #716
132
__ subs(r11, r5, 582u); // subs x11, x5, #582
133
134
// LogicalImmOp
135
__ andw(r23, r22, 32768ul); // and w23, w22, #0x8000
136
__ orrw(r4, r10, 4042322160ul); // orr w4, w10, #0xf0f0f0f0
137
__ eorw(r0, r24, 4042322160ul); // eor w0, w24, #0xf0f0f0f0
138
__ andsw(r19, r29, 2139127680ul); // ands w19, w29, #0x7f807f80
139
__ andr(r5, r10, 4503599627354112ul); // and x5, x10, #0xfffffffffc000
140
__ orr(r12, r30, 18445618178097414144ul); // orr x12, x30, #0xfffc0000fffc0000
141
__ eor(r30, r5, 262128ul); // eor x30, x5, #0x3fff0
142
__ ands(r26, r23, 4194300ul); // ands x26, x23, #0x3ffffc
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(r12, __ pc()); // cbz w12, .
154
__ cbzw(r12, back); // cbz w12, back
155
__ cbzw(r12, forth); // cbz w12, forth
156
__ cbnzw(r20, __ pc()); // cbnz w20, .
157
__ cbnzw(r20, back); // cbnz w20, back
158
__ cbnzw(r20, forth); // cbnz w20, forth
159
__ cbz(r12, __ pc()); // cbz x12, .
160
__ cbz(r12, back); // cbz x12, back
161
__ cbz(r12, forth); // cbz x12, forth
162
__ cbnz(r24, __ pc()); // cbnz x24, .
163
__ cbnz(r24, back); // cbnz x24, back
164
__ cbnz(r24, forth); // cbnz x24, forth
165
__ adr(r6, __ pc()); // adr x6, .
166
__ adr(r6, back); // adr x6, back
167
__ adr(r6, forth); // adr x6, forth
168
__ _adrp(r21, __ pc()); // adrp x21, .
169
170
// RegImmAbsOp
171
__ tbz(r1, 1, __ pc()); // tbz x1, #1, .
172
__ tbz(r1, 1, back); // tbz x1, #1, back
173
__ tbz(r1, 1, forth); // tbz x1, #1, forth
174
__ tbnz(r8, 9, __ pc()); // tbnz x8, #9, .
175
__ tbnz(r8, 9, back); // tbnz x8, #9, back
176
__ tbnz(r8, 9, forth); // tbnz x8, #9, forth
177
178
// MoveWideImmOp
179
__ movnw(r12, 23175, 0); // movn w12, #23175, lsl 0
180
__ movzw(r11, 20476, 16); // movz w11, #20476, lsl 16
181
__ movkw(r21, 3716, 0); // movk w21, #3716, lsl 0
182
__ movn(r29, 28661, 48); // movn x29, #28661, lsl 48
183
__ movz(r3, 6927, 0); // movz x3, #6927, lsl 0
184
__ movk(r22, 9828, 16); // movk x22, #9828, lsl 16
185
186
// BitfieldOp
187
__ sbfm(r12, r8, 6, 22); // sbfm x12, x8, #6, #22
188
__ bfmw(r19, r25, 25, 19); // bfm w19, w25, #25, #19
189
__ ubfmw(r9, r12, 29, 15); // ubfm w9, w12, #29, #15
190
__ sbfm(r28, r25, 16, 16); // sbfm x28, x25, #16, #16
191
__ bfm(r12, r5, 4, 25); // bfm x12, x5, #4, #25
192
__ ubfm(r0, r10, 6, 8); // ubfm x0, x10, #6, #8
193
194
// ExtractOp
195
__ extrw(r4, r13, r26, 24); // extr w4, w13, w26, #24
196
__ extr(r23, r30, r24, 31); // extr x23, x30, x24, #31
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(12729); // svc #12729
256
__ hvc(6788); // hvc #6788
257
__ smc(1535); // smc #1535
258
__ brk(16766); // brk #16766
259
__ hlt(9753); // hlt #9753
260
261
// Op
262
__ nop(); // nop
263
__ eret(); // eret
264
__ drps(); // drps
265
__ isb(); // isb
266
267
// SystemOp
268
__ dsb(Assembler::SY); // dsb SY
269
__ dmb(Assembler::ISHST); // dmb ISHST
270
271
// OneRegOp
272
__ br(r2); // br x2
273
__ blr(r5); // blr x5
274
275
// LoadStoreExclusiveOp
276
__ stxr(r20, r21, r2); // stxr w20, x21, [x2]
277
__ stlxr(r5, r29, r7); // stlxr w5, x29, [x7]
278
__ ldxr(r5, r16); // ldxr x5, [x16]
279
__ ldaxr(r27, r29); // ldaxr x27, [x29]
280
__ stlr(r0, r29); // stlr x0, [x29]
281
__ ldar(r21, r28); // ldar x21, [x28]
282
283
// LoadStoreExclusiveOp
284
__ stxrw(r21, r24, r7); // stxr w21, w24, [x7]
285
__ stlxrw(r21, r26, r28); // stlxr w21, w26, [x28]
286
__ ldxrw(r21, r6); // ldxr w21, [x6]
287
__ ldaxrw(r15, r30); // ldaxr w15, [x30]
288
__ stlrw(r19, r3); // stlr w19, [x3]
289
__ ldarw(r22, r2); // ldar w22, [x2]
290
291
// LoadStoreExclusiveOp
292
__ stxrh(r18, r15, r0); // stxrh w18, w15, [x0]
293
__ stlxrh(r11, r5, r28); // stlxrh w11, w5, [x28]
294
__ ldxrh(r29, r6); // ldxrh w29, [x6]
295
__ ldaxrh(r18, r7); // ldaxrh w18, [x7]
296
__ stlrh(r25, r28); // stlrh w25, [x28]
297
__ ldarh(r2, r19); // ldarh w2, [x19]
298
299
// LoadStoreExclusiveOp
300
__ stxrb(r10, r30, r1); // stxrb w10, w30, [x1]
301
__ stlxrb(r20, r21, r22); // stlxrb w20, w21, [x22]
302
__ ldxrb(r25, r2); // ldxrb w25, [x2]
303
__ ldaxrb(r24, r5); // ldaxrb w24, [x5]
304
__ stlrb(r16, r3); // stlrb w16, [x3]
305
__ ldarb(r22, r29); // ldarb w22, [x29]
306
307
// LoadStoreExclusiveOp
308
__ ldxp(r8, r2, r19); // ldxp x8, x2, [x19]
309
__ ldaxp(r7, r19, r14); // ldaxp x7, x19, [x14]
310
__ stxp(r8, r27, r28, r5); // stxp w8, x27, x28, [x5]
311
__ stlxp(r5, r8, r14, r6); // stlxp w5, x8, x14, [x6]
312
313
// LoadStoreExclusiveOp
314
__ ldxpw(r25, r4, r22); // ldxp w25, w4, [x22]
315
__ ldaxpw(r13, r14, r15); // ldaxp w13, w14, [x15]
316
__ stxpw(r20, r26, r8, r10); // stxp w20, w26, w8, [x10]
317
__ stlxpw(r23, r18, r18, r18); // stlxp w23, w18, w18, [x18]
318
319
// base_plus_unscaled_offset
320
// LoadStoreOp
321
__ str(r30, Address(r11, 99)); // str x30, [x11, 99]
322
__ strw(r23, Address(r25, -77)); // str w23, [x25, -77]
323
__ strb(r2, Address(r14, 3)); // strb w2, [x14, 3]
324
__ strh(r9, Address(r10, 5)); // strh w9, [x10, 5]
325
__ ldr(r20, Address(r15, 57)); // ldr x20, [x15, 57]
326
__ ldrw(r12, Address(r16, -78)); // ldr w12, [x16, -78]
327
__ ldrb(r22, Address(r26, -3)); // ldrb w22, [x26, -3]
328
__ ldrh(r30, Address(r19, -47)); // ldrh w30, [x19, -47]
329
__ ldrsb(r9, Address(r10, -12)); // ldrsb x9, [x10, -12]
330
__ ldrsh(r28, Address(r17, 14)); // ldrsh x28, [x17, 14]
331
__ ldrshw(r3, Address(r5, 10)); // ldrsh w3, [x5, 10]
332
__ ldrsw(r17, Address(r17, -91)); // ldrsw x17, [x17, -91]
333
__ ldrd(v2, Address(r20, -17)); // ldr d2, [x20, -17]
334
__ ldrs(v22, Address(r7, -10)); // ldr s22, [x7, -10]
335
__ strd(v30, Address(r18, -223)); // str d30, [x18, -223]
336
__ strs(v13, Address(r22, 21)); // str s13, [x22, 21]
337
338
// pre
339
// LoadStoreOp
340
__ str(r9, Address(__ pre(r18, -112))); // str x9, [x18, -112]!
341
__ strw(r29, Address(__ pre(r23, 11))); // str w29, [x23, 11]!
342
__ strb(r18, Address(__ pre(r12, -1))); // strb w18, [x12, -1]!
343
__ strh(r16, Address(__ pre(r20, -23))); // strh w16, [x20, -23]!
344
__ ldr(r3, Address(__ pre(r29, 9))); // ldr x3, [x29, 9]!
345
__ ldrw(r25, Address(__ pre(r3, 19))); // ldr w25, [x3, 19]!
346
__ ldrb(r1, Address(__ pre(r29, -1))); // ldrb w1, [x29, -1]!
347
__ ldrh(r8, Address(__ pre(r29, -57))); // ldrh w8, [x29, -57]!
348
__ ldrsb(r5, Address(__ pre(r14, -13))); // ldrsb x5, [x14, -13]!
349
__ ldrsh(r10, Address(__ pre(r27, 1))); // ldrsh x10, [x27, 1]!
350
__ ldrshw(r11, Address(__ pre(r10, 25))); // ldrsh w11, [x10, 25]!
351
__ ldrsw(r4, Address(__ pre(r22, -92))); // ldrsw x4, [x22, -92]!
352
__ ldrd(v11, Address(__ pre(r23, 8))); // ldr d11, [x23, 8]!
353
__ ldrs(v25, Address(__ pre(r19, 54))); // ldr s25, [x19, 54]!
354
__ strd(v1, Address(__ pre(r7, -174))); // str d1, [x7, -174]!
355
__ strs(v8, Address(__ pre(r25, 54))); // str s8, [x25, 54]!
356
357
// post
358
// LoadStoreOp
359
__ str(r5, Address(__ post(r11, 37))); // str x5, [x11], 37
360
__ strw(r24, Address(__ post(r15, 19))); // str w24, [x15], 19
361
__ strb(r15, Address(__ post(r26, -1))); // strb w15, [x26], -1
362
__ strh(r18, Address(__ post(r18, -6))); // strh w18, [x18], -6
363
__ ldr(r7, Address(__ post(r2, -230))); // ldr x7, [x2], -230
364
__ ldrw(r27, Address(__ post(r11, -27))); // ldr w27, [x11], -27
365
__ ldrb(r18, Address(__ post(r3, -25))); // ldrb w18, [x3], -25
366
__ ldrh(r10, Address(__ post(r24, -32))); // ldrh w10, [x24], -32
367
__ ldrsb(r22, Address(__ post(r10, 4))); // ldrsb x22, [x10], 4
368
__ ldrsh(r17, Address(__ post(r12, 25))); // ldrsh x17, [x12], 25
369
__ ldrshw(r8, Address(__ post(r7, -62))); // ldrsh w8, [x7], -62
370
__ ldrsw(r23, Address(__ post(r22, -51))); // ldrsw x23, [x22], -51
371
__ ldrd(v24, Address(__ post(r25, 48))); // ldr d24, [x25], 48
372
__ ldrs(v21, Address(__ post(r12, -10))); // ldr s21, [x12], -10
373
__ strd(v18, Address(__ post(r13, -222))); // str d18, [x13], -222
374
__ strs(v16, Address(__ post(r1, -41))); // str s16, [x1], -41
375
376
// base_plus_reg
377
// LoadStoreOp
378
__ str(r2, Address(r22, r15, Address::sxtw(0))); // str x2, [x22, w15, sxtw #0]
379
__ strw(r2, Address(r16, r29, Address::lsl(0))); // str w2, [x16, x29, lsl #0]
380
__ strb(r20, Address(r18, r14, Address::uxtw(0))); // strb w20, [x18, w14, uxtw #0]
381
__ strh(r6, Address(r19, r20, Address::sxtx(1))); // strh w6, [x19, x20, sxtx #1]
382
__ ldr(r14, Address(r29, r14, Address::sxtw(0))); // ldr x14, [x29, w14, sxtw #0]
383
__ ldrw(r16, Address(r20, r12, Address::sxtw(2))); // ldr w16, [x20, w12, sxtw #2]
384
__ ldrb(r9, Address(r12, r0, Address::sxtw(0))); // ldrb w9, [x12, w0, sxtw #0]
385
__ ldrh(r12, Address(r17, r3, Address::lsl(1))); // ldrh w12, [x17, x3, lsl #1]
386
__ ldrsb(r2, Address(r17, r3, Address::sxtx(0))); // ldrsb x2, [x17, x3, sxtx #0]
387
__ ldrsh(r7, Address(r1, r17, Address::uxtw(1))); // ldrsh x7, [x1, w17, uxtw #1]
388
__ ldrshw(r25, Address(r15, r18, Address::sxtw(1))); // ldrsh w25, [x15, w18, sxtw #1]
389
__ ldrsw(r23, Address(r21, r12, Address::lsl(0))); // ldrsw x23, [x21, x12, lsl #0]
390
__ ldrd(v5, Address(r13, r8, Address::lsl(3))); // ldr d5, [x13, x8, lsl #3]
391
__ ldrs(v3, Address(r10, r22, Address::lsl(2))); // ldr s3, [x10, x22, lsl #2]
392
__ strd(v14, Address(r2, r27, Address::sxtw(0))); // str d14, [x2, w27, sxtw #0]
393
__ strs(v20, Address(r6, r25, Address::lsl(0))); // str s20, [x6, x25, lsl #0]
394
395
// base_plus_scaled_offset
396
// LoadStoreOp
397
__ str(r30, Address(r7, 16256)); // str x30, [x7, 16256]
398
__ strw(r15, Address(r8, 7588)); // str w15, [x8, 7588]
399
__ strb(r11, Address(r0, 1866)); // strb w11, [x0, 1866]
400
__ strh(r3, Address(r17, 3734)); // strh w3, [x17, 3734]
401
__ ldr(r2, Address(r7, 14224)); // ldr x2, [x7, 14224]
402
__ ldrw(r5, Address(r9, 7396)); // ldr w5, [x9, 7396]
403
__ ldrb(r28, Address(r9, 1721)); // ldrb w28, [x9, 1721]
404
__ ldrh(r2, Address(r20, 3656)); // ldrh w2, [x20, 3656]
405
__ ldrsb(r22, Address(r14, 1887)); // ldrsb x22, [x14, 1887]
406
__ ldrsh(r8, Address(r0, 4080)); // ldrsh x8, [x0, 4080]
407
__ ldrshw(r0, Address(r30, 3916)); // ldrsh w0, [x30, 3916]
408
__ ldrsw(r24, Address(r19, 6828)); // ldrsw x24, [x19, 6828]
409
__ ldrd(v24, Address(r12, 13032)); // ldr d24, [x12, 13032]
410
__ ldrs(v8, Address(r8, 7452)); // ldr s8, [x8, 7452]
411
__ strd(v10, Address(r15, 15992)); // str d10, [x15, 15992]
412
__ strs(v26, Address(r19, 6688)); // str s26, [x19, 6688]
413
414
// pcrel
415
// LoadStoreOp
416
__ ldr(r10, forth); // ldr x10, forth
417
__ ldrw(r3, __ pc()); // ldr w3, .
418
419
// LoadStoreOp
420
__ prfm(Address(r23, 9)); // prfm PLDL1KEEP, [x23, 9]
421
422
// LoadStoreOp
423
__ prfm(back); // prfm PLDL1KEEP, back
424
425
// LoadStoreOp
426
__ prfm(Address(r3, r8, Address::uxtw(0))); // prfm PLDL1KEEP, [x3, w8, uxtw #0]
427
428
// LoadStoreOp
429
__ prfm(Address(r11, 15080)); // prfm PLDL1KEEP, [x11, 15080]
430
431
// AddSubCarryOp
432
__ adcw(r13, r9, r28); // adc w13, w9, w28
433
__ adcsw(r27, r19, r28); // adcs w27, w19, w28
434
__ sbcw(r19, r18, r6); // sbc w19, w18, w6
435
__ sbcsw(r14, r20, r3); // sbcs w14, w20, w3
436
__ adc(r16, r14, r8); // adc x16, x14, x8
437
__ adcs(r0, r29, r8); // adcs x0, x29, x8
438
__ sbc(r8, r24, r20); // sbc x8, x24, x20
439
__ sbcs(r12, r28, r0); // sbcs x12, x28, x0
440
441
// AddSubExtendedOp
442
__ addw(r23, r6, r16, ext::uxtb, 4); // add w23, w6, w16, uxtb #4
443
__ addsw(r25, r25, r23, ext::sxth, 2); // adds w25, w25, w23, sxth #2
444
__ sub(r26, r22, r4, ext::uxtx, 1); // sub x26, x22, x4, uxtx #1
445
__ subsw(r17, r29, r19, ext::sxtx, 3); // subs w17, w29, w19, sxtx #3
446
__ add(r11, r30, r21, ext::uxtb, 3); // add x11, x30, x21, uxtb #3
447
__ adds(r16, r19, r0, ext::sxtb, 2); // adds x16, x19, x0, sxtb #2
448
__ sub(r11, r9, r25, ext::sxtx, 1); // sub x11, x9, x25, sxtx #1
449
__ subs(r17, r20, r12, ext::sxtb, 4); // subs x17, x20, x12, sxtb #4
450
451
// ConditionalCompareOp
452
__ ccmnw(r13, r11, 3u, Assembler::LE); // ccmn w13, w11, #3, LE
453
__ ccmpw(r13, r12, 2u, Assembler::HI); // ccmp w13, w12, #2, HI
454
__ ccmn(r3, r2, 12u, Assembler::NE); // ccmn x3, x2, #12, NE
455
__ ccmp(r7, r21, 3u, Assembler::VS); // ccmp x7, x21, #3, VS
456
457
// ConditionalCompareImmedOp
458
__ ccmnw(r2, 14, 4, Assembler::CC); // ccmn w2, #14, #4, CC
459
__ ccmpw(r17, 17, 6, Assembler::PL); // ccmp w17, #17, #6, PL
460
__ ccmn(r10, 12, 0, Assembler::CS); // ccmn x10, #12, #0, CS
461
__ ccmp(r21, 18, 14, Assembler::GE); // ccmp x21, #18, #14, GE
462
463
// ConditionalSelectOp
464
__ cselw(r21, r13, r12, Assembler::GT); // csel w21, w13, w12, GT
465
__ csincw(r10, r27, r15, Assembler::LS); // csinc w10, w27, w15, LS
466
__ csinvw(r0, r13, r9, Assembler::HI); // csinv w0, w13, w9, HI
467
__ csnegw(r18, r4, r26, Assembler::VS); // csneg w18, w4, w26, VS
468
__ csel(r12, r29, r7, Assembler::LS); // csel x12, x29, x7, LS
469
__ csinc(r6, r7, r20, Assembler::VC); // csinc x6, x7, x20, VC
470
__ csinv(r22, r21, r3, Assembler::LE); // csinv x22, x21, x3, LE
471
__ csneg(r19, r12, r27, Assembler::LS); // csneg x19, x12, x27, LS
472
473
// TwoRegOp
474
__ rbitw(r0, r16); // rbit w0, w16
475
__ rev16w(r17, r23); // rev16 w17, w23
476
__ revw(r17, r14); // rev w17, w14
477
__ clzw(r24, r30); // clz w24, w30
478
__ clsw(r24, r22); // cls w24, w22
479
__ rbit(r3, r17); // rbit x3, x17
480
__ rev16(r12, r13); // rev16 x12, x13
481
__ rev32(r9, r22); // rev32 x9, x22
482
__ rev(r0, r0); // rev x0, x0
483
__ clz(r5, r16); // clz x5, x16
484
__ cls(r25, r22); // cls x25, x22
485
486
// ThreeRegOp
487
__ udivw(r29, r4, r0); // udiv w29, w4, w0
488
__ sdivw(r0, r29, r29); // sdiv w0, w29, w29
489
__ lslvw(r5, r17, r21); // lslv w5, w17, w21
490
__ lsrvw(r9, r9, r18); // lsrv w9, w9, w18
491
__ asrvw(r1, r27, r8); // asrv w1, w27, w8
492
__ rorvw(r18, r20, r13); // rorv w18, w20, w13
493
__ udiv(r8, r25, r12); // udiv x8, x25, x12
494
__ sdiv(r7, r5, r28); // sdiv x7, x5, x28
495
__ lslv(r5, r17, r27); // lslv x5, x17, x27
496
__ lsrv(r23, r26, r20); // lsrv x23, x26, x20
497
__ asrv(r28, r8, r28); // asrv x28, x8, x28
498
__ rorv(r3, r29, r4); // rorv x3, x29, x4
499
500
// FourRegMulOp
501
__ maddw(r17, r14, r26, r21); // madd w17, w14, w26, w21
502
__ msubw(r1, r30, r11, r11); // msub w1, w30, w11, w11
503
__ madd(r1, r17, r6, r28); // madd x1, x17, x6, x28
504
__ msub(r30, r6, r30, r8); // msub x30, x6, x30, x8
505
__ smaddl(r21, r6, r14, r8); // smaddl x21, w6, w14, x8
506
__ smsubl(r10, r10, r24, r19); // smsubl x10, w10, w24, x19
507
__ umaddl(r20, r18, r14, r24); // umaddl x20, w18, w14, x24
508
__ umsubl(r18, r2, r5, r5); // umsubl x18, w2, w5, x5
509
510
// ThreeRegFloatOp
511
__ fmuls(v8, v18, v13); // fmul s8, s18, s13
512
__ fdivs(v2, v14, v28); // fdiv s2, s14, s28
513
__ fadds(v15, v12, v28); // fadd s15, s12, s28
514
__ fsubs(v0, v12, v1); // fsub s0, s12, s1
515
__ fmuls(v15, v29, v4); // fmul s15, s29, s4
516
__ fmuld(v12, v1, v23); // fmul d12, d1, d23
517
__ fdivd(v27, v8, v18); // fdiv d27, d8, d18
518
__ faddd(v23, v20, v11); // fadd d23, d20, d11
519
__ fsubd(v8, v12, v18); // fsub d8, d12, d18
520
__ fmuld(v26, v24, v23); // fmul d26, d24, d23
521
522
// FourRegFloatOp
523
__ fmadds(v21, v23, v13, v25); // fmadd s21, s23, s13, s25
524
__ fmsubs(v22, v10, v1, v14); // fmsub s22, s10, s1, s14
525
__ fnmadds(v14, v20, v2, v30); // fnmadd s14, s20, s2, s30
526
__ fnmadds(v7, v29, v22, v22); // fnmadd s7, s29, s22, s22
527
__ fmaddd(v13, v5, v15, v5); // fmadd d13, d5, d15, d5
528
__ fmsubd(v14, v12, v5, v10); // fmsub d14, d12, d5, d10
529
__ fnmaddd(v10, v19, v0, v1); // fnmadd d10, d19, d0, d1
530
__ fnmaddd(v20, v2, v2, v0); // fnmadd d20, d2, d2, d0
531
532
// TwoRegFloatOp
533
__ fmovs(v25, v9); // fmov s25, s9
534
__ fabss(v20, v4); // fabs s20, s4
535
__ fnegs(v3, v27); // fneg s3, s27
536
__ fsqrts(v1, v2); // fsqrt s1, s2
537
__ fcvts(v30, v0); // fcvt d30, s0
538
__ fmovd(v12, v4); // fmov d12, d4
539
__ fabsd(v1, v27); // fabs d1, d27
540
__ fnegd(v8, v22); // fneg d8, d22
541
__ fsqrtd(v11, v11); // fsqrt d11, d11
542
__ fcvtd(v22, v28); // fcvt s22, d28
543
544
// FloatConvertOp
545
__ fcvtzsw(r28, v22); // fcvtzs w28, s22
546
__ fcvtzs(r20, v27); // fcvtzs x20, s27
547
__ fcvtzdw(r14, v0); // fcvtzs w14, d0
548
__ fcvtzd(r26, v11); // fcvtzs x26, d11
549
__ scvtfws(v28, r22); // scvtf s28, w22
550
__ scvtfs(v16, r10); // scvtf s16, x10
551
__ scvtfwd(v8, r21); // scvtf d8, w21
552
__ scvtfd(v21, r28); // scvtf d21, x28
553
__ fmovs(r24, v24); // fmov w24, s24
554
__ fmovd(r8, v19); // fmov x8, d19
555
__ fmovs(v8, r12); // fmov s8, w12
556
__ fmovd(v6, r7); // fmov d6, x7
557
558
// TwoRegFloatOp
559
__ fcmps(v30, v16); // fcmp s30, s16
560
__ fcmpd(v25, v11); // fcmp d25, d11
561
__ fcmps(v11, 0.0); // fcmp s11, #0.0
562
__ fcmpd(v11, 0.0); // fcmp d11, #0.0
563
564
// LoadStorePairOp
565
__ stpw(r29, r12, Address(r17, 128)); // stp w29, w12, [x17, #128]
566
__ ldpw(r22, r18, Address(r14, -96)); // ldp w22, w18, [x14, #-96]
567
__ ldpsw(r11, r16, Address(r1, 64)); // ldpsw x11, x16, [x1, #64]
568
__ stp(r0, r11, Address(r26, 112)); // stp x0, x11, [x26, #112]
569
__ ldp(r7, r1, Address(r26, 16)); // ldp x7, x1, [x26, #16]
570
571
// LoadStorePairOp
572
__ stpw(r10, r7, Address(__ pre(r24, 0))); // stp w10, w7, [x24, #0]!
573
__ ldpw(r7, r28, Address(__ pre(r24, -256))); // ldp w7, w28, [x24, #-256]!
574
__ ldpsw(r25, r28, Address(__ pre(r21, -240))); // ldpsw x25, x28, [x21, #-240]!
575
__ stp(r20, r18, Address(__ pre(r14, -16))); // stp x20, x18, [x14, #-16]!
576
__ ldp(r8, r10, Address(__ pre(r13, 80))); // ldp x8, x10, [x13, #80]!
577
578
// LoadStorePairOp
579
__ stpw(r26, r24, Address(__ post(r2, -128))); // stp w26, w24, [x2], #-128
580
__ ldpw(r2, r25, Address(__ post(r21, -192))); // ldp w2, w25, [x21], #-192
581
__ ldpsw(r17, r2, Address(__ post(r21, -144))); // ldpsw x17, x2, [x21], #-144
582
__ stp(r12, r10, Address(__ post(r11, 96))); // stp x12, x10, [x11], #96
583
__ ldp(r24, r6, Address(__ post(r17, -32))); // ldp x24, x6, [x17], #-32
584
585
// LoadStorePairOp
586
__ stnpw(r3, r30, Address(r14, -224)); // stnp w3, w30, [x14, #-224]
587
__ ldnpw(r15, r20, Address(r26, -144)); // ldnp w15, w20, [x26, #-144]
588
__ stnp(r22, r25, Address(r12, -128)); // stnp x22, x25, [x12, #-128]
589
__ ldnp(r27, r22, Address(r17, -176)); // ldnp x27, x22, [x17, #-176]
590
591
// FloatImmediateOp
592
__ fmovd(v0, 2.0); // fmov d0, #2.0
593
__ fmovd(v0, 2.125); // fmov d0, #2.125
594
__ fmovd(v0, 4.0); // fmov d0, #4.0
595
__ fmovd(v0, 4.25); // fmov d0, #4.25
596
__ fmovd(v0, 8.0); // fmov d0, #8.0
597
__ fmovd(v0, 8.5); // fmov d0, #8.5
598
__ fmovd(v0, 16.0); // fmov d0, #16.0
599
__ fmovd(v0, 17.0); // fmov d0, #17.0
600
__ fmovd(v0, 0.125); // fmov d0, #0.125
601
__ fmovd(v0, 0.1328125); // fmov d0, #0.1328125
602
__ fmovd(v0, 0.25); // fmov d0, #0.25
603
__ fmovd(v0, 0.265625); // fmov d0, #0.265625
604
__ fmovd(v0, 0.5); // fmov d0, #0.5
605
__ fmovd(v0, 0.53125); // fmov d0, #0.53125
606
__ fmovd(v0, 1.0); // fmov d0, #1.0
607
__ fmovd(v0, 1.0625); // fmov d0, #1.0625
608
__ fmovd(v0, -2.0); // fmov d0, #-2.0
609
__ fmovd(v0, -2.125); // fmov d0, #-2.125
610
__ fmovd(v0, -4.0); // fmov d0, #-4.0
611
__ fmovd(v0, -4.25); // fmov d0, #-4.25
612
__ fmovd(v0, -8.0); // fmov d0, #-8.0
613
__ fmovd(v0, -8.5); // fmov d0, #-8.5
614
__ fmovd(v0, -16.0); // fmov d0, #-16.0
615
__ fmovd(v0, -17.0); // fmov d0, #-17.0
616
__ fmovd(v0, -0.125); // fmov d0, #-0.125
617
__ fmovd(v0, -0.1328125); // fmov d0, #-0.1328125
618
__ fmovd(v0, -0.25); // fmov d0, #-0.25
619
__ fmovd(v0, -0.265625); // fmov d0, #-0.265625
620
__ fmovd(v0, -0.5); // fmov d0, #-0.5
621
__ fmovd(v0, -0.53125); // fmov d0, #-0.53125
622
__ fmovd(v0, -1.0); // fmov d0, #-1.0
623
__ fmovd(v0, -1.0625); // fmov d0, #-1.0625
624
625
__ bind(forth);
626
627
/*
628
aarch64ops.o: file format elf64-littleaarch64
629
630
631
Disassembly of section .text:
632
633
0000000000000000 <back>:
634
0: 8b0772d3 add x19, x22, x7, lsl #28
635
4: cb4a3570 sub x16, x11, x10, lsr #13
636
8: ab9c09bb adds x27, x13, x28, asr #2
637
c: eb9aa794 subs x20, x28, x26, asr #41
638
10: 0b934e68 add w8, w19, w19, asr #19
639
14: 4b0a3924 sub w4, w9, w10, lsl #14
640
18: 2b1e3568 adds w8, w11, w30, lsl #13
641
1c: 6b132720 subs w0, w25, w19, lsl #9
642
20: 8a154c14 and x20, x0, x21, lsl #19
643
24: aa1445d5 orr x21, x14, x20, lsl #17
644
28: ca01cf99 eor x25, x28, x1, lsl #51
645
2c: ea8b3f6a ands x10, x27, x11, asr #15
646
30: 0a8c5cb9 and w25, w5, w12, asr #23
647
34: 2a4a11d2 orr w18, w14, w10, lsr #4
648
38: 4a855aa4 eor w4, w21, w5, asr #22
649
3c: 6a857415 ands w21, w0, w5, asr #29
650
40: 8aa697da bic x26, x30, x6, asr #37
651
44: aa6d7423 orn x3, x1, x13, lsr #29
652
48: ca29bf80 eon x0, x28, x9, lsl #47
653
4c: ea3cb8bd bics x29, x5, x28, lsl #46
654
50: 0a675249 bic w9, w18, w7, lsr #20
655
54: 2ab961ba orn w26, w13, w25, asr #24
656
58: 4a331899 eon w25, w4, w19, lsl #6
657
5c: 6a646345 bics w5, w26, w4, lsr #24
658
60: 11055267 add w7, w19, #0x154
659
64: 31064408 adds w8, w0, #0x191
660
68: 51028e9d sub w29, w20, #0xa3
661
6c: 710bdee8 subs w8, w23, #0x2f7
662
70: 91082d81 add x1, x12, #0x20b
663
74: b106a962 adds x2, x11, #0x1aa
664
78: d10b33ae sub x14, x29, #0x2cc
665
7c: f10918ab subs x11, x5, #0x246
666
80: 121102d7 and w23, w22, #0x8000
667
84: 3204cd44 orr w4, w10, #0xf0f0f0f0
668
88: 5204cf00 eor w0, w24, #0xf0f0f0f0
669
8c: 72099fb3 ands w19, w29, #0x7f807f80
670
90: 92729545 and x5, x10, #0xfffffffffc000
671
94: b20e37cc orr x12, x30, #0xfffc0000fffc0000
672
98: d27c34be eor x30, x5, #0x3fff0
673
9c: f27e4efa ands x26, x23, #0x3ffffc
674
a0: 14000000 b a0 <back+0xa0>
675
a4: 17ffffd7 b 0 <back>
676
a8: 1400017f b 6a4 <forth>
677
ac: 94000000 bl ac <back+0xac>
678
b0: 97ffffd4 bl 0 <back>
679
b4: 9400017c bl 6a4 <forth>
680
b8: 3400000c cbz w12, b8 <back+0xb8>
681
bc: 34fffa2c cbz w12, 0 <back>
682
c0: 34002f2c cbz w12, 6a4 <forth>
683
c4: 35000014 cbnz w20, c4 <back+0xc4>
684
c8: 35fff9d4 cbnz w20, 0 <back>
685
cc: 35002ed4 cbnz w20, 6a4 <forth>
686
d0: b400000c cbz x12, d0 <back+0xd0>
687
d4: b4fff96c cbz x12, 0 <back>
688
d8: b4002e6c cbz x12, 6a4 <forth>
689
dc: b5000018 cbnz x24, dc <back+0xdc>
690
e0: b5fff918 cbnz x24, 0 <back>
691
e4: b5002e18 cbnz x24, 6a4 <forth>
692
e8: 10000006 adr x6, e8 <back+0xe8>
693
ec: 10fff8a6 adr x6, 0 <back>
694
f0: 10002da6 adr x6, 6a4 <forth>
695
f4: 90000015 adrp x21, 0 <back>
696
f8: 36080001 tbz w1, #1, f8 <back+0xf8>
697
fc: 360ff821 tbz w1, #1, 0 <back>
698
100: 36082d21 tbz w1, #1, 6a4 <forth>
699
104: 37480008 tbnz w8, #9, 104 <back+0x104>
700
108: 374ff7c8 tbnz w8, #9, 0 <back>
701
10c: 37482cc8 tbnz w8, #9, 6a4 <forth>
702
110: 128b50ec movn w12, #0x5a87
703
114: 52a9ff8b movz w11, #0x4ffc, lsl #16
704
118: 7281d095 movk w21, #0xe84
705
11c: 92edfebd movn x29, #0x6ff5, lsl #48
706
120: d28361e3 movz x3, #0x1b0f
707
124: f2a4cc96 movk x22, #0x2664, lsl #16
708
128: 9346590c sbfx x12, x8, #6, #17
709
12c: 33194f33 bfi w19, w25, #7, #20
710
130: 531d3d89 ubfiz w9, w12, #3, #16
711
134: 9350433c sbfx x28, x25, #16, #1
712
138: b34464ac bfxil x12, x5, #4, #22
713
13c: d3462140 ubfx x0, x10, #6, #3
714
140: 139a61a4 extr w4, w13, w26, #24
715
144: 93d87fd7 extr x23, x30, x24, #31
716
148: 54000000 b.eq 148 <back+0x148>
717
14c: 54fff5a0 b.eq 0 <back>
718
150: 54002aa0 b.eq 6a4 <forth>
719
154: 54000001 b.ne 154 <back+0x154>
720
158: 54fff541 b.ne 0 <back>
721
15c: 54002a41 b.ne 6a4 <forth>
722
160: 54000002 b.cs 160 <back+0x160>
723
164: 54fff4e2 b.cs 0 <back>
724
168: 540029e2 b.cs 6a4 <forth>
725
16c: 54000002 b.cs 16c <back+0x16c>
726
170: 54fff482 b.cs 0 <back>
727
174: 54002982 b.cs 6a4 <forth>
728
178: 54000003 b.cc 178 <back+0x178>
729
17c: 54fff423 b.cc 0 <back>
730
180: 54002923 b.cc 6a4 <forth>
731
184: 54000003 b.cc 184 <back+0x184>
732
188: 54fff3c3 b.cc 0 <back>
733
18c: 540028c3 b.cc 6a4 <forth>
734
190: 54000004 b.mi 190 <back+0x190>
735
194: 54fff364 b.mi 0 <back>
736
198: 54002864 b.mi 6a4 <forth>
737
19c: 54000005 b.pl 19c <back+0x19c>
738
1a0: 54fff305 b.pl 0 <back>
739
1a4: 54002805 b.pl 6a4 <forth>
740
1a8: 54000006 b.vs 1a8 <back+0x1a8>
741
1ac: 54fff2a6 b.vs 0 <back>
742
1b0: 540027a6 b.vs 6a4 <forth>
743
1b4: 54000007 b.vc 1b4 <back+0x1b4>
744
1b8: 54fff247 b.vc 0 <back>
745
1bc: 54002747 b.vc 6a4 <forth>
746
1c0: 54000008 b.hi 1c0 <back+0x1c0>
747
1c4: 54fff1e8 b.hi 0 <back>
748
1c8: 540026e8 b.hi 6a4 <forth>
749
1cc: 54000009 b.ls 1cc <back+0x1cc>
750
1d0: 54fff189 b.ls 0 <back>
751
1d4: 54002689 b.ls 6a4 <forth>
752
1d8: 5400000a b.ge 1d8 <back+0x1d8>
753
1dc: 54fff12a b.ge 0 <back>
754
1e0: 5400262a b.ge 6a4 <forth>
755
1e4: 5400000b b.lt 1e4 <back+0x1e4>
756
1e8: 54fff0cb b.lt 0 <back>
757
1ec: 540025cb b.lt 6a4 <forth>
758
1f0: 5400000c b.gt 1f0 <back+0x1f0>
759
1f4: 54fff06c b.gt 0 <back>
760
1f8: 5400256c b.gt 6a4 <forth>
761
1fc: 5400000d b.le 1fc <back+0x1fc>
762
200: 54fff00d b.le 0 <back>
763
204: 5400250d b.le 6a4 <forth>
764
208: 5400000e b.al 208 <back+0x208>
765
20c: 54ffefae b.al 0 <back>
766
210: 540024ae b.al 6a4 <forth>
767
214: 5400000f b.nv 214 <back+0x214>
768
218: 54ffef4f b.nv 0 <back>
769
21c: 5400244f b.nv 6a4 <forth>
770
220: d4063721 svc #0x31b9
771
224: d4035082 hvc #0x1a84
772
228: d400bfe3 smc #0x5ff
773
22c: d4282fc0 brk #0x417e
774
230: d444c320 hlt #0x2619
775
234: d503201f nop
776
238: d69f03e0 eret
777
23c: d6bf03e0 drps
778
240: d5033fdf isb
779
244: d5033f9f dsb sy
780
248: d5033abf dmb ishst
781
24c: d61f0040 br x2
782
250: d63f00a0 blr x5
783
254: c8147c55 stxr w20, x21, [x2]
784
258: c805fcfd stlxr w5, x29, [x7]
785
25c: c85f7e05 ldxr x5, [x16]
786
260: c85fffbb ldaxr x27, [x29]
787
264: c89fffa0 stlr x0, [x29]
788
268: c8dfff95 ldar x21, [x28]
789
26c: 88157cf8 stxr w21, w24, [x7]
790
270: 8815ff9a stlxr w21, w26, [x28]
791
274: 885f7cd5 ldxr w21, [x6]
792
278: 885fffcf ldaxr w15, [x30]
793
27c: 889ffc73 stlr w19, [x3]
794
280: 88dffc56 ldar w22, [x2]
795
284: 48127c0f stxrh w18, w15, [x0]
796
288: 480bff85 stlxrh w11, w5, [x28]
797
28c: 485f7cdd ldxrh w29, [x6]
798
290: 485ffcf2 ldaxrh w18, [x7]
799
294: 489fff99 stlrh w25, [x28]
800
298: 48dffe62 ldarh w2, [x19]
801
29c: 080a7c3e stxrb w10, w30, [x1]
802
2a0: 0814fed5 stlxrb w20, w21, [x22]
803
2a4: 085f7c59 ldxrb w25, [x2]
804
2a8: 085ffcb8 ldaxrb w24, [x5]
805
2ac: 089ffc70 stlrb w16, [x3]
806
2b0: 08dfffb6 ldarb w22, [x29]
807
2b4: c87f0a68 ldxp x8, x2, [x19]
808
2b8: c87fcdc7 ldaxp x7, x19, [x14]
809
2bc: c82870bb stxp w8, x27, x28, [x5]
810
2c0: c825b8c8 stlxp w5, x8, x14, [x6]
811
2c4: 887f12d9 ldxp w25, w4, [x22]
812
2c8: 887fb9ed ldaxp w13, w14, [x15]
813
2cc: 8834215a stxp w20, w26, w8, [x10]
814
2d0: 8837ca52 stlxp w23, w18, w18, [x18]
815
2d4: f806317e str x30, [x11,#99]
816
2d8: b81b3337 str w23, [x25,#-77]
817
2dc: 39000dc2 strb w2, [x14,#3]
818
2e0: 78005149 strh w9, [x10,#5]
819
2e4: f84391f4 ldr x20, [x15,#57]
820
2e8: b85b220c ldr w12, [x16,#-78]
821
2ec: 385fd356 ldrb w22, [x26,#-3]
822
2f0: 785d127e ldrh w30, [x19,#-47]
823
2f4: 389f4149 ldrsb x9, [x10,#-12]
824
2f8: 79801e3c ldrsh x28, [x17,#14]
825
2fc: 79c014a3 ldrsh w3, [x5,#10]
826
300: b89a5231 ldrsw x17, [x17,#-91]
827
304: fc5ef282 ldr d2, [x20,#-17]
828
308: bc5f60f6 ldr s22, [x7,#-10]
829
30c: fc12125e str d30, [x18,#-223]
830
310: bc0152cd str s13, [x22,#21]
831
314: f8190e49 str x9, [x18,#-112]!
832
318: b800befd str w29, [x23,#11]!
833
31c: 381ffd92 strb w18, [x12,#-1]!
834
320: 781e9e90 strh w16, [x20,#-23]!
835
324: f8409fa3 ldr x3, [x29,#9]!
836
328: b8413c79 ldr w25, [x3,#19]!
837
32c: 385fffa1 ldrb w1, [x29,#-1]!
838
330: 785c7fa8 ldrh w8, [x29,#-57]!
839
334: 389f3dc5 ldrsb x5, [x14,#-13]!
840
338: 78801f6a ldrsh x10, [x27,#1]!
841
33c: 78c19d4b ldrsh w11, [x10,#25]!
842
340: b89a4ec4 ldrsw x4, [x22,#-92]!
843
344: fc408eeb ldr d11, [x23,#8]!
844
348: bc436e79 ldr s25, [x19,#54]!
845
34c: fc152ce1 str d1, [x7,#-174]!
846
350: bc036f28 str s8, [x25,#54]!
847
354: f8025565 str x5, [x11],#37
848
358: b80135f8 str w24, [x15],#19
849
35c: 381ff74f strb w15, [x26],#-1
850
360: 781fa652 strh w18, [x18],#-6
851
364: f851a447 ldr x7, [x2],#-230
852
368: b85e557b ldr w27, [x11],#-27
853
36c: 385e7472 ldrb w18, [x3],#-25
854
370: 785e070a ldrh w10, [x24],#-32
855
374: 38804556 ldrsb x22, [x10],#4
856
378: 78819591 ldrsh x17, [x12],#25
857
37c: 78dc24e8 ldrsh w8, [x7],#-62
858
380: b89cd6d7 ldrsw x23, [x22],#-51
859
384: fc430738 ldr d24, [x25],#48
860
388: bc5f6595 ldr s21, [x12],#-10
861
38c: fc1225b2 str d18, [x13],#-222
862
390: bc1d7430 str s16, [x1],#-41
863
394: f82fcac2 str x2, [x22,w15,sxtw]
864
398: b83d6a02 str w2, [x16,x29]
865
39c: 382e5a54 strb w20, [x18,w14,uxtw #0]
866
3a0: 7834fa66 strh w6, [x19,x20,sxtx #1]
867
3a4: f86ecbae ldr x14, [x29,w14,sxtw]
868
3a8: b86cda90 ldr w16, [x20,w12,sxtw #2]
869
3ac: 3860d989 ldrb w9, [x12,w0,sxtw #0]
870
3b0: 78637a2c ldrh w12, [x17,x3,lsl #1]
871
3b4: 38a3fa22 ldrsb x2, [x17,x3,sxtx #0]
872
3b8: 78b15827 ldrsh x7, [x1,w17,uxtw #1]
873
3bc: 78f2d9f9 ldrsh w25, [x15,w18,sxtw #1]
874
3c0: b8ac6ab7 ldrsw x23, [x21,x12]
875
3c4: fc6879a5 ldr d5, [x13,x8,lsl #3]
876
3c8: bc767943 ldr s3, [x10,x22,lsl #2]
877
3cc: fc3bc84e str d14, [x2,w27,sxtw]
878
3d0: bc3968d4 str s20, [x6,x25]
879
3d4: f91fc0fe str x30, [x7,#16256]
880
3d8: b91da50f str w15, [x8,#7588]
881
3dc: 391d280b strb w11, [x0,#1866]
882
3e0: 791d2e23 strh w3, [x17,#3734]
883
3e4: f95bc8e2 ldr x2, [x7,#14224]
884
3e8: b95ce525 ldr w5, [x9,#7396]
885
3ec: 395ae53c ldrb w28, [x9,#1721]
886
3f0: 795c9282 ldrh w2, [x20,#3656]
887
3f4: 399d7dd6 ldrsb x22, [x14,#1887]
888
3f8: 799fe008 ldrsh x8, [x0,#4080]
889
3fc: 79de9bc0 ldrsh w0, [x30,#3916]
890
400: b99aae78 ldrsw x24, [x19,#6828]
891
404: fd597598 ldr d24, [x12,#13032]
892
408: bd5d1d08 ldr s8, [x8,#7452]
893
40c: fd1f3dea str d10, [x15,#15992]
894
410: bd1a227a str s26, [x19,#6688]
895
414: 5800148a ldr x10, 6a4 <forth>
896
418: 18000003 ldr w3, 418 <back+0x418>
897
41c: f88092e0 prfm pldl1keep, [x23,#9]
898
420: d8ffdf00 prfm pldl1keep, 0 <back>
899
424: f8a84860 prfm pldl1keep, [x3,w8,uxtw]
900
428: f99d7560 prfm pldl1keep, [x11,#15080]
901
42c: 1a1c012d adc w13, w9, w28
902
430: 3a1c027b adcs w27, w19, w28
903
434: 5a060253 sbc w19, w18, w6
904
438: 7a03028e sbcs w14, w20, w3
905
43c: 9a0801d0 adc x16, x14, x8
906
440: ba0803a0 adcs x0, x29, x8
907
444: da140308 sbc x8, x24, x20
908
448: fa00038c sbcs x12, x28, x0
909
44c: 0b3010d7 add w23, w6, w16, uxtb #4
910
450: 2b37ab39 adds w25, w25, w23, sxth #2
911
454: cb2466da sub x26, x22, x4, uxtx #1
912
458: 6b33efb1 subs w17, w29, w19, sxtx #3
913
45c: 8b350fcb add x11, x30, w21, uxtb #3
914
460: ab208a70 adds x16, x19, w0, sxtb #2
915
464: cb39e52b sub x11, x9, x25, sxtx #1
916
468: eb2c9291 subs x17, x20, w12, sxtb #4
917
46c: 3a4bd1a3 ccmn w13, w11, #0x3, le
918
470: 7a4c81a2 ccmp w13, w12, #0x2, hi
919
474: ba42106c ccmn x3, x2, #0xc, ne
920
478: fa5560e3 ccmp x7, x21, #0x3, vs
921
47c: 3a4e3844 ccmn w2, #0xe, #0x4, cc
922
480: 7a515a26 ccmp w17, #0x11, #0x6, pl
923
484: ba4c2940 ccmn x10, #0xc, #0x0, cs
924
488: fa52aaae ccmp x21, #0x12, #0xe, ge
925
48c: 1a8cc1b5 csel w21, w13, w12, gt
926
490: 1a8f976a csinc w10, w27, w15, ls
927
494: 5a8981a0 csinv w0, w13, w9, hi
928
498: 5a9a6492 csneg w18, w4, w26, vs
929
49c: 9a8793ac csel x12, x29, x7, ls
930
4a0: 9a9474e6 csinc x6, x7, x20, vc
931
4a4: da83d2b6 csinv x22, x21, x3, le
932
4a8: da9b9593 csneg x19, x12, x27, ls
933
4ac: 5ac00200 rbit w0, w16
934
4b0: 5ac006f1 rev16 w17, w23
935
4b4: 5ac009d1 rev w17, w14
936
4b8: 5ac013d8 clz w24, w30
937
4bc: 5ac016d8 cls w24, w22
938
4c0: dac00223 rbit x3, x17
939
4c4: dac005ac rev16 x12, x13
940
4c8: dac00ac9 rev32 x9, x22
941
4cc: dac00c00 rev x0, x0
942
4d0: dac01205 clz x5, x16
943
4d4: dac016d9 cls x25, x22
944
4d8: 1ac0089d udiv w29, w4, w0
945
4dc: 1add0fa0 sdiv w0, w29, w29
946
4e0: 1ad52225 lsl w5, w17, w21
947
4e4: 1ad22529 lsr w9, w9, w18
948
4e8: 1ac82b61 asr w1, w27, w8
949
4ec: 1acd2e92 ror w18, w20, w13
950
4f0: 9acc0b28 udiv x8, x25, x12
951
4f4: 9adc0ca7 sdiv x7, x5, x28
952
4f8: 9adb2225 lsl x5, x17, x27
953
4fc: 9ad42757 lsr x23, x26, x20
954
500: 9adc291c asr x28, x8, x28
955
504: 9ac42fa3 ror x3, x29, x4
956
508: 1b1a55d1 madd w17, w14, w26, w21
957
50c: 1b0bafc1 msub w1, w30, w11, w11
958
510: 9b067221 madd x1, x17, x6, x28
959
514: 9b1ea0de msub x30, x6, x30, x8
960
518: 9b2e20d5 smaddl x21, w6, w14, x8
961
51c: 9b38cd4a smsubl x10, w10, w24, x19
962
520: 9bae6254 umaddl x20, w18, w14, x24
963
524: 9ba59452 umsubl x18, w2, w5, x5
964
528: 1e2d0a48 fmul s8, s18, s13
965
52c: 1e3c19c2 fdiv s2, s14, s28
966
530: 1e3c298f fadd s15, s12, s28
967
534: 1e213980 fsub s0, s12, s1
968
538: 1e240baf fmul s15, s29, s4
969
53c: 1e77082c fmul d12, d1, d23
970
540: 1e72191b fdiv d27, d8, d18
971
544: 1e6b2a97 fadd d23, d20, d11
972
548: 1e723988 fsub d8, d12, d18
973
54c: 1e770b1a fmul d26, d24, d23
974
550: 1f0d66f5 fmadd s21, s23, s13, s25
975
554: 1f01b956 fmsub s22, s10, s1, s14
976
558: 1f227a8e fnmadd s14, s20, s2, s30
977
55c: 1f365ba7 fnmadd s7, s29, s22, s22
978
560: 1f4f14ad fmadd d13, d5, d15, d5
979
564: 1f45a98e fmsub d14, d12, d5, d10
980
568: 1f60066a fnmadd d10, d19, d0, d1
981
56c: 1f620054 fnmadd d20, d2, d2, d0
982
570: 1e204139 fmov s25, s9
983
574: 1e20c094 fabs s20, s4
984
578: 1e214363 fneg s3, s27
985
57c: 1e21c041 fsqrt s1, s2
986
580: 1e22c01e fcvt d30, s0
987
584: 1e60408c fmov d12, d4
988
588: 1e60c361 fabs d1, d27
989
58c: 1e6142c8 fneg d8, d22
990
590: 1e61c16b fsqrt d11, d11
991
594: 1e624396 fcvt s22, d28
992
598: 1e3802dc fcvtzs w28, s22
993
59c: 9e380374 fcvtzs x20, s27
994
5a0: 1e78000e fcvtzs w14, d0
995
5a4: 9e78017a fcvtzs x26, d11
996
5a8: 1e2202dc scvtf s28, w22
997
5ac: 9e220150 scvtf s16, x10
998
5b0: 1e6202a8 scvtf d8, w21
999
5b4: 9e620395 scvtf d21, x28
1000
5b8: 1e260318 fmov w24, s24
1001
5bc: 9e660268 fmov x8, d19
1002
5c0: 1e270188 fmov s8, w12
1003
5c4: 9e6700e6 fmov d6, x7
1004
5c8: 1e3023c0 fcmp s30, s16
1005
5cc: 1e6b2320 fcmp d25, d11
1006
5d0: 1e202168 fcmp s11, #0.0
1007
5d4: 1e602168 fcmp d11, #0.0
1008
5d8: 2910323d stp w29, w12, [x17,#128]
1009
5dc: 297449d6 ldp w22, w18, [x14,#-96]
1010
5e0: 6948402b ldpsw x11, x16, [x1,#64]
1011
5e4: a9072f40 stp x0, x11, [x26,#112]
1012
5e8: a9410747 ldp x7, x1, [x26,#16]
1013
5ec: 29801f0a stp w10, w7, [x24,#0]!
1014
5f0: 29e07307 ldp w7, w28, [x24,#-256]!
1015
5f4: 69e272b9 ldpsw x25, x28, [x21,#-240]!
1016
5f8: a9bf49d4 stp x20, x18, [x14,#-16]!
1017
5fc: a9c529a8 ldp x8, x10, [x13,#80]!
1018
600: 28b0605a stp w26, w24, [x2],#-128
1019
604: 28e866a2 ldp w2, w25, [x21],#-192
1020
608: 68ee0ab1 ldpsw x17, x2, [x21],#-144
1021
60c: a886296c stp x12, x10, [x11],#96
1022
610: a8fe1a38 ldp x24, x6, [x17],#-32
1023
614: 282479c3 stnp w3, w30, [x14,#-224]
1024
618: 286e534f ldnp w15, w20, [x26,#-144]
1025
61c: a8386596 stnp x22, x25, [x12,#-128]
1026
620: a8755a3b ldnp x27, x22, [x17,#-176]
1027
624: 1e601000 fmov d0, #2.000000000000000000e+00
1028
628: 1e603000 fmov d0, #2.125000000000000000e+00
1029
62c: 1e621000 fmov d0, #4.000000000000000000e+00
1030
630: 1e623000 fmov d0, #4.250000000000000000e+00
1031
634: 1e641000 fmov d0, #8.000000000000000000e+00
1032
638: 1e643000 fmov d0, #8.500000000000000000e+00
1033
63c: 1e661000 fmov d0, #1.600000000000000000e+01
1034
640: 1e663000 fmov d0, #1.700000000000000000e+01
1035
644: 1e681000 fmov d0, #1.250000000000000000e-01
1036
648: 1e683000 fmov d0, #1.328125000000000000e-01
1037
64c: 1e6a1000 fmov d0, #2.500000000000000000e-01
1038
650: 1e6a3000 fmov d0, #2.656250000000000000e-01
1039
654: 1e6c1000 fmov d0, #5.000000000000000000e-01
1040
658: 1e6c3000 fmov d0, #5.312500000000000000e-01
1041
65c: 1e6e1000 fmov d0, #1.000000000000000000e+00
1042
660: 1e6e3000 fmov d0, #1.062500000000000000e+00
1043
664: 1e701000 fmov d0, #-2.000000000000000000e+00
1044
668: 1e703000 fmov d0, #-2.125000000000000000e+00
1045
66c: 1e721000 fmov d0, #-4.000000000000000000e+00
1046
670: 1e723000 fmov d0, #-4.250000000000000000e+00
1047
674: 1e741000 fmov d0, #-8.000000000000000000e+00
1048
678: 1e743000 fmov d0, #-8.500000000000000000e+00
1049
67c: 1e761000 fmov d0, #-1.600000000000000000e+01
1050
680: 1e763000 fmov d0, #-1.700000000000000000e+01
1051
684: 1e781000 fmov d0, #-1.250000000000000000e-01
1052
688: 1e783000 fmov d0, #-1.328125000000000000e-01
1053
68c: 1e7a1000 fmov d0, #-2.500000000000000000e-01
1054
690: 1e7a3000 fmov d0, #-2.656250000000000000e-01
1055
694: 1e7c1000 fmov d0, #-5.000000000000000000e-01
1056
698: 1e7c3000 fmov d0, #-5.312500000000000000e-01
1057
69c: 1e7e1000 fmov d0, #-1.000000000000000000e+00
1058
6a0: 1e7e3000 fmov d0, #-1.062500000000000000e+00
1059
*/
1060
1061
static const unsigned int insns[] =
1062
{
1063
0x8b0772d3, 0xcb4a3570, 0xab9c09bb, 0xeb9aa794,
1064
0x0b934e68, 0x4b0a3924, 0x2b1e3568, 0x6b132720,
1065
0x8a154c14, 0xaa1445d5, 0xca01cf99, 0xea8b3f6a,
1066
0x0a8c5cb9, 0x2a4a11d2, 0x4a855aa4, 0x6a857415,
1067
0x8aa697da, 0xaa6d7423, 0xca29bf80, 0xea3cb8bd,
1068
0x0a675249, 0x2ab961ba, 0x4a331899, 0x6a646345,
1069
0x11055267, 0x31064408, 0x51028e9d, 0x710bdee8,
1070
0x91082d81, 0xb106a962, 0xd10b33ae, 0xf10918ab,
1071
0x121102d7, 0x3204cd44, 0x5204cf00, 0x72099fb3,
1072
0x92729545, 0xb20e37cc, 0xd27c34be, 0xf27e4efa,
1073
0x14000000, 0x17ffffd7, 0x1400017f, 0x94000000,
1074
0x97ffffd4, 0x9400017c, 0x3400000c, 0x34fffa2c,
1075
0x34002f2c, 0x35000014, 0x35fff9d4, 0x35002ed4,
1076
0xb400000c, 0xb4fff96c, 0xb4002e6c, 0xb5000018,
1077
0xb5fff918, 0xb5002e18, 0x10000006, 0x10fff8a6,
1078
0x10002da6, 0x90000015, 0x36080001, 0x360ff821,
1079
0x36082d21, 0x37480008, 0x374ff7c8, 0x37482cc8,
1080
0x128b50ec, 0x52a9ff8b, 0x7281d095, 0x92edfebd,
1081
0xd28361e3, 0xf2a4cc96, 0x9346590c, 0x33194f33,
1082
0x531d3d89, 0x9350433c, 0xb34464ac, 0xd3462140,
1083
0x139a61a4, 0x93d87fd7, 0x54000000, 0x54fff5a0,
1084
0x54002aa0, 0x54000001, 0x54fff541, 0x54002a41,
1085
0x54000002, 0x54fff4e2, 0x540029e2, 0x54000002,
1086
0x54fff482, 0x54002982, 0x54000003, 0x54fff423,
1087
0x54002923, 0x54000003, 0x54fff3c3, 0x540028c3,
1088
0x54000004, 0x54fff364, 0x54002864, 0x54000005,
1089
0x54fff305, 0x54002805, 0x54000006, 0x54fff2a6,
1090
0x540027a6, 0x54000007, 0x54fff247, 0x54002747,
1091
0x54000008, 0x54fff1e8, 0x540026e8, 0x54000009,
1092
0x54fff189, 0x54002689, 0x5400000a, 0x54fff12a,
1093
0x5400262a, 0x5400000b, 0x54fff0cb, 0x540025cb,
1094
0x5400000c, 0x54fff06c, 0x5400256c, 0x5400000d,
1095
0x54fff00d, 0x5400250d, 0x5400000e, 0x54ffefae,
1096
0x540024ae, 0x5400000f, 0x54ffef4f, 0x5400244f,
1097
0xd4063721, 0xd4035082, 0xd400bfe3, 0xd4282fc0,
1098
0xd444c320, 0xd503201f, 0xd69f03e0, 0xd6bf03e0,
1099
0xd5033fdf, 0xd5033f9f, 0xd5033abf, 0xd61f0040,
1100
0xd63f00a0, 0xc8147c55, 0xc805fcfd, 0xc85f7e05,
1101
0xc85fffbb, 0xc89fffa0, 0xc8dfff95, 0x88157cf8,
1102
0x8815ff9a, 0x885f7cd5, 0x885fffcf, 0x889ffc73,
1103
0x88dffc56, 0x48127c0f, 0x480bff85, 0x485f7cdd,
1104
0x485ffcf2, 0x489fff99, 0x48dffe62, 0x080a7c3e,
1105
0x0814fed5, 0x085f7c59, 0x085ffcb8, 0x089ffc70,
1106
0x08dfffb6, 0xc87f0a68, 0xc87fcdc7, 0xc82870bb,
1107
0xc825b8c8, 0x887f12d9, 0x887fb9ed, 0x8834215a,
1108
0x8837ca52, 0xf806317e, 0xb81b3337, 0x39000dc2,
1109
0x78005149, 0xf84391f4, 0xb85b220c, 0x385fd356,
1110
0x785d127e, 0x389f4149, 0x79801e3c, 0x79c014a3,
1111
0xb89a5231, 0xfc5ef282, 0xbc5f60f6, 0xfc12125e,
1112
0xbc0152cd, 0xf8190e49, 0xb800befd, 0x381ffd92,
1113
0x781e9e90, 0xf8409fa3, 0xb8413c79, 0x385fffa1,
1114
0x785c7fa8, 0x389f3dc5, 0x78801f6a, 0x78c19d4b,
1115
0xb89a4ec4, 0xfc408eeb, 0xbc436e79, 0xfc152ce1,
1116
0xbc036f28, 0xf8025565, 0xb80135f8, 0x381ff74f,
1117
0x781fa652, 0xf851a447, 0xb85e557b, 0x385e7472,
1118
0x785e070a, 0x38804556, 0x78819591, 0x78dc24e8,
1119
0xb89cd6d7, 0xfc430738, 0xbc5f6595, 0xfc1225b2,
1120
0xbc1d7430, 0xf82fcac2, 0xb83d6a02, 0x382e5a54,
1121
0x7834fa66, 0xf86ecbae, 0xb86cda90, 0x3860d989,
1122
0x78637a2c, 0x38a3fa22, 0x78b15827, 0x78f2d9f9,
1123
0xb8ac6ab7, 0xfc6879a5, 0xbc767943, 0xfc3bc84e,
1124
0xbc3968d4, 0xf91fc0fe, 0xb91da50f, 0x391d280b,
1125
0x791d2e23, 0xf95bc8e2, 0xb95ce525, 0x395ae53c,
1126
0x795c9282, 0x399d7dd6, 0x799fe008, 0x79de9bc0,
1127
0xb99aae78, 0xfd597598, 0xbd5d1d08, 0xfd1f3dea,
1128
0xbd1a227a, 0x5800148a, 0x18000003, 0xf88092e0,
1129
0xd8ffdf00, 0xf8a84860, 0xf99d7560, 0x1a1c012d,
1130
0x3a1c027b, 0x5a060253, 0x7a03028e, 0x9a0801d0,
1131
0xba0803a0, 0xda140308, 0xfa00038c, 0x0b3010d7,
1132
0x2b37ab39, 0xcb2466da, 0x6b33efb1, 0x8b350fcb,
1133
0xab208a70, 0xcb39e52b, 0xeb2c9291, 0x3a4bd1a3,
1134
0x7a4c81a2, 0xba42106c, 0xfa5560e3, 0x3a4e3844,
1135
0x7a515a26, 0xba4c2940, 0xfa52aaae, 0x1a8cc1b5,
1136
0x1a8f976a, 0x5a8981a0, 0x5a9a6492, 0x9a8793ac,
1137
0x9a9474e6, 0xda83d2b6, 0xda9b9593, 0x5ac00200,
1138
0x5ac006f1, 0x5ac009d1, 0x5ac013d8, 0x5ac016d8,
1139
0xdac00223, 0xdac005ac, 0xdac00ac9, 0xdac00c00,
1140
0xdac01205, 0xdac016d9, 0x1ac0089d, 0x1add0fa0,
1141
0x1ad52225, 0x1ad22529, 0x1ac82b61, 0x1acd2e92,
1142
0x9acc0b28, 0x9adc0ca7, 0x9adb2225, 0x9ad42757,
1143
0x9adc291c, 0x9ac42fa3, 0x1b1a55d1, 0x1b0bafc1,
1144
0x9b067221, 0x9b1ea0de, 0x9b2e20d5, 0x9b38cd4a,
1145
0x9bae6254, 0x9ba59452, 0x1e2d0a48, 0x1e3c19c2,
1146
0x1e3c298f, 0x1e213980, 0x1e240baf, 0x1e77082c,
1147
0x1e72191b, 0x1e6b2a97, 0x1e723988, 0x1e770b1a,
1148
0x1f0d66f5, 0x1f01b956, 0x1f227a8e, 0x1f365ba7,
1149
0x1f4f14ad, 0x1f45a98e, 0x1f60066a, 0x1f620054,
1150
0x1e204139, 0x1e20c094, 0x1e214363, 0x1e21c041,
1151
0x1e22c01e, 0x1e60408c, 0x1e60c361, 0x1e6142c8,
1152
0x1e61c16b, 0x1e624396, 0x1e3802dc, 0x9e380374,
1153
0x1e78000e, 0x9e78017a, 0x1e2202dc, 0x9e220150,
1154
0x1e6202a8, 0x9e620395, 0x1e260318, 0x9e660268,
1155
0x1e270188, 0x9e6700e6, 0x1e3023c0, 0x1e6b2320,
1156
0x1e202168, 0x1e602168, 0x2910323d, 0x297449d6,
1157
0x6948402b, 0xa9072f40, 0xa9410747, 0x29801f0a,
1158
0x29e07307, 0x69e272b9, 0xa9bf49d4, 0xa9c529a8,
1159
0x28b0605a, 0x28e866a2, 0x68ee0ab1, 0xa886296c,
1160
0xa8fe1a38, 0x282479c3, 0x286e534f, 0xa8386596,
1161
0xa8755a3b, 0x1e601000, 0x1e603000, 0x1e621000,
1162
0x1e623000, 0x1e641000, 0x1e643000, 0x1e661000,
1163
0x1e663000, 0x1e681000, 0x1e683000, 0x1e6a1000,
1164
0x1e6a3000, 0x1e6c1000, 0x1e6c3000, 0x1e6e1000,
1165
0x1e6e3000, 0x1e701000, 0x1e703000, 0x1e721000,
1166
0x1e723000, 0x1e741000, 0x1e743000, 0x1e761000,
1167
0x1e763000, 0x1e781000, 0x1e783000, 0x1e7a1000,
1168
0x1e7a3000, 0x1e7c1000, 0x1e7c3000, 0x1e7e1000,
1169
0x1e7e3000,
1170
};
1171
// END Generated code -- do not edit
1172
1173
{
1174
bool ok = true;
1175
unsigned int *insns1 = (unsigned int *)entry;
1176
for (unsigned int i = 0; i < sizeof insns / sizeof insns[0]; i++) {
1177
if (insns[i] != insns1[i]) {
1178
ok = false;
1179
printf("Ours:\n");
1180
Disassembler::decode((address)&insns1[i], (address)&insns1[i+1]);
1181
printf("Theirs:\n");
1182
Disassembler::decode((address)&insns[i], (address)&insns[i+1]);
1183
printf("\n");
1184
}
1185
}
1186
assert(ok, "Assembler smoke test failed");
1187
}
1188
1189
#ifndef PRODUCT
1190
1191
address PC = __ pc();
1192
__ ld1(v0, __ T16B, Address(r16)); // No offset
1193
__ ld1(v0, __ T16B, __ post(r16, 0)); // Post-index
1194
__ ld1(v0, __ T16B, Address(r16, r17)); //
1195
1196
1197
#endif // PRODUCT
1198
}
1199
1200
#endif // ASSERT
1201
1202
#undef __
1203
1204
void Assembler::emit_data64(jlong data,
1205
relocInfo::relocType rtype,
1206
int format) {
1207
if (rtype == relocInfo::none) {
1208
emit_int64(data);
1209
} else {
1210
emit_data64(data, Relocation::spec_simple(rtype), format);
1211
}
1212
}
1213
1214
void Assembler::emit_data64(jlong data,
1215
RelocationHolder const& rspec,
1216
int format) {
1217
1218
assert(inst_mark() != NULL, "must be inside InstructionMark");
1219
// Do not use AbstractAssembler::relocate, which is not intended for
1220
// embedded words. Instead, relocate to the enclosing instruction.
1221
code_section()->relocate(inst_mark(), rspec, format);
1222
emit_int64(data);
1223
}
1224
1225
extern "C" {
1226
void das(uint64_t start, int len) {
1227
ResourceMark rm;
1228
len <<= 2;
1229
if (len < 0)
1230
Disassembler::decode((address)start + len, (address)start);
1231
else
1232
Disassembler::decode((address)start, (address)start + len);
1233
}
1234
1235
JNIEXPORT void das1(unsigned long insn) {
1236
das(insn, 1);
1237
}
1238
}
1239
1240
#define gas_assert(ARG1) assert(ARG1, #ARG1)
1241
1242
#define __ as->
1243
1244
void Address::lea(MacroAssembler *as, Register r) const {
1245
Relocation* reloc = _rspec.reloc();
1246
relocInfo::relocType rtype = (relocInfo::relocType) reloc->type();
1247
1248
switch(_mode) {
1249
case base_plus_offset: {
1250
if (_offset == 0 && _base == r) // it's a nop
1251
break;
1252
if (_offset > 0)
1253
__ add(r, _base, _offset);
1254
else
1255
__ sub(r, _base, -_offset);
1256
break;
1257
}
1258
case base_plus_offset_reg: {
1259
__ add(r, _base, _index, _ext.op(), MAX(_ext.shift(), 0));
1260
break;
1261
}
1262
case literal: {
1263
if (rtype == relocInfo::none)
1264
__ mov(r, target());
1265
else
1266
__ movptr(r, (uint64_t)target());
1267
break;
1268
}
1269
case post: {
1270
__ mov(r, _base);
1271
break;
1272
}
1273
default:
1274
ShouldNotReachHere();
1275
}
1276
}
1277
1278
void Assembler::adrp(Register reg1, const Address &dest, unsigned long &byte_offset) {
1279
ShouldNotReachHere();
1280
}
1281
1282
#undef __
1283
1284
#define starti Instruction_aarch64 do_not_use(this); set_current(&do_not_use)
1285
1286
void Assembler::adr(Register Rd, address adr) {
1287
long offset = adr - pc();
1288
int offset_lo = offset & 3;
1289
offset >>= 2;
1290
starti;
1291
f(0, 31), f(offset_lo, 30, 29), f(0b10000, 28, 24), sf(offset, 23, 5);
1292
rf(Rd, 0);
1293
}
1294
1295
void Assembler::_adrp(Register Rd, address adr) {
1296
uint64_t pc_page = (uint64_t)pc() >> 12;
1297
uint64_t adr_page = (uint64_t)adr >> 12;
1298
long offset = adr_page - pc_page;
1299
int offset_lo = offset & 3;
1300
offset >>= 2;
1301
starti;
1302
f(1, 31), f(offset_lo, 30, 29), f(0b10000, 28, 24), sf(offset, 23, 5);
1303
rf(Rd, 0);
1304
}
1305
1306
#undef starti
1307
1308
Address::Address(address target, relocInfo::relocType rtype) : _mode(literal){
1309
_is_lval = false;
1310
_target = target;
1311
switch (rtype) {
1312
case relocInfo::oop_type:
1313
case relocInfo::metadata_type:
1314
// Oops are a special case. Normally they would be their own section
1315
// but in cases like icBuffer they are literals in the code stream that
1316
// we don't have a section for. We use none so that we get a literal address
1317
// which is always patchable.
1318
break;
1319
case relocInfo::external_word_type:
1320
_rspec = external_word_Relocation::spec(target);
1321
break;
1322
case relocInfo::internal_word_type:
1323
_rspec = internal_word_Relocation::spec(target);
1324
break;
1325
case relocInfo::opt_virtual_call_type:
1326
_rspec = opt_virtual_call_Relocation::spec();
1327
break;
1328
case relocInfo::static_call_type:
1329
_rspec = static_call_Relocation::spec();
1330
break;
1331
case relocInfo::runtime_call_type:
1332
_rspec = runtime_call_Relocation::spec();
1333
break;
1334
case relocInfo::poll_type:
1335
case relocInfo::poll_return_type:
1336
_rspec = Relocation::spec_simple(rtype);
1337
break;
1338
case relocInfo::none:
1339
_rspec = RelocationHolder::none;
1340
break;
1341
default:
1342
ShouldNotReachHere();
1343
break;
1344
}
1345
}
1346
1347
void Assembler::b(const Address &dest) {
1348
InstructionMark im(this);
1349
code_section()->relocate(inst_mark(), dest.rspec());
1350
b(dest.target());
1351
}
1352
1353
void Assembler::bl(const Address &dest) {
1354
InstructionMark im(this);
1355
code_section()->relocate(inst_mark(), dest.rspec());
1356
bl(dest.target());
1357
}
1358
1359
void Assembler::adr(Register r, const Address &dest) {
1360
InstructionMark im(this);
1361
code_section()->relocate(inst_mark(), dest.rspec());
1362
adr(r, dest.target());
1363
}
1364
1365
void Assembler::br(Condition cc, Label &L) {
1366
if (L.is_bound()) {
1367
br(cc, target(L));
1368
} else {
1369
L.add_patch_at(code(), locator());
1370
br(cc, pc());
1371
}
1372
}
1373
1374
void Assembler::wrap_label(Label &L,
1375
Assembler::uncond_branch_insn insn) {
1376
if (L.is_bound()) {
1377
(this->*insn)(target(L));
1378
} else {
1379
L.add_patch_at(code(), locator());
1380
(this->*insn)(pc());
1381
}
1382
}
1383
1384
void Assembler::wrap_label(Register r, Label &L,
1385
compare_and_branch_insn insn) {
1386
if (L.is_bound()) {
1387
(this->*insn)(r, target(L));
1388
} else {
1389
L.add_patch_at(code(), locator());
1390
(this->*insn)(r, pc());
1391
}
1392
}
1393
1394
void Assembler::wrap_label(Register r, int bitpos, Label &L,
1395
test_and_branch_insn insn) {
1396
if (L.is_bound()) {
1397
(this->*insn)(r, bitpos, target(L));
1398
} else {
1399
L.add_patch_at(code(), locator());
1400
(this->*insn)(r, bitpos, pc());
1401
}
1402
}
1403
1404
void Assembler::wrap_label(Label &L, prfop op, prefetch_insn insn) {
1405
if (L.is_bound()) {
1406
(this->*insn)(target(L), op);
1407
} else {
1408
L.add_patch_at(code(), locator());
1409
(this->*insn)(pc(), op);
1410
}
1411
}
1412
1413
// An "all-purpose" add/subtract immediate, per ARM documentation:
1414
// A "programmer-friendly" assembler may accept a negative immediate
1415
// between -(2^24 -1) and -1 inclusive, causing it to convert a
1416
// requested ADD operation to a SUB, or vice versa, and then encode
1417
// the absolute value of the immediate as for uimm24.
1418
void Assembler::add_sub_immediate(Register Rd, Register Rn, unsigned uimm, int op,
1419
int negated_op) {
1420
bool sets_flags = op & 1; // this op sets flags
1421
union {
1422
unsigned u;
1423
int imm;
1424
};
1425
u = uimm;
1426
bool shift = false;
1427
bool neg = imm < 0;
1428
if (neg) {
1429
imm = -imm;
1430
op = negated_op;
1431
}
1432
assert(Rd != sp || imm % 16 == 0, "misaligned stack");
1433
if (imm >= (1 << 11)
1434
&& ((imm >> 12) << 12 == imm)) {
1435
imm >>= 12;
1436
shift = true;
1437
}
1438
f(op, 31, 29), f(0b10001, 28, 24), f(shift, 23, 22), f(imm, 21, 10);
1439
1440
// add/subtract immediate ops with the S bit set treat r31 as zr;
1441
// with S unset they use sp.
1442
if (sets_flags)
1443
zrf(Rd, 0);
1444
else
1445
srf(Rd, 0);
1446
1447
srf(Rn, 5);
1448
}
1449
1450
bool Assembler::operand_valid_for_add_sub_immediate(long imm) {
1451
bool shift = false;
1452
unsigned long uimm = uabs(imm);
1453
if (uimm < (1 << 12))
1454
return true;
1455
if (uimm < (1 << 24)
1456
&& ((uimm >> 12) << 12 == uimm)) {
1457
return true;
1458
}
1459
return false;
1460
}
1461
1462
bool Assembler::operand_valid_for_logical_immediate(bool is32, uint64_t imm) {
1463
return encode_logical_immediate(is32, imm) != 0xffffffff;
1464
}
1465
1466
static uint64_t doubleTo64Bits(jdouble d) {
1467
union {
1468
jdouble double_value;
1469
uint64_t double_bits;
1470
};
1471
1472
double_value = d;
1473
return double_bits;
1474
}
1475
1476
bool Assembler::operand_valid_for_float_immediate(double imm) {
1477
// If imm is all zero bits we can use ZR as the source of a
1478
// floating-point value.
1479
if (doubleTo64Bits(imm) == 0)
1480
return true;
1481
1482
// Otherwise try to encode imm then convert the encoded value back
1483
// and make sure it's the exact same bit pattern.
1484
unsigned result = encoding_for_fp_immediate(imm);
1485
return doubleTo64Bits(imm) == fp_immediate_for_encoding(result, true);
1486
}
1487
1488
int AbstractAssembler::code_fill_byte() {
1489
return 0;
1490
}
1491
1492
// n.b. this is implemented in subclass MacroAssembler
1493
void Assembler::bang_stack_with_offset(int offset) { Unimplemented(); }
1494
1495
1496
// and now the routines called by the assembler which encapsulate the
1497
// above encode and decode functions
1498
1499
uint32_t
1500
asm_util::encode_logical_immediate(bool is32, uint64_t imm)
1501
{
1502
if (is32) {
1503
/* Allow all zeros or all ones in top 32-bits, so that
1504
constant expressions like ~1 are permitted. */
1505
if (imm >> 32 != 0 && imm >> 32 != 0xffffffff)
1506
return 0xffffffff;
1507
/* Replicate the 32 lower bits to the 32 upper bits. */
1508
imm &= 0xffffffff;
1509
imm |= imm << 32;
1510
}
1511
1512
return encoding_for_logical_immediate(imm);
1513
}
1514
1515
unsigned Assembler::pack(double value) {
1516
float val = (float)value;
1517
unsigned result = encoding_for_fp_immediate(val);
1518
guarantee(unpack(result) == value,
1519
"Invalid floating-point immediate operand");
1520
return result;
1521
}
1522
1523
// Packed operands for Floating-point Move (immediate)
1524
1525
static float unpack(unsigned value) {
1526
union {
1527
unsigned ival;
1528
float val;
1529
};
1530
ival = fp_immediate_for_encoding(value, 0);
1531
return val;
1532
}
1533
1534