寻找一组具有终止字符的字符数据的长度的制作方法

文档序号:7544686阅读:299来源:国知局
寻找一组具有终止字符的字符数据的长度的制作方法
【专利摘要】判定具有一终止字符的字符数据的长度。将要判定该长度的该字符数据并行地载入于一个或多个向量寄存器内。使用一指令,该指令将数据载入于一向量寄存器中至一指定边界,且该指令提供一种使用例如另一指令来判定所载入的字符的数目的方式。另外,使用一指令以寻找例如第一零或空值字符的第一终止字符的索引。此指令并行地搜寻该数据以寻找该终止字符。藉由使用这些指令,仅使用一个分支指令来判定该字符数据的该长度。
【专利说明】寻找一组具有终止字符的字符数据的长度

【技术领域】
[0001 ] 本发明的一个方面大体涉及文本处理,且具体地说,涉及与字符数据相关联的处理。

【背景技术】
[0002]文本处理常常需要各种类型的字符数据处理,包括字符数据字串的处理。一些类型的处理包括寻找终止点(例如,字串的结尾)、判定字符数据的长度、寻找特定字符等。执行这些类型的处理的当前指令和/或技术倾向于效率低下。


【发明内容】

[0003]经由提供一种用于判定一组数据的一长度的计算机程序产品来克服先前技术的缺点并提供优势。该计算机程序产品包括一计算机可读储存介质,其可由一处理电路读取且储存用于由该处理电路执行以用于执行一方法的指令。该方法包括(例如):将在存储器的一指定区块内的数据自存储器载入至一寄存器,该数据为待判定该长度所针对的该组数据的至少一部分;获得载入于该寄存器中的数据量的计数;藉由一处理器判定载入于该寄存器中的该数据的终止值,该判定包含检查该数据以判定该寄存器是否包括终止字符,且基于该寄存器包括终止字符,将该终止值设定为该终止字符的位置,且基于该寄存器不包括该终止字符,将该终止值设定为预先指定值;基于该计数及该终止值中的至少之一而检查是否存在待计数的额外数据;基于该检查指示将对额外数据计数,基于该额外数据使该计数递增,该计数提供该组数据的长度;及基于该检查指示将不对额外数据计数,使用该计数作为该组数据的长度。
[0004]本文中亦描述及主张关于本发明的一个或多个方面的方法及系统。另外,本文中亦描述且可主张关于本发明的一个或多个方面的服务。
[0005]经由本发明的技术实现额外特征及优势。本发明的其他实施例及方面在本文中得以详细描述且被视为所主张的本发明的一部分。

【专利附图】

【附图说明】
[0006]仅通过举例的方式,现在将参照附图描述本发明的一个或多个实施例,其中:
[0007]图1描绘合并且使用本发明的一个或多个方面的计算环境的一实例;
[0008]图2A描绘合并且使用本发明的一个或多个方面的计算环境的另一实例;图2B描绘根据本发明的一个方面的图2A的存储器的其他细节;
[0009]图3描绘根据本发明的一个方面的用以判定一组字符数据的长度的逻辑的一实施例;
[0010]图4A描绘根据本发明的一个方面的主存储器的一实例,将数据自该主存储器载入至向量寄存器中且将判定数据的长度;
[0011]图4B描绘根据本发明的一个方面的载入有来自图4A的主存储器的字符数据的向量寄存器的一实例;
[0012]图4C描绘根据本发明的一个方面的主存储器的另一实例,将数据自该主存储器载入至向量寄存器中且将判定数据的长度;
[0013]图4D及4E描绘根据本发明的一个方面的载入有来自图4C的主存储器的字符数据的向量寄存器的实例;
[0014]图5描绘根据本发明的一个方面的“向量载入至区块边界(Vector Load to BlockBoundary) ”指令的格式的一实施例;
[0015]图6A描绘根据本发明的一个方面的与“向量载入至区块边界”指令相关联的逻辑的一实施例;
[0016]图6B描绘根据本发明的一个方面的与“向量载入至区块边界”指令相关联的逻辑的另一实施例;
[0017]图7描绘根据本发明的一个方面的“向量寻找元素不相等(Vector Find ElementNot Equal)”指令的格式的一实施例;
[0018]图8描绘根据本发明的一个方面的与“向量寻找元素不相等”指令相关联的逻辑的一实施例;
[0019]图9描绘根据本发明的一个方面的执行图8的逻辑的各种处理区块的一实施例;
[0020]图10描绘根据本发明的一个方面的“载入计数至区块边界(Load Count to BlockBoundary) ”指令的格式的一实施例;
[0021]图11描绘根据本发明的一个方面的与“载入计数至区块边界”指令相关联的逻辑的一实施例;
[0022]图12描绘根据本发明的一个方面的寄存器文件的一实例;
[0023]图13描绘合并本发明的一个或多个方面的计算机程序产品的一实施例;
[0024]图14描绘合并且使用本发明的一个或多个方面的主机计算机系统的一实施例;
[0025]图15描绘合并且使用本发明的一个或多个方面的计算机系统的再一实例;
[0026]图16描绘合并且使用本发明的一个或多个方面的包含计算机网络的计算机系统的另一实例;
[0027]图17描绘合并且使用本发明的一个或多个方面的计算机系统的各种元件的一实施例;
[0028]图18A描绘合并且使用本发明的一个或多个方面的图17的计算机系统的执行单元的一实施例;
[0029]图18B描绘合并且使用本发明的一个或多个方面的图17的计算机系统的分支单元的一实施例;
[0030]图18C描绘合并且使用本发明的一个或多个方面的图17的计算机系统的载入/储存单元的一实施例;及
[0031]图19描绘合并且使用本发明的一个或多个方面的经模拟的主机计算机系统的一实施例。

