四字16的制作方法


四字16
×
16乘法和累加的双求和


背景技术:



1.在使用32位、16位、8位、4位整数数据类型(其中,数据是有符号的并且过滤器是无符号的)的感测应用(如卷积神经网络)中的若干种感测应用中。这些应用利用图像数据和不同的过滤器来执行点积操作。还存在如人类检测、基于雷达的手势识别等点积操作中涉及多个通道。
附图说明
2.将参考附图来描述根据本公开的各实施例,其中:
3.图1图示dvpdpwsuq或dvpdpwusq指令的示例性执行。
4.图2图示用于处理诸如dvpdpwsuq或dvpdpwusq指令之类的指令的硬件的实施例。
5.图3图示用于处理无符号字和有符号字的向量紧缩乘法和64位的累加或者有符号字和无符号字的向量紧缩乘法和64位的累加的方法的实施例。
6.图4图示无符号字和有符号字的向量紧缩乘法和累加指令或者有符号字和无符号字的向量紧缩乘法和累加指令的执行的实施例。
7.图5图示无符号字和有符号字的向量紧缩乘法和累加指令或者有符号字和无符号字的向量紧缩乘法和累加指令的伪代码的实施例。
8.图6图示示例性系统的实施例。
9.图7图示可具有多于一个的核、可具有集成存储器控制器、并且可具有集成图形器件的处理器的实施例的框图。
10.图8(a)是图示根据本发明的实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线两者的框图。
11.图8(b)是图示根据本发明的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核两者的框图。
12.图9图示(多个)执行单元电路的实施例,诸如图8(b)的(多个)执行单元电路。
13.图10是根据一些实施例的寄存器架构的框图。
14.图11图示指令格式的实施例。
15.图12图示寻址字段的实施例。
16.图13图示第一前缀的实施例。
17.图14(a)-图14(d)图示如何使用第一前缀1101(a)的r、x和b字段的实施例。
18.图15(a)-图15(b)图示第二前缀的实施例。
19.图16图示第三前缀的实施例。
20.图17图示根据本发明的实施例的、对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
21.本公开涉及用于使用一条或多条指令处置第一尺寸的无符号数据元素和有符号
数据元素的向量紧缩乘法和累加、以及与第二尺寸的数据元素的累加的方法、装置、系统和非暂态计算机可读存储介质。
22.一些处理器核的当前版本使用乘法整数指令来完成点积操作。不幸的是,此种方式对应一些应用而言可能不够快和/或不支持使用有符号和无符号值。对于执行16位无符号和有符号整数数据类型的点积的感测算法中的许多感测算法,指令的实施例改善了性能并实现了用于客户产品的新的传感器用例。这还有助于减少代码存储器占用空间(footprint)。对于若干感测算法,紧缩点积操作还提供了性能增益。点积通常用于fir滤波器、基于雷达的人类检测、姿势识别以及统计学分析。算法执行之后的减少的代码占用空间和性能改善也有助于降低功率。
23.在一些实施例中,第一指令为dvpdpwusq xmm1,xmm2,xmm3/m128指令,该指令在被处理时引起无符号字和有符号字的向量紧缩乘法和64位的累加。在一些实施例中,第二指令为dvpdpwsuq xmm1,xmm2,xmm3/m128指令,该指令在被处理时引起有符号字和无符号字的向量紧缩乘法和64位的累加。
24.图1图示dvpdpwsuq或dvpdpwusq指令的示例性执行。尽管该示图按照小端(little endian)格式,但是本文讨论的原理按大端(big endian)格式也起作用。dvpdpwsuq或dvpdpwusq指令包括用于目的地/源(紧缩数据(simd/向量)目的地/源(dst/source)105)和两个源(紧缩数据源1(src1)101和紧缩数据源2(src2)103)的字段。在一些实施例中,紧缩数据(或simd或向量)元素是16位的(字)。注意,最终结果在被存储在目的地/源中时包括两个64位的(四字)值。然而,在一些实施例中,使用尺寸为32位和128位、64位和256位、64位和512位等等的其他数据元素组合。注意,取决于指令,源中的一者具有有符号值(例如,有符号整数)并且另一者具有无符号值。另外,操作数自身的尺寸可能在尺寸上有所不同,诸如例如,32位紧缩数据操作数(例如,32位寄存器或存储器位置)、64位、128位、256位、512位等。
25.紧缩数据源1 101包括8个紧缩数据元素。取决于实现方式,紧缩数据源1 101是紧缩数据寄存器(例如,128位(例如,xmm)、256位(例如,ymm)、512位(例如,zmm)、向量、simd等寄存器)或存储器位置。
26.紧缩数据源2 103包括8个紧缩数据元素。取决于实现方式,紧缩数据源2 103是紧缩数据寄存器(例如,xmm、ymm、zmm、向量、simd等寄存器)或存储器位置。
27.将两个紧缩数据源101、103馈送到执行电路111中以对其进行操作。如所示,执行电路111包括输入多路复用器(mux)121,以将来自紧缩数据源101和103的输入值多路复用到特定的乘法器(如内部具有x的圆所示)。具体而言,将来自紧缩数据源101和103的对应数据元素位置(例如,源1的数据元素位置a和源2的数据元素位置a)的值相乘。在一些实施例的值,16位的值从多路复用器121被馈送至乘法器。
28.这些乘法器的输出被馈送到两个加法器网络122和123中的一者。将紧缩数据源101和103的最低有效的数据元素位置相乘的结果馈送到加法器网络123中,并且将紧缩数据源101和103的最高有效的数据元素位置相乘的结果馈送到加法器网络122中,以将乘积相加。加法器网络122和123还对所加的乘积进行符号扩展。
29.(具有累加器124和125的)累加器层将加法器网络122和123的结果与目的地/源105中现有的值相加,并将加法的结果存储在目的地/源105中。注意,加法采用与紧缩数据
源101和103的数据元素不同的尺寸。例如,将两个64位值相加。在一些实施例中,从目的地/源105提供的值是65位值。
30.图2图示用于处理诸如dvpdpwsuq或dvpdpwusq指令之类的指令的硬件的实施例。如图所示,存储203存储要被执行的dvpdpwsuq或dvpdpwusq指令201。
31.指令201由解码电路205接收。例如,解码电路205从取出逻辑/电路接收该指令。如上文所指示,指令包括用于操作码、第一源和第二源、和源/目的地的字段。在一些实施例中,源和目的地是寄存器,并且在其他实施例中,源和目的地中的一者或多者是存储器位置。
32.稍后将详述至少一个指令格式的更详细的实施例。解码电路205将指令解码为一个或多个操作。在一些实施例中,该解码包括:生成要由执行电路(诸如,执行电路209)执行的多个微操作。解码电路205还对指令前缀解码。
33.在一些实施例中,寄存器重命名、寄存器分配和/或调度电路207提供用于以下项中的一项或多项的功能:1)将逻辑操作数值重命名为物理操作数值(例如,在一些实施例中的寄存器别名表);2)将状态位和标志分配到经解码的指令;以及3)将用于在执行电路上执行的经解码的指令调度出指令池(例如,在一些实施例中使用预留站)。
34.寄存器(寄存器堆)和/或存储器208将数据存储为要被执行电路209操作的指令的操作数。示例性寄存器类型包括紧缩数据寄存器、通用寄存器和浮点寄存器。
35.执行电路209执行经解码的指令。示例性的详细的执行电路在图1、图8(b)等中示出。经解码的指令的执行使得执行电路用于执行无符号字和有符号字的向量紧缩相乘和64位的累加或者有符号字和无符号字的向量紧缩相乘和64位的累加。
36.在一些实施例中,引退/写回电路211在架构上将目的地寄存器提交到寄存器或存储器208中,并且引退指令。
37.指令的格式的实施例为dvpdpwsuq dstsrc,src1,src2。在一些实施例中,dvpdpwsuq是指令的操作码助记符。dstsrc是用于紧缩数据目的地/源操作数的字段。src1和src2是用于诸如紧缩数据寄存器和/或存储器的源的字段。在一些实施例中,dstsrc操作数使用modrm:reg字段1244来引用,第一源使用第二前缀1101(b)的vvvv位来引用,并且第二源使用mod r/m reg字段1244来引用。注意,第二源可以是存储器位置或寄存器。
38.指令的格式的实施例为dvpdpwusq dstsrc,src1,src2。在一些实施例中,dvpdpwusq是指令的操作码助记符。dstsrc是用于紧缩数据目的地/源操作数的字段。src1和src2是用于诸如紧缩数据寄存器和/或存储器的源的字段。在一些实施例中,dstsrc操作数使用modrm:reg字段1244来引用,第一源使用第二前缀1101(b)的vvvv位来引用,并且第二源使用mod r/m reg字段1244来引用。注意,第二源可以是存储器位置或寄存器。
39.图3图示用于处理无符号字和有符号字的向量紧缩乘法和64位的累加、或者有符号字和无符号字的向量紧缩乘法和64位的累加的方法的实施例。注意,发生改变的是哪个源是有符号的。例如,如图8(b)中所示的处理器核、如下文详述的流水线等执行该方法。在一些实施例中,处理器核包括用于执行指令集架构(isa)变换的指令变换器。在其他实施例中,使用基于软件的变换。
40.在301处,取出单条指令。在一些实施例中,单条指令具有用于操作码的字段、用于指示源/目的地操作数的位置的一个或多个字段、用于指示第一源操作数的位置的一个或
多个字段、以及用于指示第二源操作数的位置的一个或多个字段,其中,操作码用于指示执行电路用于执行第一和第二源操作数与源/目的地操作数的所乘和所累加的值的双求和(也被描述为无符号字和有符号字的向量紧缩乘法和累加操作、或者有符号字和无符号字的向量紧缩乘法和累加操作)。具体而言,指示执行电路用于将来自第一源操作数和第二源操作数的对应数据元素的值相乘,将所乘的值的第一子集与来自源/目的地操作数的第一值相加并存储在源/目的地操作数的第一数据元素位置中,并且将所乘的值的第二子集与来自源/目的地操作数的第二值相加并存储在源/目的地操作数的第二数据元素位置中。上文已经详述这一点的示例。
41.操作码指示第一源操作数和第二源操作数中哪一者是有符号的,并且指示数据元素尺寸中的至少一些。在一些实施例中,第一和第二源操作数存储16位整数值。在一些实施例中,第一和第二源操作数存储16位浮点值。在一些实施例中,源/目的地存储64位整数值。在一些实施例中,源/目的地存储64位浮点值。
42.在一些实施例中,在302处,将第一指令集架构的所取出的指令变换为第二指令集架构的一条或多条指令。
43.在303处,对第一指令集架构的单条指令或者第二指令集架构的一条或多条经变换的指令进行解码。
44.在305处,检取与经解码的指令的源操作数相关联的数据值并且调度(多条)指令。例如,当源操作数中的一个或多个是存储器操作数时,检取来自所指示的存储器位置的数据。
45.在307处,由指令处理资源执行经解码的第一指令集架构的单条指令或经解码的第二指令集架构的(多条)指令,该指令处理资源诸如本文中所详述的、用于执行由第一指令集架构的单条第一指令的操作码指示的操作的指令处理资源。
46.在一些实施例中,在309处,提交或引退指令。
47.图4图示无符号字和有符号字的向量紧缩乘法和累加指令或者有符号字和无符号字的向量紧缩乘法和累加指令的执行的实施例。例如,在一些实施例中,这表示图3的框307。
48.在401处,对于第一源操作数和第二源操作数的下半部,使来自第一源操作数的每个紧缩数据元素位置的值乘以来自第二源操作数的对应紧缩数据元素位置的值以生成多个乘法结果,并且对该多个乘法结果求和作为第一临时值。
49.在403处,对于第一源操作数和第二源操作数的上半部,使来自第一源操作数的每个紧缩数据元素位置的值乘以来自第二源操作数的对应紧缩数据元素位置的值以生成多个乘法结果,并且对该多个乘法结果求和作为第二临时值。
50.在405处,对第一临时值和第二临时值进行扩展。例如,对临时值进行符号扩展。在一些实施例中,这些值被扩展为34位值。
51.在407处,第一经扩展的临时值与源/目的地操作数的下半部相加,并且加法的结果被存储在源/目的地操作数的下半部中。
52.在409处,第二经扩展的临时值与源/目的地操作数的上半部相加,并且加法的结果被存储在源/目的地操作数的上半部中。
53.图5图示无符号字和有符号字的向量紧缩乘法和累加或者有符号字和无符号字的
向量紧缩乘法和累加指令的伪代码的实施例。在该示例中,dest是源/目的地。
54.本文中所描述的指令可以采用各种架构、系统和指令格式来实现。下文详述的是此类架构等的示例性支持性实施例。示例性计算机架构
55.下文详述的是对示例性计算机架构的描述。本领域中已知的对膝上型设备、台式机、手持式pc、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。
56.图6图示示例系统的实施例。多处理器系统600是点对点互连系统,并且包括多个处理器,多个处理器包括经由点对点互连650耦合的第一处理器670和第二处理器680。在一些实施例中,第一处理器670和第二处理器680是同构的。在一些实施例中,第一处理器670和第二处理器680是异构的。
57.处理器670和680示出为分别包括集成存储器控制器(imc)单元电路672和682。处理器670还包括作为其互连控制器单元的一部分的点对点(p-p)接口676和678;类似地,第二处理器680包括p-p接口686和688。处理器670、680可以经由使用点对点(p-p)接口电路678、688的p-p互连650来交换信息。imc 672和682将处理器670、680耦合到相应的存储器,即存储器632和存储器634,这些存储器可以是本地附连到相应处理器的主存储器的部分。
58.处理器670、680可各自经由使用点对点接口电路676、694、686和698的各个p-p互连652和654与芯片组690交换信息。芯片组690可以任选地经由高性能接口692来与协处理器638交换信息。在一些实施例中,协处理器638是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。
59.共享高速缓存(未示出)可被包括在任一处理器670、680中,或在这两个处理器的外部但经由p-p互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
60.芯片组690可以经由接口696耦合到第一互连616。在一些实施例中,第一互连616可以是外围组件互连(pci)互连或诸如pci快捷互连或另一i/o互连之类的互连。在一些实施例中,这些互连中的一个耦合到功率控制单元(pcu)617,功率控制单元617可以包括用于执行与处理器670、680和/或协处理器638有关的功率管理操作的电路、软件和/或固件。pcu 617将控制信息提供给电压调节器,以使电压调节器生成适当的经调节的电压。pcu 617还提供控制信息以控制所生成的操作电压。在各实施例中,pcu 617可包括用于执行基于硬件的功率管理的各种功率管理逻辑单元(电路)。此类功率管理可以完全由处理器控制(例如,由各种处理器硬件控制,并且其可以由工作负载和/或功率、热约束或其他处理器约束触发),并且/或者功率管理可以响应于外部源(诸如,平台或管理功率源或系统软件)而被执行。
61.pcu 617被图示为作为与处理器670和/或处理器680分开的逻辑存在。在其他情形下,pcu 617可以在处理器670或680的核中的给定的一个或多个核(未示出)上执行。在一些情况下,可将pcu 617实现为被配置成用于执行其自身的专用功率管理代码(有时被称为p
代码)的(专用的或通用的)微控制器或其他控制逻辑。在另外的其他实施例中,将由pcu 617执行的功率管理操作可在处理器外部实现,诸如,通过分开的功率管理集成电路(pmic)或处理器外部的另一组件的方式。在另外的其他实施例中,将由pcu 617执行的功率管理操作可在bios或其他系统软件内实现。
62.各种i/o设备614可连同互连(总线)桥618耦合至第一互连616,互连桥618将第一互连616耦合至第二互连620。在一些实施例中,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列(fpga)或任何其他处理器的一个或多个附加处理器615耦合到第一互连616。在一些实施例中,第二互连620可以是低引脚数(lpc)互连。各种设备可以耦合到第二互连620,包括例如,键盘和/或鼠标622、通信设备627和存储单元电路628。在一些实施例中,存储单元电路628可以是可以包括指令/代码和数据630的盘驱动器或其他大容量存储设备。此外,音频i/o 624可被耦合至第二互连620。注意,与上述点对点架构不同的其他架构是可能的。例如,代替点对点架构,诸如多处理器系统600之类的系统可以实现多分支互连或其他此类架构。示例性核架构、处理器和计算机架构
63.处理器核能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核的实现方式可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现方式可包括:1)cpu,其包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核。此类不同的处理器导致不同的计算机系统架构,这些计算机系统架构可包括:1)在与cpu分开的芯片上的协处理器;2)在与cpu相同的封装中但在分开的管芯上的协处理器;3)与cpu在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)芯片上系统,其可以将所描述的cpu(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
64.图7图示可具有多于一个的核、可具有集成存储器控制器、并且可具有集成图形器件的处理器700的实施例的框图。实线框图示具有单个核702a、系统代理710、以及一个或多个互连控制器单元电路的集合716的处理器700,而虚线框的任选添加图示具有多个核702(a)-(n)、系统代理单元电路710中的一个或多个集成存储器控制器单元电路的集合714、和专用逻辑708、以及一个或多个互连控制器单元电路的集合716的替代处理器700。注意,处理器700可以是图6的处理器670或680、或者协处理器638或615中的一个。
65.因此,处理器700的不同实现方式可包括:1)cpu,其中专用逻辑708是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核,未示出),并且核702(a)-(n)是一个或多个通用核(例如,通用有序核、通用乱序核、或这两者的组合);2)协处理器,其中核702(a)-(n)是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核702(a)-(n)是大量通用有序核。因此,处理器700可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元电路)、高吞吐量的集成众核(mic)协处理器(包括30个或更多核)、嵌入式处理器,等等。处理器可以被实
现在一个或多个芯片上。处理器700可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,bicmos、cmos、或nmos)中的任何技术被实现在一个或多个基板上。
66.存储器层级结构包括核702(a)-(n)内的一个或多个级别的高速缓存单元电路704(a)-(n)、一个或多个共享高速缓存单元电路的集合706、以及耦合至集成存储器控制器单元电路的集合714的外部存储器(未示出)。一个或多个共享高速缓存单元电路的集合706可包括一个或多个中间级别的高速缓存(诸如第二级(l2)、第三级(l3)、第四级(l4))或其他级别的高速缓存(诸如末级高速缓存(llc))和/或以上各项的组合。尽管在一些实施例中,基于环的互连网络电路712将专用逻辑708(例如,集成图形逻辑)、共享高速缓存单元电路的集合706以及系统代理单元电路710互连,但替代实施例使用任何数量的公知技术来将这些单元互连。在一些实施例中,维持共享高速缓存单元电路706和核702(a)-(n)中的一个或多个之间的一致性。
67.在一些实施例中,核702(a)-(n)中的一个或多个能够实现多线程化。系统代理单元电路710包括协调和操作核702(a)-(n)的那些组件。系统代理单元电路710可包括例如功率控制单元(pcu)电路和/或显示单元电路(未示出)。pcu可以是对核702(a)-(n)和/或专用逻辑708(例如,集成图形逻辑)的功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元电路用于驱动一个或多个外部连接的显示器。
68.核702(a)-(n)在架构指令集方面可以是同构的或异构的;即,核702(a)-(n)中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。示例性核架构有序和乱序核框图
69.图8(a)是图示根据本发明的实施例的示例性有序流水线以及示例性寄存器重命名的乱序发布/执行流水线两者的框图。图8(b)是图示根据本发明的实施例的要包括在处理器中的有序架构核的示例性实施例和示例性寄存器重命名的乱序发布/执行架构核两者的框图。图8(a)-图8(b)中的实线框图示有序流水线和有序核,而虚线框的任选添加图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。
70.在图8(a)中,处理器流水线800包括取出级802、可选的长度解码级804、解码级806、可选的分配级808、可选的重命名级810、调度(也称为分派或发布)级812、可选的寄存器读取/存储器读取级814、执行级816、写回/存储器写入级818、可选的异常处置级822、以及可选的提交级824。一个或多个操作可以在这些处理器流水线级中的每一级中执行。例如,在取出级802期间,从指令存储器取出一条或多条指令,在解码级806期间,可以对所取出的一条或多条指令进行解码,可以生成使用所转发的寄存器端口的地址(例如,加载存储单元(lsu)地址),并且可以执行分支转发(例如,立即数偏移或链接寄存器(lr))。在一个实施例中,解码级806和寄存器读取/存储器读取级814可以组合成一个流水线级。在一个实施例中,在执行级816期间,可以执行经解码的指令,可以执行lsu地址/数据流水线到高级微控制器总线(ahb)接口,可以执行乘法和加法操作,可以执行具有分支结果的算术操作,等等。
71.作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水
线800:1)指令取出838执行取出级802和长度解码级804;2)解码单元电路840执行解码级806;3)重命名/分配器单元电路852执行分配级808和重命名级810;4)(多个)调度器单元电路856执行调度级812;5)(多个)物理寄存器堆单元电路858和存储器单元电路870执行寄存器读取/存储器读取级814;执行集860执行执行级816;6)存储器单元电路870和(多个)物理寄存器堆单元电路858执行写回/存储器写入级818;7)各单元(单元电路)可牵涉到异常处置级822;以及8)引退单元电路854和(多个)物理寄存器堆单元电路858执行提交级824。
72.图8(b)示出处理器核890,处理器核890包括耦合到执行引擎单元电路850的前端单元电路830,并且两者耦合到存储器单元电路870。核890可以是精简指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vliw)核、或混合或替代的核类型。作为又一选项,核890可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(gpgpu)核、图形核,等等。
73.前端单元电路830可包括耦合至指令高速缓存单元电路834的分支预测单元电路832,该指令高速缓存单元电路834耦合至指令转换后备缓冲器(tlb)836,该指令转换后备缓冲器836耦合至指令取出单元电路838,该指令取出单元电路838耦合至解码单元电路840。在一个实施例中,指令高速缓存单元电路834被包括在存储器单元电路870中,而不是在前端单元电路830中。解码单元电路840(或解码器)可对指令解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元电路840可进一步包括地址生成单元电路(agu,未示出)。在一个实施例中,agu使用所转发的寄存器端口生成lsu地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发、lr寄存器分支转发等)。解码单元电路840可使用各种不同的机制来实现。合适机制的示例包括但不限于,查表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核890包括存储用于某些宏指令的微代码的微代码rom(未示出)或其他介质(例如,在解码单元电路840中,或以其他方式在前端单元电路830内)。在一个实施例中,解码单元电路840包括微操作(micro-op)或操作高速缓存(未示出)以保持/高速缓存在处理器流水线800的解码级806或其他级期间生成的经解码的操作、微标签或微操作。解码单元电路840可耦合到执行引擎单元电路850中的重命名/分配器单元电路852。
74.执行引擎电路850包括重命名/分配器单元电路852,该重命名/分配器单元电路852耦合到引退单元电路854和一个或多个调度器电路的集合856。(多个)调度器电路856表示任意数量的不同调度器,包括预留站、中央指令窗口等。在一些实施例中,(多个)调度器电路856可以包括算术逻辑单元(alu)调度器/调度电路、alu队列、算术生成单元(agu)调度器/调度电路、agu队列,等等。(多个)调度器电路856耦合到(多个)物理寄存器堆电路858。(多个)物理寄存器堆电路858中的每个物理寄存器堆电路表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一条指令的地址的指令指针)等。在一个实施例中,(多个)物理寄存器堆单元电路858包括向量寄存器单元电路、写掩码寄存器单元电路和标量寄存器单元电路。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、通用寄存器等。(多个)物理寄存器堆单元电路858由引退单元电路854(也称为引退队列)重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用
(多个)重排序缓冲器(rob)和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器和(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元电路854和(多个)物理寄存器堆电路858耦合到(多个)执行集860。(多个)执行集860包括一个或多个执行单元电路的集合862以及一个或多个存储器访问电路的集合864。执行单元电路862可执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元或执行单元电路,但是其他实施例可包括仅一个执行单元电路或全都执行所有功能的多个执行单元/执行单元电路。(多个)调度器电路856、(多个)物理寄存器堆单元电路858和(多个)执行集860示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器电路、(多个)物理寄存器堆单元电路和/或执行集的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集具有(多个)存储器访问单元电路864的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。
75.在一些实施例中,执行引擎单元电路850可执行加载存储单元(lsu)地址/数据流水线到高级微控制器总线(ahb)接口(未示出)、以及地址分阶段和写回、数据分阶段加载、存储和分支。
76.存储器访问电路的集合864耦合到存储器单元电路870,该存储器单元电路870包括数据tlb单元电路872,该数据tlb单元电路872耦合到数据高速缓存电路874,该数据高速缓存电路874耦合到第二级(l2)高速缓存电路876。在一个示例性实施例中,存储器访问单元电路864可包括加载单元电路、存储地址单元电路和存储数据单元电路,其中的每一个均耦合至存储器单元电路870中的数据tlb电路872。指令高速缓存电路834还耦合到存储器单元电路870中的第二级(l2)高速缓存单元电路876。在一个实施例中,指令高速缓存834和数据高速缓存874被组合为l2高速缓存单元电路876、第三级(l3)高速缓存单元电路(未示出)和/或主存储器中的单个指令和数据高速缓存(未示出)。l2高速缓存单元电路876耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。
77.核890可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);mips指令集;arm指令集(具有诸如neon的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核890包括用于支持紧缩数据指令集扩展(例如,avx1、avx2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。示例性(多个)执行单元电路
78.图9图示(多个)执行单元电路的实施例,诸如图8(b)的(多个)执行单元电路862。如图所示,(多个)执行单元电路862可以包括一个或多个alu电路901、向量/simd单元电路903、加载/存储单元电路905、和/或分支/跳转单元电路907。alu电路901执行整数算术和/或布尔运算。向量/simd单元电路903对紧缩数据(诸如simd/向量寄存器)执行向量/simd操作。加载/存储单元电路905执行加载和存储指令,以将数据从存储器加载到寄存器中或将数据从寄存器存储到存储器。加载/存储单元电路905也可以生成地址。分支/跳转单元电路907取决于指令而引起到存储器地址的分支或跳转。浮点单元(fpu)电路909执行浮点算术。
(多个)执行单元电路862的宽度取决于实施例而变化,并且范围可以从16位到1024位。在一些实施例中,两个或更多个较小的执行单元在逻辑上被组合以形成较大的执行单元(例如,两个128位执行单元在逻辑上被组合以形成256位执行单元)。示例性寄存器架构
79.图10是根据一些实施例的寄存器架构1000的框图。如图所示,存在向量/simd寄存器1010,在宽度上从128位到1024位变化。在一些实施例中,向量/simd寄存器1010在物理上是512位的,并且取决于映射,只有较低位中的一些位被使用。例如,在一些实施例中,向量/simd寄存器1010是512位的zmm寄存器:较低的256位用于ymm寄存器,并且较低的128位用于xmm寄存器。由此,存在寄存器的叠加。在一些实施例中,向量长度字段在最大长度与一个或多个其他较短长度之间进行选择,其中每个此类较短长度是前一长度的一半长度。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于实施例,较高阶数据元素位置保持与在指令之前相同或者被归零。
80.在一些实施例中,寄存器架构1000包括写掩码/断言寄存器1015。例如,在一些实施例中,存在8个写掩码/断言寄存器(有时称为k0到k7),它们的尺寸各自为16位、32位、64位或128位。写掩码/断言寄存器1015可以允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间免于更新)和/或归零(例如,归零向量掩码允许目的地中的任何元素集合在任何操作的执行期间被归零)。在一些实施例中,给定的写掩码/断言寄存器1015中的每个数据元素位置对应于目的地的数据元素位置。在其他实施例中,写掩码/断言寄存器1015是可缩放的,并由给定向量元素的设定数量个启用位组成(例如,每个64位向量元素有8个启用位)。
81.寄存器架构1000包括多个通用寄存器1025。这些寄存器可以是16位、32位、64位等,并且可用于标量操作。在一些实施例中,这些寄存器通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8到r15来引用。
82.在一些实施例中,寄存器架构1000包括标量浮点寄存器1045,标量浮点寄存器1045用于使用x87指令集扩展的对32/64/80位浮点数据的标量浮点操作,或者作为mmx寄存器对64位紧缩整数数据执行操作,以及用于为在mmx和xmm寄存器之间执行的一些操作保存操作数。
83.一个或多个标志寄存器1040(例如,eflags,rflags等)存储用于算术、比较和系统操作的状态和控制信息。例如,一个或多个标志寄存器1040可以存储条件代码信息,诸如进位、奇偶性、辅助进位、零、符号和溢出。在一些实施例中,一个或多个标志寄存器1040被称为程序状态和控制寄存器。
84.段寄存器1020包含用于访问存储器的段点。在一些实施例中,这些寄存器通过名称cs、ds、ss、es、fs和gs来引用。
85.机器专用寄存器(msr)1035控制和报告处理器性能。大多数msr 1035处置与系统有关的功能,并且不可由应用程序访问。机器校验寄存器1060由控制、状态和错误报告msr组成,这些msr用于检测和报告硬件错误。
86.一个或多个指令指针寄存器1030存储指令指针值。(多个)控制寄存器1055(例如,cr0-cr4)确定处理器(例如,处理器670、680、638、615和/或700)的操作模式和当前执行的任务的特性。调试寄存器1050控制并允许监视处理器或核的调试操作。
87.存储器管理寄存器1065指定用于受保护模式存储器管理的数据结构的位置。这些寄存器可以包括gdtr、idrt、任务寄存器和ldtr寄存器。
88.本发明的替代实施例可以使用更宽的或更窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。指令集
89.指令集架构(isa)可包括一种或多种指令格式。给定的指令格式可定义各种字段(例如,位的数量、位的位置)以指定要执行的操作(例如,操作码)以及将对其执行该操作的(多个)操作数和/或(多个)其他数据字段(例如,掩码),等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有该指令格式的字段(所包括的字段通常按照相同顺序,但是至少一些字段因为较少的字段被包括而具有不同的位的位置)的不同子集,和/或定义为具有以不同方式进行解释的给定字段。由此,isa的每一条指令使用给定的指令格式(并且如果被定义,则按照该指令格式的指令模板中的给定的一个指令模板)来表达,并包括用于指定操作和操作数的字段。例如,示例性add(加法)指令具有特定的操作码和指令格式,该特定的指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地以及源2)的操作数字段;并且该add指令在指令流中出现将使得在操作数字段中具有选择特定操作数的特定的内容。示例指令格式
90.本文中所描述的(多条)指令的实施例能以不同格式来具体化。此外,在下文中详述示例性系统、架构和流水线。(多条)指令的实施例可在此类系统、架构和流水线上执行,但是不限于详述的那些系统、架构和流水线。
91.图11图示指令格式的实施例。如图所示,指令可以包括多个组分,包括但不限于用于以下各项的一个或多个字段:一个或多个前缀1101,操作码1103,寻址信息1105(例如,寄存器标识符、存储器寻址信息等),位移值1107,和/或立即数1109。注意,一些指令利用格式中的一些或全部字段,而其他指令可能仅使用用于操作码1103的字段。在一些实施例中,图示的顺序是这些字段要被编码的顺序,然而,应当理解,在其他实施例中,这些字段可以以不同的顺序被编码、组合等。
92.(多个)前缀字段1101在使用时对指令进行修改。在一些实施例中,一个或多个前缀用于重复串指令(例如,0xf0、0xf2、0xf3等),提供分段超控(例如,0x2e、0x36、0x3e、0x26、0x64、0x65、0x2e、0x3e等),执行总线锁定操作,和/或改变操作数(例如,0x66)和地址尺寸(例如,0x67)。某些指令需要强制性前缀(例如,0x66、0xf2、0xf3等)。这些前缀中的某些前缀可能被认为是“传统”前缀。在本文中详述其一个或多个示例的其他前缀指示和/或提供进一步的能力,诸如指定特定寄存器等。其他前缀通常在传统前缀之后。
93.操作码字段1103用于至少部分地定义在对指令的解码时要执行的操作。在一些实施例中,在操作码字段1103中编码的主操作码的长度为1、2或3字节。在其他实施例中,主操作码可以是不同的长度。附加的3位操作码字段有时被编码在另一个字段中。
94.寻址字段1105用于寻址指令的一个或多个操作数,诸如存储器或一个或多个寄存器中的位置。图12图示寻址字段1105的实施例。在该图示中,示出可选的mod r/m字节1202和可选的比例、索引、基址(sib)字节1204。mod r/m字节1202和sib字节1204用于编码指令的多达两个操作数,其中每一个是直接的寄存器或有效的存储器地址。注意,这些字段中的
每一个都是可选的,因为并非所有的指令都包括这些字段中的一个或多个。mod r/m字节2602包括mod字段1242、寄存器字段1244、和r/m字段1246。
95.mod字段1242的内容将存储器访问模式和非存储器访问模式区分开。在一些实施例中,当mod字段1242的值为b11时,利用寄存器直接寻址模式,否则使用寄存器间接寻址。
96.寄存器字段1244可以编码目的地寄存器操作数或源寄存器操作数,或者可以编码操作码扩展而不用于编码任何指令操作数。寄存器索引字段1244的内容直接地或通过地址生成来指定源或目的地操作数的位置(在寄存器中或在存储器中)。在一些实施例中,寄存器字段1244利用来自前缀(例如,前缀1101)的附加位来补充以允许更大的寻址。
97.r/m字段1246可用于编码引用存储器地址的指令操作数,或者可用于编码目的地寄存器操作数或源寄存器操作数。注意,在一些实施例中,r/m字段1246可与mod字段1242组合以指示寻址模式。
98.sib字节1204包括比例字段1252、索引字段1254和基址字段1256以用于地址的生成。比例字段1252指示比例因数。索引字段1254指定要使用的索引寄存器。在一些实施例中,索引字段1254利用来自前缀(例如,前缀1101)的附加位来补充以允许更大的寻址。基址字段1256指定要使用的基址寄存器。在一些实施例中,基址字段1256利用来自前缀(例如,前缀1101)的附加位来补充以允许更大的寻址。在实践中,比例字段1252的内容允许对索引字段1254的内容进行缩放以用于存储器地址生成(例如,用于使用2
比例
*索引+基址的地址生成)。
99.一些寻址形式利用位移值来生成存储器地址。例如,可以根据2
比例
*索引+基址+位移、索引*比例+位移、r/m+位移、指令指针(rip/eip)+位移、寄存器+位移等生成存储器地址。位移可以是1字节、2字节、4字节等的值。在一些实施例中,位移字段1107提供该值。此外,在一些实施例中,在寻址字段1105的mod字段中编码位移因数使用,其指示压缩的位移方案,对于该方案,通过将disp8与基于向量长度、b的值和指令的输入元素尺寸确定的比例因数n乘法来计算位移值。位移值被存储在位移字段1107中。
100.在一些实施例中,立即数字段1109指定指令的立即数。立即数可以被编码为1字节的值、2字节的值、4字节的值,等等。
101.图13图示第一前缀1101(a)的实施例。在一些实施例中,第一前缀1101(a)是rex前缀的实施例。使用该前缀的指令可以指定通用寄存器、64位紧缩数据寄存器(例如,单指令多数据(simd)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,cr8-cr15和dr8-dr15)。
102.取决于格式,使用第一前缀1101(a)的指令可以使用3位字段指定多达三个寄存器:1)使用mod r/m字节1202的reg字段1244和r/m字段1246;2)使用mod r/m字节1202与sib字节1204,包括使用reg字段1244和基址字段1256和索引字段1254;或者3)使用操作码的寄存器字段。
103.在第一前缀1101(a)中,位位置7:4被设置为0100。位位置3(w)可用于确定操作数尺寸,但可能不能单独确定操作数宽度。由此,当w=0时,操作数尺寸由代码段描述符(cs.d)确定,并且当w=1时,操作数尺寸为64位。
104.请注意,添加另一个位允许寻址16(24)个寄存器,而单独的mod r/m reg字段1244和mod r/m r/m字段1246各自只能寻址8个寄存器。
105.在第一前缀1101(a)中,位位置2(r)可以是mod r/m reg字段1244的扩展,并且当该字段编码通用寄存器、64位紧缩数据寄存器(例如,sse寄存器)、或控制或调试寄存器时,可用于修改mod r/m reg字段1244。当mod r/m字节1202指定其他寄存器或定义扩展操作码时,r被忽略。
106.位位置1(x)x位可以修改sib字节索引字段1254。
107.位位置b(b)b可以修改mod r/m r/m字段1246或sib字节基址字段1256中的基址;或者其可以修改用于访问通用寄存器(例如,通用寄存器1025)的操作码寄存器字段。
108.图14(a)-图14(d)图示如何使用第一前缀1101(a)的r、x和b字段的实施例。图14(a)图示当sib字节1204不用于存储器寻址时,来自第一前缀1101(a)的r和b用于扩展mod r/m字节1202的reg字段1244和r/m字段1246。图14(b)图示当sib字节1204未被使用时(寄存器-寄存器寻址),来自第一前缀1101(a)的r和b用于扩展mod r/m字节1202的reg字段1244和r/m字段1246。图14(c)图示当sib字节1204用于存储器寻址时,来自第一前缀1101(a)的r、x和b用于扩展mod r/m字节1202的reg字段1244以及索引字段1254和基址字段1256。图14(d)图示当寄存器被编码在操作码1103中时,来自第一前缀1101(a)的b用于扩展mod r/m字节1202的reg字段1244。
109.图15(a)-图15(b)图示第二前缀1101(b)的实施例。在一些实施例中,第二前缀1101(b)是vex前缀的实施例。第二前缀1101(b)编码允许指令具有多于两个操作数,并允许simd向量寄存器(例如,向量/simd寄存器1010)长于64位(例如,128位和256位)。第二前缀1101(b)的使用提供了三操作数(或更多操作数)的语法。例如,先前的两操作数指令执行诸如a=a+b之类的操作,其覆写源操作数。第二前缀1101(b)的使用使操作数能执行非破坏性操作,诸如a=b+c。
110.在一些实施例中,第二前缀1101(b)有两种形式——两字节形式和三字节形式。两字节的第二前缀1101(b)主要用于128位、标量和一些256位指令,而三字节的第二前缀1101(b)提供了对第一前缀1101(a)和3字节操作码指令的紧凑替换。
111.图15(a)图示两字节形式的第二前缀1101(b)的实施例。在一个示例中,格式字段1501(字节0 1503)包含值c5h。在一个示例中,字节1 1505包括位[7]中的“r”值。该值是第一前缀1101(a)的相同值的补码。位[2]用于指示向量的长度(l)(其中值0是标量或128位向量,而值1是256位向量)。位[1:0]提供操作码的扩展性,相当于一些传统前缀(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。位[6:3]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。
[0112]
使用该前缀的指令可以使用mod r/m r/m字段1246来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。
[0113]
使用该前缀的指令可以使用mod r/m reg字段1244来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于编码任何指令操作数。
[0114]
对于支持四个操作数的指令语法,vvvv、mod r/m r/m字段1246和mod r/m reg字段1244编码四个操作数中的三个操作数。然后,立即数1109的位[7:4]用于编码第三源寄存器操作数。
[0115]
图15(b)图示三字节形式的第二前缀1101(b)的实施例。在一个示例中,格式字段1511(字节0 1513)包含值c4h。字节1 1515包括位[7:5]中的“r”、“x”和“b”,它们是第一前缀1101(a)的相同值的补码。字节1 1515的位[4:0](示出为mmmmm)包括用于根据需要编码一个或多个隐含前导操作码字节的内容。例如,00001暗示0fh前导操作码,00010暗示0f38h前导操作码,00011暗示0f3ah前导操作码,等等。
[0116]
字节2 1517的位[7]与第一前缀1101(a)的w类似地使用,包括帮助确定可提升的操作数尺寸。位[2]用于指示向量的长度(l)(其中值0是标量或128位向量,而值1是256位向量)。位[1:0]提供操作码的扩展性,相当于一些传统前缀(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。位[6:3]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。
[0117]
使用该前缀的指令可以使用mod r/m r/m字段1246来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。
[0118]
使用该前缀的指令可以使用mod r/m reg字段1244来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于编码任何指令操作数。
[0119]
对于支持四个操作数的指令语法,vvvv、mod r/m r/m字段1246和mod r/m reg字段1244编码四个操作数中的三个操作数。然后,立即数1109的位[7:4]用于编码第三源寄存器操作数。
[0120]
图16图示第三前缀1101(c)的实施例。在一些实施例中,第一前缀1101(a)是evex前缀的实施例。第三前缀1101(c)是四字节前缀。
[0121]
第三前缀1101(c)可以以64位模式编码32个向量寄存器(例如,128位、256位和512位寄存器)。在一些实施例中,利用写掩码/操作掩码(参见前面的图中对寄存器的讨论,诸如图10)或断言的指令利用该前缀。操作掩码寄存器允许条件处理或选择控制。使用第二前缀1101(b)来编码操作掩码指令,其源/目的地操作数是操作掩码寄存器,并将操作掩码寄存器的内容视为单个值。
[0122]
第三前缀1101(c)可以编码专用于指令类的功能(例如,具有“加载+操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。
[0123]
第三前缀1101(c)的第一字节是格式字段1611,在一个示例中,格式字段1611的值为62h。后续的字节被称为有效载荷字节1615-1619,并且共同形成24位值p[23:0],从而以一个或多个字段的形式提供特定能力(本文中详述)。
[0124]
在一些实施例中,有效载荷字节1619的p[1:0]与低两个mmmmm位相同。在一些实施例中,p[3:2]被保留。位p[4](r’)在与p[7]和mod r/m reg字段1244组合时允许对高16个向量寄存器集合的访问。当不需要sib类型寻址时,p[6]也可以提供对高16个向量寄存器的访问。p[7:5]由r、x和b组成,它们是用于向量寄存器、通用寄存器、存储器寻址的操作数指定符修饰符位,并且当与mod r/m寄存器字段1244和mod r/m r/m字段1246组合时,允许对低8个寄存器之外的下一组8个寄存器的访问。p[9:8]提供操作码扩展性,相当于一些传统前缀(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。在一些实施例中,p[10]是固定值1。p
[14:11]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。
[0125]
p[15]类似于第一前缀1101(a)和第二前缀1111(b)的w,并且可以用作操作码扩展位或操作数尺寸提升。
[0126]
p[18:16]指定操作掩码(写掩码)寄存器(例如,写掩码/断言寄存器1015)中的寄存器的索引。在本发明的一个实施例中,特定值aaa=000具有暗示没有操作掩码用于特定指令的特殊行为(这能以各种方式实现,包括使用硬连线为全部为一的操作掩码或者绕过掩码硬件的硬件来实现)。当合并时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集免于更新;在其他的一个实施例中,保持其中对应掩码位具有0的目的地的每一元素的旧值。相反,当归零时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间使目的地中的任何元素集归零;在一个实施例中,目的地的元素在对应掩码位具有0值时被设置为0。该功能的子集是控制正在被执行的操作的向量长度的能力(即,从第一个到最后一个正在被修改的元素的跨度);然而,被修改的元素不一定要是连续的。由此,操作掩码字段允许部分向量操作,包括加载、存储、算术、逻辑等。尽管描述了其中操作掩码字段的内容选择多个操作掩码寄存器中的包含要使用的操作掩码的一个操作掩码寄存器(并且由此操作掩码字段的内容间接地标识要执行的掩码)的本发明的实施例,但是替代实施例相反或另外允许掩码写字段的内容直接地指定要执行的掩码。
[0127]
p[19]可以与p[14:11]组合,以非破坏性源语法编码第二源向量寄存器,其可以使用p[19]访问高16个向量寄存器。p[20]编码多种功能,其在不同类别的指令之间有所不同,并且可以影响向量长度/舍入控制指定符字段(p[22:21])的含义。p[23]指示对合并-写掩码的支持(例如,当设置为0时)或对归零和合并-写掩码的支持(例如,当设置为1时)。
[0128]
使用第三前缀1101(c)的指令中的对寄存器的编码的示例性实施例在下面的表中详述。表1:64位模式下的32寄存器支持
表2:32位模式下的编码寄存器指定符 [2:0]寄存器类型常见用途regmodr/m regk0-k7源vvvvvvvvk0-k7第二源rmmodr/m r/mk0-7第一源{k1]aaak0
1-k7操作掩码表3:操作掩码寄存器指定符编码
[0129]
可将程序代码应用于输入指令以执行本文描述的功能并生成输出信息。可以以已知的方式将输出信息应用于一个或多个输出设备。为了本技术的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器。
[0130]
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。
[0131]
本文公开的机制的各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
[0132]
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“ip核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
[0133]
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(cd-rom)、可重写紧致盘(cd-rw)以及磁光盘;半导体器件,诸如,只读存储器(rom)、诸如动态随机存取存储器(dram)和静态随机存取存储器(sram)的随机存取存储器
(ram)、可擦除可编程只读存储器(eprom)、闪存、电可擦除可编程只读存储器(eeprom);相变存储器(pcm);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
[0134]
因此,本发明的实施例还包括非暂态有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(hdl),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也可被称为程序产品。仿真(包括二进制变换、代码变形等)
[0135]
在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
[0136]
图17图示根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图17示出可使用第一isa编译器1704来编译高级语言1702形式的程序,以生成可由具有至少一个第一指令集核的处理器1716原生执行的第一isa二进制代码1706。具有至少一个第一isa指令集核的处理器1716表示任何处理器,这些处理器能通过兼容地执行或以其它方式处理以下内容来执行与具有至少一个第一isa指令集核的处理器基本相同的功能:1)第一isa指令集核的指令集的实质部分,或2)目标为在具有至少一个第一isa指令集核的英特尔处理器上运行的应用或其他软件的目标代码版本,以便取得与具有至少一个第一isa指令集核的处理器基本相同的结果。第一isa编译器1704表示可用于生成第一isa二进制代码1706(例如,目标代码)的编译器,该第一isa二进制代码1706能够通过附加的链接处理或无需附加的链接处理而在具有至少一个第一isa指令集核的处理器1716上被执行。类似地,图17示出可使用替代的指令集编译器1708来编译高级语言1702形式的程序,以生成可由不具有第一isa指令集核的处理器1714原生执行的替代的指令集二进制代码1710。指令转换器1712用于将第一isa二进制代码1706转换成可以由不具有第一isa指令集核的处理器1714原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码1710相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器1712通过仿真、模拟或任何其他过程来表示允许不具有第一isa指令集处理器或核的处理器或其他电子设备执行第一isa二进制代码1706的软件、固件、硬件或其组合。
[0137]
对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可包括特定的特征、结构或特性,但是每个实施例可以不一定包括该特定的特征、结构或特性。而且,此类短语不一定是指同一实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他实施例而影响此类特征、结构或特性是在本领域技术人员的知识范围之内的。
[0138]
此外,在上文描述的各实施例中,除非另外专门指出,否则,诸如短语“a、b或c中的至少一个”之类的分隔语言旨在被理解为意味着a、b、或c、或其任何组合(例如,a、b、和/或c)。由此,分隔语言不旨在也不应当被理解为暗示给定的实施例要求a中的至少一个、b中的
至少一个或c中的至少一个各自都存在。
[0139]
示例性实施例包括但不限于:1.一种装置,包括:解码器电路,该解码器电路用于对单条指令进行解码,其中,该单条指令用于包括用于操作码的字段、用于指示源/目的地操作数的位置的一个或多个字段、用于指示第一源操作数的位置的一个或多个字段、以及用于指示第二源操作数的位置的一个或多个字段,其中,操作码用于指示执行电路用于:将来自第一源操作数和第二源操作数的对应数据元素的值相乘,将所乘的值的第一子集与来自源/目的地操作数的第一值相加并存储在该源/目的地操作数的第一数据元素位置中,以及将所乘的值的第二子集与来自源/目的地操作数的第二值相加并存储在该源/目的地操作数的第二数据元素位置中;以及执行电路,该执行电路用于根据操作码来执行经解码的指令。2.如示例1所述的装置,其中,用于第一源操作数的标识符的字段用于标识向量寄存器。3.如示例1所述的装置,其中,用于第一源操作数的标识符的字段用于标识存储器位置。4.如示例1-3中任一项所述的装置,其中,操作码用于指示第一源操作数的数据元素是有符号的并且第二源操作数的数据元素是无符号的。5.如示例1-4中任一项所述的装置,其中,第一源操作数的数据元素和第二源操作数的数据元素是16位整数值。6.如示例5所述的装置,其中,源/目的地操作数的数据元素是64位整数值。7.如示例1所述的装置,其中,操作码用于指示第一源操作数、第二源操作数、以及源/目的地操作数的数据元素尺寸。8.一种非暂态机器可读介质,存储单条指令的实例,该单条指令在由机器处理时使机器执行方法,该方法包括:对单条指令进行解码,其中,单条指令用于包括用于操作码的字段、用于指示源/目的地操作数的位置的一个或多个字段、用于指示第一源操作数的位置的一个或多个字段、以及用于指示第二源操作数的位置的一个或多个字段,其中,操作码用于指示执行电路用于:将来自第一源操作数和第二源操作数的对应数据元素的值相乘,将所乘的值的第一子集与来自源/目的地操作数的第一值相加并存储在该源/目的地操作数的第一数据元素位置中,以及将所乘的值的第二子集与来自源/目的地操作数的第二值相加并存储在该源/目的地操作数的第二数据元素位置中;以及根据操作码执行经解码的指令。9.如示例8所述的非暂态机器可读介质,其中,用于第一源操作数的标识符的字段用于标识向量寄存器。10.如示例8所述的非暂态机器可读介质,其中,用于第一源操作数的标识符的字
段用于标识存储器位置。11.如示例8-10中任一项所述的非暂态机器可读介质,其中,操作码用于指示第一源操作数的数据元素是有符号的并且第二源操作数的数据元素是无符号的。12.如示例8-11中任一项所述的非暂态机器可读介质,其中,第一源操作数的数据元素和第二源操作数的数据元素是16位整数值。13.如示例12所述的非暂态机器可读介质,其中,源/目的地操作数的数据元素是64位整数值。14.如示例8所述的非暂态机器可读介质,其中,操作码用于指示第一源操作数、第二源操作数、以及源/目的地操作数的数据元素尺寸。15.一种非暂态机器可读介质,存储单条指令的实例,该单条指令在由机器执行时使机器执行方法,该方法包括:将来自第一指令集架构的单条指令变换为第二指令集架构的一条或多条指令,其中,单条指令用于包括用于操作码的字段、用于指示源/目的地操作数的位置的一个或多个字段、用于指示第一源操作数的位置的一个或多个字段、以及用于指示第二源操作数的位置的一个或多个字段,其中,操作码用于指示执行电路用于:将来自第一源操作数和第二源操作数的对应数据元素的值相乘,将所乘的值的第一子集与来自源/目的地操作数的第一值相加并存储在该源/目的地操作数的第一数据元素位置中,以及将所乘的值的第二子集与来自源/目的地操作数的第二值相加并存储在该源/目的地操作数的第二数据元素位置中;对第二指令集架构的一条或多条指令进行解码;以及根据单条指令的操作码来执行经解码的一条或多条指令。16.如示例15所述的非暂态机器可读介质,其中,用于第一源操作数的标识符的字段用于标识向量寄存器。17.如示例15所述的非暂态机器可读介质,其中,用于第一源操作数的标识符的字段用于标识存储器位置。18.如示例15-17中任一项所述的非暂态机器可读介质,其中,操作码用于指示第一源操作数的数据元素是有符号的并且第二源操作数的数据元素是无符号的。19.一种系统,包括:处理器,该处理器包括:解码器电路,该解码器电路用于对单条指令进行解码,其中,该单条指令用于包括用于操作码的字段、用于指示源/目的地操作数的位置的一个或多个字段、用于指示第一源操作数的位置的一个或多个字段、以及用于指示第二源操作数的位置的一个或多个字段,其中,操作码用于指示执行电路用于:将来自第一源操作数和第二源操作数的对应数据元素的值相乘,将所乘的值的第一子集与来自源/目的地操作数的第一值相加并存储在该源/目的地操作数的第一数据元素位置中,以及将所乘的值的第二子集与来自源/目的地操作数的第二值相加并存储在该源/目的地操作数的第二数据元素位置中,以及
执行电路,该执行电路用于根据操作码来执行经解码的指令;以及存储器,该存储器用于存储单条指令。20.如示例19所述的系统,其中,操作码用于指示第一源操作数的数据元素是有符号的并且第二源操作数的数据元素是无符号的。
[0140]
因此,说明书和附图应被认为是说明性而非限制性意义的。然而,将显而易见的是,可对这些实现方式作出各种修改和改变,而不背离如权利要求中所述的本公开的更宽泛的精神和范围。

技术特征:


1.一种装置,包括:解码器电路,所述解码器电路用于对单条指令进行解码,其中,所述单条指令用于包括用于操作码的字段、用于指示源/目的地操作数的位置的一个或多个字段、用于指示第一源操作数的位置的一个或多个字段、以及用于指示第二源操作数的位置的一个或多个字段,其中,所述操作码用于指示执行电路用于:将来自所述第一源操作数和所述第二源操作数的对应数据元素的值相乘,将所乘的值的第一子集与来自所述源/目的地操作数的第一值相加并存储在所述源/目的地操作数的第一数据元素位置中,以及将所乘的值的第二子集与来自所述源/目的地操作数的第二值相加并存储在所述源/目的地操作数的第二数据元素位置中;以及执行电路,所述执行电路用于根据所述操作码来执行经解码的指令。2.如权利要求1所述的装置,其中,用于所述第一源操作数的标识符的字段用于标识向量寄存器。3.如权利要求1所述的装置,其中,用于所述第一源操作数的标识符的字段用于标识存储器位置。4.如权利要求1-3中任一项所述的装置,其中,所述操作码用于指示所述第一源操作数的数据元素是有符号的并且所述第二源操作数的数据元素是无符号的。5.如权利要求1-4中任一项所述的装置,其中,所述第一源操作数的数据元素和所述第二源操作数的数据元素是16位整数值。6.如权利要求5所述的装置,其中,所述源/目的地操作数的数据元素是64位整数值。7.如权利要求1-6中任一项所述的装置,其中,所述操作码用于指示所述第一源操作数、所述第二源操作数、以及所述源/目的地操作数的数据元素尺寸。8.一种非暂态机器可读介质,存储单条指令的实例,所述单条指令在由机器处理时使所述机器执行方法,所述方法包括:对所述单条指令进行解码,其中,所述单条指令用于包括用于操作码的字段、用于指示源/目的地操作数的位置的一个或多个字段、用于指示第一源操作数的位置的一个或多个字段、以及用于指示第二源操作数的位置的一个或多个字段,其中,所述操作码用于指示执行电路用于:将来自所述第一源操作数和所述第二源操作数的对应数据元素的值相乘,将所乘的值的第一子集与来自所述源/目的地操作数的第一值相加并存储在所述源/目的地操作数的第一数据元素位置中,以及将所乘的值的第二子集与来自所述源/目的地操作数的第二值相加并存储在所述源/目的地操作数的第二数据元素位置中;以及根据所述操作码执行经解码的指令。9.如权利要求8所述的非暂态机器可读介质,其中,用于所述第一源操作数的标识符的字段用于标识向量寄存器。10.如权利要求8所述的非暂态机器可读介质,其中,用于所述第一源操作数的标识符的字段用于标识存储器位置。11.如权利要求8-10中任一项所述的非暂态机器可读介质,其中,所述操作码用于指示
所述第一源操作数的数据元素是有符号的并且所述第二源操作数的数据元素是无符号的。12.如权利要求8-11中任一项所述的非暂态机器可读介质,其中,所述第一源操作数的数据元素和所述第二源操作数的数据元素是16位整数值。13.如权利要求12所述的非暂态机器可读介质,其中,所述源/目的地操作数的数据元素是64位整数值。14.如权利要求8-13中任一项所述的非暂态机器可读介质,其中,所述操作码用于指示所述第一源操作数、所述第二源操作数、以及所述源/目的地操作数的数据元素尺寸。15.一种非暂态机器可读介质,存储单条指令的实例,所述单条指令在由机器处理时使所述机器执行方法,所述方法包括:将来自第一指令集架构的所述单条指令变换为第二指令集架构的一条或多条指令,其中,所述单条指令用于包括用于操作码的字段、用于指示源/目的地操作数的位置的一个或多个字段、用于指示第一源操作数的位置的一个或多个字段、以及用于指示第二源操作数的位置的一个或多个字段,其中,所述操作码用于指示执行电路用于:将来自所述第一源操作数和所述第二源操作数的对应数据元素的值相乘,将所乘的值的第一子集与来自所述源/目的地操作数的第一值相加并存储在所述源/目的地操作数的第一数据元素位置中,以及将所乘的值的第二子集与来自所述源/目的地操作数的第二值相加并存储在所述源/目的地操作数的第二数据元素位置中;对所述第二指令集架构的所述一条或多条指令进行解码;以及根据所述单条指令的所述操作码来执行经解码的一条或多条指令。16.如权利要求15所述的非暂态机器可读介质,其中,用于所述第一源操作数的标识符的字段用于标识向量寄存器。17.如权利要求15所述的非暂态机器可读介质,其中,用于所述第一源操作数的标识符的字段用于标识存储器位置。18.如权利要求15-17中任一项所述的非暂态机器可读介质,其中,所述操作码用于指示所述第一源操作数的数据元素是有符号的并且所述第二源操作数的数据元素是无符号的。19.一种系统,包括:处理器,所述处理器包括:解码器电路,所述解码器电路用于对单条指令进行解码,其中,所述单条指令用于包括用于操作码的字段、用于指示源/目的地操作数的位置的一个或多个字段、用于指示第一源操作数的位置的一个或多个字段、以及用于指示第二源操作数的位置的一个或多个字段,其中,所述操作码用于指示执行电路用于:将来自所述第一源操作数和所述第二源操作数的对应数据元素的值相乘,将所乘的值的第一子集与来自所述源/目的地操作数的第一值相加并存储在所述源/目的地操作数的第一数据元素位置中,以及将所乘的值的第二子集与来自所述源/目的地操作数的第二值相加并存储在所述源/目的地操作数的第二数据元素位置中,以及执行电路,所述执行电路用于根据所述操作码来执行经解码的指令;以及
存储器,所述存储器用于存储所述单条指令。20.如权利要求19所述的系统,其中,所述操作码用于指示所述第一源操作数的数据元素是有符号的并且所述第二源操作数的数据元素是无符号的。

技术总结


本申请公开了四字16


技术研发人员:

马杜里 C

受保护的技术使用者:

英特尔公司

技术研发日:

2022.06.24

技术公布日:

2022/12/26

本文发布于:2024-09-23 17:16:03,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/49350.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:操作   寄存器   指令   多个
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议