aboutsummaryrefslogtreecommitdiffstats
path: root/test/mppa
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2019-01-17 13:45:42 +0100
committerCyril SIX <cyril.six@kalray.eu>2019-01-17 13:45:42 +0100
commit1848a8f4c08ef55a045d4dc1e78f517182a50442 (patch)
treebc1d3147c2db76b962c8fa3682ac5dd1e4e6cd3a /test/mppa
parent15c5ca037eabb9891f7880bc2d517982ba34e769 (diff)
parentfe3fc2fd3d5a312ac526c5596e851e315782d9f6 (diff)
downloadcompcert-kvx-1848a8f4c08ef55a045d4dc1e78f517182a50442.tar.gz
compcert-kvx-1848a8f4c08ef55a045d4dc1e78f517182a50442.zip
Merge branch 'mppa_k1c' into mppa_postpass
Diffstat (limited to 'test/mppa')
-rw-r--r--test/mppa/do_test.sh9
-rw-r--r--test/mppa/instr/Makefile56
-rw-r--r--test/mppa/instr/framework.h3
-rw-r--r--test/mppa/interop/Makefile42
-rw-r--r--test/mppa/interop/vaarg_common.c28
-rw-r--r--test/mppa/lib/Makefile133
-rw-r--r--test/mppa/lib/printf-test.c9
-rw-r--r--test/mppa/lib/printf.c9
8 files changed, 231 insertions, 58 deletions
diff --git a/test/mppa/do_test.sh b/test/mppa/do_test.sh
index bb626203..5cc23dee 100644
--- a/test/mppa/do_test.sh
+++ b/test/mppa/do_test.sh
@@ -38,4 +38,13 @@ cat << EOF
##
EOF
(cd interop && make $1 -j$2)
+
+cat << EOF
+
+##
+# printf wrapper test
+##
+(cd lib && make $1 -j$2)
+EOF
+
}
diff --git a/test/mppa/instr/Makefile b/test/mppa/instr/Makefile
index 9d1fbb5f..66e40365 100644
--- a/test/mppa/instr/Makefile
+++ b/test/mppa/instr/Makefile
@@ -1,15 +1,18 @@
K1CC ?= k1-mbr-gcc
CC ?= gcc
CCOMP ?= ccomp
-CFLAGS ?= -O2
+OPTIM ?= -O2
+CFLAGS ?= $(OPTIM) -Wl,--wrap=printf
SIMU ?= k1-mppa
-TIMEOUT ?= --signal=SIGTERM 60s
+TIMEOUT ?= --signal=SIGTERM 120s
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
@@ -21,7 +24,7 @@ CCPATH=$(shell which $(CC))
CCOMPPATH=$(shell which $(CCOMP))
SIMUPATH=$(shell which $(SIMU))
-TESTNAMES=$(notdir $(subst .c,,$(wildcard $(DIR)/*.c)))
+TESTNAMES?=$(notdir $(subst .c,,$(wildcard $(DIR)/*.c)))
X86_GCC_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .x86-gcc.out,$(TESTNAMES)))
GCC_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .gcc.out,$(TESTNAMES)))
CCOMP_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .ccomp.out,$(TESTNAMES)))
@@ -37,16 +40,20 @@ BIN=$(addprefix $(BINDIR)/,$(addsuffix .x86-gcc.bin,$(TESTNAMES)))\
all: $(BIN)
+GREEN=\033[0;32m
+RED=\033[0;31m
+NC=\033[0m
+
.PHONY:
test: $(X86_GCC_OUT) $(GCC_OUT)
@echo "Comparing x86 gcc output to k1 gcc.."
@for test in $(TESTNAMES); do\
x86out=$(OUTDIR)/$$test.x86-gcc.out;\
gccout=$(OUTDIR)/$$test.gcc.out;\
- if ! diff $$x86out $$gccout; then\
- >&2 echo "ERROR: $$x86out and $$gccout differ";\
+ if diff -q $$x86out $$gccout > /dev/null; test $${PIPESTATUS[0]} -ne 0; then\
+ >&2 printf "$(RED)ERROR: $$x86out and $$gccout differ$(NC)\n";\
else\
- echo "GOOD: $$x86out and $$gccout concur";\
+ printf "$(GREEN)GOOD: $$x86out and $$gccout concur$(NC)\n";\
fi;\
done
@@ -56,10 +63,10 @@ check: $(GCC_OUT) $(CCOMP_OUT)
@for test in $(TESTNAMES); do\
gccout=$(OUTDIR)/$$test.gcc.out;\
ccompout=$(OUTDIR)/$$test.ccomp.out;\
- if ! diff $$ccompout $$gccout; then\
- >&2 echo "ERROR: $$ccompout and $$gccout differ";\
+ if diff -q $$ccompout $$gccout > /dev/null; test $${PIPESTATUS[0]} -ne 0; then\
+ >&2 printf "$(RED)ERROR: $$ccompout and $$gccout differ$(NC)\n";\
else\
- echo "GOOD: $$ccompout and $$gccout concur";\
+ printf "$(GREEN)GOOD: $$ccompout and $$gccout concur$(NC)\n";\
fi;\
done
@@ -68,20 +75,13 @@ check: $(GCC_OUT) $(CCOMP_OUT)
##
.SECONDARY:
-# Generating output
+$(LIB):
+ (cd $(dir $(LIB)) && make)
-## Version sans les timeout
-#$(OUTDIR)/%.x86-gcc.out: $(BINDIR)/%.x86-gcc.bin
-# @mkdir -p $(@D)
-# ./$< > $@; echo $$? >> $@
-#
-#$(OUTDIR)/%.gcc.out: $(BINDIR)/%.gcc.bin $(SIMUPATH)
-# @mkdir -p $(@D)
-# $(SIMU) -- $< > $@ ; echo $$? >> $@
-#
-#$(OUTDIR)/%.ccomp.out: $(BINDIR)/%.ccomp.bin $(SIMUPATH)
-# @mkdir -p $(@D)
-# $(SIMU) -- $< > $@ ; echo $$? >> $@
+$(K1LIB):
+ (cd $(dir $(LIB)) && make)
+
+# Generating output
## Version avec timeout
$(OUTDIR)/%.x86-gcc.out: $(BINDIR)/%.x86-gcc.bin
@@ -98,17 +98,17 @@ $(OUTDIR)/%.ccomp.out: $(BINDIR)/%.ccomp.bin $(SIMUPATH)
# Assembly to binary
-$(BINDIR)/%.x86-gcc.bin: $(ASMDIR)/%.x86-gcc.s $(CCPATH)
+$(BINDIR)/%.x86-gcc.bin: $(ASMDIR)/%.x86-gcc.s $(LIB) $(CCPATH)
@mkdir -p $(@D)
- $(CC) $(CFLAGS) $< -o $@
+ $(CC) $(CFLAGS) $(filter-out $(CCPATH),$^) -o $@
-$(BINDIR)/%.gcc.bin: $(ASMDIR)/%.gcc.s $(K1CCPATH)
+$(BINDIR)/%.gcc.bin: $(ASMDIR)/%.gcc.s $(K1LIB) $(K1CCPATH)
@mkdir -p $(@D)
- $(K1CC) $(CFLAGS) $< -o $@
+ $(K1CC) $(CFLAGS) $(filter-out $(K1CCPATH),$^) -o $@
-$(BINDIR)/%.ccomp.bin: $(ASMDIR)/%.ccomp.s $(CCOMPPATH)
+$(BINDIR)/%.ccomp.bin: $(ASMDIR)/%.ccomp.s $(K1LIB) $(CCOMPPATH)
@mkdir -p $(@D)
- $(CCOMP) $(CFLAGS) $< -o $@
+ $(CCOMP) $(CFLAGS) $(filter-out $(CCOMPPATH),$^) -o $@
# Source to assembly
diff --git a/test/mppa/instr/framework.h b/test/mppa/instr/framework.h
index 52ba97bc..f43ec616 100644
--- a/test/mppa/instr/framework.h
+++ b/test/mppa/instr/framework.h
@@ -3,6 +3,8 @@
#include "../prng/prng.c"
+int printf(const char *, ...);
+
#define BEGIN_TEST_N(type, N)\
int main(void){\
type t[N], c, i, j, S;\
@@ -28,6 +30,7 @@
/* In between BEGIN_TEST and END_TEST : definition of c */
#define END_TEST()\
+ printf("%llu\n", c);\
S += c;\
}\
return S;\
diff --git a/test/mppa/interop/Makefile b/test/mppa/interop/Makefile
index 78271a4e..5818cbcb 100644
--- a/test/mppa/interop/Makefile
+++ b/test/mppa/interop/Makefile
@@ -3,7 +3,7 @@ CC ?= gcc
CCOMP ?= ccomp
CFLAGS ?= -O2 -Wno-varargs
SIMU ?= k1-mppa
-TIMEOUT ?= --signal=SIGTERM 80s
+TIMEOUT ?= --signal=SIGTERM 120s
DIR=./
SRCDIR=$(DIR)
@@ -57,6 +57,10 @@ BIN=$(addprefix $(BINDIR)/,$(addsuffix .x86-gcc.bin,$(TESTNAMES)))\
all: $(BIN)
+GREEN=\033[0;32m
+RED=\033[0;31m
+NC=\033[0m
+
.PHONY:
test: $(X86_GCC_OUT) $(GCC_OUT) $(VAARG_X86_GCC_OUT) $(VAARG_GCC_OUT)
@echo "Comparing x86 gcc output to k1 gcc.."
@@ -65,15 +69,15 @@ test: $(X86_GCC_OUT) $(GCC_OUT) $(VAARG_X86_GCC_OUT) $(VAARG_GCC_OUT)
gccout=$(OUTDIR)/$$test.gcc.out;\
vaarg_x86out=$(OUTDIR)/$$test.x86-gcc.vaarg.out;\
vaarg_gccout=$(OUTDIR)/$$test.gcc.vaarg.out;\
- if ! diff $$x86out $$gccout; then\
- >&2 echo "ERROR: $$x86out and $$gccout differ";\
+ if ! diff $$x86out $$gccout > /dev/null; then\
+ >&2 printf "$(RED)ERROR: $$x86out and $$gccout differ$(NC)\n";\
else\
- echo "GOOD: $$x86out and $$gccout concur";\
+ printf "$(GREEN)GOOD: $$x86out and $$gccout concur$(NC)\n";\
fi;\
- if ! diff $$vaarg_x86out $$vaarg_gccout; then\
- >&2 echo "ERROR: $$vaarg_x86out and $$vaarg_gccout differ";\
+ if ! diff $$vaarg_x86out $$vaarg_gccout > /dev/null; then\
+ >&2 printf "$(RED)ERROR: $$vaarg_x86out and $$vaarg_gccout differ$(NC)\n";\
else\
- echo "GOOD: $$vaarg_x86out and $$vaarg_gccout concur";\
+ printf "$(GREEN)GOOD: $$vaarg_x86out and $$vaarg_gccout concur$(NC)\n";\
fi;\
done
@@ -87,25 +91,25 @@ check: $(GCC_OUT) $(CCOMP_OUT) $(GCC_REV_OUT) $(VAARG_GCC_OUT) $(VAARG_CCOMP_OUT
vaarg_gccout=$(OUTDIR)/$$test.gcc.vaarg.out;\
vaarg_ccompout=$(OUTDIR)/$$test.ccomp.vaarg.out;\
vaarg_gccrevout=$(OUTDIR)/$$test.gcc.rev.vaarg.out;\
- if ! diff $$ccompout $$gccout; then\
- >&2 echo "ERROR: $$ccompout and $$gccout differ";\
+ if ! diff $$ccompout $$gccout > /dev/null; then\
+ >&2 printf "$(RED)ERROR: $$ccompout and $$gccout differ$(NC)\n";\
else\
- echo "GOOD: $$ccompout and $$gccout concur";\
+ printf "$(GREEN)GOOD: $$ccompout and $$gccout concur$(NC)\n";\
fi;\
- if ! diff $$gccrevout $$gccout; then\
- >&2 echo "ERROR: $$gccrevout and $$gccout differ";\
+ if ! diff $$gccrevout $$gccout > /dev/null; then\
+ >&2 printf "$(RED)ERROR: $$gccrevout and $$gccout differ$(NC)\n";\
else\
- echo "GOOD: $$gccrevout and $$gccout concur";\
+ printf "$(GREEN)GOOD: $$gccrevout and $$gccout concur$(NC)\n";\
fi;\
- if ! diff $$vaarg_ccompout $$vaarg_gccout; then\
- >&2 echo "ERROR: $$vaarg_ccompout and $$vaarg_gccout differ";\
+ if ! diff $$vaarg_ccompout $$vaarg_gccout > /dev/null; then\
+ >&2 printf "$(RED)ERROR: $$vaarg_ccompout and $$vaarg_gccout differ$(NC)\n";\
else\
- echo "GOOD: $$vaarg_ccompout and $$vaarg_gccout concur";\
+ printf "$(GREEN)GOOD: $$vaarg_ccompout and $$vaarg_gccout concur$(NC)\n";\
fi;\
- if ! diff $$vaarg_gccrevout $$vaarg_gccout; then\
- >&2 echo "ERROR: $$vaarg_gccrevout and $$vaarg_gccout differ";\
+ if ! diff $$vaarg_gccrevout $$vaarg_gccout > /dev/null; then\
+ >&2 printf "$(RED)ERROR: $$vaarg_gccrevout and $$vaarg_gccout differ$(NC)\n";\
else\
- echo "GOOD: $$vaarg_gccrevout and $$vaarg_gccout concur";\
+ printf "$(GREEN)GOOD: $$vaarg_gccrevout and $$vaarg_gccout concur$(NC)\n";\
fi;\
done
diff --git a/test/mppa/interop/vaarg_common.c b/test/mppa/interop/vaarg_common.c
index a04b67bf..9033893b 100644
--- a/test/mppa/interop/vaarg_common.c
+++ b/test/mppa/interop/vaarg_common.c
@@ -14,7 +14,7 @@
a10 + a11 - a12 ^ a13 + a14 - a15 + a16 ^ a17 + a18 + a19 +\
a20 + a21 + a22 * a23 + a24 + a25 << a26 & a27 + a28 + a29)
-#define VA_START(vl, n) va_list vl; va_start(vl, n)
+#define VA_START(vl, arg) va_list vl; va_start(vl, arg)
#define VA_END(vl) va_end(vl)
void void_void(void){
@@ -29,7 +29,7 @@ long long ll_void(void){
// int i_oneiarg(int arg){
int i_oneiarg(int arg, ...){
STACK;
- VA_START(vl, 0);
+ VA_START(vl, arg);
VA_END(vl);
return ONEARG_OP(arg);
}
@@ -37,7 +37,7 @@ int i_oneiarg(int arg, ...){
//int i_multiiargs(int arg1, char arg2, char arg3, int arg4){
int i_multiiargs(int arg1, ...){
STACK;
- VA_START(vl, 3);
+ VA_START(vl, arg1);
char arg2 = va_arg(vl, int);
char arg3 = va_arg(vl, int);
int arg4 = va_arg(vl, int);
@@ -51,19 +51,23 @@ int i_multiiargs(int arg1, ...){
int i_manyiargs(char a0, ...)
{
STACK;
- VA_START(vl, 29);
+ VA_START(vl, a0);
+ VA_START(vl2, a0);
int a1 = va_arg(vl, int);
char a2 = va_arg(vl, int);
int a3 = va_arg(vl, int);
char a4 = va_arg(vl, int);
char a5 = va_arg(vl, int);
+ char b1 = va_arg(vl2, int);
int a6 = va_arg(vl, int);
int a7 = va_arg(vl, int);
char a8 = va_arg(vl, int);
+ char b2 = va_arg(vl2, int);
int a9 = va_arg(vl, int);
char a10 = va_arg(vl, int);
int a11 = va_arg(vl, int);
char a12 = va_arg(vl, int);
+ char b3 = va_arg(vl2, int);
int a13 = va_arg(vl, int);
char a14 = va_arg(vl, int);
char a15 = va_arg(vl, int);
@@ -78,19 +82,21 @@ int i_manyiargs(char a0, ...)
char a24 = va_arg(vl, int);
char a25 = va_arg(vl, int);
int a26 = va_arg(vl, int);
+ char b4 = va_arg(vl2, int);
int a27 = va_arg(vl, int);
char a28 = va_arg(vl, int);
int a29 = va_arg(vl, int);
VA_END(vl);
- return MANYARG_OP(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9,
- a10, a11, a12, a13, a14, a15, a16, a17, a18, a19,
- a20, a21, a22, a23, a24, a25, a26, a27, a28, a29);
+ VA_END(vl);
+ return MANYARG_OP(a0, a1, a2, a3, a4, (a5*b2), a6, a7, a8, a9,
+ (a10*b3), a11, a12, a13, a14, a15, a16, a17, a18, a19,
+ a20, (a21*b1), a22, a23, (a24*b3), a25, a26, a27, a28, a29);
}
//int ll_onellarg(long long arg){
int ll_onellarg(long long arg, ...){
STACK;
- VA_START(vl, 0);
+ VA_START(vl, arg);
VA_END(vl);
return ONEARG_OP(arg);
}
@@ -98,7 +104,7 @@ int ll_onellarg(long long arg, ...){
//long long ll_multillargs(long long arg1, char arg2, char arg3, long long arg4){
long long ll_multillargs(long long arg1, ...){
STACK;
- VA_START(vl, 3);
+ VA_START(vl, arg1);
char arg2 = va_arg(vl, int);
char arg3 = va_arg(vl, int);
long long arg4 = va_arg(vl, long long);
@@ -112,7 +118,7 @@ long long ll_multillargs(long long arg1, ...){
long long ll_manyllargs(char a0, ...)
{
STACK;
- VA_START(vl, 29);
+ VA_START(vl, a0);
int a1 = va_arg(vl, int);
char a2 = va_arg(vl, int);
long long a3 = va_arg(vl, long long);
@@ -153,7 +159,7 @@ long long ll_manyllargs(char a0, ...)
// char a20, int a21, char a22, long long a23, char a24, char a25, long long a26, int a27, char a28, long long a29)
long long stackhell(char a0, ...)
{
- VA_START(vl, 29);
+ VA_START(vl, a0);
int a1 = va_arg(vl, int);
char a2 = va_arg(vl, int);
long long a3 = va_arg(vl, long long);
diff --git a/test/mppa/lib/Makefile b/test/mppa/lib/Makefile
new file mode 100644
index 00000000..affc1afd
--- /dev/null
+++ b/test/mppa/lib/Makefile
@@ -0,0 +1,133 @@
+K1CC ?= k1-mbr-gcc
+K1AR ?= k1-mbr-ar
+CC ?= gcc
+AR ?= gcc-ar
+CCOMP ?= ccomp
+CFLAGS ?= -O1 -Wl,--wrap=printf
+SIMU ?= k1-mppa
+TIMEOUT ?= --signal=SIGTERM 60s
+
+DIR=./
+SRCDIR=$(DIR)
+OUTDIR=$(DIR)/out
+BINDIR=$(DIR)/bin
+ASMDIR=$(DIR)/asm
+OBJDIR=$(DIR)/obj
+
+K1CCPATH=$(shell which $(K1CC))
+K1ARPATH=$(shell which $(K1AR))
+CCPATH=$(shell which $(CC))
+ARPATH=$(shell which $(AR))
+SIMUPATH=$(shell which $(SIMU))
+
+TESTNAMES=printf-test
+X86_GCC_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .x86-gcc.out,$(TESTNAMES)))
+GCC_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .gcc.out,$(TESTNAMES)))
+CCOMP_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .ccomp.out,$(TESTNAMES)))
+
+OUT=$(X86_GCC_OUT) $(GCC_OUT) $(CCOMP_OUT)
+BIN=$(addprefix $(BINDIR)/,$(addsuffix .x86-gcc.bin,$(TESTNAMES)))\
+ $(addprefix $(BINDIR)/,$(addsuffix .gcc.bin,$(TESTNAMES)))\
+ $(addprefix $(BINDIR)/,$(addsuffix .ccomp.bin,$(TESTNAMES)))
+
+##
+# Targets
+##
+
+all: $(BIN) system.x86-gcc.a system.gcc.a
+
+.PHONY:
+test: $(X86_GCC_OUT) $(GCC_OUT)
+ @echo "Comparing x86 gcc output to k1 gcc.."
+ @for test in $(TESTNAMES); do\
+ x86out=$(OUTDIR)/$$test.x86-gcc.out;\
+ gccout=$(OUTDIR)/$$test.gcc.out;\
+ if ! diff $$x86out $$gccout; then\
+ >&2 echo "ERROR: $$x86out and $$gccout differ";\
+ else\
+ echo "GOOD: $$x86out and $$gccout concur";\
+ fi;\
+ done
+
+.PHONY:
+check: $(GCC_OUT) $(CCOMP_OUT)
+ @echo "Comparing k1 gcc output to ccomp.."
+ @for test in $(TESTNAMES); do\
+ gccout=$(OUTDIR)/$$test.gcc.out;\
+ ccompout=$(OUTDIR)/$$test.ccomp.out;\
+ if ! diff $$ccompout $$gccout; then\
+ >&2 echo "ERROR: $$ccompout and $$gccout differ";\
+ else\
+ echo "GOOD: $$ccompout and $$gccout concur";\
+ fi;\
+ done
+
+##
+# Rules
+##
+
+.SECONDARY:
+
+# 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.out: $(BINDIR)/%.gcc.bin $(SIMUPATH)
+ @mkdir -p $(@D)
+ ret=0; timeout $(TIMEOUT) $(SIMU) -- $< > $@ || { ret=$$?; }; echo $$ret >> $@
+
+$(OUTDIR)/%.ccomp.out: $(BINDIR)/%.ccomp.bin $(SIMUPATH)
+ @mkdir -p $(@D)
+ ret=0; timeout $(TIMEOUT) $(SIMU) -- $< > $@ || { ret=$$?; }; echo $$ret >> $@
+
+# Object to binary
+
+$(BINDIR)/%.x86-gcc.bin: $(OBJDIR)/%.x86-gcc.o system.x86-gcc.a $(CCPATH)
+ @mkdir -p $(@D)
+ $(CC) $(CFLAGS) $(filter-out $(CCPATH),$^) -o $@
+
+$(BINDIR)/%.gcc.bin: $(OBJDIR)/%.gcc.o system.gcc.a $(K1CCPATH)
+ @mkdir -p $(@D)
+ $(K1CC) $(CFLAGS) $(filter-out $(K1CCPATH),$^) -o $@
+
+$(BINDIR)/%.ccomp.bin: $(OBJDIR)/%.ccomp.o system.gcc.a $(CCOMPPATH)
+ @mkdir -p $(@D)
+ $(CCOMP) $(CFLAGS) $(filter-out $(CCOMPPATH),$^) -o $@
+
+# Generating libraries
+system.x86-gcc.a: $(OBJDIR)/printf.x86-gcc.o $(ARPATH)
+ $(AR) rcs $@ $<
+
+system.gcc.a: $(OBJDIR)/printf.gcc.o $(K1ARPATH)
+ $(K1AR) rcs $@ $<
+
+# Assembly to object
+
+$(OBJDIR)/%.x86-gcc.o: $(ASMDIR)/%.x86-gcc.s $(CCPATH)
+ @mkdir -p $(@D)
+ $(CC) $(CFLAGS) -c $< -o $@
+
+$(OBJDIR)/%.gcc.o: $(ASMDIR)/%.gcc.s $(K1CCPATH)
+ @mkdir -p $(@D)
+ $(K1CC) $(CFLAGS) -c $< -o $@
+
+$(OBJDIR)/%.ccomp.o: $(ASMDIR)/%.ccomp.s $(CCOMPPATH)
+ $(CCOMP) $(CFLAGS) -c $< -o $@
+
+# Source to assembly
+
+$(ASMDIR)/%.x86-gcc.s: $(SRCDIR)/%.c $(CCPATH)
+ @mkdir -p $(@D)
+ $(CC) $(CFLAGS) -S $< -o $@
+
+$(ASMDIR)/%.gcc.s: $(SRCDIR)/%.c $(K1CCPATH)
+ @mkdir -p $(@D)
+ $(K1CC) $(CFLAGS) -S $< -o $@
+
+$(ASMDIR)/%.ccomp.s: $(SRCDIR)/%.c $(CCOMPPATH)
+ @mkdir -p $(@D)
+ $(CCOMP) $(CFLAGS) -S $< -o $@
+
diff --git a/test/mppa/lib/printf-test.c b/test/mppa/lib/printf-test.c
new file mode 100644
index 00000000..25afd436
--- /dev/null
+++ b/test/mppa/lib/printf-test.c
@@ -0,0 +1,9 @@
+int printf(const char *, ...);
+
+int main(void){
+ int a = 42;
+ char *str = "Hi there";
+ printf("%s, I am %u\n", str, a);
+
+ return 0;
+}
diff --git a/test/mppa/lib/printf.c b/test/mppa/lib/printf.c
new file mode 100644
index 00000000..79984ef6
--- /dev/null
+++ b/test/mppa/lib/printf.c
@@ -0,0 +1,9 @@
+#include <stdio.h>
+#include <stdarg.h>
+
+int __wrap_printf(const char *format, ...){
+ va_list args;
+ va_start(args, format);
+ vprintf(format, args);
+ va_end(args);
+}