xtensa架构--移位指令概述

目录

一  移位指令

二 指令详解

EXTUI (提取无符号字段立即数)

SLLI (左逻辑移位立即数)

SRRI (右逻辑移位立即数)

SRAI (右算术移位立即数)

SRC (右移位组合)

SRA (右算术移位)

SLL (左逻辑移位)

SRL (右逻辑移位)

SSA8B (为大端字节对齐设置移位量寄存器)

SSA8L (为小端字节对齐设置移位量寄存器)

SSR (为右逻辑移位设置移位量寄存器)

SSL (为左逻辑移位设置移位量寄存器)

SSAI (为移位量寄存器设置立即数)


一  移位指令

移位指令表(Table 3–22)列出了以下几种不同的移位操作:

  1. EXTUI:提取无符号字段立即数。它向右移动0到31位,并且与一个包含16个1的掩码进行按位与运算。
  2. SLLI:左逻辑移位立即数,可以移动1到31位。
  3. SRRI:右逻辑移位立即数,可以移动0到15位。如果需要移位超过16位,则应使用EXTUI指令。
  4. SRAI:右算术移位立即数,可以移动0到31位。
  5. SRC:右移位组合(将两个源寄存器连接起来,然后根据SAR中的值进行移位)。
  6. SRA:右算术移位(移位量来自SAR)。
  7. SLL:左逻辑移位(funnel shift AR[s]和0,移位量来自SAR)。
  8. SRL:右逻辑移位(funnel shift 0和AR[s],移位量来自SAR)。
  9. SSA8B:为大端字节对齐设置移位量寄存器(SAR)。此时t字段必须为零。
  10. SSA8L:为小端字节对齐设置移位量寄存器(SAR)。
  11. SSR:为右逻辑移位设置移位量寄存器(SAR)。此指令与WSR到SAR的不同之处在于,它只使用寄存器的最后五位最不重要的比特。
  12. SSL:为左逻辑移位设置移位量寄存器(SAR)。
  13. SSAI:为移位量寄存器(SAR)设置立即数。

这些指令提供了丰富的操作集合,同时避免了关键的时间路径。更多信息可以在第25页的第3.3.2节找到。

二 指令详解

  1. EXTUI (提取无符号字段立即数)

    • 格式:EXTUI Rd, Rs, #<imm>
    • 示例:EXTUI R0, R1, #16 将R1的高16位提取出来放到R0中。
    • 注意事项:EXTUI用于从Rs的指定位置提取出一个无符号字段,并将其放入Rd中。
  2. SLLI (左逻辑移位立即数)

    • 格式:SLLI Rd, Rs, #<imm>
    • 示例:SLLI R2, R3, #4 将R3的内容左移4位后存储到R2中。
    • 注意事项:SLLI用于将Rs的内容左移imm位,并将结果保存到Rd中。
  3. SRRI (右逻辑移位立即数)

    • 格式:SRRI Rd, Rs, #<imm>
    • 示例:SRRI R4, R5, #2 将R5的内容右移2位后存储到R4中。
    • 注意事项:SRRI用于将Rs的内容右移imm位,并将结果保存到Rd中。注意,imm不能大于16。
  4. SRAI (右算术移位立即数)

    • 格式:SRAI Rd, Rs, #<imm>
    • 示例:SRAI R6, R7, #3 将R7的内容右算术移位3位后存储到R6中。
    • 注意事项:SRAI用于将Rs的内容右算术移位imm位,并将结果保存到Rd中。
  5. SRC (右移位组合)

    • 格式:SRC Rd, Rs1, Rs2
    • 示例:SRC R8, R9, R10 将Rs1和Rs2的内容连接起来,然后右移s1的内容决定的数量位,结果保存到Rd中。
    • 注意事项:SRC用于将Rs1和Rs2的内容连接起来,然后根据SAR中的值进行右移。
  6. SRA (右算术移位)

    • 格式:SRA Rd, Rs
    • 示例:SRA R11, R12 将R12的内容右算术移位s1的内容决定的数量位,结果保存到Rd中。
    • 注意事项:SRA用于将Rs的内容右算术移位s1的内容决定的数量位,并将结果保存到Rd中。
  7. SLL (左逻辑移位)

    • 格式:SLL Rd, Rs
    • 示例:SLL R13, R14 将R14的内容左移s1的内容决定的数量位,结果保存到Rd中。
    • 注意事项:SLL用于将Rs的内容左移s1的内容决定的数量位,并将结果保存到Rd中。
  8. SRL (右逻辑移位)

    • 格式:SRL Rd, Rs
    • 示例:SRL R15, R16 将R16的内容右移s1的内容决定的数量位,结果保存到Rd中。
    • 注意事项:SRL用于将Rs的内容右移s1的内容决定的数量位,并将结果保存到Rd中。
  9. SSA8B (为大端字节对齐设置移位量寄存器)

    • 格式:SSA8B t, s
    • 示例:SSA8B 0, 1 设置SAR寄存器为大端字节对齐模式,此时t字段必须为零。
    • 注意事项:SSA8B用于设置SAR寄存器以实现大端字节对齐。
  10. SSA8L (为小端字节对齐设置移位量寄存器)

    • 格式:SSA8L t, s
    • 示例:SSA8L 0, 1 设置SAR寄存器为小端字节对齐模式,此时t字段必须为零。
    • 注意事项:SSA8L用于设置SAR寄存器以实现小端字节对齐。
  11. SSR (为右逻辑移位设置移位量寄存器)

    • 格式:SSR s
    • 示例:SSR 1 使用s1的内容设置SAR寄存器,用于右逻辑移位。
    • 注意事项:SSR用于设置SAR寄存器以实现右逻辑移位。
  12. SSL (为左逻辑移位设置移位量寄存器)

    • 格式:SSL s
    • 示例:SSL 1 使用s1的内容设置SAR寄存器,用于左逻辑移位。
    • 注意事项:SSL用于设置SAR寄存器以实现左逻辑移位。
  13. SSAI (为移位量寄存器设置立即数)

    • 格式:SSAI imm
    • 示例:SSAI 16 将立即数16写入到SAR寄存器。
    • 注意事项:SSAI用于将立即数写入到SAR寄存器。

以上是每个指令的基本格式、示例和注意事项。请注意,在实际编程过程中,您可能还需要考虑其他因素,如数据类型、内存布局等。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值