aboutsummaryrefslogtreecommitdiffstats
path: root/test/kvx/instr
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
parentb4a08d0815342b6238d307864f0823d0f07bb691 (diff)
downloadcompcert-kvx-bc1e43ea95b9455cdccee442db77bc5fafd3dcc6.tar.gz
compcert-kvx-bc1e43ea95b9455cdccee442db77bc5fafd3dcc6.zip
tests for kvx
Diffstat (limited to 'test/kvx/instr')
-rw-r--r--test/kvx/instr/.gitignore1
-rw-r--r--test/kvx/instr/Makefile176
-rw-r--r--test/kvx/instr/builtin32.c12
-rw-r--r--test/kvx/instr/builtin64.c17
-rw-r--r--test/kvx/instr/div32.c5
-rw-r--r--test/kvx/instr/divf32.c5
-rw-r--r--test/kvx/instr/divf64.c5
-rw-r--r--test/kvx/instr/divu32.c7
-rw-r--r--test/kvx/instr/f32.c8
-rw-r--r--test/kvx/instr/f64.c8
-rwxr-xr-xtest/kvx/instr/floatcmp.py93
-rw-r--r--test/kvx/instr/framework.h66
-rw-r--r--test/kvx/instr/i32.c149
-rw-r--r--test/kvx/instr/i64.c169
-rw-r--r--test/kvx/instr/individual/andw.c5
-rw-r--r--test/kvx/instr/individual/branch.c10
-rw-r--r--test/kvx/instr/individual/branchz.c10
-rw-r--r--test/kvx/instr/individual/branchzu.c11
-rw-r--r--test/kvx/instr/individual/call.c16
-rw-r--r--test/kvx/instr/individual/cast_S32_S64.c7
-rw-r--r--test/kvx/instr/individual/cast_S64_U32.c7
-rw-r--r--test/kvx/instr/individual/cb.deqz.c10
-rw-r--r--test/kvx/instr/individual/cb.dgez.c10
-rw-r--r--test/kvx/instr/individual/cb.dgtz.c10
-rw-r--r--test/kvx/instr/individual/cb.dlez.c10
-rw-r--r--test/kvx/instr/individual/cb.dltz.c10
-rw-r--r--test/kvx/instr/individual/cb.dnez.c10
-rw-r--r--test/kvx/instr/individual/cb.wgez.c10
-rw-r--r--test/kvx/instr/individual/cb.wgtz.c10
-rw-r--r--test/kvx/instr/individual/cb.wlez.c10
-rw-r--r--test/kvx/instr/individual/cb.wltz.c10
-rw-r--r--test/kvx/instr/individual/compd.eq.c7
-rw-r--r--test/kvx/instr/individual/compd.geu.c7
-rw-r--r--test/kvx/instr/individual/compd.gt.c7
-rw-r--r--test/kvx/instr/individual/compd.le.c7
-rw-r--r--test/kvx/instr/individual/compd.leu.c7
-rw-r--r--test/kvx/instr/individual/compd.lt.c7
-rw-r--r--test/kvx/instr/individual/compd.ltu.c7
-rw-r--r--test/kvx/instr/individual/compd.ne.c7
-rw-r--r--test/kvx/instr/individual/compw.eq.c7
-rw-r--r--test/kvx/instr/individual/compw.geu.c7
-rw-r--r--test/kvx/instr/individual/compw.gt.c7
-rw-r--r--test/kvx/instr/individual/compw.gtu.c7
-rw-r--r--test/kvx/instr/individual/compw.le.c7
-rw-r--r--test/kvx/instr/individual/compw.leu.c7
-rw-r--r--test/kvx/instr/individual/compw.lt.c7
-rw-r--r--test/kvx/instr/individual/compw.ltu.c7
-rw-r--r--test/kvx/instr/individual/compw.ne.c7
-rw-r--r--test/kvx/instr/individual/div2.c7
-rw-r--r--test/kvx/instr/individual/doubleconv.c9
-rw-r--r--test/kvx/instr/individual/floatconv.c9
-rw-r--r--test/kvx/instr/individual/fmuld.c7
-rw-r--r--test/kvx/instr/individual/fmulw.c7
-rw-r--r--test/kvx/instr/individual/fnegd.c7
-rw-r--r--test/kvx/instr/individual/fnegw.c7
-rw-r--r--test/kvx/instr/individual/for.c9
-rw-r--r--test/kvx/instr/individual/forvar.c9
-rw-r--r--test/kvx/instr/individual/forvarl.c10
-rw-r--r--test/kvx/instr/individual/fsbfd.c7
-rw-r--r--test/kvx/instr/individual/fsbfw.c7
-rw-r--r--test/kvx/instr/individual/indirect_call.c33
-rw-r--r--test/kvx/instr/individual/indirect_tailcall.c33
-rw-r--r--test/kvx/instr/individual/lbs.c9
-rw-r--r--test/kvx/instr/individual/lbz.c9
-rw-r--r--test/kvx/instr/individual/muld.c7
-rw-r--r--test/kvx/instr/individual/mulw.c7
-rw-r--r--test/kvx/instr/individual/negd.c7
-rw-r--r--test/kvx/instr/individual/ord.c7
-rw-r--r--test/kvx/instr/individual/sbfd.c7
-rw-r--r--test/kvx/instr/individual/sbfw.c7
-rw-r--r--test/kvx/instr/individual/simple.c7
-rw-r--r--test/kvx/instr/individual/sllw.c7
-rw-r--r--test/kvx/instr/individual/srad.c7
-rw-r--r--test/kvx/instr/individual/srld.c7
-rw-r--r--test/kvx/instr/individual/tailcall.c16
-rw-r--r--test/kvx/instr/individual/udivd.c7
-rw-r--r--test/kvx/instr/individual/umodd.c7
-rw-r--r--test/kvx/instr/individual/xord.c7
-rw-r--r--test/kvx/instr/modi32.c5
-rw-r--r--test/kvx/instr/modui32.c7
-rw-r--r--test/kvx/instr/ui32.c12
-rw-r--r--test/kvx/instr/ui64.c10
82 files changed, 1326 insertions, 0 deletions
diff --git a/test/kvx/instr/.gitignore b/test/kvx/instr/.gitignore
new file mode 100644
index 00000000..ea1472ec
--- /dev/null
+++ b/test/kvx/instr/.gitignore
@@ -0,0 +1 @@
+output/
diff --git a/test/kvx/instr/Makefile b/test/kvx/instr/Makefile
new file mode 100644
index 00000000..e4f964b3
--- /dev/null
+++ b/test/kvx/instr/Makefile
@@ -0,0 +1,176 @@
+SHELL := /bin/bash
+
+KVXC ?= k1-cos-gcc
+CC ?= gcc
+CCOMP ?= ccomp
+OPTIM ?= -O2
+CFLAGS ?= $(OPTIM)
+CCOMPFLAGS ?= $(CFLAGS)
+SIMU ?= k1-mppa
+TIMEOUT ?= --signal=SIGTERM 120s
+DIFF ?= python2.7 floatcmp.py -reltol .00001
+HARDRUN ?= k1-jtag-runner
+
+DIR=./
+SRCDIR=$(DIR)
+OUTDIR=$(DIR)/out
+BINDIR=$(DIR)/bin
+ASMDIR=$(DIR)/asm
+LIB=../lib/system.x86-gcc.a
+K1LIB=../lib/system.gcc.a
+
+##
+# Intended flow : .c -> .gcc.s -> .gcc.bin -> .gcc.out
+# -> .ccomp.s -> .ccomp.bin -> .ccomp.out
+##
+
+KVXCPATH=$(shell which $(KVXC))
+CCPATH=$(shell which $(CC))
+CCOMPPATH=$(shell which $(CCOMP))
+SIMUPATH=$(shell which $(SIMU))
+
+TESTNAMES?=$(notdir $(subst .c,,$(wildcard $(DIR)/*.c)))
+X86_GCC_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .x86-gcc.out,$(TESTNAMES)))
+GCC_SIMUOUT=$(addprefix $(OUTDIR)/,$(addsuffix .gcc.simu.out,$(TESTNAMES)))
+CCOMP_SIMUOUT=$(addprefix $(OUTDIR)/,$(addsuffix .ccomp.simu.out,$(TESTNAMES)))
+GCC_HARDOUT=$(addprefix $(OUTDIR)/,$(addsuffix .gcc.hard.out,$(TESTNAMES)))
+CCOMP_HARDOUT=$(addprefix $(OUTDIR)/,$(addsuffix .ccomp.hard.out,$(TESTNAMES)))
+
+BIN=$(addprefix $(BINDIR)/,$(addsuffix .x86-gcc.bin,$(TESTNAMES)))\
+ $(addprefix $(BINDIR)/,$(addsuffix .gcc.bin,$(TESTNAMES)))\
+ $(addprefix $(BINDIR)/,$(addsuffix .ccomp.bin,$(TESTNAMES)))
+
+##
+# Targets
+##
+
+all: $(BIN)
+
+GREEN=\033[0;32m
+RED=\033[0;31m
+YELLOW=\033[0;33m
+NC=\033[0m
+
+.PHONY:
+test: simutest
+
+.PHONY:
+check: simucheck
+
+.PHONY:
+simutest: $(X86_GCC_OUT) $(GCC_SIMUOUT)
+ @echo "Comparing x86 gcc output to k1 gcc.."
+ for test in $(TESTNAMES); do\
+ x86out=$(OUTDIR)/$$test.x86-gcc.out;\
+ gccout=$(OUTDIR)/$$test.gcc.simu.out;\
+ if grep "__KVX__" -q $$test.c; then\
+ printf "$(YELLOW)UNTESTED: $$test.c contains an \`#ifdef __KVX__\`\n";\
+ elif $(DIFF) $$x86out $$gccout > /dev/null; test $${PIPESTATUS[0]} -ne 0; then\
+ >&2 printf "$(RED)ERROR: $$x86out and $$gccout differ$(NC)\n";\
+ else\
+ printf "$(GREEN)GOOD: $$x86out and $$gccout concur$(NC)\n";\
+ fi;\
+ done
+
+.PHONY:
+simucheck: $(GCC_SIMUOUT) $(CCOMP_SIMUOUT)
+ @echo "Comparing k1 gcc output to ccomp.."
+ @for test in $(TESTNAMES); do\
+ gccout=$(OUTDIR)/$$test.gcc.simu.out;\
+ ccompout=$(OUTDIR)/$$test.ccomp.simu.out;\
+ if $(DIFF) $$ccompout $$gccout > /dev/null; test $${PIPESTATUS[0]} -ne 0; then\
+ >&2 printf "$(RED)ERROR: $$ccompout and $$gccout differ$(NC)\n";\
+ else\
+ printf "$(GREEN)GOOD: $$ccompout and $$gccout concur$(NC)\n";\
+ fi;\
+ done
+
+.PHONY:
+hardtest: $(X86_GCC_OUT) $(GCC_HARDOUT)
+ @echo "Comparing x86 gcc output to k1 gcc.."
+ for test in $(TESTNAMES); do\
+ x86out=$(OUTDIR)/$$test.x86-gcc.out;\
+ gccout=$(OUTDIR)/$$test.gcc.hard.out;\
+ if grep "__KVX__" -q $$test.c; then\
+ printf "$(YELLOW)UNTESTED: $$test.c contains an \`#ifdef __KVX__\`\n";\
+ elif $(DIFF) $$x86out $$gccout > /dev/null; test $${PIPESTATUS[0]} -ne 0; then\
+ >&2 printf "$(RED)ERROR: $$x86out and $$gccout differ$(NC)\n";\
+ else\
+ printf "$(GREEN)GOOD: $$x86out and $$gccout concur$(NC)\n";\
+ fi;\
+ done
+
+.PHONY:
+hardcheck: $(GCC_HARDOUT) $(CCOMP_HARDOUT)
+ @echo "Comparing k1 gcc output to ccomp.."
+ @for test in $(TESTNAMES); do\
+ gccout=$(OUTDIR)/$$test.gcc.hard.out;\
+ ccompout=$(OUTDIR)/$$test.ccomp.hard.out;\
+ if $(DIFF) $$ccompout $$gccout > /dev/null; test $${PIPESTATUS[0]} -ne 0; then\
+ >&2 printf "$(RED)ERROR: $$ccompout and $$gccout differ$(NC)\n";\
+ else\
+ printf "$(GREEN)GOOD: $$ccompout and $$gccout concur$(NC)\n";\
+ fi;\
+ done
+
+##
+# Rules
+##
+
+.SECONDARY:
+$(LIB):
+ (cd $(dir $(LIB)) && make)
+
+$(K1LIB):
+ (cd $(dir $(LIB)) && make)
+
+# Generating output
+
+## Version avec timeout
+$(OUTDIR)/%.x86-gcc.out: $(BINDIR)/%.x86-gcc.bin
+ @mkdir -p $(@D)
+ ret=0; timeout $(TIMEOUT) ./$< > $@ || { ret=$$?; }; echo $$ret >> $@
+
+$(OUTDIR)/%.gcc.simu.out: $(BINDIR)/%.gcc.bin $(SIMUPATH)
+ @mkdir -p $(@D)
+ ret=0; timeout $(TIMEOUT) $(SIMU) -- $< > $@ || { ret=$$?; }; echo $$ret >> $@
+
+$(OUTDIR)/%.ccomp.simu.out: $(BINDIR)/%.ccomp.bin $(SIMUPATH)
+ @mkdir -p $(@D)
+ ret=0; timeout $(TIMEOUT) $(SIMU) -- $< > $@ || { ret=$$?; }; echo $$ret >> $@
+
+$(OUTDIR)/%.gcc.hard.out: $(BINDIR)/%.gcc.bin $(SIMUPATH)
+ @mkdir -p $(@D)
+ ret=0; timeout $(TIMEOUT) $(HARDRUN) --exec-file=Cluster0:$< > $@ || { ret=$$?; }; echo $$ret >> $@
+
+$(OUTDIR)/%.ccomp.hard.out: $(BINDIR)/%.ccomp.bin $(SIMUPATH)
+ @mkdir -p $(@D)
+ ret=0; timeout $(TIMEOUT) $(HARDRUN) --exec-file=Cluster0:$< > $@ || { ret=$$?; }; echo $$ret >> $@
+
+# Assembly to binary
+
+$(BINDIR)/%.x86-gcc.bin: $(ASMDIR)/%.x86-gcc.s $(LIB) $(CCPATH)
+ @mkdir -p $(@D)
+ $(CC) $(CFLAGS) $(filter-out $(CCPATH),$^) -o $@
+
+$(BINDIR)/%.gcc.bin: $(ASMDIR)/%.gcc.s $(K1LIB) $(KVXCPATH)
+ @mkdir -p $(@D)
+ $(KVXC) $(CFLAGS) $(filter-out $(KVXCPATH),$^) -o $@
+
+$(BINDIR)/%.ccomp.bin: $(ASMDIR)/%.ccomp.s $(K1LIB) $(CCOMPPATH)
+ @mkdir -p $(@D)
+ $(CCOMP) $(CCOMPFLAGS) $(filter-out $(CCOMPPATH),$^) -o $@
+
+# Source to assembly
+
+$(ASMDIR)/%.x86-gcc.s: $(SRCDIR)/%.c $(CCPATH)
+ @mkdir -p $(@D)
+ $(CC) $(CFLAGS) -S $< -o $@
+
+$(ASMDIR)/%.gcc.s: $(SRCDIR)/%.c $(KVXCPATH)
+ @mkdir -p $(@D)
+ $(KVXC) $(CFLAGS) -S $< -o $@
+
+$(ASMDIR)/%.ccomp.s: $(SRCDIR)/%.c $(CCOMPPATH)
+ @mkdir -p $(@D)
+ $(CCOMP) $(CCOMPFLAGS) -S $< -o $@
diff --git a/test/kvx/instr/builtin32.c b/test/kvx/instr/builtin32.c
new file mode 100644
index 00000000..9efb33cd
--- /dev/null
+++ b/test/kvx/instr/builtin32.c
@@ -0,0 +1,12 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+ int *ptr = &c;
+#ifdef __KVX__
+ int d = c;
+ a = __builtin_kvx_alclrw(ptr);
+ c = d;
+
+#endif
+END_TEST32()
+
diff --git a/test/kvx/instr/builtin64.c b/test/kvx/instr/builtin64.c
new file mode 100644
index 00000000..252eb2c6
--- /dev/null
+++ b/test/kvx/instr/builtin64.c
@@ -0,0 +1,17 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+ long long *ptr = &c;
+#ifdef __KVX__
+ long long d = c;
+ a = __builtin_kvx_alclrd(ptr);
+ c = d;
+ c += a;
+
+ c += __builtin_clzll(a);
+
+ /* Removed the AFADDD builtin who was incorrect in CompCert, see #157 */
+ // a = __builtin_kvx_afaddd(ptr, a);
+ // a = __builtin_kvx_afaddd(ptr, a);
+#endif
+END_TEST64()
diff --git a/test/kvx/instr/div32.c b/test/kvx/instr/div32.c
new file mode 100644
index 00000000..83c3a0e3
--- /dev/null
+++ b/test/kvx/instr/div32.c
@@ -0,0 +1,5 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+ c = a/b;
+END_TEST32()
diff --git a/test/kvx/instr/divf32.c b/test/kvx/instr/divf32.c
new file mode 100644
index 00000000..513a3293
--- /dev/null
+++ b/test/kvx/instr/divf32.c
@@ -0,0 +1,5 @@
+#include "framework.h"
+
+BEGIN_TEST(float)
+ c = a / b;
+END_TESTF32()
diff --git a/test/kvx/instr/divf64.c b/test/kvx/instr/divf64.c
new file mode 100644
index 00000000..0dd23826
--- /dev/null
+++ b/test/kvx/instr/divf64.c
@@ -0,0 +1,5 @@
+#include "framework.h"
+
+BEGIN_TEST(double)
+ c = a / b;
+END_TESTF64()
diff --git a/test/kvx/instr/divu32.c b/test/kvx/instr/divu32.c
new file mode 100644
index 00000000..1fe196c4
--- /dev/null
+++ b/test/kvx/instr/divu32.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned int)
+{
+ c = a/b;
+}
+END_TEST32()
diff --git a/test/kvx/instr/f32.c b/test/kvx/instr/f32.c
new file mode 100644
index 00000000..7e304aeb
--- /dev/null
+++ b/test/kvx/instr/f32.c
@@ -0,0 +1,8 @@
+#include "framework.h"
+
+BEGIN_TEST(float)
+ c = ((float)a + (float)b);
+ c += ((float)a * (float)b);
+ c += (-(float)a);
+ c += ((float)a - (float)b);
+END_TESTF32()
diff --git a/test/kvx/instr/f64.c b/test/kvx/instr/f64.c
new file mode 100644
index 00000000..be8094c9
--- /dev/null
+++ b/test/kvx/instr/f64.c
@@ -0,0 +1,8 @@
+#include "framework.h"
+
+BEGIN_TEST(double)
+ c = ((double)a + (double)b);
+ c += ((double)a * (double)b);
+ c += (-(double)a);
+ c += ((double)a - (double)b);
+END_TESTF64()
diff --git a/test/kvx/instr/floatcmp.py b/test/kvx/instr/floatcmp.py
new file mode 100755
index 00000000..49f1bc13
--- /dev/null
+++ b/test/kvx/instr/floatcmp.py
@@ -0,0 +1,93 @@
+#!/usr/bin/python2.7
+
+import argparse as ap
+import sys
+
+parser = ap.ArgumentParser()
+parser.add_argument("file1", help="First file to compare")
+parser.add_argument("file2", help="Second file to compare")
+parser.add_argument("-reltol", help="Relative error")
+parser.add_argument("-abstol", help="Absolute error")
+parser.add_argument("-s", help="Silent output", action="store_true")
+args = parser.parse_args()
+
+reltol = float(args.reltol) if args.reltol else None
+abstol = float(args.abstol) if args.abstol else None
+silent = args.s
+
+if silent:
+ sys.stdout = open("/dev/null", "w")
+
+import re
+from math import fabs
+
+def floatcmp(f1, f2):
+ if abstol:
+ if fabs(f1 - f2) > abstol:
+ return False
+ if reltol:
+ if f2 != 0. and fabs((f1 - f2) / f2) > reltol:
+ return False
+ return True
+
+class Parsed(list):
+ def __eq__(self, other):
+ if len(self) != len(other):
+ return False
+ comps = zip(self, other)
+ for comp in comps:
+ if all(isinstance(compElt, str) for compElt in comp):
+ if comp[0] != comp[1]:
+ return False
+ elif all (isinstance(compElt, float) for compElt in comp):
+ if not floatcmp(comp[0], comp[1]):
+ return False
+ else:
+ return False
+ return True
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+parseLine = re.compile(r"\s*(\S+)")
+def readline(line):
+ words = parseLine.findall(line)
+ parsed = Parsed([])
+ for word in words:
+ try:
+ parse = float(word)
+ parsed.append(parse)
+ except ValueError:
+ parsed.append(word)
+ return parsed
+
+def readfile(filename):
+ L = []
+ try:
+ with open(filename) as f:
+ for line in f:
+ L.append(readline(line))
+ except IOError:
+ print "Unable to read {}".format(filename)
+ sys.exit(2)
+ return L
+
+L1 = readfile(args.file1)
+L2 = readfile(args.file2)
+
+if len(L1) != len(L2):
+ print "The files have different amount of lines"
+ print "\t{}: {} lines".format(args.file1, len(L1))
+ print "\t{}: {} lines".format(args.file2, len(L2))
+ sys.exit(1)
+
+cmpL = zip(L1, L2)
+for i, cmpElt in enumerate(cmpL):
+ if cmpElt[0] != cmpElt[1]:
+ print "The files differ at line {}".format(i)
+ print "\t{}: {}".format(args.file1, cmpElt[0])
+ print "\t{}: {}".format(args.file2, cmpElt[1])
+ sys.exit(1)
+
+print "Comparison succeeded"
+sys.exit(0)
diff --git a/test/kvx/instr/framework.h b/test/kvx/instr/framework.h
new file mode 100644
index 00000000..3bbfa271
--- /dev/null
+++ b/test/kvx/instr/framework.h
@@ -0,0 +1,66 @@
+#ifndef __FRAMEWORK_H__
+#define __FRAMEWORK_H__
+
+#include <stdio.h>
+#include "../prng/prng.c"
+
+#define BEGIN_TEST_N(type, N)\
+ int main(void){\
+ type t[N], c, i, j, S;\
+ srand(0);\
+ S = 0;\
+ for (i = 0 ; i < 100 ; i++){\
+ c = randlong();\
+ for (j = 0 ; j < N ; j++)\
+ t[j] = randlong();\
+ /* END BEGIN_TEST_N */
+
+#define BEGIN_TEST(type)\
+ int main(void){\
+ type a, b, c, S;\
+ int i;\
+ srand(0);\
+ S = 0;\
+ for (i = 0 ; i < 100 ; i++){\
+ c = randlong();\
+ a = randlong();\
+ b = randlong();
+ /* END BEGIN_TEST */
+
+/* In between BEGIN_TEST and END_TEST : definition of c */
+
+#define END_TEST64()\
+ printf("%llu\t%llu\t%llu\n", a, b, c);\
+ S += c;\
+ }\
+ return S;\
+ }
+ /* END END_TEST64 */
+
+#define END_TEST32()\
+ printf("%u\t%u\t%u\n", a, b, c);\
+ S += c;\
+ }\
+ return S;\
+ }
+ /* END END_TEST32 */
+
+#define END_TESTF32()\
+ printf("%e\t%e\t%e\n", a, b, c);\
+ S += c;\
+ }\
+ return 0;\
+ }
+ /* END END_TESTF32 */
+
+#define END_TESTF64()\
+ printf("%e\t%e\t%e\n", a, b, c);\
+ S += c;\
+ }\
+ return 0;\
+ }
+ /* END END_TESTF64 */
+
+#endif
+
+
diff --git a/test/kvx/instr/i32.c b/test/kvx/instr/i32.c
new file mode 100644
index 00000000..e350931c
--- /dev/null
+++ b/test/kvx/instr/i32.c
@@ -0,0 +1,149 @@
+#include "framework.h"
+
+int sum(int a, int b){
+ return a+b;
+}
+
+int make(int a){
+ return a;
+}
+
+int tailsum(int a, int b){
+ return make(a+b);
+}
+
+int fact(int a){
+ int r = 1;
+ int i;
+ for (i = 1; i < a; i++)
+ r *= i;
+ return r;
+}
+
+float int2float(int v){
+ return v;
+}
+
+BEGIN_TEST(int)
+ c = a+b;
+ c += a&b;
+
+ /* testing if, cb version */
+ if ((a & 0x1) == 1)
+ c += fact(1);
+ else
+ c += fact(2);
+
+ if (a & 0x1 == 0)
+ c += fact(4);
+ else
+ c += fact(8);
+
+ if (a & 0x1 == 0)
+ c += fact(4);
+ else
+ c += fact(8);
+
+ b = !(a & 0x01);
+ if (!b)
+ c += fact(16);
+ else
+ c += fact(32);
+
+ c += sum(make(a), make(b));
+ c += (long long) a;
+
+ if (0 > (a & 0x1) - 1)
+ c += fact(64);
+ else
+ c += fact(128);
+
+ if (0 >= (a & 0x1))
+ c += fact(256);
+ else
+ c += fact(512);
+
+ if ((a & 0x1) > 0)
+ c += fact(1024);
+ else
+ c += fact(2048);
+
+ if ((a & 0x1) - 1 >= 0)
+ c += fact(4096);
+ else
+ c += fact(8192);
+
+ /* cmoved version */
+ if ((a & 0x1) == 1)
+ c += 1;
+ else
+ c += 2;
+
+ if (a & 0x1 == 0)
+ c += 4;
+ else
+ c += 8;
+
+ if (a & 0x1 == 0)
+ c += 4;
+ else
+ c += 8;
+
+ b = !(a & 0x01);
+ if (!b)
+ c += 16;
+ else
+ c += 32;
+
+ if (0 > (a & 0x1) - 1)
+ c += 64;
+ else
+ c += 128;
+
+ if (0 >= (a & 0x1))
+ c += 256;
+ else
+ c += 512;
+
+ if ((a & 0x1) > 0)
+ c += 1024;
+ else
+ c += 2048;
+
+ if ((a & 0x1) - 1 >= 0)
+ c += 4096;
+ else
+ c += 8192;
+
+ c += ((a & 0x1) == (b & 0x1));
+ c += (a > b);
+ c += (a <= b);
+ c += (a < b);
+ c += (a + b) / 2;
+ c += (int) int2float(a) + (int) int2float(b) + (int) int2float(42.3);
+ c += (a << 4); // addx16w
+ c += (a << 3); // addx8w
+ c += (a << 2); // addx4w
+ c += (a << 1); // addx2w
+
+ c += ~a & b; // andnw
+
+ int j;
+ for (j = 0 ; j < 10 ; j++)
+ c += a;
+ int k;
+ for (k = 0 ; k < (b & 0x8) ; k++)
+ c += a;
+
+ char s[] = "Tome and Cherry at the playa\n";
+ c += s[(a & (sizeof(s)-1))];
+
+ unsigned char s2[] = "Tim is sorry at the playa\n";
+ c += s2[a & (sizeof(s) - 1)];
+
+ c += a*b;
+ c += a-b;
+ c += a << (b & 0x8);
+
+ c += sum(a, b);
+END_TEST32()
diff --git a/test/kvx/instr/i64.c b/test/kvx/instr/i64.c
new file mode 100644
index 00000000..e869d93c
--- /dev/null
+++ b/test/kvx/instr/i64.c
@@ -0,0 +1,169 @@
+#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 make(long long a){
+ return a;
+}
+
+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);
+}
+
+long fact(long a){
+ long r = 1;
+ long i;
+ for (i = 1; i < a; i++)
+ r *= i;
+ return r;
+}
+
+double long2double(long v){
+ return v;
+}
+
+BEGIN_TEST(long long)
+ c = a&b;
+ c += a*b;
+ c += -a;
+ c += a | b;
+ c += a-b;
+ c += a >> (b & 0x8LL);
+ c += a >> (b & 0x8ULL);
+ c += a % b;
+ c += (a << 4); // addx16d
+ c += (a << 3); // addx8d
+ c += (a << 2); // addx4d
+ c += (a << 1); // addx2d
+
+ c += ~a & b; // andnd
+
+ 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;
+
+ c += op(make(a), make(b));
+ c += random_op(a, b);
+ c += a/b;
+ c += a^b;
+ c += (unsigned int) a;
+
+ /* Testing if, cb */
+ if (0 != (a & 0x1LL))
+ c += fact(1);
+ else
+ c += fact(2);
+
+ if (0 > (a & 0x1LL))
+ c += fact(4);
+ else
+ c += fact(8);
+
+ if (0 >= (a & 0x1LL) - 1)
+ c += fact(16);
+ else
+ c += fact(32);
+
+ if ((unsigned long long)(a & 0x1LL) >= 1)
+ c += fact(18);
+ else
+ c += fact(31);
+
+
+ if (a-41414141 > 0)
+ c += fact(13);
+ else
+ c += fact(31);
+
+ if (a & 0x1LL > 0)
+ c += fact(64);
+ else
+ c += fact(128);
+
+ if ((a & 0x1LL) - 1 >= 0)
+ c += fact(256);
+ else
+ c += fact(512);
+
+ if (0 == (a & 0x1LL))
+ c += fact(1024);
+ else
+ c += fact(2048);
+
+ /* Testing if, cmoved */
+ if (0 != (a & 0x1LL))
+ c += 1;
+ else
+ c += 2;
+
+ if (0 > (a & 0x1LL))
+ c += 4;
+ else
+ c += 8;
+
+ if (0 >= (a & 0x1LL) - 1)
+ c += 16;
+ else
+ c += 32;
+
+ if (a-41414141 > 0)
+ c += 13;
+ else
+ c += 31;
+
+ if (a & 0x1LL > 0)
+ c += 64;
+ else
+ c += 128;
+
+ if ((a & 0x1LL) - 1 >= 0)
+ c += 256;
+ else
+ c += 512;
+
+ if (0 == (a & 0x1LL))
+ c += 1024;
+ else
+ c += 2048;
+
+ c += ((a & 0x1LL) == (b & 0x1LL));
+ c += (a >= b);
+ c += (a > b);
+ c += (a <= b);
+ c += (a < b);
+ c += (long) long2double(a) + (long) long2double(b) + (long) long2double(42.3);
+
+ int j;
+
+ for (j = 0 ; j < (b & 0x8LL) ; j++)
+ c += a;
+
+ c += ((a & 0x1LL) == (b & 0x1LL));
+
+END_TEST64()
diff --git a/test/kvx/instr/individual/andw.c b/test/kvx/instr/individual/andw.c
new file mode 100644
index 00000000..799dc7fb
--- /dev/null
+++ b/test/kvx/instr/individual/andw.c
@@ -0,0 +1,5 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+ c = a&b;
+END_TEST32()
diff --git a/test/kvx/instr/individual/branch.c b/test/kvx/instr/individual/branch.c
new file mode 100644
index 00000000..c9937e31
--- /dev/null
+++ b/test/kvx/instr/individual/branch.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ if ((a & 0x1) == 1)
+ c = 0;
+ else
+ c = 1;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/branchz.c b/test/kvx/instr/individual/branchz.c
new file mode 100644
index 00000000..d3e021b5
--- /dev/null
+++ b/test/kvx/instr/individual/branchz.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ if (a & 0x1 == 0)
+ c = 0;
+ else
+ c = 1;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/branchzu.c b/test/kvx/instr/individual/branchzu.c
new file mode 100644
index 00000000..d0169174
--- /dev/null
+++ b/test/kvx/instr/individual/branchzu.c
@@ -0,0 +1,11 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ b = !(a & 0x01);
+ if (!b)
+ c = 0;
+ else
+ c = 1;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/call.c b/test/kvx/instr/individual/call.c
new file mode 100644
index 00000000..ba2ec323
--- /dev/null
+++ b/test/kvx/instr/individual/call.c
@@ -0,0 +1,16 @@
+#include "framework.h"
+
+int sum(int a, int b){
+ return a+b;
+}
+
+int make(int a){
+ return a;
+}
+
+BEGIN_TEST(int)
+{
+ c = sum(make(a), make(b));
+}
+END_TEST32()
+/* RETURN VALUE: 60 */
diff --git a/test/kvx/instr/individual/cast_S32_S64.c b/test/kvx/instr/individual/cast_S32_S64.c
new file mode 100644
index 00000000..09c97e00
--- /dev/null
+++ b/test/kvx/instr/individual/cast_S32_S64.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ c = (long long) a;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/cast_S64_U32.c b/test/kvx/instr/individual/cast_S64_U32.c
new file mode 100644
index 00000000..2d9dc723
--- /dev/null
+++ b/test/kvx/instr/individual/cast_S64_U32.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ c = (unsigned int) a;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/cb.deqz.c b/test/kvx/instr/individual/cb.deqz.c
new file mode 100644
index 00000000..6da2ab07
--- /dev/null
+++ b/test/kvx/instr/individual/cb.deqz.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ if (0 != (a & 0x1LL))
+ c = 1;
+ else
+ c = 0;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/cb.dgez.c b/test/kvx/instr/individual/cb.dgez.c
new file mode 100644
index 00000000..7bef25ad
--- /dev/null
+++ b/test/kvx/instr/individual/cb.dgez.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ if (0 > (a & 0x1LL))
+ c = 1;
+ else
+ c = 0;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/cb.dgtz.c b/test/kvx/instr/individual/cb.dgtz.c
new file mode 100644
index 00000000..1a43fb1f
--- /dev/null
+++ b/test/kvx/instr/individual/cb.dgtz.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ if (0 >= (a & 0x1LL) - 1)
+ c = 1;
+ else
+ c = 0;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/cb.dlez.c b/test/kvx/instr/individual/cb.dlez.c
new file mode 100644
index 00000000..2fb97939
--- /dev/null
+++ b/test/kvx/instr/individual/cb.dlez.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ if (a & 0x1LL > 0)
+ c = 1;
+ else
+ c = 0;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/cb.dltz.c b/test/kvx/instr/individual/cb.dltz.c
new file mode 100644
index 00000000..a431d5d0
--- /dev/null
+++ b/test/kvx/instr/individual/cb.dltz.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ if ((a & 0x1LL) - 1 >= 0)
+ c = 1;
+ else
+ c = 0;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/cb.dnez.c b/test/kvx/instr/individual/cb.dnez.c
new file mode 100644
index 00000000..44516cbe
--- /dev/null
+++ b/test/kvx/instr/individual/cb.dnez.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ if (0 == (a & 0x1LL))
+ c = 1;
+ else
+ c = 0;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/cb.wgez.c b/test/kvx/instr/individual/cb.wgez.c
new file mode 100644
index 00000000..5779ad92
--- /dev/null
+++ b/test/kvx/instr/individual/cb.wgez.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ if (0 > (a & 0x1) - 1)
+ c = 1;
+ else
+ c = 0;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/cb.wgtz.c b/test/kvx/instr/individual/cb.wgtz.c
new file mode 100644
index 00000000..abb695bd
--- /dev/null
+++ b/test/kvx/instr/individual/cb.wgtz.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ if (0 >= (a & 0x1))
+ c = 1;
+ else
+ c = 0;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/cb.wlez.c b/test/kvx/instr/individual/cb.wlez.c
new file mode 100644
index 00000000..3a2e08c1
--- /dev/null
+++ b/test/kvx/instr/individual/cb.wlez.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ if ((a & 0x1) > 0)
+ c = 1;
+ else
+ c = 0;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/cb.wltz.c b/test/kvx/instr/individual/cb.wltz.c
new file mode 100644
index 00000000..5d52c72a
--- /dev/null
+++ b/test/kvx/instr/individual/cb.wltz.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ if ((a & 0x1) - 1 >= 0)
+ c = 1;
+ else
+ c = 0;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/compd.eq.c b/test/kvx/instr/individual/compd.eq.c
new file mode 100644
index 00000000..4fe8de2a
--- /dev/null
+++ b/test/kvx/instr/individual/compd.eq.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ c = ((a & 0x1LL) == (b & 0x1LL));
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/compd.geu.c b/test/kvx/instr/individual/compd.geu.c
new file mode 100644
index 00000000..fccf0804
--- /dev/null
+++ b/test/kvx/instr/individual/compd.geu.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned long long)
+{
+ c = (a >= b);
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/compd.gt.c b/test/kvx/instr/individual/compd.gt.c
new file mode 100644
index 00000000..b9901436
--- /dev/null
+++ b/test/kvx/instr/individual/compd.gt.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ c = (a > b);
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/compd.le.c b/test/kvx/instr/individual/compd.le.c
new file mode 100644
index 00000000..6fa0f103
--- /dev/null
+++ b/test/kvx/instr/individual/compd.le.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ c = (a <= b);
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/compd.leu.c b/test/kvx/instr/individual/compd.leu.c
new file mode 100644
index 00000000..1ad18281
--- /dev/null
+++ b/test/kvx/instr/individual/compd.leu.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned long long)
+{
+ c = (a <= b);
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/compd.lt.c b/test/kvx/instr/individual/compd.lt.c
new file mode 100644
index 00000000..c42cda56
--- /dev/null
+++ b/test/kvx/instr/individual/compd.lt.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ c = (a < b);
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/compd.ltu.c b/test/kvx/instr/individual/compd.ltu.c
new file mode 100644
index 00000000..b03d4d53
--- /dev/null
+++ b/test/kvx/instr/individual/compd.ltu.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned long long)
+{
+ c = (a < b);
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/compd.ne.c b/test/kvx/instr/individual/compd.ne.c
new file mode 100644
index 00000000..fd9d0b28
--- /dev/null
+++ b/test/kvx/instr/individual/compd.ne.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned long long)
+{
+ c = ((a & 0x1ULL) != (b & 0x1ULL));
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/compw.eq.c b/test/kvx/instr/individual/compw.eq.c
new file mode 100644
index 00000000..cd93f365
--- /dev/null
+++ b/test/kvx/instr/individual/compw.eq.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ c = ((a & 0x1) == (b & 0x1));
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/compw.geu.c b/test/kvx/instr/individual/compw.geu.c
new file mode 100644
index 00000000..b8fb1adf
--- /dev/null
+++ b/test/kvx/instr/individual/compw.geu.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned int)
+{
+ c = (a >= b);
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/compw.gt.c b/test/kvx/instr/individual/compw.gt.c
new file mode 100644
index 00000000..5f6bc907
--- /dev/null
+++ b/test/kvx/instr/individual/compw.gt.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ c = (a > b);
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/compw.gtu.c b/test/kvx/instr/individual/compw.gtu.c
new file mode 100644
index 00000000..947f6a14
--- /dev/null
+++ b/test/kvx/instr/individual/compw.gtu.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned int)
+{
+ c = (a > b);
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/compw.le.c b/test/kvx/instr/individual/compw.le.c
new file mode 100644
index 00000000..35ec6b7d
--- /dev/null
+++ b/test/kvx/instr/individual/compw.le.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ c = (a <= b);
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/compw.leu.c b/test/kvx/instr/individual/compw.leu.c
new file mode 100644
index 00000000..74ebfb42
--- /dev/null
+++ b/test/kvx/instr/individual/compw.leu.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned int)
+{
+ c = (a <= b);
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/compw.lt.c b/test/kvx/instr/individual/compw.lt.c
new file mode 100644
index 00000000..cb1f30bd
--- /dev/null
+++ b/test/kvx/instr/individual/compw.lt.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ c = (a < b);
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/compw.ltu.c b/test/kvx/instr/individual/compw.ltu.c
new file mode 100644
index 00000000..6a0c5af1
--- /dev/null
+++ b/test/kvx/instr/individual/compw.ltu.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned int)
+{
+ c = (a < b);
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/compw.ne.c b/test/kvx/instr/individual/compw.ne.c
new file mode 100644
index 00000000..7035e2c7
--- /dev/null
+++ b/test/kvx/instr/individual/compw.ne.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned int)
+{
+ c = ((a & 0x1U) != (b & 0x1U));
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/div2.c b/test/kvx/instr/individual/div2.c
new file mode 100644
index 00000000..b5dfe63a
--- /dev/null
+++ b/test/kvx/instr/individual/div2.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ c = (a + b) / 2;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/doubleconv.c b/test/kvx/instr/individual/doubleconv.c
new file mode 100644
index 00000000..55b1ddab
--- /dev/null
+++ b/test/kvx/instr/individual/doubleconv.c
@@ -0,0 +1,9 @@
+#include "framework.h"
+
+double long2double(long v){
+ return v;
+}
+
+BEGIN_TEST(long)
+ c = (long) long2double(a) + (long) long2double(b) + (long) long2double(42.3);
+END_TEST64()
diff --git a/test/kvx/instr/individual/floatconv.c b/test/kvx/instr/individual/floatconv.c
new file mode 100644
index 00000000..32b798e1
--- /dev/null
+++ b/test/kvx/instr/individual/floatconv.c
@@ -0,0 +1,9 @@
+#include "framework.h"
+
+float int2float(int v){
+ return v;
+}
+
+BEGIN_TEST(int)
+ c = (int) int2float(a) + (int) int2float(b) + (int) int2float(42.3);
+END_TEST32()
diff --git a/test/kvx/instr/individual/fmuld.c b/test/kvx/instr/individual/fmuld.c
new file mode 100644
index 00000000..03c990fa
--- /dev/null
+++ b/test/kvx/instr/individual/fmuld.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(double)
+{
+ c = ((double)a * (double)b);
+}
+END_TESTF64()
diff --git a/test/kvx/instr/individual/fmulw.c b/test/kvx/instr/individual/fmulw.c
new file mode 100644
index 00000000..f85eba64
--- /dev/null
+++ b/test/kvx/instr/individual/fmulw.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(float)
+{
+ c = ((float)a * (float)b);
+}
+END_TESTF32()
diff --git a/test/kvx/instr/individual/fnegd.c b/test/kvx/instr/individual/fnegd.c
new file mode 100644
index 00000000..974eb7e8
--- /dev/null
+++ b/test/kvx/instr/individual/fnegd.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(double)
+{
+ c = (-(double)a);
+}
+END_TESTF64()
diff --git a/test/kvx/instr/individual/fnegw.c b/test/kvx/instr/individual/fnegw.c
new file mode 100644
index 00000000..fbeaab8e
--- /dev/null
+++ b/test/kvx/instr/individual/fnegw.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(float)
+{
+ c = (-(float)a);
+}
+END_TESTF64()
diff --git a/test/kvx/instr/individual/for.c b/test/kvx/instr/individual/for.c
new file mode 100644
index 00000000..373ab6bd
--- /dev/null
+++ b/test/kvx/instr/individual/for.c
@@ -0,0 +1,9 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ int j;
+ for (j = 0 ; j < 10 ; j++)
+ c += a;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/forvar.c b/test/kvx/instr/individual/forvar.c
new file mode 100644
index 00000000..9e43c198
--- /dev/null
+++ b/test/kvx/instr/individual/forvar.c
@@ -0,0 +1,9 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ int k;
+ for (k = 0 ; k < (b & 0x8) ; k++)
+ c += a;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/forvarl.c b/test/kvx/instr/individual/forvarl.c
new file mode 100644
index 00000000..c1fe90fd
--- /dev/null
+++ b/test/kvx/instr/individual/forvarl.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(long long int)
+{
+ int j;
+
+ for (j = 0 ; j < (b & 0x8LL) ; j++)
+ c += a;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/fsbfd.c b/test/kvx/instr/individual/fsbfd.c
new file mode 100644
index 00000000..f80c1efe
--- /dev/null
+++ b/test/kvx/instr/individual/fsbfd.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(double)
+{
+ c = ((double)a - (double)b);
+}
+END_TESTF64()
diff --git a/test/kvx/instr/individual/fsbfw.c b/test/kvx/instr/individual/fsbfw.c
new file mode 100644
index 00000000..067c40b5
--- /dev/null
+++ b/test/kvx/instr/individual/fsbfw.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(float)
+{
+ c = ((float)a - (float)b);
+}
+END_TESTF64()
diff --git a/test/kvx/instr/individual/indirect_call.c b/test/kvx/instr/individual/indirect_call.c
new file mode 100644
index 00000000..f376c00a
--- /dev/null
+++ b/test/kvx/instr/individual/indirect_call.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 make(long long a){
+ return a;
+}
+
+BEGIN_TEST(long long)
+{
+ 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;
+
+ c += op(make(a), make(b));
+}
+END_TEST64()
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()
diff --git a/test/kvx/instr/individual/lbs.c b/test/kvx/instr/individual/lbs.c
new file mode 100644
index 00000000..22a50632
--- /dev/null
+++ b/test/kvx/instr/individual/lbs.c
@@ -0,0 +1,9 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ char s[] = "Tome and Cherry at the playa\n";
+
+ c = s[(a & (sizeof(s)-1))];
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/lbz.c b/test/kvx/instr/individual/lbz.c
new file mode 100644
index 00000000..04ba098d
--- /dev/null
+++ b/test/kvx/instr/individual/lbz.c
@@ -0,0 +1,9 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ unsigned char s[] = "Tim is sorry at the playa\n";
+
+ c = s[a & (sizeof(s) - 1)];
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/muld.c b/test/kvx/instr/individual/muld.c
new file mode 100644
index 00000000..f7e23850
--- /dev/null
+++ b/test/kvx/instr/individual/muld.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ c = a*b;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/mulw.c b/test/kvx/instr/individual/mulw.c
new file mode 100644
index 00000000..a91d966e
--- /dev/null
+++ b/test/kvx/instr/individual/mulw.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ c = a * b;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/negd.c b/test/kvx/instr/individual/negd.c
new file mode 100644
index 00000000..837b9828
--- /dev/null
+++ b/test/kvx/instr/individual/negd.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ c = -a;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/ord.c b/test/kvx/instr/individual/ord.c
new file mode 100644
index 00000000..cae1ae8b
--- /dev/null
+++ b/test/kvx/instr/individual/ord.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ c = a | b;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/sbfd.c b/test/kvx/instr/individual/sbfd.c
new file mode 100644
index 00000000..77c28c77
--- /dev/null
+++ b/test/kvx/instr/individual/sbfd.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ c = a-b;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/sbfw.c b/test/kvx/instr/individual/sbfw.c
new file mode 100644
index 00000000..e38a1fff
--- /dev/null
+++ b/test/kvx/instr/individual/sbfw.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ c = a-b;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/simple.c b/test/kvx/instr/individual/simple.c
new file mode 100644
index 00000000..944f09c9
--- /dev/null
+++ b/test/kvx/instr/individual/simple.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ c = a+b;
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/sllw.c b/test/kvx/instr/individual/sllw.c
new file mode 100644
index 00000000..6dd41a6c
--- /dev/null
+++ b/test/kvx/instr/individual/sllw.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+{
+ c = a << (b & 0x8);
+}
+END_TEST32()
diff --git a/test/kvx/instr/individual/srad.c b/test/kvx/instr/individual/srad.c
new file mode 100644
index 00000000..00be9d0c
--- /dev/null
+++ b/test/kvx/instr/individual/srad.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ c = a >> (b & 0x8LL);
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/srld.c b/test/kvx/instr/individual/srld.c
new file mode 100644
index 00000000..14970efd
--- /dev/null
+++ b/test/kvx/instr/individual/srld.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned long long)
+{
+ c = a >> (b & 0x8ULL);
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/tailcall.c b/test/kvx/instr/individual/tailcall.c
new file mode 100644
index 00000000..6c659a01
--- /dev/null
+++ b/test/kvx/instr/individual/tailcall.c
@@ -0,0 +1,16 @@
+#include "framework.h"
+
+int make(int a){
+ return a;
+}
+
+int sum(int a, int b){
+ return make(a+b);
+}
+
+BEGIN_TEST(int)
+{
+ c = sum(a, b);
+}
+END_TEST32()
+/* RETURN VALUE: 60 */
diff --git a/test/kvx/instr/individual/udivd.c b/test/kvx/instr/individual/udivd.c
new file mode 100644
index 00000000..cfb31881
--- /dev/null
+++ b/test/kvx/instr/individual/udivd.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned long long)
+{
+ c = a/b;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/umodd.c b/test/kvx/instr/individual/umodd.c
new file mode 100644
index 00000000..a7f25f1c
--- /dev/null
+++ b/test/kvx/instr/individual/umodd.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned long long)
+{
+ c = a%b;
+}
+END_TEST64()
diff --git a/test/kvx/instr/individual/xord.c b/test/kvx/instr/individual/xord.c
new file mode 100644
index 00000000..b6a90cb0
--- /dev/null
+++ b/test/kvx/instr/individual/xord.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(long long)
+{
+ c = a^b;
+}
+END_TEST64()
diff --git a/test/kvx/instr/modi32.c b/test/kvx/instr/modi32.c
new file mode 100644
index 00000000..958ae920
--- /dev/null
+++ b/test/kvx/instr/modi32.c
@@ -0,0 +1,5 @@
+#include "framework.h"
+
+BEGIN_TEST(int)
+ c = a%b;
+END_TEST32()
diff --git a/test/kvx/instr/modui32.c b/test/kvx/instr/modui32.c
new file mode 100644
index 00000000..a39034a8
--- /dev/null
+++ b/test/kvx/instr/modui32.c
@@ -0,0 +1,7 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned int)
+{
+ c = a%b;
+}
+END_TEST32()
diff --git a/test/kvx/instr/ui32.c b/test/kvx/instr/ui32.c
new file mode 100644
index 00000000..f56a9b95
--- /dev/null
+++ b/test/kvx/instr/ui32.c
@@ -0,0 +1,12 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned int)
+{
+ c = (long long) a;
+ c += (a >= b);
+ c += (a > b);
+ c += (a <= b);
+ c += (a < b);
+ c += ((a & 0x1U) != (b & 0x1U));
+}
+END_TEST32()
diff --git a/test/kvx/instr/ui64.c b/test/kvx/instr/ui64.c
new file mode 100644
index 00000000..908dec3c
--- /dev/null
+++ b/test/kvx/instr/ui64.c
@@ -0,0 +1,10 @@
+#include "framework.h"
+
+BEGIN_TEST(unsigned long long)
+{
+ c = (a > b);
+ c += (a <= b);
+ c += (a < b);
+ c += ((a & 0x1ULL) != (b & 0x1ULL));
+}
+END_TEST64()