基于飞腾平台火狐浏览器JIT引擎的整数乘法优化方法技术

技术编号:18894104 阅读:40 留言:0更新日期:2018-09-08 10:46
本发明专利技术提供基于飞腾平台火狐浏览器JIT引擎的整数乘法优化方法,依次包括如下步骤:S110:开始优化JIT编译过程;S120:MIR生成;S130:执行优化趟;S140:MIR降级;S150:代码生成,包括:a.整数乘法代码生成;b.读取LMulI对象中右操作数,根据右操作数的类型执行对应的操作;S160:结束。本发明专利技术的有益效果是根据JS引擎收集的类型数据做类型推断和数据分析,在优化JIT代码生成过程中将之前的浮点乘法指令替换为其它等效指令,实现一个指令周期内完成乘法操作,从而达到优化整数乘法效率的目的。

Integer multiplication optimization method for Firefox JIT engine based on flying platform

The invention provides an integer multiplication optimization method based on the JIT engine of the Flying Platform Firefox browser, which in turn includes the following steps: S110: starting to optimize the JIT compilation process; S120: MIR generation; S130: performing the optimization run; S140: MIR degradation; S150: code generation, including: A. integer multiplication code generation; B. reading the right of the LMulI object Operands, perform the corresponding operations according to the type of the right operand; S160: end. The invention has the beneficial effect of type inference and data analysis according to the type data collected by JS engine, replacing the floating-point multiplication instruction with other equivalent instructions in the process of optimizing JIT code generation, realizing the multiplication operation within an instruction cycle, thereby achieving the purpose of optimizing the efficiency of integer multiplication.

