Exemple #1
0
IRExpr* vx_dopyIRExpr ( IRExpr* e )
{
   switch (e->tag) {
      case Iex_Get: 
         return vx_IRExpr_Get(e->Iex.Get.offset, e->Iex.Get.ty);
      case Iex_GetI: 
         return vx_IRExpr_GetI(vx_dopyIRRegArray(e->Iex.GetI.descr), 
                            vx_dopyIRExpr(e->Iex.GetI.ix),
                            e->Iex.GetI.bias);
      case Iex_RdTmp: 
        return vx_IRExpr_Tmp(e->Iex.RdTmp.tmp);
      case Iex_Qop: 
         return vx_IRExpr_Qop(e->Iex.Qop.op,
                           vx_dopyIRExpr(e->Iex.Qop.arg1),
                           vx_dopyIRExpr(e->Iex.Qop.arg2),
                           vx_dopyIRExpr(e->Iex.Qop.arg3),
                           vx_dopyIRExpr(e->Iex.Qop.arg4));
      case Iex_Triop: 
         return vx_IRExpr_Triop(e->Iex.Triop.op,
                             vx_dopyIRExpr(e->Iex.Triop.arg1),
                             vx_dopyIRExpr(e->Iex.Triop.arg2),
                             vx_dopyIRExpr(e->Iex.Triop.arg3));
      case Iex_Binop: 
         return vx_IRExpr_Binop(e->Iex.Binop.op,
                             vx_dopyIRExpr(e->Iex.Binop.arg1),
                             vx_dopyIRExpr(e->Iex.Binop.arg2));
      case Iex_Unop: 
         return vx_IRExpr_Unop(e->Iex.Unop.op,
                            vx_dopyIRExpr(e->Iex.Unop.arg));
      case Iex_Load: 
         return vx_IRExpr_Load(e->Iex.Load.end,
                            e->Iex.Load.ty,
                            vx_dopyIRExpr(e->Iex.Load.addr));
      case Iex_Const: 
         return vx_IRExpr_Const(vx_dopyIRConst(e->Iex.Const.con));
      case Iex_CCall:
         return vx_IRExpr_CCall(vx_dopyIRCallee(e->Iex.CCall.cee),
                             e->Iex.CCall.retty,
                             vx_dopyIRExprVec(e->Iex.CCall.args));

      case Iex_Mux0X: 
         return vx_IRExpr_Mux0X(vx_dopyIRExpr(e->Iex.Mux0X.cond),
                             vx_dopyIRExpr(e->Iex.Mux0X.expr0),
                             vx_dopyIRExpr(e->Iex.Mux0X.exprX));
      default:
         vx_panic("vx_dopyIRExpr");
   }

   return NULL;
}
Exemple #2
0
IRExpr *vx_dopyIRExpr(IRExpr *e)
{
    switch (e->tag)
    {
    case Iex_Get:

        return vx_IRExpr_Get(e->Iex.Get.offset, e->Iex.Get.ty);

    case Iex_GetI:

        return vx_IRExpr_GetI(vx_dopyIRRegArray(e->Iex.GetI.descr),
                              vx_dopyIRExpr(e->Iex.GetI.ix),
                              e->Iex.GetI.bias);

    case Iex_RdTmp:

        return vx_IRExpr_Tmp(e->Iex.RdTmp.tmp);

    case Iex_Qop:

        return vx_IRExpr_Qop(e->Iex.Qop.details->op,
                             vx_dopyIRExpr(e->Iex.Qop.details->arg1),
                             vx_dopyIRExpr(e->Iex.Qop.details->arg2),
                             vx_dopyIRExpr(e->Iex.Qop.details->arg3),
                             vx_dopyIRExpr(e->Iex.Qop.details->arg4));

    case Iex_Triop:
        
        return vx_IRExpr_Triop(e->Iex.Triop.details->op,
                               vx_dopyIRExpr(e->Iex.Triop.details->arg1),
                               vx_dopyIRExpr(e->Iex.Triop.details->arg2),
                               vx_dopyIRExpr(e->Iex.Triop.details->arg3));

    case Iex_Binop:
        
        return vx_IRExpr_Binop(e->Iex.Binop.op,
                               vx_dopyIRExpr(e->Iex.Binop.arg1),
                               vx_dopyIRExpr(e->Iex.Binop.arg2));

    case Iex_Unop:
        
        return vx_IRExpr_Unop(e->Iex.Unop.op,
                              vx_dopyIRExpr(e->Iex.Unop.arg));

    case Iex_Load:
        
        return vx_IRExpr_Load(e->Iex.Load.end,
                              e->Iex.Load.ty,
                              vx_dopyIRExpr(e->Iex.Load.addr));

    case Iex_Const:
        
        return vx_IRExpr_Const(vx_dopyIRConst(e->Iex.Const.con));

    case Iex_CCall:
        
        return vx_IRExpr_CCall(vx_dopyIRCallee(e->Iex.CCall.cee),
                               e->Iex.CCall.retty,
                               vx_dopyIRExprVec(e->Iex.CCall.args));

    case Iex_ITE:
        
        return vx_IRExpr_ITE(vx_dopyIRExpr(e->Iex.ITE.cond),
                             vx_dopyIRExpr(e->Iex.ITE.iftrue),
                             vx_dopyIRExpr(e->Iex.ITE.iffalse));

    case Iex_BBPTR:

        return vx_IRExpr_BBPTR();

    case Iex_Binder:
        
        _panic("vx_dopyIRExpr(): case Iex_Binder (this should not be seen outside VEX)");

    default:

        _panic("vx_dopyIRExpr(): unknown expression");
    }

    return NULL;
}
Exemple #3
0
IRExpr* vx_dopyIRExpr ( IRExpr* e )
{
   switch (e->tag) {
      case Iex_Get: 
         return vx_IRExpr_Get(e->Iex.Get.offset, e->Iex.Get.ty);
      case Iex_GetI: 
         return vx_IRExpr_GetI(vx_dopyIRRegArray(e->Iex.GetI.descr), 
                            vx_dopyIRExpr(e->Iex.GetI.ix),
                            e->Iex.GetI.bias);
      case Iex_RdTmp: 
        return vx_IRExpr_Tmp(e->Iex.RdTmp.tmp);
      case Iex_Qop: 
#if VEX_VERSION < 2363
	return vx_IRExpr_Qop(e->Iex.Qop.op,
                           vx_dopyIRExpr(e->Iex.Qop.arg1),
                           vx_dopyIRExpr(e->Iex.Qop.arg2),
                           vx_dopyIRExpr(e->Iex.Qop.arg3),
                           vx_dopyIRExpr(e->Iex.Qop.arg4));
#else
	return vx_IRExpr_Qop(e->Iex.Qop.details->op,
                           vx_dopyIRExpr(e->Iex.Qop.details->arg1),
                           vx_dopyIRExpr(e->Iex.Qop.details->arg2),
                           vx_dopyIRExpr(e->Iex.Qop.details->arg3),
                           vx_dopyIRExpr(e->Iex.Qop.details->arg4));
#endif
      case Iex_Triop: 
#if VEX_VERSION < 2366
        return vx_IRExpr_Triop(e->Iex.Triop.op,
                             vx_dopyIRExpr(e->Iex.Triop.arg1),
                             vx_dopyIRExpr(e->Iex.Triop.arg2),
                             vx_dopyIRExpr(e->Iex.Triop.arg3));
#else
        return vx_IRExpr_Triop(e->Iex.Triop.details->op,
                             vx_dopyIRExpr(e->Iex.Triop.details->arg1),
                             vx_dopyIRExpr(e->Iex.Triop.details->arg2),
                             vx_dopyIRExpr(e->Iex.Triop.details->arg3));
#endif
      case Iex_Binop: 
         return vx_IRExpr_Binop(e->Iex.Binop.op,
                             vx_dopyIRExpr(e->Iex.Binop.arg1),
                             vx_dopyIRExpr(e->Iex.Binop.arg2));
      case Iex_Unop: 
         return vx_IRExpr_Unop(e->Iex.Unop.op,
                            vx_dopyIRExpr(e->Iex.Unop.arg));
      case Iex_Load: 
         return vx_IRExpr_Load(e->Iex.Load.end,
                            e->Iex.Load.ty,
                            vx_dopyIRExpr(e->Iex.Load.addr));
      case Iex_Const: 
         return vx_IRExpr_Const(vx_dopyIRConst(e->Iex.Const.con));
      case Iex_CCall:
         return vx_IRExpr_CCall(vx_dopyIRCallee(e->Iex.CCall.cee),
                             e->Iex.CCall.retty,
                             vx_dopyIRExprVec(e->Iex.CCall.args));

#if VEX_VERSION < 2668
      case Iex_Mux0X: 
         return vx_IRExpr_Mux0X(vx_dopyIRExpr(e->Iex.Mux0X.cond),
                             vx_dopyIRExpr(e->Iex.Mux0X.expr0),
                             vx_dopyIRExpr(e->Iex.Mux0X.exprX));
#else
      case Iex_ITE: 
         return vx_IRExpr_ITE(vx_dopyIRExpr(e->Iex.ITE.cond),
                             vx_dopyIRExpr(e->Iex.ITE.iftrue),
                             vx_dopyIRExpr(e->Iex.ITE.iffalse));
#endif
#if VEX_VERSION >= 2742
      case Iex_VECRET:
         return vx_IRExpr_VECRET();
      case Iex_BBPTR:
         return vx_IRExpr_BBPTR();
#endif
      default:
         vx_panic("Unhandled type in vx_dopyIRExpr");
   }

   return NULL;
}