Expr vc_bvVar32LeftShiftExpr(VC vc, Expr sh_amt, Expr child) { Expr ifpart; Expr thenpart; Expr elsepart = vc_trueExpr(vc); Expr ite = vc_trueExpr(vc); for(int count=32; count >= 0; count--){ if(count != 32) { ifpart = vc_eqExpr(vc, sh_amt, vc_bvConstExprFromInt(vc, 32, count)); thenpart = vc_bvExtract(vc, vc_bvLeftShiftExpr(vc, count, child), 31, 0); ite = vc_iteExpr(vc,ifpart,thenpart,elsepart); elsepart = ite; } else elsepart = vc_bvConstExprFromInt(vc,32, 0); } return ite; }
/* Same as vc_bvLeftShift only that the answer in 32 bits long */ Expr vc_bv32LeftShiftExpr(VC vc, int sh_amt, Expr child) { return vc_bvExtract(vc, vc_bvLeftShiftExpr(vc, sh_amt, child), 31, 0); }
value caml_vc_bvLeftShiftExpr(value vc, value amt, value e) { CAMLparam3(vc,amt,e); CAMLreturn(alloc_Expr(vc_bvLeftShiftExpr(VC_val(vc),Int_val(amt), Expr_val(e)))); }