书签 分享 收藏 举报 版权申诉 / 54

向量串范围比较.pdf

  • 上传人:狗**
  • 文档编号:6110546
  • 上传时间:2019-04-12
  • 格式:PDF
  • 页数:54
  • 大小:8.95MB
  • 摘要
    申请专利号:

    CN201380014268.4

    申请日:

    2013.03.07

    公开号:

    CN104169868A

    公开日:

    2014.11.26

    当前法律状态:

    授权

    有效性:

    有权

    法律详情:

    授权|||实质审查的生效IPC(主分类):G06F 9/30申请日:20130307|||公开

    IPC分类号:

    G06F9/30

    主分类号:

    G06F9/30

    申请人:

    国际商业机器公司

    发明人:

    J.D.布拉德伯里; E.M.施瓦茨; T.斯雷格

    地址:

    美国纽约阿芒克

    优先权:

    2012.03.15 US 13/421,560

    专利代理机构:

    北京市柳沈律师事务所 11105

    代理人:

    邸万奎

    PDF完整版下载: PDF下载
    内容摘要

    促进字符数据的处理。提供基于控制集比较向量的每个元素与值的范围以确定是否存在匹配的“向量串范围比较”指令。与匹配元素或者表示匹配元素的掩码相关联的索引存储在目标向量寄存器中。另外,相同的指令(“向量串范围比较”指令)也在选定向量中搜索空元素(也称为零元素)。

    权利要求书

    权利要求书
    1.  一种用于在中央处理单元中执行机器指令的方法,该计方法包含以下步骤:
    由处理器获得用于执行的机器指令,该机器指令根据计算机架构定义以用于计算机执行,该机器指令包含:
    至少一个操作码字段,其提供操作码,该操作码识别“向量串范围比较”操作;
    扩展字段,在指明一个或者多个寄存器时使用;
    第一寄存器字段,与扩展字段的第一部分组合,以指明第一寄存器,第一寄存器包括第一操作数;
    第二寄存器字段,与扩展字段的第二部分组合,以指明第二寄存器,第二寄存器包括第二操作数;
    第三寄存器字段,与扩展字段的第三部分组合,以指明第三寄存器,第三寄存器包括第三操作数;
    第四寄存器字段,与扩展字段的第四部分组合,以指明第四寄存器,第四寄存器包括第四操作数;
    掩码字段,该掩码字段包括要在执行机器指令期间使用的一个或者多个控制;以及
    执行该机器指令,该执行包括:
    使用由第四操作数以编程方式提供的一个或者多个控制,比较第二操作数的元素与第三操作数的一个或者多个值,以确定是否存在由第三操作数的一个或者多个值和第四操作数的一个或者多个控制定义的匹配;以及
    基于该比较将结果提供在第一操作数中。

    2.  如权利要求1所述的方法,其中该方法还包括:
    确定掩码字段是否包括设定用以指示搜索零元素的零元素控制;
    基于包括设定用以指示搜索零元素的零元素控制的掩码字段,在第二操作数中搜索零元素。

    3.  如权利要求1所述的方法,其中第三操作数的一个或者多个值包括第三操作数中的一对值。

    4.  如权利要求3所述的方法,其中第三操作数包括多对值,并且该方法 还包括比较第二操作数的元素与多对值的每对值。

    5.  如权利要求4所述的方法,其中该比较包括比较第二操作数的每个元素与多对值的每对值。

    6.  如权利要求1所述的方法,其中一个或者多个控制包括大于、小于或者等于中的至少一个。

    7.  如权利要求1所述的方法,其中掩码字段包括结果类型,该结果类型定义该结果如何提供在第一操作数中。

    8.  如权利要求7所述的方法,其中
    基于具有第一值的结果类型,该结果放置在第一操作数的一个选定位置;以及
    基于具有第二值的结果类型,放置在第一操作数中的该结果是依赖于比较指示元素的真或假的掩码。

    9.  如权利要求8所述的方法,其中该方法还包括对于第二操作数的多个元素重复该比较,并且其中,放置在一个选定位置的结果包括范围内的第一元素的第一字节或者不匹配的指示之一。

    10.  如权利要求1所述的方法,其中掩码字段包括条件码设定控制,并且其中,该方法还包括:
    确定是否设定条件码设定控制;以及
    基于被设定的条件码设定控制,设定条件码用于执行机器指令。

    11.  如权利要求4所述的方法,其中设定条件码包括以下之一:
    设定条件码为指示检测到零元素在比任何比较更低的索引元素中的值;
    设定条件码为指示比较被寻找的值;以及
    设定条件码为指示没有比较被寻找的值。

    12.  如权利要求1所述的方法,执行包括在执行时确定比较的方向,其中,该方向是自左向右或者自右向左之一,并且该确定包括由机器指令存取方向控制以确定该方向。

    13.  一种包含适配用于实施根据任一前述方法权利要求的方法的所有步骤的构件的系统。

    14.  一种计算机程序,包括用于当在计算机系统上执行所述计算机程序时实施根据任一前述方法权利要求的方法的所有步骤的指令。

    说明书

    说明书向量串范围比较
    技术领域
    本发明的一个方面总的涉及文本处理,并且尤其涉及促进与字符数据相关联的处理。
    背景技术
    文本处理经常需要比较字符数据,包括但不限于比较字符数据串的比较。典型地,用以比较字符数据的指令一次比较数据的单一字节。
    另外,文本处理经常需要其他类型的字符数据处理,包括寻找终止点(例如,字符的末尾)、确定字符数据的长度、寻找特定字符等。用以执行这些类型的处理的当前指令倾向于效率低下。
    发明内容
    经由提供用于执行机器指令的计算机程序产品来克服现有技术的缺点并提供优势。该计算机程序产品包括计算机可读存储介质,其可由处理电路读取且存储用于由该处理电路执行以用于执行方法的指令。该方法包括(例如):由处理器获得用于执行的机器指令,该机器指令根据计算机架构定义以用于计算机执行,该机器指令包含:至少一个操作码字段,其提供操作码,该操作码识别“向量串范围比较”操作;扩展字段,在指明一个或者多个寄存器时使用;第一寄存器字段,与扩展字段的第一部分组合,以指明第一寄存器,第一寄存器包括第一操作数;第二寄存器字段,与扩展字段的第二部分组合,以指明第二寄存器,第二寄存器包括第二操作数;第三寄存器字段,与扩展字段的第三部分组合,以指明第三寄存器,第三寄存器包括第三操作数;第四寄存器字段,与扩展字段的第四部分组合,以指明第四寄存器,第四寄存器包括第四操作数;掩码字段,该掩码字段包括要在执行机器指令期间使用的一个或者多个控制;以及执行该机器指令,该执行包括:使用由第四操作数以编程方式提供的一个或者多个控制,比较第二操作数的元素与第三操作数的一个或者多个值,以确定是否存在由第三操作数的一个或者多个 值和第四操作数的一个或者多个控制定义的匹配;以及基于该比较将结果提供在第一操作数中。
    本文中也描述和主张关于本发明的一个或多个方面的方法和系统。另外,本文中也描述且可主张关于本发明的一个或多个方面的服务。
    经由本发明的技术实现额外特征和优势。本发明的其他实施例和方面在本文中得以详细描述且被视为所主张的本发明的一部分。
    附图说明
    在说明书的结论处的权利要求中作为实例具体指出并且明显主张本发明的一个或者多个方面。依据结合附图的以下详细描述,本发明的前面和其他目的、特征和优点显而易见,在附图中:
    图1描绘并入且使用本发明的一个或者多个方面的计算环境的实例;
    图2A描绘并入且使用本发明的一个或者多个方面的计算环境的另一实例;
    图2B描绘根据本发明的一个方面的图2A的存储器的进一步细节;
    图3描绘根据本发明的一个方面的“串范围比较”指令的格式的实施例;
    图4描绘根据本发明的一个方面的与“串范围比较”指令相关联的逻辑;
    图5描绘根据本发明的一个方面的使用“向量串范围比较”指令的一个实例;
    图6描绘根据本发明的一个方面的使用“向量串范围比较”指令的一个实施例的多个向量;
    图7描绘根据本发明的一个方面的寄存器文件的一个实例;
    图8描绘并入本发明的一个或多个方面的计算机程序产品的一个实施例;
    图9描绘并入且使用本发明一个或多个方面的主机计算机系统的一个实施例;
    图10描绘并入且使用本发明一个或多个方面的计算机系统的另一实例;
    图11描绘并入且使用本发明一个或多个方面的包含计算机网络的计算机系统的另一实例;
    图12描绘并入且使用本发明一个或多个方面的计算机系统的各种元件的一个实施例;
    图13A描绘并入且使用本发明一个或多个方面的图12的计算机系统的执行单元的一个实施例;
    图13B描绘并入且使用本发明一个或多个实施例的图12的计算机系统的分支单元的一个实施例;
    图13C描绘并入且使用本发明一个或多个实施例的图12的计算机系统的载入/存储单元的一个实施例;以及
    图14描绘并入且使用本发明一个或多个方面的仿真主机计算机系统的一个实施例。
    具体实施方式
    根据本发明的一个方面,提供用于促进字符数据的处理的能力,包括但不限于任何语言中的字母字符;数字;标点符号;和/或其他符号。字符数据可为或可不为数据的串。标准与字符数据相关联,标准的实例包括(但不限于):ASCII(美国信息交换标准码);Unicode,包括(但不限于)UTF(Unicode 变换格式)8;UTF 16;等。
    在一个实例中,提供比较向量寄存器的每个元素与值的范围以确定是否存在匹配的“向量串范围比较”指令。如本文使用,值的范围可以是一个或者多个值。例如,该范围可以包括一个值,所以针对该值(例如,是H=A)做出比较,或者该比较可以包括多个值,其中,基于多个值做出比较(例如,是A<H<Z)。
    如本文描述,向量寄存器(也被称作向量)的元素长度为一个、两个或四个字节;并且向量操作数(例如)为具有多个元素的SIMD(单指令多数据)操作数。在其他实施例中,元素可以是其他大小的;且向量操作数不需要为SIMD,和/或可包括一个元素。
    在另一实施例中,同一指令(“向量串范围比较”指令)也在选定向量中搜索空元素(也称为零元素(例如,该元素包含所有零))。空或者零元素指示字符数据的终止;例如,数据的特定串的末尾。
    参看图1描述并入且使用本发明的一个或多个方面的计算环境的一个实施例。计算环境100包括(例如)经由(例如)一个或多个总线108和/或其他连接耦接至彼此的处理器102(例如,中央处理单元)、存储器104(例如,主存储器)和或多个输入/输出(I/O)器件和/或接口106。
    在一个实例中,处理器102基于由International Business Machines Corporation供应的z/Architecture,且为服务器的一部分,诸如也由International Business Machines Corporation供应且实施z/Architecture的System z服务器。z/Architecture的一个实施例描述于题为“z/Architecture Principles of Operation”的公开号(SA22-7832-08号,第九版,2010年8月)中。在一个实例中,该处理器执行操作系统,诸如,也由International Business Machines Corporation供应的z/OS。和为International Business Machines Corporation(Armonk,New York,USA)的注册商标。本文中使用的其他名称可为International Business Machines Corporation或其他公司的注册商标、商标或产品名称。
    在另一实施例中,处理器102基于由International Business Machines Corporation供应的Power架构。Power架构的一个实施例描述于“Power ISATM第2.06版修订B”(International Business Machines Corporation,2010年7月23日)中。POWER为International Business Machines Corporation的注册商标。
    在另一实施例中,处理器102基于由Intel Corporation供应的Intel架构。Intel架构的一个实施例描述于“64 and IA-32 Architectures Developer's Manual:第2B卷,Instructions Set Reference,A-L”(序号253666-041US,2011年12月)和“64 and IA-32 Architectures Developer's Manual:第2B卷,Instructions Set Reference,M-Z”(序号253667-041US,2011年12月)中。为Intel Corporation(Santa Clara,California)的注册商标。
    参看图2A描述并入且使用本发明的一个或多个实施例的计算环境的另一实施例。在此实例中,计算环境200包括(例如)经由(例如)一个或多个总线208和/或其他连接耦接至彼此的本地中央处理单元202、存储器204和一个或多个输入/输出器件和/或接口206。作为实例,计算环境200可包括:由International Business Machines Corporation(Armonk,New York)供应的PowerPC处理器、pSeries服务器或xSeries服务器;由Hewlett Packard Co.(Palo Alto,California)供应的具有Intel Itanium II处理器的HP Superdome;和/或基于由International Business Machines Corporation、Hewlett Packard、Intel、Oracle或其他供应的架构的其他机器。
    本地中央处理单元202包括在该环境内的处理期间使用的一个或多个本 地寄存器210,诸如,一个或多个通用寄存器和/或一个或多个专用寄存器。这些寄存器包括表示在任何特定时间点的环境状态的信息。
    此外,本地中央处理单元202执行存储于存储器204中的指令和程序代码。在一个特定实例中,中央处理单元执行存储于存储器204中的仿真器代码212。此代码使得以一个架构中配置的处理环境能够仿真另一架构。举例而言,仿真器代码212允许基于不同于z/Architecture的架构的机器(诸如,PowerPC处理器、pSeries服务器、xSeries服务器、HP Superdome服务器或其他)仿真z/Architecture和执行基于z/Architecture开发的软件和指令。
    参看图2B描述关于仿真器代码212的进一步细节。客户指令250包含经开发以欲于不同于本地CPU 202的架构的架构中执行的软件指令(例如,机器指令)。举例而言,客户指令250可能已经设计以在z/Architecture处理器102上执行,但相反,正在本地CPU 202(其可为(例如)Intel Itanium II处理器)上仿真客户指令250。在一个实例中,仿真器代码212包括指令取得单元252以自存储器204获得一个或多个客户指令250,并且可选地提供用于所获得的指令的本地缓冲。仿真器代码212也包括指令翻译例程254以确定已获得的客户指令的类型且将客户指令翻译成一个或多个对应本地指令256。此翻译包括(例如)识别要由客户指令执行的功能并选择(多个)本地指令以执行该功能。
    另外,仿真器212包括仿真控制例程260以使得执行本地指令。仿真控制例程260可使得本地CPU 202执行仿真一个或多个先前所获得的客户指令的本地指令的例程,并且,在这种执行完成时,将控制返回至指令取得例程以仿真下一个客户指令或群客户指令的获得。本地指令256的执行可包括将数据自存储器204载入至寄存器中;将数据自寄存器存储回至存储器;或执行某类型的算术或逻辑运算(如由翻译例程确定那样)。
    每个例程(例如)以软件来实施,该软件存储于存储器中且由本地中央处理单元202来执行。在其他实例中,例程或运算中的一个或多个以固件、硬件、软件或其某组合来实施。可使用本地CPU的寄存器210或通过使用存储器204中的位置仿真仿真处理器的寄存器。在实施例中,客户指令250、本地指令256和仿真器代码212可常驻于相同存储器中或可在不同存储器器件间分配。
    如本文中所使用,固件包括(例如)处理器的微码、毫码和/或宏码。固件包括(例如)在高级机器码的实施中使用的硬件级指令和/或数据结构。在一个 实施例中,固件包括(例如)通常作为微码递送的专属码,该微码包括受信任软件或基础硬件所特有的微码且控制操作系统对系统硬件的存取。
    在一个实例中,所获得的、经翻译并经执行的客户指令250为本文中所描述的指令。自存储器取得是一个架构(例如,z/Architecture)的指令,将该指令翻译且表示为另一架构(例如,PowerPC、pSeries、xSeries、Intel等)的本地指令256的序列。然后执行这些本地指令。
    在一个实施例中,本文中所描述的指令为根据本发明的实施例提供的向量指令,其为向量工具的一部分。向量工具提供(例如)在自一个至十六个元素的范围内的固定大小的向量。每向量包括由工具中所定义的向量指令进行运算的数据。在一个实施例中,若向量由多个元素组成,则将每个元素与其他元素并行地处理。指令完成不出现,直至所有元素的处理完成。
    如本文中所描述,可将向量指令实施为包括(但不限于)z/Architecture、Power、Intel等的各种架构的一部分。尽管本文中所描述的实施例针对z/Architecture,但本文描述的向量指令和本发明的一个或多个实施例可基于许多其他架构。z/Architecture仅为实例。
    在将向量工具实施为z/Architecture的一部分的一个实施例中,为了使用向量寄存器和指令,将指定控制寄存器(例如,控制寄存器0)中的向量启用控制和寄存器控制设定为(例如)一。若安装了向量工具且在未设定启用控制的情况下执行向量指令,则看作为数据例外。若未安装向量工具且执行向量指令,则看作为操作例外。
    向量数据例如以与其他数据格式相同的自左至右顺序显现于储存器中。编号为0至7的数据格式的位构成储存器中的最左侧(最低编号)字节位置中的字节,位8至15形成下个顺序位置中的字节,等等。在另一实例中,向量数据可以另一顺序(诸如,自右至左)显现于储存器中。
    用向量工具提供的向量指令中的许多向量指令具有指定位的字段。被称作寄存器扩展位或RXB的此字段包括用于向量寄存器指明的操作数中的每一个的最高有效位。用于未由指令指定的寄存器指明的位将保留,且被设定为零。
    在一个实例中,RXB字段包括四个位(例如,位0至3),且将位定义如下:
    0-用于指令的第一向量寄存器指明的最高有效位。
    1-用于指令的第二向量寄存器指明(若有的话)的最高有效位。
    2-用于指令的第三向量寄存器指明(若有的话)的最高有效位。
    3-用于指令的第四向量寄存器指明(若有的话)的最高有效位。
    由(例如)组译器取决于寄存器编号将每位设定为零或一。举例而言,对于寄存器0至15,将位设定为0;对于寄存器16至31,将位设定为1等等。
    在一个实施例中,每个RXB位为用于包括一个或多个向量寄存器的指令中的特定位置的扩展位。举例而言,在一个或多个向量指令中,RXB的位0为位置8至11的扩展位,其被指派至(例如)V1;RXB的位1为位置12至15的扩展位,其被指派至(例如)V2;等等。
    在另一实施例中,RXB字段包括额外位,且将一个以上位用作用于每个向量或位置的扩展。
    根据本发明的一个方面提供的包括RXB字段的指令为“向量串范围比较”指令,其实例描绘于图3中。在一个实例中,“向量串比较指令”指令300包括:操作码字段302a(例如,位0至7)、302b(例如,位40至47),其指示“向量串比较操作”操作;第一向量寄存器字段304(例如,位8至11),其用以指明第一向量寄存器(V1);第二向量寄存器字段306(例如,位12至15),其用以指明第二向量寄存器(V2);第三向量寄存器字段308(例如,位16至19),其用以指明第三向量寄存器(V3);第一掩码字段(M5)310(例如,位20至23);第二掩码字段(M6)312(例如,位24至27);第四寄存器字段314(例如,位32-35),其用以指明第四向量寄存器(V4)和RXB字段316(例如,位36至39)。在一个实例中,字段304至316中的每一个分开且独立于(多个)操作码字段。另外,在一个实施例中,这些字段分开且独立于彼此;然而,在其他实施例中,可组合一个以上字段。下文描述关于这些字段的使用的其他信息。
    在一个实例中,由操作码字段302a指明的操作码的选定位(例如,前两个位)指定指令的长度和格式。在此特定实例中,选定位指示长度为三个半字,且格式为用扩展的操作码字段的向量寄存器和寄存器运算。每个向量(V)字段以及由RXB指定的其对应扩展位指明向量寄存器。具体地,对于向量寄存器,使用(例如)寄存器字段的四位字段(其中添加其对应寄存器扩展位(RXB)作为最高有效位)指定含有操作数的寄存器。举例而言,若四位字段为0110且扩展位为0,则五位字段00110指示寄存器编号6。
    与指令的字段相关联的下标编号表示该字段适用的操作数。举例而言,与向量寄存器V1相关联的下标编号1表示第一操作数,等等。寄存器操作数 的长度为一个寄存器,其为(例如)128个位。
    具有例如四个位(0-3)的M5字段例如以位1-3指定元素大小(ES)控制。该元素大小控制在向量寄存器操作数中指定元素的大小。在一个实例中,元素大小控制可以指定字节、半字(例如,两字节)或字(例如,四字节)。例如,0指示一个字节;1指示半字;并且2指示字,也称为全字。如果指定保留值,则看作指定例外。该操作数包含由M5字段中的元素大小控制指定的大小的元素。
    M6字段例如是四位字段(位0-3),包括例如以下控制:
    取反结果(IN,位0):如果是零,则比较以控制向量中的一对值进行。如果是一,则比较的该对的结果和它们的范围取反。
    结果类型(RT,位1):如果是零,则每个所得元素是所有范围比较对该元素的掩码。如果是一,则将索引存储到第一操作数的指定字节(例如,字节7)。将零存储在剩余字节中。
    零搜索(ZS,位2):如果是一,则也将第二操作数的每个元素与零比较。
    条件码设定(CC,位3):如果是零,则不设定条件码且条件码保持不变。如果是一,则作为实例如以所指定那样来设定条件码:
    0-如果ZS等于一并且在比任何比较更低的索引元素中寻找到零。
    1-比较被找到
    2--
    3.没有比较被找到。
    在“向量串范围比较”指令的一个实施例的执行中,在一个实施例中,自左至右进行,使用来自第四操作数(包括在由V4加上其RXB位指明的寄存器中)的控制,将第二操作数(包括在由V2加上其RXB位指明的寄存器中)中的无符号二进制整数元素与第三操作数(包括在由V3加上其RXB位指明的寄存器中)中的多对无符号二进制整数元素比较。第三操作数和第四操作数中的偶-奇对形成要在与第二操作数中的每个元素比较时使用的值的范围。如果元素匹配由第三操作数和第四操作数指定的范围中的任一个,则将其视为匹配。
    如果M6字段中的结果类型标志为零,则如果第一操作数(包括在由V1 加其RXB位指明的寄存器中)中对应于第二操作数中正进行比较的元素的元素匹配这些范围中的任一个,则将该元素的位位置设定为一,否则,将它们设定为零。
    如果将M6字段中的结果类型(RT)标志设定为一,则匹配由第三操作数和第四操作数指定的范围中的任一个的第二操作数中的第一元素的字节索引(例如,第一元素的第一字节的索引)放置于第一操作数的指定字节(例如,字节7)中,且将零存储于剩余字节中。
    M6字段中的零搜索标志(若设定为一),增加第二操作数元素的零的比较至由第三操作数和第四操作数提供的范围。若零比较处在比任何其他真比较低的索引元素中,则将条件码设定为零。另外,如果RT=1,则在零比较处在比任何其他真比较更低的索引元素的情况下,将最左侧零操作数的第一字节的字节索引放置在第一操作数的指定字节(例如,字节7)中。否则,如果RT=0,则将其放置在第二操作数中与零对应的第一操作数的每个元素中。
    作为实例,由第四操作数指定的控制包括例如等于、大于和小于。具体地,在一个实例中,第四操作数中的位如下定义。
    相等(EQ):当为一时,进行相等性比较。
    大于(GT):当为一时,执行大于比较。
    小于(LT):当为一时,执行小于比较
    可以任何组合使用这些控制位。若这些位都没有被设定,则比较将产生假结果。若所有这些位被设定,则比较产生真结果。
    在一个实施例中,并行执行元素的比较。例如,如果正比较的向量寄存器在长度上是16字节,则并行比较16字节。另外,在另一实施例中,在执行时(runtime)提供向量的方向-自左至右或自右至左。举例而言,作为实例,指令存取寄存器、状态控制或指示处理的方向为自左至右或自右至左的其他实体。在一个实施例中,不将此方向控制编码为指令的一部分,而是在执行时将其提供至指令。
    在另一实施例中,指令不包括RXB字段。相反,不使用扩展,或者以另一方式提供扩展,诸如来自指令的外部的控制,或者提供为指令的另一字段的一部分。
    参看图4描述关于处理“向量串范围比较”指令的一个实施例的其他细节。在一个实例中,计算环境的处理器正执行此逻辑。
    参考图4,最初,做出关于是否要执行对空搜索(也称为零元素、串的末端、终止符等)的确定(询问400)。如果要执行对空搜索(例如,元素包含所有零)。则在第二操作数中针对空字符(即,对于零元素)做出比较(步骤401),并且将结果输出至变量zeroidx 403。在一个实例中,该结果是最左侧零元素的第一字节的字节索引。例如,如果该元素大小是字节并且在字节五中寻找到零元素,则将其中寻找到零元素的字节的索引放置在zeroidx中。类似地,如果元素大小是半字并且存在八个元素(0-7),并且元素3是零,则将6(对于字节索引6)放置在zeroidx中。同样,如果元素大小是全字,并且存在四个元素(0-3)并且元素1是0,则将4(对于字节索引4)放置在zeroidx中。如果没有寻找到零元素,则在一个实例中,将向量的大小(例如,以字节;例如,16)放置在zeroidx中。
    在一个实施例中,为了获取元素的第一字节,元素的任何字节数目与掩码AND,其中,对于1字节大小的元素,掩码是11111;对于2字节的大小的元素,掩码是11110;并且对于4字节的大小的元素,掩码是11100。因此,对于上面的实例,当元素大小是字节并且元素5具有零时,二进制的值5(00101)与字节大小元素的掩码(11111)AND,以获得元素的第一字节的字节索引(即,00101 AND 11111=00101(5))。类似地,对于元素大小是2字节和元素3是零,二进制中的值6或者7(这是因为元素3包括字节6和7)与半字的掩码(11110)AND,以获得元素的第一字节的字节索引(即,(00110或00111)AND 11110=00110(6))。此外,因为元素大小是4字节和元素1是零,组成元素1(字节4-7)的任何字节的二进制的值与全字的掩码(11100)AND,以获得元素1的第一字节索引(即,(00100或00101或00110或00111)AND 11100=00100(4))。
    此外,或者如果不执行空搜索,则从第三操作数载入一对字符(步骤404),以及载入来自第四操作数的控制(步骤406)。例如,如图5所示,在列500中描述的第三操作数包括字符A、Z、a、z、0和9;以及列502中描述的第四操作数包括控制,诸如大于和等于(GE)和小于和等于(LE)。载入一对字符(诸如A、Z),以及一对控制(诸如GE和LE)。
    参考图4和5,此后,使用来自第四操作数的控制比较第二操作数的每个元素(其实例描绘在图5的行506中)与来自第三操作数的载入字符,步骤408。比较的结果放置在resultvec[i]中,其中i表示要比较的范围i。也就是,在该实 例中,存在第三操作数中指定的比较的每个范围的resultvec,并且每个resultvec包括与第二操作数相同数目的位,例如,128位。由此,在该实例中,resultvec是三个比较范围的三个resultvec的阵列(例如,AZ、az、09),并且每个具有128位。作为实例,使用来自第四操作数的控制GE和LE比较来自第二操作数的字母H与第三操作数的A和Z。因为H大于或者等于A并且小于或者等于Z,resultvec[i]中与H对应的位设定为真(例如,1)。对于第二操作数的每个元素执行该比较。
    此后,做出关于是否存在要载入的来自第三操作数的更多对的确定(询问412)。如果存在要载入的更多对,则处理继续步骤404,其中,下一对字符和控制被载入并且在比较第二操作数的所有元素的比较中使用,以产生另一resultvec(i被递增1)。否则,处理继续到步骤420,其中,来自各种比较和/或零搜索的结果被压缩。压缩结果逻辑的输入是resultvec[410]和zeroidx403。
    压缩结果逻辑的实例伪码如下:


    如上所示,为了获取要放置在第一操作数中的结果,本文称为TEMP的掩码(其是第二操作数的大小(例如,128位))设定为零。然后,对于来自第三操作数的每对字符,TEMP与resultvec(i)OR。(在该实例中,循环重复vec_length(例如,16)/2次;然而,因为第三操作数中仅仅存在3对值,剩余5对值的第四操作数中的控制设置为假(false)。在另一实例中,仅仅重复该循环第三操作数中的值对的数目次)。在对于图5中的实例比较之后,TEMP等于FFFFFFFFFF00FFFFFFFFFF0000??????。
    然后,如果执行零搜索,则调整TEMP以反映第一零元素(如果存在的话)。也就是,对于元素大小的与zeroidx对应的TEMP的位设定为一。例如,如果zeroidx=12并且元素大小是1字节。则字节12设定为一。
    如果反转结果(IN)=1,则对TEMP求反(例如,零变成一,并且一变成零)。另外,resultidx设定等于TEMP中引导零字节的数目(例如,在上面的实例中,其是零,因为第一值是FF,但如果TEMP被求反,对于上面的实例,引导零字节的数目是5)。
    然后,基于RT的值设定操作数1。例如,如果RT=1,则操作数1设定为零,除了指定字节(例如,7),其设定为resultidx和zeroidx中的最小值,其中resultidx等于匹配由第三和第四操作数指定的范围的任一的第二操作数的第一元素的第一字节索引(例如,在上面的实例中,resultidx等于零,因为H是匹配)。如果RT=0,则操作数1设定为TEMP。
    此外,有条件地设置条件码。如果条件码设定字段是ON并且(ZS=1和zeroidx<resultidx),CC=0;或者如果条件码设定字段是ON并且如果resultidx小于第二操作数的大小(例如,16),CC=0或者否则,其设定为3。如果条件码设定字段off,不执行条件码寄存器的更新。
    在另一实施例中,零搜索不是条件,而是当执行“向量串范围比较”指令时被执行。基于或者响应于执行该指令,执行零搜索,并且返回零元素的位置(例如,字节索引)或者掩码和/或第一匹配元素的位置(例如,字节索 引)。
    为了进一步解释“向量串范围比较”指令的一个实施例的一个或者多个方面,对图6和下面的描述做出参考。参考图6,在一个实例中,使用四个向量寄存器,包括V1(600)、V2(602)、V3(604)和V4(606)。V1是第一操作数,包括相等大小的第一元素的数目;V2是第二操作数,包括相等大小的第二元素的数目;V3是第三操作数,包括第三元素的奇/偶对,每个元素是第二元素的大小;V4是第四操作数,包括第四元素的奇/偶对,每个元素是第二元素的大小。
    V3对元素用于在V4对元素的控制下自左向右与V2元素比较。因此,在一个实施例中,该处理如下:
    A.(1)V3元素0(偶)620在V4元素0(奇)624的控制下与第一V2元素622(元素0)比较,其中V4元素0指定条件,诸如大于、小于等。例如,使用运算符W将A与F比较。另外,V3元素1(奇)626在V4元素1(奇)628的控制下与第一V2元素622(元素0)比较,其中V4元素1指定条件,诸如大于、小于等。例如,也使用运算符X将A与G比较。
    如果遇到匹配,则操作终止。例如,如果两个比较匹配,则V2(A)的元素0具有匹配。否则:
    B.对于V3、V4的元素的每个相继对,对V2元素0重复上面的过程A(1),直至寻找到匹配(如果有的话)。
    如果B没有遇到匹配,则对V2的下一元素(元素1)顺序执行过程A和B的操作,直至寻找到匹配(如果有的话);等等。
    在V1(600)中设定依赖于RT选项标志的结果值。
    如果ZS=1,V2的每个元素的每个比较也与零值比较。如果在寻找到匹配之前在V2元素中检测到零值,则指示匹配条件,并且操作结束。
    在一个实施例中,存在32个向量寄存器,且其他类型的寄存器可映射至该向量寄存器的象限。举例而言,如图7中所展示,若存在包括32个向量寄存器702的寄存器文件700且每寄存器的长度为128个位,则长度为64个位的16个浮点寄存器704可重叠这些向量寄存器。因此,作为实例,当修改浮点寄存器2时,然后也修改向量寄存器2。用于其他类型的寄存器的其他映射也可能。
    上面描述“向量串范围比较”指令的一个实施例。该指令采用字符的向量 作为一个输入、搜索值的另一输入和用以指示要使用多少搜索值的控制信息的第三输入。可以使用该指令,以例如寻找字符串或者字符集中的特定类别的字符,诸如所有数字、所有大写字母等。根据本发明的一个方面,该指令可以搜索排他或者包括范围。
    在一个实施例中,提供指定第二向量寄存器中的多个元素的“向量串范围比较”指令。第三和第四向量中的奇对和偶对的元素指定值的范围。值的每个范围与第二向量寄存器的每个元素比较。如果第二向量的元素匹配范围值,则将其视为“匹配”。
    可选地,如果设定另一指令字段,则将匹配的第一元素的位置放置在第一向量寄存器中。
    可选地,如果设定另一指令字段,则将第一向量中的元素的位设定为匹配的第二向量的每个元素的位。
    可选地,如果设定另一指令字段,则第二向量寄存器的每个元素附加地与零值比较,并且匹配指示要么范围匹配要么零匹配。
    本文中,除非另有明确注释或由上下文注释,否则可互换地使用存储器、主存储器、储存器与主储存器。
    作为下文进一步描述的此实施方式的一部分提供关于向量工具的额外细节(包括其他指令的实例)。
    如本领域技术人员将了解,本发明的一个或多个实施例可体现为系统、方法或计算机程序产品。因此,本发明的一个或多个实施例可采用完全硬件实施例、完全软件实施例(包括固件、常驻软件、微码等)或组合软件与硬件实施例的实施例的形式,这些实施例在本文中大体上皆可被称作“电路”、“模块”或“系统”。此外,本发明的一个或多个实施例可采用体现于一个或多个计算机可读介质(其具有体现于其上的计算机可读程序代码)中的计算机程序产品的形式。
    可利用一个或多个计算机可读介质的任何组合。计算机可读介质可为计算机可读存储介质。举例而言,计算机可读存储介质可为(但不限于)电子、磁性、光学、电磁、红外线或半导体系统、装置或器件或前述中的任何合适组合。计算机可读存储介质的更特定实例(非详尽清单)包括以下:具有一个或多个电线的电连接、便携型计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、 便携型光盘-只读存储器(CD-ROM)、光学存储器件、磁性存储器件或前述的任何合适组合。在此文件的上下文中,计算机可读存储介质可为可含有或存储供指令执行系统、装置或器件使用或结合指令执行系统、装置或器件而使用的程序的任何有形介质。
    现参看图8,在一个实例中,计算机程序产品800包括(例如)一个或多个非暂时性计算机可读存储介质802以在其上存储计算机可读程序代码构件或逻辑804,以提供和促进本发明的一个或多个实施例。
    可使用适当介质(包括(但不限于)无线、有线、光纤缆线、RF等或前述的任何合适组合)传输体现于计算机可读介质上的程序代码。
    可以一个或多个程序设计语言的任何组合来编写用于进行本发明的一个或多个方面的操作的计算机程序代码,该一个或多个程序设计语言包括诸如Java、Smalltalk、C++等的面向对象的程序设计语言,和诸如“C”程序设计语言、组译器或类似程序设计语言的常规程序性程序设计语言。程序代码可完全在用户的计算机上执行、部分地在用户的计算机上执行、作为独立软件包而执行、部分地在用户的计算机上且部分地在远程计算机上执行,或完全在远程计算机或服务器上执行。在后者情形下,远程计算机可经由任一类型的网络连接至用户的计算机,该任一类型的网络包括局域网(LAN)或广域网(WAN),或可进行至外部计算机的连接(例如,使用因特网服务提供者经由因特网)。
    本文中参考根据本发明的实施例的方法、装置(系统)和计算机程序产品的流程图说明和/或方块图描述本发明的一个或多个方面。应理解,可由计算机程序指令来实施流程图说明和/或方块图的每个块和这些流程图说明和/或方块图中的块的组合。可将这些计算机程序指令提供至通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,以使得经由该计算机或其他可编程数据处理装置的处理器执行的指令产生用于实施流程图和/或方块图块中所指定的功能/动作的构件。
    这些计算机程序指令也可存储于计算机可读介质中,该计算机可读介质可指导计算机、其他可编程数据处理装置或其他器件以特定方式起作用,使得存储于该计算机可读介质中的指令产生制造物件,其包括实施流程图和/或方块图方块中所指定的功能/动作的指令。
    也可将这些计算机程序指令载入至计算机、其他可编程数据处理装置或 其他器件上以使得在该计算机、其他可编程装置或其他器件上执行一系列操作步骤以产生计算机实施的处理程序,使得在该计算机或其他可编程装置上执行的指令提供用于实施流程图和/或方块图块中所指定的功能/动作的处理程序。
    这些图中的流程图和方块图说明根据本发明的一个或多个方面的各种实施例的系统、方法和计算机程序产品的可能实施的架构、功能性和操作。就此而言,流程图或方块图中的每个块可表示模块、区段或代码的一部分,其包含用于实施(多个)指定逻辑功能的一个或多个可执行指令。也应注意,在一些替代实施中,块中所注释的功能可能不以诸图中所注释的次序发生。举例而言,取决于所涉及的功能性,实际上可实质上同时执行连续展示的两个块,或有时可以相反次序执行这些块。也将注意,方块图和/或流程图说明的每个块和方块图和/或流程图说明中的块的组合可由执行指定功能或动作的基于专用硬件的系统或专用硬件与计算机指令的组合来实施。
    除上述内容之外,本发明的一个或多个实施例也可由供应客户环境的管理的服务提供者来提供、供应、部署、管理、服务等。举例而言,服务提供者可为一个或多个客户建立、维护、支持等执行本发明的一个或多个实施例的计算机代码和/或计算机基础结构。作为回报,作为实例,服务提供者可在订用和/或收费协议下自客户收取付款。此外或替代地,服务提供者可自广告内容销售至一个或多个第三方而收取付款。
    在本发明的一个方面中,可部署用于执行本发明的一个或多个方面的应用程序。作为实例,应用程序的部署包含提供可操作以执行本发明的一个或多个方面的计算机基础结构。
    作为本发明的另一方面,可部署计算基础结构,其包含将计算机可读代码整合至计算系统内,其中与该计算系统组合的代码能够执行本发明的一个或多个方面。
    作为本发明的另一方面,可提供用于整合计算基础结构的处理,其包含将计算机可读代码整合至计算机系统中。计算机系统包含计算机可读介质,其中计算机介质包含本发明的一个或多个方面。与该计算机系统组合的代码能够执行本发明的一个或多个方面。
    尽管上文描述了各种实施例,但这些仅为实例。举例而言,其他架构的计算环境可并入且使用本发明的一个或多个方面。另外,可使用其他大小的 寄存器,且在不脱离本发明的精神的情况下,可作出对指令的改变。此外,可以使用与向量寄存器不同的寄存器和/或数据可以是非字符数据,诸如整数数据或其他类型的数据。
    另外,其他类型的计算环境可受益于本发明的一个或多个方面。作为实例,适合于存储和/或执行程序代码的数据处理系统为可使用,其包括直接或经由系统总线间接耦接至存储器元件的至少两个处理器。这些存储器元件包括(例如)在程序代码的实际执行期间使用的本地存储器、大容量储存器和高速缓冲存储器,高速缓冲存储器提供至少一些程序代码的临时存储以便减少在执行期间必须自大容量储存器取得代码的次数。
    输入/输出端或I/O器件(包括(但不限于)键盘、显示器、指点器件、DASD、磁带、CD、DVD、随身碟(thumb drive)和其他存储器介质等)可直接或经由介入的I/O控制器而耦接至系统。网络适配器也可耦接至系统以使得数据处理系统能够经由介入的私有或公用网络而变得耦接至其他数据处理系统或远程打印机或储存器件。调制解调器、电缆调制解调器和以太网络卡仅为可用类型的网络适配器中的少数几种。
    参看图9,描绘实施本发明的一个或多个方面的主机计算机系统5000的代表性组件。代表性主机计算机5000包含与计算机存储器(即,中央储存器)5002通信的一个或多个CPU 5001,以及用于与其他计算机或SAN等通信的至存储介质器件5011和网络5010的I/O接口。CPU 5001符合具有构建的指令集和构建的功能性的架构。CPU 5001可具有动态地址翻译(DAT)5003,以用于将程序地址(虚拟地址)变换成存储器的真实地址。DAT通常包括翻译后备缓冲器(TLB)5007以用于高速缓冲翻译,使得对计算机存储器5002的块的稍后存取不需要延迟地址翻译。通常,高速缓冲存储器5009用于计算机存储器5002与处理器5001之间。高速缓冲存储器5009可为层级式的,其具有可用于一个以上CPU的大型高速缓冲存储器和在大型高速缓冲存储器与每个CPU之间的较小较快(较低层级)高速缓冲存储器。在一些实施中,将较低层级高速缓冲存储器分割以提供用于指令取得和数据存取的单独的低层级高速缓冲存储器。在一个实施例中,由指令取得单元5004经由高速缓冲存储器5009自存储器5002取得指令。在指令解码单元5006中解码指令,且将指令(在一些实施例中,其他指令)分派给一个或多个指令执行单元5008。通常使用若干个执行单元5008,例如,算术执行单元、浮点执行单元和分支指令执行 单元。由执行单元执行指令,从而按需要自指令指定的寄存器或存储器存取操作数。若将自存储器5002存取(载入或存储)操作数,则载入/存储单元5005通常在正被执行的指令的控制下处置存取。可在硬件电路中或在内部微码(固件)中或由两者的组合来执行指令。
    如所注释,计算机系统包括在本地(或主)储存器中的信息,以及寻址、保护和参考和改变记录。寻址的一些方面包括地址的格式、地址空间的概念、地址的各种类型,以及将地址的一种类型翻译至地址的另一类型的方式。主储存器中的一些储存器包括永久指派的存储位置。主储存器为系统提供数据的可直接寻址的快速存取存储。在可处理数据和程序两者之前将数据和程序两者载入至主储存器中(自输入器件)。
    主储存器可包括一个或多个较小的快速存取缓冲储存器(有时称为高速缓冲存储器)。高速缓冲存储器通常与CPU或I/O处理器相关联。通过程序大体上不可观测到不同存储介质的实体构造和用途的效应(除了对性能的效应外)。
    可维持针对指令和针对数据操作数的单独的高速缓冲存储器。将高速缓冲存储器内的信息以相邻字节维持于被称为高速缓冲块或高速缓冲存储器线(或简称为线)的整体边界上。模型可提供“EXTRACT CACHE ATTRIBUTE(提取高速缓冲存储器属性)”指令,其返回以字节计的高速缓冲存储器线的大小。模型也可提供“PREFETCH DATA(预先取得数据)”和“PREFETCH DATA RELATIVE LONG(预取得数据相对长度)”指令,其实现储存器至数据或指令高速缓冲存储器中的预取得或数据自高速缓冲存储器的释放。
    将储存器视为长水平位串。对于多数操作,对储存器的存取以自左至右顺序进行。将该位的串再分成八个位的单元。八位单元被称为字节,其为所有信息格式的基本建立块。储存器中的每个字节位置通过唯一非负整数来识别,该唯一非负整数为该字节位置的地址或简称为字节地址。邻近字节位置具有连续地址,其以左侧的0开始且以自左至右顺序进行。地址为无符号二进制整数,且为24个、31个或64个位。
    在储存器与CPU或通道子系统之间一次一字节或字节群组地传输信息。除非另有指定,否则,在(例如)z/Architecture中,储存器中的字节群组由该群组的最左侧字节来寻址。通过要执行的操作隐含或明确指定该群组中的字 节的数目。当在CPU操作中使用时,字节群组被称为字段。在每个字节群组内,在(例如)z/Architecture中,以自左至右顺序对位编号。在z/Architecture中,最左侧位有时被称作“高阶”位,且最右侧位有时被称作“低阶”位。然而,位编号不是存储地址。可仅寻址字节。为了对储存器中的字节的单独位操作,存取整个字节。将字节中的位自左至右编号为0至7(在(例如)z/Architecture中)。对于24位地址,可将地址中的位编号为8至31或40至63,或对于31位地址,可将地址中的位编号为1至31或33至63;对于64位地址,可将地址中的位编号为0至63。在多个字节的任何其他固定长度的格式内,自0开始对构成该格式的位连续地编号。为了错误检测的目的,且优选地为了校正的目的,可将一个或多个检查位与每字节或与字节群组一起传输。由机器自动地产生这种检查位,且不可直接由程序来控制这种检查位。以字节的数目来表达存储容量。当通过指令的操作码隐含存储操作数字段的长度时,认为该字段具有固定长度,其可为个、两个、四个、八个或十六个字节。对于一些指令,可隐含更大字段。当不隐含而是明确叙述存储操作数字段的长度时,认为该字段具有可变长度。可变长度操作数的长度可以一个字节的增量变化(或对于一些指令,以两个字节的倍数或其他倍数的增量变化)。当将信息放置于储存器中时,替换包括于指明的字段中的仅那些字节位置的内容,即使至储存器的物理路径的宽度可能大于正存储的字段的长度也如此。
    某些信息单元将在储存器中的整体边界上。当其存储地址为该单元的长度(以字节计)的倍数时,将边界称为信息单元的整体。对整体边界上的2个、4个、8个和16个字节的字段给予特殊名称。半字为在两字节边界上的两个连续字节的群组,且为指令的基本建立块。字为四字节边界上的四个连续字节的群组。双字为八字节边界上的八个连续字节的群组。四倍字为16字节边界上的16个连续字节的群组。当储存器地址指明半字、字、双字和四倍字时,地址的二进制表示分别含有一个、两个、三个或四个最右侧零位。指令将在两-字节整体边界上。多数指令的存储操作数不具有边界对准要求。
    在实施针对指令和数据操作数的单独的高速缓冲存储器的器件上,若程序存储至高速缓冲存储器线中(随后自该高速缓冲存储器线取得指令),则可经历显著延迟,而不管储存器是否更改随后取得的指令。
    在一个实施例中,可通过软件(有时称为经授权内部码、固件、微码、毫码、微微码(pico-code)等,前述中的任一个将与本发明的一个或多个方面 一致)来实践本发明。参看图9,体现本发明的一个或多个方面的软件程序代码可由主机系统5000的处理器5001自长期存储介质器件5011(诸如,CD-ROM驱动、磁带机或硬驱动)存取。软件程序代码可体现于多种已知介质中的任一个上,以用于供数据处理系统(诸如,磁片、硬驱动或CD-ROM)使用。该代码可分布于这种介质上,或可经由网络5010自计算机系统的计算机存储器5002或储存器至其他计算机系统地分发至用户,以供这种其他系统的用户使用。
    软件程序代码包括操作系统,其控制各种计算机组件和一个或多个应用程序的功能和交互。通常将程序代码自存储介质器件5011分页至相对较高速计算机储存器5002,在该相对较高速计算机储存器5002处,程序代码可用于由处理器5001处理。用于在存储器中、在物理介质上体现软件程序代码和/或经由网络分发软件程序代码的技术和方法已熟知,且在本文中将不进一步加以讨论。当在有形介质(包括(但不限于)电子存储器模块(RAM)、快闪存储器、光盘(CD)、DVD、磁带等)上建立和存储程序代码时,程序代码常常被称作“计算机程序产品”。计算机程序产品介质通常可由优选在计算机系统中的处理电路来读取,以用于由处理电路执行。
    图10说明可实践本发明的一个或多个方面的代表性工作站或服务器硬件系统。图10的系统5020包含代表性基础计算机系统5021(诸如,个人计算机、工作站或服务器),包括选用的外围器件。基础计算机系统5021包括一个或多个处理器5026和总线,该总线用以根据已知技术连接处理器5026与系统5021的其他组件并实现(多个)处理器5026与系统5021的其他组件之间的通信。总线将处理器5026连接至存储器5025和长期储存器5027,长期储存器5027可包括(例如)硬驱动(包括(例如)磁性介质、CD、DVD和快闪存储器中的任一个)或磁带驱动。系统5021也可能包括用户接口适配器,用户接口适配器经由总线将微处理器5026连接至或多个接口器件(诸如,键盘5024、鼠标5023、打印机/扫描仪5030和/或其他接口器件),这些接口器件可为诸如触敏式屏幕、数字化键入板(entry pad)等的任何用户接口器件。总线也经由显示器适配器将诸如LCD屏幕或监视器的显示器件5022连接至微处理器5026。
    系统5021可借助于能够与网络5029通信(5028)的网络适配器与其他计算机或计算机网络通信。实例网络适配器为通信频道、令牌环、以太网络或调制解调器。替代地,系统5021可使用诸如CDPD(蜂窝式数字分组数据)卡的 无线接口通信。系统5021可与局域网(LAN)或广域网(WAN)中的这种其他计算机相关联,或系统5021可为具有另一计算机的客户端/服务器布置中的客户端等。所有这些配置以及适当通信硬件和软件为本领域已知。
    图11说明可实践本发明的一个或多个方面的数据处理网络5040。数据处理网络5040可包括多个单独网络(诸如,无线网络和有线网络),这些网络中的每一个可包括多个单独工作站5041、5042、5043、5044。另外,如本领域技术人员将了解,可包括一个或多个LAN,其中LAN可包含耦接至主机处理器的多个智能型工作站。
    仍参看图11,网络也可包括大型计算机或服务器,诸如,网关计算机(客户端服务器5046)或应用程序服务器(远程服务器5048,其可存取数据储存库且也可自工作站5045直接存取)。网关计算机5046充当至每个单独网络的入口点。当将一个联网协议连接至另一联网络协议时,需要网关。网关5046可优选借助于通信链路耦接至另一网络(例如,因特网5047)。也可使用通信链路将网关5046直接耦接至一个或多个工作站5041、5042、5043、5044。可利用可购自International Business Machines Corporation的IBM eServerTM System z服务器来实施网关计算机。
    同时参看图10和图11,可体现本发明的一个或多个实施例的软件程序代码可由系统5020的处理器5026自长期存储介质5027(诸如,CD-ROM驱动或硬驱动)存取。软件程序代码可体现于多种已知介质中的任一个上,以用于供数据处理系统(诸如,磁盘、硬驱动或CD-ROM)使用。程序代码可分发于这种介质上,或可经由网络自一个计算机系统的存储器或储存器至其他计算机系统地分发至用户5050、5051,以供这种其他系统的用户使用。
    可替代地,程序代码可体现于存储器5025中,且由处理器5026使用处理器总线来存取。此程序代码包括操作系统,其控制各种计算机组件和一个或多个应用程序5032的功能和交互。通常将程序代码自存储介质5027分页至高速存储器5025,在高速存储器5025处,程序代码可用于由处理器5026处理。用于在存储器中、在物理介质上体现软件程序代码和/或经由网络分发软件程序代码的技术和方法已熟知且在本文中将不进一步加以讨论。当在有形介质(包括(但不限于)电子存储器模块(RAM)、快闪存储器、光盘(CD)、DVD、磁带等)上建立和存储程序代码时,程序代码常常被称作“计算机程序产品”。计算机程序产品介质通常可由优选在计算机系统中的处理电路来读取,以用 于由处理电路执行。
    最容易用于处理器的高速缓冲存储器(通常比处理器的其他高速缓冲存储器快且小)为最低(L1或层级一)高速缓冲存储器,且主储存器(主存储器)为最高层级高速缓冲存储器(若存在3个层级,则为L3)。常常将最低层级高速缓冲存储器划分成保持要执行的机器指令的指令高速缓冲存储器(I-高速缓冲存储器)和保持数据操作数的数据高速缓冲存储器(D-高速缓冲存储器)。
    参看图12,针对处理器5026描绘例示性处理器实施例。通常,使用高速缓冲存储器5053的一个或多个层级缓冲存储器块以便改进处理器性能。高速缓冲存储器5053为保持有可能使用的存储器数据的高速缓冲存储器线的高速缓冲器。典型的高速缓冲存储器线为64个、128个或256个字节的存储器数据。除用于对数据进行高速缓冲外,单独的高速缓冲存储器也常常用于对指令进行高速缓冲。常常通过本领域中熟知的各种“窥探(snoop)”算法来提供高速缓冲一致性(存储器和高速缓冲存储器中的线的复制的同步)。处理器系统的主存储器储存器5025常常被称作高速缓冲存储器。在具有4个层级的高速缓冲存储器5053的处理器系统中,主储存器5025有时被称作层级5(L5)高速缓冲存储器,这是因为其通常较快且仅保持可用于计算机系统的非易失性储存器(DASD、磁带等)的部分。主储存器5025对由操作系统分页入和分页出主储存器5025的数据页“进行高速缓冲”。
    程序计数器(指令计数器)5061保持追踪要执行的当前指令的地址。z/Architecture处理器中的程序计数器为64个位,且可经截断至31或24个位以支持先前寻址限制。程序计数器通常体现于计算机的PSW(程序状态字)中,使得程序计数器在上下文切换期间持续。因此,具有程序计数器值的进行中程序可由(例如)操作系统来中断(自程序环境至操作系统环境的上下文切换)。在程序不起作用时,程序的PSW维持程序计数器值,且在操作系统正执行时,使用操作系统的程序计数器(在PSW中)。通常,以等于当前指令的字节的数目的量来使程序计数器递增。RISC(精简指令集计算)指令通常为固定长度,而CISC(复杂指令集计算)指令通常为可变长度。IBM z/Architecture的指令为具有2个、4个或6个字节长度的CISC指令。举例而言,通过上下文切换操作或分支指令的分支选取操作来修改程序计数器5061。在上下文切换操作中,将当前程序计数器值连同关于正执行的程序的其他状态信息(诸如,条件码)一起保存于程序状态字中,且载入新程序计数器值从而指向要执行 的新程序模块的指令。执行分支选取操作以便通过将分支指令的结果载入至程序计数器5061中而准许程序作出决策或在程序内循环。
    通常,指令读取单元5055用以代表处理器5026取得指令。取得单元取得“下一个顺序指令”、分支选取指令的目标指令或在上下文切换之后的程序的第一指令。现代指令取得单元常常使用预取得技术以基于可能使用经预先取得的指令的可能性而推测性地预取得指令。举例而言,取得单元可取得包括下一个顺序指令的指令的16个字节和再下一个顺序指令的额外字节。
    然后由处理器5026执行所取得的指令。在一个实施例中,将(多个)所取得的指令传递至取得单元的分派单元5056。分派单元解码(多个)指令且将关于(多个)经解码的指令的信息转递至适当单元5057、5058、5060。执行单元5057通常将自指令取得单元5055接收关于经解码的算术指令的信息,且将根据指令的操作码对操作数执行算术运算。优选自存储器5025、构建的寄存器5059或自正执行的指令的立即字段,将操作数提供至执行单元5057。当存储执行的结果时,将执行的结果存储于存储器5025、寄存器5059中或其他机器硬件(诸如,控制寄存器、PSW寄存器等)中。
    处理器5026通常具有用于执行指令的功能的一个或多个单元5057、5058、5060。参看图13A,执行单元5057可借助于接口逻辑5071与构建的通用寄存器5059、解码/分派单元5056、载入存储单元5060和其他处理器单元5065通信。执行单元5057可使用若干个寄存器电路5067、5068、5069以保持算术逻辑单元(ALU)5066将进行运算的信息。ALU执行算术运算(诸如,加法、减法、乘法和除法)以及逻辑函数(诸如,“和”(and)、“或”(or)和“异或”(XOR)、旋转和移位)。优选地,ALU支持依赖于设计的专业化运算。其他电路可提供其他构建的工具5072,包括(例如)条件码和恢复支持逻辑。通常,将ALU运算的结果保持于输出寄存器电路5070中,输出寄存器电路5070可将结果转递至多种其他处理功能。存在处理器单元的许多布置,本发明描述仅意欲提供对一个实施例的代表性理解。
    “加法”指令(例如)将在具有算术和逻辑功能性的执行单元5057中执行,而浮点指令(例如)将在具有专业化的浮点能力的浮点执行中执行。优选地,执行单元通过对操作数执行操作码定义的功能而对由指令识别的操作数进行运算。举例而言,“加法”指令可由执行单元5057对在由指令的寄存器字段识别的两个寄存器5059中发现的操作数执行。
    执行单元5057对两个操作数执行算术加法,且将结果存储于第三操作数中,其中第三操作数可为第三寄存器或两个源寄存器中的一个。执行单元优选利用算术逻辑单元(ALU)5066,算术逻辑单元(ALU)5066能够执行多种逻辑函数(诸如,移位、旋转、“和”(And)、“或”(Or)和“异或”(XOR))和多种代数函数(包括加法、减法、乘法、除法中的任一个)。一些ALU 5066经设计以用于标量运算,且一些ALU 5066经设计以用于浮点运算。取决于架构,数据可为大端法(Big Endian)(其中最低有效字节处于最高字节地址)或小端法(Little Endian)(其中最低有效字节处于最低字节地址)。IBM z/Architecture为大端法。取决于架构,无符号的字段可为符号和量值(1的补数或2的补数)。2的补数是有利的,因为ALU并不需要设计减法能力,这由于在ALU中,2的补数中的负值或正值仅需要加法。通常以速记法来描述数字,其中12位字段定义4,096字节块的地址,且通常描述为(例如)4Kbyte(千字节)块。
    参看图13B,用于执行分支指令的分支指令信息通常发送至分支单元5058,分支单元5058常常使用分支预测算法(诸如,分支历史表5082)以在其他条件运算完成之前预测分支的结果。将取得当前分支指令的目标,且在条件运算完成之前推测性地执行当前分支指令的目标。当完成条件运算时,基于条件运算的条件和所推测的结果,完成或放弃推测性执行的分支指令。典型分支指令可测试条件码,且在条件码满足分支指令的分支要求的情况下分支至目标地址,可基于包括(例如)在寄存器字段或指令的立即字段中发现的数字的若干个数字而计算目标地址。分支单元5058可使用具有多个输入寄存器电路5075、5076、5077和输出寄存器电路5080的ALU 5074。举例而言,分支单元5058可与通用寄存器5059、解码分派单元5056或其他电路5073通信。
    指令群组的执行可对于包括(例如)以下的多种原因被中断:由操作系统启动的上下文切换、引起上下文切换的程序例外或错误、引起上下文切换的I/O中断信号或多个程序的多线程活动(在多线程化环境中)。优选地,上下文切换动作保存关于当前正执行的程序的状态信息,且然后载入关于正被调用的另一程序的状态信息。举例而言,可将状态信息保存于硬件寄存器中或存储器中。状态信息优选包含指向要执行的下一个指令的程序计数器值、条件码、存储器翻译信息和构建的寄存器内容。上下文切换活动可单独或组合地通过硬件电路、应用程序、操作系统程序或固件程序代码(微码、微微码或 经授权内部码(LIC))来训练。
    处理器根据指令定义的方法来存取操作数。指令可使用指令的一部分的值来提供立即操作数,可提供明确指向通用寄存器或专用寄存器(例如,浮点寄存器)的一个或多个寄存器字段。指令可利用通过操作码字段识别为操作数的隐含的寄存器。指令可将存储器位置用于操作数。操作数的存储器位置可由寄存器、立即字段或寄存器与立即字段的组合来提供,如通过z/Architecture长位移工具(long displacement facility)举例说明,其中指令定义(例如)相加在一起以提供操作数在存储器中的地址的基寄存器、索引寄存器和立即字段(位移字段)。除非另有指示,否则本文中的位置通常隐含主存储器(主储存器)中的位置。
    参看图13C,处理器使用载入/存储单元5060来存取储存器。载入/存储单元5060可通过获得目标操作数在存储器5053中的地址且在寄存器5059或另一存储器5053的位置中载入操作数来执行载入操作,或可通过获得目标操作数在存储器5053中的地址且将自寄存器5059或另一存储器5053的位置获得的数据存储于存储器5053中的目标操作数位置中来执行存储操作。载入/存储单元5060可为推测性的,且可以相对于指令顺序而言无序的顺序存取存储器,然而,载入/存储单元5060对于程序维持按次序执行指令的显现。载入/存储单元5060可与通用寄存器5059、解码/分派单元5056、高速缓冲存储器/存储器接口5053或其他元件5083通信,且包含各种寄存器电路、ALU 5085和控制逻辑5090以计算存储地址且提供管线定序以保持操作按次序。一些操作可能为无序的,但载入/存储单元提供使得无序操作对于程序显现为已按次序执行的功能性,如本领域中所熟知。
    优选地,应用程序“看见”的地址常常被称作虚拟地址。虚拟地址有时被称作“逻辑地址”和“有效地址”。这些虚拟地址为虚拟是因为:它们通过多种动态地址翻译(DAT)技术中的一个而重新导向至物理存储器位置,这些DAT技术包括(但不限于)仅对虚拟地址加偏移值作为前缀、经由一个或多个翻译表翻译虚拟地址,翻译表优选单独或组合地包含至少段表和页表,优选地,段表具有指向页表的入口。在z/Architecture中,提供翻译层级,包括区第一表、区第二表、区第三表、段表和选用的页表。常常通过利用翻译后备缓冲器(TLB)(其包含将虚拟地址映射至相关联的物理存储器位置的入口)来改进地址翻译的性能。当DAT使用翻译表翻译虚拟地址时,建立这些入口。 然后,虚拟地址的随后使用可利用快速TLB的入口,而不是缓慢依序翻译表存取。可通过包括LRU(最近最少使用)的多种替换演算法来管理TLB内容。
    在处理器为多处理器系统的处理器的状况下,每处理器具有保持诸如I/O、高速缓冲存储器、TLB和存储器的共用资源互锁以达成一致性的责任。通常,在维持高速缓冲一致性中将利用“窥探”技术。在窥探环境中,可将每个高速缓冲存储器线标记为处于以下状态中的任一个以便促进共用:共用状态、互斥状态、改变的状态、无效状态等。
    I/O单元5054(图12)为处理器提供用于附接至外围器件(例如,包括磁带、光盘、打印机、显示器和网络)的构件。I/O单元常常由软件驱动程序呈现至计算机程序。在大型计算机(诸如,来自的System z)中,通道适配器和开放系统适配器为大型计算机的I/O单元,这些I/O单元提供操作系统与外围器件之间的通信。
    另外,其他类型的计算环境可受益于本发明的一个或多个方面。作为实例,环境可包括仿真器(例如,软件或其他仿真机制),在该仿真器中仿真特定架构(包括(例如)指令执行、构建的功能(诸如,地址翻译)和构建的寄存器)或其子集(例如,在具有处理器和存储器的本地计算机系统上)。在这种环境中,仿真器的一个或多个仿真功能可实施本发明的一个或多个方面,即使执行该仿真器的计算机可具有不同于正仿真能力的架构也如此。作为一个实例,在仿真模式下,解码特定指令或正仿真操作,且构建适当仿真功能以实施单独指令或操作。
    在仿真环境中,主机计算机包括(例如):存储器,其存储指令和数据;指令取得单元,其自存储器取得指令且可选地提供所取得的指令的本地缓冲;指令解码单元,其接收所取得的指令且确定已取得的指令的类型;和指令执行单元,其执行这些指令。执行可包括:将数据自存储器载入至寄存器中;将数据自寄存器存储回至存储器;或执行某类型的算术或逻辑运算(如由解码单元确定)。在一个实例中,以软件来实施每个单元。举例而言,将正由这些单元执行的操作实施为仿真器软件内的一个或多个子例程。
    更具体地,在大型计算机中,构建的机器指令常常借助于编译应用程序而由程序员(现今通常为“C”程序员)使用。存储于存储介质中的这些指令可本地地在z/Architecture服务器中或者在执行其他架构的机器中执行。可在现有和未来大型计算机服务器中和在的其他机器(例如, Power Systems服务器和System服务器)上仿真这些指令。可于在使用由AMDTM和其他制造的硬件的广泛多种机器上执行Linux的机器中执行这些指令。除了在z/Architecture下在该硬件上执行外,也可使用Linux,以及使用由Hercules、UMX或FSI(Fundamental Software,Inc)进行的仿真机器,其中执行大体上处于仿真模式下。在仿真模式下,由本地处理器执行仿真软件以仿真仿真处理器的架构。
    本地处理器通常执行包含固件或本地操作系统的仿真软件以执行仿真处理器的仿真。仿真软件负责取得和执行仿真处理器架构的指令。仿真软件维持仿真程序计数器以追踪指令边界。仿真软件一次可取得一个或多个仿真机器指令,且将该一个或多个仿真机器指令转换至对应的本地机器指令群组,以用于由本地处理器执行。可对这些经转换的指令进行高速缓冲,使得可实现较快速转换。尽管如此,仿真软件仍将维持仿真处理器架构的架构规则以便确保操作系统和针对仿真处理器编写的应用程序正确地操作。此外,仿真软件将提供通过仿真处理器架构识别的资源(包括(但不限于)控制寄存器、通用寄存器、浮点寄存器、包括(例如)段表和页表的动态地址翻译功能、中断机制、上下文切换机制、当日时间(TOD)时钟和至I/O子系统的构建的接口),使得操作系统或经设计以在仿真处理器上执行的应用程序可在具有仿真软件的本地处理器上执行。
    解码正进行仿真特定指令,且调用子例程以执行个别指令的功能。仿真仿真处理器的功能的仿真软件功能(例如)按以下来实施:“C”子例程或驱动程序,或在理解优选实施例的描述之后将在本领域的技术人员的技术内的提供用于特定硬件的驱动程序的某其他方法。包括(但不限于)以下的各种软件和硬件仿真专利说明达成针对不同机器构建的指令格式用于可用于本领域技术人员的目标机器的仿真的多种已知方式:Beausoleil等人的题为“Multiprocessor for Hardware Emulation”的美国专利证书第5,551,013号;和Scalzi等人的题为“Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor”的美国专利证书第6,009,261号;和Davidian等人的题为“Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions”的美国专利证书第5,574,873号;和Gorishek等人的题为“Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System”的美国专利证书第6,308,255号;和Lethin等人的题为“Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method”的美国专利证书第6,463,582号;和Eric Traut的题为“Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions”的美国专利证书第5,790,825号;和许多其他。
    在图14中,提供仿真主机计算机系统5092的实例,其仿真主机架构的主机计算机系统5000'。在仿真主机计算机系统5092中,主机处理器(CPU)5091为仿真主机处理器(或虚拟主机处理器),且包含仿真处理器5093,其具有不同于主机计算机5000'的处理器5091的本地指令集架构的本地指令集架构。仿真主机计算机系统5092具有仿真处理器5093可存取的存储器5094。在实例实施例中,将存储器5094分割成主机计算机存储器5096部分和仿真例程5097部分。主机计算机存储器5096可用于根据主机计算机架构的仿真主机计算机5092的程序。仿真处理器5093执行不同于仿真处理器5091的本地指令的架构的构建的指令集的本地指令,这些本地指令自仿真例程存储器5097获得,且可通过使用在序列和存取/解码例程中获得的一个或多个指令自主机计算机存储器5096中的程序存取主机指令以用于执行,序列和存取/解码例程可解码(多个)所存取的主机指令以确定用于仿真所存取的主机指令的功能的本地指令执行例程。举例而言,针对主机计算机系统5000'的架构定义的其他工具可通过构建的工具例程来仿真,包括诸如通用寄存器、控制寄存器、动态地址翻译和I/O子系统支持和处理器高速缓冲存储器的工具。仿真例程也可利用可用于仿真处理器5093中的功能(诸如,通用寄存器和虚拟地址的动态翻译)以改进仿真例程的性能。也可提供特殊硬件和卸载引擎以辅助处理器5093仿真主机计算机5000'的功能。
    本文中所使用的术语仅用于描述特定实施例的目的,且并不意欲为本发明的限制。如本文中所使用,除非上下文另有清晰指示,否则单数形式“一”、“一个”和“该”意欲也包括复数形式。应进一步理解,当术语“包含”和/或“包括”用于此说明书中时,其指定所叙述特征、整数、步骤、操作、元件和/或组件的存在,但并不排除一个或多个其他特征、整数、步骤、操作、元件、组件和/或其群组的存在或添加。
    以下权利要求书中的所有构件或步骤加功能元件的对应结构、材料、动 作和等效物(若有的话)意欲包括用于结合如特别主张的其他所主张元件执行功能的任何结构、材料或动作。已出于说明和描述的目的呈现本发明的一个或多个方面的描述,但该描述并不意欲为详尽的或限于所公开的形式下的本发明。在不脱离本发明的范畴和精神的情况下,许多修改和变化对于本领域技术人员将为显而易见。选择并描述了实施例以便最佳地解释本发明的原理和实践应用,且使其他本领域技术人员能够针对具有如适合于所预期的特定用途的各种修改的各种实施例来理解本发明。
    向量串指令
    向量串工具
    .
    .
    .
    指令
    除非另有指定,否则所有操作数为向量寄存器操作数。汇编器语法中的“V”指明向量操作数。

    向量寻找任何相等

    自左至右进行,比较第二操作数的每个无符号二进制整数元素与第三操作数的每个无符号二进制整数元素的相等性,且若在M5字段中设定了零搜索标志,则视情况与零比较。
    若M5字段中的结果类型(RT)标志为零,则对于匹配第三操作数中的任一元素或视情况匹配零的第二操作数中的每个元素,将第一操作数中对应的元素的位位置设定为一,否则,将其设定为零。
    若M5字段中的结果类型(RT)标志为一,则将匹配第三操作数中的元素或 零的第二操作数中的最左侧元素的字节索引存储于第一操作数的字节七中。
    每个指令具有扩展的记忆码区段,其描述推荐的扩展的记忆码及其对应的机器组译器语法。
    程序设计注释:对于视情况设定条件码的所有指令,若设定条件码,则性能可能降级。
    若M5字段中的结果类型(RT)标志为一且未发现字节相等,或为零(若设定了零搜索标志),则将与向量中的字节的数目相等的索引存储于第一操作数的字节七中。
    M4字段指定元素大小控制(ES)。ES控制指定向量寄存器操作数中的元素的大小。若指定保留值,则看作为指定例外。
    0-字节
    1-半字
    2-字
    3至15-保留
    M5字段具有以下格式:

    如下定义M5字段的位:
    ·结果类型(RT):若为零,则每个所得元素为关于该元素的所有范围比较的掩码。若为一,则将字节索引存储至第一操作数的字节七中,且将零存储于所有其他元素中。
    ·零搜索(ZS):若为一,则也将第二操作数的每个元素与零比较。
    ·条件码设定(CC):若为零,则不设定条件码且条件码保持不变。若为一,则如以下段中所指定来设定条件码。
    特殊条件
    若出现以下中的任一个,则看作指定例外且不采取其他行动:
    1.M4字段含有自3至15的值。
    2.M5字段的位0不是零。
    所得条件码:
    若CC标志为零,则码保持不变。
    若CC标志为一,则如下来设定码:
    0若设定了ZS-位,则在第二操作数中比零低的索引元素中不存在匹配。
    1第二操作数的一些元素匹配第三操作数中的至少一个元素。
    2第二操作数的所有元素匹配第三操作数中的至少一个元素。
    3第二操作数中没有元素匹配第三操作数中的任何元素。
    程序例外:
    1具有DXC FE的数据,向量寄存器
    ·在未安装向量扩展工具的情况下的操作
    ·指定(保留的ES值)
    ·事务约束(Transaction Constraint)
    扩展的记忆码:

    向量寻找元素相等

    自左至右进行,将第二操作数的无符号二进制整数元素与第三操作数的对应的无符号二进制整数元素比较。若两个元素相等,则将最左侧相等元素的第一字节的字节索引放置于第一操作数的字节七中。将零存储于第一操作 数的剩余字节中。若没有发现字节相等,或若没有发现字节为零(若设定了零比较),则将与向量中的字节的数目相等的索引存储于第一操作数的字节七中。将零存储于剩余字节中。
    若在M5字段中设定了零搜索(ZS)位,则也比较第二操作数中的每个元素与零的相等性。若在发现第二操作数和第三操作数的任何其他元素相等之前在第二操作数中寻找到零元素,则将发现为零的元素的第一字节的字节索引存储于第一操作数的字节七中,且将零存储于所有其他字节位置中。若条件码设定(CC)标志为一,则将条件码设定为零。
    M4字段指定元素大小控制(ES)。ES控制指定向量寄存器操作数中的元素的大小。若指定保留值,则看作为指定例外。
    0-字节
    1-半字
    2-字
    3至15-保留
    M5字段具有以下格式:

    如下定义M5字段的位:
    ·保留:保留位0至1且位0至1必须为零。否则,看作为指定例外。
    ·零搜索(ZS):若为一,则也将第二操作数的每个元素与零比较。
    ·条件码设定(CC):若为零,则条件码保持不变。若为一,则如在以下段中所指定来设定条件码。
    特殊条件
    若出现以下中的任一个,则看作指定例外且不采取其他行动:
    1.M4字段含有自3至15的值。
    2.M5字段的位0至1不是零。
    所得条件码:
    若将M5字段的位3设定为一,则如下设定码:
    0若设定了零比较位,则比较在具有比任何相等比较小的索引的元素中 检测到第二操作数中的零元素。
    1比较在一些元素中检测到第二操作数与第三操作数之间的匹配。若设定了零比较位,则此匹配出现于具有小于或等于零比较元素的索引的元素中。
    2--
    3没有元素比较起来相等。
    若M5字段的位3为零,则码保持不变。
    程序例外:
    ·具有DXC FE的数据,向量寄存器
    ·在未安装向量扩展工具的情况下的操作
    ·指定(保留的ES值)
    ·事务约束
    扩展的记忆码:

    程序设计注释:
    1.对于任一元素大小,始终将字节索引存储至第一操作数中。举例而言,若将元素大小设定为半字且比较出第2个索引的半字相等,则将存储字节索引4。
    2.第三操作数不应含有具有零值的元素。若第三操作数确实含有零且在任何其他相等比较之前与第二操作数中的零元素匹配,则设定条件码,而不管零比较位设定。
    向量寻找元素不相等

    自左至右进行,将第二操作数的无符号二进制整数元素与第三操作数的对应的无符号二进制整数元素比较。若两个元素不相等,则将最左侧不相等元素的字节索引放置于第一操作数的字节七中,且将零存储至所有其他字节。若将M5字段中的条件码设定(CC)位设定为一,则设定条件码以指示哪一操作数较大。若所有元素相等,则将等于向量大小的字节索引放置于第一操作数的字节七中,且将零放置于所有其他字节位置中。若CC位为一,则设定条件码三。
    若在M5字段中设定了零搜索(ZS)位,则也比较第二操作数中的每个元素与零的相等性。若在发现第二操作数的任一其他元素不相等之前在第二操作数中寻找到零元素,则将发现为零的元素的第一字节的字节索引存储于第一操作数的字节七中。将零存储于所有其他字节中,且设定条件码0。
    M4字段指定元素大小控制(ES)。ES控制指定向量寄存器操作数中的元素的大小。若指定保留值,则看作为指定例外。
    0-字节
    1-半字
    2-字
    3至15-保留
    M5字段具有以下格式:

    如下定义M5字段的位:
    ·零搜索(ZS):若为一,则也将第二操作数的每个元素与零比较。
    ·条件码设定(CC):若为零,则不设定条件码且条件码保持不变。若为一,则如以下段中所指定来设定条件码。
    特殊条件
    若出现以下中的任一个,则看作指定例外且不采取其他行动:
    1.M4字段含有自3至15的值。
    2.M5字段的位0至1不是零。
    所得条件码:
    若将M5字段的位3设定为一,则如下设定码:
    0若设定了零比较位,则比较在比任何不相等比较低的索引元素中检测到两个操作数中的零元素
    1检测到元素失配,且VR2中的元素小于VR3中的元素
    2检测到元素失配,且VR2中的元素大于VR3中的元素
    3所有元素比较起来相等,且若设定了零比较位,则在第二操作数中没有寻找到零元素。
    若M5字段的位3为零,则码保持不变。
    程序例外:
    ·具有DXC FE的数据,向量寄存器
    ·在没有安装向量扩展工具的情况下的操作
    ·指定(保留的ES值)
    ·事务约束
    扩展的记忆码:

    向量串范围比较

    自左至右进行,将第二操作数中的无符号二进制整数元素与由第三操作数和第四操作数中的偶数-奇数对元素定义的值范围比较。结合来自第四操作数的控制值定义要执行的比较的范围。若元素匹配由第三操作数和第四操作数指定的范围中的任一个,则将其视为匹配。
    若M6字段中的结果类型(RT)标志为零,则若第一操作数中对应于第二操作数中正进行比较的元素的元素匹配这些范围中的任一个,则将该元素的位位置设定为一,否则,将其设定为零。
    若将M6字段中的结果类型(RT)标志设定为一,则第二操作数中匹配由第三操作数和第四操作数指定的范围中的任一个或零比较(若将ZS标志设定为一)的第一元素的字节索引放置于第一操作数的字节七中,且将零存储于剩余字节中。若没有元素匹配,则将等于向量中的字节的数目的索引放置于第一操作数的字节七中,且将零存储于剩余字节中。
    M6字段中的零搜索(ZS)标志,若设定为一,则将第二操作数元素与零的比较添加至由第三操作数和第四操作数提供的范围。若为在比任何其他真比较低的索引元素中的零比较,则将条件码设定为零。
    这些操作数含有由M5字段中的元素大小控制指定的大小的元素。
    第四操作数元素具有以下格式:
    若ES等于0:

    若ES等于1:

    若ES等于2:

    如下定义第四操作数元素中的位:
    ·相等(EQ):当为一时,进行相等性比较。
    ·大于(GT):当为一时,执行大于比较。
    ·小于(LT):当为一时,执行小于比较。
    ·保留所有其他位且所有其他位应为零以确保未来相容性。
    可以任何组合使用这些控制位。若这些位都没有经设定,则比较将始终产生假结果。若所有这些位经设定,则比较将始终产生真结果。
    M5字段指定元素大小控制(ES)。ES控制指定向量寄存器操作数中的元素的大小。若指定保留值,则看作为指定例外。
    0-字节
    1-半字
    2-字
    3至15-保留
    M6字段具有以下格式:

    如下定义M6字段的位:
    ·反转结果(IN):若为零,则继续进行与控制向量中的成对值的比较。若为一,则反转在这些范围中的这些成对的比较的结果。
    ·结果类型(RT):若为零,则每个所得元素为关于该元素的所有范围比较的掩码。若为一,则将索引存储至第一操作数的字节七中。将零存储于剩余字节中。
    ·零搜索(ZS):若为一,则也将第二操作数的每个元素与零比较。
    ·条件码设定(CC):若为零,则不设定条件码且条件码保持不变。若为一,则如以下段中所指定来设定条件码。
    特殊条件
    若出现以下中的任一个,则看作指定例外且不采取其他行动:
    1.M4字段含有自3至15的值。
    所得条件码:
    0若ZS=1且在比任何比较低的索引元素中发现零
    1发现比较
    2--
    3没有发现比较
    程序例外:
    ·具有DXC FE的数据,向量寄存器
    ·在没有安装向量扩展工具的情况下的操作
    ·指定(保留的ES值)
    ·事务约束
    扩展的记忆码:


    图23-1.
    ES=1,ZS=0
    VR1(a )RT=0的结果
    VR1(b) RT=1的结果
    将计数载入至块边界

    将含有可能自第二操作数位置载入而不与指定块边界跨越的字节的数目的32-位无符号二进制整数(覆盖于十六处)放置于第一操作数中。
    将位移作为12-位无符号整数对待。
    第二操作数地址不用以寻址数据。
    M3字段指定用以用信号向CPU通知关于块边界大小以计算载入的可能字节的数目的码。若指定保留值,则看作为指定例外。


    所得条件码:
    0操作数一为十六
    1--
    2--
    3操作数一小于十六
    所得条件码:
    程序例外:
    ·在没有安装向量扩展工具的情况下的操作
    ·指定
    程序设计注释:期望结合向量载入至块边界(VECTOR LOAD TO BLOCK BOUNDARY)使用将计数载入至块边界(LOAD COUNT TO BLOCK BOUNDARY)以确定载入的字节的数目。
    自VR元素的向量载入GR

    将具有由M4字段中的ES值指定的大小且通过第二操作数地址编索引的第三操作数的元素放置于第一操作数位置中。第三操作数为向量寄存器。第一操作数为通用寄存器。若通过第二操作数地址指定的索引大于具有指定元素大小的第三操作数中最高编号的元素,则第一操作数中的数据为不可预测。
    若向量寄存器元素小于双字,则该元素在64-位通用寄存器中恰好对准,且零填充剩余位。
    第二操作数地址不用以寻址数据;相反,该地址的最右侧12个位用以指定元素在第二操作数内的索引。
    M4字段指定元素大小控制(ES)。ES控制指定向量寄存器操作数中的元素的大小。若指定保留值,则看作为指定例外。
    0-字节
    1-半字
    2-字
    3-双字
    4至15-保留不变。
    所得条件码:码不变。
    程序例外:
    ·具有DXC FE的数据,向量寄存器
    ·在没有安装向量扩展工具的情况下的操作
    ·指定(保留的ES值)
    ·事务约束
    扩展的记忆码:

    向量载入至块边界

    以零索引字节元素开始,以来自第二操作数的字节载入第一操作数。若遇到边界条件,则第一操作数的其余部分为不可预测。没有看作为关于未载入的字节的存取例外。
    将针对VLBB的位移作为12-位无符号整数对待。
    M3字段指定用以用信号向CPU通知关于用以载入至的块边界大小的码。若指定保留值,则看作为指定例外。


    所得条件码:码保持不变。
    程序例外:
    ·存取(取得,操作数2)
    ·具有DXC FE的数据,向量寄存器
    ·在没有安装向量扩展工具的情况下的操作
    ·指定(保留的块边界码)
    ·事务约束
    程序设计注释:
    1.在某些情况下,可经过块边界载入数据。然而,若不存在关于该数据的存取例外,则将仅发生此情形。
    向量存储

    将第一操作数中的128-位值存储至通过第二操作数指定的存储位置。将针对VST的位移作为12-位无符号整数对待。
    所得条件码:码保持不变。
    程序例外:
    ·存取(存储,操作数2)
    ·具有DXC FE的数据,向量寄存器
    ·在没有安装向量扩展工具的情况下的操作
    ·事务约束
    具有长度的向量存储

    自左至右进行,将来自第一操作数的字节存储于第二操作数位置处。指定第三操作数的通用寄存器含有32-位无符号整数,该整数含有表示存储的最高索引字节的值。若第三操作数含有大于或等于向量的最高字节索引的 值,则存储第一操作数的所有字节。
    仅看作为关于存储的字节的存取例外。
    将针对具有长度的向量存储(VECTOR STORE WITH LENGTH)的位移作为12-位无符号整数对待。
    所得条件码:条件码保持不变。
    程序例外:
    ·存取(存储,操作数2)
    ·具有DXC FE的数据,向量寄存器
    ·在没有安装向量扩展工具的情况下的操作
    ·事务约束
    RXB描述
    所有向量指令具有在标注为RXB的指令的位36至40中的字段。此字段含有用于所有向量寄存器指明的操作数的最高有效位。保留用于没有通过指令指定的寄存器指明的位且应将其设定为零;否则,程序在未来无法相容地操作。将最高有效位串接至四-位寄存器指明的左侧以建立五-位向量寄存器指明。
    如下定义这些位:
    0.在指令的位8至11中用于向量寄存器指明的最高有效位。
    1.在指令的位12至15中用于向量寄存器指明的最高有效位。
    2.在指令的位16至19中用于向量寄存器指明的最高有效位。
    3.在指令的位32至35中用于向量寄存器指明的最高有效位。
    向量启用控制
    若将控制寄存器零中的向量启用控制(位46)和AFP寄存器控制(位45)二者设定为一,则可仅使用向量寄存器和指令。若安装了向量工具且在没有设定启用位的情况下执行向量指令,则看作为具有DXC FE十六进制的数据例外。若没有安装向量工具,则看作为操作例外。
    权利要求书(按照条约第19条的修改)
    1.一种用于在中央处理单元中执行机器指令的方法,该计方法包含以下步骤:
    由处理器获得用于执行的机器指令,该机器指令根据计算机架构定义以用于计算机执行,该机器指令包含:
    至少一个操作码字段,其提供操作码,该操作码识别“向量串范围比较”操作;
    扩展字段,在指明一个或者多个寄存器时使用;
    第一寄存器字段,与扩展字段的第一部分组合,以指明第一寄存器,第一寄存器包括第一操作数;
    第二寄存器字段,与扩展字段的第二部分组合,以指明第二寄存器,第二寄存器包括第二操作数;
    第三寄存器字段,与扩展字段的第三部分组合,以指明第三寄存器,第三寄存器包括第三操作数;
    第四寄存器字段,与扩展字段的第四部分组合,以指明第四寄存器,第四寄存器包括第四操作数;
    掩码字段,该掩码字段包括要在执行机器指令期间使用的一个或者多个控制;以及
    执行该机器指令,该执行包括:
    使用由第四操作数以编程方式提供的一个或者多个控制,比较第二操作数的元素与第三操作数的一个或者多个值,以确定是否存在由第三操作数的一个或者多个值和第四操作数的一个或者多个控制定义的匹配;以及
    基于该比较将结果提供在第一操作数中。
    2.如权利要求1所述的方法,其中该方法还包括:
    确定掩码字段是否包括设定用以指示搜索零元素的零元素控制;
    基于包括设定用以指示搜索零元素的零元素控制的掩码字段,在第二操作数中搜索零元素。
    3.如权利要求1所述的方法,其中第三操作数的一个或者多个值包括第三操作数中的一对值。
    4.如权利要求3所述的方法,其中第三操作数包括多对值,并且该方法还包括比较第二操作数的元素与多对值的每对值。
    5.如权利要求4所述的方法,其中该比较包括比较第二操作数的每个元素与多对值的每对值。
    6.如权利要求1所述的方法,其中一个或者多个控制包括大于、小于或者等于中的至少一个。
    7.如权利要求1所述的方法,其中掩码字段包括结果类型,该结果类型定义该结果如何提供在第一操作数中。
    8.如权利要求7所述的方法,其中
    基于具有第一值的结果类型,该结果放置在第一操作数的一个选定位置;以及
    基于具有第二值的结果类型,放置在第一操作数中的该结果是依赖于比较指示元素的真或假的掩码。
    9.如权利要求8所述的方法,其中该方法还包括对于第二操作数的多个元素重复该比较,并且其中,放置在一个选定位置的结果包括范围内的第一元素的第一字节或者不匹配的指示之一。
    10.如权利要求1所述的方法,其中掩码字段包括条件码设定控制,并且其中,该方法还包括:
    确定是否设定条件码设定控制;以及
    基于被设定的条件码设定控制,设定条件码用于执行机器指令。
    11.如权利要求4所述的方法,其中设定条件码包括以下之一:
    设定条件码为指示检测到零元素在比任何比较更低的索引元素中的值;
    设定条件码为指示比较被寻找的值;以及
    设定条件码为指示没有比较被寻找的值。
    12.如权利要求1所述的方法,执行包括在执行时确定比较的方向,其中,该方向是自左向右或者自右向左之一,并且该确定包括由机器指令存取方向控制以确定该方向。
    13.如权利要求1所述的方法,其中,第三操作数包括多对元素,并且第四操作数包括多对元素,第四操作数的每个元素与第三操作数的元素对应,并且第四操作数的每个元素包括要在比较对应的第三元素的值与第二操作数的元素的值时使用的控制,并且其中,该比较第二操作数的元素的值包括将第二操作数的元素的值与至少第三操作数的多对元素中的多个对的元素的值进行比较,以确定是否存在匹配,并且其中,由第四操作数的元素的控制中指定的条件控制第二操作数的元素的值与第三操作数的元素的值的每个比较,第四操作数的元素与第三操作数的元素对应。
    14.如权利要求1所述的方法,其中,掩码字段包括用以提供用于执行机器指令的一个或者多个控制的一个或者多个指示符,用于执行机器指令的一个或者多个控制包括用以确定第二操作数的元素的值是否要与零比较的零搜索控制,并且其中,在一个执行中配置机器指令,以搜索零并且使用第三操作数的一个或者多个值比较第二操作数的元素的值。
    15.一种包含适配用于实施根据任一前述方法权利要求的方法的所有步骤的构件的系统。
    16.一种计算机程序,包括用于当在计算机系统上执行所述计算机程序时实施根据任一前述方法权利要求的方法的所有步骤的指令。

    关 键  词:
    向量 范围 比较
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:向量串范围比较.pdf
    链接地址:https://www.zhuanlichaxun.net/p-6110546.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1