《用于执行使用掩码的向量打包一元解码的系统、装置和方法.pdf》由会员分享,可在线阅读,更多相关《用于执行使用掩码的向量打包一元解码的系统、装置和方法.pdf(48页完整版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 104025023 A (43)申请公布日 2014.09.03 CN 104025023 A (21)申请号 201180075861.0 (22)申请日 2011.12.23 G06F 9/06(2006.01) G06F 9/30(2006.01) (71)申请人 英特尔公司 地址 美国加利福尼亚州 (72)发明人 E乌尔德 - 阿迈德 - 瓦尔 T威尔豪姆 (74)专利代理机构 上海专利商标事务所有限公 司 31100 代理人 姬利永 (54) 发明名称 用于执行使用掩码的向量打包一元解码的系 统、 装置和方法 (57) 摘要 描述响应于单个使用掩码的向量打包。
2、一元解 码指令在计算机处理器中执行使用掩码的向量打 包一元值解码的系统、 装置和方法的实施例, 该指 令包括目的地向量寄存器操作数、 源写掩码寄存 器操作数和操作码。 (85)PCT国际申请进入国家阶段日 2014.06.23 (86)PCT国际申请的申请数据 PCT/US2011/067272 2011.12.23 (87)PCT国际申请的公布数据 WO2013/095666 EN 2013.06.27 (51)Int.Cl. 权利要求书 2 页 说明书 23 页 附图 22 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书23页 附图22页 (10)申。
3、请公布号 CN 104025023 A CN 104025023 A 1/2 页 2 1. 一种响应于单个使用掩码的向量打包一元解码指令在计算机处理器中执行使用掩 码的向量打包一元值解码的方法, 所述指令包括目的地向量寄存器操作数、 源写掩码寄存 器操作数和操作码, 所述方法包括以下步骤 : 执行所述单个使用掩码的向量打包一元值解码指令, 以确定并解码存储在所述源写掩 码寄存器中的一元编码值 ; 以及 将每个所确定和解码的一元编码值作为打包数据元素存储在所述目的地寄存器中对 应于其在所述源写掩码寄存器中位置的打包数据元素位置。 2. 如权利要求 1 所述的方法, 其特征在于, 每个一元编码值按。
4、以下格式存储 : 写掩码中 其最高有效位位置为1值且在目的地写掩码寄存器中有效性低于所述1值位位置的位位置 中的零个或更多个 0 值跟随所述 1 值。 3. 如权利要求 1 所述的方法, 其特征在于, 所述源向量寄存器的所解码的最低有效一 元编码值被存储在所述目的地寄存器的最低有效打包数据元素位置。 4. 如权利要求 1 所述的方法, 其特征在于, 所述源写掩码寄存器是 16 位。 5. 如权利要求 1 所述的方法, 其特征在于, 所述源写掩码寄存器是 64 位。 6. 如权利要求 1 所述的方法, 其特征在于, 在所有的所解码一元编码值被存储在所述 目的地寄存器中之后, 所述目的地向量寄存器。
5、的所有剩余打包数据元素位置全部被设置为 1。 7. 如权利要求 1 所述的方法, 其特征在于, 所述执行步骤包括 : 判定所述源写掩码寄存器的最低有效位位置是否为 0 ; 如果所述值为 0, 确定所述源掩码寄存器的下一个最低有效位位置的值并且维护先前 0 的计数 ; 如果所述值不为 0, 则所解码的打包一元值是先前 0 的数量。 8.如权利要求1所述的方法, 其特征在于, 所述目的地向量寄存器的尺寸是128、 256或 512 位。 9. 一种制品, 包括 : 其上存储指令表示的有形机器可读存储介质, 其中所述指令的格式指定写掩码寄存器 作为其源操作数并且指定单个目的地寄存器作为其目的地, 所。
6、述指令格式包括操作码, 所 述操作码响应于单个指令的单次发生, 指示机器确定并解码存储在源写掩码寄存器中的一 元编码值, 并且将每个所确定和解码的一元编码值作为打包数据元素存储在所述目的地寄 存器中对应于其在源写掩码寄存器中位置的打包数据元素位置。 10. 如权利要求 9 所述的制品, 其特征在于, 每个一元编码值按以下格式存储 : 写掩码 中其最高有效位位置为1值且在目的地写掩码寄存器中有效性低于所述1值位位置的位位 置中的零个或更多个 0 值跟随所述 1 值。 11. 如权利要求 9 所述的制品, 其特征在于, 所述源向量寄存器的所解码的最低有效一 元编码值被存储在所述目的地寄存器的最低有。
7、效打包数据元素位置。 12. 如权利要求 9 所述的制品, 其特征在于, 所述源写掩码寄存器是 16 位。 13. 如权利要求 9 所述的制品, 其特征在于, 所述源写掩码寄存器是 64 位。 14. 如权利要求 9 所述的制品, 其特征在于, 在所有的所解码一元编码值被存储在所述 目的地寄存器中之后, 所述目的地向量寄存器的所有剩余打包数据元素位置全部被设置为 权 利 要 求 书 CN 104025023 A 2 2/2 页 3 1。 15. 如权利要求 9 所述的制品, 其特征在于, 还用于 : 判定所述源写掩码寄存器的最低有效位位置是否为 0 ; 如果所述值为 0, 确定所述源掩码寄存器。
8、的下一个最低有效位位置的值并且维护先前 0 的计数 ; 如果所述值不为 0, 则所解码的打包一元值是先前 0 的数量。 16. 一种装置, 包括 : 硬件解码器, 用于解码单个使用掩码的向量打包一元解码指令, 所述指令包括目的地 向量寄存器操作数、 源写掩码寄存器操作数和操作码 ; 执行逻辑, 用于确定和解码存储在所述源写掩码寄存器中的一元编码值, 并且将每个 所确定和解码的一元编码值作为打包数据元素存储在所述目的地寄存器中对应于其在所 述源写掩码寄存器中位置的打包数据元素位置。 17. 如权利要求 16 所述的装置, 其特征在于, 每个一元编码值按以下格式存储 : 写掩码 中其最高有效位位置。
9、为1值且在目的地写掩码寄存器中有效性低于所述1值位位置的位位 置中的零个或更多个 0 值跟随所述 1 值。 18. 如权利要求 16 所述的装置, 其特征在于, 所述源向量寄存器的所解码的最低有效 一元编码值被存储在所述目的地寄存器的最低有效打包数据元素位置。 19. 如权利要求 16 所述的装置, 其特征在于, 所述源写掩码寄存器是 16 位。 20. 如权利要求 16 所述的装置, 其特征在于, 所述源写掩码寄存器是 64 位。 权 利 要 求 书 CN 104025023 A 3 1/23 页 4 用于执行使用掩码的向量打包一元解码的系统、 装置和方 法 发明领域 0001 本发明的领域。
10、一般涉及计算机处理器架构, 更具体而言, 涉及当执行时导致特定 结果的指令。 背景技术 0002 指令集, 或指令集架构 (ISA) 是涉及编程的计算机架构的一部分, 并可以包括原 生数据类型、 指令、 寄存器架构、 寻址模式、 存储器架构, 中断和异常处理、 以及外部输入和 输出(I/O)。 在本文中术语指令一般指宏指令即被提供给处理器(或指令转换器, 该指 令转换器(例如使用静态二进制翻译、 包括动态编译的动态二进制翻译)翻译、 变形、 仿真, 或以其他方式将指令转换成要由处理器处理的一个或多个指令)的指令)以用于执行的指 令而不是微指令或微操作 (micro-op)它们是处理器的解码器解。
11、码宏指令的结果。 0003 ISA 与微架构不同, 微架构是实现指令集的处理器的内部设计。带有不同的微架 构的处理器可以共享共同的指令集。例如,奔腾四 (Pentium4) 处理器、酷 睿 (CoreTM) 处理器、 以及来自加利福尼亚州桑尼威尔 (Sunnyvale) 的超微半导体有限公司 (Advanced Micro Devices,Inc.)的诸多处理器执行几乎相同版本的x86指令集(在更新的 版本中加入了一些扩展 ), 但具有不同的内部设计。例如, ISA 的相同寄存器架构在不同的 微架构中可使用已知的技术以不同方法来实现, 包括专用物理寄存器、 使用寄存器重命名 机制 ( 诸如, 。
12、使用寄存器别名表 RAT、 重排序缓冲器 ROB、 以及引退寄存器组 ; 使用多映射和 寄存器池 ) 的一个或多个动态分配物理寄存器等。除非另作说明, 短语寄存器架构、 寄存器 组, 以及寄存器在本文中被用来指代对软件 / 编程器以及指令指定寄存器的方式可见。在 需要特殊性的情况下, 形容词逻辑、 架构, 或软件可见的将用于表示寄存器架构中的寄存器 / 组, 而不同的形容词将用于指定给定微型架构中的寄存器 ( 例如, 物理寄存器、 重新排序 缓冲器、 引退寄存器、 寄存器池)。 0004 指令集包括一个或多个指令格式。给定指令格式定义各个字段 ( 位的数量、 位的 位置 ) 以指定要执行的操作。
13、 ( 操作码 ) 以及要对其执行该操作的操作码等。通过指令模板 (或子格式)的定义来进一步分解一些指令格式。 例如, 给定指令格式的指令模板可被定义 为具有指令格式的字段 ( 所包括的字段通常按照相同顺序, 但是至少一些字段具有不同的 位位置, 因为包括更少的字段 ) 的不同子集, 和 / 或被定义为具有不同解释的给定字段。由 此, ISA 的每一指令使用给定指令格式 ( 并且如果定义, 则在该指令格式的指令模板的给定 一个中 ) 来表达, 并且包括用于指定操作和操作数的字段。例如, 示例性 ADD 指令具有专用 操作码以及包括用于指定该操作码的操作码字段和用于选择操作数的操作数字段 ( 源 。
14、1/ 目的地以及源2)的指令格式, 并且该ADD指令在指令流中的出现将具有选择专用操作数的 操作数字段中的专用内容。 0005 科学、 金融、 自动向量化的通用, RMS( 识别、 挖掘以及合成 ), 以及可视和多媒体应 用程序 ( 例如, 2D/3D 图形、 图像处理、 视频压缩 / 解压缩、 语音识别算法和音频操纵 ) 常常 说 明 书 CN 104025023 A 4 2/23 页 5 需要对大量的数据项执行相同操作 ( 被称为 “数据并行性” )。单指令多数据 (SIMD) 是指使 处理器对多个数据项执行操作的一种指令。 SIMD技术特别适于能够在逻辑上将寄存器中的 位分为若干个固定尺。
15、寸的数据元素的处理器, 每一个元素都表示单独的值。例如, 256 位寄 存器中的位可以被指定为四个单独的 64 位打包数据元素 ( 四字 (Q) 尺寸的数据元素 ), 八 个单独的32位打包数据元素(双字(D)尺寸的数据元素), 十六单独16位打包的数据元素 ( 字 (W) 尺寸的数据元素 ), 或三十二个单独的 8 位数据元素 ( 字节 (B) 尺寸的数据元素 ) 来被操作的源操作数。这种类型的数据被称为打包数据类型或向量数据类型, 这种数据类 型的操作数被称为打包数据操作数或向量操作数。换句话说, 打包数据项或向量指的是打 包数据元素的序列, 并且打包数据操作数或向量操作数是SIMD指令(。
16、也称为打包数据指令 或向量指令 ) 的源操作数或目的地操作数。 0006 作为示例, 一种类型的 SIMD 指令指定要以垂直方式对两个源向量操作数执行的 单个向量操作, 以利用相同数量的数据元素, 以相同数据元素顺序, 生成相同尺寸的目的地 向量操作数(也称为结果向量操作数)。 源向量操作数中的数据元素被称为源数据元素, 而 目的地向量操作数中的数据元素被称为目的地或结果数据元素。 这些源向量操作数是相同 尺寸的, 并包含相同宽度的数据元素, 如此, 它们包含相同数量的数据元素。两个源向量操 作数中的相同位位置中的源数据元素形成数据元素对 ( 也称为相对应的数据元素 ; 即, 每 个源操作数的。
17、数据元素位置 0 中的数据元素相对应, 每个源操作数的数据元素位置 1 中的 数据元素相对应, 等等 )。由该 SIMD 指令所指定的操作分别对这些源数据元素对中的每一 对执行, 以生成匹配数量的结果数据元素, 如此, 每一对源数据元素都具有对应的结果数据 元素。 由于操作是垂直的并且由于结果向量操作数尺寸相同, 具有相同数量的数据元素, 并 且结果数据元素与源向量操作数以相同数据元素顺序来存储, 因此, 结果数据元素与源向 量操作数中它们的对应源数据元素对处于结果向量操作数的相同位位置。 除此示例性类型 的 SIMD 指令之外, 还有各种其他类型的 SIMD 指令 ( 例如, 只有一个或具有。
18、两个以上的源向 量操作数的 ; 以水平方式操作的 ; 生成不同尺寸的结果向量操作数的, 具有不同尺寸的数 据元素的, 和 / 或具有不同的数据元素顺序的 )。应该理解, 术语目的地向量操作数 ( 或目 的地操作数 ) 被定义为执行由指令所指定的操作的直接结果, 包括将该目的地操作数存储 在某一位置 ( 寄存器或在由该指令所指定的存储器地址 ), 以便它可以作为源操作数由另 一指令访问 ( 由另一指令指定该同一个位置 )。 0007 诸如由具有包括x86、 MMXTM、 流式SIMD扩展(SSE)、 SSE2、 SSE3、 SSE4.1以及SSE4.2 指令的指令集的CoreTM处理器使用的技术。
19、之类的SIMD技术, 在应用程序性能方面实 现了大大的改善。 已经发布和/或公布了涉及高级向量扩展(AVX)(AVX1和AVX2)且使用向 量扩展 (VEX) 编码方案的附加 SIMD 扩展集 ( 例如, 参见 2011 年 10 月的64 和 IA-32 架构软件开发手册, 并且参见 2011 年 6 月的高级向量扩展编程参考 )。 0008 一元编码在压缩算法中非常普遍, 并且用于例如在一些搜索引擎中编码符号长 度, 因为它往往更易于被解码。代替存储每个值, 可以存储该值与先前数据集之间的差异。 这样, 每个值被如下编码 : 0009 0-1 0010 1-10 0011 2-100 说 。
20、明 书 CN 104025023 A 5 3/23 页 6 0012 3-1000 0013 附图简述 0014 本发明是通过示例说明的, 而不仅局限于各个附图的图示, 在附图中, 类似的参考 标号表示类似的元件, 其中 : 0015 图 1 示出用于 VPUNARYDECODE 的示例性指令的操作的示例性示图。 0016 图 2 示出在处理器中使用 VPUNARYDECODE 指令的实施例。 0017 图 3 示出处理 VPUNARYDECODE 指令的方法的实施例。 0018 图 4 示出执行 VPUNARYDECODE 的方法的示例性伪代码。 0019 图 5 示出根据本发明的一个实施例。
21、的一个有效位向量写掩码元素的数量与向量 尺寸和数据元素尺寸之间的相关性。 0020 图 6A 例示了示例性 AVX 指令格式。 0021 图 6B 示出来自图 6A 的哪些字段构成完整操作码字段和基础操作字段。 0022 图 6C 示出来自图 6A 的哪些字段构成寄存器索引字段。 0023 图 7A-7B 是示出根据本发明的实施例的通用向量友好指令格式及其指令模板的 框图。 0024 图 8A-D 是示出根据本发明的实施例的示例性专用向量友好指令格式的框图。 0025 图 9 是根据本发明的一个实施例的寄存器架构的框图。 0026 图 10A 是示出根据本发明的实施例的示例性有序流水线和示例性。
22、寄存器重命名、 无序发布 / 执行流水线二者的框图。 0027 图 10B 是示出根据本发明的实施例的要包括在处理器中的有序架构核的示例性 实施例和示例性的寄存器重命名、 无序发布 / 执行架构核的框图。 0028 图 11A-B 示出了更具体的示例性有序核架构的框图, 该核将是芯片中的若干逻辑 块之一 ( 包括相同类型和 / 或不同类型的其他核 )。 0029 图 12 是根据本发明实施例可具有一个以上的核、 可具有集成存储器控制器以及 可具有集成图形器件的处理器的框图。 0030 图 13 是根据本发明的实施例的示例性系统的框图 ; 0031 图 14 是根据本发明的实施例的第一更具体的示。
23、例性系统的框图。 0032 图 15 是根据本发明的实施例的第二更具体的示例性系统的框图。 0033 图 16 是根据本发明的实施例的片上系统 (SoC) 的框图。 0034 图 17 是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制 指令转换成目标指令集中的二进制指令的框图。 具体实施方式 0035 在下面的描述中, 阐述了很多具体细节。然而, 应当理解, 本发明的各实施例可以 在不具有这些具体细节的情况下得到实施。 在其他实例中, 未详细示出公知的电路、 结构和 技术以免混淆对本描述的理解。 0036 在说明书中对 “一个实施例” 、“实施例” 、“示例实施例” 等的引用指。
24、示所描述的实 施例可以包括特定特征、 结构或特性, 但并不一定每个实施例都需要包括该特定特征、 结构 或特性。此外, 这样的短语不一定是指同一个实施例。此外, 当结合一个实施例描述特定特 说 明 书 CN 104025023 A 6 4/23 页 7 征、 结构或特性时, 我们认为, 可本领域技术人员的学识范围内, 与其他实施例相结合地影 响这样的特征、 结构或特性, 无论是否对此明确描述。 0037 概览 0038 在下面的描述中, 在描述指令集架构中的此特定指令的操作之前, 有某些术语可 能需要说明。一个这样的术语被称为 “写掩码寄存器” , 它通常用于断言操作数以有条件地 控制每元素的计。
25、算操作 ( 下文中, 还使用术语掩码寄存器, 且它指写掩码寄存器, 诸如以下 讨论的 “k” 寄存器 )。如下面使用的, 写掩码寄存器存储多个位 (16, 32, 64 等等 ), 其中写 掩码寄存器的每一有效位都在 SIMD 处理过程中控制向量寄存器的打包数据元素的操作 / 更新。通常, 有一个以上写掩码寄存器可供处理器核使用。 0039 指令集架构包括指定向量操作并且具有从这些向量寄存器中选择源寄存器和 / 或目的地寄存器的至少一些 SIMD 指令 ( 示例性 SIMD 指令可以指定要对向量寄存器中的一 个或多个的内容执行的向量操作, 该向量操作的结果被存储在向量寄存器之一中)。 本发明 。
26、的不同实施例可以具有不同尺寸的向量寄存器并支持更多 / 更少 / 不同尺寸的数据元素。 0040 由 SIMD 指令指定的多位数据元素的尺寸 ( 例如, 字节、 字、 双字、 四字 ) 确定向量 寄存器内 “数据元素位置” 的位定位, 并且向量操作数的尺寸确定数据元素的数量。打包数 据元素是指存储在特定位置的数据。换言之, 依据目的地操作数中数据元素的尺寸以及目 的地操作数的尺寸(目的地操作数中位的总数)(或换言之, 依据目的地操作数的尺寸和目 的地操作数中数据元素的数量 ), 所得到的向量操作数内多位数据元素位置的位定位 (bit location) 改变 ( 例如, 如果所得到的向量操作数。
27、的目的地是向量寄存器, 则目的地向量寄 存器内多位数据元素位置的位定位改变 )。例如, 多位数据元素的位定位在对 32 位数据元 素 ( 数据元素位置 0 占用位定位 31:0, 数据元素位置 1 占用位定位 63:32, 依次类推 ) 进行 操作的向量操作和对64位数据元素(数据元素位置0占用位定位63:0, 数据元素位置1占 用位定位 127:64, 依次类推 ) 进行操作的向量操作之间是不同的。 0041 另外, 根据本发明的一个实施例, 在一个有效位的向量写掩码元素的数量和向量 尺寸和数据元素尺寸之间有相关性, 如图 5 所示。示出了 128 位、 256 位, 以及 512 位的向量。
28、 尺寸, 虽然其他宽度也是可以的。 考虑了8位字节(B)、 16位字(W)、 32位双字(D)或单精度 浮点, 以及 64 位四字 (Q) 或双精度浮点的数据元素尺寸, 虽然其他宽度也是可以的。如所 示, 当向量尺寸是 128 位时, 当向量的数据元素尺寸是 8 位时可使用 16 位用于掩码, 当向量 的数据元素尺寸是 16 位时可使用 8 位用于掩码, 当向量的数据元素尺寸是 32 位时可使用 4 位用于掩码, 当向量的数据元素尺寸是 64 位时可使用 2 位用于掩码。当向量尺寸是 256 位时, 当打包数据元素宽度是 8 位时可使用 32 位用于掩码, 当向量的数据元素尺寸是 16 位 时。
29、可使用 16 位用于掩码, 当向量的数据元素尺寸是 32 位时可使用 8 位用于掩码, 当向量的 数据元素尺寸是 64 位时可使用 4 位用于掩码。当向量尺寸是 512 位时, 当向量的数据元素 尺寸是 8 位时可使用 64 位用于掩码, 当向量的数据元素尺寸是 16 位时可使用 32 位用于掩 码, 当向量的数据元素尺寸是 32 位时可使用 16 位用于掩码, 当向量的数据元素尺寸是 64 位时可使用 8 位用于掩码。 0042 依据向量尺寸和数据元素尺寸的组合, 所有 64 位或仅仅 64 位的子集可以用作写 掩码。一般而言, 当使用单个每元素掩码控制位时, 向量写掩码寄存器中用于掩码 (。
30、 有效 位 ) 的位数等于按位计的向量尺寸除以按位计的向量数据元素尺寸。 说 明 书 CN 104025023 A 7 5/23 页 8 0043 如上文所指出的, 写掩码寄存器包含对应于向量寄存器 ( 或存储器位置 ) 中的元 素的掩码位并跟踪应该对其执行操作的元素。 因此, 希望具有共同的操作, 这些操作就向量 寄存器而论在这些掩码位上复制类似的行为, 且一般而言, 允许调整写掩码寄存器内的这 些掩码位。 0044 以下是通常称为向量打包一元解码 (“VPUNARYDECODE” ) 指令的指令的实施例 以及可用于执行将在若干不同方面获益的这种指令的系统、 架构、 指令格式等的实施例。 V。
31、PUNARYDECODE 的执行造成基于源写掩码寄存器的内容在目的地向量寄存器中存储一元代 码值的集合。 0045 图1示出用于VPUNARYDECODE的示例性指令的操作的示例性示图。 在所示示例中, 源写掩码寄存器 101 的尺寸是 16 位, 并且编码 7 个一元编码值。第一个一元编码值在两个 最低有效位 (SRC1:0) 中。该值 “10” 是 “1” 的一元编码。下一个一元编码值在 SRC3:2 中找到并且也是 “10” 。实质上, 掩码寄存器中一元编码的边界是出现 1 并尾随有零个或多 个 “0” 值。 0046 该指令的执行造成每个一元编码值被存储在目的地向量寄存器 103 的数。
32、据元素 位置中。在 SRC1:0 中找到的最低有效一元编码值被作为解码值存储在目的地寄存器的 最低有效打包数据元素位置 (DST0)。在 SRC3:2 中找到的次最低有效一元编码值被作 为解码值存储在目的地寄存器的最低有效打包数据元素位置 (DST1)。相应地存储所有 值。 0047 在源的位位置 15(SRC15), 值为 “0” , 但是由于不存在有效性高于它的 “1” 值, 因 此不存在一元编码值。 0048 对于未存储一元解码值的打包数据元素位置, 通常写入全 “1” , 但是其它惯例 ( 全 “0” 等等 ) 也可以用于表示没有存储一元解码值。 0049 示例性格式 0050 该指令。
33、的示例性格式是 “VPUNARYDECODE R1,K1” , 其中操作数K1是写掩码寄存器, R1 是向量寄存器 ( 诸如 128、 256、 512 位寄存器等等 ) 且 VPUNARYDECODE 是指令的操作码。 K1 是源操作数, 且 R1 是目的地操作数。可在指令的 “前缀” 中定义数据元素的尺寸, 诸如通 过使用数据粒度位的指示。在多数实施例中, 该位将指示每个数据元素是 32 位或 64 位, 但 是可以使用其它变形。在一些实施例中, 源操作数不是寄存器, 而是存储器位置。 0051 示例性执行方法 0052 图2示出在处理器中使用VPUNARYDECODE指令的实施例。 在2。
34、01, 取出具有源写掩 码寄存器操作数和目的地向量寄存器操作数的 VPUNARYDECODE 指令。 0053 在 203, 通过解码逻辑解码 VPUNARYDECODE 指令。依赖于指令的格式, 在该阶段可 解释各种数据, 诸如是否将有数据变换、 写入和检索哪些寄存器、 访问哪些存储器地址等。 0054 在207, 由执行资源(诸如一个或多个功能单元)执行VPUNARYDECODE指令(或包 括这种指令的操作, 诸如微操作 ), 以确定并解码存储在源掩码寄存器中的一元编码值。 0055 在 209, 将经解码的一元值作为打包数据元素存储在目的地寄存器的相应打包数 据元素位置中。尽管分别地示出。
35、了 207 和 209, 但是在一些实施例中, 它们是作为指令执行 的一部分一起执行的。例如, 将最低有效解码一元值存储在目的地向量寄存器的最低有效 打包数据元素位置中。 说 明 书 CN 104025023 A 8 6/23 页 9 0056 尽管以上已经示出一种类型的执行环境, 但它易于修改以符合其它环境, 诸如详 细描述的有序和无序环境。 0057 图 3 示出处理 VPUNARYDECODE 指令的方法的实施例。在此实施例中, 假设早先已 经执行操作 201-205 中的某些, 如果不是全部, 然而, 没有示出它们, 以便不使下面呈现的 细节模糊。例如, 没有示出取出和解码, 也没有示。
36、出操作数检索。 0058 在301, 判定源掩码寄存器的最低有效位是否为 “0” 。 如果确定该位为 “0” , 在309, 判定源掩码寄存器的下一个最低有效位是否为 “0” , 并且保持直至找到 1 之前的先前 “0” 的 数量的计数。 0059 如果在 309 或 301 处值为 “1” , 如在 303 所确定的, 解码打包一元值是先前零的数 量。在 305, 可以将未覆盖的该值存储在目的地寄存器的最低有效未使用打包数据元素中, 其中解码值是先前零的数量。在其它实施例中, 对目的地寄存器一次完成所有写入。 0060 在 307, 判定是否评价了源掩码寄存器的所有位。如果否, 则重复步骤 。
37、303。 0061 依赖于实施例, 如果已经评价了所有位值, 则如果目的地寄存器的所有打包数据 元素位置都已被写入, 该方法可以完成。但是, 在一些实施例中, 如果存在一些未使用 ( 未 写入 ) 打包数据元素位置, 将预设值写入所有这些未使用打包数据元素位置。例如, 可以向 每个这些未使用打包数据元素位置写入全 “1” 或全 “0” 。 0062 图 4 示出执行 VPUNARYDECODE 的方法的示例性伪代码。 0063 图 4 示出执行这一指令的伪代码。 0064 示例性指令格式 0065 本文中所描述的指令的实施例可以不同的格式体现。例如, 本文描述的指令可体 现为 VEX、 通用向。
38、量友好或其它格式。以下讨论 VEX 和通用向量友好格式的细节。另外, 在 下文中详述示例性系统、 架构、 以及流水线。 指令的实施例可在这些系统、 架构、 以及流水线 上执行, 但是不限于详述的系统、 架构、 以及流水线。 0066 VEX 指令格式 0067 VEX 编码允许指令具有两个以上操作数, 并且允许 SIMD 向量寄存器比 128 位长。 VEX 前缀的使用提供了三个操作数 ( 或者更多 ) 句法。例如, 先前的两个操作数指令执行 盖写源操作数的操作 ( 诸如 A A+B)。VEX 前缀的使用使操作数执行非破坏性操作, 诸如 A B+C。 0068 图 6A 示出示例性 AVX 指。
39、令格式, 包括 VEX 前缀 602、 实操作码字段 630、 MoD R/M 字 节 640、 SIB 字节 650、 位移字段 662 以及 IMM8672。图 6B 示出来自图 6A 的哪些字段构成完 整操作码字段 674 和基础操作字段 642。图 6C 示出来自图 6A 的哪些字段构成寄存器索引 字段 644。 0069 VEX 前缀 ( 字节 0-2)602 以三字节形式进行编码。第一字节是格式字段 640(VEX 字节 0, 位 7:0), 该格式字段 640 包含明确的 C4 字节值 ( 用于区分 C4 指令格式的唯一 值 )。第二 - 第三字节 (VEX 字节 1-2) 包括。
40、提供专用能力的多个位字段。具体地, REX 字段 605(VEX 字节 1, 位 7-5) 由 VEX.R 位字段 (VEX 字节 1, 位 7R)、 VEX.X 位字段 (VEX 字 节 1, 位 6X) 以及 VEX.B 位字段 (VEX 字节 1, 位 5B) 组成。这些指令的其他字段对 如在本领域中已知的寄存器索引的较低三个位 (rrr、 xxx 以及 bbb) 进行编码, 由此可通过 增加 VEX.R、 VEX.X 以及 VEX.B 来形成 Rrrr、 Xxxx 以及 Bbbb。操作码映射字段 615(VEX 字节 说 明 书 CN 104025023 A 9 7/23 页 10 1。
41、, 位 4:0mmmmm) 包括对隐含的前导操作码字节进行编码的内容。W 字段 664(VEX 字节 2, 位 7W) 由记号 VEX.W 表示, 并且提供依赖于该指令而不同的功能。VEX.vvvv620(VEX 字节2, 位6:3-vvvv)的作用可包括如下 : 1)VEX.vvvv对以反转(1补码)的形式指定第一 源寄存器操作数进行编码, 且对具有两个或两个以上源操作数的指令有效 ; 2)VEX.vvvv 针 对特定向量位移对以 1 补码的形式指定的目的地寄存器操作数进行编码 ; 或者 3)VEX.vvvv 不对任何操作数进行编码, 保留该字段, 并且应当包含1111b。 如果VEX.L6。
42、68尺寸字段(VEX 字节 2, 位 2-L) 0, 则它指示 128 位向量 ; 如果 VEX.L 1, 则它指示 256 位向量。前缀 编码字段 625(VEX 字节 2, 位 1:0-pp) 提供用于基础操作字段的附加位。 0070 实操作码字段 630( 字节 3) 还被称为操作码字节。操作码的一部分在该字段中被 指定。 0071 MOD R/M字段640(字节4)包括MOD字段642(位7-6)、 Reg字段644(位5-3)、 以及 R/M 字段 646( 位 2-0)。Reg 字段 644 的作用可包括如下 : 对目的地寄存器操作数或 源寄存器操作数(Rrrr中的rrr)进行编码。
43、 ; 或者被视为操作码扩展且不用于对任何指令操 作数进行编码。R/M 字段 646 的作用可包括如下 : 对引用存储器地址的指令操作数进行编 码 ; 或者对目的地寄存器操作数或源寄存器操作数进行编码。 0072 比例、 索引、 基址 (SIB) 比例字段 650( 字节 5) 的内容包括用于存储器地址生成 的SS652(位7-6)。 先前已经针对寄存器索引Xxxx和Bbbb参考了SIB.xxx654(位5-3) 和 SIB.bbb656( 位 2-0) 的内容。 0073 位移字段 662 和立即数字段 (IMM8)672 包含地址数据。 0074 通用向量友好指令格式 0075 向量友好指令。
44、格式是适于向量指令 ( 例如, 存在专用于向量操作的特定字段 ) 的 指令格式。尽管描述了其中通过向量友好指令格式支持向量和标量运算两者的实施例, 但 是替换实施例仅使用通过向量友好指令格式的向量运算。 0076 图 7A-7B 是示出根据本发明的实施例的通用向量友好指令格式及其指令模板的 框图。图 7A 是示出根据本发明的实施例的通用向量友好指令格式及其 A 类指令模板的框 图 ; 而图 7B 是示出根据本发明的实施例的通用向量友好指令格式及其 B 类指令模板的框 图。具体地, 针对通用向量友好指令格式 700 定义 A 类和 B 类指令模板, 两者包括无存储器 访问 705 的指令模板和存。
45、储器访问 720 的指令模板。在向量友好指令格式的上下文中的术 语 “通用” 指不束缚于任何专用指令集的指令格式。 0077 尽管将描述其中向量友好指令格式支持 64 字节向量操作数长度 ( 或尺寸 ) 与 32 位 (4 字节 ) 或 64 位 (8 字节 ) 数据元素宽度 ( 或尺寸 )( 并且由此, 64 字节向量由 16 双字 尺寸的元素或者替换地 8 四字尺寸的元素组成 )、 64 字节向量操作数长度 ( 或尺寸 ) 与 16 位 (2 字节 ) 或 8 位 (1 字节 ) 数据元素宽度 ( 或尺寸 )、 32 字节向量操作数长度 ( 或尺寸 ) 与 32 位 (4 字节 )、 64。
46、 位 (8 字节 )、 16 位 (2 字节 )、 或 8 位 (1 字节 ) 数据元素宽度 ( 或尺 寸 )、 以及 16 字节向量操作数长度 ( 或尺寸 ) 与 32 位 (4 字节 )、 64 位 (8 字节 )、 16 位 (2 字节 )、 或 8 位 (1 字节 ) 数据元素宽度 ( 或尺寸 ) 的本发明的实施例, 但是替换实施例可支 持更大、 更小、 和 / 或不同的向量操作数尺寸 ( 例如, 256 字节向量操作数 ) 与更大、 更小或 不同的数据元素宽度 ( 例如, 128 位 (16 字节 ) 数据元素宽度 )。 0078 图 7A 中的 A 类指令模板包括 : 1) 在无存。
47、储器访问 705 的指令模板内, 示出无存储 说 明 书 CN 104025023 A 10 8/23 页 11 器访问的完全舍入 (round) 控制型操作 710 的指令模板、 以及无存储器访问的数据变换型 操作 715715 的指令模板 ; 以及 2) 在存储器访问 720 的指令模板内, 示出存储器访问的时 效性 725 的指令模板和存储器访问的非时效性 730 的指令模板。图 7B 中的 B 类指令模板 包括 : 1) 在无存储器访问 705 的指令模板内, 示出无存储器访问的写掩码控制的部分舍入 控制型操作 712 的指令模板以及无存储器访问的写掩码控制的 vsize 型操作 71。
48、7 的指令模 板 ; 以及 2) 在存储器访问 720 的指令模板内, 示出存储器访问的写掩码控制 727 的指令模 板。 0079 通用向量友好指令格式700包括以下列出的按照在图7A-7B中示出的顺序的如下 字段。 0080 格式字段 740 该字段中的特定值 ( 指令格式标识符值 ) 唯一地标识向量友好指 令格式, 并且由此标识指令在指令流中以向量友好指令格式出现。 由此, 该字段在无需仅有 通用向量友好指令格式的指令集的意义上是任选的。 0081 基础操作字段 742 其内容区分不同的基础操作。 0082 寄存器索引字段 744- 其内容直接或者通过地址生成来指定源或目的地操作数在 寄。
49、存器中或者在存储器中的位置。这些字段包括足够数量的位以从 PxQ( 例如, 32x512、 16x128、 32x1024、 64x1024)个寄存器组选择N个寄存器。 尽管在一个实施例中N可高达三个 源和一个目的地寄存器, 但是替换实施例可支持更多或更少的源和目的地寄存器 ( 例如, 可支持高达两个源, 其中这些源中的一个源还用作目的地, 可支持高达三个源, 其中这些源 中的一个源还用作目的地, 可支持高达两个源和一个目的地 )。 0083 修饰符(modifi er)字段746其内容将以指定存储器访问的通用向量指令格式出 现的指令与不指定存储器访问的通用向量指令格式出现的指令区分开 ; 即在无存储器访问 705 的指令模板与存储器访问 720 的指令模板之间。存储器访问操作读取和 / 或写入到存 储器层次 ( 在。