aboutsummaryrefslogtreecommitdiffstats
path: root/mppa_k1c/SelectOp.vp
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-03-26 10:29:48 +0100
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-03-26 10:29:48 +0100
commit397cefa66b6b56818bd7602e349f98de9a74491b (patch)
tree9eac2e8906e7027e2099d110e8fe01749edee8b9 /mppa_k1c/SelectOp.vp
parente6a14b52554819995fed85c85a4acfedbb6ee3bc (diff)
downloadcompcert-kvx-397cefa66b6b56818bd7602e349f98de9a74491b.tar.gz
compcert-kvx-397cefa66b6b56818bd7602e349f98de9a74491b.zip
select basic operators
Diffstat (limited to 'mppa_k1c/SelectOp.vp')
-rw-r--r--mppa_k1c/SelectOp.vp24
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) :=