CN104937543B - 向量元素旋转和掩码下插入指令 - Google Patents
向量元素旋转和掩码下插入指令 Download PDFInfo
- Publication number
- CN104937543B CN104937543B CN201380071234.9A CN201380071234A CN104937543B CN 104937543 B CN104937543 B CN 104937543B CN 201380071234 A CN201380071234 A CN 201380071234A CN 104937543 B CN104937543 B CN 104937543B
- Authority
- CN
- China
- Prior art keywords
- operand
- register
- instruction
- field
- vector
- 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.)
- Active
Links
- 230000015654 memory Effects 0.000 claims description 78
- 238000000034 method Methods 0.000 claims description 37
- 230000006399 behavior Effects 0.000 claims description 14
- 230000008569 process Effects 0.000 claims description 13
- 238000004891 communication Methods 0.000 claims description 9
- 238000004364 calculation method Methods 0.000 claims description 8
- 230000008859 change Effects 0.000 claims description 5
- 229910002056 binary alloy Inorganic materials 0.000 claims 1
- 238000003860 storage Methods 0.000 description 71
- 238000012545 processing Methods 0.000 description 38
- 230000006870 function Effects 0.000 description 30
- 238000007667 floating Methods 0.000 description 24
- 238000010586 diagram Methods 0.000 description 20
- 238000007792 addition Methods 0.000 description 19
- 238000006243 chemical reaction Methods 0.000 description 16
- 238000004590 computer program Methods 0.000 description 16
- 238000012360 testing method Methods 0.000 description 16
- 230000002159 abnormal effect Effects 0.000 description 12
- 238000013519 translation Methods 0.000 description 11
- 230000014616 translation Effects 0.000 description 11
- 238000005516 engineering process Methods 0.000 description 10
- 238000006073 displacement reaction Methods 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 238000012795 verification Methods 0.000 description 5
- 238000009825 accumulation Methods 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000005291 magnetic effect Effects 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 230000001186 cumulative effect Effects 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000005611 electricity Effects 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 210000003811 finger Anatomy 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- VIKNJXKGJWUCNN-XGXHKTLJSA-N norethisterone Chemical compound O=C1CC[C@@H]2[C@H]3CC[C@](C)([C@](CC4)(O)C#C)[C@@H]4[C@@H]3CCC2=C1 VIKNJXKGJWUCNN-XGXHKTLJSA-N 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 210000003813 thumb Anatomy 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 102100040160 Rabankyrin-5 Human genes 0.000 description 1
- 101710086049 Rabankyrin-5 Proteins 0.000 description 1
- 238000012884 algebraic function Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000037361 pathway Effects 0.000 description 1
- 244000144985 peep Species 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000010977 unit operation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Complex Calculations (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
一种向量元素旋转和掩码下插入指令。所述指令的第二操作数的每个元素在指定方向上被旋转指定的位数。针对所述指令的第三操作数中被设置为1的每个位,所述第二操作数中的已旋转元素的对应位替换所述指令的第一操作数中的对应位。
Description
背景技术
一个或多个方面一般地涉及计算环境内的处理,更具体地说,涉及此类环境内的向量处理。
计算环境内的处理包括控制一个或多个中央处理单元(CPU)的操作。一般而言,中央处理单元的操作通过存储装置中的指令控制。指令可具有不同的格式并且通常指定要在执行多种操作时使用的寄存器。
取决于中央处理单元的架构,可使用多种类型的寄存器,包括例如通用寄存器、专用寄存器、浮点寄存器和/或向量寄存器。不同类型的寄存器可与不同类型的指令一起使用。例如,浮点寄存器存储要由浮点指令使用的浮点数;向量寄存器保存用于由包括向量指令的单指令多数据(SMID)指令执行的向量处理的数据。
发明内容
通过提供用于执行机器指令的计算机程序产品,克服了现有技术的缺点并提供了优点。所述计算机程序产品包括计算机可读存储介质,其可被处理电路读取并且存储由所述处理电路执行以执行一种方法的指令。所述方法例如包括:由处理器获得用于执行的机器指令,所述机器指令被定义为用于根据计算机架构的计算机执行,所述机器指令包括:至少一个操作码字段,其提供操作码,所述操作码标识向量元素旋转和掩码下插入操作;第一寄存器字段,其被用于指定第一寄存器,所述第一寄存器包括第一操作数;第二寄存器字段,其被用于指定第二寄存器,所述第二寄存器包括第二操作数;第三寄存器字段,其被用于指定第三寄存器,所述第三寄存器包括第三操作数;以及执行所述机器指令,所述执行包括:在选定方向上将所述第二操作数的一个或多个元素旋转指定的旋转量;检查所述第三操作数是否包含具有特定值的一个或多个数据单元;以及基于所述第三操作数包含具有所述特定值的一个或多个数据单元,使用所述第二操作数中已被旋转的对应数据单元的一个或多个值替换所述第一操作数中的对应数据单元的一个或多个值。
此处还描述并要求保护与一个或多个方面相关的方法和系统。进一步地,此处还描述并可以要求保护与一个或多个方面相关的服务。
通过一个或多个方面的技术实现其他特征和优点。其他实施例和方面在此做出详细描述并且被视为权利要求的一部分。
附图说明
在说明书结尾处的权利要求中作为实例具体指出并明确要求保护一个或多个方面。当结合附图阅读下面的详细说明时,上述及其他目标、特征和优点是显而易见的,这些附图是:
图1示出结合和使用一个或多个方面的计算环境的一个实例;
图2A示出结合和使用一个或多个方面的计算环境的另一实例;
图2B示出图2A的存储器的进一步细节;
图3示出寄存器文件的一个实例;
图4A示出向量浮点测试数据类立即指令的格式的一个实例;
图4B示出图4A的向量浮点测试数据类立即指令的第三操作数的位值的一个实例;
图4C示出与图4A的向量浮点测试数据类立即指令关联的逻辑的一个实施例;
图4D示出图4A的向量浮点测试数据类立即指令的执行的框图的一个实例;
图4E示出二进制浮点数据的多种类的定义的一个实例;
图5A示出向量校验和指令的格式的一个实例;
图5B示出与图5A的向量校验和指令关联的逻辑的一个实施例;
图5C示出图5A的向量校验和指令的执行的框图的一个实例;
图6A示出向量伽罗瓦域乘法求和与累加指令的格式的一个实例;
图6B示出与图6A的向量伽罗瓦域乘法求和与累加指令关联的逻辑的一个实施例;
图6C示出图6A的向量伽罗瓦域乘法求和与累加指令的执行的框图的一个实例;
图7A示出向量生成掩码指令的格式的一个实例;
图7B示出与图7A的向量生成掩码指令关联的逻辑的一个实施例;
图7C示出图7A的向量生成掩码指令的执行的框图的一个实例;
图8A示出向量元素旋转和掩码下插入指令的一个实例;
图8B示出与图8A的向量元素旋转和掩码下插入指令关联的逻辑的一个实施例;
图8C示出图8A的向量元素旋转和掩码下插入指令的执行的框图的一个实例;
图9A示出向量异常码的一个实例;
图9B示出设置图9A的向量异常码的逻辑的一个实施例;
图10示出结合一个或多个方面的计算机程序产品的一个实施例;
图11示出主计算机系统的一个实施例;
图12示出计算机系统的进一步实例;
图13示出包括计算机网络的计算机系统的另一实例;
图14示出计算机系统的各种元素的一个实施例;
图15A示出图14的计算机系统的执行单元的一个实施例;
图15B示出图14的计算机系统的分支单元的一个实施例;
图15C示出图14的计算机系统的加载/存储单元的一个实施例;以及
图16示出仿真主计算机系统的一个实施例。
具体实施方式
根据一个或多个方面,提供了包括多种向量指令以及向量异常处理的向量工具。此处描述的每个指令是使用一个或多个向量寄存器(在此也称为向量)的单指令多数据(SIMD)指令。向量寄存器例如是处理器寄存器(也称为硬件寄存器),它是作为中央处理单元(CPU)或其他处理器的一部分可用的少量存储(例如,非主存储器)。每个向量寄存器包含具有一个或多个元素的向量操作数,元素的长度例如为1、2、4或8个字节。在其他实施例中,元素能够具有其他大小,并且向量指令无需为SIMD指令。
参考图1描述结合和使用一个或多个方面的计算环境的一个实施例。计算环境100例如包括处理器102(例如,中央处理单元)、存储器104(例如,主存储器),以及一个或多个输入/输出(I/O)设备和/或接口106,这些元件例如经由一个或多个总线108和/或其他连接相互耦接。
在一个实例中,处理器102基于国际商业机器公司提供的z/Architecture,并且是诸如System z服务器之类的服务器的一部分,该服务器也由国际商业机器公司提供并实现z/Architecture。z/Architecture的一个实施例在标题为“z/Architecture Principlesof Operation(z/Architecture操作原理,编号为SA22-7832-09的出版物,第十版,2012年9月)的出版物中描述。在一个实例中,执行诸如z/OS的操作系统的处理器也由国际商业机器公司提供。 和是位于美国纽约阿蒙克的国际商业机器公司的注册商标。此处使用的其他名称可以是国际商业机器公司或其他公司的注册商标、商标或产品名。
在进一步实施例中,处理器102基于国际商业机器公司提供的PowerArchitecture。Power Architecture的一个实施例在“Power ISATM版本2.06,修订B(国际商业机器公司,2010年7月23日)”中描述。POWER是国际商业机器公司的注册商标。
在另一实施例中,处理器102基于英特尔公司提供的Intel架构。Intel架构的一个实施例在“64and IA-32Architectures Developer’s Manual:Vol.2B,Instructions Set Reference,A-L(64和IA-32架构开发者指南:卷2B,指令集参考,A-L,订单号:253666-045US,2013年1月)”和“64and IA-32ArchitecturesDeveloper’s Manual:Vol.2B,Instructions Set Reference,M-Z(64和IA-32架构开发者指南:卷2B,指令集参考,M-Z,订单号:253667-045US,2013年1月)”中描述。是位于加利福尼亚州圣克拉拉的英特尔公司的注册商标。
参考图2A描述结合和使用一个或多个方面的计算环境的另一实施例。在该实例中,计算环境200例如包括本机中央处理单元202、存储器204,以及一个或多个输入/输出设备和/或接口206,这些元件例如经由一个或多个总线208和/或其他连接相互耦接。例如,计算环境200可以包括位于纽约阿蒙克的国际商业机器公司提供的PowerPC处理器、pSeries服务器或xSeries服务器;位于加利福尼亚帕洛阿尔托的惠普公司提供的带有IntelItanium II处理器的HP Superdome;和/或其他基于国际商业机器公司、惠普公司、英特尔、Oracle或其他公司提供的架构的机器。
本机中央处理单元202包括一个或多个本机寄存器210,例如在环境内的处理期间使用的一个或多个通用寄存器和/或一个或多个专用寄存器。这些寄存器包括表示环境在任何特定时刻的状态的信息。
此外,本机中央处理单元202执行存储在存储器204中的指令和代码。在一个特定实例中,中央处理单元执行存储在存储器204中的仿真器代码212。该代码使得在一个架构配置中的处理环境能够仿真另一架构。例如,仿真器代码212允许基于z/Architecture以外的架构(例如PowerPC处理器、pSeries服务器、xSeries服务器、HP Superdome服务器等)的机器仿真z/Architecture并且执行基于z/Architecture开发的软件和指令。
参考图2B描述与仿真器代码212相关的进一步细节。存储在存储器204中的来宾指令250包括被开发为在本机CPU 202的架构以外的架构中执行的软件指令(例如,与机器指令相关联)。例如,来宾指令250可能已被设计为在z/Architecture处理器102上执行,但是实际上,在例如可以是Intel Itanium II处理器的本机CPU 202上被仿真。在一个实例中,仿真器代码212包括指令获取例程252以从存储器204获得一个或多个来宾指令250,以及可选地为所获得的指令提供本地缓冲。它还包括指令转换例程254以确定已被获得的来宾指令的类型以及将来宾指令转换成一个或多个对应的本机指令256。该转换例如包括标识要由来宾指令执行的功能,以及选择执行此功能的本机指令(多个)。
进一步地,仿真器212包括仿真控制例程260以导致执行本机指令。仿真控制例程260可使本机CPU 202执行仿真一个或多个之前获得的来宾指令的本机指令的例程,并且在此类执行结束时,将控制返回到指令获取例程以仿真获得下一来宾指令或下一组来宾指令。本机指令256的执行可包括将数据从存储器204加载到寄存器内;将数据从寄存器存储回存储器;或执行转换例程所确定的某些类型的算术或逻辑运算。
每个例程例如通过存储在存储器中并由本机中央处理单元202执行的软件实现。在其他实例中,一个或多个例程或操作通过固件、硬件、软件或它们的某种组合实现。被仿真的处理器的寄存器可使用本机CPU的寄存器210或使用存储器204中的位置进行仿真。在多个实施例中,来宾指令250、本机指令256和仿真器代码212可驻留在同一存储器中,也可分布在不同的存储设备之间。
如此处所用,固件例如包括处理器的微代码、毫码和/或宏代码。它例如包括在较高级机器代码的实现中使用的硬件级指令和/或数据结构。在一个实施例中,它例如包括专用代码,此专用代码典型地作为微代码(包括特定于底层硬件的可信软件或微代码)提供并且控制对系统硬件的操作系统访问。
在一个实例中,被获得、转换和执行的来宾指令250是此处描述的指令。具有一种架构(例如,z/Architecture)的指令被从存储器取回,被转换,并且被表示为具有另一种架构(例如,PowerPC、pSeries、xSeries、Intel等)的一系列本机指令256。这些本机指令然后被执行。
在一个实施例中,此处描述的指令是作为向量工具的一部分的向量指令。向量工具例如提供具有从1到16个元素的固定大小的向量。每个向量包括被工具中定义的向量指令操作的数据。在一个实施例中,如果向量包括多个元素,则每个元素与其他元素并行地被处理。直到所有元素的处理完成时才发生指令完成。在其他实施例中,元素被部分地并行处理和/或按顺序处理。
向量指令可作为多种架构的一部分被实现,这些架构包括但不限于z/Architecture、Power、x86、IA-32、IA-64等。尽管此处描述的实施例针对z/Architecture,但是此处描述的向量指令以及一个或多个其他方面可基于许多其他架构。z/Architecture只是一个实例。
在其中向量工具作为z/Architecture的一部分被实现的一个实施例中,为了使用向量寄存器和指令,指定的控制寄存器(例如,控制寄存器0)中的向量使能控制和寄存器控制例如被设置为1。如果安装向量工具并执行向量指令而不设置使能控制,则识别到数据异常。如果未安装向量工具并执行向量指令,则识别到操作异常。
在一个实施例中,存在32个向量寄存器,并且其他类型的寄存器可被映射到四分之一的所述向量寄存器。例如,如图3所示,寄存器文件300包括32个向量寄存器302,并且每个寄存器的长度为128位。十六个浮点寄存器304(长度为64位)可覆盖向量寄存器。因此,作为一个实例,当浮点寄存器2被修改时,向量寄存器2也被修改。其他类型的寄存器的其他映射也是可能的。
向量数据例如以与其他数据格式相同的从左到右的顺序出现在存储装置中。数据格式的编号为0-7的位构成存储装置中的最左边(编号最低)字节位置中的字节,位8-15形成下一顺序位置中的字节,以此类推。在进一步实例中,向量数据可以以另一顺序(例如从右到左)出现在存储装置中。
此处描述的每个向量指令具有多个字段,并且一个或多个字段具有与其关联的下标号。与指令的字段关联的下标号表示该字段适用的操作数。例如,与向量寄存器V1关联的下标号1表示V1中的寄存器包括第一操作数,以此类推。寄存器操作数的长度为1个寄存器,该长度例如为128位。
进一步地,使用向量工具提供的许多向量指令具有包括指定位的字段。该字段(也称为寄存器扩展位或RXB)包括每个向量寄存器命名的操作数的最高位。寄存器命名(register designation)的未被指令指定的位将被保留并被设置为0。最高位例如被串接到四位寄存器命名的左侧以创建五位向量寄存器命名。
在一个实例中,RXB字段包括四个位(例如,位0-3),这些位的定义如下:
0–指令的第一向量寄存器命名(例如,在位8-11中)的最高位。
1-指令的第二向量寄存器命名(例如,在位12-15中)的最高位(如果有)。
2-指令的第三向量寄存器命名(例如,在位16-19中)的最高位(如果有)。
3-指令的第四向量寄存器命名(例如,在位32-35中)的最高位(如果有)。
每个位例如通过汇编器设置为0或1,具体取决于寄存器编号。例如,对于寄存器0-15,位被设置为0;对于寄存器16-31,位被设置为1,等等。
在一个实施例中,每个RXB位都是包括一个或多个向量寄存器的指令中的特定位置的扩展位。例如,在一个或多个向量指令中,RXB的位0是位置8-11的扩展位,该扩展位例如被分配给V1;RXB的位1是位置12-15的扩展位,该扩展位例如被分配给V2;以此类推。在另一实施例中,RXB字段包括附加位,并且一个以上的位被用作每个向量或位置的扩展。
根据包括RXB字段的一方面提供的一个指令为向量浮点测试数据类立即(VFTCI)指令,该指令的一个实例在图4A中示出。在一个实例中,向量浮点测试数据类立即指令400包括:操作码字段402a(例如,位0-7)、402b(例如,位40-47),其指示向量浮点测试数据类立即操作;第一向量寄存器字段404(例如,位8-11),其被用于指定第一向量寄存器(V1);第二向量寄存器字段406(例如,位12-15),其被用于指定第二向量寄存器(V2);立即字段(I3)408(例如,位16-27),其包括位掩码;第一掩码字段(M5)410(例如,位28-31);第二掩码字段(M4)412(例如,位32-35);以及RXB字段414(例如,位36-39)。在一个实例中,字段404-414中的每一个都与操作码字段(多个)分离并且独立于操作码字段(多个)。进一步地,在一个实施例中,它们相互分离和独立;但是,在其他实施例中,一个以上字段可进行组合。有关这些字段的使用的进一步信息在下面进行描述。
在一个实例中,由操作码字段402a指定的操作码的选定位(例如,前两位)指定指令的长度。在该特定实例中,选定位指示长度为三个半字。进一步地,指令的格式为具有扩展操作码字段的向量寄存器和立即操作。每个向量(V)字段连同其由RXB指定的对应扩展位一起指定向量寄存器。具体而言,对于向量寄存器,包含操作数的寄存器例如使用加上其对应的寄存器扩展位(RXB)作为最高位的寄存器字段的四位字段进行指定。例如,如果四位字段为0110,并且扩展位为0,则五位字段00110指示寄存器编号6。
进一步地,在VFTCI指令的一个实施例中,V1404和V2406针对指令指定分别包括第一操作数和第二操作数的向量寄存器。此外,I3408包括具有多个位的位掩码,并且每个位被用于表示二进制浮点元素类和符号(正或负),如下面进一步详细描述的那样。
在另一实施例中,例如,位掩码可在通用寄存器中提供,在存储器中提供,在向量寄存器的元素中(根据元素而存在差异)提供,通过地址计算提供。可作为指令的显式操作数或作为隐式操作数或输入而包括位掩码。
M5字段410例如具有四个位0-3,并且例如在位0中指定单元素控制(S)。如果位0被设置为1,则操作仅针对向量中的零索引元素发生。第一操作数向量中的所有其他元素的位位置是不可预测的。如果位0被设置为0,则针对向量中的所有元素发生操作。
M4字段412例如被用于指定指令的第二操作数中的浮点数的大小。在一个实例中,该字段被设置为3,从而指示双精度二进制浮点数。其他实例也是可能的。
在执行向量浮点测试数据类立即指令的一个实施例时,检查第二操作数的浮点元素(多个)的类和符号以从第三操作数选择一个或多个位。如果设置选定位,则第一操作数中的对应元素的所有位位置被设置为1;否则,它们被设置为0。也就是说,如果第二操作数的元素中包含的浮点数的类/符号与第三操作数中的已设置位(即,位被设置为例如1)匹配,则对应于第二操作数的元素的第一操作数的元素被设置为1。在一个实例中,所有操作数元素包含长格式BFP(二进制浮点)数。
如此处所指示的,第三操作数的12个位(指令本文的位16-27)被用于指定BFP数据类和符号的12个组合。在一个实例中,如图4B所示,BFP操作数元素被分为六类430:0、规范数、非规范数、无限大、静默NaN(非数值)、信令NaN,并且每个类具有与其关联的符号432(正或负)。因此,例如,I3的位0指定具有正号的0类,位1指定具有负号的0类等。
一个或多个第三操作数位可被设置为1。进一步地,在一个实施例中,指令可同时对一个或多个元素执行操作。
在不导致IEEE异常的情况下检查包括SNaN(信令NaN)和QNaN(静默NaN)的操作数元素。
得到的所有元素的概要条件码:
0对于所有元素,选定位为1(匹配)
1对于至少一个元素,而非所有元素,选定位为1(当S位为0时)
2--
3对于所有元素,选定位为0(不匹配)
IEEE异常:无
程序异常:
*具有数据异常码(DXC)FE的数据,向量指令,指示未启用向量工具
*操作(如果未安装用于z/Architecture的向量工具)
*规范
*事务约束
编程注释:
1.该指令提供一种在没有异常或设置IEEE标志的风险的情况下测试操作数元素的方式。
2.当设置了S位时,不使用条件码1。
参考图4C和4D描述与向量浮点测试数据类立即指令相关的一个实施例的进一步细节。具体而言,图4C示出与由处理器(例如,CPU)执行的向量浮点测试数据类立即指令关联的逻辑的一个实施例,图4D是示出向量浮点测试数据类立即指令的执行的框图的一个实例。
参考图4C,首先,将被称为元素索引(Ei)的变量初始化为0(步骤450)。然后,从指令的第二操作数(例如,从被存储在V2指定的寄存器中的操作数)提取元素Ei中的值(在此情况下为元素0)(步骤452)。该值(其是长格式二进制浮点值)被转换为型数以获得第二操作数的浮点元素的类和符号,如下所述(步骤454)。在一个实例中,浮点数453的大小被输入到转换逻辑。所获得的类和符号与特定的类/符号位关联,如参考图4B所述。例如,如果转换指示浮点数为正的规范数,则位2与该浮点数关联。
在转换之后,检验第三操作数中与基于转换确定的特定位对应的位(被称为选定位)(步骤456)。如果选定位被设置(询问458),则第一操作数中与元素(Ei)对应的元素被设置为等于全1(步骤460);否则,第一操作数中的该元素被设置为等于0(步骤462)。例如,如果元素0中的浮点数的转换指示正的规范数,则位2与该数关联。因此,检验第三操作数的位2,并且如果被设置为1,则第一操作数的元素0被设置为全1。
之后,判定Ei是否等于第二操作数的元素的最大数量(询问464)。如果否,则Ei例如递增1(步骤466),然后处理继续执行步骤452。否则,如果Ei等于元素的最大数量,则生成概要条件码(步骤468)。概要条件码概述第二操作数的所有元素的处理。例如,如果对于所有元素,选定位为1(匹配),则得到的条件码为0。另一方面,如果对于至少一个元素(而非所有元素),选定位为1(当S位不为0时),则条件码为1,并且如果对于所有元素,选定位为0(不匹配),则条件码为3。
上述处理以图形方式在图4D的框图中示出。如图所示,向量寄存器480包括多个元素482a-482n,每个元素包括浮点数。浮点数483a-483n的每个浮点数和大小被输入到转换为型数逻辑484a-484n,并且输出是表示浮点数的类/符号的特定位。然后,检验每个掩码486a-486b中对应于每个特定位的选定位。取决于选定位是否被设置,设置向量寄存器488中的第一操作数。例如,如果对于第二操作数的元素0,选定位被设置,则将第一操作数的元素490a设置为全1。类似地,如果第二操作数的元素1的选定位未被设置(例如,被设置为0),则将第一操作数的元素490b设置为0等。
现在描述转换为型数逻辑的一个实施例的进一步细节。首先,将是标准IEEE二进制浮点数的浮点数转换为三部分:符号、指数(8位)+127,以及尾数(fraction)(32位),如所公知的那样。然后,检验这三部分的值以确定类和符号,如图4E所示。例如,符号是符号部的值,并且类(也就是图4E中的实体)基于指数和尾数(图4E中的单元位是尾数的隐式位)的值。作为一个实例,如果指数和尾数(包括单元位)的值为0,则类为0,如果符号部为正,则符号为正。这样,位0(图4B)表示该浮点数的类/符号。
上面描述了测试向量中的元素的浮点数类的指令和设置得到的位掩码的一个实施例。向量浮点测试数据类立即指令具有立即字段,该字段中的每个位表示要检测的浮点数的类。输入向量的每个浮点元素被测试以查看值是否属于由该指令指定的任一类。如果浮点元素属于其中一类,则输出向量的对应元素的位位置被设置为1。这提供了在不导致任何异常或中断的情况下确定有关二进制浮点数的某些属性(例如,类和符号)的技术。
在另一实施例中,可通过以下方式执行测试:检验第三操作数中的哪些位被设置(例如,被设置为1),然后判定第二操作数的一个或多个元素的类/符号是否与已设置位中的一个相同。然后基于比较设置第一操作数。
在另一方面,提供向量校验和指令,该指令的一个实例在图5A中示出。在一个实例中,向量校验和指令500包括:操作码字段502a(例如,位0-7)、502b(例如,位40-47),其指示向量校验和操作;第一向量寄存器字段504(例如,位8-11),其被用于指定第一向量寄存器(V1);第二向量寄存器字段506(例如,位12-15),其被用于指定第二向量寄存器(V2);第三向量寄存器字段508(例如,位16-19),其被用于指定第三向量寄存器(V3);以及RXB字段510(例如,位36-39)。在一个实例中,字段504-510中的每一个都与操作码字段(多个)分离并且独立于操作码字段(多个)。进一步地,在一个实施例中,它们相互分离和独立;但是,在其他实施例中,一个以上字段可进行组合。
在另一实施例中,第三向量寄存器字段不作为指令的显式操作数被包括在内,相反地,它是隐式操作数或输入。进一步地,在操作数中提供的值可通过其他方式提供,例如在通用寄存器中提供,在存储器中提供,作为地址计算提供等。
在再一实施例中,根本不提供显式或隐式的第三操作数。
在一个实例中,由操作码字段502a指定的操作码的选定位(例如,前两位)指定指令的长度。在该特定实例中,选定位指示长度为三个半字。进一步地,指令的格式为具有扩展操作码字段的向量寄存器和寄存器操作。每个向量(V)字段连同其由RXB指定的对应扩展位一起指定向量寄存器。具体而言,对于向量寄存器,包含操作数的寄存器例如使用加上其对应的寄存器扩展位(RXB)作为最高位的寄存器字段的四位字段进行指定。
在执行向量校验和指令的一个实施例时,来自第二操作数的元素(例如,单字大小的元素)连同第三操作数的选定元素(例如,第三操作数的字1中的元素)一起被逐个加在一起。(在另一实施例中,第三操作数的选定元素的相加是可选的)。总和被放入第一操作数的选定位置(例如,字1)内。0被置于第一操作数的其他字元素(例如,字元素0,以及2-3)内。单字大小的元素全部被视为32位无符号二进制整数。在加上每个元素之后,来自总和的进位(例如,位位置0)例如被加到在第一操作数的字元素1中的结果的位位置31。
条件码:代码保持不变。
程序异常:
*具有数据异常码(DXC)FE的数据,向量指令,指示未启用向量工具
*操作(如果未安装用于z/Architecture的向量工具)
*事务约束
编程注释:
1.第三操作数的内容将在检验和计算算法的开头包含0。
2.16位校验和例如被用于TCP/IP应用。下面的程序可在已计算32位校验和之后执行:
VERLLF V2,V1,16(0) (VERLLF-向量元素旋转左逻辑-4字节值)
VAF V2,V1,V2 (VAF-向量加法-4字节值)
元素2中的半字包含16位校验和。
参考图5B和5C描述有关向量校验和指令的进一步细节。在一个实例中,图5B示出在执行向量校验和指令时由处理器执行的逻辑的一个实施例,图5C示出执行向量校验和指令的一个实例的框图。
参考图5B,首先,将第一操作数(OP1)的元素索引(Ey)例如设置为1,从而指示第一操作数的元素1(步骤530)。类似地,将第三操作数(OP3)的元素索引(Ex)例如设置为1,从而指示第三操作数的元素1(步骤532)。然后,将元素索引(Ei)设置为等于0,并且元素索引(Ey)处的元素(即,该实例中的元素1)被初始化为0(步骤534)。在进一步实施例中,Ex和Ey可被设置为任何有效的元素索引。
执行端回进位(EAC,end around carry)加法,其中OP1(Ey)=OP1(Ey)+OP2(Ei)+OP2(Ei+1)(步骤536)。这样,输出向量(OP1)的元素1被设置为等于该元素的内容加上第二操作数(OP2)的元素0中的值和第二操作数的元素1中的值。通过端回进位加法,执行加法操作,并且来自加法的任何进位被加回总和以产生新的总和。
在另一实施例中,不执行上述加法,而是执行以下操作:定义临时累加器值并将其初始化为0,然后一次加上一个元素。作为另一实施例,所有字被并行地相加,并且不存在临时累加器。其他变型也是可能的。
之后,判定是否有其他元素要被加到第二操作数中(询问538)。例如,Ei-2是否小于第二操作数的元素数。如果存在更多要被相加的第二操作数元素,则Ei例如递增2(步骤540),然后处理继续执行步骤536。
在跨第二操作数加上元素之后,结果被加到第三操作数中的值。例如,执行第一操作数的元素(Ey)(其是跨所有第二操作数元素的EAC加法的总和)与第三操作数(OP3)的元素(Ex)中的值的端回进位加法(即,EAC ADD OP1(Ey)+OP3(Ex))(步骤542)。这在图5C中以图形的形式示出。
如图5C所示,第二操作数550包括多个元素552a-552n,并且这些元素连同第三操作数560的字1(562)中的元素一起被逐个相加在一起。结果被放入第一操作数570的元素1(572)。这在数学上由以下等式示出:Ey=Ex+Ei的总和,其中i=0到n,并且加法为端回进位加法。
上面描述了跨向量寄存器的元素执行校验和,而非执行莱恩算术(lanearithmetic)的向量校验和指令的一个实施例。在一个实施例中,向量校验和指令通过借助端回进位加法执行跨越求和(sum-across)来执行校验和。在一个实例中,向量校验和指令从向量寄存器获取四个4字节整数元素并将它们加在一起。来自加法的任何进位都被加回总和。4字节总和被加到另一操作数中的4字节元素,然后被保存在再一向量寄存器中(例如,向量寄存器的低阶4字节元素,且0被存储在该向量寄存器的高阶元素中)。
在另一实施例中,不使用进一步的向量寄存器或另一寄存器来保存值,而是使用其他寄存器(即,操作数)之一作为累加器。
所提供的校验和可被用于保持数据完整性。校验和经常被应用于数据并且在嘈杂信道上发送以检验所接收到的数据是否正确。在该实例中,如此处所述,通过将连续的4字节整数加在一起来计算校验和。如果具有来自整数算术运算的进位,则该进位(额外的1)被加到当前和(running sum)中。
尽管此处描述了校验和,但是类似的技术也可被用于其他端回进位加法。
根据一个方面提供的另一指令为向量伽罗瓦域乘法求和与累加(VGFMA)指令,该指令的一个实例在图6A中示出。在一个例子中,向量伽罗瓦域乘法求和与累加指令600包括:操作码字段602a(例如,位0-7)、602b(例如,位40-47),其指示向量伽罗瓦域乘法求和与累加操作;第一向量字段604(例如,位8-11),其被用于指定第一向量寄存器(V1);第二向量寄存器字段606(例如,位12-15),其被用于指定第二向量寄存器(V2);第三向量寄存器字段608(例如,位16-19),其被用于指定第三向量寄存器(V3);掩码字段(M5)610(例如,位20-23);第四向量寄存器字段612(例如,位32-35),其被用于指定第四向量寄存器(V4);以及RXB字段614(例如,位36-39)。在一个例子中,字段604-614中的每一个都与操作码字段(多个)分离并且独立于操作码字段(多个)。此外,在一个实施例中,它们相互分离和独立;但是,在其他实施例中,一个以上字段可进行组合。
在一个实例中,由操作码字段602a指定的操作码的选定位(例如,前两位)指定指令的长度。在该特定实例中,选定位指示长度为三个半字。此外,指令的格式为具有扩展操作码字段的向量寄存器和寄存器操作。每个向量(V)字段连同其由RXB指定的对应扩展位一起指定向量寄存器。具体而言,对于向量寄存器,包含操作数的寄存器例如使用加上其对应的寄存器扩展位(RXB)作为最高位的寄存器字段的四位字段进行指定。
M5字段610例如具有四个位0-3,并且指定元素大小(ES)控制。元素大小控制指定向量寄存器操作数2和3中的元素的大小;第一和第四操作数中的元素是ES控制所指定的元素大小的两倍。例如,M5中的值0指示单字节大小的元素;1指示半字;2指示单字;以及3指示双字。
在执行向量伽罗瓦域乘法求和与累加指令的一个实施例时,第二操作数的每个元素在伽罗瓦域(即,具有有限数量元素的有限域)中与第三操作数的对应元素相乘。也就是说,使用无进位乘法使第二操作数的每个元素与第三操作数的对应元素相乘。在一个实例中,伽罗瓦域为二阶。该乘法类似于标准的二进制乘法,它并非将移位后的被乘数相加,而是异或(XOR)。例如,得到的奇-偶双元素大小的乘积对相互进行异或,并且与第四操作数的对应元素(例如,双宽元素)进行异或。结果被例如放入第一操作数的双宽元素。
条件码:代码保持不变。
程序异常:
*具有数据异常码(DXC)FE的数据,向量指令,指示未启用向量工具
*操作(如果未安装用于z/Architecture的向量工具)
*规范
*事务约束
在另一实施例中,所述指令可包括一个或更少的操作数。例如,要被异或的值位于第一操作数中,而非位于第四操作数中,第一操作数也将包括结果。其他变型也是可能的。
参考图6B和6C描述有关向量伽罗瓦域乘法求和与累加指令的执行的一个实施例的进一步细节。在一个实例中,图6B示出由处理器执行以执行向量伽罗瓦域乘法求和与累加指令的逻辑的一个实施例,图6C是示出逻辑执行的框图的一个实例。
参考图6B,首先,从第二操作数(OP2)、第三操作数(OP3)和第四操作数(OP4)提取奇/偶对(步骤630),并且执行无进位乘法求和累加功能(步骤632)。例如,当在幂为2的伽罗瓦域中执行运算时,无进位乘法是移位或XOR(异或),它有效地忽略了任何进位。结果被放入第一操作数(OP1)内(步骤634),并且判定是否存在更多要被提取的对(询问636)。如果存在更多对,则处理继续执行步骤630;否则,处理完成(步骤638)。在一个例子中,元素大小631到步骤630-634的输入。
参考图6C描述步骤632的无进位乘法求和累加功能的进一步细节。如图所示,从第二操作数650提取一对操作数OP2H 652a、OP2L 652b。此外,从第三操作数660提取操作数对OP3H 662a、OP3L 662b,从第四操作数670提取操作数对OP4H 672a和OP4L 672b。操作数OP2H 652a通过无进位乘法与操作数OP3H 662a相乘,然后提供结果H 680a。类似地,OP2L652b使用无进位乘法与操作数OP3L 662b相乘,然后提供结果L 680b。接着,结果H 680a与结果L 680b进行异或运算,所得结果与操作数OP4H 672a和OP4L 672b进行异或运算,接着将结果放入OP1H690a、OP1L 690b内。
此处描述了执行无进位乘法运算,然后执行最后的异或运算以创建累积和的向量指令。此技术可用于在二阶有限域中执行运算的错误检测代码和密码学的多个方面。
在一个实例中,所述指令针对向量寄存器的多个元素执行无进位乘法运算以获取总和。此外,所述指令针对总和执行最终的异或以产生累加和。当被执行时,所述指令在伽罗瓦域中将第二向量和第三向量中的对应元素进行相乘,并且对移位后的被乘数执行异或。每个双宽乘积相互进行异或,所得结果与第一向量的双宽对应元素进行异或。结果被存储在第一向量寄存器中。尽管上面描述了双字元素,但是也可使用具有其他元素大小的单字大小的元素。所述指令能够针对多个不同的元素大小执行操作。
根据一个方面提供的另一指令为向量生成掩码(VGM)指令,参考图7A描述该指令的一个实例。在一个实例中,向量生成掩码指令700包括:操作码字段702a(例如,位0-7)、702b(例如,位40-47),其指示向量生成掩码操作;第一向量寄存器字段704(例如,位8-11),其被用于指定第一向量寄存器(V1);第一立即字段I2706(例如,位16-24),其被用于指定第一值;第二立即字段(I3)708(例如,位24-32),其被用于指定第二值;掩码字段(M4)710(例如,位32-35);以及RXB字段712(例如,位36-39)。在一个实例中,字段704-712中的每一个都与操作码字段(多个)分离并且独立于操作码字段(多个)。此外,在一个实施例中,它们相互分离和独立;但是,在其他实施例中,一个以上字段可进行组合。
在另一实施例中,第一值和/或第二值可以在通用寄存器中提供,在存储器中提供,在向量寄存器的元素中(根据元素而存在差异)提供,通过地址计算提供。它可作为指令的显式操作数或作为隐式操作数或输入而被包括。
在一个实例中,由操作码字段702a指定的操作码的选定位(例如,前两位)指定指令的长度。在该特定实例中,选定位指示长度为三个半字。此外,指令的格式为具有扩展操作码字段的向量寄存器和立即操作。每个向量(V)字段连同其由RXB指定的对应扩展位一起指定向量寄存器。具体而言,对于向量寄存器,包含操作数的寄存器例如使用加上其对应的寄存器扩展位(RXB)作为最高位的寄存器字段的四位字段进行指定。
M4字段例如指定元素大小控制(ES)。元素大小控制指定向量寄存器操作数中的元素的大小。在一个例子中,M4字段的位0指定单字节;位1指定半字(例如,2字节);位2指定单字(例如,4字节;即,全字);以及位3指定双字。
在执行向量生成掩码指令的一个实施例时,对于第一操作数中的每个元素,生成位掩码。所述掩码包括被设置为1的位,这些位从例如I2中的无符号整数值指定的位位置开始,到例如I3中的无符号整数值指定的位位置结束。所有其他位位置被设置为0。在一个实例中,仅从I2和I3字段使用表示指定的元素大小的所有位位置所需的位数;其他位被忽略。如果I2字段中的位位置大于I3字段中的位位置,则位的范围在针对指定元素大小的最大位位置处绕回(wrap)。例如,假设单字节大小的元素,如果I2=1且I3=6,,则得到的掩码为X︳7E︳或B︳01111110︳。但是,如果I2=6且I3=1,,则得到的掩码为X︳81︳或b︳10000001︳。
条件码:代码保持不变。
程序异常:
*具有数据异常码(DXC)FE的数据,向量指令,指示未启用向量工具
*操作(如果未安装用于z/Architecture的向量工具)
*规范
*事务约束
参考图7B和7C描述有关向量生成掩码指令的一个实施例的进一步细节。具体而言,图7B示出与由处理器执行的向量生成掩码指令关联的逻辑的一个实施例;图7C是示出向量生成掩码指令的执行的一个实施例的框图的一个实例。
参考图7B,首先,针对第一操作数中的每个元素生成掩码(步骤720)。此步骤使用多个输入,其中包括在第二操作数字段中指定为起始位置的值(722)、在第三操作数字段中指定为结束位置的值(724),以及在M4字段中指定的元素的大小(726)。这些输入被用于生成掩码并填充第一操作数(OP1)的选定元素(例如,元素0)的位置(步骤730)。例如,第一操作数(OP1)的元素0包括多个位置(例如,位位置),并且从I2中的无符号整数值指定的位置开始,到I3中的无符号整数值指定的位置结束,第一操作数的元素0的位置(例如,位)被设置为1。其他位位置被设置为0。随后,判定第一操作数中是否存在更多元素(询问734)。如果存在更多元素,则处理继续执行步骤720。否则,处理完成(步骤736)。
掩码的生成和第一操作数的填充以图形的形式在图7C中示出。如图所示,第一操作数的每个元素的掩码使用输入(例如,722-726)生成720,并且生成掩码的结果被存储在第一操作数740的元素中。
上面详细描述了生成向量的每个元素的位掩码的指令。在一个实施例中,该指令采用起始位位置和结束位位置,并产生针对每个元素重复的位掩码。该指令指定位范围,此范围内的每个位针对向量寄存器的每个元素被设置为1,而其他位被设置为0。
在一个实施例中,使用指令生成位掩码较之例如从存储器加载位掩码提供了优点,从存储器加载位掩增加了指令流的缓存占用,并且取决于所需的掩码数,可增加关键环路的延迟。
根据一个方面提供的再一指令为向量元素旋转和掩码下插入(VERIM)指令,该指令的一个实例在图8A中示出。在一个例子中,向量元素旋转和掩码下插入指令800包括:操作码字段802a(例如,位0-7)、802b(例如,位40-47),其指示向量元素旋转和掩码下插入操作;第一向量寄存器字段804(例如,位8-11),其被用于指定第一向量寄存器(V1);第二向量寄存器字段806(例如,位12-15),其被用于指定第二向量寄存器(V2);第三向量寄存器字段808(例如,位16-19),其被用于指定第三向量寄存器(V3);立即字段(I4)812(例如,位24-31),其例如包括无符号二进制整数,该整数指定用于旋转每个元素的位数;掩码字段(M5)814(例如,位32-35);以及RXB字段816(例如,位36-39)。在一个实例中,字段804-816中的每一个都与操作码字段(多个)分离并且独立于操作码字段(多个)。此外,在一个实施例中,它们相互分离和独立;但是,在其他实施例中,一个以上字段可进行组合。
在一个实例中,由操作码字段802a指定的操作码的选定位(例如,前两位)指定指令的长度。在该特定实例中,选定位指示长度为三个半字。此外,指令的格式为具有扩展操作码字段的向量寄存器和立即操作。每个向量(V)字段连同其由RXB指定的对应扩展位一起指定向量寄存器。具体而言,对于向量寄存器,包含操作数的寄存器例如使用加上其对应的寄存器扩展位(RXB)作为最高位的寄存器字段的四位字段进行指定。
M5字段指定元素大小控制(ES)。元素大小控制指定向量寄存器操作数中的元素的大小。在一个例子中,M5字段的位0指定单字节;位1指定半字(例如,2字节);位2指定单字(例如,4字节;即,全字);以及位3指定双字。
在执行向量元素旋转和掩码下插入指令时,第二操作数的每个元素根据第四操作数指定的位数向左旋转。从元素的最左侧位位置移位出的每个位再次进入元素的最右侧位位置。第三操作数在每个元素中包括掩码。对于第三操作数中为1的每个位,第二操作数中已旋转的元素的对应位替换第一操作数中的对应位。也就是说,已旋转的元素的对应位的值替换第一操作数中对应位的值。对于第三操作数中为0的每个位,第一操作数的对应位保持不变。除了当第一操作数与第二或第三操作数相同的情况之外,第二和第三操作数保持不变。
第四操作数例如为无符号二进制整数,该整数指定第二操作数中每个元素被旋转的位数。如果该值大于指定的元素大小中的位数,则该值以元素中的位数为模减小。
在一个实例中,使用此处描述的VGM指令生成被包括在第三操作数中的掩码。
条件码:代码保持不变。
程序异常:
*具有数据异常码(DXC)FE的数据,向量指令,指示未启用向量工具
*操作(如果未安装用于z/Architecture的向量工具)
*规范
*事务约束
编程注释:
1.VERIM和VGM的组合可被用于完成旋转和插入选定位指令的全部功能。
2.尽管I4字段的位被定义为包含指定要向左旋转每个元素的位数的无符号二进制整数,但是也可对有效地指定向右旋转量的负值进行编码。
参考图8B和8C描述有关向量元素旋转和掩码下插入指令的执行的进一步细节。具体而言,图8B示出与由处理器执行的向量元素旋转和掩码下插入指令关联的逻辑的一个实施例,图8C以图形的方式示出向量元素旋转和掩码下插入指令的执行的一个实例。
参考图8B,按照第四操作数中指定的量(820)旋转第二操作数的选定元素(步骤830)。如果第四操作数中指定的值大于元素大小(822)中指定的位数,则该值以元素中的位数为模减小。
在旋转元素的位之后,执行掩码下合并(步骤832)。例如,对于第三操作数中为1的每个位(824),第二操作数中已旋转的元素的对应位替换第一操作数中的对应位。
随后,判定是否存在更多要被旋转的元素(询问834)。如果存在更多要被旋转的元素,则处理继续执行步骤830。否则,处理完成(步骤836)。
参考图8C,如图所示,基于输入820和822旋转830第二操作数的元素。此外,使用输入824执行832掩码下合并。在第一操作数850中提供输出。
上面描述了向量元素旋转和掩码下插入指令的一个实例。该指令被用于按照已定义的位数旋转选定操作数中的元素。尽管位已被指定,但是在另一实施例中,元素能够按照位置数旋转,并且位置可以是位以外的位置。此外,该指令可被用于不同的元素大小。
作为一个实例,此类指令被用于从表查找的编号中选择特定位范围。
在执行特定向量指令或其他SIMD操作期间,可能出现异常。当在SIMD操作上出现异常时,通常不知道向量寄存器的哪个元素导致了异常。软件中断处理机必须提取每个元素并在标量模式中重新执行计算以判定哪个或哪些元素导致了异常。但是,根据一个方面,当机器(例如,处理器)处理由向量运算导致的程序中断时,将报告元素索引,该索引例如指示向量中导致异常的最低索引元素。软件中断处理机然后能够立即跳向有问题的元素并执行任何所需或希望的动作。
例如,在一个实施例中,当向量数据异常导致程序中断时,向量异常码(VXC)例如被存储在真实存储位置(例如,位置147(X︳93︳))处,并且0被存储在例如真实存储位置144-146(X︳90︳-X︳92︳)处。在另一实施例中,如果指定的控制寄存器(例如,CR0)的指定位(例如,位45)为1,则VXC也被放入浮点控制寄存器的数据异常码(DXC)字段内。当控制寄存器0的位45为0,并且控制寄存器0的位46为1时,FPC寄存器的DXC和位置147(X︳93︳)处的存储内容不可预测。
在一个实施例中,VXC区分多种类型的向量浮点异常,并指示哪个元素导致了异常。在一个实例中,如图9A所示,向量异常码900包括向量索引(VIX)902、向量中断码(VIC)904。在一个实例中,向量索引包括向量异常码的位0-3,并且其值是识别到异常的选定向量寄存器的最左侧元素的索引。此外,向量中断码被包括在向量异常码的位4-7中,并且具有例如以下值:
在另一实施例中,VXC仅包括导致异常的元素的向量索引或其他位置指示符。
在一个实施例中,可通过多个指令来设置VXC,所述指令例如包括以下指令:Vector Floating Point(FP)Add、Vector FP Compare Scalar、Vector FP CompareEqual、Vector FP Compare High or Equal、Vector FP Convert From Fixed 64-Bit、Vector FP Convert From Logical 64-Bit、Vector FP Convert to Fixed 64-Bit、Vector FP Convert to Logical 64-Bit、Vector FP Divide、Vector Load FP Integer、Vector FP Load Lengthened、Vector FP Load Rounded、Vector FP Multiply、Vector FPMultiply and Add、Vector FP Multiple and Subtract、Vector FP Square Root以及Vector FP Subtract,以及其他类型的向量浮点指令和/或其他指令。
参考图9B描述有关设置向量异常码的进一步细节。在一个实施例中,计算环境的处理器执行该逻辑。
参考图9B,首先,执行针对向量寄存器执行操作的指令,例如上面列出的指令之一或其他指令(步骤920)。在执行指令期间,遇到异常状况(步骤922)。在一个例子中,该异常状况导致中断。判定向量寄存器的哪个元素导致了异常(步骤924)。例如,针对向量寄存器的一个或多个元素执行计算的处理器的一个或多个硬件单元判定异常并提供信号。例如,如果多个硬件单元针对向量寄存器的多个元素并行地执行计算,并且在处理一个或多个元素期间遇到异常,则执行处理的遇到异常的硬件单元(多个)发信号通知异常状况,以及它正在处理的元素的指示。在另一实施例中,如果向量的元素被按顺序执行,并且在处理元素期间遇到异常,则硬件将指示当异常发生时它正在处理序列中的什么元素。
基于发信号通知异常,设置向量异常码(步骤926)。这例如包括指示向量寄存器中导致异常的元素的位置,以及中断码。
上面详细描述了提供有效向量异常处理的向量异常码。在一个实例中,当机器处理由向量运算导致的程序中断时,将报告元素索引,该索引指示向量寄存器中导致了异常的最低索引元素。作为一个特定实例,如果正在执行vector add(向量加法),并且每个向量寄存器具有两个元素,从而提供A0+B0和A1+B1,并且针对A0+B0而非A1+B1接收到不准确的结果,则VIX被设置为0,且VIC被设置为等于0101。在另一实例中,如果发生A0+B0未接收到异常,但是A1+B1接收到异常,则VIX被设置为等于1(VIC=0101)。如果这两者均遇到异常,则VIX被设置为0,因此它是最左侧的索引位置,并且VIC=0101。
上面详细描述了多种向量指令以及向量异常码,该异常码指示向量寄存器内异常的位置。在所提供的流程图中,某些处理可按顺序地出现;但是,在一个或多个实施例中,元素被并行地处理,因此,例如可能不需要检查是否存在更多要被处理的元素。许多其他变型也是可能的。
此外,在其他实施例中,指令的一个或多个字段的内容可在通用寄存器中提供,在存储器中提供,在向量寄存器的元素中(根据元素而存在差异)提供,通过地址计算提供。它们可被包括为指令的显式操作数或包括为隐式操作数或输入。此外,一个或多个指令可使用更少的操作数或输入,并且相反地,一个或多个操作数可被用于多个操作或步骤。
此外,如上所述,可通过其他方式提供元素大小控制,而非在指令的字段中包括元素大小控制。此外,元素大小可由操作码指定。例如,指令的特定操作码指定操作以及元素的大小等。
在此,存储器、主存储器、存储装置和主存储装置被互换地使用,除非另外明确地或通过上下文指出。
所属技术领域的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
现在参考图10,在一个例子中,计算机程序产品1000包括,例如,一个或多个非临时计算机可读存储介质1002,在其上存储有计算机可读的程序代码装置或逻辑1004,以提供并方便本发明的一个或多个方面。
体现在计算机可读介质上的程序代码可以用任何适当的介质传输,所述介质包括但不限于:无线、有线、光缆、RF等,或上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
本文中将参照根据一个或多个实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instructionmeans)的制造品(manufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
除了上述,本发明的一个或多个方面可由服务提供商提供、许诺(offer)、部署、管理、服务等,该服务提供商提供用户环境的管理。例如,服务提供商可创建、维持、支持等计算机代码和/或计算机基础设施,其为一个或多个用户执行本发明的一个或多个方面。反过来,服务提供商可例如根据预订和/或费用协议从用户接受付费。额外地或可替换地,服务提供商可从向一个或多个第三方销售广告内容接受付费。
在本发明的一个方面,可部署用于执行本发明的一个或多个方面的应用。作为一个例子,部署应用包括提供计算机基础设施,其可操作以执行本发明的一个或多个方面。
作为本发明的又一个方面,可部署计算基础设施,其包括将计算机可读代码集成到计算机系统,其中与计算系统结合的代码能够执行本发明的一个或多个方面。
作为本发明的再一个方面,可提供用于集成计算基础设施包括将计算机可读码集成到计算机系统的过程。计算机系统包括计算机可读介质,其中计算机介质包括本发明的一个或多个方面。与计算机系统结合的代码能够执行本发明的一个或多个方面。
尽管上面描述了多个实施例,但是这些实施例仅作为实例。例如,具有其他架构的计算环境可结合和使用一个或多个方面。此外,可使用具有其他大小的向量,并且可在不偏离一个或多个方面的情况下做出对指令的更改。此外,可使用除向量寄存器以外的寄存器。此外,在其他实施例中,向量操作数可以是存储位置,而非向量寄存器。其他变型也是可能的。
而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为例子,可使用适于存储和/或执行程序代码的数据处理系统,其包括至少两个通过系统总线直接或间接耦合到存储元件的处理器。存储器元件包括,例如,在程序代码的实际执行期间使用的本地存储器、大容量存储器以及高速缓冲存储器,其提供至少一些程序代码的临时存储,以便减少在执行期间必须从大容量存储器取回代码的次数。
输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备、DASD、磁带、CD、DVD、拇指驱动器(thumb drive)以及其他的存储介质等)可直接或通过介于其间的I/O控制器被耦合到系统。网络适配器也可被耦合到系统以使得数据处理系统能够通过介于其间的私有或公共网络而耦合到其他的数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡仅是一些可获得的网络适配器类型。
参考图11,其描述了实施本发明的一个或多个方面的主机计算机系统5000的代表性组件。代表性主机计算机5000包括与计算机存储器(即,中央存储器)5002通信的一个或多个CPU 5001,以及到存储介质设备5011和网络5010的I/O接口,以用于与其他计算机或SAN等通信。CPU 5001符合具有架构指令集和架构功能的架构。CPU 5001可具有动态地址转换(DAT)5003,其用于将程序地址(虚拟地址)转变为存储器的真实地址。DAT典型地包括用于高速缓存转换的转换后备缓冲器(TLB)5007,这样稍后对计算机存储器5002块的访问不需要地址转换的延迟。典型地,高速缓存5009被使用在计算机存储器5002和处理器5001之间。高速缓存5009可以是分层的,具有可被多于一个的CPU获得的大高速缓存,以及大高速缓存和每个CPU之间的较小、较快(较低级)的高速缓存。在一些实施方式中,较低级的高速缓存被拆分以为指令获取和数据访问提供单独的低级高速缓存。在一个实施例中,由指令获取单元5004经由高速缓存5009从存储器5002获取指令。指令在指令解码单元5006中被解码,且(在一些实施例中与其他指令一起)被发送到一个或多个指令执行单元5008。典型地,使用若干执行单元5008,例如算术执行单元、浮点执行单元和分支指令执行单元。指令被执行单元执行,如需要,从指令指定的寄存器或存储器访问操作数。如果将从存储器5002访问(加载或存储)操作数,加载/存储单元5005典型地在被执行的指令的控制下处理该访问。指令可在硬件电路或内部微代码(固件)中或其组合中被执行。
需注意的是,计算机系统包括本地(或主)存储器中的信息,以及寻址、保护以及引用和改变记录。寻址的一些方面包括地址格式、地址空间的概念、地址的各种类型和其中一种类型的地址被转换为另一种类型的地址的方式。一些主存储器包括永久分配的存储位置。主存储器向系统提供直接可被寻址的快速访问的数据存储。数据和程序在可被处理之前都将(从输入设备)被加载到主存储器。
主存储器可包括一个或多个更小、更快速访问的缓冲存储器,有时候被称为高速缓存。高速缓存典型地与CPU或I/O处理器物理地关联。物理结构以及不同存储介质的使用的效果,除了在性能上,通常不会被程序观察到。
可维护用于指令和数据操作数的单独的高速缓存。高速缓存中的信息可被维护为相邻的字节,所述字节位于被称为高速缓存块或高速缓存线(或简称为线)的整数界限上。模型可提供EXTRACT CACHE ATTRIBUTE(提取高速缓存属性)指令,其返回高速缓存线的字节大小。模型也可提供PREFETCH DATA(预取数据)和PREFETCH DATA RELATIVE LONG(预取较长数据)指令,其实现存储到数据或指令高速缓存中的预取,或数据从高速缓存的释放。
存储器被视为位的长水平串。对于大部分操作来说,以从左到右的顺序进行对存储器的访问。位串被细分为八个位的单位。八位单位被称为字节,其是所有信息格式的基本构件。存储器中的每个字节位置由唯一的非负整数标识,该非负整数是该字节位置的地址,或简称为字节地址。相邻的字节位置具有连续的地址,在左边从0开始且以从左到右的顺序进行。地址是无符号二进制整数,且是24、31或64位。
信息一次一个字节或一组字节地在存储器和CPU或通道子系统之间传递。除非另有指定,例如在z/Architecture中,存储器中的一组字节由该组的最左边的字节寻址。组中的字节的数量可由将被执行的操作暗示或显式地指定。当在CPU操作中使用时,一组字节被称为字段。在字节的每个组内,例如在z/Architecture中,位以从左到右的顺序被编号。在z/Architecture中,最左边的位有时候被称为“高阶”位且最右边的位被称为“低阶”位。但是,位数不是存储器地址。仅字节可被寻址。为了操作存储器中的字节的单个位,访问整个字节。字节上的位从左到右被编号为0到7(例如在z/Architecture中)。对于24位地址,地址中的位被编号为8-31或40-63,对于31位地址,编号为1-31或33-63,对于64位地址,编号为0-63。在多个字节的任何其他的固定长度的格式中,构成格式的位从0开始被连续编号。为了错误检测,且优选地为了校正,一个或多个校验位可与每一个字节或一组字节一起被传递。这样的校验位由机器自动生成且不能被程序直接控制。存储容量以字节的数量来表示。当存储器操作数字段的长度由指令的操作码暗示时,字段被称为具有固定长度,其可以是一个、两个、四个、八个或十六个字节。可为某些指令暗示更大的字段。当存储器操作数字段的长度没有被暗示,而是被显式地表示时,该字段被称为具有可变长度。可变长度的操作数可以一个字节的增量(或者对于一些指令,以两个字节倍数或其他倍数)在长度上可变。当信息被放在存储器中时,仅替换被包括在指定的字段中的那些字节位置的内容,即使到存储器的物理路径的宽度可能大于正被存储的字段的长度。
某些信息单元位于存储器中的整数界限上。对于信息单元,当其存储器地址是以字节表示的单元长度的倍数时,界限被称为是整数的。特定的名称被给予整数界限上的2、4、8和16字节的字段。半字是两字节边界上的一组两个连续的字节,且是指令的基本构件。字是四字节边界上的一组四个连续的字节。双字是八字节边界上一组八个连续的字节。四倍长字(quadword)是16字节边界上的一组16个连续的字节。当存储器地址指定半字、字、双字和四倍长字时,地址的二进制表示分别包括一个、两个、三个或四个最右边的零位。指令将位于二字节整数边界上。大多数指令的存储器操作数不具有界限对准要求。
在为指令和数据操作数实现单独的高速缓存的设备上,如果程序在高速缓存线中存储且指令被随后从该高速缓存线获取,可经历显著的延迟,不管该存储是否改变随后被获取的指令。
在一个实施例中,本发明可被软件(有时候被称为许可的内部代码、固件、微代码、毫代码、微微代码(pico-code)等,其任何一个都将符合一个或多个方面)实施。参考图11,体现一个或多个方面的软件程序代码可典型地由主系统5000的处理器5001从长期存储介质设备5011(诸如CD-ROM驱动器、磁带驱动或硬盘驱动器)访问。软件程序代码可体现在与数据处理系统一起使用的各种已知介质(诸如软磁盘、硬盘驱动或CD-ROM)中的任何一个上。代码可在这样的介质上被分发,或可从一个计算机系统的计算机存储器5002或存储设备通过网络5010被分发给其他计算机系统的用户,以由这样的其他系统的用户使用。
软件程序代码包括操作系统,其控制各种计算机组件和一个或多个应用程序的功能和交互。程序代码通常可从存储介质设备5011调页到相对更高速的计算机存储器5002,在此它对于处理器5001是可用的。用于在存储器中、物理介质上体现软件程序代码和/或经由网络分发软件代码的技术和方法是熟知的,且不会在此被进一步讨论。当程序代码被创建并存储在有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、DVD、磁带等)上时,其经常被称为“计算机程序产品”。计算机程序产品介质典型地可由优选地位于计算机系统中的处理电路读取以由处理电路执
图12示出了可在其中实施一个或多个方面的代表性工作站或服务器硬件系统。图12的系统5020包括代表性基本计算机系统(base computer system)5021,诸如个人计算机、工作站或服务器,包括可选的外围设备。根据已知技术,基本计算机系统5021包括一个或多个处理器5026以及被用于连接并使能处理器5026和系统5021的其他组件之间的通信的总线。总线将处理器5026连接到存储器5025以及可包括例如硬盘驱动器(例如,包括磁介质、CD、DVD和闪存中的任何一个)或磁带驱动器的长期存储器5027。系统5021也可包括用户接口适配器,其经由总线将微处理器5026连接到一个或多个接口设备,诸如键盘5024、鼠标5023、打印机/扫描仪5030和/或其他接口设备,其可以是任何用户接口设备,诸如触摸敏感屏、数字化输入垫(digitized entry pad)等。总线也可经由显示适配器将诸如LCD屏幕或监视器的显示设备5022连接到微处理器5026。
系统5021可通过能与网络5029通信5028的网络适配器与其他计算机或计算机网络通信。示例性网络适配器是通信通道、令牌环网、以太网或调制解调器。或者,系统5021可使用诸如CDPD(蜂窝数字分组数据)卡的无线接口来通信。系统5021可与局域网(LAN)或广域网(WAN)中的这样的其他计算机关联,或系统5021可以是与另一个计算机的客户机/服务器安排中的客户机等。所有这些配置以及合适的通信硬件和软件在本领域中是已知的。
图13示出了其中可实施一个或多个方面的数据处理网络5040。数据处理网络5040可包括多个单独的网络,诸如无线网和有线网,其每个可包括多个单独的工作站5041、5042、5043、5044。此外,本领域技术人员将理解,可包括一个或多个LAN,其中LAN可包括多个耦合到主处理机的智能工作站。
仍然参考图13,网络也可包括大型计算机或服务器,诸如网关计算机(客户机服务器5046)或应用服务器(远程服务器5048,其可访问数据储存库,且也可直接从工作站5045被访问)。网关计算机5046用作到每个单独网络的进入点。当将一个联网协议连接到另一个时,需要网关。网关5046可通过通信链路优选地耦合到另一个网络(例如因特网5047)。也可使用通信链路将网关5046直接耦合到一个或多个工作站5041、5042、5043、5044。可以利用可从国际商业机器公司获得的IBM eServerTMSystem z服务器来实现网关计算机。
同时参考图12和13,可体现本发明的一个或多个方面的软件编程代码可被系统5020的处理器5026从诸如CD-ROM驱动器或硬盘驱动器的长期存储介质5027访问。软件编程代码可被体现在与数据处理系统一起使用的各种已知介质(诸如软盘、硬盘驱动器或CD-ROM)中的任一个上。代码可在这样的介质上被分发,或从一个计算机系统的存储器或存储设备通过网络被分发到其他计算机系统的用户5050、5051,以供这样的其他系统的用户使用。
或者,编程代码可体现在存储器5025中,且由处理器5026使用处理器总线访问。这样的编程代码包括操作系统,其控制各种计算机组件和一个或多个应用程序5032的功能和交互。程序代码通常从存储介质5027调页到高速存储器5025,在此它可用于由处理器5026进行处理。用于在存储器中、在物理介质上体现软件编程代码和/或经由网络分发软件代码的技术和方法是公知的,不会在此进一步讨论。程序代码,当其被创建且在有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、DVD、磁带等)上存储时,通常被称为“计算机程序产品”。计算机程序产品介质典型地可以被优选地位于计算机系统中的处理电路读取以由处理电路执行。
最容易被处理器使用的高速缓存(通常比处理器的其他高速缓存更快更小)是最低级(L1或级别1)高速缓存,且主存储(主存储器)是最高级高速缓存(如果有三个级别的话是L3)。最低级高速缓存经常被分为保持将被执行的机器指令的指令缓存(I-高速缓存),和保持数据操作数的数据高速缓存(D-高速缓存)。
参考图14,为处理器5026示出了示例性处理器实施例。典型地,使用一个或多个级别的高速缓存5053来缓冲存储器块,以便改善处理器性能。高速缓存5053是高速缓冲器,其保持很可能被使用的存储器数据的高速缓存线。典型的高速缓存线是64、128或256字节的存储器数据。通常使用单独的高速缓存以用于缓存指令而不是缓存数据。高速缓存一致性(存储器和高速缓存中的线的副本的同步)通常由本领域中熟知的各种“窥探”算法提供。处理器系统的主存储器5025通常被称为高速缓存。在具有4个级别的高速缓存5053的处理器系统中,主存储器5025有时候被称为级别5(L5)高速缓存,因为它典型地更快,且仅保持可被计算机系统使用的非易失性存储器(DASD、磁带等)的一部分。主存储器5025可“高速缓存”由操作系统向主存储器5025调页入或从其调页出的数据页。
程序计数器(指令计数器)5061保持跟踪将被执行的当前指令的地址。z/Architecture处理器中的程序计数器是64位的,且可被截短为31或24位以支持先前的寻址界限。程序计数器典型地体现在计算机的PSW(程序状态字)中,这样它可在上下文转换中持续。因此,具有程序计数器值的进行中的程序可被例如操作系统中断(从程序环境到操作系统环境的上下文转换)。当程序不活动时,程序的PSW维持程序计数器值,且在操作系统执行时,操作系统的(PSW中的)程序计数器被使用。典型地,程序计数器以等于当前指令的字节数的量增量。RISC(精简指令集计算)指令典型地是固定长度,而CISC(复杂指令集计算)指令典型地是可变长度。IBMz/Architecture的指令是具有长度为2、4或6字节的CISC指令。程序计数器5061被例如上下文转换操作或分支指令的分支采取操作修改。在上下文转换操作中,当前的程序计数器值与关于正被执行的程序的其他状态信息(诸如条件码)一起被保存在程序状态字中,且新程序计数器值被载入并指向将被执行的新程序模块的指令。执行分支采取操作,以通过将分支指令的结果加载到程序计数器5061中而允许程序进行决定或在程序内循环。
典型地,使用指令获取单元5055代表处理器5026获取指令。获取单元可获取“下一序列指令”、分支采取指令的目标指令或上下文转换后的程序的第一指令。现在的指令获取单元通常使用预取技术基于被预取的指令将被使用的可能性来推测性地预取指令。例如,获取单元可获取16字节的指令,其包括下一顺序指令以及进一步的顺序指令的额外字节。
获取的指令随后被处理器5026执行。在一实施例中,获取的指令被传递给获取单元的分派单元5056。分派单元解码指令并将关于解码的指令的信息转送给合适的单元5057、5058、5060。执行单元5057将典型地从指令获取单元5055接收关于解码的算术指令的信息,并将根据指令的操作码对操作数执行算术操作。优选地从存储器5025、架构寄存器5059或从正被执行的指令的立即字段(immediate field)向执行单元5057提供操作数。执行的结果,当被存储时,被存储在存储器5025、寄存器5059或其他机器硬件(诸如控制寄存器、PSW寄存器等)中。
处理器5026典型地具有一个或多个用于执行指令的功能的单元5057、5058、5060。参考图15A,执行单元5057可通过接口逻辑5071与架构通用寄存器5059、解码/分派单元5056、加载存储单元5060和其他5065处理器单元通信。执行单元5057可使用几个寄存器电路5067、5068、5069来保持算术逻辑单元(ALU)5066将操作的信息。ALU执行诸如加减乘除的算术操作,以及诸如和、或以及异或(XOR)、旋转和移位的逻辑运算。优选地,ALU支持依赖于设计的专门操作。其他电路可提供其他架构工具5072,例如包括条件码和恢复支持逻辑。典型地,ALU操作的结果被保持在输出寄存电路5070中,该输出寄存器电路可将结果转送到多种其他处理功能。有许多处理器单元安排,本说明书仅旨在提供对一个实施例的代表性理解。
例如,ADD指令将在具有算术和逻辑功能的执行单元5057中被执行,而例如浮点指令将在具有专用浮点能力的浮点执行中被执行。优选地,执行单元通过在操作数上执行操作码定义的功能在由指令标识的操作数上操作。例如,ADD指令可被执行单元5057在由指令的寄存器字段标识的两个寄存器5059中发现的操作数上执行。
执行单元5057对两个操作数执行算术加法,并在第三操作数中存储结果,其中第三操作数可以是第三寄存器或两个源寄存器中的一个。执行单元优选地利用算术逻辑单元(ALU)5066,其能执行多种逻辑功能,诸如移位、旋转、和、或、异或,以及多种代数函数,包括加减乘除中的任何一个。有些ALU 5066被设计为用于标量运算,有些用于浮点。根据架构,数据可以是大端(big endien)(其中最低有效字节位于最高字节地址)或小端(littleendien)(其中最低有效字节位于最低字节地址)。IBM z/Architecture是大端。根据架构,带符号字段可以是符号和幅度、1的补码或2的补码。2的补码数是有利的,其在于ALU不需要设计减法能力,因为不管是2的补码中的负值还是正值,都仅要求ALU中的加法。数字通常以速记描述,其中12位的字段定义了4096字节块的地址,且通常被描述为例如4Kbyte(千字节)块。
参考图15B,用于执行分支指令的分支指令信息典型地被发送到分支单元5058,该分支单元经常使用诸如分支历史表5082的分支预测算法,在其他条件运算完成前预测分支结果。在条件运算完成前,当前分支指令的目标将被获取并推测性地执行。当条件运算完成时,基于条件运算的条件和推测的结果,推测性执行的分支指令或被完成或被丢弃。典型的分支指令可测试条件码,以及如果条件码满足分支指令的分支要求,分支到目标地址,分支地址可基于若干数被计算,所述数包括例如在寄存器字段或是指令的立即字段中找到的数。分支单元5058可利用具有多个输入寄存器电路5075、5076、5077和一个输出寄存器电路5080的ALU 5074。分支单元5058可与例如通用寄存器5059、解码分派单元5056或其他电路5073通信。
一组指令的执行可由于多个原因中断,所述原因包括例如由操作系统发起的上下文转换、引起上下文转换的程序异常或错误、引起上下文转换的I/O中断信号或多个程序(在多线程环境中)的多线程活动。优选地,上下文转换动作保存关于当前执行的程序的状态信息,且随后加载关于正被调用的另一个程序的状态信息。状态信息可被存储在例如硬件寄存器或存储器中。状态信息优选地包括指向将被执行的下一个指令的程序计数器值、条件码、存储器转换信息和架构寄存器内容。上下文转换活动可被硬件电路、应用程序、操作系统程序或固件代码(微代码、微微代码或许可内部码(LIC))单独地或其组合实现。
处理器根据指令定义的方法而访问操作数。指令可使用指令的一部分的值提供立即操作数,可提供一个或多个寄存器字段,其显式地指向通用寄存器或专用寄存器(例如浮点寄存器)。指令可利用由操作码字段确定的暗示的寄存器作为操作数。指令可利用用于操作数的存储器位置。可由寄存器、立即字段或寄存器和立即字段的组合提供操作数的存储器位置,如由z/Architecture长位移工具(facility)所例示的,其中该指令定义了基寄存器、索引寄存器和立即字段(位移字段),它们加到一起,以提供例如存储器中的操作数的地址。除非另外指明,此处的位置典型地意味着主存储器(主存储设备)中的位置。
参考图15C,处理器使用加载/存储单元5060访问存储器。加载/存储单元5060可以通过获取存储器5053中的目标操作数的地址并将操作数加载到寄存器5059或其他存储器5053位置中,来执行加载操作,或可以通过获取存储器5053中的目标操作数的地址并将从寄存器5059或另一个存储器5053位置获得的数据存储在存储器5053中的目标操作数位置,来执行存储操作。加载/存储单元5060可以是推测性的,且可以以相对于指令顺序来说无序的顺序访问存储器,但是加载/存储单元5060将向程序维持指令按顺序执行的外观。加载/存储单元5060可与通用寄存器5059、解密/分派单元5056、高速缓存/存储器接口5053或其他元件5083通信,且包括各种寄存器电路、ALU 5085和控制逻辑5090以计算存储器地址并提供流水线顺序以使操作保持次序。一些操作可不按顺序,但加载/存储单元提供功能以使不按顺序执行的操作对程序看起来如已按顺序执行一样,如本领域所熟知的。
优选地,应用程序“看到的”地址通常被称为虚拟地址。虚拟地址有时候被称为“逻辑地址”和“有效地址”。这些虚拟地址之所以虚拟,在于它们由多种动态地址转换(DAT)技术中的一种重定向到物理存储器位置,所述动态地址转换技术包括但不限于简单地给用偏移值给虚拟地址加前缀、经由一个或多个转换表转换虚拟地址,所述转换表优选地包括至少一个段表和一个页表(单独地或组合地),优选地,段表具有指向页表的项。在z/Architecture中,提供转换分级结构,包括区域第一表、区域第二表、区域第三表、段表和可选的页表。地址转换的性能通常通过利用转换后备缓冲器(TLB)被改善,该转换后备缓冲器包括将虚拟地址映射到相关的物理存储位置的项。当DAT使用转换表转换虚拟地址时,创建项。于是,虚拟地址的随后使用可利用快的TLB的项,而不是慢的顺序转换表访问。TLB内容可由包括LRU(最少最近使用)的多个替换算法来管理。
在处理器是多处理器系统的处理器的情况下,每个处理器具有保持共享资源的责任,所述共享资源诸如I/O、高速缓存、TLB和存储器,它们互锁以实现一致性。典型地,“窥探”技术将被用于维持高速缓存一致性。在窥探环境中,每个高速缓存线可被标记为正处于共享状态、独占状态、改变状态、无效状态等中的一个,以便有助于共享。
I/O单元5054(图14)向处理器提供用于附加到例如包括磁带、盘、打印机、显示器和网络的外围设备的装置。I/O单元通常由软件驱动器向计算机程序呈现。在诸如来自IBM的System z的大型计算机中,通道适配器和开放系统适配器是提供操作系统和外围设备之间的通信的大型计算机的I/O单元。
而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为例子,环境可包括仿真器(例如,软件或其他仿真机制),其中特定架构(包括例如指令执行、诸如地址转换的架构功能、以及架构寄存器)或其子集被仿真(例如,在具有处理器和存储器的本机计算机系统中)。在这样的环境中,仿真器的一个或多个仿真功能可实施本发明的一个或多个方面,即使执行仿真器的计算机可具有与正被仿真的能力不同的架构。作为一个例子,在仿真模式中,解码正被仿真的特定指令或操作,且建立合适的仿真功能以实施单个指令或操作。
在仿真环境中,主计算机包括例如存储器以存储指令和数据;指令获取单元以从存储器获取指令,且可选地,提供用于获取的指令的本地缓冲;指令解码单元以接收获取的指令并确定已被获取的指令的类型;以及指令执行单元以执行该指令。执行可包括将数据从存储器加载到寄存器;从寄存器将数据存储回存储器;或执行如由解码单元确定的某些类型的算术或逻辑运算。在一个例子中,每个单元在软件中实现。例如,被所述单元执行的操作被实现为仿真器软件中的一个或多个子例程。
更具体地,在大型计算机中,程序员(通常是如今的“C”程序员)一般通过编译器应用使用架构机器指令。存储在存储介质中的这些指令可以在服务器中本机地执行,或在执行其他架构的机器中执行。它们可在现有的和未来的大型计算机服务器以及的其他机器(例如,Power Systems服务器和System服务器)中被仿真。它们可在使用由AMDTM等制造的硬件的各种机器上运行Linux的机器中被执行。除了在z/Architecture下的该硬件上执行,Linux也可被用于这样的机器,其使用由Hercules、UMX或FSI(Fundamental Software,Inc)(其中一般地执行是处于仿真模式中)提供的仿真。在仿真模式中,仿真软件由本机处理器执行以仿真被仿真处理器的架构。
本机处理器典型地执行仿真软件,其包括固件或本机操作系统,以执行被仿真处理器的仿真程序。仿真软件负责获取并执行被仿真处理器架构的指令。仿真软件维护仿真的程序计数器以保持跟踪指令界限。仿真软件可一次获取一个或多个仿真的机器指令,并将所述一个或多个仿真的机器指令转换为对应的本机机器指令组,以由本机处理器执行。这些转换的指令可被高速缓存,这样可完成更快的转换。仿真软件将维持被仿真的处理器架构的架构规则以保证为被仿真处理器编写的操作系统和应用正确操作。而且,仿真软件将提供由被仿真的处理器架构确定的资源,包括但不限于控制寄存器、通用寄存器、浮点寄存器、例如包括段表和页表的动态地址转换功能、中断机制、上下文转换机制、日中时间(TOD)时钟和到I/O子系统的架构接口,这样被设计为在被仿真处理器上运行的操作系统或应用程序可在具有仿真软件的本机处理器上运行。
解码正被仿真的特定指令,且调用子例程以执行该单个指令的功能。仿真被仿真处理器的功能的仿真软件功能例如在“C”子例程或驱动器中实现,或由提供用于特定硬件的驱动器的其他方法实现,如本领域技术人员在理解一个或多个实施例的描述后将理解的。包括但不限于Beausoleil等人的标题为“Multiprocessor for Hardware Emulation”的美国专利证书号5,551,013;以及Scalzi等人的标题为“Preprocessing of StoredTarget Routines for Emulating Incompatible Instructions on a TargetProcessor”的美国专利证书号6,009,261;以及Davidian等人的标题为“Decoding GuestInstruction to Directly Access Emulation Routines that Emulate the GuestInstructions”的美国专利证书号,5,574,873;以及Gorishek等人的标题为“SymmetricalMultiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System”的美国专利证书号6,308,255;以及Lethin等人的标题为“Dynamic Optimizing Object Code Translator for Architecture Emulation andDynamic Optimizing Object Code Translation Method”的美国专利证书号6,463,582,;以及Eric Traut的标题为“Method for Emulating Guest Instructions on a HostComputer Through Dynamic Recompilation of Host Instructions”的美国专利证书号5,790,825;以及许多其他专利的各种软件和硬件仿真专利示出各种已知的方式来实现针对可为本领域技术人员获得的目标机器对为不同机器进行架构设计的指令格式的仿真。
在图16中,提供了仿真主计算机系统5092的例子,其仿真主架构的主计算机系统5000’。在仿真主计算机系统5092中,主处理器(CPU)5091是仿真主处理器(或虚拟主处理器),并包括具有与主计算机5000’的处理器5091不同的本机指令集架构的仿真处理器5093。仿真主计算机系统5092具有可被仿真处理器5093访问的存储器5094。在示例性实施例中,存储器5094被分区为主计算机存储器5096部分和仿真例程5097部分。根据主计算机架构,主计算机存储器5096对于仿真主计算机5092的程序来说是可用的。仿真处理器5093执行与被仿真处理器5091不同架构的架构指令集的本机指令(即来自仿真程序处理器5097的本机指令),且可通过使用从顺序和访问/解码例程获得的一个或多个指令从主计算机存储器5096中的程序访问用于执行的主机指令,所述顺序和访问/解码例程可解码访问的主机指令,以确定用于仿真被访问的主机指令的功能的本机指令执行例程。被定义用于主计算机系统5000’架构的其他工具可被架构工具例程仿真,所述架构工具例程包括诸如通用寄存器、控制寄存器、动态地址转换和I/O子系统支持和处理器高速缓存等工具。仿真例程也可利用在仿真处理器5093中可获得的功能(诸如通用寄存器和虚拟地址的动态转换)以改善仿真例程的性能。也可提供专用硬件和卸载引擎以辅助处理器5093来仿真主计算机5000’的功能。
在此使用的术语仅是为了描述特定实施例,且不旨在限制本发明。如在此使用的,单数形式“一”、“一个”和“该”也旨在包括复数形式,除非上下文另外清楚地指明。还将理解,当在说明书中使用时,术语“包括”和/或“包含”指明存在所述的特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其他特征、整体、步骤、操作、元件和/或组件。
所附权利要求书中的所有装置或步骤加功能元件的相应结构、材料、操作以及等价物,如有的话,旨在包括用于结合如特别要求保护的其他所要求保护的元件来执行所述功能的任何结构、材料或操作。呈现一个或多个方面的说明是为了示出和描述的作用,但不是穷尽性的或将本发明限制于所公开的形式。许多修改和变化对本领域普通技术人员来说是明显的,且不脱离一个或多个方面的范围和精神。选择和描述实施例是为了最佳地解释一个或多个方面的原理和实际应用,并使得本领域普通技术人员能针对适于考虑的特定用途的具有各种修改的各种实施例理解一个或多个方面。
Claims (17)
1.一种计算机可读存储介质,其可被处理电路读取并且存储由所述处理电路执行以执行一种方法的指令,所述方法包括:
由处理器获得用于执行的机器指令,所述机器指令被定义为用于根据计算机架构的计算机执行,所述机器指令包括:
至少一个操作码字段,其提供操作码,所述操作码标识向量元素旋转和掩码下插入操作;
第一寄存器字段,其被用于指定第一寄存器,所述第一寄存器包括第一操作数;
第二寄存器字段,其被用于指定第二寄存器,所述第二寄存器包括第二操作数;
第三寄存器字段,其被用于指定第三寄存器,所述第三寄存器包括第三操作数;以及
执行所述机器指令,所述执行包括:
在选定方向上将所述第二操作数的一个或多个元素旋转指定的旋转量;
检查所述第三操作数是否包含具有特定值的一个或多个数据单元;以及
基于所述第三操作数包含具有所述特定值的一个或多个数据单元,使用所述第二操作数中已被旋转的对应数据单元的一个或多个值替换所述第一操作数中的对应数据单元的一个或多个值,
其中所述第三操作数包括多个元素,并且所述多个元素包括多个掩码,并且其中所述多个掩码中的一个掩码包括多个位;并且
其中所述一个或多个数据单元包括一个或多个位,所述特定值包括1,并且其中所述替换包括:针对所述第三操作数中被设置为1的每个位,使用所述第二操作数中已被旋转的对应位的值替换所述第一操作数中的对应位的值,并且针对所述第三操作数中被设置为0的每个位,所述第一操作数中的对应位的值保持不变。
2.根据权利要求1所述的计算机可读存储介质,其中所述选定方向包括向左并且所述指定的旋转量包括指定的位数。
3.根据权利要求2所述的计算机可读存储介质,其中所述旋转包括将所述第二操作数的每个元素向左旋转所述指定的位数,其中移出元素的最左侧位位置的每个位再次进入该元素的最右侧位位置。
4.根据权利要求1所述的计算机可读存储介质,其中所述第二操作数包括多个元素,并且所述指定的旋转量被包括在所述机器指令的第四操作数中,所述第四操作数包括无符号二进制整数,所述无符号二进制整数指定将所述第二操作数的每个元素旋转的位数,并且其中所述方法进一步包括:
判定所述无符号二进制整数是否大于选定操作数的元素的位数;以及基于所述无符号二进制整数大于所述选定操作数的所述元素的位数,以所述选定操作数的所述元素的位数为模减小所述无符号二进制整数。
5.根据权利要求4所述的计算机可读存储介质,其中所述方法进一步包括确定所述选定操作数的所述元素的所述位数,所述确定使用所述机器指令的掩码字段,所述掩码字段包括元素大小控制,所述元素大小控制用于指示所述机器指令的一个或多个操作数的元素的大小。
6.根据权利要求1所述的计算机可读存储介质,其中所述机器指令进一步包括被用于指定一个或多个寄存器的扩展字段,并且其中所述第一寄存器字段与所述扩展字段的第一部分相组合以指定所述第一寄存器,所述第二寄存器字段与所述扩展字段的第二部分相组合以指定所述第二寄存器,以及所述第三寄存器字段与所述扩展字段的第三部分相组合以指定所述第三寄存器。
7.根据权利要求1所述的计算机可读存储介质,其中所述第二操作数包括一个或多个第二操作数元素,所述选定方向为向左,所述指定的旋转量包括指定的位数,并且所述第三操作数包括一个或多个第三操作数元素,每个第三操作数元素包括具有多个位的掩码,并且其中:
所述旋转包括将所述第二操作数的每个元素向左旋转所述指定的位数,其中移出元素的最左侧位位置的每个位再次进入该元素的最右侧位位置。
8.根据权利要求1所述的计算机可读存储介质,其中所述机器指令进一步包括掩码字段,所述掩码字段包括元素大小控制,所述元素大小控制用于指示所述第一操作数、所述第二操作数和所述第三操作数中的一个或多个的元素的大小。
9.一种用于在中央处理单元中执行机器指令的计算机系统,所述计算机系统包括:
存储器;以及
处理器,其与所述存储器通信,其中所述计算机系统被配置为执行一种方法,所述方法包括:
由处理器获得用于执行的机器指令,所述机器指令被定义为用于根据计算机架构的计算机执行,所述机器指令包括:
至少一个操作码字段,其提供操作码,所述操作码标识向量元素旋转和掩码下插入操作;
第一寄存器字段,其被用于指定第一寄存器,所述第一寄存器包括第一操作数;
第二寄存器字段,其被用于指定第二寄存器,所述第二寄存器包括第二操作数;
第三寄存器字段,其被用于指定第三寄存器,所述第三寄存器包括第三操作数;以及
执行所述机器指令,所述执行包括:
在选定方向上将所述第二操作数的一个或多个元素旋转指定的旋转量;
检查所述第三操作数是否包含具有特定值的一个或多个数据单元;以及
基于所述第三操作数包含具有所述特定值的一个或多个数据单元,使用所述第二操作数中已被旋转的对应数据单元的一个或多个值替换所述第一操作数中的对应数据单元的一个或多个值,
其中所述第三操作数包括多个元素,并且所述多个元素包括多个掩码,并且其中所述多个掩码中的一个掩码包括多个位,并且其中所述一个或多个数据单元包括一个或多个位,所述特定值包括1,并且其中所述替换包括:针对所述第三操作数中被设置为1的每个位,使用所述第二操作数中已被旋转的对应位的值替换所述第一操作数中的对应位的值,并且针对所述第三操作数中被设置为0的每个位,所述第一操作数中的对应位的值保持不变。
10.根据权利要求9所述的计算机系统,其中所述选定方向包括向左并且所述指定的旋转量包括指定的位数,并且其中所述旋转包括将所述第二操作数的每个元素向左旋转所述指定的位数,其中移出元素的最左侧位位置的每个位再次进入该元素的最右侧位位置。
11.根据权利要求9所述的计算机系统,其中所述第二操作数包括多个元素,并且所述指定的旋转量被包括在所述机器指令的第四操作数中,所述第四操作数包括无符号二进制整数,所述无符号二进制整数指定将所述第二操作数的每个元素旋转的位数,并且其中所述方法进一步包括:
判定所述无符号二进制整数是否大于选定操作数的元素的位数;以及基于所述无符号二进制整数大于所述选定操作数的所述元素的位数,以所述选定操作数的所述元素的位数为模减小所述无符号二进制整数。
12.根据权利要求9所述的计算机系统,其中所述机器指令进一步包括被用于指定一个或多个寄存器的扩展字段,并且其中所述第一寄存器字段与所述扩展字段的第一部分相组合以指定所述第一寄存器,所述第二寄存器字段与所述扩展字段的第二部分相组合以指定所述第二寄存器,以及所述第三寄存器字段与所述扩展字段的第三部分相组合以指定所述第三寄存器。
13.根据权利要求9所述的计算机系统,其中所述第二操作数包括一个或多个第二操作数元素,所述选定方向为向左,所述指定的旋转量包括指定的位数,并且其中:
所述旋转包括将所述第二操作数的每个元素向左旋转所述指定的位数,其中移出元素的最左侧位位置的每个位再次进入该元素的最右侧位位置。
14.根据权利要求9所述的计算机系统,其中所述机器指令进一步包括掩码字段,所述掩码字段包括元素大小控制,所述元素大小控制用于指示所述第一操作数、所述第二操作数和所述第三操作数中的一个或多个的元素的大小。
15.一种用于在中央处理单元中执行机器指令的方法,所述方法包括:
由处理器获得用于执行的机器指令,所述机器指令被定义为用于根据计算机架构的计算机执行,所述机器指令包括:
至少一个操作码字段,其提供操作码,所述操作码标识向量元素旋转和掩码下插入操作;
第一寄存器字段,其被用于指定第一寄存器,所述第一寄存器包括第一操作数;
第二寄存器字段,其被用于指定第二寄存器,所述第二寄存器包括第二操作数;
第三寄存器字段,其被用于指定第三寄存器,所述第三寄存器包括第三操作数;以及
执行所述机器指令,所述执行包括:
在选定方向上将所述第二操作数的一个或多个元素旋转指定的旋转量;
检查所述第三操作数是否包含具有特定值的一个或多个数据单元;以及
基于所述第三操作数包含具有所述特定值的一个或多个数据单元,使用所述第二操作数中已被旋转的对应数据单元的一个或多个值替换所述第一操作数中的对应数据单元的一个或多个值,
其中所述第三操作数包括一个或多个第三操作数元素,每个第三操作数元素包括具有多个位的掩码,所述数据单元包括位,并且
其中所述替换包括:针对所述第三操作数中被设置为1的每个位,所述第二操作数中已被旋转的对应位的值替换所述第一操作数中的对应位的值,并且针对所述第三操作数中被设置为0的每个位,所述第一操作数中的对应位的值保持不变。
16.根据权利要求15所述的方法,其中所述第二操作数包括一个或多个第二操作数元素,所述选定方向为向左,所述指定的旋转量包括指定的位数,
所述旋转包括将所述第二操作数的每个元素向左旋转所述指定的位数,其中移出元素的最左侧位位置的每个位再次进入该元素的最右侧位位置。
17.根据权利要求15所述的方法,其中所述机器指令进一步包括掩码字段,所述掩码字段包括元素大小控制,所述元素大小控制用于指示所述第一操作数、所述第二操作数和所述第三操作数中的一个或多个的元素的大小。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/748,543 | 2013-01-23 | ||
US13/748,543 US9823924B2 (en) | 2013-01-23 | 2013-01-23 | Vector element rotate and insert under mask instruction |
PCT/IB2013/060309 WO2014114997A1 (en) | 2013-01-23 | 2013-11-21 | Vector element rotate and insert under mask instruction |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104937543A CN104937543A (zh) | 2015-09-23 |
CN104937543B true CN104937543B (zh) | 2018-03-20 |
Family
ID=51208689
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380071234.9A Active CN104937543B (zh) | 2013-01-23 | 2013-11-21 | 向量元素旋转和掩码下插入指令 |
Country Status (6)
Country | Link |
---|---|
US (2) | US9823924B2 (zh) |
JP (1) | JP6399522B2 (zh) |
CN (1) | CN104937543B (zh) |
DE (1) | DE112013005500T5 (zh) |
GB (1) | GB2525357A (zh) |
WO (1) | WO2014114997A1 (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9823924B2 (en) | 2013-01-23 | 2017-11-21 | International Business Machines Corporation | Vector element rotate and insert under mask instruction |
US9804840B2 (en) | 2013-01-23 | 2017-10-31 | International Business Machines Corporation | Vector Galois Field Multiply Sum and Accumulate instruction |
US9471308B2 (en) | 2013-01-23 | 2016-10-18 | International Business Machines Corporation | Vector floating point test data class immediate instruction |
US9513906B2 (en) | 2013-01-23 | 2016-12-06 | International Business Machines Corporation | Vector checksum instruction |
US9715385B2 (en) | 2013-01-23 | 2017-07-25 | International Business Machines Corporation | Vector exception code |
US9778932B2 (en) | 2013-01-23 | 2017-10-03 | International Business Machines Corporation | Vector generate mask instruction |
US20150052330A1 (en) * | 2013-08-14 | 2015-02-19 | Qualcomm Incorporated | Vector arithmetic reduction |
US20150186137A1 (en) * | 2013-12-27 | 2015-07-02 | Tal Uliel | Systems, apparatuses, and methods for vector bit test |
US20170177348A1 (en) * | 2015-12-21 | 2017-06-22 | Intel Corporation | Instruction and Logic for Compression and Rotation |
US10592468B2 (en) * | 2016-07-13 | 2020-03-17 | Qualcomm Incorporated | Shuffler circuit for lane shuffle in SIMD architecture |
CN108958801B (zh) | 2017-10-30 | 2021-06-25 | 上海寒武纪信息科技有限公司 | 神经网络处理器及使用处理器执行向量最大值指令的方法 |
US12094456B2 (en) | 2018-09-13 | 2024-09-17 | Shanghai Cambricon Information Technology Co., Ltd. | Information processing method and system |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5487159A (en) * | 1993-12-23 | 1996-01-23 | Unisys Corporation | System for processing shift, mask, and merge operations in one instruction |
US6088782A (en) * | 1997-07-10 | 2000-07-11 | Motorola Inc. | Method and apparatus for moving data in a parallel processor using source and destination vector registers |
CN101154153A (zh) * | 2006-09-26 | 2008-04-02 | 冲电气工业株式会社 | 位域操作电路 |
CN102473104A (zh) * | 2009-08-19 | 2012-05-23 | 国际商业机器公司 | 插入用于优化的simd代码的操作-和-指示指令 |
Family Cites Families (135)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4569016A (en) | 1983-06-30 | 1986-02-04 | International Business Machines Corporation | Mechanism for implementing one machine cycle executable mask and rotate instructions in a primitive instruction set computing system |
JPS60103482A (ja) | 1983-10-24 | 1985-06-07 | インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション | ベクトル処理能力を有するデ−タ処理装置 |
JPS60136872A (ja) | 1983-12-26 | 1985-07-20 | Hitachi Ltd | ベクトル処理装置 |
JPH0731669B2 (ja) | 1986-04-04 | 1995-04-10 | 株式会社日立製作所 | ベクトル・プロセツサ |
US5113521A (en) | 1988-03-18 | 1992-05-12 | Digital Equipment Corporation | Method and apparatus for handling faults of vector instructions causing memory management exceptions |
US5043867A (en) | 1988-03-18 | 1991-08-27 | Digital Equipment Corporation | Exception reporting mechanism for a vector processor |
US5974522A (en) | 1990-01-24 | 1999-10-26 | Cornell Research Foundation, Inc. | Machine for processing interrupted out-of-order instructions |
US5053986A (en) | 1990-02-21 | 1991-10-01 | Stardent Computer, Inc. | Circuit for preservation of sign information in operations for comparison of the absolute value of operands |
US5247524A (en) | 1990-06-29 | 1993-09-21 | Digital Equipment Corporation | Method for generating a checksum |
SG45269A1 (en) | 1992-02-06 | 1998-01-16 | Intel Corp | End bit markers for instruction decode |
US5388233A (en) | 1993-04-30 | 1995-02-07 | Intel Corporation | Method and apparatus for counting instruction types using bit masks and a programmable bit map |
WO1994027215A1 (en) | 1993-05-07 | 1994-11-24 | Apple Computer, Inc. | Method for decoding guest instructions for a host computer |
US5673407A (en) | 1994-03-08 | 1997-09-30 | Texas Instruments Incorporated | Data processor having capability to perform both floating point operations and memory access in response to a single instruction |
US5551013A (en) | 1994-06-03 | 1996-08-27 | International Business Machines Corporation | Multiprocessor for hardware emulation |
JP3672634B2 (ja) | 1994-09-09 | 2005-07-20 | 株式会社ルネサステクノロジ | データ処理装置 |
US5680338A (en) | 1995-01-04 | 1997-10-21 | International Business Machines Corporation | Method and system for vector processing utilizing selected vector elements |
US5825678A (en) | 1995-03-31 | 1998-10-20 | International Business Machines Corporation | Method and apparatus for determining floating point data class |
US5663952A (en) | 1995-07-07 | 1997-09-02 | Sun Microsystems, Inc. | Checksum generation circuit and method |
US7301541B2 (en) | 1995-08-16 | 2007-11-27 | Microunity Systems Engineering, Inc. | Programmable processor and method with wide operations |
US5701316A (en) | 1995-08-31 | 1997-12-23 | Unisys Corporation | Method for generating an internet protocol suite checksum in a single macro instruction |
US5790825A (en) | 1995-11-08 | 1998-08-04 | Apple Computer, Inc. | Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions |
JP2904099B2 (ja) | 1996-02-19 | 1999-06-14 | 日本電気株式会社 | コンパイル装置およびコンパイル方法 |
US5768168A (en) | 1996-05-30 | 1998-06-16 | Lg Semicon Co., Ltd. | Universal galois field multiplier |
GB9627069D0 (en) | 1996-12-30 | 1997-02-19 | Certicom Corp | A method and apparatus for finite field multiplication |
US5884071A (en) | 1997-03-31 | 1999-03-16 | Intel Corporation | Method and apparatus for decoding enhancement instructions using alias encodings |
US5960012A (en) | 1997-06-23 | 1999-09-28 | Sun Microsystems, Inc. | Checksum determination using parallel computations on multiple packed data elements |
US5953240A (en) | 1997-06-23 | 1999-09-14 | Sun Microsystems, Inc. | SIMD TCP/UDP checksumming in a CPU |
US6047304A (en) | 1997-07-29 | 2000-04-04 | Nortel Networks Corporation | Method and apparatus for performing lane arithmetic to perform network processing |
US5864703A (en) | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US6009261A (en) | 1997-12-16 | 1999-12-28 | International Business Machines Corporation | Preprocessing of stored target routines for emulating incompatible instructions on a target processor |
US6223320B1 (en) | 1998-02-10 | 2001-04-24 | International Business Machines Corporation | Efficient CRC generation utilizing parallel table lookup operations |
US6105129A (en) | 1998-02-18 | 2000-08-15 | Advanced Micro Devices, Inc. | Converting register data from a first format type to a second format type if a second type instruction consumes data produced by a first type instruction |
US6173393B1 (en) | 1998-03-31 | 2001-01-09 | Intel Corporation | System for writing select non-contiguous bytes of data with single instruction having operand identifying byte mask corresponding to respective blocks of packed data |
US6308255B1 (en) | 1998-05-26 | 2001-10-23 | Advanced Micro Devices, Inc. | Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system |
US6038652A (en) | 1998-09-30 | 2000-03-14 | Intel Corporation | Exception reporting on function generation in an SIMD processor |
US6760837B1 (en) | 1998-10-06 | 2004-07-06 | Texas Instruments Incorporated | Bit field processor |
US20020147969A1 (en) | 1998-10-21 | 2002-10-10 | Richard A. Lethin | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
JP2000284960A (ja) * | 1999-03-08 | 2000-10-13 | Texas Instr Inc <Ti> | ビット・フィールド・プロセッサ |
US6324670B1 (en) | 1999-03-24 | 2001-11-27 | Novell, Inc. | Checksum generator with minimum overflow |
FR2796736B1 (fr) | 1999-07-20 | 2001-11-30 | St Microelectronics Sa | Procede pour effectuer une multiplication avec accumulation dans un corps de galois |
US6675292B2 (en) | 1999-08-13 | 2004-01-06 | Sun Microsystems, Inc. | Exception handling for SIMD floating point-instructions using a floating point status register to report exceptions |
US6711602B1 (en) | 2000-02-18 | 2004-03-23 | Texas Instruments Incorporated | Data processor with flexible multiply unit |
US6760742B1 (en) | 2000-02-18 | 2004-07-06 | Texas Instruments Incorporated | Multi-dimensional galois field multiplier |
US6701424B1 (en) | 2000-04-07 | 2004-03-02 | Nintendo Co., Ltd. | Method and apparatus for efficient loading and storing of vectors |
US7847803B1 (en) | 2000-07-26 | 2010-12-07 | Ati Technologies Ulc | Method and apparatus for interleaved graphics processing |
US6748522B1 (en) | 2000-10-31 | 2004-06-08 | International Business Machines Corporation | Performance monitoring based on instruction sampling in a microprocessor |
US6643821B2 (en) | 2000-11-30 | 2003-11-04 | Stmicroelectronics, Inc. | Method and device for computing incremental checksums |
US6848074B2 (en) | 2001-06-21 | 2005-01-25 | Arc International | Method and apparatus for implementing a single cycle operation in a data processing system |
US6839828B2 (en) | 2001-08-14 | 2005-01-04 | International Business Machines Corporation | SIMD datapath coupled to scalar/vector/address/conditional data register file with selective subpath scalar processing mode |
US20030037085A1 (en) | 2001-08-20 | 2003-02-20 | Sandbote Sam B. | Field processing unit |
US20040054877A1 (en) | 2001-10-29 | 2004-03-18 | Macy William W. | Method and apparatus for shuffling data |
US7013321B2 (en) | 2001-11-21 | 2006-03-14 | Sun Microsystems, Inc. | Methods and apparatus for performing parallel integer multiply accumulate operations |
US7082452B2 (en) | 2001-11-30 | 2006-07-25 | Analog Devices, Inc. | Galois field multiply/multiply-add/multiply accumulate |
US7373483B2 (en) | 2002-04-02 | 2008-05-13 | Ip-First, Llc | Mechanism for extending the number of registers in a microprocessor |
US7313583B2 (en) | 2002-10-22 | 2007-12-25 | Broadcom Corporation | Galois field arithmetic unit for use within a processor |
US20090199075A1 (en) | 2002-11-25 | 2009-08-06 | Victor Demjanenko | Array form reed-solomon implementation as an instruction set extension |
JP3818263B2 (ja) | 2003-01-28 | 2006-09-06 | 日本電気株式会社 | Aes暗号処理装置、aes復号処理装置、aes暗号・復号処理装置、aes暗号処理方法、aes復号処理方法、および、aes暗号・復号処理方法 |
US7139900B2 (en) | 2003-06-23 | 2006-11-21 | Intel Corporation | Data packet arithmetic logic devices and methods |
US7096399B2 (en) | 2003-09-11 | 2006-08-22 | Intel Corporation | Monitoring packet content |
US7383483B2 (en) | 2003-12-11 | 2008-06-03 | International Business Machines Corporation | Data transfer error checking |
US7493481B1 (en) | 2004-05-17 | 2009-02-17 | Netxen, Inc. | Direct hardware processing of internal data structure fields |
US7363574B1 (en) | 2004-10-12 | 2008-04-22 | Nortel Networks Limited | Method and system for parallel CRC calculation |
US20060106910A1 (en) | 2004-11-16 | 2006-05-18 | Analog Devices, Inc. | Galois field polynomial multiplication |
US7512647B2 (en) | 2004-11-22 | 2009-03-31 | Analog Devices, Inc. | Condensed Galois field computing system |
WO2006121444A1 (en) | 2005-05-10 | 2006-11-16 | Telairity Semiconductor, Inc. | Vector processor with special purpose registers and high speed memory access |
FR2885711B1 (fr) | 2005-05-12 | 2007-07-06 | Atmel Corp | Procede et materiel modulaire et aleatoire pour la reduction polynomiale |
US7400271B2 (en) * | 2005-06-21 | 2008-07-15 | International Characters, Inc. | Method and apparatus for processing character streams |
US7333917B2 (en) | 2005-08-11 | 2008-02-19 | The University Of North Carolina At Chapel Hill | Novelty detection systems, methods and computer program products for real-time diagnostics/prognostics in complex physical systems |
US7421566B2 (en) | 2005-08-12 | 2008-09-02 | International Business Machines Corporation | Implementing instruction set architectures with non-contiguous register file specifiers |
US9436468B2 (en) | 2005-11-22 | 2016-09-06 | Intel Corporation | Technique for setting a vector mask |
US7480787B1 (en) | 2006-01-27 | 2009-01-20 | Sun Microsystems, Inc. | Method and structure for pipelining of SIMD conditional moves |
US7925957B2 (en) | 2006-03-20 | 2011-04-12 | Intel Corporation | Validating data using processor instructions |
US20080021943A1 (en) | 2006-07-20 | 2008-01-24 | Advanced Micro Devices, Inc. | Equality comparator using propagates and generates |
US7600104B2 (en) | 2006-08-15 | 2009-10-06 | Peter Neumann | Method and system for parallel vector data processing of vector data having a number of data elements including a defined first bit-length |
US7624251B2 (en) * | 2006-11-01 | 2009-11-24 | Apple Inc. | Instructions for efficiently accessing unaligned partial vectors |
US8346839B2 (en) | 2007-03-30 | 2013-01-01 | Intel Corporation | Efficient advanced encryption standard (AES) datapath using hybrid rijndael S-box |
US8560591B2 (en) | 2007-04-25 | 2013-10-15 | International Business Machines Corporation | Detection of potential need to use a larger data format in performing floating point operations |
US8055886B2 (en) | 2007-07-12 | 2011-11-08 | Texas Instruments Incorporated | Processor micro-architecture for compute, save or restore multiple registers and responsive to first instruction for repeated issue of second instruction |
US9529592B2 (en) | 2007-12-27 | 2016-12-27 | Intel Corporation | Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation |
US8112691B1 (en) | 2008-03-25 | 2012-02-07 | Oracle America, Inc. | Method for efficient generation of a Fletcher checksum using a single SIMD pipeline |
US8255443B2 (en) | 2008-06-03 | 2012-08-28 | International Business Machines Corporation | Execution unit with inline pseudorandom number generator |
US8051226B2 (en) | 2008-06-13 | 2011-11-01 | Freescale Semiconductor, Inc. | Circular buffer support in a single instruction multiple data (SIMD) data processor |
US8340280B2 (en) | 2008-06-13 | 2012-12-25 | Intel Corporation | Using a single instruction multiple data (SIMD) instruction to speed up galois counter mode (GCM) computations |
JP5268469B2 (ja) | 2008-07-23 | 2013-08-21 | 株式会社東芝 | 高可用システム及び実行状態制御方法 |
US8793472B2 (en) | 2008-08-15 | 2014-07-29 | Apple Inc. | Vector index instruction for generating a result vector with incremental values based on a start value and an increment value |
US8175265B2 (en) | 2008-09-02 | 2012-05-08 | Apple Inc. | Systems and methods for implementing block cipher algorithms on attacker-controlled systems |
GB2464292A (en) | 2008-10-08 | 2010-04-14 | Advanced Risc Mach Ltd | SIMD processor circuit for performing iterative SIMD multiply-accumulate operations |
CN101430881B (zh) | 2008-11-10 | 2013-04-17 | 华为技术有限公司 | 一种编码、解码、编解码方法、编解码系统以及相关装置 |
US8280040B2 (en) | 2009-02-04 | 2012-10-02 | Globalfoundries Inc. | Processor instructions for improved AES encryption and decryption |
CN101901127B (zh) | 2009-05-31 | 2012-07-25 | 国际商业机器公司 | 一种迦罗华域乘法器 |
GB2470782B (en) | 2009-06-05 | 2014-10-22 | Advanced Risc Mach Ltd | A data processing apparatus and method for handling vector instructions |
US8918623B2 (en) | 2009-08-04 | 2014-12-23 | International Business Machines Corporation | Implementing instruction set architectures with non-contiguous register file specifiers |
US20110047358A1 (en) | 2009-08-19 | 2011-02-24 | International Business Machines Corporation | In-Data Path Tracking of Floating Point Exceptions and Store-Based Exception Indication |
CN102122241A (zh) | 2010-01-08 | 2011-07-13 | 复旦大学 | 一种适用于素域和多项式域的模乘模除器 |
US8850166B2 (en) | 2010-02-18 | 2014-09-30 | International Business Machines Corporation | Load pair disjoint facility and instruction therefore |
US8417961B2 (en) | 2010-03-16 | 2013-04-09 | Oracle International Corporation | Apparatus and method for implementing instruction support for performing a cyclic redundancy check (CRC) |
US8645669B2 (en) | 2010-05-05 | 2014-02-04 | International Business Machines Corporation | Cracking destructively overlapping operands in variable length instructions |
US8539472B2 (en) | 2010-06-09 | 2013-09-17 | Lear Corporation | Method and system of updating shared memory |
US20110314263A1 (en) | 2010-06-22 | 2011-12-22 | International Business Machines Corporation | Instructions for performing an operation on two operands and subsequently storing an original value of operand |
US8903882B2 (en) | 2010-12-13 | 2014-12-02 | International Business Machines Corporation | Method and data processing unit for calculating at least one multiply-sum of two carry-less multiplications of two input operands, data processing program and computer program product |
PL3422178T3 (pl) | 2011-04-01 | 2023-06-26 | Intel Corporation | Przyjazny dla wektorów format instrukcji i jego wykonanie |
WO2013048369A1 (en) | 2011-09-26 | 2013-04-04 | Intel Corporation | Instruction and logic to provide vector load-op/store-op with stride functionality |
US9665371B2 (en) | 2011-11-30 | 2017-05-30 | Intel Corporation | Providing vector horizontal compare functionality within a vector register |
CN103959236B (zh) | 2011-11-30 | 2016-12-07 | 英特尔公司 | 用于提供向量横向多数表决功能的处理器、设备和处理系统 |
US10157061B2 (en) | 2011-12-22 | 2018-12-18 | Intel Corporation | Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks |
CN107220027A (zh) | 2011-12-23 | 2017-09-29 | 英特尔公司 | 用于执行掩码位压缩的系统、装置以及方法 |
CN104011662B (zh) | 2011-12-23 | 2017-05-10 | 英特尔公司 | 用于提供向量混合和置换功能的指令和逻辑 |
US20140201499A1 (en) | 2011-12-23 | 2014-07-17 | Elmoustapha Ould-Ahmed-Vall | Systems, apparatuses, and methods for performing conversion of a list of index values into a mask value |
WO2013095609A1 (en) | 2011-12-23 | 2013-06-27 | Intel Corporation | Systems, apparatuses, and methods for performing conversion of a mask register into a vector register |
US9575757B2 (en) | 2011-12-30 | 2017-02-21 | Intel Corporation | Efficient zero-based decompression |
US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
US9588762B2 (en) | 2012-03-15 | 2017-03-07 | International Business Machines Corporation | Vector find element not equal instruction |
US9459867B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a specified memory boundary indicated by the instruction |
CN102819710B (zh) | 2012-08-22 | 2014-11-12 | 西北工业大学 | 基于渗透测试的跨站点脚本漏洞检测方法 |
US9606961B2 (en) | 2012-10-30 | 2017-03-28 | Intel Corporation | Instruction and logic to provide vector compress and rotate functionality |
US9256427B2 (en) | 2012-12-11 | 2016-02-09 | International Business Machines Corporation | Tracking multiple conditions in a general purpose register and instruction therefor |
US9411589B2 (en) | 2012-12-11 | 2016-08-09 | International Business Machines Corporation | Branch-free condition evaluation |
US9152419B2 (en) | 2012-12-18 | 2015-10-06 | Intel Corporation | Instruction set for supporting wide scalar pattern matches |
US9411584B2 (en) | 2012-12-29 | 2016-08-09 | Intel Corporation | Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality |
US9372692B2 (en) | 2012-12-29 | 2016-06-21 | Intel Corporation | Methods, apparatus, instructions, and logic to provide permute controls with leading zero count functionality |
US9411592B2 (en) | 2012-12-29 | 2016-08-09 | Intel Corporation | Vector address conflict resolution with vector population count functionality |
US9471308B2 (en) | 2013-01-23 | 2016-10-18 | International Business Machines Corporation | Vector floating point test data class immediate instruction |
US9778932B2 (en) | 2013-01-23 | 2017-10-03 | International Business Machines Corporation | Vector generate mask instruction |
US9715385B2 (en) | 2013-01-23 | 2017-07-25 | International Business Machines Corporation | Vector exception code |
US9513906B2 (en) | 2013-01-23 | 2016-12-06 | International Business Machines Corporation | Vector checksum instruction |
US9823924B2 (en) | 2013-01-23 | 2017-11-21 | International Business Machines Corporation | Vector element rotate and insert under mask instruction |
US9804840B2 (en) | 2013-01-23 | 2017-10-31 | International Business Machines Corporation | Vector Galois Field Multiply Sum and Accumulate instruction |
US9886277B2 (en) | 2013-03-15 | 2018-02-06 | Intel Corporation | Methods and apparatus for fusing instructions to provide OR-test and AND-test functionality on multiple test sources |
US9513907B2 (en) | 2013-08-06 | 2016-12-06 | Intel Corporation | Methods, apparatus, instructions and logic to provide vector population count functionality |
US9495155B2 (en) | 2013-08-06 | 2016-11-15 | Intel Corporation | Methods, apparatus, instructions and logic to provide population count functionality for genome sequencing and alignment |
US9552205B2 (en) | 2013-09-27 | 2017-01-24 | Intel Corporation | Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions |
US9436434B2 (en) | 2014-03-14 | 2016-09-06 | International Business Machines Corporation | Checksum adder |
-
2013
- 2013-01-23 US US13/748,543 patent/US9823924B2/en active Active
- 2013-11-21 CN CN201380071234.9A patent/CN104937543B/zh active Active
- 2013-11-21 DE DE112013005500.7T patent/DE112013005500T5/de not_active Ceased
- 2013-11-21 JP JP2015553179A patent/JP6399522B2/ja active Active
- 2013-11-21 GB GB1514708.5A patent/GB2525357A/en not_active Withdrawn
- 2013-11-21 WO PCT/IB2013/060309 patent/WO2014114997A1/en active Application Filing
-
2014
- 2014-12-05 US US14/561,276 patent/US9823926B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5487159A (en) * | 1993-12-23 | 1996-01-23 | Unisys Corporation | System for processing shift, mask, and merge operations in one instruction |
US6088782A (en) * | 1997-07-10 | 2000-07-11 | Motorola Inc. | Method and apparatus for moving data in a parallel processor using source and destination vector registers |
CN101154153A (zh) * | 2006-09-26 | 2008-04-02 | 冲电气工业株式会社 | 位域操作电路 |
CN102473104A (zh) * | 2009-08-19 | 2012-05-23 | 国际商业机器公司 | 插入用于优化的simd代码的操作-和-指示指令 |
Also Published As
Publication number | Publication date |
---|---|
GB201514708D0 (en) | 2015-09-30 |
US9823924B2 (en) | 2017-11-21 |
CN104937543A (zh) | 2015-09-23 |
JP2016510461A (ja) | 2016-04-07 |
DE112013005500T5 (de) | 2016-01-21 |
US9823926B2 (en) | 2017-11-21 |
WO2014114997A1 (en) | 2014-07-31 |
GB2525357A (en) | 2015-10-21 |
US20150143088A1 (en) | 2015-05-21 |
JP6399522B2 (ja) | 2018-10-03 |
US20140208067A1 (en) | 2014-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104937542B (zh) | 向量校验和指令 | |
CN104956319B (zh) | 向量浮点测试数据类立即指令 | |
CN104956323B (zh) | 向量伽罗瓦域乘法求和与累加指令 | |
CN104937543B (zh) | 向量元素旋转和掩码下插入指令 | |
CN104956364B (zh) | 用于促进异常处理的方法和系统 | |
CN104937538B (zh) | 向量生成掩码指令 | |
CN104169907B (zh) | 向量寻找元素相等指令 | |
CN104169870B (zh) | 用于复制数据集的方法和计算机系统 | |
CN104205067B (zh) | 将数据载入直到由指令所指示的指定存储器边界的指令 | |
CN104169869B (zh) | 比较具有终止字符的字符数据集 | |
CN104169868B (zh) | 用于在中央处理单元中执行机器指令的方法和系统 | |
CN104185872B (zh) | 用于在中央处理单元中执行机器指令的方法和系统 | |
CN104169906B (zh) | 用于在中央处理单元中执行机器指令的方法和系统 | |
CN104169877B (zh) | 将不相邻指令区分符变换为相邻指令区分符 | |
CN104185839B (zh) | 将数据载入寄存器的方法和系统 | |
CN104252586B (zh) | 促进在处理环境中的处理的方法和计算机系统 | |
TWI554946B (zh) | 尋找一組具有終止字元之字元資料之長度之電腦程式產品、電腦系統及方法 | |
CN104252336B (zh) | 基于解码时间指令优化来形成指令组的方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |