CN102007469A - 用以加速空终止字符串操作的方法 - Google Patents

用以加速空终止字符串操作的方法 Download PDF

Info

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
Application number
CN2009801135821A
Other languages
English (en)
Inventor
马杨·穆德吉尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sandbridge Technologies Inc
Original Assignee
Sandbridge Technologies Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sandbridge Technologies Inc filed Critical Sandbridge Technologies Inc
Publication of CN102007469A publication Critical patent/CN102007469A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/02Comparing digital values
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions 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所述的方法,其中:
所述第三寄存器为包括多个位的条件寄存器,
当指示所述匹配时,清除所述多个位中的一个位,且
当不指示所述匹配时,设定所述一个位。
CN2009801135821A 2008-02-18 2009-02-03 用以加速空终止字符串操作的方法 Pending CN102007469A (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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> プログラム実行時における文字列の処理を最適化する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム

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