作数源的准备状态以及微操作完成其操作所需的执行资源的可用性来确 定uop何时就绪用于执行。一个实施例中的快速调度器202可在主时钟周期的每半个上进 行调度,而其他调度器可在每个主处理器时钟周期上仅调度一次。调度器对分配端口进行 仲裁以调度uop以便执行。
[0076] 在执行块211中,寄存器组208和210位于调度器202、204和206以及执行单元 212、214、216、218、220、222和224之间。也存在单独的寄存器组208、210,分别用于整数和 浮点操作。一个实施例中的每个寄存器组208、210也包括旁路网络,该旁路网络可绕开还 未被写入到寄存器组中的、刚完成的结果或将这些结果转发到新的从属uop中。整数寄存 器组208和浮点寄存器组210也能够彼此传递数据。对于一个实施例,将整数寄存器组208 划分为两个单独的寄存器组,一个寄存器组用于低阶的32位数据,第二个寄存器组用于高 阶的32位数据。一个实施例中的浮点寄存器组210具有128位宽的条目,因为浮点指令通 常具有从64至128位宽度的操作数。
[0077] 执行块211包括执行单元212、214、216、218、220、222和224,实际在这些执行单 元中执行指令。该区块包括存储微指令执行所需要的整数和浮点数据操作数值的寄存器组 208和210。一个实施例中的处理器200包括多个执行单元:地址生成单元(AGU) 212、AGU 214、快速ALU216、快速ALU218、慢速ALU220、浮点ALU222和浮点移动单元224。对于一 个实施例,浮点执行块222和224执行浮点、MMX、SIMD、SSE以及其他操作。一个实施例中 的浮点ALU222包括用于执行除法、平方根和余数微op的64位/64位的浮点除法器。对 于本发明的多个实施例,可利用浮点硬件来处理涉及浮点值的指令。在一个实施例中,ALU 操作去往高速ALU执行单元216和218。一个实施例中的快速ALU216和218可执行有效 等待时间为半个时钟周期的快速操作。对于一个实施例,大多数复杂整数操作去往慢速ALU 220,因为慢速ALU220包括用于长等待时间类型操作的整数执行硬件,例如,乘法器、移位 器、标记逻辑和分支处理设备。存储器加载/存储操作由AGU212和214来执行。对于一 个实施例,在对64位的数据操作数执行整数操作的情境中描述整数ALU216、218和220。在 替代实施例中,可实现ALU216、218和220以支持包括16、32、128、256等各种数据位。类 似地,可实现浮点单元222和224以支持具有各种位宽的一系列操作数。对于一个实施例, 浮点单元222和224可结合SIMD和多媒体指令,对128位宽度紧缩数据操作数进行操作。
[0078] 在一个实施例中,在父加载完成执行之前,uop调度器202、204和206就分派从属 操作。由于在处理器200中推测性地调度并执行uop,因此处理器200也包括用于处理存储 器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则在流水线中会存在带着临时 不正确的数据离开调度器的运行中的从属操作。重放机制跟踪并重新执行使用不正确数据 的指令。仅仅从属操作需要被重放,而允许独立操作完成。处理器的一个实施例中的调度 器和重放机制也被设计为用于捕捉提供推入缓冲器复制和存储功能的指令。
[0079] 术语"寄存器"指代被用作指令的一部分以标识操作数的板上处理器存储位置。换 句话说,寄存器可以是那些从处理器外部(从编程者的角度来看)可用的那些。然而,实施 例中的寄存器不限于表示特定类型的电路。相反,实施例中的寄存器能够存储并提供数据, 并且执行本文中所述的功能。可由处理器中的电路使用任何数量的不同技术来实现本文中 所述的寄存器,例如,专用物理寄存器、使用寄存器重命名的动态分配物理寄存器,以及专 用和动态分配物理寄存器的组合等。在一个实施例中,整数寄存器存储32位的整数数据。 一个实施例中的寄存器组也包含八个用于紧缩数据的多媒体SMD寄存器。对于以下讨论, 应当将寄存器理解为设计成用于保持紧缩数据的数据寄存器,诸如来自美国加利福尼亚州 圣克拉拉市的英特尔公司的启用了MMX技术的微处理器中的64位宽的MMX?寄存器(在 一些实例中也称为'mm'寄存器)。"这些MMX寄存器(可用在整数和浮点格式中)可与伴 随SMD和SSE指令的紧缩数据元素一起操作。类似地,涉及SSE2、SSE3、SSE4或更新的技 术(统称为"SSEx")的128位宽XMM寄存器也可被用于保持这样紧缩数据操作数。在一 个实施例中,在存储紧缩数据和整数数据时,寄存器不需要区分这两类数据类型。在一个实 施例中,整数和浮点数据可被包括在相同的寄存器组中,或被包括在不同的寄存器组中。此 外,在一个实施例中,浮点和整数数据可被存储在不同的寄存器中,或被存储在相同的寄存 器中。
[0080] 在下述附图的示例中,描述了多个数据操作数。图3A示出了根据本发明一个实施 例的多媒体寄存器中的各种紧缩数据类型表示。图3A示出用于128位宽操作数的紧缩字 节310、紧缩字320以及紧缩双字(dword) 330的数据类型。本示例的紧缩字节格式310是 128位长,并且包含十六个紧缩字节数据元素。字节在此被定义为8位数据。每一个字节数 据元素的信息被存储为:对于字节0存储在位7到位0,对于字节1存储在位15到位8,对 于字节2存储在位23到位16,最后对于字节15存储在位120到位127。因此,在该寄存器 中使用了所有可用的位。该存储配置提高了处理器的存储效率。同样,因为访问了十六个 数据元素,所以现在可并行地对十六个数据元素执行一个操作。
[0081] 通常,数据元素是与具有相同长度的其他数据元素一起被存储在单个寄存器或存 储器位置中的、单独的数据片。在涉及SSEx技术的紧缩数据序列中,存储在XMM寄存器中 的数据元素的数目是128位除以单独的数据元素的位长。类似地,在涉及MMX和SSE技术 的紧缩数据序列中,存储在MMX寄存器中的数据元素的数目是64位除以单独的数据元素的 位长。虽然图3A中所示的数据类型是128位长,但本发明的多个实施例也可操作64位宽、 256位宽、512位宽或其他尺寸的操作数。本示例中的紧缩字格式320是128位长,并且包 含八个紧缩字数据元素。每个紧缩字包含十六位的信息。图3A的紧缩双字格式330是128 位长,并且包含四个紧缩双字数据元素。每个紧缩双字数据元素包含三十二位的信息。紧 缩四字是128位长,并包含两个紧缩四字数据元素。
[0082] 图3B示出替代的寄存器内数据存储格式。每个紧缩数据可包括多于一个的独立 数据元素。示出了三种紧缩数据格式:紧缩半数据元素341、紧缩单数据元素342和紧缩双 数据元素343。紧缩半数据元素341、紧缩单数据元素342和紧缩双数据元素343的一个实 施例包含固定点数据元素。对于替代实施例,紧缩半数据元素341、紧缩单数据元素342和 紧缩双数据元素343中的一个或多个可包含浮点数据元素。紧缩半数据元素341的一个替 代实施例是一百二十八位长的,并且包含八个16位数据元素。紧缩单数据元素342的一个 替代实施例是一百二十八位长的,并且包含四个32位数据元素。紧缩双数据元素343的一 个实施例是一百二十八位长的,并且包含两个64位数据元素。将会理解,可进一步将此类 紧缩数据格式扩展至其他寄存器长度,例如,96位、160位、192位、224位、256位、512位或 更长。
[0083] 图3C示出了根据本发明的一个实施例的多媒体寄存器中的各种有符号和无符号 紧缩数据类型表示。无符号紧缩字节表示344示出将无符号紧缩字节存储在SMD寄存器 中。每一个字节数据元素的信息被存储为:对于字节〇存储在位7到位0,对于字节1存储 在位15到位8,对于字节2存储在位23到位16,等等,最后对于字节15存储在位120到位 127。因此,在该寄存器中使用了所有可用的位。该存储安排可提高处理器的存储效率。同 样,因为访问了十六个数据元素,所以能以并行方式对十六个数据元素执行一个操作。有符 号紧缩字节表示345示出了有符号紧缩字节的存储。注意,每个字节数据元素的第八位是 符号指示符。无符号紧缩字表示346示出了如何将字7到字0存储在SMD寄存器中。有 符号紧缩字表示347类似于无符号紧缩字寄存器内表示346。注意,每个字数据元素的第 十六位是符号指示符。无符号紧缩双字表示348示出了如何存储双字数据元素。有符号紧 缩双字表示349类似于无符号紧缩双字寄存器内表示348。注意,必要的符号位是每个双字 数据元素的第三十二位。
[0084] 图3D是与可从美国加利福尼亚州圣克拉拉市的英特尔公司的万维网(www) intel.com/products/processor/manuals/ 上获得的"丨ntel? 64和IA-32 英特尔架构软件 开发者手册组合卷2A和2B:指令集参考A-Z(丨ntel? 64andIA-32IntelArchitecture SoftwareDeveloper'sManualCombinedVolume2Aand2B:InstructionSetReference A-Z)"中描述的操作码格式类型相对应的、具有32或更多位的操作编码(操作码)格式360 以及寄存器/存储器操作数寻址模式的一个实施例的描绘。在一个实施例中,可通过字段 361和362中的一个或多个对指令进行编码。可以对于每条指令标识多至两个操作数位置, 包括多至两个源操作数标识符364和365。对于一个实施例,目的地操作数标识符366与源 操作数标识符364相同,而在其他实施例中它们不相同。对于替代实施例,目的地操作数标 识符366与源操作数标识符365相同,而在其他实施例中它们不相同。在一个实施例中,由 源操作数标识符364和365标识的源操作数中的一个被指令的结果覆写,而在其他实施例 中,标识符364对应于源寄存器元件,而标识符365对应于目的地寄存器元件。对于一个实 施例,操作数标识符364和365可被用于标识32位或64位的源和目的地操作数。
[0085] 图3E是具有四十个或更多位的另一个替代操作编码(操作码)格式370的描绘。 操作码格式370对应于操作码格式360,并包括可选的前缀字节378。根据一个实施例的 指令可通过字段378、371和372中的一个或多个来编码。通过源操作数标识符374和375 以及通过前缀字节378,可对每条指令标识多至两个操作数位置。对于一个实施例,前缀字 节378可被用于标识32位或64位的源和目的地操作数。对于一个实施例,目的地操作数 标识符376与源操作数标识符374相同,而在其他实施例中它们不相同。对于替代实施例, 目的地操作数标识符376与源操作数标识符375相同,而在其他实施例中它们不相同。在 一个实施例中,指令对由操作数标识符374和375所标识的操作数中的一个或多个进行操 作,并且通过该指令的结果覆写由操作数标识符374和375所标识的一个或多个操作数,而 在其他实施例中,将由标识符374和375标识的操作数写入另一寄存器中的另一数据元素 中。操作码格式360和370允许由MOD字段363和373以及由可选的比例-索引-基址 (scale-index-base)和位移(displacement)字节部分地指定的寄存器到寄存器寻址、存 储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、由立即数对寄存器寻 址、寄存器到存储器寻址。
[0086] 接下来转到图3F,在一些替代实施例中,64位(或128位、或256位、或512位或 更多位)单指令多数据(SMD)算术操作可经由协处理器数据处理(CDP)指令来执行。操 作编码(操作码)格式380描绘了具有CDP操作码字段382和389的一条此类指令。对于 替代实施例,可由字段383、384、387和388中的一个或多个对⑶P指令操作的这种类型进 行编码。可以对每个指令标识多至三个操作数位置,包括多至两个源操作数标识符385和 390以及一个目的地操作数标识符386。协处理器的一个实施例可对8位、16位、32位和64 位的值进行操作。对于一个实施例,对整数数据元素执行指令。在一些实施例中,可使用条 件字段381,有条件地执行指令。对于一些实施例,可通过字段383来对源数据尺寸进行编 码。在一些实施例中,可对SMD字段执行零(Z)、负(N)、进位(C)和溢出(V)检测。对于 一些指令,可通过字段384对饱和类型进行编码。
[0087] 接下来转到图3G,其描绘了与可从美国加利福尼亚州圣克拉拉市的英特尔公司的 万维网(www)intel.com/products/processor/manuals/ 上获得的 "Intel? 高级向量扩展 编程参考(丨ntel?AdvancedVectorExtensionsProgrammingReference) " 中描述的操 作码格式类型相对应的、根据另一实施例的用于提供推入缓冲器复制和存储功能的另一替 代操作编码(操作码)格式397。
[0088] 原始x86指令集向1字节操作码提供各种格式的地址字节(syllable)以及被包 括在在附加字节中的立即操作数,其中可从第一个"操作码"字节中获知附加字节的存在。 此外,存在作为对该操作码的修饰符而保留的某些字节值(被称为前缀(prefix),因为必 须将它们置于指令之前)。当256个操作码字节的原始调配(包括这些特殊的前缀值)耗 尽时,将单个字节专用于去往256个操作码的新集合的跳出方式(escape)。因为添加了向 量指令(例如,SIMD),因此,即便通过使用前缀进行扩展,也产生了对更多操作码的需求, 并且"两字节"操作码映射也是不够的。为此,将新指令加入附加的映射中,该附加的映射 将两字节加上可选的前缀用作标识符。
[0089] 此外,为了便于在64位模式中实现额外的寄存器,可在前缀和操作码(以及确定 该操作码所必需的任何跳出字节)之间使用附加的前缀(被称为"REX")。在一个实施例 中,该REX具有4个"有效负荷"位,以指示在64位模式中使用附加的寄存器。在其他实施 例中,该REX可具有少于或多于4位。至少一个指令集的通用格式(通常对应于格式360 和/或格式370)被一般地不出如下:
[0090] [prefixes] [rex]escape[escape2]opcodemodrm(等)
[0091] 操作码格式397对应于操作码格式370,并包括替代大部分的其他公共使用的传 统指令前缀字节和跳出代码的、可选的VEX前缀字节391 (在一个实施例中,以十六进制的 C4开始)。例如,以下示出了使用两个字段来编码指令的实施例,可在第二跳出代码存在于 原始指令中时,或者在需要使用REX字段中的额外位(例如,XB和W字段)时使用该实施 例。在以下所示的实施例中,传统跳出由新的跳出值来表示,传统前缀被完全压缩为"有效 负荷(payload) "字节的部分,传统前缀被重新申明并可用于未来的扩展,第二跳出代码被 压缩在"映射(map) "字段中且未来的映射或特征空间可用,并且加入新的特征(例如,增加 的向量长度以及附加的源寄存器区分符)。
[0092]
[0093] 根据一个实施例的指令可通过字段391和392中的一个或多个来进行编 码。通过字段391结合源操作码标识符374和375,并且结合可选的比例-索引-基址 (scale-index-base,SIB)标识符393、可选的位移标识符394以及可选立即数字节395,可 以为每条指令标识多至四个操作数位置。对于一个实施例,VEX前缀字节391可被用于标 识32位或64位的源和目的地操作数和/或128位或256位SMD寄存器或存储器操作数。 对于一个实施例,由操作码格式397提供的功能可与操作码格式370形成冗余,而在其他实 施例中它们不同。操作码格式370和397允许由MOD字段373以及由可选的(SIB)标识符 393、可选的位移标识符394以及可选的立即数字节395部分地指定的寄存器到寄存器寻 址、存储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、由立即数对寄 存器寻址、寄存器到存储器寻址。
[0094] 接下来转到图3H,其描绘了根据另一实施例的、用于提供推入缓冲器复制和存储 功能的另一替代的操作编码(操作码)格式398。操作码格式398对应于操作码格式370 和397,并包括替代大部分的其他公共使用的传统指令前缀字节和跳出代码,并提供附加的 功能的、可选的EVEX前缀字节396 (在一个实施例中,以十六进制的62开始)。根据一个实 施例的指令可通过字段396和392中的一个或多个来进行编码。通过字段396结合源操作 码标识符374和375,并且结合可选比例-索引-基址(SIB)标识符393、可选的位移标识 符394以及可选的立即数字节395,可以为每条指令多至四个操作数位置以及标识掩码。对 于一个实施例,EVEX前缀字节396可被用于标识32位或64位的源和目的地操作数和/或 128位、256位或51