armv8架构与指令集_第1页
armv8架构与指令集_第2页
armv8架构与指令集_第3页
armv8架构与指令集_第4页
armv8架构与指令集_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

armv8架构与指令集目第1章ARMV8简 基础认 第2章EXECUTION 提供两种Execution 决定ExecutionState的条 第3章EXCEPTION ExceptionLevel与 EL3使用AArch64、AArch32的对 ELx和ExecutionState组 路由控 路由规 IRQ/FIQ/SError路由流程 第4章ARMV8寄存 A32状态下寄存器组 T32状态下寄存器组 第5章异常模 AArch32异常类 AArch64异常类 寄存器操 路由控 流程图对 IRQ流程 DataAbort流程 C函数入 上报流程 异常进入压栈准 栈布 第6章ARMV8指令 概 指令基本格 指令分 指令助记 指令条件 跳转指 异常产生和返指 系统寄存器指 数据处理指 Load/Store指 屏障指 A32&T32指令 跳转指 异常产生、返指 系统寄存器指 系统寄存器指 数据处理指 Load/Store指 IT(ifthen)指 协处理器指 指令编 A32编 T32-16bit编 T32-32bit编 A64编 第7章流水 简 简单三级流水 经典五级流水 指令并 --PAGE101ARMv8ARMv8ARMv716/32bitThumb2A32(ARM32bit64bitAArch64A64(ARM64bit)指令集外,也扩充了现有的A32(ARM32bit)和T32(Thumb232bit)指令集,另外还新增加了32bitExecution64bitExecutionA32、AArch32ISA(InstructionAArch64ISA(InstructionSingle-InstructionMultiple-Data(单指令多数据(参考文档:ARMv8-AArchitecturereferencemanual-2ExecutionExecutionARMv8AArch32stateAArch64stateExecutionStateExecutionStateExecution1332bitR0-R1232bitPCR15SPR13)LR32bitELRHypmode3264bitSIMDfloating-point64bitPCSPx32128bitSIMDfloating-pointPEstatePSTATE(NZCV/DAIF/CurrentEL/SPSel),PE决定ExecutionStateSPSR_EL1.M[4EL0064bitHCR_EL2.RWEL1164bitSCR_EL3.RWEL2orEL1164bitAArch32AArch64发生异常或者Reset来实现.(A32T32BX3ExceptionARMv8EL0-EL34ExceptionLevelPEEL2SecurestateNon-secureEL3Securestate,EL0/EL1SecureNon-secureEL0&EL1必须要实现,EL2/EL3可选ExceptionLevelLinuxkernel-HypervisorSecureMonitor(ARMTrustedNon-EL0/EL1/EL2Non-secureEL0/EL1/EL3Non-securememory&SecurememoryEL3AArch64、AArch32UsermodeNonSecureEL0orSecureSCR_EL3.NSlowlevelELsecure/non-secureEL2Non-secureEL0Non-securestateSecureEL1AArch32NonSecureSYS/FIQ/IRQ/SVC/ABORT/UNDNon-secureSecureSYS/FIQ/IRQ/SVC/ABORT/UNDSecureSCR_EL3.NS0SecureEL0/EL1Non-secureELO/EL1SecurestateSecureUsermodeNonSecureEL0orSecureEL1AArch32NonSecureSYS/FIQ/IRQ/SVC/ABORT/UNDNon-secureSecureSYS/FIQ/IRQ/SVC/ABORT/UNDSecurestateSecureEL0/EL3SecureEL1ELx和ExecutionStateEL0/EL1/EL2/EL3=>此两类组合不存在64bit–>32bit之间的所谓InterprocessingEL0/EL1/EL2/EL3=>EL0=>AARCH32,EL1/EL2/EL3=>此三类组合存在64bit–>32bit之间的所谓InterprocessingEL0/EL1=>AArch32,EL2/EL3=>EL0/EL1/EL2=>AArch32,EL3=>字宽(ELx)<=字宽 {x=0,1,2路由规则如下图所示(fromARMv8Datasheet:SPSR_EL1.M[40ELOAArch64SCR_EL3.RW1EL2/EL1AArch64SCR_EL3.{EAFIQIRQ1SError\FIQ\IRQHCR_EL2.RW1EL1AArch64HCR_EL2.{AMOIMOFMO1EL1/EL0SError\FIQ\IRQEL2HCR_EL2.TGE1HCR_EL2.{AMOIMOFMO1EL1/EL0SCR_EL3.{EAFIQIRQ}bitHCR_EL2.{AMOIMOFMObitIRQ/FIQ/SError4ARMv832-64-R0-SP_x:xSP_xxund/svc/abt/svc/irq/fiq/mon},用于保存程序返链接信息地址,AArch32环境下,也用于保存异常返地址,也就说LR和是CPSRUserSys寄存器:xund/svc/abt/irq/fiq/hpy/mon},注意:这些模式只适用于32bitHypmode&Monitormode64bitR0-R7bankedregister,R8-R14bankedA32Rd/Rn4T32-32bitRd/Rn4T32-16bitRd/Rn3T32-16bit能访问到,16bitRd/Rn3RxR0-R7SPSPSPLRLR(R14)LR(R14)PCPC(R15)PC(R15)X0-LR==ExceptionSP_EL0SP_ELx,x=SCR_EL3.{EA,IRQ,FIQ,RW}EL0/EL1/EL21ELxCPSR64-32-64-bitOSAArch32App64-32-5AArch32UndefinedUndSupervisorSvcHypervisorHypSecureMonitorMonPrefetchAbtDataAbtIRQIRQFIQFIQHypTrapHypMonitorTrapMonAArch64可分为同步异常&Synchronous(同步异常UndefinedIllegalExecutionSystemMisalignedInstructionDataDebugAsynchronous(异步异常SErrororIRQororFIQoror||||||SP=>&&CurrentELSP=>&&CurrentEL64bit=>&&LowlevelEL32bit=>&&LowlevelEL32bit64bitPEAArch32AArch64AArch32x=2、保存异常返地址到LR_x,用于异常返3PSTATE异常返时需要从SPSR_x恢复4、PSTATE操作:PSTATE.{A,I,F}=1PSTATE.T1A32PSTATE.IT[7:2]=64modemodeVectorbaseaddrAArch641PSTATESPSR_ELx,(x2、保存异常进入地址到ELR_ELxEL(SPSR_ELx.M[0]==1)?h(ELx):Execution10AsynchronousDataAbortIRQorFIQorSErrororIRQorFIQor=}AArch32、AArch64IRQDataAbortIRQDataAbortCAArch32AArch64CCDataSystemDataAbort和IRQDataAbortsp#S_LR#S_FRAME_SIZEx28-x29x0-x1spaddx21,sp,mrsx22,mrsx23,6ARMv8A32&T32 <Rd>,<Rn>◻A32:Rd=>◻A64:Rd=>Xt=>4bit,0b0000目标寄存器,A32R0-R14,T32RO-R7,A64X0-X30W0-RdRmMRS、MSRPSTATE◻load/storeload-Acquire、store-Release(A64LDM/STMA6431(X0-X30)64bit(32bitW0-W30),5bitPCloadX30LDM/STMPUSH/POPSTP/LDPload/storeLDNP/STNPholdCPSRPSTATEA3248bitA6432/64◻A648bit8bit高位(dstgetstop有限位(dstLong(dst>Wide(dst==src1,src1>src2)C==1&&!(C==1&&Z==0&&!(Z==0&&condCBNZ X1!0CBZ X1=0TBNZX1,#3labelX1[3]!=0,TBZX1,#3 绝对跳转#imm,返地址保存到绝对跳转reg,返地址保存到reg子程序返指令,返地址默认保存在异常产生和返异常返,使用当前的SPSR_ELx和R<-SS<-RSSS逆向减法,操作数21,结果取负数运算,NEGX1,X2X1X21(负数=正数补码S例如:TSTW0,#0X40W0[3]1,相当于:ANDbase=PC[11:0]=ZERO(12);Xd=base+Xd=PC+BFMWd,Wn,#r,ifs>=rthenWd<s-r:0>=Wn<s:r>,elseWd<32+s-r,32-r>=算术右移(结果带符号逻辑左移逻辑右移SXTB#immUXTBimmLoad/Store{base{,#0}(+{base{,#imm}{base,Xm{,LSL#imm}Pre-[base,#immPost-[base,#imm{baseLoad/Store(Scaled对齐的,无符号#imm12pre-/post-index非对齐,带符号#imm9pre-/post-indexor32bitZero-Extend/Sign-0Xt[63:320Xt[63:32Wn(Wn[31])Load/Store(UnscaledScaledUnscaledscaledUnscaledsimm9pre-/post-index立即数偏移#simm9256~+256立即数偏移#simm9256~+256Load/StorePC-relative(PCpre-/post-index带”SLoad/StorePair对齐的,有符号#simm7pre-/post-index带”SLoad/StoreNon-temporalNon-temporal被刷新,优化性能,其它指令都默认会写Cache对齐的,有符号#simm7pre-/post-index带”SLoad/StoreUnprivileged(非特权UnprivilegedEL0/EL1EL0EL0EL1EL0simm9pre-/post-indexEL1EL0带”SEL1EL0Load/StoreExclusive(独占CPU所谓原子操作简单理解就是不能被中断的操作CPU。pre-/post-index返是否独占访问成功状态(Ws)把Xt1,Xt2一对双字字数据写入到Memory地址addr中,返是否独占访问成功状Load-pre-/post-index返是否独占访问成功状态LDAXPPair返是否独占访问成功状态STLXPPair保证该指令前的所有内存访问结束,而该指令之后引起的内存访问 DMB乱序执行; Load-AcquireMemoryreadStore-ReleaseMemroywrite,组 A32&T32换只能通过跳转实现,不能通过直接writeregister方式实现.BL&BX测试位比较0带返的寄存器跳返到子程异常产生、返指Load/StoreOffset偏移寻址(regor[<Rn>,Pre-indexed[<Rn>,Post-indexed[<Rn>],LoadLDRDSTRDA64LDP/STPD(DuaA64P(Pair)关键字是一个LoadStore(LDMCond类型^}STMCond类型^}4444满递减堆栈,SP满递增堆栈,SP空递减堆栈,SP空递增堆栈,SP据据堆栈首部是低地址,堆栈向高地址增长。SP总是指向下一个将要放入数据的堆栈首部是高地址,堆栈向低地址增长。SP总是指向下一个将要放入数据的器中的数据传送到多个寄存器,批量存储R15(PC)R0~R15复制到LDMI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论