专利名称:一种数据表项的查找处理方法和装置的制作方法
技术领域:
本发明涉及网络设备领域,尤其涉及网络设备内一种数据表项的查找处理方法和
直O
背景技术:
当前的处理器一般都具有查表及处理数据表项的功能,某些处理器对该项功能的 要求较为严格,需要可以高速的查找并处理数据表项,比如网络处理器。一种典型的数据表 项结构中一般包括标记字段和与该标记字段中的标记位相对应的数据字段,如果标记字段 的某个标记位使能时(即该字段为“ 1”时),就会去相应的数据字段读取数据并进行代码处理。现有的查找数据表项过程所对应的C语言处理代码一般采用多个if语句,即if 标记字段中某个标记位为1,就处理对应的操作。现在各种处理器对于if条件块都不成立 时的处理主要包括如下两种方式1、利用jump语句跳转到if条件块中最后一条指令的下一条指令;2、仍然继续执行if后的所有操作,但所有执行结果都不生效。但是上述技术1中jump语句由于存在风险,在很多架构的处理器中都明确告知程 序员慎用,而上述技术2中指令的执行的效率很差,等于将数据表项中所有标记位所对应 的处理代码都执行一遍。另外,在硬件实现上,上述每个if操作都会对应一条硬件指令,这 是对处理器指令执行路径的一种浪费,也会导致处理器执行效率的降低。
发明内容
本发明实施例提供了 一种数据表项的查找处理方法和装置,用于提高处理器在进 行数据表项的查找处理过程中的运作效率。一方面,本发明实施例提出了一种数据表项的查找处理的方法,所述数据表项包 括标记字段和与所述标记字段中的标记位相对应的数据字段,所述方法占用一条硬件指 令,所述方法包括查找所述标记字段中的使能标记位;跳转到所述使能标记位所对应的 数据字段进行代码处理。另一方面,本发明实施例还提出了一种数据表项的查找处理装置,所述数据表项 包括标记字段和与所述标记字段中的标记位相对应的数据字段,所述装置包括查找单元, 用于查找所述标记字段中的使能标记位;跳转执行单元,用于跳转到所述使能标记位所对 应的数据字段进行代码处理。另一方面,本发明实施例还提出了一种处理器,包括如上所述的装置。本发明实施例通过直接查找标记字段中的使能标记位并执行该使能标记位所对 应的处理代码,且本发明实施例仅需利用一条硬件指令来实现。使得本发明实施例不需要 执行数据表项中所有标记位所对应的处理代码,有效提高了处理器的工作效率。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些 实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些 附图获得其他的附图。图1为现有处理器中一种典型的数据表项的结构示意图;图2为本发明实施例提供的一种数据表项的查找处理的方法的流程示意图;图3为本发明实施例提供的另一种数据表项的查找处理的方法的流程示意图;图4为本发明实施例的一种数据表项的查找处理的指令流程示意图;图5为本发明实施例提供的另一种数据表项的查找处理的方法的流程示意图;图6为本发明实施例提供的一种数据表项的查找处理装置的结构示意图;图7为本发明实施例提供的另一种数据表项的查找处理装置的结构示意图;图8为本发明实施例提供的另一种数据表项的查找处理装置的结构示意图;图9为本发明实施例提供的一种处理器的结构示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。如图1所示为现有处理器中一种典型的数据表项的结构示意图,该数据表项为32 位的数据表项,其中标记字段中的标记位分别为F1-F8,与标记位相对应的数据字段分别为 Field_l-Field_8,当标记字段中某个标记位使能时,处理器就会去相应的数据字段取得数 据进行代码处理,比如当Fl和F3使能时,处理器会去FielcLl及Field_3取得数据进行代 码处理。如图2所示为本发明实施例提供的一种数据表项的查找处理的方法的流程示意 图,该方法包括S201 查找所述标记字段中的使能标记位;在本实施例中不需要执行标记字段中所有标记位所对应的处理代码,而是直接查 找到该标记字段中的使能标记位,然后再执行该使能标记位所对应的处理代码。在本实施 例中直接查找使能标记位的方式可以有多种,在此并不加以限定。S202 跳转到所述使能标记位所对应的数据字段进行代码处理。需要指出的是,在本发明实施例中,是通过S201查找到一个使能标记位后,立刻 跳转到该使能标记位所对应的数据字段进行代码处理,处理完成后,再继续查找下一个使 能标记位,直到标记字段中所有使能标记位所对应的处理代码都得到处理为止。本发明实施例通过直接查找标记字段中的使能标记位并执行该使能标记位所对 应的处理代码,且本发明实施例仅需利用一条硬件指令来实现。使得本发明实施例不需要 执行数据表项中所有标记位所对应的处理代码,有效提高了处理器的工作效率。如图3所示为本发明实施例提供的另一种数据表项的查找处理的方法的流程示意图,下面结合图1和图3来对本发明实施例进行说明,该方法包括
S301 将数据表项中的标记字段进行移位操作来影响进位标识位carry-flag的 值;数据表项一般存储在内存中,当系统需要对该数据表项进行操作的时候,可以将 其读取到一寄存器中,然后再进行操作。本发明实施例即可以将图1所示的数据表项读取 到一 32位或者容量更大的寄存器中后再进行相关操作。在具体实现上,S301可以通过处理器加以实现,比如,将数据表项存储在处理器 的内存中,当需要进行移位操作时,处理器将该数据表项读取到一寄存器中,然后通过处理 器中算术逻辑部件(Arithmetic Logic Unit, ALU)内的移位单元(Shift)完成移位操作, 当ALU完成一次移位操作时,最后一个被移出的位将会保存在标志寄存器的Carry-flag之 中,以图1所示的数据表项为例,本发明实施例中所述的一次移位操作,是指将标记字段中 的某一个标记位移出数据表项的一次操作,比如将Fl左移9bit,或将F2左移IObit等。由 于本发明实施例需要判断数据表项中标记字段上各个标记位的值,因此可以利用标记字段 的移位操作来影响Carry-flag的值,进而根据Carry-flag的值来判断该标记字段中某个 标记位上的值。另外,需要指出的是,S301中对标记字段的移位操作实际上是将整个数据表项的 值进行左移或者右移操作,以图1所示的数据表项为例,如果左移,由于Fl在第23bit位, 因此至少需要将一个32位的数据左移9bit位才能使标记字段影响到Carry-flag的值,而 由于F8在第16bit位,因此左移的范围应该是在9bit-16bit之间;如果右移,由于F8在 第16bit位,因此至少需要右移17个bit位才能使F8开始影响到Carry-flag的值,而由 于Fl在第23bit位,因此右移的范围应该是在17bit-24bit之间。还需要指出的是,为了 不改变原始数据表项的结构,每次移位操作后都不会有回写操作,每次移位操作都是在原 始数据表项的基础上进行的。S302 根据carry-flag的值找到标记字段中在移位方向上的使能标记位。由S301可知,由于移位后会影响Carry-flag的值,因此以图1中数据表项的左移 为例,如果左移的范围在9bit-16bit之间时,Carry-flag内的值就依次为F1-F8标记位上 的值所替换。因此只需要判断Carry-flag的值,即可知道标记字段中相应标记位上的值。具体来说,是当标记字段逐位移出所述数据表项时,判断carry-flag的状态,如 果为1,则当前移出所述数据表项的标记位为使能标记位,进入S303进行代码处理;如果为 0,则继续将所述标记字段中未移出的标记位进行移位操作来影响carry-flag的状态。为了实现可以在前面移位的基础上进行后续移位操作以及S303的跳转操作,在 本实施例中当标记字段逐位移出所述数据表项时,可以将当前PC指针压栈并记录下当前 移出所述数据表项的标记位在所述标记字段中的位置序号。该位置序号是表明标记位在标 记字段中排列顺序的号码,比如图1中的标记位F1-F8的位置序号分别为1-8。以图1所示标记字段左移为例,当Fl左移九位移出所述数据表项时,即将当前PC 指针压栈,并记录下位置序号1,然后再判断carry-flag的值如果为0,则跳转到调用栈PC处,在当前移出数据表项的标记位的基础上继续将 数据表项中未移出的标记位进行移位操作来影响carry-flag的值;如果为1,则跳转到PC+1处来执行该处理代码,即执行S303。
S303 跳转到使能标记位所对应的数据字段进行代码处理。需要指出的是,当执行完本S303后,可以运行return指令返回S301,由于在前述 经过PC指针压栈,因此可以从上述使能标记位开始继续寻找下一个使能标记位,直到所有 使能标记位所对应的处理代码都处理完毕。本发明实施例利用移位操作来对全部标记位进行判断,进而只执行使能标记位处 的处理代码,避免了执行所有标记位的处理代码,且本发明实施例的移位操作在实现上仅 需要占用一条硬件指令即可实现,因此提高了处理器实际执行的效率。下面通过一具体的指令流程来对上述实施例进行进一步的描述,如图4所示为本 发明实施例的一种数据表项的查找处理的指令流程示意图,该指令流程可以包括S401 判断本指令标记f是否等于false,如果是,则进入S402 ;如果否,则进入 S405 ;需要指出的是在第一次执行本指令的时候,标记f的初始值为false。S402 置标记 f 等于 ture ;S403 初始化标记字段移位范围的起始数据(a)和结束数据(b);以图1所示数据 表项为例,初始化后a = 9,b = 16 ;S404 初始化当前移出数据表项的位置序号c,使c = 0 ;S405 把当前PC指针压入函数调用栈中;S406 判断a是否大于b,如果大于则进入S407 ;如果小于,则进入S408 ;S407 清除运行标记,使f等于false,并进入S411结束整个指令;S408 使用ALU的shift单元将寄存器数据左移a位;S409 将a和c在原有基础上加1 ;S410 判断carry-flag位是否为真,如果为真,则进入S411 ;如果为否,则进入 S412 ;S411 跳转到调用栈PC+c位置的指令处,执行完指令后运行return指令返回 S401 ;如果是经过S407而进入S411,由于此时c的值比这个指令组的最后一个指令入口的 位置还多了 1,所以此时执行S411就等于跳出了整个指令组,结束了这条指令。S412 跳转到调用栈PC,即运行return指令返回S401。本发明实施例利用移位操作来对全部标记位进行判断,进而只执行使能标记位处 的处理代码,避免了执行所有标记位的处理代码,且本发明实施例的移位操作在实现上仅 需要占用一条硬件指令即可实现,因此提高了处理器实际执行的效率。如图5所示为本发明实施例提供的另一种数据表项的查找处理的方法的流程示 意图,该方法包括S501 将所述标记字段平分为n个子标记字段,n为大于等于1的整数;在本实施例中,可以将整个标记字段作为一个整体,也可以将其平分为多个子标 记字段,以图1为例,在本实施例中比如可以将标记字段分为2个子标记字段F1-F4以及 F5-F8,每个子标记字段都包括4个标记位。S502 对每个子标记字段进行多比特比较得到一个输出值A ;在本实施例中的多比特比较是指根据子标记字段中的多个标记位得到一个输出 值A,该输出值A可以表示首个使能标记位在该子标记字段中所处的位置。在具体实现的
7时候,可以在处理器内部的处理芯片中实现一个硬件逻辑,比如称为MCMP(Multi Compare) 逻辑,该MCMP逻辑的输入是一个特定宽度的二进制编码,而输出值A是一个数字,代表首个 非O位在该输入二进制编码中的位置。请参见表1,其为当输入编码为4为二进制编码时, 该MCMP逻辑的输出结果 S503 根据输出值A得到所述每个子标记字段内的使能标记位。S504 跳转到使能标记位所对应的数据字段进行代码处理。需要指出的是,在本发明实施例中,是通过S503查找到一个使能标记位后,立刻 跳转到该使能标记位所对应的数据字段进行代码处理,处理完成后,再继续查找上述标记字段内的下一个使能标记位,直到每个子标记字段中所有使能标记位所对应的处理代码都 得到处理为止。为了实现上述跳转以及使能标记位的继续查找,也可以在进行多比特比较前将将 当前PC指针压栈。下面结合图1对上述S502-S504做进一步详细的描述将图1中的标记字段划分为第一子标记字段(F1-F4)、第二子标记字段F5-F8,假 设F2、F3以及F7为使能标记位。则首先对第一子标记字段(0110)进行多比特比较,根据表1,可以得到输出值A = 2,从而确定F2为使能标记位,则跳转到PC+X+2的位置处执行相应的处理代码(X为累加寄 存器,其初始值为0,每换一个子标记字段,X会加上该子标记字段的位数,在本实施例中为 4),同时,将F2清零;在执行完上述处理代码后,运行return指令,继续对第一子标记字段 (0010)进行多比特比较,根据表1,可以得到此时输出值A = 3,从而确定F3为使能标记位, 则跳转到PC+0+3的位置处执行相应的处理代码,同时,将F3清零;然后运行return指令, 继续对第一子标记字段(0000)进行多比特比较,根据表1,得到输出值A = 0,则开始对第 二子标记字段(0010)进行多比特比较,得到输出值A = 3,从而确定F7为使能标记位,则 跳转到PC+4+3 (PC+7)的位置处执行相应的处理代码,然后将F7清零;再次运行return指 令,再对第二子标记字段(0000)进行多比特比较,得到输出值A = 0,由于此时所有子标记 字段都已经判断完毕,则结束本次数据表项的查找处理。可见,图3所对应的实施例中,无论采用左移还是右移操作,都需要执行8次,而本 发明实施例中只需要5次就可以找出上述3个使能标记位,如果将MCMP输入宽度变为8位, 则本发明实施例只需要执行4次就可以找到上述3个使能标记位。另外本发明实施例的多 比特比较方法也只需占用一条硬件指令,因此本发明实施例不但可以只执行使能标记位处 的处理代码,还使执行指令得到了简化,进一步提高了处理器实际执行的效率。如图6所示为本发明实施例提供的一种数据表项的查找处理装置的结构示意图, 在本实施例中述数据表项包括标记字段和与所述标记字段中的标记位相对应的数据字段。 该装置包括查找单元610和跳转执行单元620,其中查找单元610用于查找标记字段中的使能标记位。在本实施例中不需要执行标记字段中所有标记位所对应的处理代码,而是通过查 找单元610直接查找到该标记字段中的使能标记位,然后再通过跳转处理单元620执行该 使能标记位所对应的处理代码。在本实施例中直接查找使能标记位的方式可以有多种,在 此并不加以限定。跳转处理单元620用于跳转到使能标记位所对应的数据字段进行代码处理。需要指出的是,在本发明实施例中,是查找单元610查找到一个使能标记位后,跳 转处理单元620立刻跳转到该使能标记位所对应的数据字段进行代码处理,处理完成后, 查找单元610再继续查找下一个使能标记位,直到标记字段中所有使能标记位所对应的处 理代码都得到处理为止。本发明实施例通过直接查找标记字段中的使能标记位并执行该使能标记位所对 应的处理代码,且本发明实施例仅需利用一条硬件指令来实现。使得本发明实施例不需要 执行数据表项中所有标记位所对应的处理代码,有效提高了处理器的工作效率。
9
如图7所示为本发明实施例提供的另一种数据表项的查找处理装置的结构示意 图,该装置包括查找单元710和跳转执行单元720,其中查找单元710又包括移位模块711 和使能标记查找模块712。
移位模块711用于将标记字段进行移位操作来影响进位标识位carry-flag的值。本发明实施例中移位模块711对标记字段的移位操作实际上是将整个数据表项 的值进行左移或者右移操作,以图1所示的数据表项为例,如果左移,由于F 1在第23bit 位,因此至少需要将一个32位的数据左移9bit位才能使标记字段影响到Carry-flag的 值,而由于F8在第16bit位,因此左移的范围应该是在9bit-16bit之间;如果右移,由于F8 在第16bit位,因此至少需要右移17个bit位才能使F8开始影响到Carry-flag的值,而 由于Fl在第23bit位,因此右移的范围应该是在17bit-24bit之间。还需要指出的是,为 了不改变原始数据表项的结构,每次移位操作后都不会有回写操作,每次移位操作都是在 原始数据表项的基础上进行的。使能标记查找模块712用于根据carry-flag的值找到所述标记字段中在移位方 向上的使能标记位。由于移位后会影响Carry-flag的值,因此以图1中数据表项的左移为例,如果左 移的范围在9bit-16bit之间时,Carry-flag内的值就依次为F1-F8标记位上的值所替换。 因此只需要判断Carry-flag的值,即可知道标记字段中相应标记位上的值。具体来说,使能标记查找模块712具体可以用于当移位模块711将标记字段逐 位移出所述数据表项时,判断carry-flag的状态,如果为1,则确定当前移出所述数据表 项的标记位为使能标记位,使得跳转执行单元720可以根据该使能标记位进行相关处理; 如果为0,则通知移位模块711将所述标记字段中未移出的标记位进行移位操作来影响 carry-flag °跳转执行单元720和图6对应的实施例中相类似,再次不再赘述。需要指出的是,跳转执行单元720在执行完一个使能标记位所对应的处理代码 后,查找模块712可以从上述使能标记位开始继续寻找下一个使能标记位,直到所有使能 标记位所对应的处理代码都处理完毕。本发明实施例利用移位操作来对全部标记位进行判断,进而只执行使能标记位处 的处理代码,避免了执行所有标记位的处理代码,且本发明实施例的移位操作在实现上仅 需要占用一条硬件指令即可实现,因此提高了处理器实际执行的效率。如图8所示为本发明实施例提供的另一种数据表项的查找处理装置的结构示意 图,该装置包括查找单元810和跳转执行单元820,其中查找单元810又包括分段模块 811、多比特比较模块812和使能标记获取模块813。分段模块811用于将标记字段分为η个子标记字段,η为大于等于1的整数。在本实施例中,可以将整个标记字段作为1个整体,也可以将其平分为多个子标 记字段,以图1为例,在本实施例中比如可以将标记字段分为2个子标记字段F1-F4以及 F5-F8,每个字标记字段都包括4个标记位。多比特比较模块812用于对每个子标记字段进行多比特比较得到一个输出值A。 在本实施例中的多比特比较是指根据子标记字段中的多个标记位得到一个输出值A,该输 出值A可以表示首个使能标记位在该子标记字段中所处的位置。
使能标记获取模块813用于根据输出值A得到每个子标记字段内的使能标记位。比如,多比特比较模块812具体用于对第t个子标记字段进行多比特比较得到一 个输出值A ;使能标记获取模块813具体用于判断输出值A是否为0,如果为0,则通知多比特 比较模块812对t+Ι个子标记字段进行多比特比较;如果不为0,则确定所述第t个子标记 字段内的A位置为使能标记位,将该位置清零后再通知跳转执行单元820进行相应处理,跳 转执行单元820处理完成后通知多比特比较模块812继续对第t个子标记字段进行多比特 比较。关于多比特比较的查找处理的具体过程可以参见图5所对应的实施例,在此不再赘 述。本发明实施例的多比特比较方法也只需占用一条硬件指令,而且本发明实施例不 但可以只执行使能标记位处的处理代码,还使执行指令得到了简化,进一步提高了处理器 实际执行的效率。如图9所示为本发明实施例提供的一种处理器的结构示意图,该处理器900包括 查找处理装置910,该查找处理装置可以包括如图6、图7或图8对应实施例中的任意一种 装置,在此就不再对该处理器进行赘述了。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通 过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质 中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为 磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(Random Access Memory, RAM)等。以上所述的具体实施 例,对本发明的目的、技术方案和有益效果进行了进一步详 细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保 护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本 发明的保护范围之内。
权利要求
一种数据表项的查找处理的方法,其特征在于,所述数据表项包括标记字段和与所述标记字段中的标记位相对应的数据字段,所述方法占用一条硬件指令,所述方法包括查找所述标记字段中的使能标记位;跳转到所述使能标记位所对应的数据字段进行代码处理。
2.如权利要求1所述的方法,其特征在于,所述查找所述标记字段中的使能标记位包括将所述标记字段进行移位操作来影响进位标识位carry-flag的值; 根据carry-flag的值找到所述标记字段中在移位方向上的使能标记位。
3.如权利要求2所述的方法,其特征在于,所述根据carry-flag的值找到所述标记字 段中在移位方向上的使能标记位包括当标记字段逐位移出所述数据表项时,判断carry-flag的值,如果为1,则当前移出所 述数据表项的标记位为使能标记位,如果为0,则继续将所述标记字段中未移出的标记位进 行移位操作来影响carry-flag的值。
4.如权利要求1所述的方法,其特征在于,所述获得所述标记字段中的使能标记位包括将所述标记字段分为n个子标记字段,n为大于等于1的整数; 对每个子标记字段进行多比特比较得到一个输出值A ; 根据所述输出值A得到所述每个子标记字段内的使能标记位。
5.如权利要求4所述的方法,其特征在于,所述对每个子标记字段进行多比特比较得 到一个输出值A,根据所述输出值A得到所述每个子标记字段内的使能标记位包括对第t个子标记字段进行多比特比较得到一个输出值A ;判断输出值A是否为0,如果为0,则对第t+1个子标记字段进行多比特比较;如果不为 0,则所述子标记字段内的A位置为使能标记位,将该位置清零后再对第t个子标记字段进 行多比特比较。
6.一种数据表项的查找处理装置,其特征在于,所述数据表项包括标记字段和与所述 标记字段中的标记位相对应的数据字段,所述装置包括查找单元,用于查找所述标记字段中的使能标记位;跳转执行单元,用于跳转到所述使能标记位所对应的数据字段进行代码处理。
7.如权利要求6所述的装置,所述查找单元包括移位模块,用于将所述标记字段进行移位操作来影响进位标识位carry-flag的值; 使能标记查找模块,用于根据carry-flag的值找到所述标记字段中在移位方向上的 使能标记位。
8.如权利要求7所述的装置,所述使能标记查找模块具体用于当标记字段逐位移出所述数据表项时,判断carry-flag的值,如果为1,则确定当前移 出所述数据表项的标记位为使能标记位;如果为0,则通知移位模块将所述标记字段中未 移出的标记位进行移位操作来影响carry-flag的值。
9.如权利要求6所述的装置,所述查找单元包括分段模块,用于将所述标记字段分为n个子标记字段,n为大于等于1的整数; 多比特比较模块,用于对每个子标记字段进行多比特比较得到一个输出值A ;使能标记获取模块,用于根据所述输出值A得到所述每个子标记字段内的使能标记位。
10.如权利要求9所述的装置,其特征在于,所述多比特比较模块具体用于对第t个子标记字段进行多比特比较得到一个输出值A;所述使能标记获取模块具体用于判断输出值A是否为0,如果为0,则通知所述多比特 比较模块对t+1个子标记字段进行多比特比较;如果不为0,则确定所述第t个子标记字段 内的A位置为使能标记位,将该位置清零后再通知所述多比特比较模块对所述第t个子标 记字段进行多比特比较。
11.一种处理器,其特征在于,包括如权利要求6-10任一所述的装置。
全文摘要
本发明实施例提供了一种数据表项的查找处理的方法和装置,所述数据表项包括标记字段和与所述标记字段中的标记位相对应的数据字段,所述方法包括查找所述标记字段中的使能标记位;跳转到所述使能标记位所对应的数据字段进行代码处理。本发明实施例通过直接查找标记字段中的使能标记位并执行该使能标记位所对应的处理代码,使得本发明实施例不需要执行数据表项中所有标记位所对应的处理代码,且本发明实施例仅需利用一条硬件指令来实现,从而有效提高了处理器的工作效率。
文档编号G06F17/30GK101859325SQ20101019481
公开日2010年10月13日 申请日期2010年6月7日 优先权日2010年6月7日
发明者韩冰 申请人:华为技术有限公司