Expr vc_bvVar32RightShiftExpr(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_bvRightShiftExpr(vc, count, child); ite = vc_iteExpr(vc,ifpart,thenpart,elsepart); elsepart = ite; } else { elsepart = vc_bvConstExprFromInt(vc,32, 0); } } return ite; }
/* Same as vc_bvRightShift only that the answer in 32 bits long */ Expr vc_bv32RightShiftExpr(VC vc, int sh_amt, Expr child) { return vc_bvExtract(vc, vc_bvRightShiftExpr(vc, sh_amt, child), 31, 0); }
value caml_vc_bvRightShiftExpr(value vc, value amt, value e) { CAMLparam3(vc,amt,e); CAMLreturn(alloc_Expr(vc_bvRightShiftExpr(VC_val(vc),Int_val(amt), Expr_val(e)))); }