【技术实现步骤摘要】
基于飞腾平台火狐浏览器JIT引擎的整数乘法优化方法
本专利技术属于通讯
,尤其是涉及一种基于飞腾平台火狐浏览器JIT引擎的整数乘法优化方法。
技术介绍
伴随着互联网的快速发展,浏览器成为了桌面终端用户主要的互联网入口。现在的网站内容越来越丰富,功能也越来越复杂,为了快速渲染页面提升用户体验,大部分的动态页面渲染和数据处理工作会在浏览器端进行。这对浏览器的性能,尤其是JS引擎的性能提出了更高的要求。早期的JS引擎都是基于解释器实现,解释器具有代码加载执行延时短的优点,但是对于反复执行的代码每次需要重新解释,导致了运行效率的降低。为了提升JS引擎执行性能,浏览器厂商开发出了适用于JS等动态语言的JIT优化技术。JIT:即时编译(Just-in-timecompilation),动态编译的一种形式,是一种提高程序运行效率的方法。在火狐浏览器中,有两个JIT编译器:基线JIT编译器和优化JIT编译器。Bailout:也叫“去优化”(Deoptimize),在高优化层级JIT做了很激进的优化(例如假设某个类不会有别的子类、某个引用一定不是null、某个引用所指向的对象一定是某个具体类型,等),而这个激进的假设假如失效了的话,就必须退回到没有做这些优化的“安全”的低优化层级JIT去继续执行。JIT编译器根据解释器记录的代码运行信息,将热点代码通过编译优化手段编译成本地机器代码,下一次运行到相应代码时直接执行对应的JIT代码,从而可以大幅提升JS引擎性能。目前火狐浏览器内部有两个JIT编译器:基线编译器和优化编译器。基线编译器会将“热点“代码编译成本地机器代码,但是不会对代码结构做优化;基线编译器中执行过很多次”非常热“的代码会被送入优化JIT编译器,而优化JIT编译器内部会调用多种优化手段(常量折叠、死代码删除等),调整代码结构以生成最高效的本地机器代码。目前火狐浏览器在飞腾平台不支持优化JIT功能,因为缺少针对飞腾平台的优化JIT代码生成后端。而基线JIT优化程度不足,导致JS引擎处理复杂网页时效率太低,从而引起页面响应迟缓。特别是JS代码在解释器和基线JIT编译器的乘法运算都需要先判断操作数的类型,然后再将操作数转换为浮点数,再通过浮点乘法指令计算结果。浮点乘法指令在飞腾平台需要五个时钟周期,而其它算数指令大都能在一个时钟周期的执行完成,尤其是在循环执行时性能问题更加突出。现有基于火狐开发的浏览器技术中,没有一种能解决飞腾上火狐浏览器的JS引擎整数乘法的性能问题。当前基线JIT编译器中的乘法操作是通过浮点乘法指令完成,需要多个时钟周期,效率低下。中国专利技术专利“简档导向的JIT代码生成”(申请号201210330925.3),该专利技术提出了一种简档导向的JIT代码生成方法,其具体实现是:首先,接收以动态语言编码的源代码经解析转换为字节码;然后,解释器来解释字节码,生成关于字节码的简档信息,存储简档信息;最后,当JIT编译器被配置成执行控制器时,JIT编译器基于简档信息执行编译字节码的功能。该方法通过生成简档信息提高了代码生成的效率,但是并没有基于特定类型的字节码做针对性的代码生成优化。
技术实现思路
本专利技术的目的是要解决
技术介绍
中的问题,提供一种基于飞腾平台火狐浏览器JIT引擎的整数乘法优化方法,根据JS引擎收集的类型数据做类型推断和数据分析,在优化JIT代码生成过程中将之前的浮点乘法指令替换为其它等效指令,实现一个指令周期内完成乘法操作,从而达到优化整数乘法效率的目的。为解决上述技术问题,本专利技术采用的技术方案是:基于飞腾平台火狐浏览器JIT引擎的整数乘法优化方法,依次包括如下步骤:S110:开始优化JIT编译过程;S120:MIR生成;S130:执行优化趟;S140:MIR降级;S150:代码生成,包括:a.整数乘法代码生成;b.读取LMulI对象中右操作数,根据右操作数的类型执行对应的操作;S160:结束。优选地,所述读取LMulI对象中右操作数,根据右操作数的类型执行对应的操作,包括判断右操作数是否为常量,若为常量,则执行步骤S151;若否,则执行步骤S152;S151:执行右操作数为常量的代码生成子过程;S152:执行右操作数为寄存器的代码生成子过程。优选地,所述执行右操作数为常量的代码生成子过程,包括如下步骤:S1511:生成左操作数和0比较的指令;S1512:判断右操作数是否为0;优选地,所述生成左操作数和0比较的指令,包括:判断MulI中canBeNegativeZero标志是否被设置;如果MulI中canBeNegativeZero标志被设置,则生成指令检查整数乘法运算结果是否为-0,优选地,所述判断右操作数是否为0,包括:如果右操作数为0,则生成LessThan标志被设置时跳转到Bailout入口的指令;否则生成Equal标志被设置时跳转到Bailout入口的指令;优选地,包括判断右值,根据右值类型执行对应的操作,当右值为常数0,则生成指令将常数0移动到输出寄存器;当右值为常数1,则生成指令将左操作数器寄存器的内容移动到输出寄存器;当右值为常数2,则生成指令将左操作数相加并将结果保存到输出寄存器;当右值为2的N次幂时,则生成左移指令并将结果保存到输出寄存器;当右值为其它常数时,则生成移动指令将右操作数加载到草稿寄存器,并生成乘法指令并将结果保存到输出寄存器,判断MulI的canOverflow标志位,如果为真则生成Overflow标志被设置时跳转到Bailout入口的指令;优选地,所述执行右操作数为寄存器的代码生成子过程,包括如下步骤:S1521:生成乘法指令并将结果保存到输出寄存器,判断MulI的canOverflow标志位;S1522:判断MulI的canBeNegativeZero标志;优选地,所述判断MulI的canOverflow标志位,包括,如果为真则生成Overflow标志被设置时跳转到Bailout入口的指令。优选地,判断MulI的canBeNegativeZero标志,包括:如果为真,则生成结果寄存器和0比较的指令,因为整数乘法结果为-0时这里只存在一个操作数为0且另一个操作数小于的0的情况,所以可以生成一条CMN指令测试两个操作数相加是否小于零,并在Signed标志位被设置时跳转到Bailout入口。本专利技术具有的优点和积极效果是:1.本专利技术提出基于飞腾平台火狐浏览器JIT引擎的整数乘法代码生成优化方法,根据JS引擎收集的类型数据做类型推断和数据分析,在优化JIT代码生成过程中将之前的浮点乘法指令替换为其它等效指令,实现一个指令周期内完成乘法操作,从而达到优化整数乘法效率的目的。2.提供一种专门针对飞腾平台火狐浏览器JIT引擎的整数乘法指令生成优化方案,从而达到优化整数乘法效率的目的。附图说明图1为未优化的飞腾平台火狐浏览器优化JIT引擎的流程图;图2为优化后的飞腾平台火狐浏览器优化JIT引擎的流程图;图3为本专利技术中基于飞腾平台火狐浏览器优化JIT的整数乘法代码生成过程;图4为本专利技术中基于飞腾平台火狐浏览器JIT引擎整数乘法优化右操作数为常量的子过程流程图;图5为本专利技术中基于飞腾平台火狐浏览器JIT引擎整数乘法优化右操作数为寄存器的子过程流程图;具体实施方式本实施例本文档来自技高网
...

