Xtensa 架构--核心指令概述

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 位置。

缓存访问

由于缓存的工作方式取决于具体的实现,本手册并未提供缓存访问的正式规范。

注释

  1. 这些指令在第 6 章“指令描述”中有详细的说明。

总结

  • 加载指令用于从内存中读取数据到寄存器中。
  • 根据不同的数据类型和大小,有不同的加载指令。
  • 未对齐异常选项影响处理器如何处理未对齐的数据访问。
  • L32I、L32I.N 和 L32R 指令可以访问 InstRAM 和 InstROM 位置。
  • 缓存的行为取决于具体的实现。
  • 28
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值