专利名称:条件式比较指令的制作方法
技术领域:
本发明相关于数据处理领域。更特定而言,本发明相关于条件式比较指令。
背景技术:
已知可提供具有用以代表处理装置的当前条件状态的各种条件标志(flag)的处理装置。此种数据处理装置的示例为由设立在英国剑桥的ARM Limited所设计的执行ARM指令集的处理器。指令可经安排以条件式地执行,以使条件标志的当前状态在条件式指令执行时,控制是否要执行条件式运算。例如,对于一种条件式指令类型,在执行时测试当前条件状态,并且,如果当前条件状态通过测试,则根据对两操作数所执行的运算结果更新条件标志。如果当前条件状态未通过测试,则指令作为不具功能的NOP指令,因此不改变条件
O此种指令可用以实施一些测试与对测试结果的逻辑运算的组合。例如,可使用指令序列来估算(evaluate)逻辑表达式(A = = B&&C = = D) | | E = = F,此逻辑表达式包括初始测试A== B及随后更进一步的测试链,并使用AND(&&)或0R(| I)运算将其每一个的结果与自先前运算生成的条件标志结合,指令序列包括无条件式比较指令与一或多个条件式比较指令,每一个条件式比较指令被安排以仅在先前指令的结果满足特定条件时更新条件标志。例如,表达式(A = = B&&C = =D) IlE==F可由以下指令序列估算出CMP A, BCMPEQ C,DCMPNE E, F无条件式比较指令CMP A,B比较A和B的值,并且,根据比较结果设定条件标志。如果A和B相等,则条件标志被置于EQ状态,同时如果A和B不相等,则条件标志被置于NE状态。在执行条件式比较指令CMPEQ C,D时,如果条件标志为在EQ状态中(亦即,测试A = = B满足),则执行C和D的间的比较,并且,根据比较结果更新条件标志。另外,在条件标志为在NE状态中时(亦即,测试A==B未满足),则CMPEQ指令作为NOP并且,不改变条件标志。此意味着在执彳了首两个指令的后,条件标志将仅在A = B和C = D时指不EQ状态,并将在其他情况指示NE状态。此为使用AND运算结合A==B和C==D测试的正确结果。接着,执行条件式比较指令CMPNE E,F,并且,如果条件标志为在EQ状态中(亦即,测试A== B&&C == D满足),则CMPNE指令将被当作Ν0Ρ,并且,因此条件代码将保持在EQ状态中。另外,如果条件标志为在NE状态中(亦即,测试A == B&&C == D未满足),则执行E和F的比较,并且,根据比较结果更新条件标志。因此,如果(A = B AND C = D)或E = F,最终结果将为EQ,并且,当这些测试都未满足时最终结果将为NE。此为使用OR运算结合(A = = B&&C = = D)和E = = F测试的正确结果。
因此,条件式比较指令CMPEQ和CMPNE可用以估算为(A = = B&&C = = D) | | E ==F的形式的测试链。然而,仅可当链内所有的个别测试估算相同种类关时,或在估算可被转换成相同种类关的不同种类关时使用这些种类的指令。例如,在先前示例中,所有个别测试估算”相等”关系。或者,条件式指令可用以代表为(A>B&&C<D)的形式的逻辑条件,因为关系C <D可被转换成D > C,其与A>B为相同种类关系。然而,不可能测试诸如(例如)(A > B I C== D)&&E < = F或A = = B&&C ! = D的逻辑表达式,因为被测试的关系不同,并且,无法彼此转换。因此,这些条件式指令仅可用于测试特定种类的逻辑表达式。此意味着使用此等指令所能编译的原始码数量被限制,并且,对编译程序而言,确定条件式指令是否可用于特定应用是复杂的。
发明内容
本发明的第一方面提供一种数据处理装置,包括处理电路,其用于处理数据;指令译码器,其响应于程序指令以生成用于控制所述处理电路以处理所述数据的控制信号;状态存储器,其用于存储所述处理电路的当前条件状态,所述当前条件状态在处理所述数据期间为可修改的;其中所述等程序指令包括条件式比较指令,并且,所述指令译码器响应于所述条件式比较指令以生成用于控制所述处理电路以执行条件式比较运算的控制信号,所述条件式比较运算包括(i)如果所述当前条件状态通过测试条件,则对第一操作数和第二操作数执行比较运算,并设定所述当前条件状态为在所述比较运算期间生成的结果条件状态;以及(ii)如果所述当前条件状态未通过所述测试条件,则设定所述当前条件状态为由所述条件式比较指令指定的未通过条件状态。·本技术提供条件式比较指令,其控制处理电路以确定处理电路的当前条件状态是否通过测试条件。独立于当前条件状态通过或未通过测试条件,当前条件状态被更新。新的当前条件状态值由不同方式确定,取决于当前条件状态通过或未通过测试条件。如果当前条件状态通过测试条件,则对第一操作数和第二操作数执行比较运算,并且,当前条件状态被设定为在比较运算期间生成的结果条件状态。另一方面,如果当前条件状态未通过测试条件,则当前条件状态被设定为由所述条件式比较指令指定的未通过条件状态。能够指定特定未通过条件状态值(其在当前条件状态未通过测试条件时取代当前条件状态)的能力,使条件式比较指令能够用以测试不同类型的比较序列链。这是因为,对于对应于链中的一个比较的条件式比较指令,未通过条件状态可用以建立所需测试链中的下一个比较的特定条件状态。因此可使用条件式比较指令,即使序列链中的关系无法被转换成相同种类关系。例如,可测试为((S == T&&U >= O) I |A ! = B)&&C > D的形式的序列,即使被测试的个别关系= =、> =、!=、>不同,并且,无法彼此转换。此意味着可更广泛的使用条件式比较指令,相较于先前已知的条件式比较指令,并且,因此可更容易的由编译程序使用。
状态存储器可为任意种类的用于存储当前条件状态的存储位置。在示例性具体实施例中,状态存储器可包括状态寄存器。装置的当前条件状态可包括存储在状态存储器中的至少一个条件代码标志的值。例如,可提供条件代码标志以指示先前比较生成了负值、零值、进位、或是溢位。较后的比较随后可依据条件标志值被制成为条件式,以使较后比较的结果亦取决于较早的比较。此使较早的比较和较后的比较能够被链结在一起以形成结合的逻辑条件。条件式比较指令可包括用于指定测试条件的字段。可由包括条件式比较指令的程序的程序设计师直接指定测试条件,或在条件式比较指令为代表所需逻辑表达式的程序指令序列的一部分时,可由编译程序自动地生成测试条件。可由条件比较指令指定未通过条件状态为立即值(immediate value)。因此,立即值指示在条件式比较指令执行的时的当前条件状态未通过测试条件时,当前条件状态将被设定至的值。
代表未通过条件状态的立即值,可为由包括条件式比较指令的程序的程序设计师设定的可编程值。此使程序设计师能够直接控制未通过条件状态。另外,代表未通过条件状态的立即值,也可为由包括条件式比较指令的程序的编译程序设定的可编程值,编译程序根据所需条件选定可编程值,条件式比较指令的未通过条件状态随后必须通过此所需条件。在此情况中,编译程序可确定所需条件为何,并且,如果测试条件未通过,则将所需条件转换成将写入当前条件状态的可编程值。例如,如果所需条件为EQ条件,则编译程序可选定可编程值,其在发生测试条件未通过时被写入条件标志,并导致EQ条件被满足。在多个可能的可编程值的每一个皆满足所需条件的情况下,可安排编译程序来应用对于选定要使用哪一个可编程值的选择准则,以确保编译程序每次都以同样的方式编译特定原始码。例如,编译程序可选定最大或最小的满足所需条件的可能值,或应用任意其他的对于选定用作未通过条件状态值的一个值的规则。未通过条件状态值可被指定为N位未通过条件状态值,其中N为大于零的任意整数,并且,当前条件状态可由N位值代表。指令译码器可控制处理电路,以在当前条件状态未通过测试条件时,将N位未通过条件状态值写入状态存储器中。可由相同方式编码未通过条件状态和当前条件状态,以使未通过条件状态值的特定位在当前条件状态未通过测试条件时,可简单地被写入至状态存储器中以更新当前条件状态。在示例性具体实施例中,当前条件状态可能够被设定至多个条件状态中的任意者,包括预定条件状态,并且,如果指定预定条件状态值为未通过条件状态的条件式比较指令未通过测试条件,则当前条件状态仅可被设定至预定条件状态。在条件式比较指令未通过其测试条件时,当前条件状态被设定至在指令中指定的未通过条件状态。在条件式比较指令通过其测试条件时,执行比较运算,并且,根据比较运算结果更新当前条件状态。因为由比较运算生成的被更新的条件状态可与未通过条件状态相同,所以不可能精确地确定测试条件为通过或未通过。 因此,在示例性具体实施例中,可提供无法出现于正常处理运算中的预定条件状态。预定条件状态为条件式比较指令所专有,以使处理电路仅可在指定预定条件状态为其未通过条件状态的条件式比较指令未通过其测试条件时,被置于预定条件状态中。因此,有可能根据测试随着条件式比较指令的执行是否出现了预定条件状态,以确定指定预定条件状态为其未通过条件的条件式比较指令是否通过或未通过其测试条件。此可为有帮助的,例如,对于测试特定数据值是否在给定数据值范围的中。条件式比较指令可包括用于指定第一操作数和第二操作数的第一和第二操作数字段。第一和第二操作数字段的至少一个可指定存储第一操作数或第二操作数的存储位置。根据指定用于存储操作数的存储位置(例如,寄存器)的数量,操作数字段可用以识别在指令编码中的具有大于可用于操作数字段的位数的位数的操作数。再者,参照在操作数字段中的存储位置,允许在欲指定的相同指令的多次执行的间有差异的可变操作数。指令译码器可经组态以响应指定位值预定组合的操作数字段的一个,来控制处理电路以执行条件式比较运算,并且,第一和第二操作数的对应的一个具有零值。例如,全I位值(例如,Oblllll)可作为用于指示零操作数的位值预定组合。因此,位值预定组合不被 指令译码器解译(interprete)为存储位置指定符(specif ier),而是用以识别零值。此为有帮助的,因为使用零值的比较是常见的,并且,因此能够直接以指令语法编码此种比较,意味着通常可避免需要存取存储位置以获得零操作数。第一和第二操作数字段的一个可指定立即值为第一操作数或第二操作数。这种指令形式对于在可变值和固定值的间的比较可为有帮助的。在此情况中,操作数字段的一个可用以指定存储可变操作数的存储位置,并且,其他操作数字段可用以指定代表固定值的立即值。如果条件式比较指令的测试条件被满足,则由处理电路执行的比较运算可为各种形式。例如,比较运算可包括以下步骤的任意一个(a)将所述第一操作数减去所述第二操作数;(b)将所述第一操作数加上所述第二操作数;(C)对所述第一操作数和所述第二操作数执行按位异或运算;(d)对所述第一操作数与所述第二操作数执行按位与运算;(e)将所述第一操作数、所述第二操作数、与所述状态存储器的进位位相加;(f)对所述第一操作数与所述第二操作数执行按位或运算。比较运算亦可包括对第一和第二操作数执行的另一算数或逻辑运算。本发明的另一方面提供一种数据处理装置,包括处理部件,用于处理数据;指令译码器部件,用于响应于程序指令以生成控制信号,所述等控制信号用于控制所述处理部件以处理所述数据;状态存储器部件,用于存储所述处理部件的当前条件状态,所述当前条件状态在处理所述数据期间为可修改的;其中所述等程序指令包括条件式比较指令,并且,所述指令译码器部件响应于所述条件式比较指令以生成用于控制所述处理部件以执行条件式比较运算的控制信号,所述条件式比较运算包括(i)如果所述当前条件状态通过测试条件,则对第一操作数和第二操作数执行比较运算,并设定所述当前条件状态为在所述比较运算期间生成的结果条件状态;以及(ii)如果所述当前条件状态未通过所述测试条件,则设定所述当前条件状态为由所述条件式比较指令指定的未通过条件状态。
本发明的另一方面提供一种数据处理方法,包括以下步骤 响应于包括条件式比较指令的程序指令,生成用于控制处理电路以处理数据的控制信号;存储所述处理电路的当前条件状态,所述当前条件状态在处理所述数据期间为可修改的;响应于所述条件式比较指令,生成用于控制所述处理电路以执行条件式比较运算的控制信号,所述条件式比较运算包括(i)如果所述当前条件状态通过测试条件,则对第一操作数和第二操作数执行比较运算,并设定所述当前条件状态为在所述比较运算期间生成的结果条件状态;以及 (ii)如果所述当前条件状态未通过所述测试条件,则设定所述当前条件状态为由所述条件式比较指令指定的未通过条件状态。本发明的另一方面提供一种编译由数据处理装置执行的程序指令序列的方法,程序指令序列包括无条件式比较指令和至少一个条件式比较指令,无条件式比较指令用于控制所述数据处理装置以对两操作数执行无条件式比较运算,并设定所述数据处理装置的当前条件状态为在所述无条件式比较运算期间生成的结果条件状态,至少一个条件式比较指令用于控制所述数据处理装置以执行条件式比较运算,条件式比较运算包括以下步骤(i)如果所述数据处理装置的所述当前条件状态通过测试条件,则对第一操作数和第二操作数执行比较运算,并设定所述当前条件状态为在所述比较运算期间生成的结果条件状态;以及(ii)如果所述当前条件状态未通过所述测试条件,则设定所述当前条件状态为由所述条件式比较指令指定的未通过条件状态;所述方法包括以下步骤(a)接收定义使用一个或多个与运算或或运算逻辑结合(logically combined)的N个比较运算的序列链的数据的输入,其中N为大于I的整数,所述等N个比较运算的每一个测试各自的操作数是否满足各自的预定准则;(b)生成对应所述序列链的第一个比较运算的所述无条件式比较指令;(c)对于在2和N的间的每个整数值i,执行下列步骤(i)确定所述序列链的第i个比较运算是否使用AND运算或OR运算与部分序列链的结果逻辑结合,所述部分序列链包括所述序列链的第一个至第i_l个比较运算;(ii)如果所述第i个比较运算使用与运算与所述部分序列链的所述结果逻辑结合,则生成对应所述第i个比较运算的条件式比较指令,所述条件式比较指令将在所述第i-Ι个比较运算的所述预定准则被满足时通过的条件指定为所述测试条件,并将对应所述第i个比较运算的所述预定准则未被满足的条件状态指定为所述未通过条件状态;(iii)如果所述第i个比较运算使用OR运算与所述部分序列链的所述结果逻辑结合,则生成对应所述第i个比较运算的条件式比较指令,所述条件式比较指令将在所述第i_l个比较运算的所述预定准则未被满足时通过的条件指定为所述测试条件,并将对应所述第i个比较运算的所述预定准则被满足的条件状态指定为所述未通过条件状态;(d)将至少在步骤(b)中生成的所述无条件式比较指令与在步骤(C)中生成的N-I个所述条件式比较指令输出为所述程序指令序列。本技术的条件式比较指令可用以代表使用一个或多个与运算或或运算逻辑结合的N个比较运算的序列链。N个比较运算的每一个测试各自的操作数是否满足预定准则。本技术的条件式比较指令使比较运算的每一个能够测试不同的准则。例如,比较运算的一个可测试一个操作数是否大于另一个操作数,而下一个比较运算可测试一个操作数是否等于另一个操作数,并且,另一个比较运算可测试一个操作数是否不等于另一个操作数。注意到术语“准则”用于表示由特定比较(例如,A>B或C==D)测试的关系,尽管名词“条件”表示控制条件式比较指令的比较运算是否被执行的测试(例如,用以看看当前条件状态是否为HI状态的测试、用以看看Z标志是否被设定以表示先前结果为零的测试、或为用以看看N标志是否被设定以表示先前结果为负的测试)。可由生成对于每个比较运算的比较指令,一步步建构代表N个比较运算的序列链的程序指令的序列(N为大于一的整数)。每个比较运算指定预定准则(例如,A < B),并且,根据AND或OR运算被链结至先前比较运算的部分序列链的结果。对于序列链中的第一个比较运算,生成无条件式比较指令。对于第i个比较运算(i为2至N的间的任意整数),生成条件式比较指令,并且,第i个条件式比较指令的测试条件与未通过条件状态取决于第i个比较运算是否以AND运算或OR运算与部分序列链的结果逻辑结合,部分序列链包括第一个至第i_l个比较运算。
·
如果第i个比较运算由AND运算与先前比较运算的部分序列链的结果逻辑结合,则第i个条件式比较指令指定在第i_l个比较的预定准则被满足时通过的条件为测试条件,并且,指定对应至未被满足的第i个比较运算的预定准则的条件状态为未通过条件状态。此确保如果第i-Ι个预定准则生成“未通过”结果,则第i个条件式比较指令将不会通过其测试条件,并且,因此回到其自身的未通过条件状态,同时如果第i_l个预定准则比较运算生成“通过”结果,则第i个比较运算将通过其测试条件,并且,将生成取决于第i个预定准则是否被满足的结果条件状态。因此,第i个与第i_l个比较的结合仅将在第i_l个与第i个预定准则皆被满足时生成通过结果,其为AND运算所需的行为。另一方面,如果第i个比较运算使用OR运算与先前比较运算的部分序列链的结果逻辑结合,则生成对应第i个比较运算的条件式比较指令,条件式比较指令指定在第i_l个比较运算的预定准则未被满足时通过的条件为测试条件,并且,指定对应至第i个比较运算的预定条件被满足的条件状态为未通过条件状态。此确保如果第i-Ι个预定准则被满足,则第i个条件式比较指令不通过其测试条件,并且,因此生成对应至第i个预定条件被满足的“通过”条件状态为其未通过条件状态。另一方而,如果第i_l个比较未满足其预定准则,则第i个条件式比较指令通过其测试条件,并且,因此将生成取决于第i个预定准则是否被满足的结果条件状态。此意味着总体结果将为相关于第i个预定准则的“通过”条件,只要第i_l个与第i个预定准则的任意者被满足。此为OR运算所需的行为。因此,根据生成为此形式的条件式比较指令串,可将比较序列链转换成程序指令序列。所生成的指令序列随后被输出。将理解,,生成无条件式比较指令与条件式比较指令的时间顺序并不重要。例如,可由对应至比较运算序列链的时间顺序生成指令(亦即,使计数器i从2递增至N)。或者,可由序列链的反向时间顺序生成指令(使计数器从N递减至2),或可由任意其他时间顺序。无论由何时间顺序生成指令,所生成的指令的程序顺序为相同,其中第一个指令为对应至链中第一个比较运算的无条件式比较指令,第二个指令为对应至链中第二个比较运算的条件式比较指令,以此类推。
可提供用于存储计算机程序的计算机存储媒体,计算机程序在由计算机执行时控制计算机以执行用于编译如上所述的程序指令序列的方法。本发明的另一方面提供存储计算机程序的非瞬态计算机存储媒体,计算机程序包括用于控制处理电路以执行条件式比较运算的条件式比较指令,条件式比较运算包括(i)如果所述处理电路的当前条件状态通过测试条件,则对第一操作数和第二操作数执行比较运算,并设定所述当前条件状态为在所述比较运算期间生成的结果条件状态;以及(ii)如果所述当前条件状态未通过所述测试条件,则设定所述当前条件状态至由所述条件式比较指令指定的未通过条件状态。本发明的上述和其他的目的、特征和优点将显然于下文的说明性具体实施例的实施方式,其需连同附加图式阅读。
图I示意性地示出了数据处理装置;图2示意性地示出了条件代码标志的示例;图3A和图3B分别示出了条件式比较指令的示例语法和示例编码,条件式比较指令包括用于指定测试条件、两个寄存器操作数和立即未通过条件状态值的字段;图4A和图4B分别示出了条件式比较指令的替代示例语法和示例编码,其中操作数中的一个被指定为立即值;图5示出了用于处理条件式比较指令的方法; 图6A至图6F示出了条件式比较指令的不同类型,其每一个对应至不同的比较运算;图7A和图7B示出了用于生成代表比较运算序列链的程序指令序列的示例方法;图8示出了各种条件状态与代表每个条件状态的条件标志的组合;图9示意性地示出了虚拟机实施;图10示出了包括预定条件状态的条件状态示例,预定条件状态为条件式比较指令所专用;以及图11示出了使用指定预定条件状态为其未通过条件状态的条件式比较状态,限制变量X至给定范围的数据值中的示例。
具体实施例方式图I示出了数据处理装置2。数据处理装置2包括用于处理数据的处理电路4。处理电路可包括各种部件,例如寄存器库6、加法器8、移位器10和乘法器12。加法器8、移位器10和乘法器12 —同处理存储在寄存器库6中的数据,并且,将处理结果写回寄存器库
6。将理解,处理电路4并不限于此配置,并且,通常将包括许多其他部件,其为了简明目的不在此示出。数据处理装置2包括译码器14,其响应于程序指令以生成用于控制处理电路4以处理数据的控制信号。数据处理装置2包括用于存储状态数据的状态存储器15,状态数据报含处理电路4的至少一个当前条件状态。在图I的示例中,状态存储器15为状态寄存器,但存储位置亦可包括其他形式的存储位置。虽然在图I中示出了状态寄存器15为在处理电路4中,在其他具体实施例中,状态寄存器15可被定位于装置2的另一部分中。在具体实施例中,由存储在状态寄存器15中的一组条件代码标志表示当前条件状态。条件代码标志表示由处理电路4生成的先前处理结果的条件。在图2示出了的示例具体实施例中,状态寄存器15的条件代码标志包括用于表示先前处理结果是否为负数的负标志N、用于表示先前处理结果是否为零的零标志Z、用于表示在生成先前处理结果时是否发生了进位的进位标志C、以及用于表示在生成先前处理结果时是否发生了溢位的溢位标志V。因此,条件代码标志的值提供了关于先前处理结果的信息。标志可被设定以表示发生了负数、零值、进位或溢位,并且,可被清除以表示相反的状况,或反的亦然。对于由条件代码标志N、Z、C、V的不同组合所代表的信息的示例,可见于图8和图10。图3A示出了根据本技术的条件式比较指令CCMP的示例语法。条件式比较指令具有用于指定测试条件、两个操作数、和未通过条件状态的字段。指令译码器14响应条件式 比较指令以控制处理电路4,来确定存储在状态寄存器15中的当前条件状态是否满足与条件式比较指令相关的测试条件(cond)。如果当前条件状态满足测试条件,则处理电路4对两个操作数执行比较运算,并且,基于处理结果更新当前条件状态(例如,如果比较运算生成负值,则条件标志N可被设定))。如果在条件式比较指令执行的时的当前条件状态不满足测试条件,则比较运算不被执行,并且,由条件式比较指令指定的未通过条件状态值被写入至状态寄存器15中以更新当前条件状态。图3B示出了图3A的条件式比较指令的示例编码。在此示例中,指令包括用于指定测试条件的4位字段、用于指定操作数寄存器的两个5位字段、以及用于指定未通过条件状态的4位字段。将理解,,可依所需对每个字段使用其他位数量。在此示例中,4位测试条件识别符#0b0000表示EQ条件。在指令被执行时,测试条件代码以看看是否满足EQ测试条件。如果满足EQ测试条件,则比较存储在操作数寄存器(在此示例中为寄存器R2和R9)内的值,并且,基于比较结果更新条件代码。如果未满足EQ测试条件,则写入未通过条件状态值(在此示例中为#0b0001)至条件代码NZCV中。在图3A的语法中,条件式比较指令使用寄存器指定符Rn、Rm指定操作数两者。寄存器指定符RruRm识别存储欲比较的操作数的寄存器库6的寄存器。欲比较的操作数可为整数或浮点数。在如图4A所示的另一示例语法中,可指定操作数的一个#op为在条件式比较指令中的立即值。在欲比较变量和常数彼此时,此可为有用的。图4B示出了具有如图4A所示的语法的指令的示例编码。如果满足测试条件(例如,LT),则比较存储在操作数寄存器(例如,R7)中的值和立即值(例如,#19),并且,根据比较更新条件代码。如果未满足测试条件,则写入未通过条件状态代码#0b0000至条件代码NZCV中。在使用寄存器指定符指定操作数时,指令译码器14可选择性地经配置以将特定寄存器指定符值解译为表示零操作数,而非存储在寄存器内的操作数。例如,在图3的具体实施例中,在寄存器指定符Rm指定全I位值Ob 11111时,此可用以表示处理电路4需将存储在寄存器Rn中的操作数与零值比较。在图3和图4两者的语法中,指定未通过条件状态为立即值,立即值代表如果测试条件未通过则欲写入状态寄存器15的条件代码标志的位值。例如,使用如图2所示的NZCV条件代码标志,代表ObOlOO的未通过条件状态的立即值可表示需写入O至负标志N、进位标志C和溢位标志V,并且,需写入I至零标志Z。以此方式,如果未通过测试条件,则条件式比较指令直接指定欲采取的条件状态。此为有用的,因为此使条件式比较指令能够用以设定当前条件状态为准备由随后条件式指令使用的适当的值。图5示出了一种用于使用本技术的条件式比较指令的数据处理方法。在步骤50,指令译码器14译码指令序列的下一个指令。在步骤60,译码器14确定下一个指令是否为条件式比较指令。如果下一个指令不为条件式比较指令,则在步骤70指令译码器14生成对应于下一个指令的控制信号,并且,控制处理电路4执行对应于下一个指令的运算。随后程序进行至步骤80,在步骤80处确定是否还有任何指令需处理。如果还有需处理的指令,则方法回到步骤50,并且,译码下一个指令。如果没有欲处理的指令,则方法结束。另一方面,如果在步骤60下一个指令为条件式比较指令,则指令译码器生成用于控制处理电路4的控制信号以执行条件式比较运算。在步骤90,处理电路4确定由状态寄存器15的条件代码标志代表的当前条件状态是否通过与条件式比较指令相关的测试条 件。如果当前条件状态通过了测试条件,则在步骤100处理电路4被控制以对第一和第二操作数执行比较运算。随后在步骤110更新状态寄存器15,以设定当前条件状态为于在步骤100执行比较运算的同时生成的结果条件状态。另一方面,如果在步骤90当前条件状态未通过测试条件,则在步骤120设定当前条件状态为由条件式比较指令指定的未通过条件状态。例如,写入由条件式比较指令指定的立即值状态至存储器15的条件代码标志。无论在步骤90当前条件状态是否通过了测试条件,方法随后进行至步骤80,并且,确定是否仍有需处理的指令。如果存在需处理的另一指令,则方法回到步骤50。如果无,则方法结束。图5示出了无论条件式比较指令的当前条件状态是否通过测试条件,代表当前条件状态的条件代码标志被更新(相对于先前条件式指令,如果测试条件未通过则其作为无作业(no-op)指令)。当前条件状态的更新值取决于当前条件状态是否通过测试条件。如果当前条件状态通过测试条件,则更新的条件状态基于比较第一和第二操作数的结果来确定,同时如果当前条件状态未通过测试条件,则更新值为由条件式比较指令指定的未通过条件状态。此种指令是有用的,因为如果当前条件状态未通过测试条件,则指定当前条件状态需被更新至的未通过条件状态的能力,使这些指令能够用以代表一串测试不同种类的逻辑关的比较运算链。可提供各种类型的条件式比较指令,其每一个根据图5的步骤90-120来处理,但在步骤100使用不同的比较运算。图6A至图6F示出了这些条件式比较指令类型的示例。图6A至图6F示出了使用寄存器指定符识别第一和第二操作数的形式的指令,但也可提供这些指令的每一个的替代形式,其中操作数的一个被指定为立即值。如下文所述,如果为所需,贝1J亦可修改这些指令的语法,以指定未通过条件状态为助忆(mnemonic)条件而非为立即值#imm。图6A示出了条件式比较正指令CCMP。如果由条件式比较正指令指定的测试条件被通过,则处理电路4被控制以从第一操作数减去第二操作数,并写入结果条件状态至条件标志,同时如果测试条件未被通过,则写入在指令中指定的未通过条件状态#imm至条件标志。此种指令对测试第一操作数是否大于、或等于第二操作数可为有用的。图6B示出了条件式比较负指令CCMN。如果由指令指定的测试条件由当前条件状态通过,则第一和第二操作数被相加并且,结果条件状态被写入条件标志,同时如果当前条件状态未通过测试条件,则写入未通过条件状态至条件标志。此种指令可帮助测试第一操作数是否大于由将第二操作数乘上-I所获得的值(因为将第一和第二操作数相加,等于从第一操作数减去(-1*第二操作数))。图6C示出了条件式相等测试指令CTEQ。在执行此种类指令时,如果由指令指定的测试条件被通过,则处理电路4经配置以对第一和第二操作数执行EOR运算,并且,将结果条件状态写回条件标志,同时如果测试条件未被通过,则由指令指定的未通过条件状态#imm被写回条件标志。此种类指令可用以测试第一操作数是否相等于第二操作数。图6D示出了条件式按位测试指令CTST。在执行此类型指令时,如果测试条件被通 过,则处理电路对第一和第二操作数执行按位AND运算,并将结果条件状态写入条件标志,同时如果测试条件未被通过,则将未通过条件状态写入条件标志。此类型指令可用以测试对应于在第二操作数中的“I”位的位置的第一操作数的位是否为全零或非全零。特别有用的情况为,在第二操作数正好包括一个“ I”位时,以及在指令测试第一操作数的对应位是否为“O”或“I”时。图6E示出了具有进位的条件式加法指令CADC。在执行此指令时,如果测试条件被通过,则控制处理电路4以将第一操作数、第二操作数与在状态寄存器15中的进位标志C的当前值相加,并将此加法所生成的结果条件状态写入条件标志中。另一方面,如果测试条件未被通过,则写入未通过测试条件#imm条件标志,如对其他类型的条件式比较指令般。进位加法运算可用以代表多字加法(multi-word addition)的第二、第三或更进一步的字,进位位表示多字加法的前一字是否生成了进位。图6F示出了条件式按位OR测试指令C0RRT,其在执行时控制处理电路4以对第一和第二操作数执行按位0R,如果测试条件被通过。从按位OR出现的结果条件状态被写入条件标志。另一方面,如果测试条件未被通过,则将未通过条件状态#1_写入条件标志。此种指令可用以测试两个寄存器是否都存储零值。此对于测试倍宽数据值是否等于零特别有用。例如,倍宽128位值RnHi/Lo可使用两个64位寄存器RnHi和RnLo存储。按位OR测试指令使倍值的两半部分能够被使用单一指令来对零测试,因为倍宽值的上部分和下部分的按位OR仅当两部分皆等于零时才具有零值。相较于个别地将倍宽值的每一部分对零比较,此可为更有效率。因此,(RnHi/Lo! = 0)&&(RmHi/Lo = = O)形式表达式可更有效率地使用两个指令来估算ORRT RnHi,RnLo ;// 如果 RnHi/Lo = O 则 Z = 1,并且,如果为其他情况则 Z = O)CORRT NE, RmHi,RmLo,#0"如果(0RRT 设定 Z 为 OANDRmHi/Lo = O)则 Z = 1,//如果为其他情况则Z = O。将理解,在任意特定具体实施例中,指令译码器可响应于任一个或更多的这些指令,以控制处理电路4来执行对应类型的条件式比较运算。例如,在特定具体实施例中,译码器14可经配置以响应于在图6A和图6B中所示的条件式比较指令类型,但不回应其他种类的条件式比较指令。
条件式比较指令串可用以代表比较运算的序列链,其中在序列中的每个比较运算,使用AND或OR运算与所有先前比较运算的结合结果结合(例如,序列(A < B&&C ==D) I I E > = F)。每个比较运算测试特定准则(例如,在上述示例中,第一比较运算测试A < B与否的准则,第二比较运算测试C = D与否的准则,并且,第三比较运算测试E彡F与否的准则)。不像在先前已知的条件式指令,本技术的条件比较指令可在比较运算链测试一个以上二的准则种类时使用。图7A和图7B示出了用以将特定比较运算序列链转换成比较指令序列的方法的具体实施例。此种方法可例如由编译程序执行,编译程序接收定义比较运算序列的输入,并生成对应的程序指令序列。
图7A示出了此种方法的第一具体实施例。在步骤200,输入定义N个比较运算序列链的数据(N为大于I的任意整数)。在步骤202,设定计数变量i为等于N。在步骤204,确定结合序列链的第i个比较与序列链的第一个至第i_l个比较的结合结果的逻辑运算是否为AND运算或OR运算。例如,在序列(A < B&&C = =D)||E>=F中,在i = 3时序列的第i个比较(E >= F)经由OR运算I I被链结至第一个至第i-Ι个比较(A < B&&C ==D)的组合,并且,在i = 2时序列的第i个比较(C==D)经由AND运算&&被链结至第i_l个比较(A < B)。如果在步骤204确定第i个比较运算与第一个至第i-Ι个比较运算的部分链由与运算链结,贝1J在步骤206对第i个比较运算生成条件式比较指令,其中测试条件cond被设定为在第i_l个比较满足其预定准则时通过的条件,并且,未通过条件状态被设定为对应于第i个比较的准则未被满足的任意值。例如,当在上述示例中i = 2时,在第i-Ι个比较(A < B)满足其预定准则时通过的条件为条件LT (见第8图-假定有符号比较(signed comparison)),因为此将表示A<B。因此,对于第二个条件式比较指令运算的测试条件为LT。同样的,对于i = 2,在C不相等于D时第i个比较(C = = D)的准则未被满足,即图8所示的NE状态,其中Z标志未被设定。因此,第i个条件式比较指令的未通过条件状态值可被设定为将导致Z标志被清除(例如,ObOOOO)的任意组合值。另一方面,如果在步骤204结合第i个比较运算与第一个至第i-Ι个比较运算的部分链的逻辑运算为或运算,则在步骤208对第i个比较运算生成条件式比较指令,其中测试条件被设定为在第i个比较运算未满足其准则时通过的条件,并且,未通过条件状态值被设定为对应至第i个比较的准则被满足的任意值。例如,对于上述示例序列在i = 3时,在第i-Ι个比较运算(C==D)未满足其准则时通过的条件为第8图的NE状态,并且,因此对于第三个条件式比较运算的测试条件被设定为NE。同样的,对于i = 3,在E大于或等于F时第i个比较(E >= F)的准则被满足(例如,在对于有符号比较的GE状态中-见第8图)。因此,未通过条件状态值可被设定为对应至GE状态的条件标志值的任意组合(例如,继续参照图8,位N和V为相同,并且,所有其他位可具有任意值-亦即ObOOOO)。无论逻辑运算是否为与运算或或运算,随后在步骤210递减计数变量i,并且,在步骤212确定新的计数变量i是否大于或等于2。如果新的计数变数i大于或等于2则对新的i值重复步骤204至212,以对另一比较运算生成另一条件式比较指令。以此方式对序列链的第二个至第N个比较运算生成条件式比较指令。如果在步骤212,i小于2,则方法进行至步骤214,在步骤214对序列链的第一个比较生成无条件式比较指令。例如,在上述序列中,可生成确定A < B与否并根据比较结果更新条件代码标志的无条件式比较指令。在步骤216,所有生成的指令由与生成顺序反向的顺序输出,以形成代表比较运算的序列链的指令序列。图7B示出了用于生成对应于比较运算的指令序列的方法的替代性具体实施例。图7B的步骤,其与图7A的对应步骤相同,并以与图7A相同的组件符号标示。图7B与图7A的不同之处在于指令是以在序列链中的对应比较运算的顺序生成的,而非如图7A中以反向顺序生成。序列链的第一个比较运算的无条件式比较指令在图7B的步骤214生成。随后在步骤220计数变数i被初始化至值2。随后对第i个比较运算执行步骤204至208,其与图7A的对应步骤相同,并且,在i于步骤222循序递增的同时重复,直至在步骤226i大 于N。此意味着对于链中的第二个至第N个比较运算生成了条件式比较指令。一旦i大于N,则在步骤230所生成的指令由在步骤230生成的顺序输出,以形成程序指令序列。如可见于图7A至图7B,对于第一个比较运算的无条件式比较指令以及对于第二个至第N个比较运算的条件式比较指令生成的顺序并不特别重要,只要对第二个至第N个比较运算的每一个生成条件式比较指令并对第一个比较运算生成无条件式比较指令,并且,所生成的指令被由正确的程序顺序输出。在本发明领域具有通常知识者将可认知,也可以使用除了图7A和图7B所示的生成顺序以外的顺序。在图7A和图7B的步骤214生成的无条件式比较指令,可为具有与条件式指令不同的语法的指令。例如,无条件式比较指令可具有指定两个操作数的语法,以使指令译码器生成用于控制处理电路4的控制信号,以比较操作数并根据比较结果更新条件代码标志NZCV0无条件式比较指令语法可省略图3、图4或图6所示的条件式比较指令语法的测试条件与未通过条件状态。在此种具体实施例中图8的AL(总是通过)条件状态可被省略。或者,无条件式比较指令与条件式比较指令可具有共同的语法,根据设定测试条件cond为无论条件标志值为何,而总是被满足的条件状态,可使用在图3、图4和图6中的任意者所示的条件式比较指令语法形成无条件式比较指令。例如,对于无条件式指令,测试条件cond可被设定为相等于图8的“总是”条件状态AL,以使指令总是通过其条件代码(在此情况中,因为未通过条件状态将不被需要,所以其可被设定为任意值)。因此,相同种类的指令语法可同时作为无条件式比较指令与条件式比较指令,取决于对指令指定的测试条件。此可增进指令编码空间的使用效率。图8示出了图标条件代码标志的不同组合的表,每个组合代表由特定条件后缀(或条件“助忆”)指定的特定条件状态。例如,PL状态表示先前处理结果为正或零,并且,由“N”条件标志为清除以指定。因此,NZCV的任意组合位值ObOxxx (其中X为O或I的任意者)具有为清除的N位,并且,因此可表示PL状态。下文更详细解释图7A和图7B的方法。假设某人现有“如果(if) ”测试,其为单独比较的序列链,诸如if (((s = = t&&u > = O) I I a ! = b) &&c > d)其中仅为示例的目的,某人假定s、t和U为有符号变数并且,a、b、c和d为有符号无符号变量(他们同样可为有符号无符号变量)。用于对此种序列链生成码序列的一组适合的规则为I.将总是由对于链中最终个别比较的适合条件来反映结果。2.如果序列链仅包括单一个别比较,则对其的两个操作数使用无条件式比较(CMP)指令(参见图7A和图7B的步骤214)。定义无条件式比较指令以根据比较结果生成图8的条件状态的一个。3.其他情况下,序列链由较短的序列链与一个额外的单独比较与或或所组成。4.如果序列链由较短的序列链与一个额外的比较AND所组成,则(参见图7A和图7B的步骤206)对此较短的序列链生成指令序列,并于其后加上CCMP cond, opl, op2,#imm其中cond为在较短的序列链通过时其生成的条件;·opl和op2为用于额外比较的两个操作数;以及imm为N、Z、C、V条件标志值的任意组,其对应于所需的来自额外比较的“未通过”结果。此确保如果较短的序列链生成其“未通过”条件,则额外的比较将生成其自身的“未通过”条件,并且,如果较短的序列链生成其“通过”,则额外的比较将生成其自身的“未通过”结果或其自身的“通过”结果,取决于个别测试的结果,其为对于与额外比较AND的正确行为。5.如果序列链由较短的序列链与一个额外的比较OR所组成(参见图7A和图7B的步骤208),则对此较短的序列链生成指令序列,并于其后加上CCMP cond, opl, op2,#imm其中cond为在较短的序列链未通过时其生成的条件;opl和op2为用于额外比较的两个操作数;以及imm为N、Z、C、V条件标志值的任意组,其对应于所需的来自额外比较的“通过”结
果O此确保如果较短的序列链生成其“通过”条件,则额外的比较将生成其自身的“通过”条件,并且,如果较短的序列链生成其“未通过”条件,则额外的比较将生成其自身的“未通过”结果或其自身的“通过”结果,取决于个别测试的结果,其为对于与额外比较OR的正确行为。为了说明上述用以生成码序列的示例,对于(((s == t&&u >= 0) I |a ! = b)SlSlc> d)序列的最终比较为无正负号的>,所以遵循规则1,目标为在其通过时(亦即为TRUE)生成图8的HI条件,并在其未通过时(亦即为FALSE)生成图8的LS条件。因此,目标为......为尚未决定的码序列......//现如果(((s = = t&&u > = 0) I I a ! = b) &&c > d)为 TRUE//则为HI,其他情况为LS序列链(((S==t&&u > = 0) I I a ! = b) SlSlc > d)由较短的序列链((s== t&&u>=O) I |a ! = b)与额外比较c > d逻辑与而成。遵循上述规则4 *较短的序列链具有!=测试为其最终比较,如果其通过则生成NE条件。*所需的额外比较“未通过”结果为LS= (C==0)||(Z = 1)。挑选满足此条件的NZCV标志组的任意值,例如NZCV = ObOOOO。并且,码序列可经由第一步骤发展为......为尚未决定的码序列......// 现如果((S== t&&u > = O) I I a ! = b)为 TRUE 则为 NE,//其他情况为EQ
CCMP NE, Re, Rd, #0b0000//现如果(((s = = t&&u > = O) I I a ! = b) &&c > d)为 TRUE//则为HI,其他情况为LS序列链((S==t&&u > = O) I I a ! = b)由较短的序列链(s = = t&&u > = O)与额外比较a ! = b逻辑或而成。遵循上述规则5 *较短的序列链具有有符号 >=测试为其最终比较,如果其未通过则生成LT条件。*所需的额外比较“通过”结果为NE = (Z == O)。挑选满足此条件的NZCV标志组的任意值,例如NZCV = ObOOOO。并且,码序列可经由第二步骤发展为......为尚未决定的码序列......// 现如果(s == t&&u > = 0)为 TRUE 则为 GE,//其他情况为LTCCMP LT, Ra, Rb, #0b0000//现如果((S== t&&u > = 0) I I a ! = b)为 TRUE 则为 NE,//其他情况为EQCCMP NE, Re, Rd, #0b0000//现如果(((s = = t&&u > = 0) I I a ! = b) &&c > d)为 TRUE//则为HI,其他情况为LS序列链(s = = t&&u >= 0)由较短的序列链s = = t和额外比较u > = OAND而成。遵循上述规则4:*较短的序列链具有==测试为其最终比较,以如果其通过则生成EQ条件。*所需的额外比较“未通过”结果为LT = (N ! = V)。挑选满足此条件的NZCV标志组的任意值,例如NZCV = ObOOOl。并且,码序列可经由第三步骤发展为......为尚未决定的码序列......Il现如果s == t为TRUE则为EQ,其他情况为NECCMP EQ, Ru, #0, #0h0001// 现如果(s == t&&u > = 0)为 TRUE 则为 GE,//其他情况为LTCCMP LT, Ra, Rb, #0b0000
// 现如果((s== t&&u > = O) I I a ! = b)为 TRUE 则为 NE,//其他情况为EQCCMP NE,Re,Rd,#0b0000//现如果(((s = = t&&u > = O) I I a ! = b) &&c > d)为 TRUE//则为HI,其他情况为LS最后,序列链s = = t仅为单一比较,故遵循上述规则2,如上所述对其使用无条件式比较指令。此生成完整码序列CMP Rs, Rt //现如果s = = t为TRUE则为EQ,其他情况为NECCMP EQ, Ru, #0, UOhOOOl// 现如果(s == t&&u >= O)为 TRUE 则为 GE,//其他情况为LTCCMP LT, Ra, Rb, #0b0000// 现如果((S== t&&u > = O) I I a ! = b)为 TRUE 则为 NE,//其他情况为EQCCMP NE, Re, Rd, #0b0000//现如果(((s = = t&&u > = O) I I a ! = b) &&c > d)为 TRUE//则为HI,其他情况为LS上述技术可由编译程序执行,以将所需逻辑表达式转换成程序指令序列以估算表达式。指令不须以任意特定的顺序确定或生成,只要指令以正确的程序顺序被输出,故可能存在不同的生成方法的具体实施例(参见图7A和图7B)。在上述示例中,由指令语法指定未通过条件状态为立即值,立即值指定欲写入状态寄存器15中的条件代码的字节合值。然而,语法可替代性地指定未通过条件状态为条件助忆(后缀),诸如第图8所示的HI、LS、PL等等。在此指令形式中,程序设计师随后可指定未通过条件状态所需的条件助忆,并且,在组译指令时组译器(assembler)可将条件助忆转换成特定的立即值。因此,从指令译码器14的观点看来,指令看起来与其他具体实施例相同,但从程序设计师的观点看来指令语法更为直觉,因为相较于条件代码值,使用助忆可更清楚了解不同条件状态的意义。响应于特定条件助忆,组译器可选定可写入条件标志,以使得由助忆表示的条件状态被保持的任意未通过条件状态。如果存在对应至相同条件的多个可能的立即值,则可提供用于选定对应至条件的值的规则给组译器。例如,组译器可选定最大或最小的可用值,以确保每次原始码皆由相同方式组译。例如在图8中,满足EQ状态的最大可能值为OblllK并且,Z位被设定)。因此,在指定未通过条件状态为条件助忆的具体实施例中,在上述示例中决定的最终指令序列可为CMP Rs, Rt//现如果s = = t为TRUE则为EQ,其他情况为NECCMP EQ, Ru, #0, LT
// 现如果(s = = t&&u > = O)为 TRUE 则为 GE,//其他情况为LTCCMP LT,Ra,Rb,NE// 现如果((S== t&&u > = O) I I a ! = b)为 TRUE 则为 NE,//其他情况为EQCCMP NE,Re,Rd,LS//现如果(((s = = t&&u > = O) I I a ! = b) &&c > d)为 TRUE //则为HI,其他情况为LS 图9示出了可使用的虚拟机实现。虽然上文所述的具体实施例依据用于操作支持所关切技术的特定处理硬件的装置和方法来实施本发明,也可以提供所谓的硬件装置的虚拟机实现。这些虚拟机实现在运行支持虚拟机程序510的宿主操作统520的宿主处理器530上运行。通常需要大型强力的处理器来提供以适当的速度执行的虚拟机实施,但在特定环境下可调整此种作法,诸如在为了兼容性或再使用的缘由而想要运行另一处理器专用的码时。虚拟机程序510提供应用程序编程接口给应用程序500,其与由虚拟机程序510模型化的真实硬件所提供的应用程序编程接口相同。因此,程序指令,包括上文所述的对内存存取的控制,可使用虚拟机程序510从应用程序500内执行,以模型化他们与虚拟机硬件的互动。图10示出了图8所示的条件状态的可选延伸。在图10的示例中,处理电路4可被设定为一些不同条件状态的任意者,包括预定条件状态MZ,其专由条件式比较指令使用。处理装置无法经由正常处理运算被置于MZ条件状态中。MZ条件状态仅在指定MZ条件状态为其未通过条件状态的条件式比较指令未通过其测试条件时出现。在图10的示例中,MZ状态由N和Z标志被设定来代表,表示“负零”结果。正常处理运算无法出现“负零”结果,因为正常处理运算将生成为零或为负的结果,但将不同时为零并且,为负。图10也示出了OK状态,其相反于MZ状态。因此,OK状态在N或Z标志为清除时被满足。MZ状态是有用的,因为其允许指令测试在的前的条件式比较指令是否通过或未通过其测试条件。可执行指定MZ状态为未通过条件状态的条件式比较指令。随后的条件式指令可随后测试条件标志是在MZ状态或在OK状态。如果条件标志为在MZ状态,则条件式比较指令未通过其测试条件,同时如果条件标志为在OK状态,则条件式比较指令通过其测试条件。图11示出了指定MZ状态为未通过条件状态的条件式比较指令如何可用以限制变量X为在给定范围BOT至TOP中的示例。如果X在可允许的范围BOT至TOP中,则X保持其原始值。如果X大于Τ0Ρ,则X被设定为相等于Τ0Ρ,同时如果X小于Β0Τ,则X被设定为相等于Β0Τ。因此,X被限制以使其最大可能值为TOP并且,其最小可能值为Β0Τ。图11示出了用于实施此对X值的限制的指令的示例序列。首先,比较指令CMP X,TOP被执行以触发对X和TOP值的比较。随后条件标志基于比较结果被更新。如果Χ<Τ0Ρ,则条件标志将被设定为LT条件状态,同时如果X ^ TOP,则条件标志将被设定为GE条件状态。接着,条件式比较指令CCMP LT,X,BOT,MZ被执行。如果LT测试条件通过,则X和BOT被比较并且,基于比较结果更新条件标志为LT和GE条件状态的一个。另一方面,如果LT测试条件未通过,则条件标志被置于MZ状态。接着,条件式选定指令CSEL,MZ, X,TOP, X被执行。如果MZ测试条件通过,则X被选定以具有TOP值,同时在其他情况下X保持其原始值。最后,条件式选定指令CSEL LT, X,BOT, X被执行。如果LT测试条件通过,则X被选定以具有BOT值,同时在其他情况下X保持其原始值。图10和图11示出了示例,其中仅可由未通过其测试条件的条件式比较指令设定的条件状态为MZ “负零”状态,并且,N和Z标志皆被设定。然而,在其他具体实施例中,可使用除了 MZ状态以外的任意无法在正常处理期间出现的条件标志值的组合。在图10的示例中,MZ状态取代图8所示的“总是”AL状态,以提供总共16个可用的条件状态,其可使用4位识别符来识别。将理解,,在其他示例中可同时提供AL状态和MZ状态两者。虽然在此已参照附加图式,详尽描述了本发明的说明性具体实施例,将了解到本·发明并不限于这些精确的具体实施例,并且,在本发明领域中具有通常知识者可进行各种改变和修改,而不脱离如附加中请专利范围所定义的本发明的范围和精神。
权利要求
1.一种数据处理装置,包括 处理电路,用于处理数据; 指令译码器,响应于程序指令以生成用于控制所述处理电路以处理所述数据的控制信号; 状态存储器,用于存储所述处理电路的当前条件状态,所述当前条件状态在处理所述数据期间为可修改的; 其中所述程序指令包括条件式比较指令,并且,所述指令译码器响应于所述条件式比较指令以生成用于控制所述处理电路以执行条件式比较运算的控制信号,所述条件式比较运算包括 (i)如果所述当前条件状态通过测试条件,则对第一操作数和第二操作数执行比较运算,并且,设定所述当前条件状态为在所述比较运算期间生成的结果条件状态;以及 (ii)如果所述当前条件状态未通过所述测试条件,则设定所述当前条件状态为由所述条件式比较指令指定的未通过条件状态。
2.如权利要1所述的数据处理装置,其中所述状态存储器包括状态寄存器。
3.如权利要求1或2所述的数据处理装置,其中所述当前条件状态包括存储在所述状态存储器中的至少一个条件代码标志的值。
4.如前述权利要求中任一项所述的数据处理装置,其中所述条件式比较指令包括用于指定所述测试条件的字段。
5.如前述权利要求中任一项所述的数据处理装置,其中所述未通过条件状态由所述条件式比较指令指定为立即值。
6.如权利要求5所述的数据处理装置,其中所述立即值为由包括所述条件式比较指令的程序的程序设计师设定的可编程值。
7.如权利要求5所述的数据处理装置,其中所述立即值为由包括所述条件式比较指令的程序的编译程序设定的可编程值,所述编译程序根据所需条件选定所述可编程值,所述条件式比较指令的所述未通过条件状态将通过所述所需条件。
8.如前述权利要求中的任一项所述的数据处理装置,其中所述未通过条件状态被指定为N位未通过条件状态值,其中N为大于零的任意整数,并且,所述当前条件状态由N位值表示;并且 所述指令译码器控制所述处理电路,以在所述当前条件状态未通过所述测试条件时,将所述N位未通过条件状态值写入所述状态存储器中。
9.如前述权利要求中的任一项所述的数据处理装置,其中所述当前条件状态能够被设定为多个条件状态中的任意一个,所述多个条件状态包括预定条件状态;并且 如果指定所述预定条件状态为所述未通过条件状态的条件式比较指令未通过所述测试条件,则所述当前条件状态仅可被设定至所述预定条件状态。
10.如前述权利要求中的任一项所述的数据处理装置,其中所述条件式比较指令包括用于指定所述第一操作数和所述第二操作数的第一操作数字段和第二操作数字段。
11.如权利要求10所述的数据处理装置,其中所述第一操作数字段和第二操作数字段的至少一个指定存储所述第一操作数或所述第二操作数的存储位置。
12.如权利要求11所述的数据处理装置,其中所述指令译码器响应指定位值预定组合的所述第一操作数字段和第二操作数字段的所述至少一个,来控制所述处理电路以执行所述条件式比较运算,并且,所述第一操作数和第二操作数的对应的一个具有零值。
13.如权利要求10至12中的任一项所述的数据处理装置,其中所述第一操作数字段和第二操作数字段中的一个将立即值指定为所述第一操作数或所述第二操作数。
14.如前述权利要求中的任一项所述的数据处理装置,其中所述比较运算包括以下步骤的任意一个 (a)将所述第一操作数减去所述第二操作数; (b)将所述第一操作数加上所述第二操作数; (C)对所述第一操作数与所述第二操作数执行按位异或运算; (d)对所述第一操作数和所述第二操作数执行按位与运算; (e)将所述第一操作数、所述第二操作数、一级所述状态存储器的进位位相加;以及 (f)对所述第一操作数和所述第二操作数执行按位或运算。
15.一种数据处理装置,包括 处理部件,用于处理数据; 指令译码器部件,用于响应于程序指令以生成控制信号,所述控制信号用于控制所述处理部件以处理所述数据; 状态存储器部件,用于存储所述处理部件的当前条件状态,所述当前条件状态在处理所述数据期间为可修改的; 其中所述等程序指令包括条件式比较指令,并且,所述指令译码器部件响应于所述条件式比较指令以生成用于控制所述处理部件以执行条件式比较运算的控制信号,所述条件式比较运算包括 (i)如果所述当前条件状态通过测试条件,则对第一操作数和第二操作数执行比较运算,并且,设定所述当前条件状态为在所述比较运算期间生成的结果条件状态;以及 ( )如果所述当前条件状态未通过所述测试条件,则设定所述当前条件状态为由所述条件式比较指令指定的未通过条件状态。
16.一种数据处理方法,包括以下步骤 响应于包括条件式比较指令的程序指令,生成用于控制处理电路以处理数据的控制信号; 存储所述处理电路的当前条件状态,所述当前条件状态在处理所述数据期间为可修改的; 响应于所述条件式比较指令,生成用于控制所述处理电路以执行条件式比较运算的控制信号,所述条件式比较运算包括 (i)如果所述当前条件状态通过测试条件,则对第一操作数和第二操作数执行比较运算,并且,设定所述当前条件状态为在所述比较运算期间生成的结果条件状态;以及 ( )如果所述当前条件状态未通过所述测试条件,则设定所述当前条件状态为由所述条件式比较指令指定的未通过条件状态。
17.—种编译由数据处理装置执行的程序指令序列的方法,所述程序指令序列包括无条件式比较指令和至少一个条件式比较指令,所述无条件式比较指令用于控制所述数据处理装置以对两个操作数执行无条件式比较运算,并且,设定所述数据处理装置的当前条件状态为在所述无条件式比较运算期间生成的一结果条件状态,所述至少一个条件式比较指令用于控制所述数据处理装置以执行条件式比较运算,所述条件式比较运算包括(i)如果所述数据处理装置的所述当前条件状态通过测试条件,则对第一操作数和第二操作数执行比较运算,并且,设定所述当前条件状态为在所述比较运算期间生成的结果条件状态;以及(ii)如果所述当前条件状态未通过所述测试条件,则设定所述当前条件状态为由所述条件式比较指令指定的未通过条件状态;所述方法包括以下步骤 (a)接收数据的输入,所述数据定义使用一个或多个与运算或或运算逻辑结合的N个比较运算的序列链,其中N为大于I的整数,所述N个比较运算的每一个测试各自的操作数是否满足各自的预定准则; (b)生成对应于所述序列链的第一个比较运算的所述无条件式比较指令; (c)对于在2与N之间的每个整数值i,执行下列步骤 (i)确定所述序列链的第i个比较运算是使用与运算或或运算来与部分序列链的结果逻辑结合,所述部分序列链包括所述序列链的第一个至第i_l个比较运算; ( )如果所述第i个比较运算使用与运算与所述部分序列链的所述结果逻辑结合,则生成对应所述第i个比较运算的条件式比较指令,所述条件式比较指令将在所述第i_l个比较运算的所述预定准则被满足时通过的条件指定为所述测试条件,并且,将对应所述第i个比较运算的所述预定准则未被满足的条件状态指定为所述未通过条件状态; (iii)如果所述第i个比较运算使用或运算与所述部分序列链的所述结果逻辑结合,则生成对应所述第i个比较运算的条件式比较指令,所述条件式比较指令将在所述第i_l个比较运算的所述预定准则未被满足时通过的条件指定为所述测试条件,并且,将对应所述第i个比较运算的所述预定准则被满足的条件状态指定为所述未通过条件状态; (d)将至少在步骤(b)中生成的所述无条件式比较指令与在步骤(c)中生成的N-I个所述条件式比较指令输出为所述程序指令序列。
18.—种由在数据处理装置上执行的计算机程序提供的虚拟机,所述虚拟机根据如申权利要求I至14中的任一项所述的数据处理装置提供指令执行环境。
19.一种存储计算机程序的非瞬态计算机存储媒体,所述计算机程序在由计算机执行时控制所述计算机以执行如权利要求17所述的方法。
20.一种存储计算机程序的非瞬态计算机存储媒体,所述计算机程序包括用于控制处理电路以执行条件式比较运算的条件式比较指令,所述条件式比较运算包括 (i)如果所述处理电路的当前条件状态通过测试条件,则对第一操作数和第二操作数执行比较运算,并且,设定所述当前条件状态为在所述比较运算期间生成的结果条件状态;以及 ( )如果所述当前条件状态未通过所述测试条件,则将所述当前条件状态设定为由所述条件式比较指令指定的未通过条件状态。
全文摘要
指令译码器(14)响应于条件式比较指令以生成用以控制处理电路(4)的控制信号以执行条件式比较运算。条件式比较运算包括(i)如果处理电路(4)的当前条件状态通过测试条件,则对第一操作数和第二操作数执行比较运算,并且,设定当前条件状态为在比较运算期间生成的结果条件状态;以及(ii)如果当前条件状态未通过测试条件,则设定当前条件状态为由条件式比较指令指定的未通过条件状态。条件式比较指令可用以表示比较运算的序列链,其中每个单个比较运算可测试一对操作数之间的不同种类的关系。
文档编号G06F9/32GK102893254SQ201180023699
公开日2013年1月23日 申请日期2011年4月12日 优先权日2010年5月11日
发明者戴维·詹姆斯·西尔, 西蒙·约翰·克拉斯克 申请人:Arm 有限公司