CN1180864A - 多媒体信号处理器中的单指令多数据处理方法及其装置 - Google Patents

多媒体信号处理器中的单指令多数据处理方法及其装置 Download PDF

Info

Publication number
CN1180864A
CN1180864A CN97117404A CN97117404A CN1180864A CN 1180864 A CN1180864 A CN 1180864A CN 97117404 A CN97117404 A CN 97117404A CN 97117404 A CN97117404 A CN 97117404A CN 1180864 A CN1180864 A CN 1180864A
Authority
CN
China
Prior art keywords
register
vector
instruction
data
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN97117404A
Other languages
English (en)
Other versions
CN1112635C (zh
Inventor
利·T·恩格延
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of CN1180864A publication Critical patent/CN1180864A/zh
Application granted granted Critical
Publication of CN1112635C publication Critical patent/CN1112635C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Abstract

一种向量处理器结构提供固定长度的一些向量寄存器,它们具有可编程长度和类型的数据元素。数据元素的类型和长度由指令定义,指令操作与向量寄存器相关联的操作数。由指令定义的数据长度确定向量寄存器中数据元素的数量及为完成指令所执行的并行操作的数目。本发明的一个实施例支持全部长度的8位、9位、16位和32位整型数据元素长度,以及32位数据元素的浮点数据类型。

Description

多媒体信号处理器中的 单指令多数据处理方法及其装置
本发明涉及数字信号处理技术,特别涉及用于多媒体功能(如视频和音频编码和解码)的对每个指令的多个数据元素进行并行处理的方法及其装置。
本专利文件涉及并参考下列同时申请的专利申请:
美国专利申请顺序号UNKNOWN1,代理人案号M-4354,题为“Multiprocessor Operation in a Multimedia Signal Processor(多媒体信号处理器中的多处理器操作)”;
美国专利申请顺序号UNKNOWN3,代理人案号M-4365,题为“Effcient Context Saving and Restoring in Multiprocessors(多处理器中的高效现场保存和恢复)”;
美国专利申请顺序号UNKNOWN4,代理人案号M-4366,题为“System and Method for Handling Software Interrupts with Argument Passing(处理具有参数传递的软件中断的系统和方法)”;
美国专利申请顺序号UNKNOWN5,代理人案号M-4367,题为“System and Method for Handling Interrupts and Exception Events in anAsymmetric Multiprocessor Architecture(在不对称多处理器结构中处理中断和异常事件的系统和方法)”;
美国专利申请顺序号UNKNOWN6,代理人案号M-4368,题为“Methods and Apparatus for Processing Video Data(处理视频数据的方法和装置)”;
美国专利申请顺序号UNKNOWN7,代理人案号M-4369,题为“Single-Instruction-Multiple-Data Processing Using Multiple Banks ofVector Registers(采用多个向量寄存器组的单指令多数据处理)”;以及
美国专利申请顺序号UNKNOWN8,代理人案号M-4370,题为“Single-Instruction-Multiple-Data Processing with CombinedScalar/Vector Operations(具有组合标量/向量操作的单指令多数据处理)”。
用于多媒体应用(例如实时视频编码和解码)的可编程数字信号处理器(DSPs)需要相当强的处理能力,以便在有限时间内处理大量的数据。数字信号处理器的几种结构是众所周知的。大多数微处理器采用的通用结构一般需要高工作频率,以提供具有足以进行实时视频编码或解码的计算能力的DSP。这使这种DSP价格昂贵。
超长指令字(VLIW)处理器是具有很多功能单元的一种DSP,这些功能单元中的大部分执行不同的、相对简单的任务。VLIW DSP的单个指令可以是128字节或更长,并具有多个独立的被独立的功能单元并行执行的部分。VLIW DSPs具有很强的计算能力,因为许多功能单元能并行工作。VLIWDSPs还具有相对低的成本,因为每个功能单元相对小而简单。VLIW DSPs存在的一个问题是在处理输入/输出控制、同主计算机通信及其它不宜于用VLIW DSP的多个功能单元并行执行的功能方面效率低下。另外,VLIW的软件不同于传统的软件且开发困难,因为缺乏编程工具和熟悉VLIW软件结构的程序员。因此,能提供合理成本、高计算能力和熟悉的编程环境的DSP是多媒体应用所寻求的。
本发明的目的是提供一种单指令多数据处理方法及其装置。
根据本发明一个方面,一个多媒体数字信号处理器(DSP)包括一个向量处理器,该向量处理器操作向量数据(即每操作数有多个数据元素)以提供高处理能力。该处理器使用RISC类型指令集的单指令多数据结构。程序员可以很容易地适应向量处理器的编程环境,因为它类似于大部分程序员熟悉的通用处理器的编程环境。
DSP包括一套通用向量寄存器。每个向量寄存器具有固定长度,但是分成多个用户可以选择长度的独立数据元素。因此,存储在向量寄存器中的数据元素数取决于为该元素所选择的长度。例如32字节寄存器可以分成32个8位的数据元素、16个16位的数据元素,或8个32位的数据元素。数据长度和类型的选择通过处理与向量寄存器有关的数据的指令来确定,而指令的一个执行数据通路执行多个并行操作,这取决于指令所指示的数据长度。
向量处理器的指令可以有向量寄存器或标量寄存器作为操作数,并且并行地操作多个向量寄存器的多个数据元素,以便提高计算能力。本发明的向量处理器的一个示例性的指令集包括:协处理器接口操作;流控制操作:加载/存储操作;及逻辑/算术操作。逻辑/算术操作包括的操作,把一个向量寄存器的多个数据元素同一个或多个别的向量寄存器中相应的多个数据元素相结合,产生结果数据向量的多个数据元素。其他的逻辑/算术操作混合一个或多个向量寄存器的各种数据元素,或把向量寄存器的数据元素同标量结合起来。
该向量处理器的一种结构扩展,加上了标量寄存器,每个标量寄存器都包括一个标量数据元素。标量和向量寄存器的结合方便了将向量处理器的指令集进行扩充以包括并行地把一个向量的每个数据元素同一个标量值结合的操作。例如,一条指令把一个向量的多个数据元素乘以一个标量值。标量寄存器亦提供一个位置,用于存储要从向量寄存器中提取或存入向量寄存器的单个数据元素。标量寄存器对在向量处理器和协处理器(该协处理器的结构仅提供标量寄存器)之间传送信息、以及对计算加载/存储操作所用的有效地址也很方便。
根据本发明的另一方面,向量处理器中的多个向量寄存器被组织为多个组。每个组能被选择为“当前(current)”组,而另一个组则是“替代(alternative)”组。在向量处理器的控制寄存器中“当前组”位指示当前组。为了减少标识向量寄存器所需的位数,有些指令只提供标识当前组中的一个向量寄存器的寄存器号。加载/存储指令有一个附加位来标识任何一个组的向量寄存器。因此,加载/存储操作能在操作当前组中的数据的期间取出数据送到替代组。这有助于图象处理和图形过程的软件流水线作业,且当取数据时降低处理器的延迟,因为用访问替代寄存器组的加载/存储操作,逻辑/算术操作可不按次序执行。在其它指令中,替代组允许使用双倍长度向量寄存器,这种寄存器包括一个来自当前组的向量寄存器,和一个来自替代组的相应的向量寄存器。这种双倍长度寄存器可根据指令句法来鉴别。向量处理器中的控制位可以被设定,以使缺省向量长度是一个或两个向量寄存器。替代组亦允许在复杂指令句法中使用更少的显式标识的操作数,如混洗(shuffle)、去混洗(unshuffle)、饱和(saturate)、及具有两个源和两个目的寄存器的条件转移。
向量处理器还实现新颖的指令,如四平均(average quad)、混洗、去混洗、成对方式最大(pair-wise maximum)和交换(exchange)以及饱和。这些指令执行的操作在多媒体功能(例如视频编码和解码)中是常见的,并代替在其它指令集中实现同样功能所需的2个或更多个指令。因而,向量处理器指令集改进了多媒体应用中程序的效率和速度。
以下结合附图详细说明本发明的优选实施例,其中,
图1是根据本发明一实施例的多媒体处理器的方框图。
图2是图1的多媒体处理器的向量处理器的方框图。
图3是图2的向量处理器的取指单元的方框图。
图4是图2的向量处理器的取指单元的方框图。
图5A、5B和5C示出了图2的向量处理器的寄存器到寄存器指令、加载指令及存储指令所用的执行流水线的步骤。
图6A是图2的向量处理器的执行数据通路的方框图。
图6B是图6A执行数据通路的寄存器文件(register file)的方框图。
图6C是图6A执行数据通路的并行处理逻辑单元的方框图。
图7是图2的向量处理器的加载/存储单元的方框图。
图8是本发明一实施例的向量处理器指令集的格式。
在不同图中所用的相同参考符号表示相似的或相同的项。
图1示出了本发明一实施例的多媒体信号处理器(MSP)100的实施例的方块图。多媒体处理器100包括通用处理器110和向量处理器120组成的处理核心105。处理核心105通过高速缓冲存储器(以下称为高速缓存)子系统130连到多媒体处理器100的剩余部分,高速缓存子系统包括SRAM 160和190,ROM 170及高速缓存控制器180。高速缓存控制器180可将SRAM 160配置为处理器110的指令高速缓存162和数据高速缓存164,而将SRAM 190配置为向量处理器120的指令高速缓存192和数据高速缓存194。
片内ROM 170包含处理器110和120的数据和指令,并能配置为高速缓存。在本实施例中,ROM 170包括:复位和初始化过程;自测试诊断过程;中断和异常处理程序;及声霸卡仿真子例程;V.34调制解调器信号处理子例程;一般电话功能;2-D和3-D图形子例程库;以及用于音频和视频标准如MPEG-1,MPEG-2,H.261,H.263,G.728和G.723的子例程库。
高速缓存子系统130把处理器110和120连接到两个系统总线140和150,并作为处理器110和120及耦合到总线140和150的设备的高速缓存和切换站(switching station)。系统总线150用比总线140更高的时钟频率工作,并连接到存储器控制器158、局部总线接口156、DMA控制器154和设备接口152,它们分别为外部局部存储器、主计算机的局部总线、直接存储器存取和各种模数、数模转换器提供接口。系统定时器142、UART(Universal asynchronous receiver transceiver,通用异步收发信机)144、位流处理器146及中断控制器148连接到总线140。前面提到的题为“Multiprocessor Operation in a Multimedia Signal Processor”和“Methods andapparatus for Processing Video Data”的专利申请更全面地说明了高速缓存子系统130和示例性的设备的工作,处理器110和120通过高缓存子系统130及总线140和150访问所述设备。
处理器110和120执行独立的程序线程,并且在结构上也是不同的,以便更有效地执行赋予它们的特定任务。处理器110主要用于控制功能,例如实时操作系统的执行及类似的不需要大量重复计算的功能。因此,处理器110不需要强计算能力,能用传统的通用处理器结构实现。向量处理器120主要实现数学计算(number crumching)这种包含对多媒体处理中常见的数据块的重复操作。为了有强计算能力和相对简单的编程,向量处理器120具有SIMD(Single instruction multiple data,单指令多数据)结构;在本实施例中,在向量处理器120中大部分数据通路为288位或576位宽,以支持向量数据操作。此外,向量处理器120的指令集包括尤其适用于多媒体问题的指令。
在本实施例中,处理器110是32位RISC处理器,工作在40MHz上,符合ARM 7处理器的结构,所述ARM 7处理器包含有ARM 7标准定义的寄存器集。有关ARM 7 RISC处理器的结构和指令集在“ARM7DM DataSheet(ARM7DM产品说明书)”Document Number(文件号):ARM DDI0010G中作了说明,这可从Advance RISC Machines Ltd.公司得到。ARM7DM Data Sheet全部包括在这里作为参考。附录A说明了本实施例的ARM7指令集的扩展。
向量处理器120既操作向量又操作标量。在本实施例中,向量数据处理器120包括以80MHz工作的流水线式RISC引擎(engine)。向量处理器120的寄存器包括32位标量寄存器、32位专用寄存器、两组288位向量寄存器及两组双倍长度(即576位)向量累加器寄存器。附录C说明了本实施例的向量处理器120的寄存器集。在本实施例中,处理器120包括32个标量寄存器,这些标量寄存器通过范围从0到31的5位寄存器号在指令中被标识。还有64个288位的向量寄存器,这些寄存器组成两个组,每组有32个向量寄存器。每个向量寄存器可用1位组号(0或1)和5位范围从0到31的向量寄存器号来标识。大部分指令只访问当前组中的向量寄存器,如存储在向量处理器120的控制寄存器VCSR的缺省组位CBANK所表示。第2个控制位VEC64表示是否寄存器号缺省表示由来自每个组的一个寄存器组成的双倍长度向量寄存器。指令的句法区别标识向量寄存器的寄存器号和标识标量寄存器的寄存器号。
每个向量寄存器可被分成长度可编程的多个数据元素,表1示出了在一个288位向量寄存器中支持的数据元素的数据类型。
表1:
数据类型 数据长度     解释
  int8   8位(字节) -128和127之间8位2的补码
  int9   9位(字节9) -256和255之间9位2的补码
  int16   16位(半字) -32,768和32,767之间16位2的补码
  int32   32位(字) -2147483648和2147483647之间32位2的补码。
  float   32位(字) 32位IEEE 754单精度格式
附录D进一步提供了本发明的实施例中支持的数据长度和类型的说明。
对int9数据类型,9位字节被连续地组合在288位向量寄存器中,而对其它的数据类型,在288位向量寄存器中每个第9位不使用。288位向量寄存器能放32个8或9位整型数据元素、16个16位整型数据元素、或8个32位整型或浮点元素。此外,2个向量寄存器可被结合以双倍长度向量组装数据元素。在本发明的实施例中,将控制和状态寄存器VCSR中的控制位VEC64置位,把向量处理器120置于方式VEC64,这里双倍长度(576位)是向量寄存器的缺省长度。
多媒体处理器100还包括一套处理器110和120都可以访问的32位扩展寄存器115。附录B说明了本发明的实施例中扩展寄存器集和它们的功能。扩展寄存器和向量处理器120的标量和专用寄存器,在某些情况下可供处理器110访问。2个专用“用户”扩展寄存器具有2个读端口,允许处理器110和120同时读寄存器。其它扩展寄存器不能同时被访问。
向量处理器120有两个交替的状态VP_RUN和VP_IDLE,指示向量处理器120是处于工作还是处于空闲状态。当向量处理器120处于状态VP_IDLE时,处理器110能读或写向量处理器120的标量和专用寄存器。但向量处理器120处于状态VP_RUN时处理器110读或写向量处理器120的一寄存器的结果未予定义。
对处理器110的ARM7指令集的扩展包括访问扩展寄存器和向量处理器120的标量或专用寄存器的指令。指令MFER和MFEP分别把扩展寄存器和向量处理器120的标量或专用寄存器中的数据移到处理器110中的通用寄存器中,指令MTER和MTEP分别把处理器110中通用寄存器的数据移到扩展寄存器和向量处理器120的标量或专用寄存器中。TESTSET指令读扩展寄存器并把扩展寄存器的位30置成1。指令TESTSET通过将位30置位,向处理器120发生信号说明处理器110已读出(或使用)产生的结果,方便了使用者/生产者同步。处理器110的其它指令如STARTVP和INTVP控制向量处理器120的工作状态。
处理器110起主处理器的作用以控制向量处理器120的操作。用处理器110和120之间控制的不对称划分简化了处理器110和120进行同步的问题。当向量处理器120处于VP_IDLE状态时,处理器110通过把指令地址写到向量处理器120的程序计数器中,来初始化向量处理器120。然后,处理器110执行STARTVP指令,把向量处理器120改变成状态VP_RUN。在状态VP_RUN下,向量处理器120通过高速缓存子系统130取指,并同继续执行它自己程序的处理器110并行地执行那些指令。在启动后,向量处理器120继续执行,直到遇到一个异常、执行满足适当条件的VCJOIN或VCINT指令、或被处理器110中断。向量处理器120通过把结果写到扩展寄存器、把结果写到处理器110和120共享的地址空间、或当向量处理器120重新进入状态VP_IDLE时把结果留在处理器110访问的标量或专用寄存器中,可将程序执行的结果传送到处理器110。
向量处理器120并不处理它自己的异常。在执行引起异常的指令时,向量处理器120进入状态VP_IDLE,并通过直通线发出一个中断请求给处理器110。向量处理器120保持在状态VP_IDLE,直到处理器110执行另一个STARTVP指令。处理器110负责读向量处理器120的寄存器VISRC以决定异常的性质,可能通过重新初始化向量处理器120来处理异常,然后,根据需要引导向量处理器120恢复执行。
通过处理器110执行的INTVP指令中断向量处理器120,使向量处理器120进入空闲状态VP_IDLE。指令INTVP可以例如用在多任务系统中,把向量处理器从执行的一个任务如视频译码切换到另一个任务如声卡仿真。
向量处理器指令VCINT和VCJOIN是流控制指令,如果指令指示的条件满足,这些指令将停止向量处理器120的执行,使向量处理器120置于状态VP_IDLE,并向处理器110发中断请求,除非这个请求被屏蔽。向量处理器120的程序计数器(专用寄存器VPC)指出VCINT或VCJOIN指令后的指令地址。处理器110能检查向量处理器120的中断源寄存器VISRC,确定是否是VCINT或VCJOIN指令引起中断请求。因为向量处理器120有大量数据总线,及在保存和恢复它的寄存器上更有效,所以通过向量处理器120执行的软件在现场切换(context switching)期间应该保存和恢复寄存器。上面提到的题为“Efficient Context Saving and Restoring in Multiprocessors”的专利申请,说明了现场切换的一示例性的系统。
图2示出了向量处理器120的实施例的主要功能框图。向量处理器120包括一个取指单元(IFU)210、一个解码器220、一个调度器230、一个执行数据通路240及一个加载/存储单元(LSU)250。IFU 210取指并处理流控制指令(如分支)。指令译码器220根据从IFU 210到达的顺序,每周期译码一条指令,并把从指令中译码出的字段值写到调度器230中的FIFO。调度器230根据执行操作步骤的需要,选择发送给执行控制寄存器的字段值。发送选择取决于操作数依赖性(dependency)和处理资源如执行数据通路240或装入/存储单元250的可用性。执行数据通路240执行操作向量或标量数据的逻辑/算术指令。装入/存储单元250执行访问向量处理器120的地址空间的装入/存储指令。
图3示出了IFU 210的一实施例的框图。IFU包括一个指令缓冲器,该缓冲器分成主指令缓冲器310和辅助指令缓冲器312。主缓冲器310包含8条连续指令,其中包括对应于当前程序计数的指令。辅助缓冲器312中包含紧接着缓冲器310中的指令的8条指令。IFU 210亦包括一个分支目标缓冲器314,它包含8个连续指令,其中包括缓冲器310或312中下一个流控制指令的目标。在本实施例中,向量处理器120使用RISC型指令集,其中每条指令为32位长,缓冲器310、312或314是8×32位缓冲器,并通过256位指令总线连到高速缓存子系统130。IFU 210可在一个时钟周期内,把高速缓存子系统130中8条指令装载到缓冲器310、312或314中的任何一个中。寄存器340、342和344分别指示缓冲器310、312和314中装入指令的基地址。
多路选择器332从主指令缓冲器310中选择当前的指令。如果当前指令不是流控制指令,而且存储在指令寄存器330中的指令进展到执行的译码阶段,则当前指令被存到指令寄存器330,向程序计数被增量。在程序计数增量后,选择缓冲器310中最后一条指令,则下一组8条指令被装载到缓冲器310。如果缓冲器312包含所要的8条指令,则缓冲器312和寄存器342的内容立即移到缓冲器310和寄存器340,又有8条指令从高速缓存系统130预取指送到辅助缓冲器312。加法器350根据寄存器342中的基地址和由多路选择器352选择的偏移量,确定下一组指令的地址。由加法器350得到的结果地址被存储在寄存器342中,这是在该地址从寄存器342移到寄存器340时或以后进行的。计算出的地址随同8条指令的请求也送到高速缓存子系统130中。如果上次对高速缓存控制系统130的调用,在缓冲器310请求时,还没有向缓冲器312提供下面8条指令,则上次请求的指令,从高速缓存子系统130接收到时,立即存储到缓冲器310中。
如果当前指令是流控制指令,IFU 210通过对流控制指令条件的计算及在流控制指令之后更新程序计数来处理该指令。如果因为前面可能改变条件的指令没有完成,而条件不能确定时,使IFU 210停顿。如果没有发生分支,程序计数器被增量,下面的指令如上所述被选择。如果发生分支且分支目标缓冲器314包含该分支的目标,则缓冲器314和寄存器344的内容被移到缓冲器310和寄存器340,以使IFU 210能继续为译码器220提供指令而不需等待来自高速缓存子系统130中的指令。
为了为分支目标缓冲器314预取指令,扫描器320扫描缓冲器310和312以定位跟着当前程序计数的下一个流控制指令。如果在缓冲器310或312中找到流控制指令,扫描器320确定从包含该指令的缓冲器310或312的基地址,到一组对准的(aligned)包括流控制指令目标地址的8条指令的偏移量。多路选择器352和354为加法器350提供流控制指令的偏移量和来自寄存器340或342的基地址,由加法器350为缓冲器314产生一个新的基地址。新的基地址被传到高速缓存子系统130,再则其为分支目标缓冲器314提供8条指令。
在处理流控制指令如“减量和条件转移”指令VD1CBR、VD2CBR和VD3CBR,及“改变控制寄存器”指令VCHGCR时,IFU 210能改变除程序计数外的寄存器的值。当IFU 210找到一非流控制指令的指令时,该指令送到指令寄存器330,并从那里到译码器220。
如图4所示,译码器220通过把控制值写到调度器230的FIFO缓冲器410的各个字段来译码一指令。FIFO缓冲器410包括4行触发器,其中每一行可包含5个信息字段,用以控制一条指令的执行。行0到3分别保持最早到最新的指令的信息,当较早的信息随着指令完成而被去除时,在FIFO缓冲器410中的信息下移到更低的行。调度器230通过选择必需的指令字段装载到包含执行寄存器421到427的控制管道420来给执行阶段发出一指令。大部分指令能被调度,以便不按次序发出和执行。尤其是有关逻辑/算术操作和加载/存储操作的次序是任意的,除非在加载/存储操作和逻辑/算术操作之间有操作数依赖性。FIFO缓冲器410中字段值的比较指示是否有操作依赖性存在。
图5A举例说明一个指令的6阶段执行流水线,该指令实现了寄存器到寄存器的操作,而不用访问向量处理器120的地址空间。在指令取指阶段511中,IFU 210如上所述取指一指令。取指阶段需要1个时钟周期,除非由于流水线延迟、未解决的分支条件或在提供预取指令的高速缓存子系统130中的延迟,使IFU 210停顿。在译码阶段512,译码器220译码来自IFU 210的指令,并将该指令的信息写到调度器230。译码阶段512亦需要一个时钟周期,除非对新的操作,FIFO 410中无可得到的行。在FIFO 410的第一周期期间,能发出操作到控制管道420,但是会由于较早的操作的发出被延迟。
执行数据通道240实现寄存器到寄存器的操作,并为加载/存储操作提供数据和地址。图6A示出了执行数据通路240一实施例的框图,并同执行阶段514、515和516一起被说明。执行寄存器421提供标识寄存器文件610中两个寄存器的信号,寄存器文件610在读阶段514期间的一个时钟周期内被读。寄存器文件610包括32个标量寄存器和64个向量寄存器。图6B是寄存器文件610的框图。寄存器文件610具有2个读端口和2个写端口,以便在每个时钟周期提供2个读和2个写。每个端口包括选择电路612、614、616或618以及288位的数据总线613、615、617或619。选择电路如电路612、614、616和618在本技术领域是熟知的,并且使用地址信号WRADDR1、WRADDR2、RDADDR1或RDADDR2,这是译码器220从一般是从指令里提供的5位寄存器号、一个来自指令或控制状态寄存器VCSR的一个组位、及指示寄存器是向量寄存器还是标量寄存器的指令句法中得到的。数据读的路径可以是通过多路选择器656到加载/存储单元250,或者通过多路选择器622和624,通过乘法器620算术逻辑单元630、累加器640。大部分操作读2个寄存器,并且读阶段514在一个周期内完成。然而,某些指令,如乘和加指令VMAD及操作双倍长度向量的指令需要多于2个寄存器的数据,致使读阶段514需超过一个时钟周期。
在执行阶段515,乘法器620、算术逻辑单元630及累加器640处理前面从寄存器文件610读出的数据。如果为了读必要的数据要求多个周期,执行阶段515可与读阶段514重叠。执行阶段515的持续时间取决于处理数据元素的类型(整型或浮点型)和数量(读周期数据)。来自执行寄存器422、423和425的信号控制插入数据到算术逻辑单元630、累加器640、和乘法器620以便在执行阶段实现第一步操作。来自执行寄存器432、433和435的信号控制在执行阶段515实现第二步操作。
图6C示出了乘法器620和ALU 630一实施例的框图。乘法器620是一个整数乘法器,它包括8个独立的36×36位乘法器626。每个乘法器626包括通过控制电路连结在一起的4个9×9位乘法器。对8位和9位数据元素宽度,来自调度器230的控制信号断开4个9×9位乘法器的相互连结,以使每个乘法器626实现4个乘法,乘法器620在一个周期内实现32个独立的乘法。对16位数据元素,控制电路把9×9位乘法器对连接在一起操作。乘法器620实现16个并行乘法。对32位整型数据元素类型,8个乘法器626每个时钟周期实现8个并行乘法。乘法的结果对9位数据元素宽度提供576位结果,对其它数据长度提供512位结果。
ALU 630能在2个时钟周期中处理来自乘法器620的576位或512位结果。ALU 630包括8个独立的36位ALUs 636,每个ALU 636包括用于浮点加和乘的一个32×32位浮点部件。附加电路实现整数移位、算术和逻辑功能。对于整数操作,每个ALU 636包括能独立进行8位和9位操作的4个单元,对16位和32位整型数据元素,每2个或4个能够组成一组连在一起。
累加器640累加结果,并包括2个576位寄存器,以便实现中间结果的较高精度。
在写阶段516,来自执行阶段的结果存储在寄存器文件610。在一个时钟周期内,能写2个寄存器,输入多路选择器602和605选择要被写的2个数据值。一次操作的写阶段516的持续时间取决于作为操作结果要被写的数据量和来自LSU 250的竞争,LSU 250可能正在通过对寄存器文件610进行写来完成装载指令。来自执行寄存器426和427的信号选择把来自逻辑单元630、累加器640和乘法器620的数据写入的寄存器。
图5B示出执行装载指令的执行流水线520。对于执行流水线520的指令取指阶段511、译码阶段512和发出阶段513与所说明的寄存器到寄存器的操作是相同的。读阶段514也同上面的说明相同,只是执行数据通路240用来自寄存器文件610的数据以确定调用高速缓存子系统130的地址。在地址阶段525,多路选择器652、654和656选择地址,该地址被提供给执行阶段526和527的加载/存储单元250。在加载/存储单元250处理操作的同时,在阶段526和527期间,加载操作的信息保持在FIFO 410中。
图7示出了加载/存储单元250的一个实施例。在阶段256期间调用高速缓存子系统130,以请求阶段525所确定的地址的数据。本实施例使用基于事务的(transaction based)高速缓存调用,其中包括处理器110和120的多个设备可通过高速缓存子系统130存取局部地址空间。在调用高速缓存子系统130之后的几个周期中,被请求的数据可能得不到,但在其它调用挂起时,加载/存储单元250能调用高速缓存子系统。因此,加载/存储单元250不致停顿。高速缓存子系统130提供被请求的数据所需的时钟周期数取决于数据高速缓存194的命中或未命中(hit or miss)。
在驱动阶段527,高速缓存子系统130为加载/存储单元250确认(assert)一个数据信号。高速缓存子系统130可在每个周期给加载/存储单元250提供256位(32个字节)的数据,字节对准器710在相应9位存储位置对准32个字节的每个字节,以提供288位的值。288位的格式对例如MPEG编码和解码的多媒体应用是方便的,它们有时用9位数据元素。288位值写入读数据缓冲器720。对写阶段528,调度器230把FIFO缓冲器410的字段4传送到执行寄存器426或427,将数据缓冲器720的288位的值写入寄存器文件610。
图5C示出了执行存储指令所用的执行流水线530。执行流水线530的取指阶段511、译码阶段512和发出阶段513同前面说明的相同。读阶段514亦同前面说明的相同,只是读阶段读要存储的数据和地址计算所用的数据。要被存储的数据被写入加载/存储单元250中的写数据缓冲器730。多路选择器740把9位字节格式的数据转换成传统的8位字节的格式。从缓冲器730来的转换过的数据和来自地址计算阶段525的相关地址,在SRAM阶段536期间被并行地送到高速缓存子系统130。
在向量处理器的实施例中,每个指令是32位长并具有图8中所示的9种格式中的一种格式,且标记为REAR、REAI、RRRM5、RRRR、RI、CT、RRRM9、RRRM9*、和RRRM9**。附录E说明了向量处理器120的指令集。
当确定一个有效地址时,使用标量寄存器的某些加载、存储和高速缓存操作具有REAR格式。REAR格式指令用位29-31是000b来标识且有3个操作数通过3个寄存器号标识,2个寄存器号SRb和SRi为标量寄存器,寄存器号Rn可以是标量或向量寄存器,这取决于位D。组位B或者为寄存器Rn标识一个组,或者如果缺省向量寄存器大小是双倍长度时指示是否向量寄存器Rn是双倍长度。操作码字段Opc标识对操作数实行的操作,而字段TT指示传送类型为加载或存贮。典型的REAR格式指令是指令VL,它从标量寄存器SRb和SRi内容相加确定的地址来加载寄存器Rn。如果位A被置位,所计算的地址被存储在标量寄存器SRb中。
REAI格式指令同REAR指令相同,只是来自字段IMM的8位立即值被用来代替标量寄存器SRi的内容。REAR和REAI格式无数据元素长度字段。
RRRM5格式用于具有2个源操作数和一个目的操作数的指令。这些指令具有3个寄存器操作数或2个寄存器操作数及1个5位立即值。在附录E中所示的字段D、S和M的编码确定是否第一个源操作数Ra是标量或向量寄存器;是否第2个源操作数Rb/IM5是标量寄存器、向量寄存器或5位立即值;及是否目的寄存器Rd是标量或向量寄存器。
RRRR格式用于具有4个寄存器操作数的指令。寄存器号Ra和Rb指示源寄存器。寄存器号Rd指示目的寄存器,而寄存器号Rc指示源或目的寄存器,这取决于字段Opc。全部操作数是向量寄存器,除非位S被置位指示寄存器Rb是标量寄存器。字段DS指示向量寄存器的数据元素长度。字段Opc选择32位数据元素的数据类型。
RI格式指令给寄存器加载一个立即值。字段IMM包括可多达18位的立即值。寄存器号Rd指示目的寄存器,该目的寄存器是当前组内的向量寄存器或标量寄存器,这取决于位D。字段DS和F分别指示数据元素的长度和类型。对32位整型数据元素,18位立即值在加载到寄存器Rd以前作符号扩展。对浮点数据元素,位18、位17到10及位9到0分别表示32位浮点值的符号、指数和尾数。
CT格式用于流控制指令,它包括操作码字段Opc、条件字段Cond、和23位的立即值IMM。当条件字段指示条件为真时,则发生分支。可能的条件码是“always(无条件)”、“Less than(小于)”、“equal(等于)”、“Less than orequal(小于或等于)”、“greater than(大于)”、“not equal(不等于)”、“greaterthan or equal(大于或等于)”和“overflow(溢出)”。状态和控制寄存器VCSR中的位GT、EQ、LT和SO用于评价条件。
格式RRRM9提供3个寄存器操作数或2个寄存器操作数及1个9位立即值。位D、S和M的组合指示哪些操作数是向量寄存器、标量寄存器或9位立即值。字段DS指示数据元素长度。RRRM9*和RRRM9**格式是RRRM9格式的特殊情况,并且用操作码字段Opc来区别。RRRM9*格式用条件码Cond和ID字段替代源寄存器号Ra。RRRM9**格式用条件码Cond和位K代替立即值的各最高有效位。RRRM9*和RRRM9**的进一步说明在附录E中给出,涉及到条件转移指令VCMOV、元素屏蔽条件转移CMOVM及比较和设置屏蔽指令CMPV。
虽然结合具体的实施例对本发明作出了说明,但这些说明仅仅是本发明应用的一个例子,不应该当成是一种限制,此外所公开的实施例特点的各种修改和组合仍属于下面权利要求所界定的本发明的范围。
                         附录A
在示范性实施例中,处理器110是按照ARM7处理器标准的通用处理器。在ARM7中对寄存器的说明参考ARM结构文件或ARM7数据表(文件号ARM DDI 0020C,1994年12月发行)。
为了与向量处理器120相互配合,110处理器:起动和停止向量处理器;测试向量处理器状态,包括同步状态;从向量处理器120中的标量/专用寄存器把数据传到处理器110的通用寄存器中;以及把通用寄存器中的数据传到向量处理器的标量/专用寄存器。在通用寄存器和向量处理器的向量寄存器之间,没有直接的传送装置,这些传送需要存贮器作为中介体。
表A.1说明了为了向量处理器的交互作用而扩展的ARM7指令集。表A.1:扩展的ARM7指令集
    指令     结果
  STARTVP 该指令使向量处理器进入VP-RUN状态,若向量处理器已经进入VP-RUN状态则无影响。STARTVP作为ARM7结构中处理器数据操作(CDP)类来执行,无结果返回到ARM7,ARM7继续其执行。
  INTVP 该指令使向量处理器进入VP-IDEL状态,若向量处理器已经进入VP-IDEL状态则无影响。INTVP作为ARM7结构中处理器数据操作(CDP)类来执行,无结果返回到ARM7,ARM7继续其执行。
  TESTSET 该指令读用户扩展寄存器,并把寄存器位30置成1,以使在向量和ARM7处理器之间提供生产者/消费者类型的同步。在ARM7结构中,TESTSET作为处理器寄存器传输(MRC)类来执行。ARM7被阻塞,直到指令被执行为止(寄存器被传送)。
  MFER 从扩展寄存器转移到ARM通用寄存器,在ARM7结构中,MFER作为处理器寄存器传送(MRC)类来执行。ARM7被阻塞,直到指令被执行为止(寄存器被传送)。
  指令     结果
  MFVP 从向量处理器的标量/专用寄存器转移到ARM7通用寄存器。不同于其它ARM7指令,该指令只在向量处理器处于VP-IDLE状态时执行。否则其结果未定义。在ARM7结构中,MFVP作为处理器寄存器传送(MRC)类来执行。ARM7被阻塞,直到指令被执行为止(寄存器被传送)。
  MTER 从ARM7通用寄存器转移到扩展寄存器,在ARM7结构中,MTER作为协处理器寄存器传送(MCR)类来执行。ARM7被阻塞,直到该指令被执行为止(寄存器被传送)。
  MTVP 从ARM7通用寄存器转移到向量处理器的标量/专用寄存器,不同于其它ARM7指令,该指令仅在向量处理器处于VP_IDLE状态时执行。否则其结果未定义。在ARM7结构中,MTVP作为协处理器寄存器传送(MCR)类未执行。ARM7被阻塞,直到该指令被执行为止(寄存器被传送)。
  CACHE 提供ARM7数据高速缓存的软件管理
  PFTCH 预取一个高速缓存行,送到ARM7数据高速缓存。
  WBACK 把ARM7数据高速缓存来的一高速缓存行回写到存贮器中。
表A.2列出了ARM7的异常,在执行故障指令之前,检测和报告这些异常。异常向量地址以十六进制表示法给出。表A.2:ARM7异常
    异常向量     说明
    0x00000000 ARM7复位
    0x00000004 ARM7未定义指令异常
    0x00000004 向量处理器不可得到异常
    0x00000008 ARM7软件中断
    0x0000000C ARM7单步异常
    0x0000000C ARM7指令地址断点异常
    0x00000010 ARM7数据地址断点异常
    0x00000010 ARM7非法数据地址异常
    0x00000018 ARM7保护违章异常
下面说明对ARM7指令集扩充的句法。关于术语的说明和指令的格式参考ARM结构文件或ARM7数据表(文件号ARM DDI 0020C,1994年12月发表)。
ARM结构为协处理器接口提供3种指令格式:
1.协处理器数据操作(CDP)
2.协处理器数据传送(LDC,STC)
3.协处理器寄存器传送(MRC,MCR)
MSP结构的扩展使用全部二种格式。
为操作使用的协处理器数据操作格式(CDP)不需返回给ARM7。CDP格式
  30         25            20       15           10             5        0
Figure A9711740400191
CDP格式字段具有下列约定:
字段     意义
Cond 条件字段,该字段指定指令执行条件
Opc 协处理器操作码
CRn 协处理器操作数寄存器
CRd 协处理器目的寄存器
CP# 协处理器号;下面的协处理器号是当前使用的:1111-ARM7数据高速缓存0111-向量处理器,扩展的寄存器
CP 协处理器信息
CPm 协处理器操作数寄存器
协处理器数据传送格式(LDC,STC)用于直接地加载或存贮向量处理器的寄存器子集到存贮器。ARM7处理器负责提供字地址,而向量处理器提供或接收数据,并且控制传送的字数。更详细内容参考ARM7数据表。LDC,STC格式
30         25              20      15            10             5        0
Figure A9711740400201
格式字段具有下列约定:
    字段     意义
    Cond 条件字段,该字段指定指令执行条件
    P Pre/Post标志位
    U Up/Down位
    N 传送长度,由于CRd字段没有足够的位数,位N作为一部分源或目的寄存器标识符使用。
    W 回写位
    L 加载/存贮位
    Rn 基址寄存器
    CRn 协处理器源/目的寄存器
    CP# 协处理器号,下列协处理器号是当前使用的:1111-ARM7数据高速缓存0111-向量处理器,扩展的寄存器
    Offset 无符号8位立即偏移量
协处理器寄存器传送格式(MRC,MCR)用于直接地在ARM7和向量处理器之间传送信息。该格式用于在ARM7寄存器和向量处理器的标量或专用寄存器之间的转移。MRC,MCR格式
 30          25           20       15             10           5         0
Figure A9711740400202
该格式字段具有下列约定:
    字段     意义
    Cond 条件字段,该字段指定指令执行的条件
    Opc 协处理器操作码
    L 加载/存贮位L=0移到向量处理器L=1移自向量处理器
    CRn:Crm 协处理器源/目的寄存器。仅CRn<1:0>:CRm<3:0>被使用
    Rd ARM源/目的寄存器
    CP# 协处理器号,下列协处理器号是当前使用的:1111=ARM7数据高速缓存0111=向量处理器,扩展的寄存器
    CP 协处理器信息
扩展的ARM指令说明
扩展的ARM指令按字母顺序予以说明。CACHE  高速缓存操作格式
      30           25           20         15            10       5      0
Figure A9711740400221
汇编器句法
STC{cond} p15,cOpc,<Address>
CACHE{cond}Opc,<Address>
其中Cond={eq,he,cs,cc,mi,pl,vs,vc,hi,Is,ge,It,gt,le,ai,nv}和Opc={0,1,3}。注意,因为LDC/STC格式的CRn字段用于指定Opc。在第一种句法中Opcode的十进制表示必须由字母“C”打头(即用CO代表0)。关于地址方式句法参考ARM7数据表。说明只有在Cond为真时,执行该指令。Opc<3:0>指示如下操作:
Opc<3:0>     意义
    0000 回写和作废由EA指定的改动过的高速缓存行。如果匹配的行包含未改动过的数据,该行被作废,不予回写。如果找不着包含EA的高速缓存行,数据高速缓存保持原封不动。
    0001 回写和作废由EA牵引指定的改动过的高速缓存行。如果匹配行包含未改动的数据,该行被作废不予回写。
    0010 用于PFTCH和WBACK指令
    0011 作废由EA指定的高速缓存行。即使该行被改动过,该高速缓存行亦被作废(不回写)。这是一种特权操作,如果试图在用户方式下使用,它将引起ARM7保护违章
    其它 保留
操作
参考ARM7数据表,EA如何计算。异常
ARM7保护违章。INTVP  中断向量处理器格式     30        25       20            15            10          5        0
Figure A9711740400231
汇编器句法
    CDP{cond}p7,1,c0,c0,co
    INTVP{cond}
其中cond={eq,ne,cs,cc,mi,pl,vs,vc,hi,Is,ge,It,gt,le,al,ns}。说明
该指令仅在Cond为真时执行。该指令发信号使向量处理器停止。ARM7不必等待向量处理器停止,继续执行下一指令。
应使用MFER忙等待循环以便看看向量处理器是否在该指令执行后已停止。如果向量处理器已经在VP_IDLE状态,则该指令不起作用。位19:12、7:15和3:0被保留。异常
向量处理器不可得到。MFER  自扩展寄存器转移格式
   30          25            20          15            10        5       0
Figure A9711740400241
汇编器句法
MRC{cond}p7,2,Rd,cP,cER,0
MEER{cond}Rd,RNAME
其中Cond={eg,he,cs,cc,mi,pl,rs,vc,hi,ls,ge,lt,gt,le,al,nv},Rd={r0,...r15},P={0,1},ER={0,...15}而RNAME指的是结构上指定的寄存器助记符(即,PERO或CSR)。说明
该指令仅在Cond为真时执行。ARM7寄存器Rd根据以P:ER<3:0>指定的扩展寄存器ER转移,如下表所示。参考章节1.2扩展寄存器的说明。
  ER<3:0>     P=0     P=1
    0000     UER0     PER0
    0001     UER1     PER1
    0010     UER2     PER2
    0011     UER3     PER3
    0100     UER4     PER4
    0101     UER5     PER5
    0110     UER6     PER6
    0111     UER7     PER7
    1000     UER8     PER8
    1001     UER9     PER9
  ER<3:0>     P=0     P=1
    1010     UER10     PER10
    1011     UER11     PER11
    1100     UER12     PER12
    1101     UER13     PER13
    1110     UER14     PER14
    1111     UER15     PER15
位19:17及7:5被保留异常
当试图在用户方式中访问PERx时,保护违章。MFVP  自向量处理器转移格式汇编器句法
MRC{cond}p7,1,Rd,Cm,CRm,0
MFVP{cond}Rd,RNAME
其中Cond={eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,al,nv},Rd={r0,...r15},CRn={c0,...c15},CRm={c0,...c15}而RNAME指的是结构上指定的寄存器助记符(即,SPO或VCS)说明
该指令只在Cond为真时执行。ARM7寄存器Rd根据向量处理器的标量/专用寄存器CRn<1:0>:CRm<3:0>转移。参考章节3.2.3中寄存器传送向量处理器寄存器号的分配。
位7.5及CRn<3:2>被保留。
向量处理器寄存器映射显示在下面。参考向量处理器专用寄存器(SP0-SP15)的表15。
CRM<3:0> CRn<1:0>=00 CRn<1:0>=01 CRn<1:0>=10 CRn<1:0>=111
    0000     SR0     SR16     SP0     RASR0
    0001     SR1     SR17     SP0     RASR1
    0010     SR2     SR18     SP0     RASR2
    0011     SR3     SR19     SP0     RASR3
    0100     SR4     SR20     SP0     RASR4
    0101     SR5     SR21     SP0     RASR5
    0110     SR6     SR22     SP0     RASR6
    0111     SR7     SR23     SP0     RASR7
    1000     SR8     SR24     SP0     RASR8
    1001     SR9     SR25     SP0     RASR9
    1010     SR10     SR26     SP0     RASR10
    1011     SR11     SR27     SP0     RASR11
    1100     SR12     SR28     SP0     RASR12
    1101     SR13     SR29     SP0     RASR13
    1110     SR14     SR30     SP0     RASR14
    1111     SR15     SR31     SP0     RASR15
SR0经常读出32位零,并忽略对它的写入。异常
向量处理器不可得到。MTER  转移到扩展寄存器格式
30       25             20           15            10       5           0
Figure A9711740400281
汇编器句法
MRC{cond}p7,2,Rd,cP,cER,0
MFVP{cond}Rd,RNAME
这里Cond={eq,he,cs,cc,mi,pl,rs,vc,hi,ls,ge,lt,gt,le,al,nv},Rd={r0,...r15},P={0,1},ER={0,...15}。RNAME指的是结构上指定的寄存器助记符(即,PERO或CSR)。说明
该指令只在条件为真时执行。ARM7寄存器Rd根据以P:ER<3:0>指定的扩展寄存器ER转移。如下表所示
  ER<3:0>     P=0     P=1
    0000     UER0     PER0
    0001     UER1     PER1
    0010     UER2     PER2
    0011     UER3     PER3
    0100     UER4     PER4
    0101     UER5     PER5
    0110     UER6     PER6
    0111     UER7     PER7
    1000     UER8     PER8
    1001     UER9     PER9
    1010     UER10     PER10
    1011     UER11     PER11
    1100     UER12     PER12
    1101     UER13     PER13
    1110     UER14     PER14
    1111     UER15     PER15
位19:17和7:5备用异常
企图在用户方式访问PERx时,保护违章。MTVP  转移到向量处理器格式      30       25            20            15         10         5        0汇编器句法
MRC{cond}p7,1,Rd,Crn,CRm,0
MFVP{cond}Rd,RNAME
这里Cond={eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,al,nv},Rd={r0,...r15},CRn={c0,...c15},CRm={c0,...c15}。RNAME指的是结构上指定的寄存器助记符(即,SPO或VCS)。说明
该指令只在Cond为真时执行。ARM7寄存器Rd根据向量处理器的标量/专用寄存器CRn<1:0>:CRm<3:0>转移。
位7:5及CRn<3:2>保留。
向量处理器寄存器映射如下所示
CRM<3:0> CRn<1:0>=00 CRn<1:0>=01 CRn<1:0>=10 CRn<1:0>=111
    0000     SR0     SR16     SP0     RASR0
    0001     SR1     SR17     SP0     RASR1
    0010     SR2     SR18     SP0     RASR2
    0011     SR3     SR19     SP0     RASR3
    0100     SR4     SR20     SP0     RASR4
    0101     SR5     SR21     SP0     RASR5
    0110     SR6     SR22     SP0     RASR6
    0111     SR7     SR23     SP0     RASR7
    1000     SR8     SR24     SP0     RASR8
    1001     SR9     SR25     SP0     RASR9
    1010     SR10     SR26     SP0     RASR10
    1011     SR11     SR27     SP0     RASR11
    1100     SR12     SR28     SP0     RASR12
    1101     SR13     SR29     SP0     RASR13
    1110     SR14     SR30     SP0     RASR14
    1111     SR15     SR31     SP0     RASR15
异常
向量处理器不可得到。PFTCH   预取格式
        30          25          20         15             10              5
 0
Figure A9711740400301
汇编器句法
LDC{cond}p15,2,<Address>
PFTCH{cond}<Address>
这里Cond={eq,he,cs,cc,mi,pl,rs,vc,hi,Is,ge,lt,gt,le,al,nv},参考地址方式句法的ARM7数据表。说明
该指令仅在Cond为真时执行。由EA指定的高速缓存行被预取到ARM7数据高速缓存中。操作
关于EA如何被计算,参考ARM7数据表。异常:无STARTVP   启动向量处理器格式
          30         25           20            15         10          5
0汇编器句法
CDP{cond}p7,0,cO,cO,cO
STARTVP{cond}
其中cond={eq,he,cs,cc,mi,pl,vs,vc,hi,Is,ge,it,gt,le,al,nv}。说明
该指令仅在cond为真时执行。该指令向向量处理器发信号,启动执行和自动地清除VISRC<vip>和VISRC<vip>。ARM7不等待向量处理器启动执行,继续执行下一指令。
向量处理器的状态,在这个指令执行以前必须要初始化成所要的状态。如果向量处理器已经在VP-RUN状态,则该指令无作用。
位19:12,7:5及3:0保留。异常
向量处理器不可得到。TESTSET  测试和设置格式
         30           25          20            15        10        5
  0汇编器句法
MRC{cond}p7,0,Rd,cO,cER,0
TESTSET{cond}Rd,RNAME
这里cond={eq,he,cs,cc,mi,pl,rs,re,hi,Is,ge,It,gt,le,al,nv}。Rd={r0,...r15},ER={ 0,...15},RNAME指结构上指定的寄存器助记符(即,VER1或VASYNC)。说明
该指令只在cond为真时执行,该指令把UERX的内容返回到RD中,并设定UERX<30>为1。如果ARM7寄存器15指定为目的寄存器则UERx<30>在CPSR的Z位返回,以便能实现短的忙等待循环。
当前,只有UER1被规定随同读指令工作。
位19:17及7:5保留。异常:无
                     附录B
多媒体处理器100的结构定义了处理器110用MFER和MTER指令访问的扩展寄存器,扩展寄存器包括特许扩展寄存器和用户扩展寄存器。
特许扩展寄存器主要用于控制多媒体信号处理器的操作。它们被示于表B.1表B.1:特许扩展寄存器
助记符 说明
    PER0  CTR 控制寄存器
    PER1  PVR 处理器类型寄存器
    PER2  VIMSK 向量中断屏蔽寄存器
    PER3  AIABR ARM7指令地址断点寄存器
    PER4  ADABR ARM7数据地址断点寄存器
    PER5  SPREG 高速暂存寄存器
    PER6  STR 状态寄存器
控制寄存器控制MSP100的操作,CTR中的所有位在复位时被清除,寄存器的定义如表B.2所示。表B.2:CTR的定义
    位 助记符     说明
    31-13 保留位永远作为0读出
    12   VDCI 向量数据高速缓存无效位。置位时,使全部向量处理器数据高速缓存变成无效。因高速缓存无效操作通常会与正常高速缓存操作冲突,所以只能支持一个无效码序列。
    11   VDE 向量数据高速缓存使能位。当清除时,禁止向量处理器数据高速缓存
    10   VICI 向量指令高速缓存无效位。当置位时使全部向量处理器指令高速缓存变成无效。因高速缓存无效操作通常会与正常高速缓存操作冲突。所以只能支持一个无效码序列。
    9   VICE 向量指令高速缓存使能位。当清除时,禁止向量处理器指令高速缓存。
  位 记忆符     说明
    8  ADCI ARM7数据高速缓存无效位。当置位时,使全部ARM7数据高速缓存变成无效。因高速缓存无效操作通常会同正常高速缓存操作冲突,所以只支持一个无效码序列。
    7  ADCE ARM7数据高速缓存使能位。当清除时禁止ARM7数据高速缓存。
    6  AICI ARM7指令高速缓存无效位。当置位时,使全部ARM7指令高速缓存变成无效。因高速缓存无效操作通常会同正常高速缓存操作冲突,所以只支持一个无效码序列。
    5  AICE ARM7指令高速缓存使能位。当清除时,禁止ARM7指令高速缓存
    4  APSE ARM7处理器单步使能位。当置位时,使ARM7处理器在执行一条指令后,发生ARM7处理器单步异常。单步功能只在用户或管理方式下得到。
    3  SPAE 高速暂存存取使能位。当设定时,允许ARM7处理从高速暂存加载或存到高速暂存。当清除时,试图加载或存贮到高速暂存以产生ARM7无效数据地址异常
    2  VPSE 向量处理器单步使能位。当设定时,使向量处理器在执行一条指令后,发生向量处理器单步异常。
    1  VPPE 向量处理器流水线使能位。当清除时,配置向量处理器以便在非流水线方式下操作。此时在向量处理器执行流水线中,只有一条指令是活动的。
    0  VPAE 向量处理器访问使能位。当设定时如上所述使ARM7处理执行扩展的ARM7指令。当清除时,阻止ARM7处理执行扩展ARM7指令。凡这样的企图会产生向量处理器不可得到的异常
状态寄存器指示MSP100的状态。字段STR中的所有位在复位时被清除,寄存器的定义如表B.3所示。表B.3 STR定义
    位 助记符     说明
    31:23 保留位-永远读作0
    22  ADAB 当ARM7数据地址断点匹配发生时,ARM7数据地址断点异常位被设置,通过数据异常中断报告该异常。
    21  AIDA 当ARM7加载或存贮指令试图访问未决定的地址或MSP具体方案未完成时,或当试图访问一个不允许的高速暂存器时,产生ARM7无效数据地址异常。这种异常可通过数据终止中断来报告。
    20  AIAB 当ARM7指令地址断点匹配出现时,ARM7指令地址断点异常位被设定。该异常通过预取终止中断来报告。
    19  AIIA ARM7无效指令地址异常。该例外通过预取终止中断来报告。
    18  ASTP ARM7单步异常。该异常通过预取终止中断来报告。
    17  APV ARM7保护违例。该异常通过IRQ中断来报告
    16  VPUA 向量处理器不可得到异常,该异常通过协处理器不可得到中断来报告
    15-0 保留-永远读作0
处理器类型(Version)寄存器标识处理器的多媒体信号处理器系列的具体处理器的类型。
向量处理器中断屏蔽寄存器VIMSK控制对处理器110的向量处理器异常的报告。当随着VTSRC寄存器中相应的位而设定时,VIMSK中的每一位对中断ARM7产生异常。它并不影响如何检测向量处理器的异常,但影响是否异常将中断ARM7。在VIMSK中的所有位在复位时被清除。寄存器的定义如表B.4所示表B.4:VIMSK的定义
    位     助记符     说明
    31     DABE 数据地址断点中断使能
    30     IABE 指令地址断点中断使能
    29     SSTPE 单步中断使能
    28-14 保留-永远读作0。
    13     FOVE 浮点溢出中断使能
    12     FINVE 浮点非法操作数中断使能
    11     FDIVE 浮点被零除中断使能
    10     IOVE 整数溢出中断使能
    9     IDIVE 整数被除零中断使能
    8-7 保留-永远读作0
    6     VIE VCINT中断使能
    5     VJE VCJOIN中断使能
    4-1 保留-永远读作0
    0     CSE 上下文转换使能
ARM7指令地址断点寄存器辅助调试ARM7程序。寄存器的定义如表B.5所示。表B.5:AIABR的定义
助记符     说明
31-2 IADR ARM7指令地址
1 保留,永远读成0
0 IABE 指令地址断点能使,在复位时清除。如果置位,当“ARM7指令访问地址”匹配AIABR<31:2>,及VCSR<AIAB>被清除时,发生ARM7指令地址断点异常,VCSR<AIAB>置位以表示异常。当匹配发生时,若VCSR<AIAB>已置位,则该VCSR<AIAB>被清除,匹配被忽视。在指令执行前报告异常。
“ARM7数据地址断点寄存器”辅助调试ARM7程序。寄存器的定义如表B.6所示。表B.6:ADABR定义
    位 助记符     说明
    31-2  DADR ARM数据地址。在复位时无定义
    1  SABE 存贮“地址断点使能”,在复位时清除。如果置位,当ARM7存贮访问地址的高30位匹配ADABR<31:2>且VCSR<ADAB>被清除时,发生“ARM7数据地址断点”异常。VCSR<ADAB>置位表示异常。当匹配发生时,如果VCSR<ADAB>已经设置,则此VCSR<ADAB>被清除,匹配被忽略。在存贮指令执行之前,异常被报告。
    0  LABE 加载地址断点使能。在复位时清除。如果置位,当ARM7加载访问地址的高30位匹配ADABR<31:2>且VCSR<ADAB>被清除时发生“ARM7数据地址断点”异常。VCSR<ADAB>被置位以表示异常。当匹配发生时如果VCSR<ADAB>已经置位,此VCSR<ADAB>被清除,匹配被忽略。在加载指令之前报告异常。
“高速暂存寄存器”配置在高速缓存子系统130中使用SRAM形成的高速暂存的地址和尺寸。寄存器定义示于表B.7表B.7:SPREG的定义
  位 助记符     说明
31-11  SPBASE “高速暂存基址”指示高速暂存的起始地址的高21位。根据MSP-BASE寄存器中的值,这值必须有4M字节的偏移
10-2  保留
1-0  SPSIZE 高速暂存的尺寸00->0K(用4K向量处理器数据高速缓存)01->2K(用2K向量处理器数据高速缓存)10->3K(用1K向量处理器数据高速缓存)11->4K(不用向量处理器数据高速缓存)
用户扩展寄存器主要用于处理器110和120的同步。用户扩展寄存器当前被定义的只有一位,映射到位30,并且例如“MFERR15、UERx”的指令将位的值返回成为Z标志。位UERx<31>和UERx<29:0>总是被读作0。用户扩展寄存器在表B.8中被说明。表B.8:用户扩展寄存器
  号   助记符     说明
  UER0   VPSTATE 向量寄存器状态标志。当置位时,位30表示向量处理器在VP_RUN状态,并执行指令。当清除时,表示向量处理器处在VP_IDLE状态,并已经停止VPC寻址下一条指令以便执行。VPSTATE<30>在复位时被清除。
  UER1   VASYNC 向量和ARM7同步标志。位30提供向量和ARM7处理器120及110之间的生产者/消费者类型同步。向量处理器120能用VMOV指令设置或清除这标志。该标志亦可以通过ARM7用MFER或MTER指令的处理被设置或清除。此外,标志能用TESTSET指令读出或置位。
表B.9显示了在加电复位时扩展寄存器的状态。表B.9:扩展寄存器加电状态
    寄存器     复位状态
    CTR 0
    PVR TBD
    VIMSK 0
    AIABR AIABR<0>=0,其它均未定义
    ADABR ADABR<0>=0,其它均未定义
    STR 0
    VPSTATE VPSTATE<30>=0,其它均未定义
    VASYNE VASYNC<3>=0,其它均未定义
                        附录C
向量处理器120的结构状态包括32个32位标量寄存器;32个288位向量寄存器的2个组;一对576位向量累加寄存器;一组32位专用寄存器。标量、向量及累加器寄存器拟供通用编程用,并支持许多不同数据类型。
下面的标记用于这里及以后各部分:VR表示向量寄存器;VRi表示第i个向量寄存器(零偏移);VR[i]表示在向量寄存器VR中第i个数据元素;VR<a:b>表示在向量寄存器中位a到b,而VR[i]<a:b>表示在向量寄存器VR中第i个数据元素的位a到b。
对于一个向量寄存器中的多个元素,向量结构有一个额外数据类型和数据长度的尺寸。由于向量寄存器有固定尺寸,它能保持的数据元素数取决于元素的长度。MSP结构定义了如表C.1所示的5种元素长度。表C.1:数据元素的长度
    长度名字     长度(位)
    布尔     1
    字节     8
    字节9     9
    半字     16
    字     32
MSP结构,根据指令中指定的数据类型和长度来解释向量数据。通常,大部分算术指令中字节、字节9、半字和字元素长度支持2的补码(整数)格式。此外,对大部分算术指令,字元素长度支持IEEE754单精度格式。
一个程序员可以任何所要的方式解释数据,只要指令序列产生有意义的结果。例如,程序员可自由用字节9来存贮8位无符号数,相当于可自由把8位无符号数存到字节数据元素中,并用提供的2的补码的算术指令去操作它们,只要程序能处理“假”溢出结果。
有32个标量寄存器,称为SR0到SR31。标量寄存器为32位长并能容纳任何一种所定义长度的一个数据元素。标量寄存器SR0是一个特殊寄存器。寄存器SR0总是读出32位零。并无视对SR0寄存器的写入。字节、字节9和半字数据类型被存储在标量寄存器的最低有效位中,而那些最高有效位具有未定义的值。
由于寄存器没有数据类型指示器,程序员必须知道每条指令所用的寄存器的数据类型。这不同于认为32位寄存器包含32位值的其它结构。MSP结构规定数据类型A的结果仅正确地修改为数据类型A所定义的位。例如,字节9加的结果,只能修改32位目标标量寄存器的低9位。较高的23位值没有定义。除非用指令另外指出。
64个向量寄存器被构成2个组,每个组32个寄存器。组0包含起始32个寄存器,组体1包括其次的32个寄存器。这两个组中一个设置为当前组,另一个设置或替代组。全部向量指令通过缺省值使用当前组中的寄存器,除了加载/存贮和寄存器传送指令,它们能访问替代组中的向量寄存器。在“向量控制”和“状态寄存器VCSR”中的CBANK位可用来设置组0或者1成为当前组(另外一个成为替代组)。在当前组中的向量寄存器被指定为VR0到VR31,而在替代组中指定为VRA0到VRA31。
另外,这两个组从概念上能合并提供32个双倍尺寸的向量寄存器,每个寄存器576位。在控制寄存器VCSR中VEC64位指定这种方式。在VEC64模式中,不分当前组和替代组,而向量寄存器表示二个组中一对相应的288位向量寄存器,也就是
VRi<575:0>=VR1i<287:0>:VR0i<287:0>
这里VR0i和VR1i分别表示在组1和0中寄存器号为VRi的向量寄存器。双倍宽的向量寄存器被称为VR0到VR31。
向量寄存器能容纳字节、字节9、半字或字长度的多个元素,如表C.2所示。表C.2:每个向量寄存器的元素数
元素长度名字 元素长度(位) 元素最大数 所用的总位数
    字节9     9     32     288
    字节     8     32     256
    半字     16     16     256
    字     32     8     256
不支持在一个寄存器中混合多种元素长度。除字节9元素外只用288位中的256位。尤其是每个第9位不用。在字节、半字和字长度中不用的32位被保留。程序员对它们的值应不作任何假设。
向量累加器寄存器要为比目的寄存器中的结果具有更高精度的中间结果提供存贮。向量累加器寄存器由4个288位寄存器组成,其为VAC1H、VAC1L、VAC0H和VAC0L。VAC0H:VAC0L对通过缺省由3条指令使用。只在VEC64模式中,VCL1H:VAC1L对用于模拟64字节9向量操作。即使在VEC32方式中设置组1为当前组,仍使用此VAC0H:VAC0L对。
为产生同在源矢量寄存器中有相同元素数的扩展精度的结果,通过一对寄存器来保存扩展精度元素,如表C.3所示。表C.3:向量累加器格式
元素长度     逻辑视区     VAC格式
  字节9 VAC[i]<17:0> VAC0H[i]<8>:VAC0L<i><8:0>用于i=0..31以及VAC1H[i-32]<8:0>:VAC1L[i-32]<8:0>用于i=32..63
  字节 VAC[i]<15:0> VAC0H[i]<7:0>:VAC0L<i><7:0>用于i=0..31以及VAC1H[i-32]<7:0>:VAC1L[i-32]<7:0>用于i=32..63
  半字 VAC[i]<31:0> VAC0H[i]<15:0>:VAC0L<i><15:0>用于i=0..15以及VAC1H[i-16]<15:0>:VAC1L[i-16]用于i=16..31
  字 VAC[i]<63:0> VAC0H[i]<31:0>:VAC0L<i><31:0>用于i=0..7以及VAC1H[i-8]<31:0>:VAC1L[i-8]<31:0>用于i=8..15
仅在VEC64模式才用VAC1H:VAC1L对,在这时的元素数,字节9(和字节)、半字和字分别为64、32或16。
有33个专用寄存器不能直接从存贮器装载或直接存入存贮器。16个专用寄存器被称为RASR0到RASR15,形成一内部返回地址栈并由子例程调用和返回指令而使用。另外17个32位的专用寄存器示于表C.4表C.4:专用寄存器
   号    助记符     说明
    SP0     VCSR 向量控制和状态寄存器
    SP1     VPC 向量程序计数器
    SP2     VEPC 向量异常程序计数器
    SP3     VISRC 向量中断源寄存器
    SP4     VIINS 向量中断指令寄存器
    SP5     VCR1 向量计数寄存器1
    SP6     VCR2 向量计数寄存器2
    SP7     VCR3 向量计数寄存器3
    SP8     VGMR0 向量总屏蔽寄存器0
    SP9     VGMR1 向量总屏蔽寄存器1
    SP10     VOR0 向量溢出寄存器0
    SP11     VOR1 向量溢出寄存器1
    SP12     VIABR 向量数据地址断点寄存器
    SP13     VDABR 向量指令地址断点寄存器
    SP14     VMMR0 向量转移屏蔽寄存器0
    SP15     VMMR1 向量转移屏蔽寄存器1
    SP16     VASYNC 向量和ARM7同步寄存器
向量控制和状态寄存器VCSR的定义示于表C.5表C.5:VCSR的定义
  位   助记符     说明
 31:18 保留
 17:13 VSP<4:0> 返回地址栈指针。VSP通过转移到子例程和从子例程指令返回来使用以跟踪内部返回地址的栈顶。在返回地址栈中只有16个入口,VSP<4>用于检测栈溢出条件。
 12 SO 汇总溢出状态标志。当算术操作结果溢出时,该位被置位。该位在一旦设置后是不变的,直到给这位写0
时才清除。
   位   助记符 说明
    11     GT 大于状态标志。当SRa>SRb时,用VSUBS指令设置该位。
    10     EQ 等于状态标志。当SRa=SRb时,用VSUBS指令设置该位。
    9     LT 小于状态标志。当SRa<SRb时用VSUBS指令设置该位
    8     SMM 选择转移屏蔽。当该位设置时,VMMR0/1对成为算术操作的元素屏蔽。
    7     CEM 补码元素屏蔽。当该位设置时,无论那个配置成算术操作的元素屏蔽,元素屏蔽被定义成VGMR0/1或VMMR0/1的1的补码。该位并不改变VGMR0/1或VMMR0/1的内容,它只改变这些寄存器的使用。SMM:CEM编码规定:00-用VGMR0/1作为除VCM0VM外的所有元素屏蔽。01-用VGMR0/1作为除VCMOVM外的所有元素屏蔽。10-用VMMR0/1作为除VCMOVM外的所有元素屏蔽。11-用VMMR0/作为除VCMOVM外的所有元素屏蔽。
    6     OED 溢出异常禁止。当该位置位时,处理器120检测到溢出条件后仍继续执行。
    5     ISAT 整型数饱和方式。OED:ISAT位的组合规定为:00无OED:ISAT位饱和规定:00不饱和,当发生溢出异常时报告。X1饱和,不引起溢出
    位   助记符     说明
10不饱和,当发生溢出异常时不报告。
    4:3     RMODE IEEE754浮点操作舍入方式。00舍入方向负穷大01舍入方向零10舍入方向最接近值11舍入方向正无穷大
    2     FSAT 浮点饱和方式位(快IEEE方式)
    1     CBANK 当前组位。当置位时表示组1为当前组。当清除时表示组0为当前组,当VEC64位置位时,CBANK忽略。
    0     VEC64 64字节9向量模式位。当置位时规定向量寄存器和累加器有576位。缺省模式规定32字节9长度,其被称为VEC32模式。
向量程序计数器寄存器VPC是由向量处理器120执行的下一指令的地址。ARM7处理器110在发出STARTVP指令以启动向量处理器120操作之前应当装载寄存器VPC。
向量异常程序计数器VEPC指出最可能引起最新异常的指令地址。MSP100不支持精确异常,因此,用了“最可能”一词。
向量中断源寄存器VISRC对ARM7处理器110指出中断源。适当的位通过硬件在异常检测到时被设置。在向量处理器120重新开始执行之前软件必须清除寄存器VISRC。在寄存器VISRC中的任何位置位均引起向量处理器120进入状态VP_IDLE。若相应的中断使能位在VIMSK中被设置,给处理器110的中断就被发出。表C.6定义了寄存器VISRC的内容。C.6:VISRC定义
   位   记忆符     说明
    31     DAB 数据地址断点异常
    30     IAB 指令地址断点异常
    29     SSTP 单步异常
    28-18 保留
    17     IIA 无效指令地址异常
    16     IINS 无效指令异常
    15     IDA 无效数据地址异常
    14     UDA 非对齐数据访问异常
    13     FOV 浮点溢出异常
    12     FINV 浮点无效操作数异常
    11     FDIV 浮点被零除异常
    10     IOV 整数溢出异常
    9     IDIV 整数被零除异常
    8     RASO 返回地址栈上溢异常
    7     RASU 返回地址栈下溢异常
    6     VIP VCINT异常挂起,执行STARTVP指令清除该位
    5     VJP VCJOIN异常挂起,执行STARTVP指令清除该位
    4-0     VPEV 向量处理器异常向量
向量中断指令寄存器VIINS,当VCINT或VCJOIN指令被执行以中断ARM7处理器110时,VCINT或VCJOIN指令被更新。
向量计数寄存器VCR1、VCR2和VCR3是用于“减量和分支”指令VD1CBR、VD2CBR及VD3CBR,并用执行的循环计数来被初始化。当执行VD1CBR指令时,寄存器VCR1被减1。如果计数值不为零,并且在指令内所指条件匹配VFLAG,则发生分支。否则,不发生分支。寄存器VCR1在任何情况下都可减1。寄存器VCR2和VCR3以相同方式被使用。
向量全屏蔽寄存器VGMR0表示在VEC32模式中将被影响的目的向量寄存器的元素和在VEC64模式中处在VR<287:0>内的元素。在VGMR0中的每一位控制向量目的寄存器中9个位的更新。具体讲,VGMR0<i>控制VEC32模式中VRd<9i+8:9i>的更新和VEC64模式中VR0d<9i+8:9i>的更新。注意,VR0d指的是在VEC64模式中组0内的目的寄存器,而VRd指的是当前组中的目的寄存器。在VEC32模式中,它既中是组0,也可为组1。向量全屏蔽寄存器VGMR0用于将VCMOVM指令以外的所有指令的执行中。
向量全屏蔽寄存器VGMR1表示在VEC64模式中将被影响的VR<575:288>内的元素。在寄存器VGMR1中的每位控制组1中向量目的寄存器中9个位的更新。具体讲VGMR1<i>控制VR1<9i+8:9i>的更新。寄存器VGMR1在VEC32模式中不使用,但在VEC64模式中,影响除VCMOVM指令外的所有指令的执行。
向量溢出寄存器VOR0表示在VEC32模式中的元素和VEC64模式中VR<287:0>内的元素,它们包括一向量算术运算后的溢出结果。该寄存器并不受标量算术运算的修改。位VOR0<i>设置表示字节和字节9的第i个元素、半字的第<i,idiv2>个元素、或字数据类型操作的第(i,idiv4)个元素包括溢出结果。例如,位1和位3可能分别被设置以表示第一个半字和字元素的溢出。在VOR0中位的映射不同于在VGMR0或VGMR1中位的映射。
向量溢出寄存器VOR1用来表示在VEEC64模式中VR<575:288>内的元素,它们包括在向量算术运算后的溢出结果。寄存器VOR1在VEC32模式中并不用,也不由标量算术运算来修改。设置的位VOR1<i>表示字节或字节9的第i个元素、半字的第(i,idiv2)个元素、或字数据类型操作的第(i,idiv4)个元素包括溢出结果  例如,位1和位3可能分别被设置以表示在VR<575:288>中第一个半字或字元素的溢出。在VOR1中位的映射不同于在VGMR0或VGMR1中位的映射。
向量指令地址断点寄存器VIABR辅助调试向量程序。寄存器的定义如表C.7所示。表C.7:VIABR的定义
助记符 说明
 31-2   IADR 向量指令地址,在复位时不定义
 1 保留位
 0   LABE 指令地址断点使能。在复位时不定义。如果置位,当向量指令访问地址同VIABR<31:2>匹配时发生“向量指令地址断点”异常,设置位VISRC<IAB>以表示异常。该异常在指令执行前报告。
向量数据地址断点寄存器VDABR辅助调试向量程序。寄存器的定义如表C.8表示。表C.8:VDABR的定义
  位 助记符     说明
    31-2  DADR 向量数据地址。在复位时不定义
    1  SABE 存贮地址断点使能。复位时不定义。如果置位,当向量存储访问地址同VDABR<31:2>匹配时,发生“向量数据地址断点”异常。位VISRC<DAB>被置位以表示异常。在存贮指令执行之前报告异常。
    0  LABE 加载地址断点使能。在复位时清除。如果置位,当向量加载访问地址同VDABR<31:2>匹配时发生“向量数据地址断点”异常。VISRC<DAB>被置位以表示异常。在加载指令执行之前报告异常。
向量转移屏蔽寄存器VMMR0在所有时间内供VCMOVM指令用,同时当VCSR<SMM>=1时供所有指令用。寄存器VMMR0表示在VEC32模式中会受到影响的目的向量寄存器的元素,以及在VEC64模式中VRL<287:0>内元素。在VMMR0中的每个位控制向量目的寄存器中9个位的更新。具体说VMMR0<i>在VEC32模式中控制VRd<9i+8:9i>的更新,在VEC64模式中控制VR0d<9i+8:9i>的更新。在VEC64模式中VR0d表示在组0中的目的寄存器,VRd指在当前组中的目的寄存器,在VEC32模式中VRd既可在组0中也可在组1中。
向量转移屏蔽寄存器VMMR1在所有时间内供VCMOVM指令用,同时当VCSR<SMM>=1时供所有指令用。寄存器VMMR1表示在VEC64模式中会受影响的VR<575:288>中的元素,VMMR1中的每位控制在组1中向量目的寄存器中9个位的更新。具体说VGMR1<i>控制VR1d<9i+8:9i>的更新。寄存器VGMR1在VEC32模式中不使用。
向量和ARM7同步寄存器VASYNC提供在处理器110和120之间生产者/消费者型式的同步。当前,只定义了位30。当向量处理器120在VP_RUN或VP_IDLE时,ARM7处理器可用MFER、MTER和TESTSET指令访问寄存器VASYNC。寄存器VASYNC不能通过TVP或MFVP指令被ARM7处理器所访问。因为这些指令不能访问超出开始的16个向量处理器的专用寄存器。向量处理能通过VMOV指令访问寄存器VASYNC。
表C.9显示加电复位时的向量处理器的状态。表C.9:向量处理器加电复位状态
    寄存器     复位状态
    SR0     0
    所有其它寄存器     无定义
在向量处理器能够执行指令之前,通过ARM7处理器110初始化专用寄存器。
                          附录D
每条指令隐含或规定了源和目的操作数的数据类型。某些指令具有同等地适用于多于一种数据类型的语义。某些指令具有的语义,对源采用一种数据类型,而对结果产生不同数据类型。本附录说明了示范性实施例支持的数据类型。在本申请中表1中说明了所支持的数据类型int8、int9、int16、int32和浮点数。不支持无符号的整型格式,对无符号的整型值在使用之前首先必须转换成2的补码格式。程序员可自由使用算术指令连同无符号整型或选择任何其它格式,只要合适地处理溢出。这种结构只定义了2的补码整型数和32位浮点数据类型的溢出。这些结构并不检测8、9、16或32位运算的执行,该运算是检测无符号溢出所必须的。表D.1显示了加载操作所支持的数据长度D.1:加载操作支持的数据长度
存贮器中数据长度 寄存器中数据长度     加载操作
    8-bit     9-bit 加载8位,符号扩展到9位(用于加载8位2的补码)
    8-bit     9-bit 加载8位,零扩展到9位(用于加载无符号的8位)
    16-bit     16-bit 加载16位,(用于加载16位无符号或2的补码)
    32-bit     32-bit 加载32位,(用于加载32位无符号、2的补码整型数或32位浮点)
这种结构规定存贮器地址按数据类型边界对齐。也就是对字节无对齐要求;对半字,对齐条件是半字边界;对字,对齐条件是字边界。
表D.2显示了存贮操作所支持的数据长度表D.2:存贮操作所支持的数据长度
寄存器中数据长度 存贮器中数据长度     存贮操作
    8-bit     8-bit 存贮8位(存贮8位无符号或2的补码)
    9-bit     8-bit 截到低8位,存贮8位(存贮9位具
有元符号的值在0-255之间的2的补码)
    16-bit     16-bit 存贮16位(存贮16位无符号或2的补码)。
    32-bit     32-bit 存贮32位
因为多于一种数据类型被映射到不论是标量或矢量的寄存器。所以在目的寄存器中对某些数据类型可能有些位没有定义的结果。事实上,除了在向量目的寄存器中字节9数据长度的操作和在标量目的寄存器中字数据长度操作之外,在目的寄存器中有些位,它们的值并不因操作而被定义。对这些位,结构规定他们的值是未定义的,表D.3显示了对每种数据长度未被定义的位。表D.3:数据长度的未定义位
数据长度     向量目的寄存器   标量目的寄存器
  字节 VR<9i+8>,for i=0 to 31 SR<31:8>
  字节9 none SR<31:9>
  半字 VR<9i+8>,for i=0 to 31 SR<31:16>
  字 VR<9i+8>,for i=0 to 31 none
程序员在编程时必须知道源和目的寄存器或存贮器的数据类型。数据类型从一种元素长度转换成另一种潜在地造成以不同元素数存贮在向量寄存器中。例如从半字到字数据类型的向量寄存器的转换需要2个向量寄存器去存贮同样数目的被转换元素。相反,从在向量寄存器中具有用户定义格式的字数据类型转换成半字格式,在向量寄存器的一半中产生相同数目元素,而剩余位在另一半中。在这两种情况下,数据类型转换产生一种具有被转换元素配置的结构,这些元素的长度不同于源元素的长度。
作为一个原理,MSP结构并不提供隐含地改变元素数量作为结果操作,这种结构意味着程序员必须知道改变目的寄存器中元素数的后果。此结构只提供从一种数据类型转换成同样长度的另一种数据类型的操作。并且当从一种数据类型转或另一种不同长度的数据类型时,需要程序员为数据长度的差异作出调整。
在附录E中所述的专用指令如VSHFLL和VUNSHFLL使第一种数据长度的向量转换成第2种数据长度的向量简单化。在向量寄存器VRa中,从较小的元素长度(如int8)转换成较大元素长度,(如int16)的2补码数据类型所包括的基本步骤为:
1.使用字节数据类型,将VRa中的元素与另一向量VRb混洗成为2个向量VRc:VRd。在VRa中的元素转移倍宽寄存器VRc:VRd中int16数据元素的较低字节处。而其值不相关的VRb的元素转移到VRc:VRd的高字节处。该操作有效地把VRa元素的一半移到VRc中,另一半移到VRd中。这时,每个元素的长度,从字节加倍成半字。
2.对VRc:VRd中的元素算术移位移8位,并对它作符号扩展
在向量寄存器VRa中将2的补码数从较大元素长度(int16)转成较小长度(如int8)所包括的基本步骤为:
1.检查确认int16数据类型中的每个元素能以字节长度来表示。如果需要,在两端饱和该元素,以适合较小长度。
2.将VRa中的元素同另一向量VRb去混洗,转移到2个向量VRc:VRd中,在VRa:VRb中,每个元素的高半部转移到VRc,低半部转移到VRd中,这样在VRd的低半部中有效地集合了VRa中所有元素的低半部元素。
为了下列数据类型转换提供一些特殊指令:int32转成单精度浮点;单精度浮点转成定点(X.Y表示法);单精度浮点转成int32;int8转成int9;int9转成int16;及int16转成int9。
为了提供向量程序设计的灵活性,大部分向量指令使用元素屏蔽以及只操作在向量寄存器内所选定的元素。“向量全屏蔽寄存器”VGMR0和VGMR1标识的元素是通过向量指令在目的寄存器和向量累加器中要被修改的元素。对字节和字节9数据长度的操作,在VGMR0(或VGMR1)中32位中的每位标识要被操作的一个元素,位VGMR0<i>置位表示字节长度的元素i将被作用。这里的i是0到31。对半字数据长度操作来讲,在VGMR0(或VGMR1)中32位中的每二位标识要被操作的一个元素。位VGMR0<2i:2i+1>置位表示元素i将受作用,i为0到15。如果在半字数据长度操作中VGMR0的一对中只有一位被置位,则只有相应字节中的那些位被修改。对字数据长度操作,在VGMR0(或VGMR1)中每4位一组置位标识一元素被操作。位VGMR0<4i:4i+3>置位表示元素i将受作用,i是0到7。如果在VGMR0中不是4位一组的所有位为字数据长度操作而置位,则只是对应字节的那些位被修改。
VGMR0和VGMR1的设置可用VCMPV指令将向量寄存器同向量或标量寄存器比较或向量寄存器同立即值比较确定,该指令根据所规定的数据长度适合地设置屏蔽。因为标量寄存器被定义成只包含一个数据元素,所以标量操作(即目的寄存器是标量)不会受元素屏蔽影响。
为了向量编程的灵活性,大部分MSP指令支持向量和标量操作的3种形式,它们为:
1.向量=向量  操作  向量
2.向量=向量  操作  标量
3.向量=标量  操作  标量
情况2中标量寄存器规定作为B操作数,在标量寄存器中的单个元素复制成为了匹配向量A操作数中元素数所需的数量。复制的元素同被指定标量操作数中的元素具有相同值。标量操作数以立即操作数形式可来自标量寄存器或指令。在立即操作数的情况下,如果规定数据类型用的数据长度比可得到的立即字段长度大,则采用适当的符号扩展。
在许多多媒体应用中,特别注意源立即数和最后结果的精度。另外,整数乘指令产生能存贮在2个向量寄存器中的“双精度”中间结果。
通常,MSP结构支持8、9、16和32位元素的2的补码的整型格式和32位元素IEEE754单精度格式。定义的溢出,表示结果超出用规定数据类型所能表示的最大正值或最大负值范围。当发生溢出时,写到目的寄存器中的值不是有效数,所定义的下溢只用于浮点操作。
除非另有说明,所有浮点操作用位VCSR<RMODE>指定的4种舍入方式之一。某些指令用熟知的舍去零(偶舍入)的舍入方式。这些指令是明显指出的。
在许多多媒体应用中,饱和是一种重要功能。MSP结构支持所有4种整型和浮点操作饱和。在寄存器VCSR中位ISAT指定整型饱和方式。浮点饱和方式,亦称快速IEEE方式,它用VCSR中FSAT位来指定。当使能饱和方式时,超过最大正或大负值的结果分别设置成最大正或最大负值。在这种情况下,不发生溢出,溢出位不能被设置。
表D.4列出精确异常,这些异常在执行故障指定之前被检测和报告。异常向量地址用16进制表示表D.4:精确异常
    异常向量     说明
    0x00000018 向量处理器指令地址断点异常
    0x00000018 向量处理器数据地址断点异常
    0x00000018 向量处理器无效指令异常
    0x00000018 向量处理器单步异常
    0x00000018 向量处理器返回地址栈上溢异常
    0x00000018 向量处理器返回地址栈下溢异常
    0x00000018 向量处理器VCINT异常
    0x00000018 向量处理器VCJOIN异常
表D.5列出不精确异常,这些异常在执行了某些在程序中处于故障指令之后的指令后,被检测和报告。表D.5:非精确异常
    异常向量     说明
    0x00000018 向量处理器无效指令地址异常
    0x00000018 向量处理器无效数据地址异常
    0x00000018 向量处理器不对齐数据存取异常
    0x00000018 向量处理器整数上溢异常
    0x00000018 向量处理器浮点上溢异常
    0x00000018 向量处理器浮点无效操作数异常
    0x00000018 向量处理器浮点数被0除异常
    0x00000018 向量处理器整数被0除异常
                          附录E
本向量处理器指令包括示于表E.1中的十一个分类
    表E.1     向量指令类汇总
    类     说明
控制流 本类所含的指令用于控制包括转移和ARM7接口指令的程序流。
逻辑(按位方式,屏蔽) 本类包括按位方式的逻辑指令。虽然(按位方式,屏蔽)数据类型是布尔类,但逻辑指令使用元素屏蔽以修改结果,从而要求数据类型。
移位和循环移位(按元素方式,屏蔽) 本类所含的指令用于每个元素中的移位和循环位的屏蔽。本类区分元素的长度,并且受元素屏蔽的影响。
算术(按元素方式,屏蔽) 本类包括按元素方式的算术指令。(按元素方式,屏蔽)就是说第i个元素结果是源中的第i个元素计算得到的,本类区分元素的类型,并受元素屏蔽的影响。
多媒体(按元素方式,屏蔽) 本类所含的指令用于优化多媒体(按元素方式,屏蔽)的应用,本类区分元素类型,并受元素屏蔽影响。
数据类型转换(按元素方式,无屏蔽) 本类包含的指令用于转换元素从一种(元素方式,无屏蔽)数据类型到另一种。本类的指令支持指定的数据类型集,并且不经过元素屏蔽,因为此结构不支持寄存器中多于一种的数据类型。
元素间算术 本类包括的指令用于从向量的不同位置取两个元素以产生算术结果。
元素间转移 本类包括的指令用于从向量的不同位置取两个元素以重新排列元素。
加载/存储 本类包括的指令用于加载或存储寄存器。这些指令不受元素屏蔽的影响。
高速缓存操作 本类所含指令用于控制指令和数据高速缓存。这些指令不受元素屏蔽的影响。
寄存器转移 本类包含的指令用于在两个寄存器间转移数据。这些指令通常不受元素屏蔽的影响,但某些可以选用元素屏蔽。
表E.2列出流控制指令。表E.2:流控指令
    助记符     说明
    VCBR 条件分支
    VCBRI 间接条件分支
    VD1CBR 减量VCR1和条件分支
    VD2CBR 减量VCR2和条件分支
    VD3CBR 减量VCR3和条件分支
    VCJSR 条件转子例程
    VCJSRI 间接条件转子例程
    VCRSR 从程序条件返回
    VCINT 条件中断ARM7
    VCJOIN 条件与ARM7汇合
    VCCS 条件上下文切换
    VCBARR 条件屏障
    VCHGCR 改变控制寄存器(VCSR)
逻辑类支持布尔数据类型,并受元素屏蔽影响。表E.3列出流控指令。表E3:逻辑指令
    助记符     说明
    VNOT NOT--B
    VAND AND-(A&B)
    VCAND 补码AND- (-A&B)
    VANDC AND补码-(A&-B)
    VNAND NAND--(A&B)
    VOR OR-(A|R)
    VCOR 补码OR-(-A|R)
    VORC OR补码-(A|R)
    VNOR NOR--(A|R)
    VXOR 异或-(A^R)
    VXNOR 异或非--(A^R)
移位/循环转移类指令对int8、int9、int16和int32数据类型操作(非浮点数据类型),并受元素屏蔽的影响。表E.4列出了移位/循环移位类指令。表E.4:移位和循环移位类
    助记符     说明
    VDIV2N     除2的幂
    VLSL     逻辑左移
    VLSR     逻辑右移
    VROL     循环左移
    VROR     循环右移
通常,算术类指令支持int8、int9、int16和int32和浮点数据类型,并受元素屏蔽的影响。对于不支持的数据类型的专门限制,参考下面每条指令的详细说明。VCMPV指令是不受元素屏蔽的影响,因其工作于元素屏蔽情况。表E.5列出算术类指令。表E.5:算术类
    助记符     说明
    VASR 算术右移
    VADD
    VAVG 平均
    VSUB
    VASUB 减绝对值
    VMUL
    VMULA 累加器乘
    VMULAF 乘累加器小数
    VMULF 乘小数
    VMULFR 乘小数和并舍入
    VMULL 乘低位
    VMAD 乘和加
    VMADL 乘和加低位
    VADAC 加和累加
    助记符     说明
    VADACL 加和累加低位
    VMAC 乘和累加
    VMACF 乘和累加小数
    VMACL 乘和累加低位
    VMAS 乘和从累加器减
    VMASF 乘和从累加器小数减
    VMASL 乘和从累加器低位减
    VSATU 饱和到上限
    VSATL 饱和到下限
    VSUBS 减标量和置条件
    VCMPV 比较向量和置屏蔽
    VDIV1 除初始化
    VDIVS
    VASL 算术右移
    VASA 累加器算术移一位
MPEG指令是专门适合于MPEG编码和解码的一类指令,但可以以不同的方式使用。MPEG指令不支持int8、int9、int16和int32数据类型,并受元素屏蔽的影响。表E.6列出了MPEG指令。表E.6:MPEG类
    助记符     说明
    VAAS3 加和加(-1,0,1)符号
    VASS3 加和减(-1,0,1)符号
    VEXTSGN2 抽取(-1,1)符号
    VEXTSGN3 抽取(-1,0,1)符号
    VXORALL 异或全部元素的最低有效位。
每种数据类型转换指令支持特定的数据类型,并且不受元素屏蔽的影响,因为此结构不支持寄存器中多于一种的数据类型。表E.7列出了数据类型转换指令。表E.7:数据类型转换类
    助记符     说明
    VCVTIF 转换整数到浮点数
    VCVTFF 转换浮点到定点数
    VROUND 舍入浮点到整数(支持4个IEEE舍入模式)
    VCNTLZ 计数前导0
    VCVTB9 转换字节9数据类型
内部元素算术类指令支持int8、int9、int16和int32和浮点数据类型。表E.8列出了内部元素算术类指令。表E.8:内部元素算术类
    助记符     说明
    VADDH 两相邻元素加
    VAVGH 两相邻元素平均
    VAVGQ 四元素平均
    VMAXE 最大交换奇/偶元素
元素间转移类指令支持字节、字节9、半字和字数据长度,表E.9列出了元素间转移类指令。表E.9:元素间转移类
    助记符     说明
    VESL 元素左移一位
    VESR 元素右移一位
    VSHFL 偶/奇元素混洗
    VSHFL 偶/奇元素混洗
    VSHFLH 高偶/奇元素混洗
    VSHFLL 低偶/奇元素混洗
    VUNSHFL 偶/奇元素去混洗
    VUNSHFLH 高偶/奇元素去混洗
    VUNSHFLL 低偶/奇元素去混洗
加载/存储指令除支持字节、半字和字数据长度外还特别支持字节9有关的数据长度操作,并受元素屏蔽的影响。表E.10列出了加载/存储类指令。表E.10:加载/存储类
    助记符     说明
    VL 加载
    VLD 加载双字
    VLQ 加载四字
    VLCB 从环形缓存器加载
    VLR 逆元素序列加载
    VLWS 跨距加载
    VST 存储
    VSTD 存储双字
    VSTQ 存储四字
    VSTCB 存储到环形缓存器
    VSTR 逆元素序列存储
    VSTWS 跨距存储
大多数寄存器转移指令支持int8、int9、int16和int32和浮点数类型,并不受元素屏蔽的影响,只有VCMOVM指令是受元素屏蔽的影响。表E.11列出寄存器转移类指令。表E.11:寄存器转移类
    助记符     说明
    VLI 立即数加载
    VMOV 转移
    VCMOV 条件转移
    VCMOVM 带元素屏蔽的条件转移
    VEXTRT 抽取一元素
    VINSERT 插入一元素
表E.12列出控制高速缓存子系统130的高速缓冲操作类指令。表E.12:高速缓存操作类
    助记符     说明
    VCACHE 对数据或指令高速缓存的高速缓存操作
    VPFTCH 预取到数据高速缓存
    VWBACK 从数据高速缓存回写
指令说明述语
为简化指令集的说明,在整个附录中采用了专门的术语。例如,指令操作数是字节、字节9、半字或字长度的带符号2的补码的整型数,除非另行注释。术语“寄存器”用于指通用(标量或向量)寄存器,其它类型的寄存器被清楚地说明。按汇编语言句法,尾标b、b9、h和w表示数据长度(字节、字节9、半字和字)以及整型数据类型(int8、int9、int16和int32)。另外,用于描述指令操作数、操作、以及汇编语言句法的术语和符号如下。Rd            目的寄存器(向量、标量或专用)Ra,Rb        源寄存器a和b(向量、标量或专用)Rc            源或目的寄存器c(向量或标量)Rs            存储数据源寄存器(向量或标量)S             32-bit标量或专用寄存器VR            当前组向量寄存器VRA           替代组向量寄存器VR0           0组向量寄存器VR1           1组向量寄存器VRd           向量目的寄存器(缺省为当前组,除非VRA被指定)VRa,VRb      向量源寄存器a和bVRC           向量源或目的寄存器CVRS           向量存储数据源寄存器VAC0H         向量累加器寄存器0高VAC0L         向量累加器寄存器0低VAC1H         向量累加器寄存器1高VAC1L         向量累加器寄存器1低SRd           标量目的寄存器SRa,SRb      标量源寄存器a和bSRb+        以有效地址更新基址寄存器SRs         标量存储数据源寄存器SP          专用寄存器VR[i]       向量寄存器VR中的第i个元素VR[i]<a:b> 向量寄存器VR中第i个元素的a到b位VR[i]<msb>  向量寄存器VR中第i元素的最高有效位EA          存储器访问的有效地址MEM         存储器BYTE[EA]    存储器地址EA中的一个字节HALF[EA]    存储器地址EA中的半个字,地址EA+1为位<15:8>。WORD[EA]    存储器地址EA中的一个字,地址EA+3为位<31:24>。NumElem     为给出数据类型而指明的元素数目。在VEC32模式,对字
        节和字节9、半字或字数据长度分别为32、16或8;在
        VEC64模式,对字节和字节9、半字或字数据长度分别为
        64、32或16。对标量操作NumElem是0。EMASK[i]    表示对第i元素的元素屏蔽。对字节和字节9、半字或字数
        据长度,在VGMR0/1、-VGMR0/1、VMMR0/1或~
        VMMR0/1中分别代表1、2或4个位。为标量操作,即使
        EMASK[i]=0,也认为元素屏蔽被设置。MMASK[i]    表示对第i元素的元素屏蔽。在字节和字节9、半字或字数
        据长度,在VMMR0或VMMR1中分别代表1、2或4个
        位。VCSR        向量控制和状态寄存器VCSR<x>     表示VCSR中一个位或多个位。“x”是字段名VPC         向量处理器程序计数器VECSIZE     向量寄存器长度,在VEC32模式是32,在VEC64模式是
        64。SPAD        暂存器
        C编程结构用于描述流控操作。异常部分注明如下:=          赋值:          连接{X‖Y}        X或Y之间选择(不是逻辑或)sex           对指定的数据长度的符号扩展sex_dp        对指定的数据长度双精度数符号扩展sign》        (算术)右移符号扩展zex           对指定的数据长度的零扩展zero》        (逻辑)右移零扩展《            左移(填入零)trnc7         截去前面的7位(从半字)trnc1         截去前面的1位(从字节9)%            取模操作|expression|取表达式的绝对值/             除(对于浮点数据类型采用四种IEEE舍入模式之一)//            除(采用零舍入模式的舍入)Saturate()    对整数类型饱和到最大负值或最大正值,不产生溢出;对
          于浮点数据类型,饱和可到正无穷大、正零、负零、或负
          或无穷大。
通用指令格式显示在图8中并说明如下。REAR格式由load、store和cache操作指令使用,而REAR格式中的字段具有下面表E.13给出的意义。表E.13:REAR格式
    字段     意义
OPC<4:0> 操作码
    B Rn寄存器的组标识符
    D 目的/源标量寄存器。当设置时,Rn<4:0>指出标量寄存器。在VEC32模式下,对B:D编码的合法值是:00 Rn是当前组的向量寄存器01 Rn是标量寄存器(在当前组中)10 Rn是在替代组中的向量寄存器11未定义
在VEC64模式下,对B:D编码的合法值是:00在向量寄存器Rn中只有4、8、16或32个字节被使用01 Rn是标量寄存器10 向量寄存器Rn的全部64个字节被使用11 未定义
TT<1:0> 传送类型,指示具体的加载或存储操作。见下面的LT和ST编码表。
C 高速缓存关闭。设置该位以旁路加载时的数据高速缓存。这个位用加载和存储指令的cache-off助记符设置(连接OFF到助记符)
A 地址更新,设置此位用有效地址更新SRb。有效地址按SRb+SRi计算。
Rn<4:0> 目的/源寄存器号
SRb<4:0> 标量基址寄存器号
SRi<4:0> 标量变址寄存器号
位17:15被保留且应为零,以确保结构将来要扩展的兼容性。B:D和TT字段的某些编码未定义,编程者不应使用这些编码,因为结构没有规定当这样一种编码被使用的预期结果。表E.14示出VEC32和VEC64模式都支持的标量加载操作(在TT字段作为LT被编码)。表E.14  在VEC32和VEC64模式下REAR加载操作
  D:LT   助记符     意义
    1 00     .bs9 加载8位成为字节9长度,符号扩展
    1 01     .h 加载16位成为半字长度
    1 10     .bz9 加载8位成为字节9长度,零扩展
    1 11     .w 加载32位成为字长度
表E.15显示VEC32模式支持的向量加载操作(在TT字段作为LT被编码),这时VCSR<0>位被清除。表E.15:VEC32模式下REAR加载操作
    D:LT   助记符     意义
    0 00     .4 从存储器加载4个字节进入寄存器较低的4个字节9,并保持剩下的字节9不改变。4个字节9的每个第9位根据相应的第8位作符号扩展。
    0 01     .8 从存储器加载8个字节进入寄存器较低的8个字节9,并保持剩下的字节9不改变。8个字节9的每个第9位根据相应的第8位作符号扩展。
    0 10     .16 从存储器加载16个字节进入寄存器较低的16个字节9,并保持剩下的字节9不改变。16个字节9的每个第9位根据相应的第8位作符号扩展。
    0 11     .32 从存储器加载32个字节进入寄存器较低的32个字节9,并保持剩下的字节9不改变。32个字节9的每个第9位根据相应的第8位作符号扩展。
B位用于指示当前或替代组。
表E.16给出VEC64模式下支持的向量加载操作(在TT字段作为LT被编码)。此时VCSR<0>位被设置。表E.16:VEC32模式下REAR的加载操作
B:D:LT 助记符     意义
    0 0 00     .4 从存储器加载4个字节进入寄存器较低的4个字节9,并保持剩下的字节9不改变。4个字节9的每个第9位,根据相应的第8位作符号扩展。
    0 0 01     .8 从存储器加载8个字节进入寄存器较低的8个字节9,并保持剩下的字节9不改变。8个字节9的每个第9位根据相应的第8位作符号扩展。
    0 0 10     .16 从存储器加载16个字节进入寄存器较低的16个字节9,并保持剩下的字节9不改变。16个字节9的每个第9位根据相应的第8位作符号扩展。
   B:D:LT 助记符     意义
    0 0 11 .32 从存储器加载32个字节进入寄存器较低的32个字节9,并保持剩下的字节9不改变。32个字节9的每个第9位根据相应的第8位作符号扩展。
    1 0 00 未定义
    1 0 01 未定义
    1 0 10 未定义
    1 0 11 .64 从存储器加载64个字节进入寄存器较低的64个字节9,并保持剩下的字节9不改变。64个字节9的每个第9位根据相应的第8位作符号扩展。
位B用于指示64字节向量操作,因为在VEC64模式中不存在当有组和替代组的概念。
表E.17列出了VEC32和VEC64模式均支持的标量存储操作(在TT字段作为ST被编码)。表E.17:REAR的标量存储操作
  D:ST   助记符     意义
    100 .b 存储字节或字节9长度成为8位(从字节9截断1位)
    101 .h 存储半字长度成为16位
    110 未定义
    111 .w 存储字长度成为32位
表E.18列出VEC32模式支持的向量存储操作(在TT字段作为ST被编码),此时VCSR<0>位被清除。表E.18:VEC32模式下REAR的向量存储操作
D:ST 助记符     意义
    0 00 .4 从寄存器存储4个字节到存储器,寄存器中4个字节9的每个第9位被忽略。
    0 01 .8 从寄存器存储8个字节到存储器,寄存器中8个字节9的每个第9位被忽略。
    0 10 .1b 从寄存器存储16个字节到存储器,寄存器中16个字节9的每个第9位被忽略。
    0 11 .32 从寄存器存储32个字节到存储器,寄存器中32个字节9的每个第9位被忽略。
表E.19列出VEC64模式支持的向量存储操作(在TT字段作为ST被编码),这时VCSR<0>位被设置。表E.19:在VEC32模式下REAR向量存储操作
B:D:ST 助记符     意义
0 0 00 .4 从寄存器存储4个字节到存储器,寄存器中4个字节9的每个第9位被忽略。
0 0 01 .8 从寄存器存储8个字节到存储器,寄存器中8个字节9的每个第9位被忽略。
0 0 10 .16 从寄存器存储16个字节到存储器,寄存器中16个字节9的每个第9位被忽略。
0 0 11 .32 从寄存器存储32个字节到存储器,寄存器中32个字节9的每个第9位被忽略。
1 0 00 未定义
1 0 01 未定义
1 0 10 未定义
1 0 11 .64 从寄存器存储64个字节到存储器,寄存器中64个字节9的每个第9位被忽略。
位B用于指出64字节向量操作,因为在VEC64模式中不存在当前组和替代组的概念。REAI格式由加载、存储和高速缓存操作指令使用,表E.20显示了REAI格式下各字段的意义。表E.20:REAI格式
    字段     意义
OPC<4:0>     操作码
    B Rn寄存器的组标识符。当在VEC32模式下设置时,Rn<4:0>表示在替代组中向量寄存器号;当在VEC64模式下设置时,表示全向量(64字节)操作。
    D 目的/源标量寄存器。当设置时,Rn<4:0>表示一标量寄存器。在VEC32模式下B:D编码的合法值是:
00 Rn是当前组的向量寄存器01 Rn是标量寄存器(在当前组中)10 Rn是替代组的向量寄存器11  未定义在VEC64模式下B:D编码的合法值是:00仅在向量寄存器Rn中的4、8、16或32个字节被使用01 Rn是标量寄存器10  向量寄存器Rn中整个64个字节被使用11  未定义
TT<1:0> 传送类型,表示具体的加载或存储操作。见下面的LT和ST编码表。
C 高速缓存关闭,设置该位以旁路加载时的数据高速缓存。这个位用加载和存储指令的Cache-off助记符设置(连接OFF到助记符)。
A 地址更新,设置此位用有效地址更新SRb。有效地址按SRb+IMM<7:0>计算。
Rn<4:0> 目的/源寄存器号
SRb<4:0> 标量基址寄存器号
IMM<7:0> 一个8位的立即数偏移量,按二的补码数字说明。
REAR和REAI格式用于传送类型的相同编码。对进一步的编码细节参看REAR格式。RRRM5格式提供了三个寄存器或二个寄存器及一5位的立即操作数。表E.21定义了RRRM5格式的字段。表E.21:RRRM5格式
    字段     意义
OP<4:0> 操作码
D 目的标量寄存器。当设置时,Rd<4:1>指示标量寄存器;当清除时,Rd<4:0>指示向量寄存器。
S 标量Rb寄存器。当设置时指出Rb<4:0>是标量寄存器;当清除时,Rb<4:0>是向量寄存器。
SD<1:0> 数据宽度,其编码为:00字节(用于int8数据类型)01字节9(用于int9数据类型)10半字(用于int16数据类型)11字(用于int32或浮点数据类型)
M D:S位的修改符,见后面D:S:M编码表。
Rd<4:0> 目标D寄存器号
Ra<4:0> 源A寄存器号
Rb<4:0>或IM5<4:0> 源B寄存器号或5位的立即数,取决于D:S:M编码,5位的立即数看成无符号数。
位19:15保留并且必须为零,以确保将来要扩展的兼容性。
全部向量寄存器的操作数指的是当前组(既可是0组也可是1组)除非另做陈述。表E.22列出当DS<1:0>是00、01或10时的D:S:M编码。表E.22:DS不等于11时RRRM5的D:S:M编码
编码     Rd     Ra  Rb/IM5     注释
    000     VRd     VRa     VRb 三个向量寄存器操作数
    001 未定义
    010     VRd     VRa     SRb B操作数是标量寄存器
    011     VRd     VRa     IM5 B操作数是5位的立即数
    100 未定义
    101 未定义
    110     SRd     SRa     SRb 三个标量寄存器操作数
    111     SRd     SRa     IM5 B操作数是5位的立即数
当DS<1:0>是11时D:S:M编码具有下面的意义:表E.23:DS等于11时,RRRM5的D:S:M编码
  D:S:M     Rd     Ra  Rb/IM5     注释
    000     VRd     VRa     VRb 三个向量寄存器操作数(int32)
    001     VRd     VRa     VRb 三个向量寄存器操作数(float)
    010     VRd     VRa     SRb B操作数是一标量寄存器(int32)
    011     VRd     VRa     IM5 B操作数是5位的立即数(int32)
    100     VRd     VRa     SRb B操作数是一标量寄存器(float)
    101     SRb     SRa     SRb 三个标量寄存器操作数(float)
    110     SRd     SRa     SRb 三个标量寄存器操作数(int32)
    111     SRd     SRa     IM5 B操作数是5位的立即数(int32)
RRRR格式提供四种寄存器操作数,表E.24显示了RRRR格式下的字段。表E.24:RRRR格式
    字段     意义
    Op<4:0> 操作码
    S 标量Rb寄存器。当设置时指出Rb<4:0>是一标量寄存器;当清除时,Rb<4:0>是一向量寄存器。
    DS<1:0> 数据长度,其编码为:00字节(用于int8数据类型)01字节9(用于int9数据类型)10半字(用于int16数据类型)11字(用于int32数据类型)
    Rc<4:0> 源/目的C寄存器号
    Rd<4:0> 目的D寄存器号
    Ra<4:0> 源A寄存器号
    Rb<4:0> 源B寄存器号
全部向量寄存器操作数指的是当前组(既可以是0组也可以是1组),除非另做陈述。RI 格式仅由加载立即数指令使用。表E.25指明RI格式下的字段。表E.25:RI格式
    字段     意义
D 目的标量寄存器。当设置时,Rd<4:0>表示一标量寄存器;当清除时,Rd<4:0>表示当前组中一向量寄存器。
F 浮点数据类型  当设置时表明为浮点数据类型,并且要求DS<1:0>为11。
DS<1:0> 数据长度,其编码为:00字节(用于int8数据类型)01字节9(用于int9数据类型)10半字(用于int16数据类型)
11字(用于int32或浮点数据类型)
  Rd<4:0> 目的D寄存器号
  IMM<18:0> 一19位的立即数值
字段F:DS<1:0>的某些编码未定义。编程者应不用这些编码,因为此结构没有给定当使用这种编码时的预期后果。加载进入Rd的值取决于数据的类型,如表E.26所示。表E.26:RI格式下的加载值
    格式     数据类型     寄存器操作数
    .b     字节(8位) Rd<7:0>:=Imm<7:0>
    .b9     字节(9位) Rd<8:0>:=Imm<8:0>
    .h     半字(16位) Rd<15:0>:=Imm<15:0>
    .w     字(32位) Rd<31:0>:=符号扩展的IMM<18:0>
    .f     浮点(32位) Rd<31>:=Imm<18>(符号)Rd<30:23>:=Imm<17:0>(指数)Rd<22:13>:=Imm<9:0>(尾数)Rd<12:0>:=0
CT格式包含的字段示于表E.27。表E.27:CT格式
    字段     意义
Opc<3:0> 操作码
Cond<2:0> 转移条件:000无条件001小于010等于011小于或等于100大于101不等于110大于或等于111溢出
IMM<22:0> 23位的立即数字偏移量,按二的补码数说明。
转移条件使用VCSR[GT:EQ:LT]字段。溢出条件使用VCSR[SO]位,当设置时,它优先于GT、EQ和LT位。VCCS和VCBARR则以不同于以上所说的来解释Cond<2:0>字段,参考它的指令说明细节。
RRRM9格式指明三个寄存器或二个寄存器及一9位的立即操作数。表E.28给出RRRM9格式的字段。表E.28:RRRM9格式
    字段     意义
Opc<5:0> 操作码
D 目的标量寄存器。当设置时,Rd<4:0>表示一标量寄存器;当清除时,Rd<4:0>表示一向量寄存器。
S 标量Rb寄存器。当设置时指示Rb<4:0>是一标量寄存器;当清除时,Rb<4:0>是一向量寄存器。
DS<1:0> 数据宽度,其编码为:00字节(用于int8数据类型)01字节9(用于int9数据类型)10半字(用于int16数据类型)
11字(用于int32或浮点数据类型)
M 对D:S位的修改符,见后面的D:S:M编码表。
Rd<4:0> 目的寄存器号
Ra<4:0> 源A寄存器号
Rb<4:0>或IM5<4:0> 源B寄存器号或一5位立即数,取决于D:S:M编码。
IM9<3:0> 与IM5<4:0>一起提供一9位立即数,取决于D:S:M编码。
位19:15位被保留,当D:S:M编码没有指定一立即操作数,而且必须为0以确保将来的兼容性。
全部向量寄存器操作数指的是当前组(既可是0组也可以是1组)除非另做陈述。D:S:M编码同RRRM5格式的表E.22和E.23所示的那些是相同的,除了根据DS<1:0>编码从立即数字段抽取的立即数外,见表E.29所示。表E.29:RRRM9格式的立即数值
DS 匹配的数据类型 B操作数
00     int8 Source B<7:0>:=IM9<2:0>:IM5<4:0>
01     int9 Source B<8:0>:=IM9<3:0>:IM5<4:0>
10     int16 Source B<15:0>:=sex(IM9<3:0>:IM5<4:0>)
11     int32 Source B<31:0>:=sex(IM9<3:0>:IM5<4:0>)
浮点数据类型不能得到立即数格式。
下面是按字母数字排列的MSP向量指令。注意:1.除非另外注明,指令是受元素屏蔽的影响。CT格式指令不受元素屏蔽影响。由加载、存储和高速缓存指令组成的REAR和REAI格式指令也不受元素屏蔽影响。2.浮点数据类型下不能得到9位的立即操作数。3.在操作说明中只给出了向量形式。对标量操作,假定只有一个,即第0个元素被定义。4.对RRRM5和RRRM9格式,下面的编码用于整型数据类型(b、b9、h、w):
D:S:M   000   010   011     110   111
DS   00   01   10     11
5.对RRRM5和RRRM9格式,下面的编码用于浮点数据类型:
D:S:M  001  100  n/a  101  n/a
DS     11
6.对于全部可能引起溢出的指令,当VCSR<ISAT>位被设置时,饱和到int8、int9、int16、int32的最大或最小限制被采用。相应地,当VCSR<FSAT>位设置时,浮点结果饱和到-无穷大、-0、+0或+无穷大。7.按句法规则,.n可以用来代替b9以表示字节9数据长度。8.对全部指令,返回到目的寄存器或到向量累加器的浮点结果是IEEE754单精度格式。浮点结果写到累加器的较低部分,高位部分不改变。VAAS3   加和附加(-1,0,1)符号格式汇编器句法
VAAS3.dt  VRd,VRa,VRb
VAAS3.dt  VRd,VRa,SRb
VAAS3.dt  SRd,SRa,SRb
其中dt={b,b9,h,w}。支持的模式
D:S:M   V<-V@V   V<-V@S   S<-S@S
  DS     int8(b)     int9(b9)   int16(h)     int32(w)
说明
向量/标量寄存器Ra的内容被加到Rb以产生一中间结果,该中间结果再附加上Ra的符号;并且最终结果存储在向量/标量寄存器Rd中。操作
      fot(i=0;i<NumElem && EMASK[i];i++){
         if(Ra[i]>0)      extsgn3=1;
         else if(Ra[i]<0) extsgn3=-1;
         else              extsgn3=0;
         Rd[i]=Ra[i]+Rb[i]+extsgn3;
      }异常
溢出。VADAC   加和累加格式
Figure A9711740400771
汇编器句法
VADAC.dt  VRc,VRd,VRa,VRb
VADAC.dt  SRc,SRd,SRa,SRb
其中dt={b,b9,h,w}。支持的模式
    S     VR     SR
    DS     int8(b)     int9(b9)     int16(h)   int32(w)
说明
将Ra和Rb操作数的每个元素与向量累加器的每个双精度元素相加,将每个元素的双精度和存储到向量累加器和目的寄存器Ra及Rd。Ra和Rb使用指定的数据类型,而VAC使用合适的双精度数据类型(16、18、32和64位分别对应int8、int9、int16和int32)。每个双精度元素的高位存储在VACH和Rc。如果Rc=Rd;Rc中的结果未定义。操作
for(i=0):i<NumElem && EMASK[i]:i++){
    Aop[i]={VRa[i]‖SRa};
    Bop[i]={VRb[i]‖SRb};
    VACH[i]:VACL[i)=sex(Aop[i]+Bop[i])+ VACH[i}:VACL[i];
    Rc[i]=VACH[i];
    Rd[i]=VACL[i];
}VADACL  加和累加低位格式汇编器句法
VADACL.dt  VRd,VRa,VRb
VADACL.dt  VRd,VRa,SRb
VADACL.dt  VRd,VRa,# IMM
VADACL.dt  SRd,SRa,SRb
VADACL.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS     int8(b)     int9(b9)     int16(h)     int32(w)
说明
将Ra和Rb/立即操作数的每个元素与向量累加器的每个扩展精度元素相加,将扩展精度的和存入向量累加器;将较低精度返回到目的寄存器Rd。Ra和Rb/立即数使用指定的数据类型,而VAC用适当的双精度数据类型(16、18、32和64位分别对应int8、int9、int16和int32)。每个扩展精度元素的高位存储在VACH中。操作
for(i=0:i<NumElem && EMASK[i];i++){
   Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
   VACH[i]:VACL[i]=sex(Ra[i]+Bop[i])+VACH[i]:VACL[i];
   Rd[i]=VACL[i]
}VADD  加格式汇编器句法
VADD.dt  VRd,VRa,VRb
VADD.dt  VRd,VRa,SRb
VADD.dt  VRd,VRa,# IMM
VADD.dt  SRd,SRa,SRb
VADD.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w,f}。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S    S<-S@I
  DS   int8(b)   int9(b9)   int16(h)   int32(w)     float(f)
