diff options
author | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-04-03 22:36:22 +0200 |
---|---|---|
committer | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-04-03 22:36:22 +0200 |
commit | ca34ea47f863c074a9d0ca890097786c5829267c (patch) | |
tree | 52177af944305d25bcfea601f9abc57b1eef525a /backend/Selection.v | |
parent | 524678ff9a521433ff0b5af2a3986c1e385e699e (diff) | |
download | compcert-kvx-ca34ea47f863c074a9d0ca890097786c5829267c.tar.gz compcert-kvx-ca34ea47f863c074a9d0ca890097786c5829267c.zip |
ternary ops for float/double
Diffstat (limited to 'backend/Selection.v')
-rw-r--r-- | backend/Selection.v | 36 |
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 |