aboutsummaryrefslogtreecommitdiffstats
path: root/backend/Selection.v
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-04-03 22:36:22 +0200
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-04-03 22:36:22 +0200
commitca34ea47f863c074a9d0ca890097786c5829267c (patch)
tree52177af944305d25bcfea601f9abc57b1eef525a /backend/Selection.v
parent524678ff9a521433ff0b5af2a3986c1e385e699e (diff)
downloadcompcert-kvx-ca34ea47f863c074a9d0ca890097786c5829267c.tar.gz
compcert-kvx-ca34ea47f863c074a9d0ca890097786c5829267c.zip
ternary ops for float/double
Diffstat (limited to 'backend/Selection.v')
-rw-r--r--backend/Selection.v36
1 files changed, 34 insertions, 2 deletions
diff --git a/backend/Selection.v b/backend/Selection.v
index 5cfa3dcb..b9f5448c 100644
--- a/backend/Selection.v
+++ b/backend/Selection.v
@@ -276,6 +276,7 @@ Definition sel_builtin optid ef args :=
match ef with
| EF_builtin name sign =>
(if String.string_dec name "__builtin_ternary_uint"
+ || String.string_dec name "__builtin_ternary_int"
then
match optid with
| None => OK Sskip
@@ -286,11 +287,12 @@ Definition sel_builtin optid ef args :=
((sel_expr a3):::
(sel_expr a2):::
(sel_expr a1):::Enil)))
- | _ => Error (msg "__builtin_ternary_ulong: arguments")
+ | _ => Error (msg "__builtin_ternary_(u)int: arguments")
end
end
else
if String.string_dec name "__builtin_ternary_ulong"
+ || String.string_dec name "__builtin_ternary_long"
then
match optid with
| None => OK Sskip
@@ -301,7 +303,37 @@ Definition sel_builtin optid ef args :=
((sel_expr a3):::
(sel_expr a2):::
(sel_expr a1):::Enil)))
- | _ => Error (msg "__builtin_ternary_uint: arguments")
+ | _ => Error (msg "__builtin_ternary_(u)long: arguments")
+ end
+ end
+ else
+ if String.string_dec name "__builtin_ternary_double"
+ then
+ match optid with
+ | None => OK Sskip
+ | Some id =>
+ match args with
+ | a1::a2::a3::nil =>
+ OK (Sassign id (Eop Oselectf
+ ((sel_expr a3):::
+ (sel_expr a2):::
+ (sel_expr a1):::Enil)))
+ | _ => Error (msg "__builtin_ternary_double: arguments")
+ end
+ end
+ else
+ if String.string_dec name "__builtin_ternary_float"
+ then
+ match optid with
+ | None => OK Sskip
+ | Some id =>
+ match args with
+ | a1::a2::a3::nil =>
+ OK (Sassign id (Eop Oselectfs
+ ((sel_expr a3):::
+ (sel_expr a2):::
+ (sel_expr a1):::Enil)))
+ | _ => Error (msg "__builtin_ternary_float: arguments")
end
end
else