说明
加Ra及Rb/立即操作数,并将其和返回到目的寄存器Rd。操作
   for(i=0;i<NumElem && EMASK[i];i++){
       Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
       Rd[i]=Ra[i]+Bop[i];
   }异常
溢出,浮点无效操作数。VADDH  加两个相邻元素格式
Figure A9711740400801
汇编器句法
VADDH.dt  VRd,VRa,VRb
VADDH.dt  VRd,VRa,SRb
其中dt={b,b9,h,w,f}。支持的模式
D:S:M  V<-V@V  V<-V@S
 DS   int8(b)  int9(b9)     int16(h)     int32(w)     float(f)
说明操作
for(i=0;i<NumElem-1,1++){
    Rd[i]=Ra[i]+Ra[i+1];
}
Rd[NumElem-1]=Ra[NumElem-1]+{VRb[0]‖SRb};异常
溢出、浮点无效操作数。编程注解
本指令不受元素屏蔽影响。VAND  与格式
Figure A9711740400811
汇编器句法
VAND.dt  VRd,VRa,VRb
VAND.dt  VRd,VRa,SRb
VAND.dt  VRd,VRa,# IMM
VAND.dt  SRd,SRa,SRb
VAND.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定相同的操作。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
对Ra和Rb/立即操作数进行逻辑与,并将结果返回到目的寄存器Rd。操作
for(i=0;i<NumElem && EMASK[i];i++){
   Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
   Rd[i]<k>=Ra[i]<k>& Bop[i]<k>,k=for all bits in element i;
}异常
无。VANDC  与补码格式
Figure A9711740400821
汇编器句法
VANDC.dt  VRd,VRa,VRb
VANDC.dt  VRd,VRa,SRb
VANDC.dt  VRd,VRa,# IMM
VANDC.dt  SRd,SRa,SRb
VANDC.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定同样的操作。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
对Ra和Rb/立即操作数的补码进行逻辑与,并将结果返回到目的寄存器Rd。操作
for(i=0;i<NumElem && EMASK[i];i++){
   Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
   Rd[i]<k>=Ra[i]<k>&-Bop[i]<k>,k=for all bits in element i;
}异常
无。VASA  累加器算术移位格式汇编器句法
VASAL.dt
VASAR.dt
其中dt={b,b9,h,w},而R指出向左或向右移位方向。支持的模式
    R     left     right
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
向量累加器寄存器的每个数据元素左移一位的位置,且从右端以零填充(若R=0),或者带符号扩展右移一位的位置(若R=1)。其结果存储在向量累加器中。操作
for(i=0;i<NumElem && EMASK[i];i++){
    if(R=1)
        VAC0H[i]:VAC0L[i]=VAC0H[i]:VAC0L[i]sign>>1;
    else
        VAC0H[i]:VAC0L[i]=VAC0H[i]:VAC0L[i]<<1;
}异常
溢出。VASL  算术左移格式
Figure A9711740400841
汇编器句法
VASL.dt  VRd,VRa,SRb
VASL.dt  VRd,VRa,# IMM
VASL.dt  SRd,SRa,SRb
VASL.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式
D:S:M   V<-V@S   V<-V@I   S<-S@S   S<-S@
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
向量/标量寄存器Ra的每个数据元素左移,从右端以零填充,移位量由标量寄存器Rb或IMM字段给出,其结果存放在向量/标量寄存器Rd中。对引起溢出的那些元素,其结果根据其符号包含和到最大正值或最大负值。移位量定义为无符号整数。操作
shift_amount={SRb%32‖MM<4:0>};
for(i=0;i<NumElem && EMASK[i];i++){
    Rd[i]=saturate(Ra[i]<<shift_amount);
}异常
无。编程注解
注意shift_amount是从SRb或IMM<4:0>取得的5位数。对byte,byte9,halfword数据类型,编程者负责正确指定移位量,此移位量小于或等于数据长度的位数。如果移位量大于指定的数据长度,元素将由零来填充。VASR  算术右移格式
Figure A9711740400851
汇编器句法
VASR.dt  VRd,VRa,SRb
VASR.dt  VRd,VRa,# IMM
VASR.dt  SRd,SRa,SRb
VASR.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式
D:S:M   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS     int8(b)     int9(b9)     int16(h)     int32(w)
说明
向量/标量寄存器Ra的每个数据元素被算术右移,最高有效位位置有符号扩展,移位量在标量寄存器Rb或IMM字段的最低有效位中给出,其结果存储在向量/标量寄存器Rd中。移位量规定为无符号整数。操作
shift_amount={SRb%32‖IMM<4:0>};
for(i=0;i<NumElem && EMASK[i};i++){
    Rd[i]=Ra[i] sign>>shift_amount;
}异常
无。编程注解
注意shift_amount是从SRb或IMM<4:0>取得的5位数。对于byte,byte9,halfword数据类型,编程者负责正确地指定移位量,此移位量小于或等于数据长度的位数。如果移位量大于指定的数据长度,元素将由符号位填充。VASS3  加及减(-1,0,1)符号格式
Figure A9711740400861
汇编器句法
VASS3.dt  VRd,VRa,VRb
VASS3.dt  VRd,VRa,SRb
VASS3.dt  SRd,SRa,SRb
其中dt={b,b9,h,w}。支持的模式
D:S:M   V<-V@V   V<-V@S   S<-S@S
  DS   int8(b)   int9(b9)  int16(h)   int32(w)
