aboutsummaryrefslogtreecommitdiff
path: root/src/Util/ZUtil/Definitions.v
diff options
context:
space:
mode:
authorGravatar Jason Gross <jagro@google.com>2018-06-26 13:23:40 -0400
committerGravatar Jason Gross <jagro@google.com>2018-06-26 13:23:40 -0400
commit6d3702edad1a69a08565a288f1153b4853ba3b25 (patch)
tree2bd599356721995432c4edf5f803f425024cf668 /src/Util/ZUtil/Definitions.v
parentbaa585b4fce11c7ce4eb4493c98137fd87e74c0c (diff)
Slightly better definitions of some ZUtil functions
This way we can just directly reify most of the primitives we care about.
Diffstat (limited to 'src/Util/ZUtil/Definitions.v')
-rw-r--r--src/Util/ZUtil/Definitions.v18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/Util/ZUtil/Definitions.v b/src/Util/ZUtil/Definitions.v
index 67ccbc772..373c71763 100644
--- a/src/Util/ZUtil/Definitions.v
+++ b/src/Util/ZUtil/Definitions.v
@@ -31,7 +31,7 @@ Module Z.
Definition add_with_carry (c : Z) (x y : Z) : Z
:= c + x + y.
Definition add_with_get_carry (bitwidth : Z) (c : Z) (x y : Z) : Z * Z
- := get_carry bitwidth (add_with_carry c x y).
+ := dlet v := add_with_carry c x y in get_carry bitwidth v.
Definition add_get_carry (bitwidth : Z) (x y : Z) : Z * Z
:= add_with_get_carry bitwidth 0 x y.
@@ -41,7 +41,7 @@ Module Z.
Definition sub_with_borrow (c : Z) (x y : Z) : Z
:= add_with_carry (-c) x (-y).
Definition sub_with_get_borrow (bitwidth : Z) (c : Z) (x y : Z) : Z * Z
- := get_borrow bitwidth (sub_with_borrow c x y).
+ := dlet v := sub_with_borrow c x y in get_borrow bitwidth v.
Definition sub_get_borrow (bitwidth : Z) (x y : Z) : Z * Z
:= sub_with_get_borrow bitwidth 0 x y.
@@ -66,14 +66,12 @@ Module Z.
Definition mul_split_at_bitwidth (bitwidth : Z) (x y : Z) : Z * Z
:= dlet xy := x * y in
- (match bitwidth with
- | Z.pos _ | Z0 => xy &' Z.ones bitwidth
- | Z.neg _ => xy mod 2^bitwidth
- end,
- match bitwidth with
- | Z.pos _ | Z0 => xy >> bitwidth
- | Z.neg _ => xy / 2^bitwidth
- end).
+ (if Z.geb bitwidth 0
+ then xy &' Z.ones bitwidth
+ else xy mod 2^bitwidth,
+ if Z.geb bitwidth 0
+ then xy >> bitwidth
+ else xy / 2^bitwidth).
Definition mul_split (s x y : Z) : Z * Z
:= if s =? 2^Z.log2 s
then mul_split_at_bitwidth (Z.log2 s) x y