Xtensa架构学习——指令总结

3.8 指令总结

由于最近急需对Xtensa架构有所了解,所以就直接跳到手册中最实用的指令集部分。下面开始学习吧!

本文主要对手册中指令集部分翻译整理,带有手册原图,以及作者自己学习总结。

首先是手册中核心指令的总结图。

3.8.1 加载指令

加载指令通过添加一个基址寄存器和一个8位无符号偏移量形成一个虚拟地址。如有必要,此虚拟地址将转换为物理地址。然后使用物理地址访问内存系统(通常通过缓存)。内存系统返回一个数据项(32,64或128位,取决于配置)。然后,加载指令从该内存项中提取引用的数据,并将要写入结果的寄存器进行零扩展或符号扩展。除非启用了未对齐的异常选项,否则当使用未对齐的地址时,处理器不会处理未对齐的数据或陷阱; 相反,它只是加载包含计算出的虚拟地址的对齐数据项。 这允许漏斗移位器与一对负载一起使用来引用任何字节地址上的数据。只有负载L32I,L32I.N和L32R可以访问InstRAM和InstROM位置。


(1) 

3.8.2 存储指令

存储指令在地址形成与加载指令相似。存储内存的错误不是同步异常; 存储器系统将使用中断来指示存储器上的错误。


3.8.3 内存访问顺序

Xtensa实现可以按任意顺序执行普通的加载和存储操作,只要加载返回存储在单个处理器和简单内存的加载地址的每个字节中的最后一个值(由程序执行顺序定义)。这种灵活性是合适的,因为大多数内存访问只需要这些语义,并且一些实现可以通过利用非程序顺序内存访问而显着更快地执行程序。 Xtensa ISA只要求实现遵循内存访问顺序的发布一致性模型1的简化版本,尽管许多实现更简单的更严格的顺序。有关Xtensa内存顺序语义的更多信息,请参阅第74页上的“多处理器同步选项”。
但是,一些加载和存储指令不仅用于读取和写入存储,还会对系统的其他部分(例如另一个处理器或I / O设备)产生一些影响。在C和C ++中,这些变量必须声明为volatile。 加载和存储这些位置必须按程序顺序执行。因此,Xtensa ISA提供了一条指令,可以用来为加载和存储内存访问提供程序排序。
在所有内存和高速缓存访问(但不是指令提取)之前,MEMW指令导致所有内存和高速缓存访问(加载,存储,获取,释放,预取和高速缓存操作,但不是指令提取)在程序顺序之前访问内存。至少有一个MEMW应该在每个加载或存储之间执行到一个volatile变量。多处理器同步选项提供了一些额外的指令,这些指令也以更集中的方式影响内存排序。MEMW比这些其他指令具有更广泛的应用(例如,在读取和写入设备寄存器时),但它也可能比同步指令影响性能。

EXTW指令与MEMW类似,但它将程序顺序中EXTW之前的指令的所有外部效应与程序顺序中的EXTW之后的所有外部指令外部效应分开。 EXTW是MEMW的超集,并且包含它所命令的内存访问。


3.8.4 跳转和调用指令

无条件分支指令J具有比条件分支更长的范围(PC相对)。Call有一个稍长的范围,因为它们的目标是32位对齐的地址。另外,跳转和调用间接指令提供了对case分派,函数变量和动态接的支持。


3.8.5 条件分支指令

表3-16中的分支指令根据比较结果将寄存器操作数与零,立即数或第二个寄存器值和条件分支进行比较。与其他ISA相比,复合(compound)比较和分支指令可以提高代码密度和性能。 所有分支都是PC相对的; 即立即域包含目标PC和当前PC之间的差异加四。 使用0-3的PC相对偏移是非法的,并保留供将来使用。



表3-17和表3-18中所示的分支立即数常量(b4const)字段和分支无符号立即数常量(b4constu)字段的编码为每种类型的常量指定了16个最常用的比较立即数之一。



3.8.6 移动指令

MOVI将寄存器设置为指令中的常量。表3-19所示的条件移动指令用于分支回避。


3.8.7 算术指令

表3-20列表的算术指令包括加和减,用于地址计算和合成常数相乘。ADDMI指令包括用于扩展加载和存储指令的范围。



3.8.8 按位逻辑指令

表3-21中的按位逻辑指令提供了可以从中合成其他逻辑的核心集。 没有提供这些指令的立即数格式,因为立即格式只有四位。


3.8.9 移位指令


3.8.10 处理器控制指令

表3-23包含处理器控制指令。RSR.*,WSR.*和XSR.*指令用于读取,写入和交换核心体系结构和体系结构选项的特殊寄存器,如表5-128在201页中所述。它们保存和恢复上下文,过程中断和异常,并控制地址转换和属性。XSR.*指令读写特殊寄存器和AR[t]。它结合了RSR.*和WSR.*操作,将特殊寄存器与AR[t]交换。
T1030和更早版本的处理器中不存在XSR.*指令。xSYNC指令同步特殊寄存器写入及其用途。有关如何使用xSYNC指令的更多信息,请参见第5章。这些同步指令与用于多处理器的同步指令是分开的,这些指令在第74页的第4.3.12节中描述。
在一些Xtensa实现中,RSR的延迟大于一个周期,所以将RSR结果的使用安排在远离RSR的位置以避免互锁是有利的。



猜你喜欢

转载自blog.csdn.net/doudoudouzoule/article/details/79609630
今日推荐