说明
向量/标量寄存器Ra的内容被加到Rb以产生一中间结果,然后将Ra的符号从此中间结果中去掉;最终结果存储在向量/标量寄存器Rd中。操作
for(i=0:i<NumElem && EMASK[i];i++){
    if(Ra[i]>0)      extsgn3=1;
    else if(Ra[i]<0) extsgn3=-1;
    else              extsgn3=0;
    Rd[i]=Ra[i]+Rb[i]-extsgn3;
}异常
溢出。VASUB  减操作的绝对值格式
Figure A9711740400871
汇编器句法
VASUB.dt  VRd,VRa,VRb
VASUB.dt  VRd,VRa,SRb
VASUB.dt  VRd,VRa,# IMM
VASUB.dt  SRd,SRa,SRb
VASUB.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w},支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int9(b9)   int16(h)   int32(w)   float(f)
说明
向量/标量寄存器Rb或IMM字段的内容从向量/标量寄存器Ra的内容中减去,其绝对值结果存储在向量/标量寄存器Rd中。操作
for(i=0;i<NumElem && EMASK[i];i++){
    Bop[i]={Rb[i]‖SRb‖sex(IMM<8:0>)};
    Rd[i]=1Ra[i]-Bop[i]t;
}异常
溢出,浮点无效操作数。编程注解
如果减的结果是最大负数,则在绝对值操作后将发生溢出,如果允许饱和模式,此取绝对值操作的结果将是最大正数。VAVG  两元素平均格式
Figure A9711740400881
汇编器句法
VAVG.dt  VRd,VRa,VRb
VAVG.dt  VRd,VRa,SRb
VAVG.dt  SRd,SRa,SRb
其中dt={b,b9,h,w,f}。对整型数据类型使用VAVGT以指定“截断”舍入模式。支持的模式
D:S:M     V<-V@V     V<-V@S    S<-S@S
  DS     int8(b)     int9(b9)   int16(h)   int32(w)   float(f)
