经改进的提取指令的装置和方法

文档序号:6485485阅读:124来源:国知局
经改进的提取指令的装置和方法
【专利摘要】描述了一种装置,该装置包含指令执行逻辑电路,该指令执行逻辑电路用于执行第一、第二、第三和第四指令。第一指令和第二指令二者从相应的第一和第二输入向量的多个第一不重叠部分中的一个部分中选择第一组输入向量元素。第一组具有第一位宽。多个第一不重叠部分中的每个部分具有与第一组相同的位宽。第三指令和第四指令两者从相应的第三和第四输入向量的多个第二不重叠部分中的一个部分中选择第二组输入向量元素。第二组具有比所述第一位宽大的第二位宽。多个第二不重叠部分中的每个部分具有与第二组相同的位宽。该装置包括掩码层电路,该掩码层电路用于在第一粒度下对第一和第三指令的第一和第二组进行掩码操作,其中利用该操作产生的相应结果是第一和第三指令的相应结果。该掩码层电路还用于在第二粒度下对第二和第四指令的第一和第二组进行掩码操作,其中利用该操作产生的相应结果是第二和第四指令的相应结果。
【专利说明】经改进的提取指令的装置和方法
[0001] 背景

【技术领域】
[0002] 本发明一般涉及计算科学,且更具体地涉及经改进的提取指令的装置和方法。

【背景技术】
[0003] 图1示出了在半导体芯片上用逻辑电路实现的处理核100的高级图。该处理核包 括流水线101。该流水线由各自被设计成在完全执行程序代码指令所需的多步骤过程中执 行特定步骤的多个级组成。这些级通常至少包括:1)指令取出和解码;2)数据取出;3)执 行;4)写回。执行级对由在先前级(例如在上述步骤1))中所取出和解码的指令所标识并 在另一先前级(例如在上述步骤2))中被取出的数据执行由在先前级(例如在上述步骤 1))中取出和解码的指令所标识的特定操作。被操作的数据通常是从(通用)寄存器存储 空间102中取出的。在该操作完成时所创建的新数据通常也被"写回"寄存器存储空间(例 如在上述级4))。
[0004] 与执行级相关联的逻辑电路通常由多个"执行单元"或"功能单元" 1〇3_1至103_ N构成,这些单元各自被设计成执行其自身的唯一操作子集(例如,第一功能单元执行整数 数学操作,第二功能单元执行浮点指令,第三功能单元执行从高速缓存/存储器的加载操 作和/或到高速缓存/存储器的存储操作等等)。由所有这些功能单元执行的所有操作的 集合与处理核100所支持的"指令集"相对应。
[0005] 计算机科学领域中广泛认可两种类型的处理器架构:"标量"和"向量"。标量处理 器被设计成执行对单个数据集进行操作的指令,而向量处理器被设计成执行对多个数据集 进行操作的指令。图2A和2B呈现了展示标量处理器与向量处理器之间的基本差异的比较 示例。
[0006] 图2A示出标量AND(与)指令的示例,其中单个操作数集A和B -起进行"与"运 算以产生奇异(或"标量")结果C(S卩,AB = C)。相反,图2B示出向量AND指令的示例,其 中两个操作数集A/B和D/E并行地分别一起进行"与"运算以同时产生向量结果C和F(即, A. AND. B = C以及D. AND. E = F)。根据术语学,"向量"是具有多个"元素"的数据元素。例 如,向量V = Q,R,S,T,U具有五个不同的元素:Q、R、S、T和U。示例性向量V的"尺寸"是 5 (因为它具有5个元素)。
[0007] 图1还示出向量寄存器空间104的存在,该向量寄存器空间104不同于通用寄存 器空间102。具体而言,通用寄存器空间102标准地用于存储标量值。这样,当各执行单元中 的任一个执行标量操作时,它们标准地使用从通用寄存器存储空间102调用的操作数(并 将结果写回通用寄存器存储空间102)。相反,当各执行单元中的任一个执行向量操作时,它 们标准地使用从向量寄存器空间107调用的操作数(并将结果写回向量寄存器空间107)。 可类似地分配存储器的不同区域以存储标量值和向量值。
[0008] 还应注意,存在位于功能单元103_1到103_N的相应输入处的掩码逻辑104_1到 1〇4_Ν,以及位于功能单元103_1到103_N的相应输出处的掩码逻辑105_1到105_N。在各 种实现中,实际上仅实现这些层中的一个层--不过这并非严格要求。对于采用掩码的任 何指令,输入掩码逻辑1〇4_1到104_N和/或输出掩码逻辑105_1到105_N可用于控制哪些 元素被该向量指令有效地操作。在此,从掩码寄存器空间106读取掩码向量(例如与从向 量寄存器存储空间107读取的输入数据向量一起),并将该掩码向量呈现给掩码逻辑104、 105层中的至少一层。
[0009] 在执行向量程序代码的过程中,每一向量指令无需要求全数据字。例如,一些指令 的输入向量可能仅仅是8个元素,其他指令的输入向量可能是16个元素,其他指令的输入 向量可能是32个元素,等等。因此,掩码层104/105用于标识完整向量数据字中的应用于 特定指令的一组元素,以在多个指令之间实现不同的向量尺寸。通常,对于每一向量指令, 掩码寄存器空间106中所保持的特定掩码模式被该指令调出,从掩码寄存器空间中被取出 并且被提供给掩码层104/105中的任一者或两者,以"启用"针对该特定向量操作的正确元 素集合。
[0010] 图3a至3e示出了现有技术VINSERT、VEXTRACT和VPERMUTE指令的逻辑操作。注 意,相比于其实际名称,这些指令的名称已被缩略或以其它方式简化。
[0011] 图3a示出了现有技术VINSERT指令的逻辑操作。如图3a中观察到的,第一输入 操作数对应于128位的信息301_A,而第二输入操作数对应于256位向量302_A。第三立即 输入操作数(未示出)指定256位向量302_A的哪一半(下半部或右半部)将被第一输入 操作数301_A的128位信息取代。所得的结构被存储在具有256位尺寸的目的地/结果向 量中。128位信息301、输入向量302_A和结果是浮点值,其尺寸可为32位或64位。
[0012] 图3b示出了现有技术VEXTRACT指令的逻辑操作。如图3b中观察到的,第一输 入操作数对应于256位向量301_B。第二立即输入操作数(未示出)指定256位输入向量 301_B的哪一半(下半部或右半部)将覆写在目的地寄存器302_B中所存储的256位向量 的最低阶128位上。输入向量301_B向量被结构化为浮点值,其尺寸为32位或64位。该 指令格式可替换地指定存储器中的128位作为目的地,而非目的地寄存器302_B。
[0013] 图 3c 至 3e 示出了三个不同 VPERMUTE 指令(VPERMILPS、VPERMILPD、VPERM2F128) 的相应逻辑操作。
[0014] 图3c示出了 VPERMILPS指令的逻辑操作。如图3c中观察到的,VPERMILPS指令 接受对应于256位输入向量的输入操作数301_C,该输入向量具有8个32位(单精度)浮 点值。结果也是256位向量,该256位向量具有8个32位单精度浮点值作为其元素302_C。 第二输入向量(未示出)针对结果的下半部中的4个元素中的每个元素唯一性地指定输入 向量301_C的下半部中的4个元素301_C_1至301_C_4中的哪个元素将向输出元素提供其 内容。
[0015] 图3c仅针对输出元素302_C_1和302_C_5示出了该操作。此处,输出元素302_ C_1的内容可用输入元素301_C_1至301_C_4中任一者的内容填充。在(未示出的)第二 输入向量中清楚表明输入元素301_C_1至301_C_4中的哪一个被选择来填充输出元素302_ C_1。此处,第二输入向量包含针对输出向量中的8个元素中的每个元素的单独的2位控制 字段。必须从输入向量301_C的下半部中选取结果302_C的下半部中的输出元素的源。同 样,必须从输入向量301_C的上半部中选取结果302_C的上半部中的输出元素的源。
[0016] 尽管未在图3c中明确地示出,但输出元素302_C_2至302_C_4中每一者的内容藉 由第二输入向量中包含的信息被唯一性地指定为输入元素301_C_1至301_C_4中的任一 者。类似地,如图3c中观察到的,输出元素302_C_5的内容用输入元素301_C_5至301_C_8 中任一者的内容来填充。同样,也在(未不出的)第二输入向量中清楚表明输入兀素301_ C_5至301_C_8中的哪一个被选择来填充输出元素302_C_5。经由(未示出的)第二输入 向量,将输出元素302_C_6至302_C_8中每一者的内容唯一性地指定为输入元素301_C_5 至301_C_8中的任一者。
[0017] VPERMILPS指令的另一版本使用立即操作数而非第二输入向量来选取输入向量 301_C的选择模式。此处,用于目的地的下半部的输入元素选择模式匹配用于目的地的上半 部的输入元素选择模式。
[0018] 图3d示出了 VPERMILPD指令的逻辑操作。如图3d中观察到的,VPERMILPD指令 接受对应于256位输入向量的输入操作数301_D,该输入向量具有4个64位(双精度)浮 点值。结果也是256位向量302_D,该256位向量具有4个64位双精度浮点值作为其元素。 第二输入向量(未示出)针对结果的下半部中的2个元素中的每个元素唯一性地指定输入 向量301_D的下半部中的2个元素301_D_1至301_D_2中的哪个元素将向输出元素提供其 内容。
[0019] 如图3d中观察到的,输出元素302_D_1和302_D_2中的每一者可唯一性地用输入 元素301_D_1或301_D_2中的任一者来填充。同样,可用输入元素301_D_3或301_C_4中 的任一者来唯一性地"填充"输出元素302_D_3和302_D_4中的每一者。在(未示出的)第 二输入向量中清楚表明哪个输入元素被选择来填充特定输出元素。此处,第二输入向量包 含针对输出向量中的4个元素中的每个元素的单独的2位控制字段。
[0020] VPERMILH)指令的另一版本使用立即操作数而非第二输入向量来选取输入向量 301_D的选择模式。此处,用于目的地的下半部的输入元素选择模式匹配用于目的地的上半 部的输入元素选择模式。
[0021] 对于VPERMIPLS和VPERMIPLD指令两者,将结果存储在该指令的指令格式中指定 的向量寄存器中。在利用第二输入向量来确定选择模式时,第一输入向量的源在指令格式 中被指定并且对应于向量寄存器。在此情形中,第二输入向量的源也在该指令格式中被指 定并且对应于第二向量寄存器或存储器位置中的任一者。相反,如果使用立即操作数来确 定选择模式,则第一输入向量的源在指令格式中被指定并且可以是向量寄存器或存储器位 置。
[0022] 图3e示出了 VPERM2F128指令的逻辑操作。如图3e中观察到的,VPERM2F128指 令接受2个分开的256位向量输入操作数301_E、302_E。可用输入向量301_E、302_E两者 的下半部或上半部301_E_1、301_E_2、302_E_1、302_E_2中的任一者来填充256位结果303_ E的128位下半部303_E_1和128位上半部303_E_2两者。将该结果存储在该指令的指令 格式中指定的向量寄存器中。两个输入向量301_E、302_E的源在指令格式中被指定并且可 对应于一对向量寄存器或者一个向量寄存器和一个存储器位置。

