问题描述
2016 年,ARM 推出了 ARMv8-M 架构,作为对流行的 ARMv6-M(Cortex M0/M0+/M1)和 ARMv7-M(Cortex M3/M4/M7)架构的升级。 ARMv8-M 架构再次分为 Baseline 配置文件(被视为 ARMv6-M 架构的延续)和 Mainline 配置文件(视为 ARMv7-M 架构的延续) .
不幸的是,对 ARMv8-M Architecture Reference Manual 的粗略检查并没有深入了解究竟添加了什么,并且与之前版本的架构相比,似乎没有有用的总结。与新版本的 cpu 架构一样,似乎几乎所有细节都没有改变,只是在这里和那里添加了少量内容。
ARMv8-M Baseline 比 ARMv6-M 提供哪些额外的指令和指令变体?
解决方法
标题为 Cortex-M for Beginners 的 ARM 文档可能会提供您正在寻找的信息,更具体地说是第 6 页和第 7 页。
ARMv6-M 提供了 16 位指令 ADC
、ADD
、ADR
、AND
、ASR
、B
、{{1 }}、BIC
、BKPT
、BL
、BLX
、BX
、CMN
、CMP
、CPS
,EOR
,LDMIA
,LDR
,LDRB
,LDRH
,LDRSB
,LDRSH
,LSL
,{ {1}}、LSR
、MOV
、MUL
、MVN
、NOP
、ORR
、PUSH
、{{1 }}、REV
、REV16
、REVSH
、ROR
、RSB
、SBC
、SEV
、STMIA
,STR
,STRB
,STRH
,SUB
,SVC
,SXTB
,SXTH
,TST
,{ {1}}、UDF
和 UXTB
。
此外,还提供 32 位指令 UXTH
、WFE
、WFI
、YIELD
、BL
和 DMB
。
对于这些,ARMv8-M 基线增加了...
- 硬件分割指令
DSB
和ISB
- 32 位无条件分支指令
MRS
(用于扩展范围) - 16 位比较和分支指令
MSR
和SDIV
- 用于加载常量的 32 位指令
UDIV
和B
(作为CBZ
的替代) - load-acquire/store-release 指令
CBNZ
、MOVW
、MOVT
、LDR Rd,=...
、LDA
和LDAB
- 具有独占访问权限的加载-获取/存储-释放指令
LDAH
、STL
、STLB
、STLH
、LDAEX
和LDAEXB
- 独占访问说明
LDAEXH
、STLEX
、STLEXB
、STLEXH
、CLREX
、LDREX
和LDREXB
立>
如果另外实现了安全扩展,则指令 LDREXH
、STREX
、STREXB
、STREXH
、BLXNS
、BXNS
和SG
可用。