说明
向量/标量寄存器Ra的内容加到向量/标量寄存器Rb的内容上以产生一中间结果;接着中间结果被2除,并将最终结果存储在向量/标量寄存器Rd中。对整型数据类型,如果T=1舍入模式是截断,而如果T=0(缺省),则舍去零。对浮点数据类型,舍入模式由VCSR<RMODE>指定。操作
for(i=0;i<NumElem && EMAS[i];i++){
    Bop[i]={Rb[i]‖SRb‖sex(IMM<8:0>)};
    Rd[i]=(Ra[i]+Bop[i]}//2:
}异常
无。VAVGH  两相邻元素平均格式
Figure A9711740400891
汇编器句法
VAVGH.dt  VRd,VRa,VRb
VAVGH.dt  VRd,VRa,SRb
其中dt={b,b9,h,w,f}。对整型数据类型使用VAVGHT以指定“截断”舍入模式。支持的模式
D:S:M  V<-V@V  V<-V@S
  DS  int8(b)  int9(b9)  int16(h)   int32(w)     float(f)
说明
对于每个元素,平均两个相邻元素对。对整型数据类型,如果T=1,舍入模式是截断,而对T=0(缺省)则是舍去零。对浮点数据类型,舍入模式由VCSR<RMODE>指定。
Figure A9711740400892
操作
for(i=0;i<NumElem-1,1++){
    Rd[i]=(Ra[i]+Ra[i+1])//2;
}
Rd[NumElem-1]=(Ra[NumElem-1]+{VRb[0]‖SRb1}//2异常
无。编程注解
此指令不受元素屏蔽影响。VAVGQ  四平均格式
Figure A9711740400901
汇编器句法
VAVGQ.dt  VRd,VRa,VRb
其中dt={b,b9,h,w}。对整型数据类型使用VAVGQT以指示“截断”舍入模式。支持的模式
D:S:M     V<-V@V
  DS     int8(b)     int9(b9)     int16(h)     int32(w)
说明
在VEC64模式下不支持本指令。
如下图所示,采用由T指定的截断模式(1为截断,0为舍去零,缺省)来计算4个元素的平均。注意最左边的元素(Dn1)未定义。
Figure A9711740400902
操作
for(i=0;i<NumElem-1,1++){
    Rd[i]=(Ra[i]+Rb[i]+Ra[i+1]+Rb[i+1])//4;
}异常
无。VCACHE  Cache操作格式汇编器句法
VCACHE.fc SRd,SRi
VCACHE.fc SRb,# IMM
VCACHE.fc SRb+,SRi
VCACHE.fc SRb+,# IMM
其中fc={0,1}。说明
本指令供向量数据Cache的软件管理使用。当数据Cache的部分或全部被象暂时存储器那样配置,此指令对暂时存储器无影响。
支持下列选项:
FC<2:0>     意义
    000 回写并使其标签与EA匹配的改动过的Cache行无效。如果匹配行包含未改动过的数据,则使此行无效而不回写。如果发现没有Cache行包含EA,则数据Cache保留不被触动。
    001 回写并使由EA的索引指定的改动过的Cache行无效。如果匹配行包含未改动过的数据,使此行无效而不回写。
    其它 未定义
操作异常
无。编程注解
比指令不受元素屏蔽影响。VCAND  补码与格式
Figure A9711740400921
汇编器句法
VCAND.dt  VRd,VRa,VRb
VCAND.dt  VRd,VRa,SRb
VCAND.dt  VRd,VRa,# IMM
VCAND.dt  SRd,SRa,SRb
VCAND.dt  SRd,SRa,# IMM
其中dt=(b,b9,h,w)。注意.w和.f指明同样操作。支持的模式
D:S:M  V<-V@V  V<-V@S  V<-V@I  S<-S@S  S<-S@I
 DS  int8(b)  int9(b9)  int16(h)  int32(w)
说明
对Ra和Rb/立即操作数的补码进行逻辑与,并将其结果返回到目的寄存器Rd。操作
for(i=0;i<NumElem && EMASK[i];i++){
    Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
    Rd[i]<k>=-Ra[i]<k>&Bop[i]<k>,k=for all bits in element i.
}异常
无。VCBARR  条件屏障格式汇编器句法
VCBARR.cond
其中cond={0-7}。每个条件将在后面给出助记符。说明
只要此条件保持有效,拖延本指令以及全部后面的指令(出现在程序序列后面的那些)。Cond<2:0>字段的解释不同于在CT格式下的其它条件指令。
当前定义下列条件:
Cond<2:0>     意义
    000 在执行较后的任何指令之前,等待全部早先的指令(程序序列中较早出现的)以结束执行。
    其它 未定义
操作
while(Cond=true)
 stall all later instructoins;异常
无。编程注解
此指令为软件而提供以强制指令的连串执行。此指令可被用于强迫精确报告不明确的异常事件。例如,如果该指令被立即用在可引起异常事件的算术指令以后,则此异常事件将以对该指令寻址的程序计数器报告。VCBR  条件转移格式
Figure A9711740400941
汇编器句法
VCBR.cond  # Offset
其中cond={un,lt,eq,le,gt,ne,ge,ov}。说明
如果Cond为真,则转移,这不是延迟转移。操作
If((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un))
    VPC=VPC+sex(Offset<22:0>*4);
elseVPC=VPC+4,异常
无效的指令地址。VCBRI  间接条件转移格式
Figure A9711740400951
汇编器句法
VCBRI.cond  SRb
其中cond={un,lt,eq,le,gt,ne,ge,ov}。说明
如果Cond为真,则间接转移。这不是延迟转移。操作
If((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un))
    VPC=SRb<31:2>:b’00;
elseVPC=VPC+4;异常
无效的指令地址。VCCS   条件现场转换格式
Figure A9711740400961
汇编器句法
VCCS  # Offset说明
如果VIMSK<cse>为真,则跳转到现场转换子程序。这不是延迟转移。
如果VIMSK<cse>为真,则将VPC+4(返回地址)保存到返回地址堆栈。如果非真,从VPC+4继续执行。操作
<pre listing-type="program-listing"><![CDATA[   If(VIMSK<cse>=1){    if(VSP<4>>15){    VISRC<RASO>=1;    signal ARM7 with RASO exception;    VP_STATE=VP_IDLE;    } else {    RSTACK[VSP<3:0>]=VPC+4;    VSP<4:0>=VSP<4:0>+1;    VPC=VPC+sex(Offset<22:0>*4);    }   } eise VPC=VPC+4; ]]></pre>
异常
返回地址堆栈溢出。VCHGCR  改变控制寄存器格式汇编器句法
VCHGCR  Mode说明
此指令改变向量处理器的操作模式
Mode中每位指定如下:
  方式     意义
  bit1:0 这两位控制VCSR<CBANK>位。编码指定:00-不改变01-清除VCSR<CBANK>位10-设置VCSR<CBANK>位11-触发VCSR<CBANK>位
  bits3:2 这两位控制VCSR<SMM>位。编码指定:00-不改变01-清除VCSR<SMM>位10-设置VCSR<SMM>位11-触发VCSR<SMM>位
  bit5:4 这两位控制VCSR<CEM>位。编码指定:00-不改变01-清除VCSR<CEM>位10-设置VCSR<CEM>位11-触发VCSR<CEM>位
  其它 未定义
操作异常
无。编程注解
本指令为硬件提供,以比VMOV指令更为有效的方式改变VCSR中的控制位。VCINT  条件中断ARM7格式
Figure A9711740400981
汇编器句法
VCINT.cond  # ICODE
其中cond={un,lt,eq  le,gt,ne,ge,ov }。说明
如果Cond为真,当允许时,停止执行并中断ARM7。操作
  If((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un)){

      VISRC<vip>=1;

      VIINS=[VCINT.cond #ICODE instruction];

      VEPC=VPC;

      if(VIMSK<vie>=1)signal ARM7 interrupt,

      VP_STATE=VP_IDLE;

  }

  else VPC=VPC+4;
异常
VCINT中断。VCJOIN  用ARM7任务条件连接格式
Figure A9711740400991
汇编器句法
VCJOIN.cond  # Offset
其中cond={un,lt,eq,le,gt,ne,ge,ov}。说明
如果Cond为真,当允许时,停止执行并中断ARM7。操作
  If((Cond=VCSR[SO.GT.EQ.LT])|(Cond=un)){

      VISRC<vjp>=1;

      VIINS=[VCJOIN.cond #Offset instruction];

      VEPC=VPC;

      if(VIMSK<vje>=1)signal ARM7 interrupt;

      VP_STATE=VP_IDLE;

  }

  else VPC=VPC+4;
异常
VCJOIN中断。VCJSR  条件跳转到子程序格式
Figure A9711740401001
汇编器句法
VCJSR.cond  # Offset
其中cond={un,lt,eq,le,gt,ne,ge,ov}。说明
如果Cond为真,则跳转到子程序。这不是延迟转移。
如果Cond为真,将VPC+4(返回地址)保存到返回地址堆栈。如果非真,则从VPC+4继续执行。操作
  If((Cond=VCSR[SO.GT.EQ.LT])|(Cond=un)){

     if(VSP<4>>15){

         VISRC<RASO>=1

         signal ARM7 with RASO exception;

         VP_STATE=VP_IDLE;

     }else{

         RSTACK[VSP<3:0>]=VPC+4;

         VSP<4:0>=VSP<4:0>+1;

         VPC=VPC+sex(Offset<22:0>*4);

     }

  }else VPC=VPC+4;
异常
返回地址堆栈溢出。VCJSRI  间接条件跳转到子程序格式
Figure A9711740401011
汇编器句法
VCJSRI.cond  SRb
其中cond={un,lt,eq,le,gt,ne,ge,ov}。说明
如果Cond为真,则间接跳转到子程序。这不是延迟转移。
如果Cond为真,则将VPC+4(返回地址)保存到返回地址堆栈。如果非真,从VPC+4继续执行。操作
  If((Cond=VCSR[SO.GT.EQ.LT])|(Cond=un)){

     if(VSP<4:0>15){

         VISRC<RASO>=1;

         signal ARM7 with RASO exception;

         VP_STATE=VP_IDLE;

     }else{

         RSTACK[VSP<3:0>]=VPC+4;

         VSP<4:0>=VSP<4:0>+1

         VPC=SRb<31:2>b’00

     }
  }else VPC=VPC+4
异常
返回地址堆栈溢出。VCMOV  条件转移格式汇编器句法
VCMOV.dt  Rd,Rb,cond
VCMOV.dt  Rd,# IMM,cond
其中dt={b,b9,h,w,f},cond={un,lt,eq,le,gt,ne,ge,ov}。注意f和w指定相同的操作,除非f数据类型不支持9位的立即操作数。支持的模式
D:S:M     V<-V     V<-S     V<-I     S<-S     S<-I
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
如果Cond为真,寄存器Rb的内容转移到寄存器Rd。ID<1:0>进一步指定源和目的寄存器:
VR  当前组向量寄存器
SR  标量寄存器
SY  同步寄存器
VAC  向量累加器寄存器(对VAC寄存器编码参照VMOV说明)
    D:S:M   ID<1:0>=00   ID<1:0>=01   ID<1:3>=10   ID<1:0>=11
    V<-V   VR<-VR   VR<-VAC   VAC<-VR
    V<-S   VR<-SR   VAC<-SR
    V<-I   VR<-I
    S<-S   SR<-SR
    S<-I   SR<-I
操作
If((Cond=VCSR[SOV,GT,EQ,LT])|(Cond=un))
    for(i=0;i<NumElem;i++)
        Rd[i]-{Rb[i]‖SRb‖sex(IMM<8:0>)};异常
无。编程注解
本指令不受元素屏蔽的影响,VCMOVM受元素屏蔽影响。
对8个元素,向量累加器中扩展浮点精度的表示使用了全部576位。因而,包括累加器的向量寄存器的转移必须指定b9数据长度。VCMOVM  带元素屏蔽的条件转移格式汇编器句法
VCMOVM.dt  Rd,Rb,cond
VCMOVM.dt  Rd,# IMM,cond
其中dt={b,b9,h,w,f},cond={un,lt,eq,le,gt,ne,ge,ov}。注意.f和.w指定相同的操作,除非.f数据类型不支持9位的立即操作数。支持的模式
D:S:M     V<-V     V<-S     V<-I
  DS     int8(b)     int9(b9)     int16(h)     int32(w)
说明
如果Cond为真,则寄存器Rb的内容转移到寄存器Rd。ID<1:0>进一步指定源和目的寄存器:
VR  当前组向量寄存器
SR  标量寄存器
VAC  向量累加器寄存器(对VAC寄存器编码参照VMOV说明)
    D:S:M   ID<1:0>=00   ID<1:0>=01   ID<1:0>=10   ID<1:0>=11
    V<-V   VR<-VR   VR<-VAC   VAC<-VR
    V<-S   VR<-SR   VAC<-SR
    V<-I   V<-I
    S<-S
    S<-I
操作
If((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un))
    for(i=0;1<NumElem && MMASK[i];i++)
        Rd[i]-{Rb[i]‖SRb‖sex(IMM<8:0>)};异常
无。编程注解
本指令受VMMR元素屏蔽的影响,VCMOV不受元素屏蔽影响。
对8个元素,在向量累加器中扩展浮点精度的表示使用全部576位。因而,包括累加器的向量寄存器的转移必须指定.b9数据长度。VCMPV  比较和设置屏蔽格式
Figure A9711740401061
汇编器句法
VCMPV.dt  VRa,VRb,cond,mask
VCMPV.dt  VRa,SRb,cond,mask
其中dt={b,b9,h,w,f},cond={lt,eq,le,gt,ne,ge,},mask={ VGMR,VMMR}。如果指定不屏蔽,则VGMR被假定。支持的模式
D:S:M     M<-V@V     M<-V@S
  DS     int8(b)     int9(b9)     int16(h)     int32(w)     float(f)
说明
向量寄存器VRa和VRb的内容通过执行减法操作(VRa[i]-VRb[i])进行元素方式的比较,如果比较的结果与VCMPV指令的Cond字段相匹配,则VGMR(如K=0)或VMMR(如K=1)寄存器中相位的#i位被设置。例如,如果Cond字段小于(LT),则当VRa[i]<VRb[i]时设置VGMR[i](或VMMR[i])位。操作
       for(i=0:i<NumElem:i++){

           Bop[i]={Rb[i]‖SRb‖sex(IMM<8:0>)};

           relationship[i]=Ra[i]?Bop[i];
        if(K=1)
              MMASK[i]=(relationship[i]=Cond)?True.False

           else

               EMASK[i]=(relationship[i]=Cond)?True.False

       }
异常
无。编程注解
此指令不受元素屏蔽的影响。VCNTLZ  前导零的计数格式
Figure A9711740401071
汇编器句法
VCNTLZ.dt  VRd,VRb
VCNTLZ.dt  SRd,SRb
其中dt={b,b9,h,w}。支持的模式
   S    V<-V     S<-S
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
对Rb中每个元素进行前导零数目的计数;将计数值返回到Rd中。操作
for(i=0:i<NumElem && EMASK[i];i++){
    Rd[i]=number of leading zeroes(Rb[i]);
}异常
无。编程注解
如果元素中全部位为零,则结果等于元素的长度(8、9、16或32分别对应byte、byte9、halfword或word)。
前导零的计数与元素位置索引具有相反的关系(如果用在VCMPR指令后面)。为转换到元素位置,对给定的数据类型,从NumElem减去VCNTLZ的结果。VCOR   或的补码格式
Figure A9711740401081
汇编器句法
VCOR.dt    VRd,VRa,VRb
VCOR.dt    VRd,VRa,SRb
VCOR.dt    VRd,VRa,# IMM
VCOR.dt    SRd,SRa,SRb
VCOR.dt    SRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定相同的操作。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
对Ra和Rb/立即操作数的补码作逻辑或,并将结果返回到目的寄存器Rd。操作
for(i=0;i<NumElem && EMASK[i];i++){
    Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
    Rd[i]<k>=-Ra[i]<k>|Bop[i]<k>.k=for all bits in element i.
}异常
无。VCRSR  从子程序条件返回格式汇编器句法
VCRSR.cond
其中cond={un,lt,eq,le,gt,ne,ge,ov}。说明
如果Cond为真,则从子程返回。这不是延迟转移
如果Cond为真,则从保存在返回地址堆栈中的返回地址继续执行。如果非真,则从VPC+4继续执行。操作
   If((Cond=VCSR[SO.GT.EQ.LT])|(Cond=un)){

      if(VSP<4:0>=0){

          VISRC<RASU>=1;

          signal ARM7 with RASU exception;

          VP_STATE=VP_IDLE

      }else{

          VSP<4:0>=VSP<4:0>.1;

          VPC=RSTACK[VSP<3:0>};

          VPC<1:0>=b’00;

      }

   }else VPC=VPC+4;
异常
无效的指令地址,返回地址堆栈下溢。VCVTB9  byte9数据类型的转换格式
Figure A9711740401101
汇编器句法
VCVTB9.md  VRd,VRb
VCVTB9.md  SRd,SRb
其中md={bb9,b9h,hb9}。支持模式
    S     V<-V     S<-S
    MD     bb9     b9h     hb9
说明
Rb中的每个元素从byte转换到byte9(bb9),从byte9转换到halfword(b9h)或从halfword转换到byte9(hb9)。操作
  if(md<1:0>=0){         //bb9 for byte to byte9 conversion

      VRd=VRb;

      VRd<9i+8>=VRb<9i+7>.i=0 to 31(or 63 in VEC64 mode)}

  else if(md<1:0>=2){    //b9h for byte9 to halfword conversion

      VRd=VRb;

      VRd<18i+16:18i+9>=VRb<18i+8>.i=0 to 15(or 31 in VEC64 mode)}

  else if(md<1:0>=3)     //hb9 for halfword to byte9 conversion

      VRd<18i+8>=VRb<18i+9>.i=0 to 15(or 31 in VEC64 mode)

  else VRd=undefined;
异常
无。
编程注解
在与b9h模式一同使用该指令之前,要求编程者用shuffle(混洗)操作调整向量寄存器中所减少的元素数目。与hb9模式一同使用该指令之后,要求编程者用unshuffle操作调整目的向量寄存器中所增加的元素数目。此指令不受元素屏蔽的影响。VCVTFF  浮点到定点的转换格式汇编器句法
VCVTFF  VRd,VRa,SRb
VCVTFF  VRd,VRa,# IMM
VCVTFF  SRd,SRa,SRb
VCVTFF  SRd,SRa,# IMM
 D:S:M     V<-V,S     V<-V,I     S<-S,S     S<-S,I
说明
向量/标量寄存器Ra的内容从32位浮点转换成格式<X,Y>的定点实数,其中Y的长度由Rb(模32)或IMM字段指定,而X的长度由(32-Y的长度)指定。X表示整数部分,Y表示小数部分。结果存放在向量/标量寄存器Rd中。操作
Y_size=[SRb%32‖IMM<4:0>};
for(i=0;i<NumElem;i++){
    Rd[i]=convert to<32-Y_sizeY_size>format(Ra[i]);
}异常
溢出。编程注解
本指令只支持Word数据长度。由于结构不支持寄存器中的多数据类型,本指令不使用元素屏蔽。对整型数据类型本指令使用舍去零的舍入方式。VCVTIF  整数到浮点的转换格式
Figure A9711740401121
汇编器句法
VCVTIF  VRd,VRb
VCVTIF  VRd,SRb
VCVTIF  SRd,SRb支持的模式
D:S:M  V<-V  V<-S     S<-S
说明
向量/标量寄存器Rb的内容从int32转换为浮点数据类型,结果存放在向量/标量寄存器Rd中。操作
for(i=0;i<NumElem;i++){
    Rd[i]=convert to floating point format(Rb[i]);
}异常
无。编程注解
本指令仅支持word数据长度。由于结构不支持寄存器中的多数据类型,本指令不使用元素屏蔽。VD1CBR  VCR1减1及条件转移格式
Figure A9711740401131
汇编器句法
VD1CBR.cond  # Offset
其中cond={un,lt,eq,le,gt,ne,ge,ov}。说明
如果Cond为真,VCR1减1并转移。这不是延迟转移。操作
VCR1=VCR1-1;
If((VCR1>0)&((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un)))
    VPC=VPC+sex(Offset<22:0>*4);
else VPC=VPC+4;异常
无效的指令地址。编程注解
注意VCR1是在转移条件被检查之前减1的。当VCR1为0时执行此指令,将循环计数有效设置到232-1。VD2CBR  VCR2减1及条件转移格式
Figure A9711740401141
汇编器句法
VD2CBR.cond  # Offset
其中cond={un,lt,eq,le,gt,ne,ge,ov}。说明
如果Cond为真,VCR2减1并转移。这不是延迟转移。操作
VCR2=VCR2-1;
If((VCR2>0)&((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un)))
    VPC=VPC+sex(Offset<22:0>*4);
else VPC=VPC+4;异常
无效的指令地址。编程注解
注意VCR2是在转移条件被检查之前减1的。当VCR2为0时执行此指令,将循环计数有效设置到232-1。VD3CBR  VCR3减1及条件转移格式汇编器句法
VD3CBR.cond  # Offset
其中cond={un,lt,eq,le,gt,ne,ge,ov}。说明
当Cond为真,VCR3减1并转移。这不是延迟转移。操作
VCR3=VCR3-1;
If((VCR3>0)&((Cond=VCSR[SO,GT,EQ,LT])|(Cond=un)))
VPC=VPC+sex(Offset<22:0>*4);
else VPC=VPC+4;异常
无效的指令地址。编程注解
注意VCR3是在转移条件被检查之前减1的。当VCR3为0时执行此指令,将循环计数有效设置到232-1。VDIV2N  被2 n 格式汇编器句法
VDIV2N.dt  VRd,VRa,SRb
VDIV2N.dt  VRd,VRa,# IMM
VDIV2N.dt  SRd,SRa,SRb
VDIV2N.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式
D:S:M   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
向量/标量寄存器Ra的内容被2n除,这里n是标量寄存器Rb或2MM的正整数内容,最终结果存放在向量/标量寄存器Rd中。此指令使用截断(向零舍入)作为舍入模式。操作
    N={SRb%32‖IMM<4:0>}
    for(i=0:i<NumElem && EMASK[i]:i++){
        Rd[i]=Ra[i]/2N
    }异常
无。编程注解
注意N是从SRb或IMM<4:0>取得的5位数。对byte、byte9、halfword数据类型,编程者负责正确指定数据长度中小于或等于精度级的N值。如果它大于指定数据长度的精度,元素将用符号位填充。本指令用向零舍入的舍入模式。VDIV2N.F  浮点被2 n 格式汇编器句法
VDIV2N.f  VRd,VRa,SRb
VDIV2N.f  VRd,VRa,# IMM
VDIV2N.f  SRd,SRa,SRb
VDIV2N.f  SRd,SRa,# IMM支持的模式
D:S:M     V<-V@S  V<-V@I   S<-S@S  S<-S@I
说明
向量/标量寄存器Ra的内容被2n除,这里n是标量寄存器Rb或IMM的正整数内容,最终结果存放在向量/标量寄存器Rd中。操作
N={SRb%32‖IMM<4:0>};
for(i=0;i<NumElem && EMASK[i];i++){
    Rd[i]=Ra[i]/2N
}异常
无。编程注解
注意N是从SRb或IMM<4:0>中取得的5位数。VDIVI   不完全的除初始化格式汇编器句法
VDIVI.ds  VRb
VDIVI.ds  SRb
其中ds={b,b9,h,w}。支持的模式
   S     VRb     SRb
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
执行不恢复的带符号整数除的初始化步骤。被除数是累加器中双精度带符号整数。如果被除数是单精度数,它必须被符号扩展到双精度,并存放在VAC0H和VAC0L中。除数是Rb中的单精度带符号整数。
如果被除数的符号与除数的符号相同,则从累加器高位中减去Rb。如不同,则Rb被加到累加器高位上。操作
for(i=0;i<NumElem && EMASK[i];i++){
    Bop[i]=(VRb[i]‖SRb}
    if(VAC0H[i}<msb>=Bop[i]<msb>)
       VAC0H[i]=VAC0H[i]-Bop[i];
else
       VAC0H[i]=VAC0H[i]+Bop[i];
}异常
无。编程注解
在除法步骤之前,编程者负责检查溢出或被零除的情况。VDIVS  不完全的除步骤格式
Figure A9711740401191
汇编器句法
VDIVS.ds  VRb
VDIVS.ds  SRb
其中ds={b,b9,h,w}。支持的模式
    S     VRb     SRb
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
执行一不恢复的带符号除的选代步骤。本指令要求被执行的次数与同数据的长度相同(例如,对int8为8次,int9为9次,int16为16,int32数据类型为32)。VDIVI指令必须在除步骤之前被使用一次,在累加器中产生初始部分的余数。除数是Rb中的单精度带符号整数。每个步骤提取一个商数位并移到累加器的最低有效位。
如果累加器中部分余数的符号与Rb中除数的符号相同,则从累加器高位中减去Rb。如果不同,Rb被加到累加器高位上。
如果累加器中得出的部分余数(加或减的结果)的符号与除数的符号相同,则商位为1。如果不相同,则商位为0。累加器左移一位的位置并用商位填入。
在除步骤的结尾,余数是在累加器高位中,而商在累加器低位中。此商是1的补码形式。操作VESL  元素左移一位格式
Figure A9711740401201
汇编器句法
VESL.dt  SRc,VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式
    S     SRb
  DS     int8(b)     int9(b9)     int16(h)   int32(w)
说明
将向量寄存器Ra中的元素左移一个位置,从标量寄存器Rb填入。正被移出的最左元素返回到标量寄存器Rc,其它元素返回到向量寄存器Rd。
Figure A9711740401202
操作
VRd[0]=SRb;
for(i=o;i<NumElem-1;i++)
    VRd[i]=VRa[i-1];
SRc=VRa[NumElem-1];异常
无。编程注解
此指令不受元素屏蔽的影响。VESR   元素右移一位格式汇编器句法
VESL.dt  SRc,VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式
    S     SRb
    DS     int8(b)     int9(b9)     int16(h)   int32(w)
说明
将向量寄存器Ra的元素右移一个位置,从标量寄存器Rb填入。正被出的最右元素返回到标量寄存器Rc,其它元素返回到向量寄存器Rd。
Figure A9711740401212
操作
SRc=VRa[0];
for(i=o;i<NumElem-2;i++)
    VRd[i]=VRa[i+1];
VRd[NumElem-1]=SRb;异常
无。编程注解
此指令不受元素屏蔽的影响。VEXTRT  抽取一元素格式
Figure A9711740401221
汇编器句法
VEXTRT.dt  SRd,VRa,SRb
VEXTRT.dt  SRd,VRa,# IMM
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式
D:S:M     S<-S     S<-I
  DS     int8(b)     int9(b9)     int16(h)     int32(w)
说明
从Ra向量寄存器抽取一元素并将其存入标量寄存器Rd,该寄存器的索引由标量寄存器Rb或IMM字段指出。操作
index32={ SRb%32‖IMM<4:0>};
index64={SRb%64‖IMM<5:0>};
index=(VCSR<vec64>)?index64:index32;
SRd=VRa[index];异常
无。编程注解
此指令不受元素屏蔽的影响。VEXTSGN2  抽取(1,-1)符号格式
Figure A9711740401231
汇编器句法
VEXTSGN2.dt  VRd,VRa
VEXTSGN2.dt  SRd,SRa
其中dt={b,b9,h,w}。支持的模式
    S     V<-V     S<-S
  DS   int8(b)   int9(b9)   int16(h)  int32(w)
说明
计算向量/标量寄存器Ra元素方式内容的符号值,将结果存放到向量/标量寄存器Rd中。操作
for(i=0.i<NumElem && EMASK[i];i++){
    Rd[i]=(Ra[i]<0)?-1:1;
}异常
无。VEXTSGN3  抽取(1,0,-1)符号格式汇编器句法
VEXTSGN3.dt  VRd,VRa
VEXTSGN3.dt  SRd,SRa
其中dt={b,b9,h,w}。支持的模式
    S     V<-V     S<-S
  DS     int8(b)     int9(b9)     int16(h)     int32(w)
说明
计算向量/标量寄存器Ra元素方式内容的符号值,将结果存放到向量/标量寄存器Rd中。操作
for(i=0:i<NumElem && EMASK[i];i++){
    if(Ra[i]>0)      Rd[i]=1;
    else if(Ra[i]<0) Rd[i]=-1;
    else             Rd[i]=0;
}异常
无。VINSRT  插入一元素格式
Figure A9711740401251
汇编器句法
VINSRT.dt  VRd,SRa,SRb
VINSRT.dt  VRd,SRa,# IMM
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式
D:S:M     V<-S     V<-I
  DS     int8(b)     int9(b9)     int16(h)     int32(w)
说明
将标量寄存器Ra中的元素按标量寄存器Rb或IMM字段指定的索引插入到向量寄存器Rd中。操作
index32={SRb%32‖IMM<4:0>};
index64={SRb%64‖IMM<5:0>};
index=(VCSR<vec64>)?index64:index32;
VRd[index]=SRa;异常
无。编程注解
本指令不受元素屏蔽的影响。VL  加载格式
Figure A9711740401261
汇编器句法
VL.lt    Rd,SRb,SRi
VL.lt    Rd,SRb,# IMM
VL.lt    Rd,SRb+,SRi
VL.lt    Rd,SRb+,# IMM
其中lt={b,bz9,bs9,h,w,4,8,16,32,64},Rd={VRd,VRAd,SRd}。注意.b和bs9指定相同的操作,.64和VRAd不能一起被指定。对cache-off加载使用VLOFF。操作
加载当前或替代组中的一向量寄存器或者一标量寄存器。操作
EA=SRb+{SRi‖sex(IMM<7:0>)};
if(A=1)SRb=EA;
Rd=见下表:
  LT     加载操作
  .bz9   SRd<8:0>=zex BYTE[EA]
  .bs9   SRd<8:0>=sex BYTE[EA]
  .h   SRd<15:0>=HALF[EA]
  .w   SRd<31:0>=WORD[EA]
  .4   VRd<9i+8:9i>=scx BYTE[EA+i].i=0 to 3
  .8   VRd<9i+8:9i>=sex BYTE[EA+i].i=0 to 7
  .16   VRd<9i+8:9i>=sex BYTE[EA+i].i=0 to 15
  .32   VRd<9i+8:9i>=sex BYTE[EA+i].i=0 to 31
  .64   VR0d<9i+8:9i>=sex BYTE[EA+i].i=0 to 31VR1d<9i+8:9i>=sex BYTE[EA+32+i].i=0 to 31
异常
无效的数据地址,不对齐的访问。编程注解
此指令不受元素屏蔽的影响。VLCB  从循环缓冲器加载格式
Figure A9711740401281
汇编器句法
VLCB.lt  Rd,SRb,SRi
VLCB.lt  Rd,SRb,# IMM
VLCB.lt  Rd,SRb+,SRi
VLCB.lt  Rd,SRb+,# IMM
其中lt={b,bz9,bs9,h,w,4,8,16,32,64},Rd={VRd,VRAd,SRd}。注意.b和.bs9指定相同的操作,.64和VRAd不能被一起指定。对cache-off加载使用VLCBOFF。说明
从由SRb+1中的BEGIN指针和SRb+2中的END指针所限定的循环缓冲器加载一向量或标量寄存器。
在加载以及地址更新操作之前,如有效地址大于END地址,则有效地址被调整。另外,对.h和.w标量加载,循环缓冲器边界必须分别与halfword和word边界对齐。操作
EA=SRb+{SR1‖sex(IMM<7:0>)};
BEGIN=SRb+1
END=SRb+2
cbsize=END-BEGIN;
if(EA>END)EA=BEGIN+(EA END);
if(A=1)SRb-EA;
Rd=见以下的表:
    LT     加载操作
    .bz9     SRd<8:0>=zex BYTE[EA]
    .bs9     SRd<8:0>=sex BYTE[EA]
    .h     SRd<15:0>=HALF[EA]
    .w     SRd<31:0>=WORD[EA]
    .4     VRd<9i+8:9i>=sex BYTE[(EA+i>END)?EA+i-cbsize:EA+i].i=0 to 3
    .8     VRd<9i+8:9i>=sex BYTE[(EA+i>END)?EA+i-cbsize:EA+i].i=0 to 7
    LT     加载操作
  .16   VRd<9i+8:9i>=sex BYTE[(EA+i>END)?EA+i-cbsize:EA+i].i=0 to 15
  .32   VRd<9i+8:9i>=sex BYTE[(EA+i>END)?EA+i-cbsize:EA+i].i=0 to 31
  .64   VR0d<9i+8:9i>=sex BYTE[(EA+i>END)?EA+i-cbsize:EA+i].i=0 to 31VR1d<9i+8:9i>=sex BYTE[(EA+32+i>END)?EA+32+i-cbsize EA+32+i]i=0 to 31
异常
无效的数据地址,不对齐的访问。编程注解
此指令不受元素屏蔽的影响。
编程者必须对此指令确定下面的条件以按所期望工作:
BEGIN<EA<2*END  BEGIN
即,EA>BEGIN以及EA  END<END-BEGIN。VLD  双加载格式
Figure A9711740401301
汇编器句法
VLD.lt  Rd,SRb,SRi
VLD.lt  Rd,SRb,# IMM
VLD.lt  Rd,SRb+,SRi
VLD.lt  Rd,SRb+,# IMM
其中lt=[b,bz9,bs9,h,w,4,8,16,32,64},Rd={VRd,VRAd,SRd }。注意.b和.bs9指定相同的操作,.64和VRAd不能被一起指定。对cache-off加载使用VLDOFF。说明
加载当前或替代组中的两个向量寄存器或两个标量寄存器。操作
EA=SRb+{SRt‖sex(IMM<7:0>)};
if(A=1)SRb=EA;
Rd:Rd+1=见下表:
    LT     加载操作
    .bz9     SRd<8:0>=zex BYTE[EA]SRd+1<8:0>=zex BYTE[EA+1]
    .bs9     SRd<8:0>=zex BYTE[EA]SRd+1<8:0>=zex BYTE[EA+1]
    .h     SRd<15:0>=HALF[EA]SRd+1<15:0>=HALF[EA+2]
    .w     SRd<31:0>=WORD[EA]SRd+1<31:0>=WORD[EA+4]
    .4     VRd<9i+8:9i>=sex BYTE[EA+i].i=0 to 3VRd+1<9i+8:9i>=sex BYTE[EA+4+i].1=0 to 3
    .8     VRd<9i+8:9i>=sex BYTE[EA+i].i=0 to 7VRd+1<9i+8:9i>=sex BYTE[EA+8+i].i=0 to 7
    LT     加载操作
   .16     VRd<9i+8:9i>=sex BYTE[EA+i}.i=0 to 15VRd+1<9i+8:9i>=sex BYTE[EA+16+i].i=0 to 15
   .32     VRd<9i+8:9i>=sex BYTE[EA+i].i=0 to 31VRd+1<9i+8:9i>=sex BYTE[EA+32+i].i=0 to 31
   .64     VR0d<9i+8:9i>=sex BYTE[EA+i].i=0 to 31VR1d<9i+8:9i>=sex BYTE[EA+32+i].i=0 to 31VR0d+1<9i+8:9i>=sex BYTE[EA+64+i].i=0 to 31VR1d+1<9i+8:9i>=sex BYTE[EA+96+i].i=0 to 31
异常
无效的数据地址,不对齐的访问。编程注解
此指令不受元素屏蔽的影响。VLI   加载立即数格式汇编器句法
VLl.dt  VRd,# IMM
VLl.dt  SRd,# IMM
其中dt={b,b9,h,w,f}。说明
向标量或向量寄存器加载立即值。
对标量寄存器加载,根据数据类型加载byte、byte9、halfword或word。对byte、byte9和halfword数据类型,未受影响的那些byte(byte9)不被改变。操作
Rd=见下表:
    DT     标量加载     向量加载
    .i8     SRd<7:0>=IMM<7:0>     VRd=32 int8 elements
    .i9     SRd<8:0>=IMM<8:0>     VRd=32 int9 elements
    .i16     SRd<15:0>=IMM<15:0>     VRd=16 int16 elements
    .i32     SRd<31:0>=sex IMM<18:0>     VRd=8 int32 elements
    .f     SRd<31>=IMM<18>(sign)SRd<30:23>=[MM<17:10>(exponent)SRd<22:13>=IMM<9:0>(mantissa)SRd<1:20>=zeroes     VRd=8 float elements
异常
无。VLQ  四加载格式汇编器句法
VLQ.lt  Rd,SRb,SRi
VLQ.lt  Rd,SRb,# IMM
VLQ.lt  Rd,SRb+,SRi
VLQ.lt  Rd,SRb+,# IMM
其中lt={b,bz9,bs9,h,w,4,8,16,32,64},Rd={VRd,VRAd,SRd}。注意.b和.bs9指定相同的操作,.64和VRAd不能被一起指定。对Cache-off加载利用VLQOFF。说明
在当前或替代组中加载四个向量寄存器或四个标量寄存器。操作
EA=SRb+{SRi‖sex(IMM<7:0>)];
if(A=1)SRb=EA;;
Rd:Rd+1:Rd+2:Rd+3=见下表:
    LT     加载操作
 .bz9   SRd<8:0>=zex BYTE[EA]SRd+1<8:0>=zex BYTE[EA+1]SRd+2<8:0>=zex BYTE[EA+2]SRd+3<8:0>=zex BYTE[EA+3]
 .bs9   SRd<8:0>=zex BYTE[EA]SRd+1<8:0>=zex BYTE[EA+1]SRd+2<8:0>=zex BYTE[EA+2]SRd+3<8:0>=zex BYTE[EA+3]
 .h   SRd<15:0>=HALF[EA]SRd+1<15:0>=HALF[EA+2]SRd+2<15:0>=HALF[EA+4]SRd+3<15:0>=HALF[EA+6]
    LT     加载操作
 SRd<31:0>=WORD[EA]SRd+1<31:0>=WORD[EA+4]SRd+2<31:0>=WORD[EA+8]SRd+3<31:0>=WORD[EA+12]
 .4  VRd<9i+8:9i>=sex BYTE[EA+i].i=0 to 3VRd+1<9i+8:9i>=sex BYTE[EA+4+i].i=0 to 3VRd+2<9i+8:9i>=sex BYTE[EA+8+i].i=0 to 3VRd+3<9i+8:9i>=sex BYTE[EA+12+i].i=0 to 3
 .8  VRd<9i+8:9i>=sex BYTE[EA+i].i=0 to 7VRd+1<9i+8:9i>=sex BYTE[EA+8+i].i=0 to 7VRd+2<9i+8:9i>=sex BYTE[EA+16+i].i=0 to 7VRd+3<9i+8:9i>=sex BYTE[EA+24+i].i=0 to 7
 .16  VRd<9i+8:9i>=sex BYTE[EA+i].i=0 to 15VRd+1<9i+8:9i>=sex BYFE[EA+16+i].i=0 to 15VRd+2<9i+8:9i>=sex BYTE[EA+32+i].i=0 to 15VRd+3<9i+8:9i>=sex BYTE[EA+48+i].i=0 to 15
 .32  VR6<9i+8:9i>=sex BYTE[EA+i].i=0 to 31VRd+1<9i+8:9i>=sex BYTE[EA+32+i].i=0 to 31VRd+2<9i+8:9i>=sex BYTE[EA+64+i].i=0 to 31VRd+3<9i+8:9i>=sex BYTE[EA+96+i].i=0 to 31
 .64  VR0d<9i+8:9i>=sex BYTE[EA+i].i=0 to 31VR1d<9i+8:9i>=sex BYTE[EA+32+i].i=0 to 31VR0d+1<9i+8:9i>=sex BYTE[EA+64+i].i=0 to 31VR1d+1<9i+8:9i>=sex BYTE[EA+96+i].i=0 to 31VR0d+2<9i+8:9i>=sex BYTE[EA+128+i].i=0 to 31VR1d+2<9i+8:9i>=sex BYTE[EA+160+i].i=0 to 31VR0d+3<9i+8:9i>=sex BYTE[EA+192+i].i=0 to 31VR1d+3<9i+8:9i>=sex BYTE[EA+224+i].i=0 to 31
异常
无效的数据地址,不对齐的访问。编程注解
此指令不受元素屏蔽的影响。VLR  反向加载格式汇编器句法
VLR.lt  Rd,SRb,SRi
VLR.lt  Rd,SRb,# IMM
VLR.lt  Rd,SRb+,SRi
VLR.lt  Rd,SRb+,# IMM
其中lt={4,8,16,32,64},Rd={VRd,VRAd}。注意64和VRAd不能被一起指定。对Cache-off加载利用VLROFF。说明
按逆元素序列加载一向量寄存器。此指令不支持标量目的寄存器。操作
EA=SRb+{SRi‖sex(IMM<7:0>)];
if(A=1)SRb=EA;
Rd=见下表:
    LT     加载操作
   .4     VRd[31-i]<8:0>=sex BYTE[EA+i].i=0 to 3
   .8     VRd[31-i]<8:0>=sex BYTE[EA+i].i=0 to 7
   .16     VRd[31-i]<8:0>=sex BYTE[EA+i].i=0 to 15
   .32     VRd[31-i]<8:0>=sex BYTE[EA+i].i=0 to 31
   .64     VR0d[31-i]<8:0>=sex BYTE[EA+32+i].i=0 to 31VR1d[31-i]<8:0>=sex BYTE[EA+i].i=0 to 31
异常
无效的数据地址地址,不对齐的访问。编程注解
此指令不受元素屏蔽的影响。VLSL  逻辑左移格式
Figure A9711740401361
汇编器句法
VLSL.dt  VRd,VRa,SRb
VLSL.dt  VRd,VRa,# IMM
VLSL.dt  SRd,SRa,SRb
VLSL.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w }。支持的模式
D:S:M   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS     int8(b)     int9(b9)     int16(h)     int32(w)
说明
向量/标量寄存器Ra的每个元素向左逻辑移位,最低有效位(LSB)位置以零填入,移位量在标量寄存器Rb或IMM字段中给定,结果存放在向量/标量寄存器Rd中。操作
shift_amount={SRb%32‖IMM<4:0>};
for(i=0;i<NumElem && EMASK[i];i++){
    Rd[i]=Ra[i]<<shift_amount;
}异常
无。编程注解
注意shift-amount是从SRb或IMM<4:0>中取得的5位数,对于byte,byte9,halfword数据类型,编程者负责正确指定小于或等于数据长度的位数的移位量。如果该移位量大于指定的数据长度,元素将以零来填充。VLSR   逻辑右移格式汇编器句法
VLSR.dt  VRd,VRa,SRb
VLSR.dt  VRd,VRa,# IMM
VLSR.dt  SRd,SRa,SRb
VLSR.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式
D:S:M   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
向量/标量寄存器Ra的每个元素向右逻辑移位,最高有效位(MSB)位置以零填入,移位量在标量寄存器Rb或IMM字段中给定,结果存放在向量/标量寄存器Rd中。操作
shift_amount={SRb%32‖IMM<4:0>};
for(i=0;i<NumElem && EMASK[i]:i++){
    Rd[i]=Ra[i]zero>>shift_amount;
}异常
无。编程注解
注意shift-amount是从SRb或IMM<4:0>中取得的5位数,对于byte,byte9,halfword数据类型,编程者负责正确指定小于或等于数据长度的位数的移位量。如果该移位量大于指定的数据长度,元素将以零来填充。VLWS   跨距加载格式
Figure A9711740401381
汇编器句法
VLWS.dt Rd,SRb,SR1
VLWS.dt Rd,SRb,# IMM
VLWS.dt Rd,SRb+,SRi
VLWS.dt Rd,SRb+,# IMM
其中dt={4,8,16,32},Rd={VRd,VRAd}。注意,.64模式不被支持,用VL替代。对Cache  off加载使用VLWSOFF。说明
从有效地址开始,用标量寄存器SRb+1作为跨距控制寄存器,从存储器加载32字节到向量寄存器VRd。
LT指定block size、对每个块加载的连续字节数。SRb+1指定stride、分隔两个连续块的起始的字节数。
stride必须等于或大于block size。EA必须是对准的数据长度。stride和block size必须是多种数据长度。操作
EA=SRb+{SRi‖sex(IMM<7:0>)};
if(A=1)SRb=EA;
Block-size={4‖8‖16‖32};
Stride=SRb,1<31:0>;
for(i=0;t<VECSIZE/Block  size;i++)
for(j=0j<Block  size;j++)
VRd[i*Block  size+j]<8:0>=sex BYTE{EA+i * Stride+j};异常
无效的数据地址,未对齐的访问。VMAC   乘和累加格式汇编器句法
VMAC.dt  VRa,VRb
VMAC.dt  VRa,SRb
VMAC.dt  VRa,# IMM
VMAC.dt  SRa,SRb
VMAC.dt  SRa,# IMM
其中dt={b,h,w,f}。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int16(h)   int32(w)   float(f)
说明
Ra的每个元素与Rb中的每个元素相乘以产生一双精度的中间结果;将此中间结果的每个双精度元素与向量累加器的每个双精度元素相加,将每个元素的双精度和存入向量累加器中。
Ra和Rb使用指定的数据类型,而VAC使用合适的双精度数据类型(16、32和64位分别对应int8、int16和int32)。每个双精度元素的高位部分存放在VACH中。
对浮点数据类型,全部操作数和结果都是单精度的。操作
for(i=0:i<NturnElem && EMASK[i];i++){
    Aop[i]={VRa{i}‖SRa};
    Bop[i]={VRb[i]‖SRb}if(dt=float)VACL[i]=Aop[i]*Bop[i]+VACL[i],
    else VACH[i];VACL[i]=Aop[i]*Bop[i]+VACH[i]:VACL[i];异常
溢出,浮点无效的操作数。编程注解
此指令不支持int9数据类型,用int16数据类型替代。VMACF  乘和累加小数格式
Figure A9711740401401
汇编器句法
VMACF.dt  VRa,VRb
VMACF.dt  VRa,SRb
VMACF.dt  VRd,# IMM
VMACF.dt  SRa,SRb
VMACF.dt  SRa,# IMM
其中dt={b,h,w}。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int16(h)   int32(w)
说明
VRa的每个元素与Rb中的每个元素相乘以产生一双精度的中间结果;将此双精度中间结果左移一位;将移位后的中间结果的每个双精度元素与向量累加器的每个双精度元素相加;每个元素的双精度和存放到向量累加器中。
VRa和Rb使用指定的数据类型,而VAC使用合适的双精度数据类型(16、32和64位分别对应int8、int16和int32)。每个双精度元素的高位部分存放在VACH中。操作
for(i=0;i<NumElem && EMASK[i];i++){
    Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
    VACH[i]:VACL[i]=((VRa[i]*Bop[i])<<1)+VACH[i];VACL[i];
}异常
溢出。编程注解
此指令不支持int9数据类型,用int16数据类型替代。VMACL   乘和累加低位格式汇编器句法
VMACL.dt  VRd,VRa,VRb
VMACL.dt  VRd,VRa,SRb
VMACL.dt  VRd,VRa,# IMM
VMACL.dt  SRd,SRa,SRb
VMACL.dt  SRd,SRa,# IMM
其中dt={b,h,w,f}。支持的模式
D:S:M  V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int16(h)   int32(w)   float(f)
说明
将VRa的每个元素与Rb中的每个元素相乘以产生一双精度的中间结果;将此中间结果的每个双精度元素与向量累加器的每个双精度元素相加;将每个元素的双精度和存放到向量累加器;将较低位部分返回到目的寄存器VRd。
VRa和Rb使用指定的数据类型,而VAC使用合适的双精度数据类型(16、32和64位分别对应int8、int16和int32)。每个双精度元素的位部分存放在VACH中。
对浮点数据类型,全部操作数和结果都是单精度的。操作
for(i=0;i<NumElem && EMASK[i];i++){
   Bop[i]={VRb[i]‖SRb};
   if(dt=float)VACL[i]=VRa[i]*Bop[i]+VACL[i];
   else VACH[i]:VACL[i]=VRa[i]*Bop[i]+VACH[i]:VACL[i];
   VRd[i]=VACL[i]
}异常
溢出,浮点无效的操作数。编程注解
此指令不支持int9数据类型。代之以使用int16数据类型。VMAD  乘和加格式
Figure A9711740401421
汇编器句法
VMAD.dt    VRc,VRd,VRa,VRb
VMAD.dt    SRc,SRd,SRa,SRb
其中dt=(b,h,w)。支持的模式
    S     VR     SR
  DS   int8(b)     int16(h)   int32(w)
说明
将Ra的每个元素与Rb中的每个元素相乘以产生一双精度的中间结果;使此中间结果的每个双精度元素与Rc的每个元素相加;将每个元素的双精度和存放到目的寄存器Rd+1:Rd。操作
for(i=0:i<NumElem && EMASK[i];i++){
    Aop[i]={VRa[i]‖SRa];
    Bop[i]={VRb[i]‖SRb};
    Cop[i]={VRc[i]‖SRc};
    Rd+[i]:Rd[i]=Aop[i]*Bop[i]+sex dp(Cop[i]);
}异常
无。VMADL  乘和加低位格式
Figure A9711740401431
汇编器句法
VMADL.dt    VRc,VRd,VRa,VRb
VMADL.dt    SRc,SRd,SRa,SRb
其中dt={b,h,w,f}。支持的模式
    S     VR     SR
    DS     intt8(b)     float(f)     int16(h)     int32(w)
说明
将Ra的每个元素与Rb中的每个元素相乘以产生一双精度的中间结果;将此中间结果的每个双精度元素与Rc的每个元素相加;将每个元素的双精度和的低位部分返回到目的寄存器Rd。
对浮点数据类型,全部操作数和结果都是单精度的。操作
for(i=0;i<NumElem && EMASK[i];i++){
    Aop[i]=[VRa[i]‖SRa};
    Bop[i]={VRb[i]‖SRb};
    Cop[i]={VRc[i]‖SRc};
    if(dt=float)Lo[i]=Aop[i]*Bop[i]+Cop[i];
    else Hi[i]:Lo[i]=Aop[i]*Bop[i}+sex_dp(Cop[i]);
    Rd[i]=Lo[i];
}异常
溢出,浮点无效的操作数。VMAS   从累加器乘和减格式
Figure A9711740401441
汇编器句法
VMAS.dt  VRa,VRb
VMAS.dt  VRa,SRb
VMAS.dt  VRa,# IMM
VMAS.dt  SRa,SRb
VMAS.dt  SRa,# IMM
其中dt={b,h,w,f}。支持的模式
D:S:M  V<-V@V   V<-V@S   V<-V@I  S<-S@S  S<-S@I
    DS   int8(b)   int16(h)   int32(w)   float(f)
说明
将Ra的每个元素Rb中的每个元素相乘以产生一双精度的中间结果;从向量累加器的每个双精度元素中减去中间结果的每个双精度元素;将每个元素的双精度和存放到向量累加器。
Ra和Rb使用指定的数据类型,而VAC使用合适的双精度数据类型(16、32和64位分别对应int8、int16和int32)。每个双精度元素的高位部分存放在VACH中。
对浮点数据类型,全部操作数和结果都是单精度的。操作
for(i=0:i<NumElem && EMASK[i];i++){
    Bop[i]=[VRb[i}‖SRb};
    if(dt=float)VACL[i]=VACL[i]-VRa[i]*Bop[i];
    else VACH[i]:VACL[i]=VACH[i]:VACL[i]-VRa[i]*Bop[i];
}异常
溢出,浮点无效的操作数。编程注解
此指令不支持int9数据类型,用int16数据类型来替代。VMASF   从累加器小数乘和减格式
Figure A9711740401451
汇编器句法
VMASF.dt    VRa,VRb
VMASF.dt    VRa,SRb
VMASF.dt    VRa,# IMM
VMASF.dt    SRa,SRb
VMASF.dt    SRa,# IMM
其中dt={b,h,w}。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int16(h)   int32(w)
说明
将VRa的每个元素与Rb中的每个元素相乘以产生一双精度的中间结果;将双精度的中间结果左移一位;从向量累加器的每个双精度元素减去被移位的中间结果的每个双精度元素;将每个元素的双精度和存储到向量累加器。
VRa和Rb使用指定的数据类型,而VAC使用合适的双精度数据类型(16、32和64位分别对并int8、int16和int32)。每个双精度元素的高位部分存放在VACH中。操作
for(i=0;i<NumElem && EMASK[i]:i++){
    Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
    VACH[i]:VACL[i]=VACH[i]:VACL[i]-VRa[i]*Bop[i];
}异常
溢出。编程注解
此指令不支持int9数据类型,用int16数据类型替代。VMASL   从累加器低位乘和减格式
Figure A9711740401461
汇编器句法
VMASL.dt  VRd,VRa,VRb
VMASL.dt  VRd,VRa,SRb
VMASL.dt  VRd,VRa,# IMM
VMASL.dt  SRd,SRa,SRb
VMASL.dt  SRd,SRa,# IMM
其中dt={ b,h,w,f}。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int16(h)   int32(w)   float(f)
说明
将VRa的每个元素与Rb中的每个元素相乘以产生一双精度的中间结果;从向量累加器的每个双精度元素减去中间结果的每个双精度元素;将每个元素的双精度和存放到向量累加器;将低位部分存放到目的寄存器VRd。
RVa和Rb使用指定的数据类型,而VAC使用合适的双精度数据类型(16,32和64分别对应int8,int16和int32)。每个双精度元素的高位部分存放在VACH中。
对浮点数据类型,全部操作数和结果都是单精度的。操作
for(i=0;i<NumElem && EMASK[i];i++);
    Bop[i]=(VRb[i]‖SRb);
    if(dt=float)VACL[i]=VACL[i]-VRA[i]*Bop[i];
    else VACH[i]:VACL[i]=VACH[i]:VACL[i]-VRa[i]*Bop[i];
    VRd[i]=VACL[i];
}异常
溢出,浮点无效的操作数。编程注解
此指令不支持int9数据类型  代之以使用int16数据类型。VMAXE    成对方式的最大和交换格式汇编器句法
VMAXE.dt  VRd,VRb
其中dt={b,b9,h,w,f}。支持的模式
D:S:M     V<-V
    DS     int8(b)     int9(b9)     int16(h)     int32(w)     float(f)
说明
VRa应当等于VRb。当VRa与VRb不同时,结果未定义。
向量寄存器Rb的每个偶/奇数据元素被成对比较,并且每个数据元素对的较大值存储到偶数位置,每个数据元素对的较小值存储到向量寄存器Rd的奇数位置。操作
for(i=0:i<NumElem  &&  EMASK[i]:i=i+2){
   VRd[i]=(VRb[i]>VRb[i+1])?VRb[i]:VRb[i+1];
   VRd[i+1]=(VRb[i]>VRb[i+1])?VRb[i+1]:VRb[i]
}异常
无。VMOV  转移格式
Figure A9711740401481
汇编器句法
VMOV.dt  Rd,Rb
其中dt={b,b9,h,w,f}。Rd和Rb指示结构上规定的寄存器名。
注意.w和.f指示相同的操作。支持的模式说明
寄存器Rb的内容转移到寄存器Rd。Group字段指定源和目的寄存器组。寄存器组的标记办法是:
VR    当前组向量寄存器
VRA   替代组向量寄存器
SR    标量寄存器
SP    专用寄存器
RASR  返回地址堆栈寄存器
VAC  向量累加寄存器(参见下面的VAC寄存器编码表)
组<3:0>   源组   目的组     注释
    0000     保留
    0001   VR    VRA
    0010   VRA    VR
    0011   VRA    VRA
    0100     保留
    0101     保留
    0110   VRA    VAC
    0111   VAC    VRA
    1000     保留
    1001   SR    VRA
    1010     保留
    1011     保留
    1100   SR    SP
    1101   SP    SR
    1110   SR    RASR
    1111   RASR    SR
注意用此指令不能将向量寄存器传送到标量寄存器。VEXTRT指令是为此而提供的。
对VAC寄存器编码使用下表:
R<2:0> 寄存器     注释
    000   未定义
    001   VAC0L
    010   VAC0H
    011   VAC0 指定VAC0H:VAC0L两者。如指定为源,VRd+1:VRd寄存器对被更新。VRd必须是偶数寄存器。
    100   未定义
    101   VAC1L
    110   VAC1H
    111   VAC1 指定VAC1H:VAC1L两者。如指定为源,VRd+1:VRd寄存器对被更新。VRd必须是偶数寄存器。
    其它   未定义
操作
Rd=Rb异常
在VCSR或VISRC中设置异常事件状态位将引起相应的异常事件。编程注解
此指令不受元素屏蔽的影响。注意,用在VEC64模式下不存在替代组的概念,在VEC64模式下,本指令不能用于从替代组的寄存器或向替代组的寄存器转移。VMUL  乘格式
Figure A9711740401501
汇编器句法
VMUL.dt  VRc,VRd,VRa,VRb
VMUL.dt  SRc,SRd,SRa,SRb
其中dt={b,h,w}。支持的模式
    S     VR     SR
   DS     int8(b)     int16(h)   int32(w)
说明
将Ra的每个元素与Rb中的每个元素相乘以产生一双精度的结果;将每个元素的双精度和返回到目的寄存器Rc:Rd。
Ra和Rb使用指定的数据类型,而Rc:Rd使用合适的双精度数据类型(16、32和64位分别对应int8、int16和int32)。每个双精度元素的高位部分存放在Rc中。操作
for(i=0:i<NumElem && EMASK[i].i++){
    Aop[i]={VRa[i]‖SRa};
    Bop[i]={VRb[i]‖SRb};
    Hi[i]Lo[i]=Aop[i]*Bop[i]
    Rc[i]=Hi[i];
    Rd[i]=Lo[i];
}异常
无。编程注解
此指令不支持int9数据类型,用int16数据类型替代。此指令也不支持浮点数据类型,因为扩展的结果是不被支持的数据类型。VMULA  乘到累加器格式
Figure A9711740401511
汇编器句法
VMULA.dt  VRa,VRb
VMULA.dt  VRa,SRb
VMULA.dt  VRa,# IMM
VMULA.dt  SRa,SRb
VMULA.dt  SRa,# IMM
其中dt={b,h,w,f}。支持的模式
D:S:M V@V V@S V@I S@S S@I
  DS    int8(b)     int16(h)     int32(w)     float(f)
说明
将VRa的每个元素与Rb中的每个元素相乘以产生一双精度的结果;将此结果写到累加器。
浮点数据类型,全部操作数和结果都是单精度的。操作
for(i=0:i<NumElem && EMASK[i];i++){
    Bop[i]=[VRb[i]|[SRb];
    if(dt=float)VACL[i]=VRa[i]*Bop[i];
    else VACH[i]VACL[i]=VRa[i]*Bop[i];
}异常
无。编程注解
此指令不支持int9数据类型。代之以使用int16数据类型。VMULAF   乘到累加器小数格式
Figure A9711740401521
汇编器句法
VMULAF.dt  VRa,VRb
VMULAF.dt  VRa,SRb
VMULAF.dt  VRa,# IMM
VMULAF.dt  SRa,SRb
VMULAF.dt  SRa,# IMM
其中dt={b,h,w}。支持的模式
D:S:M     V@V     V@S     V@I     S@S     S@I
  DS     int8(b)     int16(h)     int32(w)
说明
将VRa的每个元素与Rb中每个元素相乘以产生一以双精度的中间结果;此双精度中间结果左移一位;结果写到累加器。操作
for(i=0:i<NumElem && EMASK[i];i++){
    Bop[i]={VRb[i]‖SRb‖sex(LMM<8:0>)};
    VACH[i]:VACL[i]=(VRa[i]*Bop[i])<<1;
}异常
无。编程注解
此指令不支持int9数据类型,用int16数据类型替代。VMULF  乘小数格式汇编器句法
VMULF.dt  VRd,VRa,VRb
VMULF.dt  VRd,VRa,SRb
VMULF.dt  VRd,VRa,# IMM
VMULF.dt  SRd,SRa,SRb
VMULF.dt  SRd,SRa,# IMM
其中dt={b,h,w}。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS     int8(b)   int16(h)     int32(w)
将VRa的每个元素与Rb中的每个元素相乘以产生一双精度的中间结果;此双精度中间结果左移一位;将结果的高位部分返回到目的寄存器VRd+1,低位部分返回到目的寄存器VRd。VRd必须是一偶数寄存器。操作
for(i=0;i<NumElem && EMASK[i];i++){
    Bop[i]={VRb[i]‖SRb‖sex(TMM<8:0>)};
    Hi[i]:Lo[i]=(VRa[i]*Bop[i])<<1;
    VRd+1[i]=Hi[i];
    VRd[i]=Lo[i]:异常
无。编程注解
此指令不支持int9数据类型,用int16数据类型替代。VMULFR  乘小数并舍入格式
Figure A9711740401541
汇编器句法
VMULFR.dt  VRd,VRa,VRb
VMULFR.dt  VRd,VRa,SRb
VMULFR.dt  VRd,VRa,# IMM
VMULFR.dt  SRd,SRa,SRb
VMULFR.dt  SRd,SRa,# IMM
其中dt={b,h,w}。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS     int8(b)     int16(h)     int32(w)
说明
将VRa的每个元素与Rb中每个元素相乘以产生一双精度的中间结果;此双精度中间结果左移一位;将此被移位的中间结果舍入到高位部分;高位部分返回到目的寄存器VRd。操作
for(i=0:i<NumElem && EMASK[i]:i++){
    Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)}.
    Hi[i]:Lo[i]=(VRa[i]*Bop[i])<<1;
    if(Lo[i]<msb>=1)Hi[i]=Hi[i]+1;
    VRd[i]=Hi[i];
}异常
无。编程注解
此指令不支持int9数据类型,用int16数据类型替代。VMULL  乘低位格式
Figure A9711740401551
汇编器句法
VMULL.dt  VRd,VRa,VRb
VMULL.dt  VRd,VRa,SRb
VMULL.dt  VRd,VRa,# IMM
VMULL.dt  SRd,SRa,SRb
VMULL.dt  SRd,SRa,# IMM
其中dt={b,h,w,f}。支持的模式
D:S:M   V<-V@V   V<-V@S     V<-V@I     S<-S@S      S<-S@I
  DS     int8(b)     int16(h)     int32(w)     float(f)
说明
将VRa的每个元素与Rb中每个元素相乘以产生一双精度的结果;结果的低位部分返回到目的寄存器VRd。
对浮点数据类型,全部操作数和结果都是单精度的。操作
for(i=0:i<NumElem && EMASK[i].i++){Bop[i]={VRb[i]‖SRb};
    if(dt=float)Lo[i]=VRa[i]*Bop[i];
    else Hi[i]Lo[i]=VRa[i]*Bop[i];
    VRd[i]=Lo[i];
}异常
溢出,浮点无效的操作数。编程注解
此指令不支持int9数据类型。代之以使用int16数据类型。VNAND  与非格式
Figure A9711740401561
汇编器句法
VNAND.dt  VRd,VRa,VRb
VNAND.dt  VRd,VRa,SRb
VNAND.dt  VRd,VRa,# IMM
VNAND.dt  SRd,SRa,SRb
VNAND.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定相同的操作。支持的模式
D:S:M  V<-V@V  V<-V@S  V<-V@I  S<-S@S  S<-S@I
 DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
对Ra中每个元素的每一位与Rb/立即操作数中的相应位进行逻辑NAND,结果返回到Rd中。操作
for(i=0;i<NumElem && EMASK[i],i++){
    Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
    Rd[i]<k>=-(Ra[i]<k>&Bop[i]<k>).for k=all bits in element i;
}异常
无。VNOR  或非格式
Figure A9711740401571
汇编器句法
VNOR.dt  VRd,VRa,VRb
VNOR.dt  VRd,VRa,SRb
VNOR.dt  VRd,VRa,# IMM
VNOR.dt  SRd,SRa,SRb
VNOR.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定相同的操作。支持的模式
D:S:M  V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
对Ra中每个元素的每一位与Rb/立即操作数中的相应位作逻辑NOR;结果返回到Rd中。操作
for(i=0:i<NumElem && EMASK[i]:i++){
    Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
    Rd[i]<k>=-(Ra[i]<k>tBop[i]<k>)for k=all bitsin element i;
}异常
无。VOR  或格式
Figure A9711740401581
汇编器句法
VOR.dt  VRd,VRa,VRb
VOR.dt  VRd,VRa,SRb
VOR.dt  VRd,VRa,# IMM
VOR.dt  SRd,SRa,SRb
VOR.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定相同的操作。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
对Ra中每个元素的每一位与Rb/立即操作数中的相应位进行逻辑OR结果返回到Rd中。操作
for(i=0:i<NumElem && EMASK[i];i++){
    Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
    Rd[i]<k>=Ra[i]<k>|Bop[i]<k>.for k=all bus in element i.
}异常
无。VORC  或补码格式
Figure A9711740401591
汇编器句法
VORC.dt  VRd,VRa,VRb
VORC.dt  VRd,VRa,SRb
VORC.dt  VRd,VRa,# IMM
VORC.dt  SRd,SRa,SRb
VORC.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。注意.w和.f指定相同的操作。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS     int8(b)     int9(b9)     int16(h)     int32(w)
说明
对Ra中每个元素的每一位与Rb/立即操作数中相应位的补码进行逻辑OR;结果返回到Rd中。操作
for(i=0:i<NumElem && EMASK[i];i++){
    Bop[i]=[VRb[i]‖SRb‖sex(IMM<8:0>)};
    Rd[i]<k>=Ra[i]<k>|-Bop[i]<k>.for k=all bits in element i;
}异常
无。VPFTCH  预取格式汇编器句法
VPFTCH.ln  SRb,SRi
VPFTCH.ln  SRb,# IMM
VPFTCH.ln  SRb+,SRi
VPFTCH.ln  SRb+,# IMM
其中ln={1,2,4,8}。说明
从有效地址开始预取多个向量数据Cache行。Cache行的数目被指定如下:
LN<1:0>=00:预取1个64字节的Cache行
LN<1:0>=01:预取2个64字节的Cache行
LN<1:0>=10:预取4个64字节的Cache行
LN<1:0>=11:预取8个64字节的Cache行
如果有效地址不落在64字节的边界上,则首先截断以便与64字节的边界对齐。操作异常
无效的数据地址异常事件。编程注解
EA<31:0>指出局部存储器中的一个字节地址。VPFTCHSP  预取到暂时存储器格式
Figure A9711740401611
汇编器句法
VPFTCHSP.ln  SRp,SRb,SRi
VPFTCHSP.ln  SRp,SRb,# IMM
VPFTCHSP.ln  SRp,SRb+,SRi
VPFTCHSP.ln  SRP,SRb+,# IMM
其中ln={1,2,4,8}。注意VPFTCH和VPFTCHSP具有同样的操作码。说明
从存储器向暂时存储器传送多个64字节的块。有效地址给出存储器的起始地址,而SRp提供暂时存储器的起始地址。64字节块的数目指定如下:
LN<1:0>=00:传送1个64字节的块
LN<1:0>=01:传送2个64字节的块
LN<1:0>=10:传送4个64字节的块
LN<1:0>=11:传送8个64字节的块
如果有效地址不落在64字节的边界上,首先截断以使与64字节的边界对齐。如果SRp中的暂时存储器指针地址不落在64字节的边界上,它也截断以与64字节的边界对齐。对齐的暂时存储器指针地址以传送字节数增加。操作
EA=SRb+{SRi‖sex(IMM<7:0>)}:
if(A=1)SRb=EA;
Num_bytes={64‖128‖256‖512}:
Mem_adrs=EA<31:6>:6b’000000;
SRp=SRp<31:6>:6b’000000;
for(i=0;i<Num_bytes;i++)
    SPAD[SRp++]=MEM[Mem_adrs+i];异常
无效的数据地址异常事件。VROL  循环左移格式汇编器句法
VROL.dt  VRd,VRa,SRb
VROL.dt  VRd,VRa,# IMM
VROL.dt  SRd,SRa,SRb
VROL.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式
D:S:M   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   in18(b)   int9(b9)   int16(h)   int32(w)
说明
向量/标量寄存器Ra的每个数据元素循环左移,左移的位数在标量寄存器Rb或IMM字段中给出,结果存入向量/标量寄存器Rd。操作
rotate_amount={SRb%32‖IMM<4:0>};
for(i=0:i<NumElem && EMASK[i];i++){
    Rd[i]=Ra[i]rotate _leftrotate_amount;
}异常
无。编程注解
注意rotate amount从SRb或IMM<4:0>中取得的5位数。对bytebyte9、halfword数据类型,编程者负责正确指定小于或等于数据长度的位数的循环移位总量。如果移位总量大于指定的数据长度,则结果是未定义的。
注意循环左移n位相当于循环右移ElemSize-n位,这里ElemSize表示给定数据长度的位数。VROR  循环右移格式汇编器句法
VROR.dt  VRd,SRa,SRb
VROR.dt  VRd,SRa,# IMM
VROR.dt  SRd,SRa,SRb
VROR.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式
D:S:M     V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)     int9(b9)   int16(h)   int32(w)
说明
向量/标量寄存器Ra的每个数据元素循环右移,右移的位数在标量寄存器Rb或IMM字段中给出,结果存入向量/示量寄存器Rd。操作
rorate_amount={SRb%32‖IMM<4:0>};
for(i=0;i<NumElem && EMASK[i]:i++){
    Rd[i]=Ra[i]rotate_right rotate_amount;
}异常
无。编程注解
注意rotate_amount是从SRb或IMM<4:0>中取得的5位的数。对byte、byte9、halfword数据类型,编程者负责正确指定小于或等于数据长度的位数的循环移位总量。如果该移位总量大于指定的数据长度,则结果是未定义的。
注意循环右移n位相当于循环左移ElemSize-n位,这里ElemSize表示给定数据长度的位数。VROUND  将浮点数舍成整型数格式汇编器句法
VROUND.rm  VRd,VRb
VROUND.rm  SRd,SRb
其中rm={ninf,zero,near,pinf}。支持的模式
D:S:M   V<-V     S<-S
说明
向量/标量寄存器Rb的浮点数据格式的内容舍入成为最接近的32位整数(Word),该结果存放在向量/标量寄存器Rd中。舍入模式在RM中规定。
RM<1:0>   模式     意义
    00     ninf 向-∞舍入
    01     zero 向零舍入
    10     near 向最接近的偶数舍入
    11     Dinf 向+∞舍入
操作
for(i=0:i<NumElem:i++}{
    Rd[i]=Convert to int32(Rb[i]);
}异常
无。编程注解
此指令不受元素屏蔽的影响。VSATL  饱和到低限格式
Figure A9711740401651
汇编器句法
VSATL.dt  VRd,VRa,VRb
VSATL.dt  VRd,VRa,SRb
VSATL.dt  VRd,VRa,# IMM
VSATL.dt  SRd,SRa,SRb
VSATL.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w }。注意9位立即数不支持.f数据类型。支持的模式
D:S:M  V<-V@V  V<-V@S  V<-V@I  S<-S@S   S<-S@I
  DS   int8(b)   int9(b9)   int16(h)   int32(w)     float(f)
说明
向量/标量寄存器Ra的每个数据元素与它在向量/标量寄存器Rb或IMM字段中的对应低限对比检查。如果数据元素的值小于此低限,则被设置成等于低限,且最终结果存入向量/标量寄存器Rd。操作
for(i=0;i<NumElem && EMASK[i].i++){
    Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
    Rd[i]=(Ra[i]<BoP[i])?Bop[i]:Ra[i];
}异常
无。VSATU  饱和到高限格式汇编器句法
VSATU.dt  VRd,SRa,SRb
VSATU.dt  VRd,SRa,SRb
VSATU.dt  VRd,SRa,# IMM
VSATU.dt  SRd,SRa,SRb
VSATU.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w,f}。注意9位立即数不支持.f数据类型。支持的模式
D:S:M  V<-V@V  V<-V@S  V<-V@I  S<-S@S     S<-S@I
 DS  int8(b)  int9(b9)  int16(h)  int32(w)     float(f)
