SM3哈希算法加速处理器、方法、系统和指令技术领域
本文描述的实施例涉及处理器。具体地,本文描述的实施例涉及利用处理器对哈
希算法进行求值。
背景技术
哈希函数或算法是计算机系统和其他电子设备中广泛使用的一种加密算法。哈希
算法一般以消息作为输入,通过对该消息应用哈希函数来生成相应的哈希值或摘要,并输
出该哈希值或摘要。通常,如果用相同的消息对相同的哈希函数求值,则应当生成相同的哈
希值。这种哈希算法被用于各种目的,例如,验证(例如,验证文件、数据、或消息的完整性)、
识别(例如,识别文件、数据、或消息)、认证(例如,生成消息认证码)、生成数字签名、生成伪
随机数等等。作为一个说明性示例,哈希函数可被用于针对给定消息生成哈希值。随后,可
使用相同的哈希函数针对该给定消息重新计算哈希值。如果哈希值相同,则可以假设消息
未被改变。相反,如果哈希值不同,则可假设消息已被改变。
一种公知的哈希算法是SM3哈希函数。SM3哈希算法已被中国商用密码学协会办公
室公布并得到中国政府的认可。SM3哈希算法已被中国信息安全标准化技术委员会(TC260)
法案指定为用于TCM(可信计算模块)的哈希算法。SM3哈希函数的英语描述已在2011年10月
24日被S.Shen和X.Lee公布为题为“SM3 Hash Function(SM3哈希函数)”的互联网工程任务
组(IETF)互联网草案。
附图说明
通过参考以下描述和用于示出实施例的附图可更好地理解本发明。在附图中:
图1是包括一个或多个SM3哈希算法加速指令的处理器指令集的框图。
图2示出SM3哈希算法的压缩函数。
图3是能操作来执行SM3两轮至少四个状态字(或在一些实施例中为至少八个状态
字)更新指令的实施例的处理器的实施例的框图。
图4是执行SM3两轮至少四个状态字(或在一些实施例中为至少八个状态字)更新
指令的实施例的方法的实施例的方框流程图。
图5是示出SM3两轮八个状态字更新操作的实施例的框图。
图6是示出SM3两轮四个剩余的状态字更新操作的实施例的框图。
图7是示出SM3四个消息扩展启动操作的实施例的框图。
图8是示出SM3四个消息扩展完成操作的实施例的框图。
图9A是示出有序流水线的实施例和寄存器重命名无序分发(issue)/执行流水线
的实施例的框图。
图9B是包括耦接到执行引擎单元并且同时耦接到存储器单元的前端单元的处理
器核的实施例的框图。
图10A是单处理器核的实施例的框图,该单处理器核连接到片上互连网络并具有2
级(L2)缓存的本地子集。
图10B是图10A的处理器核的一部分的扩展视图的实施例的框图。
图11是可具有不止一个核、可具有集成存储器控制器、并且可具有集成显卡的处
理器的实施例的框图。
图12是计算机架构的第一实施例的框图。
图13是计算机架构的第二实施例的框图。
图14是计算机架构的第三实施例的框图。
图15是片上系统架构的实施例的框图。
图16是根据本发明的实施例的使用软件指令转换器来将源指令集中的二进制指
令转换为目标指令集中的二进制指令的框图。
具体实施方式
本文公开了SM3哈希算法加速指令、用于执行指令的处理器、当处理或执行指令时
由处理器执行的方法、以及结合一个或多个处理器来处理或执行指令的系统。在以下描述
中阐述了许多具体细节(例如,具体指令操作、数据格式、操作数中数据元素的布置、处理器
配置、微架构细节、操作序列、等)。然而,可在没有这些具体细节的情况下实践实施例。在其
他实例中,未详细示出公知的电路、结构和技术,以避免模糊对描述的理解。
图1是包括一个或多个SM3哈希算法加速指令102的处理器指令集100的框图。(一
个或多个)SM3加速指令可有助于加速SM3哈希算法的实现。指令集是处理器指令集架构
(ISA)的一部分并且包括处理器能操作来执行的原生指令。指令集的指令(例如,包括SM3加
速指令)表示宏指令、汇编语言指令或提供给处理器用于执行的机器级指令。这些指令与由
于对指令集的指令进行解码而产生的微指令、微操作(micro-ops)或其他指令形成对比。
在一些实施例中,(一个或多个)SM3加速指令102可包括SM3两轮至少四个状态字
(或在一些实施例中为至少八个状态字)更新指令104。在被执行时,SM3两轮状态字更新指
令103能操作以使得处理器对SM3哈希算法的至少四个状态字(或在一些实施例中为至少八
个状态字)进行两轮更新。
在指令104可选地是SM3两轮四个状态字更新指令104的实施例中,指令102可选地
包括SM3两轮四个剩余的状态字更新指令106。当被执行时,指令106能操作以使得处理器对
八个状态字中剩余的四个(例如,未被指令104更新的四个)进行更新。可替代地,这些剩余
的四个状态字可选地由软件进行更新(例如,通过传统的指令序列)。
在一些实施例中,(一个或多个)指令102可选地包括用于辅助消息调度的一个或
多个指令,尽管这不是必须的。例如,在一些实施例中,(一个或多个)指令102可选地包括
SM3四个消息扩展启动指令108。当被执行时,指令108能操作以使得处理器启动和/或部分
地执行对四个消息的扩展。在一些实施例中,(一个或多个)指令102可选地包括被设计为与
启动指令108合作的SM3四个消息扩展完成指令110。当被执行时,指令110能操作以使得处
理器结束或完成对四个消息的扩展。
如所示出的,在一些实施例中,指令集100可以包括四个不同的SM3哈希函数加速
指令102。然而,在其他实施例中,指令集100可选地仅包括任何单个指令,或包括这些指令
102中的任何一个或多个指令的子集。虽然包括所有这四个指令可能倾向于提供最大量的
加速,但是一些加速可通过包括这些指令中的任何一个或多个来实现。
图2示出适用于实施例的SM3哈希算法的压缩函数212。SM3哈希算法接受消息作为
输入。消息可表示任何长度的位串。SM3哈希算法使用输入消息执行多个操作并在填充和迭
代压缩后生成长度为256位的哈希值或摘要。
首先,将256位状态值V(0)分为八个32位状态字A、B、C、D、E、F、G和H。用于第一次迭
代的初始状态值V(0)是由SM3哈希算法定义的常数。根据该算法将状态字A到H规定为“高位
优先”格式,但在实施方式中这些状态字的格式可以按需改变。
然后按方框中的顺序执行迭代过程。SM3哈希算法包括六十四次迭代或“轮”(即,j
的范围为从0到63)。如所示出的,单轮213包括多个不同操作。向左指的箭头符号(←)表示
将右侧的值或参数存储、分配或等同到左侧的值或参数。符号“<<<”表示旋转(rotate)
运算。带圆圈的加号这一符号表示逻辑异或(XOR)运算。Tj是取决于迭代(即,j的值)的
常数,该常数的值在SM3哈希函数中规定。例如,Tj可具有值。变量SS1、SS2、TT1、TT2是迭代
中所用的内部中间值,当0≤j≤15时为79cc4519,当16≤j≤63时为7a879d8a。
FFj是布尔函数,其根据方程式1随轮数(j)改变:
FFj(X,Y,Z)=X XOR Y XOR Z(0≤j≤15);或
=(XAND Y)OR(X AND Z)OR(Y AND Z)(16≤j≤63) 方程式1
GGi是布尔函数,其根据方程式2随轮数(j)改变:
GGj(X,Y,Z)=X XOR Y XOR Z(0≤j≤15);或
=(X AND Y)OR(NO′T X AND Z)(16≤j≤63) 方程式2
P0是压缩函数中根据方程式3的排列函数:
P0(X)=X XOR(X<<<9)XOR(X<<<17) 方程式3
注意,将项Wj添加到对布尔函数GGj的求值中。此外,将项W’j添加到对布尔函数FFj
的求值中。项Wi和W’j表示消息项、消息输入、或仅表示消息。对于迭代0至15,从正被压缩的
512位的块获得项W0至W15。特别地,正被压缩的512位消息块被划分或分割为十六个32位字,
采用高位优先格式被引用为W0至W15。剩余的消息Wi和W’j在SM3哈希算法的消息扩充或消息
扩展部分期间被计算。
对于迭代16至67,消息Wi可根据以下的方程式4来计算:
Wj=P1(Wj-16XOR Wj-9XOR(Wj-3<<<15))XOR
(Wj-13<<<7)XORWj-6 方程式4
在方程式4中,P1(x)是由以下方程式5定义的用于消息扩展的排列函数:
P1(X)=X XOR(X<<<15)XOR(X<<<23) 方程式5
对于迭代16至67,消息Wj可根据方程式4来计算,其中排列函数P1根据方程式5来计
算。注意,针对给定轮(例如,第j轮)的消息Wj的计算取决于来自先前轮的消息。具体地,如
可很容易从方程式4看出的,针对给定轮(例如,第j轮)的消息Wj取决于在先轮消息Wj-16、
Wj-13、Wj-9和Wj-3,其中Wj-3是来自相对于第j轮往回三轮的消息,Wj-16是来自相对于第j轮往回
十六轮的消息,以此类推。
消息W’j可根据以下的方程式6从消息Wi计算或得出:
W′j=Wj XOR Wj+4 方程式6
注意,消息W’j取决于来自同一轮的消息Wj以及四轮后的消息Wj+4。由于W0和W15是从
正被压缩的512位的消息块得到或获得的,可基于初始已知的消息W0至W15使用方程式6来确
定消息W’0至W’11。可根据消息W16至W67确定剩余的消息W’12至W’63,其中消息W16至W67可使用
方程式4-5来计算。注意,可以计算W64至W67,即使它们未被直接输入到压缩函数,但需要它
们来计算W’60至W’63。
一个挑战在于在处理器中实现SM3哈希算法通常趋向于是计算密集的。例如,如可
从图2和方程式1-3容易地看出的,针对每一轮更新状态字涉及大量不同的运算。具体地,在
每一轮期间,通常需要执行大量的XOR运算、旋转运算以及其他运算。此外,存在很多轮(例
如,64轮)。传统上,在没有本文所公开的SM3哈希算法两轮状态字更新指令的情况下,对算
法的状态字进行两轮更新通常倾向于涉及执行大量单独的运算。例如,传统上有可能针对
每个XOR运算、每个旋转运算等使用单独的指令。潜在地还可能需要附加的指令来对数据进
行移动或重布置来为下一轮做准备。其结果是,通过单独的更多通用指令,在软件中轮的性
能倾向于较差。该事实以及待执行的很多轮通常倾向于使得SM3哈希算法的实施变得非常
计算密集和/或需要大量时间。
图3是能操作来执行SM3两轮至少四个状态字(或在一些实施例中为至少八个状态
字)更新指令304的实施例的处理器320的实施例的框图。在一些实施例中,处理器可以是通
用处理器(例如,在台式计算机、膝上型计算机或其他计算机中使用的通用微处理器)。可替
代地,处理器可以是专用处理器。适当的专用处理器的示例包括(但不限于)网络处理器、通
信处理器、加密处理器、图形处理器、协同处理器、嵌入式处理器、数字信号处理器(DSP)以
及控制器(例如,微控制器)。处理器可以以下各种处理器中的任何一种:复杂指令集计算
(CISC)处理器、精简指令集计算(RISC)处理器、超长指令字(VLIW)处理器、以上各种处理器
的混合、其他类型的处理器,或者处理器可以具有这些不同处理器(例如,在不同核中)的组
合。
在操作期间,处理器320可以接收SM3两轮状态字更新指令304的实施例。例如,可
以从指令提取单元、指令队列等接收指令304。指令304可以表示宏指令、汇编语言指令、机
器代码指令、或处理器的指令集的其他指令或控制信号。
在一些实施例中,指令304可以明确地规定(例如,通过一个或多个字段或一组位)
或以其他方式指示(例如,隐含地指示等)一个或多个源封包数据操作数330。在一些实施例
中,一个或多个源封包数据操作数330可具有用于被输入到当前SM3轮(j)331的八个32位状
态字(例如,Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj)。在一些实施例中,一个或多个源封包数据操作数330
还可具有被分配在任何期望数量的源操作数间并且以任何期望的顺序的、足以对所接下来
的两个后续且连续的SM3轮进行求值的消息信息335(例如,一组消息)。作为一个示例,该消
息信息可以包括四个消息Wj、Wj+1、W’j、W’j+1。作为另一示例,该消息信息可以包括Wj、Wj+1、
Wj+4、Wj+5。其他消息信息也是可能的,这对本领域技术人员将是显而易见的并且具有本公开
的益处。这些状态字和消息可以被分配在任何期望数量和大小的一个或多个源操作数间并
且可以具有任何期望的顺序。本发明的范围不具体限于用于提供输入数据的源封包数据操
作数的数量、其大小,或操作数内的数据的布置,尽管从整体算法角度来看通过操作数内的
数据的某些布置(例如,通过减少针对不同迭代重布置数据元素的操作)可以实现某些效果
和/或益处,这对本领域技术人员将是显而易见的并且具有本公开的益处。本文其他地方公
开的具体示例被认为是有益的但当然地不是必需的。
在一些实施例中,指令还可以指定或以其他方式指示轮数(例如,在0至63范围内
的当前轮j),例如,通过一个或多个源封包数据操作数中的数据元素、指令304的字段(例
如,直接的)、通用寄存器中的值(例如,指令指定或隐含的)、或其他方式。在一些实施例中,
指令304还可明确地规定(例如,通过一个或多个字段或一组位)或以其他方式指示(例如,
隐含地指示等)一个或多个目标存储位置,该一个或多个目标存储位置将存储响应于指令
的一个或多个结果封包数据操作数336。
处理器320包括一组封包数据寄存器328。每个封包数据寄存器可以表示能操作以
存储封包数据、矢量数据、或SIMD数据的片上存储位置。在不同的微架构中可使用公知的技
术用不同的方式来实现封包数据寄存器,并且封包数据寄存器不限于任何特定类型的电
路。适当的寄存器类型的示例包括(但不限于)专用物理寄存器、使用寄存器重命名的动态
分配物理寄存器及其组合。
如所示出的,在一些实施例中,可以可选地将一个或多个源封包数据操作数330存
储在一个或多个封包数据寄存器328中。类似地,在一些实施例中,可以可选地将一个或多
个结果封包数据操作数336存储在一个或多个封包数据寄存器328中。可替代地,可以针对
这些操作数中的一个或多个操作数使用存储器位置或其他存储位置。此外,在图示中虽然
将(一个或多个)源操作数330和(一个或多个)结果操作数336示出为是分离的,在一些实施
例中,用于源操作数的封包数据寄存器或其他存储位置可以被重用于结果操作数(例如,指
令可以隐含地指示结果数据操作数要对指定的源封包数据操作数进行覆写)。
当一个或多个封包数据寄存器被用于存储一个或多个源封包数据操作数时,它们
一般需要具有足够的大小和/或数量来存储相关联的操作数。一般地,可以使用相对大量的
较小的封包数据寄存器,或相对少量的较大的封包数据寄存器,或者可以使用较大和较小
寄存器两者的组合。如前所述,在一些实施例中,一个或多个源封包数据操作数330可具有
当前SM3轮331的八个32位状态字(例如,Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj)。在实施例中,一个或多个
源封包数据操作数330还可具有消息信息335,例如四个32位消息(例如,Wj、Wj+1、W’j、W’j+1或
Wj、Wj+1、Wj+4、Wj+5)。总而言之,这包括总共十二个32位数据元素和/或384位的输入数据。
在一些实施例中,可以使用三个128位封包数据寄存器来存储该输入数据。在一些
实施例中,即使处理器具有更大的封包数据寄存器(例如,256位寄存器),也可以使用128位
封包数据寄存器,例如,以允许在其他处理器上使用指令而无需这种更大的寄存器。在其他
实施例中,可以使用一个256位寄存器和一个128位寄存器来存储该输入数据。在其他实施
例中,可以使用两个128位封包数据寄存器和两个64位封包数据寄存器来存储该输入数据。
在其他实施例中,可以使用六个64位封包数据寄存器来存储该输入数据。在其他实施例中,
可以可选地使用256位、128位、64位或其他大小的寄存器(例如,32位、512位等)的其他组合
来存储一个或多个源封包数据操作数。在使用相对大量寄存器(例如,四至六个或更多)的
情况下,可以指定一个或多个寄存器并且一个或多个后续的/接下来的寄存器对指令(例
如,运算码)可以是隐式的,而不是使指令指定所有的寄存器(例如,从而增加指令长度)。
再次参考图3,处理器包括解码单元或解码器322。解码单元可以接收并解码指令
304并且输出反映、表示指令304和/或从指令304得到的一个或多个微指令、微操作、微代码
条目点、经解码的指令或控制信号、或其他相对较低级别的指令或控制信号。一个或多个较
低级别的指令或控制信号可以通过一个或多个较低级别(例如,电路级或硬件级)的运算来
实现较高级别的指令304。在一些实施例中,解码单元可以包括用于接收指令的一个或多个
输入结构(例如,(一个或多个)端口、(一个或多个)互连、接口)、与输入结构耦接的用于辨
识并解码指令的指令辨识和解码单元、以及与指令辨识和解码逻辑耦接的用于输入一个或
多个相应的较低级别指令或控制信号的一个或多个输出结构(例如,(一个或多个)端口、
(一个或多个)互连、接口)。可以用各种不同的机制来实现解码单元,这种机制包括(但不限
于)微代码只读存储器(ROM)、查找表、硬件实施、可编程逻辑阵列(PLA)、以及本领域公知的
用于实现解码单元的其他机制。在一些实施例中,可以将指令304提供给指令仿真器、转换
器、变形器(morpher)、解释器或可以将指令转换为待解码的一个或多个其他指令的其他指
令转换模块,而不是直接将指令304提供给解码单元。
再次参考图3,SM3哈希函数两轮至少四个状态字更新执行单元324与解码单元322
和封包数据寄存器328相耦接。为简单起见,单元324在本文也可被称为SM3执行单元,或简
称为执行单元。执行单元可以接收表示指令304和/或从指令304得到的一个或多个经解码
的或经转换的指令或控制信号。执行单元还可接收指令304所指示的一个或多个源封包数
据操作数330。执行单元能操作以响应于和/或由于指令304(例如,响应于从指令解码的一
个或多个指令或控制信号)来将一个或多个结果封包数据操作数336存储在指令304所指示
的(一个或多个)相应的目的地存储位置。
在一些实施例中,一个或多个结果封包数据操作数336可以具有相对于给定轮经
两轮SM3更新的、与一个或多个源封包数据操作数330相对应的至少四个经两轮更新的32位
状态字。例如,在一个实施例中,(一个或多个)结果操作数336可以包括Aj+2、Bj+2、Ej+2和Fj+2,
其被分配在任何期望数量的操作数间并且具有任何期望的顺序。Aj+2、Bj+2、Ej+2和Fj+2分别相
对于Aj、Bj、Ej和Fj经两轮SM3更新。在一些实施例中,(一个或多个)结果操作数336可以可选
地具有经两轮SM3更新的至少八个32位状态字(例如,Aj+2、Bj+2、Cj+2、Dj+2、Ej+2、Fj+2、Gj+2和
Hj+2),其被分配在任何期望数量的操作数间并且具有任何期望的。在一些实施例中,响应于
指令304,执行单元324可存储针对图5示出和描述的任何结果,包括所描述的变化和其替
代,虽然本发明的范围不限于此。有利地,SM3两轮状态字更新指令可显著地帮助提高实现
SM3消息生成的速度、效率和/或性能(例如,通过避免传统软件方法原本具有的高指令数和
复杂度)。
在一些实施例中,针对两轮中的每一轮,执行单元可执行所有操作(例如,针对单
轮213示出的操作)。可替代地,可以可选地省略这些操作中的某些操作。例如,在四个状态
字更新指令的情形下,可以可选地省略生成剩余的四个状态字所需的某些操作(例如,可以
可选地省略第二轮中用于生成Cj+2、Dj+2、Gj+2、Hj+2的操作)。作为另一示例,可以在执行指令/
操作的限制之外可选地执行某些操作。例如,可以可选地由单独的指令执行Aj<<<12,可
以可选地由单独的指令执行Tj<<<j等。此外,应理解的是,针对轮213不一定需要执行针
对该轮示出的具体图示的操作。例如,可以可选地由一个或多个在计算上等同的替代操作
来实现某些运算。例如,可以通过其他布尔运算的组合来实现XOR,可以通过位开方来实现
旋转,等等。应理解的是,本文使用的术语“两轮”、“两轮状态字更新指令”以及类似的术语
涵盖并允许这种可能性。
总而言之,一个或多个结果封包数据操作数可以包括总共四个32位数据元素或
128位(例如,在四状态元素更新的情形下)或八个32位数据元素或256位(例如,在八状态元
素更新的情形下)。在一些实施例中,可以使用一个128位封包数据寄存器来存储经两轮更
新的四个32位状态字,或使用两个128位封包数据寄存器来存储经两轮更新的八个32位状
态字。在其他实施例中,可以使用两个64位封包数据寄存器来存储经两轮更新的四个32位
状态字,或使用四个64位封包数据寄存器来存储经两轮更新的八个32位状态字。在其他实
施例中,可以使用256位封包数据寄存器来存储经两轮更新的四个或八个32位状态字。在其
他实施例中,可以可选地使用256位、128位、64位或其他大小的寄存器(例如,32位、512位
等)的其他组合来存储一个或多个源封包数据操作数。可替代地,在需要的情况下,可以可
选地使用存储器位置或其他存储位置。本发明的范围不具体限于结果操作数的数量、其大
小、或结果操作数中数据的布置,尽管从整体算法角度来看通过操作数内的数据的某些布
置(例如,通过减少针对不同迭代重布置数据元素的操作)可以实现某些效果和/或益处,这
对本领域技术人员将是显而易见的并且具有本公开的益处。本文其他地方公开的具体示例
被认为是有益的但当然地不是必需的。
再次参考图3,执行单元324和/或处理器可以包括具体或特定逻辑(例如,晶体管、
集成电路或潜在地与固件(例如,存储在非易失性存储器中的指令)和/或软件结合的其他
硬件),其能操作以执行指令304和/或存储响应于和/或由于指令304(例如,响应于从指令
304解码或以其他方式得到的一个或多个指令或控制信号)的结果。在一些实施例中,电路
或逻辑可以包括SM3两轮求值逻辑326(例如,XOR逻辑、旋转逻辑、AND逻辑、OR逻辑、NOT逻辑
等)。
在一些实施例中,为有助于避免不适当地增大芯片面积和/或功率消耗,可以可选
地对用于实现SM3两轮状态字更新指令或本文所公开的其他指令的硬件或其他逻辑中的一
些进行重用来实现一个或多个其他加密指令(例如,用于实现安全哈希算法(例如,SHA-2)
的那些加密指令)。例如,在一些实施例中,可以可选地对用于实现布尔函数FFj(例如,当j
>15时)和GGj(例如,当j>15时)的硬件或逻辑进行重用来实现SHA-2的对应的多数
(majority)和选择(choose)函数。作为另一示例,在一些实施例中,可以可选地对用于在
SM3中执行加法的硬件或逻辑(例如,一个或多个加法器)进行重用来实现SHA-2中的加法。
也可以可选地对一些XOR和旋转逻辑进行重用。
为避免模糊描述,已经示出并描述相对简单的处理器320。在其他实施例中,处理
器可以可选地包括其他公知的处理器组件。这种组件的可能示例包括(但不限于)指令提取
单元、指令和/或数据L1缓存、第二或更高级缓存(例如,L2缓存)、指令调度单元、寄存器重
命名单元、冲排序缓冲器、引退单元、总线接口单元、指令和数据转换后备缓冲器(TLB)、包
括在处理器中的其他组件、以及以上各项的各种组合。
图4是执行SM3两轮至少四个状态字(或在一些实施例中为至少八个状态字)更新
指令的实施例的方法490的实施例的方框流程图。在一些实施例中,图4的操作和/或方法可
以由图3的处理器执行或在该处理器内执行。本文所针对图3的处理器所描述的组件、特征
和具体可选细节也可选地适用于图4的操作和/或方法。可替代地,图4的操作和/或方法可
以由相似或不同的装置执行和/或在该相似或不同的装置内执行。此外,图3的处理器可以
执行与图4的操作和/或方法相同、相似或不同的操作和/或方法。
方法包括在框491处接收SM3两轮状态字更新指令。在各方面,可以在处理器、指令
处理装置或其一部分(例如,指令提取单元、解码单元、总线接口单元等)处接收指令。在各
方面,可以从片外源(例如,从存储器、互连等)或从片上源(例如,从指令缓存、指令队列等)
接收指令。SM3两轮状态字更新指令可以指定或其他方式指示一个或多个源封包数据操作
数。针对第j轮SM3哈希算法,一个或多个源封包数据操作数可具有八个32位状态字Aj、Bj、
Cj、Dj、Ej、Fj、Gj和Hj。一个或多个源封包数据操作数还可具有足以对SM3哈希算法进行两轮
求值的四个消息。
在框492处,响应于和/或由于指令,可以将一个或多个结果封包数据操作数存储
在该指令所指示的一个或多个目的地存储位置。典型地,执行单元、指令处理装置或处理器
可以执行指令并存储结果。在一些实施例中,一个或多个结果封包数据操作数具有至少四
个经两轮更新的32位状态字Aj+2、Bj+2、Ej+2和Fj+2,它们已相对于Aj、Bj、Ej和Fj被SM3哈希算法
进行两轮更新。在一些实施例中,方法可选地包括接收任何源操作数并存储任何结果(如图
5中所示),方法包括所描述的其变型和替代,但本发明的范围不限于此。
所示出的方法涉及架构性操作(例如,从软件角度可见的那些操作)。在其他实施
例中,方法可选地包括一个或多个微架构性操作。通过示例的方式,可以无序地提取、解码、
以及调度指令,可以访问源操作数,执行单元可以执行微架构性操作以实施指令,等等。用
于实施指令的微架构性操作可选地包括SM3轮(例如,轮213)的任何操作。
图5是示出可响应于SM3两轮状态字更新指令的实施例被执行的SM3两轮状态字更
新操作540的实施例的框图。在所示出的实施例中,指令指定或以其他方式指示第一128位
源封包数据操作数530、第二128位源封包数据操作数532、以及第三128位源封包数据操作
数534。使用128位操作数可提供某些优点(例如允许使用具有128位封包数据寄存器但不具
有256位封包数据寄存器的处理器中的指令),但并不是必需的。在其他实施例中,可选地使
用不同数量和大小的操作数(例如,64位操作数、256位操作数、不同大小的组合等)。
在所示出的实施例中,第一128位源封包数据操作数530具有用于输入到当前轮
(j)的第一四个32位状态字,第二128位源封包数据操作数532具有用于输入到当前轮(j)的
第二四个32位状态字。具体地,在所示出的实施例中,从右侧的最低有效位位置到左侧的最
高有效位位置,第一源操作数530具有在位[31:0]中的32位状态元素Aj,在位[63:32]中的
32位状态元素Bj,在位[95:64]中的32位状态元素Ej,以及在位[127:96]中的32位状态元素
Fj。在其他实施例中,可选地使用倒序。同样从右侧的最低有效位位置到左侧的最高有效位
位置,第二源操作数532具有在位[31:0]中的32位状态元素Cj,在位[63:32]中的32位状态
元素Dj,在位[95:64]中的32位状态元素Gj,以及在位[127:96]中的32位状态元素Hj。在其他
实施例中,可选地使用倒序。所示出的布置可以提供某些优点,但不是必需的。在其他实施
例中,八个32位状态字可以以不同的方式被重新布置在可用的源操作数之间。
所示出的第三源封包数据操作数534具有足以对两轮SM3进行求值的消息信息(例
如,一组四个消息)。具体地,所示出的第三源封包数据操作数534具有四个消息Wj、Wj+1、Wj+4
和Wj+5。消息Wj+4和Wj足以根据方程式6来计算消息W’j。类似地,消息Wj+5和Wj+1足以根据方程
式6来计算消息W’j+1。在另一实施例中,指令可以指示提供四个消息Wj、Wj+1、W’j和W’j+1的一
个或多个源操作数。在其他实施例中,只要提供或可以根据所提供的信息(例如,Wj、Wj+1、
Wj+4、和Wj+5)计算或得出所需要的用于两轮的消息,可以使用消息的其他组合。
再次参考图5,响应于SM3两轮状态字更新指令,可以生成(例如,由执行单元524)
第一结果封包数据操作数536并将其存储在目的地存储位置。指令可以指定或以其他方式
指示目的地存储位置。在各实施例中,目的地存储位置可以是封包数据寄存器、存储器位置
或其他存储位置。在一些实施例中,第一结果封包数据操作数536可以包括经两个SM3轮更
新的四个32位状态字。例如,在所示出的实施例中,第一结果封包数据操作数536具有在位
[31:0]中的32位状态元素Aj+2,在位[63:32]中的Bj+2,在位[95:64]中的Ej+2,以及在位[127:
96]中的Fj+2。在其他实施例中,可以可选地使用倒序。此外,虽然所示出的布置可以提供某
些优点,在其他实施例中,可以在操作数中不同地重新布置状态字。
在一些实施例中,在可选的SM3两轮八个状态字更新指令的情形中,响应于该指
令,可以生成第二结果封包数据操作数538并将其存储在第二目的地存储位置。指令可以指
定或以其他方式指示第二目的地存储位置。在各实施例中,第二目的地存储位置可以是封
包数据寄存器、存储器位置或其他存储位置。在一些实施例中,第二结果封包数据操作数
538可以包括剩余的四个32位状态字,其未被包括在经两轮SM3更新的第一结果封包数据操
作数536中。具体地,在所示出的实施例中,第二结果封包数据操作数538具有在位[31:0]中
的32位状态元素Cj+2,在位[63:32]中的Dj+2,在位[95:64]中的Gj+2,以及在位[127:96]中的
Hj+2。在其他实施例中,可以可选地使用倒序。此外,虽然所示出的布置可以提供某些优点,
可以考虑各种操作数间和操作数内布置。
注意,在一些实施例中,第一结果封包数据操作数536可以可选地包括相应的类型
(例如,A、B、E、F)与第一源封包数据操作数530相同并且顺序也相同的状态字。此外,在一些
实施例中,第二结果封包数据操作数538可以可选地包括相应的类型(例如,C、D、G、H)与第
二源封包数据操作数532相同并且顺序也相同的状态字。这不是必需的,但从整体算法角度
看可倾向于提供某些效率和/或优点(例如,通过更高效地对轮间的状态字进行管理)。
图5的第二结果封包数据操作数538是可选而不是必需的。在其他实施例中,在可
选的SM3两轮四个状态字更新指令/操作的情形中,可以存储第一结果封包数据操作数536
(例如,以任何期望的顺序的Aj+2、Bj+2、Ej+2、Fj+2)而不是第二结果封包数据操作数538(例如,
不是Cj+2、Dj+2、Gj+2和Hj+2)。注意,源操作数中的一个包括Aj、Bj、Ej、Fj,另一个源操作数包括
Cj、Dj、Gj和Hj。当经两轮仅对四个状态字进行更新时(例如,生成Aj+2、Bj+2、Ej+2、Fj+2),在相同
的操作数内对这些类型的状态字的具体分组提供优点。如下文将进一步解释的(例如,结合
图6),例如,通过软件或通过附加的SM3加速指令(例如,指令106和/或针对图6所描述的指
令),可以容易地从Aj、Bj、Ej、Fj生成进行两轮更新的其他四个状态字(例如,Cj+2、Dj+2、Gj+2和
Hj+2)。当通过执行单个指令对所有的八个状态字进行两轮更新时,具体示出的对操作数间
不同类型的状态字的分组提供较少的优点。在这种情形中,虽然一些布置可能倾向于在轮
间对状态字提供更高效的管理,对不同类型的状态字的几乎任何操作数内和/或操作数间
的重新布置是可能的。例如,在源操作数和结果操作数中以相同的顺序维护不同类型的状
态字可能仍然是有益的。
在一些实施例中,例如,当经两轮仅对四个状态字进行更新时(例如,Aj+2、Bj+2、
Ej+2、Fj+2),可以可选地用这些经更新的四个状态字来覆写源操作数中的一个源操作数中四
个不同类型的状态字,虽然这不是必需的。例如,可以用Aj+2、Bj+2、Ej+2、Fj+2覆写Cj+2、Dj+2、
Gj+2、Hj+2而不是Aj、Bj、Ej、Fj。例如,指令可具有源/目的地操作数,该源/目的地操作数之前
被明确指定,但被隐含地理解要被用作源操作数并且随后被用作目的地操作数。例如,当期
望不具有另一指定的或隐含地指示的操作数存储位置时,用Aj+2、Bj+2、Ej+2、Fj+2覆写Cj+2、
Dj+2、Gj+2、Hj+2而不是Aj、Bj、Ej、Fj可提供保留Aj、Bj、Ej、Fj的优点,使得它们可以被用于对剩余
的四个状态字(例如,Cj+2、Dj+2、Gj+2、Hj+2)进行两轮更新。例如,可以使用附加的SM3加速指令
(例如,见图6),或者这可以在软件中实现。
SM3两轮四个状态字更新指令的一个具体示例实施例是以下的SM3RNDS2指令。SRC
表示第一128位源操作数,DST表示第二128位源/目的地操作数(指令隐含着一个位置被指
定并被用作源并再次被用作目的地),<XMM0>表示第三128位源操作数,其位置隐含于指令
中而不是被明确指定,imm表示用于指定轮数(j)的立即数(immediate)(例如,8位立即数)。
在其他实施例中,<XMM0>可由另一128位寄存器来替代。
SM3RNDS2 DST,SRC,imm,<XMM0>
j=imm
[Cj,Dj,Gj,Hj]=DST
[Aj,Bj,Ej,Fj]=SRC
[Wj+5,Wj+4,Wj+1,Wj]=XMM0
响应于SM3RNDS2指令,处理器和/或执行单元可以执行以下操作或它们的等同物,
或至少生成与这些操作一致的结果:
If(j<16),then Tj=Ox79cc4519,else Tj=0x7a879d8a,endif
SS1=((Aj<<<12)+Ej+(Tj<<<j))<<<7
SS2=SS1 XOR(Ai<<<12)
TT1=FFj(Aj,Bj,Cj)+Dj+SS2+(WjXOR Wj+4)
TT2=GGj(Ej,Fj,Gj)+Hj+SS1+Wj
Dj+1=Cj
Cj+1=Bj<<<9
Bj+1=Aj
Aj+1=T1
Hj+1=Gj
Gj+1=Fj<<<19
Fj+1=Ej
Ej+1=PO(TT2)
SS1=((Aj+1<<<12)+Ej+1+(Tj<<<(j+1)))<<<7
SS2=SS1 XOR(Aj+1<<<12)
TTT=FFj+1(Aj+1,Bj+1,Cj+1)+Dj+1+SS2+(Wj+1 XORWj+5)
TT2=GGj+1(Ej+1,Fj+1,Gj+1)+Hj+1+SS1+Wj+1
Bj+2=Aj+1
Aj+2=TT1
Ej+2=Ej+1
Ej+2=PO(TT2)
DST=[Aj+2,Bj+2,Ej+2,Fj+2]
注意,对于第二轮,不需要计算Cj+2、Dj+2、Gj+2、Hj+2并且如果需要的话可以可选地从
第二轮省略这些计算。因此,不需要执行完整的两轮,并且应当理解的是,本文对两轮的引
用涵盖可选地从这两轮中的第二轮移除的这种操作。
应当理解的是,这仅是一个示意性示例。其他实施例可以使用不同数量和大小的
操作数,如前所述。此外,其他实施例可以在操作数内不同地重布置元素。操作数间和操作
数内重布置都是可能的。此外,对SRC/DST寄存器的隐式重用的使用或对隐式寄存器(例如,
<XMM0>)使用不是必需的。例如,架构可允许明确地指定操作数,可以使用隐式的随后的寄
存器、等等。
图6是示出可响应于SM3两轮四个剩余的状态字更新指令的实施例执行的SM3两轮
四个剩余的状态字更新操作644的实施例的框图。在所示出的实施例中,指令指定或以其他
方式指示源风阻数据操作数646。如所示出的,在一些实施例中,源分组数据操作数可以是
128位操作数。可替代地,可以可选地使用两个64位操作数、256位操作数或其他大小的操作
数。在一些实施例中,源封包数据操作数可以具有要被输入到当前轮(j)作为数据的四个状
态字。例如,在所示出的实施例中,从右侧的最小低有效位位置到左侧的最高有效位位置,
源封包数据操作数具有在位[31:0]中的32位状态元素Aj,在位[63:32]中的Bj,在位[95:64]
中的Ej,以及在位[127:96]中的Fj。在其他实施例中,这些元素可以被分配在任何期望数量
的源操作数间并且在(一个或多个)源操作数内具有任何期望的顺序。例如,可以可选地使
用倒序。此外,在其他实施例中,可以可选地在单个源操作数或两个源操作数内不同地重布
置状态字。在一方面,源封包数据操作数646可以是与图5的第一源封包数据操作数530相同
的操作数/数据(例如,算法可重用操作数/数据)。
响应于指令/操作,可以生成(例如,通过执行单元624)结果封包数据操作数648并
将其存储在目的地存储位置。指令可以指定或以其他方式指示目的地存储位置。在各实施
例中,目的地存储位置可以是封包数据寄存器、存储器位置或其他存储位置。如所示出的,
在一些实施例中,结果封包数据操作数可以是128位操作数。可替代地,可以使用64位操作
数、256位操作数或其他大小的操作数。在一些实施例中,结果封包数据操作数648可以包括
经两轮更新的四个剩余的状态字。在一方面,四个剩余的状态字可以表示未被包括在响应
于SM3两轮四个状态字更新指令被存储的第一结果封包数据操作数536中的那些状态字。另
一方面,四个剩余的状态字可以表示未被包括在源封包数据操作数646(例如,A、B、E和F类
型)中的四种类型的状态字(例如,C、D、G和H类型)。如所示出的,在所示出的实施例中,结果
封包数据操作数具有在位[31:0]中的32位状态元素Cj+2,在位[63:32]中的Dj+2,在位[95:
64]中的Gj+2,以及在位[127:96]中的Hj+2。在其他实施例中,可以可选地使用倒序。此外,虽
然所示出的布置可以提供某些优点,在其他实施例中,可以可选地在结果封包数据操作数
中不同地重新布置状态字。
在一些实施例中,处理器和/或执行单元624可以执行以下方程式来分别从Aj、Bj、
Ej和Fj(在源操作数中被提供)生成Cj+2、Dj+2、Gj+2和Hj+2。
Cj+2=Bj+1=Aj<<<9
Dj+2=Cj+1=Bj<<<9
Cj+2=Fj+1<<<19=Ej<<<19
Hj+2=Gj+1=Fj<<<19
可通过对图2中示出的针对两轮SM3算法的等式进行比较来容易地得出这些关系。
回想以下,如以上针对图2和方程式4-6所讨论的,SM3算法利用消息(Wi)。从正被
压缩的512位的块获得消息W0至W15。基于方程式4-6计算剩余的消息。传统上,消息扩展一般
倾向于涉及大量单独的指令。例如,传统上有可能可针对每个XOR操作、每个旋转操作等使
用单独的指令。潜在地还可能需要附加的指令来对数据进行移动或重布置来为扩展更多消
息做准备。此外,需要生成大量的这种Wi消息(例如,W16至W67)。其结果是,通过单独的更多通
用指令,在软件中轮的性能倾向于较差和/或需要大量时间。
在一些实施例中,可在处理器的指令集中包含用于加速SM3消息扩展的一对指令
(例如,指令108、110)。在一些实施例中,可使用指令来生成与四个循序且连续的轮相对应
的四个新消息(例如,消息Wj+16、Wj+17、Wj+18、Wj+19)。不管指令集是否还包含SM3两轮至少四个
状态字更新指令(例如,指令104),都可以包含该对指令。
在一些实施例中,这对指令的源操作数可以共同包含足以生成四个新消息的一组
消息。在方程式4的以下四个实例中示出用于生成这些四个新消息的这组输入消息,如下所
示:
Wj+16=P1(WjX()R Wj+7XOR(Wj+13<<<15))XOR(Wj+3<<<7)XOR Wj+10
Wj+17=P1(Wj+1XOR Wj+8 XOR(Wj+14<<<15))XOR(Wj+4<<<7)XOR Wj+11
Wj+18=P1(Wj+2XOR Wj+9XOR (Wj+15<<<15))XOR(Wj+5<<<7)XOR Wj+12
Wj+19=P1(Wj+3XOR Wj+10XOR(Wj+16<<<15))XOR(wj+6<<<7)XOR Wj+13
需要十六个唯一的消息(例如,Wj至Wj+15)来对这些关系进行求值以得到四个新消
息。此外,需要计算消息Wj+16来完成对Wj+19的计算。Wj对应于要输入到第j轮的最早的一轮,
Wj+1对应于要被输入到第j+1轮的仅次于最早的轮的一轮,以此类推。
在一个实施例中,可选地在一个单个指令的(一个或多个)源操作数中包含所有的
十六个唯一的消息(例如,Wj至Wj+15)。这一个单个指令可以操作以使得处理器将所有的四个
经更新的消息(例如,Wj+16至Wj+19)存储在所执行的该单个指令的限制内。在其他实施例中,
可以使用一对指令,并且可以在该对指令的(一个或多个)源操作数中包含全部十六个唯一
的消息(例如,Wj至Wj+15)。这对相协作的指令可以操作以使得处理器将所有的四个经更新的
消息(例如,Wj+16至Wj+19)存储在所执行的该对指令的限制内。两个指令中的每一个可通过其
相对应的(一个或读个)源操作数来提供仅所需的输入消息的子集。该对指令中的第一/初
始指令可生成临时结果,第二/随后的指令对该临时结果进行进一步处理以生成四个新消
息。使用一对指令而不是单个指令可提供某些潜在优点,例如,与在单个指令的(一个或多
个)源操作数中提供所有需要的输入消息相比,允许使用更小的寄存器和/或更少的源操作
数。
图7-8示出一对SM3消息扩展指令的实施例的操作。如先前所描述的,可以接收指
令并对指令进行解码,可以启用执行单元来执行操作等。图7是示出可响应于SM3四个消息
扩展启动指令的实施例(例如,要执行的一对指令中的第一指令)被执行的SM3四个消息扩
展启动操作750的实施例的框图。在所示出的实施例中,指令指定或以其他方式指示第一
128位源封包数据操作数752、第二128位源封包数据操作数754、以及第三128位128位源封
包数据操作数756。如以前一样,使用128位操作数可提供某些优点,但不是必需的。在其他
实施例中,可以可选地使用不同数量和大小的操作数,例如,64位操作数、256位操作数、不
同大小的操作数的组合等。
可使用第一、第二和第三源操作数来仅提供求取四个新消息的值所需的十六个不
同的输入消息的子集。在一方面,所提供的消息可以表示足以对上文示出的方程式4的四个
实例中的每个实例的块或部分进行求值的那些消息。例如,在所示出的示例实施例中,第一
源操作数752具有在位[31:0]的消息Wj,在位[63:32]的消息Wj+1,在位[95:64]的消息Wj+2,
以及在位[127:96]的消息Wj+3。第二源操作数754具有在位[31:0]的消息Wj+13,在位[63:32]
的消息Wj+14,在位[95:64]的消息Wj+15,以及在位[127:96]的任意值*。任意值*可表示各种方
便的值,例如,全零、全一、已有的/未改变的位值等。第三源操作数756具有在位[31:0]的消
息Wj+7,在位[63:32]的消息Wj+8,在位[95:64]的消息Wj+9,以及在位[127:96]的消息Wj+10。
在所示出的实施例中,第一源操作数752可选地具有与四个连续的轮相对应的四
个消息,并且该四个消息可选地根据轮序(例如,随位有效值增加的递升的轮序)被布置。同
样地,第二源操作数754可选地具有与三个连续的轮相对应的三个消息,并且该三个消息可
选地根据轮序(例如,递升的轮序)被布置。类似地,第三源操作数756可选地具有与四个连
续的轮相对应的四个消息,并且该四个消息可选地根据轮序(例如,递升的)被布置。在另一
实施例中,若需要,可以可选地在操作数内使用倒序或反序的消息(例如,在每个操作数内,
可以以降序来布置消息)。以下操作可有助于提高管理消息在轮间的重布置的效率:将邻近
轮的消息存储在同一操作数内,将邻近轮的消息以轮序存储在操作数内,以及以相同的轮
序对每个操作数的邻近消息进行存储(例如,全部以递升的轮序进行布置),但以上操作不
是必需的。在其他实施例中,可以可选地通过各种操作数内和/或操作数间重布置对消息进
行重布置。此外,在其他实施例中,如需要,可以可选地使用其他数量和/或大小的操作数。
再次参考图7,响应于SM3四个消息扩展启动指令/操作可生成(例如,由执行单元
724)结果封包数据操作数758并将其存储在目的地存储位置。指令可以指定或以其他方式
指示目的地存储位置。目的地存储位置可以是封包数据寄存器、存储器位置或其他存储位
置。在一些实施例中,结果封包数据操作数758可以包括四个临时或中间结果,例如,每一者
表示上文示出的方程式4的四个实例中对应的一个实例的不同的经求值的块/部分。如本文
所使用的,经求值的块/部分意味着与经求值的块/部分一致的值,但方程式中所示出的每
个操作并不必然被执行或者甚至那些方程式实际上并不必然被使用。例如,在其他实施例
中,可以得出其在计算上等同的方程式或部分(例如,计算上等同的操作)并用该等同的方
程式或部分替代本文所示出的方程式。
再次参考图7,在所示出的实施例中,结果封包数据操作数758具有在位[31:0]的
第一32位临时结果(WTMP0),在位[63:32]的WTMP1,在位[95:64]的WTMP2,以及在位[127:96]的
WTMP3。在一些实施例中,WTMP0-WTMP3可以等同于有处理器执行的以下计算:
T0=WjXOR Wj+7XOR(Wj+13<<<15)
T1=Wj+1XOR Wj+8XOR(Wj+14<<<15)
T2=Wj+2XOR Wj+9XOR(Wj+15<<<15)
T3=Wj+3XOR Wj+10
WTMP0=P1(TO)
WTMP1=P1(T1)
WTMP2=P1(T2)
WTMP3=P1(T3)
在一个具体实施例中,第一源操作数752可以在隐含地指示的128位源寄存器中,
第二源操作数754可以在隐含地指示的128位源寄存器中,第三源操作数756可以在隐含地
指示的128位源/目的地寄存器中,并且结果操作数758可以覆写源/目的地寄存器中的第三
源操作数756,但是本发明的范围不限于此。
图8是示出可响应于SM3四个消息扩展完成指令的实施例被执行的SM3四个消息扩
展完成操作860的实施例的框图。在所示出的实施例中,指令指定或以其他方式指示第一
128位源封包数据操作数862、第二128位源封包数据操作数864、以及第三128位128位源封
包数据操作数866。如以前一样,使用128位操作数可提供某些优点,但不是必需的。在其他
实施例中,可以可选地使用不同数量和大小的操作数,例如,64位操作数、256位操作数、不
同大小的操作数的组合等。
可使用第一、第二和第三源操作数来提供针对四个循序且连续的轮生成四个新消
息所需的十六个不同的消息的剩余互补子集。在一些实施例中,消息可以表示足以对方程
式4的四个实例中的剩余的块/部分(未被图7的指令/操作求值)进行求值的那些消息。例
如,在所示出的示例实施例中,第一源操作数862具有在位[31:0]的消息Wj+10,在位[63:32]
的消息Wj+11,在位[95:64]的消息Wj+12,以及在位[127:96]的消息Wj+13。第二源操作数864具
有在位[31:0]的消息Wj+3,在位[63:32]的消息Wj+4,在位[95:64]的消息Wj+5,以及在位[127:
96]的任意值Wj+6。第三源操作数866具有在位[31:0]的第一临时结果(WTMP0),在位[63:32]
的第二临时结果(WTMP1),在位[95:64]的第三临时结果(WTMP2),以及在位[127:96]的第四临
时结果(WTMP3)。
在所示出的实施例中,第一源操作数862可选地具有与四个连续的轮相对应的四
个消息,并且该四个消息可选地根据轮序(例如,随位有效值增加的递升的轮序)被布置。同
样地,第二源操作数864可选地具有与三个连续的轮相对应的三个消息,并且该三个消息可
选地根据轮序(例如,递升的轮序)被布置。第三源操作数866可选地具有四个临时结果WTMP1
至WTMP3。在另一实施例中,若需要,可以可选地在操作数内使用倒序或反序的消息(例如,在
每个操作数内,可以以降序来布置消息)。以下操作可有助于提高管理消息在轮间的重布置
的效率:将邻近轮的消息存储在同一操作数内,将邻近轮的消息以轮序存储在操作数内,以
及以相同的轮序对每个操作数的邻近消息进行存储(例如,全部以递升的轮序进行布置),
但以上操作不是必需的。在其他实施例中,可以可选地通过各种操作数内和/或操作数间重
布置对消息进行重布置。此外,在其他实施例中,如需要,可以可选地使用其他数量和/或大
小的操作数。
再次参考图8,响应于SM3四个消息扩展完成指令/操作可生成(例如,由执行单元
824)结果封包数据操作数868并将其存储在目的地存储位置。指令可以指定或以其他方式
指示目的地存储位置。目的地存储位置可以是封包数据寄存器、存储器位置或其他存储位
置。在一些实施例中,结果封包数据操作数868可以包括针对四个循序且连续的轮的四个消
息。如所示出的,在所示出的实施例中,结果封包数据操作数868具有在位[31:0]的要被输
入到第(j+16)轮SM3哈希函数的压缩函数的第一32位消息Wj+16,在位[63:32]的要被输入到
第(j+17)轮的第二32位消息Wj+17,在位[95:64]的要被输入到第(j+18)轮的第三32位消息
Wj+18,以及在位[127:96]的要被输入到第(j+19)轮的第四32位消息Wj+19。
在一些实施例中,可以根据以下操作来对Wj+16至Wj+19进行求值:
Wj+16=(Wj+3<<<7)XOR Wj+10XOR WTMP0
Wj+17=(Wj+4<<<7)XOR Wj+11XOR WTMP1
Wj+18=(Wj+5<<<7)XOR Wj+12XOR WTMP2
Wj+19=(Wj+6<<<7)XOR Wj+13XOR WTMP3
Wj+19=Wj+19XOR(Wj+16<<<6)XOR(Wj+16<<<15)XOR(Wj+16<<<30)
注意,计算Wj+16,然后用其来完成对Wj+19的求值。有利地,这对SM3消息扩展操作/指
令可显著地帮助提高实施SM3消息生成的速度、效率和/或性能(例如,通过避免传统软件方
法原本存在的高指令数和复杂性)。应当理解的是,这仅是适当的指令对的一个示意性示
例。
在其他实施例中,可以可选地通过指令对中的第一指令来求取上文示出的方程式
4的四个实例的其他块,并且可通过第二随后的指令来对剩余的块进行求值。相应地,指令
对中的第一指令与指令对中的第二指令提供不同的消息子集。也即,可以在第一指令和第
二指令之间灵活地分配消息,只要所提供的消息可以被用来对方程式4的实例的块进行求
值,所求得的可以作为中间结果从第一指令传递到第二随后的指令,第二随后的指令可以
使用中间结果和剩余的尚未被提供的消息来完成对方程式4的这些实例的求值。
在一个具体实施例中,第一源操作数862可以在隐含地指示的128位源寄存器中,
第二源操作数864可以在隐含地指示的128位源寄存器中,第三源操作数866可以在隐含地
指示的128位源/目的地寄存器中,并且结果操作数868可以覆写源/目的地寄存器中的第三
源操作数866,但是本发明的范围不限于此。
本文所描述的指令和处理器旨在实现SM3中文加密哈希函数并获得与之一致的
值。描述中可导致与SM4算法不一致的结果的任何可能的矛盾和不一致(例如,由于印刷错
误、翻译错误、描述错误或其他错误)是无意的和错误的。此外,虽然已经描述了SM3算法的
当前版本,应理解的是,实施例也适用于满足权利要求的限制以下各项:该标准的扩展(例
如,SMx中文加密哈希标准,其中SMx表示SM3的将来版本)、该标准的派生、该标准的修改、相
关标准、以及类似物。如本文中所使用的,SM3指代所描述的并且已知的算法,而不管是叫做
SM3还是一些其他名字。
示例性核架构、处理器以及计算机架构
可以用不同的方式、针对不同的目的、并且在不同的处理器中实现处理器核。例
如,这种核的实现可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高
性能通用无序核;3)用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可以包
括:1)包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或
多个通用无序核的CPU;以及2)包括旨在主要用于图形和/或科学(吞吐量)计算的一个或多
个专用核的协处理器。这种不同的处理器导致不同的计算机系统架构,其可包括:1)在与
CPU相分离的芯片上的协处理器;2)在与CPU相同的封装中单独的芯片上协处理器;3)在与
CPU相同的芯片上的协处理器(在这种情形中,这种协处理器有时可被称为专用逻辑,例如
集成图像和/或科学(吞吐量)逻辑,或专用核);以及4)可能在同一芯片上包括所描述的CPU
(有时被称为(一个或多个)应用核或(一个或多个)应用处理器)、上述协处理器以及附加的
功能的片上系统。接下来对示例性核架构进行描述,之后对示例性处理器和计算机架构进
行描述。
示例性核架构
有序和无序核框图
图9A是示出根据本发明的实施例的示例性有序流水线和示例性寄存器重命名、无
序分发(issue)/执行流水线两者的框图。图9B是示出根据本发明的实施例的、要被包括在
处理器中的有序架构核的示例性实施例和示例性寄存器重命名、无序分发/执行架构两者
的框图。图9A-B的实线框示出有序流水线和有序核,而可选添加的虚线框示出寄存器重命
名、无序分发/执行流水线和核。考虑到有序方面是无序方面的子集,将对无序方面进行描
述。
示例性核架构
图9A中的有序核无序核架构,处理器流水线900包括提取阶段902、长度解码阶段
904、解码阶段906、分配阶段908、重命名阶段910、调度(也称之为分派或分发)阶段912、寄
存器读取/存储器读取阶段914、执行阶段916、写回/存储器写阶段918、异常处理阶段922、
以及提交阶段924。
图9B示出处理器核990,包括耦接到执行引擎单元950的前端单元930,两者都耦接
到存储器单元970。核990可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长
指令字(VLIW)核、或者混合或替代的和类型。作为另一选项,核990可以是专用核,例如,网
络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核、或类似物。
前端单元930包括耦接到指令缓存单元934的分支预测单元932,指令缓存单元934
耦接到指令转换后备缓冲器(TLB)936,其耦接到指令提取单元938,其耦接到解码单元940。
解码单元940(或解码器)可以对指令进行解码,并生成作为输出的一个或多个微操作、微代
码进入点、微指令、其他指令或其他控制信号,其是从原始指令解码得出的,或者以其他方
式反映原始指令,或者是从原始指令得到的。可以使用各种不同的机制来实现解码单元
940。适当的机制例如可以包括(但不限于)查找表、硬件实现、可编程逻辑阵列(PLA)、微代
码只读存储器(ROM)等。在一个实施例中,核990包括微代码ROM或存储某些微指令的微代码
的其他介质(例如,在解码单元940中或在前端单元930内)。解码单元940耦接到执行引擎单
元950中的重命名/分配器单元952。
执行引擎单元950包括耦接到引退单元954的重命名/分配器单元952以及一组一
个或多个调度器单元956。(一个或多个)调度器单元956表示任意数量的不同调度器,包括
保留站、中央指令窗等。(一个或多个)调度器单元956耦接到(一个或多个)物理寄存器文件
单元958。(一个或多个)物理寄存器文件单元958中的每一者表示一个或多个物理寄存器文
件,不同的物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、封
包整数、封包浮点、矢量整数、矢量浮点、状态(例如,指令指针,该指令指针是待执行的下一
指令的地址)等。在一个实施例中,(一个或多个)物理寄存器文件单元958包括矢量寄存器
单元、写掩码寄存器单元以及标量寄存器单元。这些寄存器单元可以提供架构性矢量寄存
器、矢量掩码寄存器以及通用寄存器。(一个或多个)物理寄存器文件单元958余引退单元
954部分重叠,以示出可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多
个)重排序缓冲器和(一个或多个)引退寄存器文件,使用(一个或多个)将来文件、(一个或
多个)历史缓冲器以及(一个或多个)引退寄存器文件,使用寄存器映射和寄存器池,等等)。
引退单元954和(一个或多个)物理寄存器文件单元958耦接到(一个或多个)执行集群960。
(一个或多个)执行集群960包括一组一个或多个执行单元962以及一组一个或多个存储器
访问单元964。执行单元962可以对各种类型的数据(例如,标量浮点、封包整数、封包浮点、
矢量整数、矢量浮点)执行各种操作(例如,移位、相加、相减、相乘)。虽然一些实施例可包括
专用于具体功能或一组功能的许多执行单元,其他实施例可包括仅一个执行单元或多个执
行单元,该一个执行单元或多个执行单元都执行所有的功能。将(一个或多个)调度器单元
956、(一个或多个)物理寄存器文件单元958、以及(一个或多个)执行集群960示出为可能是
多个,因为某些实施例针对不同类型的数据/操作创建单独的流水线(例如,标量整数流水
线,标量浮点/封包整数/封包浮点/矢量整数/矢量浮点流水线,和/或各自具有它们自己的
调度器单元、(一个或多个)物理寄存器文件单元和/或执行集群的存储器访问流水线——
并且在单独的存储器访问流水线的情形中,所实现的某些实施例仅该流水线的执行集群具
有(一个或多个)存储器访问单元964)。应当理解的是,在使用单独的流水线的情形中,这些
流水线中的一个或多个可以是无序分发/执行并且其余的是有序的。
该组存储器访问单元964耦接到存储器单元970,其包括耦接到数据缓存单元974
的数据TLB单元972,其中数据缓存单元974耦接到2级(L2)缓存单元976。在一个示例性实施
例中,存储器访问单元964可包括加载单元、存储地址单元以及存储数据单元,每一者都耦
接到存储器单元970中的数据TLB单元972。指令缓存单元934进一步耦接到存储器单元970
中的2级(L2)缓存单元976。L2缓存单元耦接到一个或多个其他级别的缓存并最终耦接到主
存储器。
通过示例的方式,示例性寄存器重命名、无序分发/执行核架构可如下来实现流水
线900:1)指令提取单元938执行提取和长度解码阶段902和904;2)解码单元940执行解码阶
段906;3)重命名/分配器单元952执行分配阶段908和重命名阶段910;4)(一个或多个)调度
器单元952执行调度阶段912;5)(一个或多个)物理寄存器文件单元958和存储器单元970执
行寄存器读取/存储器读取阶段914;6)存储器单元970和(一个或多个)物理寄存器文件单
元958执行写回/存储器写阶段918;7)各个单元可涉及异常处理阶段922;以及8)引退单元
954和(一个或多个)物理寄存器文件单元958执行提交阶段924。
核990可以支持一个或多个指令集(例如,x86指令集(有一些扩展,这些扩展已带
来更新的版本);MIPS技术(Sunnyvale,CA)的MIPS指令集;ARM控股(Sunnyvale,CA)的ARM指
令集(具有可选的附加扩展,例如NEON),包括本文所描述的(一个或多个)指令)。在一个实
施例中,核990包括用于指示封包数据指令集扩展(例如,AVX1、AVX2)的逻辑,从而允许由许
多多媒体应用使用的操作通过使用封包数据被执行。
应当理解的是,核可支持多线程(执行两个或多个并行的操作或线程集),并且可
以用各种方式来这样做,包括时间分片多线程、同时多线程(其中单个物理核提供用于每个
线程的逻辑核,因此物理核是同时多线程的)或以上各种方式的组合(例如,时间分片提取
和解码,随后是同时多线程,例如在超线程技术中所使用的)。
虽然在无序执行的上下文中描述了重命名,应当理解的是,可以在有序架构中使
用寄存器重命名。虽然所示出的处理器的实施例还包括单独的指令和数据缓存单元934/
974以及共享L2缓存单元976,替代实施例可具有用于指令和数据两者的单个内部缓存,例
如,1级(L1)内部缓存,或多级内缓存。在一些实施例中,系统可包括内部缓存和在核和/或
处理器的外部的外部缓存的组合。可替代地,所有的缓存可以在核和/或处理器的外部。
具体示例性有序核架构
图10A-B示出更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块
(包括相同类型和/或不同类型的其他核)中的一个。根据应用,逻辑块通过高带宽互连网络
(例如,环形网络)与一些固定功能逻辑、存储器I/O接口和其他必要I/O逻辑通信。
图10A是根据本发明的实施例的单个处理器核、以及该处理器核到片上互联网络
1002的连接和该处理器核的2级(L2)缓存1004的本地子集的框图。在一个实施例中,指令解
码器1000支持具有封包数据指令集扩展的x86指令集。L1缓存1006允许对缓存存储器中的
标量和矢量单元的低延迟访问。虽然在一个实施例中(为简化设计),标量单元1008和矢量
单元1010使用单独的寄存器集(例如,分别使用标量寄存器1012和矢量寄存器1014)并且这
两者间传输的数据被写入存储器并然后被从1级(L1)缓存1006读回,本发明的替代实施例
可使用不同的方法(例如,使用单个寄存器集或包括允许数据在两个寄存器文件之间被传
输而不被写入和读回的通信路径)。
L2缓存1004的本地子集是L2全局缓存的一部分,其中L2全局缓存被分为不同的本
地子集,每个本地子集对应一个处理器核。每个处理器核具有到其自己的L2缓存1004的本
地子集的直接访问路径。将处理器核读取的数据存储在该处理器核的L2缓存子集1004并且
可以快速访问该数据,同时其他处理器核访问它们自己的本地L2缓存子集。将处理器核写
入的数据存储在它自己的L2缓存子集1004并且在需要的情况下从其他子集清除该数据。环
形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2缓存和其他逻
辑块之类的代理在芯片内相互通信。在每个方向上,每个环形数据路径为1012位宽。
图10B是根据本发明的实施例的图10A的处理器核的一部分的扩展视图。图10B包
括L1数据缓存1006A(其是L1缓存1004的一部分),以及关于矢量单元1010和矢量寄存器
1014的更多细节。具体地,矢量单元1010是16位宽的矢量处理单元(VPU)(见16位宽的ALU
1028),其执行一个或多个整数、单精度浮点、以及双精度浮点指令。VPU支持用拌和
(swizzle)单元1020对寄存器输入进行拌和、用数字转换单元1022A-B进行数字转换、以及
用复制单元1024对存储器输入进行复制。
具有集成存储器控制器和显卡的处理器
图11是根据本发明的实施例可具有不止一个核、可具有集成存储器控制器、并且
可具有集成显卡的处理器的框图。图11的实线框示出具有单核1102A、系统代理1110、一组
一个或多个总线控制器单元1116的处理器1100,而可选添加的虚线框示出具有多核1102A-
N、在系统代理单元1110中的一组一个或多个集成存储器控制器单元1114、以及专用逻辑
1108的替代处理器1110。
因此,处理器1100的不同实现可包括:1)专用逻辑1108是集成图形和/或科学(吞
吐量)逻辑(其可包括一个或多个核)并且核1102A-N是一个或多个通用核(例如,通用有序
核、通用无序核、以上两者的组合)的CPU;2)核1102A-N是大量旨在主要用于图形和/或科学
(吞吐量)的专用核的协处理器;以及3)核1102A-N是大量通用有序核的协处理器。因此,处
理器1100可以是通用处理器、协处理器、或专用处理器,例如,网络或通信处理器、压缩引
擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(MIC)协处理器(包括30或
更多核)、嵌入式处理器、或类似物。可以在一个或多个芯片上实现处理器。处理器1100可以
是使用多种处理技术(例如,BICMOS、CMOS或NMOS)中的任何处理技术的一个或多个基底的
一部分或可以在上述一个或多个基底上实现。
存储器分级体系包括核内的一个或多个级别的缓存、一组或一个或多个共享缓存
单元1106、以及耦接到一组集成存储器控制器单元1114的外部存储器(未示出)。一组共享
缓存单元1106可包括一个或多个中级缓存,例如2级(L2)、3级(L3)、4级(L4)或其他级别的
缓存、终极缓存(LLC)、和/或以上各级缓存的组合。虽然在一个实施例中基于环的互连单元
1112对集成图形逻辑1108、一组共享缓存单元1106、以及系统代理单元1110/(一个或多个)
集成存储器控制器单元1114进行互连,替代实施例可使用任何数量的公知技术来对这些单
元进行互连。在一个实施例中,维持一个或多个缓存单元1106和核1102A-N间的一致性。
在一些实施例中,核1102A-N中的一个或多个能够执行多线程。系统代理1110包括
协调并操作核1102A-N的那些组件。系统代理单元1110可包括例如功率控制单元(PCU)和显
示单元。PCU可以是或包括对核1102A-N和集成图形逻辑1108的功率状态进行调节所需要的
逻辑或组件。显示单元用于对一个或多个外部连接的显示器进行驱动。
在架构指令集方面,核1102A-N可以是同构的或异构的,也就是说,核1102A-N中的
两个或多个可能能够执行相同的指令集,而其他的可能能够执行仅指令集的子集或不同的
指令集。
示例性计算机架构
图12-15是示例性计算机架构的框图。本领域公知其他系统设计或配置也适用于
以下各项:膝上型计算机、台式计算机、手持式PC、个人数字助理、工程工作站、服务器、网络
设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设
备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他的电子设备。
一般而言,能够包含如本文所公开的处理器和/或其他执行逻辑的各种系统或电子设备通
常是合适的。
现在参考图12,所示出的是根据本发明的一个实施例的系统1200的框图。系统
1200可包括一个或多个处理器1210、1215,其耦接到控制器集线器1220。在一个实施例中,
控制器集线器1220包括图形存储器控制器集线器(GMCH)1290和输入/输出集线器(IOH)
1250(其可以在单独的芯片上行);GMCH 1290包括存储器和图形控制器,存储器1240和协处
理器1245耦接到该存储器和图形控制器;IOH 1250将输入/输出(I/O)设备1260耦接到GMCH
1290。可替代地,将存储器和图形控制器中的一者或两者集成在处理器内(如本文所述),存
储器1240和协处理器1245直接耦接到处理器1210以及与IOH 1250在单个芯片内的控制器
集线器1220。
在图12中用虚线示出附加处理器1215的可选性质。每个处理器1210、1215可包括
本文所描述的一个或多个处理核并且可以是处理器1100的一些版本。
存储器1240例如可以是动态随机存取存储器(DRAM)、相变存储器(PCM)、或以上两
者的组合。对于至少一个实施例,控制器集线器1220经由多点总线(例如,前端总线(FSB)、
诸如快速通道互连(QPI)之类的点对点接口、或类似的连接1295)与处理器1210、1215通信。
在一个实施例中,协处理器1245是专用处理器,例如,高吞吐量MIC处理器、网络或
通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器或类似物。在一个实施例中,控制
器集线器1220可以包括集成图形加速器。
在一系列指标方面(包括架构、微架构、热、功率消耗特性或类似物),物理资源
1210、1215之间存在各种差别。
在一个实施例中,处理器1210执行控制通用类型的数据处理操作的指令。指令内
可嵌入协处理器指令。处理器1210将这些协处理器指令识别为是应当由附连的协处理器
1245执行的类型。因此,处理器1210将协处理器总线或其他互连上的这些协处理器指令(或
表示协处理器指令的控制信号)分发到协处理器1245。(一个或多个)协处理器1245接受并
执行所接收的协处理器指令。
现在参考图13,所示出的是根据本发明的实施例的第一更具体示例性系统1300的
框图。如图13中所示出的,多处理器系统1300是点对点互连系统,并且包括经由点对点互连
1350耦接的第一处理器1370和第二处理器1380。处理器1370和1380各自是某个版本的处理
器1100。在本发明的一个实施例中,处理器1370和1380分别是处理器1210和1215,而协处理
器1338是协处理器1245。在另一实施例中,处理器1370和1380分别是处理器1210和协处理
器是1245。
将处理器1370和1380分别示出为包括集成存储器控制器(IMC)单元1372和1382。
处理器1370还包括作为其总线控制器单元的一部分的点对点(P-P)接口1376和1378;类似
地,第二处理器1380包括P-P接口1386和1388。处理器1370、1380可以使用P-P接口电路
1378、1388经由点对点(P-P)接口1350交换信息。如图13中所示出的,IMC 1372和1382将处
理器耦接到相应的存储器,即存储器1332和存储器1334,其可以是本地附连到相应的处理
器的主存储器的一部分。
处理器1370、1380可各自经由单独的P-P接口1352、1354使用点对点接口电路
1376、1394、1386、1398的与芯片集1390交换信息。芯片集1390可以可选地经由高性能接口
1339与协处理器1338交换信息。在一个实施例中,协处理器1338是专用处理器,例如,高吞
吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器或类似
物。
可以在任一个处理器中或在两个处理器外部包含共享缓存(未示出),该共享缓存
仍经由P-P互连连接到处理器,使得如果将处理器置于低功率模式,可以将处理器中的一者
或两者的本地缓存信息存储在共享缓存中。
芯片集1390可以经由接口1396耦接到第一总线1316。在一个实施例中,第一总线
1316可以是外设组件互连(PCI)总线,或诸如PCI快速总线或另一第三代I/O互连总线之类
的总线,但本发明的范围不限于此。
如图13中所示出的,各种I/O设备1314可耦接到第一总线1316,同时总线桥1318将
第一总线1316耦接到第二总线1320。在一个实施例中,一个或多个附加处理器1315(例如,
协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单
元)、现场可编程门阵列或任何其他处理器)耦接到第一总线1316。在一个实施例中,第二总
线1320可以是低引脚数(LPC)总线。在一个实施例中,各种设备可耦接到第二总线1320,这
些设备例如包括键盘和/或鼠标1322、通信设备1327和可包括指令/代码和数据1330的存储
单元1328(例如,磁盘驱动器或其他大容量存储设备)。此外,音频I/O1324可耦接到第二总
线1320。注意,其他架构是可能的。例如,系统可实施多点总线或其他这种架构,而不是图13
的点对点架构。
现在参考图14,所示出的是根据本发明的实施例的第二更具体示例性系统1400的
框图。图13和14中相似的元件具有相似的参考标号,并且从图14中省略图13的某些方面,以
避免模糊图14的其他方面。
图14示出处理器1370、1380可包括集成存储器并分别包括I/O控制逻辑(“CL”)
1372和1382。因此,CL 1372、1382包括集成存储器控制器单元并包括I/O控制逻辑。图14示
出不仅存储器1332、1334耦接到CL 1372、1382,I/O设备1414也耦接到控制逻辑1372、1382。
旧有I/O设备1415耦接到芯片集1390。
现在参考图15,所示出的是根据本发明的实施例的SoC 1500的框图。图11中类似
的元件具有相似的参考标号。此外,虚线框是更高级的SoC上的可选特征。在图15中,(一个
或多个)互连单元1502耦接到:(一个或多个)集成存储器控制器单元1114;一组一个或多个
协处理器1520,其可包括集成图形逻辑、图像处理器、音频处理器、以及视频处理器;静态随
机存取存储器(SRAM)单元1530;直接存储器存取(DMA)单元1532;以及用于耦接到一个或多
个外部显示器的显示器单元1540。在一个实施例中,(一个或多个)协处理器1520包括专用
处理器,例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、嵌入式处理器或
类似物。
可以在硬件、软件、固件、或这些实施方式的组合中实现本文所公开的机制的实施
例。本发明的实施例可以被实现为计算机程序或在可编程系统(包括至少一个处理器、存储
系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出
设备)上执行的程序代码。
可以将程序代码(例如图13中所示出的代码1330)应用于输入指令来执行本文所
描述的功能并生成输出信息。可以以公知的方式将输出信息应用于一个或多个输出设备。
为了本申请的目的,处理系统包括具有处理器的任何系统,处理器例如为:数字信号处理器
(DSP)、微控制器、专用集成电路(ASIC)、或微处理器。
程序代码可以用高级程序语言或面向对象编程语言来实现以与处理系统通信。如
需要,程序代码也可用汇编语言或机器语言来实现。事实上,本文所描述的机制不限于任何
具体的编程语言的范围。在任何情况下,语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的典型指令
来实现,该典型指令表示处理器内的各种逻辑,其当被机器读取时使得机器装配逻辑以执
行本文所描述的技术。可以将这种典型指令(称之为“IP核”)存储在有形机器可读介质上并
提供给各种用户或制造设施以装载到实际地实现逻辑或处理器的装配机器。
这种机器可读存储介质可以包括(但不限于)由机器或设备制造或形成的物品的
非暂态有形布置,包括存储介质,例如,硬盘、任何其他类型的磁盘(包括软盘、光盘、致密盘
只读存储器(CD-ROM)、致密盘可重写盘(CD-RW)、以及磁光盘)、半导体设备(例如,只读存储
器(ROM)、随机存取存储器(RAM)(例如,动态随机存取存储器(DRAM)、静态随机存取存储器
(SRAM))、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器
(EEPROM)、相变存储器(PCM)、磁卡或光卡)、或适于存储电子指令的任何其他类型的介质。
因此,本发明的实施例也包括含有指令或设计数据的非暂态有形机器可读介质,
上述指令或设计数据例如为硬件描述语言(HDL),其定义本文所描述的结构、电路、装置、处
理器和/或系统特征。这种实施例也可称为程序产品。
仿真(包括二进制翻译、代码变形等)
在一些情形中,可以使用指令转换器来将指令从源指令集转换到目标指令集。例
如,指令转换器可翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、变
形、仿真或以其他方式将指令转换到一个或多个其他指令以被核处理。可以在软件、硬件、
固件或其组合中实现指令转换器。指令转换器可以在处理器上、不在处理器上、或部分在部
分不在处理器上。
图16是根据本发明的实施例对比用于将源指令集中的二进制指令转换为目标指
令集中的二进制指令的软件指令转换器的使用的框图。在所示出的实施例中,指令转换器
是软件指令转换器,虽然可替代地指令转换器可以在软件、固件、硬件或其各种组合中实
现。图16示出可以利用x86编译器1604对使用高级语言1602的程序进行编译来生成x86二进
制代码1606,x86二进制代码1606可以由具有至少一个x86指令集核的处理器1616在本地执
行。具有至少一个x86指令集核的处理器1616表示可以通过兼容地执行或以其他方式处理
以下两者来执行与具有至少一个x86指令集核的Intel处理器基本上相同的功能的任何处
理器:(1)Intel x86指令集核的指令集的大部分或(2)目标为在具有至少一个x86指令集核
的Intel处理器上运行以实现与具有至少一个x86指令集核的Intel处理器基本上相同的结
果的应用或其他软件的目标代码版本。x86编译器1604表示能操作以生成x86二进制码1606
(例如,目标代码)的编译器,x86二进制码1606(具有或不具有附加的连接处理)可以在具有
至少一个x86指令集核的处理器1616上被执行。类似地,图16示出可以采用替代的指令集编
译器1608对使用高级语言1602的程序进行编译以生成替代的指令集二进制代码1610,其可
以由不具有至少一个x86指令集核的处理器1614(例如,具有执行MIPS技术(Sunnyvale,CA)
的MIPS指令集和/或执行ARM控股(Sunnyvale,CA)的ARM指令集的核的处理器)在本地执行。
使用指令转换器1612来将x86二进制代码1606转换为可由不具有x86指令集核的处理器
1614在本地执行的代码。该经转换的代码不太可能与替代的指令集二进制代码1610相同,
因为难以制造能够这么做的指令转换器;然而,经转换的代码将完成一般操作并由来自替
代的指令集的指令组成。因此,指令转换器1612表示软件、固件、硬件、或其组合,其通过仿
真、模拟或任何其他处理,允许处理器或不具有x86指令集处理器或核的其他电子设备执行
x86二进制代码1606。
在图3-4的任一者中也可以可选地使用针对图1-2和5-8的任一者所描述的组件、
特征和细节。此外,也可以可选地在本文所描述的任何方法中使用或向本文所描述的任何
方法应用针对本文所描述的任何装置描述的组件、特征和细节,上述方法在实施例中可通
过这种装置和/或用这种装置来执行。本文所描述的任何处理器可以被包括在本文所公开
的计算机系统、片上系统(SoC)或其他系统中。在一些实施例中,指令可以具有本文所公开
的指令格式的特征或细节,但这不是必需的。
在描述和权利要求中,可以使用术语“耦接”和/或“连接”以及它们的衍生。这些术
语不旨在相互是同义词。相反,在实施例中,可以使用“连接”来指示两个或多个元件相互具
有直接物理和/或电气接触。“耦接”可以指两个或多个元件相互具有直接物理和/或电气接
触。然而,“耦接”也可以指两个或多个元件不直接相互接触,但是仍然相互协作或交互。例
如,执行单元可以通过一个或多个中间组件与寄存器和/或解码单元相耦接。在附图中,使
用箭头来示出连接和耦接。
可能已经使用术语“和/或”。如本文所使用的,术语“和/或”指一个或另一个或两
者(例如,A和/或B指A或B或A和B两者)。
在上述描述中,已经阐明具体细节以提供对实施例的透彻了解。然而,可以在没有
这些具体细节的情况下实现其他实施例。本发明的范围不由上文提供的具体示例来确定,
而是由以下的权利要求书来确定。在其他实例中,已经用框图形式和/或不具有细节来示出
公知的电路、结构、设备和操作,以避免模糊对描述的理解。在认为适当的情况下,在附图间
重复参考标号或参考标号的末部以指示相对应或相似的元件,其可以可选地具有相似或相
同的特性,除非另有规定或显然明显。
某些操作可以用硬件组件来实现,或可以体现为机器可执行或电路可执行指令,
其可被用来使得和/或导致机器、电路或硬件组件(例如,处理器、处理器的一部分、电路等)
被编程以执行操作的指令。也可以可选地由硬件和软件的组合来执行操作。处理器、机器、
电路或硬件可以包括能操作以执行和/或处理指令并响应于指令存储结果的具体或特定的
电路或其他逻辑。
一些实施例包括含有机器可读介质的制品(例如,计算机程序产品)。介质可以包
括提供(例如,存储)机器可读的信息的机制。机器可读介质可以提供(或在其上存储)指令
或指令序列,该指令或指令序列如果被机器运行和/或当被机器运行时能操作以使得机器
执行和/或导致机器执行本文所公开的一个或多个操作、方法或技术。机器可读介质可以存
储或以其他方式提供本文所公开的指令的一个或多个实施例。
在一些实施例中,机器可读介质可以包括有形和/或非暂态机器可读存储介质。例
如,有形和/或非暂态机器可读存储介质可以包括软盘、光存储介质、光盘、光数据存储设
备、CD-ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、
电可擦除可编程只读存储器(EEPROM)、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM
(DRAM)、闪速存储器、相变存储器、相变数据存储材料、非易失性存储器、非易失性数据存储
设备、非暂态存储器、非暂态数据存储设备、或类似物。非暂态机器可读存储介质不包含暂
态传播信号。
适当的机器的示例包括(但不限于)通用处理器、专用处理器、指令处理装置、数字
逻辑电路、集成电路、或类似物。适当的机器的其他示例包括计算设备或包括处理器、指令
处理装置、数字逻辑电路或集成电路的其他电子设备。这种计算设备和电子设备的示例包
括(但不限于)台式计算机、膝上型计算机、笔记本计算机、平板计算机、上网本、智能电话、
蜂窝电话、服务器、网络设备(例如,路由器和交换机)、移动互联网设备(MID)、媒体播放器、
智能电视、上网机、机顶盒以及视频游戏控制器。
本说明书中对“一个实施例”、“实施例”、“一个或多个实施例”、“一些实施例”的引
用例如指示特定特征可以被包含在本发明的实践中,但并不一定是必需的。类似地,在描述
中,有时将各种特征归并到单个实施例、图示、或其描述中,以精简本公开并帮助理解各创
造性方面。然而,本公开的方法不应被解释为反映以下意图,即本发明需要比每项权利要求
中明确记载的特征更多的特征。相反,如以下权利要求书所反映的,创造性方面在于少于单
个公开的实施例的所有特征。因此,在此明确地将具体实施方式之后的权利要求书并入该
具体实施方式,其中每项权利要求独立地作为本发明的单独的实施例。
示例实施例
示例1是包括解码单元的处理器或其他装置。解码单元用于对SM3两轮状态字更新
指令进行解码。该SM3两轮状态字更新指令指示一个或多个源封包数据操作数。该一个或多
个源封包数据操作数具有对应于SM3哈希算法的第(j)轮的八个32位状态字Aj、Bj、Cj、Dj、Ej、
Fj、Gj和Hj。该一个或多个源封包数据操作数具有足以对两轮SM3哈希算法进行求值的一组
消息。处理器还包括耦接到解码单元的执行单元。响应于SM3两轮状态字更新指令,该执行
单元能操作以将一个或多个结果封包数据操作数存储在由SM3两轮状态字更新指令指示的
一个或多个目的地存储位置。该一个或多个结果封包数据操作数具有对应于第(j+2)轮SM3
哈希算法的至少四个经两轮更新的32位状态字Aj+2、Bj+2、Ej+2、和Fj+2。
示例2包括示例1的处理器,其中,响应于指令,执行单元能操作以存储仅具有四个
经两轮更新的32位状态字Aj+2、Bj+2、Ej+2、和Fj+2的一个或多个结果封包数据操作数。
示例3包括示例1的处理器,其中,响应于指令,执行单元能操作以存储具有八个经
两轮更新的32位状态字Aj+2、Bj+2、C+2、Dj+2、Ej+2、Fj+2、Gj+2、和Hj+2的一个或多个结果封包数据
操作数,其中该八个经两轮更新的32位状态字Aj+2、Bj+2、C+2、Dj+2、Ej+2、Fj+2、Gj+2、和Hj+2对应于
第(j+2)轮SM3哈希算法。
示例4包括示例1的处理器,其中,其中,解码单元用于对指示第一源封包数据操作
数和第二源封包数据操作数的指令进行解码,其中第一源封包数据操作数具有32位状态字
Aj、Bj、Ej、和Fj,第二源封包数据操作数具有32位状态字Cj、Dj、Gj和Hj。
示例5包括示例4的处理器,其中,响应于指令,执行单元能操作以存储单个结果封
包数据操作数,该单个结果封包数据操作数仅具有四个经两轮更新的32位状态字Aj+2、Bj+2、
Ej+2、和Fj+2。
示例6包括示例5的处理器,其中,响应于SM3两轮状态字更新指令,执行单元能操
作以将单个结果封包数据操作数存储在隐含地用于单个结果封包数据操作数和第二源封
包数据操作数两者的存储位置中。
示例7包括示例5的处理器,其中,解码单元用于对指示第二源封包数据操作数的
第二指令进行解码,该第二源封包数据操作数具有32位状态字Aj、Bj、Ej、和Fj。响应于第二
指令,处理器能操作以将结果封包数据操作数存储在由第二指令指示的目的地存储位置
中。结果封包数据操作数具有对应于第(j+2)轮SM3哈希算法的四个经两轮更新的32位状态
字Cj+2、Dj+2、Gj+2、和Hj+2。
示例8包括示例1-7中任一者的处理器,其中,解码单元用于对指示一个或多个源
封包数据操作数的指令进行解码,其中一个或多个源封包数据操作数具有以下两者中的一
者:四个32位消息Wj、Wj+1、Wj+4、和Wj+5;以及四个32位消息Wj、Wj+1、W’j、和W’j+1。
示例9包括示例1-7中任一者的处理器,其中,解码单元用于对指示轮数的指令进
行解码。
示例10包括示例9的处理器,其中,解码单元用于对具有立即数的指令进行解码,
其中立即数指示轮数。
示例11包括示例1-7中任一者的处理器,其中,解码单元用于对指示三个128位源
封包数据操作数的指令进行解码,其中三个128位源封包数据操作数具有八个32位状态字
Aj、Bj、Cj、Dj、Ej、Fj、Gj和Hj以及足以对两轮SM3哈希算法进行求值的一组消息。
示例12包括示例11的处理器,其中,解码单元用于对明确指定三个128位源封包数
据操作数中的两个并隐含地指示三个128位源封包数据操作数中的一个的指令进行解码。
此外,使用既用于三个128位源封包数据操作数中的一个并且还用于存储结果封包数据操
作数的存储位置是隐含的,并且其中,处理器具有多个256位封包数据寄存器。
示例13包括示例1-7中任一者的处理器,其中,执行单元的用于实现SM3哈希算法
的FFj函数GGj函数中的至少一者的逻辑还被用于实现安全哈希算法的Maj函数Ch函数中的
至少一者。
示例14包括示例1-7中任一者的处理器,其中,响应于指令,执行单元能操作以在
两轮中的每一轮期间执行以下操作:对FFj布尔函数进行求值;对GGj布尔函数进行求值;以
及对P0排列函数进行求值。
示例15是一种在处理器中的方法,该方法包括接收指示一个或多个源封包数据操
作数的SM3两轮状态字更新指令。该一个或多个源封包数据操作数具有针对第(j)轮SM3哈
希算法的八个32位状态字Aj、Bj、Cj、Dj、Ej、Fj、Gj和Hj,并且该一个或多个源封包数据操作数
具有用于对两轮SM3哈希算法进行求值的四个消息。该方法还包括响应于SM3两轮状态字更
新指令,将一个或多个结果封包数据操作数存储在由SM3两轮状态字更新指令指示的一个
或多个目的地存储位置。一个或多个结果封包数据操作数具有至少四个经两轮更新的32位
状态字Aj+2、Bj+2、Ej+2、和Fj+2,该Aj+2、Bj+2、Ej+2、和Fj+2已经相对于Aj、Bj、Ej、和Fj被两轮SM3哈
希算法更新。
示例16包括示例15的方法,其中,接收步骤包括接收指示轮数并指示一个或多个
源封包数据操作数的指令,其中一个或多个源封包数据操作数具有以下两者中的一者:四
个32位消息Wj、Wj+1、Wj+4、和Wj+5;以及四个32位消息Wj、Wj+1、W’j、和W’j+1。
示例17包括示例15和16中任一者的方法,其中,存储步骤包括存储具有八个经两
轮更新的32位状态字Aj+2、Bj+2、C+2、Dj+2、Ej+2、Fj+2、Gj+2、和Hj+2的一个或多个结果封包数据操
作数,该Aj+2、Bj+2、C+2、Dj+2、Ej+2、Fj+2、Gj+2、和Hj+2已经被两轮SM3哈希算法更新。
示例18包括示例15和16中任一者的方法,其中,接收步骤包括接收指示第一源封
包数据操作数并指示第二源封包数据操作数的指令,其中第一源封包数据操作数具有32位
状态字Aj、Bj、Ej、和Fj,第二源封包数据操作数具有32位状态字Cj、Dj、Gj和Hj。
示例19包括示例15和18中任一者的方法,其中,存储包括存储仅具有四个经两轮
更新的32位状态字Aj+2、Bj+2、Ej+2、和Fj+2的单个结果封包数据操作数。
示例20包括示例15、18/19中任一者的方法,还包括接收指示具有32位状态字Aj、
Bj、Ej、和Fj的源封包数据操作数的第二指令。该方法还包括响应于第二指令,将结果封包数
据操作数存储在由第二指令指示的目的地存储位置。结果封包数据操作数具有与第(j+2)
轮SM3哈希算法对应的四个经两轮更新的32位状态字Cj+2、Dj+2、Gj+2、和Hj+2。
示例21是一种用于处理指令的系统,该系统包括互连和耦接到互连的处理器。处
理器用于接收针对哈希算法的两轮状态字更新指令。哈希算法利用针对第一轮集合具有十
六进制值79cc4519并且针对第二轮集合具有十六进制值79cc4519的参数Tj。两轮状态字更
新指令指示一个或多个源封包数据操作数。该一个或多个源封包数据操作数具有与第(j)
轮哈希算法相对应的八个32位状态字Aj、Bj、Cj、Dj、Ej、Fj、Gj和Hj,并且该一个或多个源封包
数据操作数具有足以对两轮哈希算法进行求值的一组消息。响应于两轮状态字更新指令,
处理器将一个或多个结果封包数据操作数存储在由两轮状态字更新指令指示的一个或多
个目的地存储位置。该一个或多个结果封包数据操作数具有至少四个状态字Aj+2、Bj+2、Ej+2、
和Fj+2,该Aj+2、Bj+2、Ej+2、和Fj+2已经分别相对于四个32位状态字Aj、Bj、Ej、和Fj被两轮哈希算
法更新。系统还包括耦接到互连的动态随机存取存储器(DRAM)。DRAM存储用于实现哈希算
法的一组指令。该组指令当被处理器执行时,使得处理器执行以下操作:使用Aj、Bj、Ej、和Fj
来生成Cj+2、Dj+2、Gj+2、和Hj+2,该Cj+2、Dj+2、Gj+2、和Hj+2已经分别相对于Cj、Dj、Gj、和Hj被两轮哈
希算法更新。
示例22包括示例21的系统,其中,使用Aj、Bj、Ej、和Fj生成Cj+2、Dj+2、Gj+2、和Hj+2是对
单个指令的响应。
示例23是一种包括非暂态机器可读存储介质的制品。该非暂态机器可读存储介质
存储SM3两轮状态字更新指令。SM3两轮状态字更新指令指示一个或或多个源封包数据操作
数。一个或多个源封包数据操作数具有针对第(j)轮SM3哈希算法的八个32位状态字Aj、Bj、
Cj、Dj、Ej、Fj、Gj和Hj,并且该一个或多个源封包数据操作数具有足以对两轮SM3哈希算法进
行求值的四个消息。当该SM3两轮状态字更新指令被机器运行时,使得机器执行操作,包括:
生成至少四个经两轮更新的32位状态字Aj+2、Bj+2、Ej+2、和Fj+2,其已经分别相对于Aj、Bj、Ej、
和Fj被两轮SM3哈希算法更新。操作还包括将该至少四个32位状态字Aj+2、Bj+2、Ej+2、和Fj+2存
储在由SM3两轮状态字更新指令指示的一个或多个目的地存储位置。
示例24包括示例23的制品,其中,存储包括将至少四个32位状态字Aj+2、Bj+2、Ej+2、
和Fj+2存储在128位寄存器中,并且其中,存储介质还包括在被机器运行时,使得机器执行以
下操作的指令:从四个32位状态字Aj、Bj、Ej、和Fj生成四个经两轮更新的32位状态字Cj+2、
Dj+2、Gj+2、和Hj+2。
示例25包括能操作以执行示例15-20中任一者的方法的处理器或其他装置。
示例26包括能操作以执行示例15-20中任一者的方法的装置的处理器或其他装
置。
示例27包括一种处理器,该处理器包括用于执行示例15-20中任一者的方法模块、
单元、逻辑、电路和装置的任何组合。
示例28包括一种制品,该制品包括可选的非暂态机器可读介质,该非暂态机器可
读介质可选地存储或以其他方式提供指令,该指令当被处理器、计算机系统或其他机器运
行时,能操作以使得机器执行示例15-20中任一者的方法。
示例29包括一种计算机系统或其他电子设备,该计算机系统或其他电子设备包括
互连、耦接到互连的如示例1-14中任一项的处理器、以及耦接到互连的从以下各项中选择
的至少一个组件:动态随机存取存储器(DRAM)、网络接口、图形芯片、无线通信芯片、全球移
动通信系统(GSM)天线、相变存储器和视频摄像头。
示例30包括基本上如本文所描述的处理器或其他装置。
示例31包括能操作以执行基本上如本文所描述的任何方法的处理器或其他装置。
示例32包括含有用于执行基本上如本文所描述的任何方法的装置的处理器或其
他装置。
示例33包括能操作以执行基本上如本文所描述的任何SM3哈希函数加速指令的处
理器或其他装置。
示例34包括含有用于执行基本上如本文所描述的任何SM3哈希函数加速指令的装
置的处理器或其他装置。
示例35包括含有解码单元的处理器或其他装置,其中解码单元能操作以对第一指
令集的指令进行解码。解码单元接收仿真第一指令的一个或多个指令,该第一指令可以是
基本上如本文所公开的任何SM3哈希算法加速指令,并且其将是第二指令集的。处理器或其
他装置还包括与解码单元耦接的、用于执行第一指令集的一个或多个指令的一个或多个执
行单元。响应于第一指令集的一个或多个指令,一个或多个执行单元能操作以将结果存储
在目的地中。结果可以包括基本上如本文所公开的针对第一指令的任何结果。
示例36包括含有处理的计算机系统或其他电子设备,其中处理器具有能操作以对
第一指令集的指令进行解码的解码单元并具有一个或多个执行单元。计算机系统还包括耦
接到处理器的存储设备。存储设备对第一指令进行存储,该第一指令可以是基本上如本文
所公开的任何SM3哈希算法加速指令,并且其将是第二指令集的。存储设备还对用于将第一
指令转换为第一指令集的一个或多个指令的指令进行存储。第一指令集的一个或多个指令
当被处理器执行时,能操作以使得处理器将结果存储在目的地中。结果可以包括基本上如
本文所公开的针对第一指令的任何结果。