aboutsummaryrefslogtreecommitdiffstats
path: root/test/kvx/instr/individual/indirect_tailcall.c
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2020-05-26 22:11:32 +0200
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2020-05-26 22:11:32 +0200
commitbc1e43ea95b9455cdccee442db77bc5fafd3dcc6 (patch)
tree4e82b5f50870603f42ec46d57e543c3e10fb1f4f /test/kvx/instr/individual/indirect_tailcall.c
parentb4a08d0815342b6238d307864f0823d0f07bb691 (diff)
downloadcompcert-kvx-bc1e43ea95b9455cdccee442db77bc5fafd3dcc6.tar.gz
compcert-kvx-bc1e43ea95b9455cdccee442db77bc5fafd3dcc6.zip
tests for kvx
Diffstat (limited to 'test/kvx/instr/individual/indirect_tailcall.c')
-rw-r--r--test/kvx/instr/individual/indirect_tailcall.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/test/kvx/instr/individual/indirect_tailcall.c b/test/kvx/instr/individual/indirect_tailcall.c
new file mode 100644
index 00000000..e6c16ea1
--- /dev/null
+++ b/test/kvx/instr/individual/indirect_tailcall.c
@@ -0,0 +1,33 @@
+#include "framework.h"
+
+long long sum(long long a, long long b){
+ return a+b;
+}
+
+long long diff(long long a, long long b){
+ return a-b;
+}
+
+long long mul(long long a, long long b){
+ return a*b;
+}
+
+long long random_op(long long a, long long b){
+ long long d = 3;
+ long long (*op)(long long, long long);
+
+ if (a % d == 0)
+ op = sum;
+ else if (a % d == 1)
+ op = diff;
+ else
+ op = mul;
+
+ return op(a, b);
+}
+
+BEGIN_TEST(long long)
+{
+ c += random_op(a, b);
+}
+END_TEST64()