CN102007469A - 用以加速空终止字符串操作的方法 - Google Patents
用以加速空终止字符串操作的方法 Download PDFInfo
- Publication number
- CN102007469A CN102007469A CN2009801135821A CN200980113582A CN102007469A CN 102007469 A CN102007469 A CN 102007469A CN 2009801135821 A CN2009801135821 A CN 2009801135821A CN 200980113582 A CN200980113582 A CN 200980113582A CN 102007469 A CN102007469 A CN 102007469A
- Authority
- CN
- China
- Prior art keywords
- register
- byte
- register value
- value
- coupling
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 91
- 230000008878 coupling Effects 0.000 claims description 65
- 238000010168 coupling process Methods 0.000 claims description 65
- 238000005859 coupling reaction Methods 0.000 claims description 65
- 230000006870 function Effects 0.000 description 11
- 238000005457 optimization Methods 0.000 description 6
- 101100491149 Caenorhabditis elegans lem-3 gene Proteins 0.000 description 2
- 230000002457 bidirectional effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000013011 mating Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/02—Comparing digital values
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Physics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
一种方法读取且比较第一与第二寄存器值,每一寄存器值具有至少两个字节的大小。如果出现以下情况,则第三寄存器指示匹配:(1)所述第一寄存器值中的字节等于(或另一选择为,不等于)所述第二寄存器值中的对应字节,或(2)如果所述第一寄存器值中的字节为零。接下来,将第四寄存器值设定为以下各项中的一者:(1)如果所述第一与第二寄存器值中的对应字节相等(或另一选择为,不相等),则为匹配字节的计数,或(2)如果所述第一与第二寄存器值中的所述对应字节不相等(或另一选择为,相等),则为0与n-1之间的范围之外的数。所述值n为等于所述第一与第二寄存器值中的字节数的整数。
Description
相关申请案的交叉参考
此美国专利申请案是首次申请的专利申请案且优先权上不依赖任何其它专利申请案。
技术领域
如所属领域的技术人员应了解,一些编程语言(包含C及C++语言)产生空终止字节串。本发明通过提议一指令族以加速处理标准串函数来利用C及C++编程语言的此特性。
背景技术
如所属领域的技术人员应明了,C及C++编程语言产生为空终止字符的标准串。空终止字节串是其中串的末尾是用0字节指示的串。
当处理串时,某些密钥核的性能可确定整个应用程序的性能。所述函数通常是标准库(具体来说,ISO C标准的章节7.21)中所定义的函数,例如:(1)strlen函数,(2)strcmp函数,(3)strcpy函数及(4)strchr函数。
执行所述函数中的任一者可均需要大量处理器时间。因此,此项技术中需要有助于减少处理时间的方法。
发明内容
本发明提供用以减少某些指令的总处理时间的至少两种方法。
具体来说,本发明至少部分地基于由除其它之外的C及C++编程语言产生的选定字节串的空终止字符。
本发明提议由于空终止字符串而准许加速所述函数的最小指令集。换句话说,本发明的一个方面认识到空终止字符串的存在且利用所述空终止字符串。在这样做时,本发明增加处理速度及效率。
在本发明的一个所提议指令集中,本发明提供包含读取第一及第二寄存器值的方法,所述第一及第二寄存器值两者在长度上至少为两个字节。在此方法中,所述第一与第二寄存器值具有相同字的节数。因此,将所述第一寄存器值的字节与所述第二寄存器值的字节相比较是简单的任务。在比较所述第一与第二寄存器值之后,如果出现以下情况所述方法将第三寄存器设定为指示匹配:(1)所述第一寄存器值中的字节等于所述第二寄存器值中的对应字节,或(2)如果所述第一寄存器值中的字节为零。另外,所述方法将第四寄存器值设定为:(1)如果所述第一寄存器值中的所述字节等于所述第二寄存器值中的所述对应字节,则为匹配字节的计数,或(2)如果所述第一寄存器值中的所述字节不等于所述第二寄存器值中的所述对应字节时,则为包括0与n-1之间的数的值范围之外的数。如应明了,n为对应于所述第一与第二寄存器值中的字节数的整数。
在此方法的替代方案中,本发明还提供其中读取第一及第二寄存器值的方法,所述第一与第二寄存器值两者在长度上至少为两个字节。如在所述第一实例中,预期所述第一与第二寄存器值为相同长度。将所述第一寄存器值的所述字节与所述第二寄存器值的所述字节相比较。如果出现以下情况将第三寄存器设定为指示匹配:(1)所述第一寄存器值中的字节不等于所述第二寄存器值中的对应字节,或(2)所述第一寄存器值中的字节为零。将第四寄存器值设定为(1)如果所述第一寄存器值中的所述字节不等于所述第二寄存器值中的所述对应字节,则为匹配字节的计数,或(2)如果所述第一寄存器值中的字节等于所述第二寄存器值中的所述对应字节,则为包括0与n-1之间的数的值范围之外的数。如前所述,n为对应于所述第一与第二寄存器中的任一者中的字节数的整数。
本发明还提供如果所述处理器是高字节置前,则从最高有效字节到最低有效字节比较所述第一寄存器值与所述第二寄存器值的所述字节。
本发明的另一方面提供如果所述处理器为低字节置前,则从最低有效字节到最高有效字节比较所述第一寄存器值与所述第二寄存器值的所述字节。
关于所述第三寄存器,本发明的一个方面是将所述第三寄存器提供为具有一个位的条件旗标寄存器。
本发明进一步提供所述第三寄存器为具有多于一个位的条件寄存器。在此实例中,可将所述第三寄存器的数个位中的一个位设定为指示所述匹配。
本发明的又一方面提供所述第三寄存器可以为包括数个位的条件寄存器。在此变化形式中,相依于所述第一寄存器值中的所述字节是等于所述第二寄存器值中的所述对应字节还是所述第一寄存器值中的第一字节为零,所述第三寄存器可保留不同值。
关于所述第四寄存器值,如果所述第一寄存器值中的所述字节不等于所述第二寄存器值中的所述对应字节,则本发明准许将所述值设定为-1。
本发明的另一方面提供同时设定所述第三及第四寄存器值。
本发明的一个进一步方面提供至少两个单独寄存器与所述处理器协作来执行所述方法。
本发明的又一方面预期所述处理器可以预定字节边界开始往寄存器中加载。
在另一变化形式中,将所述第一寄存器值的所述字节仅与所述第二寄存器值的最低字节相比较。
在又一进一步变化形式中,本发明包含如果不指示匹配,则修改所述第三寄存器。
在本发明的另一方面中,所述第三寄存器可以为包含一个位的条件旗标寄存器,当指示所述匹配时可设定所述一个位。另一选择为,当不指示所述匹配时,可清除所述位。
本发明的一个方面提供其中所述第三寄存器为具有一个位的条件旗标寄存器的方法,当指示所述匹配时可清除所述一个位。另一选择为,当指示所述匹配时,可设定所述位。
在本发明的另一方面中,所述第三寄存器可以为具有多个位的条件寄存器。当指示所述匹配时,可设定所述多个位中的一个位,或当不指示所述匹配时,可清除所述位。
在本发明的又一方面中,所述第三寄存器可以为具有数个位的条件寄存器。当指示所述匹配时,可清除所述数个位中的一个位。另一选择为,当不指示所述匹配时,可设定所述位。
从以下论述将明了本发明的又进一步方面。
附图说明
现在将结合随附的图式描述本发明,所述图式中:
图1是本发明方法的第一实施例的第一部分;
图2是图1中所图解说明的方法的第一实施例的第二部分;
图3是本发明方法的第二实施例的第一部分;且
图4是图1中所图解说明的方法的第二实施例的第二部分。
具体实施方式
现在将结合各种所预期实施例描述本发明。所述实施例打算对本发明进行说明且未对本发明的范围加以任何限制。因此,如所属领域的技术人员应了解,存在可在不背离本发明的范围及精神的情形下采用的众多变化形式及等效内容。所述变化形式及等效内容中的每一者也打算由本发明的范围囊括。
出于描述本发明的目的,已进行了数种假设。第一,假设处理器中的指令能够同时设定寄存器及条件旗标或位。第二,假设处理器中的指令能够读取至少2个单独寄存器。第三,假设处理器具有多字节寄存器(例如32位寄存器)。第四,假设处理器可在任何字节边界处开始往寄存器中加载。此第四假设对于实施本发明并不是必须的。然而,此第四假设极大地简化了对本发明的说明,如下文显而易见。
对于本发明,提议两种指令。第一种指令称为ffzbe指令。第二种指令称为ffzbn指令。字母“ffzbe”打算指代“找到首位零或字节相等”。字母“ffzbn”打算指代“找到首位零或字节不相等”。当然,对于所述指令的名字的选择对于本发明并不重要。可选择任何其它名字,此并不背离本发明的范围。
ffzbe指令
ffzbe指令包含以下操作:(1)读取两个寄存器值,RA及RB,(2)写入寄存器值RT及条件位/旗标,(3)相依于处理器是高字节置前还是低字节置前,从最高有效字节(“MSB”)到最低有效字节(“LSB”)或从LSB到MSB检查字节RA及RB,(4)如果RA中的字节的值为零或等于RB的对应字节,则将条件位中的标记或旗标设定为指示匹配,(5)如果第一匹配是相等字节的匹配,则将RT设定为匹配字节的计数,及(6)否则,将RT的值设定为在范围0、...num_bytes_in_register-1之外的值。一个此类选择是-1。
下面在码段#1中阐述针对此指令的伪C。关于码段#1,已进行了数种假设。第一,假设处理器使用条件位且所述指令总是将所述条件位设定/清除为零。第二,假设寄存器宽度为4个字节。第三,假设处理器是高字节置前。在所述假设下,下面呈现码段#1。
码段#1
for(i=0;i<4;i++){
ba=(ra>>(8*i))&0xff;/*find the i-th byte */
bb=(rb>>(8*i))&0xff;
if(ba==bb){
cbit0=1;
rt=i;
}
else if(ba==0){
cbit=1;
rt=-1;
}
}
借助码段#1,相对直接地找到零终止串的长度(strlen指令/操作)。在伪汇编码中,如下面在码段#2中所详细说明可呈现非优化汇编版本:
码段#2
;;;strlen:takes one argument
;;; radr:address of string
strlen:
li rz,0 ;initialize RB to 0
li rlen,0 ;initialize length to 0
loop:
ld rval,radr,0 ;load from radr
ffzbe rpos,rval,rz ;check if any byte 0
jtrue cb0,found
add rlen,rlen,4 ;bump length
add radr,radr,4 ;bump address
found:
add rlen,rlen,rpos
add rlen,rlen,-1 ;subtract one for the 0 byte
return rlen
如所属领域的技术人员可明了,码段#2的优化实施方案将与上文所详细说明的非优化实例相当不同。除其它之外,预期所述优化实施方案利用更复杂的指令,例如加载并更新指令。此外,预期码段#2的优化版本将不保持长度字段。代替地,预期码段#2的优化版本将依赖原始地址及最后所加载地址之间的差来计算所述长度。
还如所属领域的技术人员可了解,可相当直接地实现找到特定字节在串中的位置(strchr指令/操作)。应注意,如果没有找到字符,则strchr操作返回0。否则,所述操作返回指向所述串中的字符的指针。码段#3提供此操作的一个实例:
码段#3
;;;strchr:takes two argument
;;; radr:address of string
;;; rc: byte being located
shl rc2,rc,8
or rc2,rc2,rc
shl rc4,rc2,16
or rc4,rc4,rc2
strchr:
loop:
ld rval,radr,0 ;load from radr
ffzbe rpos,rval,rc4 ;check if any byte 0 or rc
jtrue cb0,found
add radr,radr,4 ;bump address
found:
cmp cb1,rpos,-1 ;check if 0 found first
jfalse cb1,found_byte
return 0 ;0found first
found_byte:
add radr,radr,rpos
return radr
最后,如所属领域的技术人员可了解,此指令可用于写入有效串拷贝指令(也称为strcpy指令)。下面在码段#4中提供strcpy指令的实例。
码段#4
;;;strcpy:takes two argument
;;; rdst: address being written to
;;; rsrc: address of string
strcpy:
li rz,0
cpy rorig,rdst ;original address of dest
loop:
ld rval,rsrc,0 ;load from radr
ffzbe rpos,rval,rz ;check if any byte 0or rc
jtrue cb0,found
st rval,rdst,0 ;copy value
add radr,radr,4 ;bump addresses
add rdst,rdst,4
found:
stb rval,rdst,0
cmpe cb1,rpos,0
jtrue done
shr rval,rval,8
stb rval,rdst,1
cmpe cb1,rpos,1
jtrue done
shr rval,rval,8
stb rval,rdst,2
cmpe cb1,rpos,2
jtrue done
shr rval,rval,8
stb rval,rdst,3
done:
return rorig
如可期望,码段#4可以数种不同方式优化。尽管此处未提供优化的细节,但应注意所述码可尤其在标签“found”与“done”之间(其中拷贝所述串的最后数个字节)进行优化。
ffzbn指令
ffzbn指令包含以下操作:(1)读取两个寄存器值,RA及RB,(2)写入寄存器值RT及条件位/旗标,(3)相依于处理器是高字节置前还是低字节置前,从最高有效字节(“MSB”)到最低有效字节(“LSB”)或从LSB到MSB检查RA及RB的字节,(4)如果RA中的字节的值为零或不等于RB的对应字节,则将条件位或旗标中的标记设定为指示匹配,(5)如果第一匹配是不相等字节的匹配,则将RT设定为匹配字节的计数,及(6)否则,将RT的值设定为在范围0、...num_bytes_in_register-1之外的值。一个此类选择将是-1。
可如下面在码段#5中所阐述写入针对此指令的伪C码。码段#5是基于数种假设。第一,假设处理器使用条件位。第二,假设指令总是将所述条件位设定/清除为零。第三,假设寄存器宽度为4个字节。第四,假设处理器为高字节置前。在所述四个假设下,呈现码段#5作为本发明的一个实例。
码段#5
for(i=0;i<4;i++){
ba=(ra>>(8*i))&0xff;/*find the i-th byte*/
bb=(rb>>(8*i))&0xff;
if(ba !=bb){
cbit0=1;
rt=i;
}
else if(ba==0){
cbit=1;
rt=-1;
}
}
码段#5中所呈现的指令可用于写入有效串比较指令,也称为“strcmp”。下面,将此指令呈现为码段#6。
码段#6
;;;strcmp:takes two argument
;;; rad0: address of first string
;;; rad1: address of second string
strcmp:
loop:
ld rv0,rad0,0 ;load from strings
ld rv1,rad1,0
ffzbn rpos,rval,rz ;check for 0or !=byte
jtrue cb0,found
add rad0,rad0,4 ;bump addresses
add rad1,rad1,4
found:
cmpe cb1,rpos,-1
jtrue equal
mul rpos8,rpos,8 ;number of bits
shl rv0,rv0,rpos8
shl rv1,rv1,rpos8
and rv0,rv0,0xff
and rv1,rv1,0xff
sub rdif,rv0,rv1
return rdif
equal:
return 0
码段#6并非经优化写入。所属领域的技术人员应明了优化且因此本文并不详细说明。
额外信息
参照ffzbe指令及ffzbn指令,存在预期作为本发明的一部分的数种变化形式。
针对所述指令两者所预期的一个变化形式避免对照RB的个别字节的比较。在此变化形式中,仅对照RB的最低字节作出比较。此特定变化形式(至少对于ffzbe指令)准许在不需要在函数的起初(或开始)进行拷贝的情形下实施strchr指令。如所属领域的技术人员可了解,此减少处理时间且增加处理效率。
另一所预期变化形式是关于条件位/旗标在所述旗标/位不需要设定时的处置。在此变化形式中,存在数种所预期选项。在一个选项中,每当执行ffzbe指令或ffzbn指令时设定或清除所述旗标/位。在第二选项中,如上文所规定当(1)遇到零字节或(2)当遇到相等及/或不相等字节时设定条件旗标/位。在此选项中,如果不满足所述条件,则不改动条件旗标。
当处理器使用用信号表示多个条件的条件旗标时,预期又一变化形式。条件包含但不限于(1)大于、(2)小于、(3)等于或这三个条件的组合。多个旗标的存在准许指令通过设定不同旗标来在零字节匹配情况与相等/不相等匹配情况之间进行区分。此外,根据上文所提供的伪C说明,ffzbn指令也可比较第一不相等字节并相依于ba>bb或ba<bb设定大于/小于旗标。
在现有技术中可存在类似于本发明的所述方面的方面。最接近的实例或许是Power PC 440的dlmbz指令。此指令搜索通过级联第一字节为0的两个寄存器所形成的8字节值。可认为此指令具有ffzbe指令的功能性,其中rb=0,由此准许将所述指令用于strcpy及strlen。然而,除其它缺点之外,dlmbz指令没有加速函数(例如strcmp及strchr),如所属领域的技术人员应明了。
如前文已明了,本发明呈现各种不同实施例及变化形式,其总结如下并结合图式进行论述。
本发明呈现可由处理器执行的所执行方法10。在图1及2中图解说明方法10。
方法10开始于12处。在14处,方法10读取在长度上为至少两个字节的第一寄存器值。在16处,方法10读取在长度上也为至少两个字节的第二寄存器值。方法10预期第一寄存器值与第二寄存器值将均为相同长度,此促进在18处的下一操作。在18处,方法10将第一寄存器值的字节与第二寄存器值的字节相比较。在20处,如果满足两个条件中的至少一者,则将第三寄存器设定为指示匹配。首先,如果第一寄存器值中的字节等于第二寄存器值中的对应字节,则第三寄存器将指示匹配。第二,如果第一寄存器值中的字节为零,则第三寄存器将指示匹配。参考编号22指示图1与图2之间的连接符A。
方法10在图2中继续。在24处,方法10继续进行到相依于两个条件中的一者设定第四寄存器值。第一,如果第一寄存器值中的字节等于第二寄存器值中的对应字节,则将第四寄存器值设定为匹配字节的计数。第二,如果第一寄存器值中的字节不等于第二寄存器值中的对应字节,则将第四寄存器值设定为在包括0与n-1之间的数的值范围之外的数。对于方法10,n是对应于第一及第二寄存器值中的字节数的整数。方法10在26处结束。
在方法10的一个变化形式中,如果处理器是高字节置前,则从最高有效字节到最低有效字节比较第一寄存器值与第二寄存器值的字节。在另一变化形式中,如果处理器是低字节置前,则从最低有效字节到最高有效字节比较第一寄存器值与第二寄存器值的字节。
关于第三寄存器,本发明的一个实施例涉及为具有一个位的条件旗标寄存器的第三寄存器。还预期其它变化形式。举例来说,第三寄存器可以为具有多个位的条件寄存器。在此实例中,可将第三寄存器的位中的一个位设定为指示匹配。还预期第三寄存器可以为包括多个位的条件寄存器。在此变化形式中,相依于第一寄存器值中的字节是等于第二寄存器值中的对应字节还是第一寄存器值中的第一字节为零,所述第三寄存器可保留不同值。
关于第四寄存器值,预期如果第一寄存器值中的字节不等于第二寄存器值中的对应字节,则可将第四寄存器值设定为-1。值-1明显地落在从0到n-1的值范围之外。还预期其它变化形式归属于本发明的范围,因为-1不是可选择的唯一值。
在本发明的一个所预期变化形式中,可同时设定第三寄存器及第四寄存器值。
在又一变化形式中,预期至少两个单独寄存器可与处理器协作以执行所述方法。
在方法10中,预期处理器可以预定字节边界开始往寄存器中加载。
在另一变化形式中,将第一寄存器值的字节仅与第二寄存器值的最低字节相比较。
在又一进一步变化形式中,方法10可包含额外操作。举例而言,方法10可包含如果没有指示匹配则修改第三寄存器。
在本发明的另一实施例中,第三寄存器可以为包含一个位的条件旗标寄存器。在此实施例中,当指示匹配时,可设定所述位。另一选择为,当不指示匹配时,可清除所述位。
本发明的方法10也可操作以使得第三寄存器是具有一个位的条件旗标寄存器。当指示匹配时,可清除所述位。另一选择为,当指示匹配时,可设定所述位。
在方法10的另一所预期变化形式中,第三寄存器可以为具有多个位的条件寄存器。当指示匹配时,可设定所述多个位中的一个位。另外,当不指示匹配时,可清除所述一个位。
第三寄存器还可以是具有多个位的条件寄存器。在此实施例中,当指示匹配时,可清除所述多个位中的一个位,或当不指示匹配时,可设定所述一个位。
参照图3及4,其描述第二方法30。方法30可在处理器上执行。
第二方法30在32处开始。在34处,方法30读取在长度上至少为两个字节的第一寄存器值。在36处,方法30读取在长度上至少也为两个字节的第二寄存器值。方法30预期第一寄存器值及第二寄存器值将均为相同长度,此促进在38处的下一操作。在38处,方法30将第一寄存器值的字节与第二寄存器值的字节相比较。在40处,如果满足两个条件中的至少一者,则将第三寄存器设定为指示匹配。首先,如果第一寄存器值中的字节不等于第二寄存器值中的对应字节,则第三寄存器将指示匹配。第二,如果第一寄存器值中的字节为零,则第三寄存器将指示匹配。参考编号42指示图3与图4之间的连接符B。
方法30在图4中继续,在44处,方法30继续进行到相依于两个条件中的一者设定第四寄存器值。第一,如果第一寄存器值中的字节不等于第二寄存器值中的对应字节,则将第四寄存器值设定为匹配字节的计数。第二,如果第一寄存器值中的字节等于第二寄存器值中的对应字节,则将第四寄存器值设定为包括0与n-1之间的数的值范围之外的数。对于方法10,n是对应于第一及第二寄存器值中的字节数的整数。方法30在46处结束。
在方法30的一个变化形式中,如果处理器是高字节置前,则从最高有效字节到最低有效字节比较第一寄存器值与第二寄存器值的字节。在另一变化形式中,如果处理器是低字节置前,则从最低有效字节到最高有效字节比较第一寄存器值与第二寄存器值的字节。
关于方法30中的第三寄存器,所述第三寄存器可以为具有一个位的条件旗标寄存器。还预期其它变化形式。举例来说,第三寄存器可以为具有多个位的条件寄存器。在此实例中,可将第三寄存器的所述位中的一个位设定为指示匹配。同样,预期所述第三寄存器可以为具有多个位的条件寄存器。在此变化形式中,相依于第一寄存器值中的字节是等于第二寄存器值中的对应字节还是第一寄存器值中的第一字节为零,第三寄存器可保留不同值。
关于第四寄存器值,预期如果第一寄存器值中的字节不等于第二寄存器值中的对应字节,则可将所述第四寄存器值设定为-1。值-1明显地落在从0到n-1的值范围之外。还预期其它变化形式归属于本发明的范围,因为-1不是可选择的唯一值。
在方法30的一个所预期变化形式中,可同时设定第三寄存器及第四寄存器值。
在又一变化形式中,预期至少两个单独寄存器可与处理器协作以执行所述方法。
在方法30中,预期处理器可以预定字节边界开始往寄存器中加载。
在方法30的另一变化形式中,将第一寄存器值的字节仅与第二寄存器值的最低字节相比较。
在又一进一步变化形式中,方法30可包含额外操作。举例来说,方法30可包含如果不指示匹配则修改第三寄存器。
在方法30的另一实施例中,第三寄存器可以为包含一个位的条件旗标寄存器。在此实施例中,当指示匹配时可设定所述位。另一选择为,当不指示匹配时,可清除所述位。
本发明的方法30也可操作以使得第三寄存器为具有一个位的条件旗标寄存器。当指示匹配时,可清除所述位。当指示匹配时,可设定所述位。
在方法30的另一所预期变化形式中,第三寄存器可以为具有多个位的条件寄存器。当指示匹配时,可设定所述多个位中的一个位。当不指示匹配时,可清除所述一个位。
另一选择为,第三寄存器可以为具有多个位的条件寄存器。在此实施例中,当指示匹配时可清除所述多个位中的一个位且当不指示匹配时可设定所述一个位。
如从前文论述及从本发明图式应明了,本发明并不打算仅限于本文所述实施例。相反,如所属领域的技术人员应明了,可在不背离本发明范围的情形下采用众多额外实施例、变化形式及等效内容。
Claims (32)
1.一种由处理器执行的方法,其包括:
读取第一寄存器值,其中所述第一寄存器值包括至少两个字节;
读取第二寄存器值,其中所述第二寄存器值包括至少两个字节,
其中所述第一寄存器值与所述第二寄存器值两者包括相同的字节数;
将所述第一寄存器值的所述字节与所述第二寄存器值的所述字节相比较;
如果出现以下情况,则将第三寄存器设定为指示匹配
(1)所述第一寄存器值中的字节等于所述第二寄存器值中的对应字节,或
(2)如果所述第一寄存器值中的字节为零;及
将第四寄存器值设定为
(1)如果所述第一寄存器值中的所述字节等于所述第二寄存器值中的所述对应字节,则为匹配字节的计数;或
(2)如果所述第一寄存器值中的所述字节不等于所述第二寄存器值中的所述对应字节,则为包括0与n-1之间的数的值范围之外的数,
其中n为对应于所述第一及第二寄存器值中的字节数的整数。
2.根据权利要求1所述的方法,其中如果所述处理器为高字节置前,则从最高有效字节到最低有效字节比较所述第一寄存器值与所述第二寄存器值的所述字节。
3.根据权利要求1所述的方法,其中如果所述处理器为低字节置前,则从最低有效字节到最高有效字节比较所述第一寄存器值与所述第二寄存器值的所述字节。
4.根据权利要求1所述的方法,其中所述第三寄存器为包括一个位的条件旗标寄存器。
5.根据权利要求1所述的方法,其中:
所述第三寄存器为包括多个位的条件寄存器,且
将所述第三寄存器中的一个位设定为指示所述匹配。
6.根据权利要求1所述的方法,其中:
所述第三寄存器为包括多个位的条件寄存器,且
当做出所述第一寄存器值中的字节等于所述第二寄存器值中的对应字节的确定时,将所述第三寄存器设定为第一匹配值,否则当所述第一寄存器值中的字节为零时,将所述第三寄存器设定为第二匹配值。
7.根据权利要求1所述的方法,其中如果所述第一寄存器值中的所述字节不等于所述第二寄存器值中的所述对应字节,则将所述第四寄存器值设定为-1。
8.根据权利要求1所述的方法,其中同时设定所述第三寄存器及所述第四寄存器值。
9.根据权利要求1所述的方法,其中至少两个单独寄存器与所述处理器协作以执行所述方法。
10.根据权利要求1所述的方法,其中所述处理器以预定字节边界开始往寄存器中加载。
11.根据权利要求1所述的方法,其中将所述第一寄存器值的所述字节仅与所述第二寄存器值的最低字节相比较。
12.根据权利要求1所述的方法,其进一步包括:
如果不指示匹配,则修改所述第三寄存器。
13.根据权利要求12所述的方法,其中:
所述第三寄存器为包括一个位的条件旗标寄存器,
当指示所述匹配时,设定所述位,且
当不指示所述匹配时,清除所述位。
14.根据权利要求12所述的方法,其中:
所述第三寄存器为包括一个位的条件旗标寄存器,
当指示所述匹配时,清除所述位,且
当指示所述匹配时,设定所述位。
15.根据权利要求12所述的方法,其中:
所述第三寄存器为包括多个位的条件寄存器,
当指示所述匹配时,设定所述多个位中的一个位,且
当不指示所述匹配时,清除所述一个位。
16.根据权利要求12所述的方法,其中:
所述第三寄存器为包括多个位的条件寄存器,
当指示所述匹配时,清除所述多个位中的一个位,且
当不指示所述匹配时,设定所述一个位。
17.一种由处理器执行的方法,其包括:
读取第一寄存器值,其中所述第一寄存器值包括至少两个字节;
读取第二寄存器值,其中所述第二寄存器值包括至少两个字节,
其中所述第一寄存器值与所述第二寄存器值两者包括相同的字节数;
将所述第一寄存器值的所述字节与所述第二寄存器值的所述字节相比较;
如果出现以下情况,则将第三寄存器设定为指示匹配
(1)所述第一寄存器值中的字节不等于所述第二寄存器值中的对应字节,或
(2)如果所述第一寄存器值中的字节为零;及
将第四寄存器值设定为
(1)如果所述第一寄存器值中的所述字节不等于所述第二寄存器值中的所述对应字节,则为匹配字节的计数,或
(2)如果所述第一寄存器值中的所述字节等于所述第二寄存器值中的所述对应字节,则为包括0与n-1之间的数的值范围之外的数,
其中n为对应于所述第一及第二寄存器中的任一者中的字节数的整数。
18.根据权利要求17所述的方法,其中如果所述处理器是高字节置前,则从最高有效字节到最低有效字节比较所述第一寄存器值与所述第二寄存器值的所述字节。
19.根据权利要求17所述的方法,其中如果所述处理器是低字节置前,则从最低有效字节到最高有效字节比较所述第一寄存器值与所述第二寄存器值的所述字节。
20.根据权利要求17所述的方法,其中所述第三寄存器为包括一个位的条件旗标寄存器。
21.根据权利要求17所述的方法,其中:
所述第三寄存器为包括多个位的条件寄存器,且
将所述第三寄存器中的一个位设定为指示所述匹配。
22.根据权利要求17所述的方法,其中:
所述第三寄存器为包括多个位的条件寄存器,且
当做出所述第一寄存器值中的字节不等于所述第二寄存器值中的对应字节的确定时,将所述第三寄存器设定为第一匹配值,否则当所述第一寄存器值中的字节为零时,将所述第三寄存器设定为第二匹配值。
23.根据权利要求17所述的方法,其中如果所述第一寄存器值中的所述字节不等于所述第二寄存器值中的所述对应字节时,将所述第四寄存器值设定为-1。
24.根据权利要求17所述的方法,其中同时设定所述第三寄存器及所述第四寄存器值。
25.根据权利要求17所述的方法,其中至少两个单独寄存器与所述处理器协作以执行所述方法。
26.根据权利要求17所述的方法,其中所述处理器以预定字节边界开始往寄存器中加载。
27.根据权利要求17所述的方法,其中将所述第一寄存器值的所述字节仅与所述第二寄存器值的最低字节相比较。
28.根据权利要求17所述的方法,其进一步包括:
如果不指示匹配,则修改所述第三寄存器。
29.根据权利要求28所述的方法,其中:
所述第三寄存器为包括一个位的条件旗标寄存器,
当指示所述匹配时,设定所述位,且
当不指示所述匹配时,清除所述位。
30.根据权利要求28所述的方法,其中:
所述第三寄存器为包括一个位的条件旗标寄存器,
当指示所述匹配时,清除所述位,且
当指示所述匹配时,设定所述位。
31.根据权利要求28所述的方法,其中:
所述第三寄存器为包括多个位的条件寄存器,
当指示所述匹配时,设定所述多个位中的一个位,且
当不指示所述匹配时,清除所述一个位。
32.根据权利要求28所述的方法,其中:
所述第三寄存器为包括多个位的条件寄存器,
当指示所述匹配时,清除所述多个位中的一个位,且
当不指示所述匹配时,设定所述一个位。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US2942208P | 2008-02-18 | 2008-02-18 | |
US61/029,422 | 2008-02-18 | ||
PCT/US2009/032987 WO2009105332A1 (en) | 2008-02-18 | 2009-02-03 | Method to accelerate null-terminated string operations |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102007469A true CN102007469A (zh) | 2011-04-06 |
Family
ID=40985866
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009801135821A Pending CN102007469A (zh) | 2008-02-18 | 2009-02-03 | 用以加速空终止字符串操作的方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20100031007A1 (zh) |
EP (1) | EP2245529A1 (zh) |
KR (1) | KR20100126690A (zh) |
CN (1) | CN102007469A (zh) |
WO (1) | WO2009105332A1 (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8074051B2 (en) * | 2004-04-07 | 2011-12-06 | Aspen Acquisition Corporation | Multithreaded processor with multiple concurrent pipelines per thread |
WO2009114691A2 (en) * | 2008-03-13 | 2009-09-17 | Sandbridge Technologies, Inc. | Method for achieving power savings by disabling a valid array |
KR20110050665A (ko) | 2008-08-06 | 2011-05-16 | 아스펜 액퀴지션 코포레이션 | 정지가능하고 재시작가능한 dma 엔진 |
US10318291B2 (en) | 2011-11-30 | 2019-06-11 | Intel Corporation | Providing vector horizontal compare functionality within a vector register |
WO2013081588A1 (en) * | 2011-11-30 | 2013-06-06 | Intel Corporation | Instruction and logic to provide vector horizontal compare functionality |
US11080045B2 (en) * | 2011-12-22 | 2021-08-03 | Intel Corporation | Addition instructions with independent carry chains |
US9459867B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a specified memory boundary indicated by the instruction |
US9454366B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Copying character data having a termination character from one memory location to another |
US9710266B2 (en) | 2012-03-15 | 2017-07-18 | International Business Machines Corporation | Instruction to compute the distance to a specified memory boundary |
US9588762B2 (en) | 2012-03-15 | 2017-03-07 | International Business Machines Corporation | Vector find element not equal instruction |
US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
US9454367B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Finding the length of a set of character data having a termination character |
US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
US9268566B2 (en) | 2012-03-15 | 2016-02-23 | International Business Machines Corporation | Character data match determination by loading registers at most up to memory block boundary and comparing |
US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
US10540512B2 (en) * | 2015-09-29 | 2020-01-21 | International Business Machines Corporation | Exception preserving parallel data processing of string and unstructured text |
US20170123792A1 (en) * | 2015-11-03 | 2017-05-04 | Imagination Technologies Limited | Processors Supporting Endian Agnostic SIMD Instructions and Methods |
US10613862B2 (en) | 2017-03-03 | 2020-04-07 | International Business Machines Corporation | String sequence operations with arbitrary terminators |
US10564965B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Compare string processing via inline decode-based micro-operations expansion |
US10564967B2 (en) | 2017-03-03 | 2020-02-18 | International Business Machines Corporation | Move string processing via inline decode-based micro-operations expansion |
US10620956B2 (en) | 2017-03-03 | 2020-04-14 | International Business Machines Corporation | Search string processing via inline decode-based micro-operations expansion |
US10324716B2 (en) | 2017-03-03 | 2019-06-18 | International Business Machines Corporation | Selecting processing based on expected value of selected character |
US10255068B2 (en) | 2017-03-03 | 2019-04-09 | International Business Machines Corporation | Dynamically selecting a memory boundary to be used in performing operations |
US10789069B2 (en) | 2017-03-03 | 2020-09-29 | International Business Machines Corporation | Dynamically selecting version of instruction to be executed |
WO2022041696A1 (zh) * | 2020-08-26 | 2022-03-03 | 华为技术有限公司 | 流量监控方法、装置、集成电路及网络设备 |
CN112835842B (zh) * | 2021-03-05 | 2024-04-30 | 深圳市汇顶科技股份有限公司 | 端序处理方法、电路、芯片以及电子终端 |
KR102370851B1 (ko) * | 2021-08-18 | 2022-03-07 | 주식회사 로그프레소 | 벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법 |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4556951A (en) * | 1982-06-06 | 1985-12-03 | Digital Equipment Corporation | Central processor with instructions for processing sequences of characters |
US5060143A (en) * | 1988-08-10 | 1991-10-22 | Bell Communications Research, Inc. | System for string searching including parallel comparison of candidate data block-by-block |
CA2045773A1 (en) * | 1990-06-29 | 1991-12-30 | Compaq Computer Corporation | Byte-compare operation for high-performance processor |
JPH0831032B2 (ja) * | 1990-08-29 | 1996-03-27 | 三菱電機株式会社 | データ処理装置 |
US5627995A (en) * | 1990-12-14 | 1997-05-06 | Alfred P. Gnadinger | Data compression and decompression using memory spaces of more than one size |
US5423010A (en) * | 1992-01-24 | 1995-06-06 | C-Cube Microsystems | Structure and method for packing and unpacking a stream of N-bit data to and from a stream of N-bit data words |
US5465374A (en) * | 1993-01-12 | 1995-11-07 | International Business Machines Corporation | Processor for processing data string by byte-by-byte |
DE4334294C1 (de) * | 1993-10-08 | 1995-04-20 | Ibm | Prozessor für Zeichenketten variabler Länge |
US5404473A (en) * | 1994-03-01 | 1995-04-04 | Intel Corporation | Apparatus and method for handling string operations in a pipelined processor |
US5724572A (en) * | 1994-11-18 | 1998-03-03 | International Business Machines Corporation | Method and apparatus for processing null terminated character strings |
US5611062A (en) * | 1995-03-31 | 1997-03-11 | International Business Machines Corporation | Specialized millicode instruction for string operations |
US5854921A (en) * | 1995-08-31 | 1998-12-29 | Advanced Micro Devices, Inc. | Stride-based data address prediction structure |
US5724872A (en) * | 1996-06-28 | 1998-03-10 | Shih; Leo | Socket spanner having a nut retaining device |
US5931940A (en) * | 1997-01-23 | 1999-08-03 | Unisys Corporation | Testing and string instructions for data stored on memory byte boundaries in a word oriented machine |
US6332152B1 (en) * | 1997-12-02 | 2001-12-18 | Matsushita Electric Industrial Co., Ltd. | Arithmetic unit and data processing unit |
US6192447B1 (en) * | 1998-04-09 | 2001-02-20 | Compaq Computer Corporation | Method and apparatus for resetting a random access memory |
TW498206B (en) * | 1998-07-28 | 2002-08-11 | Silicon Integrated Sys Corp | Method and device for matching data stream with a fixed pattern |
JP2001337845A (ja) * | 2000-05-30 | 2001-12-07 | Mitsubishi Electric Corp | マイクロプロセッサ |
US7039793B2 (en) * | 2001-10-23 | 2006-05-02 | Ip-First, Llc | Microprocessor apparatus and method for accelerating execution of repeat string instructions |
GB0210604D0 (en) * | 2002-05-09 | 2002-06-19 | Ibm | Method and arrangement for data compression |
US6990557B2 (en) * | 2002-06-04 | 2006-01-24 | Sandbridge Technologies, Inc. | Method and apparatus for multithreaded cache with cache eviction based on thread identifier |
US6842848B2 (en) * | 2002-10-11 | 2005-01-11 | Sandbridge Technologies, Inc. | Method and apparatus for token triggered multithreading |
US6904511B2 (en) * | 2002-10-11 | 2005-06-07 | Sandbridge Technologies, Inc. | Method and apparatus for register file port reduction in a multithreaded processor |
US20040230775A1 (en) * | 2003-05-12 | 2004-11-18 | International Business Machines Corporation | Computer instructions for optimum performance of C-language string functions |
GB0315152D0 (en) * | 2003-06-28 | 2003-08-06 | Ibm | Data parsing and tokenizing apparatus,method and program |
US7251737B2 (en) * | 2003-10-31 | 2007-07-31 | Sandbridge Technologies, Inc. | Convergence device with dynamic program throttling that replaces noncritical programs with alternate capacity programs based on power indicator |
US8074051B2 (en) * | 2004-04-07 | 2011-12-06 | Aspen Acquisition Corporation | Multithreaded processor with multiple concurrent pipelines per thread |
US7797363B2 (en) * | 2004-04-07 | 2010-09-14 | Sandbridge Technologies, Inc. | Processor having parallel vector multiply and reduce operations with sequential semantics |
TW200625097A (en) * | 2004-11-17 | 2006-07-16 | Sandbridge Technologies Inc | Data file storing multiple date types with controlled data access |
WO2008070250A2 (en) * | 2006-09-26 | 2008-06-12 | Sandbridge Technologies Inc. | Software implementation of matrix inversion in a wireless communication system |
CA2629202A1 (en) * | 2006-10-20 | 2008-04-24 | Quad-Lock Building Systems Ltd. | Wall opening form |
WO2009029289A1 (en) * | 2007-08-31 | 2009-03-05 | Sandbridge Technologies, Inc. | Method, apparatus, and architecture for automated interaction between subscribers and entities |
US20100241834A1 (en) * | 2007-11-05 | 2010-09-23 | Sandbridge Technologies, Inc. | Method of encoding using instruction field overloading |
JP2010277440A (ja) * | 2009-05-29 | 2010-12-09 | Internatl Business Mach Corp <Ibm> | プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム |
-
2009
- 2009-02-03 WO PCT/US2009/032987 patent/WO2009105332A1/en active Application Filing
- 2009-02-03 US US12/365,130 patent/US20100031007A1/en not_active Abandoned
- 2009-02-03 CN CN2009801135821A patent/CN102007469A/zh active Pending
- 2009-02-03 EP EP09711949A patent/EP2245529A1/en not_active Withdrawn
- 2009-02-03 KR KR1020107018313A patent/KR20100126690A/ko not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
US20100031007A1 (en) | 2010-02-04 |
WO2009105332A1 (en) | 2009-08-27 |
KR20100126690A (ko) | 2010-12-02 |
EP2245529A1 (en) | 2010-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102007469A (zh) | 用以加速空终止字符串操作的方法 | |
KR850001015B1 (ko) | 오페란드(被演算函數 : Operand)간 파이프라인제어를 행하는 데이터 처리장치 | |
US5598544A (en) | Instruction buffer device for processing an instruction set of variable-length instruction codes | |
US7386844B2 (en) | Compiler apparatus and method of optimizing a source program by reducing a hamming distance between two instructions | |
US7383421B2 (en) | Cellular engine for a data processing system | |
US7533243B2 (en) | Processor for executing highly efficient VLIW | |
US5922065A (en) | Processor utilizing a template field for encoding instruction sequences in a wide-word format | |
US5907842A (en) | Method of sorting numbers to obtain maxima/minima values with ordering | |
AU686358B2 (en) | Computer system | |
US5390307A (en) | Apparatus for a multi-data store or load instruction for transferring multiple contiguous storage locations in one transfer operation | |
US5669012A (en) | Data processor and control circuit for inserting/extracting data to/from an optional byte position of a register | |
JPS6097435A (ja) | 演算処理装置 | |
USRE32493E (en) | Data processing unit with pipelined operands | |
US6978359B2 (en) | Microprocessor and method of aligning unaligned data loaded from memory using a set shift amount register instruction | |
JP3414209B2 (ja) | プロセッサ | |
US6189086B1 (en) | Data processing apparatus | |
JP2738365B2 (ja) | マイクロコンピュータ用プログラム変換方法及びそのプログラムを用いたマイクロコンピュータ | |
US5958043A (en) | Superscalar processor with forward map buffer in multiple instruction parallel issue/execution management system | |
US6496924B2 (en) | Data processing apparatus including a plurality of pipeline processing mechanisms in which memory access instructions are carried out in a memory access pipeline | |
US4592013A (en) | Method and device for addressing a memory | |
US7003651B2 (en) | Program counter (PC) relative addressing mode with fast displacement | |
KR20010075681A (ko) | 프로세싱 시스템에서의 실행 인스트럭션 형성 방법 | |
US20010001154A1 (en) | Processor using less hardware and instruction conversion apparatus reducing the number of types of instructions | |
US5045992A (en) | Apparatus for executing instruction regardless of data types and thereafter selectively branching to other instruction upon determining of incompatible data type | |
JPH11212804A (ja) | 仮想マシン及びプログラム変換装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20110406 |