说明
向量/标量寄存器Ra的每个数据元素与它在向量/标量寄存器Rb或IMM字段中的对应高限对比检查。如果数据元素的值大于此高限,则被设置成等于高限,且最终结果存入向量/标量寄存器Rd。操作
for(i=0:i<NumElem && EMASK[i];i++){Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
    Rd[i]=(Ra[i]>Bop[i])?Bop[i]:Ra[i];
}异常
无。VSHFL  混洗格式
Figure A9711740401671
汇编器句法
VSHFL.dt  VRc,VRd,VRa,VRb
VSHFL.dt  VRc,VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式
    S     VRb     SRb
  DS    int8(b)     int9(b9)     int16(h)     int32(w)
说明
向量寄存器Ra的内容与Rb混洗,结果存放在向量寄存器Rc:Rd如下图所示:操作异常
无。编程注解
此指令不使用元素屏蔽。VSHFLH  混洗高位格式
Figure A9711740401681
汇编器句法
VSHFLH.dt  VRd,VRa,VRb
VSHFLH.dt  VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式
    S     VRb     SRb
    DS     int8(b)     int9(b9)     int16(h)   int32(w)
说明
向量寄存器Ra的内容与Rb混洗,结果的高位部分存放在向量寄存器Rd,如下图所示:操作异常
无。编程注解
本指令不使用元素屏蔽。VSHFLL  混洗低位格式汇编器句法
VSHFLL.dt  VRd,VRa,VRb
VSHFLL.dt  VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指定同样的操作。支持的模式
    S     VRb     SRb
  DS   int8(b)     int9(b9)     int16(h)     int32(w)
