Skip to content

Commit ab16441

Browse files
committed
lospec: raw equality
1 parent 64b53a0 commit ab16441

File tree

5 files changed

+19
-0
lines changed

5 files changed

+19
-0
lines changed

libs/lospecs/ast.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ type aexpr_ =
7070
| EOr of aword * (aexpr * aexpr)
7171
| EXor of aword * (aexpr * aexpr)
7272
| EAnd of aword * (aexpr * aexpr)
73+
| EEq of aword * (aexpr * aexpr)
7374
| ECmp of aword * us * [`Gt | `Ge] * (aexpr * aexpr)
7475
| EPopCount of aword * aexpr
7576
[@@deriving yojson]

libs/lospecs/circuit.ml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,11 @@ let sle (r1 : reg) (r2 : reg) : node =
648648
let iszero (r : reg) : node =
649649
bvueq r (Array.map (fun _ -> false_) r)
650650

651+
(* -------------------------------------------------------------------- *)
652+
let eq (r1 : reg) (r2 : reg) : node =
653+
assert (Array.length r1 = Array.length r2);
654+
bvueq r1 r2
655+
651656
(* -------------------------------------------------------------------- *)
652657
let abs (a : reg) : reg =
653658
let msb_a, _ = split_msb a in

libs/lospecs/circuit.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ val bvueq : reg -> reg -> node
152152

153153
val bvseq : reg -> reg -> node
154154

155+
val eq : reg -> reg -> node
156+
155157
(* ==================================================================== *)
156158
val sat : signed:bool -> size:int -> reg -> reg
157159

libs/lospecs/circuit_spec.ml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ let circuit_of_specification (rs : reg list) (p : adef) : reg =
105105
| `US -> Circuit.usmul e1 e2
106106
end
107107

108+
| EEq(`W _, (e1, e2)) ->
109+
let e1 = of_expr env e1 in
110+
let e2 = of_expr env e2 in
111+
[|Circuit.eq e1 e2|]
112+
108113
| ECmp (`W _, us, k, (e1, e2)) ->
109114
let e1 = of_expr env e1 in
110115
let e2 = of_expr env e2 in

libs/lospecs/typing.ml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ module Sigs : sig
155155
val smullo : sig_
156156
val smulhi : sig_
157157
val usmul : sig_
158+
val eq : sig_
158159
val sgt : sig_
159160
val sge : sig_
160161
val ugt : sig_
@@ -291,6 +292,10 @@ end = struct
291292
let usmul : sig_ =
292293
mulop ~ret:(fun n -> 2 * n) ~name:"usmul" `US
293294
295+
let eq : sig_ =
296+
let mk = fun ws x y -> EEq (as_seq1 ws, (x, y)) in
297+
binop ~ret:(fun _ -> 1) ~name:"eq" mk
298+
294299
let sgt : sig_ =
295300
let mk = fun ws x y -> ECmp (as_seq1 ws, `S, `Gt, (x, y)) in
296301
binop ~ret:(fun _ -> 1) ~name:"sgt" mk
@@ -346,6 +351,7 @@ let sigs : sig_ list = [
346351
Sigs.smullo;
347352
Sigs.smulhi;
348353
Sigs.usmul;
354+
Sigs.eq;
349355
Sigs.sgt;
350356
Sigs.sge;
351357
Sigs.ugt;

0 commit comments

Comments
 (0)