Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/cpu/aarch64/vm/assembler_aarch64.cpp
32285 views
/*1* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.2* Copyright (c) 2014, 2020 Red Hat Inc. All rights reserved.3* reserved. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE4* HEADER.5*6* This code is free software; you can redistribute it and/or modify it7* under the terms of the GNU General Public License version 2 only, as8* published by the Free Software Foundation.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 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 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*24*/2526#include <stdio.h>27#include <sys/types.h>2829#include "precompiled.hpp"30#include "asm/assembler.hpp"31#include "asm/assembler.inline.hpp"32#include "interpreter/interpreter.hpp"3334#ifndef PRODUCT35const unsigned long Assembler::asm_bp = 0x0000007fa8092b5c;36#endif3738#include "compiler/disassembler.hpp"39#include "memory/resourceArea.hpp"40#include "runtime/interfaceSupport.hpp"41#include "runtime/sharedRuntime.hpp"42#include "immediate_aarch64.hpp"4344// #include "gc_interface/collectedHeap.inline.hpp"45// #include "interpreter/interpreter.hpp"46// #include "memory/cardTableModRefBS.hpp"47// #include "prims/methodHandles.hpp"48// #include "runtime/biasedLocking.hpp"49// #include "runtime/interfaceSupport.hpp"50// #include "runtime/objectMonitor.hpp"51// #include "runtime/os.hpp"52// #include "runtime/sharedRuntime.hpp"53// #include "runtime/stubRoutines.hpp"54// #if INCLUDE_ALL_GCS55// #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"56// #include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp"57// #include "gc_implementation/g1/heapRegion.hpp"58// #endif596061extern "C" void entry(CodeBuffer *cb);6263#define __ _masm.64#ifdef PRODUCT65#define BLOCK_COMMENT(str) /* nothing */66#else67#define BLOCK_COMMENT(str) block_comment(str)68#endif6970#define BIND(label) bind(label); __ BLOCK_COMMENT(#label ":")7172static float unpack(unsigned value);7374#ifdef ASSERT7576void entry(CodeBuffer *cb) {7778// {79// for (int i = 0; i < 256; i+=16)80// {81// printf("\"%20.20g\", ", unpack(i));82// printf("\"%20.20g\", ", unpack(i+1));83// }84// printf("\n");85// }8687Assembler _masm(cb);88address entry = __ pc();8990// Smoke test for assembler9192// BEGIN Generated code -- do not edit93// Generated by aarch64-asmtest.py94Label back, forth;95__ bind(back);9697// ArithOp98__ add(r19, r22, r7, Assembler::LSL, 28); // add x19, x22, x7, LSL #2899__ sub(r16, r11, r10, Assembler::LSR, 13); // sub x16, x11, x10, LSR #13100__ adds(r27, r13, r28, Assembler::ASR, 2); // adds x27, x13, x28, ASR #2101__ subs(r20, r28, r26, Assembler::ASR, 41); // subs x20, x28, x26, ASR #41102__ addw(r8, r19, r19, Assembler::ASR, 19); // add w8, w19, w19, ASR #19103__ subw(r4, r9, r10, Assembler::LSL, 14); // sub w4, w9, w10, LSL #14104__ addsw(r8, r11, r30, Assembler::LSL, 13); // adds w8, w11, w30, LSL #13105__ subsw(r0, r25, r19, Assembler::LSL, 9); // subs w0, w25, w19, LSL #9106__ andr(r20, r0, r21, Assembler::LSL, 19); // and x20, x0, x21, LSL #19107__ orr(r21, r14, r20, Assembler::LSL, 17); // orr x21, x14, x20, LSL #17108__ eor(r25, r28, r1, Assembler::LSL, 51); // eor x25, x28, x1, LSL #51109__ ands(r10, r27, r11, Assembler::ASR, 15); // ands x10, x27, x11, ASR #15110__ andw(r25, r5, r12, Assembler::ASR, 23); // and w25, w5, w12, ASR #23111__ orrw(r18, r14, r10, Assembler::LSR, 4); // orr w18, w14, w10, LSR #4112__ eorw(r4, r21, r5, Assembler::ASR, 22); // eor w4, w21, w5, ASR #22113__ andsw(r21, r0, r5, Assembler::ASR, 29); // ands w21, w0, w5, ASR #29114__ bic(r26, r30, r6, Assembler::ASR, 37); // bic x26, x30, x6, ASR #37115__ orn(r3, r1, r13, Assembler::LSR, 29); // orn x3, x1, x13, LSR #29116__ eon(r0, r28, r9, Assembler::LSL, 47); // eon x0, x28, x9, LSL #47117__ bics(r29, r5, r28, Assembler::LSL, 46); // bics x29, x5, x28, LSL #46118__ bicw(r9, r18, r7, Assembler::LSR, 20); // bic w9, w18, w7, LSR #20119__ ornw(r26, r13, r25, Assembler::ASR, 24); // orn w26, w13, w25, ASR #24120__ eonw(r25, r4, r19, Assembler::LSL, 6); // eon w25, w4, w19, LSL #6121__ bicsw(r5, r26, r4, Assembler::LSR, 24); // bics w5, w26, w4, LSR #24122123// AddSubImmOp124__ addw(r7, r19, 340u); // add w7, w19, #340125__ addsw(r8, r0, 401u); // adds w8, w0, #401126__ subw(r29, r20, 163u); // sub w29, w20, #163127__ subsw(r8, r23, 759u); // subs w8, w23, #759128__ add(r1, r12, 523u); // add x1, x12, #523129__ adds(r2, r11, 426u); // adds x2, x11, #426130__ sub(r14, r29, 716u); // sub x14, x29, #716131__ subs(r11, r5, 582u); // subs x11, x5, #582132133// LogicalImmOp134__ andw(r23, r22, 32768ul); // and w23, w22, #0x8000135__ orrw(r4, r10, 4042322160ul); // orr w4, w10, #0xf0f0f0f0136__ eorw(r0, r24, 4042322160ul); // eor w0, w24, #0xf0f0f0f0137__ andsw(r19, r29, 2139127680ul); // ands w19, w29, #0x7f807f80138__ andr(r5, r10, 4503599627354112ul); // and x5, x10, #0xfffffffffc000139__ orr(r12, r30, 18445618178097414144ul); // orr x12, x30, #0xfffc0000fffc0000140__ eor(r30, r5, 262128ul); // eor x30, x5, #0x3fff0141__ ands(r26, r23, 4194300ul); // ands x26, x23, #0x3ffffc142143// AbsOp144__ b(__ pc()); // b .145__ b(back); // b back146__ b(forth); // b forth147__ bl(__ pc()); // bl .148__ bl(back); // bl back149__ bl(forth); // bl forth150151// RegAndAbsOp152__ cbzw(r12, __ pc()); // cbz w12, .153__ cbzw(r12, back); // cbz w12, back154__ cbzw(r12, forth); // cbz w12, forth155__ cbnzw(r20, __ pc()); // cbnz w20, .156__ cbnzw(r20, back); // cbnz w20, back157__ cbnzw(r20, forth); // cbnz w20, forth158__ cbz(r12, __ pc()); // cbz x12, .159__ cbz(r12, back); // cbz x12, back160__ cbz(r12, forth); // cbz x12, forth161__ cbnz(r24, __ pc()); // cbnz x24, .162__ cbnz(r24, back); // cbnz x24, back163__ cbnz(r24, forth); // cbnz x24, forth164__ adr(r6, __ pc()); // adr x6, .165__ adr(r6, back); // adr x6, back166__ adr(r6, forth); // adr x6, forth167__ _adrp(r21, __ pc()); // adrp x21, .168169// RegImmAbsOp170__ tbz(r1, 1, __ pc()); // tbz x1, #1, .171__ tbz(r1, 1, back); // tbz x1, #1, back172__ tbz(r1, 1, forth); // tbz x1, #1, forth173__ tbnz(r8, 9, __ pc()); // tbnz x8, #9, .174__ tbnz(r8, 9, back); // tbnz x8, #9, back175__ tbnz(r8, 9, forth); // tbnz x8, #9, forth176177// MoveWideImmOp178__ movnw(r12, 23175, 0); // movn w12, #23175, lsl 0179__ movzw(r11, 20476, 16); // movz w11, #20476, lsl 16180__ movkw(r21, 3716, 0); // movk w21, #3716, lsl 0181__ movn(r29, 28661, 48); // movn x29, #28661, lsl 48182__ movz(r3, 6927, 0); // movz x3, #6927, lsl 0183__ movk(r22, 9828, 16); // movk x22, #9828, lsl 16184185// BitfieldOp186__ sbfm(r12, r8, 6, 22); // sbfm x12, x8, #6, #22187__ bfmw(r19, r25, 25, 19); // bfm w19, w25, #25, #19188__ ubfmw(r9, r12, 29, 15); // ubfm w9, w12, #29, #15189__ sbfm(r28, r25, 16, 16); // sbfm x28, x25, #16, #16190__ bfm(r12, r5, 4, 25); // bfm x12, x5, #4, #25191__ ubfm(r0, r10, 6, 8); // ubfm x0, x10, #6, #8192193// ExtractOp194__ extrw(r4, r13, r26, 24); // extr w4, w13, w26, #24195__ extr(r23, r30, r24, 31); // extr x23, x30, x24, #31196197// CondBranchOp198__ br(Assembler::EQ, __ pc()); // b.EQ .199__ br(Assembler::EQ, back); // b.EQ back200__ br(Assembler::EQ, forth); // b.EQ forth201__ br(Assembler::NE, __ pc()); // b.NE .202__ br(Assembler::NE, back); // b.NE back203__ br(Assembler::NE, forth); // b.NE forth204__ br(Assembler::HS, __ pc()); // b.HS .205__ br(Assembler::HS, back); // b.HS back206__ br(Assembler::HS, forth); // b.HS forth207__ br(Assembler::CS, __ pc()); // b.CS .208__ br(Assembler::CS, back); // b.CS back209__ br(Assembler::CS, forth); // b.CS forth210__ br(Assembler::LO, __ pc()); // b.LO .211__ br(Assembler::LO, back); // b.LO back212__ br(Assembler::LO, forth); // b.LO forth213__ br(Assembler::CC, __ pc()); // b.CC .214__ br(Assembler::CC, back); // b.CC back215__ br(Assembler::CC, forth); // b.CC forth216__ br(Assembler::MI, __ pc()); // b.MI .217__ br(Assembler::MI, back); // b.MI back218__ br(Assembler::MI, forth); // b.MI forth219__ br(Assembler::PL, __ pc()); // b.PL .220__ br(Assembler::PL, back); // b.PL back221__ br(Assembler::PL, forth); // b.PL forth222__ br(Assembler::VS, __ pc()); // b.VS .223__ br(Assembler::VS, back); // b.VS back224__ br(Assembler::VS, forth); // b.VS forth225__ br(Assembler::VC, __ pc()); // b.VC .226__ br(Assembler::VC, back); // b.VC back227__ br(Assembler::VC, forth); // b.VC forth228__ br(Assembler::HI, __ pc()); // b.HI .229__ br(Assembler::HI, back); // b.HI back230__ br(Assembler::HI, forth); // b.HI forth231__ br(Assembler::LS, __ pc()); // b.LS .232__ br(Assembler::LS, back); // b.LS back233__ br(Assembler::LS, forth); // b.LS forth234__ br(Assembler::GE, __ pc()); // b.GE .235__ br(Assembler::GE, back); // b.GE back236__ br(Assembler::GE, forth); // b.GE forth237__ br(Assembler::LT, __ pc()); // b.LT .238__ br(Assembler::LT, back); // b.LT back239__ br(Assembler::LT, forth); // b.LT forth240__ br(Assembler::GT, __ pc()); // b.GT .241__ br(Assembler::GT, back); // b.GT back242__ br(Assembler::GT, forth); // b.GT forth243__ br(Assembler::LE, __ pc()); // b.LE .244__ br(Assembler::LE, back); // b.LE back245__ br(Assembler::LE, forth); // b.LE forth246__ br(Assembler::AL, __ pc()); // b.AL .247__ br(Assembler::AL, back); // b.AL back248__ br(Assembler::AL, forth); // b.AL forth249__ br(Assembler::NV, __ pc()); // b.NV .250__ br(Assembler::NV, back); // b.NV back251__ br(Assembler::NV, forth); // b.NV forth252253// ImmOp254__ svc(12729); // svc #12729255__ hvc(6788); // hvc #6788256__ smc(1535); // smc #1535257__ brk(16766); // brk #16766258__ hlt(9753); // hlt #9753259260// Op261__ nop(); // nop262__ eret(); // eret263__ drps(); // drps264__ isb(); // isb265266// SystemOp267__ dsb(Assembler::SY); // dsb SY268__ dmb(Assembler::ISHST); // dmb ISHST269270// OneRegOp271__ br(r2); // br x2272__ blr(r5); // blr x5273274// LoadStoreExclusiveOp275__ stxr(r20, r21, r2); // stxr w20, x21, [x2]276__ stlxr(r5, r29, r7); // stlxr w5, x29, [x7]277__ ldxr(r5, r16); // ldxr x5, [x16]278__ ldaxr(r27, r29); // ldaxr x27, [x29]279__ stlr(r0, r29); // stlr x0, [x29]280__ ldar(r21, r28); // ldar x21, [x28]281282// LoadStoreExclusiveOp283__ stxrw(r21, r24, r7); // stxr w21, w24, [x7]284__ stlxrw(r21, r26, r28); // stlxr w21, w26, [x28]285__ ldxrw(r21, r6); // ldxr w21, [x6]286__ ldaxrw(r15, r30); // ldaxr w15, [x30]287__ stlrw(r19, r3); // stlr w19, [x3]288__ ldarw(r22, r2); // ldar w22, [x2]289290// LoadStoreExclusiveOp291__ stxrh(r18, r15, r0); // stxrh w18, w15, [x0]292__ stlxrh(r11, r5, r28); // stlxrh w11, w5, [x28]293__ ldxrh(r29, r6); // ldxrh w29, [x6]294__ ldaxrh(r18, r7); // ldaxrh w18, [x7]295__ stlrh(r25, r28); // stlrh w25, [x28]296__ ldarh(r2, r19); // ldarh w2, [x19]297298// LoadStoreExclusiveOp299__ stxrb(r10, r30, r1); // stxrb w10, w30, [x1]300__ stlxrb(r20, r21, r22); // stlxrb w20, w21, [x22]301__ ldxrb(r25, r2); // ldxrb w25, [x2]302__ ldaxrb(r24, r5); // ldaxrb w24, [x5]303__ stlrb(r16, r3); // stlrb w16, [x3]304__ ldarb(r22, r29); // ldarb w22, [x29]305306// LoadStoreExclusiveOp307__ ldxp(r8, r2, r19); // ldxp x8, x2, [x19]308__ ldaxp(r7, r19, r14); // ldaxp x7, x19, [x14]309__ stxp(r8, r27, r28, r5); // stxp w8, x27, x28, [x5]310__ stlxp(r5, r8, r14, r6); // stlxp w5, x8, x14, [x6]311312// LoadStoreExclusiveOp313__ ldxpw(r25, r4, r22); // ldxp w25, w4, [x22]314__ ldaxpw(r13, r14, r15); // ldaxp w13, w14, [x15]315__ stxpw(r20, r26, r8, r10); // stxp w20, w26, w8, [x10]316__ stlxpw(r23, r18, r18, r18); // stlxp w23, w18, w18, [x18]317318// base_plus_unscaled_offset319// LoadStoreOp320__ str(r30, Address(r11, 99)); // str x30, [x11, 99]321__ strw(r23, Address(r25, -77)); // str w23, [x25, -77]322__ strb(r2, Address(r14, 3)); // strb w2, [x14, 3]323__ strh(r9, Address(r10, 5)); // strh w9, [x10, 5]324__ ldr(r20, Address(r15, 57)); // ldr x20, [x15, 57]325__ ldrw(r12, Address(r16, -78)); // ldr w12, [x16, -78]326__ ldrb(r22, Address(r26, -3)); // ldrb w22, [x26, -3]327__ ldrh(r30, Address(r19, -47)); // ldrh w30, [x19, -47]328__ ldrsb(r9, Address(r10, -12)); // ldrsb x9, [x10, -12]329__ ldrsh(r28, Address(r17, 14)); // ldrsh x28, [x17, 14]330__ ldrshw(r3, Address(r5, 10)); // ldrsh w3, [x5, 10]331__ ldrsw(r17, Address(r17, -91)); // ldrsw x17, [x17, -91]332__ ldrd(v2, Address(r20, -17)); // ldr d2, [x20, -17]333__ ldrs(v22, Address(r7, -10)); // ldr s22, [x7, -10]334__ strd(v30, Address(r18, -223)); // str d30, [x18, -223]335__ strs(v13, Address(r22, 21)); // str s13, [x22, 21]336337// pre338// LoadStoreOp339__ str(r9, Address(__ pre(r18, -112))); // str x9, [x18, -112]!340__ strw(r29, Address(__ pre(r23, 11))); // str w29, [x23, 11]!341__ strb(r18, Address(__ pre(r12, -1))); // strb w18, [x12, -1]!342__ strh(r16, Address(__ pre(r20, -23))); // strh w16, [x20, -23]!343__ ldr(r3, Address(__ pre(r29, 9))); // ldr x3, [x29, 9]!344__ ldrw(r25, Address(__ pre(r3, 19))); // ldr w25, [x3, 19]!345__ ldrb(r1, Address(__ pre(r29, -1))); // ldrb w1, [x29, -1]!346__ ldrh(r8, Address(__ pre(r29, -57))); // ldrh w8, [x29, -57]!347__ ldrsb(r5, Address(__ pre(r14, -13))); // ldrsb x5, [x14, -13]!348__ ldrsh(r10, Address(__ pre(r27, 1))); // ldrsh x10, [x27, 1]!349__ ldrshw(r11, Address(__ pre(r10, 25))); // ldrsh w11, [x10, 25]!350__ ldrsw(r4, Address(__ pre(r22, -92))); // ldrsw x4, [x22, -92]!351__ ldrd(v11, Address(__ pre(r23, 8))); // ldr d11, [x23, 8]!352__ ldrs(v25, Address(__ pre(r19, 54))); // ldr s25, [x19, 54]!353__ strd(v1, Address(__ pre(r7, -174))); // str d1, [x7, -174]!354__ strs(v8, Address(__ pre(r25, 54))); // str s8, [x25, 54]!355356// post357// LoadStoreOp358__ str(r5, Address(__ post(r11, 37))); // str x5, [x11], 37359__ strw(r24, Address(__ post(r15, 19))); // str w24, [x15], 19360__ strb(r15, Address(__ post(r26, -1))); // strb w15, [x26], -1361__ strh(r18, Address(__ post(r18, -6))); // strh w18, [x18], -6362__ ldr(r7, Address(__ post(r2, -230))); // ldr x7, [x2], -230363__ ldrw(r27, Address(__ post(r11, -27))); // ldr w27, [x11], -27364__ ldrb(r18, Address(__ post(r3, -25))); // ldrb w18, [x3], -25365__ ldrh(r10, Address(__ post(r24, -32))); // ldrh w10, [x24], -32366__ ldrsb(r22, Address(__ post(r10, 4))); // ldrsb x22, [x10], 4367__ ldrsh(r17, Address(__ post(r12, 25))); // ldrsh x17, [x12], 25368__ ldrshw(r8, Address(__ post(r7, -62))); // ldrsh w8, [x7], -62369__ ldrsw(r23, Address(__ post(r22, -51))); // ldrsw x23, [x22], -51370__ ldrd(v24, Address(__ post(r25, 48))); // ldr d24, [x25], 48371__ ldrs(v21, Address(__ post(r12, -10))); // ldr s21, [x12], -10372__ strd(v18, Address(__ post(r13, -222))); // str d18, [x13], -222373__ strs(v16, Address(__ post(r1, -41))); // str s16, [x1], -41374375// base_plus_reg376// LoadStoreOp377__ str(r2, Address(r22, r15, Address::sxtw(0))); // str x2, [x22, w15, sxtw #0]378__ strw(r2, Address(r16, r29, Address::lsl(0))); // str w2, [x16, x29, lsl #0]379__ strb(r20, Address(r18, r14, Address::uxtw(0))); // strb w20, [x18, w14, uxtw #0]380__ strh(r6, Address(r19, r20, Address::sxtx(1))); // strh w6, [x19, x20, sxtx #1]381__ ldr(r14, Address(r29, r14, Address::sxtw(0))); // ldr x14, [x29, w14, sxtw #0]382__ ldrw(r16, Address(r20, r12, Address::sxtw(2))); // ldr w16, [x20, w12, sxtw #2]383__ ldrb(r9, Address(r12, r0, Address::sxtw(0))); // ldrb w9, [x12, w0, sxtw #0]384__ ldrh(r12, Address(r17, r3, Address::lsl(1))); // ldrh w12, [x17, x3, lsl #1]385__ ldrsb(r2, Address(r17, r3, Address::sxtx(0))); // ldrsb x2, [x17, x3, sxtx #0]386__ ldrsh(r7, Address(r1, r17, Address::uxtw(1))); // ldrsh x7, [x1, w17, uxtw #1]387__ ldrshw(r25, Address(r15, r18, Address::sxtw(1))); // ldrsh w25, [x15, w18, sxtw #1]388__ ldrsw(r23, Address(r21, r12, Address::lsl(0))); // ldrsw x23, [x21, x12, lsl #0]389__ ldrd(v5, Address(r13, r8, Address::lsl(3))); // ldr d5, [x13, x8, lsl #3]390__ ldrs(v3, Address(r10, r22, Address::lsl(2))); // ldr s3, [x10, x22, lsl #2]391__ strd(v14, Address(r2, r27, Address::sxtw(0))); // str d14, [x2, w27, sxtw #0]392__ strs(v20, Address(r6, r25, Address::lsl(0))); // str s20, [x6, x25, lsl #0]393394// base_plus_scaled_offset395// LoadStoreOp396__ str(r30, Address(r7, 16256)); // str x30, [x7, 16256]397__ strw(r15, Address(r8, 7588)); // str w15, [x8, 7588]398__ strb(r11, Address(r0, 1866)); // strb w11, [x0, 1866]399__ strh(r3, Address(r17, 3734)); // strh w3, [x17, 3734]400__ ldr(r2, Address(r7, 14224)); // ldr x2, [x7, 14224]401__ ldrw(r5, Address(r9, 7396)); // ldr w5, [x9, 7396]402__ ldrb(r28, Address(r9, 1721)); // ldrb w28, [x9, 1721]403__ ldrh(r2, Address(r20, 3656)); // ldrh w2, [x20, 3656]404__ ldrsb(r22, Address(r14, 1887)); // ldrsb x22, [x14, 1887]405__ ldrsh(r8, Address(r0, 4080)); // ldrsh x8, [x0, 4080]406__ ldrshw(r0, Address(r30, 3916)); // ldrsh w0, [x30, 3916]407__ ldrsw(r24, Address(r19, 6828)); // ldrsw x24, [x19, 6828]408__ ldrd(v24, Address(r12, 13032)); // ldr d24, [x12, 13032]409__ ldrs(v8, Address(r8, 7452)); // ldr s8, [x8, 7452]410__ strd(v10, Address(r15, 15992)); // str d10, [x15, 15992]411__ strs(v26, Address(r19, 6688)); // str s26, [x19, 6688]412413// pcrel414// LoadStoreOp415__ ldr(r10, forth); // ldr x10, forth416__ ldrw(r3, __ pc()); // ldr w3, .417418// LoadStoreOp419__ prfm(Address(r23, 9)); // prfm PLDL1KEEP, [x23, 9]420421// LoadStoreOp422__ prfm(back); // prfm PLDL1KEEP, back423424// LoadStoreOp425__ prfm(Address(r3, r8, Address::uxtw(0))); // prfm PLDL1KEEP, [x3, w8, uxtw #0]426427// LoadStoreOp428__ prfm(Address(r11, 15080)); // prfm PLDL1KEEP, [x11, 15080]429430// AddSubCarryOp431__ adcw(r13, r9, r28); // adc w13, w9, w28432__ adcsw(r27, r19, r28); // adcs w27, w19, w28433__ sbcw(r19, r18, r6); // sbc w19, w18, w6434__ sbcsw(r14, r20, r3); // sbcs w14, w20, w3435__ adc(r16, r14, r8); // adc x16, x14, x8436__ adcs(r0, r29, r8); // adcs x0, x29, x8437__ sbc(r8, r24, r20); // sbc x8, x24, x20438__ sbcs(r12, r28, r0); // sbcs x12, x28, x0439440// AddSubExtendedOp441__ addw(r23, r6, r16, ext::uxtb, 4); // add w23, w6, w16, uxtb #4442__ addsw(r25, r25, r23, ext::sxth, 2); // adds w25, w25, w23, sxth #2443__ sub(r26, r22, r4, ext::uxtx, 1); // sub x26, x22, x4, uxtx #1444__ subsw(r17, r29, r19, ext::sxtx, 3); // subs w17, w29, w19, sxtx #3445__ add(r11, r30, r21, ext::uxtb, 3); // add x11, x30, x21, uxtb #3446__ adds(r16, r19, r0, ext::sxtb, 2); // adds x16, x19, x0, sxtb #2447__ sub(r11, r9, r25, ext::sxtx, 1); // sub x11, x9, x25, sxtx #1448__ subs(r17, r20, r12, ext::sxtb, 4); // subs x17, x20, x12, sxtb #4449450// ConditionalCompareOp451__ ccmnw(r13, r11, 3u, Assembler::LE); // ccmn w13, w11, #3, LE452__ ccmpw(r13, r12, 2u, Assembler::HI); // ccmp w13, w12, #2, HI453__ ccmn(r3, r2, 12u, Assembler::NE); // ccmn x3, x2, #12, NE454__ ccmp(r7, r21, 3u, Assembler::VS); // ccmp x7, x21, #3, VS455456// ConditionalCompareImmedOp457__ ccmnw(r2, 14, 4, Assembler::CC); // ccmn w2, #14, #4, CC458__ ccmpw(r17, 17, 6, Assembler::PL); // ccmp w17, #17, #6, PL459__ ccmn(r10, 12, 0, Assembler::CS); // ccmn x10, #12, #0, CS460__ ccmp(r21, 18, 14, Assembler::GE); // ccmp x21, #18, #14, GE461462// ConditionalSelectOp463__ cselw(r21, r13, r12, Assembler::GT); // csel w21, w13, w12, GT464__ csincw(r10, r27, r15, Assembler::LS); // csinc w10, w27, w15, LS465__ csinvw(r0, r13, r9, Assembler::HI); // csinv w0, w13, w9, HI466__ csnegw(r18, r4, r26, Assembler::VS); // csneg w18, w4, w26, VS467__ csel(r12, r29, r7, Assembler::LS); // csel x12, x29, x7, LS468__ csinc(r6, r7, r20, Assembler::VC); // csinc x6, x7, x20, VC469__ csinv(r22, r21, r3, Assembler::LE); // csinv x22, x21, x3, LE470__ csneg(r19, r12, r27, Assembler::LS); // csneg x19, x12, x27, LS471472// TwoRegOp473__ rbitw(r0, r16); // rbit w0, w16474__ rev16w(r17, r23); // rev16 w17, w23475__ revw(r17, r14); // rev w17, w14476__ clzw(r24, r30); // clz w24, w30477__ clsw(r24, r22); // cls w24, w22478__ rbit(r3, r17); // rbit x3, x17479__ rev16(r12, r13); // rev16 x12, x13480__ rev32(r9, r22); // rev32 x9, x22481__ rev(r0, r0); // rev x0, x0482__ clz(r5, r16); // clz x5, x16483__ cls(r25, r22); // cls x25, x22484485// ThreeRegOp486__ udivw(r29, r4, r0); // udiv w29, w4, w0487__ sdivw(r0, r29, r29); // sdiv w0, w29, w29488__ lslvw(r5, r17, r21); // lslv w5, w17, w21489__ lsrvw(r9, r9, r18); // lsrv w9, w9, w18490__ asrvw(r1, r27, r8); // asrv w1, w27, w8491__ rorvw(r18, r20, r13); // rorv w18, w20, w13492__ udiv(r8, r25, r12); // udiv x8, x25, x12493__ sdiv(r7, r5, r28); // sdiv x7, x5, x28494__ lslv(r5, r17, r27); // lslv x5, x17, x27495__ lsrv(r23, r26, r20); // lsrv x23, x26, x20496__ asrv(r28, r8, r28); // asrv x28, x8, x28497__ rorv(r3, r29, r4); // rorv x3, x29, x4498499// FourRegMulOp500__ maddw(r17, r14, r26, r21); // madd w17, w14, w26, w21501__ msubw(r1, r30, r11, r11); // msub w1, w30, w11, w11502__ madd(r1, r17, r6, r28); // madd x1, x17, x6, x28503__ msub(r30, r6, r30, r8); // msub x30, x6, x30, x8504__ smaddl(r21, r6, r14, r8); // smaddl x21, w6, w14, x8505__ smsubl(r10, r10, r24, r19); // smsubl x10, w10, w24, x19506__ umaddl(r20, r18, r14, r24); // umaddl x20, w18, w14, x24507__ umsubl(r18, r2, r5, r5); // umsubl x18, w2, w5, x5508509// ThreeRegFloatOp510__ fmuls(v8, v18, v13); // fmul s8, s18, s13511__ fdivs(v2, v14, v28); // fdiv s2, s14, s28512__ fadds(v15, v12, v28); // fadd s15, s12, s28513__ fsubs(v0, v12, v1); // fsub s0, s12, s1514__ fmuls(v15, v29, v4); // fmul s15, s29, s4515__ fmuld(v12, v1, v23); // fmul d12, d1, d23516__ fdivd(v27, v8, v18); // fdiv d27, d8, d18517__ faddd(v23, v20, v11); // fadd d23, d20, d11518__ fsubd(v8, v12, v18); // fsub d8, d12, d18519__ fmuld(v26, v24, v23); // fmul d26, d24, d23520521// FourRegFloatOp522__ fmadds(v21, v23, v13, v25); // fmadd s21, s23, s13, s25523__ fmsubs(v22, v10, v1, v14); // fmsub s22, s10, s1, s14524__ fnmadds(v14, v20, v2, v30); // fnmadd s14, s20, s2, s30525__ fnmadds(v7, v29, v22, v22); // fnmadd s7, s29, s22, s22526__ fmaddd(v13, v5, v15, v5); // fmadd d13, d5, d15, d5527__ fmsubd(v14, v12, v5, v10); // fmsub d14, d12, d5, d10528__ fnmaddd(v10, v19, v0, v1); // fnmadd d10, d19, d0, d1529__ fnmaddd(v20, v2, v2, v0); // fnmadd d20, d2, d2, d0530531// TwoRegFloatOp532__ fmovs(v25, v9); // fmov s25, s9533__ fabss(v20, v4); // fabs s20, s4534__ fnegs(v3, v27); // fneg s3, s27535__ fsqrts(v1, v2); // fsqrt s1, s2536__ fcvts(v30, v0); // fcvt d30, s0537__ fmovd(v12, v4); // fmov d12, d4538__ fabsd(v1, v27); // fabs d1, d27539__ fnegd(v8, v22); // fneg d8, d22540__ fsqrtd(v11, v11); // fsqrt d11, d11541__ fcvtd(v22, v28); // fcvt s22, d28542543// FloatConvertOp544__ fcvtzsw(r28, v22); // fcvtzs w28, s22545__ fcvtzs(r20, v27); // fcvtzs x20, s27546__ fcvtzdw(r14, v0); // fcvtzs w14, d0547__ fcvtzd(r26, v11); // fcvtzs x26, d11548__ scvtfws(v28, r22); // scvtf s28, w22549__ scvtfs(v16, r10); // scvtf s16, x10550__ scvtfwd(v8, r21); // scvtf d8, w21551__ scvtfd(v21, r28); // scvtf d21, x28552__ fmovs(r24, v24); // fmov w24, s24553__ fmovd(r8, v19); // fmov x8, d19554__ fmovs(v8, r12); // fmov s8, w12555__ fmovd(v6, r7); // fmov d6, x7556557// TwoRegFloatOp558__ fcmps(v30, v16); // fcmp s30, s16559__ fcmpd(v25, v11); // fcmp d25, d11560__ fcmps(v11, 0.0); // fcmp s11, #0.0561__ fcmpd(v11, 0.0); // fcmp d11, #0.0562563// LoadStorePairOp564__ stpw(r29, r12, Address(r17, 128)); // stp w29, w12, [x17, #128]565__ ldpw(r22, r18, Address(r14, -96)); // ldp w22, w18, [x14, #-96]566__ ldpsw(r11, r16, Address(r1, 64)); // ldpsw x11, x16, [x1, #64]567__ stp(r0, r11, Address(r26, 112)); // stp x0, x11, [x26, #112]568__ ldp(r7, r1, Address(r26, 16)); // ldp x7, x1, [x26, #16]569570// LoadStorePairOp571__ stpw(r10, r7, Address(__ pre(r24, 0))); // stp w10, w7, [x24, #0]!572__ ldpw(r7, r28, Address(__ pre(r24, -256))); // ldp w7, w28, [x24, #-256]!573__ ldpsw(r25, r28, Address(__ pre(r21, -240))); // ldpsw x25, x28, [x21, #-240]!574__ stp(r20, r18, Address(__ pre(r14, -16))); // stp x20, x18, [x14, #-16]!575__ ldp(r8, r10, Address(__ pre(r13, 80))); // ldp x8, x10, [x13, #80]!576577// LoadStorePairOp578__ stpw(r26, r24, Address(__ post(r2, -128))); // stp w26, w24, [x2], #-128579__ ldpw(r2, r25, Address(__ post(r21, -192))); // ldp w2, w25, [x21], #-192580__ ldpsw(r17, r2, Address(__ post(r21, -144))); // ldpsw x17, x2, [x21], #-144581__ stp(r12, r10, Address(__ post(r11, 96))); // stp x12, x10, [x11], #96582__ ldp(r24, r6, Address(__ post(r17, -32))); // ldp x24, x6, [x17], #-32583584// LoadStorePairOp585__ stnpw(r3, r30, Address(r14, -224)); // stnp w3, w30, [x14, #-224]586__ ldnpw(r15, r20, Address(r26, -144)); // ldnp w15, w20, [x26, #-144]587__ stnp(r22, r25, Address(r12, -128)); // stnp x22, x25, [x12, #-128]588__ ldnp(r27, r22, Address(r17, -176)); // ldnp x27, x22, [x17, #-176]589590// FloatImmediateOp591__ fmovd(v0, 2.0); // fmov d0, #2.0592__ fmovd(v0, 2.125); // fmov d0, #2.125593__ fmovd(v0, 4.0); // fmov d0, #4.0594__ fmovd(v0, 4.25); // fmov d0, #4.25595__ fmovd(v0, 8.0); // fmov d0, #8.0596__ fmovd(v0, 8.5); // fmov d0, #8.5597__ fmovd(v0, 16.0); // fmov d0, #16.0598__ fmovd(v0, 17.0); // fmov d0, #17.0599__ fmovd(v0, 0.125); // fmov d0, #0.125600__ fmovd(v0, 0.1328125); // fmov d0, #0.1328125601__ fmovd(v0, 0.25); // fmov d0, #0.25602__ fmovd(v0, 0.265625); // fmov d0, #0.265625603__ fmovd(v0, 0.5); // fmov d0, #0.5604__ fmovd(v0, 0.53125); // fmov d0, #0.53125605__ fmovd(v0, 1.0); // fmov d0, #1.0606__ fmovd(v0, 1.0625); // fmov d0, #1.0625607__ fmovd(v0, -2.0); // fmov d0, #-2.0608__ fmovd(v0, -2.125); // fmov d0, #-2.125609__ fmovd(v0, -4.0); // fmov d0, #-4.0610__ fmovd(v0, -4.25); // fmov d0, #-4.25611__ fmovd(v0, -8.0); // fmov d0, #-8.0612__ fmovd(v0, -8.5); // fmov d0, #-8.5613__ fmovd(v0, -16.0); // fmov d0, #-16.0614__ fmovd(v0, -17.0); // fmov d0, #-17.0615__ fmovd(v0, -0.125); // fmov d0, #-0.125616__ fmovd(v0, -0.1328125); // fmov d0, #-0.1328125617__ fmovd(v0, -0.25); // fmov d0, #-0.25618__ fmovd(v0, -0.265625); // fmov d0, #-0.265625619__ fmovd(v0, -0.5); // fmov d0, #-0.5620__ fmovd(v0, -0.53125); // fmov d0, #-0.53125621__ fmovd(v0, -1.0); // fmov d0, #-1.0622__ fmovd(v0, -1.0625); // fmov d0, #-1.0625623624__ bind(forth);625626/*627aarch64ops.o: file format elf64-littleaarch64628629630Disassembly of section .text:6316320000000000000000 <back>:6330: 8b0772d3 add x19, x22, x7, lsl #286344: cb4a3570 sub x16, x11, x10, lsr #136358: ab9c09bb adds x27, x13, x28, asr #2636c: eb9aa794 subs x20, x28, x26, asr #4163710: 0b934e68 add w8, w19, w19, asr #1963814: 4b0a3924 sub w4, w9, w10, lsl #1463918: 2b1e3568 adds w8, w11, w30, lsl #136401c: 6b132720 subs w0, w25, w19, lsl #964120: 8a154c14 and x20, x0, x21, lsl #1964224: aa1445d5 orr x21, x14, x20, lsl #1764328: ca01cf99 eor x25, x28, x1, lsl #516442c: ea8b3f6a ands x10, x27, x11, asr #1564530: 0a8c5cb9 and w25, w5, w12, asr #2364634: 2a4a11d2 orr w18, w14, w10, lsr #464738: 4a855aa4 eor w4, w21, w5, asr #226483c: 6a857415 ands w21, w0, w5, asr #2964940: 8aa697da bic x26, x30, x6, asr #3765044: aa6d7423 orn x3, x1, x13, lsr #2965148: ca29bf80 eon x0, x28, x9, lsl #476524c: ea3cb8bd bics x29, x5, x28, lsl #4665350: 0a675249 bic w9, w18, w7, lsr #2065454: 2ab961ba orn w26, w13, w25, asr #2465558: 4a331899 eon w25, w4, w19, lsl #66565c: 6a646345 bics w5, w26, w4, lsr #2465760: 11055267 add w7, w19, #0x15465864: 31064408 adds w8, w0, #0x19165968: 51028e9d sub w29, w20, #0xa36606c: 710bdee8 subs w8, w23, #0x2f766170: 91082d81 add x1, x12, #0x20b66274: b106a962 adds x2, x11, #0x1aa66378: d10b33ae sub x14, x29, #0x2cc6647c: f10918ab subs x11, x5, #0x24666580: 121102d7 and w23, w22, #0x800066684: 3204cd44 orr w4, w10, #0xf0f0f0f066788: 5204cf00 eor w0, w24, #0xf0f0f0f06688c: 72099fb3 ands w19, w29, #0x7f807f8066990: 92729545 and x5, x10, #0xfffffffffc00067094: b20e37cc orr x12, x30, #0xfffc0000fffc000067198: d27c34be eor x30, x5, #0x3fff06729c: f27e4efa ands x26, x23, #0x3ffffc673a0: 14000000 b a0 <back+0xa0>674a4: 17ffffd7 b 0 <back>675a8: 1400017f b 6a4 <forth>676ac: 94000000 bl ac <back+0xac>677b0: 97ffffd4 bl 0 <back>678b4: 9400017c bl 6a4 <forth>679b8: 3400000c cbz w12, b8 <back+0xb8>680bc: 34fffa2c cbz w12, 0 <back>681c0: 34002f2c cbz w12, 6a4 <forth>682c4: 35000014 cbnz w20, c4 <back+0xc4>683c8: 35fff9d4 cbnz w20, 0 <back>684cc: 35002ed4 cbnz w20, 6a4 <forth>685d0: b400000c cbz x12, d0 <back+0xd0>686d4: b4fff96c cbz x12, 0 <back>687d8: b4002e6c cbz x12, 6a4 <forth>688dc: b5000018 cbnz x24, dc <back+0xdc>689e0: b5fff918 cbnz x24, 0 <back>690e4: b5002e18 cbnz x24, 6a4 <forth>691e8: 10000006 adr x6, e8 <back+0xe8>692ec: 10fff8a6 adr x6, 0 <back>693f0: 10002da6 adr x6, 6a4 <forth>694f4: 90000015 adrp x21, 0 <back>695f8: 36080001 tbz w1, #1, f8 <back+0xf8>696fc: 360ff821 tbz w1, #1, 0 <back>697100: 36082d21 tbz w1, #1, 6a4 <forth>698104: 37480008 tbnz w8, #9, 104 <back+0x104>699108: 374ff7c8 tbnz w8, #9, 0 <back>70010c: 37482cc8 tbnz w8, #9, 6a4 <forth>701110: 128b50ec movn w12, #0x5a87702114: 52a9ff8b movz w11, #0x4ffc, lsl #16703118: 7281d095 movk w21, #0xe8470411c: 92edfebd movn x29, #0x6ff5, lsl #48705120: d28361e3 movz x3, #0x1b0f706124: f2a4cc96 movk x22, #0x2664, lsl #16707128: 9346590c sbfx x12, x8, #6, #1770812c: 33194f33 bfi w19, w25, #7, #20709130: 531d3d89 ubfiz w9, w12, #3, #16710134: 9350433c sbfx x28, x25, #16, #1711138: b34464ac bfxil x12, x5, #4, #2271213c: d3462140 ubfx x0, x10, #6, #3713140: 139a61a4 extr w4, w13, w26, #24714144: 93d87fd7 extr x23, x30, x24, #31715148: 54000000 b.eq 148 <back+0x148>71614c: 54fff5a0 b.eq 0 <back>717150: 54002aa0 b.eq 6a4 <forth>718154: 54000001 b.ne 154 <back+0x154>719158: 54fff541 b.ne 0 <back>72015c: 54002a41 b.ne 6a4 <forth>721160: 54000002 b.cs 160 <back+0x160>722164: 54fff4e2 b.cs 0 <back>723168: 540029e2 b.cs 6a4 <forth>72416c: 54000002 b.cs 16c <back+0x16c>725170: 54fff482 b.cs 0 <back>726174: 54002982 b.cs 6a4 <forth>727178: 54000003 b.cc 178 <back+0x178>72817c: 54fff423 b.cc 0 <back>729180: 54002923 b.cc 6a4 <forth>730184: 54000003 b.cc 184 <back+0x184>731188: 54fff3c3 b.cc 0 <back>73218c: 540028c3 b.cc 6a4 <forth>733190: 54000004 b.mi 190 <back+0x190>734194: 54fff364 b.mi 0 <back>735198: 54002864 b.mi 6a4 <forth>73619c: 54000005 b.pl 19c <back+0x19c>7371a0: 54fff305 b.pl 0 <back>7381a4: 54002805 b.pl 6a4 <forth>7391a8: 54000006 b.vs 1a8 <back+0x1a8>7401ac: 54fff2a6 b.vs 0 <back>7411b0: 540027a6 b.vs 6a4 <forth>7421b4: 54000007 b.vc 1b4 <back+0x1b4>7431b8: 54fff247 b.vc 0 <back>7441bc: 54002747 b.vc 6a4 <forth>7451c0: 54000008 b.hi 1c0 <back+0x1c0>7461c4: 54fff1e8 b.hi 0 <back>7471c8: 540026e8 b.hi 6a4 <forth>7481cc: 54000009 b.ls 1cc <back+0x1cc>7491d0: 54fff189 b.ls 0 <back>7501d4: 54002689 b.ls 6a4 <forth>7511d8: 5400000a b.ge 1d8 <back+0x1d8>7521dc: 54fff12a b.ge 0 <back>7531e0: 5400262a b.ge 6a4 <forth>7541e4: 5400000b b.lt 1e4 <back+0x1e4>7551e8: 54fff0cb b.lt 0 <back>7561ec: 540025cb b.lt 6a4 <forth>7571f0: 5400000c b.gt 1f0 <back+0x1f0>7581f4: 54fff06c b.gt 0 <back>7591f8: 5400256c b.gt 6a4 <forth>7601fc: 5400000d b.le 1fc <back+0x1fc>761200: 54fff00d b.le 0 <back>762204: 5400250d b.le 6a4 <forth>763208: 5400000e b.al 208 <back+0x208>76420c: 54ffefae b.al 0 <back>765210: 540024ae b.al 6a4 <forth>766214: 5400000f b.nv 214 <back+0x214>767218: 54ffef4f b.nv 0 <back>76821c: 5400244f b.nv 6a4 <forth>769220: d4063721 svc #0x31b9770224: d4035082 hvc #0x1a84771228: d400bfe3 smc #0x5ff77222c: d4282fc0 brk #0x417e773230: d444c320 hlt #0x2619774234: d503201f nop775238: d69f03e0 eret77623c: d6bf03e0 drps777240: d5033fdf isb778244: d5033f9f dsb sy779248: d5033abf dmb ishst78024c: d61f0040 br x2781250: d63f00a0 blr x5782254: c8147c55 stxr w20, x21, [x2]783258: c805fcfd stlxr w5, x29, [x7]78425c: c85f7e05 ldxr x5, [x16]785260: c85fffbb ldaxr x27, [x29]786264: c89fffa0 stlr x0, [x29]787268: c8dfff95 ldar x21, [x28]78826c: 88157cf8 stxr w21, w24, [x7]789270: 8815ff9a stlxr w21, w26, [x28]790274: 885f7cd5 ldxr w21, [x6]791278: 885fffcf ldaxr w15, [x30]79227c: 889ffc73 stlr w19, [x3]793280: 88dffc56 ldar w22, [x2]794284: 48127c0f stxrh w18, w15, [x0]795288: 480bff85 stlxrh w11, w5, [x28]79628c: 485f7cdd ldxrh w29, [x6]797290: 485ffcf2 ldaxrh w18, [x7]798294: 489fff99 stlrh w25, [x28]799298: 48dffe62 ldarh w2, [x19]80029c: 080a7c3e stxrb w10, w30, [x1]8012a0: 0814fed5 stlxrb w20, w21, [x22]8022a4: 085f7c59 ldxrb w25, [x2]8032a8: 085ffcb8 ldaxrb w24, [x5]8042ac: 089ffc70 stlrb w16, [x3]8052b0: 08dfffb6 ldarb w22, [x29]8062b4: c87f0a68 ldxp x8, x2, [x19]8072b8: c87fcdc7 ldaxp x7, x19, [x14]8082bc: c82870bb stxp w8, x27, x28, [x5]8092c0: c825b8c8 stlxp w5, x8, x14, [x6]8102c4: 887f12d9 ldxp w25, w4, [x22]8112c8: 887fb9ed ldaxp w13, w14, [x15]8122cc: 8834215a stxp w20, w26, w8, [x10]8132d0: 8837ca52 stlxp w23, w18, w18, [x18]8142d4: f806317e str x30, [x11,#99]8152d8: b81b3337 str w23, [x25,#-77]8162dc: 39000dc2 strb w2, [x14,#3]8172e0: 78005149 strh w9, [x10,#5]8182e4: f84391f4 ldr x20, [x15,#57]8192e8: b85b220c ldr w12, [x16,#-78]8202ec: 385fd356 ldrb w22, [x26,#-3]8212f0: 785d127e ldrh w30, [x19,#-47]8222f4: 389f4149 ldrsb x9, [x10,#-12]8232f8: 79801e3c ldrsh x28, [x17,#14]8242fc: 79c014a3 ldrsh w3, [x5,#10]825300: b89a5231 ldrsw x17, [x17,#-91]826304: fc5ef282 ldr d2, [x20,#-17]827308: bc5f60f6 ldr s22, [x7,#-10]82830c: fc12125e str d30, [x18,#-223]829310: bc0152cd str s13, [x22,#21]830314: f8190e49 str x9, [x18,#-112]!831318: b800befd str w29, [x23,#11]!83231c: 381ffd92 strb w18, [x12,#-1]!833320: 781e9e90 strh w16, [x20,#-23]!834324: f8409fa3 ldr x3, [x29,#9]!835328: b8413c79 ldr w25, [x3,#19]!83632c: 385fffa1 ldrb w1, [x29,#-1]!837330: 785c7fa8 ldrh w8, [x29,#-57]!838334: 389f3dc5 ldrsb x5, [x14,#-13]!839338: 78801f6a ldrsh x10, [x27,#1]!84033c: 78c19d4b ldrsh w11, [x10,#25]!841340: b89a4ec4 ldrsw x4, [x22,#-92]!842344: fc408eeb ldr d11, [x23,#8]!843348: bc436e79 ldr s25, [x19,#54]!84434c: fc152ce1 str d1, [x7,#-174]!845350: bc036f28 str s8, [x25,#54]!846354: f8025565 str x5, [x11],#37847358: b80135f8 str w24, [x15],#1984835c: 381ff74f strb w15, [x26],#-1849360: 781fa652 strh w18, [x18],#-6850364: f851a447 ldr x7, [x2],#-230851368: b85e557b ldr w27, [x11],#-2785236c: 385e7472 ldrb w18, [x3],#-25853370: 785e070a ldrh w10, [x24],#-32854374: 38804556 ldrsb x22, [x10],#4855378: 78819591 ldrsh x17, [x12],#2585637c: 78dc24e8 ldrsh w8, [x7],#-62857380: b89cd6d7 ldrsw x23, [x22],#-51858384: fc430738 ldr d24, [x25],#48859388: bc5f6595 ldr s21, [x12],#-1086038c: fc1225b2 str d18, [x13],#-222861390: bc1d7430 str s16, [x1],#-41862394: f82fcac2 str x2, [x22,w15,sxtw]863398: b83d6a02 str w2, [x16,x29]86439c: 382e5a54 strb w20, [x18,w14,uxtw #0]8653a0: 7834fa66 strh w6, [x19,x20,sxtx #1]8663a4: f86ecbae ldr x14, [x29,w14,sxtw]8673a8: b86cda90 ldr w16, [x20,w12,sxtw #2]8683ac: 3860d989 ldrb w9, [x12,w0,sxtw #0]8693b0: 78637a2c ldrh w12, [x17,x3,lsl #1]8703b4: 38a3fa22 ldrsb x2, [x17,x3,sxtx #0]8713b8: 78b15827 ldrsh x7, [x1,w17,uxtw #1]8723bc: 78f2d9f9 ldrsh w25, [x15,w18,sxtw #1]8733c0: b8ac6ab7 ldrsw x23, [x21,x12]8743c4: fc6879a5 ldr d5, [x13,x8,lsl #3]8753c8: bc767943 ldr s3, [x10,x22,lsl #2]8763cc: fc3bc84e str d14, [x2,w27,sxtw]8773d0: bc3968d4 str s20, [x6,x25]8783d4: f91fc0fe str x30, [x7,#16256]8793d8: b91da50f str w15, [x8,#7588]8803dc: 391d280b strb w11, [x0,#1866]8813e0: 791d2e23 strh w3, [x17,#3734]8823e4: f95bc8e2 ldr x2, [x7,#14224]8833e8: b95ce525 ldr w5, [x9,#7396]8843ec: 395ae53c ldrb w28, [x9,#1721]8853f0: 795c9282 ldrh w2, [x20,#3656]8863f4: 399d7dd6 ldrsb x22, [x14,#1887]8873f8: 799fe008 ldrsh x8, [x0,#4080]8883fc: 79de9bc0 ldrsh w0, [x30,#3916]889400: b99aae78 ldrsw x24, [x19,#6828]890404: fd597598 ldr d24, [x12,#13032]891408: bd5d1d08 ldr s8, [x8,#7452]89240c: fd1f3dea str d10, [x15,#15992]893410: bd1a227a str s26, [x19,#6688]894414: 5800148a ldr x10, 6a4 <forth>895418: 18000003 ldr w3, 418 <back+0x418>89641c: f88092e0 prfm pldl1keep, [x23,#9]897420: d8ffdf00 prfm pldl1keep, 0 <back>898424: f8a84860 prfm pldl1keep, [x3,w8,uxtw]899428: f99d7560 prfm pldl1keep, [x11,#15080]90042c: 1a1c012d adc w13, w9, w28901430: 3a1c027b adcs w27, w19, w28902434: 5a060253 sbc w19, w18, w6903438: 7a03028e sbcs w14, w20, w390443c: 9a0801d0 adc x16, x14, x8905440: ba0803a0 adcs x0, x29, x8906444: da140308 sbc x8, x24, x20907448: fa00038c sbcs x12, x28, x090844c: 0b3010d7 add w23, w6, w16, uxtb #4909450: 2b37ab39 adds w25, w25, w23, sxth #2910454: cb2466da sub x26, x22, x4, uxtx #1911458: 6b33efb1 subs w17, w29, w19, sxtx #391245c: 8b350fcb add x11, x30, w21, uxtb #3913460: ab208a70 adds x16, x19, w0, sxtb #2914464: cb39e52b sub x11, x9, x25, sxtx #1915468: eb2c9291 subs x17, x20, w12, sxtb #491646c: 3a4bd1a3 ccmn w13, w11, #0x3, le917470: 7a4c81a2 ccmp w13, w12, #0x2, hi918474: ba42106c ccmn x3, x2, #0xc, ne919478: fa5560e3 ccmp x7, x21, #0x3, vs92047c: 3a4e3844 ccmn w2, #0xe, #0x4, cc921480: 7a515a26 ccmp w17, #0x11, #0x6, pl922484: ba4c2940 ccmn x10, #0xc, #0x0, cs923488: fa52aaae ccmp x21, #0x12, #0xe, ge92448c: 1a8cc1b5 csel w21, w13, w12, gt925490: 1a8f976a csinc w10, w27, w15, ls926494: 5a8981a0 csinv w0, w13, w9, hi927498: 5a9a6492 csneg w18, w4, w26, vs92849c: 9a8793ac csel x12, x29, x7, ls9294a0: 9a9474e6 csinc x6, x7, x20, vc9304a4: da83d2b6 csinv x22, x21, x3, le9314a8: da9b9593 csneg x19, x12, x27, ls9324ac: 5ac00200 rbit w0, w169334b0: 5ac006f1 rev16 w17, w239344b4: 5ac009d1 rev w17, w149354b8: 5ac013d8 clz w24, w309364bc: 5ac016d8 cls w24, w229374c0: dac00223 rbit x3, x179384c4: dac005ac rev16 x12, x139394c8: dac00ac9 rev32 x9, x229404cc: dac00c00 rev x0, x09414d0: dac01205 clz x5, x169424d4: dac016d9 cls x25, x229434d8: 1ac0089d udiv w29, w4, w09444dc: 1add0fa0 sdiv w0, w29, w299454e0: 1ad52225 lsl w5, w17, w219464e4: 1ad22529 lsr w9, w9, w189474e8: 1ac82b61 asr w1, w27, w89484ec: 1acd2e92 ror w18, w20, w139494f0: 9acc0b28 udiv x8, x25, x129504f4: 9adc0ca7 sdiv x7, x5, x289514f8: 9adb2225 lsl x5, x17, x279524fc: 9ad42757 lsr x23, x26, x20953500: 9adc291c asr x28, x8, x28954504: 9ac42fa3 ror x3, x29, x4955508: 1b1a55d1 madd w17, w14, w26, w2195650c: 1b0bafc1 msub w1, w30, w11, w11957510: 9b067221 madd x1, x17, x6, x28958514: 9b1ea0de msub x30, x6, x30, x8959518: 9b2e20d5 smaddl x21, w6, w14, x896051c: 9b38cd4a smsubl x10, w10, w24, x19961520: 9bae6254 umaddl x20, w18, w14, x24962524: 9ba59452 umsubl x18, w2, w5, x5963528: 1e2d0a48 fmul s8, s18, s1396452c: 1e3c19c2 fdiv s2, s14, s28965530: 1e3c298f fadd s15, s12, s28966534: 1e213980 fsub s0, s12, s1967538: 1e240baf fmul s15, s29, s496853c: 1e77082c fmul d12, d1, d23969540: 1e72191b fdiv d27, d8, d18970544: 1e6b2a97 fadd d23, d20, d11971548: 1e723988 fsub d8, d12, d1897254c: 1e770b1a fmul d26, d24, d23973550: 1f0d66f5 fmadd s21, s23, s13, s25974554: 1f01b956 fmsub s22, s10, s1, s14975558: 1f227a8e fnmadd s14, s20, s2, s3097655c: 1f365ba7 fnmadd s7, s29, s22, s22977560: 1f4f14ad fmadd d13, d5, d15, d5978564: 1f45a98e fmsub d14, d12, d5, d10979568: 1f60066a fnmadd d10, d19, d0, d198056c: 1f620054 fnmadd d20, d2, d2, d0981570: 1e204139 fmov s25, s9982574: 1e20c094 fabs s20, s4983578: 1e214363 fneg s3, s2798457c: 1e21c041 fsqrt s1, s2985580: 1e22c01e fcvt d30, s0986584: 1e60408c fmov d12, d4987588: 1e60c361 fabs d1, d2798858c: 1e6142c8 fneg d8, d22989590: 1e61c16b fsqrt d11, d11990594: 1e624396 fcvt s22, d28991598: 1e3802dc fcvtzs w28, s2299259c: 9e380374 fcvtzs x20, s279935a0: 1e78000e fcvtzs w14, d09945a4: 9e78017a fcvtzs x26, d119955a8: 1e2202dc scvtf s28, w229965ac: 9e220150 scvtf s16, x109975b0: 1e6202a8 scvtf d8, w219985b4: 9e620395 scvtf d21, x289995b8: 1e260318 fmov w24, s2410005bc: 9e660268 fmov x8, d1910015c0: 1e270188 fmov s8, w1210025c4: 9e6700e6 fmov d6, x710035c8: 1e3023c0 fcmp s30, s1610045cc: 1e6b2320 fcmp d25, d1110055d0: 1e202168 fcmp s11, #0.010065d4: 1e602168 fcmp d11, #0.010075d8: 2910323d stp w29, w12, [x17,#128]10085dc: 297449d6 ldp w22, w18, [x14,#-96]10095e0: 6948402b ldpsw x11, x16, [x1,#64]10105e4: a9072f40 stp x0, x11, [x26,#112]10115e8: a9410747 ldp x7, x1, [x26,#16]10125ec: 29801f0a stp w10, w7, [x24,#0]!10135f0: 29e07307 ldp w7, w28, [x24,#-256]!10145f4: 69e272b9 ldpsw x25, x28, [x21,#-240]!10155f8: a9bf49d4 stp x20, x18, [x14,#-16]!10165fc: a9c529a8 ldp x8, x10, [x13,#80]!1017600: 28b0605a stp w26, w24, [x2],#-1281018604: 28e866a2 ldp w2, w25, [x21],#-1921019608: 68ee0ab1 ldpsw x17, x2, [x21],#-144102060c: a886296c stp x12, x10, [x11],#961021610: a8fe1a38 ldp x24, x6, [x17],#-321022614: 282479c3 stnp w3, w30, [x14,#-224]1023618: 286e534f ldnp w15, w20, [x26,#-144]102461c: a8386596 stnp x22, x25, [x12,#-128]1025620: a8755a3b ldnp x27, x22, [x17,#-176]1026624: 1e601000 fmov d0, #2.000000000000000000e+001027628: 1e603000 fmov d0, #2.125000000000000000e+00102862c: 1e621000 fmov d0, #4.000000000000000000e+001029630: 1e623000 fmov d0, #4.250000000000000000e+001030634: 1e641000 fmov d0, #8.000000000000000000e+001031638: 1e643000 fmov d0, #8.500000000000000000e+00103263c: 1e661000 fmov d0, #1.600000000000000000e+011033640: 1e663000 fmov d0, #1.700000000000000000e+011034644: 1e681000 fmov d0, #1.250000000000000000e-011035648: 1e683000 fmov d0, #1.328125000000000000e-01103664c: 1e6a1000 fmov d0, #2.500000000000000000e-011037650: 1e6a3000 fmov d0, #2.656250000000000000e-011038654: 1e6c1000 fmov d0, #5.000000000000000000e-011039658: 1e6c3000 fmov d0, #5.312500000000000000e-01104065c: 1e6e1000 fmov d0, #1.000000000000000000e+001041660: 1e6e3000 fmov d0, #1.062500000000000000e+001042664: 1e701000 fmov d0, #-2.000000000000000000e+001043668: 1e703000 fmov d0, #-2.125000000000000000e+00104466c: 1e721000 fmov d0, #-4.000000000000000000e+001045670: 1e723000 fmov d0, #-4.250000000000000000e+001046674: 1e741000 fmov d0, #-8.000000000000000000e+001047678: 1e743000 fmov d0, #-8.500000000000000000e+00104867c: 1e761000 fmov d0, #-1.600000000000000000e+011049680: 1e763000 fmov d0, #-1.700000000000000000e+011050684: 1e781000 fmov d0, #-1.250000000000000000e-011051688: 1e783000 fmov d0, #-1.328125000000000000e-01105268c: 1e7a1000 fmov d0, #-2.500000000000000000e-011053690: 1e7a3000 fmov d0, #-2.656250000000000000e-011054694: 1e7c1000 fmov d0, #-5.000000000000000000e-011055698: 1e7c3000 fmov d0, #-5.312500000000000000e-01105669c: 1e7e1000 fmov d0, #-1.000000000000000000e+0010576a0: 1e7e3000 fmov d0, #-1.062500000000000000e+001058*/10591060static const unsigned int insns[] =1061{10620x8b0772d3, 0xcb4a3570, 0xab9c09bb, 0xeb9aa794,10630x0b934e68, 0x4b0a3924, 0x2b1e3568, 0x6b132720,10640x8a154c14, 0xaa1445d5, 0xca01cf99, 0xea8b3f6a,10650x0a8c5cb9, 0x2a4a11d2, 0x4a855aa4, 0x6a857415,10660x8aa697da, 0xaa6d7423, 0xca29bf80, 0xea3cb8bd,10670x0a675249, 0x2ab961ba, 0x4a331899, 0x6a646345,10680x11055267, 0x31064408, 0x51028e9d, 0x710bdee8,10690x91082d81, 0xb106a962, 0xd10b33ae, 0xf10918ab,10700x121102d7, 0x3204cd44, 0x5204cf00, 0x72099fb3,10710x92729545, 0xb20e37cc, 0xd27c34be, 0xf27e4efa,10720x14000000, 0x17ffffd7, 0x1400017f, 0x94000000,10730x97ffffd4, 0x9400017c, 0x3400000c, 0x34fffa2c,10740x34002f2c, 0x35000014, 0x35fff9d4, 0x35002ed4,10750xb400000c, 0xb4fff96c, 0xb4002e6c, 0xb5000018,10760xb5fff918, 0xb5002e18, 0x10000006, 0x10fff8a6,10770x10002da6, 0x90000015, 0x36080001, 0x360ff821,10780x36082d21, 0x37480008, 0x374ff7c8, 0x37482cc8,10790x128b50ec, 0x52a9ff8b, 0x7281d095, 0x92edfebd,10800xd28361e3, 0xf2a4cc96, 0x9346590c, 0x33194f33,10810x531d3d89, 0x9350433c, 0xb34464ac, 0xd3462140,10820x139a61a4, 0x93d87fd7, 0x54000000, 0x54fff5a0,10830x54002aa0, 0x54000001, 0x54fff541, 0x54002a41,10840x54000002, 0x54fff4e2, 0x540029e2, 0x54000002,10850x54fff482, 0x54002982, 0x54000003, 0x54fff423,10860x54002923, 0x54000003, 0x54fff3c3, 0x540028c3,10870x54000004, 0x54fff364, 0x54002864, 0x54000005,10880x54fff305, 0x54002805, 0x54000006, 0x54fff2a6,10890x540027a6, 0x54000007, 0x54fff247, 0x54002747,10900x54000008, 0x54fff1e8, 0x540026e8, 0x54000009,10910x54fff189, 0x54002689, 0x5400000a, 0x54fff12a,10920x5400262a, 0x5400000b, 0x54fff0cb, 0x540025cb,10930x5400000c, 0x54fff06c, 0x5400256c, 0x5400000d,10940x54fff00d, 0x5400250d, 0x5400000e, 0x54ffefae,10950x540024ae, 0x5400000f, 0x54ffef4f, 0x5400244f,10960xd4063721, 0xd4035082, 0xd400bfe3, 0xd4282fc0,10970xd444c320, 0xd503201f, 0xd69f03e0, 0xd6bf03e0,10980xd5033fdf, 0xd5033f9f, 0xd5033abf, 0xd61f0040,10990xd63f00a0, 0xc8147c55, 0xc805fcfd, 0xc85f7e05,11000xc85fffbb, 0xc89fffa0, 0xc8dfff95, 0x88157cf8,11010x8815ff9a, 0x885f7cd5, 0x885fffcf, 0x889ffc73,11020x88dffc56, 0x48127c0f, 0x480bff85, 0x485f7cdd,11030x485ffcf2, 0x489fff99, 0x48dffe62, 0x080a7c3e,11040x0814fed5, 0x085f7c59, 0x085ffcb8, 0x089ffc70,11050x08dfffb6, 0xc87f0a68, 0xc87fcdc7, 0xc82870bb,11060xc825b8c8, 0x887f12d9, 0x887fb9ed, 0x8834215a,11070x8837ca52, 0xf806317e, 0xb81b3337, 0x39000dc2,11080x78005149, 0xf84391f4, 0xb85b220c, 0x385fd356,11090x785d127e, 0x389f4149, 0x79801e3c, 0x79c014a3,11100xb89a5231, 0xfc5ef282, 0xbc5f60f6, 0xfc12125e,11110xbc0152cd, 0xf8190e49, 0xb800befd, 0x381ffd92,11120x781e9e90, 0xf8409fa3, 0xb8413c79, 0x385fffa1,11130x785c7fa8, 0x389f3dc5, 0x78801f6a, 0x78c19d4b,11140xb89a4ec4, 0xfc408eeb, 0xbc436e79, 0xfc152ce1,11150xbc036f28, 0xf8025565, 0xb80135f8, 0x381ff74f,11160x781fa652, 0xf851a447, 0xb85e557b, 0x385e7472,11170x785e070a, 0x38804556, 0x78819591, 0x78dc24e8,11180xb89cd6d7, 0xfc430738, 0xbc5f6595, 0xfc1225b2,11190xbc1d7430, 0xf82fcac2, 0xb83d6a02, 0x382e5a54,11200x7834fa66, 0xf86ecbae, 0xb86cda90, 0x3860d989,11210x78637a2c, 0x38a3fa22, 0x78b15827, 0x78f2d9f9,11220xb8ac6ab7, 0xfc6879a5, 0xbc767943, 0xfc3bc84e,11230xbc3968d4, 0xf91fc0fe, 0xb91da50f, 0x391d280b,11240x791d2e23, 0xf95bc8e2, 0xb95ce525, 0x395ae53c,11250x795c9282, 0x399d7dd6, 0x799fe008, 0x79de9bc0,11260xb99aae78, 0xfd597598, 0xbd5d1d08, 0xfd1f3dea,11270xbd1a227a, 0x5800148a, 0x18000003, 0xf88092e0,11280xd8ffdf00, 0xf8a84860, 0xf99d7560, 0x1a1c012d,11290x3a1c027b, 0x5a060253, 0x7a03028e, 0x9a0801d0,11300xba0803a0, 0xda140308, 0xfa00038c, 0x0b3010d7,11310x2b37ab39, 0xcb2466da, 0x6b33efb1, 0x8b350fcb,11320xab208a70, 0xcb39e52b, 0xeb2c9291, 0x3a4bd1a3,11330x7a4c81a2, 0xba42106c, 0xfa5560e3, 0x3a4e3844,11340x7a515a26, 0xba4c2940, 0xfa52aaae, 0x1a8cc1b5,11350x1a8f976a, 0x5a8981a0, 0x5a9a6492, 0x9a8793ac,11360x9a9474e6, 0xda83d2b6, 0xda9b9593, 0x5ac00200,11370x5ac006f1, 0x5ac009d1, 0x5ac013d8, 0x5ac016d8,11380xdac00223, 0xdac005ac, 0xdac00ac9, 0xdac00c00,11390xdac01205, 0xdac016d9, 0x1ac0089d, 0x1add0fa0,11400x1ad52225, 0x1ad22529, 0x1ac82b61, 0x1acd2e92,11410x9acc0b28, 0x9adc0ca7, 0x9adb2225, 0x9ad42757,11420x9adc291c, 0x9ac42fa3, 0x1b1a55d1, 0x1b0bafc1,11430x9b067221, 0x9b1ea0de, 0x9b2e20d5, 0x9b38cd4a,11440x9bae6254, 0x9ba59452, 0x1e2d0a48, 0x1e3c19c2,11450x1e3c298f, 0x1e213980, 0x1e240baf, 0x1e77082c,11460x1e72191b, 0x1e6b2a97, 0x1e723988, 0x1e770b1a,11470x1f0d66f5, 0x1f01b956, 0x1f227a8e, 0x1f365ba7,11480x1f4f14ad, 0x1f45a98e, 0x1f60066a, 0x1f620054,11490x1e204139, 0x1e20c094, 0x1e214363, 0x1e21c041,11500x1e22c01e, 0x1e60408c, 0x1e60c361, 0x1e6142c8,11510x1e61c16b, 0x1e624396, 0x1e3802dc, 0x9e380374,11520x1e78000e, 0x9e78017a, 0x1e2202dc, 0x9e220150,11530x1e6202a8, 0x9e620395, 0x1e260318, 0x9e660268,11540x1e270188, 0x9e6700e6, 0x1e3023c0, 0x1e6b2320,11550x1e202168, 0x1e602168, 0x2910323d, 0x297449d6,11560x6948402b, 0xa9072f40, 0xa9410747, 0x29801f0a,11570x29e07307, 0x69e272b9, 0xa9bf49d4, 0xa9c529a8,11580x28b0605a, 0x28e866a2, 0x68ee0ab1, 0xa886296c,11590xa8fe1a38, 0x282479c3, 0x286e534f, 0xa8386596,11600xa8755a3b, 0x1e601000, 0x1e603000, 0x1e621000,11610x1e623000, 0x1e641000, 0x1e643000, 0x1e661000,11620x1e663000, 0x1e681000, 0x1e683000, 0x1e6a1000,11630x1e6a3000, 0x1e6c1000, 0x1e6c3000, 0x1e6e1000,11640x1e6e3000, 0x1e701000, 0x1e703000, 0x1e721000,11650x1e723000, 0x1e741000, 0x1e743000, 0x1e761000,11660x1e763000, 0x1e781000, 0x1e783000, 0x1e7a1000,11670x1e7a3000, 0x1e7c1000, 0x1e7c3000, 0x1e7e1000,11680x1e7e3000,1169};1170// END Generated code -- do not edit11711172{1173bool ok = true;1174unsigned int *insns1 = (unsigned int *)entry;1175for (unsigned int i = 0; i < sizeof insns / sizeof insns[0]; i++) {1176if (insns[i] != insns1[i]) {1177ok = false;1178printf("Ours:\n");1179Disassembler::decode((address)&insns1[i], (address)&insns1[i+1]);1180printf("Theirs:\n");1181Disassembler::decode((address)&insns[i], (address)&insns[i+1]);1182printf("\n");1183}1184}1185assert(ok, "Assembler smoke test failed");1186}11871188#ifndef PRODUCT11891190address PC = __ pc();1191__ ld1(v0, __ T16B, Address(r16)); // No offset1192__ ld1(v0, __ T16B, __ post(r16, 0)); // Post-index1193__ ld1(v0, __ T16B, Address(r16, r17)); //119411951196#endif // PRODUCT1197}11981199#endif // ASSERT12001201#undef __12021203void Assembler::emit_data64(jlong data,1204relocInfo::relocType rtype,1205int format) {1206if (rtype == relocInfo::none) {1207emit_int64(data);1208} else {1209emit_data64(data, Relocation::spec_simple(rtype), format);1210}1211}12121213void Assembler::emit_data64(jlong data,1214RelocationHolder const& rspec,1215int format) {12161217assert(inst_mark() != NULL, "must be inside InstructionMark");1218// Do not use AbstractAssembler::relocate, which is not intended for1219// embedded words. Instead, relocate to the enclosing instruction.1220code_section()->relocate(inst_mark(), rspec, format);1221emit_int64(data);1222}12231224extern "C" {1225void das(uint64_t start, int len) {1226ResourceMark rm;1227len <<= 2;1228if (len < 0)1229Disassembler::decode((address)start + len, (address)start);1230else1231Disassembler::decode((address)start, (address)start + len);1232}12331234JNIEXPORT void das1(unsigned long insn) {1235das(insn, 1);1236}1237}12381239#define gas_assert(ARG1) assert(ARG1, #ARG1)12401241#define __ as->12421243void Address::lea(MacroAssembler *as, Register r) const {1244Relocation* reloc = _rspec.reloc();1245relocInfo::relocType rtype = (relocInfo::relocType) reloc->type();12461247switch(_mode) {1248case base_plus_offset: {1249if (_offset == 0 && _base == r) // it's a nop1250break;1251if (_offset > 0)1252__ add(r, _base, _offset);1253else1254__ sub(r, _base, -_offset);1255break;1256}1257case base_plus_offset_reg: {1258__ add(r, _base, _index, _ext.op(), MAX(_ext.shift(), 0));1259break;1260}1261case literal: {1262if (rtype == relocInfo::none)1263__ mov(r, target());1264else1265__ movptr(r, (uint64_t)target());1266break;1267}1268case post: {1269__ mov(r, _base);1270break;1271}1272default:1273ShouldNotReachHere();1274}1275}12761277void Assembler::adrp(Register reg1, const Address &dest, unsigned long &byte_offset) {1278ShouldNotReachHere();1279}12801281#undef __12821283#define starti Instruction_aarch64 do_not_use(this); set_current(&do_not_use)12841285void Assembler::adr(Register Rd, address adr) {1286long offset = adr - pc();1287int offset_lo = offset & 3;1288offset >>= 2;1289starti;1290f(0, 31), f(offset_lo, 30, 29), f(0b10000, 28, 24), sf(offset, 23, 5);1291rf(Rd, 0);1292}12931294void Assembler::_adrp(Register Rd, address adr) {1295uint64_t pc_page = (uint64_t)pc() >> 12;1296uint64_t adr_page = (uint64_t)adr >> 12;1297long offset = adr_page - pc_page;1298int offset_lo = offset & 3;1299offset >>= 2;1300starti;1301f(1, 31), f(offset_lo, 30, 29), f(0b10000, 28, 24), sf(offset, 23, 5);1302rf(Rd, 0);1303}13041305#undef starti13061307Address::Address(address target, relocInfo::relocType rtype) : _mode(literal){1308_is_lval = false;1309_target = target;1310switch (rtype) {1311case relocInfo::oop_type:1312case relocInfo::metadata_type:1313// Oops are a special case. Normally they would be their own section1314// but in cases like icBuffer they are literals in the code stream that1315// we don't have a section for. We use none so that we get a literal address1316// which is always patchable.1317break;1318case relocInfo::external_word_type:1319_rspec = external_word_Relocation::spec(target);1320break;1321case relocInfo::internal_word_type:1322_rspec = internal_word_Relocation::spec(target);1323break;1324case relocInfo::opt_virtual_call_type:1325_rspec = opt_virtual_call_Relocation::spec();1326break;1327case relocInfo::static_call_type:1328_rspec = static_call_Relocation::spec();1329break;1330case relocInfo::runtime_call_type:1331_rspec = runtime_call_Relocation::spec();1332break;1333case relocInfo::poll_type:1334case relocInfo::poll_return_type:1335_rspec = Relocation::spec_simple(rtype);1336break;1337case relocInfo::none:1338_rspec = RelocationHolder::none;1339break;1340default:1341ShouldNotReachHere();1342break;1343}1344}13451346void Assembler::b(const Address &dest) {1347InstructionMark im(this);1348code_section()->relocate(inst_mark(), dest.rspec());1349b(dest.target());1350}13511352void Assembler::bl(const Address &dest) {1353InstructionMark im(this);1354code_section()->relocate(inst_mark(), dest.rspec());1355bl(dest.target());1356}13571358void Assembler::adr(Register r, const Address &dest) {1359InstructionMark im(this);1360code_section()->relocate(inst_mark(), dest.rspec());1361adr(r, dest.target());1362}13631364void Assembler::br(Condition cc, Label &L) {1365if (L.is_bound()) {1366br(cc, target(L));1367} else {1368L.add_patch_at(code(), locator());1369br(cc, pc());1370}1371}13721373void Assembler::wrap_label(Label &L,1374Assembler::uncond_branch_insn insn) {1375if (L.is_bound()) {1376(this->*insn)(target(L));1377} else {1378L.add_patch_at(code(), locator());1379(this->*insn)(pc());1380}1381}13821383void Assembler::wrap_label(Register r, Label &L,1384compare_and_branch_insn insn) {1385if (L.is_bound()) {1386(this->*insn)(r, target(L));1387} else {1388L.add_patch_at(code(), locator());1389(this->*insn)(r, pc());1390}1391}13921393void Assembler::wrap_label(Register r, int bitpos, Label &L,1394test_and_branch_insn insn) {1395if (L.is_bound()) {1396(this->*insn)(r, bitpos, target(L));1397} else {1398L.add_patch_at(code(), locator());1399(this->*insn)(r, bitpos, pc());1400}1401}14021403void Assembler::wrap_label(Label &L, prfop op, prefetch_insn insn) {1404if (L.is_bound()) {1405(this->*insn)(target(L), op);1406} else {1407L.add_patch_at(code(), locator());1408(this->*insn)(pc(), op);1409}1410}14111412// An "all-purpose" add/subtract immediate, per ARM documentation:1413// A "programmer-friendly" assembler may accept a negative immediate1414// between -(2^24 -1) and -1 inclusive, causing it to convert a1415// requested ADD operation to a SUB, or vice versa, and then encode1416// the absolute value of the immediate as for uimm24.1417void Assembler::add_sub_immediate(Register Rd, Register Rn, unsigned uimm, int op,1418int negated_op) {1419bool sets_flags = op & 1; // this op sets flags1420union {1421unsigned u;1422int imm;1423};1424u = uimm;1425bool shift = false;1426bool neg = imm < 0;1427if (neg) {1428imm = -imm;1429op = negated_op;1430}1431assert(Rd != sp || imm % 16 == 0, "misaligned stack");1432if (imm >= (1 << 11)1433&& ((imm >> 12) << 12 == imm)) {1434imm >>= 12;1435shift = true;1436}1437f(op, 31, 29), f(0b10001, 28, 24), f(shift, 23, 22), f(imm, 21, 10);14381439// add/subtract immediate ops with the S bit set treat r31 as zr;1440// with S unset they use sp.1441if (sets_flags)1442zrf(Rd, 0);1443else1444srf(Rd, 0);14451446srf(Rn, 5);1447}14481449bool Assembler::operand_valid_for_add_sub_immediate(long imm) {1450bool shift = false;1451unsigned long uimm = uabs(imm);1452if (uimm < (1 << 12))1453return true;1454if (uimm < (1 << 24)1455&& ((uimm >> 12) << 12 == uimm)) {1456return true;1457}1458return false;1459}14601461bool Assembler::operand_valid_for_logical_immediate(bool is32, uint64_t imm) {1462return encode_logical_immediate(is32, imm) != 0xffffffff;1463}14641465static uint64_t doubleTo64Bits(jdouble d) {1466union {1467jdouble double_value;1468uint64_t double_bits;1469};14701471double_value = d;1472return double_bits;1473}14741475bool Assembler::operand_valid_for_float_immediate(double imm) {1476// If imm is all zero bits we can use ZR as the source of a1477// floating-point value.1478if (doubleTo64Bits(imm) == 0)1479return true;14801481// Otherwise try to encode imm then convert the encoded value back1482// and make sure it's the exact same bit pattern.1483unsigned result = encoding_for_fp_immediate(imm);1484return doubleTo64Bits(imm) == fp_immediate_for_encoding(result, true);1485}14861487int AbstractAssembler::code_fill_byte() {1488return 0;1489}14901491// n.b. this is implemented in subclass MacroAssembler1492void Assembler::bang_stack_with_offset(int offset) { Unimplemented(); }149314941495// and now the routines called by the assembler which encapsulate the1496// above encode and decode functions14971498uint32_t1499asm_util::encode_logical_immediate(bool is32, uint64_t imm)1500{1501if (is32) {1502/* Allow all zeros or all ones in top 32-bits, so that1503constant expressions like ~1 are permitted. */1504if (imm >> 32 != 0 && imm >> 32 != 0xffffffff)1505return 0xffffffff;1506/* Replicate the 32 lower bits to the 32 upper bits. */1507imm &= 0xffffffff;1508imm |= imm << 32;1509}15101511return encoding_for_logical_immediate(imm);1512}15131514unsigned Assembler::pack(double value) {1515float val = (float)value;1516unsigned result = encoding_for_fp_immediate(val);1517guarantee(unpack(result) == value,1518"Invalid floating-point immediate operand");1519return result;1520}15211522// Packed operands for Floating-point Move (immediate)15231524static float unpack(unsigned value) {1525union {1526unsigned ival;1527float val;1528};1529ival = fp_immediate_for_encoding(value, 0);1530return val;1531}153215331534