说明
向量寄存器Ra的内容与Rb混洗,结果的低位部分存放在向量寄存器Rd,如下图所示:操作异常
无。编程注解
此指令不使用元素屏蔽。VST   存储格式
Figure A9711740401701
汇编器句法
VST.st  Rs,SRb,SRi
VST.st  Rs,SRb,# IMM
VST.st  Rs,SRb+,SRi
VST.st  Rs,SRb+,# IMM
其中st={b,b9t,h,w,4,8,16,32,64},Rs={VRs,VRAs,SRs}注意.b和.b9t指示相同的操作,.64和VRAs不能被一起指定。对Cache-off存储使用VSTOFF。说明
存储一向量或标量寄存器。操作
EA=SRb+{SRi‖sex(IMM<7:0>)};
if(A=1)SRb=EA;
MEM[EA]=见下表:
    ST     存储操作
    .b     BYTE[EA]=SRs<7:0>
    .h     HALF[EA]=SRs<15:0>
    .w     WORD[EA]=SRs<31:0>
    .4     BYTE[EA+i]=VRs<9i+7:9i>.i=0 to 3
    .8     BYTE[EA+i]=VRs<9i+7:9i>.i=0 to 7
    .16     BYTE[EA+i]=VRs<9i+7:9i>.i=0 to 15
    .32     BYTE[EA+i]=VRs<9i+7:9i>.i=0 to 31
    .64     BYTE[EA+i]=VR0s<9i+7:9i>.i=0 to 31BYTE[EA+32+i]=VR1s<9i+7:9i>.i=0 to 31
