what4/bv-sized-migration.md

23 lines
1.0 KiB
Markdown
Raw Normal View History

This is a WIP migration guide for porting downstream libraries after the
what4/bv-sized change.
* Constants (no Num instance): "0" because "BV.zero w"
* All Data.Bits operations
First pass: resolving Integer ~ BV.BV w mismatch
* Basically, there's two scenarios -- one where you want to turn the Integer into a BV w, and one where you just want to convert.
* asUnsignedBV x ==> BV.asUnsigned <$> asBV x
* fromConcreteUnsignedBV x ==> BV.asUnsigned (fromConcreteBV x)
* bvLit sym w x ==> bvLit sym w (BV.mkBV w x)
* i <- [0..n] ==> i <- BV.enumFromToUnsigned (BV.zero w) (BV.mkBV w n)
* minSigned ==> BV.minSigned
* functions from parameterized-utils that return Integers ==> functions from bv-sized that return BVs
* Num operators ==> BV operators
* Bits operators ==> BV operators
* shifting/masking ==> BV concat/select/trunc/zext/sext
* bvLit sym w (intValue w) ==> bvLit sym w (BV.width w)
Second pass: resolving "no Num instance"
* 0 ==> BV.zero w
* 1 ==> BV.one w
* for anything else, you probably should use BV.mkBV w