Hexagon_V65_Programmers_Reference_Manual(29)

281 篇文章 30 订阅

11.9.3.9 指令同步

ISYNC 确保所有先前的指令都已提交,然后再继续执行下一条指令。
该指令应在以下事件之后执行(当后续指令必须观察事件的结果时):

  • 使用 TLBW 指令修改 TLB 后
  • 修改SSR寄存器后
  • 修改 SYSCFG 寄存器后
  • 在任何指令缓存维护操作之后
  • 修改 TID 寄存器后

在这里插入图片描述

Class: SYSTEM (slot 2)

注意:
这是一个单独的指令。  它不能与数据包中的其他指令组合在一起。

编码
在这里插入图片描述

11.9.3.10 L2 缓存预取

L2FETCH 启动后台预取到 L2 缓存。

Rs 指定 32 位虚拟起始地址。 该指令有两种形式。

在第一种形式中,要预取的区域的维度在源寄存器 Rt 中编码如下:

  • Rt[15:8] = 获取块的宽度(以字节为单位)。
  • Rt[7:0] = Height:要获取的宽度大小的块的数量。
  • Rt[31:16] = Stride:一个无符号字节偏移量,用于在获取每个宽度大小的块后递增指针。

在第二种形式中,操作数在寄存器对 Rtt 中编码如下:

  • Rtt[31:16] = 获取块的宽度(以字节为单位)。
  • Rtt[15:0] = 高度:要获取的宽度大小的块的数量。
  • Rtt[47:32] = Stride:一个无符号字节偏移量,用于在获取每个宽度大小的块后递增指针。
    * Rtt[48] = 方向。 如果清除,则应以行主要形式执行预取,这意味着应在继续下一行之前获取一行中的所有缓存行。 如果设置了该位,则应以列主要形式进行预取,这意味着在继续下一列之前提取列中的所有缓存行。

下图显示了使用 L2FETCH 指令的两个示例。
在这里插入图片描述

在框预取中,在较大的帧内定义了一个二维内存范围。 第二个示例显示了对大小为 Lines * 128 的大型线性内存区域进行预取。

L2FETCH 是非阻塞的。 指令启动后,程序将继续执行下一条指令,同时在后台执行预取。 L2fetch 可用于将代码或数据引入 L2 缓存。 如果感兴趣的行已经在 L2 中,则不执行任何操作。 如果 L2$ 中缺少这些行,硬件会尝试从系统内存中获取它们。

硬件预取引擎继续请求已编程内存范围内的所有行。 预取硬件尽最大努力预取所请求的数据,并尝试以低于需求取指的优先级执行预取。 这可以防止预取在系统负载过重时增加流量。

如果程序启动新的 L2FETCH 而旧的 L2FETCH 操作仍处于挂起状态,则新请求将排队,最多为三个深度。 如果 3 个 L2FETCH 已经挂起,则最旧的请求将被丢弃。 在线程的 L2 预取活动期间,USR:PFA 状态位被设置以指示预取正在进行中。 程序员可以使用该位来决定是否在前一个 L2FETCH 完成之前启动新的 L2FETCH。

使用编程为零的任何子字段执行 L2fetch 会取消调用线程的所有未决预取。

该实现可以在需要时自由删除预取。

在这里插入图片描述

Class: SYSTEM (slot 2)

注意:
该指令只能与 ALU32 或非浮点 XTYPE 指令组合。

编码

11.9.3.11 暂停

PAUSE 指令将执行暂停一段指定的时间。

在暂停期间,程序进入低功耗状态,不获取和执行指令。 该指令提供了一个短立即数来指示暂停持续时间。 程序最多暂停立即数加 8 中指定的周期数。最小暂停为 0 个周期,最大暂停由实现定义。

程序中断退出暂停状态。

系统事件(例如硬件或 DMA 完成)可以触发退出暂停模式。

一个实现可以自由暂停短于 (immediate+8) 的持续时间,但不能更长。

该指令对于实现用户级低功耗同步操作很有用,例如自旋锁或等待事件信号。

在这里插入图片描述

Class: SYSTEM (slot 2)

注意:
这是一个单独的指令。  它不能与数据包中的其他指令组合在一起。

编码
在这里插入图片描述

11.9.3.12 内存线程同步

SYNCHT 指令同步内存。

所有未完成的内存操作,包括缓存和非缓存加载和存储,都在处理器继续执行下一条指令之前完成。 这确保了某些内存操作以所需的顺序执行(例如,在访问 I/O 设备时)。

执行 SYNCHT 操作后,处理器停止从程序中获取和执行指令,直到该程序的所有未完成的内存操作完成。

在多线程或多核环境中,SYNCHT 不关心其他执行上下文。

该指令的使用取决于系统。
在这里插入图片描述

Class: SYSTEM (slots 0)

注意:
这是一个单独的指令。  它不能与数据包中的其他指令组合在一起。

编码
在这里插入图片描述

11.9.3.13 将值发送到 ETM 跟踪

TRACE 获取寄存器 Rs 的值并将其发送到 ETM 跟踪。

必须启用 ETM 块,并且线程必须具有执行跟踪的权限。 Rs 的内容是用户定义的。

在这里插入图片描述

Class: SYSTEM (slot 3)

注意:
该指令只能与 ALU32 或非浮点 XTYPE 指令组合。

编码

在这里插入图片描述

11.9.3.14 Trap

TRAP 导致精确异常。

执行 TRAP 指令会将 SSR 中的 EX 位设置为 1,从而禁用中断并启用超级用户模式。 然后程序跳转到向量位置(TRAP0 或 TRAP1)。 该指令指定一个 8 位立即数字段。 该字段被复制到系统状态寄存器原因字段中。

从带有 RTE 的服务程序返回后,在 TRAP 指令之后的数据包处继续执行。

这些指令通常用于用户代码从操作系统请求服务。 提供了两个 TRAP 指令,因此操作系统可以针对快速服务程序和较慢服务程序进行优化。

在这里插入图片描述

Class: SYSTEM (slot 3)

注意:
这是一个单独的指令。  它不能与数据包中的其他指令组合在一起。

编码
在这里插入图片描述
在这里插入图片描述

11.9.3.15 将线程转换为等待模式

WAIT 使调用线程进入等待模式。

等待模式是线程空闲的低功耗模式。 线程在等待模式下不获取或执行指令。

当线程执行 WAIT 时,PC 被设置为 WAIT 指令之后的数据包。

要退出等待模式,等待线程可以接收中断,或者另一个线程可以为等待线程执行 RESUME 指令。 在线程被中断唤醒的情况下,在中断服务程序完成并执行 RTE 指令时,线程保持运行。

请注意,指令中未使用源寄存器 Rs。 它的存在是为了向后兼容。

在这里插入图片描述

Class: SYSTEM (slot 3)

注意:
这是一个单独的指令。  它不能与数据包中的其他指令组合在一起。

编码
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值