一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

多指令集架构向RISC-V指令集架构的寄存器映射方法及装置与流程

2022-03-02 02:39:03 来源:中国专利 TAG:
多指令集架构向risc-v指令集架构的寄存器映射方法及装置
技术领域
:1.本发明属于汇编函数库的自动化移植和汇编程序测试
技术领域
:,特别涉及一种多指令集架构向risc-v指令集架构的寄存器映射方法及装置。
背景技术
::2.在涉及寄存器映射方面的技术有涉及对标量寄存器的映射方法,此类方法只适用于单个指令集架构面向risc-v指令集架构做标量寄存器的映射。未见对向量指令类型下的向量寄存器及混合寄存器进行映射。所以存在以下缺点:3.1、指令类型局限性,无法对向量指令类型下的向量寄存器及混合寄存器进行映射。4.2、指令架构局限性,无法适用于多个指令集架构面向risc-v指令集架构的寄存器自动化映射。5.3、在新一代信息
技术领域
:,risc-v指令集架构各方面生态还不够成熟,亟需一些方法可以将成熟指令集架构的优势面向risc-v指令集架构进行准确高效的移植。技术实现要素:6.针对现有技术中存在的问题,本发明提出一种多指令集架构向risc-v指令集架构的寄存器映射方法及装置,适用于多种指令集架构面向risc-v指令集架构的寄存器的自动映射,实现向量指令类型下向量寄存器和混合寄存器的自动映射,将成熟指令集架构的优势函数面向risc-v指令集架构进行准确高效移植。7.为了实现上述目的,本发明采用以下的技术方案:8.本发明提供了一种多指令集架构向risc-v指令集架构的寄存器映射方法,包括以下步骤:9.步骤1,遍历源汇编程序,分析出源汇编指令的类型是向量指令还是标量指令,进一步得到助记符后面存放的寄存器类别;10.步骤2,若步骤1分析出的源汇编指令的类型是标量指令,则寄存器类别是标量寄存器,进行源指令集架构和risc-v指令集架构之间的标量寄存器映射;11.步骤3,若步骤1分析出的源汇编指令的类型是向量指令,则寄存器类别是向量寄存器或者混合寄存器;若得到的寄存器类别是向量寄存器,进行源指令集架构和risc-v指令集架构之间的向量寄存器组映射;12.步骤4,基于步骤3,若得到的寄存器类别是混合寄存器,则将标量寄存器提取出来进入步骤2进行源指令集架构和risc-v指令集架构之间的标量寄存器映射,剩余的为向量寄存器进入步骤3进行源指令集架构和risc-v指令集架构之间的向量寄存器组映射;13.步骤5,将步骤2、步骤3和步骤4经映射后得到的risc-v指令集架构寄存器进行数量融合和顺序重置,得到正确的目标汇编指令。14.进一步地,遍历源汇编程序,分析出源汇编指令的类型是向量指令还是标量指令,包括:15.遍历源汇编程序,解析源汇编指令中的操作码段,使用此操作码段匹配源指令集架构的操作码数据库,匹配出源汇编指令的类型。16.进一步地,所述步骤1之后还包括:17.利用指令解析模块ipm逐行取出源汇编程序的每一条汇编指令的所有寄存器,同时得到寄存器的数量。18.进一步地,所述指令解析模块ipm接收上层传递来的指令类型信号,若指令类型为向量指令,则向指令解析模块ipm发射0信号,若指令类型为标量指令,则向指令解析模块ipm发射1信号;当指令解析模块ipm接收到指令类型信号后,对该条汇编指令进行切割,即将助记符、寄存器、偏移量disp和立即数元素进行分离开,得到寄存器集合。19.进一步地,所述步骤2具体包括:20.若指令解析模块ipm接收到的信号为1,则将指令解析模块ipm分离出的寄存器传送至标量寄存器映射模块,标量寄存器映射模块通过查阅标量寄存器映射表,将对应的risc-v标量寄存器输出。21.进一步地,所述步骤3具体包括:22.若指令解析模块ipm接收到的信号为0,则结合源指令集架构的向量指令的设计模式,解析出助记符后面的寄存器类型是向量寄存器或者混合寄存器;23.若全是向量寄存器,则将指令解析模块ipm分离出的寄存器传送至向量寄存器映射模块,向量寄存器映射模块通过查阅向量寄存器映射表,将对应的risc-v向量寄存器输出。24.进一步地,所述步骤4具体包括:25.若是混合寄存器,则利用标量寄存器提取模块将指令解析模块ipm分离出的寄存器集合里面的标量寄存器进行提取,通过标量寄存器映射模块输出risc-v标量寄存器;分离出的寄存器集合剩余的是向量寄存器,通过向量寄存器映射模块输出risc-v向量寄存器;26.将两类寄存器映射得到的risc-v指令集架构寄存器进行重组,形成正确的寄存器数量映射和位置映射。27.进一步地,所述步骤5具体包括:28.根据得到的寄存器数量,使用寄存器重置模块将经映射后得到的risc-v指令集架构寄存器进行数量融合和顺序重置,得到正确的目标汇编指令。29.本发明还提供了一种多指令集架构向risc-v指令集架构的寄存器映射装置,包括:30.源汇编指令类型判别单元,用于遍历源汇编程序,分析出源汇编指令的类型是向量指令还是标量指令,进一步得到助记符后面存放的寄存器类别;31.标量寄存器映射单元,用于若分析出的源汇编指令的类型是标量指令,则寄存器类别是标量寄存器,进行源指令集架构和risc-v指令集架构之间的标量寄存器映射;32.向量寄存器映射单元,用于若分析出的源汇编指令的类型是向量指令,则寄存器类别是向量寄存器或者混合寄存器;若得到的寄存器类别是向量寄存器,进行源指令集架构和risc-v指令集架构之间的向量寄存器组映射;33.混合寄存器映射单元,用于若得到的寄存器类别是混合寄存器,则将标量寄存器提取出来进行源指令集架构和risc-v指令集架构之间的标量寄存器映射,剩余的为向量寄存器进行源指令集架构和risc-v指令集架构之间的向量寄存器组映射;34.寄存器重置单元,用于将经映射后得到的risc-v指令集架构寄存器进行数量融合和顺序重置,得到正确的目标汇编指令。35.与现有技术相比,本发明具有以下优点:36.1、本发明适用于多种指令集架构面向risc-v指令集架构的寄存器的自动映射,比如申威指令集架构的优势部分向risc-v指令集架构移植时的寄存器自动映射,或者x86指令集架构向risc-v指令集架构移植时的寄存器自动映射。37.2、本发明解决了指令类型为标量寄存器映射的局限性。向量是汇编语言中重要的一环也是复杂的一环,其单指令流多数据流的特点,使主机能够快速处理大量数据。本发明不仅适用于标量指令类型下标量寄存器的自动映射,而且解决了向量指令类型下向量寄存器的自动映射以及混合寄存器的自动映射。例如在国产申威基础函数库中,大多数函数指令都含有向量指令类型以及向量寄存器和混合寄存器,利用本发明方法能够使移植工作相比人工移植更为高效,并自动构建risc-v指令集架构函数库里面的寄存器之间的依赖关系,达到与源指令集架构寄存器之间的依赖关系保持一致,即达到移植后函数的正确性。38.3、本发明适用于新兴的risc-v指令集架构,尤其是在向量指令类型方面,risc-vvector拓展具有简洁性和灵活性,本发明能够符合risc-v的设计理念,对丰富risc-v各方面生态具有促进作用,比如risc-v的函数库亟需完善,利用本方法可以将申威、x86、arm等指令集架构的优势函数面向risc-v指令集架构移植时对寄存器进行准确高效的映射。附图说明39.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。40.图1是本发明实施例的多指令集架构向risc-v指令集架构的寄存器映射方法的流程示意图;41.图2是本发明实施例的risc-v向量寄存器的分组图;42.图3是本发明实施例的指令解析模块ipm的工作流程图;43.图4是本发明实施例的标量寄存器提取模块srem的工作流程图;44.图5是本发明实施例的寄存器重置模块rrm的工作流程图;45.图6是本发明实施例的汇编代码段1;46.图7是本发明实施例的汇编代码段2;47.图8是本发明实施例的汇编代码段3;48.图9是本发明实施例的汇编代码段4。具体实施方式49.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。50.如图1所示,本实施例的多指令集架构向risc-v指令集架构的寄存器映射方法,包括以下步骤:51.步骤s11,遍历源汇编程序,分析出源汇编指令的类型是向量指令还是标量指令,进一步得到助记符后面存放的寄存器类别;利用指令解析模块ipm逐行取出源汇编程序的每一条汇编指令的所有寄存器,同时得到寄存器的数量。52.具体的,遍历源汇编程序,解析源汇编指令中的操作码段,使用此操作码段去匹配源指令集架构的操作码数据库,从而匹配出源汇编指令的类型。53.步骤s12,若步骤s11分析出的源汇编指令的类型是标量指令,则寄存器类别是标量寄存器,将指令解析模块ipm获取到的寄存器进行源指令集架构和risc-v指令集架构之间的标量寄存器映射。54.如图3所示,指令解析模块ipm接收上层传递来的指令类型信号,若指令类型为向量指令,则向指令解析模块ipm发射0信号,若指令类型为标量指令,则向指令解析模块ipm发射1信号;当指令解析模块ipm接收到指令类型信号后,对该条汇编指令进行切割,即将助记符、寄存器、偏移量disp和立即数等元素进行分离开。55.若指令解析模块ipm接收到的信号为1,则将分离出的寄存器传送至标量寄存器映射模块reg_dict,标量寄存器映射模块reg_dict通过查阅标量寄存器映射表srmt,将对应的risc-v标量寄存器输出。56.标量寄存器映射表(scalarregistersmaptable,srmt):所谓标量寄存器映射表srmt是指源指令集架构和risc-v指令集架构之间的标量寄存器映射时的查阅辅助表,如表1所示;将指令解析模块ipm获取的源指令集架构的标量寄存器传参到标量寄存器映射模块reg_dict,该模块会结合标量寄存器映射表srmt,查阅srmt的源指令集架构标量寄存器(sourceinstructionarchitectureregister,sir)列表项,匹配之后,输出risc-v指令集架构标量寄存器(targetinstructionarchitectureregister,tir),tir是risc-v指令集架构的标量寄存器列表。其中标量寄存器映射表srmt的建立要保证寄存器的性质一致,即当源指令集架构的sir为标量寄存器、保存寄存器性质时,则srmt在建立时tir也应该是标量寄存器、保存寄存器。57.表1标量寄存器映射表(scalarregistersmappingtable)[0058][0059][0060]步骤s13,若步骤s11分析出的源汇编指令的类型是向量指令,则寄存器类别是向量寄存器或者混合寄存器;若得到的寄存器类别是向量寄存器,将指令解析模块ipm获取到的寄存器进行源指令集架构和risc-v指令集架构之间的向量寄存器组映射。[0061]如图3所示,若指令解析模块ipm接收到的信号为0,则结合源指令集架构的向量指令的设计模式,解析出助记符后面的寄存器类型是向量寄存器或者混合寄存器。若全是向量寄存器,则将分离出的寄存器传送至向量寄存器映射模块v_reg_dict,向量寄存器映射模块v_reg_dict通过查阅向量寄存器映射表vrmt,将对应的risc-v向量寄存器输出。[0062]risc-v向量寄存器组,risc-v向量寄存器的分组如图2所示。以国产申威指令集架构为例,申威指令集架构的向量寄存器的位数为256bit,即一次性可处理四个双精度浮点数。但是在risc-v指令集架构里面为了使risc-v向量寄存器vlen的位数兼容性更高,通常默认为128bit,此时vlen不能满足申威指令集架构的向量指令处理的数据位数,为此需将risc-v指令集架构的32个向量寄存器v0-v31进行分组,向量寄存器的分组涉及到向量长度乘数的设置,向量长度乘数由数据段vlmul[2:0]决定,即lmul=2vlmul[2:0],如表2所示数据段vlmul[2:0]取“001”时,此时向量长度乘数lmul为2,可将risc-v的两个向量寄存器设为一组即共16组,此时向量寄存器组的位数vlen为256bit,每个向量寄存器组即可看作一个256bit的向量寄存器,向量寄存器组的名字为每组的低位向量寄存器的名字,包含在向量寄存器组内的其他向量寄存器的名字不可使用。例如分组后的向量寄存器组为v0、v2、v3...v30。可通过配置设置指令表(configurationsettinginstructionstable)内容对risc-v向量寄存器组进行合理设置,如表3所示。[0063]表2向量寄存器乘数lmul设置表(vectorregistermultipliersettingtable)[0064][0065]表3配置设置指令表(configurationsettinginstructionstable)[0066]vsetvlird,rs1,vtypei#rd=newvl,rs1=avl,vtypei=newvtypesettingvsetivlird,uimm,vtypei#rd=newvl,uimm=avl,vtypei=newvtypesettingvsetvlrd,rs1,rs2#rd=newvl,rs1=avl,rs2=newvtypevalue[0067]向量寄存器映射表(vectorregistersmaptable,vrmt):所谓向量寄存器映射表vrmt是指源指令集架构和risc-v指令集架构之间的向量寄存器映射时的查阅辅助表,如表4所示;源指令集架构的向量寄存器以及对risc-v向量寄存器进行的分组情况决定着向量寄存器映射表vrmt的sivr和rvrg项的元素构成,sivr是源指令集架构的向量寄存器(sourceinstructionarchitecturevectorregister,sivr),rvrg是risc-v指令集架构的向量寄存器组(risc-vinstructionarchitecturevectorregistergroup,rvrg)。将指令解析模块ipm获取的源指令集架构的向量寄存器传参到向量寄存器映射模块v_reg_dict,该模块会结合向量寄存器映射表vrmt,查阅vrmt的sivr项,匹配之后,输出risc-v指令集架构的向量寄存器组rvrg,其中向量寄存器映射表vrmt的建立除了遵循性质不变性之外还需参考源指令集架构的向量寄存器的命名情况,例如在国产申威指令集架构中向量寄存器和标量寄存器是复用的,如果只看$f16它既是标量寄存器的名字也是向量寄存器的名字,所以建立向量寄存器映射表vrmt也是为了解决标量寄存器与向量寄存器名字复用的问题以及向量指令类型下的混合寄存器情况。[0068]表4向量寄存器映射表(vectorregistersmappingtable)[0069]numsivrrvrg1$f12v122$f16v163$f20v204$f30v30.........[0070]步骤s14,基于步骤s13;若得到的寄存器类别是混合寄存器,则利用标量寄存器提取模块srem将标量寄存器提取出来进入步骤s12进行源指令集架构和risc-v指令集架构之间的标量寄存器映射,剩余的为向量寄存器进入步骤s13进行源指令集架构和risc-v指令集架构之间的向量寄存器组映射。[0071]如图3所示,若是混合寄存器,则利用标量寄存器提取模块srem将分离出的寄存器集合里面的标量寄存器进行提取,通过标量寄存器映射模块输出risc-v标量寄存器;分离出的寄存器集合剩余的是向量寄存器,通过向量寄存器映射模块输出risc-v向量寄存器;最后将两类寄存器映射得到的risc-v指令集架构寄存器进行重组,形成正确的寄存器数量映射和位置映射。[0072]标量寄存器提取模块(scalarregisterextractionmodule,srem),srem提取标量寄存器流程如图4所示,标量寄存器提取模块用于当向量指令类型后面的寄存器集合为混合寄存器的情况,srem将混合寄存器里面的标量寄存器进行提取,使其脱离向量寄存器的集合,将提取出的标量寄存器传送至标量寄存器映射模块reg_dict进一步完成标量寄存器的映射,剩余的向量寄存器默认分离并传送至向量寄存器映射模块v_reg_dict进一步完成向量寄存器组的映射。[0073]步骤s15,根据步骤s11得到的寄存器数量,使用寄存器重置模块将步骤s12、步骤s13和步骤s14经映射后得到的risc-v指令集架构寄存器进行数量融合和顺序重置,得到正确的目标汇编指令。[0074]寄存器重置模块(registerresetmodule,rrm),如图5所示。所谓的寄存器重置模块rrm,其功能是将标量寄存器映射模块reg_dict输出的标量寄存器和向量寄存器映射模块v_reg_dict输出的向量寄存器进行数量融合和顺序重置,因为不同的指令集架构的设计是不同的,比如在申威指令集架构的复制指令是指将第一个寄存器复制到第二寄存器,即源寄存器在前,目的寄存器在后,但是在risc-v指令集架构的复制指令正好相反,即源寄存器在后,目的寄存器在前。所以为了保持移植后的risc-v汇编代码段中的寄存器上下文具有正确的依赖和内容,有必要进行寄存器数量融合和顺序重置。[0075]本发明支持多种指令集架构面向risc-v指令集架构的寄存器自动映射,因为risc-v是一种新兴的指令集架构,其各方面生态亟需完善。利用本发明就可以将其他指令集架构的优势移植到risc-v指令集架构上,下面以国产申威指令集架构的部分汇编程序向risc-v指令集架构做寄存器映射的测试为实例。本实例的一种多指令集架构向risc-v指令集架构的寄存器映射方法,包含以下步骤:[0076]步骤s21,遍历国产申威指令集架构的汇编代码段1(如图6所示)解析源汇编指令中的操作码段,使用此操作码段去匹配源指令集架构的操作码数据库,匹配出源汇编指令的类型,进一步得到助记符后面存放的寄存器类别。利用指令解析模块ipm逐行取出汇编代码段1的每一条汇编指令的所有寄存器,同时得到寄存器的数量。[0077]步骤s22,若源汇编指令的类型是标量指令,则指令解析模块ipm接收到指令类型信号1后,即对该条汇编指令进行指令切割,即将助记符、寄存器、偏移量disp和立即数等元素进行分离开。将分离出的寄存器传送至标量寄存器映射模块reg_dict,标量寄存器映射模块reg_dict查阅标量寄存器映射表srmt,查阅srmt的源指令集架构标量寄存器sir列表项,匹配之后,输出risc-v指令集架构标量寄存器tir,与指令解析模块ipm传送下来除助记符和寄存器外的其它元素汇合重组,进而完成源指令集架构和risc-v指令集架构之间的标量寄存器映射,得到对应汇编代码段2(如图7所示)。[0078]步骤s23,若源汇编指令的类型是向量指令,则指令解析模块ipm接收到指令类型信号为0,例如汇编码段3,助记符中第一位元素是字母“v”,即是向量汇编指令,这类指令得到的寄存器类别是向量寄存器或者混合寄存器。若寄存器类别是向量寄存器,将分离出的寄存器传送至向量寄存器映射模块v_reg_dict,向量寄存器映射模块v_reg_dict查阅向量寄存器映射表vrmt,查阅vrmt的源指令集架构向量寄存器sivr列表项,匹配之后,输出risc-v指令集架构向量寄存器组rvrg,进而完成源指令集架构和risc-v指令集架构之间的向量寄存器映射。[0079]步骤s24,基于步骤s23,若寄存器类别是混合寄存器,例如汇编代码段3(如图8所示)中助记符vcpyff、vinsff等汇编指令中的寄存器类别即是混合寄存器,例如vcpyff$f21,$f21,这条汇编指令的意义是将浮点寄存器$f21的双精度浮点数复制为4个放入向量寄存器$f21,在此处$f21既是标量寄存器也是向量寄存器,这条指令直观的说明了寄存器复用和混合寄存器的情况。当寄存器类型是混合寄存器的时候需要使用标量寄存器提取模块srem将指令解析模块ipm分离出的寄存器集合里面的标量寄存器进行提取,通过标量寄存器映射模块reg_dict输出risc-v指令集架构标量寄存器。分离出的寄存器集合剩余的是向量寄存器,通过向量寄存器映射模块v_reg_dict将对应的risc-v指令集架构向量寄存器组进行输出。[0080]步骤s25,将经映射后得到的risc-v指令集架构寄存器以及其他元素进行重组,使用寄存器重置模块对寄存器进行数量融合和顺序重置,完成源指令集架构和risc-v指令集架构之间的向量寄存器组的映射,得到正确的目标汇编代码段4(如图9所示)。[0081]与上述一种多指令集架构向risc-v指令集架构的寄存器映射方法相应地,本实施例还提供一种多指令集架构向risc-v指令集架构的寄存器映射装置,包括:[0082]源汇编指令类型判别单元,用于遍历源汇编程序,分析出源汇编指令的类型是向量指令还是标量指令,进一步得到助记符后面存放的寄存器类别;[0083]标量寄存器映射单元,用于若分析出的源汇编指令的类型是标量指令,则寄存器类别是标量寄存器,进行源指令集架构和risc-v指令集架构之间的标量寄存器映射;[0084]向量寄存器映射单元,用于若分析出的源汇编指令的类型是向量指令,则寄存器类别是向量寄存器或者混合寄存器;若得到的寄存器类别是向量寄存器,进行源指令集架构和risc-v指令集架构之间的向量寄存器组映射;[0085]混合寄存器映射单元,用于若得到的寄存器类别是混合寄存器,则将标量寄存器提取出来进行源指令集架构和risc-v指令集架构之间的标量寄存器映射,剩余的为向量寄存器进行源指令集架构和risc-v指令集架构之间的向量寄存器组映射;[0086]寄存器重置单元,用于将经映射后得到的risc-v指令集架构寄存器进行数量融合和顺序重置,得到正确的目标汇编指令。[0087]需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。[0088]最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献