技术特征:
1.一种处理C语言SWITCH/CASE语句的方法,其特征是:
在现有的指令系统中增加3条指令,它们是字节型查找指令、半字型查找指令、散转指令;其中:
所述的字节型查找指令包含目的寄存器、第一源寄存器和第二源操作数;其中,所述字节型查找指令的目的寄存器是通用寄存器或程序状态寄存器PSR,所述字节型查找指令的第一源寄存器是通用寄存器,所述字节型查找指令的第二源操作数是通用寄存器或立即数;
所述的字节型查找指令的处理内容是:将字节型查找指令的第一源寄存器中的第0字节同时分别与字节型查找指令的第二源操作数中的所有字长为字节的常数进行比较,如果在这些比较运算中有一个运算结果为相等,那么置相等标记z为1,否则置相等标记z为0,并且按照一定的优先级顺序来选择其中一个运算结果为相等的、参与该字节型查找指令的比较运算的常数处于字节型查找指令的第二源操作数中的位置序号n,再把该位置序号n以及相等标记z保存到字节型查找指令的目的寄存器;
所述的半字型查找指令包含目的寄存器、第一源寄存器和第二源操作数;其中,所述半字型查找指令的目的寄存器是通用寄存器或程序状态寄存器PSR,所述半字型查找指令的第一源寄存器是通用寄存器,所述半字型查找指令的第二源操作数是通用寄存器或立即数;
所述的半字型查找指令的处理内容是:将半字型查找指令的第一源寄存器中的第0半字同时分别与半字型查找指令的第二源操作数中的所有字长为半字的常数进行比较,如果在这些比较运算中有一个运算结果为相等,那么置相等标记z为1,否则置相等标记z为0,并且按照一定的优先级顺序来选择其中一个运算结果为相等的、参与该半字型查找指令的比较运算的常数处于半字型查找指令的第二源操作数中的位置序号n,再把该位置序号n以及相等标记z保存到半字型查找指令的目的寄存器;
所述的散转指令包含第一源寄存器和第二源操作数;其中,所述散转指令的第一源寄存器是通用寄存器或程序状态寄存器PSR,该散转指令的第一源寄存器包含使能位z和索引值n;所述散转指令的第二源操作数是通用寄存器或立即数;
所述的散转指令的处理内容是:如果散转指令的第一源寄存器中的能使位z为真,那么使用散转指令的第一源寄存器中的索引值n选择第二源操作数中的一个字长为字节的常数作为跳转矢量,然后用该跳转矢量与当前的PC值相加,相加的结果就是跳转的目标地址,从而完成跳转;如果散转指令的Rs中的能使位z为假,则顺序执行。
2.根据权利要求1所述的方法,其特征是:
所述的散转指令另外还设定:散转指令的第一源寄存器中的能使位z是对应于字节型查找指令和半字型查找指令的目的寄存器中的相等标记z,而散转指令的第一源寄存器中的索引值n是对应于字节型查找指令和半字型查找指令的目的寄存器中的位置序号n。
3.根据权利要求1或2所述的方法,其特征是:采用所述的字节型查找指令的助记符为CASEB,那么该字节型查找指令的汇编格式是:CASEB Rd,Rs,Rt或者CASEB Rd,Rs,#imm,其中Rd是目的寄存器,Rs是第一源寄存器,Rt是第二源寄存器,#imm是立即数;对于指令CASEB Rd,Rs,Rt来说:如果Rt是32位通用寄存器,那么Rt里面装载的是4个字长为字节的常数,如果Rt是64位通用寄存器,那么Rt里面装载的是8个字长为字节的常数;对于指令CASEB Rd,Rs,#imm来说:如果#imm是32位立即数,那么该#imm是由4个字长为字节的常数组成,如果#imm是16位立即数,那么该#imm是由2个字长为字节的常数组成;
采用所述的半字型查找指令的助记符为CASEH,那么半字型查找指令的汇编格式是:CASEH Rd,Rs,Rt,或者CASEH Rd,Rs,#imm,其中Rd是目的寄存器,Rs是第一源寄存器,Rt是第二源寄存器,#imm是立即数;对于指令CASEH Rd,Rs,Rt来说:如果Rt是32位通用寄存器,那么Rt里面装载的是2个字长为半字的常数,如果Rt是64位通用寄存器,那么Rt里面装载的是4个字长为半字的常数;对于指令CASEH Rd,Rs,#imm来说:如果#imm是32位立即数,那么该#imm是由2个字长为半字的常数组成;
采用所述的散转指令的助记符为SWITCH,那么该散转指令的汇编格式是:SWITCH Rs,Rt或SWITCH Rs,#imm,其中Rs是第一源寄存器,Rt是第二源寄存器,#imm是立即数;如果Rt是32位通用寄存器,那么Rt里面装载的是4个字长为字节的常数;如果Rt是64位通用寄存器,那么Rt里面装载的是8个字长为字节的常数;如果#imm是32位立即数,那么该#imm是由4个字长为字节的常数组成,如果#imm是16位立即数,那么该#imm是由2个字长为字节的常数组成。
4.根据权利要求3所述的方法,其特征是:如果所述的字节型查找指令、半字型查找指令、散转指令中的第二源操作数是通用寄存器,那么该通用寄存器可以是64位或32位;如果其第二源操作数是立即数,那么该立即数可以是32位或16位。
5.根据权利要求4所述的方法,其特征是:还包括在处理C语言SWITCH/CASE语句时,进行如下编译步骤:
第一步是根据C语言SWITCH表达式的值的字长来选择字节型查找指令或半字型查找指令,查找相等的CASE常数项,具体是:
如果C语言SWITCH表达式的值的字长为8位,那么CASE常数项的字长也是8位,所以要使用字节型查找指令(CASEB Rd,Rs,Rt或者CASEB Rd,Rs,#imm)来查找相等的CASE常数项;如果C语言SWITCH表达式的值的字长为16位,那么CASE常数项的字长也是16位,所以要使用半字型查找指令(CASEH Rd,Rs,Rt或者CASEH Rd,Rs,#imm)来查找相等的CASE常数项;
第二步是使用所述的散转指令根据上述第一步的字节型查找指令或半字型查找指令的结果值来索引跳转矢量,完成分支转移,具体是:
将构成第一步的字节型查找指令或半字型查找指令的第二源操作数(Rt或#imm)的CASE常数项所对应的跳转矢量装入散转指令的第二源操作数(Rt或#imm)中,并且要求各CASE常数项所对应的跳转矢量处于该散转指令的第二源操作数(Rt或#imm)中的位置顺序是与该CASE常数项处于字节型查找指令或半字型查找指令的第二源操作数(Rt或#imm)的位置顺序相同;如果散转指令的第一源寄存器等于字节型查找指令或半字型查找指令的目的寄存器,那么执行散转指令就可以索引到正确的跳转矢量,并根据其能使位z的状态决定跳转还是顺序执行。
6.根据权利要求5所述的方法,其特征是:所述使用半字型查找指令来查找相等的CASE常数项的查找的方法是:将若干个待查找的CASE常数项按照一定的顺序填满第二源操作数和把SWITCH表达式的值装入源寄存器中,执行字节型查找指令或半字型查找指令后,在其目的寄存器就得到相等标记z和位置序号n;另外,如果待查找的CASE常数项不够填满第二源操作数,那么重复使用其中某一个待查找的CASE常数项来填充,直到填满为止。
7.根据权利要求4至6任意一项所述的方法,其特征是:所述跳转矢量是无符号数。