【专利附图】

【附图说明】
[0023] 本发明是通过示例说明的,而不仅局限于各个附图的图示,在附图中,类似的参考 标号表示类似的元件,其中:
[0024] 图1示出指令执行流水线;
[0025] 图2a和2b将标量处理与向量处理进行比较;
[0026] 图3a至3e示出现有技术的插入、提取和置换指令;
[0027] 图4a至4p示出经改进的插入、提取和置换指令;
[0028] 图5a和5b涉及用于实现经改进的插入、提取和置换指令的执行逻辑电路;
[0029] 图6A-6B是示出根据本发明的实施例的通用向量友好指令格式及其指令模板的 框图;
[0030] 图7是示出根据本发明的实施例的示例性专用向量友好指令格式的框图;
[0031] 图8是根据本发明的一个实施例的寄存器架构的框图;
[0032] 图9A是示出根据本发明的实施例的示例性有序流水线以及示例性寄存器重命名 的无序发布/执行流水线两者的框图;
[0033] 图9B是示出根据本发明的各实施例的要包括在处理器中的有序架构核的示例性 实施例和示例性的寄存器重命名的无序发布/执行架构核的框图;
[0034] 图10A-B示出了更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑 块之一(包括相同类型和/或不同类型的其他核);
[0035] 图11是根据本发明的实施例的可具有超过一个的核、可具有集成的存储器控制 器、并且可具有集成图形器件的处理器的框图;
[0036] 图12是根据本发明一个实施例的系统的框图;
[0037] 图13是根据本发明的实施例的第一更具体的示例性系统的框图;
[0038] 图14是根据本发明的实施例的第二更具体的示例性系统的框图;
[0039] 图15是根据本发明的实施例的SoC的框图;以及
[0040] 图16是根据本发明的实施例的对比使用软件指令变换器将源指令集中的二进制 指令变换成目标指令集中的二进制指令的框图。