【技术保护点】
1.基于飞腾平台火狐浏览器JIT引擎的整数乘法优化方法,其特征在于:依次包括如下步骤:S110:开始优化JIT编译过程;S120:MIR生成;S130:执行优化趟;S140:MIR降级;S150:代码生成,包括:a.整数乘法代码生成;b.读取LMulI对象中右操作数,根据右操作数的类型执行对应的操作;S160:结束。

【技术特征摘要】
1.基于飞腾平台火狐浏览器JIT引擎的整数乘法优化方法,其特征在于:依次包括如下步骤:S110:开始优化JIT编译过程;S120:MIR生成;S130:执行优化趟;S140:MIR降级;S150:代码生成,包括:a.整数乘法代码生成;b.读取LMulI对象中右操作数,根据右操作数的类型执行对应的操作;S160:结束。2.根据权利要求1所述的基于飞腾平台火狐浏览器JIT引擎的整数乘法优化方法,其特征在于:所述读取LMulI对象中右操作数,根据右操作数的类型执行对应的操作,包括判断右操作数是否为常量,若为常量,则执行步骤S151;若否,则执行步骤S152;S151:执行右操作数为常量的代码生成子过程;S152:执行右操作数为寄存器的代码生成子过程。3.根据权利要求2所述的基于飞腾平台火狐浏览器JIT引擎的整数乘法优化方法,其特征在于:所述执行右操作数为常量的代码生成子过程,包括如下步骤:S1511:生成左操作数和0比较的指令;S1512:判断右操作数是否为0。4.根据权利要求3所述的基于飞腾平台火狐浏览器JIT引擎的整数乘法优化方法,其特征在于:所述生成左操作数和0比较的指令,包括:判断MulI中canBeNegativeZero标志是否被设置;如果MulI中canBeNegativeZero标志被设置,则生成指令检查整数乘法运算结果是否为-0。5.根据权利要求3所述的基于飞腾平台火狐浏览器JIT引擎的整数乘法优化方法,其特征在于:所述判断右操作数是否为0,包括:如果右操作数为0,则生成LessThan标志被设置时跳转到Bailout入口的指令;否则生成Equal标志被设置时跳转到Bailout入口的指令。6.根据权利要求5所述的基于飞腾平台...

【专利技术属性】
技术研发人员:孙科张铎何明武唐晓东魏立峰孔金珠吴庆波
申请(专利权)人:天津麒麟信息技术有限公司
类型:发明
国别省市:天津,12

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1