异常
无效的数据地址,不对齐的访问。编程注解
此指令不受元素屏蔽的影响。VSTCB  存储到循环缓冲器格式
Figure A9711740401711
汇编器句法
VSTCB.st    Rs,SRb,SRi
VSTCB.st    Rs,SRb,# IMM
VSTCB.st    Rs,SRb+,SR1
VSTCB.st    Rs,SRb+,# IMM
其中st={b,b9t,h,w,4,8,16,32,64},Rs={VRs,VRAs,SRs]。注意.b和.b9t指示相同的操作,.64和VRAs不能被一起指定。对Cache-off使用VSTCBOFF。说明
从循环缓冲器存储到向量或标量寄存器,循环缓冲器的边界由SRb+1中的BEGIN指针和SRb+2中的END指针确定。
在存储及地址更新操作之前,如果有效地址大于END地址,则它将被调整。此外,对.h和.w标量加载循环缓冲器的边界必须分别与halfword和word的边界对齐。操作
EA=SRb+{SR1‖sex(IMM<7:0>)};
BEGIN=SRb+1
END=SRb+2
cbsize=END-BEGIN;
if(EA>END)EA=BEGIN+(EA-END);
if(A=1)SRb=EA;
MEM[EA]=见下表:
    ST     存储操作
   .b     BYTE[EA]=SRs<7:0>;
   .h     HALF[EA]=SRs<15:0>;
   .w     WORD[EA]=SRs<31:0>:
   .4     BYTE[(EA+i>END)?EA+i-cbsize:EA+i]=VRs<9i+7:9i>.i=0 to 3
   .8     BYTE[(EA+i>END)?EA+i-cbsize:EA+i]=VRs<9i+7:9i>.i=0 to 7
   .16     BYTE[(EA+i>END)?EA+i-cbsize:EA+i]=VRs<9i+7:9i>.i=0 to 15
   .32     BYTE[(EA+i>END)?EA+i-cbsize:EA+i]=VRs<9i+7:9i>.i=0 to 31
   .64     BYTE[(EA+i>END)?EA+i-cbsize:EA+i]=VR0s<9i+7:9i>.i=0 to 31BYTE[(EA+32+i>END)?EA+32+i-cbsize EA+32+i]=VR1s<9i+7:9i>.i=0 to 31
异常
无效的数据地址,未对齐的访问。编程注解
此指令不受元素屏蔽的影响。
编程者必须确定下面的条件以使此指令按所希望的工作:
BEGIN<EA<2*END-BEGIN
即,EA>BEGIN以及EA-END<END-BEGINVSTD  双存储格式
Figure A9711740401731
汇编器句法
VSTD.st    Rs,SRb,SRi
VSTD.st    Rs,SRb,# IMM
VSTD.st    Rs,SRb+,SRi
VSTD.st    Rs,SRb+,# IMM
其中st={b,b9t,h,w,4,8,16,32,64},Rs={VRs,VRAs,SRs}。注意.b和.b9t指定相同的操作,.64和VRAs不能被一起指定。对Cache-off存储使用VSTDOFF。说明
存储来自从当前或替代组的两个向量寄存器或两个标量寄存器。操作
EA=SRb+{SRi‖sex(IMM<7:0>)};
if(A=1)SRb=EA;
MEM[EA]=见下表:
    ST     存储操作
   .b     BYTE[EA]=SRs<7:0>BYTE[EA+1]=SRs+1<7:0>
   .h     HALF[EA]=SRs<15:0>HALF[EA+2]=SRs+1<15:0>
   .w     WORD[EA]=SRs<31:0>WORD[EA+4]=SRs+1<31:0>
   .4     BYTE[EA+i]=VRs<9i+7:9i>.i=0 to 3BYTE[EA+4+i]=VRs+1<9i+7:9i>.i=0 to 3
   .8     BYTE[EA+i]=VRs<9i+7:9i>.i=0 to 7BYTE[EA+8+i]=VRs+1<9i+7:9i>.i=0 to 7
   .16     BYTE[EA+i]=VRs<9i+7:9i>.i=0 to 15BYTE[EA+16+i]=VRs+1<9i+7:9i>.i=0 to 15
    ST     存储操作
    .32     BYTE[EA+i]=VRs<9i+7:9i>.i=0 to 31BYTE[EA+32+i]=VRs+1<9i+7:9i>.i=0 to 31
    .64     BYTE[EA+i]=VR0s<9i+7:9i>.i=0 to 31BYTE[EA+32+i)=VR1s<9i+7:9i>.i=0 to 31BYTE[EA+64+i]=VR0s+1<9i+7:9i>.i=0 to 31BYTE[FA+96+i]=VR1s+1<9i+7:9i>.i=0 to 31
异常
无效的数据地址,未对齐的访问。编程注解
本指令不受元素屏蔽的影响。VSTQ  四存储格式汇编器句法
VSTQ.st  Rs,SRb,SRi
VSTQ.st  Rs,SRb,# IMM
VSTQ.st  Rs,SRb+,SRi
VSTQ.st  Rs,SRb+,# IMM
其中st={b,b9t,h,w,4,8,16,32,64},Rs={VRs,VRAs,SRs}。注意.b和.b9t指定相同的操作,.64和VRAs不能被一起指定。对Cache-off存储使用VSTQOFF。说明
存储来自当前或替代组的四个向量寄存器或四个标量寄存器。操作
EA=SRb+{SRi‖sex(IMM<7:0>)};
if(A=1)SRb=EA;
MEM[EA]=见下表:
    ST     存储操作
  .b   BYTE[EA]=SRs<7:0>BYTE[EA+1]=SRs+1<7:0>BYTE[EA+2]=SRs+2<7:0>BYTE[EA+3]=SRs+3<7:0>
  .h   HALF[EA]=SRs<15:0>HALF[EA+2}=SRs+1<15:0>HALF[EA+4]=SRs+2<15:0>HALF[EA+6]=SRs+3<15:0>
.w   WORD[EA]=SRs<31:0>WORD[EA+4]=SRs+1<31:0>WORD[EA+8]=SRs+2<31:0>WORD[EA+12]=SRs+3<31:0>
    ST     存储操作
  .4   BYTE[EA+i]=VRs<9i+2:9i>.i=0 to 3BYTE[EA+4+i]=VRs+1<9i+7:9i>.i=0 to 3BYTE[EA+8+i]=VRs+2<9i+7:9i>.i=0 to 3BYTE[EA+12+i]=VRs+3<9i+7:9i>.i=0 to 3
  .8   BYTE[EA+i]=VRs<9i+7:9i>.i=0 to 7BYTE[EA+8+i]=VRs+1<9i+7:9i>.i=0 to 7BYTE[EA+16+i}=VRs+2<9i+7:9i>.i=0 to 7BYTE[EA+24+i]=VRs+3<9i+7:9i>.i=0 to 7
  .16   BYTE[EA+i]=VRs<9i+7:9i>.i=0 to 15BYTE[EA+16+i]=VRs+1<9i+7:9i>.i=0 to 15BYTE[EA+32+i]=VRs+2<9i+7:9i>.i=0 to 15BYTE[EA+48+i]=VRs+3<9i+7:9i>.i=0 to 15
  .32   BYTE[EA+i]=VRs<9i+7:9i>.i=0 to 31BYTE[EA+32+i]=VRs+1<9i+7:9i>.i=0 to 31BYTE[EA+64+i]=VRs+2<9i+7:9i>.i=0 to 31BYTE[EA+96+i]=VRs+3<9i+7:9i>.i=0 to 31
  .64   BYTE[EA+i]=VR0s<9i+7:9i>.i=0 to 31BYTE[EA+32+i]=VR1s<9i+7:9i>.i=0 to 31BYTE[EA+64+i]=VR0s+1<9i+7:9i>.i=0 to 31BYTE[EA+96+i]=VR1s+1<9i+7:9i>.i=0 to 31BYTE[EA+128+i]=VR0s+2<9i+7:9i>.i=0 to 31BYTE[EA+160+i]=VR1s+2<9i+7:9i>.i=0 to 31BYTE[EA+192+i]=VR0s+3<9i+7:9i>.i=0 to 31BYTE[EA+224+i]=VR1s+3<9i+7:9i>.i=0 to 31
异常
无效的数据地址,未对齐的访问。编程注解
此指令不受元素屏蔽的影响。VSTR  反向存储格式
Figure A9711740401771
汇编器句法
VSTR.st    Rs,SRb,SRi
VSTR.st    Rs,SRb,# IMM
VSTR.st    Rs,SRb+,SRi
VSTR.st    Rs,SRb+,# IMM
其中st={4,8,16,32,64},Rs={VRs,VRAs}。注意.64和VRAs不能被一起指定。对Cache-off存储使用VSTROFF。说明
按逆元素顺序存储向量寄存器。本指令不支持标量数据源寄存器。操作
EA=SRb+{SR1‖Sex(IMM<7:0>)};
if(A=1)SRb=EA;
MEM[EA]=见下表:
    ST     存储操作
  .4   BYTE[FA+i]=VRs[31-i]<7:0>.i=0 to 3
  .8   BYTE[EA+i]=VRs[31-i]<7:0>.i=0 to 7
  .16   BYTE[EA+i]=VRs[31-i]<7:0>.i=0 to 15
  .32   RYTE[EA+i]=VRs[31-i]<7:0>.i=0 to 31
  .64   BYTE[EA+32+i]=VR0s[31-i]<7:0>.i=0 to 31BYTE[EA+i]=VR1s[31-i]<7:0>.i=0 to 31
异常
无效的数据地址,未对齐的访问。编程注解
本指令不受元素屏蔽的影响。VSTWS  跨距存储格式汇编器句法
VSTWS.st    Rs,SRb,SRi
VSTWS.st    Rs,SRb,# IMM
VSTWS.st    Rs,SRb+,SRi
VSTWS.st    Rs,SRb+,# IMM
其中st={8,16,32},Rs={VRs,VRAs}。注意不支持.64模式,用VST替代。对Cache-off存储使用VSTWSOFF。说明
从有效地址开始,用标量寄存器SRb+1作为跨距控制寄存器,从向量寄存器VRs向存储器存储32个字节。
ST指示block size、从每个块存储的连续字节数。SRb+1指示stride、分隔两个连续块的起始的字节数。
Stride必须等于或大于block size。EA必须对齐数据长度。stride和block size必须是多数据长度。操作
EA=SRb+{SRi‖sex(IMM<7:0>)};
if(A=1)SRb=EA;
Block-size={4‖8‖16‖32};
Stride=SRb+1<31:0>;
for(i=0;i<VECSIZE/Block_size;i++)
for(j=0;j<Block_size;j++)
BYTE[EA+I*Stride+j]=VRs{i * Block_size+j}<7:0);异常
无效的数据地址,未对齐的访问。VSUB  减格式
Figure A9711740401791
汇编器句法
VSUB.dt  VRd,VRa,VRb
VSUB.dt  VRd,VRa,SRb
VSUB.dt  VRd,VRa,# IMM
VSUB.dt  SRd,SRa,SRb
VSUB.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w,f}。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S   S<-S@I
  DS   int8(b)   int9(b9)   int16(h)   int32(w)   float(f)
说明
从向量/标量寄存器Ra的内容中减去向量/标量寄存器Rb的内容,其结果存放在向量/标量寄存器Rd中。操作
for(i=0:i<NumElem && EMASK[i];i++){
    Bop[i]={Rb[i]‖SRb‖sex(IMM<8:0>)};
    Rd[i]=Ra[i]-Bop[i];
}异常
溢出,浮点无效的操作数。VSUBS  减及置位格式汇编器句法
VSUBS.dt  SRd,SRa,SRb
VSUBS.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w,f}。支持的模式
D:S:M   S<-S@S   S<-S@I
 DS  int8(b)   int9(b9)   int16(h)   int32(w)   float(f)
说明
从SRa减去SRb;结果存入SRd,并且设置VCSR中的VFLAG位。操作
Bop={SRb‖sex(IMM<8:0>)};
SRd=SRa-Bop;
VCSR<lt,eq,gt>=status(SRa-Bop);异常
溢出,浮点无效的操作数。VUNSHFL  去混洗格式
Figure A9711740401811
汇编器句法
VUNSHFL.dt  VRc,VRd,VRa,VRb
VUNSHFL.dt  VRc,VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指示相同的操作。支持的模式
    S     VRb     SRb
    DS     int8(b)     int9(b9)   int16(h)     int32(w)
说明
向量寄存器VRa的内容与Rb去混洗并送入向量寄存器VRc:VRd如下所示:
Figure A9711740401812
操作异常
无。编程注解
本指令不使用元素屏蔽。VUNSHFLH  去混洗高位格式
Figure A9711740401821
汇编器句法
VUNSHFLH.dt  VRd,VRa,VRb
VUNSHFLH.dt  VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指示相同的操作。支持的模式
   S     VRb     SRb
  DS     int8(b)     int9(b9)     int16(h)     int32(w)
说明
向量寄存器VRa的内容与Rb被去混洗;结果的高位部分返回到向量寄存器VRd,如下所示:
Figure A9711740401822
操作异常
无。编程注解
本指令不使用元素屏蔽。VUNSHFLL  去混洗低位格式
Figure A9711740401831
汇编器句法
VUNSHFLL.dt  VRd.VRa,VRb
VUNSHFLL.dt  VRd,VRa,SRb
其中dt={b,b9,h,w,f}。注意.w和.f指定相同的操作。支持的模式
    S     VRb     SRb
  DS     int8(b)     int9(b9)     int16(h)     int32(w )
说明
向量寄存器VRa的内容与Rb被去混洗;结果的低位部分返回到向量等存器VRd,如下所示:
Figure A9711740401832
操作异常
无。编程注解
此指令不使用元素屏蔽。VWBACK  回写格式
Figure A9711740401841
汇编器句法
VWBACK.ln  SRb,SRi
VWBACK.ln  SRb,# IMM
VWBACK.ln  SRb+,SRi
VWBACK.ln  SRb+,# IMM
其中ln={1,2,4,8}。说明
其索引被向量数据Cache中的EA指定的(与其标签同EA匹配的那些相反)Cache行,如其包含修改过的数据,则被更新到存储器中。如果多于一个Cache行被指定,当它们包含修改过的数据时,后面相继的Cache行被更新到存储器。Cache行的数目指定如下:
LN<1:0>=00:写1个64字节的Cache行
LN<1:0>=01:写2个64字节的Cache行
LN<1:0>=10:写4个64字节的Cache行
LN<1:0>=11:写8个64字节的Cache行
如果有效地址不落在64字节的边界上,则它首先截断以与64字节的边界对齐。操作异常
无效的数据地址异常事件。编程注解
EA<31:0>指出局部存储器中的字节地址。VWBACKSP   从暂时存储器回写格式汇编器句法
VWBACKSP.ln  SRp,SRb,SRi
VWBACKSP.ln  SRp,SRb,# IMM
VWBACKSP.ln  SRp,SRb+,SRi
VWBACKSP.ln  SRp,SRb+,# IMM
其中ln={1,2,4,8}。注意VWBACK和VWBACKSP使用相同的操作码。说明
从暂时存储器向存储器传送多个64字节的块。有效地址给出存储器的起始地址,SRp给出暂时存储器的起始地址。64字节块的数目指定如下:
LN<1:0>=00:传送1个64字节的块
LN<1:0>=01:传送2个64字节的块
LN<1:0>=10:传送4个64字节的块
LN<1:0>=11:传送8个64字节的块
如果有效地址不落在64字节的边界上,则它首先截断以与64字节的边界对齐。如果SRp中的暂时存储器的指针地址不落在64字节的边界,也要截断并以及和64字节的边界对齐。对齐的暂时存储器的指针地址以传送的字节数增加。操作
EA=SRb+{SRi‖sex(IMM<7:0>)};
if(A=1)SRb=EA;
Num_bytes={64‖128‖256‖512};
Mem_adrs=EA<31:6>:6b’000000;
SRp=SRp<31:6>:6b’000000;
for(i=0;i<Num_bytes;i++)
   SPAD[SRp++]=MEM[Mem_adrs+i];异常
无效的数据地址异常事件。VXNOR  异或非格式
Figure A9711740401861
汇编器句法
VXNOR.dt  VRd,VRa,VRb
VXNOR.dt  VRd,VRa,SRb
VXNOR.dt  VRd,VRa,# IMM
VXNOR.dt  SRd,SRa,SRb
VXNOR.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S  S<-S@I
 DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
向量/标量寄存器Ra的内容与向量/标量寄存器Rb的内容进行逻辑异或非,结果存入向量/标量寄存器Rd中。操作
for(i=0;i<NumElem && EMASK[i];i++){
    Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
    Rd[i]<k>=-(Ra[i]<k>^Bop[i]<k>).for k=all bits in element i;
}异常
无。VXOR  异或格式
Figure A9711740401871
汇编器句法
VXOR.dt  VRd,VRa,VRb
VXOR.dt  VRd,VRa,SRb
VXOR.dt  VRd,VRa,# IMM
VXOR.dt  SRd,SRa,SRb
VXOR.dt  SRd,SRa,# IMM
其中dt={b,b9,h,w}。支持的模式
D:S:M   V<-V@V   V<-V@S   V<-V@I   S<-S@S  S<-S@I
  DS   int8(b)   int9(b9)   int16(h)   int32(w)
说明
向量/标量寄存器Ra的内容与向量/标量寄存器Rb的内容进行逻辑异或,结果存入向量/标量寄存器Rd。操作for(i=0;i<NumElem && EMASK[i];i++){
Bop[i]={VRb[i]‖SRb‖sex(IMM<8:0>)};
Rd[i]<k>=Ra[i]<k>^Bop[i]<k>,for k=all bits in element i,}异常
无。VXORALL  异或全部元素格式汇编器句法
VXORALL.dt  SRd,VRb
其中dt={b,b9,h,w}。注意.b和.b9指定相同的操作。支持的模式
  DS   int8(b)   int9(b9)   int16(h) int32(w)
说明
VRb中每个元素的最低有效位一起被异或,1位的结果返回到SRd的最低有效位上。此指令不受元素屏蔽的影响。操作异常
无。

Claims (6)

1.一个向量处理器包括:
包含有一些向量寄存器的寄存器文件;
译码器,在译码一指令期间,从寄存器文件中标识所选择的向量寄存器,并标识在指令执行期间所要处理的数据元素的长度;以及
处理电路,被连到向量寄存器,其中处理电路,在执行时,对来自所选择的向量寄存器的数据实现多个并行操作,并行操作的数目由数据元素的长度来控制。
2.根据权利要求1所述的向量处理器,其中每个向量寄存器具有固定的长度。
3.根据权利要求1所述的向量处理器,其中译码器可识别的可能长度为8位、9位、16位和32位。
4.根据权利要求1所述的向量处理器,其中译码器在译码一个指令期间,标识在指令执行期间所要处理的数据元素的类型。
5.根据权利要求4所述的向量处理器,其中译码器可标识的可能类型包括整型数据和浮点数据类型。
6.用于操作向量处理器的方法,包括:
在向量寄存器中存贮数据;
形成一指令,这指令包括标识向量寄存器的寄存器号,以及标识向量寄存器中数据元素长度的长度字段;以及
通过进行一些并行操作来执行指令,其中每个操作对应于向量寄存器中的一个数据元素,而长度字段控制并行执行的操作的数量。
CN97117404A 1996-08-19 1997-08-19 多媒体信号处理器中的单指令多数据处理方法及其装置 Expired - Lifetime CN1112635C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US699,597 1996-08-19
US08/699,597 US6058465A (en) 1996-08-19 1996-08-19 Single-instruction-multiple-data processing in a multimedia signal processor
US699597 1996-08-19

Publications (2)

Publication Number Publication Date
CN1180864A true CN1180864A (zh) 1998-05-06
CN1112635C CN1112635C (zh) 2003-06-25

Family

ID=24810031

Family Applications (1)

Application Number Title Priority Date Filing Date
CN97117404A Expired - Lifetime CN1112635C (zh) 1996-08-19 1997-08-19 多媒体信号处理器中的单指令多数据处理方法及其装置

Country Status (7)

Country Link
US (2) US6058465A (zh)
JP (1) JPH10134036A (zh)
KR (1) KR100267091B1 (zh)
CN (1) CN1112635C (zh)
DE (1) DE19735350B4 (zh)
FR (1) FR2752630B1 (zh)
TW (2) TW366455B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100351781C (zh) * 1999-09-01 2007-11-28 英特尔公司 多线程并行处理器结构中所用的微引擎的存储器引用指令
CN102012803A (zh) * 2010-11-25 2011-04-13 中国人民解放军国防科学技术大学 支持多宽度simd和多粒度simt的可配置矩阵寄存器单元
CN103119579A (zh) * 2010-09-24 2013-05-22 英特尔公司 用于向量整数乘加指令的功能单元
CN104126173A (zh) * 2011-12-23 2014-10-29 英特尔公司 不会引起密码应用的算术标志的三输入操作数向量add指令
CN105808497A (zh) * 2014-12-30 2016-07-27 华为技术有限公司 一种数据处理方法
CN108984426A (zh) * 2018-08-03 2018-12-11 北京字节跳动网络技术有限公司 用于处理数据的方法和装置
CN109871235A (zh) * 2006-09-22 2019-06-11 英特尔公司 响应指令执行舍入运算
CN113741567A (zh) * 2021-11-08 2021-12-03 广东省新一代通信与网络创新研究院 矢量加速器及其控制方法、装置

