aboutsummaryrefslogtreecommitdiffstats
path: root/test/mppa
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2018-11-28 17:31:46 +0100
committerCyril SIX <cyril.six@kalray.eu>2018-11-28 17:31:46 +0100
commit30e8e1618e59bdb585b1fb36cddce41eefe12364 (patch)
treed6fb12d6e86601ae9cee017f66e782e04be7f7b2 /test/mppa
parent0ea925ecc01d3da88c1c2b8cb03b318af2720a92 (diff)
downloadcompcert-kvx-30e8e1618e59bdb585b1fb36cddce41eefe12364.tar.gz
compcert-kvx-30e8e1618e59bdb585b1fb36cddce41eefe12364.zip
Wrote some tests on va_arg, need to implement __compcert_va_int32 & cie
Diffstat (limited to 'test/mppa')
-rw-r--r--test/mppa/interop/Makefile101
-rw-r--r--test/mppa/interop/vaarg_common.c373
2 files changed, 467 insertions, 7 deletions
diff --git a/test/mppa/interop/Makefile b/test/mppa/interop/Makefile
index 5800ce9d..f4dc259e 100644
--- a/test/mppa/interop/Makefile
+++ b/test/mppa/interop/Makefile
@@ -1,7 +1,7 @@
K1CC ?= k1-mbr-gcc
CC ?= gcc
CCOMP ?= ccomp
-CFLAGS ?= -O2
+CFLAGS ?= -O2 -Wno-varargs
SIMU ?= k1-mppa
TIMEOUT ?= --signal=SIGTERM 40s
@@ -12,6 +12,7 @@ BINDIR=$(DIR)/bin
ASMDIR=$(DIR)/asm
OBJDIR=$(DIR)/obj
COMMON=common
+VAARG_COMMON=vaarg_common
##
# Intended flow : .c -> .gcc.s -> .gcc.o -> .gcc.bin -> .gcc.out
@@ -19,6 +20,7 @@ COMMON=common
# -> .x86-gcc.s -> .x86-gcc.o -> .x86-gcc.bin -> .x86-gcc.out
#
# The .o -> .bin part uses $(COMMON).gcc.o or $(COMMON).x86-gcc.o depending on the architecture
+# There is also a $(VAARG_COMMON) that is the same than $(COMMON) but with va_arg
##
K1CCPATH=$(shell which $(K1CC))
@@ -26,17 +28,28 @@ CCPATH=$(shell which $(CC))
CCOMPPATH=$(shell which $(CCOMP))
SIMUPATH=$(shell which $(SIMU))
-TESTNAMES=$(filter-out $(COMMON),$(notdir $(subst .c,,$(wildcard $(DIR)/*.c))))
+TESTNAMES=$(filter-out $(VAARG_COMMON),$(filter-out $(COMMON),$(notdir $(subst .c,,$(wildcard $(DIR)/*.c)))))
+
X86_GCC_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .x86-gcc.out,$(TESTNAMES)))
GCC_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .gcc.out,$(TESTNAMES)))
GCC_REV_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .gcc.rev.out,$(TESTNAMES)))
CCOMP_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .ccomp.out,$(TESTNAMES)))
-OUT=$(X86_GCC_OUT) $(GCC_OUT) $(CCOMP_OUT) $(GCC_REV_OUT)
+VAARG_X86_GCC_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .x86-gcc.vaarg.out,$(TESTNAMES)))
+VAARG_GCC_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .gcc.vaarg.out,$(TESTNAMES)))
+VAARG_GCC_REV_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .gcc.rev.vaarg.out,$(TESTNAMES)))
+VAARG_CCOMP_OUT=$(addprefix $(OUTDIR)/,$(addsuffix .ccomp.vaarg.out,$(TESTNAMES)))
+
+OUT=$(X86_GCC_OUT) $(GCC_OUT) $(CCOMP_OUT) $(GCC_REV_OUT)\
+ $(VAARG_GCC_OUT) $(VAARG_GCC_OUT) $(VAARG_CCOMP_OUT) $(VAARG_GCC_REV_OUT)
BIN=$(addprefix $(BINDIR)/,$(addsuffix .x86-gcc.bin,$(TESTNAMES)))\
$(addprefix $(BINDIR)/,$(addsuffix .gcc.bin,$(TESTNAMES)))\
$(addprefix $(BINDIR)/,$(addsuffix .ccomp.bin,$(TESTNAMES)))\
- $(addprefix $(BINDIR)/,$(addsuffix .gcc.rev.bin,$(TESTNAMES)))
+ $(addprefix $(BINDIR)/,$(addsuffix .gcc.rev.bin,$(TESTNAMES)))\
+ $(addprefix $(BINDIR)/,$(addsuffix .x86-gcc.vaarg.bin,$(TESTNAMES)))\
+ $(addprefix $(BINDIR)/,$(addsuffix .gcc.vaarg.bin,$(TESTNAMES)))\
+ $(addprefix $(BINDIR)/,$(addsuffix .ccomp.vaarg.bin,$(TESTNAMES)))\
+ $(addprefix $(BINDIR)/,$(addsuffix .gcc.rev.vaarg.bin,$(TESTNAMES)))
##
# Targets
@@ -45,25 +58,35 @@ BIN=$(addprefix $(BINDIR)/,$(addsuffix .x86-gcc.bin,$(TESTNAMES)))\
all: $(BIN)
.PHONY:
-test: $(X86_GCC_OUT) $(GCC_OUT)
+test: $(X86_GCC_OUT) $(GCC_OUT) $(VAARG_X86_GCC_OUT) $(VAARG_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;\
+ 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";\
else\
echo "GOOD: $$x86out and $$gccout concur";\
fi;\
+ if ! diff $$vaarg_x86out $$vaarg_gccout; then\
+ >&2 echo "ERROR: $$vaarg_x86out and $$vaarg_gccout differ";\
+ else\
+ echo "GOOD: $$vaarg_x86out and $$vaarg_gccout concur";\
+ fi;\
done
.PHONY:
-check: $(GCC_OUT) $(CCOMP_OUT) $(GCC_REV_OUT)
+check: $(GCC_OUT) $(CCOMP_OUT) $(GCC_REV_OUT) $(VAARG_GCC_OUT) $(VAARG_CCOMP_OUT) $(VAARG_GCC_REV_OUT)
@echo "Comparing k1 gcc output to ccomp.."
@for test in $(TESTNAMES); do\
gccout=$(OUTDIR)/$$test.gcc.out;\
ccompout=$(OUTDIR)/$$test.ccomp.out;\
gccrevout=$(OUTDIR)/$$test.gcc.rev.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";\
else\
@@ -74,6 +97,16 @@ check: $(GCC_OUT) $(CCOMP_OUT) $(GCC_REV_OUT)
else\
echo "GOOD: $$gccrevout and $$gccout concur";\
fi;\
+ if ! diff $$vaarg_ccompout $$vaarg_gccout; then\
+ >&2 echo "ERROR: $$vaarg_ccompout and $$vaarg_gccout differ";\
+ else\
+ echo "GOOD: $$vaarg_ccompout and $$vaarg_gccout concur";\
+ fi;\
+ if ! diff $$vaarg_gccrevout $$vaarg_gccout; then\
+ >&2 echo "ERROR: $$vaarg_gccrevout and $$vaarg_gccout differ";\
+ else\
+ echo "GOOD: $$vaarg_gccrevout and $$vaarg_gccout concur";\
+ fi;\
done
##
@@ -99,7 +132,8 @@ check: $(GCC_OUT) $(CCOMP_OUT) $(GCC_REV_OUT)
# @mkdir -p $(@D)
# $(SIMU) -- $< > $@ ; echo $$? >> $@
-## Version avec timeout
+## No vaarg
+
$(OUTDIR)/%.x86-gcc.out: $(BINDIR)/%.x86-gcc.bin
@mkdir -p $(@D)
ret=0; timeout $(TIMEOUT) ./$< > $@ || { ret=$$?; }; echo $$ret >> $@
@@ -116,10 +150,30 @@ $(OUTDIR)/%.ccomp.out: $(BINDIR)/%.ccomp.bin $(SIMUPATH)
@mkdir -p $(@D)
ret=0; timeout $(TIMEOUT) $(SIMU) -- $< > $@ || { ret=$$?; }; echo $$ret >> $@
+## With vaarg
+
+$(OUTDIR)/%.x86-gcc.vaarg.out: $(BINDIR)/%.x86-gcc.vaarg.bin
+ @mkdir -p $(@D)
+ ret=0; timeout $(TIMEOUT) ./$< > $@ || { ret=$$?; }; echo $$ret >> $@
+
+$(OUTDIR)/%.gcc.vaarg.out: $(BINDIR)/%.gcc.vaarg.bin $(SIMUPATH)
+ @mkdir -p $(@D)
+ ret=0; timeout $(TIMEOUT) $(SIMU) -- $< > $@ || { ret=$$?; }; echo $$ret >> $@
+
+$(OUTDIR)/%.gcc.rev.vaarg.out: $(BINDIR)/%.gcc.rev.vaarg.bin $(SIMUPATH)
+ @mkdir -p $(@D)
+ ret=0; timeout $(TIMEOUT) $(SIMU) -- $< > $@ || { ret=$$?; }; echo $$ret >> $@
+
+$(OUTDIR)/%.ccomp.vaarg.out: $(BINDIR)/%.ccomp.vaarg.bin $(SIMUPATH)
+ @mkdir -p $(@D)
+ ret=0; timeout $(TIMEOUT) $(SIMU) -- $< > $@ || { ret=$$?; }; echo $$ret >> $@
+
##
# Object to binary
##
+## common
+
$(BINDIR)/$(COMMON).x86-gcc.bin: $(OBJDIR)/$(COMMON).x86-gcc.o $(CCPATH)
@mkdir -p $(@D)
$(CC) $(CFLAGS) $< -o $@
@@ -132,6 +186,22 @@ $(BINDIR)/$(COMMON).ccomp.bin: $(OBJDIR)/$(COMMON).ccomp.o $(CCOMPPATH)
@mkdir -p $(@D)
$(CCOMP) $(CFLAGS) $< -o $@
+## vaarg_common
+
+$(BINDIR)/$(VAARG_COMMON).x86-gcc.bin: $(OBJDIR)/$(VAARG_COMMON).x86-gcc.o $(CCPATH)
+ @mkdir -p $(@D)
+ $(CC) $(CFLAGS) $< -o $@
+
+$(BINDIR)/$(VAARG_COMMON).gcc.bin: $(OBJDIR)/$(VAARG_COMMON).gcc.o $(K1CCPATH)
+ @mkdir -p $(@D)
+ $(K1CC) $(CFLAGS) $< -o $@
+
+$(BINDIR)/$(VAARG_COMMON).ccomp.bin: $(OBJDIR)/$(VAARG_COMMON).ccomp.o $(CCOMPPATH)
+ @mkdir -p $(@D)
+ $(CCOMP) $(CFLAGS) $< -o $@
+
+## no vaarg
+
$(BINDIR)/%.x86-gcc.bin: $(OBJDIR)/%.x86-gcc.o $(OBJDIR)/$(COMMON).x86-gcc.o $(CCPATH)
@mkdir -p $(@D)
$(CC) $(CFLAGS) $(wordlist 1,2,$^) -o $@
@@ -148,6 +218,23 @@ $(BINDIR)/%.ccomp.bin: $(OBJDIR)/%.ccomp.o $(OBJDIR)/$(COMMON).gcc.o $(CCOMPPATH
@mkdir -p $(@D)
$(CCOMP) $(CFLAGS) $(wordlist 1,2,$^) -o $@
+## with vaarg
+
+$(BINDIR)/%.x86-gcc.vaarg.bin: $(OBJDIR)/%.x86-gcc.o $(OBJDIR)/$(VAARG_COMMON).x86-gcc.o $(CCPATH)
+ @mkdir -p $(@D)
+ $(CC) $(CFLAGS) $(wordlist 1,2,$^) -o $@
+
+$(BINDIR)/%.gcc.vaarg.bin: $(OBJDIR)/%.gcc.o $(OBJDIR)/$(VAARG_COMMON).gcc.o $(K1CCPATH)
+ @mkdir -p $(@D)
+ $(K1CC) $(CFLAGS) $(wordlist 1,2,$^) -o $@
+
+$(BINDIR)/%.gcc.rev.vaarg.bin: $(OBJDIR)/%.gcc.o $(OBJDIR)/$(VAARG_COMMON).ccomp.o $(K1CCPATH)
+ @mkdir -p $(@D)
+ $(K1CC) $(CFLAGS) $(wordlist 1,2,$^) -o $@
+
+$(BINDIR)/%.ccomp.vaarg.bin: $(OBJDIR)/%.ccomp.o $(OBJDIR)/$(VAARG_COMMON).gcc.o $(CCOMPPATH)
+ @mkdir -p $(@D)
+ $(CCOMP) $(CFLAGS) $(wordlist 1,2,$^) -o $@
##
# Assembly to object
diff --git a/test/mppa/interop/vaarg_common.c b/test/mppa/interop/vaarg_common.c
new file mode 100644
index 00000000..a04b67bf
--- /dev/null
+++ b/test/mppa/interop/vaarg_common.c
@@ -0,0 +1,373 @@
+#include <stdarg.h>
+
+#define STACK int a[100];\
+ a[42] = 42;
+
+#define ONEARG_OP(arg) (3*arg+2)
+
+#define MULTIARG_OP(arg1, arg2, arg3, arg4) (arg1 ^ arg2 << arg3 - arg4)
+
+#define 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)\
+ (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)
+
+#define VA_START(vl, n) va_list vl; va_start(vl, n)
+#define VA_END(vl) va_end(vl)
+
+void void_void(void){
+ STACK;
+}
+
+long long ll_void(void){
+ STACK;
+ return 0xdeadbeefdeadbeefULL;
+}
+
+// int i_oneiarg(int arg){
+int i_oneiarg(int arg, ...){
+ STACK;
+ VA_START(vl, 0);
+ VA_END(vl);
+ return ONEARG_OP(arg);
+}
+
+//int i_multiiargs(int arg1, char arg2, char arg3, int arg4){
+int i_multiiargs(int arg1, ...){
+ STACK;
+ VA_START(vl, 3);
+ char arg2 = va_arg(vl, int);
+ char arg3 = va_arg(vl, int);
+ int arg4 = va_arg(vl, int);
+ VA_END(vl);
+ return MULTIARG_OP(arg1, arg2, arg3, arg4);
+}
+
+//int i_manyiargs(char a0, int a1, char a2, int a3, char a4, char a5, int a6, int a7, char a8, int a9,
+// char a10, int a11, char a12, int a13, char a14, char a15, int a16, int a17, char a18, int a19,
+// char a20, int a21, char a22, int a23, char a24, char a25, int a26, int a27, char a28, int a29)
+int i_manyiargs(char a0, ...)
+{
+ STACK;
+ VA_START(vl, 29);
+ 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);
+ int a6 = va_arg(vl, int);
+ int a7 = va_arg(vl, int);
+ char a8 = va_arg(vl, 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);
+ int a13 = va_arg(vl, int);
+ char a14 = va_arg(vl, int);
+ char a15 = va_arg(vl, int);
+ int a16 = va_arg(vl, int);
+ int a17 = va_arg(vl, int);
+ char a18 = va_arg(vl, int);
+ int a19 = va_arg(vl, int);
+ char a20 = va_arg(vl, int);
+ int a21 = va_arg(vl, int);
+ char a22 = va_arg(vl, int);
+ int a23 = va_arg(vl, int);
+ char a24 = va_arg(vl, int);
+ char a25 = va_arg(vl, int);
+ int a26 = va_arg(vl, 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);
+}
+
+//int ll_onellarg(long long arg){
+int ll_onellarg(long long arg, ...){
+ STACK;
+ VA_START(vl, 0);
+ VA_END(vl);
+ return ONEARG_OP(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);
+ char arg2 = va_arg(vl, int);
+ char arg3 = va_arg(vl, int);
+ long long arg4 = va_arg(vl, long long);
+ VA_END(vl);
+ return MULTIARG_OP(arg1, arg2, arg3, arg4);
+}
+
+//long long ll_manyllargs(char a0, int a1, char a2, long long a3, char a4, char a5, long long a6, long long a7, char a8, long long a9,
+// char a10, long long a11, char a12, int a13, char a14, char a15, long long a16, long long a17, char a18, long long a19,
+// 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 ll_manyllargs(char a0, ...)
+{
+ STACK;
+ VA_START(vl, 29);
+ int a1 = va_arg(vl, int);
+ char a2 = va_arg(vl, int);
+ long long a3 = va_arg(vl, long long);
+ char a4 = va_arg(vl, int);
+ char a5 = va_arg(vl, int);
+ long long a6 = va_arg(vl, long long);
+ long long a7 = va_arg(vl, long long);
+ char a8 = va_arg(vl, int);
+ long long a9 = va_arg(vl, long long);
+ char a10 = va_arg(vl, int);
+ long long a11 = va_arg(vl, long long);
+ char a12 = va_arg(vl, int);
+ int a13 = va_arg(vl, int);
+ char a14 = va_arg(vl, int);
+ char a15 = va_arg(vl, int);
+ long long a16 = va_arg(vl, long long);
+ long long a17 = va_arg(vl, long long);
+ char a18 = va_arg(vl, int);
+ long long a19 = va_arg(vl, long long);
+ char a20 = va_arg(vl, int);
+ int a21 = va_arg(vl, int);
+ char a22 = va_arg(vl, int);
+ long long a23 = va_arg(vl, long long);
+ char a24 = va_arg(vl, int);
+ char a25 = va_arg(vl, int);
+ long long a26 = va_arg(vl, long long);
+ int a27 = va_arg(vl, int);
+ char a28 = va_arg(vl, int);
+ long long a29 = va_arg(vl, long long);
+ 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);
+}
+
+//long long stackhell(char a0, int a1, char a2, long long a3, char a4, char a5, long long a6, long long a7, char a8, long long a9,
+// char a10, long long a11, char a12, int a13, char a14, char a15, long long a16, long long a17, char a18, long long a19,
+// 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);
+ int a1 = va_arg(vl, int);
+ char a2 = va_arg(vl, int);
+ long long a3 = va_arg(vl, long long);
+ char a4 = va_arg(vl, int);
+ char a5 = va_arg(vl, int);
+ long long a6 = va_arg(vl, long long);
+ long long a7 = va_arg(vl, long long);
+ char a8 = va_arg(vl, int);
+ long long a9 = va_arg(vl, long long);
+ char a10 = va_arg(vl, int);
+ long long a11 = va_arg(vl, long long);
+ char a12 = va_arg(vl, int);
+ int a13 = va_arg(vl, int);
+ char a14 = va_arg(vl, int);
+ char a15 = va_arg(vl, int);
+ long long a16 = va_arg(vl, long long);
+ long long a17 = va_arg(vl, long long);
+ char a18 = va_arg(vl, int);
+ long long a19 = va_arg(vl, long long);
+ char a20 = va_arg(vl, int);
+ int a21 = va_arg(vl, int);
+ char a22 = va_arg(vl, int);
+ long long a23 = va_arg(vl, long long);
+ char a24 = va_arg(vl, int);
+ char a25 = va_arg(vl, int);
+ long long a26 = va_arg(vl, long long);
+ int a27 = va_arg(vl, int);
+ char a28 = va_arg(vl, int);
+ long long a29 = va_arg(vl, long long);
+ VA_END(vl);
+
+ long long b0 = a0;
+ long long b1 = a1 + b0;
+ long long b2 = a2 + b1;
+ int b3 = a3 + b2;
+ int b4 = a4 + b3;
+ int b5 = a5 + b4;
+ int b6 = a6 + b5;
+ int b7 = a7 + b6;
+ char b8 = a8 + b7;
+ char b9 = a9 + b8;
+ char b10 = a10 + b9;
+ char b11 = a11 + b10;
+ char b12 = a12 + b11;
+ int b13 = a13 + b12;
+ long long b14 = a14 + b13;
+ long long b15 = a15 + b14;
+ long long b16 = a16 + b15;
+ long long b17 = a17 + b16;
+ long long b18 = a18 + b17;
+ long long b19 = a19 + b18;
+ long long b20 = a20 + b19;
+ long long b21 = a21 + b20;
+ long long b22 = a22 + b21;
+ long long b23 = a23 + b22;
+ long long b24 = a24 + b23;
+ long long b25 = a25 + b24;
+ long long b26 = a26 + b25;
+ long long b27 = a27 + b26;
+ int b28 = a28 + b27;
+ int b29 = a29 + b28;
+ int b30 = b0 + b29;
+ int b31 = b1 + b30;
+ int b32 = b2 + b31;
+ char b33 = b3 + b32;
+ char b34 = b4 + b33;
+ char b35 = b5 + b34;
+ char b36 = b6 + b35;
+ char b37 = b7 + b36;
+ int b38 = b8 + b37;
+ int b39 = b9 + b38;
+ int b40 = b0 + b39;
+ int b41 = b1 + b40;
+ int b42 = b2 + b41;
+ int b43 = b3 + b42;
+ int b44 = b4 + b43;
+ int b45 = b5 + b44;
+ int b46 = b6 + b45;
+ int b47 = b7 + b46;
+ int b48 = b8 + b47;
+ long long b49 = b9 + b48;
+ long long b50 = b0 + b49;
+ long long b51 = b1 + b50;
+ long long b52 = b2 + b51;
+ long long b53 = b3 + b52;
+ long long b54 = b4 + b53;
+ long long b55 = b5 + b54;
+ long long b56 = b6 + b55;
+ long long b57 = b7 + b56;
+ int b58 = b8 + b57;
+ int b59 = b9 + b58;
+ int b60 = b0 + b59;
+ int b61 = b1 + b60;
+ int b62 = b2 + b61;
+ int b63 = b3 + b62;
+ int b64 = b4 + b63;
+ int b65 = b5 + b64;
+ int b66 = b6 + b65;
+ int b67 = b7 + b66;
+ int b68 = b8 + b67;
+ int b69 = b9 + b68;
+ char b70 = b0 + b69;
+ char b71 = b1 + b70;
+ char b72 = b2 + b71;
+ char b73 = b3 + b72;
+ char b74 = b4 + b73;
+ char b75 = b5 + b74;
+ char b76 = b6 + b75;
+ char b77 = b7 + b76;
+ char b78 = b8 + b77;
+ char b79 = b9 + b78;
+ char b80 = b0 + b79;
+ char b81 = b1 + b80;
+ char b82 = b2 + b81;
+ char b83 = b3 + b82;
+ char b84 = b4 + b83;
+ int b85 = b5 + b84;
+ int b86 = b6 + b85;
+ int b87 = b7 + b86;
+ int b88 = b8 + b87;
+ int b89 = b9 + b88;
+ int b90 = b0 + b89;
+ int b91 = b1 + b90;
+ int b92 = b2 + b91;
+ int b93 = b3 + b92;
+ int b94 = b4 + b93;
+ long long b95 = b5 + b94;
+ long long b96 = b6 + b95;
+ long long b97 = b7 + b96;
+ long long b98 = b8 + b97;
+ long long b99 = b9 + b98;
+ long long b100 = b0 + b99;
+ long long b101 = b1 + b100;
+ long long b102 = b2 + b101;
+ long long b103 = b3 + b102;
+ long long b104 = b4 + b103;
+ long long b105 = b5 + b104;
+ long long b106 = b6 + b105;
+ long long b107 = b7 + b106;
+ long long b108 = b8 + b107;
+ long long b109 = b9 + b108;
+ long long b110 = b0 + b109;
+ long long b111 = b1 + b110;
+ long long b112 = b2 + b111;
+ long long b113 = b3 + b112;
+ long long b114 = b4 + b113;
+ int b115 = b5 + b114;
+ int b116 = b6 + b115;
+ int b117 = b7 + b116;
+ int b118 = b8 + b117;
+ int b119 = b9 + b118;
+ int b120 = b0 + b119;
+ int b121 = b1 + b120;
+ int b122 = b2 + b121;
+ int b123 = b3 + b122;
+ int b124 = b4 + b123;
+ int b125 = b5 + b124;
+ char b126 = b6 + b125;
+ char b127 = b7 + b126;
+ char b128 = b8 + b127;
+ char b129 = b9 + b128;
+ char b130 = b0 + b129;
+ char b131 = b1 + b130;
+ char b132 = b2 + b131;
+ char b133 = b3 + b132;
+ char b134 = b4 + b133;
+ char b135 = b5 + b134;
+ char b136 = b6 + b135;
+ char b137 = b7 + b136;
+ char b138 = b8 + b137;
+ char b139 = b9 + b138;
+ char b140 = b0 + b139;
+ char b141 = b1 + b140;
+ char b142 = b2 + b141;
+ char b143 = b3 + b142;
+ char b144 = b4 + b143;
+ char b145 = b5 + b144;
+ char b146 = b6 + b145;
+ char b147 = b7 + b146;
+ int b148 = b8 + b147;
+ int b149 = b9 + b148;
+ int b150 = b0 + b149;
+ int b151 = b1 + b150;
+ int b152 = b2 + b151;
+ int b153 = b3 + b152;
+ int b154 = b4 + b153;
+ int b155 = b5 + b154;
+ int b156 = b6 + b155;
+ int b157 = b7 + b156;
+ int b158 = b8 + b157;
+ int b159 = b9 + b158;
+ int b160 = b0 + b159;
+ int b161 = b1 + b160;
+ int b162 = b2 + b161;
+ 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)
+ + b0 + b1 + b2 + b3 + b4 + b5 + b6 + b7 + b8 + b9
+ + b10 + b11 + b12 + b13 + b14 + b15 + b16 + b17 + b18 + b19
+ + b20 + b21 + b22 + b23 + b24 + b25 + b26 + b27 + b28 + b29
+ + b30 + b31 + b32 + b33 + b34 + b35 + b36 + b37 + b38 + b39
+ + b40 + b41 + b42 + b43 + b44 + b45 + b46 + b47 + b48 + b49
+ + b50 + b51 + b52 + b53 + b54 + b55 + b56 + b57 + b58 + b59
+ + b60 + b61 + b62 + b63 + b64 + b65 + b66 + b67 + b68 + b69
+ + b70 + b71 + b72 + b73 + b74 + b75 + b76 + b77 + b78 + b79
+ + b80 + b81 + b82 + b83 + b84 + b85 + b86 + b87 + b88 + b89
+ + b90 + b91 + b92 + b93 + b94 + b95 + b96 + b97 + b98 + b99
+ + b100 + b101 + b102 + b103 + b104 + b105 + b106 + b107 + b108 + b109
+ + b110 + b111 + b112 + b113 + b114 + b115 + b116 + b117 + b118 + b119
+ + b120 + b121 + b122 + b123 + b124 + b125 + b126 + b127 + b128 + b129
+ + b130 + b131 + b132 + b133 + b134 + b135 + b136 + b137 + b138 + b139
+ + b140 + b141 + b142 + b143 + b144 + b145 + b146 + b147 + b148 + b149
+ + b150 + b151 + b152 + b153 + b154 + b155 + b156 + b157 + b158 + b159
+ + b160 + b161 + b162
+ ;
+}
+