diff options
author | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-04-03 20:44:16 +0200 |
---|---|---|
committer | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-04-03 20:44:16 +0200 |
commit | 015a05d8661504388ea1109f740eb16220311f93 (patch) | |
tree | 52a76f3a13983848756f4095f655307169a4d11a | |
parent | c8cd3d017890a250f32463b6dca6571d181a3c22 (diff) | |
download | compcert-kvx-015a05d8661504388ea1109f740eb16220311f93.tar.gz compcert-kvx-015a05d8661504388ea1109f740eb16220311f93.zip |
begin implementing ternary builtin
-rw-r--r-- | backend/Selection.v | 17 | ||||
-rw-r--r-- | test/monniaux/ternary_builtin/ternary_builtin.c | 7 |
2 files changed, 20 insertions, 4 deletions
diff --git a/backend/Selection.v b/backend/Selection.v index a87578ba..5e45dde3 100644 --- a/backend/Selection.v +++ b/backend/Selection.v @@ -276,10 +276,19 @@ Definition sel_builtin optid ef args := match ef with | EF_builtin name sign => (if String.string_dec name "__builtin_ternary_uint" - then (match optid with - | None => OK Sskip - | Some id => Error (msg "Selection: ternary uint") - end) + then + match optid with + | None => OK Sskip + | Some id => + match args with + | a1::a2::a3::nil => + OK (Sassign id (Eop Oselect + ((sel_expr a3)::: + (sel_expr a2)::: + (sel_expr a1):::Enil))) + | _ => Error (msg "__builtin_ternary_uint: arguments") + end + end else sel_builtin_default optid ef args) | _ => sel_builtin_default optid ef args end. diff --git a/test/monniaux/ternary_builtin/ternary_builtin.c b/test/monniaux/ternary_builtin/ternary_builtin.c index 8052da0f..98497387 100644 --- a/test/monniaux/ternary_builtin/ternary_builtin.c +++ b/test/monniaux/ternary_builtin/ternary_builtin.c @@ -1,3 +1,10 @@ +#include <stdio.h> + int essai(int x, unsigned y, unsigned z) { return __builtin_ternary_uint(x, y, z); } + +int main() { + printf("%d\n", essai(0, 42, 69)); + return 0; +} |