diff options
author | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-03-26 10:29:48 +0100 |
---|---|---|
committer | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-03-26 10:29:48 +0100 |
commit | 397cefa66b6b56818bd7602e349f98de9a74491b (patch) | |
tree | 9eac2e8906e7027e2099d110e8fe01749edee8b9 /mppa_k1c/SelectOp.vp | |
parent | e6a14b52554819995fed85c85a4acfedbb6ee3bc (diff) | |
download | compcert-kvx-397cefa66b6b56818bd7602e349f98de9a74491b.tar.gz compcert-kvx-397cefa66b6b56818bd7602e349f98de9a74491b.zip |
select basic operators
Diffstat (limited to 'mppa_k1c/SelectOp.vp')
-rw-r--r-- | mppa_k1c/SelectOp.vp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/mppa_k1c/SelectOp.vp b/mppa_k1c/SelectOp.vp index f6605c11..0dad482b 100644 --- a/mppa_k1c/SelectOp.vp +++ b/mppa_k1c/SelectOp.vp @@ -61,6 +61,30 @@ Section SELECT. Context {hf: helper_functions}. +(** Stuff for select *) +Definition is_zero_expr (vt : expr) : expr := + Eop (Ocmp (Ccomp Ceq)) + (vt:::(Eop (Ointconst Int.zero) Enil):::Enil). + +Definition is_nonzero_expr (vt : expr) : expr := + Eop (Ocmp (Ccomp Cne)) + (vt:::(Eop (Ointconst Int.zero) Enil):::Enil). + +Definition bool_to_bitmask (et : expr) : expr := + Eop Oneg (et:::Enil). + +Definition not_bool_to_bitmask (et : expr) : expr := + Eop Osub (et:::(Eop (Ointconst Int.one) Enil):::Enil). + +Definition ternary_expand (et e0 e1 : expr) : expr := + Eop Oor + ((Eop Oand ((not_bool_to_bitmask et):::e1:::Enil))::: + (Eop Oand ((bool_to_bitmask et):::e0:::Enil))::: + Enil). + +Definition select_or_expand (et e0 e1 : expr) : expr := + ternary_expand (is_nonzero_expr et) e0 e1. + (** ** Constants **) Definition addrsymbol (id: ident) (ofs: ptrofs) := |