【具体实施方式】
[0041] 详细描沭
[0042] 图4a至4e示出了 4个新的VINSERT指令的逻辑操作。具体而言,图4a至4d分 别示出了 VINSERTF32X4 指令、VINSERTF64X2 指令、VINSERTF32X8 指令和 VINSERTF64X4 指 令。
[0043] 图4a示出了 VINSERTF32X4指令的逻辑操作。如图4a中观察到的,接收128位结 构401_A作为第一输入操作数。该128位结构包含4个32位单精度浮点值。还接收512位 向量作为第二输入操作数402_A。该512位向量可被视为由4个连贯数据"块"组成,每个 数据块的尺寸为128位。立即操作数(未示出)指示第二操作数402_A的哪个128位"块" 将被第一输入操作数401_A覆写。第二操作数被覆写的说法在从向量寄存器空间读取的信 息在执行单元中的本地副本被覆写的意义上是成立的。如本领域众所周知的,向量寄存器 空间中的原始源信息通常仅在指令格式指示源寄存器也是目的地寄存器的情况下才被覆 写。
[0044] 随后向所得的数据结构403_A应用掩码。此处,掩码层404_A接收输入掩码向量 (未示出),其标识所得的数据结构403_A的哪些32位数据值将被写入目的地406_A。在指 令格式中标识掩码向量在掩码寄存器空间(例如,诸如图1的掩码寄存器空间106)中的位 置以及目的地在向量寄存器空间中的位置两者。也在指令格式中标识第一和第二输入操作 数401_A、402_A的源。在一个实施例中,第一输入操作数401_A可源自于向量寄存器空间 或存储器位置,而第二输入操作数402_A源自于向量寄存器空间。立即操作数也被包括在 指令格式中。在一个实施例中,存储目的地的向量寄存器空间不同于输入操作数所源自的 向量寄存器空间。
[0045] 在一个实施例中,并非从掩码寄存器空间读取掩码,而是将掩码嵌入在指令自身 中(例如,类似于立即操作数)。在此情形中,指令格式包括包含实际掩码模式的字段。相 反,如果掩码是从掩码寄存器空间取出的,则指令格式包括标识掩码模式存储在掩码寄存 器空间中何处的地址字段。为简化起见,对下文其余讨论的论述是如同从掩码寄存器空间 取出掩码那样来书写的。然而,读者应理解,这些指令也可实现成使掩码作为一种立即操作 数嵌入在指令中。
[0046] 在向量友好指令格式的实现中(其实施例在下文更详细地描述),指令格式支持 这两种掩码模式技术。在此情况下,指令格式包括标识将对该指令采取哪种办法的附加字 段(例如,1 =掩码模式类似于嵌入在指令中的立即操作数,〇 =将从掩码寄存器空间取出 掩码模式)。
[0047] 分开地或组合地,所应用的掩码操作的类型可以是"合并"或"归零"。在合并掩码 的情形中,结果数据结构的"被掩码"字段不被覆写。确切而言,目的地寄存器中该位置处 的原始值被保留。相反,在归零掩码的情况,结果数据结构的"被掩码掉(mask out)"字段 用〇值来覆写目的地寄存器中的该位置。在各种实施例中(诸如与刚才引述的向量友好指 令格式相关联的实施例中),在指令格式的另一字段中指定应用合并掩码操作还是归零掩 码操作。
[0048] 以上关于掩码的评述也适用于以下与图4b至4p相关联的指令的讨论。出于方便 起见,以下不再赘述。
[0049] 图4b示出了 VINSERTF64X2指令的逻辑操作。如图4b中观察到的,接收128位结 构401_B作为第一输入操作数。该128位结构包含2个64位双精度浮点值。还接收512位 向量作为第二输入操作数402_B。该512位向量可被视为由4个连贯数据"块"组成,每个 数据块的尺寸为128位。立即操作数(未示出)指示第二操作数402_B的哪个128位"块" 将被第一输入操作数401_B覆写。
[0050] 随后向所得的数据结构403_B应用掩码。此处,掩码层404_B接收输入掩码向量 (未示出),其标识所得的数据结构403_B的哪些64位数据值将被写入目的地406_B。在指 令格式中标识掩码向量在掩码寄存器空间中的位置以及目的地在向量寄存器空间中的位 置两者。也在指令格式中标识第一和第二输入操作数401_B、402_B的源。在一个实施例中, 第一输入操作数401_B可源自于向量寄存器空间或存储器位置,而第二输入操作数402_B 源自于向量寄存器空间。立即操作数也被包括在指令格式中。在一个实施例中,存储目的 地的向量寄存器空间不同于输入操作数所源自的向量寄存器空间。
[0051] 图4c示出了 VINSERTF32X8指令的逻辑操作。如图4c中观察到的,接收256位结 构401_C作为第一输入操作数。该256位结构包含8个32位单精度浮点值。还接收512位 向量作为第二输入操作数402_C。该512位向量可被视为由2个连贯数据"块"组成,每个 数据块的尺寸为256位。立即操作数(未示出)指示第二操作数402_C的哪个256位"块" 将被第一输入操作数401_C覆写。
[0052] 随后向所得的数据结构403_C应用掩码。此处,掩码层404_C接收输入掩码向量 (未示出),其标识所得的数据结构403_C的哪些32位数据值将被写入目的地406_C。在指 令格式中标识掩码向量在掩码寄存器空间中的位置以及目的地在向量寄存器空间中的位 置两者。也在指令格式中标识第一和第二输入操作数401_C、402_C的源。在一个实施例中, 第一输入操作数401_C可源自于向量寄存器空间或存储器位置,而第二输入操作数402_C 源自于向量寄存器空间。立即操作数也被包括在指令格式中。在一个实施例中,存储目的 地的向量寄存器空间不同于输入操作数所源自的向量寄存器空间。
[0053] 图4d示出了 VINSERTF64X4指令的逻辑操作。如图4d中观察到的,接收256位结 构401_D作为第一输入操作数。该256位结构包含4个64位双精度浮点值。还接收512位 向量作为第二输入操作数402_D。该512位向量可被视为由2个连贯数据"块"组成,每个 数据块的尺寸为256位。立即操作数(未示出)指示第二操作数402_D的哪个256位"块" 将被第一输入操作数401_D覆写。
[0054] 随后向所得的数据结构403_D应用掩码。此处,掩码层404_D接收输入掩码向量 (未示出),其标识所得的数据结构403_D的哪些64位数据值将被写入目的地406_D。在指 令格式中标识掩码向量在掩码寄存器空间中的位置以及目的地在向量寄存器空间中的位 置两者。也在指令格式中标识第一和第二输入操作数401_D、402_D的源。在一个实施例中, 第一输入操作数401_D可源自于向量寄存器空间或存储器位置,而第二输入操作数402_D 源自于向量寄存器空间。立即操作数也被包括在指令格式中。在一个实施例中,存储目的 地的向量寄存器空间不同于输入操作数所源自的向量寄存器空间。
[0055] 图4e至4h示出了 4个新的VEXTRACT指令。具体而言,图4e示出了 VEXTRACT32X4 指令,图4f示出了 VEXTRACT64X2指令,图4g示出了 VEXTRACT32X8指令,以及图4h示出了 VEXTRACT64X4 指令。
[0056] 图4e示出了 VEXTRACT32X4指令的逻辑操作。如图4e中观察到的,VEXTRACT32X4 指令接受512位输入操作数401_E。该512位输入操作数401_E可被视为由4个连贯的128 位数据"块"组成,其中每个块包含4个单精度(32位)浮点数据值。根据VEXTRACT32X4指 令的逻辑操作,"选择"这些128位块中的一个块,向所选择的块应用掩码层402_E,并且将 所得的数据结构写入目的地403_E。
[0057] 在一个实施例中,立即操作数(未示出)指定这4个128位块中的哪个块将被选 择,输入操作数401_E是从向量寄存器提供的,并且目的地401_E可以在向量寄存器空间或 存储器位置中。该指令格式标识任何适用的源/目的地向量寄存器和/或存储器位置。在 一个实施例中,目的地被存储在与输入向量所源自的向量寄存器空间不同的向量寄存器空 间中。在该指令的操作期间,从掩码寄存器空间读取掩码向量并将其应用于掩码层402_E。 也在指令格式中提供掩码向量在掩码寄存器空间中的位置。掩码的粒度为32位。即,掩码 向量个体地指定所选择的数据块中的4个32位值中的哪一个将被写入目的地。
[0058] 图4f示出了 VEXTRACT64X2指令的逻辑操作。如图4f中观察到的,VEXTRACT64X2 指令接受512位输入操作数401_F。该512位输入操作数401_F可被视为由4个连贯的128 位数据"块"组成,其中每个块包含2个双精度(64位)浮点数据值。根据VEXTRACT64X2指 令的逻辑操作,"选择"这些128位块中的一个块,向所选择的块应用掩码层402_F,并且将 所得的数据结构写入目的地403_F。
[0059] 在一个实施例中,立即操作数(未示出)指定这4个128位块中的哪个块将被选 择,输入操作数401_F是从向量寄存器提供的,并且目的地403_F可以在向量寄存器空间或 存储器位置中。该指令格式标识任何适用的源/目的地向量寄存器和/或存储器位置。在 一个实施例中,目的地被存储在与输入向量所源自的向量寄存器空间不同的向量寄存器空 间中。在该指令的操作期间,从掩码寄存器空间读取掩码向量并将其应用于掩码层402_F。 也在指令格式中提供掩码向量在掩码寄存器空间中的位置。掩码的粒度为64位。即,掩码 向量个体地指定所选择的数据块中的2个64位值中的哪一个将被写入目的地。
[0060] 图4g示出了 VEXTRACT32X8指令的逻辑操作。如图4g中观察到的,VEXTRACT32X8 指令接受512位输入操作数401_G。该512位输入操作数401_G可被视为由2个连贯的256 位数据"块"组成,其中每个块包含8个单精度(32位)浮点数据值。根据VEXTRACT32X8指 令的逻辑操作,"选择"这些256位块中的一个块,向所选择的块应用掩码层402_G,并且将 所得的数据结构写入目的地403_G。
[0061] 在一个实施例中,立即操作数(未示出)指定这2个256位块中的哪个块将被选 择,输入操作数401_G是从向量寄存器提供的,并且目的地403_G可以在向量寄存器空间或 存储器位置中。该指令格式标识任何适用的源/目的地向量寄存器和/或存储器位置。在 一个实施例中,目的地被存储在与输入向量所源自的向量寄存器空间不同的向量寄存器空 间中。在该指令的操作期间,从掩码寄存器空间读取掩码向量并将其应用于掩码层402_G。 也在指令格式中提供掩码向量在掩码寄存器空间中的位置。掩码的粒度为32位。即,掩码 向量个体地指定所选择的数据块中的8个32位值中的哪一个将被写入目的地。
[0062] 图4h示出了 VEXTRACT64X4指令的逻辑操作。如图4h中观察到的,VEXTRACT64X4 指令接受512位输入操作数401_H。该512位输入操作数401_H可被视为由2个连贯的256 位数据"块"组成,其中每个块包含4个双精度(64位)浮点数据值。根据VEXTRACT64X4指 令的逻辑操作,"选择"这些256位块中的一个块,向所选择的块应用掩码层402_H,并且将 所得的数据结构写入目的地403_H。
[0063] 在一个实施例中,立即操作数(未示出)指定这2个256位块中的哪个块将被选 择,输入操作数401_H是从向量寄存器提供的,并且目的地403_H可以在向量寄存器空间或 存储器位置中。该指令格式标识任何适用的源/目的地向量寄存器和/或存储器位置。在 一个实施例中,目的地被存储在与输入向量所源自的向量寄存器空间不同的向量寄存器空 间中。在该指令的操作期间,从掩码寄存器空间读取掩码向量并将其应用于掩码层402_H。 也在指令格式中提供掩码向量在掩码寄存器空间中的位置。掩码的粒度为64位。即,掩码 向量个体地指定所选择的数据块中的4个64位值中的哪一个将被写入目的地。
[0064] 图4i至4p给出了新的VPERMUTE指令。这些指令包括VPERMW、VPERMD、VPERMQ、 VPERMILPS,VPERMILPD〇
[0065] 图4i示出了 VPERMW指令的逻辑操作。VPERMW指令接受512位输入向量作为第一 输入操作数401_1。该512位输入向量被视为具有32个16位数据值(字)。掩码层402_ I同样具有该粒度从而以16位粒度进行掩码。即,目的地/结果向量403_1被视为具有32 个16位值,并且掩码层402_1具有为结果向量403_1中的每个元素提供个体掩码的能力。 [0066] 根据VPERMW指令的逻辑操作,结果向量403_1中的每个元素用输入向量401_1中 的32个元素中的任一个元素来填充。针对结果403_1的最右侧元素403_1_1示出该能力。 此处,如图4i中观察到的,可向掩码层元素402_1_1提供输入向量401_1中的32个元素中 的任一个元素。由此,如果结果元素403_1_1未在掩码元素402_1_1处被"掩码掉",则结果 元素403_1_1可用输入向量401_1中的32个16位元素中的任一个元素来填充。
[0067] 尽管未在图4i中明确地示出,但此相同的能力/功能适用于结果向量403_1中的 其余31个元素中的每一者。即,如果结果向量403_1中的任何元素未被掩码层402_1中针 对该结果中的该特定元素的专用掩码元素所掩码掉,则可用输入向量401_1中的任一个16 位值来填充该结果向量403_1中的该元素。例如,这意味着结果403_1中的两个或更多个 元素可用来自输入向量401_1的同一元素来填充。
[0068] 在VPERMW指令格式中指定输入向量401_1的源和结果向量403_1的目的地。在 一个实施例中,输入向量401_1是从向量寄存器空间或存储器中的位置提供的,并且结果 被写入不同的向量寄存器空间中的位置。掩码层402_1也是用来自掩码寄存器空间的掩码 向量来提供的,该掩码向量指定结果403_1中的哪些元素将被掩码掉(以及结果403_1中 的哪些元素不会被掩码掉)。
[0069] 还提供被称为"索引"向量的第二输入向量(未示出),其针对输出向量中的每个 元素清楚表达哪个具体的输入元素将被用来填充输出向量中的该元素(若其未被掩码掉 的话)。例如,在一个实施例中,索引向量是32元素向量,每个元素处具有至少5位。索引 向量中的每个元素对应于结果中的唯一元素。这5位被用来指定第一输入向量401_1中的 哪个元素将被用来填充该特定结果元素(若其未被掩码掉的话)。
[0070] 在一个实施例中,还支持VPERMW指令的第二版本,其接受第三输入向量(未示 出),该第三输入向量包含可被用来填充任何输出向量元素位置的32个附加的16位值。实 质上,第三输入向量使得可被用来填充任何输出元素位置的可用16位输入值的数量加倍。 对于VPERMW指令的此版本,刚才提及的索引向量为每个输出位置使用至少6位而非5位。 此处,额外位被用来标识第一输入向量(401_1)还是第三输入向量(未示出)将被用来作 为特定的输出向量403_1元素的源。此版本的第一变型使目的地寄存器空间等同于供应索 引向量的寄存器空间。即,结果被覆写在向量寄存器空间中的索引向量上。此版本的第二 变型用该结果来覆写向量寄存器空间中的第三输入向量。在任一种变型中,不在指令格式 中分开地标识除了索引向量位置(第一变型)或第三输入向量(第二变型)之外的目的地 位置。
[0071] 图4j示出了 VPERMD指令的逻辑操作。VPERMD指令接受512位输入向量作为第一 输入操作数401_J。该512位输入向量被视为具有16个32位数据值。该32位值可以是 双字或单精度32位值。掩码层402」同样具有该粒度从而以32位粒度进行掩码。即,目 的地/结果向量403_J被视为具有16个32位值,并且掩码层402_J具有为结果向量403_ J中的每个元素提供个体掩码的能力。
[0072] 根据VPERMD指令的逻辑操作,结果向量403_J中的每个元素用输入向量401」中 的16个元素中的任一个元素来填充。针对结果403_J的最右侧元素403_J_1示出该能力。 此处,如图4j中观察到的,可向掩码层元素402_J_1提供输入向量401_J中的16个元素中 的任一个元素。由此,如果结果元素403_J_1未在掩码元素402_J_1处被"掩码掉",则结果 元素403_J_1可用输入向量401_J中的16个32位元素中的任一个元素来填充。
[0073] 尽管未在图4j中明确地示出,但此相同的能力/功能被应用于结果向量403_J中 的其余15个元素中的每一者。即,结果向量403_J中的任何元素,如果未被掩码层402_了中 针对该结果中的该特定元素的专用掩码元素所掩码掉,则可用输入向量401_J中的任一个 32位值来填充。例如,这意味着结果403_J中的两个或更多个元素可用来自输入向量401_ J的同一兀素来填充。
[0074] 在VPERMD指令格式中指定输入向量401_J的源和结果向量403_J的目的地。在 一个实施例中,输入向量401_J是从向量寄存器空间或存储器中的位置提供的,并且结果 被写入不同的向量寄存器空间中的位置。掩码层402_J也是用来自掩码寄存器空间的掩码 向量来提供的,该掩码向量指定结果403_J中的哪些元素将被掩码掉(以及结果403_J中 的哪些元素不会被掩码掉)。
[0075] 还提供被称为索引向量的第二输入向量(未示出),其针对输出向量中的每个元 素表达哪个具体的输入兀素将被用来填充输出向量中的该兀素(若其未被掩码掉的话)。 例如,在一个实施例中,索引向量是16元素向量,每个元素处具有至少5位。索引向量中的 每个元素对应于结果中的唯一元素。这5位被用来指定第一输入向量401_J中的哪个元素 将被用来填充该特定结果元素(若其未被掩码掉的话)。
[0076] 在一个实施例中,还支持VPERMW指令的第二版本,其接受第三输入向量(未示 出),该第三输入向量包含可被用来填充任何输出向量元素位置的16个附加的32位值。实 质上,第三输入向量使得可被用来填充任何输出元素位置的可用32位输入值的数量加倍。 对于VPERMW指令的此版本,刚才提及的索引向量为每个输出位置使用至少6位而非5位。 此处,额外位被用来标识第一输入向量(401_J)还是第三输入向量(未示出)将被用来作 为特定的输出向量403_J元素的源。此版本的第一变型使目的地寄存器空间等同于供应索 引向量的寄存器空间。即,结果被覆写在向量寄存器空间中的索引向量上。此版本的第二 变型用该结果来覆写向量寄存器空间中的第三输入向量。在这些变型中的任一者中,不在 指令格式中分开地标识除了索引向量位置(第一变型)或第三输入向量(第二变型)之外 的目的地位置。
[0077] 图4k示出了 VPERMQ指令的逻辑操作。VPERMQ指令接受第一个512位输入向量作 为第一输入操作数401_K并接受第二个512位输入向量作为第二输入操作数(未示出)。 这两个512位输入向量被视为具有8个64位数据值。该64位值可以是四字或双精度浮点 值。掩码层402J(同样具有该粒度从而以64位粒度进行掩码。即,目的地/结果向量403_ Κ被视为具有8个64位值,并且掩码层402J(具有为结果向量403_Κ中的每个元素提供个 体掩码的能力。
[0078] 根据VPERMQ指令的逻辑操作,结果向量403J(中的每个元素用输入向量的组合 (401_1(和该未示出的输入向量)中的16个元素中的任一个元素来填充。针对结果403_K 的最右侧元素403_Κ_1示出该能力。此处,如图4k中观察到的,可向掩码层元素402_Κ_1提 供输入向量401_Κ中的8个元素中的任一个元素、或者第二输入向量(未示出)中的8个 元素中的任一个元素。由此,如果结果元素403_Κ_1未在掩码元素402_Κ_1处被"掩码掉", 则结果元素403_Κ_1可用来自这对输入向量的16个64位元素中的任一个元素来填充。
[0079] 尽管未在图4k中明确地示出,但此相同的能力/功能被应用于结果向量403_K中 的其余8个元素中的每一者。即,结果向量403_Κ中的任何元素,如果未被掩码层402J(中 针对该结果中的该特定元素的专用掩码元素所掩码掉,则可用任一输入向量中的任一个64 位值来填充。例如,这意味着结果403_Κ中的两个或更多个元素可用来自输入向量401_Κ 的同一兀素来填充。
[0080] 在VPERMQ指令格式中指定两个输入向量的源。在一个实施例中,输入向量401_ Κ是从向量寄存器空间或存储器中的位置提供的,并且第二输入向量是从向量寄存器空间 中其自己的相应位置提供的。掩码层402J(也是用来自掩码寄存器空间的掩码向量来提供 的,该掩码向量指定结果403_Κ中的哪些元素将被掩码掉(以及结果403_Κ中的哪些元素 不会被掩码掉的话)。
[0081] 还提供被称为索引向量的另一输入向量(未示出),其针对输出向量中的每个元 素表达哪个具体的输入元素将被用来填充输出向量中的该元素(若其不被掩码掉的话)。 例如,在一个实施例中,索引向量是8元素向量,每个元素处具有至少6位。索引向量中的 每个元素对应于结果中的唯一元素。前述6位中的5位被用来指定第一输入向量401J(或 第二输入向量中的哪个元素将被用来填充该特定结果元素(若其不被掩码掉的话)。第6 位被用来标识第一输入向量(401_Κ)还是第二输入向量(未示出)将被用来作为特定的输 出向量403_Κ元素的源。
[0082] VPERMQ的第一变型使目的地寄存器空间等同于供应索引向量的寄存器空间。艮Ρ, 结果被覆写在向量寄存器空间中的索引向量上。第二变型用该结果来覆写向量寄存器空间 中的第二输入向量。在任一种变型中,不在指令格式中分开地标识除了索引向量位置(第 一变型)或第二输入向量(第二变型)之外的目的地位置。
[0083] 图41示出了新的VPERMILPS指令。如图41中观察到的,该新的VPERMILPS指令 接受对应于512位输入向量401_L的输入操作数,该输入向量具有16个32位(单精度) 浮点值。结果也是512位向量,其具有16个32位单精度浮点值作为其元素403_L。掩码层 402_L同样具有该粒度从而以32位粒度进行掩码。即,目的地/结果向量403_L被视为具 有16个32位值,并且掩码层402_L具有为结果向量403_L中的每个元素提供个体掩码的 能力。
[0084] 被称为索引向量的第二输入向量(未示出)唯一性地指定输入向量401_L中的4 个元素中的哪个元素将"填充"结果403中的特定元素(若其不被掩码层402_L掩码的话)。 例如,结果403_L的128个最低有效位中的4个元素403_L_1至403_L_4中的每个元素只 能用输入向量401_L的128个最低有效位中的4个元素401_L_1至403_L_4中的任一个元 素来填充。结果中的每个元素的源独立于结果中的另一元素的源。由此,输出向量中的两 个不同元素可用同一输入向量元素来填充。
[0085] 图41示出了输出元素403_L_1的可用输入源被提供给掩码层402_L。再次,这些 相同的输入源也可供用于输出元素403_L_2至403_L_4中的每一者。针对每下一组128位 编排类似的安排。即,假定没有掩码操作,来自组403_L_Q2的元素必须源自于组401_L_Q2 中的元素,来自组403_L_Q3的元素必须源自于组401_L_Q3中的元素,而来自组403_L_Q4 的元素必须源自于组401_L_Q4中的元素。
[0086] 在一个实施例中,在同一处理器的指令集中支持该新的VPERMILPS指令的不同版 本。第一版本将输入向量401_L存储在第一向量寄存器空间位置中,将索引向量存储在第 二向量寄存器空间位置或存储器位置中,并且将结果存储在其自己的专用向量寄存器空间 位置中(即,输入向量401_L和索引向量皆不被覆写)。第二版本将输入向量401_L存储在 第一向量寄存器空间位置或存储器位置中,在指令中指定索引向量作为立即操作数,并且 将结果存储在其自己的专用向量寄存器空间位置中(即,输入向量401_L不被覆写)。 [0087] 掩码层402_L从掩码寄存器空间接收掩码向量。在指令中指定掩码向量在掩码寄 存器空间中的位置。在使用索引向量来指定输入向量元素与输出向量元素之间的选择模式 的版本中,索引向量具有16个元素(一个元素用于输出向量中的每个元素),并且每个元素 处的2位用于选择可用的4个输入向量元素中的一个元素以填充相应的输出向量元素。在 利用立即操作数的版本中,立即操作数具有8个元素,每个元素有2位。此处,相同的选择 模式被用于输出向量的下半部和上半部。
[0088] 图4m示出了新的VPERMILPD指令。如图4m中观察到的,该新的VPERMILPD指令接 受对应于512位输入向量的输入操作数401_M,该输入向量具有8个64位(双精度)浮点 值。结果也是512位向量403_M,其具有8个64位双精度浮点值作为其元素。掩码层402_ Μ同样具有该粒度从而以64位粒度进行掩码。即,目的地/结果向量403_M被视为具有8 个64位值,并且掩码层402_M具有为结果向量403_M中的每个元素提供个体掩码的能力。
[0089] 被称为索引向量的第二输入向量(未示出)唯一性地指定输入向量401_M中的2 个元素中的哪个元素能"填充"结果403_M中的特定元素(若其不被掩码层402_M掩码的 话)。例如,结果403_M的128个最低有效位中的2个元素403_M_1和403_M_2只能用输入 向量401J(的128个最低有效位中的元素401_M_1和401_M_2中的任一个元素来填充。结 果中的每个元素的源独立于结果中的另一元素的源。由此,输出向量中的两个不同元素可 用同一输入向量兀素来填充。
[0090] 图4m示出了输出元素403_M_1和403_M_2的可用输入源被提供给掩码层402_M。 针对输出向量403_M中的其余各组128位编排类似的安排。即,假定没有掩码操作,来自组 403_M_Q2的元素必须源自于组401_M_Q2中的元素,来自组403_M_Q3的元素必须源自于组 401_M_Q3中的元素,而来自组403_M_Q4的元素必须源自于组401_M_Q4中的元素。
[0091] 在一个实施例中,在同一处理器的指令集中支持该新的VPERMILro指令的不同版 本。第一版本将输入向量401_M存储在第一向量寄存器空间位置中,将索引向量存储在第 二向量寄存器空间位置或存储器位置中,并且将结果存储在其自己的专用向量寄存器空间 位置中(即,输入向量401_11和索引向量皆不被覆写)。第二版本将输入向量401_M存储在 第一向量寄存器空间位置或存储器位置中,在指令中指定索引向量作为立即操作数,并且 将结果存储在其自己的专用向量寄存器空间位置中(即,输入向量401_M不被覆写)。
[0092] 掩码层402_M从掩码寄存器空间接收掩码向量。在指令中指定掩码向量在掩码寄 存器空间中的位置。在使用索引向量来指定输入向量元素与输出向量元素之间的选择模式 的版本中,索引向量具有8个元素(一个元素用于输出向量中的每个元素),并且每个元素 处的1位用于选择可用的2个输入向量元素中的一个元素以填充相应的输出向量元素。在 利用立即操作数的版本中,立即操作数具有8个元素,每个元素有1位。
[0093] 图4n示出了 VPERM64X1指令。如图4n中观察到的,VPERM64X1指令接受对应于 512位输入向量401_N的输入操作数,该输入向量具有8个64位(双精度)浮点值。结果 也是512位向量403_N,其具有8个64位双精度浮点值作为其元素。掩码层402_N同样具 有该粒度从而以64位粒度进行掩码。即,目的地/结果向量403_N被视为具有8个64位 值,并且掩码层402_N具有为结果向量403_N中的每个元素提供个体掩码的能力。
[0094] 被称为索引向量的第二输入向量(未示出)唯一性地指定输入向量401_N中的8 个元素中的哪个元素将"填充"结果403_N中的特定元素(若其不被掩码层402_N掩码的 话)。即,输入向量401_N*的任何元素可被用于填充输出向量403_N中的任何元素。结果 中的每个元素的源独立于结果中的另一元素的源。由此,输出向量中的两个不同元素可用 同一输入向量兀素来填充。
[0095] 图4n示出了输出元素403_N_1的可用输入源被提供给掩码层402_N。针对输出向 量403_N中的每个元素编排类似的安排。如以下更详细地描述的,在使用立即操作数作为 索引向量的实施例中,源选择更加受限制。
[0096] 在一个实施例中,在同一处理器的指令集中支持该新的VPERM64X1指令的不同版 本。第一版本将输入向量401_N存储在第一向量寄存器空间位置或存储器位置中,将索引 向量存储在第二向量寄存器空间位置中,并且将结果存储在其自己的专用向量寄存器空间 位置中(即,输入向量401_N和索引向量皆不被覆写)。第二版本将输入向量401_N存储在 第一向量寄存器空间位置或存储器位置中,在指令中指定索引向量作为立即操作数,并且 将结果存储在其自己的专用向量寄存器空间位置中(即,输入向量401_N不被覆写)。
[0097] 掩码层402_N从掩码寄存器空间接收掩码向量。在指令中指定掩码向量在掩码寄 存器空间中的位置。在使用索引向量来指定输入向量元素与输出向量元素之间的选择模式 的版本中,索引向量具有8个元素(一个元素用于输出向量中的每个元素),并且每个元素 处的3位用于选择可用的8个输入向量元素中的一个元素以填充相应的输出向量元素。在 利用立即操作数的版本中,立即操作数具有4个元素,每个元素有2位。此处,每个输出元 素并非将对其可用的所有8个输入元素都作为源。确切而言,输出向量403_N的256个最 低有效位中的任何元素必须来源于输入向量403_N的256个最低有效位中的元素。针对输 入/输出向量的256个最低有效位的相同的源选择模式被用于输入/输出向量的最高有效 位。
[0098] 图0示出了 VPERM64X2指令的逻辑操作。根据VPERM64X2指令的操作,接收512位 输入向量401_0。该512位输入向量401_0被视为具有8个64位双精度浮点值或整数值。 结果也是512位向量403_0,其具有8个64位双精度浮点值或整数值作为其元素。掩码层 402_0同样具有该粒度从而以64位粒度进行掩码。即,目的地/结果向量403_0被视为具 有8个64位值,并且掩码层402_0具有为结果向量403_0中的每个元素提供个体掩码的能 力。
[0099] 被称为"索引"向量的第二输入向量(未示出)唯一性地指定输入向量401_0中 的哪一对相邻元素可"填充"结果403_0中的一对特定相邻元素(若该对元素不被掩码层 402_0掩码的话)。即,输入向量401_0中的4对相邻元素中的任一对可被用于填充输出向 量403_0中的任一对元素。结果中的第一对元素的源独立于结果中的另一对元素的源。由 此,输出向量中不同的两对元素可用同一对输入向量元素来填充。
[0100] 图40示出了输出元素对403_0_1的可用输入源被提供给掩码层402_0。针对其他 对元素403_0_2、403_0_3和403_0_4编排类似的安排。
[0101] 在一个实施例中,在同一处理器的指令集中支持该VPERM64X2指令的不同版本。 第一版本将输入向量401_0存储在第一向量寄存器空间位置或存储器位置中,将索引向量 存储在第二向量寄存器空间位置中,并且将结果存储在其自己的专用向量寄存器空间位置 中(即,输入向量401_0和索引向量皆不被覆写)。第二版本将输入向量401_0存储在第一 向量寄存器空间位置或存储器位置中,在指令中指定索引向量作为立即操作数,并且将结 果存储在其自己的专用向量寄存器空间位置中(即,输入向量401_0不被覆写)。
[0102] 掩码层402_0从掩码寄存器空间接收掩码向量。在指令中指定掩码向量在掩码寄 存器空间中的位置。在使用索引向量来指定输入向量元素与输出向量元素之间的选择模式 的版本中,索引向量具有4个元素(一个元素用于输出向量中的每一对元素),并且每个元 素处的2位用于选择可用的4对输入向量元素中的一对以填充相应的一对输出向量元素。 在利用立即操作数的版本中,立即操作数具有与索引向量相同的结构。
[0103] 图P示出了 VPERM32X4指令的逻辑操作。根据VPERM32X4指令的操作,接收512 位输入向量401_P。该512位输入向量401_P被视为具有16个32位单精度浮点值或整数 值。结果也是512位向量403_P,其具有16个32位单精度浮点值或整数值作为其元素。掩 码层402_P同样具有该粒度从而以32位粒度进行掩码。即,目的地/结果向量403_P被视 为具有8个64位值,并且掩码层402_P具有为结果向量403_P中的每个元素提供个体掩码 的能力。
[0104] 被称为"索引"向量的第二输入向量(未示出)唯一性地指定输入向量401_P中 的哪一组4个32位元素可"填充"结果403_P中特定的一组相邻32位元素(若该组元素 不被掩码层402_P掩码的话)。即,输入向量401_P中各含4个相邻元素的4个组中的任一 组可被用于填充输出向量403_P中的某些各含4个元素的组。结果中的第一组元素的源独 立于结果中的另一组4个元素的源。由此,输出向量中的两个各含4个元素的不同组可用 同一组的4个输入向量元素来填充。
[0105] 图4P示出了输出元素组403_P_1的可用输入源被提供给掩码层402_P。针对其他 元素组403_P_2、403_P_3和403_P_4编排类似的安排。
[0106] 在一个实施例中,在同一处理器的指令集中支持该VPERM32X4指令的不同版本。 第一版本将输入向量401_P存储在第一向量寄存器空间位置或存储器位置中,将索引向量 存储在第二向量寄存器空间位置中,并且将结果存储在其自己的专用向量寄存器空间位置 中(即,输入向量401_?和索引向量皆不被覆写)。第二版本将输入向量401_P存储在第一 向量寄存器空间位置或存储器位置中,在指令中作为立即操作数来指定索引向量,并且将 结果存储在其自己的专用向量寄存器空间位置中(即,输入向量401_P不被覆写)。
[0107] 掩码层402_P从掩码寄存器空间接收掩码向量。在指令中指定掩码向量在掩码寄 存器空间中的位置。在使用索引向量来指定输入向量元素与输出向量元素之间的选择模式 的版本中,索引向量具有4个元素(一个元素用于输出向量中的每一组4个元素),并且每 个元素处的2位用于选择可用的各含4个输入向量元素的4个组中的一个组以填充相应的 一组4个输出向量元素。在利用立即操作数的版本中,立即操作数具有与索引向量相同的 结构。
[0108] 取决于实现,支持这些指令的流水线的数据取出级可被耦合至存储器以从存储器 中取出操作数,和/或被耦合至向量寄存器空间以从/向向量寄存器空间取出/存储操作 数/结果。
[0109] 此外,对于被描述为仅支持浮点数据值的那些指令,可以想到,这些相同的指令可 被扩展成处理整数以及浮点数据值。此处,图1的寄存器空间102可包括专用于存储整数 值的第一部分和专用于存储浮点值的另一部分。在不扩展至整数值的情况下,就处理这些 指令的方式而言,流水线的数据取出和写回级被耦合至浮点寄存器空间且无需耦合至整数 寄存器空间。相反,如果这些指令被设计成支持两种数据类型,则数据取出和写回级可被耦 合至任一者(取决于对指令的解码)。
[0110] 图5a示出可实现以上在图4a至4p中讨论的指令的任何组合(包括全部指令) 的执行的逻辑设计。在其他实施例中,使用不同的相应执行单元来执行刚才在以上讨论的 向量提取、向量插入和向量置换指令。在进一步的可能实施例中,单个执行单元可执行来自 这些指令族中的两个指令族的指令集。
[0111] 参照图5a,第一寄存器501保持以上讨论的第一输入操作数。值得注意的是,第 一寄存器501的尺寸应当大到足以保持其期望能够复制的最大数据结构。第一寄存器501 可位于流水线的数据取出级的后端。替换地或组合地,寄存器501可被认为是向量寄存器 空间107内存储第一输入操作数的寄存器。替换地,第一寄存器可位于执行单元的"前端"。 第一寄存器501被耦合至向量元素路由逻辑电路502。向量元素路由逻辑电路502被设计 成将第一寄存器501中的输入操作数的各个元素引导至掩码层逻辑电路504中与该信息和 索引向量(或立即操作数)相一致的适当元素位置,并且整个指令被执行。对于微编码的 那些实现,向量元素路由逻辑电路502的术语"逻辑电路"或类似术语将包括微代码和响应 于微代码而动作的逻辑。寄存器507保持索引向量(或立即操作数)并且耦合至向量元素 路由逻辑电路502,以控制对第一操作数的向量元素的"路由"。
[0112] 向量元素路由逻辑电路502的输出503被耦合至掩码逻辑电路504。在一个实施 例中,输出503中的个体输出的数量对应于结果向量的最大可能尺寸(例如,512位)。掩 码层逻辑电路502被构建成支持该执行单元所支持的指令的具体向量元素粒度。例如,如 果执行单元支持16位、32位和64位结果元素粒度,则掩码层逻辑电路502被设计成支持这 些粒度中的每一种粒度的掩码操作。
[0113] 如以上详尽论述的,掩码层逻辑电路504接收来自寄存器505的掩码模式以向来 自向量元素路由的输出503应用掩码,从而在寄存器506中创建结果数据结构。寄存器505 可对应于掩码寄存器空间中的寄存器、流水线的数据取出级的输出处的寄存器、执行单元 的前端的寄存器、或者(当掩码模式被嵌入指令中时)保持指令中的立即值的寄存器(例 如,在流水线的指令解码级的输出处)。
[0114] 取决于实现,寄存器506可对应于向量寄存器空间107内的寄存器,或者寄存器 506可以是执行单元的输出处的寄存器。
[0115] 输入寄存器510存储以上讨论的接受第二输入向量的那些指令的附加输入操作 数,第二输入向量的元素可被选择以包含在结果中(例如,VPERMW、VPERMD和VPERMQ)。输 入寄存器510或另一寄存器也可被用于存储以上讨论的VINSERT指令的第二操作数。由 此,该寄存器被示为馈送至目的地506。寄存器510可以在向量寄存器空间中,在指令执行 流水线的数据取出级的输出处,或者可在执行单元的输入处。
[0116] 在进一步实施例中,执行单元逻辑电路被设计成不仅支持图4a至4p的任何/所 有指令,而且还支持图3a至3e的任何/所有现有技术指令。在此情形中,由于图3a至3e 的现有技术指令不支持掩码操作,因此存在当这些指令被执行时绕过掩码层逻辑电路504 的旁路路径。替换地,旁路可通过自动向掩码层馈送与结果中不被掩码的每个元素相对应 的信息来实施。
[0117] 尽管对以上指令的描述包括关于数据值、要提取/插入/置换的向量元素的具体 位宽以及结果的尺寸,但是本领域普通技术人员将认识到,本文描述的概念可扩展到不同 的相应宽度。
[0118] 图5b示出可由图5a的逻辑电路执行的方法。要提取/插入/置换的向量元素被 置于第一寄存器510中,并且至少在应用掩码的情况下,掩码模式被置于第二寄存器中。输 入向量的具体元素随后被选择以包含在与指令相一致的结果中(511)。如果应用掩码操作, 则向操作511的结果应用掩码模式(512)以创建结果。结果随后被写入目的地(513)。如 果不应用掩码操作,则结果就是操作511的结果。
[0119] 示例性指令格式
[0120] 本文中所描述的指令的实施例可以不同的格式体现。另外,在下文中详述示例性 系统、架构、以及流水线。指令的实施例可在这些系统、架构、以及流水线上执行,但是不限 于详述的系统、架构、以及流水线。
[0121] 通用向量友好指令格式
[0122] 向量友好指令格式是适于向量指令(例如,存在专用于向量操作的特定字段)的 指令格式。尽管描述了其中通过向量友好指令格式支持向量和标量运算两者的实施例,但 是替代实施例仅使用通过向量友好指令格式的向量运算。
[0123] 图6A-6B是示出根据本发明的实施例的通用向量友好指令格式及其指令模板的 框图。图6A是示出根据本发明的实施例的通用向量友好指令格式及其A类指令模板的框 图;而图6B是示出根据本发明的实施例的通用向量友好指令格式及其B类指令模板的框 图。具体地,针对通用向量友好指令格式600定义A类和B类指令模板,两者包括无存储器 访问605的指令模板和存储器访问620的指令模板。在向量友好指令格式的上下文中的术 语"通用"指不束缚于任何专用指令集的指令格式。
[0124] 尽管将描述其中向量友好指令格式支持以下情况的本发明的实施例,即64字节 向量操作数长度(或尺寸)与32位(4字节)或64位(8字节)数据元素宽度(或尺寸) (并且由此,64字节向量由16双字尺寸的元素或者替代地8四字尺寸的元素组成)、64字节 向量操作数长度(或尺寸)与16位(2字节)或8位(1字节)数据元素宽度(或尺寸)、 32字节向量操作数长度(或尺寸)与32位(4字节)、64位(8字节)、16位(2字节)、或 8位(1字节)数据元素宽度(或尺寸)、以及16字节向量操作数长度(或尺寸)与32位 (4字节)、64位(8字节)、16位(2字节)、或8位(1字节)数据元素宽度(或尺寸),但是 替代实施例可支持更大、更小、和/或不同的向量操作数尺寸(例如,256字节向量操作数) 与更大、更小或不同的数据元素宽度(例如,128位(16字节)数据元素宽度)。
[0125] 图6A中的A类指令模板包括:1)在无存储器访问605的指令模板内,示出无存储 器访问的完全舍入控制型操作610的指令模板、以及无存储器访问的数据变换型操作615 的指令模板;以及2)在存储器访问620的指令模板内,示出存储器访问的时效性625的指 令模板和存储器访问的非时效性630的指令模板。图6B中的B类指令模板包括:1)在无存 储器访问605的指令模板内,示出无存储器访问的写掩码控制的部分舍入控制型操作612 的指令模板以及无存储器访问的写掩码控制的vsize型操作617的指令模板;以及2)在存 储器访问620的指令模板内,示出存储器访问的写掩码控制627的指令模板。
[0126] 通用向量友好指令格式600包括以下列出的按照在图6A-6B中示出的顺序的如下 字段。结合以上的讨论,在实施例中,参考下文在图6A-B和7中提供的格式细节,可利用非 存储器访问指令类型605或存储器访问指令类型620。可在以下描述的寄存器地址字段644 中标识读取掩码、输入向量操作数和目的地的地址。在其他实施例中,在写掩码字段670中 指定写掩码。
[0127] 格式字段640 -该字段中的特定值(指令格式标识符值)唯一地标识向量友好指 令格式,并且由此标识指令在指令流中以向量友好指令格式出现。由此,该字段对于仅具有 通用向量友好指令格式的指令集是不需要的,在这个意义上该字段是任选的。
[0128] 基础操作字段642 -其内容区分不同的基础操作。
[0129] 寄存器索引字段644-其内容直接或者通过地址生成来指定源或目的地操作数在 寄存器中或者在存储器中的位置。这些字段包括足够数量的位以从PxQ(例如,32x512、 16xl28、32xl024、64xl024)个寄存器组选择N个寄存器。尽管在一个实施例中N可高达三个 源和一个目的地寄存器,但是替代实施例可支持更多或更少的源和目的地寄存器(例如, 可支持高达两个源,其中这些源中的一个源还用作目的地,可支持高达三个源,其中这些源 中的一个源还用作目的地,可支持高达两个源和一个目的地)。
[0130] 修饰符(modifier)字段646 -其内容将指定存储器访问的以通用向量指令格式出 现的指令与不指定存储器访问的以通用向量指令格式出现的指令区分开;即在无存储器访 问605的指令模板与存储器访问620的指令模板之间进行区分。存储器访问操作读取和/ 或写入到存储器层次(在一些情况下,使用寄存器中的值来指定源和/或目的地地址),而 非存储器访问操作不这样(例如,源和/或目的地是寄存器)。尽管在一个实施例中,该字 段还在三种不同的方式之间选择以执行存储器地址计算,但是替代实施例可支持更多、更 少或不同的方式来执行存储器地址计算。
[0131] 扩充操作字段650 -其内容区分除基础操作以外还要执行各种不同操作中的哪 一个操作。该字段是针对上下文的。在本发明的一个实施例中,该字段被分成类字段668、 α字段652、以及β字段654。扩充操作字段650允许在单一指令而非2、3或4个指令中 执行多组共同的操作。
[0132] 比例字段660 -其内容允许用于存储器地址生成(例如,用于使用2ttw*索引+ 基址的地址生成)的索引字段的内容的按比例缩放。
[0133] 位移字段662A -其内容用作存储器地址生成的一部分(例如,用于使用2 索 引+基址+位移的地址生成)。
[0134] 位移因数字段662B (注意,位移字段662A直接在位移因数字段662B上的并置指 示使用一个或另一个)一其内容用作地址生成的一部分,它指定通过存储器访问的尺寸 (N)按比例缩放的位移因数,其中N是存储器访问中的字节数量(例如,用于使用2?*索 弓丨+基址+按比例缩放的位移的地址生成)。忽略冗余的低阶位,并且因此将位移因数字段 的内容乘以存储器操作数总尺寸(N)以生成在计算有效地址中使用的最终位移。N的值由 处理器硬件在运行时基于完整操作码字段674 (稍后在本文中描述)和数据操纵字段654C 确定。位移字段662A和位移因数字段662B可以不用于无存储器访问605的指令模板和/ 或不同的实施例可实现两者中的仅一个或不实现两者中的任一个,在这个意义上位移字段 662A和位移因数字段662B是任选的。
[0135] 数据元素宽度字段664 -其内容区分使用多个数据元素宽度中的哪一个(在一些 实施例中用于所有指令,在其他实施例中只用于一些指令)。如果支持仅一个数据元素宽度 和/或使用操作码的某一方面来支持数据元素宽度,则该字段是不需要的,在这个意义上 该字段是任选的。
[0136] 写掩码字段670 -其内容在每一数据元素位置的基础上控制目的地向量操作数 中的数据元素位置是否反映基础操作和扩充操作的结果。A类指令模板支持合并-写掩码 操作,而B类指令模板支持合并写掩码操作和归零写掩码操作两者。当合并时,向量掩码允 许在执行任何操作期间保护目的地中的任何元素集免于更新(由基础操作和扩充操作指 定);在另一实施例中,保持其中对应掩码位具有〇的目的地的每一元素的旧值。相反,当 归零时,向量掩码允许在执行任何操作期间使目的地中的任何元素集归零(由基础操作和 扩充操作指定);在一个实施例中,目的地的元素在对应掩码位具有〇值时被设为〇。该功 能的子集是控制执行的操作的向量长度的能力(即,从第一个到最后一个要修改的元素的 跨度),然而,被修改的元素不一定要是连续的。由此,写掩码字段670允许部分向量操作, 这包括加载、存储、算术、逻辑等。尽管描述了其中写掩码字段670的内容选择了多个写掩 码寄存器中的包含要使用的写掩码的一个写掩码寄存器(并且由此写掩码字段670的内容 间接地标识了要执行的掩码操作)的本发明的实施例,但是替代实施例相反或另外允许掩 码写字段670的内容直接地指定要执行的掩码操作。
[0137] 立即数字段672 -其内容允许对立即数的指定。该字段在实现不支持立即数的通 用向量友好格式中不存在且在不使用立即数的指令中不存在,在这个意义上该字段是任选 的。
[0138] 类字段668 -其内容在不同类的指令之间进行区分。参考图6A-B,该字段的内容 在A类和B类指令之间进行选择。在图6A-B中,圆角方形用于指示专用值存在于字段中 (例如,在图6A-B中分别用于类字段668的A类668A和B类668B)。
[0139] A类指令模板
[0140] 在A类非存储器访问605的指令模板的情况下,α字段652被解释为其内容区分 要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的舍入型操作610和无存 储器访问的数据变换型操作615的指令模板分别指定舍入652Α. 1和数据变换652Α. 2)的 RS字段652Α,而β字段654区分要执行指定类型的操作中的哪一种。在无存储器访问605 指令模板中,比例字段660、位移字段662Α以及位移比例字段662Β不存在。
[0141] 无存储器访问的指令模板一完全舍入控制型操作
[0142] 在无存储器访问的完全舍入控制型操作610的指令模板中,β字段654被解释为 其内容提供静态舍入的舍入控制字段654Α。尽管在本发明的所述实施例中舍入控制字段 654Α包括抑制所有浮点异常(SAE)字段656和舍入操作控制字段658,但是替代实施例可 支持、可将这些概念两者都编码成相同的字段或者仅具有这些概念/字段中的一个或另一 个(例如,可仅有舍入操作控制字段658)。
[0143] SAE字段656 -其内容区分是否停用异常事件报告;当SAE字段656的内容指示 启用抑制时,给定指令不报告任何种类的浮点异常标志且不唤起任何浮点异常处理程序。
[0144] 舍入操作控制字段658 -其内容区分执行一组舍入操作中的哪一个(例如,向上 舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控制字段658允许在每一指令 的基础上改变舍入模式。在其中处理器包括用于指定舍入模式的控制寄存器的本发明的一 个实施例中,舍入操作控制字段650的内容优先于该寄存器值。
[0145] 无存储器访问的指令模板一数据变换型操作
[0146] 在无存储器访问的数据变换型操作615的指令模板中,β字段654被解释为数据 变换字段654Β,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、混合、广 播)。
[0147] 在Α类存储器访问620的指令模板的情况下,α字段652被解释为驱逐提示字段 652Β,其内容区分要使用驱逐提示中的哪一个(在图6Α中,对于存储器访问时效性625的 指令模板和存储器访问非时效性630的指令模板分别指定时效性的652Β. 1和非时效性的 652Β. 2),而β字段654被解释为数据操纵字段654C,其内容区分要执行多个数据操纵操作 (也称为基元(primitive))中的哪一个(例如,无操纵、广播、源的向上转换、以及目的地的 向下转换)。存储器访问620的指令模板包括比例字段660、以及任选的位移字段662A或 位移比例字段662B。
[0148] 向量存储器指令使用转换支持来执行来自存储器的向量加载并将向量存储到存 储器。如同寻常的向量指令,向量存储器指令以数据元素式的方式与存储器来回传输数据, 其中实际传输的元素由选为写掩码的向量掩码的内容规定。
[0149] 存储器访问的指令模板一时效性的
[0150] 时效性的数据是可能足够快地重新使用以从高速缓存受益的数据。然而,这是提 示,且不同的处理器可以不同的方式实现它,包括完全忽略该提示。
[0151] 存储器访问的指令模板一非时效性的
[0152] 非时效性的数据是不可能足够快地重新使用以从第一级高速缓存中的高速缓存 受益且应当被给予驱逐优先级的数据。然而,这是提示,且不同的处理器可以不同的方式实 现它,包括完全忽略该提示。
[0153] B类指令模板
[0154] 在B类指令模板的情况下,α字段652被解释为写掩码控制(Z)字段652C,其内 容区分由写掩码字段670控制的写掩码操作应当是合并还是归零。
[0155] 在Β类非存储器访问605的指令模板的情况下,β字段654的一部分被解释为RL 字段657Α,其内容区分要执行不同扩充操作类型中的哪一种(例如,针对无存储器访问的 写掩码控制部分舍入控制类型操作612的指令模板和无存储器访问的写掩码控制VSIZE型 操作617的指令模板分别指定舍入657Α. 1和向量长度(VSIZE) 657Α. 2),而β字段654的 其余部分区分要执行指定类型的操作中的哪一种。在无存储器访问605指令模板中,比例 字段660、位移字段662Α以及位移比例字段662Β不存在。
[0156] 在无存储器访问的写掩码控制的部分舍入控制型操作610的指令模板中,β字段 654的其余部分被解释为舍入操作字段659Α,并且停用异常事件报告(给定指令不报告任 何种类的浮点异常标志且不唤起任何浮点异常处理程序)。
[0157] 舍入操作控制字段659Α -正如舍入操作控制字段658,其内容区分执行一组舍入 操作中的哪一个(例如,向上舍入、向下舍入、向零舍入、以及就近舍入)。由此,舍入操作控 制字段659A允许在每一指令的基础上改变舍入模式。在其中处理器包括用于指定舍入模 式的控制寄存器的本发明的一个实施例中,舍入操作控制字段650的内容优先于该寄存器 值。
[0158] 在无存储器访问的写掩码控制VSIZE型操作617的指令模板中,β字段654的其 余部分被解释为向量长度字段659Β,其内容区分要执行多个数据向量长度中的哪一个(例 如,128字节、256字节、或512字节)。
[0159] 在Β类存储器访问620的指令模板的情况下,β字段654的一部分被解释为广播 字段657Β,其内容区分是否要执行广播型数据操纵操作,而β字段654的其余部分被解释 为向量长度字段659Β。存储器访问620的指令模板包括比例字段660、以及任选的位移字 段662Α或位移比例字段662Β。
[0160] 针对通用向量友好指令格式600,示出完整操作码字段674包括格式字段640、基 础操作字段642以及数据元素宽度字段664。尽管示出了其中完整操作码字段674包括所 有这些字段的一个实施例,但是在不支持所有这些字段的实施例中,完整操作码字段674 包括少于所有的这些字段。完整操作码字段674提供操作码(opcode)。
[0161] 扩充操作字段650、数据元素宽度字段664以及写掩码字段670允许在每一指令的 基础上以通用向量友好指令格式指定这些特征。
[0162] 写掩码字段和数据元素宽度字段的组合创建各种类型的指令,因为这些指令允许 基于不同的数据元素宽度应用该掩码。
[0163] 在A类和B类内出现的各种指令模板在不同的情形下是有益的。在本发明的一些 实施例中,不同处理器或者处理器内的不同核可支持仅A类、仅B类、或者可支持两类。举 例而言,旨在用于通用计算的高性能通用无序核可仅支持B类,旨在主要用于图形和/或科 学(吞吐量)计算的核可仅支持A类,并且旨在用于两者的核可支持两者(当然,具有来自 两类的模板和指令的一些混合、但是并非来自两类的所有模板和指令的核在本发明的范围 内)。同样,单一处理器可包括多个核,所有核支持相同的类或者其中不同的核支持不同的 类。举例而言,在具有单独的图形和通用核的处理器中,图形核中的旨在主要用于图形和/ 或科学计算的一个核可仅支持A类,而通用核中的一个或多个可以是具有旨在用于通用计 算的仅支持B类的无序执行和寄存器重命名的高性能通用核。不具有单独的图形核的另一 处理器可包括既支持A类又支持B类的一个或多个通用有序或无序核。当然,在本发明的不 同实施例中,来自一类的特征也可在其他类中实现。可使以高级语言撰写的程序成为(例 如,及时编译或者统计编译)各种不同的可执行形式,包括:1)仅具有用于执行的目标处理 器支持的类的指令的形式;或者2)具有使用所有类的指令的不同组合而编写的替代例程 且具有选择这些例程以基于由当前正在执行代码的处理器支持的指令而执行的控制流代 码的形式。
[0164] 示例性专用向量友好指令格式
[0165] 图7是示出根据本发明的实施例的示例性专用向量友好指令格式的框图。图7示 出专用向量友好指令格式700,其指定位置、尺寸、解释和字段的次序、以及那些字段中的一 些字段的值,在这个意义上向量友好指令格式700是专用的。专用向量友好指令格式700可 用于扩展x86指令集,并且由此一些字段类似于在现有x86指令集及其扩展(例如,AVX)中 使用的那些字段或与之相同。该格式保持与具有扩展的现有x86指令集的前缀编码字段、 实操作码字节字段、MOD R/M字段、SIB字段、位移字段、以及立即数字段一致。示出来自图 6的字段,来自图7的字段映射到来自图7的字段。
[0166] 应当理解,虽然出于说明的目的在通用向量友好指令格式600的上下文中参考专 用向量友好指令格式700描述了本发明的实施例,但是本发明不限于专用向量友好指令格 式700,除非另有声明。例如,通用向量友好指令格式600构想各种字段的各种可能的尺寸, 而专用向量友好指令格式700被示为具有特定尺寸的字段。作为具体示例,尽管在专用向 量友好指令格式700中数据元素宽度字段664被示为一位字段,但是本发明不限于此(即, 通用向量友好指令格式600构想数据元素宽度字段664的其他尺寸)。
[0167] 通用向量友好指令格式600包括以下列出的按照图7A中示出的顺序的如下字段。
[0168] EVEX前缀(字节0-3) 702 -以四字节形式进行编码。
[0169] 格式字段640(EVEX字节0,位[7:0]) -第一字节(EVEX字节0)是格式字段640, 并且它包含0x62 (在本发明的一个实施例中用于区分向量友好指令格式的唯一值)。
[0170] 第二一第四字节(EVEX字节1-3)包括提供专用能力的多个位字段。
[0171] REX字段705 (EVEX字节 1,位[7-5]) -由 EVEX. R位字段(EVEX字节 1,位[7] -R)、 EVEX. X 位字段(EVEX 字节 1,位[6] - X)以及(657BEX 字节 1,位[5] - B)组成。EVEX. R、 EVEX. X和EVEX. B位字段提供与对应VEX位字段相同的功能,并且使用1补码的形式进行编 码,g卩ΖΜΜ0被编码为1111B,ZMM15被编码为0000B。这些指令的其他字段对如在本领域中 已知的寄存器索引的较低三个位(rrr、XXX、以及bbb)进行编码,由此可通过增加EVEX. R、 EVEX. X 以及 EVEX. B 来形成 Rrrr、Xxxx 以及 Bbbb。
[0172] REX'字段610 -这是REX'字段610的第一部分,并且是用于对扩展的32个寄存器 集合的较高16个或较低16个寄存器进行编码的EVEX. R'位字段(EVEX字节1,位[4] - R')。 在本发明的一个实施例中,该位与以下指示的其他位一起以位反转的格式存储以(在公知 x86的32位模式下)与实操作码字节是62的BOUND指令进行区分,但是在MOD R/M字段 (在下文中描述)中不接受MOD字段中的值11 ;本发明的替代实施例不以反转的格式存储 该指示的位以及其他指示的位。值1用于对较低16个寄存器进行编码。换句话说,通过组 合EVEX. R'、EVEX. R、以及来自其他字段的其他RRR来形成R' Rrrr。
[0173] 操作码映射字段715(EVEX字节1,位[3:0] -_m)-其内容对隐含的前导操作码 字节(0F、0F38、或0F3)进行编码。
[0174] 数据元素宽度字段664 (EVEX字节2,位[7] -W) -由记号EVEX. W表示。EVEX. W 用于定义数据类型(32位数据元素或64位数据元素)的粒度(尺寸)。
[0175] EVEX. vvvv720 (EVEX 字节 2,位[6:3]-vvvv) - EVEX. vvvv 的作用可包括如下:1) EVEX. vvvv编码第一源寄存器操作数且对具有两个或两个以上源操作数的指令有效,第一 源寄存器操作数以反转(1补码)的形式被指定;2) EVEX. vvvv编码目的地寄存器操作数, 目的地寄存器操作数针对特定向量位移以1补码的形式被指定;或者3)EVEX. vvvv不编码 任何操作数,保留该字段,并且应当包含1111b。由此,EVEX. ww字段720对以反转(1补 码)的形式存储的第一源寄存器指定符的4个低阶位进行编码。取决于该指令,额外不同 的EVEX位字段用于将指定符尺寸扩展到32个寄存器。
[0176] EVEX.U668类字段(EVEX字节2,位[2]-U) -如果EVEX.U = 0,则它指示A类或 EVEX. UO ;如果 EVEX. U = 1,则它指示 B 类或 EVEX. Ul。
[0177] 前缀编码字段725(EVEX字节2,位[l:0]-pp) -提供了用于基础操作字段的附加 位。除了对以EVEX前缀格式的传统SSE指令提供支持以外,这也具有压缩SMD前缀的益 处(EVEX前缀只需要2位,而不是需要字节来表达SMD前缀)。在一个实施例中,为了支 持使用以传统格式和以EVEX前缀格式的SMD前缀(66H、F2H、F3H)的传统SSE指令,将这 些传统SMD前缀编码成SMD前缀编码字段;并且在运行时在提供给解码器的PLA之前被 扩展成传统SMD前缀(因此PLA可执行传统和EVEX格式的这些传统指令,而无需修改)。 虽然较新的指令可将EVEX前缀编码字段的内容直接作为操作码扩展,但是为了一致性,特 定实施例以类似的方式扩展,但允许由这些传统SIMD前缀指定不同的含义。替代实施例可 重新设计PLA以支持2位SMD前缀编码,并且由此不需要扩展。
[0178] α 字段 652(EVEX 字节 3,位[7] - H1,也称为 EVEX. HI、EVEX. rs、EVEX. RL、EVEX. 写掩码控制、以及EVEX. N;也以α示出)一如先前所述,该字段是针对上下文的。
[0179] β 字段 654(EVEX 字节 3,位[6:4]-SSS,也称为 EVEX. s2_。、EVEX. r2_。、EVEX. rrl、 EVEX. LLO、EVEX. LLB ;也以β β β示出)一如先前所述,该字段是针对上下文的。
[0180] REX'字段610 -这是REX'字段的其余部分,并且是可用于对扩展的32个寄存器集 合的较高16个或较低16个寄存器进行编码的EVEX. V'位字段(EVEX字节3,位[3] - V')。 该位以位反转的格式存储。值1用于对较低16个寄存器进行编码。换句话说,通过组合 EVEX. V'、EVEX. vvvv 来形成 V' VVVV。
[0181] 写掩码字段670(EVEX字节3,位[2:0]_kkk) -其内容指定写掩码寄存器中的寄存 器索引,如先前所述。在本发明的一个实施例中,特定值EVEX. kkk = 000具有暗示没有写 掩码用于特定指令的特殊行为(这可以各种方式实现,包括使用硬连线到所有的写掩码或 者旁路掩码硬件的硬件来实现)。
[0182] 实操作码字段730 (字节4)还被称为操作码字节。操作码的一部分在该字段中被 指定。
[0183] MOD R/M字段740 (字节5)包括MOD字段742、Reg字段744、以及R/M字段746。 如先前所述的,MOD字段742的内容将存储器访问和非存储器访问操作区分开。Reg字段 744的作用可被归结为两种情形:对目的地寄存器操作数或源寄存器操作数进行编码;或 者被视为操作码扩展且不用于对任何指令操作数进行编码。R/M字段746的作用可包括如 下:对引用存储器地址的指令操作数进行编码;或者对目的地寄存器操作数或源寄存器操 作数进行编码。
[0184] 比例、索引、基址(SIB)字节(字节6)-如先前所述的,比例字段650的内容用于 存储器地址生成。SIB. xxx754和SIB. bbb756 -先前已经针对寄存器索引Xxxx和Bbbb提 及了这些字段的内容。
[0185] 位移字段662A (字节7-10) -当MOD字段742包含10时,字节7-10是位移字段 662A,并且它与传统32位位移(disp32) -样地工作,并且以字节粒度工作。
[0186] 位移因数字段662B (字节7) -当MOD字段742包含01时,字节7是位移因数字 段662B。该字段的位置与传统x86指令集8位位移(disp8)的位置相同,它以字节粒度工 作。由于disp8是符号扩展的,因此它仅能在-128和127字节偏移量之间寻址;在64字节 高速缓存行的方面,disp8使用可被设为仅四个真正有用的值-128、-64、0和64的8位;由 于常常需要更大的范围,所以使用disp32 ;然而,disp32需要4个字节。与disp8和disp32 对比,位移因数字段662B是disp8的重新解释;当使用位移因数字段662B时,通过将位移 因数字段的内容乘以存储器操作数访问的尺寸(N)来确定实际位移。该类型的位移被称为 disp8*N。这减小了平均指令长度(单个字节用于位移,但具有大得多的范围)。这种压缩 位移基于有效位移是存储器访问的粒度的倍数的假设,并且由此地址偏移量的冗余低阶位 不需要被编码。换句话说,位移因数字段662B替代传统x86指令集8位位移。由此,位移 因数字段662B以与x86指令集8位位移相同的方式(因此在ModRM/SIB编码规则中没有 变化)进行编码,唯一的不同在于,将disp8超载至disp8*N。换句话说,在编码规则或编码 长度中没有变化,而仅在通过硬件对位移值的解释中有变化(这需要按存储器操作数的尺 寸按比例缩放位移量以获得字节式地址偏移量)。
[0187] 立即数字段672如先前所述地操作。
[0188] 完整操作码字段
[0189] 图7B是示出根据本发明的实施例的构成完整操作码字段674的具有专用向量友 好指令格式700的字段的框图。具体地,完整操作码字段674包括格式字段640、基础操作 字段642、以及数据元素宽度(W)字段664。基础操作字段642包括前缀编码字段725、操作 码映射字段715以及实操作码字段730。
[0190] 寄存器索引字段
[0191] 图7C是示出根据本发明的一个实施例的构成寄存器索引字段644的具有专用向 量友好指令格式700的字段的框图。具体地,寄存器索引字段644包括REX字段705、REX' 字段 710、MODR/M. reg 字段 744、MODR/M. r/m 字段 746、VVVV 字段 720、XXX 字段 754 以及 bbb 字段 756。
[0192] 扩充操作字段
[0193] 图7D是示出根据本发明的一个实施例的构成扩充操作字段650的具有专用向量 友好指令格式700的字段的框图。当类(U)字段668包含0时,它表明EVEX.U0(A类668A); 当它包含1时,它表明EVEX. U1 (B类668B)。当U = 0且MOD字段742包含11 (表明无存储 器访问操作)时,α字段652 (EVEX字节3,位[7] - EH)被解释为rs字段652A。当rs字 段652A包含1 (舍入652A. 1)时,β字段654 (EVEX字节3,位[6:4] - SSS)被解释为舍入 控制字段654Α。舍入控制字段654Α包括一位SAE字段656和两位舍入操作字段658。当 rs字段652Α包含0 (数据变换652Α. 2)时,β字段654 (EVEX字节3,位[6:4] - SSS)被解 释为三位数据变换字段654Β。当U = 0且MOD字段742包含00、01或10 (表明存储器访问 操作)时,α字段652(EVEX字节3,位[7] -EH)被解释为驱逐提示(EH)字段652B且β 字段654 (EVEX字节3,位[6:4] -SSS)被解释为三位数据操纵字段654C。
[0194] 当U = 1时,α字段652 (EVEX字节3,位[7] -EH)被解释为写掩码控制(Z)字段 652C。当U = 1且MOD字段742包含11 (表明无存储器访问操作)时,β字段654的一部 分(EVEX字节3,位[4] - SQ)被解释为RL字段657Α ;当它包含1 (舍入657Α. 1)时,β字 段654的其余部分(EVEX字节3,位[6-5] - S2J被解释为舍入操作字段659Α,而当RL字段 657A包含0(VSIZE657.A2)时,β字段654的其余部分(EVEX字节3,位[6-5=-?^被解释 为向量长度字段659B(EVEX字节3,位[6-5] -Lg)。当U= 1且MOD字段742包含00、01 或1〇(表明存储器访问操作)时,β字段654(EVEX字节3,位[6:4] -SSS)被解释为向量 长度字段659B (EVEX字节3,位[6-5] - Lg)和广播字段657B (EVEX字节3,位[4] - B)。
[0195] 示例性寄存器架构
[0196] 图8是根据本发明的一个实施例的寄存器架构800的框图。在所示出的实施例中, 有32个512位宽的向量寄存器810 ;这些寄存器被引用为zmmO到zmm31。较低的16zmm寄 存器的较低阶256个位覆盖在寄存器ymm〇-16上。较低的16zmm寄存器的较低阶128个位 (ymm寄存器的较低阶128个位)覆盖在寄存器xmmO-15上。专用向量友好指令格式700对 这些覆盖的寄存器组操作,如在以下表格中所示的。
[0197]

【权利要求】
1. 一种装置,包括: 指令执行逻辑电路,用于执行: a) 第一指令和第二指令,其中所述第一指令和所述第二指令两者从相应的第一和第二 输入向量的多个第一不重叠部分中的一个部分中选择第一组输入向量元素,所述第一组具 有第一位宽,所述多个第一不重叠部分中的每个部分具有与所述第一组相同的位宽; b) 第三指令和第四指令,其中所述第三指令和所述第四指令两者从相应的第三和第四 输入向量的多个第二不重叠部分中的一个部分中选择第二组输入向量元素,所述第二组具 有比所述第一位宽大的第二位宽,所述多个第二不重叠部分中的每个部分具有与所述第二 组相同的位宽; 掩码层电路,用于:在第一粒度下对所述第一和第三指令的所述第一组和第二组进行 掩码操作,利用所述操作产生的相应结果是所述第一和第三指令的相应结果;以及在第二 粒度下对所述第二和第四指令的所述第一组和第二组进行掩码操作,利用所述操作产生的 相应结果是所述第二和第四指令的相应结果。
2. 如权利要求1所述的装置,其特征在于,所述第二组是所述第一组的两倍大。
3. 如权利要求2所述的装置,其特征在于,所述第一组是128位,且所述第二组是256 位。
4. 如权利要求1所述的装置,其特征在于,所述第一粒度是32位,且所述第二粒度是 64位。
5. 如权利要求1所述的装置,其特征在于,所述向量元素是浮点数据值。
6. 如权利要求1所述的装置,其特征在于,如果目的地向量中的元素的位置被掩码,则 所述掩码层电路允许保留所述元素。
7. 如权利要求1所述的装置,其特征在于,如果目的地向量中的元素的位置被掩码,则 所述掩码电路用固定值覆写所述元素。
8. -种方法,包括: 执行第一指令,包括:从第一输入向量的多个第一不重叠部分中的一个部分中选择第 一组输入向量,所述第一组具有第一位宽,所述多个第一不重叠部分中的每个部分具有与 所述第一组相同的位宽;以及在第一粒度下对所选择的所述第一组进行掩码操作; 执行第二指令,包括:从第二输入向量的多个第二不重叠部分中的一个部分中选择第 二组输入向量元素,所述第二组具有所述第一位宽,所述第二输入向量的所述多个第二不 重叠部分中的每个部分具有与所述第一组相同的位宽;以及在第二粒度下对所选择的所述 第二组进行掩码操作,所述第一粒度比所述第二粒度精细; 执行第三指令,包括:从第三输入向量的多个第三不重叠部分中的一个部分中选择第 三组输入向量元素,所述第三组具有第二位宽,所述多个第三不重叠部分中的每个部分具 有与所述第三组相同的位宽,所述第二位宽大于所述第一位宽;以及在所述第二粒度下对 所选择的所述第三组进行掩码操作; 执行第四指令,包括:从第四输入向量的多个第四不重叠部分中的一个部分中选择第 四组输入向量元素,所述第四组具有所述第二位宽,所述第四输入向量的所述多个第四不 重叠部分中的每个部分具有与所述第三组相同的位宽;以及在所述第一粒度下对所述第四 组进行掩码操作。
9. 如权利要求8所述的方法,其特征在于,所述第一、第二、第三和第四指令由指令执 行流水线中的同一执行单元执行。
10. 如权利要求8所述的方法,其特征在于,所述第二组是所述第一组的两倍大。
11. 如权利要求10所述的方法,其特征在于,所述第一组是128位,且所述第二组是 256 位。
12. 如权利要求8所述的方法,其特征在于,所述第一粒度是32位,且所述第二粒度是 64位。
13. 如权利要求8所述的方法,其特征在于,所述向量元素是浮点数据值。
14. 如权利要求8所述的方法,其特征在于,所述掩码操作包括以下中的任一项:i)如 果目的地向量中的元素的位置被掩码,则允许保留所述元素;ii)如果目的地向量中的元 素的位置被掩码,则用固定值覆写所述元素。
15. -种装置,包括: 指令执行逻辑电路,用于执行: a) 第一指令和第二指令,其中所述第一指令和所述第二指令两者分别根据相应的第一 立即操作数和第二立即操作数从相应的第一输入向量和第二输入向量的多个第一不重叠 部分中的一个部分中选择第一组输入向量元素,所述第一组具有第一位宽,所述多个第一 不重叠部分中的每个部分具有与所述第一组相同的位宽; b) 第三指令和第四指令,其中所述第三指令和所述第四指令两者根据相应的第三立即 操作数和第四立即操作数从相应的第三和第四输入向量的多个第二不重叠部分中的一个 部分中选择第二组输入向量元素,所述第二组具有比所述第一位宽大的第二位宽,所述多 个第二不重叠部分中的每个部分具有与所述第二组相同的位宽; 掩码层电路,用于:在第一粒度下对所述第一和第三指令的所述第一组和第二组进行 掩码操作,利用所述操作产生的相应结果是所述第一和第三指令的相应结果;以及在第二 粒度下对所述第二和第四指令的所述第一组和第二组进行掩码操作,利用所述操作产生的 相应结果是所述第二和第四指令的相应结果。
16. 如权利要求15所述的装置,其特征在于,所述第二组是所述第一组的两倍大。
17. 如权利要求16所述的装置,其特征在于,所述第一组是128位,且所述第二组是 256 位。
18. 如权利要求15所述的装置,其特征在于,所述第一粒度是32位,且所述第二粒度是 64位。
19. 如权利要求15所述的装置,其特征在于,所述向量元素是浮点数据值。
20. 如权利要求15所述的装置,其特征在于,所述掩码操作包括以下中的任一项:i)如 果目的地向量中的元素的位置被掩码,则允许保留所述元素;ii)如果目的地向量中的元 素的位置被掩码,则用固定值覆写所述元素。
【文档编号】G06F9/30GK104115114SQ201180076304
【公开日】2014年10月22日 申请日期:2011年12月23日 优先权日:2011年12月23日
【发明者】E·乌尔德-阿迈德-瓦尔, R·凡伦天, J·考博尔圣阿德里安, B·L·托尔, M·J·查尼, Z·斯波伯, A·格雷德斯廷 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1