1 概述 Xtensa 架构的核心指令
表 3–11 总结了所有版本的 Xtensa 架构中包含的核心指令。本节剩余部分给出了核心指令的概述。
表 3–11. 核心指令概览
指令类别 | 指令 | 参考 |
---|---|---|
加载 | L8UI, L16SI, L16UI, L32I, L32R | 加载指令 |
存储 | S8I, S16I, S32I | 存储指令 |
内存排序 | MEMW, EXTW | 内存访问排序 |
跳转、调用 | CALL0, CALLX0, RET, J, JX | 跳转和调用指令 |
条件分支 | BALL, BNALL, BANY, BNONE, BBC, BBCI, BBS, BBSI, BEQ, BEQI, BEQZ, BNE, BNEI, BNEZ, BGE, BGEI, BGEU, BGEUI, BGEZ, BLT, BLTI, BLTU, BLTUI, BLTZ | 条件分支指令 |
移动 | MOVI, MOVEQZ, MOVGEZ, MOVLTZ, MOVNEZ | 移动指令 |
算术 | ADDI, ADDMI, ADD, ADDX2, ADDX4, ADDX8, SUB, SUBX2, SUBX4, SUBX8, NEG, ABS, SALT, SALTU | 算术指令 |
位逻辑 | AND, OR, XOR | 位逻辑指令 |
移位 | EXTUI, SRLI, SRAI, SLLI, SRC, SLL, SRL, SRA, SSL, SSR, SSAI, SSA8B, SSA8L | 移位指令 |
处理器控制 | RSR, WSR, XSR, RUR, WUR, ISYNC, RSYNC, ESYNC, DSYNC, FSYNC, NOP | 处理器控制指令 |
2 加载指令
加载指令通过将基寄存器和一个 8 位无符号偏移量相加形成虚拟地址。如果必要的话,这个虚拟地址会被转换成物理地址。然后使用这个物理地址访问内存系统(通常通过缓存)。内存系统返回一个数据项(根据配置可以是 32、64、128、256 或 512 位)。加载指令随后从这个内存项中提取引用的数据,并将结果零扩展或符号扩展到寄存器中。除非未对未对齐异常选项进行启用,处理器不会处理未对齐的数据或在使用未对齐地址时产生陷阱;相反,它简单地加载包含计算出的虚拟地址的对齐数据项。这允许使用漏斗移位器与一对加载指令一起引用任何字节地址上的数据。
只有加载指令 L32I、L32I.N 和 L32R 可以访问 InstRAM 和 InstROM 位置。
由于缓存的工作方式取决于具体的实现,本手册并未提供缓存访问的正式规范。
以下是定义加载指令的例程:
加载指令
加载指令用于从内存中读取数据到寄存器中。Xtensa 架构中的加载指令包括:
- L8UI: 从内存中加载 8 位无符号整数。
- L16SI: 从内存中加载 16 位带符号整数。
- L16UI: 从内存中加载 16 位无符号整数。
- L32I: 从内存中加载 32 位无符号整数。
- L32R: 从内存中加载 32 位无符号整数,支持未对齐访问。
未对齐异常选项
除非未对齐异常选项被启用,否则处理器不会处理未对齐的数据或在使用未对齐地址时产生陷阱。相反,它简单地加载包含计算出的虚拟地址的对齐数据项。这允许使用漏斗移位器与一对加载指令一起引用任何字节地址上的数据。
访问 InstRAM 和 InstROM
只有 L32I、L32I.N 和 L32R 指令可以访问 InstRAM 和 InstROM 位置。
缓存访问
由于缓存的工作方式取决于具体的实现,本手册并未提供缓存访问的正式规范。
注释
- 这些指令在第 6 章“指令描述”中有详细的说明。
总结
- 加载指令用于从内存中读取数据到寄存器中。
- 根据不同的数据类型和大小,有不同的加载指令。
- 未对齐异常选项影响处理器如何处理未对齐的数据访问。
- L32I、L32I.N 和 L32R 指令可以访问 InstRAM 和 InstROM 位置。
- 缓存的行为取决于具体的实现。