logo资料库

ARMv8 arm64 指令集速览表(打印版).pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
ARMv8 A64 Quick Reference Arithmetic Instructions ADC{S} ADD{S} ADR rd, rn, rm rd = rn + rm + C rd = rn + op2 Xd = PC + rel± Xd = PC63:12:012 + rel± 33:12:012 ADRP CMN CMP MADD MNEG MSUB MUL NEG{S} NGC{S} SBC{S} SDIV SMADDL SMNEGL SMSUBL SMULH SMULL SUB{S} UDIV UMADDL UMNEGL UMSUBL UMULH UMULL rd, rn, op2 Xd, ±rel21 Xd, ±rel33 rd, op2 rd, op2 rd, rn, rm, ra rd, rn, rm rd, rn, rm, ra rd, rn, rm rd, op2 rd, rm rd, rn, rm rd + op2 rd − op2 rd = ra + rn × rm rd = − rn × rm rd = ra − rn × rm rd = rn × rm rd = −op2 rd = −rm − ∼C rd = rn − rm − ∼C rd = rn ¯÷ rm Xd, Wn, Wm Xd = − Wn ¯× Wm rd, rn, rm Xd, Wn, Wm, Xa Xd = Xa + Wn ¯× Wm Xd, Wn, Wm Xd, Wn, Wm, Xa Xd = Xa − Wn ¯× Wm Xd = (Xn ¯× Xm)127:64 Xd, Xn, Xm Xd = Wn ¯× Wm rd = rn - op2 rd = rn ÷ rm rd, rn, rm Xd, Wn, Wm, Xa Xd = Xa + Wn × Wm Xd, Wn, Wm Xd, Wn, Wm, Xa Xd = Xa − Wn × Wm Xd = (Xn × Xm)127:64 Xd, Xn, Xm Xd = Wn × Wm Xd = − Wn × Wm Xd, Wn, Wm rd, rn, op2 Bit Manipulation Instructions BFI BFXIL CLS CLZ EXTR RBIT REV REV16 rd, rn, #p, #n rd, rn, #p, #n rd, rn rd, rn rd, rn, rm, #p rd, rn rd, rn rd, rn Xd, Xn REV32 {S,U}BFIZ {S,U}BFX {S,U}XT{B,H} rd, Wn Xd, Wn SXTW rd, rn, #p, #n rd, rn, #p, #n rdp+n−1:p = rnn−1:0 rdn−1:0 = rnp+n−1:p rd = CountLeadingOnes(rn) rd = CountLeadingZeros(rn) rd = rnp−1:0:rmN0 rd = ReverseBits(rn) rd = BSwap(rn) for(n=0..1|3) rdHn=BSwap(rnHn) Xd=BSwap(Xn63:32):BSwap(Xn31:0) rd = rn? rd = rn? rd = Wn? Xd = Wn± n−1:0 p p+n−1:p N0 Logical and Move Instructions AND{S} ASR rd, rn, op2 ASR BIC{S} EON EOR LSL LSL LSR LSR MOV MOV MOVK MOVN MOVZ MVN ORN ORR ROR ROR TST S S S S rd, rn, rm rd, rn, #i6 rd, rn, op2 rd, rn, op2 rd, rn, op2 rd, rn, rm rd, rn, #i6 rd, rn, rm rd, rn, #i6 rd, rn rd, #i rd,#i16{, sh} rd,#i16{, sh} rd,#i16{, sh} rd, op2 rd, rn, op2 rd, rn, op2 rd, rn, #i6 rd, rn, rm rn, op2 Branch Instructions B Bcc BL BLR BR CBNZ CBZ RET TBNZ TBZ rel28 rel21 rel28 Xn Xn rn, rel21 rn, rel21 {Xn} rn, #i, rel16 rn, #i, rel16 rd = rn & op2 rd = rn ¯ rm rd = rn ¯ i rd = rn & ∼op2 rd = rn ⊕ ∼op2 rd = rn ⊕ op2 rd = rn rm rd = rn i rd = rn rm rd = rn i rd = rn rd = i rdsh+15:sh = i rd = ∼(i∅ sh) rd = i∅ sh rd = ∼op2 rd = rn | ∼op2 rd = rn | op2 rd = rn ≫ i rd = rn ≫ rm rn & op2 PC = PC + rel± 27:2:02 if(cc) PC = PC + rel± 20:2:02 X30 = PC + 4; PC += rel± X30 = PC + 4; PC = Xn 27:2:02 PC = Xn if(rn = 0) PC += rel∅ if(rn = 0) PC += rel∅ PC = Xn = 0) PC += rel± if(rni if(rni = 0) PC += rel± 21:2:02 21:2:02 15:2:02 15:2:02 rs, rt, [Xn] Atomic Instructions CAS{A}{L} CAS{A}{L}{B,H} Ws, Wt, [Xn] CAS{A}{L}P rs,rs2,rt,rt2,[Xn] LDao{A}{L}{B,H} Ws, Wt, [Xn] Wt=[Xn]∅ LDao{A}{L} STao{A}{L}{B,H} Ws, [Xn] STao{A}{L} SWP{A}{L}{B,H} Ws, Wt, [Xn] Wt = [Xn]∅ SWP{A}{L} if (rs = [Xn]N) [Xn]N = rt if (WsN0 = [Xn]N) [Xn]N = WtN0 if (rs2:rs = [Xn]2N) [Xn]2N = rt2:rt N; [Xn]N=ao([Xn]N,WsN0) rt = [Xn]N; [Xn]N = ao([Xn]N, rs) [Xn]N = ao([Xn]N, WsN0) [Xn]N = ao([Xn]N, rs) N; [Xn]N = WsN0 rt = [Xn]N; [Xn]N = rs rs, rt, [Xn] rs, rt, [Xn] rs, [Xn] Conditional Instructions CCMN CCMN CCMP CCMP CINC CINV CNEG CSEL CSET CSETM CSINC CSINV CSNEG rn, #i5, #f4, cc rn, rm, #f4, cc rn, #i5, #f4, cc rn, rm, #f4, cc rd, rn, cc rd, rn, cc rd, rn, cc rd, rn, rm, cc rd, cc rd, cc rd, rn, rm, cc rd, rn, rm, cc rd, rn, rm, cc if(cc) rn + i; else N:Z:C:V = f if(cc) rn + rm; else N:Z:C:V = f if(cc) rn − i; else N:Z:C:V = f if(cc) rn − rm; else N:Z:C:V = f if(cc) rd = rn + 1; else rd = rn if(cc) rd = ∼rn; else rd = rn if(cc) rd = −rn; else rd = rn if(cc) rd = rn; else rd = rm if(cc) rd = 1; else rd = 0 if(cc) rd = ∼0; else rd = 0 if(cc) rd = rn; else rd = rm + 1 if(cc) rd = rn; else rd = ∼rm if(cc) rd = rn; else rd = −rm Load and Store Instructions LDP rt, rt2, [addr] Xt, Xt2, [addr] LDPSW LD{U}R rt, [addr] LD{U}R{B,H} Wt, [addr] LD{U}RS{B,H} rt, [addr] LD{U}RSW Xt, [addr] prfop, addr PRFM rt, rt2, [addr] STP ST{U}R rt, [addr] ST{U}R{B,H} Wt, [addr] 32; Xt2 = [addr+4]± 32 N rt2:rt = [addr]2N Xt = [addr]± rt = [addr]N Wt = [addr]∅ rt = [addr]± Xt = [addr]± Prefetch(addr, prfop) [addr]2N = rt2:rt [addr]N = rt [addr]N = WtN0 32 N Addressing Modes (addr) xxP,LDPSW xxP,LDPSW xxP,LDPSW xxR*,PRFM xxR* xxR* xxR*,PRFM xxR*,PRFM xxR*,PRFM 6+s:s:0s 6+s:s:0s 6+s:s:0s; addr=Xn addr = Xn + i± [Xn{, #i7+s}] addr=Xn; Xn+=i± [Xn], #i7+s Xn+=i± [Xn, #i7+s]! addr = Xn + i∅ [Xn{, #i12+s}] 11+s:s:0s addr = Xn; Xn += i± [Xn], #i9 Xn += i±; addr = Xn [Xn, #i9]! [Xn,Xm{, LSL #0|s}] addr = Xn + Xm s [Xn,Wm,{S,U}XTW{ #0|s}] addr = Xn + Wm? s addr = Xn + Xm± s [Xn,Xm,SXTX{ #0|s}] [Xn{, #i9}] addr = Xn += i± addr = PC + rel± 20:2:02 xxUR*,PRFM LDR{SW},PRFM ±rel21 Atomic Operations (ao) ADD [Xn] + rs CLR [Xn] & ∼rs EOR [Xn] ⊕ rs SET [Xn] | rs SMAX [Xn] ¯> rs ? [Xn] : rs SMIN [Xn] ¯< rs ? [Xn] : rs UMAX [Xn] > rs ? [Xn] : rs UMIN [Xn] < rs ? [Xn] : rs ARM64 version 2 page 1 S 1 1 1 1 1 1 1 1 1
Operand 2 (op2) all all all all logical arithmetic arithmetic arithmetic arithmetic arithmetic arithmetic rm rm i rm i rm ¯ i rm ≫ i rm rm, LSL #i6 rm, LSR #i6 rm, ASR #i6 rm, ROR #i6 B0 i Wm, {S,U}XTB{ #i3} Wm? H0 i Wm, {S,U}XTH{ #i3} Wm? Wm, {S,U}XTW{ #i3} Wm? i Xm, {S,U}XTX{ #i3} Xm? i #i12 #i24 i∅ i∅ 23:12:012 mask AND,EOR,ORR,TST #mask Registers X0-X7 Arguments and return values X8 Indirect result X9-X15 Temporary X16-X17 Intra-procedure-call temporary X18 Platform defined use X19-X28 Temporary (must be preserved) X29 X30 SP XZR PC Frame pointer (must be preserved) Return address Stack pointer Zero Program counter Special Purpose Registers SPSR EL{1..3} Process state on exception entry to EL{1..3} ELR EL{1..3} Exception return address from EL{1..3} SP EL{0..2} SPSel Stack pointer for EL{0..2} SP selection (0: SP=SP EL0, 1: SP=SP ELn) CurrentEL Current Exception level (at bits 3..2) 64 64 RO DAIF NZCV FPCR FPSR Keys N s rd, rn, rm, rt Current interrupt mask bits (at bits 9..6) Condition flags (at bits 31..28) Floating-point operation control Floating-point status Operand bit size (8, 16, 32 or 64) Operand log byte size (0=byte,1=hword,2=word,3=dword) General register of either size (Wn or Xn) P{LD,LI,ST}L{1..3}{KEEP,STRM} Optional halfword left shift (LSL #{16,32,48}) prfop {,sh} val±, val∅, val? Value is sign/zero extended (? depends on instruction) ¯× ¯÷ ¯ ¯> ¯< Operation is signed Checksum Instructions CRC32{B,H} Wd, Wn, Wm Wd=CRC32(Wn,0x04c11db7,WmN0) Wd, Wn, Wm Wd = CRC32(Wn,0x04c11db7,Wm) CRC32W Wd = CRC32(Wn,0x04c11db7,Xm) CRC32X CRC32C{B,H} Wd, Wn, Wm Wd=CRC32(Wn,0x1edc6f41,WmN0) Wd, Wn, Wm Wd = CRC32(Wn,0x1edc6f41,Wm) CRC32CW Wd = CRC32(Wn,0x1edc6f41,Xm) Wd, Wn, Xm Wd, Wn, Xm CRC32CX rt, rt2, [Xn] Load and Store Instructions with Attribute LD{A}XP LD{A}{X}R LD{A}{X}R{B,H} Wt, [Xn] LDNP rt, [Xn] rt:rt2 = [Xn, ]2N rt = [Xn, ]N Wt = [Xn, ]∅ N LDTR rt,rt2,[Xn{,#i7+s}]rt2:rt = [Xn + i± rt, [Xn{, #i9}] rt = [Xn += i±, ]N LDTR{B,H} Wt, [Xn{, #i9}] Wt = [Xn += i±, ]∅ rt = [Xn += i±, ]± LDTRS{B,H} rt, [Xn{, #i9}] Xt, [Xn{, #i9}] Xt = [Xn += i±, ]± LDTRSW N 32 N 6+s:s:0s, ]2N STLR rt, [Xn] STLR{B,H} Wt, [Xn] ST{L}XP ST{L}XR ST{L}XR{B,H} Wd, Wt, [Xn] STNP Wd, rt, [Xn] Wd, rt, rt2, [Xn] rt,rt2,[Xn{,#i7+s}][Xn + i± rt, [Xn{, #i9}] STTR STTR{B,H} Wt, [Xn{, #i9}] [Xn, ]N = rt [Xn, ]N = WtN0 [Xn, ]2N=rt:rt2; Wd=fail?1:0 [Xn, ]N=rt; Wd=fail?1:0 [Xn, ]N=WtN0; Wd=fail?1:0 6+s:s:0s, ]2N = rt2:rt [Xn += i±, ]N = rt [Xn += i±, ]N = WtN0 Condition Codes (cc) EQ NE Equal Not equal Z !Z CS/HS Carry set, Unsigned higher or same C CC/LO Carry clear, Unsigned lower MI PL VS VC HI LS GE LT GT LE AL Minus, Negative Plus, Positive or zero Overflow No overflow Unsigned higher Unsigned lower or same Signed greater than or equal Signed less than Signed greater than Signed less than or equal Always (default) !C N !N V !V C & !Z !C | Z N = V N = V !Z & N = V Z | N = V 1 Notes for Instruction Set S SP/WSP may be used as operand(s) instead of XZR/WZR 1 Introduced in ARMv8.1 S1{2}E{0..3}{R,W}, Xn PAR EL1 = AddrTrans(Xn) System Instructions AT BRK #i16 CLREX {#i4} DMB barrierop DSB barrierop ERET HVC #16 {SY} ISB Xd, sysreg MRS MSR sysreg, Xn SPSel, #i1 MSR MSR DAIFSet, #i4 MSR DAIFClr, #i4 NOP SEV SEVL SMC #i16 SVC #i16 WFE WFI YIELD SoftwareBreakpoint(i) ClearExclusiveLocal() DataMemoryBarrier(barrierop) DataSyncBarrier(barrierop) PC=ELR ELn;PSTATE=SPSR ELn CallHypervisor(i) InstructionSyncBarrier(SY) Xd = sysreg sysreg = Xn PSTATE.SP = i PSTATE.DAIF |= i PSTATE.DAIF &= ∼i SendEvent() EventRegisterSet() CallSecureMonitor(i) CallSupervisor(i) WaitForEvent() WaitForInterrupt() Cache and TLB Maintenance Instructions DC DC DC DC IC {C,CI,I}SW, Xx {C,CI,I}VAC, Xx CVAU, Xx ZVA, Xx IALLU{IS} IVAU, Xx IC TLBI ALLE{1..3}{IS} TLBI ASIDE1{IS}, Xx IPAS2{L}E1{IS}, Xx TLBI TLBI VAA{L}E1{IS}, Xx TLBI VA{L}E{1..3}{IS}, Xx TLBI VMALL{S12}E1{IS} DC clean and/or inv by Set/Way DC clean and/or inv by VA to PoC DC clean by VA to PoU DC zero by VA (len in DCZID EL0) IC inv all to PoU IC inv VA to PoU TLB inv all TLB inv by ASID TLB inv by IPA {last level} TLB inv by VA, all ASID {last level} TLB inv by VA {last level} TLB inv by VMID, all, at stage 1{&2} DMB and DSB Options OSH{,LD,ST} Outer shareable, {all,load,store} NSH{,LD,ST} Non-shareable, {all,load,store} ISH{,LD,ST} Inner shareable, {all,load,store} LD Full system, load ST SY Full system, store Full system, all ARM64 version 2 page 2
ARMv8-A System Control and Translation Registers SCTLR EL{1..3} ACTLR EL{1..3} CPACR EL1 System Control Auxiliary Control Architectural Feature Access Control HCR EL2 CPTR EL{2,3} HSTR EL2 Hypervisor Configuration Architectural Feature Trap Hypervisor System Trap HACR EL2 Hypervisor Auxiliary Control SCR EL3 TTBR0 EL{1..3} TTBR1 EL1 TCR EL{1..3} VTTBR EL2 Secure Configuration Translation Table Base 0 (4/16/64kb aligned) Translation Table Base 1 (4/16/64kb aligned) Translation Control Virt Translation Table Base (4/16/64kb aligned) Virt Translation Control VTCR EL2 {A}MAIR EL{1..3} {Auxiliary} Memory Attribute Indirection LOR{S,E}A EL1 LORegion {Start,End} Address LOR{C,N,ID} EL1 LORegion {Control,Number,ID} Exception Registers AFSR{0,1} EL{1..3} Auxiliary Fault Status {0,1} ESR EL{1..3} FAR EL{1..3} HPFAR EL2 Exception Syndrome Hypervisor IPA Fault Address Fault Address PAR EL1 VBAR EL{1..3} RVBAR EL{1..3} RMR EL{1..3} ISR EL1 Physical Address Vector Base Address (2kb aligned) Reset Vector Base Address Reset Management Interrupt Status Performance Monitors Registers PMCR EL0 PMCNTEN{SET,CLR} EL0 PM Count Enable {Set,Clear} PM Overflow Flag Status Clear PMOVSCLR EL0 PM Control PMSWINC EL0 PM Software Increment PMSELR EL0 PMCEID{0,1} EL0 PMCCNTR EL0 PM Event Counter Selection PM Common Event ID {0,1} PM Cycle Count Register PMXEVTYPER EL0 PM Selected Event Type PMXEVCNTR EL0 PM Selected Event Count PMUSERENR EL0 PM User Enable PM Overflow Flag Status Set PMOVSSET EL0 PMINTEN{SET,CLR} EL1 PM Interrupt Enable {Set,Clear} PMEVCNTR{0..30} EL0 PM Event Count {0..30} PMEVTYPER{0..30} EL0 PM Event Type {0..30} PM Cycle Count Filter PMCCFILTR EL0 ID Registers MIDR EL1 MPIDR EL1 REVIDR EL1 CCSIDR EL1 CLIDR EL1 AIDR EL1 CSSELR EL1 CTR EL0 DCZID EL0 VPIDR EL2 Main ID Multiprocessor Affinity Revision ID Current Cache Size ID Cache Level ID Auxiliary ID Cache Size Selection Cache Type Data Cache Zero ID Virtualization Processor ID RO RO,64 RO RO RO RO RO RO 64 Virtualization Multiprocessor ID AArch64 Processor Feature {0,1} AArch64 Debug Feature {0,1} AArch64 Auxiliary Feature {0,1} VMPIDR EL2 ID AA64PFR{0,1} EL1 ID AA64DFR{0,1} EL1 ID AA64AFR{0,1} EL1 RO,64 ID AA64ISAR{0,1} EL1 AArch64 Instruction Set Attribute {0,1} RO,64 ID AA64MMFR{0,1} EL1 AArch64 Memory Model Feature {0,1} RO,64 CONTEXTIDR EL1 TPIDR EL{0..3} TPIDRRO EL0 EL0 Read-only Software Thread ID Software Thread ID Context ID RO,64 RO,64 64 64 Exception Vectors 0x000,0x080,0x100,0x180 {Sync,IRQ,FIQ,SError} from cur lvl with SP EL0 0x200,0x280,0x300,0x380 {Sync,IRQ,FIQ,SError} from cur lvl with SP ELn 0x400,0x480,0x500,0x580 {Sync,IRQ,FIQ,SError} from lower lvl using A64 0x600,0x680,0x700,0x780 {Sync,IRQ,FIQ,SError} from lower lvl using A32 64 64 64 64 64 64 64 64,1 64,1 64 64 64 64 RO,64 System Control Register (SCTLR) RO WO RO 64 M A C SA SA0 0x00000001 MMU enabled 0x00000002 Alignment check enabled 0x00000004 Data and unified caches enabled 0x00000008 Enable SP alignment check 0x00000010 Enable SP alignment check for EL0 UMA 0x00000200 Trap EL0 access of DAIF to EL1 I 0x00001000 Instruction cache enabled DZE 0x00004000 Trap EL0 DC instruction to EL1 UCT 0x00008000 Trap EL0 access of CTR EL0 to EL1 nTWI 0x00010000 Trap EL0 WFI instruction to EL1 nTWE 0x00040000 Trap EL0 WFE instruction to EL1 WXN 0x00080000 Write permission implies XN Generic Timer Registers CNTFRQ EL0 CNT{P,V}CT EL0 CNTVOFF EL2 CNTHCTL EL2 Ct Frequency (in Hz) Ct {Physical,Virtual} Count RO,64 64 Ct Virtual Offset Ct Hypervisor Control Ct Kernel Control CNTKCTL EL1 CNT{P,V} {TVAL,CTL,CVAL} EL0 Ct {Physical,Virtual} Timer CNTHP {TVAL,CTL,CVAL} EL2 Ct Hypervisor Physical Timer CNTPS {TVAL,CTL,CVAL} EL1 CNTHV {TVAL,CTL,CVAL} EL2 Ct Physical Secure Timer Ct Virtual Timer 1 Exception Classes 0x00 0x01 0x07 0x08 Unknown reason Trapped WFI or WFE instruction execution Trapped access to SIMD/FP Trapped VMRS access Illegal Execution state 0x0e 0x11,0x15 SVC instruction execution in AArch{32,64} state 0x12,0x16 HVC instruction execution in AArch{32,64} state 0x13,0x17 SMC instruction execution in AArch{32,64} state 0x18 Trapped MSR, MRS, or System instruction execution Implementation defined exception to EL3 0x1f 0x20,0x21 Instruction Abort from {lower,current} level 0x22,0x26 {PC,SP} alignment fault 0x24,0x25 Data Abort from {lower,current} level 0x28,0x2c Trapped float-point exception from AArch{32,64} state 0x2f 0x30,0x31 Breakpoint exception from {lower,current} level 0x32,0x33 Software Step exception from {lower,current} level 0x34,0x35 Watchpoint exception from {lower,current} level 0x38,0x3c {BKPT,BRK} instruction excecution from AArch{32,64} state SError interrupt E1 E1 E1 E1 E1 E1 Secure Configuration Register (SCR) NS 0x0001 System state is non-secure unless in EL3 IRQ 0x0002 IRQs taken to EL3 FIQ EA 0x0004 FIQs taken to EL3 0x0008 External aborts and SError taken to EL3 SMD 0x0080 Secure monitor call disable HCE 0x0100 Hyp Call enable SIF 0x0200 Secure instruction fetch SPAN 0x00800000 Set privileged access never E1,1 RW 0x0400 Lower level is AArch64 E0E EE UCI 0x01000000 Data at EL0 is big-endian 0x02000000 Data at EL1 is big-endian 0x04000000 Trap EL0 cache instructions to EL1 E1 E1 ST 0x0800 Trap secure EL1 to CNTPS registers to EL3 0x1000 Trap EL{0..2} WFI instruction to EL3 TWI TWE 0x2000 Trap EL{0..2} WFE instruction to EL3 TLOR 0x4000 Trap LOR registers 1 ARM64 version 2 page 3
分享到:
收藏