Families Citing this family (220)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5953241A (en) * 1995-08-16 1999-09-14 Microunity Engeering Systems, Inc. Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction
US7301541B2 (en) * 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US5742840A (en) * 1995-08-16 1998-04-21 Microunity Systems Engineering, Inc. General purpose, multiple precision parallel operation, programmable media processor
US6643765B1 (en) * 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US6295599B1 (en) * 1995-08-16 2001-09-25 Microunity Systems Engineering System and method for providing a wide operand architecture
US6786420B1 (en) 1997-07-15 2004-09-07 Silverbrook Research Pty. Ltd. Data distribution mechanism in the form of ink dots on cards
US6618117B2 (en) 1997-07-12 2003-09-09 Silverbrook Research Pty Ltd Image sensing apparatus including a microcontroller
US6690419B1 (en) 1997-07-15 2004-02-10 Silverbrook Research Pty Ltd Utilising eye detection methods for image processing in a digital image camera
US6624848B1 (en) 1997-07-15 2003-09-23 Silverbrook Research Pty Ltd Cascading image modification using multiple digital cameras incorporating image processing
US7110024B1 (en) 1997-07-15 2006-09-19 Silverbrook Research Pty Ltd Digital camera system having motion deblurring means
US20040119829A1 (en) 1997-07-15 2004-06-24 Silverbrook Research Pty Ltd Printhead assembly for a print on demand digital camera system
US6879341B1 (en) 1997-07-15 2005-04-12 Silverbrook Research Pty Ltd Digital camera system containing a VLIW vector processor
US6760833B1 (en) 1997-08-01 2004-07-06 Micron Technology, Inc. Split embedded DRAM processor
US6226738B1 (en) * 1997-08-01 2001-05-01 Micron Technology, Inc. Split embedded DRAM processor
US8489861B2 (en) * 1997-12-23 2013-07-16 Round Rock Research, Llc Split embedded DRAM processor
US7197625B1 (en) * 1997-10-09 2007-03-27 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US5864703A (en) 1997-10-09 1999-01-26 Mips Technologies, Inc. Method for providing extended precision in SIMD vector arithmetic operations
US5933650A (en) * 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
FR2770659A1 (fr) * 1997-10-31 1999-05-07 Sgs Thomson Microelectronics Processeur de traitement perfectionne
US6161166A (en) * 1997-11-10 2000-12-12 International Business Machines Corporation Instruction cache for multithreaded processor
WO1999048025A2 (en) 1998-03-18 1999-09-23 Koninklijke Philips Electronics N.V. Data processing device and method of computing the cosine transform of a matrix
US6041404A (en) * 1998-03-31 2000-03-21 Intel Corporation Dual function system and method for shuffling packed data elements
US6292815B1 (en) * 1998-04-30 2001-09-18 Intel Corporation Data conversion between floating point packed format and integer scalar format
US6263426B1 (en) 1998-04-30 2001-07-17 Intel Corporation Conversion from packed floating point data to packed 8-bit integer data in different architectural registers
US6266769B1 (en) 1998-04-30 2001-07-24 Intel Corporation Conversion between packed floating point data and packed 32-bit integer data in different architectural registers
US6282554B1 (en) 1998-04-30 2001-08-28 Intel Corporation Method and apparatus for floating point operations and format conversion operations
US6247116B1 (en) 1998-04-30 2001-06-12 Intel Corporation Conversion from packed floating point data to packed 16-bit integer data in different architectural registers
AUPP702098A0 (en) 1998-11-09 1998-12-03 Silverbrook Research Pty Ltd Image creation method and apparatus (ART73)
US7100026B2 (en) * 2001-05-30 2006-08-29 The Massachusetts Institute Of Technology System and method for performing efficient conditional vector operations for data parallel architectures involving both input and conditional vector values
US6269435B1 (en) * 1998-09-14 2001-07-31 The Board Of Trustees Of The Leland Stanford Junior University System and method for implementing conditional vector operations in which an input vector containing multiple operands to be used in conditional operations is divided into two or more output vectors based on a condition vector
US6487606B1 (en) * 1998-11-18 2002-11-26 Nortel Networks Limited System and method for delivering messages through a totem communications system
US7020879B1 (en) * 1998-12-16 2006-03-28 Mips Technologies, Inc. Interrupt and exception handling for multi-streaming digital processors
US7529907B2 (en) * 1998-12-16 2009-05-05 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
US6496902B1 (en) * 1998-12-31 2002-12-17 Cray Inc. Vector and scalar data cache for a vector multiprocessor
US6209078B1 (en) * 1999-03-25 2001-03-27 Lsi Logic Corporation Accelerated multimedia processor
JP5285828B2 (ja) * 1999-04-09 2013-09-11 ラムバス・インコーポレーテッド 並列データ処理装置
US20080184017A1 (en) * 1999-04-09 2008-07-31 Dave Stuttard Parallel data processing apparatus
US8174530B2 (en) 1999-04-09 2012-05-08 Rambus Inc. Parallel date processing apparatus
US8762691B2 (en) 1999-04-09 2014-06-24 Rambus Inc. Memory access consolidation for SIMD processing elements using transaction identifiers
US20080008393A1 (en) * 1999-04-09 2008-01-10 Dave Stuttard Parallel data processing apparatus
US7802079B2 (en) * 1999-04-09 2010-09-21 Clearspeed Technology Limited Parallel data processing apparatus
US20070294510A1 (en) * 1999-04-09 2007-12-20 Dave Stuttard Parallel data processing apparatus
US7526630B2 (en) 1999-04-09 2009-04-28 Clearspeed Technology, Plc Parallel data processing apparatus
US8171263B2 (en) 1999-04-09 2012-05-01 Rambus Inc. Data processing apparatus comprising an array controller for separating an instruction stream processing instructions and data transfer instructions
US8169440B2 (en) * 1999-04-09 2012-05-01 Rambus Inc. Parallel data processing apparatus
US20080007562A1 (en) * 1999-04-09 2008-01-10 Dave Stuttard Parallel data processing apparatus
US7627736B2 (en) * 1999-04-09 2009-12-01 Clearspeed Technology Plc Thread manager to control an array of processing elements
US7506136B2 (en) * 1999-04-09 2009-03-17 Clearspeed Technology Plc Parallel data processing apparatus
US20080016318A1 (en) * 1999-04-09 2008-01-17 Dave Stuttard Parallel data processing apparatus
US7966475B2 (en) 1999-04-09 2011-06-21 Rambus Inc. Parallel data processing apparatus
AUPQ056099A0 (en) 1999-05-25 1999-06-17 Silverbrook Research Pty Ltd A method and apparatus (pprint01)
CN1378665A (zh) 1999-06-10 2002-11-06 Pact信息技术有限公司 编程概念
US6334180B1 (en) * 1999-06-27 2001-12-25 Sun Microsystems, Inc. Processor coupled by visible register set to modular coprocessor including integrated multimedia unit
US6983350B1 (en) 1999-08-31 2006-01-03 Intel Corporation SDRAM controller for parallel processor architecture
US7546444B1 (en) 1999-09-01 2009-06-09 Intel Corporation Register set used in multithreaded parallel processor architecture
US6574725B1 (en) * 1999-11-01 2003-06-03 Advanced Micro Devices, Inc. Method and mechanism for speculatively executing threads of instructions
US6532509B1 (en) 1999-12-22 2003-03-11 Intel Corporation Arbitrating command requests in a parallel multi-threaded processing system
US6694380B1 (en) 1999-12-27 2004-02-17 Intel Corporation Mapping requests from a processing unit that uses memory-mapped input-output space
US6631430B1 (en) 1999-12-28 2003-10-07 Intel Corporation Optimizations to receive packet status from fifo bus
US6591361B1 (en) 1999-12-28 2003-07-08 International Business Machines Corporation Method and apparatus for converting data into different ordinal types
US6307789B1 (en) 1999-12-28 2001-10-23 Intel Corporation Scratchpad memory
US6661794B1 (en) 1999-12-29 2003-12-09 Intel Corporation Method and apparatus for gigabit packet assignment for multithreaded packet processing
US6976095B1 (en) 1999-12-30 2005-12-13 Intel Corporation Port blocking technique for maintaining receive packet ordering for a multiple ethernet port switch
US7143401B2 (en) * 2000-02-17 2006-11-28 Elbrus International Single-chip multiprocessor with cycle-precise program scheduling of parallel execution
US6701424B1 (en) 2000-04-07 2004-03-02 Nintendo Co., Ltd. Method and apparatus for efficient loading and storing of vectors
US6857061B1 (en) * 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
US7343602B2 (en) * 2000-04-19 2008-03-11 Hewlett-Packard Development Company, L.P. Software controlled pre-execution in a multithreaded processor
US6615281B1 (en) * 2000-05-05 2003-09-02 International Business Machines Corporation Multi-node synchronization using global timing source and interrupts following anticipatory wait state
US6728866B1 (en) * 2000-08-31 2004-04-27 International Business Machines Corporation Partitioned issue queue and allocation strategy
US7681018B2 (en) 2000-08-31 2010-03-16 Intel Corporation Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set
US8058899B2 (en) 2000-10-06 2011-11-15 Martin Vorbach Logic cell array and bus system
US7003450B2 (en) * 2000-10-20 2006-02-21 Pts Corporation Methods and apparatus for efficient vocoder implementations
US20020103847A1 (en) * 2001-02-01 2002-08-01 Hanan Potash Efficient mechanism for inter-thread communication within a multi-threaded computer system
WO2002067137A1 (en) * 2001-02-01 2002-08-29 Honeywell International Inc. Vector and scalar signal processing
US7181484B2 (en) * 2001-02-21 2007-02-20 Mips Technologies, Inc. Extended-precision accumulation of multiplier output
US7599981B2 (en) * 2001-02-21 2009-10-06 Mips Technologies, Inc. Binary polynomial multiplier
US7162621B2 (en) 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US7711763B2 (en) * 2001-02-21 2010-05-04 Mips Technologies, Inc. Microprocessor instructions for performing polynomial arithmetic operations
US9411532B2 (en) 2001-09-07 2016-08-09 Pact Xpp Technologies Ag Methods and systems for transferring data between a processing device and external devices
US9250908B2 (en) 2001-03-05 2016-02-02 Pact Xpp Technologies Ag Multi-processor bus and cache interconnection system
US9141390B2 (en) 2001-03-05 2015-09-22 Pact Xpp Technologies Ag Method of processing data with an array of data processors according to application ID
US9552047B2 (en) 2001-03-05 2017-01-24 Pact Xpp Technologies Ag Multiprocessor having runtime adjustable clock and clock dependent power supply
US9436631B2 (en) 2001-03-05 2016-09-06 Pact Xpp Technologies Ag Chip including memory element storing higher level memory data on a page by page basis
US7327780B2 (en) * 2001-03-14 2008-02-05 Mercury Computer Systems, Inc. Wireless communications systems and methods for multiple operating system multiple user detection
JP4529063B2 (ja) * 2001-03-30 2010-08-25 ルネサスエレクトロニクス株式会社 システムシミュレータ、シミュレーション方法及びシミュレーションプログラム
US6832338B2 (en) * 2001-04-12 2004-12-14 International Business Machines Corporation Apparatus, method and computer program product for stopping processors without using non-maskable interrupts
US10031733B2 (en) 2001-06-20 2018-07-24 Scientia Sol Mentis Ag Method for processing data
US7246220B1 (en) * 2001-07-27 2007-07-17 Magnum Semiconductor, Inc. Architecture for hardware-assisted context switching between register groups dedicated to time-critical or non-time critical tasks without saving state
US6868476B2 (en) 2001-08-27 2005-03-15 Intel Corporation Software controlled content addressable memory in a general purpose execution datapath
US7225281B2 (en) * 2001-08-27 2007-05-29 Intel Corporation Multiprocessor infrastructure for providing flexible bandwidth allocation via multiple instantiations of separate data buses, control buses and support mechanisms
CN1241106C (zh) * 2001-10-09 2006-02-08 佳能株式会社 打印装置及其控制方法
US7032215B2 (en) * 2001-10-11 2006-04-18 Intel Corporation Method and system for type demotion of expressions and variables by bitwise constant propagation
JP3496009B2 (ja) 2001-10-22 2004-02-09 キヤノン株式会社 記録装置及びその制御方法及びプログラム
US7818356B2 (en) 2001-10-29 2010-10-19 Intel Corporation Bitstream buffer manipulation with a SIMD merge instruction
GB2382673B (en) * 2001-10-31 2005-10-26 Alphamosaic Ltd A vector processing system
US7158964B2 (en) * 2001-12-12 2007-01-02 Intel Corporation Queue management
US20030126520A1 (en) * 2001-12-31 2003-07-03 Globespanvirata System and method for separating exception vectors in a multiprocessor data processing system
US7895239B2 (en) 2002-01-04 2011-02-22 Intel Corporation Queue arrays in network devices
US7500240B2 (en) * 2002-01-15 2009-03-03 Intel Corporation Apparatus and method for scheduling threads in multi-threading processors
US6934951B2 (en) 2002-01-17 2005-08-23 Intel Corporation Parallel processor with functional pipeline providing programming engines by supporting multiple contexts and critical section
US7181594B2 (en) 2002-01-25 2007-02-20 Intel Corporation Context pipelines
US7610451B2 (en) * 2002-01-25 2009-10-27 Intel Corporation Data transfer mechanism using unidirectional pull bus and push bus
US20100274988A1 (en) * 2002-02-04 2010-10-28 Mimar Tibet Flexible vector modes of operation for SIMD processor
US7035331B2 (en) * 2002-02-20 2006-04-25 Intel Corporation Method and apparatus for performing a pixel averaging instruction
US9170812B2 (en) 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
US20110161977A1 (en) * 2002-03-21 2011-06-30 Martin Vorbach Method and device for data processing
US7346881B2 (en) * 2002-05-13 2008-03-18 Tensilica, Inc. Method and apparatus for adding advanced instructions in an extensible processor architecture
US7376812B1 (en) 2002-05-13 2008-05-20 Tensilica, Inc. Vector co-processor for configurable and extensible processor architecture
US7937559B1 (en) 2002-05-13 2011-05-03 Tensilica, Inc. System and method for generating a configurable processor supporting a user-defined plurality of instruction sizes
US7793084B1 (en) 2002-07-22 2010-09-07 Mimar Tibet Efficient handling of vector high-level language conditional constructs in a SIMD processor
WO2004015572A1 (en) 2002-08-07 2004-02-19 Mmagix Technology Limited Apparatus, method and system for a synchronicity independent, resource delegating, power and instruction optimizing processor
US7337275B2 (en) * 2002-08-13 2008-02-26 Intel Corporation Free list and ring data structure management
US6961888B2 (en) * 2002-08-20 2005-11-01 Flarion Technologies, Inc. Methods and apparatus for encoding LDPC codes
WO2004038599A1 (de) 2002-09-06 2004-05-06 Pact Xpp Technologies Ag Rekonfigurierbare sequenzerstruktur
US6978399B2 (en) * 2002-09-12 2005-12-20 International Business Machines Corporation Debug thread termination control points
US20040128485A1 (en) * 2002-12-27 2004-07-01 Nelson Scott R. Method for fusing instructions in a vector processor
US6941438B2 (en) 2003-01-10 2005-09-06 Intel Corporation Memory interleaving
US7126991B1 (en) * 2003-02-03 2006-10-24 Tibet MIMAR Method for programmable motion estimation in a SIMD processor
US20040193837A1 (en) * 2003-03-31 2004-09-30 Patrick Devaney CPU datapaths and local memory that executes either vector or superscalar instructions
US7392399B2 (en) 2003-05-05 2008-06-24 Sun Microsystems, Inc. Methods and systems for efficiently integrating a cryptographic co-processor
KR101005718B1 (ko) * 2003-05-09 2011-01-10 샌드브리지 테크놀로지스, 인코포레이티드 포화와 함께 또는 포화 없이 다중 오퍼랜드들의 누산을 위한 프로세서 감소 유닛
JP3855270B2 (ja) * 2003-05-29 2006-12-06 ソニー株式会社 アンテナ実装方法
JP4699685B2 (ja) * 2003-08-21 2011-06-15 パナソニック株式会社 信号処理装置及びそれを用いた電子機器
US7496921B2 (en) * 2003-08-29 2009-02-24 Intel Corporation Processing block with integrated light weight multi-threading support
US7895411B2 (en) * 2003-10-02 2011-02-22 Nvidia Corporation Physics processing unit
US20050086040A1 (en) * 2003-10-02 2005-04-21 Curtis Davis System incorporating physics processing unit
US7739479B2 (en) 2003-10-02 2010-06-15 Nvidia Corporation Method for providing physics simulation data
US7793072B2 (en) * 2003-10-31 2010-09-07 International Business Machines Corporation Vector execution unit to process a vector instruction by executing a first operation on a first set of operands and a second operation on a second set of operands
US8200945B2 (en) * 2003-11-07 2012-06-12 International Business Machines Corporation Vector unit in a processor enabled to replicate data on a first portion of a data bus to primary and secondary registers
GB2409063B (en) * 2003-12-09 2006-07-12 Advanced Risc Mach Ltd Vector by scalar operations
GB2409068A (en) * 2003-12-09 2005-06-15 Advanced Risc Mach Ltd Data element size control within parallel lanes of processing
GB2409065B (en) * 2003-12-09 2006-10-25 Advanced Risc Mach Ltd Multiplexing operations in SIMD processing
GB2409059B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
GB2411973B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd Constant generation in SMD processing
GB2409060B (en) * 2003-12-09 2006-08-09 Advanced Risc Mach Ltd Moving data between registers of different register data stores
GB2409061B (en) * 2003-12-09 2006-09-13 Advanced Risc Mach Ltd Table lookup operation within a data processing system
GB2409062C (en) * 2003-12-09 2007-12-11 Advanced Risc Mach Ltd Aliasing data processing registers
GB2411974C (en) * 2003-12-09 2009-09-23 Advanced Risc Mach Ltd Data shift operations
GB2409066B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
GB2411976B (en) * 2003-12-09 2006-07-19 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
GB2409064B (en) * 2003-12-09 2006-09-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing in parallel a data processing operation on data elements
GB2409067B (en) * 2003-12-09 2006-12-13 Advanced Risc Mach Ltd Endianess compensation within a SIMD data processing system
GB2411975B (en) * 2003-12-09 2006-10-04 Advanced Risc Mach Ltd Data processing apparatus and method for performing arithmetic operations in SIMD data processing
GB2410097B (en) * 2004-01-13 2006-11-01 Advanced Risc Mach Ltd A data processing apparatus and method for performing data processing operations on floating point data elements
GB2411978B (en) * 2004-03-10 2007-04-04 Advanced Risc Mach Ltd Inserting bits within a data word
US7873812B1 (en) 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US7302627B1 (en) * 2004-04-05 2007-11-27 Mimar Tibet Apparatus for efficient LFSR calculation in a SIMD processor
US20050251644A1 (en) * 2004-05-06 2005-11-10 Monier Maher Physics processing unit instruction set architecture
US8427490B1 (en) 2004-05-14 2013-04-23 Nvidia Corporation Validating a graphics pipeline using pre-determined schedules
US9557994B2 (en) 2004-07-13 2017-01-31 Arm Limited Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number
GB0415851D0 (en) * 2004-07-15 2004-08-18 Imagination Tech Ltd Microprocessor output ports and control of instructions provided therefrom
US8624906B2 (en) 2004-09-29 2014-01-07 Nvidia Corporation Method and system for non stalling pipeline instruction fetching from memory
US7475001B2 (en) * 2004-11-08 2009-01-06 Nvidia Corporation Software package definition for PPU enabled system
CA2585157A1 (en) * 2004-11-15 2006-05-26 Nvidia Corporation Video processing
US8687008B2 (en) 2004-11-15 2014-04-01 Nvidia Corporation Latency tolerant system for executing video processing operations
US7620530B2 (en) * 2004-11-16 2009-11-17 Nvidia Corporation System with PPU/GPU architecture
US7565279B2 (en) * 2005-03-07 2009-07-21 Nvidia Corporation Callbacks in asynchronous or parallel execution of a physics simulation
US7933405B2 (en) * 2005-04-08 2011-04-26 Icera Inc. Data access and permute unit
GB2426083A (en) * 2005-05-09 2006-11-15 Sony Comp Entertainment Europe Software emulation of a pipeline processor
US7650266B2 (en) * 2005-05-09 2010-01-19 Nvidia Corporation Method of simulating deformable object using geometrically motivated model
US7543136B1 (en) * 2005-07-13 2009-06-02 Nvidia Corporation System and method for managing divergent threads using synchronization tokens and program instructions that include set-synchronization bits
US7328330B2 (en) * 2005-08-16 2008-02-05 International Business Machines Corporation Queue design supporting dependency checking and issue for SIMD instructions within a general purpose processor
US9092170B1 (en) 2005-10-18 2015-07-28 Nvidia Corporation Method and system for implementing fragment operation processing across a graphics bus interconnect
US20070150904A1 (en) * 2005-11-15 2007-06-28 International Business Machines Corporation Multi-threaded polling in a processing environment
US7873953B1 (en) 2006-01-20 2011-01-18 Altera Corporation High-level language code sequence optimization for implementing programmable chip designs
US8307196B2 (en) * 2006-04-05 2012-11-06 Freescale Semiconductor, Inc. Data processing system having bit exact instructions and methods therefor
US9069547B2 (en) 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
US7627744B2 (en) * 2007-05-10 2009-12-01 Nvidia Corporation External memory accessing DMA request scheduling in IC of parallel processing engines according to completion notification queue occupancy level
DE102007025397B4 (de) * 2007-05-31 2010-07-15 Advanced Micro Devices, Inc., Sunnyvale System mit mehreren Prozessoren und Verfahren zu seinem Betrieb
US8683126B2 (en) * 2007-07-30 2014-03-25 Nvidia Corporation Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory
US20090049323A1 (en) * 2007-08-14 2009-02-19 Imark Robert R Synchronization of processors in a multiprocessor system
US9024957B1 (en) 2007-08-15 2015-05-05 Nvidia Corporation Address independent shader program loading
US8659601B1 (en) 2007-08-15 2014-02-25 Nvidia Corporation Program sequencer for generating indeterminant length shader programs for a graphics processor
US8698819B1 (en) 2007-08-15 2014-04-15 Nvidia Corporation Software assisted shader merging
US8411096B1 (en) 2007-08-15 2013-04-02 Nvidia Corporation Shader program instruction fetch
US9064333B2 (en) 2007-12-17 2015-06-23 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
US8780123B2 (en) * 2007-12-17 2014-07-15 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
CN101216756B (zh) * 2007-12-28 2011-03-23 中国科学院计算技术研究所 一种risc处理器装置及其模拟浮点栈操作的方法
US8923385B2 (en) 2008-05-01 2014-12-30 Nvidia Corporation Rewind-enabled hardware encoder
US8681861B2 (en) * 2008-05-01 2014-03-25 Nvidia Corporation Multistandard hardware video encoder
US8102884B2 (en) * 2008-10-15 2012-01-24 International Business Machines Corporation Direct inter-thread communication buffer that supports software controlled arbitrary vector operand selection in a densely threaded network on a chip
US8489851B2 (en) * 2008-12-11 2013-07-16 Nvidia Corporation Processing of read requests in a memory controller using pre-fetch mechanism
GB0909701D0 (en) * 2009-06-08 2009-07-22 Young Arthur P Testing completion of concurrent logical operations
US20110055838A1 (en) * 2009-08-28 2011-03-03 Moyes William A Optimized thread scheduling via hardware performance monitoring
US9092213B2 (en) 2010-09-24 2015-07-28 Intel Corporation Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation
US20120110303A1 (en) * 2010-10-28 2012-05-03 International Business Machines Corporation Method for Process Synchronization of Embedded Applications in Multi-Core Systems
JP5664198B2 (ja) * 2010-12-14 2015-02-04 富士通株式会社 演算処理装置
US8423343B2 (en) * 2011-01-24 2013-04-16 National Tsing Hua University High-parallelism synchronization approach for multi-core instruction-set simulation
US9411585B2 (en) 2011-09-16 2016-08-09 International Business Machines Corporation Multi-addressable register files and format conversions associated therewith
US9727336B2 (en) * 2011-09-16 2017-08-08 International Business Machines Corporation Fine-grained instruction enablement at sub-function granularity based on an indicated subrange of registers
CN107220029B (zh) 2011-12-23 2020-10-27 英特尔公司 掩码置换指令的装置和方法
CN107391086B (zh) 2011-12-23 2020-12-08 英特尔公司 改进置换指令的装置和方法
CN111831334A (zh) 2011-12-23 2020-10-27 英特尔公司 经改进的插入指令的装置和方法
CN108241504A (zh) 2011-12-23 2018-07-03 英特尔公司 经改进的提取指令的装置和方法
US9946540B2 (en) 2011-12-23 2018-04-17 Intel Corporation Apparatus and method of improved permute instructions with multiple granularities
US20140013082A1 (en) * 2011-12-30 2014-01-09 Intel Corporation Reconfigurable device for repositioning data within a data word
US10289412B2 (en) * 2012-02-09 2019-05-14 Qualcomm Incorporated Floating point constant generation instruction
US20130227238A1 (en) * 2012-02-28 2013-08-29 Thomas VIJVERBERG Device and method for a time and space partitioned based operating system on a multi-core processor
JP5900061B2 (ja) * 2012-03-19 2016-04-06 富士通株式会社 試験方法、試験装置及びプログラム
US9436475B2 (en) * 2012-11-05 2016-09-06 Nvidia Corporation System and method for executing sequential code using a group of threads and single-instruction, multiple-thread processor incorporating the same
US9804839B2 (en) * 2012-12-28 2017-10-31 Intel Corporation Instruction for determining histograms
US20140289502A1 (en) * 2013-03-19 2014-09-25 Apple Inc. Enhanced vector true/false predicate-generating instructions
US9817663B2 (en) * 2013-03-19 2017-11-14 Apple Inc. Enhanced Macroscalar predicate operations
US20140289497A1 (en) * 2013-03-19 2014-09-25 Apple Inc. Enhanced macroscalar comparison operations
US20140289498A1 (en) * 2013-03-19 2014-09-25 Apple Inc. Enhanced macroscalar vector operations
US9477477B2 (en) * 2014-01-22 2016-10-25 Nvidia Corporation System, method, and computer program product for executing casting-arithmetic instructions
US9772849B2 (en) 2014-11-14 2017-09-26 Intel Corporation Four-dimensional morton coordinate conversion processors, methods, systems, and instructions
US9772848B2 (en) 2014-11-14 2017-09-26 Intel Corporation Three-dimensional morton coordinate conversion processors, methods, systems, and instructions
US9772850B2 (en) * 2014-11-14 2017-09-26 Intel Corporation Morton coordinate adjustment processors, methods, systems, and instructions
US11544214B2 (en) 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
US9952865B2 (en) 2015-04-04 2018-04-24 Texas Instruments Incorporated Low energy accelerator processor architecture with short parallel instruction word and non-orthogonal register data file
US9817791B2 (en) 2015-04-04 2017-11-14 Texas Instruments Incorporated Low energy accelerator processor architecture with short parallel instruction word
US11847427B2 (en) * 2015-04-04 2023-12-19 Texas Instruments Incorporated Load store circuit with dedicated single or dual bit shift circuit and opcodes for low power accelerator processor
US20170177354A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Vector-Based Bit Manipulation
US10503474B2 (en) 2015-12-31 2019-12-10 Texas Instruments Incorporated Methods and instructions for 32-bit arithmetic support using 16-bit multiply and 32-bit addition
US10401412B2 (en) 2016-12-16 2019-09-03 Texas Instruments Incorporated Line fault signature analysis
US10564989B2 (en) * 2017-11-28 2020-02-18 Microsoft Technology Licensing Thread independent parametric positioning for rendering elements
US10424041B2 (en) 2017-12-11 2019-09-24 Microsoft Technology Licensing, Llc Thread independent scalable vector graphics operations
EP4095704B1 (en) * 2021-05-26 2023-08-23 STMicroelectronics Application GmbH Processing system, related integrated circuit, device and method
CN115167933B (zh) * 2022-09-08 2022-12-02 深圳市恒运昌真空技术有限公司 一种双处理器设备及其控制方法和处理器

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5975365A (ja) * 1982-10-22 1984-04-28 Hitachi Ltd ベクトル処理装置
JPS60134974A (ja) * 1983-12-23 1985-07-18 Hitachi Ltd ベクトル処理装置
CA1233260A (en) * 1985-03-13 1988-02-23 Chuck H. Ngai High performance parallel vector processor having a modified vector register/element processor configuration
CN85106496A (zh) * 1985-08-29 1987-04-29 日本电气株式会社 向量处理系统
JPH0622035B2 (ja) * 1985-11-13 1994-03-23 株式会社日立製作所 ベクトル処理装置
US4916657A (en) * 1985-12-12 1990-04-10 Alcatel Usa, Corp. Single instruction multiple data (SIMD) cellular array processing apparatus employing multiple state logic for coupling to data buses
US5146592A (en) * 1987-09-14 1992-09-08 Visual Information Technologies, Inc. High speed image processing computer with overlapping windows-div
JPH02291073A (ja) * 1989-04-19 1990-11-30 Koufu Nippon Denki Kk ベクトルデータ処理装置
US5001662A (en) * 1989-04-28 1991-03-19 Apple Computer, Inc. Method and apparatus for multi-gauge computation
US5327541A (en) * 1989-10-13 1994-07-05 Texas Instruments Inc. Global rotation of data in synchronous vector processor
JP2526691B2 (ja) * 1990-03-02 1996-08-21 三菱電機株式会社 プログラマブルコントロ―ラの制御方法
JP2651267B2 (ja) * 1990-07-26 1997-09-10 富士通株式会社 演算処理装置及び演算処理方法
JP2791236B2 (ja) * 1991-07-25 1998-08-27 三菱電機株式会社 プロトコル並列処理装置
US5218211A (en) * 1991-10-23 1993-06-08 The United States Of America As Represented By The Secretary Of Commerce System for sampling the sizes, geometrical distribution, and frequency of small particles accumulating on a solid surface
FR2693287B1 (fr) * 1992-07-03 1994-09-09 Sgs Thomson Microelectronics Sa Procédé pour effectuer des calculs numériques, et unité arithmétique pour la mise en Óoeuvre de ce procédé.
US5361385A (en) * 1992-08-26 1994-11-01 Reuven Bakalash Parallel computing system for volumetric modeling, data processing and visualization
EP0651321B1 (en) * 1993-10-29 2001-11-14 Advanced Micro Devices, Inc. Superscalar microprocessors
US5495588A (en) * 1993-11-18 1996-02-27 Allen-Bradley Company, Inc. Programmable controller having joined relay language processor and general purpose processor
DE69424626T2 (de) * 1993-11-23 2001-01-25 Hewlett Packard Co Parallele Datenverarbeitung in einem Einzelprozessor
DE69519449T2 (de) * 1994-05-05 2001-06-21 Conexant Systems Inc Raumzeigersdatenpfad
US5706478A (en) * 1994-05-23 1998-01-06 Cirrus Logic, Inc. Display list processor for operating in processor and coprocessor modes
US5832290A (en) * 1994-06-13 1998-11-03 Hewlett-Packard Co. Apparatus, systems and method for improving memory bandwidth utilization in vector processing systems
US5513366A (en) * 1994-09-28 1996-04-30 International Business Machines Corporation Method and system for dynamically reconfiguring a register file in a vector processor
US5689653A (en) * 1995-02-06 1997-11-18 Hewlett-Packard Company Vector memory operations
US5706514A (en) * 1996-03-04 1998-01-06 Compaq Computer Corporation Distributed execution of mode mismatched commands in multiprocessor computer systems

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100351781C (zh) * 1999-09-01 2007-11-28 英特尔公司 多线程并行处理器结构中所用的微引擎的存储器引用指令
CN109871235A (zh) * 2006-09-22 2019-06-11 英特尔公司 响应指令执行舍入运算
CN103119579B (zh) * 2010-09-24 2016-08-03 英特尔公司 用于向量整数乘加指令的功能单元
CN103119579A (zh) * 2010-09-24 2013-05-22 英特尔公司 用于向量整数乘加指令的功能单元
CN102012803B (zh) * 2010-11-25 2014-09-10 中国人民解放军国防科学技术大学 支持多宽度simd和多粒度simt的可配置矩阵寄存器单元
CN102012803A (zh) * 2010-11-25 2011-04-13 中国人民解放军国防科学技术大学 支持多宽度simd和多粒度simt的可配置矩阵寄存器单元
CN104126173A (zh) * 2011-12-23 2014-10-29 英特尔公司 不会引起密码应用的算术标志的三输入操作数向量add指令
CN105808497A (zh) * 2014-12-30 2016-07-27 华为技术有限公司 一种数据处理方法
CN105808497B (zh) * 2014-12-30 2018-09-21 华为技术有限公司 一种数据处理方法
CN108984426A (zh) * 2018-08-03 2018-12-11 北京字节跳动网络技术有限公司 用于处理数据的方法和装置
CN108984426B (zh) * 2018-08-03 2021-01-26 北京字节跳动网络技术有限公司 用于处理数据的方法和装置
CN113741567A (zh) * 2021-11-08 2021-12-03 广东省新一代通信与网络创新研究院 矢量加速器及其控制方法、装置
CN113741567B (zh) * 2021-11-08 2022-03-29 广东省新一代通信与网络创新研究院 矢量加速器及其控制方法、装置

Also Published As

Publication number Publication date
JPH10134036A (ja) 1998-05-22
CN1112635C (zh) 2003-06-25
DE19735350B4 (de) 2006-12-07
FR2752630A1 (fr) 1998-02-27
KR100267091B1 (ko) 2000-11-01
TW358313B (en) 1999-05-11
FR2752630B1 (fr) 2004-11-05
TW366455B (en) 1999-08-11
US6058465A (en) 2000-05-02
US5978838A (en) 1999-11-02
KR19980018070A (ko) 1998-06-05
DE19735350A1 (de) 1998-03-12

Similar Documents

Publication Publication Date Title
CN1112635C (zh) 多媒体信号处理器中的单指令多数据处理方法及其装置
CN1117316C (zh) 采用多个向量寄存器组的单指令多数据处理方法及其装置
CN1103961C (zh) 协处理器的数据访问控制装置和方法
CN1135468C (zh) 对存储设备中信号数据字执行数字信号处理的方法和装置
CN1246772C (zh) 处理器
CN1625731A (zh) 具有多种长度指令集体系结构的可配置数据处理器
CN1194292C (zh) 具有改良的指令集体系结构的微处理器
CN1080906C (zh) 一种数据处理系统及其方法
CN1191535C (zh) 处理数据的装置和方法
CN1149469C (zh) 支持分组数据的处理器
CN1153129C (zh) 用于处理器定制操作的设备
CN100342326C (zh) 多线程处理器和操作处理器的方法
CN1656495A (zh) 标量/矢量处理器
CN1126030C (zh) 数据处理装置
CN1584824A (zh) 一种基于cisc结构的微处理器构架及指令实现方式
CN1226323A (zh) 数据处理装置寄存器
CN1103959C (zh) 数据处理装置和操作数据处理装置的方法
CN1188275A (zh) 多媒体信号处理器中的单指令多数据处理方法及其装置
CN1269052C (zh) 支持缩小代码长度的常量还原型处理器
CN1862485A (zh) 数字信号处理器
CN1254740C (zh) 使用协处理器的数据处理
CN1279435C (zh) 数字信号处理器
CN1104679C (zh) 数据处理装置和数据处理方法
CN1226325A (zh) 数据处理系统中的输入操作数控制
CN1226324A (zh) 数据处理系统寄存器控制

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CX01 Expiry of patent term
CX01 Expiry of patent term

Granted publication date: 20030625