【具体实施方式】
[0032]根据本发明的一个方面,提供用于促进字符数据的处理的能力,字符数据包括(但不限于):任一语言下的字母字符;数字;标点符号;和/或其他符号。字符数据可为或可不为数据字串。标准与字符数据相关联,标准的实例包括(但不限于):美国信息交换标准码(ASCII) ;Unicode,包括(但不限于)Unicode变换格式(UTF)8 ;UTF16 ;等。
[0033]在一个方面中,提供一种用于进行以下操作的技术:使用并行处理寻找具有终止字符的一组字符数据(例如,空值终止的字符串)的长度且不引起无故例外状况。在一实例中,在一或多个向量寄存器内载入该组字符数据(本文中亦被称作字符数据或终止的字符数据),将判定该组字符数据的长度。具体地,在一实施例中,使用一指令(例如,“向量载入至区块边界”指令),该指令并行地将向量寄存器中的数据载入至所选定边界(诸如,高速缓存或页面边界),且提供一种判定所载入的字符的数目(计数)的方式。举例而言,为了判定所载入的字符的数目,使用另一指令(例如,“载入计数至区块边界”指令)。另外,使用一指令(例如,“向量寻找元素不相等”指令)以搜寻所载入数据以寻找该组字符数据内的第一分隔符号字符,亦即,第一终止字符(诸如,字符数据内的零或空值字符)。此指令并行地检查数据的多个字节。
[0034]若藉由“向量寻找元素不相等”指令未找出分隔符号字符的位置,则载入该组字符数据的额外数据,且重复对分隔符号字符的计数及搜寻。计数是追踪该组字符数据的所载入字节(或其他数据单位)的数目的汇总值。发生载入、计数及对分隔符号字符的搜寻,直至找出分隔符号字符的位置为止。藉由使用这些指令,仅使用一分支指令来判定字符数据的长度。另外,提供对字符数据的快速并行检查,同时防止假性例外状况。
[0035]如本文中所描述,作为实例,向量寄存器的元素(亦称为向量)的长度为一个、两个或四个字节;且向量运算元为(例如)具有多个元素的单指令多数据(SIMD)运算元。在其他实施例中,元素可具有其他大小,且向量运算元不需要为SIMDjP /或可包括一个元素。
[0036]参看图1描述合并且使用本发明的一个或多个方面的一计算环境的一实施例。计算环境100包括(例如)经由(例如)一条或多条总线108和/或其他连接耦接至彼此的一处理器102 (例如,中央处理单元)、一存储器104 (例如,主存储器)及一个或多个输入/输出(I/O)器件和/或接口 106。
[0037]在一实例中,处理器102基于由国际商业机器公司(Internat1nal BusinessMachines Corporat1n)供应的z/Architecture,且为一服务器的部分,诸如亦由国际商业机器公司供应且实施z/Architecture的System z服务器。z/Architecture的一实施例描述于题为“z/Architecture Principles of Operat1n” 的IBM—*公开案(IBM?公开案第
SA22-7832-08号,第九版,2010年8月)中,该公开案在此以其全文引用的方式并入本文中。
在一实例中,该处理器执行一操作系统,诸如,亦由国际商业机器公司供应的z/0S。IBM?、
Z/ARCHITECTURE?.及Z/OS.?为国际商业机器公司(阿芒克,纽约,美国)的注册商标。
本文中使用的其他名称可为国际商业机器公司或其他公司的注册商标、商标或产品名称。
[0038]在再一实施例中,处理器102基于由国际商业机器公司供应的PowerArchitecture。Power Architecture 的一实施例描述于“Power ISA?第 2.06 版修订 B”(国际商业机器公司,2010年7月23日)中,该文件在此以其全文引用的方式并入本文中。
power ARCHITECTURE?为国际商业机器公司的注册商标。
[0039]在又一实施例中,处理器102基于由因特尔公司供应的Intel架构。Intel架构的一实施例描述于 “ ?η?εΓ 64and IA-32 Architectures Developer’s Manual:第2B 卷,Instruct1ns Set Reference, A-L,,(序号 253666-041US,2011 年 12 月)及uIntel''5 64and IA-32 Architectures Developer's Manual:第 2B 卷,Instruct1ns SetReference, M-Z”(序号253667-041US,2011年12月)中,该等文件中的每一者在此以其全文引用的方式并入本文中。hud?为因特尔公司(圣克拉拉,加利福尼亚)的注册商标。
[0040]参看图2A描述合并且使用本发明的一个或多个方面的一计算环境的另一实施例。在此实例中,计算环境200包括(例如)经由(例如)一条或多条总线208和/或其他连接耦接至彼此的一本地中央处理单元202、一存储器204及一个或多个输入/输出器件和/或接口 206。作为实例,计算环境200可包括:由国际商业机器公司(阿芒克,纽约)供应的PowerPC处理器、pSeries服务器或xSeries服务器;由惠普公司(帕洛阿尔托,加利福尼亚州)供应的具有Intel Itanium II处理器的HP Superdome ;和/或基于由国际商业机器公司、惠普、因特尔、甲骨文公司(Oracle)或其他者供应的架构的其他机器。
[0041]本地中央处理单元202包括在该环境内的处理期间使用的一个或多个本地寄存器210,诸如,一个或多个通用寄存器和/或一个或多个专用寄存器。这些寄存器包括表示在任一特定时间点的环境状态的信息。
[0042]此外,本地中央处理单元202执行储存于存储器204中的指令及代码。在一个特定实例中,中央处理单元执行储存于存储器204中的模拟器代码212。此代码使得以一架构配置的处理环境能够模拟另一架构。举例而言,模拟器代码212允许基于不同于z/Architecture的架构的机器(诸如,PowerPC处理器、pSeries服务器、xSeries服务器、HP Superdome服务器或其他)模拟z/Architecture及执行基于z/Architecture开发的软件及指令。
[0043]参看图2B描述关于模拟器代码212的其他细节。访客指令250包含经开发以欲于不同于本地CPU 202的架构的架构中执行的软件指令(例如,机器指令)。举例而言,访客指令250可能已经设计以在z/Architecture处理器102上执行,但实情为,正在本地CPU202(其可为(例如)Intel Itanium II处理器)上模拟访客指令250。在一实例中,模拟器代码212包括一指令提取单元252以自存储器204获得一个或多个访客指令250,及视情况提供用于所获得的指令的本端缓冲。模拟器代码212亦包括一指令转译例程254以判定已获得的访客指令的类型且将访客指令转译成一或多个对应的本地指令256。此转译包括(例如)识别待由访客指令执行的功能及选择本地指令以执行该功能。
[0044]另外,模拟器212包括一模拟控制例程260以使得执行本地指令。模拟控制例程260可使得本地CPU 202执行模拟一个或多个先前所获得的访客指令的本地指令的例程且,在此执行完结时,将控制返回至指令提取例程以模拟下一个访客指令或一群访客指令的获得。本地指令256的执行可包括将数据自存储器204载入至寄存器中;将数据自寄存器储存回至存储器;或执行某一类型的算术或逻辑运算(如由转译例程判定的那样)。
[0045]每一例程(例如)以软件来实施,该软件储存于存储器中且由本地中央处理单元202来执行。在其他实例中,一个或多个例程或运算以固件、硬件、软件或其某一组合来实施。可使用本地CPU的寄存器210或藉由使用存储器204中的位置模拟经模拟的处理器的寄存器。在实施例中,访客指令250、本地指令256及模拟器代码212可常驻于相同存储器中或可在不同存储器器件间分配。
[0046]如本文中所使用,固件包括(例如)处理器的微码、毫码和/或宏代码。固件包括(例如)在较高阶机器码的实施中使用的硬件层级指令和/或数据结构。在一实施例中,固件包括(例如)通常作为微码递送的专属码,该微码包括受信任软件或基础硬件所特有的微码且控制操作系统对系统硬件的存取。
[0047]在一实例中,所获得的、经转译及经执行的访客指令250为本文中所描述的一个或多个指令。自存储器提取具有一架构(例如,z/Architecture)的指令,将该指令转译及表示为具有另一架构(例如,PowerPC、pSeries、xSeries、Intel等)的本地指令256的序列。接着执行这些本地指令。
[0048]在一实施例中,本文中所描述的各种指令为根据本发明的一个方面提供的向量指令,其为向量设施的部分。向量设施提供(例如)在自一至十六个元素的范围内的固定大小的向量。每一向量包括由设施中所定义的向量指令进行运算的数据。在一实施例中,若向量由多个元素组成,则将每一元素与其他元素并行地处理。直至所有元素的处理完成后方出现指令完成。
[0049]如本文中所描述,可将向量指令实施为包括(但不限于)z/Architecture、Power、Intel等的各种架构的部分。尽管本文中所描述的实施例针对z/Architecture,但向量指令及本发明的一个或多个方面可基于许多其他架构。z/Architecture仅为一实例。
[0050]在将向量设施实施为z/Architecture的部分的一个实施例中,为了使用向量寄存器及指令,将指定控制寄存器(例如,控制寄存器O)中的向量启用控制及寄存器控制设定至(例如)一。若安装了向量设施且在未设定启用控制的情况下执行向量指令,则辨识到数据例外状况。若未安装向量设施且执行向量指令,则辨识到操作例外状况。
[0051]向量数据显现于储存器中,例如,以与其他数据格式相同的自左至右序列。编号为O至7的数据格式的位构成储存器中的最左侧(最低编号)字节位置中的字节,位8至15形成下一个依序位置中的字节,等等。在再一实例中,向量数据可以另一序列(诸如,自右至左)显现于储存器中。
[0052]藉由向量设施提供的向量指令中的许多向量指令具有指定位的字段。被称作寄存器扩展位或RXB的此字段包括用于向量寄存器指明的运算元中的每一个的最高有效位。用于未由指令指定的寄存器指明的位将保留,且设定至零。
[0053]在一实例中,RXB字段包括四个位(例如,位O至3),且将位定义如下:0_用于指令的第一向量寄存器指明的最高有效位。
[0054]1-用于指令的第二向量寄存器指明(若有的话)的最高有效位。
[0055]2-用于指令的第三向量寄存器指明(若有的话)的最高有效位。
[0056]3-用于指令的第四向量寄存器指明(若有的话)的最高有效位。
[0057]由(例如)汇编器取决于寄存器编号将每一位设定至零或一。举例而言,对于寄存器O至15,将位设定至O ;对于寄存器16至31,将位设定至1,等等。
[0058]在一实施例中,每一 RXB位为用于包括一个或多个向量寄存器的指令中的特定位置的扩展位。举例而言,在一个或多个向量指令中,RXB的位O为位置8至11的扩展位,其被指派至(例如)V1 ;RXB的位I为位置12至15的扩展位,其被指派至(例如)V2 ;等等。
[0059]在再一实施例中,RXB字段包括额外位,且将一个以上的位用作用于每一向量或位置的扩展。
[0060]如本文中所描述,根据本发明的一个方面,使用各种指令,以便判定具有终止字符的一组字符数据(诸如,空值终止的字符串)的长度。下文进一步详细地描述与判定长度相关联的处理及所使用的各种指令。
[0061]最初参看图3,在一实施例中,为了判定字符数据(诸如,空值终止的字符串)的长度,使用(例如)“向量载入至区块边界”指令对向量寄存器载入字符数据(步骤300)。此指令并行地载入高达(例如)16个字节的数据而不交叉主存储器的指定边界(自该主存储器载入数据)。下文描述关于此指令的细节。
[0062]此后,使用(例如)下文所描述的“载入计数至区块边界”指令来判定所载入数据的字节的数目(步骤302)。
[0063]接下来,执行在所载入寄存器中的搜寻以寻找字符数据的结尾(例如,空值、零或另一终止字符)(步骤304)。在一实例中,使用下文所描述的“向量寻找元素不相等”指令以搜寻终止字符(例如,空值、零或指定终止的另一字符)。在一实例中,此指令搜寻所载入向量寄存器以寻找空值元素(亦被称作零元素)(例如,整个元素为零)。空值或零元素指示字符数据的终止;例如,特定数据串的结尾。搜寻的结果为本文中被称作终止字符的第一空值元素的索引(例如,字节索引),或诸如正搜寻的向量的大小的预先指定值(在未寻找到终止字符情况下)。
[0064]此后,作出关于所载入的字符的数目(例如,自“载入计数至区块边界”指令所判定)是否小于或等于终止字符的索引(例如,自“向量寻找元素不相等”指令所判定)的判定(询问306)。若所载入的字符的数目小于或等于终止字符的索引,则将变量“长度”设定为等于“长度”加上所载入的字符的数目所得值(步骤308),且处理继续步骤300。否则,将长度设定为等于“长度”加上终止字符索引(步骤310),且完成与判定长度相关联的处理。
[0065]下文提供用以判定终止的字符串(诸如,空值终止的字符串)的长度的实例伪码:
[0066]RB -字串的@,RX将含有长度
[0067]
XGRRX, RX, RX将RX置为零
[.0OP:V 1.B HVSTK、O (RX? RB)我入,? 达丨 6 个卒节
LCBBGLEN, O(RX5RB)寻找载入的字节的数Θ
AGRRX、RX、GLEN使长度递增所栽入的字


ψ
VFBNEZ VPOS、VSTR, VSTR 查找O字节
VLGVB GPOS、VPOS, 7(0) 将索引撷取至GPR(16-

无匹配)
CGRGLEN, GPOS若GLEN<=GPOS,则必

须进行更多It寻
BRLEUXJP
SGRRX, RX, OLEN减掉所栽入的量
AGRRX, RX, GPOS将量添加至寻找到的零
[0068]L0069」 卯上又所辰不,最初葙田讽仃(例卯)欲储仔长度的奇仔器KX与KX Zl日」的并现
(XOR)且将结果置放于RX中而将RX初始化为零。接着,循环以将高达16个字节的数据载入于向量VSTR中开始。判定载入于VSTR中的数据的字节的数目的计数且将计数置放于通用寄存器GLEN中。此后,使RX的长度递增所载入的字节的数目。
[0070]接下来,搜寻空值终止符且将结果置放于向量VPOS中。此结果为空值终止符的索引或向量的大小(例如,16,在不存在空值终止符情况下)。接着撷取VPOS中的结果且将其置放于通用寄存器GPOS中。比较GPOS与GLEN,且若GLEN小于或等于GP0S,则逻辑循环回至VLBB,且载入更多数据。否则,如上文在SGR及AGR处所指示,执行某清除。
[0071]在图4A中描绘主存储器400的一实例,自主存储器400载入向量寄存器且判定字符数据的长度。如图所示,主存储器400包括在存储器位置0x6FF3处开始的字符数据“Hello World ! ”。藉由垂直虚线402来展示在载入数据中将不交叉的主存储器的边界。将此数据载入至向量寄存器420中,向量寄存器420的实例描绘于图4B中。
[0072]下文提供图4A中所描绘的自存储器载入数据的伪码的一实例(在伪码中被称作STRi):
[0073]
VLBBVK 0(G1?STR@)、4K Vl展示于图4B中
LCBBG2、0(G1?STR@)、4K G2=13
比…AGRGK Gl、G2Gl = 13
[0074]
\FBNRZV2、Yl' VlV2=i)X0C000u0()...,
VLGVBG3、V2、7(0)G3 = 12
C(iR(Si, (il
BRLELOOP
SGRGl, Gl、G2
AGRGl, GK G3
[0075]在图4C中描绘主存储器450的另一实例,自主存储器450载入向量寄存器且判定字符数据的长度。如图所示,主存储器450包括在存储器位置0x6FF6处开始的字符数据“Hello World ! ”。藉由垂直虚线452来展示在载入数据中将不交叉的主存储器的边界,该垂直虚线452在字符数据的结尾之前。因此,首先将直至边界的字符数据载入至向量寄存器470 (其实例描绘于图4D中)中,接着将字符数据的剩余部分载入至向量寄存器490 (如图4E中所展示)中。
[0076]下文提供自图4C的主存储器载入数据的伪码的一实例(在伪码中被称作STR@):
[0077]VLBBVI,0(Gl,STR@),4K Vl展示于图4D+
LCBBG2,0(G1,STR@),4K 02 = 10
AGRG1.Gl, G2Gl = 1
VFBNEZV2,Vh VlV2 = 0X0AO(M)OO0....VLGVBG3,V2, 7(0)G3 = 10
CGRG3.Gl
BRLELOOP采用
VLBBVI,0(G15STR@),4K Vi展示于图4E中
LCBBG2,OiG1.STRi/..),4K 02=16
AGRGl,Gl, G2G2=26
VFBN7EZV2,V1.Vi
VLOVBG3’V2,7(0)03=2
CGRG3’Gl
BRLELOOP不采用
[0078]SGRGl ’Gl,mGl = 1
A(iRGl,Gl, G3Gl = 12
[0079]如上文所指示,在一个实施例中,为了判定终止的字符数据(诸如,空值终止的字符串)的长度,使用各种指令。下文详细描述这些指令的实例。
[0080]用以载入向量寄存器的一指令为“向量载入至区块边界(VLBB) ”指令,参看图5来描述该指令的一实例。在一实例中,“向量载入至区块边界”指令500包括:运算码字段502a(例如,位O至7)、502b(例如,位40至47),其指示“向量载入至区块边界”操作;一向量寄存器字段504(例如,位8至11),其用以指明一向量寄存器(V1);—索引字段(X2) 506 (例如,位12至15);—基本字段(B2) 508 (例如,位16至19); 一位移(displacement)字段(D2) 510 (例如,位20至31);一屏蔽字段(M3) 512 (例如,位32至35);及一 RXB字段514 (例如,位36至39)。在一实例中,字段504至514中的每一个分开且独立于运算码字段。另外,在一个实施例中,这些字段分开且独立于彼此;然而,在其他实施例中,可组合一个以上字段。下文描述关于这些字段的使用的其他信息。
[0081]在一实例中,由运算码字段502a指明的运算码的选定位(例如,前两个位)指定指令的长度及格式。在此特定实例中,长度为三个半字,且格式为藉由扩展的运算码字段进行的向量寄存器及索引储存运算。向量(V)字段以及由RXB指定的其对应扩展位指明一向量寄存器。详言的,对于向量寄存器,使用(例如)寄存器字段的四位字段(其中添加寄存器扩展位(RXB)作为最高有效位)指定含有运算元的寄存器。举例而言,若四位字段为0110且扩展位为0,则五位字段00110指示寄存器编号6。
[0082]与指令的字段相关联的下标编号表示该字段适用的运算元。举例而言,与V1相关联的下标编号I表示第一运算元,等等。寄存器运算元的长度为一个寄存器,其为(例如)128个位。
[0083]在一实例中,在“向量寄存器及索引储存器运算”指令中,将由X2及B2字段指明的通用寄存器的内容添加至D2字段的内容以形成第二运算元地址。在一实例中,将针对“向量载入至区块边界”指令的位移D2作为12-位不带正负号的整数对待。
[0084]在一实施例中,M3字段指定用以用信号向CPU通知关于载入至的区块边界的代码。
若指定保留值,则辨识到规范例外状况。实例码及对应值如下:
[0085]
躺解
064-字节
1128-字节
2256-字节
3512-字节
4IK-孪节
IJL JL K.J
52K-字节
64K-字节
[0086]在“向量载入至区块边界”指令的一个实施例的执行中,在一个实施例中,自左至右进行,以零索引字节元素开始,以来自第二运算元的字节载入第一运算元(在藉由Vi字段加上扩展位指明的寄存器中指定)。第二运算元为藉由第二运算元地址(亦被称作开始地址)指明的存储器位置。载入自该存储器位置开始,且继续至由指令(或处理器)计算出的结束地址,如下文所描述。若遇到边界条件,则其为相依于对待第一运算元的其余部分的方式的模型。未辨识到关于未载入的字节的存取例外状况。在一实例中,未载入的字节为不可预测的。
[0087]在上述实例指令中,开始地址藉由索引寄存器值(X2) +基础寄存器值(B2) +位移(D2)来判定;然而,在其他实施例中,由以下各者来提供开始地址:寄存器值;指令地址+指令文本指定偏移(offset);寄存器值+位移;或寄存器值+索引寄存器值;(仅作为一些实例)。另外,在一个实施例中,指令不包括RXB字段。实情为,不使用扩展或以另一方式提供扩展(诸如,自指令外部的控制),或提供扩展作为指令的另一字段的部分。
[0088]参看图6A描述与“向量载入至区块边界”指令相关联的处理的一实施例的其他细节。在此实例中,在指令中指定边界大小。在一实例中,计算环境的处理器正执行此逻辑。
[0089]在一个实施例中,最初,建立边界屏蔽(BdyMask),其用以判定与指定边界的靠近性(步骤600)。为了建立该屏蔽,在一实例中,选取边界大小(BdySize) (602)的2的补码(complement negat1n),从而建立边界屏蔽 604 (例如,BdyMask = O-BdySize)。在一实例中,藉由指令(例如,M3字段)提供边界大小;或在另一实例中,由机器判定边界大小,如本文中所描述。
[0090]此后,计算开始地址,其指示载入将开始的存储器中的位置(步骤610)。作为实例,可藉由以下各者来提供开始地址612:寄存器值;指令地址加上指令文本指定偏移;寄存器值加上位移;寄存器值加上索引寄存器值;或寄存器值加上索引寄存器值加上位移。在本文中提供的指令中,由X2字段、B2字段及D2字段来提供开始地址。亦即,将藉由X2及B2指明的寄存器的内容添加至藉由D2指示的位移以提供开始地址。计算开始地址的上文所指示的方式仅为实例;其他实例亦系可能的。
[0091]接下来,计算结束地址,其指示自何处停止载入(步骤620)。此计算的输入为(例如)边界大小602、开始地址612、向量大小614 (例如,以字节计;例如,16)及边界屏蔽604。在一实例中,如下计算结束地址622:
[0092]EndAddress = min(StartAddress+(BdySize-(StartAddress&BdyMask)), StartAddress+vec_size)。
[0093]此后,以索引字节O开始,自始于开始地址且终止于结束地址的存储器载入第一运算元(亦即,指明的向量寄存器)(步骤630)。此情形使得能够将可变数量的字节自存储器载入至向量中,而不交叉指明的存储器边界。举例而言,若存储器边界在64个字节处,且开始地址在58个字节处,则在向量寄存器中载入字节58至64。在一实施例中,并行地载入字节。
[0094]参看图6B来描述与“向量载入至区块边界”指令相关联的处理的另一实施例。在此实施例中,边界大小并非藉由指令来指定,而是实情为,由执行指令的处理器来动态地判定边界大小。
[0095]在一实施例中,最初,计算开始地址,该开始地址指示载入将开始所自的存储器中的位置(步骤650)。作为实例,可藉由以下各者来提供开始地址652:寄存器值;指令地址加上指令文本指定偏移;寄存器值加上位移;寄存器值加上索引寄存器值;或寄存器值加上索引寄存器值加上位移。在本文中提供的指令中,由X2字段、B2字段及D2字段来提供开始地址。亦即,将藉由X2及B2指明的寄存器的内容添加至藉由D2指示的位移以提供开始地址。计算开始地址的上文所指示的方式仅为实例,其他实例亦为可能的。
[0096]此后,作出关于是否将动态地判定边界的判定(询问654)。若否,则将M3字段中指定的值用作边界大小(BdySize)。否则,处理器动态地判定边界大小(步骤656)。举例而言,M3字段指定边界的类型(例如,高速缓存行、页面等),且基于该类型及处理器的一个或多个特性(例如,处理器的高速缓存行大小;处理器的页面大小;等等),处理器判定边界。作为实例,基于类型,处理器将固定大小用于边界(例如,处理器的预先定义的固定高速缓存行或页面大小),或基于类型,处理器判定边界。举例而言,若类型为页面边界,则处理器在转译后备缓冲器(TLB)中查找开始地址,且自该开始地址判定页面边界。亦存在其他实例。
[0097]在动态地或藉由指定的指令判定边界大小之后,建立边界屏蔽(BdyMask),边界屏蔽用以判定与指定边界的靠近性(步骤660)。为了建立屏蔽,在一实例中,选取边界大小(BdySize) 658的2的补码,从而建立边界屏蔽662 (例如,BdyMask = O-BdySize)。
[0098]接下来,计算结束地址,该结束地址指示自何处起停止载入(步骤670)。此计算的输入为(例如)边界大小658、开始地址652、向量大小664 (例如,以字节计;例如,16)及边界屏蔽662。在一实例中,如下计算结束地址672:
[0099]EndAddress = min(StartAddress+(BdySi zθ—(StartAddress&BdyMask)),St&rtAddress+vec—size)。
[0100]此后,以索引字节O开始,自始于开始地址且终止于结束地址的存储器载入第一运算元(亦即,指明的向量寄存器)(步骤680)。此情形使得能够将可变数量的字节自存储器载入至向量中,而不交叉指明的存储器边界。如上文所指示,例如,若存储器边界在64个字节处,且开始地址在58个字节处,则在向量寄存器中载入字节58至64。在一实施例中,并行地载入字节。
[0101]在图4B中描绘根据“向量载入至区块边界”指令的任一实施例载入的向量寄存器的一实例。如图所指示,没有数据经过藉由图4A中的虚垂直线指明的边界载入。经过边界的位置是不可存取的且无例外状况。在一特定实施例中,自左至右载入向量。然而,在另一实施例中,可自右至左载入向量。在一实施例中,在执行阶段提供向量的方向(自左至右或自右至左)。举例而言,作为实例,指令存取寄存器、状态控制或指示处理的方向为自左至右或自右至左的其他实体。在一实施例中,不将此方向控制编码为指令的部分,而是在执行阶段将其提供至指令。
[0102]在一实例中,“向量载入至区块边界”指令仅以第二运算元的、在主存储器(本文中亦称作主储存器)的区块内的对应字节载入向量寄存器(第一运算元)的字节。主存储器的区块在指令中指定(例如,在指令中指定大小,以及载入将开始的区块内的地址),或藉由一类型的区块边界(例如,高速缓存行或页面)及执行指令的处理器的一个或多个特性(诸如,高速缓存行或页面大小)来动态地判定。如本文中所使用,主存储器的区块为具有指定大小的存储器的任何区块。指定大小亦被称作区块的边界,所述边界为区块的结尾。
[0103]用以寻找终止字符(诸如,空值终止符)的一指令为“向量寻找元素不相等”指令,该指令的实例在图7中予以描绘。在一实施例中,此指令能够比较多个向量的数据的不等性,以及搜寻所选定向量以寻找终止符,诸如空值或零元素(例如,整个元素为零)。
[0104]在一实例中,“向量寻找元素不相等(VFBNEZ) ”指令700包括:运算码字段702a(例如,位O至7)、702b(例如,位40至47),其指示“向量寻找元素不相等”操作;第一向量寄存器字段704(例如,位8至11),其用以指明第一向量寄存器(V1);第二向量寄存器字段706 (例如,位12至15),其用以指明第二向量寄存器(V2);第三向量寄存器字段708 (例如,位16至19),其用以指明第三向量寄存器(V3);第一屏蔽字段(M5) 710 (例如,位24至27);第二屏蔽字段(M4) 712 (例如,位32至35);及一 RXB字段714 (例如,位36至39)。在一实例中,字段704至714中的每一个分开且独立于运算码字段。另外,在一实施例中,这些字段分开且独立于彼此;然而,在其他实施例中,可组合一个以上字段。下文描述关于这些字段的使用的其他信息。
[0105]在一实例中,由运算码字段702a指明的运算码的选定位(例如,前两个位)指定指令的长度及格式。在此特定实例中,选定位指示长度为三个半字,且格式为藉由扩展的运算码字段进行的向量寄存器及寄存器运算。向量(V)字段中的每一个以及由RXB指定的其对应扩展位指明一向量寄存器。详言的,对于向量寄存器,使用(例如)寄存器字段的四-位字段(其中添加寄存器扩展位(RXB)作为最高有效位)指定含有运算元的寄存器。举例而言,若四位字段为0110且扩展位为0,则五位字段00110指示寄存器编号6。
[0106]与指令的字段相关联的下标编号表示该字段适用的运算元。举例而言,与向量寄存器V1相关联的下标编号I表示第一运算元,等等。寄存器运算元的长度为一个寄存器,其为(例如)128个位。
[0107]具有(例如)四个位O至3的M4字段在(例如)位I至3中指定元素大小控制。元素大小控制指定向量寄存器运算元中的元素的大小。在一实例中,元素大小控制可指定字节、半字(例如,2个字节)或字(例如,4个字节)。举例而言,O指示字节;I指示半字;且2指示字,亦称为,全字。若指定保留值,则辨识到规范例外状况。
[0108]M5字段为(例如)四位字段-位O至3,包括(例如):
[0109]零搜寻字段(ZS,位2),其若为一,则亦将第二运算元的每一元素与零比较。(在再一实例中,将第三运算元或另一运算元中的每一元素与零比较);及
[0110]条件码设定字段(CC,位3),其若为零,则不设定条件码且条件码保持不变。若为一,则如下文所指定来设定条件码(作为一实例):
[0111]O-若设定零搜寻位,则比较在比不相等比较更低的索引元素中侦测到两
[0112]个运算元中的零元素;
[0113]1-侦测到元素失配,且V2中的元素小于V3中的元素;
[0114]2-侦测到元素失配,且V2中的元素大于V3中的元素;及
[0115]3-所有元素比较起来相等,且若设定零搜寻位,则在第二运算元(或在另
[0116]一实施例中,其他运算元)中未寻找到零元素。
[0117]在“向量寻找元素不相等”指令的一实施例的执行中,在一实施例中自左至右继续进行,将第二运算元(包括于由V2及其扩展位指定的向量寄存器中)的不带正负号的二进位整数元素与第三运算元(包括于由V3字段加上其扩展位指定的向量寄存器中)的对应的不带正负号的二进位整数元素比较。若两个元素不相等,则将最左侧不相等元素的字节索引置放于第一运算元(在由V1及其扩展位指定的寄存器中指明)的指定字节(例如,字节7)中,且将零储存至第一运算元的所有其他字节。
[0118]在一实例中,传回(例如,储存于指定字节中)的兀素的字节索引为不相等的最左侧元素的第一字节的索引。举例而言,若元素大小为字节,则传回最左侧不相等元素的索引(例如,若存在16个元素O至15,且元素6不相等,则传回字节索引6)。类似地,若元素大小为半字,且存在8个元素O至7,且元素三的字节6或7不相等,则传回字节索引6。同样地,若元素大小为全字且存在四个元素O至3,且元素一的字节4至7中的一者不相等,则传回字节索引4。
[0119]若将M5字段中的条件码设定位设定至(例如)一,则设定条件码以指示哪一运算元较大(若有的话)。亦即,将等效于(例如)第二运算元中的字符的二进位整数与等效于第三运算元中的不相等字符的二进位整数比较,且基于此比较设定条件码。若元素相等,则将等于向量大小(以字节的数目计,例如,16)的字节索引置放于第一运算元的指定字节(例如,字节7)中,且将零置放于所有其他字节位置中。若条件码设定位为一,则设定选定条件码(例如,条件码3)。
[0120]在“向量寻找元素不相等”指令仅用以寻找终止字符的此实施例中,第二运算元与第三运算元两者包括相同数据,因此,该比较不会产生不相等字符。
[0121]若零搜寻位设定于M5字段中,则亦比较第二运算元(或在其他实施例中,第三运算元或另一运算元)中的每一元素与零(亦称为,空值、终止符、字串结尾等)的相等性。若在发现第二运算元的任一其他元素不相等之前在第二运算元中寻找到零元素,则将发现为零的元素的第一字节的字节索引储存于第一运算元的指定字节(例如,字节7)中。将零储存于所有其他字节中,且设定选定条件码(例如,条件码零)。
[0122]在一实施例中,并行地执行元素的比较。举例而言,若正进行比较的向量寄存器的长度为16个字节,则并行地比较16个字节。在其他实施例中,数据单位可不同于字节,且并行比较的数目对应于单位大小。另外,在另一实施例中,在执行阶段提供向量的方向-自左至右或自右至左。举例而言,作为实例,指令存取寄存器、状态控制或指示处理的方向为自左至右或自右至左的其他实体。在一实施例中,不将此方向控制编码为指令的部分,但在执行阶段将其提供至指令。
[0123]在再一实施例中,指令不包括RXB字段。实情为,不使用扩展或以另一方式提供扩展(诸如,自指令外部的控制),或作为指令的另一字段的部分提供扩展。
[0124]参看图8描述关于处理“向量寻找元素不相等”指令的一实施例的其他细节。在一实例中,计算环境的处理器正执行此逻辑。
[0125]最初,作出关于是否将执行对空值(亦称为,零元素、字串结尾、终止符等)的搜寻的判定(询问800)。若将执行对空值的搜寻,则进行与空值字符(亦即,针对零元素)的比较(步骤802),且将结果输出至nullidx (空值索引)(803)。举例而言,将零元素的最左侧字节的索引置放于nullidx中。举例而言,若元素大小为字节且在字节5中寻找到零元素,则将寻找到零元素所在的字节的索引(例如,5)置放于nullidx中。类似地,若元素大小为半字,且存在8个元素O至7,且元素三(亦即,字节6至7)为零,则将6 (针对字节索引6)置放于nullidx中。同样地,若元素大小为全字且存在四个元素O至3,且元素一(亦即,字节4至7)为零,则将4(针对字节索引4)置放于nullidx中。若未寻找到空值元素,贝U,在一实例中,将向量的大小(例如,以字节计;例如,16)置放于nullidx中。
[0126]另外,或若将不执行空值搜寻,则并行地执行基于比较操作而比较A与B的多个比较(例如,16)(步骤804)。在一实例中,A为第二运算元的内容,且B为第三运算元的内容,且比较操作不相等。
[0127]将比较的结果储存于变量806(取决于搜寻是自左还是自右而被称作左索引(cmpidxl),或右索引(cmpidxr))中。举例而言,若比较为不相等比较,则搜寻为自左至右,且比较导致一个或多个不等,将与最低不相等元素的第一字节相关联的索引置放于cmpidxl中。作为一实例,若元素大小为字节且向量中存在16个元素(O至15),且在元素6中发现不等性,则将6储存于cmpidxl中。类似地,若元素大小为半字,且向量中存在8个元素(O至7),且在元素3中(例如,在字节6或7处)发现不等性,则传回元素的第一字节的索引(字节6)。同样地,若元素大小为全字且存在四个元素(O至3),且在元素I中(例如,在字节4至7处)发现不等性,则传回元素的第一字节的索引(字节4)。若不存在不相等比较,贝1J,在一实施例中,取决于比较的方向,将cmpidxl或cmpidxr设定为等于向量的大小(例如,以字节计;例如,16)。
[0128]此后,作出关于搜寻是自左还是自右的判定(询问808)。若搜寻是自左,则将变量cmpidx设定为等于cmpidxl (步骤810);否则,将cmpidx设定为等于cmpidxr (步骤812)。
[0129]在设定cmpidx之后,作出关于是否执行对空值字符的搜寻的判定(询问814)。若不存在对空值字符的搜寻,则将变量idx设定至(例如)比较索引cmpidx (步骤816)。若搜寻到空值,则将idx设定至比较索引或空值索引(nullidx)中的最小者(步骤818)。此情形结束处理。
[0130]用于图8的处理的区块逻辑的一实例描绘于图9中。在此实例中,存在两个输入:向量B 900及向量A 902,且在此实例中,两个输入具有相同数据。将两个输入输入至并行地执行比较(例如,不相等)的比较逻辑904。另外,亦将一输入(向量A)输入至执行空值处理的零侦测逻辑906。
[0131]将比较逻辑的输出idxL或idxR 908以及零侦测逻辑的输出nullidx 910输入至结果判定逻辑912。结果判定逻辑亦将以下控制作为输入:右/左914,其指示搜寻的方向;零侦测916,其指示是否将执行空值处理;及元素大小918,其提供每一元素的大小(例如,字节、半字、字);且产生一所得索引920(resultidX),将其储存于输出向量922中(例如,在字节7中)。
[0132]另外,结果判定逻辑包括条件码处理923,其视情况输出一条件码924。用于比较逻辑904的实例伪码如下:
[0133]


iclx I j = 16; itlx R = 16

For I = Oto vectorJength

IfA[i|! = to B[i] Tl 1ΠΝ


idlxL = i


Done

For i = veetor」ength downto 0

IfA[i]! = toB[i]THEN

idxR = i

done
[0134]如所展示,取决于方向,将变量idxL或idxR初始化至向量的大小(例如,以字节的数目计;例如,16)。接着,将向量A的每一元素与向量B的对应元素比较。在一实例中,比较为字节比较,因此针对16个字节(i)中的每一个进行比较。在此实例中,比较操作不相等,且若发现不等性,则将不相等字节的索引储存于idxL(若自左搜寻)或idxR(若自右搜寻)中。
[0135]用于零侦测逻辑906的实例伪码如下:
[0136]

nullidx =16

FORj =Oto vectorjength

IF AO] ==0 THEN


nullidx =j x element.......size

Done
[0137]如所展示,测试向量的每一元素(j)以查看其是否等于零。若一元素等于零,则将nullidx设定为等于该元素的索引乘以元素大小所得值。举例而言,若元素大小为半字(2个字节),且在元素3中侦测到空值字符,则将3乘以2,且将nullidx设定至6,其表示字节6。类似地,若元素大小为全字(4个字节),且在元素3中侦测到空值字符,则将3乘以4,且将nullidx设定至12。
[0138]同样地,用于结果判定逻辑912的实例伪码如下:
[0139]

IF LeftZRight = LeftTHEN
cnipidx idx 1.ELSE

cmpidx = idxR
IF zero__detect = ON THEN

resultidx = min (cmpidx' nullidx)

II.set—ON &&nuliidx < = cmpidx < 16 Il IHN

— A

n ^ y
ELSE

resultidx = cmpidx
IF element—size = byte THEN dement—size—mask =tIliirb
IF element_size = 2byteTHENelement size mask = lIlllCb
IF deinent—size = 4byte THEN element_size_inask......? 1100' b
resuiiidx = resultidx Sc eIement_size_mask
IF SetCC = ONTHEN
IF resultidx = 16 THEN
C= 3

ELSE IF A[resultidx] <B[resultidx] THEN

CC= I
ELSE

H — £
ELSE无控制码寄存器的更新
[0140]如所展示,若左/右控制指示左,则将cmpidx设定为等于idxL ;否则,将cmpidx设定为等于idxR。另外,若零侦测指示符在作用中,则将resultidx设定为等于cmpidx或nullidx中的最小者;且若条件码设定控制在作用中且cmpidx大于null idx,则将条件码设定至零。否则,若零侦测不在作用中,则将resultidx设定为等于cmpidx。
[0141]另外,若元素大小等于字节,则将元素大小屏蔽设定至11111 ;若元素大小等于2个字节,则将屏蔽设定至11110,且若元素大小等于4个字节,则将屏蔽设定至11100。
[0142]此后,将resultidx设定为等于resultidx与元素大小屏蔽进行与(AND)运算所得值。举例而言,若元素大小为半字且字节7为resultidx,则resultidx = 0011IAND11110,从而提供00110 ;因此,将resultidx设定为等于6(亦即,二进制的00110),其为元素的第一字节。
[0143]另外,视情况设定条件码。若将指令的设定条件码控制设定为在作用中,则提供条件码;否则,不设定条件码。作为实例,若将控制设定为在作用中,则若resultidx = 16,则将条件码设定至3。否则,若A的resultidx小于B的resultidx,则将条件码设定至I ;否贝U,将条件码设定至2。
[0144]对于128位向量,比较逻辑仅执行(例如)16个字节比较,而非(例如)256个比较。此情形提供对于较大向量的按比例调整。另外,可将左/右控制作为执行阶段值来提供且不在指令内予以编码。又,作为结果传回的值为字节位置,而非元素索引。另外,支持4个字节比较,以及I字节及2个字节比较。
[0145]在再一实施例中,零搜寻并非一条件,而实情为,当执行“向量寻找元素不相等”指令时,执行零搜寻。基于或回应于执行该指令,执行零搜寻,且传回零元素的位置(例如,字节索引)和/或第一失配元素的位置(例如,字节索引)。在一实施例中,针对“向量寻找元素不相等”指令所执行的比较的数目对应于向量的字节的数目,而不管实施例。举例而言,若正搜寻或进行比较的向量为16个字节,则(例如)并行地执行至多16个比较。在再一实施例中,一旦寻找到失配或零元素,比较便停止。
[0146]参看图10来描述“载入计数至区块边界(LCBB) ”指令的一实施例。此指令提供(例如)自存储器中的指定地址至指定存储器边界的数据的字节的数目的计数(例如,其提供在不交叉指定存储器边界情况下载入于向量寄存器中的字节的数目)。
[0147]在一实例中,“载入计数至区块边界”指令1000包括:运算码字段1002a(例如,位O至7)、1002b (例如,位40至47),其指示“载入计数至区块边界”操作;寄存器字段1004 (例如,位8至11),其用以指明通用寄存器(R1);索引字段(X2) 1006(例如,位12至15);基本字段(B2) 1008(例如,位16至19);位移字段(D2) 1010(例如,位20至31);及屏蔽字段(M3) 1012(例如,位32至35)。在一实例中,字段1004至1012中的每一个为分开的且独立于运算码字段。另外,在一实施例中,字段1004至1012为分开的且独立于彼此;然而,在其他实施例中,可组合一个以上字段。下文描述关于这些字段的使用的其他信息。
[0148]在一实例中,藉由运算码字段1002a指明的运算码的选定位(例如,前两个位)指定指令的长度及格式。在此特定实例中,长度为三个半字,且格式为藉由扩展的运算码字段进行的寄存器及索引储存运算。
[0149]与指令的字段相关联的下标编号表示该字段适用的运算元。举例而言,与R1相关联的下标编号I表示第一运算元,等等。寄存器运算元的长度为一个寄存器,其为(例如)128个位。
[0150]在一实例中,在“寄存器及索引储存运算”指令中,将藉由X2及B2字段指明的通用寄存器的内容添加至D2字段的内容以形成第二运算元地址。在一实例中,将针对“载入计数至区块边界”指令的位移D2作为12位不带正负号的整数对待。第二运算元地址用以指示主存储器中的位置;然而,在此实施例中,第二运算元地址并不用以寻址数据。
[0151 ] 在一实施例中,M3字段指定用以用信号向CPU通知关于区块边界大小的码,以计算在不交叉存储器边界情况下载入的可能字节的数目。若指定保留值,则辨识规范例外状况。实例码及对应值如下:
[0152]
码边界
064-字节
1128-字节
2256-字节
3512-字节
4I K-字节
52K-字节
64K-字节
[0153]在再一实例中,边界大小并不包括于指令中,而是实情为,由执行指令的处理器来动态地判定。举例而言,M3字段指定边界的类型(例如,高速缓存行、页面等),且基于该类型及处理器的一个或多个特性(例如,处理器的高速缓存行大小;处理器的页面大小;等),处理器判定边界。作为实例,基于类型,处理器将固定大小用于边界(例如,处理器的预先定义的固定高速缓存行或页面大小),或基于类型,处理器判定边界。举例而言,若类型为页面边界,则处理器在转译后备缓冲器(TLB)中查找开始地址,且自该开始地址判定页面边界。亦存在其他实例。举例而言,可藉由指令的另一字段来提供类型,或自指令外部的控制来提供类型。
[0154]在“载入计数至区块边界”指令的一实施例的执行中,将含有有可能在不交叉指定区块边界情况下自第二运算元位置载入的字节的数目的不带正负号的二进位整数(例如,64-位)置放于在第一运算元中指定的通用寄存器中,该数目的上限为(例如)待载入的向量寄存器的大小(例如,16)。
[0155]起因于指令的执行,诸如按以下方式设定选用的条件码:
[0156]O-运算元一为十六
[0157]1-
[0158]2-
[0159]4-运算元一小于十六
[0160]在上述实例指令中,待开始进行计数的开始地址藉由索引寄存器值(X2) +基础寄存器值(B2) +位移(D2)来判定;然而,在其他实施例中,藉由以下各者来提供开始地址:寄存器值;指令地址+指令文本指定偏移;寄存器值+位移;或寄存器值+索引寄存器值;(仅作为一些实例)。
[0161]参看图11来描述处理“载入计数至区块边界”指令的一实施例的其他细节。在一实例中,计算环境的处理器正执行此逻辑。
[0162]在一实施例中,最初建立边界屏蔽(BdyMask),该边界屏蔽用以判定与指定边界的靠近性(步骤1100)。为了建立屏蔽,在一实例中,选取边界大小(BdySize) 1102的2的补码,从而建立边界屏蔽1104(例如,BdyMask = O-BdySize)。在一实例中,藉由指令(例如,M3字段)来提供边界大小;或在另一实例中,如本文中所描述,由机器来判定边界大小。
[0163]此后,计算开始地址,该开始地址指示待开始进行计数的存储器中的位置(步骤1110)。作为实例,可藉由以下各者来提供开始地址1112:寄存器值;指令地址加上指令文本指定偏移;寄存器值加上位移;寄存器值加上索引寄存器值;或寄存器值加上索引寄存器值加上位移。在本文中提供的指令中,藉由X2字段、B2字段及D2字段来提供开始地址。亦即,将藉由X2及B2指明的寄存器的内容添加至由D2指示的位移以提供开始地址。计算开始地址的上文所指示的方式仅为实例;其他实例亦系可能的。
[0164]接下来,计算结束地址,该结束地址指示待停止进行计数的位置(步骤1120)。此计算的输入为(例如)边界大小1102、开始地址1112、向量大小(vec_size)1114(例如,以字节计;例如,16)及边界屏蔽1104。向量大小为所选定向量寄存器或其他寄存器的大小(例如,以字节计,例如,16)。寄存器是(例如)可在其中载入数据的寄存器。在一实例中,如下计算结束地址1122:
[0165]EndAddress = min(StartAddress+(BdySize-(StartAddress&BdyMask)), StartAddress+vec_size)。
[0166]此后,计算计数(步骤1130)。举例而言,计数=EndAddress 1122-StartAddress1112。在再一实例中,可自开始地址计算计数而不使用结束地址。在此实例中,计数=min (16, BdySize- (StartAddress AND BdyMask)),其中 16 是向量寄存器(或其他寄存器)的大小。在其他实例中,可使用其他向量大小。
[0167]在一实施例中,使用“载入计数至区块边界”指令以判定载入至诸如向量寄存器的寄存器中的数据的字节的数目。此计数接着用以判定一组字符数据(诸如,经终止的字符串)的长度。
[0168]如所指示,在一个实施例中,经加载且获得计数所针对的寄存器是向量寄存器。在向量设施的一实例中,存在32个向量寄存器,且其他类型的寄存器可映射至这些向量寄存器的一象限。举例而言,如图12中所展示,若存在包括32个向量寄存器1202的寄存器文件1200且每一寄存器的长度为128个位,则长度为64个位的16个浮点寄存器1204可覆盖这些向量寄存器。因此,作为一实例,当修改浮点寄存器2时,接着亦修改向量寄存器2。用于其他类型的寄存器的其他映射亦系可能的。
[0169]上文详细描述的技术为用于藉由并行地查看字符来寻找具有终止字符的字符数据的长度且不引起无故例外状况的技术。通常,难以并行地进行对经空值终止的字串(诸如,C样式字串)的结尾的搜寻,这是因为不知道字串的结尾在何处。容易读过结尾且呈现关于不应首先触及的页面的分页错误例外状况。先前技术一次仅载入一个字符,或具有使对字串的数据存取对准以防止页面交叉的前置码。一次对一个字符起作用原本就是缓慢的。添加用于对准的前置码可损害短字串的效能且添加码中难以预测的分支,藉此增加延时。
[0170]藉由使用将数据并行地载入至指定边界且提供判定所载入字符的数目的方式的指令及寻找第一分隔符号的索引的指令(其并行地检查数据),提供一种用于藉由仅一个分支指令寻找经终止的字符数据(例如,经空值终止)的长度的技术。另外,提供对字串字符的快速并行检查,以及防止假性例外状况。
[0171]使用以上技术的一个或多个方面提供效能改良,包括减少的执行时间。
[0172]本文中,除非另有明确注释或由上下文注释,否则可互换地使用存储器、主存储器、储存器与主储存器。
[0173]作为下文进一步描述的此实施方式的部分提供关于向量设施的额外细节(包括其他指令的实例)。
[0174]如熟习此项技术者将了解,本发明的一个或多个方面可体现为系统、方法或计算机程序产品。因此,本发明的一个或多个方面可呈完全硬件实施例、完全软件实施例(包括固件、常驻软件、微码等)或组合软件与硬件态样的实施例的形式,该等实施例在本文中大体上皆可被称作“电路”、“模组”或“系统”。此外,本发明的一个或多个方面可呈体现于一个或多个计算机可读介质(其具有体现于其上的计算机可读代码)中的计算机程序产品的形式。
[0175]可利用一个或多个计算机可读介质的任何组合。计算机可读介质可为计算机可读储存介质。举例而言,计算机可读储存介质可为(但不限于)电子、磁性、光学、电磁、红外线或半导体系统、装置或器件或前述各者的任何合适组合。计算机可读储存介质的更特定实例(非详尽清单)包括以下各者:具有一或多个电线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPR0M或快闪存储器)、光纤、便携式光盘-只读存储器(CD-ROM)、光学储存器件、磁性储存器件或前述各者的任何合适组合。在此文件的情况下,计算机可读储存介质可为可含有或储存供指令执行系统、装置或器件使用或结合指令执行系统、装置或器件而使用的程序的任何有形介质。
[0176]现参看图13,在一实例中,计算机程序产品1300包括(例如)一个或多个非瞬态计算机可读储存介质1302以在其上储存计算机可读代码构件或逻辑1304,以提供及促进本发明的一个或多个方面。
[0177]可使用适当介质(包括(但不限于)无线、有线、光纤缆线、RF等或前述各者的任何合适组合)传输体现于计算机可读介质上的代码。
[0178]可以一个或多个编程语言的任何组合来撰写用于进行本发明的一个或多个方面的操作的计算机代码,该一个或多个编程语言包括诸如Java、Smalltalk、C++或其类似者的物件导向式程序设计语言,及诸如“C”编程语言、汇编器或类似编程语言的公知的过程序编程语言。代码可完全在使用者的计算机上执行、部分地在使用者的计算机上执行、作为一独立软件包而执行、部分地在使用者的计算机上且部分地在一远端计算机上执行,或完全在远端计算机或服务器上执行。在后者情形下,远端计算机可经由任一类型的网络连接至使用者的计算机,该任一类型的网络包括局域网(LAN)或广域网(WAN),或可(例如,使用因特网服务提供者经由因特网)进行至外部计算机的连接。
[0179]本文中参考根据本发明的实施例的方法、装置(系统)及计算机程序产品的流程图说明和/或方块图描述本发明的一个或多个方面。应理解,可由计算机程序指令来实施流程图说明和/或方块图的每一区块及这些流程图说明和/或方块图中的区块的组合。可将这些计算机程序指令提供至通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生一机器,以使得经由该计算机或其他可编程数据处理装置的处理器执行的指令产生用于实施该流程图和/或方块图区块中所指定的功能/动作的构件。
[0180]这些计算机程序指令亦可储存于一计算机可读介质中,其可指导计算机、其他可编程数据处理装置或其他器件以特定方式起作用,使得储存于该计算机可读介质中的指令产生一制造物件,其包括实施流程图和/或方块图方块中所指定的功能/动作的指令。
[0181]亦可将这些计算机程序指令载入至计算机、其他可编程数据处理装置或其他器件上以使得在该计算机、其他可编程装置或其他器件上执行一系列操作步骤以产生一计算机实施的处理程序,使得在该计算机或其他可编程装置上执行的指令提供用于实施流程图和/或方块图区块中所指定的功能/动作的处理程序。
[0182]附图中的流程图及方块图说明根据本发明的一个或多个方面的各种实施例的系统、方法及计算机程序产品的可能实施的架构、功能性及操作。就此而言,流程图或方块图中的每一区块可表示一模块、区段或代码的部分,其包含用于实施指定逻辑功能的一个或多个可执行指令。亦应注意,在一些替代实施中,区块中所注释的功能可能不以图中所注释的次序发生。举例而言,取决于所涉及的功能性,实际上可实质上同时执行连续展示的两个区块,或有时可以相反次序执行这些区块。亦应注意,方块图和/或流程图说明的每一区块及方块图和/或流程图说明中的区块的组合可由执行指定功能或动作的基于专用硬件的系统或专用硬件与计算机指令的组合来实施。
[0183]除上述内容之外,本发明的一个或多个方面亦可由供应客户环境的管理的服务提供者来提供、供应、部署、管理、服务等。举例而言,服务提供者可为一个或多个客户产生、维护、支持等执行本发明的一个或多个方面的计算机代码和/或计算机基础结构。作为回报,作为实例,服务提供者可在订用和/或收费协议下自客户收取付款。或者或另外,服务提供者可自广告内容销售至一个或多个第三方而收取付款。
[0184]在本发明的一个方面中,可部署用于执行本发明的一个或多个方面的应用。作为一实例,应用的部署包含提供可操作以执行本发明的一个或多个方面的计算机基础结构。
[0185]作为本发明的再一个方面,可部署一计算基础结构,其包含将计算机可读代码整合至计算系统内,其中与该计算系统组合的代码能够执行本发明的一个或多个方面。
[0186]作为本发明的又一个方面,可提供用于整合计算基础结构的处理程序,其包含将计算机可读代码整合至计算机系统中。计算机系统包含一计算机可读介质,其中计算机介质包含本发明的一个或多个方面。与该计算机系统组合的代码能够执行本发明的一个或多个方面。
[0187]尽管上文描述了各种实施例,但这些实施例仅为实例。举例而言,其他架构的计算环境可合并及使用本发明的一个或多个方面。另外,可使用其他大小的向量或其他寄存器,且在不脱离本发明的精神的情况下,可作出对指令的改变。另外,可使用其他指令,诸如(但不限于)“向量寻找元素相等”指令,该指令用以判定经空值终止的字符数据的长度。再另外,亦可使用本发明的一个或多个方面来判定不同于经空值终止的字符数据的数据的长度。
[0188]另外,其他类型的计算环境可受益于本发明的一个或多个方面。作为一实例,适合于储存和/或执行代码的数据处理系统为可使用的,其包括直接或经由系统总线间接耦接至存储器元件的至少两个处理器。这些存储器元件包括(例如)在代码的实际执行期间使用的本端存储器、大容量储存器及高速缓存,高速缓存提供至少一些代码的临时储存以便减少在执行期间必须自大容量储存器撷取代码的次数。
[0189]输入/输出或I/O器件(包括(但不限于)键盘、显示器、指向器件、DASD、磁带、CD、DVD、拇指驱动器及其他存储器介质等)可直接或经由介入的I/O控制器而耦接至系统。网络适配器亦可耦接至系统以使得数据处理系统能够经由介入的私有或公用网络而变得耦接至其他数据处理系统或远端打印机或储存器件。调制解调器、电缆调制解调器及以太网卡仅为可用类型的网络适配器中的少数几种。
[0190]参看图14,描绘实施本发明的一个或多个方面的主机计算机系统5000的代表性组件。代表性主机计算机5000包含与计算机存储器(亦即,中央储存器)5002通信的一个或多个CPU 5001,以及用于与其他计算机或SAN及其类似者通信的至储存介质器件5011及网络5010的I/O接口。CPU 5001符合具有经建构的指令集及经建构的功能性的架构。CPU5001可具有动态地址转译(DAT) 5003,以用于将程序地址(虚拟地址)变换成存储器的真实地址。DAT通常包括一转译后备缓冲器(TLB)5007以用于高速缓存转译,使得对计算机存储器5002的区块的稍后存取不需要延迟地址转译。通常,高速缓存5009用于计算机存储器5002与处理器5001之间。高速缓存5009可为阶层式的,其具有可用于一个以上CPU的大高速缓存及在大高速缓存与每一 CPU之间的较小的较快(较低层级)高速缓存。在一些实施中,将较低层级高速缓存分裂以提供用于指令提取及数据存取的单独的低层级高速缓存。在一实施例中,由指令提取单元5004经由高速缓存5009自存储器5002提取指令。在指令解码单元5006中解码指令,且将指令分派(在一些实施例中,藉由其他指令)给一个或多个指令执行单元5008。通常使用若干个执行单元5008,例如,算术执行单元、浮点执行单元及分支指令执行单元。由执行单元执行指令,从而按需要自指令指定的寄存器或存储器存取运算元。若将自存储器5002存取(载入或储存)运算元,则载入/储存单元5005通常在正被执行的指令的控制下处置存取。可在硬件电路中或在内部微码(固件)中或由两者的组合来执行指令。
[0191]如所注释,计算机系统包括在本端(或主)储存器中的信息,以及寻址、保护及参考及改变记录。寻址的一些方面包括地址的格式、地址空间的概念、地址的各种类型,及将一类型的地址转译至另一类型的地址的方式。主储存器中的一些储存器包括永久指派的储存位置。主储存器为系统提供数据的可直接寻址的快速存取储存。在可处理数据及程序两者之前将数据及程序两者(自输入器件)载入至主储存器中。
[0192]主储存器可包括一个或多个较小的快速存取缓冲储存器(有时称为高速缓存)。高速缓存通常与CPU或I/O处理器实体相关联。藉由程序大体上不可观测到相异储存介质的实体构造及用途的效果(除了对性能的效果外)。
[0193]可维持针对指令及针对数据运算元的单独的高速缓存。将高速缓存内的信息以相连字节维持于被称为高速缓存区块或高速缓存行(或简称为行)的整体边界上。一模型可提供“撷取高速缓存属性(EXTRACT CACHE ATTRIBUTE) ”指令,其传回以字节计的高速缓存行的大小。一模型亦可提供“预先提取数据(PREFETCH DATA)”及“预先提取数据相对长度(PREFETCH DATA RELATIVE LONG) ”指令,其实现储存器至数据或指令高速缓存中的预先提取或数据自高速缓存的释放。
[0194]将储存器视为长的水平位串。对于多数操作,对储存器的存取以自左至右序列进行。将该位串再分成八个位的单元。八-位单元被称为字节,其为所有信息格式的基本建置区块。储存器中的每一字节位置藉由一唯一非负整数来识别,该唯一非负整数为该字节位置的地址或简称为字节地址。邻近字节位置具有连续地址,其以左侧的O开始且以自左至右序列进行。地址为不带正负号的二进位整数,且为24个、31个或64个位。
[0195]在储存器与CPU或通道子系统之间一次一字节或一群字节地传输信息。除非另有指定,否则,在(例如)z/Architecture中,储存器中的一群字节由该群的最左侧字节来寻址。藉由待执行的操作隐含或明确指定该群中的字节的数目。当在CPU操作中使用时,一群字节被称为一字段。在每一群字节内,在(例如)z/Architecture中,以自左至右序列对位编号。在z/Architecture中,最左侧位有时被称作“高阶”位,且最右侧位有时被称作“低阶”位。然而,位编号并非储存地址。可仅寻址字节。为了对储存器中的字节的个别位操作,存取整个字节。将字节中的位自左至右编号为O至7(在(例如)z/Architecture中)。对于24-位地址,可将地址中的位编号为8至31或40至63,或对于31-位地址,可将地址中的位编号为I至31或33至63 ;对于64-位地址,可将地址中的位编号为O至63。在多个字节的任一其他固定长度的格式内,自O开始对构成该格式的位连续地编号。为了错误侦测的目的,且优选地为了校正的目的,可将一个或多个检查位与每一字节或与一群字节一起传输。由机器自动地产生这些检查位,且不可直接由程序来控制这些检查位。以字节的数目来表达储存容量。当藉由指令的操作码隐含储存运算元字段的长度时,认为该字段具有固定长度,其可为一个、两个、四个、八个或十六个字节。对于一些指令,可隐含更大字段。当并非隐含而是明确叙述储存运算元字段的长度时,认为该字段具有可变长度。可变长度运算元的长度可以一个字节的增量变化(或藉由一些指令,以两个字节的倍数或其他倍数的增量变化)。当将信息置放于储存器中时,替换包括于指明的字段中的仅那些字节位置的内容,即使至储存器的实体路径的宽度可能大于正储存的字段的长度亦如此。
[0196]某些信息单元将在储存器中的整数边界上。对于一信息单元,当其储存地址为该单元的长度(以字节计)的倍数时,将一边界称为整数的。对整数边界上的2个、4个、8个及16个字节的字段给予特殊名称。半字为在两-字节边界上的两个连续字节的群,且为指令的基本建置区块。字为四-字节边界上的四个连续字节的群。双字为八-字节边界上的八个连续字节的群。四倍字为16-字节边界上的16个连续字节的群。当储存器地址指明半字、字、双字及四倍字时,地址的二进位表示分别含有一个、两个、三个或四个最右侧零位。指令将在两-字节整数边界上。多数指令的储存运算元不具有边界对准要求。
[0197]在实施针对指令及数据运算元的单独的高速缓存的器件上,若程序储存至高速缓存行中(随后自该高速缓存行提取指令),则可经历显著延迟,而不管储存器是否更改随后提取的指令。
[0198]在一实施例中,可藉由软件(有时指代经授权内部码、固件、微码、毫码、微微码(pico-code)及其类似者,前述各者中的任一者将与本发明的一个或多个方面一致)来实践本发明。参看图14,体现本发明的一个或多个方面的软件代码可由主机系统5000的处理器5001自长期储存介质器件5011(诸如,CD-ROM驱动器、磁带驱动器或硬盘驱动器)存取。软件代码可体现于多种已知介质中的任一者上,以用于供数据处理系统(诸如,磁盘、硬盘或⑶-ROM)使用。代码可散布于这些介质上,或可散布至使用者,经由网络5010自一计算机系统的计算机存储器5002或储存器散布至其他计算机系统,以供这些其他系统的使用者使用。
[0199]软件代码包括一操作系统,其控制各种计算机组件及一个或多个应用程序的功能及互动。通常将代码自储存介质器件5011分页至相对较高速计算机储存器5002,在该相对较高速计算机储存器5002处,代码可用于由处理器5001处理。用于在存储器中、在实体介质上体现软件代码和/或经由网络散布软件代码的技术及方法是熟知的,且在本文中将不进一步加以论述。当在有形介质(包括(但不限于)电子存储器模组(RAM)、快闪存储器、光盘(CD)、DVD、磁带及其类似者)上建立及储存代码时,代码常常被称作“计算机程序产品”。计算机程序产品介质通常可由较佳计算机系统中的处理电路来读取,以用于由处理电路执行。
[0200]图15说明可实践本发明的一个或多个方面的一代表性工作站或服务器硬件系统。图15的系统5020包含一代表性基础计算机系统5021 (诸如,个人计算机、工作站或服务器),包括选用的周边器件。基础计算机系统5021包括一个或多个处理器5026,及一总线,该总线用以根据已知技术连接处理器5026与系统5021的其他组件及实现处理器5026与系统5021的其他组件之间的通信。总线将处理器5026连接至存储器5025及长期储存器5027,长期储存器5027可包括(例如)硬盘驱动器(包括(例如)磁性介质、CD、DVD及快闪存储器中的任一者)或磁带驱动器。系统5021可能亦包括一使用者接口适配器,使用者接口适配器经由总线将微处理器5026连接至一或多个接口器件(诸如,键盘5024、鼠标5023、打印机/扫描仪5030和/或其他接口器件),这些接口器件可为诸如触摸感应屏、数字键入板(entry pad)等的任何使用者接口器件。总线亦经由显示器适配器将诸如IXD屏幕或监视器的显示器件5022连接至微处理器5026。
[0201]系统5021可借助于能够与网络5029通信(5028)的网络适配器与其他计算机或计算机网络通信。实例网络适配器为通信频道、令牌环、以太网络或调制解调器。或者,系统5021可使用诸如蜂窝式数字封包数据(⑶PD)卡的无线接口通信。系统5021可与局域网(LAN)或广域网(WAN)中的这些其他计算机相关联,或系统5021可为具有另一计算机的用户端/服务器配置中的用户端等。所有这些组态以及适当通信硬件及软件为此项技术中已知的。
[0202]图16说明可实践本发明的一个或多个方面的一数据处理网络5040。数据处理网络5040可包括多个个别网络(诸如,无线网络及有线网络),这些网络中的每一个可包括多个个别工作站5041、5042、5043、5044。另外,如本领域的技术人员将了解,可包括一个或多个LAN,其中LAN可包含耦接至主机处理器的多个智能工作站。
[0203]仍参看图16,网络亦可包括大型计算机或服务器,诸如,网关计算机(客户端服务器5046)或应用程序服务器(远端服务器5048,其可存取数据储存库且亦可自工作站5045直接存取)。网关计算机5046充当至每一个别网络的入口点。当将一网络连接协定连接至另一网络连接协定时,需要网关。网关5046可较佳借助于通信链路耦接至另一网络(例如,网际网络5047)。亦可使用通信链路将网关5046直接耦接至一个或多个工作站5041、5042、5043、5044。可利用可购自国际商业机器公司的IBM eServer? System z服务器来实施网关计算机。
[0204]同时参看图15及图16,可体现本发明的一个或多个方面的软件代码可由系统5020的处理器5026自长期储存介质5027(诸如,⑶-ROM驱动器或硬盘驱动器)存取。软件代码可体现于多种已知介质中的任一者上,以用于供数据处理系统(诸如,磁盘、硬盘或⑶-ROM)使用。代码可散布于这些介质上,或可散布至使用者5050、5051,经由网络自一计算机系统的存储器或储存器散布至其他计算机系统,以供这些其他系统的使用者使用。
[0205]或者,代码可体现于存储器5025中,且由处理器5026使用处理器总线来存取。此代码包括一操作系统,其控制各种计算机组件及一个或多个应用程序5032的功能及互动。通常将代码自储存介质5027分页至高速存储器5025,在高速存储器5025处,代码可用于由处理器5026处理。用于在存储器中、在实体介质上体现软件代码和/或经由网络散布软件代码的技术及方法是熟知的且在本文中将不进一步加以论述。当在有形介质(包括(但不限于)电子存储器模块(RAM)、快闪存储器、光盘(CD)、DVD、磁带及其类似者)上建立及储存代码时,代码常常被称作“计算机程序产品”。计算机程序产品介质通常可由较佳计算机系统中的处理电路来读取,以用于由处理电路执行。
[0206]最易于可用于处理器的高速缓存(通常比处理器的其他高速缓存快且小)为最低(LI或第一层级)高速缓存,且主储存器(主存储器)为最高层级高速缓存(若存在3个层级,则为L3)。常常将最低层级高速缓存划分成保持待执行的机器指令的指令高速缓存(1-高速缓存)及保持数据运算元的数据高速缓存(D-高速缓存)。
[0207]参看图17,针对处理器5026描绘一例示性处理器实施例。通常,使用高速缓存5053的一个或多个层级缓冲存储器区块以便改良处理器效能。高速缓存5053为保持有可能使用的存储器数据的高速缓存行的高速缓冲器。典型的高速缓存行为64个、128个或256个字节的存储器数据。除用于对数据进行高速缓存外,单独的高速缓存亦常常用于对指令进行高速缓存。常常藉由此项技术中熟知的各种“窥探”演算法来提供高速缓存一致性(存储器及高速缓存中的行的复制的同步)。处理器系统的主存储器储存器5025常常被称作高速缓存。在具有4个层级的高速缓存5053的处理器系统中,主储存器5025有时被称作第5层级(L5)高速缓存,这是因为其通常较快且仅保持可用于计算机系统的非易失性储存器(DASD、磁带等)的一部分。主储存器5025对由操作系统页入及页出主储存器5025的数据页“进行高速缓存”。
[0208]程序计数器(指令计数器)5061追踪待执行的当前指令的地址。z/Architecture处理器中的程序计数器为64个位,且可经截断至31或24个位以支持先前寻址限制。程序计数器通常体现于计算机的程序状态字(PSW)中,使得程序计数器在内容脉络切换期间持续。因此,具有程序计数器值的进行中程序可由(例如)操作系统来中断(自程序环境至操作系统环境的内容脉络切换)。在程序并非作用中之时,程序的PSW维持程序计数器值,且在操作系统正执行时,使用操作系统的程序计数器(在PSW中)。通常,以等于当前指令的字节的数目的量来使程序计数器递增。精简指令集计算(RISC)指令的长度通常为固定的,而复杂指令集计算(CISC)指令的长度通常为可变的。IBMz/Architecture的指令为长度为2个、4个或6个字节的CISC指令。举例而言,藉由内容脉络切换操作或分支指令的分支选取操作来修改程序计数器5061。在内容脉络切换操作中,将当前程序计数器值连同关于正执行的程序的其他状态信息(诸如,条件码)一起保存于程序状态字中,且载入新程序计数器值从而指向待执行的新程序模块的指令。执行分支选取操作以便藉由将分支指令的结果载入至程序计数器5061中而准许程序作出决策或在程序内循环。
[0209]通常,指令提取单元5055用以代表处理器5026提取指令。提取单元提取“接下来的依序指令”、分支选取指令的目标指令或程序的第一指令(在内容脉络切换之后)。现代指令提取单元常常使用预先提取技术以基于可能使用经预先提取的指令的可能性而推测性地预先提取指令。举例而言,提取单元可提取包括下一个依序指令的指令的16个字节及其他依序指令的额外字节。
[0210]接着由处理器5026执行所提取的指令。在一实施例中,将所提取的指令传递至提取单元的分派单元5056。分派单元解码指令且将关于经解码的指令的信息转递至适当单元5057、5058、5060。执行单元5057通常将自指令提取单元5055接收关于经解码的算术指令的信息,且将根据指令的运算码对运算元执行算术运算。优选地,自存储器5025、经建构的寄存器5059或自正执行的指令的立即字段,将运算元提供至执行单元5057。当储存执行的结果时,将执行的结果储存于存储器5025、寄存器5059中或其他机器硬件(诸如,控制寄存器、PSW寄存器及其类似者)中。
[0211]处理器5026通常具有用于执行指令的功能的一个或多个单元5057、5058、5060。参看图18A,执行单元5057可借助于接口逻辑5071与经建构的通用寄存器5059、解码/分派单元5056、载入储存单元5060及其他处理器单元5065通信。执行单元5057可使用若干个寄存器电路5067、5068、5069以保持算术逻辑单元(ALU) 5066将进行运算的信息。ALU执行算术运算(诸如,加法、减法、乘法及除法)以及逻辑函数(诸如,“与”(and)、“或”(or)及“异或”(XOR)、旋转及移位)。优选地,ALU支持相依于设计的专业化运算。其他电路可提供其他经建构的设施5072,包括(例如)条件码及恢复支持逻辑。通常,将ALU运算的结果保持于输出寄存器电路5070中,输出寄存器电路5070可将结果转递至多种其他处理功能。存在处理器单元的许多配置,本发明描述仅意欲提供对一实施例的代表性理解。
[0212]“加法”指令(例如)将在具有算术及逻辑功能性的执行单元5057中执行,而浮点指令(例如)将在具有专业化的浮点能力的浮点执行中执行。优选地,执行单元藉由对藉由指令识别的运算元执行运算码定义的功能而对运算元进行运算。举例而言,“加法”指令可由执行单元5057对在藉由指令的寄存器字段识别的两个寄存器5059中发现的运算元执行。
[0213]执行单元5057对两个运算元执行算术加法,且将结果储存于第三运算元中,其中第三运算元可为第三寄存器或两个源寄存器中之一。执行单元优选地利用算术逻辑单元(ALU) 5066,算术逻辑单元(ALU) 5066能够执行多种逻辑函数(诸如,移位、旋转、“与”(And)、“或”(Or)及“异或”(XOR))以及多种代数函数(包括加法、减法、乘法、除法中的任一者)。一些ALU 5066经设计以用于标量运算且一些ALU 5066经设计以用于浮点运算。取决于架构,数据可为大端序(Big Endian)(其中最低有效字节处于最高字节地址)或小端序(Little Endian)(其中最低有效字节处于最低字节地址)。IBM z/Architecture为大端序。取决于架构,带正负号的字段可为正负号及量值(I的补数或2的补数)。2的补数是有利的,此在于=ALU并不需要设计减法能力,这是由于在ALU中,2的补数中的负值或正值仅需要加法。通常以速记法来描述数字,其中12位字段定义4,096字节区块的地址,且通常描述为(例如)4Kbyte (千字节)区块。
[0214]参看图18B,用于执行分支指令的分支指令信息通常发送至分支单元5058,分支单元5058常常使用分支预测演算法(诸如,分支历史表5082)以在其他条件运算完成的前预测分支的结果。将提取当前分支指令的目标,且在条件运算完成的前推测性地执行当前分支指令的目标。当完成条件运算时,基于条件运算的条件及所推测的结果,完成或放弃推测性执行的分支指令。典型分支指令可测试条件码,且在条件码满足分支指令的分支要求的情况下分支至目标地址,可基于(例如)在寄存器字段或指令的立即字段中发现的若干个数字(包括一)而计算目标地址。分支单元5058可使用具有多个输入寄存器电路5075、5076、5077及一输出寄存器电路5080的一 ALU 5074。举例而言,分支单元5058可与通用寄存器5059、解码分派单元5056或其他电路5073通信。
[0215]一指令群组的执行可因包括(例如)以下各者的多种原因而被中断:由操作系统起始的内容脉络切换、引起内容脉络切换的程序例外状况或错误、弓I起内容脉络切换的I/O中断信号,或多个程序的多线程活动(在多线程环境中)。优选地,内容脉络切换动作保存关于当前正执行的程序的状态信息,且接着载入关于正被调用的另一程序的状态信息。举例而言,可将状态信息保存于硬件寄存器中或存储器中。状态信息较佳包含指向待执行的下一个指令的程序计数器值、条件码、存储器转译信息及经建构的寄存器内容。内容脉络切换活动可单独或组合地藉由硬件电路、应用程序、操作系统程序或固件代码(微码、微微码或经授权内部码(LIC))来训练。
[0216]处理器根据指令定义的方法来存取运算元。指令可使用指令的一部分的值来提供立即运算元,可提供明确指向通用寄存器或专用寄存器(例如,浮点寄存器)的一个或多个寄存器字段。指令可利用藉由运算码字段识别为运算元的隐含的寄存器。指令可将存储器位置用于运算元。运算元的存储器位置可由寄存器、立即字段或寄存器与立即字段的组合来提供,如藉由z/Architecture长位移设施(long displacement facility)举例说明,其中指令定义(例如)相加在一起以提供运算元在存储器中的位置的一基础寄存器、一索引寄存器及一立即字段(位移字段)。除非另有指示,否则本文中的位置通常隐含主存储器(主储存器)中的位置。
[0217]参看图18C,处理器使用载入/储存单元5060来存取储存器。载入/储存单元5060可藉由获得目标运算元在存储器5053中的地址且在寄存器5059或另一存储器5053的位置中载入运算元来执行载入操作,或可藉由获得目标运算元在存储器5053中的地址且将自寄存器5059或另一存储器5053的位置获得的数据储存于存储器5053中的目标运算元位置中来执行储存操作。载入/储存单元5060可为推测性的,且可以相对于指令序列而言无序的序列存取存储器,然而,载入/储存单元5060对于程序维持按次序执行指令的显现。载入/储存单元5060可与通用寄存器5059、解码/分派单元5056、高速缓存/存储器接口 5053或其他元件5083通信,且包含各种寄存器电路、ALU 5085及控制逻辑5090以计算储存地址且提供管线定序以保持操作按次序。一些操作可能为无序的,但载入/储存单元提供使得无序操作对于程序显现为已按次序执行的功能性,如此项技术中所熟知的那样。
[0218]优选地,应用程序“看见”的地址常常被称作虚拟地址。虚拟地址有时被称作“逻辑地址”及“有效地址”。这些虚拟地址为虚拟的在于:其藉由多种动态地址转译(DAT)技术中的一者而重新导向至实体存储器位置,该等DAT技术包括(但不限于)仅对虚拟地址加偏移值作为前缀、经由一个或多个转译表转译虚拟地址,转译表较佳地单独或组合地包含至少一段表及一页表,优选地,段表具有指向页表的项目。在z/Architecture中,提供转译阶层,包括区第一表、区第二表、区第三表、段表及选用的页表。常常藉由利用转译后备缓冲器(TLB)(其包含将虚拟地址映射至相关联的实体存储器位置的项目)来改良地址转译的效能。当DAT使用转译表转译虚拟地址时,建立该等项目。虚拟地址的随后使用可接着利用快速TLB的项目,而非缓慢依序转译表存取。可藉由包括最近最少使用(LRU)的多种替换演算法来管理TLB内容。
[0219]在处理器为多处理器系统的处理器的状况下,每一处理器具有保持诸如I/O、高速缓存、TLB及存储器的共用资源互锁以达成一致性的责任。通常,在维持快取一致性中将利用“窥探”技术。在窥探环境中,可将每一高速缓存行标记为处于以下状态中的任一者以便促进共享:共用状态、互斥状态、改变的状态、无效状态及其类似者。
[0220]I/O单元5054(图17)为处理器提供用于附接至周边器件(例如,包括磁带、光盘、打印机、显示器及网络)的构件。I/o单元常常由软件驱动程序呈现至计算机程序。在大型计算机(诸如,来自IBM?的SyStem z)中,通道适配器及开放系统适配器为大型计算机的I/O单元,这些I/O单元提供操作系统与周边器件之间的通信。
[0221]另外,其他类型的计算环境可受益于本发明的一个或多个方面。作为一实例,环境可包括一模拟器(例如,软件或其他模拟机制),在该模拟器中模拟一特定架构(包括(例如)指令执行、经建构的功能(诸如,地址转译),及经建构的寄存器)或其一子集(例如,在具有一处理器及存储器的本地计算机系统上)。在此环境中,模拟器的一或多个模拟功能可实施本发明的一个或多个方面,即使执行该模拟器的计算机可具有不同于正模拟的能力的架构亦如此。作为一实例,在模拟模式下,解码特定指令或正模拟的操作,且建置一适当模拟功能以实施个别指令或操作。
[0222]在一模拟环境中,主机计算机包括(例如):一存储器,其储存指令及数据;一指令提取单元,其自存储器提取指令且视情况提供所提取的指令的本端缓冲;一指令解码单元,其接收所提取的指令且判定已提取的指令的类型;及一指令执行单元,其执行这些指令。执行可包括:将数据自存储器载入至寄存器中;将数据自寄存器储存回至存储器;或执行某一类型的算术或逻辑运算(如由解码单元判定)。在一实例中,以软件来实施每一单元。举例而言,将正由这些单元执行的操作实施为模拟器软件内的一或多个副例程。
[0223]更明确而言,在大型计算机中,经建构的机器指令常常借助于编译应用程序而由程序设计师(现今通常为“C”程序设计师)使用。储存于储存介质中的这些指令可本地地在z/Architecture IBM?服务器中或者在执行其他架构的机器中执行。可在现有及未来IBM?大型计算机服务器中及在IBM?的其他机器(例如,Power Systems服务器及
System X?服务器)上模拟这些指令。可于在使用由?βΜ气Intel?> AMD?及其他者制造的硬件的广泛多种机器上执行Linux的机器中执行这些指令。除了在z/Architecture下在该硬件上执行外,亦可使用Linux,以及使用由Hercules、UMX或FSI (FundamentalSoftware, Inc)进行的模拟的机器,其中执行大体上处于模拟模式下。在模拟模式下,由本地处理器执行模拟软件以模拟经模拟的处理器的架构。
[0224]本地处理器通常执行包含固件或本地操作系统的模拟软件以执行经模拟的处理器的模拟。模拟软件负责提取及执行经模拟的处理器架构的指令。模拟软件维持经模拟的程序计数器以追踪指令边界。模拟软件可一次提取一或多个经模拟的机器指令,且将该一个或多个经模拟的机器指令转换至一对应的本地机器指令群组,以用于由本地处理器执行。可对这些经转换的指令进行高速缓存,使得可实现较快速转换。尽管如此,模拟软件仍将维持经模拟的处理器架构的架构规则以便确保操作系统及针对经模拟的处理器撰写的应用程序正确地操作。此外,模拟软件将提供藉由经模拟的处理器架构识别的资源(包括(但不限于)控制寄存器、通用寄存器、浮点寄存器、包括(例如)段表及页表的动态地址转译功能、中断机制、内容脉络切换机制、当日时间(TOD)时钟及至I/O子系统的经建构的接口),使得操作系统或经设计以在经模拟的处理器上执行的应用程序可在具有模拟软件的本地处理器上执行。
[0225]解码正进行模拟的特定指令,且调用副例程以执行个别指令的功能。模拟经模拟的处理器的功能的模拟软件功能系(例如)按以下各者来实施:“C”副例程或驱动程序,或在理解较佳实施例的描述之后将在本领域的技术人员的技术内的提供用于特定硬件的驱动程序的某一其他方法。包括(但不限于)以下各者的各种软件及硬件模拟专利说明达成针对不同机器建构的指令格式用于可用于本领域的技术人员的目标机器的模拟的多种已知方式:Beausoleil 等人的题为“Multiprocessor for Hardware Emulat1n” 的美国专利证书第 5,551,013 号;及 Scalzi 等人的题为“Preprocessing of Stored Target Routinesfor Emulating Incompatible Instruct1ns on a Target Processor,,的美国专利证书第 6,009,261 号;及 Davidian 等人的题为 “Decoding Guest Instruct1n to DirectlyAccess Emulat1n Routines that Emulate the Guest Instruct1ns,,的美国专利证书第5,574,873 号;及 Gorishek等人的题为“Symmetrical Multiprocessing Bus and ChipsetUsed for Coprocessor Support Allowing Non-Native Code to Run in a System,,的美国专利证书第6,308,255号;及Lethin等人的题为“Dynamic Optimizing ObjectCode Translator for Architecture Emulat1n and Dynamic Optimizing Object CodeTranslat1n Method”的美国专利证书第 6,463,582 号;及Eric Traut 的题为“Method forEmulating Guest Instruct1ns on a Host Computer Through Dynamic Recompilat1nof Host Instruct1ns”的美国专利证书第5,790,825号(前述专利证书中的每一者在此以其全文引用的方式并入本文中);及许多其他专利证书。
[0226]在图19中,提供经模拟的主机计算机系统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’的功能。
[0227]本文中所使用的术语仅用于描述特定实施例的目的,且并不意欲为本发明的限制。如本文中所使用,除非上下文另有清晰指示,否则单数形式“一”及“该”意欲亦包括复数形式。应进一步理解,当术语“包含”用于此说明书中时,其指定所叙述特征、整数、步骤、操作、元件和/或组件的存在,但并不排除一或多个其他特征、整数、步骤、操作、元件、组件和/或其群组的存在或添加。
[0228]以下申请专利范围中的所有构件或步骤加功能元件的对应结构、材料、动作及等效物(若有的话)意欲包括用于结合如特别主张的其他所主张元件执行功能的任何结构、材料或动作。已出于说明及描述的目的呈现本发明的一个或多个方面的描述,但该描述并不意欲为详尽的或限于所揭示的形式下的本发明。在不脱离本发明的范畴及精神的情况下,许多修改及变化对于一般熟习此项技术者将为显而易见的。选择并描述了实施例以便最佳地解释本发明的原理及实务应用,且使其他一般熟习此项技术者能够针对具有如适合于所预期的特定用途的各种修改的各种实施例来理解本发明。
[0229]第23章向量字串指令
[0230]向量字串设施
[0231]—
[0232]指令
[0233]除非另有指定,否则所有运算元为向量寄存器运算元。汇编器语法中的“V”指明向量运算元。
[0234]
Mne-Op-
NamemonicCNiracIef^Iicscode Rige
V函涵—涵AL......................................................................VFAE...............' c.......Vi "p..................SPpv....................................................................1....................j..........................HF 23T?
VECTO fim ELEMENT EOUAiVFEE V嶋 CT W ^ SP DvE7_ 23-2
VECTOR PMB ELEMENT EQUAL.VFENE VRR-D C* Vf Si SP OvE781 23-3
VECTOR STBJMG 議G£ COMPMEVSTBC VflR*d Cf VF S3 SP DvjE78A 23-4
[0235]向量寻找任何相等
[0236]
VFAE VllVaiVg1M4lM5p/RR-b|
?7' I V1 I V2 I V3 \1U\ M51////| M4 IRXBI I?
§β 12 1β?24332? 4047
[0237]自左至右进行,比较第二运算元的每个不带正负号的二进位整数元素与第三运算元的每个不带正负号的二进位整数元素的相等性,且若在Μ5字段中设定了零搜寻标志,则视情况与零比较。
[0238]若M5字段中的结果类型(RT)标志为零,则对于匹配第三运算元中的任一元素或视情况匹配零的第二运算元中的每一元素,将第一运算元中对应的元素的位位置设定至一,否则,将其设定至零。
[0239]若M5字段中的结果类型(RT)标志为一,则将匹配第三运算元中的一元素或零的第二运算元中的最左侧元素的字节索引储存于第一运算元的字节七中。
[0240]每一指令具有扩展的助忆符号区段,其描述推荐的扩展的助忆符号及其对应的机器汇编器语法。
[0241]编程注释:对于视情况设定条件码的所有指令,若设定条件码,则性能可能降级。
[0242]若M5字段中的结果类型(RT)标志为一且未发现字节相等,或为零(若设定了零搜寻标志),则将与向量中的字节的数目相等的索引储存于第一运算元的字节七中。
[0243]M4字段指定元素大小控制(ES)。ES控制指定向量寄存器运算元中的元素的大小。若指定保留值,则辨识到规范例外状况。
[0244]O-字节
[0245]1-半字
[0246]2-字
[0247]3 至 15-保留
[0248]M5字段具有以下格式:
[0249]





JLnm Vi/
012 3
[0250]如下定义M5字段的位:
[0251].结果类型(RT):若为零,则每一所得元素为关于该元素的所有范围比较的屏蔽。若为一,则将字节索引储存至第一运算元的字节七中,且将零储存于所有其他元素中。
[0252].零搜寻(ZS):若为一,则亦将第二运算元的每一元素与零比较。
[0253].条件码设定(CC):若为零,则不设定条件码且条件码保持不变。若为一,则如以下段中所指定来设定条件码。
[0254]特殊条件
[0255]若出现以下各者中的任一者,则辨识规范例外状况且不采取其他行动:
[0256]1.M4字段含有自3至15的值。
[0257]2.M5字段的位O并非零。
[0258]所得条件码:
[0259]若CC标志为零,则码保持不变。
[0260]若CC标志为一,则如下来设定码:
[0261]O若设定了 ZS-位,则在第二运算元中比零低的索引元素中不存在匹配。
[0262]I第二运算元的一些元素匹配第三运算元中的至少一元素。
[0263]2第二运算元的所有元素匹配第三运算元中的至少一元素。
[0264]3第二运算元中无元素匹配第三运算元中的任何元素。
[0265]程序例外状况:
[0266]I具有DXC FE的数据,向量寄存器
[0267].在未安装向量扩展设施的情况下的操作
[0268].规范(保留的ES值)
[0269].事务约束
[0270]扩充的助忆符号:
[0271]
VFAEB VhV25V3jM5VFAl¥,?¥2,¥j,0?Mi
YFAEH V1HM5WAE VbV2, V3,1,M5
VFAEF YbY25V3iM5VFAEVbV2jV3^5M5
VFAEBS VuV2jV3jM5WAEVbV2sV3A(M5IXT)
VFAEHS VbV2jV3iMsVFAE VuV^V3,1,(M51 XT)
VFAEFS VbV2jV3sMjVFAE Yi5V2jV3,2,(M51 TV)
VFAEZB VbV25V35M5VFAEVljV2jV3jOj(M5IXtJ)
VFAEZH VlsV2,V3sM5VFAEVbV2jV^ls(M5IXT)
VFAEZF Vl5V2iV3lMsVFAEV15Y2jV3A(M5IXT)
YFAEZBS Vi,V2,V3, M5VFAE VbV2jV3A(MsIXgt)
VFAEZHS Vi,V2jV3jM5WAE V“V2,V3,1 ,(M5 j X'3*)
VFAEZFS VuV2jV3jM5VFAE Vi5V2jV3,2,(M51 Χ*3')
[0272]向量寻找元素相等
[0273]

VFEE V11V2lV3lM4fM5

I "?τ I V11 v2 I V3 \?ι\ μ5 |////| M4 |rxb| w
§I 12 16 20 24 28 32 ? ?4?
[0274]自左至右进行,将第二运算元的不带正负号的二进位整数元素与第三运算元的对应的不带正负号的二进位整数元素比较。若两个元素相等,则将最左侧相等元素的第一字节的字节索引置放于第一运算元的字节七中。将零储存于第一运算元的剩余字节中。若未发现字节相等,或若未发现字节为零(若设定了零比较),则将与向量中的字节的数目相等的索引储存于第一运算元的字节七中。将零储存于剩余字节中。
[0275]若在M5字段中设定了零搜寻(ZS)位,则亦比较第二运算元中的每一元素与零的相等性。若在发现第二运算元及第三运算元的任何其他元素相等之前在第二运算元中寻找到零元素,则将发现为零的元素的第一字节的字节索引储存于第一运算元的字节七中,且将零储存于所有其他字节位置中。若条件码设定(CC)标志为一,则将条件码设定至零。
[0276]M4字段指定元素大小控制(ES)。ES控制指定向量寄存器运算元中的元素的大小。若指定保留值,则辨识到规范例外状况。
[0277]O-字节
[0278]1-半字
[0279]2-字
[0280]3 至 15-保留
[0281]M5字段具有以下格式:
[0282]

JJzIc

I |s|c

0 12 3
[0283]如下定义M5字段的位:
[0284].保留:保留位O至I且位O至I必须为零。否则,辨识到规范例外状况。
[0285].零搜寻(ZS):若为一,则亦将第二运算元的每一元素与零比较。
[0286].条件码设定(CC):若为零,则条件码保持不变。若为一,则如在以下段中所指定来设定条件码。
[0287]特殊条件
[0288]若出现以下各者中的任一者,则辨识规范例外状况且不采取其他行动:
[0289]1.M4字段含有自3至15的值。
[0290]2.]?5字段的位O至I并非零。
[0291]所得条件码:
[0292]若将M5字段的位3设定至一,则如下设定码:
[0293]O 若设定了零比较位,则比较在具有比任何相等比较更小的索引的元素中侦测到第二运算元中的零元素。
[0294]I比较在一些元素中侦测到第二运算元与第三运算元之间的匹配。若设定了零比较位,则此匹配出现于具有小于或等于零比较元素的索引的元素中。
[0295]2 —
[0296]3无元素比较起来相等。
[0297]若M5字段的位3为零,则码保持不变。
[0298]程序例外状况:
[0299].具有DXC FE的数据,向量寄存器
[0300].在未安装向量扩展设施的情况下的操作
[0301].规范(保留的ES值)
[0302].事务约束
[0303]扩展的助忆符号:
[0304]

【权利要求】
1.一种用于判定一组数据的长度的方法,包含: 将在存储器的一指定区块内的数据自存储器载入至一寄存器,该数据为将要判定长度的该组数据的至少一部分; 获得载入于该寄存器中的数据量的一计数; 由一处理器判定载入于该寄存器中的该数据的一终止值,该判定包含检查该数据以判定该寄存器是否包括一终止字符,且基于该寄存器包括一终止字符,将该终止值设定为该终止字符的位置,且基于该寄存器不包括该终止字符,将该终止值设定为一预先指定值; 基于该计数及该终止值中的至少一个而检查是否存在待计数的额外数据; 基于该检查指示将对额外数据计数,基于该额外数据使该计数递增,该计数提供该组数据的该长度 '及 基于该检查指示将不对额外数据计数,使用该计数作为该组数据的长度。
2.如权利要求1所述的方法,其中所述检查包含:比较该计数与该终止值以判定是否将对额外数据计数。
3.如权利要求1或2所述的方法,其中所述获得该计数包含:使用在存储器的该区块内的一开始地址及存储器的该区块的一边界来计算该计数。
4.如前述任一权利要求所述的方法,其中该数据包含多个数据单位,该多个数据单位并行地载入于该寄存器中,且其中该检查并行地执行。
5.如前述任一权利要求所述的方法,其中该载入藉由一“向量载入至区块边界”指令来执行,且存储器的该区块为以下各情形中之一:藉由该“向量载入至区块边界”指令来指定,或由执行该“向量载入至区块边界”指令的一处理器来动态地判定。
6.如前述任一权利要求所述的方法,其中所述获得该计数包含:使用一“载入计数至区块边界”指令。
7.如前述任一权利要求所述的方法,其中所述判定一终止值包含:使用一“向量寻找元素不相等”指令,且该位置包含该寄存器内的一字节索引。
8.如前述任一权利要求所述的方法,其中该终止字符包含零或空值字符。
9.如前述任一权利要求所述的方法,其中该组数据的该长度使用至多一个分支指令来判定,且其中该载入在不交叉存储器的该区块的边界的情况下执行。
10.如权利要求1所述的方法,其中该方法进一步包含获得计算机代码以判定该长度,该计算机代码包括执行该载入的一“向量载入至区块边界”指令、获得该计数的一“载入计数至区块边界”指令,及判定该终止值的一 “向量寻找元素不相等”指令。
11.一种用于判定一组数据的长度的计算机系统,该计算机系统包含:一存储器 '及 一处理器,其与该存储器通信,其中该计算机系统被配置为执行前述任一权利要求所述的方法。
12.一种用于确定一组数据的长度的计算机程序产品,所述计算机程序产品包括: 计算机可读存储介质,能够由处理电路读取,并且存储用于由所述处理电路执行的指令,以执行权利要求1到10中的任一个所述的方法。
【文档编号】H03M7/40GK104170259SQ201380014258
【公开日】2014年11月26日 申请日期:2013年3月1日 优先权日:2012年3月15日
【发明者】J.D.布拉德伯里, M.K.格施温德, T.斯雷格 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1