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 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * This code is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 only, as 8 * published by the Free Software Foundation. 9 * 10 * This code is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 * version 2 for more details (a copy is included in the LICENSE file that 14 * accompanied this code). 15 * 16 * You should have received a copy of the GNU General Public License version 17 * 2 along with this work; if not, write to the Free Software Foundation, 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19 * 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21 * or visit www.oracle.com if you need additional information or have any 22 * questions. 23 */ 24 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 unsigned long 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, 4294049777ul); // and w6, w11, #0xfff1fff1 136 __ orrw(r28, r5, 4294966791ul); // orr w28, w5, #0xfffffe07 137 __ eorw(r1, r20, 134217216ul); // eor w1, w20, #0x7fffe00 138 __ andsw(r7, r18, 1048576ul); // ands w7, w18, #0x100000 139 __ andr(r14, r12, 9223372036854775808ul); // and x14, x12, #0x8000000000000000 140 __ orr(r9, r11, 562675075514368ul); // orr x9, x11, #0x1ffc000000000 141 __ eor(r17, r0, 18014398509481728ul); // eor x17, x0, #0x3fffffffffff00 142 __ ands(r1, r8, 18446744073705357315ul); // 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(r2, Address(__ pre(r22, 8))); // str x2, [x22, 8]! 341 __ strw(r6, Address(__ pre(r11, -127))); // str w6, [x11, -127]! 342 __ strb(r3, Address(__ pre(r20, -32))); // strb w3, [x20, -32]! 343 __ strh(r19, Address(__ pre(r10, 29))); // strh w19, [x10, 29]! 344 __ ldr(r7, Address(__ pre(r5, -33))); // ldr x7, [x5, -33]! 345 __ ldrw(r17, Address(__ pre(r23, -120))); // ldr w17, [x23, -120]! 346 __ ldrb(r12, Address(__ pre(r22, -2))); // ldrb w12, [x22, -2]! 347 __ ldrh(r17, Address(__ pre(r12, -45))); // ldrh w17, [x12, -45]! 348 __ ldrsb(r4, Address(__ pre(r21, -13))); // ldrsb x4, [x21, -13]! 349 __ ldrsh(r23, Address(__ pre(r14, -45))); // ldrsh x23, [x14, -45]! 350 __ ldrshw(r8, Address(__ pre(r19, 3))); // ldrsh w8, [x19, 3]! 351 __ ldrsw(r7, Address(__ pre(r30, -121))); // ldrsw x7, [x30, -121]! 352 __ ldrd(v7, Address(__ pre(r8, -27))); // ldr d7, [x8, -27]! 353 __ ldrs(v19, Address(__ pre(r28, -73))); // ldr s19, [x28, -73]! 354 __ strd(v18, Address(__ pre(r12, -144))); // str d18, [x12, -144]! 355 __ strs(v1, Address(__ pre(r4, -38))); // str s1, [x4, -38]! 356 357 // post 358 // LoadStoreOp 359 __ str(r2, Address(__ post(r9, -247))); // str x2, [x9], -247 360 __ strw(r21, Address(__ post(r26, -127))); // str w21, [x26], -127 361 __ strb(r27, Address(__ post(r22, -27))); // strb w27, [x22], -27 362 __ strh(r25, Address(__ post(r13, -52))); // strh w25, [x13], -52 363 __ ldr(r5, Address(__ post(r12, -31))); // ldr x5, [x12], -31 364 __ ldrw(r10, Address(__ post(r1, -11))); // ldr w10, [x1], -11 365 __ ldrb(r21, Address(__ post(r14, 13))); // ldrb w21, [x14], 13 366 __ ldrh(r30, Address(__ post(r6, -64))); // ldrh w30, [x6], -64 367 __ ldrsb(r10, Address(__ post(r12, -28))); // ldrsb x10, [x12], -28 368 __ ldrsh(r9, Address(__ post(r0, -14))); // ldrsh x9, [x0], -14 369 __ ldrshw(r1, Address(__ post(r26, -60))); // ldrsh w1, [x26], -60 370 __ ldrsw(r13, Address(__ post(r25, -113))); // ldrsw x13, [x25], -113 371 __ ldrd(v28, Address(__ post(r2, -241))); // ldr d28, [x2], -241 372 __ ldrs(v16, Address(__ post(r9, -24))); // ldr s16, [x9], -24 373 __ strd(v20, Address(__ post(r8, -218))); // str d20, [x8], -218 374 __ strs(v21, Address(__ post(r22, -4))); // str s21, [x22], -4 375 376 // base_plus_reg 377 // LoadStoreOp 378 __ str(r5, Address(r20, r6, Address::sxtw(0))); // str x5, [x20, w6, sxtw #0] 379 __ strw(r2, Address(r25, r17, Address::sxtx(2))); // str w2, [x25, x17, sxtx #2] 380 __ strb(r10, Address(r23, r24, Address::sxtx(0))); // strb w10, [x23, x24, sxtx #0] 381 __ strh(r6, Address(r18, r19, Address::lsl(0))); // strh w6, [x18, x19, lsl #0] 382 __ ldr(r21, Address(r20, r20, Address::lsl(3))); // ldr x21, [x20, x20, lsl #3] 383 __ ldrw(r22, Address(r25, r24, Address::lsl(0))); // ldr w22, [x25, x24, lsl #0] 384 __ ldrb(r19, Address(r20, r8, Address::uxtw(0))); // ldrb w19, [x20, w8, uxtw #0] 385 __ ldrh(r6, Address(r0, r1, Address::lsl(1))); // ldrh w6, [x0, x1, lsl #1] 386 __ ldrsb(r16, Address(r13, r11, Address::lsl(0))); // ldrsb x16, [x13, x11, lsl #0] 387 __ ldrsh(r26, Address(r22, r21, Address::uxtw(0))); // ldrsh x26, [x22, w21, uxtw #0] 388 __ ldrshw(r5, Address(r15, r22, Address::uxtw(1))); // ldrsh w5, [x15, w22, uxtw #1] 389 __ ldrsw(r18, Address(r24, r21, Address::lsl(0))); // ldrsw x18, [x24, x21, lsl #0] 390 __ ldrd(v7, Address(r7, r24, Address::lsl(0))); // ldr d7, [x7, x24, lsl #0] 391 __ ldrs(v30, Address(r11, r22, Address::sxtx(2))); // ldr s30, [x11, x22, sxtx #2] 392 __ strd(v22, Address(r23, r17, Address::lsl(0))); // str d22, [x23, x17, lsl #0] 393 __ strs(v30, Address(r1, r21, Address::sxtw(0))); // str s30, [x1, w21, sxtw #0] 394 395 // base_plus_scaled_offset 396 // LoadStoreOp 397 __ str(r10, Address(r30, 12992)); // str x10, [x30, 12992] 398 __ strw(r19, Address(r28, 6408)); // str w19, [x28, 6408] 399 __ strb(r29, Address(r10, 1580)); // strb w29, [x10, 1580] 400 __ strh(r5, Address(r14, 3172)); // strh w5, [x14, 3172] 401 __ ldr(r8, Address(r5, 13152)); // ldr x8, [x5, 13152] 402 __ ldrw(r24, Address(r13, 8152)); // ldr w24, [x13, 8152] 403 __ ldrb(r12, Address(r26, 1905)); // ldrb w12, [x26, 1905] 404 __ ldrh(r15, Address(r19, 3442)); // ldrh w15, [x19, 3442] 405 __ ldrsb(r13, Address(r22, 1615)); // ldrsb x13, [x22, 1615] 406 __ ldrsh(r7, Address(r15, 3950)); // ldrsh x7, [x15, 3950] 407 __ ldrshw(r24, Address(r27, 3584)); // ldrsh w24, [x27, 3584] 408 __ ldrsw(r0, Address(r19, 6660)); // ldrsw x0, [x19, 6660] 409 __ ldrd(v1, Address(r14, 13848)); // ldr d1, [x14, 13848] 410 __ ldrs(v18, Address(r28, 7228)); // ldr s18, [x28, 7228] 411 __ strd(v25, Address(r12, 13448)); // str d25, [x12, 13448] 412 __ strs(v25, Address(r1, 6496)); // str s25, [x1, 6496] 413 414 // pcrel 415 // LoadStoreOp 416 __ ldr(r17, forth); // ldr x17, forth 417 __ ldrw(r7, back); // ldr w7, back 418 419 // LoadStoreOp 420 __ prfm(Address(r14, -127)); // prfm PLDL1KEEP, [x14, -127] 421 422 // LoadStoreOp 423 __ prfm(back); // prfm PLDL1KEEP, back 424 425 // LoadStoreOp 426 __ prfm(Address(r0, r22, Address::lsl(0))); // prfm PLDL1KEEP, [x0, x22, lsl #0] 427 428 // LoadStoreOp 429 __ prfm(Address(r23, 15192)); // prfm PLDL1KEEP, [x23, 15192] 430 431 // AddSubCarryOp 432 __ adcw(r17, r24, r12); // adc w17, w24, w12 433 __ adcsw(r0, r24, r5); // adcs w0, w24, w5 434 __ sbcw(r12, r11, r3); // sbc w12, w11, w3 435 __ sbcsw(r10, r5, r19); // sbcs w10, w5, w19 436 __ adc(r20, r0, r14); // adc x20, x0, x14 437 __ adcs(r17, r27, r15); // adcs x17, x27, x15 438 __ sbc(r2, r1, r26); // sbc x2, x1, x26 439 __ sbcs(r24, r26, r8); // sbcs x24, x26, x8 440 441 // AddSubExtendedOp 442 __ addw(r20, r2, r25, ext::sxtx, 2); // add w20, w2, w25, sxtx #2 443 __ addsw(r14, r1, r28, ext::uxtw, 3); // adds w14, w1, w28, uxtw #3 444 __ sub(r1, r11, r4, ext::uxth, 3); // sub x1, x11, x4, uxth #3 445 __ subsw(r5, r28, r19, ext::sxtx, 1); // subs w5, w28, w19, sxtx #1 446 __ add(r19, r29, r14, ext::sxth, 4); // add x19, x29, x14, sxth #4 447 __ adds(r1, r7, r8, ext::uxth, 1); // adds x1, x7, x8, uxth #1 448 __ sub(r7, r27, r14, ext::uxth, 4); // sub x7, x27, x14, uxth #4 449 __ subs(r17, r0, r28, ext::uxtx, 1); // subs x17, x0, x28, uxtx #1 450 451 // ConditionalCompareOp 452 __ ccmnw(r24, r30, 8u, Assembler::LT); // ccmn w24, w30, #8, LT 453 __ ccmpw(r1, r24, 12u, Assembler::VC); // ccmp w1, w24, #12, VC 454 __ ccmn(r20, r11, 14u, Assembler::MI); // ccmn x20, x11, #14, MI 455 __ ccmp(r10, r7, 8u, Assembler::VS); // ccmp x10, x7, #8, VS 456 457 // ConditionalCompareImmedOp 458 __ ccmnw(r2, 30, 10, Assembler::MI); // ccmn w2, #30, #10, MI 459 __ ccmpw(r13, 7, 7, Assembler::MI); // ccmp w13, #7, #7, MI 460 __ ccmn(r12, 18, 6, Assembler::HI); // ccmn x12, #18, #6, HI 461 __ ccmp(r25, 11, 14, Assembler::LE); // ccmp x25, #11, #14, LE 462 463 // ConditionalSelectOp 464 __ cselw(r0, r18, r14, Assembler::CS); // csel w0, w18, w14, CS 465 __ csincw(r1, r9, r24, Assembler::LE); // csinc w1, w9, w24, LE 466 __ csinvw(r3, r27, r1, Assembler::LS); // csinv w3, w27, w1, LS 467 __ csnegw(r0, r13, r26, Assembler::MI); // csneg w0, w13, w26, MI 468 __ csel(r28, r22, r18, Assembler::HS); // csel x28, x22, x18, HS 469 __ csinc(r10, r12, r18, Assembler::LE); // csinc x10, x12, x18, LE 470 __ csinv(r8, r15, r28, Assembler::CC); // csinv x8, x15, x28, CC 471 __ csneg(r19, r23, r19, Assembler::GE); // csneg x19, x23, x19, GE 472 473 // TwoRegOp 474 __ rbitw(r6, r29); // rbit w6, w29 475 __ rev16w(r5, r18); // rev16 w5, w18 476 __ revw(r9, r19); // rev w9, w19 477 __ clzw(r9, r13); // clz w9, w13 478 __ clsw(r21, r8); // cls w21, w8 479 __ rbit(r22, r10); // rbit x22, x10 480 __ rev16(r4, r19); // rev16 x4, x19 481 __ rev32(r5, r13); // rev32 x5, x13 482 __ rev(r12, r2); // rev x12, x2 483 __ clz(r22, r21); // clz x22, x21 484 __ cls(r24, r16); // cls x24, x16 485 486 // ThreeRegOp 487 __ udivw(r17, r5, r6); // udiv w17, w5, w6 488 __ sdivw(r7, r16, r25); // sdiv w7, w16, w25 489 __ lslvw(r11, r27, r22); // lslv w11, w27, w22 490 __ lsrvw(r22, r10, r3); // lsrv w22, w10, w3 491 __ asrvw(r29, r26, r12); // asrv w29, w26, w12 492 __ rorvw(r26, r27, r10); // rorv w26, w27, w10 493 __ udiv(r15, r10, r21); // udiv x15, x10, x21 494 __ sdiv(r28, r30, r23); // sdiv x28, x30, x23 495 __ lslv(r9, r27, r30); // lslv x9, x27, x30 496 __ lsrv(r10, r29, r15); // lsrv x10, x29, x15 497 __ asrv(r29, r30, r25); // asrv x29, x30, x25 498 __ rorv(r21, r4, r0); // rorv x21, x4, x0 499 __ umulh(r18, r21, r29); // umulh x18, x21, x29 500 __ smulh(r16, r21, r20); // smulh x16, x21, x20 501 502 // FourRegMulOp 503 __ maddw(r6, r19, r30, r3); // madd w6, w19, w30, w3 504 __ msubw(r21, r19, r11, r24); // msub w21, w19, w11, w24 505 __ madd(r0, r27, r25, r14); // madd x0, x27, x25, x14 506 __ msub(r3, r14, r18, r7); // msub x3, x14, x18, x7 507 __ smaddl(r15, r24, r28, r17); // smaddl x15, w24, w28, x17 508 __ smsubl(r25, r2, r26, r28); // smsubl x25, w2, w26, x28 509 __ umaddl(r5, r25, r26, r27); // umaddl x5, w25, w26, x27 510 __ umsubl(r16, r18, r6, r21); // umsubl x16, w18, w6, x21 511 512 // ThreeRegFloatOp 513 __ fmuls(v12, v0, v4); // fmul s12, s0, s4 514 __ fdivs(v12, v27, v17); // fdiv s12, s27, s17 515 __ fadds(v28, v28, v2); // fadd s28, s28, s2 516 __ fsubs(v18, v10, v15); // fsub s18, s10, s15 517 __ fmuls(v14, v14, v3); // fmul s14, s14, s3 518 __ fmuld(v25, v15, v19); // fmul d25, d15, d19 519 __ fdivd(v14, v5, v16); // fdiv d14, d5, d16 520 __ faddd(v4, v26, v25); // fadd d4, d26, d25 521 __ fsubd(v4, v2, v2); // fsub d4, d2, d2 522 __ fmuld(v12, v29, v17); // fmul d12, d29, d17 523 524 // FourRegFloatOp 525 __ fmadds(v8, v7, v3, v4); // fmadd s8, s7, s3, s4 526 __ fmsubs(v25, v4, v26, v25); // fmsub s25, s4, s26, s25 527 __ fnmadds(v4, v17, v0, v26); // fnmadd s4, s17, s0, s26 528 __ fnmadds(v17, v23, v15, v21); // fnmadd s17, s23, s15, s21 529 __ fmaddd(v28, v17, v27, v10); // fmadd d28, d17, d27, d10 530 __ fmsubd(v3, v0, v7, v25); // fmsub d3, d0, d7, d25 531 __ fnmaddd(v9, v6, v15, v29); // fnmadd d9, d6, d15, d29 532 __ fnmaddd(v15, v10, v2, v17); // fnmadd d15, d10, d2, d17 533 534 // TwoRegFloatOp 535 __ fmovs(v7, v11); // fmov s7, s11 536 __ fabss(v11, v23); // fabs s11, s23 537 __ fnegs(v7, v29); // fneg s7, s29 538 __ fsqrts(v23, v14); // fsqrt s23, s14 539 __ fcvts(v27, v11); // fcvt d27, s11 540 __ fmovd(v11, v4); // fmov d11, d4 541 __ fabsd(v24, v12); // fabs d24, d12 542 __ fnegd(v15, v14); // fneg d15, d14 543 __ fsqrtd(v20, v11); // fsqrt d20, d11 544 __ fcvtd(v28, v13); // fcvt s28, d13 545 546 // FloatConvertOp 547 __ fcvtzsw(r11, v12); // fcvtzs w11, s12 548 __ fcvtzs(r23, v30); // fcvtzs x23, s30 549 __ fcvtzdw(r26, v14); // fcvtzs w26, d14 550 __ fcvtzd(r9, v13); // fcvtzs x9, d13 551 __ scvtfws(v10, r7); // scvtf s10, w7 552 __ scvtfs(v5, r29); // scvtf s5, x29 553 __ scvtfwd(v15, r3); // scvtf d15, w3 554 __ scvtfd(v11, r12); // scvtf d11, x12 555 __ fmovs(r15, v30); // fmov w15, s30 556 __ fmovd(r30, v17); // fmov x30, d17 557 __ fmovs(v19, r20); // fmov s19, w20 558 __ fmovd(v15, r15); // fmov d15, x15 559 560 // TwoRegFloatOp 561 __ fcmps(v9, v21); // fcmp s9, s21 562 __ fcmpd(v2, v9); // fcmp d2, d9 563 __ fcmps(v27, 0.0); // fcmp s27, #0.0 564 __ fcmpd(v7, 0.0); // fcmp d7, #0.0 565 566 // LoadStorePairOp 567 __ stpw(r30, r17, Address(r1, 128)); // stp w30, w17, [x1, #128] 568 __ ldpw(r6, r10, Address(r3, -224)); // ldp w6, w10, [x3, #-224] 569 __ ldpsw(r11, r7, Address(r1, 48)); // ldpsw x11, x7, [x1, #48] 570 __ stp(r0, r3, Address(r18, -112)); // stp x0, x3, [x18, #-112] 571 __ ldp(r6, r22, Address(r6, 112)); // ldp x6, x22, [x6, #112] 572 573 // LoadStorePairOp 574 __ stpw(r27, r26, Address(__ pre(r2, -256))); // stp w27, w26, [x2, #-256]! 575 __ ldpw(r7, r28, Address(__ pre(r11, -192))); // ldp w7, w28, [x11, #-192]! 576 __ ldpsw(r13, r11, Address(__ pre(r23, 64))); // ldpsw x13, x11, [x23, #64]! 577 __ stp(r8, r18, Address(__ pre(r21, -16))); // stp x8, x18, [x21, #-16]! 578 __ ldp(r20, r19, Address(__ pre(r18, 64))); // ldp x20, x19, [x18, #64]! 579 580 // LoadStorePairOp 581 __ stpw(r29, r22, Address(__ post(r8, -224))); // stp w29, w22, [x8], #-224 582 __ ldpw(r19, r20, Address(__ post(r11, 16))); // ldp w19, w20, [x11], #16 583 __ ldpsw(r20, r6, Address(__ post(r15, -32))); // ldpsw x20, x6, [x15], #-32 584 __ stp(r3, r28, Address(__ post(r3, -208))); // stp x3, x28, [x3], #-208 585 __ ldp(r14, r14, Address(__ post(r10, 96))); // ldp x14, x14, [x10], #96 586 587 // LoadStorePairOp 588 __ stnpw(r11, r17, Address(r10, -96)); // stnp w11, w17, [x10, #-96] 589 __ ldnpw(r7, r7, Address(r14, 64)); // ldnp w7, w7, [x14, #64] 590 __ stnp(r0, r22, Address(r0, 112)); // stnp x0, x22, [x0, #112] 591 __ ldnp(r23, r13, Address(r13, -96)); // ldnp x23, x13, [x13, #-96] 592 593 // LdStNEONOp 594 __ ld1(v2, __ T8B, Address(r7)); // ld1 {v2.8B}, [x7] 595 __ ld1(v14, v15, __ T16B, Address(__ post(r9, 32))); // ld1 {v14.16B, v15.16B}, [x9], 32 596 __ ld1(v16, v17, v18, __ T1D, Address(__ post(r21, r12))); // ld1 {v16.1D, v17.1D, v18.1D}, [x21], x12 597 __ ld1(v17, v18, v19, v20, __ T8H, Address(__ post(r22, 64))); // ld1 {v17.8H, v18.8H, v19.8H, v20.8H}, [x22], 64 598 __ ld1r(v13, __ T8B, Address(r6)); // ld1r {v13.8B}, [x6] 599 __ ld1r(v10, __ T4S, Address(__ post(r20, 4))); // ld1r {v10.4S}, [x20], 4 600 __ ld1r(v4, __ T1D, Address(__ post(r21, r5))); // ld1r {v4.1D}, [x21], x5 601 __ ld2(v6, v7, __ T2D, Address(r23)); // ld2 {v6.2D, v7.2D}, [x23] 602 __ ld2(v15, v16, __ T4H, Address(__ post(r26, 16))); // ld2 {v15.4H, v16.4H}, [x26], 16 603 __ ld2r(v23, v24, __ T16B, Address(r11)); // ld2r {v23.16B, v24.16B}, [x11] 604 __ ld2r(v8, v9, __ T2S, Address(__ post(r23, 8))); // ld2r {v8.2S, v9.2S}, [x23], 8 605 __ ld2r(v19, v20, __ T2D, Address(__ post(r25, r6))); // ld2r {v19.2D, v20.2D}, [x25], x6 606 __ ld3(v29, v30, v31, __ T4S, Address(__ post(r17, r1))); // ld3 {v29.4S, v30.4S, v31.4S}, [x17], x1 607 __ ld3(v24, v25, v26, __ T2S, Address(r23)); // ld3 {v24.2S, v25.2S, v26.2S}, [x23] 608 __ ld3r(v10, v11, v12, __ T8H, Address(r5)); // ld3r {v10.8H, v11.8H, v12.8H}, [x5] 609 __ ld3r(v18, v19, v20, __ T4S, Address(__ post(r10, 12))); // ld3r {v18.4S, v19.4S, v20.4S}, [x10], 12 610 __ ld3r(v12, v13, v14, __ T1D, Address(__ post(r15, r16))); // ld3r {v12.1D, v13.1D, v14.1D}, [x15], x16 611 __ ld4(v25, v26, v27, v28, __ T8H, Address(__ post(r18, 64))); // ld4 {v25.8H, v26.8H, v27.8H, v28.8H}, [x18], 64 612 __ ld4(v1, v2, v3, v4, __ T8B, Address(__ post(r30, r8))); // ld4 {v1.8B, v2.8B, v3.8B, v4.8B}, [x30], x8 613 __ ld4r(v16, v17, v18, v19, __ T8B, Address(r18)); // ld4r {v16.8B, v17.8B, v18.8B, v19.8B}, [x18] 614 __ ld4r(v25, v26, v27, v28, __ T4H, Address(__ post(r12, 8))); // ld4r {v25.4H, v26.4H, v27.4H, v28.4H}, [x12], 8 615 __ ld4r(v26, v27, v28, v29, __ T2S, Address(__ post(r19, r8))); // ld4r {v26.2S, v27.2S, v28.2S, v29.2S}, [x19], x8 616 617 // NEONReduceInstruction 618 __ addv(v21, __ T8B, v22); // addv b21, v22.8B 619 __ addv(v4, __ T16B, v5); // addv b4, v5.16B 620 __ addv(v18, __ T4H, v19); // addv h18, v19.4H 621 __ addv(v24, __ T8H, v25); // addv h24, v25.8H 622 __ addv(v12, __ T4S, v13); // addv s12, v13.4S 623 __ smaxv(v18, __ T8B, v19); // smaxv b18, v19.8B 624 __ smaxv(v7, __ T16B, v8); // smaxv b7, v8.16B 625 __ smaxv(v9, __ T4H, v10); // smaxv h9, v10.4H 626 __ smaxv(v25, __ T8H, v26); // smaxv h25, v26.8H 627 __ smaxv(v15, __ T4S, v16); // smaxv s15, v16.4S 628 __ fmaxv(v13, __ T4S, v14); // fmaxv s13, v14.4S 629 __ sminv(v3, __ T8B, v4); // sminv b3, v4.8B 630 __ sminv(v11, __ T16B, v12); // sminv b11, v12.16B 631 __ sminv(v16, __ T4H, v17); // sminv h16, v17.4H 632 __ sminv(v7, __ T8H, v8); // sminv h7, v8.8H 633 __ sminv(v25, __ T4S, v26); // sminv s25, v26.4S 634 __ fminv(v11, __ T4S, v12); // fminv s11, v12.4S 635 636 // TwoRegNEONOp 637 __ absr(v7, __ T8B, v8); // abs v7.8B, v8.8B 638 __ absr(v9, __ T16B, v10); // abs v9.16B, v10.16B 639 __ absr(v25, __ T4H, v26); // abs v25.4H, v26.4H 640 __ absr(v28, __ T8H, v29); // abs v28.8H, v29.8H 641 __ absr(v29, __ T2S, v30); // abs v29.2S, v30.2S 642 __ absr(v0, __ T4S, v1); // abs v0.4S, v1.4S 643 __ absr(v23, __ T2D, v24); // abs v23.2D, v24.2D 644 __ fabs(v16, __ T2S, v17); // fabs v16.2S, v17.2S 645 __ fabs(v3, __ T4S, v4); // fabs v3.4S, v4.4S 646 __ fabs(v7, __ T2D, v8); // fabs v7.2D, v8.2D 647 __ fneg(v8, __ T2S, v9); // fneg v8.2S, v9.2S 648 __ fneg(v12, __ T4S, v13); // fneg v12.4S, v13.4S 649 __ fneg(v14, __ T2D, v15); // fneg v14.2D, v15.2D 650 __ fsqrt(v29, __ T2S, v30); // fsqrt v29.2S, v30.2S 651 __ fsqrt(v1, __ T4S, v2); // fsqrt v1.4S, v2.4S 652 __ fsqrt(v21, __ T2D, v22); // fsqrt v21.2D, v22.2D 653 __ notr(v26, __ T8B, v27); // not v26.8B, v27.8B 654 __ notr(v11, __ T16B, v12); // not v11.16B, v12.16B 655 656 // ThreeRegNEONOp 657 __ andr(v7, __ T8B, v8, v9); // and v7.8B, v8.8B, v9.8B 658 __ andr(v6, __ T16B, v7, v8); // and v6.16B, v7.16B, v8.16B 659 __ orr(v9, __ T8B, v10, v11); // orr v9.8B, v10.8B, v11.8B 660 __ orr(v4, __ T16B, v5, v6); // orr v4.16B, v5.16B, v6.16B 661 __ eor(v17, __ T8B, v18, v19); // eor v17.8B, v18.8B, v19.8B 662 __ eor(v7, __ T16B, v8, v9); // eor v7.16B, v8.16B, v9.16B 663 __ addv(v0, __ T8B, v1, v2); // add v0.8B, v1.8B, v2.8B 664 __ addv(v7, __ T16B, v8, v9); // add v7.16B, v8.16B, v9.16B 665 __ addv(v25, __ T4H, v26, v27); // add v25.4H, v26.4H, v27.4H 666 __ addv(v12, __ T8H, v13, v14); // add v12.8H, v13.8H, v14.8H 667 __ addv(v27, __ T2S, v28, v29); // add v27.2S, v28.2S, v29.2S 668 __ addv(v29, __ T4S, v30, v31); // add v29.4S, v30.4S, v31.4S 669 __ addv(v7, __ T2D, v8, v9); // add v7.2D, v8.2D, v9.2D 670 __ fadd(v17, __ T2S, v18, v19); // fadd v17.2S, v18.2S, v19.2S 671 __ fadd(v27, __ T4S, v28, v29); // fadd v27.4S, v28.4S, v29.4S 672 __ fadd(v18, __ T2D, v19, v20); // fadd v18.2D, v19.2D, v20.2D 673 __ subv(v5, __ T8B, v6, v7); // sub v5.8B, v6.8B, v7.8B 674 __ subv(v7, __ T16B, v8, v9); // sub v7.16B, v8.16B, v9.16B 675 __ subv(v30, __ T4H, v31, v0); // sub v30.4H, v31.4H, v0.4H 676 __ subv(v9, __ T8H, v10, v11); // sub v9.8H, v10.8H, v11.8H 677 __ subv(v26, __ T2S, v27, v28); // sub v26.2S, v27.2S, v28.2S 678 __ subv(v24, __ T4S, v25, v26); // sub v24.4S, v25.4S, v26.4S 679 __ subv(v23, __ T2D, v24, v25); // sub v23.2D, v24.2D, v25.2D 680 __ fsub(v22, __ T2S, v23, v24); // fsub v22.2S, v23.2S, v24.2S 681 __ fsub(v24, __ T4S, v25, v26); // fsub v24.4S, v25.4S, v26.4S 682 __ fsub(v26, __ T2D, v27, v28); // fsub v26.2D, v27.2D, v28.2D 683 __ mulv(v1, __ T8B, v2, v3); // mul v1.8B, v2.8B, v3.8B 684 __ mulv(v5, __ T16B, v6, v7); // mul v5.16B, v6.16B, v7.16B 685 __ mulv(v15, __ T4H, v16, v17); // mul v15.4H, v16.4H, v17.4H 686 __ mulv(v6, __ T8H, v7, v8); // mul v6.8H, v7.8H, v8.8H 687 __ mulv(v16, __ T2S, v17, v18); // mul v16.2S, v17.2S, v18.2S 688 __ mulv(v15, __ T4S, v16, v17); // mul v15.4S, v16.4S, v17.4S 689 __ fmul(v3, __ T2S, v4, v5); // fmul v3.2S, v4.2S, v5.2S 690 __ fmul(v2, __ T4S, v3, v4); // fmul v2.4S, v3.4S, v4.4S 691 __ fmul(v0, __ T2D, v1, v2); // fmul v0.2D, v1.2D, v2.2D 692 __ mlav(v25, __ T4H, v26, v27); // mla v25.4H, v26.4H, v27.4H 693 __ mlav(v2, __ T8H, v3, v4); // mla v2.8H, v3.8H, v4.8H 694 __ mlav(v29, __ T2S, v30, v31); // mla v29.2S, v30.2S, v31.2S 695 __ mlav(v30, __ T4S, v31, v0); // mla v30.4S, v31.4S, v0.4S 696 __ fmla(v23, __ T2S, v24, v25); // fmla v23.2S, v24.2S, v25.2S 697 __ fmla(v13, __ T4S, v14, v15); // fmla v13.4S, v14.4S, v15.4S 698 __ fmla(v8, __ T2D, v9, v10); // fmla v8.2D, v9.2D, v10.2D 699 __ mlsv(v12, __ T4H, v13, v14); // mls v12.4H, v13.4H, v14.4H 700 __ mlsv(v10, __ T8H, v11, v12); // mls v10.8H, v11.8H, v12.8H 701 __ mlsv(v12, __ T2S, v13, v14); // mls v12.2S, v13.2S, v14.2S 702 __ mlsv(v22, __ T4S, v23, v24); // mls v22.4S, v23.4S, v24.4S 703 __ fmls(v27, __ T2S, v28, v29); // fmls v27.2S, v28.2S, v29.2S 704 __ fmls(v4, __ T4S, v5, v6); // fmls v4.4S, v5.4S, v6.4S 705 __ fmls(v7, __ T2D, v8, v9); // fmls v7.2D, v8.2D, v9.2D 706 __ fdiv(v6, __ T2S, v7, v8); // fdiv v6.2S, v7.2S, v8.2S 707 __ fdiv(v1, __ T4S, v2, v3); // fdiv v1.4S, v2.4S, v3.4S 708 __ fdiv(v26, __ T2D, v27, v28); // fdiv v26.2D, v27.2D, v28.2D 709 __ maxv(v15, __ T8B, v16, v17); // smax v15.8B, v16.8B, v17.8B 710 __ maxv(v2, __ T16B, v3, v4); // smax v2.16B, v3.16B, v4.16B 711 __ maxv(v13, __ T4H, v14, v15); // smax v13.4H, v14.4H, v15.4H 712 __ maxv(v13, __ T8H, v14, v15); // smax v13.8H, v14.8H, v15.8H 713 __ maxv(v24, __ T2S, v25, v26); // smax v24.2S, v25.2S, v26.2S 714 __ maxv(v23, __ T4S, v24, v25); // smax v23.4S, v24.4S, v25.4S 715 __ fmax(v4, __ T2S, v5, v6); // fmax v4.2S, v5.2S, v6.2S 716 __ fmax(v19, __ T4S, v20, v21); // fmax v19.4S, v20.4S, v21.4S 717 __ fmax(v15, __ T2D, v16, v17); // fmax v15.2D, v16.2D, v17.2D 718 __ minv(v0, __ T8B, v1, v2); // smin v0.8B, v1.8B, v2.8B 719 __ minv(v4, __ T16B, v5, v6); // smin v4.16B, v5.16B, v6.16B 720 __ minv(v20, __ T4H, v21, v22); // smin v20.4H, v21.4H, v22.4H 721 __ minv(v11, __ T8H, v12, v13); // smin v11.8H, v12.8H, v13.8H 722 __ minv(v29, __ T2S, v30, v31); // smin v29.2S, v30.2S, v31.2S 723 __ minv(v15, __ T4S, v16, v17); // smin v15.4S, v16.4S, v17.4S 724 __ fmin(v21, __ T2S, v22, v23); // fmin v21.2S, v22.2S, v23.2S 725 __ fmin(v4, __ T4S, v5, v6); // fmin v4.4S, v5.4S, v6.4S 726 __ fmin(v14, __ T2D, v15, v16); // fmin v14.2D, v15.2D, v16.2D 727 __ cmeq(v22, __ T8B, v23, v24); // cmeq v22.8B, v23.8B, v24.8B 728 __ cmeq(v25, __ T16B, v26, v27); // cmeq v25.16B, v26.16B, v27.16B 729 __ cmeq(v6, __ T4H, v7, v8); // cmeq v6.4H, v7.4H, v8.4H 730 __ cmeq(v12, __ T8H, v13, v14); // cmeq v12.8H, v13.8H, v14.8H 731 __ cmeq(v14, __ T2S, v15, v16); // cmeq v14.2S, v15.2S, v16.2S 732 __ cmeq(v13, __ T4S, v14, v15); // cmeq v13.4S, v14.4S, v15.4S 733 __ cmeq(v14, __ T2D, v15, v16); // cmeq v14.2D, v15.2D, v16.2D 734 __ fcmeq(v9, __ T2S, v10, v11); // fcmeq v9.2S, v10.2S, v11.2S 735 __ fcmeq(v25, __ T4S, v26, v27); // fcmeq v25.4S, v26.4S, v27.4S 736 __ fcmeq(v28, __ T2D, v29, v30); // fcmeq v28.2D, v29.2D, v30.2D 737 __ cmgt(v10, __ T8B, v11, v12); // cmgt v10.8B, v11.8B, v12.8B 738 __ cmgt(v19, __ T16B, v20, v21); // cmgt v19.16B, v20.16B, v21.16B 739 __ cmgt(v11, __ T4H, v12, v13); // cmgt v11.4H, v12.4H, v13.4H 740 __ cmgt(v17, __ T8H, v18, v19); // cmgt v17.8H, v18.8H, v19.8H 741 __ cmgt(v21, __ T2S, v22, v23); // cmgt v21.2S, v22.2S, v23.2S 742 __ cmgt(v15, __ T4S, v16, v17); // cmgt v15.4S, v16.4S, v17.4S 743 __ cmgt(v20, __ T2D, v21, v22); // cmgt v20.2D, v21.2D, v22.2D 744 __ fcmgt(v23, __ T2S, v24, v25); // fcmgt v23.2S, v24.2S, v25.2S 745 __ fcmgt(v26, __ T4S, v27, v28); // fcmgt v26.4S, v27.4S, v28.4S 746 __ fcmgt(v5, __ T2D, v6, v7); // fcmgt v5.2D, v6.2D, v7.2D 747 __ cmge(v6, __ T8B, v7, v8); // cmge v6.8B, v7.8B, v8.8B 748 __ cmge(v15, __ T16B, v16, v17); // cmge v15.16B, v16.16B, v17.16B 749 __ cmge(v15, __ T4H, v16, v17); // cmge v15.4H, v16.4H, v17.4H 750 __ cmge(v25, __ T8H, v26, v27); // cmge v25.8H, v26.8H, v27.8H 751 __ cmge(v16, __ T2S, v17, v18); // cmge v16.2S, v17.2S, v18.2S 752 __ cmge(v27, __ T4S, v28, v29); // cmge v27.4S, v28.4S, v29.4S 753 __ cmge(v24, __ T2D, v25, v26); // cmge v24.2D, v25.2D, v26.2D 754 __ fcmge(v15, __ T2S, v16, v17); // fcmge v15.2S, v16.2S, v17.2S 755 __ fcmge(v25, __ T4S, v26, v27); // fcmge v25.4S, v26.4S, v27.4S 756 __ fcmge(v14, __ T2D, v15, v16); // fcmge v14.2D, v15.2D, v16.2D 757 758 // SpecialCases 759 __ ccmn(zr, zr, 3u, Assembler::LE); // ccmn xzr, xzr, #3, LE 760 __ ccmnw(zr, zr, 5u, Assembler::EQ); // ccmn wzr, wzr, #5, EQ 761 __ ccmp(zr, 1, 4u, Assembler::NE); // ccmp xzr, 1, #4, NE 762 __ ccmpw(zr, 2, 2, Assembler::GT); // ccmp wzr, 2, #2, GT 763 __ extr(zr, zr, zr, 0); // extr xzr, xzr, xzr, 0 764 __ stlxp(r0, zr, zr, sp); // stlxp w0, xzr, xzr, [sp] 765 __ stlxpw(r2, zr, zr, r3); // stlxp w2, wzr, wzr, [x3] 766 __ stxp(r4, zr, zr, r5); // stxp w4, xzr, xzr, [x5] 767 __ stxpw(r6, zr, zr, sp); // stxp w6, wzr, wzr, [sp] 768 __ dup(v0, __ T16B, zr); // dup v0.16b, wzr 769 __ mov(v1, __ T1D, 0, zr); // mov v1.d[0], xzr 770 __ mov(v1, __ T2S, 1, zr); // mov v1.s[1], wzr 771 __ mov(v1, __ T4H, 2, zr); // mov v1.h[2], wzr 772 __ mov(v1, __ T8B, 3, zr); // mov v1.b[3], wzr 773 __ ld1(v31, v0, __ T2D, Address(__ post(r1, r0))); // ld1 {v31.2d, v0.2d}, [x1], x0 774 775 // FloatImmediateOp 776 __ fmovd(v0, 2.0); // fmov d0, #2.0 777 __ fmovd(v0, 2.125); // fmov d0, #2.125 778 __ fmovd(v0, 4.0); // fmov d0, #4.0 779 __ fmovd(v0, 4.25); // fmov d0, #4.25 780 __ fmovd(v0, 8.0); // fmov d0, #8.0 781 __ fmovd(v0, 8.5); // fmov d0, #8.5 782 __ fmovd(v0, 16.0); // fmov d0, #16.0 783 __ fmovd(v0, 17.0); // fmov d0, #17.0 784 __ fmovd(v0, 0.125); // fmov d0, #0.125 785 __ fmovd(v0, 0.1328125); // fmov d0, #0.1328125 786 __ fmovd(v0, 0.25); // fmov d0, #0.25 787 __ fmovd(v0, 0.265625); // fmov d0, #0.265625 788 __ fmovd(v0, 0.5); // fmov d0, #0.5 789 __ fmovd(v0, 0.53125); // fmov d0, #0.53125 790 __ fmovd(v0, 1.0); // fmov d0, #1.0 791 __ fmovd(v0, 1.0625); // fmov d0, #1.0625 792 __ fmovd(v0, -2.0); // fmov d0, #-2.0 793 __ fmovd(v0, -2.125); // fmov d0, #-2.125 794 __ fmovd(v0, -4.0); // fmov d0, #-4.0 795 __ fmovd(v0, -4.25); // fmov d0, #-4.25 796 __ fmovd(v0, -8.0); // fmov d0, #-8.0 797 __ fmovd(v0, -8.5); // fmov d0, #-8.5 798 __ fmovd(v0, -16.0); // fmov d0, #-16.0 799 __ fmovd(v0, -17.0); // fmov d0, #-17.0 800 __ fmovd(v0, -0.125); // fmov d0, #-0.125 801 __ fmovd(v0, -0.1328125); // fmov d0, #-0.1328125 802 __ fmovd(v0, -0.25); // fmov d0, #-0.25 803 __ fmovd(v0, -0.265625); // fmov d0, #-0.265625 804 __ fmovd(v0, -0.5); // fmov d0, #-0.5 805 __ fmovd(v0, -0.53125); // fmov d0, #-0.53125 806 __ fmovd(v0, -1.0); // fmov d0, #-1.0 807 __ fmovd(v0, -1.0625); // fmov d0, #-1.0625 808 809 // LSEOp 810 __ swp(Assembler::xword, r10, r13, r14); // swp x10, x13, [x14] 811 __ ldadd(Assembler::xword, r20, r1, r23); // ldadd x20, x1, [x23] 812 __ ldbic(Assembler::xword, r30, r14, r2); // ldclr x30, x14, [x2] 813 __ ldeor(Assembler::xword, r6, r3, r8); // ldeor x6, x3, [x8] 814 __ ldorr(Assembler::xword, r25, r0, r27); // ldset x25, x0, [x27] 815 __ ldsmin(Assembler::xword, r30, r5, r5); // ldsmin x30, x5, [x5] 816 __ ldsmax(Assembler::xword, r30, r11, r25); // ldsmax x30, x11, [x25] 817 __ ldumin(Assembler::xword, r0, zr, r0); // ldumin x0, xzr, [x0] 818 __ ldumax(Assembler::xword, r19, r29, r26); // ldumax x19, x29, [x26] 819 820 // LSEOp 821 __ swpa(Assembler::xword, r9, r26, r12); // swpa x9, x26, [x12] 822 __ ldadda(Assembler::xword, r15, r11, r11); // ldadda x15, x11, [x11] 823 __ ldbica(Assembler::xword, r18, r25, r22); // ldclra x18, x25, [x22] 824 __ ldeora(Assembler::xword, r24, r0, r17); // ldeora x24, x0, [x17] 825 __ ldorra(Assembler::xword, r11, r6, r29); // ldseta x11, x6, [x29] 826 __ ldsmina(Assembler::xword, r6, r5, r5); // ldsmina x6, x5, [x5] 827 __ ldsmaxa(Assembler::xword, r21, r19, r16); // ldsmaxa x21, x19, [x16] 828 __ ldumina(Assembler::xword, r18, r30, r27); // ldumina x18, x30, [x27] 829 __ ldumaxa(Assembler::xword, r28, r1, r28); // ldumaxa x28, x1, [x28] 830 831 // LSEOp 832 __ swpal(Assembler::xword, r1, r20, r29); // swpal x1, x20, [x29] 833 __ ldaddal(Assembler::xword, r16, r13, r10); // ldaddal x16, x13, [x10] 834 __ ldbical(Assembler::xword, r29, r29, r19); // ldclral x29, x29, [x19] 835 __ ldeoral(Assembler::xword, r22, r10, r4); // ldeoral x22, x10, [x4] 836 __ ldorral(Assembler::xword, zr, r21, r8); // ldsetal xzr, x21, [x8] 837 __ ldsminal(Assembler::xword, zr, r19, r10); // ldsminal xzr, x19, [x10] 838 __ ldsmaxal(Assembler::xword, r28, r2, r25); // ldsmaxal x28, x2, [x25] 839 __ lduminal(Assembler::xword, r5, r3, r8); // lduminal x5, x3, [x8] 840 __ ldumaxal(Assembler::xword, r22, r19, r13); // ldumaxal x22, x19, [x13] 841 842 // LSEOp 843 __ swpl(Assembler::xword, r5, r29, r24); // swpl x5, x29, [x24] 844 __ ldaddl(Assembler::xword, r21, r26, r24); // ldaddl x21, x26, [x24] 845 __ ldbicl(Assembler::xword, r3, r24, r26); // ldclrl x3, x24, [x26] 846 __ ldeorl(Assembler::xword, r23, r15, r21); // ldeorl x23, x15, [x21] 847 __ ldorrl(Assembler::xword, r3, r24, r8); // ldsetl x3, x24, [x8] 848 __ ldsminl(Assembler::xword, r25, r20, r16); // ldsminl x25, x20, [x16] 849 __ ldsmaxl(Assembler::xword, r17, r2, r1); // ldsmaxl x17, x2, [x1] 850 __ lduminl(Assembler::xword, r0, r24, r4); // lduminl x0, x24, [x4] 851 __ ldumaxl(Assembler::xword, r3, r12, sp); // ldumaxl x3, x12, [sp] 852 853 // LSEOp 854 __ swp(Assembler::word, r28, r10, r26); // swp w28, w10, [x26] 855 __ ldadd(Assembler::word, r2, r12, r18); // ldadd w2, w12, [x18] 856 __ ldbic(Assembler::word, zr, r1, r13); // ldclr wzr, w1, [x13] 857 __ ldeor(Assembler::word, r29, r0, r19); // ldeor w29, w0, [x19] 858 __ ldorr(Assembler::word, r12, r17, r22); // ldset w12, w17, [x22] 859 __ ldsmin(Assembler::word, r13, r28, r30); // ldsmin w13, w28, [x30] 860 __ ldsmax(Assembler::word, zr, r1, r26); // ldsmax wzr, w1, [x26] 861 __ ldumin(Assembler::word, r28, r4, r30); // ldumin w28, w4, [x30] 862 __ ldumax(Assembler::word, r4, r6, r30); // ldumax w4, w6, [x30] 863 864 // LSEOp 865 __ swpa(Assembler::word, r26, r18, r9); // swpa w26, w18, [x9] 866 __ ldadda(Assembler::word, r8, r12, r0); // ldadda w8, w12, [x0] 867 __ ldbica(Assembler::word, r20, r1, r24); // ldclra w20, w1, [x24] 868 __ ldeora(Assembler::word, r2, r0, r9); // ldeora w2, w0, [x9] 869 __ ldorra(Assembler::word, r24, r26, r16); // ldseta w24, w26, [x16] 870 __ ldsmina(Assembler::word, r30, r3, r10); // ldsmina w30, w3, [x10] 871 __ ldsmaxa(Assembler::word, r23, r10, r4); // ldsmaxa w23, w10, [x4] 872 __ ldumina(Assembler::word, r18, r2, r11); // ldumina w18, w2, [x11] 873 __ ldumaxa(Assembler::word, r8, r10, r15); // ldumaxa w8, w10, [x15] 874 875 // LSEOp 876 __ swpal(Assembler::word, r17, r2, r10); // swpal w17, w2, [x10] 877 __ ldaddal(Assembler::word, r12, r12, r15); // ldaddal w12, w12, [x15] 878 __ ldbical(Assembler::word, r13, r2, r7); // ldclral w13, w2, [x7] 879 __ ldeoral(Assembler::word, r20, r26, r16); // ldeoral w20, w26, [x16] 880 __ ldorral(Assembler::word, r4, r2, r4); // ldsetal w4, w2, [x4] 881 __ ldsminal(Assembler::word, r12, r18, r21); // ldsminal w12, w18, [x21] 882 __ ldsmaxal(Assembler::word, r16, r18, r11); // ldsmaxal w16, w18, [x11] 883 __ lduminal(Assembler::word, r21, r23, r12); // lduminal w21, w23, [x12] 884 __ ldumaxal(Assembler::word, r26, r23, r28); // ldumaxal w26, w23, [x28] 885 886 // LSEOp 887 __ swpl(Assembler::word, r14, r11, r24); // swpl w14, w11, [x24] 888 __ ldaddl(Assembler::word, r1, r12, sp); // ldaddl w1, w12, [sp] 889 __ ldbicl(Assembler::word, r10, r16, r7); // ldclrl w10, w16, [x7] 890 __ ldeorl(Assembler::word, r2, r3, r13); // ldeorl w2, w3, [x13] 891 __ ldorrl(Assembler::word, r19, r17, r16); // ldsetl w19, w17, [x16] 892 __ ldsminl(Assembler::word, r3, r1, r11); // ldsminl w3, w1, [x11] 893 __ ldsmaxl(Assembler::word, r30, r5, r8); // ldsmaxl w30, w5, [x8] 894 __ lduminl(Assembler::word, r15, r29, r30); // lduminl w15, w29, [x30] 895 __ ldumaxl(Assembler::word, r0, r20, r7); // ldumaxl w0, w20, [x7] 896 897 __ bind(forth); 898 899 /* 900 901 aarch64ops.o: file format elf64-littleaarch64 902 903 904 Disassembly of section .text: 905 906 0000000000000000 <back>: 907 0: 8b0d82fa add x26, x23, x13, lsl #32 908 4: cb49970c sub x12, x24, x9, lsr #37 909 8: ab889dfc adds x28, x15, x8, asr #39 910 c: eb9ee787 subs x7, x28, x30, asr #57 911 10: 0b9b3ec9 add w9, w22, w27, asr #15 912 14: 4b9279a3 sub w3, w13, w18, asr #30 913 18: 2b88474e adds w14, w26, w8, asr #17 914 1c: 6b8c56c0 subs w0, w22, w12, asr #21 915 20: 8a1a51e0 and x0, x15, x26, lsl #20 916 24: aa11f4ba orr x26, x5, x17, lsl #61 917 28: ca0281b8 eor x24, x13, x2, lsl #32 918 2c: ea918c7c ands x28, x3, x17, asr #35 919 30: 0a5d4a19 and w25, w16, w29, lsr #18 920 34: 2a4b264d orr w13, w18, w11, lsr #9 921 38: 4a523ca5 eor w5, w5, w18, lsr #15 922 3c: 6a9b6ae2 ands w2, w23, w27, asr #26 923 40: 8a70b79b bic x27, x28, x16, lsr #45 924 44: aaba9728 orn x8, x25, x26, asr #37 925 48: ca6dfe3d eon x29, x17, x13, lsr #63 926 4c: ea627f1c bics x28, x24, x2, lsr #31 927 50: 0aa70f53 bic w19, w26, w7, asr #3 928 54: 2aaa0f06 orn w6, w24, w10, asr #3 929 58: 4a6176a4 eon w4, w21, w1, lsr #29 930 5c: 6a604eb0 bics w16, w21, w0, lsr #19 931 60: 1105ed91 add w17, w12, #0x17b 932 64: 3100583e adds w30, w1, #0x16 933 68: 5101f8bd sub w29, w5, #0x7e 934 6c: 710f0306 subs w6, w24, #0x3c0 935 70: 9101a1a0 add x0, x13, #0x68 936 74: b10a5cc8 adds x8, x6, #0x297 937 78: d10810aa sub x10, x5, #0x204 938 7c: f10fd061 subs x1, x3, #0x3f4 939 80: 120cb166 and w6, w11, #0xfff1fff1 940 84: 321764bc orr w28, w5, #0xfffffe07 941 88: 52174681 eor w1, w20, #0x7fffe00 942 8c: 720c0247 ands w7, w18, #0x100000 943 90: 9241018e and x14, x12, #0x8000000000000000 944 94: b25a2969 orr x9, x11, #0x1ffc000000000 945 98: d278b411 eor x17, x0, #0x3fffffffffff00 946 9c: f26aad01 ands x1, x8, #0xffffffffffc00003 947 a0: 14000000 b a0 <back+0xa0> 948 a4: 17ffffd7 b 0 <back> 949 a8: 14000275 b a7c <forth> 950 ac: 94000000 bl ac <back+0xac> 951 b0: 97ffffd4 bl 0 <back> 952 b4: 94000272 bl a7c <forth> 953 b8: 3400000a cbz w10, b8 <back+0xb8> 954 bc: 34fffa2a cbz w10, 0 <back> 955 c0: 34004dea cbz w10, a7c <forth> 956 c4: 35000008 cbnz w8, c4 <back+0xc4> 957 c8: 35fff9c8 cbnz w8, 0 <back> 958 cc: 35004d88 cbnz w8, a7c <forth> 959 d0: b400000b cbz x11, d0 <back+0xd0> 960 d4: b4fff96b cbz x11, 0 <back> 961 d8: b4004d2b cbz x11, a7c <forth> 962 dc: b500001d cbnz x29, dc <back+0xdc> 963 e0: b5fff91d cbnz x29, 0 <back> 964 e4: b5004cdd cbnz x29, a7c <forth> 965 e8: 10000013 adr x19, e8 <back+0xe8> 966 ec: 10fff8b3 adr x19, 0 <back> 967 f0: 10004c73 adr x19, a7c <forth> 968 f4: 90000013 adrp x19, 0 <back> 969 f8: 36300016 tbz w22, #6, f8 <back+0xf8> 970 fc: 3637f836 tbz w22, #6, 0 <back> 971 100: 36304bf6 tbz w22, #6, a7c <forth> 972 104: 3758000c tbnz w12, #11, 104 <back+0x104> 973 108: 375ff7cc tbnz w12, #11, 0 <back> 974 10c: 37584b8c tbnz w12, #11, a7c <forth> 975 110: 128313a0 mov w0, #0xffffe762 // #-6302 976 114: 528a32c7 mov w7, #0x5196 // #20886 977 118: 7289173b movk w27, #0x48b9 978 11c: 92ab3acc mov x12, #0xffffffffa629ffff // #-1507196929 979 120: d2a0bf94 mov x20, #0x5fc0000 // #100401152 980 124: f2c285e8 movk x8, #0x142f, lsl #32 981 128: 9358722f sbfx x15, x17, #24, #5 982 12c: 330e652f bfxil w15, w9, #14, #12 983 130: 53067f3b lsr w27, w25, #6 984 134: 93577c53 sbfx x19, x2, #23, #9 985 138: b34a1aac bfi x12, x21, #54, #7 986 13c: d35a4016 ubfiz x22, x0, #38, #17 987 140: 13946c63 extr w3, w3, w20, #27 988 144: 93c3dbc8 extr x8, x30, x3, #54 989 148: 54000000 b.eq 148 <back+0x148> // b.none 990 14c: 54fff5a0 b.eq 0 <back> // b.none 991 150: 54004960 b.eq a7c <forth> // b.none 992 154: 54000001 b.ne 154 <back+0x154> // b.any 993 158: 54fff541 b.ne 0 <back> // b.any 994 15c: 54004901 b.ne a7c <forth> // b.any 995 160: 54000002 b.cs 160 <back+0x160> // b.hs, b.nlast 996 164: 54fff4e2 b.cs 0 <back> // b.hs, b.nlast 997 168: 540048a2 b.cs a7c <forth> // b.hs, b.nlast 998 16c: 54000002 b.cs 16c <back+0x16c> // b.hs, b.nlast 999 170: 54fff482 b.cs 0 <back> // b.hs, b.nlast 1000 174: 54004842 b.cs a7c <forth> // b.hs, b.nlast 1001 178: 54000003 b.cc 178 <back+0x178> // b.lo, b.ul, b.last 1002 17c: 54fff423 b.cc 0 <back> // b.lo, b.ul, b.last 1003 180: 540047e3 b.cc a7c <forth> // b.lo, b.ul, b.last 1004 184: 54000003 b.cc 184 <back+0x184> // b.lo, b.ul, b.last 1005 188: 54fff3c3 b.cc 0 <back> // b.lo, b.ul, b.last 1006 18c: 54004783 b.cc a7c <forth> // b.lo, b.ul, b.last 1007 190: 54000004 b.mi 190 <back+0x190> // b.first 1008 194: 54fff364 b.mi 0 <back> // b.first 1009 198: 54004724 b.mi a7c <forth> // b.first 1010 19c: 54000005 b.pl 19c <back+0x19c> // b.nfrst 1011 1a0: 54fff305 b.pl 0 <back> // b.nfrst 1012 1a4: 540046c5 b.pl a7c <forth> // b.nfrst 1013 1a8: 54000006 b.vs 1a8 <back+0x1a8> 1014 1ac: 54fff2a6 b.vs 0 <back> 1015 1b0: 54004666 b.vs a7c <forth> 1016 1b4: 54000007 b.vc 1b4 <back+0x1b4> 1017 1b8: 54fff247 b.vc 0 <back> 1018 1bc: 54004607 b.vc a7c <forth> 1019 1c0: 54000008 b.hi 1c0 <back+0x1c0> // b.pmore 1020 1c4: 54fff1e8 b.hi 0 <back> // b.pmore 1021 1c8: 540045a8 b.hi a7c <forth> // b.pmore 1022 1cc: 54000009 b.ls 1cc <back+0x1cc> // b.plast 1023 1d0: 54fff189 b.ls 0 <back> // b.plast 1024 1d4: 54004549 b.ls a7c <forth> // b.plast 1025 1d8: 5400000a b.ge 1d8 <back+0x1d8> // b.tcont 1026 1dc: 54fff12a b.ge 0 <back> // b.tcont 1027 1e0: 540044ea b.ge a7c <forth> // b.tcont 1028 1e4: 5400000b b.lt 1e4 <back+0x1e4> // b.tstop 1029 1e8: 54fff0cb b.lt 0 <back> // b.tstop 1030 1ec: 5400448b b.lt a7c <forth> // b.tstop 1031 1f0: 5400000c b.gt 1f0 <back+0x1f0> 1032 1f4: 54fff06c b.gt 0 <back> 1033 1f8: 5400442c b.gt a7c <forth> 1034 1fc: 5400000d b.le 1fc <back+0x1fc> 1035 200: 54fff00d b.le 0 <back> 1036 204: 540043cd b.le a7c <forth> 1037 208: 5400000e b.al 208 <back+0x208> 1038 20c: 54ffefae b.al 0 <back> 1039 210: 5400436e b.al a7c <forth> 1040 214: 5400000f b.nv 214 <back+0x214> 1041 218: 54ffef4f b.nv 0 <back> 1042 21c: 5400430f b.nv a7c <forth> 1043 220: d40658e1 svc #0x32c7 1044 224: d4014d22 hvc #0xa69 1045 228: d4046543 smc #0x232a 1046 22c: d4273f60 brk #0x39fb 1047 230: d44cad80 hlt #0x656c 1048 234: d503201f nop 1049 238: d69f03e0 eret 1050 23c: d6bf03e0 drps 1051 240: d5033fdf isb 1052 244: d5033e9f dsb st 1053 248: d50332bf dmb oshst 1054 24c: d61f0200 br x16 1055 250: d63f0280 blr x20 1056 254: c80a7d1b stxr w10, x27, [x8] 1057 258: c800fea1 stlxr w0, x1, [x21] 1058 25c: c85f7fb1 ldxr x17, [x29] 1059 260: c85fff9d ldaxr x29, [x28] 1060 264: c89ffee1 stlr x1, [x23] 1061 268: c8dffe95 ldar x21, [x20] 1062 26c: 88167e7b stxr w22, w27, [x19] 1063 270: 880bfcd0 stlxr w11, w16, [x6] 1064 274: 885f7c12 ldxr w18, [x0] 1065 278: 885ffd44 ldaxr w4, [x10] 1066 27c: 889ffed8 stlr w24, [x22] 1067 280: 88dffe6a ldar w10, [x19] 1068 284: 48017fc5 stxrh w1, w5, [x30] 1069 288: 4808fe2c stlxrh w8, w12, [x17] 1070 28c: 485f7dc9 ldxrh w9, [x14] 1071 290: 485ffc27 ldaxrh w7, [x1] 1072 294: 489ffe05 stlrh w5, [x16] 1073 298: 48dffd82 ldarh w2, [x12] 1074 29c: 080a7c6c stxrb w10, w12, [x3] 1075 2a0: 081cff4e stlxrb w28, w14, [x26] 1076 2a4: 085f7d5e ldxrb w30, [x10] 1077 2a8: 085ffeae ldaxrb w14, [x21] 1078 2ac: 089ffd2d stlrb w13, [x9] 1079 2b0: 08dfff76 ldarb w22, [x27] 1080 2b4: c87f4d7c ldxp x28, x19, [x11] 1081 2b8: c87fcc5e ldaxp x30, x19, [x2] 1082 2bc: c8220417 stxp w2, x23, x1, [x0] 1083 2c0: c82cb5f0 stlxp w12, x16, x13, [x15] 1084 2c4: 887f55b2 ldxp w18, w21, [x13] 1085 2c8: 887ff90b ldaxp w11, w30, [x8] 1086 2cc: 88382c2d stxp w24, w13, w11, [x1] 1087 2d0: 883aedb5 stlxp w26, w21, w27, [x13] 1088 2d4: f819928b stur x11, [x20, #-103] 1089 2d8: b803e21c stur w28, [x16, #62] 1090 2dc: 381f713b sturb w27, [x9, #-9] 1091 2e0: 781ce322 sturh w2, [x25, #-50] 1092 2e4: f850f044 ldur x4, [x2, #-241] 1093 2e8: b85e129e ldur w30, [x20, #-31] 1094 2ec: 385e92f2 ldurb w18, [x23, #-23] 1095 2f0: 785ff35d ldurh w29, [x26, #-1] 1096 2f4: 39801921 ldrsb x1, [x9, #6] 1097 2f8: 7881318b ldursh x11, [x12, #19] 1098 2fc: 78dce02b ldursh w11, [x1, #-50] 1099 300: b8829313 ldursw x19, [x24, #41] 1100 304: fc45f318 ldur d24, [x24, #95] 1101 308: bc5d50af ldur s15, [x5, #-43] 1102 30c: fc001375 stur d21, [x27, #1] 1103 310: bc1951b7 stur s23, [x13, #-107] 1104 314: f8008ec2 str x2, [x22, #8]! 1105 318: b8181d66 str w6, [x11, #-127]! 1106 31c: 381e0e83 strb w3, [x20, #-32]! 1107 320: 7801dd53 strh w19, [x10, #29]! 1108 324: f85dfca7 ldr x7, [x5, #-33]! 1109 328: b8588ef1 ldr w17, [x23, #-120]! 1110 32c: 385feecc ldrb w12, [x22, #-2]! 1111 330: 785d3d91 ldrh w17, [x12, #-45]! 1112 334: 389f3ea4 ldrsb x4, [x21, #-13]! 1113 338: 789d3dd7 ldrsh x23, [x14, #-45]! 1114 33c: 78c03e68 ldrsh w8, [x19, #3]! 1115 340: b8987fc7 ldrsw x7, [x30, #-121]! 1116 344: fc5e5d07 ldr d7, [x8, #-27]! 1117 348: bc5b7f93 ldr s19, [x28, #-73]! 1118 34c: fc170d92 str d18, [x12, #-144]! 1119 350: bc1dac81 str s1, [x4, #-38]! 1120 354: f8109522 str x2, [x9], #-247 1121 358: b8181755 str w21, [x26], #-127 1122 35c: 381e56db strb w27, [x22], #-27 1123 360: 781cc5b9 strh w25, [x13], #-52 1124 364: f85e1585 ldr x5, [x12], #-31 1125 368: b85f542a ldr w10, [x1], #-11 1126 36c: 3840d5d5 ldrb w21, [x14], #13 1127 370: 785c04de ldrh w30, [x6], #-64 1128 374: 389e458a ldrsb x10, [x12], #-28 1129 378: 789f2409 ldrsh x9, [x0], #-14 1130 37c: 78dc4741 ldrsh w1, [x26], #-60 1131 380: b898f72d ldrsw x13, [x25], #-113 1132 384: fc50f45c ldr d28, [x2], #-241 1133 388: bc5e8530 ldr s16, [x9], #-24 1134 38c: fc126514 str d20, [x8], #-218 1135 390: bc1fc6d5 str s21, [x22], #-4 1136 394: f826ca85 str x5, [x20, w6, sxtw] 1137 398: b831fb22 str w2, [x25, x17, sxtx #2] 1138 39c: 3838faea strb w10, [x23, x24, sxtx #0] 1139 3a0: 78336a46 strh w6, [x18, x19] 1140 3a4: f8747a95 ldr x21, [x20, x20, lsl #3] 1141 3a8: b8786b36 ldr w22, [x25, x24] 1142 3ac: 38685a93 ldrb w19, [x20, w8, uxtw #0] 1143 3b0: 78617806 ldrh w6, [x0, x1, lsl #1] 1144 3b4: 38ab79b0 ldrsb x16, [x13, x11, lsl #0] 1145 3b8: 78b54ada ldrsh x26, [x22, w21, uxtw] 1146 3bc: 78f659e5 ldrsh w5, [x15, w22, uxtw #1] 1147 3c0: b8b56b12 ldrsw x18, [x24, x21] 1148 3c4: fc7868e7 ldr d7, [x7, x24] 1149 3c8: bc76f97e ldr s30, [x11, x22, sxtx #2] 1150 3cc: fc316af6 str d22, [x23, x17] 1151 3d0: bc35c83e str s30, [x1, w21, sxtw] 1152 3d4: f91963ca str x10, [x30, #12992] 1153 3d8: b9190b93 str w19, [x28, #6408] 1154 3dc: 3918b15d strb w29, [x10, #1580] 1155 3e0: 7918c9c5 strh w5, [x14, #3172] 1156 3e4: f959b0a8 ldr x8, [x5, #13152] 1157 3e8: b95fd9b8 ldr w24, [x13, #8152] 1158 3ec: 395dc74c ldrb w12, [x26, #1905] 1159 3f0: 795ae66f ldrh w15, [x19, #3442] 1160 3f4: 39993ecd ldrsb x13, [x22, #1615] 1161 3f8: 799edde7 ldrsh x7, [x15, #3950] 1162 3fc: 79dc0378 ldrsh w24, [x27, #3584] 1163 400: b99a0660 ldrsw x0, [x19, #6660] 1164 404: fd5b0dc1 ldr d1, [x14, #13848] 1165 408: bd5c3f92 ldr s18, [x28, #7228] 1166 40c: fd1a4599 str d25, [x12, #13448] 1167 410: bd196039 str s25, [x1, #6496] 1168 414: 58003351 ldr x17, a7c <forth> 1169 418: 18ffdf47 ldr w7, 0 <back> 1170 41c: f89811c0 prfum pldl1keep, [x14, #-127] 1171 420: d8ffdf00 prfm pldl1keep, 0 <back> 1172 424: f8b66800 prfm pldl1keep, [x0, x22] 1173 428: f99daee0 prfm pldl1keep, [x23, #15192] 1174 42c: 1a0c0311 adc w17, w24, w12 1175 430: 3a050300 adcs w0, w24, w5 1176 434: 5a03016c sbc w12, w11, w3 1177 438: 7a1300aa sbcs w10, w5, w19 1178 43c: 9a0e0014 adc x20, x0, x14 1179 440: ba0f0371 adcs x17, x27, x15 1180 444: da1a0022 sbc x2, x1, x26 1181 448: fa080358 sbcs x24, x26, x8 1182 44c: 0b39e854 add w20, w2, w25, sxtx #2 1183 450: 2b3c4c2e adds w14, w1, w28, uxtw #3 1184 454: cb242d61 sub x1, x11, w4, uxth #3 1185 458: 6b33e785 subs w5, w28, w19, sxtx #1 1186 45c: 8b2eb3b3 add x19, x29, w14, sxth #4 1187 460: ab2824e1 adds x1, x7, w8, uxth #1 1188 464: cb2e3367 sub x7, x27, w14, uxth #4 1189 468: eb3c6411 subs x17, x0, x28, uxtx #1 1190 46c: 3a5eb308 ccmn w24, w30, #0x8, lt // lt = tstop 1191 470: 7a58702c ccmp w1, w24, #0xc, vc 1192 474: ba4b428e ccmn x20, x11, #0xe, mi // mi = first 1193 478: fa476148 ccmp x10, x7, #0x8, vs 1194 47c: 3a5e484a ccmn w2, #0x1e, #0xa, mi // mi = first 1195 480: 7a4749a7 ccmp w13, #0x7, #0x7, mi // mi = first 1196 484: ba528986 ccmn x12, #0x12, #0x6, hi // hi = pmore 1197 488: fa4bdb2e ccmp x25, #0xb, #0xe, le 1198 48c: 1a8e2240 csel w0, w18, w14, cs // cs = hs, nlast 1199 490: 1a98d521 csinc w1, w9, w24, le 1200 494: 5a819363 csinv w3, w27, w1, ls // ls = plast 1201 498: 5a9a45a0 csneg w0, w13, w26, mi // mi = first 1202 49c: 9a9222dc csel x28, x22, x18, cs // cs = hs, nlast 1203 4a0: 9a92d58a csinc x10, x12, x18, le 1204 4a4: da9c31e8 csinv x8, x15, x28, cc // cc = lo, ul, last 1205 4a8: da93a6f3 csneg x19, x23, x19, ge // ge = tcont 1206 4ac: 5ac003a6 rbit w6, w29 1207 4b0: 5ac00645 rev16 w5, w18 1208 4b4: 5ac00a69 rev w9, w19 1209 4b8: 5ac011a9 clz w9, w13 1210 4bc: 5ac01515 cls w21, w8 1211 4c0: dac00156 rbit x22, x10 1212 4c4: dac00664 rev16 x4, x19 1213 4c8: dac009a5 rev32 x5, x13 1214 4cc: dac00c4c rev x12, x2 1215 4d0: dac012b6 clz x22, x21 1216 4d4: dac01618 cls x24, x16 1217 4d8: 1ac608b1 udiv w17, w5, w6 1218 4dc: 1ad90e07 sdiv w7, w16, w25 1219 4e0: 1ad6236b lsl w11, w27, w22 1220 4e4: 1ac32556 lsr w22, w10, w3 1221 4e8: 1acc2b5d asr w29, w26, w12 1222 4ec: 1aca2f7a ror w26, w27, w10 1223 4f0: 9ad5094f udiv x15, x10, x21 1224 4f4: 9ad70fdc sdiv x28, x30, x23 1225 4f8: 9ade2369 lsl x9, x27, x30 1226 4fc: 9acf27aa lsr x10, x29, x15 1227 500: 9ad92bdd asr x29, x30, x25 1228 504: 9ac02c95 ror x21, x4, x0 1229 508: 9bdd7eb2 umulh x18, x21, x29 1230 50c: 9b547eb0 smulh x16, x21, x20 1231 510: 1b1e0e66 madd w6, w19, w30, w3 1232 514: 1b0be275 msub w21, w19, w11, w24 1233 518: 9b193b60 madd x0, x27, x25, x14 1234 51c: 9b129dc3 msub x3, x14, x18, x7 1235 520: 9b3c470f smaddl x15, w24, w28, x17 1236 524: 9b3af059 smsubl x25, w2, w26, x28 1237 528: 9bba6f25 umaddl x5, w25, w26, x27 1238 52c: 9ba6d650 umsubl x16, w18, w6, x21 1239 530: 1e24080c fmul s12, s0, s4 1240 534: 1e311b6c fdiv s12, s27, s17 1241 538: 1e222b9c fadd s28, s28, s2 1242 53c: 1e2f3952 fsub s18, s10, s15 1243 540: 1e2309ce fmul s14, s14, s3 1244 544: 1e7309f9 fmul d25, d15, d19 1245 548: 1e7018ae fdiv d14, d5, d16 1246 54c: 1e792b44 fadd d4, d26, d25 1247 550: 1e623844 fsub d4, d2, d2 1248 554: 1e710bac fmul d12, d29, d17 1249 558: 1f0310e8 fmadd s8, s7, s3, s4 1250 55c: 1f1ae499 fmsub s25, s4, s26, s25 1251 560: 1f206a24 fnmadd s4, s17, s0, s26 1252 564: 1f2f56f1 fnmadd s17, s23, s15, s21 1253 568: 1f5b2a3c fmadd d28, d17, d27, d10 1254 56c: 1f47e403 fmsub d3, d0, d7, d25 1255 570: 1f6f74c9 fnmadd d9, d6, d15, d29 1256 574: 1f62454f fnmadd d15, d10, d2, d17 1257 578: 1e204167 fmov s7, s11 1258 57c: 1e20c2eb fabs s11, s23 1259 580: 1e2143a7 fneg s7, s29 1260 584: 1e21c1d7 fsqrt s23, s14 1261 588: 1e22c17b fcvt d27, s11 1262 58c: 1e60408b fmov d11, d4 1263 590: 1e60c198 fabs d24, d12 1264 594: 1e6141cf fneg d15, d14 1265 598: 1e61c174 fsqrt d20, d11 1266 59c: 1e6241bc fcvt s28, d13 1267 5a0: 1e38018b fcvtzs w11, s12 1268 5a4: 9e3803d7 fcvtzs x23, s30 1269 5a8: 1e7801da fcvtzs w26, d14 1270 5ac: 9e7801a9 fcvtzs x9, d13 1271 5b0: 1e2200ea scvtf s10, w7 1272 5b4: 9e2203a5 scvtf s5, x29 1273 5b8: 1e62006f scvtf d15, w3 1274 5bc: 9e62018b scvtf d11, x12 1275 5c0: 1e2603cf fmov w15, s30 1276 5c4: 9e66023e fmov x30, d17 1277 5c8: 1e270293 fmov s19, w20 1278 5cc: 9e6701ef fmov d15, x15 1279 5d0: 1e352120 fcmp s9, s21 1280 5d4: 1e692040 fcmp d2, d9 1281 5d8: 1e202368 fcmp s27, #0.0 1282 5dc: 1e6020e8 fcmp d7, #0.0 1283 5e0: 2910443e stp w30, w17, [x1, #128] 1284 5e4: 29642866 ldp w6, w10, [x3, #-224] 1285 5e8: 69461c2b ldpsw x11, x7, [x1, #48] 1286 5ec: a9390e40 stp x0, x3, [x18, #-112] 1287 5f0: a94758c6 ldp x6, x22, [x6, #112] 1288 5f4: 29a0685b stp w27, w26, [x2, #-256]! 1289 5f8: 29e87167 ldp w7, w28, [x11, #-192]! 1290 5fc: 69c82eed ldpsw x13, x11, [x23, #64]! 1291 600: a9bf4aa8 stp x8, x18, [x21, #-16]! 1292 604: a9c44e54 ldp x20, x19, [x18, #64]! 1293 608: 28a4591d stp w29, w22, [x8], #-224 1294 60c: 28c25173 ldp w19, w20, [x11], #16 1295 610: 68fc19f4 ldpsw x20, x6, [x15], #-32 1296 614: a8b37063 stp x3, x28, [x3], #-208 1297 618: a8c6394e ldp x14, x14, [x10], #96 1298 61c: 2834454b stnp w11, w17, [x10, #-96] 1299 620: 28481dc7 ldnp w7, w7, [x14, #64] 1300 624: a8075800 stnp x0, x22, [x0, #112] 1301 628: a87a35b7 ldnp x23, x13, [x13, #-96] 1302 62c: 0c4070e2 ld1 {v2.8b}, [x7] 1303 630: 4cdfa12e ld1 {v14.16b, v15.16b}, [x9], #32 1304 634: 0ccc6eb0 ld1 {v16.1d-v18.1d}, [x21], x12 1305 638: 4cdf26d1 ld1 {v17.8h-v20.8h}, [x22], #64 1306 63c: 0d40c0cd ld1r {v13.8b}, [x6] 1307 640: 4ddfca8a ld1r {v10.4s}, [x20], #4 1308 644: 0dc5cea4 ld1r {v4.1d}, [x21], x5 1309 648: 4c408ee6 ld2 {v6.2d, v7.2d}, [x23] 1310 64c: 0cdf874f ld2 {v15.4h, v16.4h}, [x26], #16 1311 650: 4d60c177 ld2r {v23.16b, v24.16b}, [x11] 1312 654: 0dffcae8 ld2r {v8.2s, v9.2s}, [x23], #8 1313 658: 4de6cf33 ld2r {v19.2d, v20.2d}, [x25], x6 1314 65c: 4cc14a3d ld3 {v29.4s-v31.4s}, [x17], x1 1315 660: 0c404af8 ld3 {v24.2s-v26.2s}, [x23] 1316 664: 4d40e4aa ld3r {v10.8h-v12.8h}, [x5] 1317 668: 4ddfe952 ld3r {v18.4s-v20.4s}, [x10], #12 1318 66c: 0dd0edec ld3r {v12.1d-v14.1d}, [x15], x16 1319 670: 4cdf0659 ld4 {v25.8h-v28.8h}, [x18], #64 1320 674: 0cc803c1 ld4 {v1.8b-v4.8b}, [x30], x8 1321 678: 0d60e250 ld4r {v16.8b-v19.8b}, [x18] 1322 67c: 0dffe599 ld4r {v25.4h-v28.4h}, [x12], #8 1323 680: 0de8ea7a ld4r {v26.2s-v29.2s}, [x19], x8 1324 684: 0e31bad5 addv b21, v22.8b 1325 688: 4e31b8a4 addv b4, v5.16b 1326 68c: 0e71ba72 addv h18, v19.4h 1327 690: 4e71bb38 addv h24, v25.8h 1328 694: 4eb1b9ac addv s12, v13.4s 1329 698: 0e30aa72 smaxv b18, v19.8b 1330 69c: 4e30a907 smaxv b7, v8.16b 1331 6a0: 0e70a949 smaxv h9, v10.4h 1332 6a4: 4e70ab59 smaxv h25, v26.8h 1333 6a8: 4eb0aa0f smaxv s15, v16.4s 1334 6ac: 6e30f9cd fmaxv s13, v14.4s 1335 6b0: 0e31a883 sminv b3, v4.8b 1336 6b4: 4e31a98b sminv b11, v12.16b 1337 6b8: 0e71aa30 sminv h16, v17.4h 1338 6bc: 4e71a907 sminv h7, v8.8h 1339 6c0: 4eb1ab59 sminv s25, v26.4s 1340 6c4: 6eb0f98b fminv s11, v12.4s 1341 6c8: 0e20b907 abs v7.8b, v8.8b 1342 6cc: 4e20b949 abs v9.16b, v10.16b 1343 6d0: 0e60bb59 abs v25.4h, v26.4h 1344 6d4: 4e60bbbc abs v28.8h, v29.8h 1345 6d8: 0ea0bbdd abs v29.2s, v30.2s 1346 6dc: 4ea0b820 abs v0.4s, v1.4s 1347 6e0: 4ee0bb17 abs v23.2d, v24.2d 1348 6e4: 0ea0fa30 fabs v16.2s, v17.2s 1349 6e8: 4ea0f883 fabs v3.4s, v4.4s 1350 6ec: 4ee0f907 fabs v7.2d, v8.2d 1351 6f0: 2ea0f928 fneg v8.2s, v9.2s 1352 6f4: 6ea0f9ac fneg v12.4s, v13.4s 1353 6f8: 6ee0f9ee fneg v14.2d, v15.2d 1354 6fc: 2ea1fbdd fsqrt v29.2s, v30.2s 1355 700: 6ea1f841 fsqrt v1.4s, v2.4s 1356 704: 6ee1fad5 fsqrt v21.2d, v22.2d 1357 708: 2e205b7a mvn v26.8b, v27.8b 1358 70c: 6e20598b mvn v11.16b, v12.16b 1359 710: 0e291d07 and v7.8b, v8.8b, v9.8b 1360 714: 4e281ce6 and v6.16b, v7.16b, v8.16b 1361 718: 0eab1d49 orr v9.8b, v10.8b, v11.8b 1362 71c: 4ea61ca4 orr v4.16b, v5.16b, v6.16b 1363 720: 2e331e51 eor v17.8b, v18.8b, v19.8b 1364 724: 6e291d07 eor v7.16b, v8.16b, v9.16b 1365 728: 0e228420 add v0.8b, v1.8b, v2.8b 1366 72c: 4e298507 add v7.16b, v8.16b, v9.16b 1367 730: 0e7b8759 add v25.4h, v26.4h, v27.4h 1368 734: 4e6e85ac add v12.8h, v13.8h, v14.8h 1369 738: 0ebd879b add v27.2s, v28.2s, v29.2s 1370 73c: 4ebf87dd add v29.4s, v30.4s, v31.4s 1371 740: 4ee98507 add v7.2d, v8.2d, v9.2d 1372 744: 0e33d651 fadd v17.2s, v18.2s, v19.2s 1373 748: 4e3dd79b fadd v27.4s, v28.4s, v29.4s 1374 74c: 4e74d672 fadd v18.2d, v19.2d, v20.2d 1375 750: 2e2784c5 sub v5.8b, v6.8b, v7.8b 1376 754: 6e298507 sub v7.16b, v8.16b, v9.16b 1377 758: 2e6087fe sub v30.4h, v31.4h, v0.4h 1378 75c: 6e6b8549 sub v9.8h, v10.8h, v11.8h 1379 760: 2ebc877a sub v26.2s, v27.2s, v28.2s 1380 764: 6eba8738 sub v24.4s, v25.4s, v26.4s 1381 768: 6ef98717 sub v23.2d, v24.2d, v25.2d 1382 76c: 0eb8d6f6 fsub v22.2s, v23.2s, v24.2s 1383 770: 4ebad738 fsub v24.4s, v25.4s, v26.4s 1384 774: 4efcd77a fsub v26.2d, v27.2d, v28.2d 1385 778: 0e239c41 mul v1.8b, v2.8b, v3.8b 1386 77c: 4e279cc5 mul v5.16b, v6.16b, v7.16b 1387 780: 0e719e0f mul v15.4h, v16.4h, v17.4h 1388 784: 4e689ce6 mul v6.8h, v7.8h, v8.8h 1389 788: 0eb29e30 mul v16.2s, v17.2s, v18.2s 1390 78c: 4eb19e0f mul v15.4s, v16.4s, v17.4s 1391 790: 2e25dc83 fmul v3.2s, v4.2s, v5.2s 1392 794: 6e24dc62 fmul v2.4s, v3.4s, v4.4s 1393 798: 6e62dc20 fmul v0.2d, v1.2d, v2.2d 1394 79c: 0e7b9759 mla v25.4h, v26.4h, v27.4h 1395 7a0: 4e649462 mla v2.8h, v3.8h, v4.8h 1396 7a4: 0ebf97dd mla v29.2s, v30.2s, v31.2s 1397 7a8: 4ea097fe mla v30.4s, v31.4s, v0.4s 1398 7ac: 0e39cf17 fmla v23.2s, v24.2s, v25.2s 1399 7b0: 4e2fcdcd fmla v13.4s, v14.4s, v15.4s 1400 7b4: 4e6acd28 fmla v8.2d, v9.2d, v10.2d 1401 7b8: 2e6e95ac mls v12.4h, v13.4h, v14.4h 1402 7bc: 6e6c956a mls v10.8h, v11.8h, v12.8h 1403 7c0: 2eae95ac mls v12.2s, v13.2s, v14.2s 1404 7c4: 6eb896f6 mls v22.4s, v23.4s, v24.4s 1405 7c8: 0ebdcf9b fmls v27.2s, v28.2s, v29.2s 1406 7cc: 4ea6cca4 fmls v4.4s, v5.4s, v6.4s 1407 7d0: 4ee9cd07 fmls v7.2d, v8.2d, v9.2d 1408 7d4: 2e28fce6 fdiv v6.2s, v7.2s, v8.2s 1409 7d8: 6e23fc41 fdiv v1.4s, v2.4s, v3.4s 1410 7dc: 6e7cff7a fdiv v26.2d, v27.2d, v28.2d 1411 7e0: 0e31660f smax v15.8b, v16.8b, v17.8b 1412 7e4: 4e246462 smax v2.16b, v3.16b, v4.16b 1413 7e8: 0e6f65cd smax v13.4h, v14.4h, v15.4h 1414 7ec: 4e6f65cd smax v13.8h, v14.8h, v15.8h 1415 7f0: 0eba6738 smax v24.2s, v25.2s, v26.2s 1416 7f4: 4eb96717 smax v23.4s, v24.4s, v25.4s 1417 7f8: 0e26f4a4 fmax v4.2s, v5.2s, v6.2s 1418 7fc: 4e35f693 fmax v19.4s, v20.4s, v21.4s 1419 800: 4e71f60f fmax v15.2d, v16.2d, v17.2d 1420 804: 0e226c20 smin v0.8b, v1.8b, v2.8b 1421 808: 4e266ca4 smin v4.16b, v5.16b, v6.16b 1422 80c: 0e766eb4 smin v20.4h, v21.4h, v22.4h 1423 810: 4e6d6d8b smin v11.8h, v12.8h, v13.8h 1424 814: 0ebf6fdd smin v29.2s, v30.2s, v31.2s 1425 818: 4eb16e0f smin v15.4s, v16.4s, v17.4s 1426 81c: 0eb7f6d5 fmin v21.2s, v22.2s, v23.2s 1427 820: 4ea6f4a4 fmin v4.4s, v5.4s, v6.4s 1428 824: 4ef0f5ee fmin v14.2d, v15.2d, v16.2d 1429 828: 2e388ef6 cmeq v22.8b, v23.8b, v24.8b 1430 82c: 6e3b8f59 cmeq v25.16b, v26.16b, v27.16b 1431 830: 2e688ce6 cmeq v6.4h, v7.4h, v8.4h 1432 834: 6e6e8dac cmeq v12.8h, v13.8h, v14.8h 1433 838: 2eb08dee cmeq v14.2s, v15.2s, v16.2s 1434 83c: 6eaf8dcd cmeq v13.4s, v14.4s, v15.4s 1435 840: 6ef08dee cmeq v14.2d, v15.2d, v16.2d 1436 844: 0e2be549 fcmeq v9.2s, v10.2s, v11.2s 1437 848: 4e3be759 fcmeq v25.4s, v26.4s, v27.4s 1438 84c: 4e7ee7bc fcmeq v28.2d, v29.2d, v30.2d 1439 850: 0e2c356a cmgt v10.8b, v11.8b, v12.8b 1440 854: 4e353693 cmgt v19.16b, v20.16b, v21.16b 1441 858: 0e6d358b cmgt v11.4h, v12.4h, v13.4h 1442 85c: 4e733651 cmgt v17.8h, v18.8h, v19.8h 1443 860: 0eb736d5 cmgt v21.2s, v22.2s, v23.2s 1444 864: 4eb1360f cmgt v15.4s, v16.4s, v17.4s 1445 868: 4ef636b4 cmgt v20.2d, v21.2d, v22.2d 1446 86c: 2eb9e717 fcmgt v23.2s, v24.2s, v25.2s 1447 870: 6ebce77a fcmgt v26.4s, v27.4s, v28.4s 1448 874: 6ee7e4c5 fcmgt v5.2d, v6.2d, v7.2d 1449 878: 0e283ce6 cmge v6.8b, v7.8b, v8.8b 1450 87c: 4e313e0f cmge v15.16b, v16.16b, v17.16b 1451 880: 0e713e0f cmge v15.4h, v16.4h, v17.4h 1452 884: 4e7b3f59 cmge v25.8h, v26.8h, v27.8h 1453 888: 0eb23e30 cmge v16.2s, v17.2s, v18.2s 1454 88c: 4ebd3f9b cmge v27.4s, v28.4s, v29.4s 1455 890: 4efa3f38 cmge v24.2d, v25.2d, v26.2d 1456 894: 2e31e60f fcmge v15.2s, v16.2s, v17.2s 1457 898: 6e3be759 fcmge v25.4s, v26.4s, v27.4s 1458 89c: 6e70e5ee fcmge v14.2d, v15.2d, v16.2d 1459 8a0: ba5fd3e3 ccmn xzr, xzr, #0x3, le 1460 8a4: 3a5f03e5 ccmn wzr, wzr, #0x5, eq // eq = none 1461 8a8: fa411be4 ccmp xzr, #0x1, #0x4, ne // ne = any 1462 8ac: 7a42cbe2 ccmp wzr, #0x2, #0x2, gt 1463 8b0: 93df03ff ror xzr, xzr, #0 1464 8b4: c820ffff stlxp w0, xzr, xzr, [sp] 1465 8b8: 8822fc7f stlxp w2, wzr, wzr, [x3] 1466 8bc: c8247cbf stxp w4, xzr, xzr, [x5] 1467 8c0: 88267fff stxp w6, wzr, wzr, [sp] 1468 8c4: 4e010fe0 dup v0.16b, wzr 1469 8c8: 4e081fe1 mov v1.d[0], xzr 1470 8cc: 4e0c1fe1 mov v1.s[1], wzr 1471 8d0: 4e0a1fe1 mov v1.h[2], wzr 1472 8d4: 4e071fe1 mov v1.b[3], wzr 1473 8d8: 4cc0ac3f ld1 {v31.2d, v0.2d}, [x1], x0 1474 8dc: 1e601000 fmov d0, #2.000000000000000000e+00 1475 8e0: 1e603000 fmov d0, #2.125000000000000000e+00 1476 8e4: 1e621000 fmov d0, #4.000000000000000000e+00 1477 8e8: 1e623000 fmov d0, #4.250000000000000000e+00 1478 8ec: 1e641000 fmov d0, #8.000000000000000000e+00 1479 8f0: 1e643000 fmov d0, #8.500000000000000000e+00 1480 8f4: 1e661000 fmov d0, #1.600000000000000000e+01 1481 8f8: 1e663000 fmov d0, #1.700000000000000000e+01 1482 8fc: 1e681000 fmov d0, #1.250000000000000000e-01 1483 900: 1e683000 fmov d0, #1.328125000000000000e-01 1484 904: 1e6a1000 fmov d0, #2.500000000000000000e-01 1485 908: 1e6a3000 fmov d0, #2.656250000000000000e-01 1486 90c: 1e6c1000 fmov d0, #5.000000000000000000e-01 1487 910: 1e6c3000 fmov d0, #5.312500000000000000e-01 1488 914: 1e6e1000 fmov d0, #1.000000000000000000e+00 1489 918: 1e6e3000 fmov d0, #1.062500000000000000e+00 1490 91c: 1e701000 fmov d0, #-2.000000000000000000e+00 1491 920: 1e703000 fmov d0, #-2.125000000000000000e+00 1492 924: 1e721000 fmov d0, #-4.000000000000000000e+00 1493 928: 1e723000 fmov d0, #-4.250000000000000000e+00 1494 92c: 1e741000 fmov d0, #-8.000000000000000000e+00 1495 930: 1e743000 fmov d0, #-8.500000000000000000e+00 1496 934: 1e761000 fmov d0, #-1.600000000000000000e+01 1497 938: 1e763000 fmov d0, #-1.700000000000000000e+01 1498 93c: 1e781000 fmov d0, #-1.250000000000000000e-01 1499 940: 1e783000 fmov d0, #-1.328125000000000000e-01 1500 944: 1e7a1000 fmov d0, #-2.500000000000000000e-01 1501 948: 1e7a3000 fmov d0, #-2.656250000000000000e-01 1502 94c: 1e7c1000 fmov d0, #-5.000000000000000000e-01 1503 950: 1e7c3000 fmov d0, #-5.312500000000000000e-01 1504 954: 1e7e1000 fmov d0, #-1.000000000000000000e+00 1505 958: 1e7e3000 fmov d0, #-1.062500000000000000e+00 1506 95c: f82a81cd swp x10, x13, [x14] 1507 960: f83402e1 ldadd x20, x1, [x23] 1508 964: f83e104e ldclr x30, x14, [x2] 1509 968: f8262103 ldeor x6, x3, [x8] 1510 96c: f8393360 ldset x25, x0, [x27] 1511 970: f83e50a5 ldsmin x30, x5, [x5] 1512 974: f83e432b ldsmax x30, x11, [x25] 1513 978: f820701f stumin x0, [x0] 1514 97c: f833635d ldumax x19, x29, [x26] 1515 980: f8a9819a swpa x9, x26, [x12] 1516 984: f8af016b ldadda x15, x11, [x11] 1517 988: f8b212d9 ldclra x18, x25, [x22] 1518 98c: f8b82220 ldeora x24, x0, [x17] 1519 990: f8ab33a6 ldseta x11, x6, [x29] 1520 994: f8a650a5 ldsmina x6, x5, [x5] 1521 998: f8b54213 ldsmaxa x21, x19, [x16] 1522 99c: f8b2737e ldumina x18, x30, [x27] 1523 9a0: f8bc6381 ldumaxa x28, x1, [x28] 1524 9a4: f8e183b4 swpal x1, x20, [x29] 1525 9a8: f8f0014d ldaddal x16, x13, [x10] 1526 9ac: f8fd127d ldclral x29, x29, [x19] 1527 9b0: f8f6208a ldeoral x22, x10, [x4] 1528 9b4: f8ff3115 ldsetal xzr, x21, [x8] 1529 9b8: f8ff5153 ldsminal xzr, x19, [x10] 1530 9bc: f8fc4322 ldsmaxal x28, x2, [x25] 1531 9c0: f8e57103 lduminal x5, x3, [x8] 1532 9c4: f8f661b3 ldumaxal x22, x19, [x13] 1533 9c8: f865831d swpl x5, x29, [x24] 1534 9cc: f875031a ldaddl x21, x26, [x24] 1535 9d0: f8631358 ldclrl x3, x24, [x26] 1536 9d4: f87722af ldeorl x23, x15, [x21] 1537 9d8: f8633118 ldsetl x3, x24, [x8] 1538 9dc: f8795214 ldsminl x25, x20, [x16] 1539 9e0: f8714022 ldsmaxl x17, x2, [x1] 1540 9e4: f8607098 lduminl x0, x24, [x4] 1541 9e8: f86363ec ldumaxl x3, x12, [sp] 1542 9ec: b83c834a swp w28, w10, [x26] 1543 9f0: b822024c ldadd w2, w12, [x18] 1544 9f4: b83f11a1 ldclr wzr, w1, [x13] 1545 9f8: b83d2260 ldeor w29, w0, [x19] 1546 9fc: b82c32d1 ldset w12, w17, [x22] 1547 a00: b82d53dc ldsmin w13, w28, [x30] 1548 a04: b83f4341 ldsmax wzr, w1, [x26] 1549 a08: b83c73c4 ldumin w28, w4, [x30] 1550 a0c: b82463c6 ldumax w4, w6, [x30] 1551 a10: b8ba8132 swpa w26, w18, [x9] 1552 a14: b8a8000c ldadda w8, w12, [x0] 1553 a18: b8b41301 ldclra w20, w1, [x24] 1554 a1c: b8a22120 ldeora w2, w0, [x9] 1555 a20: b8b8321a ldseta w24, w26, [x16] 1556 a24: b8be5143 ldsmina w30, w3, [x10] 1557 a28: b8b7408a ldsmaxa w23, w10, [x4] 1558 a2c: b8b27162 ldumina w18, w2, [x11] 1559 a30: b8a861ea ldumaxa w8, w10, [x15] 1560 a34: b8f18142 swpal w17, w2, [x10] 1561 a38: b8ec01ec ldaddal w12, w12, [x15] 1562 a3c: b8ed10e2 ldclral w13, w2, [x7] 1563 a40: b8f4221a ldeoral w20, w26, [x16] 1564 a44: b8e43082 ldsetal w4, w2, [x4] 1565 a48: b8ec52b2 ldsminal w12, w18, [x21] 1566 a4c: b8f04172 ldsmaxal w16, w18, [x11] 1567 a50: b8f57197 lduminal w21, w23, [x12] 1568 a54: b8fa6397 ldumaxal w26, w23, [x28] 1569 a58: b86e830b swpl w14, w11, [x24] 1570 a5c: b86103ec ldaddl w1, w12, [sp] 1571 a60: b86a10f0 ldclrl w10, w16, [x7] 1572 a64: b86221a3 ldeorl w2, w3, [x13] 1573 a68: b8733211 ldsetl w19, w17, [x16] 1574 a6c: b8635161 ldsminl w3, w1, [x11] 1575 a70: b87e4105 ldsmaxl w30, w5, [x8] 1576 a74: b86f73dd lduminl w15, w29, [x30] 1577 a78: b86060f4 ldumaxl w0, w20, [x7] 1578 1579 */ 1580 1581 static const unsigned int insns[] = 1582 { 1583 0x8b0d82fa, 0xcb49970c, 0xab889dfc, 0xeb9ee787, 1584 0x0b9b3ec9, 0x4b9279a3, 0x2b88474e, 0x6b8c56c0, 1585 0x8a1a51e0, 0xaa11f4ba, 0xca0281b8, 0xea918c7c, 1586 0x0a5d4a19, 0x2a4b264d, 0x4a523ca5, 0x6a9b6ae2, 1587 0x8a70b79b, 0xaaba9728, 0xca6dfe3d, 0xea627f1c, 1588 0x0aa70f53, 0x2aaa0f06, 0x4a6176a4, 0x6a604eb0, 1589 0x1105ed91, 0x3100583e, 0x5101f8bd, 0x710f0306, 1590 0x9101a1a0, 0xb10a5cc8, 0xd10810aa, 0xf10fd061, 1591 0x120cb166, 0x321764bc, 0x52174681, 0x720c0247, 1592 0x9241018e, 0xb25a2969, 0xd278b411, 0xf26aad01, 1593 0x14000000, 0x17ffffd7, 0x14000275, 0x94000000, 1594 0x97ffffd4, 0x94000272, 0x3400000a, 0x34fffa2a, 1595 0x34004dea, 0x35000008, 0x35fff9c8, 0x35004d88, 1596 0xb400000b, 0xb4fff96b, 0xb4004d2b, 0xb500001d, 1597 0xb5fff91d, 0xb5004cdd, 0x10000013, 0x10fff8b3, 1598 0x10004c73, 0x90000013, 0x36300016, 0x3637f836, 1599 0x36304bf6, 0x3758000c, 0x375ff7cc, 0x37584b8c, 1600 0x128313a0, 0x528a32c7, 0x7289173b, 0x92ab3acc, 1601 0xd2a0bf94, 0xf2c285e8, 0x9358722f, 0x330e652f, 1602 0x53067f3b, 0x93577c53, 0xb34a1aac, 0xd35a4016, 1603 0x13946c63, 0x93c3dbc8, 0x54000000, 0x54fff5a0, 1604 0x54004960, 0x54000001, 0x54fff541, 0x54004901, 1605 0x54000002, 0x54fff4e2, 0x540048a2, 0x54000002, 1606 0x54fff482, 0x54004842, 0x54000003, 0x54fff423, 1607 0x540047e3, 0x54000003, 0x54fff3c3, 0x54004783, 1608 0x54000004, 0x54fff364, 0x54004724, 0x54000005, 1609 0x54fff305, 0x540046c5, 0x54000006, 0x54fff2a6, 1610 0x54004666, 0x54000007, 0x54fff247, 0x54004607, 1611 0x54000008, 0x54fff1e8, 0x540045a8, 0x54000009, 1612 0x54fff189, 0x54004549, 0x5400000a, 0x54fff12a, 1613 0x540044ea, 0x5400000b, 0x54fff0cb, 0x5400448b, 1614 0x5400000c, 0x54fff06c, 0x5400442c, 0x5400000d, 1615 0x54fff00d, 0x540043cd, 0x5400000e, 0x54ffefae, 1616 0x5400436e, 0x5400000f, 0x54ffef4f, 0x5400430f, 1617 0xd40658e1, 0xd4014d22, 0xd4046543, 0xd4273f60, 1618 0xd44cad80, 0xd503201f, 0xd69f03e0, 0xd6bf03e0, 1619 0xd5033fdf, 0xd5033e9f, 0xd50332bf, 0xd61f0200, 1620 0xd63f0280, 0xc80a7d1b, 0xc800fea1, 0xc85f7fb1, 1621 0xc85fff9d, 0xc89ffee1, 0xc8dffe95, 0x88167e7b, 1622 0x880bfcd0, 0x885f7c12, 0x885ffd44, 0x889ffed8, 1623 0x88dffe6a, 0x48017fc5, 0x4808fe2c, 0x485f7dc9, 1624 0x485ffc27, 0x489ffe05, 0x48dffd82, 0x080a7c6c, 1625 0x081cff4e, 0x085f7d5e, 0x085ffeae, 0x089ffd2d, 1626 0x08dfff76, 0xc87f4d7c, 0xc87fcc5e, 0xc8220417, 1627 0xc82cb5f0, 0x887f55b2, 0x887ff90b, 0x88382c2d, 1628 0x883aedb5, 0xf819928b, 0xb803e21c, 0x381f713b, 1629 0x781ce322, 0xf850f044, 0xb85e129e, 0x385e92f2, 1630 0x785ff35d, 0x39801921, 0x7881318b, 0x78dce02b, 1631 0xb8829313, 0xfc45f318, 0xbc5d50af, 0xfc001375, 1632 0xbc1951b7, 0xf8008ec2, 0xb8181d66, 0x381e0e83, 1633 0x7801dd53, 0xf85dfca7, 0xb8588ef1, 0x385feecc, 1634 0x785d3d91, 0x389f3ea4, 0x789d3dd7, 0x78c03e68, 1635 0xb8987fc7, 0xfc5e5d07, 0xbc5b7f93, 0xfc170d92, 1636 0xbc1dac81, 0xf8109522, 0xb8181755, 0x381e56db, 1637 0x781cc5b9, 0xf85e1585, 0xb85f542a, 0x3840d5d5, 1638 0x785c04de, 0x389e458a, 0x789f2409, 0x78dc4741, 1639 0xb898f72d, 0xfc50f45c, 0xbc5e8530, 0xfc126514, 1640 0xbc1fc6d5, 0xf826ca85, 0xb831fb22, 0x3838faea, 1641 0x78336a46, 0xf8747a95, 0xb8786b36, 0x38685a93, 1642 0x78617806, 0x38ab79b0, 0x78b54ada, 0x78f659e5, 1643 0xb8b56b12, 0xfc7868e7, 0xbc76f97e, 0xfc316af6, 1644 0xbc35c83e, 0xf91963ca, 0xb9190b93, 0x3918b15d, 1645 0x7918c9c5, 0xf959b0a8, 0xb95fd9b8, 0x395dc74c, 1646 0x795ae66f, 0x39993ecd, 0x799edde7, 0x79dc0378, 1647 0xb99a0660, 0xfd5b0dc1, 0xbd5c3f92, 0xfd1a4599, 1648 0xbd196039, 0x58003351, 0x18ffdf47, 0xf89811c0, 1649 0xd8ffdf00, 0xf8b66800, 0xf99daee0, 0x1a0c0311, 1650 0x3a050300, 0x5a03016c, 0x7a1300aa, 0x9a0e0014, 1651 0xba0f0371, 0xda1a0022, 0xfa080358, 0x0b39e854, 1652 0x2b3c4c2e, 0xcb242d61, 0x6b33e785, 0x8b2eb3b3, 1653 0xab2824e1, 0xcb2e3367, 0xeb3c6411, 0x3a5eb308, 1654 0x7a58702c, 0xba4b428e, 0xfa476148, 0x3a5e484a, 1655 0x7a4749a7, 0xba528986, 0xfa4bdb2e, 0x1a8e2240, 1656 0x1a98d521, 0x5a819363, 0x5a9a45a0, 0x9a9222dc, 1657 0x9a92d58a, 0xda9c31e8, 0xda93a6f3, 0x5ac003a6, 1658 0x5ac00645, 0x5ac00a69, 0x5ac011a9, 0x5ac01515, 1659 0xdac00156, 0xdac00664, 0xdac009a5, 0xdac00c4c, 1660 0xdac012b6, 0xdac01618, 0x1ac608b1, 0x1ad90e07, 1661 0x1ad6236b, 0x1ac32556, 0x1acc2b5d, 0x1aca2f7a, 1662 0x9ad5094f, 0x9ad70fdc, 0x9ade2369, 0x9acf27aa, 1663 0x9ad92bdd, 0x9ac02c95, 0x9bdd7eb2, 0x9b547eb0, 1664 0x1b1e0e66, 0x1b0be275, 0x9b193b60, 0x9b129dc3, 1665 0x9b3c470f, 0x9b3af059, 0x9bba6f25, 0x9ba6d650, 1666 0x1e24080c, 0x1e311b6c, 0x1e222b9c, 0x1e2f3952, 1667 0x1e2309ce, 0x1e7309f9, 0x1e7018ae, 0x1e792b44, 1668 0x1e623844, 0x1e710bac, 0x1f0310e8, 0x1f1ae499, 1669 0x1f206a24, 0x1f2f56f1, 0x1f5b2a3c, 0x1f47e403, 1670 0x1f6f74c9, 0x1f62454f, 0x1e204167, 0x1e20c2eb, 1671 0x1e2143a7, 0x1e21c1d7, 0x1e22c17b, 0x1e60408b, 1672 0x1e60c198, 0x1e6141cf, 0x1e61c174, 0x1e6241bc, 1673 0x1e38018b, 0x9e3803d7, 0x1e7801da, 0x9e7801a9, 1674 0x1e2200ea, 0x9e2203a5, 0x1e62006f, 0x9e62018b, 1675 0x1e2603cf, 0x9e66023e, 0x1e270293, 0x9e6701ef, 1676 0x1e352120, 0x1e692040, 0x1e202368, 0x1e6020e8, 1677 0x2910443e, 0x29642866, 0x69461c2b, 0xa9390e40, 1678 0xa94758c6, 0x29a0685b, 0x29e87167, 0x69c82eed, 1679 0xa9bf4aa8, 0xa9c44e54, 0x28a4591d, 0x28c25173, 1680 0x68fc19f4, 0xa8b37063, 0xa8c6394e, 0x2834454b, 1681 0x28481dc7, 0xa8075800, 0xa87a35b7, 0x0c4070e2, 1682 0x4cdfa12e, 0x0ccc6eb0, 0x4cdf26d1, 0x0d40c0cd, 1683 0x4ddfca8a, 0x0dc5cea4, 0x4c408ee6, 0x0cdf874f, 1684 0x4d60c177, 0x0dffcae8, 0x4de6cf33, 0x4cc14a3d, 1685 0x0c404af8, 0x4d40e4aa, 0x4ddfe952, 0x0dd0edec, 1686 0x4cdf0659, 0x0cc803c1, 0x0d60e250, 0x0dffe599, 1687 0x0de8ea7a, 0x0e31bad5, 0x4e31b8a4, 0x0e71ba72, 1688 0x4e71bb38, 0x4eb1b9ac, 0x0e30aa72, 0x4e30a907, 1689 0x0e70a949, 0x4e70ab59, 0x4eb0aa0f, 0x6e30f9cd, 1690 0x0e31a883, 0x4e31a98b, 0x0e71aa30, 0x4e71a907, 1691 0x4eb1ab59, 0x6eb0f98b, 0x0e20b907, 0x4e20b949, 1692 0x0e60bb59, 0x4e60bbbc, 0x0ea0bbdd, 0x4ea0b820, 1693 0x4ee0bb17, 0x0ea0fa30, 0x4ea0f883, 0x4ee0f907, 1694 0x2ea0f928, 0x6ea0f9ac, 0x6ee0f9ee, 0x2ea1fbdd, 1695 0x6ea1f841, 0x6ee1fad5, 0x2e205b7a, 0x6e20598b, 1696 0x0e291d07, 0x4e281ce6, 0x0eab1d49, 0x4ea61ca4, 1697 0x2e331e51, 0x6e291d07, 0x0e228420, 0x4e298507, 1698 0x0e7b8759, 0x4e6e85ac, 0x0ebd879b, 0x4ebf87dd, 1699 0x4ee98507, 0x0e33d651, 0x4e3dd79b, 0x4e74d672, 1700 0x2e2784c5, 0x6e298507, 0x2e6087fe, 0x6e6b8549, 1701 0x2ebc877a, 0x6eba8738, 0x6ef98717, 0x0eb8d6f6, 1702 0x4ebad738, 0x4efcd77a, 0x0e239c41, 0x4e279cc5, 1703 0x0e719e0f, 0x4e689ce6, 0x0eb29e30, 0x4eb19e0f, 1704 0x2e25dc83, 0x6e24dc62, 0x6e62dc20, 0x0e7b9759, 1705 0x4e649462, 0x0ebf97dd, 0x4ea097fe, 0x0e39cf17, 1706 0x4e2fcdcd, 0x4e6acd28, 0x2e6e95ac, 0x6e6c956a, 1707 0x2eae95ac, 0x6eb896f6, 0x0ebdcf9b, 0x4ea6cca4, 1708 0x4ee9cd07, 0x2e28fce6, 0x6e23fc41, 0x6e7cff7a, 1709 0x0e31660f, 0x4e246462, 0x0e6f65cd, 0x4e6f65cd, 1710 0x0eba6738, 0x4eb96717, 0x0e26f4a4, 0x4e35f693, 1711 0x4e71f60f, 0x0e226c20, 0x4e266ca4, 0x0e766eb4, 1712 0x4e6d6d8b, 0x0ebf6fdd, 0x4eb16e0f, 0x0eb7f6d5, 1713 0x4ea6f4a4, 0x4ef0f5ee, 0x2e388ef6, 0x6e3b8f59, 1714 0x2e688ce6, 0x6e6e8dac, 0x2eb08dee, 0x6eaf8dcd, 1715 0x6ef08dee, 0x0e2be549, 0x4e3be759, 0x4e7ee7bc, 1716 0x0e2c356a, 0x4e353693, 0x0e6d358b, 0x4e733651, 1717 0x0eb736d5, 0x4eb1360f, 0x4ef636b4, 0x2eb9e717, 1718 0x6ebce77a, 0x6ee7e4c5, 0x0e283ce6, 0x4e313e0f, 1719 0x0e713e0f, 0x4e7b3f59, 0x0eb23e30, 0x4ebd3f9b, 1720 0x4efa3f38, 0x2e31e60f, 0x6e3be759, 0x6e70e5ee, 1721 0xba5fd3e3, 0x3a5f03e5, 0xfa411be4, 0x7a42cbe2, 1722 0x93df03ff, 0xc820ffff, 0x8822fc7f, 0xc8247cbf, 1723 0x88267fff, 0x4e010fe0, 0x4e081fe1, 0x4e0c1fe1, 1724 0x4e0a1fe1, 0x4e071fe1, 0x4cc0ac3f, 0x1e601000, 1725 0x1e603000, 0x1e621000, 0x1e623000, 0x1e641000, 1726 0x1e643000, 0x1e661000, 0x1e663000, 0x1e681000, 1727 0x1e683000, 0x1e6a1000, 0x1e6a3000, 0x1e6c1000, 1728 0x1e6c3000, 0x1e6e1000, 0x1e6e3000, 0x1e701000, 1729 0x1e703000, 0x1e721000, 0x1e723000, 0x1e741000, 1730 0x1e743000, 0x1e761000, 0x1e763000, 0x1e781000, 1731 0x1e783000, 0x1e7a1000, 0x1e7a3000, 0x1e7c1000, 1732 0x1e7c3000, 0x1e7e1000, 0x1e7e3000, 0xf82a81cd, 1733 0xf83402e1, 0xf83e104e, 0xf8262103, 0xf8393360, 1734 0xf83e50a5, 0xf83e432b, 0xf820701f, 0xf833635d, 1735 0xf8a9819a, 0xf8af016b, 0xf8b212d9, 0xf8b82220, 1736 0xf8ab33a6, 0xf8a650a5, 0xf8b54213, 0xf8b2737e, 1737 0xf8bc6381, 0xf8e183b4, 0xf8f0014d, 0xf8fd127d, 1738 0xf8f6208a, 0xf8ff3115, 0xf8ff5153, 0xf8fc4322, 1739 0xf8e57103, 0xf8f661b3, 0xf865831d, 0xf875031a, 1740 0xf8631358, 0xf87722af, 0xf8633118, 0xf8795214, 1741 0xf8714022, 0xf8607098, 0xf86363ec, 0xb83c834a, 1742 0xb822024c, 0xb83f11a1, 0xb83d2260, 0xb82c32d1, 1743 0xb82d53dc, 0xb83f4341, 0xb83c73c4, 0xb82463c6, 1744 0xb8ba8132, 0xb8a8000c, 0xb8b41301, 0xb8a22120, 1745 0xb8b8321a, 0xb8be5143, 0xb8b7408a, 0xb8b27162, 1746 0xb8a861ea, 0xb8f18142, 0xb8ec01ec, 0xb8ed10e2, 1747 0xb8f4221a, 0xb8e43082, 0xb8ec52b2, 0xb8f04172, 1748 0xb8f57197, 0xb8fa6397, 0xb86e830b, 0xb86103ec, 1749 0xb86a10f0, 0xb86221a3, 0xb8733211, 0xb8635161, 1750 0xb87e4105, 0xb86f73dd, 0xb86060f4, 1751 }; 1752 // END Generated code -- do not edit 1753 1754 asm_check((unsigned int *)entry, insns, sizeof insns / sizeof insns[0]); 1755 1756 { 1757 address PC = __ pc(); 1758 __ ld1(v0, __ T16B, Address(r16)); // No offset 1759 __ ld1(v0, __ T8H, __ post(r16, 16)); // Post-index 1760 __ ld2(v0, v1, __ T8H, __ post(r24, 16 * 2)); // Post-index 1761 __ ld1(v0, __ T16B, __ post(r16, r17)); // Register post-index 1762 static const unsigned int vector_insns[] = { 1763 0x4c407200, // ld1 {v0.16b}, [x16] 1764 0x4cdf7600, // ld1 {v0.8h}, [x16], #16 1765 0x4cdf8700, // ld2 {v0.8h, v1.8h}, [x24], #32 1766 0x4cd17200, // ld1 {v0.16b}, [x16], x17 1767 }; 1768 asm_check((unsigned int *)PC, vector_insns, 1769 sizeof vector_insns / sizeof vector_insns[0]); 1770 } 1771 } 1772 #endif // ASSERT 1773 1774 #undef __ 1775 1776 void Assembler::emit_data64(jlong data, 1777 relocInfo::relocType rtype, 1778 int format) { 1779 if (rtype == relocInfo::none) { 1780 emit_int64(data); 1781 } else { 1782 emit_data64(data, Relocation::spec_simple(rtype), format); 1783 } 1784 } 1785 1786 void Assembler::emit_data64(jlong data, 1787 RelocationHolder const& rspec, 1788 int format) { 1789 1790 assert(inst_mark() != NULL, "must be inside InstructionMark"); 1791 // Do not use AbstractAssembler::relocate, which is not intended for 1792 // embedded words. Instead, relocate to the enclosing instruction. 1793 code_section()->relocate(inst_mark(), rspec, format); 1794 emit_int64(data); 1795 } 1796 1797 extern "C" { 1798 void das(uint64_t start, int len) { 1799 ResourceMark rm; 1800 len <<= 2; 1801 if (len < 0) 1802 Disassembler::decode((address)start + len, (address)start); 1803 else 1804 Disassembler::decode((address)start, (address)start + len); 1805 } 1806 1807 JNIEXPORT void das1(unsigned long insn) { 1808 das(insn, 1); 1809 } 1810 } 1811 1812 #define gas_assert(ARG1) assert(ARG1, #ARG1) 1813 1814 #define __ as-> 1815 1816 void Address::lea(MacroAssembler *as, Register r) const { 1817 Relocation* reloc = _rspec.reloc(); 1818 relocInfo::relocType rtype = (relocInfo::relocType) reloc->type(); 1819 1820 switch(_mode) { 1821 case base_plus_offset: { 1822 if (_offset == 0 && _base == r) // it's a nop 1823 break; 1824 if (_offset > 0) 1825 __ add(r, _base, _offset); 1826 else 1827 __ sub(r, _base, -_offset); 1828 break; 1829 } 1830 case base_plus_offset_reg: { 1831 __ add(r, _base, _index, _ext.op(), MAX(_ext.shift(), 0)); 1832 break; 1833 } 1834 case literal: { 1835 if (rtype == relocInfo::none) 1836 __ mov(r, target()); 1837 else 1838 __ movptr(r, (uint64_t)target()); 1839 break; 1840 } 1841 default: 1842 ShouldNotReachHere(); 1843 } 1844 } 1845 1846 void Assembler::adrp(Register reg1, const Address &dest, unsigned long &byte_offset) { 1847 ShouldNotReachHere(); 1848 } 1849 1850 #undef __ 1851 1852 #define starti Instruction_aarch64 do_not_use(this); set_current(&do_not_use) 1853 1854 void Assembler::adr(Register Rd, address adr) { 1855 long offset = adr - pc(); 1856 int offset_lo = offset & 3; 1857 offset >>= 2; 1858 starti; 1859 f(0, 31), f(offset_lo, 30, 29), f(0b10000, 28, 24), sf(offset, 23, 5); 1860 rf(Rd, 0); 1861 } 1862 1863 void Assembler::_adrp(Register Rd, address adr) { 1864 uint64_t pc_page = (uint64_t)pc() >> 12; 1865 uint64_t adr_page = (uint64_t)adr >> 12; 1866 long offset = adr_page - pc_page; 1867 int offset_lo = offset & 3; 1868 offset >>= 2; 1869 starti; 1870 f(1, 31), f(offset_lo, 30, 29), f(0b10000, 28, 24), sf(offset, 23, 5); 1871 rf(Rd, 0); 1872 } 1873 1874 #undef starti 1875 1876 Address::Address(address target, relocInfo::relocType rtype) : _mode(literal){ 1877 _is_lval = false; 1878 _target = target; 1879 switch (rtype) { 1880 case relocInfo::oop_type: 1881 case relocInfo::metadata_type: 1882 // Oops are a special case. Normally they would be their own section 1883 // but in cases like icBuffer they are literals in the code stream that 1884 // we don't have a section for. We use none so that we get a literal address 1885 // which is always patchable. 1886 break; 1887 case relocInfo::external_word_type: 1888 _rspec = external_word_Relocation::spec(target); 1889 break; 1890 case relocInfo::internal_word_type: 1891 _rspec = internal_word_Relocation::spec(target); 1892 break; 1893 case relocInfo::opt_virtual_call_type: 1894 _rspec = opt_virtual_call_Relocation::spec(); 1895 break; 1896 case relocInfo::static_call_type: 1897 _rspec = static_call_Relocation::spec(); 1898 break; 1899 case relocInfo::runtime_call_type: 1900 _rspec = runtime_call_Relocation::spec(); 1901 break; 1902 case relocInfo::poll_type: 1903 case relocInfo::poll_return_type: 1904 _rspec = Relocation::spec_simple(rtype); 1905 break; 1906 case relocInfo::none: 1907 _rspec = RelocationHolder::none; 1908 break; 1909 default: 1910 ShouldNotReachHere(); 1911 break; 1912 } 1913 } 1914 1915 void Assembler::b(const Address &dest) { 1916 code_section()->relocate(pc(), dest.rspec()); 1917 b(dest.target()); 1918 } 1919 1920 void Assembler::bl(const Address &dest) { 1921 code_section()->relocate(pc(), dest.rspec()); 1922 bl(dest.target()); 1923 } 1924 1925 void Assembler::adr(Register r, const Address &dest) { 1926 code_section()->relocate(pc(), dest.rspec()); 1927 adr(r, dest.target()); 1928 } 1929 1930 void Assembler::br(Condition cc, Label &L) { 1931 if (L.is_bound()) { 1932 br(cc, target(L)); 1933 } else { 1934 L.add_patch_at(code(), locator()); 1935 br(cc, pc()); 1936 } 1937 } 1938 1939 void Assembler::wrap_label(Label &L, 1940 Assembler::uncond_branch_insn insn) { 1941 if (L.is_bound()) { 1942 (this->*insn)(target(L)); 1943 } else { 1944 L.add_patch_at(code(), locator()); 1945 (this->*insn)(pc()); 1946 } 1947 } 1948 1949 void Assembler::wrap_label(Register r, Label &L, 1950 compare_and_branch_insn insn) { 1951 if (L.is_bound()) { 1952 (this->*insn)(r, target(L)); 1953 } else { 1954 L.add_patch_at(code(), locator()); 1955 (this->*insn)(r, pc()); 1956 } 1957 } 1958 1959 void Assembler::wrap_label(Register r, int bitpos, Label &L, 1960 test_and_branch_insn insn) { 1961 if (L.is_bound()) { 1962 (this->*insn)(r, bitpos, target(L)); 1963 } else { 1964 L.add_patch_at(code(), locator()); 1965 (this->*insn)(r, bitpos, pc()); 1966 } 1967 } 1968 1969 void Assembler::wrap_label(Label &L, prfop op, prefetch_insn insn) { 1970 if (L.is_bound()) { 1971 (this->*insn)(target(L), op); 1972 } else { 1973 L.add_patch_at(code(), locator()); 1974 (this->*insn)(pc(), op); 1975 } 1976 } 1977 1978 // An "all-purpose" add/subtract immediate, per ARM documentation: 1979 // A "programmer-friendly" assembler may accept a negative immediate 1980 // between -(2^24 -1) and -1 inclusive, causing it to convert a 1981 // requested ADD operation to a SUB, or vice versa, and then encode 1982 // the absolute value of the immediate as for uimm24. 1983 void Assembler::add_sub_immediate(Register Rd, Register Rn, unsigned uimm, int op, 1984 int negated_op) { 1985 bool sets_flags = op & 1; // this op sets flags 1986 union { 1987 unsigned u; 1988 int imm; 1989 }; 1990 u = uimm; 1991 bool shift = false; 1992 bool neg = imm < 0; 1993 if (neg) { 1994 imm = -imm; 1995 op = negated_op; 1996 } 1997 assert(Rd != sp || imm % 16 == 0, "misaligned stack"); 1998 if (imm >= (1 << 11) 1999 && ((imm >> 12) << 12 == imm)) { 2000 imm >>= 12; 2001 shift = true; 2002 } 2003 f(op, 31, 29), f(0b10001, 28, 24), f(shift, 23, 22), f(imm, 21, 10); 2004 2005 // add/subtract immediate ops with the S bit set treat r31 as zr; 2006 // with S unset they use sp. 2007 if (sets_flags) 2008 zrf(Rd, 0); 2009 else 2010 srf(Rd, 0); 2011 2012 srf(Rn, 5); 2013 } 2014 2015 bool Assembler::operand_valid_for_add_sub_immediate(long imm) { 2016 bool shift = false; 2017 unsigned long uimm = uabs(imm); 2018 if (uimm < (1 << 12)) 2019 return true; 2020 if (uimm < (1 << 24) 2021 && ((uimm >> 12) << 12 == uimm)) { 2022 return true; 2023 } 2024 return false; 2025 } 2026 2027 bool Assembler::operand_valid_for_logical_immediate(bool is32, uint64_t imm) { 2028 return encode_logical_immediate(is32, imm) != 0xffffffff; 2029 } 2030 2031 static uint64_t doubleTo64Bits(jdouble d) { 2032 union { 2033 jdouble double_value; 2034 uint64_t double_bits; 2035 }; 2036 2037 double_value = d; 2038 return double_bits; 2039 } 2040 2041 bool Assembler::operand_valid_for_float_immediate(double imm) { 2042 // If imm is all zero bits we can use ZR as the source of a 2043 // floating-point value. 2044 if (doubleTo64Bits(imm) == 0) 2045 return true; 2046 2047 // Otherwise try to encode imm then convert the encoded value back 2048 // and make sure it's the exact same bit pattern. 2049 unsigned result = encoding_for_fp_immediate(imm); 2050 return doubleTo64Bits(imm) == fp_immediate_for_encoding(result, true); 2051 } 2052 2053 int AbstractAssembler::code_fill_byte() { 2054 return 0; 2055 } 2056 2057 // n.b. this is implemented in subclass MacroAssembler 2058 void Assembler::bang_stack_with_offset(int offset) { Unimplemented(); } 2059 2060 2061 // and now the routines called by the assembler which encapsulate the 2062 // above encode and decode functions 2063 2064 uint32_t 2065 asm_util::encode_logical_immediate(bool is32, uint64_t imm) 2066 { 2067 if (is32) { 2068 /* Allow all zeros or all ones in top 32-bits, so that 2069 constant expressions like ~1 are permitted. */ 2070 if (imm >> 32 != 0 && imm >> 32 != 0xffffffff) 2071 return 0xffffffff; 2072 /* Replicate the 32 lower bits to the 32 upper bits. */ 2073 imm &= 0xffffffff; 2074 imm |= imm << 32; 2075 } 2076 2077 return encoding_for_logical_immediate(imm); 2078 } 2079 2080 unsigned Assembler::pack(double value) { 2081 float val = (float)value; 2082 unsigned result = encoding_for_fp_immediate(val); 2083 guarantee(unpack(result) == value, 2084 "Invalid floating-point immediate operand"); 2085 return result; 2086 } 2087 2088 // Packed operands for Floating-point Move (immediate) 2089 2090 static float unpack(unsigned value) { 2091 union { 2092 unsigned ival; 2093 float val; 2094 }; 2095 ival = fp_immediate_for_encoding(value, 0); 2096 return val; 2097 }