x86虚拟机设计之条件码生成

        x86的指令集中有很多指令是自动生成条件码的,它们保存在EFLAGS寄存器中。完全的模拟这些条件码是十分费时的,还好我们并不常用到它们,所以可以采用惰性计算。

 

一、惰性计算

       惰性计算就是在遇到产生条件码的指令时并不计算生成这些条件码,只保存生成条件码所必需的条件,在遇到需要使用条件码的指令时才会生成条件码。

       1、需要保存的记录

             opc op1 op2

       2、如何维护记录

             比较快的方法是保存的临时寄存器中,但是临时寄存器是珍贵的资源,是很有限的。

 

             还有就是保存到内存中,节省了临时寄存器,但是会慢一些。

             保存opc、op1、op2就需要3条内存指令。计算的时候又是3条内存指令。

 

             问题:

                   如果保存ret,会有多大的性能提升?

       3、EFLAGS优化

             将所有的条件码先以整形保存到内存中,需要的时候再以位拼凑到EFLAGS寄存器中。

 

              多数指令实际上只需要一个条件码,而生成许多个条件码是没有意义的,这样做的问题是需要为每一位条件码维护一个记录。

              多数Jcc指令只用一位条件码,并且Jcc不影响条件码,所以可以优化为只生成需要的条件码。

 

使用目标指令集的条件码,硬件实现条件码计算

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值