@@ -722,12 +722,6 @@ module internal Z3 =
722722 elif exprSize > size then ctx.MkExtract( size - 1 u, 0 u, expr)
723723 else ctx.MkSignExt( size - exprSize, expr)
724724
725- member private x.ReverseBytes ( expr : BitVecExpr ) =
726- let size = int expr.SortSize
727- assert ( size % 8 = 0 )
728- let bytes = List.init ( size / 8 ) ( fun byte -> ctx.MkExtract( uint (( byte + 1 ) * 8 ) - 1 u, uint ( byte * 8 ), expr))
729- List.reduce ( fun x y -> ctx.MkConcat( x, y)) bytes
730-
731725 member private x.ComputeSliceBounds assumptions cuts termSortSize =
732726 assert ( termSortSize % 8 u = 0 u && termSortSize > 0 u)
733727 let zero = ctx.MkBV( 0 , termSortSize)
@@ -806,10 +800,8 @@ module internal Z3 =
806800 | _ -> x.EncodeTerm slice, List.empty
807801
808802 member private x.EncodeCombine slices typ =
809- let size = x.SizeOfBV typ
810- let res = ctx.MkBV( 0 , size)
811- let window = res.SortSize
812- let windowExpr = ctx.MkNumeral( window, x.Type2Sort( Types.IndexType)) :?> BitVecExpr
803+ let window = x.SizeOfBV typ
804+ let res = ctx.MkBV( 0 , window)
813805 let addOneSlice ( res , assumptions ) slice =
814806 let term , cuts = x.EncodeSlice slice
815807 let t =
@@ -831,25 +823,21 @@ module internal Z3 =
831823 let sliceSize = x.MkBVSub( rBit, lBit)
832824 let zero = ctx.MkBV( 0 , termSize)
833825 let intersects = x.MkBVSGT( sliceSize, zero)
834- let term = x.ReverseBytes t
835826 let left = x.ExtractOrExtend lBit termSize
836- let term = x.MkBVShl( term, left)
837- let cutRight = x.ExtractOrExtend ( x.MkBVSub( sizeExpr, rBit)) termSize
827+ let right = x.ExtractOrExtend rBit termSize
828+ let cutRight = x.MkBVSub( sizeExpr, right)
829+ let term = x.MkBVShl( t, cutRight)
838830 let term = x.MkBVLShr( term, x.MkBVAdd( left, cutRight))
839831 let term =
840832 if termSize > window then ctx.MkExtract( window - 1 u, 0 u, term)
841833 else ctx.MkZeroExt( window - termSize, term)
842834 let changedTermSize = term.SortSize
843- let w = x.ExtractOrExtend windowExpr changedTermSize
844835 let pos = x.ExtractOrExtend posBit changedTermSize
845- let sliceSize = x.ExtractOrExtend sliceSize changedTermSize
846- let shift = x.MkBVSub( w, x.MkBVAdd( pos, sliceSize))
847- let part = x.MkBVShl( term, shift)
836+ let part = x.MkBVShl( term, pos)
848837 let res = x.MkITE( intersects, x.MkBVOr( res, part), res) :?> BitVecExpr
849838 res, assumptions
850839 let result , assumptions = List.fold addOneSlice ( res, List.empty) slices
851- let result = x.ReverseBytes result
852- let result = x.CreateCombineResult result typ size
840+ let result = x.CreateCombineResult result typ window
853841 { expr = result; assumptions = assumptions}
854842
855843 member private x.EncodeApplication sf typ ( args : Expr array ) =
0 commit comments