模板块指令集¶
模板块是一种只有块头的特殊类型的块指令,软件通过调用模版块可以执行一系列确定行为的模版化操作。模版块的块体由处理器根据每种模版指令定义的行为以及输入参数产生。因此硬件可以采用不同的指令序列进行模板块实现的优化,且软件感知不到。
通用软件通过调用模版块指令,可以大幅度减少程序代码量,提升取指效率。针对内存搬移或赋值等场景也可以达到更高效的内存访问效率。
模板块列表¶
模版块包括用于加速内存搬移,状态迁移,字符串处理和函数出入口栈操作等一系列指令。
当前版本中,软件可用的模版块指令如下:
| 指令 | 说明 | 跳转类型 |
|---|---|---|
| MCOPY | 将源内存数据拷贝至目标地址。(硬件实现可调整拷贝粒度) | 顺延(Fall) |
| MCOPY.D | 将源内存数据拷贝至目标地址。(支持DMA操作,最大以64字节为粒度拷贝) | 顺延(Fall) |
| MSET | 以字节为单位将目标内存赋值为指定值。(硬件实现可调整赋值粒度) | 顺延(Fall) |
| FENTRY | 将一组寄存器值连续压栈,并更新栈指针。 | 顺延(Fall) |
| FEXIT | 从栈中连续弹出值至寄存器,并更新栈指针。 | 顺延(Fall) |
| FRET.RA | 从栈中连续弹出值至寄存器,更新栈指针,并设置 BARG.TGT 域为 Ra 寄存器值。 | 返回(Return) |
| FRET.STK | 从栈中连续弹出值至寄存器,更新栈指针,并设置 BARG.TGT 域为栈上保存的返回地址。 | 返回(Return) |
| ESAVE | 访存/向量数据块异常或中断时保存上下文。 | 顺延(Fall) |
| ERCOV | 访存/向量数据块异常或中断后恢复上下文状态。 | 顺延(Fall) |
硬件产生的模版块如下:
| 指令 | 说明 |
|---|---|
| GETMSG | 用于收消息。 (无线轻核版本有效) |
模版块指令编码如下:
模板块异常¶
在模板块执行的过程中遇到中断或异常时,Template Block引擎会立即停下当前的内存动作,处理器执行对应的异常处理流程,具体请见Exception。