changeset 0:3e629dc19168

initial from svn dyncall-1745
author Daniel Adler
date Thu, 19 Mar 2015 22:24:28 +0100
parents
children 5fe1e87ecf03
files AUTHORS BUGS CMakeLists.txt ChangeLog LICENSE Makefile.M Makefile.embedded Makefile.generic Nmakefile README ToDo autovar/LICENSE.txt autovar/README.txt autovar/autovar_ABI.h autovar/autovar_ARCH.h autovar/autovar_CC.h autovar/autovar_OS.h autovar/autovar_OSFAMILY.h buildsys/cmake/Modules/FindDynCall.cmake buildsys/cmake/Modules/FindDynCallback.cmake buildsys/cmake/Modules/FindDynLoad.cmake buildsys/cmake/Modules/UseLATEX.cmake buildsys/dynmake/Makefile.base.M buildsys/dynmake/dynmake.bat buildsys/dynmake/dynmake.sh buildsys/lua/Makefile buildsys/lua/README.txt buildsys/lua/bootstrap.sh buildsys/lua/cleanup.sh buildsys/lua/mkfile buildsys/lua/setenv.sh buildsys/mk/app.mk buildsys/mk/dirs.mk buildsys/mk/epilog.mk buildsys/mk/lib.mk buildsys/mk/pcc.mk buildsys/mk/prolog.mk buildsys/nmake/common.nmake buildsys/nmake/epilog.nmake buildsys/nmake/prolog.nmake buildsys/nmake/tool_gcc.nmake buildsys/nmake/tool_msvc.nmake buildsys/scripts/batch-build-linux.sh buildsys/scripts/batch-build-minix.sh buildsys/scripts/batch-build-psp.sh buildsys/scripts/conf-nds.bat buildsys/scripts/elf-to-psp-eboot.sh buildsys/scripts/setenv-cross-ios.sh buildsys/scripts/setenv-sdk-ios.sh buildsys/vs2005/dyncall/dyncall.vcproj buildsys/vs2005/test_plain/test_plain.vcproj buildsys/vs2005/vs2005.sln configure configure.bat configure.rc doc/Description.txt doc/License.txt doc/Makefile.generic doc/README-Cross.txt doc/README.CMake doc/README.Generic doc/README.MacOSX doc/README.Minix doc/README.NDS doc/README.PSP doc/README.SunOS doc/README.Windows doc/README.embedded doc/README.iOS doc/manual/CMakeLists.txt doc/manual/Makefile.generic doc/manual/Nmakefile doc/manual/callconvs/callconv_arm32.tex doc/manual/callconvs/callconv_arm64.tex doc/manual/callconvs/callconv_mips.tex doc/manual/callconvs/callconv_mips64.tex doc/manual/callconvs/callconv_ppc32.tex doc/manual/callconvs/callconv_ppc64.tex doc/manual/callconvs/callconv_sparc.tex doc/manual/callconvs/callconv_sparc64.tex doc/manual/callconvs/callconv_x64.tex doc/manual/callconvs/callconv_x86.tex doc/manual/dyncall_logo.eps doc/manual/dyncall_logo.pdf doc/manual/dyncall_logo.svg doc/manual/dyncall_watermark.eps doc/manual/dyncall_watermark.pdf doc/manual/dyncall_watermark.svg doc/manual/manual.tex doc/manual/manual_bindings.tex doc/manual/manual_build.tex doc/manual/manual_cc.tex doc/manual/manual_design.tex doc/manual/manual_devel.tex doc/manual/manual_dyncall_api.tex doc/manual/manual_dyncallback_api.tex doc/manual/manual_dynload_api.tex doc/manual/manual_epilog.tex doc/manual/manual_literature.tex doc/manual/manual_motivation.tex doc/manual/manual_overview.tex doc/manual/manual_tex4ht.cfg doc/manual/manual_title.tex dynMakefile dyncall/CMakeLists.txt dyncall/DynCallConfig.cmake dyncall/Makefile.M dyncall/Makefile.embedded dyncall/Makefile.generic dyncall/Nmakefile dyncall/README-Developer.txt dyncall/README.txt dyncall/TODO dyncall/dynMakefile dyncall/dyncall.3 dyncall/dyncall.h dyncall/dyncall_alloc.h dyncall/dyncall_api.c dyncall/dyncall_call.S dyncall/dyncall_call_arm32_arm.S dyncall/dyncall_call_arm32_arm.h dyncall/dyncall_call_arm32_arm_armhf.S dyncall/dyncall_call_arm32_arm_armhf.h dyncall/dyncall_call_arm32_thumb.h dyncall/dyncall_call_arm32_thumb_apple.s dyncall/dyncall_call_arm32_thumb_armhf.S dyncall/dyncall_call_arm32_thumb_gas.s dyncall/dyncall_call_arm64.S dyncall/dyncall_call_arm64.h dyncall/dyncall_call_mips.h dyncall/dyncall_call_mips_eabi.h dyncall/dyncall_call_mips_eabi_gas.s dyncall/dyncall_call_mips_gas.S dyncall/dyncall_call_mips_n32.h dyncall/dyncall_call_mips_n32_gas.s dyncall/dyncall_call_mips_n64.h dyncall/dyncall_call_mips_n64_gas.s dyncall/dyncall_call_mips_o32.h dyncall/dyncall_call_mips_o32_gas.s dyncall/dyncall_call_ppc32.S dyncall/dyncall_call_ppc32.h dyncall/dyncall_call_ppc64.S dyncall/dyncall_call_ppc64.h dyncall/dyncall_call_sparc.S dyncall/dyncall_call_sparc.h dyncall/dyncall_call_sparc64.S dyncall/dyncall_call_sparc64.h dyncall/dyncall_call_sparc_v9.S dyncall/dyncall_call_sparc_v9.h dyncall/dyncall_call_x64-att.S dyncall/dyncall_call_x64.S dyncall/dyncall_call_x64.h dyncall/dyncall_call_x64_generic_masm.asm dyncall/dyncall_call_x86.S dyncall/dyncall_call_x86.h dyncall/dyncall_call_x86_8a.s dyncall/dyncall_call_x86_generic_masm.asm dyncall/dyncall_call_x86_nasm.asm dyncall/dyncall_callf.c dyncall/dyncall_callf.h dyncall/dyncall_callvm.c dyncall/dyncall_callvm.h dyncall/dyncall_callvm_arm32_arm.c dyncall/dyncall_callvm_arm32_arm.h dyncall/dyncall_callvm_arm32_arm_armhf.c dyncall/dyncall_callvm_arm32_arm_armhf.h dyncall/dyncall_callvm_arm32_thumb.c dyncall/dyncall_callvm_arm32_thumb.h dyncall/dyncall_callvm_arm64.c dyncall/dyncall_callvm_arm64.h dyncall/dyncall_callvm_arm64_apple.c dyncall/dyncall_callvm_base.c dyncall/dyncall_callvm_mips.c dyncall/dyncall_callvm_mips.h dyncall/dyncall_callvm_mips_eabi.c dyncall/dyncall_callvm_mips_eabi.h dyncall/dyncall_callvm_mips_n32.c dyncall/dyncall_callvm_mips_n64.c dyncall/dyncall_callvm_mips_n64.h dyncall/dyncall_callvm_mips_o32.c dyncall/dyncall_callvm_mips_o32.h dyncall/dyncall_callvm_ppc32.c dyncall/dyncall_callvm_ppc32.h dyncall/dyncall_callvm_ppc64.c dyncall/dyncall_callvm_ppc64.h dyncall/dyncall_callvm_sparc.c dyncall/dyncall_callvm_sparc.h dyncall/dyncall_callvm_sparc64.c dyncall/dyncall_callvm_sparc64.h dyncall/dyncall_callvm_sparc_v9.c dyncall/dyncall_callvm_sparc_v9.h dyncall/dyncall_callvm_x64.c dyncall/dyncall_callvm_x64.h dyncall/dyncall_callvm_x86.c dyncall/dyncall_callvm_x86.h dyncall/dyncall_config.h dyncall/dyncall_macros.h dyncall/dyncall_signature.h dyncall/dyncall_struct.c dyncall/dyncall_struct.h dyncall/dyncall_types.h dyncall/dyncall_utils.h dyncall/dyncall_value.h dyncall/dyncall_vector.c dyncall/dyncall_vector.h dyncall/gen-masm.sh dyncall/mkfile dyncallback/CMakeLists.txt dyncallback/DynCallbackConfig.cmake dyncallback/Makefile.M dyncallback/Makefile.embedded dyncallback/Makefile.generic dyncallback/Nmakefile dyncallback/README.txt dyncallback/TODO dyncallback/dynMakefile dyncallback/dyncall_alloc_wx.c dyncallback/dyncall_alloc_wx.h dyncallback/dyncall_alloc_wx_malloc.c dyncallback/dyncall_alloc_wx_mmap.c dyncallback/dyncall_alloc_wx_win32.c dyncallback/dyncall_args.c dyncallback/dyncall_args.h dyncallback/dyncall_args_arm32_arm.c dyncallback/dyncall_args_arm32_arm.h dyncallback/dyncall_args_arm32_thumb.c dyncallback/dyncall_args_arm32_thumb.h dyncallback/dyncall_args_arm64.c dyncallback/dyncall_args_arm64_apple.c dyncallback/dyncall_args_mips.c dyncallback/dyncall_args_mips.h dyncallback/dyncall_args_ppc32.c dyncallback/dyncall_args_ppc32.h dyncallback/dyncall_args_ppc32_sysv.c dyncallback/dyncall_args_ppc64.c dyncallback/dyncall_args_ppc64.h dyncallback/dyncall_args_sparc32.c dyncallback/dyncall_args_sparc32.h dyncallback/dyncall_args_sparc64.c dyncallback/dyncall_args_sparc64.h dyncallback/dyncall_args_x64.c dyncallback/dyncall_args_x64.h dyncallback/dyncall_args_x86.c dyncallback/dyncall_args_x86.h dyncallback/dyncall_callback.c dyncallback/dyncall_callback.h dyncallback/dyncall_callback_arch.S dyncallback/dyncall_callback_arm32_arm.c dyncallback/dyncall_callback_arm32_arm.h dyncallback/dyncall_callback_arm32_arm_apple.s dyncallback/dyncall_callback_arm32_arm_gas.s dyncallback/dyncall_callback_arm32_thumb.c dyncallback/dyncall_callback_arm32_thumb.h dyncallback/dyncall_callback_arm32_thumb_apple.s dyncallback/dyncall_callback_arm32_thumb_gas.s dyncallback/dyncall_callback_arm64.c dyncallback/dyncall_callback_arm64.s dyncallback/dyncall_callback_mips.c dyncallback/dyncall_callback_mips.h dyncallback/dyncall_callback_ppc32.S dyncallback/dyncall_callback_ppc32.c dyncallback/dyncall_callback_ppc32.h dyncallback/dyncall_callback_ppc32_apple.s dyncallback/dyncall_callback_ppc64.S dyncallback/dyncall_callback_ppc64.c dyncallback/dyncall_callback_ppc64.h dyncallback/dyncall_callback_sparc32.c dyncallback/dyncall_callback_sparc32.h dyncallback/dyncall_callback_sparc32.s dyncallback/dyncall_callback_sparc64.c dyncallback/dyncall_callback_sparc64.s dyncallback/dyncall_callback_x64.S dyncallback/dyncall_callback_x64.c dyncallback/dyncall_callback_x64.h dyncallback/dyncall_callback_x64_masm.asm dyncallback/dyncall_callback_x86.S dyncallback/dyncall_callback_x86.c dyncallback/dyncall_callback_x86.h dyncallback/dyncall_callback_x86_8a.s dyncallback/dyncall_callback_x86_masm.asm dyncallback/dyncall_thunk.c dyncallback/dyncall_thunk.h dyncallback/dyncall_thunk_arm32_arm.c dyncallback/dyncall_thunk_arm32_arm.h dyncallback/dyncall_thunk_arm32_thumb.c dyncallback/dyncall_thunk_arm32_thumb.h dyncallback/dyncall_thunk_arm64.c dyncallback/dyncall_thunk_arm64.h dyncallback/dyncall_thunk_mips.c dyncallback/dyncall_thunk_mips.h dyncallback/dyncall_thunk_ppc32.c dyncallback/dyncall_thunk_ppc32.h dyncallback/dyncall_thunk_ppc32_sysv.c dyncallback/dyncall_thunk_ppc64.c dyncallback/dyncall_thunk_ppc64.h dyncallback/dyncall_thunk_sparc32.c dyncallback/dyncall_thunk_sparc32.h dyncallback/dyncall_thunk_sparc64.c dyncallback/dyncall_thunk_sparc64.h dyncallback/dyncall_thunk_x64.c dyncallback/dyncall_thunk_x64.h dyncallback/dyncall_thunk_x86.c dyncallback/dyncall_thunk_x86.h dyncallback/dyncallback.3 dyncallback/gen-masm.sh dyncallback/mkfile dynload/CMakeLists.txt dynload/DynLoadConfig.cmake dynload/Makefile.M dynload/Makefile.embedded dynload/Makefile.generic dynload/Nmakefile dynload/README.txt dynload/TODO dynload/dynMakefile dynload/dynload.3 dynload/dynload.c dynload/dynload.h dynload/dynload_alloc.h dynload/dynload_darwin.c dynload/dynload_syms.c dynload/dynload_syms_elf.c dynload/dynload_syms_mach-o.c dynload/dynload_syms_pe.c dynload/dynload_unix.c dynload/dynload_windows.c mkfile portasm/README.txt portasm/gen-masm.sh portasm/portasm-arm.S portasm/portasm-ppc.S portasm/portasm-x64-att.S portasm/portasm-x86.S test/CMakeLists.txt test/Makefile.M test/Makefile.embedded test/Makefile.generic test/Nmakefile test/arm-thumb-interwork/Makefile-default.config test/arm-thumb-interwork/Makefile-thumb.config test/arm-thumb-interwork/README.txt test/arm-thumb-interwork/build.sh test/call_suite/Makefile.M test/call_suite/Makefile.embedded test/call_suite/Makefile.generic test/call_suite/Nmakefile test/call_suite/README.txt test/call_suite/cases.c test/call_suite/cases.h test/call_suite/cases.txt test/call_suite/config.lua test/call_suite/design.txt test/call_suite/dynMakefile test/call_suite/globals.c test/call_suite/globals.h test/call_suite/invoke.c test/call_suite/main.c test/call_suite/mk-cases.lua test/call_suite/mkfile test/call_suite/rand-sig.lua test/callback_plain/CMakeLists.txt test/callback_plain/Makefile.M test/callback_plain/Makefile.embedded test/callback_plain/Makefile.generic test/callback_plain/Nmakefile test/callback_plain/callback_plain.c test/callback_plain/dynMakefile test/callback_plain/mkfile test/callback_suite/CMakeLists.txt test/callback_suite/Makefile.M test/callback_suite/Makefile.embedded test/callback_suite/Makefile.generic test/callback_suite/Nmakefile test/callback_suite/README.txt test/callback_suite/_auto_config.h test/callback_suite/_auto_invoke_macros.h test/callback_suite/_auto_invoke_table.h test/callback_suite/_auto_invokers.h test/callback_suite/_auto_signatures.txt test/callback_suite/_auto_sigstrings.h test/callback_suite/config-random.lua test/callback_suite/config-stress1.lua test/callback_suite/config.lua test/callback_suite/do_test.c test/callback_suite/dynMakefile test/callback_suite/dyncall_value_set.h test/callback_suite/env.c test/callback_suite/env.h test/callback_suite/handler.c test/callback_suite/invokers.c test/callback_suite/invokers.h test/callback_suite/main.c test/callback_suite/make-config.lua test/callback_suite/make-cstrings.lua test/callback_suite/make-invoke-macros.lua test/callback_suite/make-invoke-table.lua test/callback_suite/make-invokers.lua test/callback_suite/make-signatures.lua test/callback_suite/mkfile test/callback_suite/print.c test/callback_suite/print.h test/callback_suite/signature_utils.c test/callback_suite/signature_utils.h test/callback_suite/sigstrings.c test/callback_suite/sigstrings.h test/callback_suite/stress1.cfg test/callf/CMakeLists.txt test/callf/Makefile.M test/callf/Makefile.embedded test/callf/Makefile.generic test/callf/Nmakefile test/callf/dynMakefile test/callf/main.c test/callf/mkfile test/common/platformInit.c test/common/platformInit.h test/dynMakefile test/ellipsis/CMakeLists.txt test/ellipsis/Makefile.M test/ellipsis/Makefile.embedded test/ellipsis/Makefile.generic test/ellipsis/Nmakefile test/ellipsis/README.txt test/ellipsis/case.h test/ellipsis/config.h test/ellipsis/dynMakefile test/ellipsis/ellipsis.cc test/ellipsis/main.cc test/ellipsis/mkcase.py test/gen-masm/Makefile test/gen-masm/call_x64.S test/gen-masm/call_x64.masm test/gen-masm/call_x86.S test/gen-masm/call_x86.masm test/gen-masm/gen_masm.sh test/hacking-arm-thumb-interwork/Makefile test/hacking-arm-thumb-interwork/Makefile.darwin test/hacking-arm-thumb-interwork/Makefile.linux test/hacking-arm-thumb-interwork/README.txt test/hacking-arm-thumb-interwork/arm.c test/hacking-arm-thumb-interwork/diff-gcc-defs/Makefile test/hacking-arm-thumb-interwork/diff-gcc-defs/diff-generic.sh test/hacking-arm-thumb-interwork/diff-gcc-defs/empty.S test/hacking-arm-thumb-interwork/diff-gcc-defs/empty.c test/hacking-arm-thumb-interwork/test.c test/hacking-arm-thumb-interwork/thumb.c test/hacking-mips/Makefile test/hacking-mips/README.txt test/hacking-mips/call.c test/hacking-mips/calls.c test/hacking-mips/common.h test/hacking-mips/dispatch.c test/hacking-mips/f.c test/hacking-mips/f0.c test/hacking-mips/funs.c test/hacking-mips/main.c test/hacking-mips/node.c test/hacking-mips/prolog.c test/hacking-mips/retn.c test/makepkg.sh test/malloc_wx/CMakeLists.txt test/malloc_wx/Makefile.M test/malloc_wx/Makefile.embedded test/malloc_wx/Makefile.generic test/malloc_wx/Nmakefile test/malloc_wx/dynMakefile test/malloc_wx/mkfile test/malloc_wx/test_wx.c test/mkfile test/nm/CMakeLists.txt test/nm/Makefile.M test/nm/Makefile.embedded test/nm/Makefile.generic test/nm/Nmakefile test/nm/dynMakefile test/nm/nm.c test/pack-tests.sh test/plain/CMakeLists.txt test/plain/Makefile.M test/plain/Makefile.embedded test/plain/Makefile.generic test/plain/Nmakefile test/plain/dynMakefile test/plain/mkfile test/plain/test_framework.h test/plain/test_main.c test/plain/test_structs.c test/plain_c++/CMakeLists.txt test/plain_c++/Makefile.M test/plain_c++/Makefile.embedded test/plain_c++/Makefile.generic test/plain_c++/Nmakefile test/plain_c++/dynMakefile test/plain_c++/mkfile test/plain_c++/test_framework.h test/plain_c++/test_main.cc test/resolve_self/Makefile.M test/resolve_self/Makefile.embedded test/resolve_self/Makefile.generic test/resolve_self/Nmakefile test/resolve_self/README.txt test/resolve_self/dynMakefile test/resolve_self/main.c test/run-build.sh test/runalltests.bat test/runalltests.sh test/samples/calls/d16.c test/samples/calls/d20.c test/samples/calls/d40.c test/samples/calls/f16.c test/samples/calls/f20.c test/samples/calls/f40.c test/samples/calls/fd40.c test/samples/calls/i3.c test/samples/calls/i7.c test/samples/calls/id40.c test/samples/calls/l16.c test/samples/calls/many.c test/samples/composite/args.asm test/samples/composite/args.c test/samples/composite/args.s test/samples/composite/build.bat test/samples/composite/makefile test/sharedlib/CMakeLists.txt test/sharedlib/Makefile.embedded test/sharedlib/sharedlib.c test/sign/Makefile.generic test/sign/sign.c test/suite/CMakeLists.txt test/suite/Makefile.M test/suite/Makefile.embedded test/suite/Makefile.generic test/suite/Nmakefile test/suite/README.txt test/suite/case.c test/suite/case.h test/suite/config.h test/suite/dynMakefile test/suite/main.c test/suite/mkcase.py test/suite/mkfile test/suite2/CMakeLists.txt test/suite2/Makefile.M test/suite2/Makefile.embedded test/suite2/Makefile.generic test/suite2/Nmakefile test/suite2/case.cc test/suite2/case.h test/suite2/config.h test/suite2/design.cfg test/suite2/dynMakefile test/suite2/funcinfo.h test/suite2/ints.cfg test/suite2/main.cc test/suite2/mkcase.py test/suite2/rand.py test/suite2/stress1.cfg test/suite2_x86win32fast/CMakeLists.txt test/suite2_x86win32fast/Makefile.M test/suite2_x86win32fast/Makefile.generic test/suite2_x86win32fast/Nmakefile test/suite2_x86win32fast/case.cc test/suite2_x86win32fast/case.h test/suite2_x86win32fast/config.h test/suite2_x86win32fast/design.cfg test/suite2_x86win32fast/dynMakefile test/suite2_x86win32fast/funcinfo.h test/suite2_x86win32fast/main.cc test/suite2_x86win32fast/mkcase.py test/suite2_x86win32fast/rand.py test/suite2_x86win32std/CMakeLists.txt test/suite2_x86win32std/Makefile.M test/suite2_x86win32std/Makefile.generic test/suite2_x86win32std/Nmakefile test/suite2_x86win32std/case.cc test/suite2_x86win32std/case.h test/suite2_x86win32std/config.h test/suite2_x86win32std/design.cfg test/suite2_x86win32std/dynMakefile test/suite2_x86win32std/funcinfo.h test/suite2_x86win32std/main.cc test/suite2_x86win32std/mkcase.py test/suite2_x86win32std/rand.py test/suite3/CMakeLists.txt test/suite3/Makefile.M test/suite3/Makefile.embedded test/suite3/Makefile.generic test/suite3/Nmakefile test/suite3/README.txt test/suite3/case.cc test/suite3/case.h test/suite3/config.h test/suite3/dynMakefile test/suite3/main.cc test/suite3/mkcase.py test/suite_floats/CMakeLists.txt test/suite_floats/Makefile.M test/suite_floats/Makefile.embedded test/suite_floats/Makefile.generic test/suite_floats/Nmakefile test/suite_floats/README.txt test/suite_floats/case.cc test/suite_floats/case.h test/suite_floats/config.h test/suite_floats/dynMakefile test/suite_floats/main.cc test/suite_floats/mkcase.py test/suite_x86win32fast/CMakeLists.txt test/suite_x86win32fast/Makefile.M test/suite_x86win32fast/Makefile.generic test/suite_x86win32fast/Nmakefile test/suite_x86win32fast/README.txt test/suite_x86win32fast/case.cc test/suite_x86win32fast/case.h test/suite_x86win32fast/config.h test/suite_x86win32fast/dynMakefile test/suite_x86win32fast/main.cc test/suite_x86win32fast/mkcase.py test/suite_x86win32std/CMakeLists.txt test/suite_x86win32std/Makefile.M test/suite_x86win32std/Makefile.generic test/suite_x86win32std/Nmakefile test/suite_x86win32std/README.txt test/suite_x86win32std/case.cc test/suite_x86win32std/case.h test/suite_x86win32std/config.h test/suite_x86win32std/dynMakefile test/suite_x86win32std/main.cc test/suite_x86win32std/mkcase.py test/syscall/CMakeLists.txt test/syscall/Makefile.M test/syscall/Makefile.embedded test/syscall/Makefile.generic test/syscall/dynMakefile test/syscall/syscall.c test/thunk/CMakeLists.txt test/thunk/Makefile.M test/thunk/Makefile.embedded test/thunk/Makefile.generic test/thunk/Nmakefile test/thunk/dynMakefile test/thunk/mkfile test/thunk/test_thunk.c
diffstat 643 files changed, 50682 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AUTHORS	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,6 @@
+Daniel Adler <dadler@uni-goettingen.de>
+Tassilo Philipp <tphilipp@potion-studios.com>
+Olivier Chafik <olivier.chafik@gmail.com>
+Erik Mackdanz <erikmack@gmail.com>
+Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BUGS	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+- add support for SELinux; object files need to be tagged with section '.section .note.GNU-stack,"",%progbits'
+- dyncall sparc v7/v8: -xO3 on SunPro segfaults in tests.
+- dyncall sparc64 port: works fine on Debian 6, but has issues on OpenBSD and Solaris regarding passing of float and double values.
+- this BUGS file should be merged with ToDo or vice-versa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,79 @@
+# Package: dyncall
+# File: CMakeLists.txt
+# Description: DynCall Project cmake files
+# License:
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>
+# 
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+cmake_minimum_required (VERSION 2.6)
+project(DynCall)
+
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "dyncall enables dynamic invocation of machine-level function calls")
+set(CPACK_PACKAGE_VENDOR "dyncall project")
+set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/doc/Description.txt")
+set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/doc/License.txt")
+if(APPLE)
+set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/doc/Description.txt")
+endif(APPLE)
+set(CPACK_PACKAGE_NAME "dyncall")
+include(CPack)
+
+# add cmake modules shipped with the package to cmake's module path.
+# currently we have no use for this, but maybe later..
+#set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/buildsys/cmake/Modules" "${CMAKE_MODULE_PATH}")
+
+
+if(MSVC)
+  enable_language(ASM_MASM)
+  #if(CMAKE_SIZEOF_VOID_P MATCHES 8)
+  #  set(CMAKE_ASM_COMPILER "ml64")
+  #else()
+  #  set(CMAKE_ASM_COMPILER "ml")
+  #endif()
+  #set(CMAKE_ASM_COMPILER_ARG1 "/c")
+  #set(CMAKE_ASM_MASM_SOURCE_FILE_EXTENSIONS asm)
+  #set(CMAKE_ASM_MASM_COMPILE_OBJECT "<CMAKE_ASM_MASM_COMPILER> <FLAGS> /c /Fo <OBJECT> <SOURCE>")
+elseif(CMAKE_COMPILER_IS_GNUCC)
+  # when used in shared libraries, -fPIC is required by several architectures
+  # and platforms (observed on AMD64, Solaris/Sparc).
+  # we enable it per default here.
+  add_definitions("-fPIC")
+  # enable gcc as front-end to assembler for .S files
+  set(CMAKE_ASM_COMPILER "${CMAKE_C_COMPILER}")
+  set(CMAKE_ASM_COMPILER_ARG1 "${CPPFLAGS} -c")
+  enable_language(ASM)
+elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "SunPro")
+  set(CMAKE_ASM_COMPILER "${CMAKE_C_COMPILER}")
+  set(CMAKE_ASM_COMPILER_ARG1 "${CPPFLAGS} -c")
+  enable_language(ASM)
+endif()
+
+
+add_subdirectory(dynload)
+add_subdirectory(dyncall)
+add_subdirectory(dyncallback)
+add_subdirectory(doc/manual EXCLUDE_FROM_ALL)
+add_subdirectory(test EXCLUDE_FROM_ALL)
+
+# install cmake Find scripts (disabled per default)
+
+option(INSTALL_CMAKE_MODULES "install cmake modules to locate dyncall" "NO")
+
+if(INSTALL_CMAKE_MODULES)
+file(GLOB INSTALL_CMAKE_MODULES_FILES buildsys/cmake/Modules/Find*.cmake)
+install(FILES ${INSTALL_CMAKE_MODULES_FILES} DESTINATION ${CMAKE_ROOT}/Modules)
+endif(INSTALL_CMAKE_MODULES)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ChangeLog	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,194 @@
+This file lists bigger/noteworthy changes, only...
+
+Version 0.9 (upcoming)
+dyncall:
+  o ARM64 support (AAPCS64 on Linux, Apple's derived version on iOS)
+  o PPC64 support (thanks Masanori!)
+  o introduced dcArgF and dcVArgF for flexible/convenient argument binding (works like dcCallF/dcVCallF but without the function call)
+  o added -fPIC by default for FreeBSD
+  o PPC32 linux syscall support
+dyncallback:
+  o ARM64 support (AAPCS64 on Linux, Apple's derived version on iOS)
+  o PPC64 support (thanks Masanori!)
+  o PPC32 System V support (Linux)
+  o fix for PPC32 Darwin/OS X
+  o more intuitive specification of callback return type
+doc:
+  o added ARM64 support info and calling convention documentation
+  o added PPC64 support info
+  o cleanup, brought all up to date, etc.
+tests:
+  o callf test covers new argf interface
+buildsys:
+  o more flexible testsuite build and 'pack' target for convenience
+  o fixes/additions for OS X universal builds
+  o added iOS universal build support for armv7/arm64
+  o helper script for generic .elf -> EBOOT.PBP creation for PSP
+  o Sun make fixes for C++ code in test suite
+bindings:
+  o erldc: Erlang binding (thanks Erik!)
+
+Version 0.8
+buildsys:
+  o big simplification make-based build system, no more distinct GNU and BSD makefiles anymore
+  o new, much simpler ./configure for new make-based build-system
+  o support for in-source and out-of-source builds for make-based build systems
+  o made configure.bat guess x64 as target arch for x64 windows hosts
+  o based more sources on portasm generation
+dyncall:
+  o fix for ARMv7 Thumb-2 code (tested on iPhone 4 CDMA / iOS 6.0.1)
+  o bugfixes for -O2 builds for SPARC-v9 and SPARC-v7 
+  o new optimized call kernel for SPARC-v9 without conditionals
+  o bigger refactoring and optimization of mips o32
+  o x64 optimizations
+dyncallback:
+  o added callback support for plan9
+  o big cleanup, removal of duplicate files after introduction of portasm
+  o include path fixes for public facing APIs (removed relative paths)
+doc:
+  o cleanup of manual and corrections
+  o added info about newly supported and/or tested platforms (e.g. FreeBSD on ARM)
+  o restructured folder layout for documentation
+  o added API doc for dyncallback and dynload
+  o added manpages for dyncallback and dynload
+tests:
+  o added arm/thumb interwork test suite
+bindings:
+  o godc: added bindings for Go
+  o rbdc: fixed and extended ruby bindings
+  o shdc: renamed shell binding to shdc and added feature to list shared-objects' symbols
+
+Version 0.7
+architecture:
+  o added subproject: portasm - portable (GNU AS,+Apple and MASM) assembly framework  
+  o added subproject: autovar - predefined macro framework (was dyncall_macros.h)
+  o added support for sparc (32-bit) (tested on linux/debian,openbsd,solaris)
+  o added support for sparc (64-bit) (tested on linux/debian,openbsd,solaris)
+  o added support for Solaris and SunPro compiler for i386, x86_64, sparc and sparc64
+  o improved auto-detection via preprocessor defines
+dyncall updates:
+  o uses portasm (GNU,Apple,Microsoft) common sources for x86,x64,ppc32,arm32_arm
+  o bug fixes for x64/win64 calling convention
+  o added support for mingw32-w64 on x64
+  o improved cdecl x86 calling convention: stack always 16 byte aligned
+  o updated API and initial support for structs (for x86/AMD64)
+  o initial support for syscalls on x86, added x86 int80h linux/bsd
+  o added Minix port (stable)
+  o optimized vector buffer for small type pushing
+  o minor fix for amd64/sysv: alignment to 32-byte
+  o bug fix for ppc32/sysv: ellipsis calls work now
+  o updated API, introduced DC_CALL_C_ELLIPSIS_VARARGS
+  o changed interface: dcMode does not reset internally anymore
+dyncallback updates:
+  o uses portasm for x86,x64
+  o added Solaris/x86/sunpro port (stable)
+  o added Minix port (unstable)
+  o callback support for Darwin/ppc32
+  o updates source, uses relative includes
+dynload updates:
+  o fixes for missing includes (dyncall_alloc.h)
+  o fixes for self-resolving symbols on windows
+  o removed Dbghelf.lib dependency
+  o bug fixes for cygwin/x86
+  o fixes for beos/haiku
+  o no dependencies to libdyncall sources.
+buildsys additions:
+  o added zero-config (BSD,GNU,SUN) make files (Makefile.embedded)
+  o added in/out-of-source configure2 w/ (BSD,GNU) make files (Makefile.generic')
+  o added bootstrap lua script (download/build) 
+  o Nmakefile: more tests included (resolve_self)
+  o improved cross-compilation for iOS (upgrade to 4.3 sdk)
+  o darwin 8.0 support
+  o added 'install' support for Makefile.embedded
+buildsys/gmake updates:
+  o added support for msvc/x64 tool-chain
+  o default settings for build-dir changed to '.'
+  o cleanup: removed top-level Make{Prolog,Epilog,Rules} files and updated all sub-projects and tests
+  o added support for DESTDIR staging installation
+  o added support for manual page installation
+buildsys/cmake updates:
+  o updated find module scripts (see cmake/Modules)
+  o added support for using dyncall as sub-project (via *Config.cmake files)
+    see details in README.CMake
+  o fixes for msvc and ml
+  o fixes for CPack
+  o fixes for universal builds on Mac OS X
+  o supports SunPro with *.S files.
+  o added experimental 'dynMake' portable make-based build-system (not stable, yet)
+documentation updates:
+  o added dyncallback documentation
+  o updated dyncall documentation 
+  o minor updates
+tests:
+  o added flexible test suite for calls (call_suite) based on Lua and C
+  o added syscall test
+  o updates to resolve-self test (adding additional link flags to export symbols)
+  o improved dir name portability (renamed plain_c++ -> plain_cxx) 
+  o renamed *.cpp -> *.cc files (OpenBSD/Sun make has no implicit rules for cpp)
+
+Version 0.6
+building:
+  o new build systems: CMake and Plan9's mk
+  o buildsys/gmake tool chain update: pcc and iphone sdk
+  o x64 bugfix: added "-fPIC" even for static libs
+dynload updates: 
+  o enum symbols update: Mach-O and Win64 (thanks Olivier)
+  o numerous convenience changes to dynload interface (thanks Olivier)
+  o added support for resolving application images itself
+dyncall updates:
+  o new platform support: arm/iphone (armv6), x86/Plan9
+  o new mips calling conventions: oabi, n64 (both endian models)
+  o cleanup: unexported functions in MASM files, b/c export not needed (thanks Olivier)
+  o interface update: added error reporting facility 'dcGetError'
+  o bugfix for ppc32/sysv: ellipsis calls were broken
+  o interface update: added new abstract mode for ellipsis calls (DC_CALL_C_ELLIPSIS) 
+docs:
+  o comprehensive update
+tests:
+  o plain: split "plain" test up in C and C++ part
+  o callbacksuite: added multiple configuration support for callback_suite
+
+Version 0.5
+  o renamed arm9 stuff to arm32
+  o added non-EABI ABI for arm32 (before, EABI was the default implementation)
+  o added dyncallback support for x64/windows (thanks Olivier), x64/darwin, arm32/arm, arm32/thumb
+  o synced documentation again with current state of the source (lots of small changes)
+  o updated ruby binding to current state of signature string (still some features missing, though)
+  o added a couple of new options to configure scripts (e.g. prefix-bd, new targets, etc.)
+  o darwin universal binary support
+  o added new tests callback_plain and calback_suite
+  o added Haiku/BeOS support
+
+Version 0.4
+  o added 'doc' makefile target for coherency and ease of use
+  o fixed nmake buildfiles and configure.bat (were out of date and wrong)
+  o test suite clean up (GNUmake, BSDmake):
+    target "config" modified, phony without dependencies to other builds
+  o bugfix: GNU fastcall calling convention for float and double arguments
+    was wrong. no skip of register.
+  o update: x86win32* suite tests are built on cygwin now, added total result output
+  o signature types change:
+    C Strings: 'S' -> 'Z'
+    long: 'l' -> 'j'
+    long long: 'L' -> 'l'
+    added unsigned integer type signature characters: upper case encoding  
+  o added: callbacks component (support only for some platforms ATM)
+  o added: test cases for alloc_wx, thunk
+  o updated Documentation
+
+Version 0.3
+  o added Linux PPC32 support
+  o added ARM THUMB mode support
+  o cosmetic changes, documentation updated
+  o bugfix: on cygwin exported C symbols in GNU as are prefixed with '_' now.
+  o removed scons build support
+
+Version 0.2
+  o added scons build support
+  o configure variables all prefix CONFIG_* now
+  o configure variable INSTALL_DIR changed to INSTALL_PREFIX
+  o configure (shell version) option "--prefix" changed to "--prefix=<path>"
+
+Version 0.1:
+  o initial release
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LICENSE	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+If not stated otherwise inside a file, all files here are distributed in
+terms of:
+
+Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                        Tassilo Philipp <tphilipp@potion-studios.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,15 @@
+#include "buildsys/dynmake/Makefile.base.M"
+
+all:
+	cd dyncall     _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd dynload     _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd dyncallback _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+
+clean:
+	cd dyncall     _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd dynload     _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd dyncallback _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+
+tests:
+	cd test        _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,75 @@
+MAKEFILE = Makefile.embedded
+MAKE_CMD = ${MAKE} -f ${MAKEFILE} 
+all:
+	cd dynload && ${MAKE_CMD}
+	cd dyncall && ${MAKE_CMD}
+	cd dyncallback && ${MAKE_CMD}
+tests: 
+	cd test && ${MAKE_CMD} 
+clean:
+	cd dynload     && ${MAKE_CMD} clean
+	cd dyncall     && ${MAKE_CMD} clean
+	cd dyncallback && ${MAKE_CMD} clean
+	cd test        && ${MAKE_CMD} clean
+install:
+	cd dynload     && ${MAKE_CMD} install
+	cd dyncall     && ${MAKE_CMD} install
+	cd dyncallback && ${MAKE_CMD} install
+bsd:
+	${MAKE_CMD} all
+linux:
+	${MAKE_CMD} all
+linux64:
+	CFLAGS="${CFLAGS} -m64" ASFLAGS="${ASFLAGS} -m64" ${MAKE_CMD} all
+minix-gcc:
+	cd dyncall	&& CC=gcc CFLAGS= ${MAKE_CMD} 
+	cd dyncallback	&& CC=gcc CFLAGS= ${MAKE_CMD} 
+mingw32:
+	${MAKE_CMD} CC=gcc AS="gcc -c" all
+osx:
+	${MAKE_CMD} all
+osx-universal:
+	CFLAGS="${CFLAGS} -arch i386 -arch x86_64 -arch ppc" ASFLAGS="${ASFLAGS} -arch i386 -arch x86_64 -arch ppc" AR="libtool" ARFLAGS="-static -o" ${MAKE_CMD} all
+osx-template:
+	CC="${CC} ${OSX_ARCH}" AS="${AS} ${OSX_ARCH}" ${MAKE_CMD}
+osx-i386:
+	OSX_ARCH="-arch i386" ${MAKE_CMD} osx-template
+sun:
+	CFLAGS="${CFLAGS}" ${MAKE_CMD} all
+sun-64bit:
+	CFLAGS="${CFLAGS} -m64" ASFLAGS="${ASFLAGS} -m64" ${MAKE_CMD} all
+
+sun-gcc:
+	CC=gcc CFLAGS="${CFLAGS} -fPIC" ${MAKE_CMD} all
+sun-gcc-64bit:
+	CC=gcc CFLAGS="${CFLAGS} -m64" ASFLAGS="${ASFLAGS} -m64" ${MAKE_CMD} all
+ios-sdkroot:
+	\
+  AS="${CC} ${IOS_ARCH} -miphoneos-version-min=${IOS_SDK}"\
+  CC="${CC} ${IOS_ARCH} -miphoneos-version-min=${IOS_SDK}"\
+  CXX="${CXX} ${IOS_ARCH} -miphoneos-version-min=${IOS_SDK}"\
+  LD="${LD} ${IOS_ARCH} -miphoneos-version-min=${IOS_SDK}"\
+  ASFLAGS="-isysroot ${IOS_SDKROOT}"\
+  CFLAGS="-isysroot ${IOS_SDKROOT}"\
+  CXXFLAGS="-isysroot ${IOS_SDKROOT}"\
+  LDFLAGS="-Wl,-syslibroot ${IOS_SDKROOT}"\
+  ${MAKE_CMD} all  
+ios:
+	IOS_SDKROOT="`xcode-select -print-path`/Platforms/iPhone${IOS_PLATFORM}.platform/Developer/SDKs/iPhone${IOS_PLATFORM}${IOS_SDK}.sdk" ${MAKE_CMD} ios-sdkroot
+ios-sim:
+	IOS_PLATFORM="Simulator" ${MAKE_CMD} ios
+ios-os:
+	IOS_PLATFORM="OS"        ${MAKE_CMD} ios
+# NOTE iOS 6.1 does not support armv6 (has no libs)
+ios61-os:
+	IOS_SDK="6.1" IOS_ARCH="-arch armv7"             ${MAKE_CMD} ios-os
+ios61-os-no-thumb:
+	IOS_SDK="6.1" IOS_ARCH="-arch armv7 -mno-thumb"  ${MAKE_CMD} ios-os
+ios61-sim:
+	IOS_SDK="6.1" IOS_ARCH="-arch i386"              ${MAKE_CMD} ios-sim
+ios83-os-universal:
+	IOS_SDK="8.3" IOS_ARCH="-arch armv7 -arch arm64" ${MAKE_CMD} ios-os
+ios83-sim:
+	IOS_SDK="8.3" IOS_ARCH="-arch i386"              ${MAKE_CMD} ios-sim
+
+.PHONY: all tests clean install bsd linux linux64 minix-gcc mingw32 osx osx-universal sun sun-64bit sun-gcc sun-gcc-64bit
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,36 @@
+.PHONY: all clean install tests docs run-tests clean distclean libdyncall libdyncallback libdynload
+all: libdyncall libdyncallback libdynload
+install: all install-libdyncall install-libdyncallback install-libdynload
+libdyncall:
+	cd dyncall && ${MAKE} all
+libdyncallback:
+	cd dyncallback && ${MAKE} all
+libdynload:
+	cd dynload && ${MAKE} all
+install-libdyncall: libdyncall
+	cd dyncall && ${MAKE} install
+install-libdyncallback: libdyncallback
+	cd dyncallback && ${MAKE} install
+install-libdynload: libdynload
+	cd dynload && ${MAKE} install
+clean:
+	cd dyncall && ${MAKE} $@
+	cd dynload && ${MAKE} $@
+	cd dyncallback && ${MAKE} $@
+	cd test && ${MAKE} $@
+	cd doc && ${MAKE} $@
+tests: tests-libdyncall tests-libdyncallback tests-libdynload
+tests-libdyncall: libdyncall
+	cd test && ${MAKE} all-dyncall
+tests-libdyncallback: libdyncallback
+	cd test && ${MAKE} all-dyncallback
+tests-libdynload: libdynload
+	cd test && ${MAKE} all-dynload
+docs:
+	cd doc && ${MAKE} all
+run-tests: all
+	cd test && ${MAKE} $@
+distclean: clean
+	rm -f Makefile.config
+	find . -type f -name "Makefile.generic" | sed s/\.generic$$// | xargs rm
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = .
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+DIRS = dyncall dynload dyncallback
+
+tests: dummy 
+	!echo Building tests ... && cd test && $(MAKE) /NOLOGO /F Nmakefile && cd ..
+
+doc: dummy 
+	!echo Building documentation ... && cd $@/manual && $(MAKE) /NOLOGO /F Nmakefile && cd ..
+
+# Pseudo-targets are always out of date...
+dummy:
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,122 @@
+dyncall - A Generic Dynamic FFI package
+=======================================
+
+dyncall is a low-level toolkit providing a portable abstraction for 
+handling native code dynamically at run time.
+It comprises three independent components, available as C libraries, namely:
+
+ - 'dyncall' for making function calls,
+ - 'dyncallback' or writing generic callback handlers, and
+ - 'dynload' for loading code.
+
+The package provides abstractions to the Application Binary Interface 
+of various hardware platforms such as x86, AMD64, ARM32/64, PowerPCC32/64,
+MIPS32/64 and SPARC32/64.
+
+Our releases are thoroughly tested across all supported platforms using a
+flexible test suite.
+
+A typical application for the use of dyncall is the back-end of a FFI 
+(foreign function interface) for scripting languages to connect with 
+the C/C++ world.
+
+The binary footprint of the package is approx. 10-20 kb, depending on
+the platform.
+Besides the test suite already mentioned, comprehensive documentation is
+available.
+
+
+Building the libraries
+----------------------
+
+Prequisites: 
+ - C compiler such as gcc, clang, sunpro or msvc.
+ - Assembler such as gas (gnu/apple), fbe or masm.
+ - Build system such as 'shell/make', cmake, nmake (windows) or mk (plan9).
+
+
+Supported Architectures and ABIs:
+---------------------------------
+
+ - x86     32/64-bit  (cdecl, fastcall, stdcall, C++ this calls, syscalls, plan9)
+ - ARM     AArch32/64 (32: ARM/Thumb mode, v4t-v7, oabi/eabi, soft/hardfloat ABIs; 64: AAPCS64)
+ - MIPS    32/64-bit  (o32, n64, eabi)
+ - PowerPC 32/64-bit  (32: Mac OS X, System V; 64: System V little and big endian ELF ABI)
+ - Sparc   32/64-bit  (v7/8 and v9)
+
+NOTE: Callback support is currently available on
+      x86-32/64, arm32 softfloat ABIs, arm64, PPC64 and PPC32 Linux/OS X.
+
+Supported Operating Systems:
+----------------------------
+
+ - Android
+ - *BSD
+ - Haiku
+ - iOS
+ - Linux
+ - Mac OS X
+ - Microsoft Windows
+ - Minix
+ - Nintendo DS Homebrew
+ - Plan9 / 9front
+ - Playstation Portable Homebrew
+ - ReactOS
+ - Solaris
+
+
+Building the libraries
+----------------------
+
+Using configure shell script and GNU/BSD/Sun make system.
+
+$ ./configure
+$ make
+$ make install
+
+Testing:
+
+$ make tests
+$ make run-tests
+
+
+Build 'out-of-source'
+---------------------
+
+$ cd <build_dir>
+$ <src_dir>/configure --prefix=<install_dir>
+$ make
+$ sudo make install
+
+
+Building using CMake
+--------------------
+
+$ cmake 
+$ make
+$ sudo make install
+
+
+Building on Windows
+-------------------
+
+See doc/README.Windows
+
+
+Platform-specific build details
+-------------------------------
+
+See doc/README.*
+
+
+Building the manual
+-------------------
+
+Make sure pdflatex is installed and run
+
+$ make docs
+
+
+Please refer to http://www.dyncall.org, dyncall(3), dyncallback(3), the dyncall
+manual and platform-specific READMEs under doc/ for more information.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ToDo	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,130 @@
+1.0:
+----
+- autovar was never really pushed all the way through and still plays second
+  flute to dyncall_macros.h, clean this all up, eventually (Tassilo: for now, I
+  removed out of sync files to avoid confusion)
+- ppc32 callback fixes on bsd
+- make install should install manpages
+- mailing list announcements (html email?)
+- fix for NDS:
+    * ARM:
+      - callback_plain retval wrong (not only platform)
+    * THUMB:
+      - ellipsis (might be test itself, not respecting fixed part of args)
+      - retvals of call_suite (maybe all retvals, in general)
+      - callback_plain retval
+      - callf
+- fix Minix/x86 callbacks (see callback_suite)
+- fix Linux/rpi callbacks (call_suite)
+- armhf callback support
+
+build-system:
+-------------
+- cmake mac os x universal binary builds with *.S does not build 
+  multiple architectures
+
+portasm:
+--------
+- add solaris support for x64
+
+dyncall:
+--------
+- support for return values: aggregate return values
+- support for argument values: structures, half-precision, vector types, long double
+- varargs for mips (might exist, but test all ABIs)
+- consider automatic type-promotion for arguments passed through DC_CALL_C_ELLIPSIS_VARARGS;
+  this would make it easier to just pass arguments instead of having to know about the C
+  type promotions
+- syscalls for x64
+  * bsd
+  * linux
+- other syscalls
+
+dynload:
+--------
+- bug: test/nm crashes on qemu mips linux o32 debian etch
+- test/resolve_self crashes/asserts on windows and bsds
+- rename SymsInit to InitSyms and similar for cleanup function to reflect naming
+  in dyncall
+- get rid of Dl_info and friends (_GNU_SOURCE) in dynload/dynload_syms_elf.c
+  for implementation of dlSymsNameFromValue(..)
+- check if PSP can support dynload (missing elf.h, dlfcn.h, etc.); fixup readme if successful
+
+dyncallback:
+------------
+- callback_plain's return value not correct anymore on NDS (maybe just broken testcode?)
+- add MIPS callbacks for eabi, n32, o32 (thunks are working)
+- finish PPC32 callbacks (see bugs section, below)
+
+bindings:
+---------
+- release bindings as standalone packages (already done for rbdc as a gem and rdyncall on cran)
+  * add note to documentation, where bindings are and that some bindings are svn-only ATM
+- add rdoc documentation to ruby gem
+- bring python up to latest
+- add pydoc for python
+- add manpage for shdc
+- expose callf-convenience functions to go
+- add godoc for godc
+- bring java up to latest
+- add javadoc to java
+- add more bindings
+- add callback support for erlang, go, java, lua, python and ruby (and shell? how?)
+- add call-conv-mode-support for rbdc through signature
+
+manual:
+-------
+- finish tex4ht manual generation (use \ifhtml and \ifnhtml, ...)
+- provide more examples on how to use dyncall, dynload and dyncallback
+  * e.g. enhance manual with a couple of examples (e.g. calling MessageBoxA on windows, etc.)
+- manuals for bindings (as stated in bindings-section, above)
+
+urgent issues:
+--------------
+- finish SPARC/SPARC64 calling conventions in doc's callconv-appendix !!!
+- Haiku/gmake build doesn't build dynload due to the fact, that elf.h is not found
+  on default installations (one has to install the system headers)
+  * add to doc
+- Solaris/gmake build doesn't build dynload and tests anymore (maybe not even dyncallback)
+- test arm32/ATPCS/THUMB (and then change Status in doc Appendix)
+- look over code and fix TODO or @@@ marks
+- add ppc-support to doc (both, 32 and 64, as well as little and big endian remarks)
+
+nice to have:
+-------------
+- update: microsoft visual c++ build files - integrate all test suites in solution file
+- consistency: on x64 platforms: make both ABIs available ('win64','sysv') for all x64 OS ports
+- microsoft build enhancement: autodetect assembly via C preprocessor (like with .S gcc files)
+- test/thunk: some platforms do not allow for allocation of executable code on heap and stack -- 
+  currently this test will crash, maybe we should collect information which platforms allow and which not.
+
+bugs:
+-----
+- callbacks on ppc32 only work on linux and apple (osx abi), but not BSD
+- vararg function calls don't work for ARM THUMB mode (Daniel's new interface for modesetting for varag
+  args should be used); adapt test/ellipsis and/or retest
+
+missing implementations (descending priority):
+----------------------------------------------
+- riscv
+- itanium
+- 68k, 88k, 6502, etc.
+- alpha
+- superh
+- cell
+- blackfin
+- z80
+- hppa
+- vax
+- atmel avr
+- propeller
+- amd29k
+- arc
+- seaforth
+
+available exotic hardware for outstanding ports:
+------------------------------------------------
+- 68k: Tassilo's old Palm m100 (MC68EZ328 (16MHz))
+- sh4: Tassilo's Dreamcast
+- sigmatel stmp3550b: Daniel's iPod Nano
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/autovar/LICENSE.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,15 @@
+Copyright (c) 2011 Daniel Adler <dadler@uni-goettingen.de> 
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/autovar/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,69 @@
+autovar -- a small macro auto-detection library
+
+
+the following gives the list of variables available.
+for each variable, a separate header file is used.
+
+OS: Operating System
+ARCH: Architecture
+CC: C Compiler
+ABI: Application Binary Interface
+OSFAMILY: OS Roots
+
+
+the following gives the tree of variables
+
+OS: 
+  Win32
+  Win64
+  Darwin
+    IOS
+    MacOSX
+  Linux
+  FreeBSD
+  OpenBSD
+  NetBSD
+  DragonFlyBSD
+  SunOS
+  Cygwin
+  MinGW
+  NDS
+  PSP
+  BeOS
+  Plan9
+  VMS
+  Minix
+  Unknown
+
+ARCH:
+  X86
+  X64
+  IA64
+  PPC
+  PPC64
+  MIPS64
+  MIPS
+  ARM
+    THUMB
+  SH
+  SPARC64
+  SPARC
+
+ABI:
+  PE
+  Mach
+  ELF
+    ELF32
+    ELF64
+
+OSFAMILY: 
+  Windows
+  Unix
+
+CC:
+  INTEL
+  MSVC
+  GNU
+  WATCOM
+  PCC
+  SUN
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/autovar/autovar_ABI.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+/*
+
+ Package: dyncall
+ Library: autovar
+ File: autovar/autovar_ABI.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef AUTOVAR_ABI_H
+#define AUTOVAR_ABI_H
+
+#include "autovar_OS.h"
+
+#if defined(OS_Win32) || defined(OS_Win64) || defined(OS_Cygwin) || defined(OS_MinGW)
+#define ABI_PE
+#elif defined(OS_Darwin)
+#define ABI_Mach
+#else
+#define ABI_ELF
+# if defined(__LP64__) || defined(_LP64)
+#   define ABI_ELF64
+# else
+#   define ABI_ELF32
+# endif
+#endif
+
+#endif /* AUTOVAR_ABI_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/autovar/autovar_ARCH.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,59 @@
+/*
+
+ Package: dyncall
+ Library: autovar
+ File: autovar/autovar_ARCH.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef AUTOVAR_ARCH_H
+#define AUTOVAR_ARCH_H
+
+/* Check architecture. */
+#if defined(_M_IX86) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(__386__) || defined(__i386)
+# define ARCH_X86
+#elif defined(_M_X64_) || defined(_M_AMD64) || defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) 
+# define ARCH_X64
+#elif defined(_M_IA64) || defined(__ia64__)
+# define ARCH_IA64
+#elif defined(_M_PPC) || defined(__powerpc__) || defined(__powerpc) || defined(__POWERPC__) || defined(__ppc__) || defined(__power__)
+# if defined(__ppc64__) || defined(_ARCH_PPC64) || defined(__power64__) || defined(__powerpc64__)
+#   define ARCH_PPC64
+# else
+#   define ARCH_PPC
+# endif
+#elif defined(__mips64__) || defined(__mips64)
+# define ARCH_MIPS64
+#elif defined(_M_MRX000) || defined(__mips__) || defined(__mips) || defined(_mips)
+# define ARCH_MIPS
+#elif defined(__arm__)
+# define ARCH_ARM
+# if defined(__thumb__)
+#   define ARCH_THUMB
+# endif
+#elif defined(__sh__)
+# define ARCH_SH
+#elif defined(__sparcv9) || defined(__sparc64__) || ( defined(__sparc) && defined(__arch64__) ) 
+# define ARCH_SPARC64
+#elif defined(__sparc)
+# define ARCH_SPARC
+#endif
+
+#endif /* AUTOVAR_ARCH_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/autovar/autovar_CC.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,47 @@
+/*
+
+ Package: dyncall
+ Library: autovar
+ File: autovar/autovar_CC.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef AUTOVAR_CC_H
+#define AUTOVAR_CC_H
+
+/* Compiler specific defines. Do not change the order, because  */
+/* some of the compilers define flags for compatible ones, too. */
+
+#if defined(__INTEL_COMPILER)
+#define CC_INTEL
+#elif defined(_MSC_VER)
+#define CC_MSVC
+#elif defined(__GNUC__)
+#define CC_GNU
+#elif defined(__WATCOMC__)
+#define CC_WATCOM
+#elif defined(__PCC__)
+#define CC_PCC
+#elif defined(__SUNPRO_C)
+#define CC_SUN
+#endif
+
+#endif /* AUTOVAR_CC_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/autovar/autovar_OS.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,79 @@
+/*
+
+ Package: dyncall
+ Library: autovar
+ File: autovar/autovar_OS.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef AUTOVAR_OS_H
+#define AUTOVAR_OS_H
+
+#if defined(WIN64) || defined(_WIN64) || defined(__WIN64__)
+#  define OS_Win64
+#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) || defined(__WINDOWS__) || defined(_WINDOWS)
+#  define OS_Win32
+#elif defined(__APPLE__) || defined(__Darwin__)
+#  define OS_Darwin
+#  if defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__)
+#    define OS_IOS
+#  else /* defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) */
+#    define OS_MacOSX
+#  endif
+#elif defined(__linux__) || defined(__linux) || defined(__gnu_linux__)
+#  define OS_Linux
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#  define OS_FreeBSD
+#elif defined(__OpenBSD__)
+#  define OS_OpenBSD
+#elif defined(__NetBSD__)
+#  define OS_NetBSD
+#elif defined(__DragonFly__)
+#  define OS_DragonFlyBSD
+#elif defined(__sun__) || defined(__sun) || defined(sun)
+#  define OS_SunOS
+#elif defined(__CYGWIN__)
+#  define OS_Cygwin
+#elif defined(__MINGW__)
+#  define OS_MinGW
+#elif defined(__nds__)
+#  define OS_NDS
+#elif defined(__psp__) || defined(PSP)
+#  define OS_PSP
+#elif defined(__HAIKU__) || defined(__BEOS__)
+#  define OS_BeOS
+#elif defined(Plan9) || defined(__Plan9__)
+#  define OS_Plan9
+#elif defined(__vms)
+#  define OS_VMS
+#elif defined(__minix)
+#  define OS_Minix
+#else
+#  define OS_Unknown
+#endif
+
+/** Platforms. */
+
+#if defined(__ANDROID__)
+#  define OS_Android
+#endif
+
+#endif /* AUTOVAR_OS */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/autovar/autovar_OSFAMILY.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,40 @@
+/*
+
+ Package: dyncall
+ Library: autovar
+ File: autovar/autovar_OSFAMILY.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef AUTOVAR_OSFAMILY_H
+#define AUTOVAR_OSFAMILY_H
+
+#include "autovar_OS.h"
+
+#if defined(OS_Win32) || defined(OS_Win64)
+#define OSFAMILY_Windows
+#elif defined(OS_NDS) || defined(OS_PSP)
+#define OSFAMILY_GameConsole
+#else
+#define OSFAMILY_Unix
+#endif
+
+#endif /* AUTOVAR_OSFAMILY_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/cmake/Modules/FindDynCall.cmake	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,43 @@
+# - Try to find dyncall library
+#
+#   The following variables will be defined:
+#
+#     DYNCALL_FOUND
+#     DYNCALL_INCLUDE_DIRS
+#     DYNCALL_LIBRARIES
+#
+# ----------------------------------------------------------------------------
+#
+# Package: dyncall
+# File: buildsys/cmake/Modules/CMakeLists.txt
+# Description: CMake Module to find DynCall library
+# License:
+#
+# Copyright (c) 2010,2011 Daniel Adler <dadler@uni-goettingen.de>
+# 
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+find_path(DYNCALL_INCLUDE_DIR NAMES dyncall.h)
+find_library(DYNCALL_LIBRARY dyncall_s)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(DynCall DEFAULT_MSG DYNCALL_LIBRARY DYNCALL_INCLUDE_DIR)
+
+if(DYNCALL_FOUND)
+  set(DYNCALL_INCLUDE_DIRS ${DYNCALL_INCLUDE_DIR})
+  set(DYNCALL_LIBRARIES ${DYNCALL_LIBRARY})
+endif(DYNCALL_FOUND)
+
+mark_as_advanced(DYNCALL_INCLUDE_DIR DYNCALL_LIBRARY)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/cmake/Modules/FindDynCallback.cmake	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,43 @@
+# - Try to find DynLoad library
+#
+#   The following variables will be defined:
+# 
+#     DYNCALLBACK_FOUND
+#     DYNCALLBACK_INCLUDE_DIRS
+#     DYNCALLBACK_LIBRARIES
+#
+# ----------------------------------------------------------------------------
+#
+# Package: dyncall
+# File: buildsys/cmake/Modules/FindDynLoad.cmake
+# Description: CMake Module to find dynload library
+# License:
+#
+# Copyright (c) 2010,2011 Daniel Adler <dadler@uni-goettingen.de>
+# 
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+find_path(DYNCALLBACK_INCLUDE_DIR NAMES dyncall_callback.h)
+find_library(DYNCALLBACK_LIBRARY dyncallback_s)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(DynCallback DEFAULT_MSG DYNCALLBACK_LIBRARY DYNCALLBACK_INCLUDE_DIR)
+
+if(DYNCALLBACK_FOUND)
+  set(DYNCALLBACK_INCLUDE_DIRS ${DYNCALLBACK_INCLUDE_DIR})
+  set(DYNCALLBACK_LIBRARIES ${DYNCALLBACK_LIBRARY})
+endif(DYNCALLBACK_FOUND)
+
+mark_as_advanced(DYNCALLBACK_INCLUDE_DIR DYNCALLBACK_LIBRARY)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/cmake/Modules/FindDynLoad.cmake	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+# - Try to find dynload library
+#
+#   The following variables will be defined:
+#
+#     DYNLOAD_FOUND
+#     DYNLOAD_INCLUDE_DIRS
+#     DYNLOAD_LIBRARIES
+#
+# ----------------------------------------------------------------------------
+#
+# Package: dyncall
+# File: buildsys/cmake/Modules/FindDynLoad.cmake
+# Description: CMake Module to find dynload library
+# License:
+#
+# Copyright (c) 2010-2011 Daniel Adler <dadler@uni-goettingen.de>
+# 
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+find_path(DYNLOAD_INCLUDE_DIR NAMES dynload.h)
+find_library(DYNLOAD_LIBRARY dynload_s)
+
+mark_as_advanced(DYNLOAD_INCLUDE_DIR DYNLOAD_LIBRARY)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(DynLoad DEFAULT_MSG DYNLOAD_LIBRARY DYNLOAD_INCLUDE_DIR)
+
+if(DYNLOAD_FOUND)
+  set(DYNLOAD_INCLUDE_DIRS ${DYNLOAD_INCLUDE_DIR})
+  set(DYNLOAD_LIBRARIES ${DYNLOAD_LIBRARY})
+endif(DYNLOAD_FOUND)
+
+mark_as_advanced(DYNLOAD_INCLUDE_DIR DYNLOAD_LIBRARY)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/cmake/Modules/UseLATEX.cmake	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,811 @@
+# File: UseLATEX.cmake
+# CMAKE commands to actually use the LaTeX compiler
+# Version: 1.7.2
+# Author: Kenneth Moreland (kmorel at sandia dot gov)
+#
+# Copyright 2004 Sandia Corporation.
+# Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
+# license for use of this work by or on behalf of the
+# U.S. Government. Redistribution and use in source and binary forms, with
+# or without modification, are permitted provided that this Notice and any
+# statement of authorship are reproduced on all copies.
+#
+# The following MACROS are defined:
+#
+# ADD_LATEX_DOCUMENT(<tex_file>
+#                       [BIBFILES <bib_files>]
+#                       [INPUTS <input_tex_files>]
+#                       [IMAGE_DIRS] <image_directories>
+#                       [IMAGES] <image_files>
+#                       [CONFIGURE] <tex_files>
+#                       [DEPENDS] <tex_files>
+#                       [USE_INDEX] [USE_GLOSSARY]
+#                       [DEFAULT_PDF] [MANGLE_TARGET_NAMES])
+#       Adds targets that compile <tex_file>.  The latex output is placed
+#       in LATEX_OUTPUT_PATH or CMAKE_CURRENT_BINARY_DIR if the former is
+#       not set.  The latex program is picky about where files are located,
+#       so all input files are copied from the source directory to the
+#       output directory.  This includes the target tex file, any tex file
+#       listed with the INPUTS option, the bibliography files listed with
+#       the BIBFILES option, and any .cls, .bst, and .clo files found in
+#       the current source directory.  Images found in the IMAGE_DIRS
+#       directories or listed by IMAGES are also copied to the output
+#       directory and coverted to an appropriate format if necessary.  Any
+#       tex files also listed with the CONFIGURE option are also processed
+#       with the CMake CONFIGURE_FILE command (with the @ONLY flag.  Any
+#       file listed in CONFIGURE but not the target tex file or listed with
+#       INPUTS has no effect. DEPENDS can be used to specify generated files
+#       that are needed to compile the latex target.
+#
+#       The following targets are made:
+#               dvi: Makes <name>.dvi
+#               pdf: Makes <name>.pdf using pdflatex.
+#               safepdf: Makes <name>.pdf using ps2pdf.  If using the default
+#                       program arguments, this will ensure all fonts are
+#                       embedded and no lossy compression has been performed
+#                       on images.
+#               ps: Makes <name>.ps
+#               html: Makes <name>.html
+#               auxclean: Deletes <name>.aux.  This is sometimes necessary
+#                       if a LaTeX error occurs and writes a bad aux file.
+#
+#       The dvi target is added to the ALL.  That is, it will be the target
+#       built by default.  If the DEFAULT_PDF argument is given, then the
+#       pdf target will be the default instead of dvi.
+#
+#       If the argument MANGLE_TARGET_NAMES is given, then each of the
+#       target names above will be mangled with the <tex_file> name.  This
+#       is to make the targets unique if ADD_LATEX_DOCUMENT is called for
+#       multiple documents.  If the argument USE_INDEX is given, then
+#       commands to build an index are made.  If the argument USE_GLOSSARY
+#       is given, then commands to build a glossary are made.
+#
+# History:
+#
+# 1.7.2 Use ps2pdf to convert eps to pdf to get around the problem with
+#       ImageMagick dropping the bounding box (thanks to Lukasz Lis).
+#
+# 1.7.1 Fixed some dependency issues.
+#
+# 1.7.0 Added DEPENDS options (thanks to Theodore Papadopoulo).
+#
+# 1.6.1 Ported the makeglossaries command to CMake and embedded the port
+#       into UseLATEX.cmake.
+#
+# 1.6.0 Allow the use of the makeglossaries command.  Thanks to Oystein
+#       S. Haaland for the patch.
+#
+# 1.5.0 Allow any type of file in the INPUTS lists, not just tex file
+#       (suggested by Eric Noulard).  As a consequence, the ability to
+#       specify tex files without the .tex extension is removed.  The removed
+#       function is of dubious value anyway.
+#
+#       When copying input files, skip over any file that exists in the
+#       binary directory but does not exist in the source directory with the
+#       assumption that these files were added by some other mechanism.  I
+#       find this useful when creating large documents with multiple
+#       chapters that I want to build separately (for speed) as I work on
+#       them.  I use the same boilerplate as the starting point for all
+#       and just copy it with different configurations.  This was what the
+#       separate ADD_LATEX_DOCUMENT method was supposed to originally be for.
+#       Since its external use is pretty much deprecated, I removed that
+#       documentation.
+#
+# 1.4.1 Copy .sty files along with the other class and package files.
+#
+# 1.4.0 Added a MANGLE_TARGET_NAMES option that will mangle the target names.
+#
+#       Fixed problem with copying bib files that became apparent with
+#       CMake 2.4.
+#
+# 1.3.0 Added a LATEX_OUTPUT_PATH variable that allows you or the user to
+#       specify where the built latex documents to go.  This is especially
+#       handy if you want to do in-source builds.
+#
+#       Removed the ADD_LATEX_IMAGES macro and absorbed the functionality
+#       into ADD_LATEX_DOCUMENT.  The old interface was always kind of
+#       clunky anyway since you had to specify the image directory in both
+#       places.  It also made supporting LATEX_OUTPUT_PATH problematic.
+#
+#       Added support for jpeg files.
+#
+# 1.2.0 Changed the configuration options yet again.  Removed the NO_CONFIGURE
+#       Replaced it with a CONFIGURE option that lists input files for which
+#       configure should be run.
+#
+#       The pdf target no longer depends on the dvi target.  This allows you
+#       to build latex documents that require pdflatex.  Also added an option
+#       to make the pdf target the default one.
+#
+# 1.1.1 Added the NO_CONFIGURE option.  The @ character can be used when
+#       specifying table column separators.  If two or more are used, then
+#       will incorrectly substitute them.
+#
+# 1.1.0 Added ability include multiple bib files.  Added ability to do copy
+#       sub-tex files for multipart tex files.
+#
+# 1.0.0 If both ps and pdf type images exist, just copy the one that
+#       matches the current render mode.  Replaced a bunch of STRING
+#       commands with GET_FILENAME_COMPONENT commands that were made to do
+#       the desired function.
+#
+# 0.4.0 First version posted to CMake Wiki.
+#
+
+#############################################################################
+# Find the location of myself while originally executing.  If you do this
+# inside of a macro, it will recode where the macro was invoked.
+#############################################################################
+SET(LATEX_USE_LATEX_LOCATION ${CMAKE_CURRENT_LIST_FILE}
+  CACHE INTERNAL "Location of UseLATEX.cmake file." FORCE
+  )
+
+#############################################################################
+# Generic helper macros
+#############################################################################
+
+# Helpful list macros.
+MACRO(LATEX_CAR var)
+  SET(${var} ${ARGV1})
+ENDMACRO(LATEX_CAR)
+MACRO(LATEX_CDR var junk)
+  SET(${var} ${ARGN})
+ENDMACRO(LATEX_CDR)
+
+MACRO(LATEX_LIST_CONTAINS var value)
+  SET(${var})
+  FOREACH (value2 ${ARGN})
+    IF (${value} STREQUAL ${value2})
+      SET(${var} TRUE)
+    ENDIF (${value} STREQUAL ${value2})
+  ENDFOREACH (value2)
+ENDMACRO(LATEX_LIST_CONTAINS)
+
+# Parse macro arguments.
+MACRO(LATEX_PARSE_ARGUMENTS prefix arg_names option_names)
+  SET(DEFAULT_ARGS)
+  FOREACH(arg_name ${arg_names})
+    SET(${prefix}_${arg_name})
+  ENDFOREACH(arg_name)
+  FOREACH(option ${option_names})
+    SET(${prefix}_${option})
+  ENDFOREACH(option)
+
+  SET(current_arg_name DEFAULT_ARGS)
+  SET(current_arg_list)
+  FOREACH(arg ${ARGN})
+    LATEX_LIST_CONTAINS(is_arg_name ${arg} ${arg_names})
+    IF (is_arg_name)
+      SET(${prefix}_${current_arg_name} ${current_arg_list})
+      SET(current_arg_name ${arg})
+      SET(current_arg_list)
+    ELSE (is_arg_name)
+      LATEX_LIST_CONTAINS(is_option ${arg} ${option_names})
+      IF (is_option)
+        SET(${prefix}_${arg} TRUE)
+      ELSE (is_option)
+        SET(current_arg_list ${current_arg_list} ${arg})
+      ENDIF (is_option)
+    ENDIF (is_arg_name)
+  ENDFOREACH(arg)
+  SET(${prefix}_${current_arg_name} ${current_arg_list})
+ENDMACRO(LATEX_PARSE_ARGUMENTS)
+
+# Match the contents of a file to a regular expression.
+MACRO(LATEX_FILE_MATCH variable filename regexp default)
+  # The FILE STRINGS command would be a bit better, but it's not supported on
+  # older versions of CMake.
+  FILE(READ ${filename} file_contents)
+  STRING(REGEX MATCHALL "${regexp}"
+    ${variable} ${file_contents}
+    )
+  IF (NOT ${variable})
+    SET(${variable} "${default}")
+  ENDIF (NOT ${variable})
+ENDMACRO(LATEX_FILE_MATCH)
+
+#############################################################################
+# Macros that perform processing during a LaTeX build.
+#############################################################################
+MACRO(LATEX_MAKEGLOSSARIES)
+  MESSAGE("**************************** In makeglossaries")
+  IF (NOT LATEX_TARGET)
+    MESSAGE(SEND_ERROR "Need to define LATEX_TARGET")
+  ENDIF (NOT LATEX_TARGET)
+
+  IF (NOT MAKEINDEX_COMPILER)
+    MESSAGE(SEND_ERROR "Need to define MAKEINDEX_COMPILER")
+  ENDIF (NOT MAKEINDEX_COMPILER)
+
+  SET(aux_file ${LATEX_TARGET}.aux)
+
+  IF (NOT EXISTS ${aux_file})
+    MESSAGE(SEND_ERROR "${aux_file} does not exist.  Run latex on your target file.")
+  ENDIF (NOT EXISTS ${aux_file})
+
+  LATEX_FILE_MATCH(newglossary_lines ${aux_file}
+    "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
+    "@newglossary{main}{glg}{gls}{glo}"
+    )
+
+  LATEX_FILE_MATCH(istfile_line ${aux_file}
+    "@istfilename[ \t]*{([^}]*)}"
+    "@istfilename{${LATEX_TARGET}.ist}"
+    )
+  STRING(REGEX REPLACE "@istfilename[ \t]*{([^}]*)}" "\\1"
+    istfile ${istfile_line}
+    )
+
+  FOREACH(newglossary ${newglossary_lines})
+    STRING(REGEX REPLACE
+      "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
+      "\\1" glossary_name ${newglossary}
+      )
+    STRING(REGEX REPLACE
+      "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
+      "${LATEX_TARGET}.\\2" glossary_log ${newglossary}
+      )
+    STRING(REGEX REPLACE
+      "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
+      "${LATEX_TARGET}.\\3" glossary_out ${newglossary}
+      )
+    STRING(REGEX REPLACE
+      "@newglossary[ \t]*{([^}]*)}{([^}]*)}{([^}]*)}{([^}]*)}"
+      "${LATEX_TARGET}.\\4" glossary_in ${newglossary}
+      )
+    MESSAGE("${MAKEINDEX_COMPILER} ${MAKEGLOSSARIES_COMPILER_FLAGS} -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}")
+    EXEC_PROGRAM(${MAKEINDEX_COMPILER} ARGS ${MAKEGLOSSARIES_COMPILER_FLAGS}
+      -s ${istfile} -t ${glossary_log} -o ${glossary_out} ${glossary_in}
+      )
+  ENDFOREACH(newglossary)
+ENDMACRO(LATEX_MAKEGLOSSARIES)
+
+#############################################################################
+# Helper macros for establishing LaTeX build.
+#############################################################################
+
+MACRO(LATEX_NEEDIT VAR NAME)
+  IF (NOT ${VAR})
+    MESSAGE(SEND_ERROR "I need the ${NAME} command.")
+  ENDIF(NOT ${VAR})
+ENDMACRO(LATEX_NEEDIT)
+
+MACRO(LATEX_WANTIT VAR NAME)
+  IF (NOT ${VAR})
+    MESSAGE(STATUS "I could not find the ${NAME} command.")
+  ENDIF(NOT ${VAR})
+ENDMACRO(LATEX_WANTIT)
+
+MACRO(LATEX_SETUP_VARIABLES)
+  SET(LATEX_OUTPUT_PATH "${LATEX_OUTPUT_PATH}"
+    CACHE PATH "If non empty, specifies the location to place LaTeX output."
+    )
+
+  FIND_PACKAGE(LATEX)
+
+  MARK_AS_ADVANCED(CLEAR
+    LATEX_COMPILER
+    PDFLATEX_COMPILER
+    BIBTEX_COMPILER
+    MAKEINDEX_COMPILER
+    DVIPS_CONVERTER
+    PS2PDF_CONVERTER
+    LATEX2HTML_CONVERTER
+    )
+
+  LATEX_NEEDIT(LATEX_COMPILER latex)
+  LATEX_WANTIT(PDFLATEX_COMPILER pdflatex)
+  LATEX_NEEDIT(BIBTEX_COMPILER bibtex)
+  LATEX_NEEDIT(MAKEINDEX_COMPILER makeindex)
+  LATEX_WANTIT(DVIPS_CONVERTER dvips)
+  LATEX_WANTIT(PS2PDF_CONVERTER ps2pdf)
+  LATEX_WANTIT(LATEX2HTML_CONVERTER latex2html)
+
+  SET(LATEX_COMPILER_FLAGS "-interaction=nonstopmode"
+    CACHE STRING "Flags passed to latex.")
+  SET(PDFLATEX_COMPILER_FLAGS ${LATEX_COMPILER_FLAGS}
+    CACHE STRING "Flags passed to pdflatex.")
+  SET(BIBTEX_COMPILER_FLAGS ""
+    CACHE STRING "Flags passed to bibtex.")
+  SET(MAKEINDEX_COMPILER_FLAGS ""
+    CACHE STRING "Flags passed to makeindex.")
+  SET(MAKEGLOSSARIES_COMPILER_FLAGS ""
+    CACHE STRING "Flags passed to makeglossaries.")
+  SET(DVIPS_CONVERTER_FLAGS "-Ppdf -G0 -t letter"
+    CACHE STRING "Flags passed to dvips.")
+  SET(PS2PDF_CONVERTER_FLAGS "-dMaxSubsetPct=100 -dCompatibilityLevel=1.3 -dSubsetFonts=true -dEmbedAllFonts=true -dAutoFilterColorImages=false -dAutoFilterGrayImages=false -dColorImageFilter=/FlateEncode -dGrayImageFilter=/FlateEncode -dMonoImageFilter=/FlateEncode"
+    CACHE STRING "Flags passed to ps2pdf.")
+  SET(LATEX2HTML_CONVERTER_FLAGS ""
+    CACHE STRING "Flags passed to latex2html.")
+  MARK_AS_ADVANCED(
+    LATEX_COMPILER_FLAGS
+    PDFLATEX_COMPILER_FLAGS
+    BIBTEX_COMPILER_FLAGS
+    MAKEINDEX_COMPILER_FLAGS
+    MAKEGLOSSARIES_COMPILER_FLAGS
+    DVIPS_CONVERTER_FLAGS
+    PS2PDF_CONVERTER_FLAGS
+    LATEX2HTML_CONVERTER_FLAGS
+    )
+  SEPARATE_ARGUMENTS(LATEX_COMPILER_FLAGS)
+  SEPARATE_ARGUMENTS(PDFLATEX_COMPILER_FLAGS)
+  SEPARATE_ARGUMENTS(BIBTEX_COMPILER_FLAGS)
+  SEPARATE_ARGUMENTS(MAKEINDEX_COMPILER_FLAGS)
+  SEPARATE_ARGUMENTS(MAKEGLOSSARIES_COMPILER_FLAGS)
+  SEPARATE_ARGUMENTS(DVIPS_CONVERTER_FLAGS)
+  SEPARATE_ARGUMENTS(PS2PDF_CONVERTER_FLAGS)
+  SEPARATE_ARGUMENTS(LATEX2HTML_CONVERTER_FLAGS)
+
+  FIND_PROGRAM(IMAGEMAGICK_CONVERT convert
+    DOC "The convert program that comes with ImageMagick (available at http://www.imagemagick.org)."
+    )
+  IF (NOT IMAGEMAGICK_CONVERT)
+    MESSAGE(SEND_ERROR "Could not find convert program.  Please download ImageMagick from http://www.imagemagick.org and install.")
+  ENDIF (NOT IMAGEMAGICK_CONVERT)
+
+  OPTION(LATEX_SMALL_IMAGES
+    "If on, the raster images will be converted to 1/6 the original size.  This is because papers usually require 600 dpi images whereas most monitors only require at most 96 dpi.  Thus, smaller images make smaller files for web distributation and can make it faster to read dvi files."
+    OFF)
+  IF (LATEX_SMALL_IMAGES)
+    SET(LATEX_RASTER_SCALE 16)
+    SET(LATEX_OPPOSITE_RASTER_SCALE 100)
+  ELSE (LATEX_SMALL_IMAGES)
+    SET(LATEX_RASTER_SCALE 100)
+    SET(LATEX_OPPOSITE_RASTER_SCALE 16)
+  ENDIF (LATEX_SMALL_IMAGES)
+
+  # Just holds extensions for known image types.  They should all be lower case.
+  SET(LATEX_DVI_VECTOR_IMAGE_EXTENSIONS .eps)
+  SET(LATEX_DVI_RASTER_IMAGE_EXTENSIONS)
+  SET(LATEX_DVI_IMAGE_EXTENSIONS
+    ${LATEX_DVI_VECTOR_IMAGE_EXTENSIONS} ${LATEX_DVI_RASTER_IMAGE_EXTENSIONS})
+  SET(LATEX_PDF_VECTOR_IMAGE_EXTENSIONS .pdf)
+  SET(LATEX_PDF_RASTER_IMAGE_EXTENSIONS .png .jpeg .jpg)
+  SET(LATEX_PDF_IMAGE_EXTENSIONS
+    ${LATEX_PDF_VECTOR_IMAGE_EXTENSIONS} ${LATEX_PDF_RASTER_IMAGE_EXTENSIONS})
+  SET(LATEX_IMAGE_EXTENSIONS
+    ${LATEX_DVI_IMAGE_EXTENSIONS} ${LATEX_PDF_IMAGE_EXTENSIONS})
+ENDMACRO(LATEX_SETUP_VARIABLES)
+
+MACRO(LATEX_GET_OUTPUT_PATH var)
+  SET(${var})
+  IF (LATEX_OUTPUT_PATH)
+    IF ("${LATEX_OUTPUT_PATH}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
+      MESSAGE(SEND_ERROR "You cannot set LATEX_OUTPUT_PATH to the same directory that contains LaTeX input files.")
+    ELSE ("${LATEX_OUTPUT_PATH}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
+      SET(${var} "${LATEX_OUTPUT_PATH}")
+    ENDIF ("${LATEX_OUTPUT_PATH}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
+  ELSE (LATEX_OUTPUT_PATH)
+    IF ("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
+      MESSAGE(SEND_ERROR "LaTeX files must be built out of source or you must set LATEX_OUTPUT_PATH.")
+    ELSE ("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
+      SET(${var} "${CMAKE_CURRENT_BINARY_DIR}")
+    ENDIF ("${CMAKE_CURRENT_BINARY_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}")
+  ENDIF (LATEX_OUTPUT_PATH)
+ENDMACRO(LATEX_GET_OUTPUT_PATH)
+
+MACRO(LATEX_ADD_CONVERT_COMMAND output_path input_path output_extension
+        input_extension flags)
+  SET (converter ${IMAGEMAGICK_CONVERT})
+  SET (convert_flags "")
+  # ImageMagick has broken eps to pdf conversion
+  # use ps2pdf instead
+  IF (${input_extension} STREQUAL ".eps" AND ${output_extension} STREQUAL ".pdf")
+    IF (PS2PDF_CONVERTER)
+      SET (converter ${PS2PDF_CONVERTER})
+      SET (convert_flags "-dEPSCrop ${flags}")
+    ELSE (PS2PDF_CONVERTER)
+      MESSAGE(SEND_ERROR "Using postscript files with pdflatex requires ps2pdf for conversion.")
+    ENDIF (PS2PDF_CONVERTER)
+  ELSE (${input_extension} STREQUAL ".eps" AND ${output_extension} STREQUAL ".pdf")
+    SET (convert_flags ${flags})
+  ENDIF (${input_extension} STREQUAL ".eps" AND ${output_extension} STREQUAL ".pdf")
+
+  ADD_CUSTOM_COMMAND(OUTPUT ${output_path}
+    COMMAND ${converter}
+      ARGS ${convert_flags} ${input_path} ${output_path}
+    DEPENDS ${input_path}
+    )
+ENDMACRO(LATEX_ADD_CONVERT_COMMAND)
+
+# Makes custom commands to convert a file to a particular type.
+MACRO(LATEX_CONVERT_IMAGE output_files input_file output_extension convert_flags
+    output_extensions other_files)
+  SET(input_dir ${CMAKE_CURRENT_SOURCE_DIR})
+  LATEX_GET_OUTPUT_PATH(output_dir)
+
+  GET_FILENAME_COMPONENT(extension "${input_file}" EXT)
+
+  STRING(REGEX REPLACE "\\.[^.]*\$" ${output_extension} output_file
+    "${input_file}")
+
+  LATEX_LIST_CONTAINS(is_type ${extension} ${output_extensions})
+  IF (is_type)
+    IF (convert_flags)
+      LATEX_ADD_CONVERT_COMMAND(${output_dir}/${output_file}
+        ${input_dir}/${input_file} ${output_extension} ${extension}
+        "${convert_flags}")
+      SET(${output_files} ${${output_files}} ${output_dir}/${output_file})
+    ELSE (convert_flags)
+      # As a shortcut, we can just copy the file.
+      ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${input_file}
+        COMMAND ${CMAKE_COMMAND}
+        ARGS -E copy ${input_dir}/${input_file} ${output_dir}/${input_file}
+        DEPENDS ${input_dir}/${input_file}
+        )
+      SET(${output_files} ${${output_files}} ${output_dir}/${input_file})
+    ENDIF (convert_flags)
+  ELSE (is_type)
+    SET(do_convert TRUE)
+    # Check to see if there is another input file of the appropriate type.
+    FOREACH(valid_extension ${output_extensions})
+      STRING(REGEX REPLACE "\\.[^.]*\$" ${output_extension} try_file
+        "${input_file}")
+      LATEX_LIST_CONTAINS(has_native_file "${try_file}" ${other_files})
+      IF (has_native_file)
+        SET(do_convert FALSE)
+      ENDIF (has_native_file)
+    ENDFOREACH(valid_extension)
+
+    # If we still need to convert, do it.
+    IF (do_convert)
+      LATEX_ADD_CONVERT_COMMAND(${output_dir}/${output_file}
+        ${input_dir}/${input_file} ${output_extension} ${extension}
+        "${convert_flags}")
+      SET(${output_files} ${${output_files}} ${output_dir}/${output_file})
+    ENDIF (do_convert)
+  ENDIF (is_type)
+ENDMACRO(LATEX_CONVERT_IMAGE)
+
+# Adds custom commands to process the given files for dvi and pdf builds.
+# Adds the output files to the given variables (does not replace).
+MACRO(LATEX_PROCESS_IMAGES dvi_outputs pdf_outputs)
+  LATEX_GET_OUTPUT_PATH(output_dir)
+  FOREACH(file ${ARGN})
+    IF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
+      GET_FILENAME_COMPONENT(extension "${file}" EXT)
+      SET(convert_flags)
+
+      # Check to see if we need to downsample the image.
+      LATEX_LIST_CONTAINS(is_raster extension
+        ${LATEX_DVI_RASTER_IMAGE_EXTENSIONS}
+        ${LATEX_PDF_RASTER_IMAGE_EXTENSIONS})
+      IF (LATEX_SMALL_IMAGES)
+        IF (is_raster)
+          SET(convert_flags -resize ${LATEX_RASTER_SCALE}%)
+        ENDIF (is_raster)
+      ENDIF (LATEX_SMALL_IMAGES)
+
+      # Make sure the output directory exists.
+      GET_FILENAME_COMPONENT(path "${output_dir}/${file}" PATH)
+      MAKE_DIRECTORY("${path}")
+
+      # Do conversions for dvi.
+      LATEX_CONVERT_IMAGE(${dvi_outputs} "${file}" .eps "${convert_flags}"
+        "${LATEX_DVI_IMAGE_EXTENSIONS}" "${ARGN}")
+
+      # Do conversions for pdf.
+      IF (is_raster)
+        LATEX_CONVERT_IMAGE(${pdf_outputs} "${file}" .png "${convert_flags}"
+          "${LATEX_PDF_IMAGE_EXTENSIONS}" "${ARGN}")
+      ELSE (is_raster)
+        LATEX_CONVERT_IMAGE(${pdf_outputs} "${file}" .pdf "${convert_flags}"
+          "${LATEX_PDF_IMAGE_EXTENSIONS}" "${ARGN}")
+      ENDIF (is_raster)
+    ELSE (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
+      MESSAGE("Could not find file \"${CMAKE_CURRENT_SOURCE_DIR}/${file}\"")
+    ENDIF (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
+  ENDFOREACH(file)
+ENDMACRO(LATEX_PROCESS_IMAGES)
+
+MACRO(ADD_LATEX_IMAGES)
+  MESSAGE("The ADD_LATEX_IMAGES macro is deprecated.  Image directories are specified with LATEX_ADD_DOCUMENT.")
+ENDMACRO(ADD_LATEX_IMAGES)
+
+MACRO(LATEX_COPY_GLOBBED_FILES pattern dest)
+  FILE(GLOB file_list ${pattern})
+  FOREACH(in_file ${file_list})
+    GET_FILENAME_COMPONENT(out_file ${in_file} NAME)
+    CONFIGURE_FILE(${in_file} ${dest}/${out_file} COPYONLY)
+  ENDFOREACH(in_file)
+ENDMACRO(LATEX_COPY_GLOBBED_FILES)
+
+MACRO(LATEX_COPY_INPUT_FILE file)
+  LATEX_GET_OUTPUT_PATH(output_dir)
+
+  IF (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file})
+    GET_FILENAME_COMPONENT(path ${file} PATH)
+    FILE(MAKE_DIRECTORY ${output_dir}/${path})
+
+    LATEX_LIST_CONTAINS(use_config ${file} ${LATEX_CONFIGURE})
+    IF (use_config)
+      CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file}
+        ${output_dir}/${file}
+        @ONLY
+        )
+      ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${file}
+        COMMAND ${CMAKE_COMMAND}
+        ARGS ${CMAKE_BINARY_DIR}
+        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file}
+        )
+    ELSE (use_config)
+      ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${file}
+        COMMAND ${CMAKE_COMMAND}
+        ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${file} ${output_dir}/${file}
+        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${file}
+        )
+    ENDIF (use_config)
+  ELSE (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file})
+    IF (EXISTS ${output_dir}/${file})
+      # Special case: output exists but input does not.  Assume that it was
+      # created elsewhere and skip the input file copy.
+    ELSE (EXISTS ${output_dir}/${file})
+      MESSAGE("Could not find input file ${CMAKE_CURRENT_SOURCE_DIR}/${file}")
+    ENDIF (EXISTS ${output_dir}/${file})
+  ENDIF (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file})
+ENDMACRO(LATEX_COPY_INPUT_FILE)
+
+#############################################################################
+# Commands provided by the UseLATEX.cmake "package"
+#############################################################################
+
+MACRO(LATEX_USAGE command message)
+  MESSAGE(SEND_ERROR
+    "${message}\nUsage: ${command}(<tex_file>\n           [BIBFILES <bib_file> <bib_file> ...]\n           [INPUTS <tex_file> <tex_file> ...]\n           [IMAGE_DIRS <directory1> <directory2> ...]\n           [IMAGES <image_file1> <image_file2>\n           [CONFIGURE <tex_file> <tex_file> ...]\n           [DEPENDS <tex_file> <tex_file> ...]\n           [USE_INDEX] [USE_GLOSSARY] [DEFAULT_PDF] [MANGLE_TARGET_NAMES])"
+    )
+ENDMACRO(LATEX_USAGE command message)
+
+# Parses arguments to ADD_LATEX_DOCUMENT and ADD_LATEX_TARGETS and sets the
+# variables LATEX_TARGET, LATEX_IMAGE_DIR, LATEX_BIBFILES, LATEX_DEPENDS, and
+# LATEX_INPUTS.
+MACRO(PARSE_ADD_LATEX_ARGUMENTS command)
+  LATEX_PARSE_ARGUMENTS(
+    LATEX
+    "BIBFILES;INPUTS;IMAGE_DIRS;IMAGES;CONFIGURE;DEPENDS"
+    "USE_INDEX;USE_GLOSSARY;USE_GLOSSARIES;DEFAULT_PDF;MANGLE_TARGET_NAMES"
+    ${ARGN}
+    )
+
+  # The first argument is the target latex file.
+  IF (LATEX_DEFAULT_ARGS)
+    LATEX_CAR(LATEX_MAIN_INPUT ${LATEX_DEFAULT_ARGS})
+    LATEX_CDR(LATEX_DEFAULT_ARGS ${LATEX_DEFAULT_ARGS})
+    GET_FILENAME_COMPONENT(LATEX_TARGET ${LATEX_MAIN_INPUT} NAME_WE)
+  ELSE (LATEX_DEFAULT_ARGS)
+    LATEX_USAGE(${command} "No tex file target given to ${command}.")
+  ENDIF (LATEX_DEFAULT_ARGS)
+
+  IF (LATEX_DEFAULT_ARGS)
+    LATEX_USAGE(${command} "Invalid or depricated arguments: ${LATEX_DEFAULT_ARGS}")
+  ENDIF (LATEX_DEFAULT_ARGS)
+
+  # Backward compatibility between 1.6.0 and 1.6.1.
+  IF (LATEX_USE_GLOSSARIES)
+    SET(LATEX_USE_GLOSSARY TRUE)
+  ENDIF (LATEX_USE_GLOSSARIES)
+ENDMACRO(PARSE_ADD_LATEX_ARGUMENTS)
+
+MACRO(ADD_LATEX_TARGETS)
+  LATEX_GET_OUTPUT_PATH(output_dir)
+  PARSE_ADD_LATEX_ARGUMENTS(ADD_LATEX_TARGETS ${ARGV})
+
+  # Set up target names.
+  IF (LATEX_MANGLE_TARGET_NAMES)
+    SET(dvi_target      ${LATEX_TARGET}_dvi)
+    SET(pdf_target      ${LATEX_TARGET}_pdf)
+    SET(ps_target       ${LATEX_TARGET}_ps)
+    SET(safepdf_target  ${LATEX_TARGET}_safepdf)
+    SET(html_target     ${LATEX_TARGET}_html)
+    SET(auxclean_target ${LATEX_TARGET}_auxclean)
+  ELSE (LATEX_MANGLE_TARGET_NAMES)
+    SET(dvi_target      dvi)
+    SET(pdf_target      pdf)
+    SET(ps_target       ps)
+    SET(safepdf_target  safepdf)
+    SET(html_target     html)
+    SET(auxclean_target auxclean)
+  ENDIF (LATEX_MANGLE_TARGET_NAMES)
+
+  # For each directory in LATEX_IMAGE_DIRS, glob all the image files and
+  # place them in LATEX_IMAGES.
+  FOREACH(dir ${LATEX_IMAGE_DIRS})
+    FOREACH(extension ${LATEX_IMAGE_EXTENSIONS})
+      FILE(GLOB files ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/*${extension})
+      FOREACH(file ${files})
+        GET_FILENAME_COMPONENT(filename ${file} NAME)
+        SET(LATEX_IMAGES ${LATEX_IMAGES} ${dir}/${filename})
+      ENDFOREACH(file)
+    ENDFOREACH(extension)
+  ENDFOREACH(dir)
+
+  SET(dvi_images)
+  SET(pdf_images)
+  LATEX_PROCESS_IMAGES(dvi_images pdf_images ${LATEX_IMAGES})
+
+  SET(make_dvi_command
+    ${CMAKE_COMMAND} -E chdir ${output_dir}
+    ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT})
+  SET(make_pdf_command
+    ${CMAKE_COMMAND} -E chdir ${output_dir}
+    ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT})
+
+  SET(make_dvi_depends ${LATEX_DEPENDS} ${dvi_images})
+  SET(make_pdf_depends ${LATEX_DEPENDS} ${pdf_images})
+  FOREACH(input ${LATEX_MAIN_INPUT} ${LATEX_INPUTS})
+    SET(make_dvi_depends ${make_dvi_depends} ${output_dir}/${input})
+    SET(make_pdf_depends ${make_pdf_depends} ${output_dir}/${input})
+  ENDFOREACH(input)
+
+  IF (LATEX_BIBFILES)
+    SET(make_dvi_command ${make_dvi_command}
+      COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+      ${BIBTEX_COMPILER} ${BIBTEX_COMPILER_FLAGS} ${LATEX_TARGET})
+    SET(make_pdf_command ${make_pdf_command}
+      COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+      ${BIBTEX_COMPILER} ${BIBTEX_COMPILER_FLAGS} ${LATEX_TARGET})
+    FOREACH (bibfile ${LATEX_BIBFILES})
+      SET(make_dvi_depends ${make_dvi_depends} ${output_dir}/${bibfile})
+      SET(make_pdf_depends ${make_pdf_depends} ${output_dir}/${bibfile})
+    ENDFOREACH (bibfile ${LATEX_BIBFILES})
+  ENDIF (LATEX_BIBFILES)
+
+  IF (LATEX_USE_INDEX)
+    SET(make_dvi_command ${make_dvi_command}
+      COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+      ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}
+      COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+      ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_FLAGS} ${LATEX_TARGET}.idx)
+    SET(make_pdf_command ${make_pdf_command}
+      COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+      ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}
+      COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+      ${MAKEINDEX_COMPILER} ${MAKEINDEX_COMPILER_FLAGS} ${LATEX_TARGET}.idx)
+  ENDIF (LATEX_USE_INDEX)
+
+  IF (LATEX_USE_GLOSSARY)
+    SET(make_dvi_command ${make_dvi_command}
+      COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+      ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}
+      COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+      ${CMAKE_COMMAND}
+      -D LATEX_BUILD_COMMAND=makeglossaries
+      -D LATEX_TARGET=${LATEX_TARGET}
+      -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
+      -D MAKEGLOSSARIES_COMPILER_FLAGS=${MAKEGLOSSARIES_COMPILER_FLAGS}
+      -P ${LATEX_USE_LATEX_LOCATION}
+      )
+    SET(make_pdf_command ${make_pdf_command}
+      COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+      ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}
+      COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+      ${CMAKE_COMMAND}
+      -D LATEX_BUILD_COMMAND=makeglossaries
+      -D LATEX_TARGET=${LATEX_TARGET}
+      -D MAKEINDEX_COMPILER=${MAKEINDEX_COMPILER}
+      -D MAKEGLOSSARIES_COMPILER_FLAGS=${MAKEGLOSSARIES_COMPILER_FLAGS}
+      -P ${LATEX_USE_LATEX_LOCATION}
+      )
+  ENDIF (LATEX_USE_GLOSSARY)
+
+  SET(make_dvi_command ${make_dvi_command}
+    COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+    ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}
+    COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+    ${LATEX_COMPILER} ${LATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT})
+  SET(make_pdf_command ${make_pdf_command}
+    COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+    ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT}
+    COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+    ${PDFLATEX_COMPILER} ${PDFLATEX_COMPILER_FLAGS} ${LATEX_MAIN_INPUT})
+
+  # Add commands and targets for building dvi outputs.
+  ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${LATEX_TARGET}.dvi
+    COMMAND ${make_dvi_command}
+    DEPENDS ${make_dvi_depends}
+    )
+  IF (LATEX_DEFAULT_PDF)
+    ADD_CUSTOM_TARGET(${dvi_target}
+      DEPENDS ${output_dir}/${LATEX_TARGET}.dvi)
+  ELSE (LATEX_DEFAULT_PDF)
+    ADD_CUSTOM_TARGET(${dvi_target} ALL
+      DEPENDS ${output_dir}/${LATEX_TARGET}.dvi)
+  ENDIF (LATEX_DEFAULT_PDF)
+
+  # Add commands and targets for building pdf outputs (with pdflatex).
+  IF (PDFLATEX_COMPILER)
+    ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${LATEX_TARGET}.pdf
+      COMMAND ${make_pdf_command}
+      DEPENDS ${make_pdf_depends}
+      )
+    IF (LATEX_DEFAULT_PDF)
+      ADD_CUSTOM_TARGET(${pdf_target} ALL
+        DEPENDS ${output_dir}/${LATEX_TARGET}.pdf)
+    ELSE (LATEX_DEFAULT_PDF)
+      ADD_CUSTOM_TARGET(${pdf_target}
+        DEPENDS ${output_dir}/${LATEX_TARGET}.pdf)
+    ENDIF (LATEX_DEFAULT_PDF)
+  ENDIF (PDFLATEX_COMPILER)
+
+  IF (DVIPS_CONVERTER)
+    ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${LATEX_TARGET}.ps
+      COMMAND ${CMAKE_COMMAND} -E chdir ${output_dir}
+        ${DVIPS_CONVERTER} ${DVIPS_CONVERTER_FLAGS} -o ${LATEX_TARGET}.ps ${LATEX_TARGET}.dvi
+      DEPENDS ${output_dir}/${LATEX_TARGET}.dvi)
+    ADD_CUSTOM_TARGET(${ps_target}
+      DEPENDS ${output_dir}/${LATEX_TARGET}.ps)
+    IF (PS2PDF_CONVERTER)
+      # Since both the pdf and safepdf targets have the same output, we
+      # cannot properly do the dependencies for both.  When selecting safepdf,
+      # simply force a recompile every time.
+      ADD_CUSTOM_TARGET(${safepdf_target}
+        ${CMAKE_COMMAND} -E chdir ${output_dir}
+        ${PS2PDF_CONVERTER} ${PS2PDF_CONVERTER_FLAGS} ${LATEX_TARGET}.ps ${LATEX_TARGET}.pdf
+        )
+      ADD_DEPENDENCIES(${safepdf_target} ${ps_target})
+    ENDIF (PS2PDF_CONVERTER)
+  ENDIF (DVIPS_CONVERTER)
+
+  IF (LATEX2HTML_CONVERTER)
+    ADD_CUSTOM_TARGET(${html_target}
+      ${CMAKE_COMMAND} -E chdir ${output_dir}
+      ${LATEX2HTML_CONVERTER} ${LATEX2HTML_CONVERTER_FLAGS} ${LATEX_MAIN_INPUT}
+      )
+    ADD_DEPENDENCIES(${html_target} ${LATEX_MAIN_INPUT} ${LATEX_INPUTS})
+  ENDIF (LATEX2HTML_CONVERTER)
+
+  ADD_CUSTOM_TARGET(${auxclean_target}
+    ${CMAKE_COMMAND} -E remove ${output_dir}/${LATEX_TARGET}.aux ${output_dir}/${LATEX_TARGET}.idx ${output_dir}/${LATEX_TARGET}.ind
+    )
+ENDMACRO(ADD_LATEX_TARGETS)
+
+MACRO(ADD_LATEX_DOCUMENT)
+  LATEX_GET_OUTPUT_PATH(output_dir)
+  IF (output_dir)
+    PARSE_ADD_LATEX_ARGUMENTS(ADD_LATEX_DOCUMENT ${ARGV})
+
+    LATEX_COPY_INPUT_FILE(${LATEX_MAIN_INPUT})
+
+    FOREACH (bib_file ${LATEX_BIBFILES})
+      CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${bib_file}
+        ${output_dir}/${bib_file}
+        COPYONLY)
+      ADD_CUSTOM_COMMAND(OUTPUT ${output_dir}/${bib_file}
+        COMMAND ${CMAKE_COMMAND}
+        ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${bib_file} ${output_dir}/${bib_file}
+        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${bib_file}
+        )
+    ENDFOREACH (bib_file)
+
+    FOREACH (input ${LATEX_INPUTS})
+      LATEX_COPY_INPUT_FILE(${input})
+    ENDFOREACH(input)
+
+    LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.cls ${output_dir})
+    LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.bst ${output_dir})
+    LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.clo ${output_dir})
+    LATEX_COPY_GLOBBED_FILES(${CMAKE_CURRENT_SOURCE_DIR}/*.sty ${output_dir})
+
+    ADD_LATEX_TARGETS(${ARGV})
+  ENDIF (output_dir)
+ENDMACRO(ADD_LATEX_DOCUMENT)
+
+#############################################################################
+# Actually do stuff
+#############################################################################
+
+IF (LATEX_BUILD_COMMAND)
+  SET(command_handled)
+
+  IF ("${LATEX_BUILD_COMMAND}" STREQUAL makeglossaries)
+    LATEX_MAKEGLOSSARIES()
+    SET(command_handled TRUE)
+  ENDIF ("${LATEX_BUILD_COMMAND}" STREQUAL makeglossaries)
+
+  IF (NOT command_handled)
+    MESSAGE(SEND_ERROR "Unknown command: ${LATEX_BUILD_COMMAND}")
+  ENDIF (NOT command_handled)
+
+ELSE (LATEX_BUILD_COMMAND)
+  # Must be part of the actual configure (included from CMakeLists.txt).
+  LATEX_SETUP_VARIABLES()
+ENDIF (LATEX_BUILD_COMMAND)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/dynmake/Makefile.base.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,82 @@
+#include "../../dyncall/dyncall_macros.h"
+
+#if defined(DC_WINDOWS) && defined(MAKE_CMD_nmake)
+
+/* Abstractions */
+#define _(X)      $(X)         /* Standard variables */
+#define _L(X)     X.lib
+#define _O(X)     X.obj
+
+#define TARGET   @
+#define PREREQS  **
+
+/* Makefile internal vars for platform abstraction */
+MAKEFLAGS_USER = /NOLOGO
+MAKEFLAG_FILE = /f
+MAKE_DEFAULT_FILE = dynMakefile
+SHELL_COMMAND_SEPARATOR = &&
+
+AR = lib
+ARFLAGS_USER = /NOLOGO
+ARFLAGS = 
+ARFLAG_OUT_PREFIX = /OUT:
+
+CFLAGS_USER      = /nologo /I..\dyncall /I..\dyncallback
+CFLAGS           = _(CFLAGS) _(CFLAGS_USER)
+
+LDFLAGS_USER      = /nologo /L..\dyncall /L..\dyncallback
+LDFLAGS           = _(LDFLAGS) _(LDFLAGS_USER)
+LDFLAG_IN_PREFIX  =
+LDFLAG_OUT_PREFIX = /OUT:
+
+ASFLAGS_USER = /nologo
+AFLAGS       = _(AFLAGS) _(ASFLAGS_USER)  /* Set AFLAGS (without 'S'), which is the standard nmake predefined macro for MASM */
+ASFLAGS      = _(AFLAGS)
+
+RM = del
+
+.SUFFIXES : .S
+
+.S.obj:
+	cl /nologo /EP $< > $*.asm
+	_(AS) _(ASFLAGS) /c $*.asm
+	del $*.asm
+
+
+#else
+
+/* Abstractions */
+#define _(X)      ${X}         /* Standard variables */
+#define _L(X)     lib##X.a
+#define _O(X)     X.o
+
+#define TARGET   @
+#if defined(MAKE_CMD_gmake) || (defined(DC__OS_Linux) && !defined(MAKE_CMD_bsdmake)) || (defined(DC__OS_Darwin) && !defined(MAKE_CMD_bsdmake)) || (defined(DC__OS_SunOS) && !defined(MAKE_CMD_bsdmake))
+#  define PREREQS  ^
+#else
+#  define PREREQS  >
+#endif
+
+
+/* Makefile internal vars for platform abstraction */
+MAKEFLAGS_USER = 
+MAKEFLAG_FILE = -f
+MAKE_DEFAULT_FILE = dynMakefile
+SHELL_COMMAND_SEPARATOR = ;
+
+ARFLAG_OUT_PREFIX = 
+
+CFLAGS_USER = -I ../dyncall -I ../dyncallback
+CFLAGS     += _(CFLAGS_USER)
+
+LDFLAGS_USER      = -L../../dyncall -L../../dyncallback
+LDFLAGS          += _(LDFLAGS_USER)
+LDFLAG_IN_PREFIX  = -l
+LDFLAG_OUT_PREFIX = -o
+
+ASFLAGS_USER = 
+
+RM = rm -f
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/dynmake/dynmake.bat	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,2 @@
+cl /nologo /DMAKE_CMD_%~n2 /EP Makefile.M 1> Makefile.dynmake
+%2 /NOLOGO /f Makefile.dynmake %1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/dynmake/dynmake.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+#!/bin/sh
+#cpp -D MAKE_CMD_$2 -P Makefile.M | sed "s/^  */	/" > Makefile.dynmake
+gcc -D MAKE_CMD_$2 -E -P -x c Makefile.M | sed "s/^  */	/" > Makefile.dynmake
+$2 -f Makefile.dynmake $1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/lua/Makefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,10 @@
+DL=wget
+all: lua-5.1.4
+
+lua-5.1.4.tar.gz: 
+	${DL} http://www.lua.org/ftp/lua-5.1.4.tar.gz
+lua-5.1.4: lua-5.1.4.tar.gz
+	gunzip -c $? | tar xf -
+
+clean:
+	rm -rf lua-5.1.4.tar.gz lua-5.1.4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/lua/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+This helper folder is used to bootstrap lua on platforms where there
+is no lua at all.
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/lua/bootstrap.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,34 @@
+#!/bin/sh
+if [ -z "${DL}" ]; then
+  DL=wget
+fi
+case `uname -s` in
+  Darwin)
+    LPLAF=macosx
+    ;;
+  Linux)
+    LPLAF=linux
+    ;;
+  FreeBSD)
+    LPLAF=freebsd
+    ;;
+  SunOS)
+    LPLAF=solaris
+    ;;
+  AIX)
+    LPLAF=aix
+    ;;
+  DragonFly)
+    LPLAF=bsd
+    ;;
+  *BSD)
+    LPLAF=bsd
+    ;;
+  *)
+    LPLAF=posix
+    ;;
+esac
+DL="${DL}" make -f `dirname $0`/Makefile lua-5.1.4
+(cd lua-5.1.4; make ${LPLAF})
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/lua/cleanup.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+if [ -d lua-5.1.4 ]; then
+  (cd lua-5.1.4;make clean)
+fi
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/lua/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,34 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2013 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+VER = 5.1.4
+LUA = lua-$VER
+TGZ = $LUA.tar.gz
+
+all:V:
+	hget http://www.lua.org/ftp/$TGZ > $TGZ
+	tar -xf $TGZ
+	cd $LUA/src
+	rm luac.c
+	pcc *.c
+	mv 8.out ../../lua
+	cd ../..
+	rm -rf $LUA $TGZ
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/lua/setenv.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+#
+PATH=$PWD/lua-5.1.4/src:$PATH
+export PATH
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/mk/app.mk	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+# Set Plan9's mk variables.
+TARG   = ${APPLICATION}
+OFILES = `{echo $UNITS | sed 's/ |$/.$O /g'}
+LIB    = $LIBS
+
+# Add some targets to create a local copy of the bin, named as desired.
+all:V: $TARG
+
+$TARG: $O.out
+	cp $O.out $TARG
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/mk/dirs.mk	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,27 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+all: dirs
+
+dirs:VQ: $DIRS
+	for (i in $DIRS) @{
+		 echo Handling sub-directory $i...
+		 cd $i && rfork && rm /env/DIRS && $MK -f mkfile $MKFLAGS
+	 }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/mk/epilog.mk	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+# If we have subdirectories, handle them.
+<|if(! ~ x$DIRS x)        { cat $TOP/buildsys/mk/dirs.mk }; echo
+
+# If we have a library to build, include lib.mk, if it is an application,
+# include app.mk, etc..
+<|if(! ~ x$LIBRARY x)     { cat $TOP/buildsys/mk/lib.mk /sys/src/cmd/mklib }; echo
+<|if(! ~ x$APPLICATION x) { cat $TOP/buildsys/mk/app.mk /sys/src/cmd/mkone }; echo
+
+# Overrides.
+<$TOP/buildsys/mk/pcc.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/mk/lib.mk	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,23 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+# Set Plan9's mk variables.
+LIB = lib${LIBRARY}_s.a$O
+OFILES = `{echo $UNITS | sed 's/ |$/.$O /g'}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/mk/pcc.mk	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,60 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+#@@@ add stuff for crosscompiling here.
+
+CC = pcc
+LD = pcc
+
+#@@@.if $(BUILD_CONFIG) == "debug"
+#@@@ add -g option or similar
+#@@@.endif
+CPPFLAGS = -D__Plan9__ -D__${objtype}__
+CFLAGS   = -D__Plan9__ -D__${objtype}__ -I$TOP/dyncall -I$TOP/dyncallback -c
+#CXXFLAGS = $CXXFLAGS -D__Plan9__
+#ASFLAGS  = -D__Plan9__
+
+# JUST TEMPORARY AS LONG AS I'M WORKING ON IT - Plan9's sed doesn't support sed comments
+#        /^$/d                                                               # Remove empty lines.
+#        /^#.*/d                                                             # Remove comments.
+#        s/^\.(globl|intel_syntax|file|section).*//                          # Remove some GAS directives.
+#        s/(.*):/TEXT \1(SB), $0/g                                           # Reformat function names.
+#        s/%//g                                                              # Remove % register prefixes.
+#        /^[  ]+/y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/    # Convert everything to uppercase.
+#        s/([A-Z]+)[  ]*E(..)[,   ]*E(..)/\1L \3, \2/                        # Convert 32bit instructions with 2 register operands.
+#        s/([A-Z]+)[  ]*E(..)[,   ]*([0-9]+)/\1L $\3, \2/                    # Convert 32bit instructions with register and constant as
+#        s/([A-Z]+)[  ]*E(..)[,   ]*\[E(..)\+([0-9]+)\]/\1L \4(\3), \2/      # Convert 32bit instructions with register and address as 
+#        s/([A-Z]+)[  ]*E(..)[,   ]*\[E(..)\]/\1L 0(\3), \2/                 # Convert 32bit instructions with register and address as 
+#        s/(CALL)[    ]*E(..)[    ]*$/\1 \2/                                 # Convert CALL instructions.
+#        s/(CALL)[    ]*\[E(..)\+([0-9]+)\]/\1 \3(\2)/                       # Convert CALL instructions with addressing mode.
+#        s/([A-Z]+)[  ]*E(..)[    ]*$/\1L \2/                                # Convert 32bit instructions with register operand.
+#        s/([A-Z]+)[  ]*\[E(..)\+([0-9]+)\]/\1L \3(\2)/                      # Convert 32bit instructions with address operand.
+#        s/([A-Z]+)[  ]*\[E(..)\]/\1L 0(\2)/                                 # Convert 32bit instructions with address operand.
+#        s/(REP)[     ]*(MOV)SB[  ]*$/\1; \2B SI, DI/                        # Convert repeater prefix stuff.
+#        s/(REP)[     ]*(MOV)SD[  ]*$/\1; \2L SI, DI/                        # Convert repeater prefix stuff.
+
+# Step to transform .S into object files.
+%.$O: %.S
+	cp $prereq $prereq.c
+	pcc -E $CPPFLAGS $prereq.c > $stem.s # replace with cpp? pcc requires .c suffix
+	rm $prereq.c
+	$AS $AFLAGS $stem.s
+	rm $stem.s
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/mk/prolog.mk	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,35 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+# 'all' is always our default target.
+all:
+
+
+</$objtype/mkfile
+
+# Include config rules.
+<$TOP/ConfigVars
+
+BUILD_HOST   = $CONFIG_HOST
+BUILD_OS     = $CONFIG_OS
+BUILD_ARCH   = $CONFIG_ARCH
+BUILD_TOOL   = $CONFIG_TOOL
+BUILD_ASM    = $CONFIG_ASM
+BUILD_CONFIG = $CONFIG_CONFIG
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/nmake/common.nmake	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,61 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	common nmake rules
+#	common.nmake
+#
+#///////////////////////////////////////////////////
+
+
+build: dirs $(TARGETS)
+
+
+dirs: $(DIRS)
+!IF DEFINED(DIRS) && "$(DIRS)" != ""
+	!echo Handling sub-directory $** ... && cd $** && $(MAKE) /NOLOGO /F Nmakefile && cd ..
+#	!echo Handling sub-directory $** ... && cd $** && $(MAKE) /NOLOGO /F Nmakefile $** && cd ..
+!ENDIF
+
+
+clean: $(DIRS)
+!IF DEFINED(DIRS) && "$(DIRS)" != ""
+	!echo Handling sub-directory $** ... && cd $** && $(MAKE) /NOLOGO /F Nmakefile $@ && cd ..
+!ENDIF
+!IF (DEFINED(TARGETS) && "$(TARGETS)" != "") || (DEFINED(OBJS) && "$(OBJS)" != "")
+	echo Cleaning $(MAKEDIR) ...
+	del $(TARGETS) *.exp *.lib $(OBJS)
+#	del $(TARGETS) $(TARGETS:.exe=.lib) $(TARGETS:.dll=.lib) $(TARGETS:.exe=.exp) $(TARGETS:.dll=.exp) $(OBJS)
+!ENDIF
+
+
+distclean: $(DIRS)
+!IF DEFINED(DIRS) && "$(DIRS)" != ""
+	!echo Handling sub-directory $** ... && cd $** && $(MAKE) /NOLOGO /F Nmakefile $@ && cd ..
+!ENDIF
+!IF DEFINED(AUTOS) && "$(AUTOS)" != ""
+	echo Cleaning auto-generated files in $(MAKEDIR) ...
+	del $(AUTOS)
+!ENDIF
+!IF (DEFINED(TARGETS) && "$(TARGETS)" != "") || (DEFINED(OBJS) && "$(OBJS)" != "")
+	echo Cleaning $(MAKEDIR) ...
+	del $(TARGETS) *.exp *.lib $(OBJS)
+#	del $(TARGETS) $(TARGETS:.exe=.lib) $(TARGETS:.dll=.lib) $(TARGETS:.exe=.exp) $(TARGETS:.dll=.exp) $(OBJS)
+!ENDIF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/nmake/epilog.nmake	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,28 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake rules
+#	epilog.nmake
+#
+#///////////////////////////////////////////////////
+
+
+!INCLUDE common.nmake
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/nmake/prolog.nmake	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,76 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake rules
+#	prolog.nmake
+#
+#///////////////////////////////////////////////////
+
+
+.SILENT:
+
+# Default "build all" target.
+all: configure build
+
+
+# Check if library has been 'configured' properly. If not, tell the user and abort.
+!IF !DEFINED(CONFIG_OS) || !DEFINED(CONFIG_ARCH)
+configure: $(TOP)\ConfigVars
+$(TOP)\ConfigVars:
+	echo "Library not configured properly! Run configure.bat from the library's root directory first!"
+!ELSE
+configure:
+!ENDIF
+
+
+# Include config rules.
+!IF EXISTS($(TOP)\ConfigVars)
+!  INCLUDE $(TOP)\ConfigVars
+!ENDIF
+
+# Include site rules.
+!IF EXISTS($(TOP)\SiteVars)
+!  INCLUDE $(TOP)\SiteVars
+!ENDIF
+
+# set BUILD_* from CONFIG_* variables
+!IF !DEFINED(BUILD_HOST)
+BUILD_HOST = $(CONFIG_HOST)
+!ENDIF
+!IF !DEFINED(BUILD_OS)
+BUILD_OS = $(CONFIG_OS)
+!ENDIF
+!IF !DEFINED(BUILD_ARCH)
+BUILD_ARCH = $(CONFIG_ARCH)
+!ENDIF
+!IF !DEFINED(BUILD_TOOL)
+BUILD_TOOL = $(CONFIG_TOOL)
+!ENDIF
+!IF !DEFINED(BUILD_ASM)
+BUILD_ASM = $(CONFIG_ASM)
+!ENDIF
+!IF !DEFINED(BUILD_CONFIG)
+BUILD_CONFIG = $(CONFIG_CONFIG)
+!ENDIF
+
+!IF "$(BUILD_TOOL)" != ""
+!  INCLUDE tool_$(BUILD_TOOL).nmake
+!ENDIF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/nmake/tool_gcc.nmake	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,82 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	GCC nmake rules
+#	tool_gcc.nmake
+#
+#///////////////////////////////////////////////////
+
+
+CC  =arm-eabi-gcc
+CXX =arm-eabi-g++
+AR  =arm-eabi-ar
+AS  =arm-eabi-as
+LD  =arm-eabi-g++#arm-eabi-ld
+OCP =arm-eabi-objcopy
+
+!IF "$(BUILD_ARCH)" == "arm32_thumb"
+
+ASFLAGS  = -g -mthumb -mthumb-interwork
+CFLAGS   = -g -Wall -O2 -I$(TOP)\dyncall -I$(TOP)\dyncallback -fomit-frame-pointer -ffast-math -fno-strict-aliasing -mthumb -mthumb-interwork
+CXXFLAGS = $(CFLAGS) -fno-rtti -fno-exceptions
+LDFLAGS  = -g -mno-fpu -mthumb -mthumb-interwork
+ARFLAGS  =
+
+!ELSE IF "$(BUILD_ARCH)" == "arm32_arm"
+
+ASFLAGS  = -g
+CFLAGS   = -g -Wall -O2 -I$(TOP)\dyncall -I$(TOP)\dyncallback -fomit-frame-pointer -ffast-math -fno-strict-aliasing
+CXXFLAGS = $(CFLAGS) -fno-rtti -fno-exceptions
+LDFLAGS  = -g -mno-fpu
+ARFLAGS  =
+
+!ENDIF
+
+
+!IF "$(BUILD_OS)" == "nds"
+CFLAGS   = $(CFLAGS) -DARM9 -mcpu=arm9tdmi -mtune=arm9tdmi -D__nds__ -I"$(DEVKITPRO_PATH)/libnds/include"
+CXXFLAGS = $(CXXFLAGS) -D__nds__ -I"$(DEVKITPRO_PATH)/libnds/include"
+LDFLAGS  = $(LDFLAGS) -specs=ds_arm9.specs
+!ENDIF
+
+
+.SUFFIXES:
+.SUFFIXES: .o .so .a .arm9 .nds .pdf .c .cpp .S .tex .cc
+
+
+.S.o:
+	echo .S.o: Assembling $< ...
+	$(CC) $(ASFLAGS) $(CFLAGS) -o $@ -c $<
+
+.c.o:
+	echo .c.o: Compiling $< ...
+	$(CC) $(CFLAGS) -o $@ -c $<
+
+.cpp.o:
+	echo .cpp.o: Compiling $< ...
+	$(CXX) $(CXXFLAGS) -o $@ -c $<
+
+.cc.o:
+	echo .cc.o: Compiling $< ...
+	$(CXX) $(CXXFLAGS) -o $@ -c $<
+
+.tex.pdf:
+	pdflatex $<
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/nmake/tool_msvc.nmake	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,67 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	MSVC nmake rules
+#	tool_MSVC.nmake
+#
+#///////////////////////////////////////////////////
+
+
+
+CC  =cl
+CXX =cl
+AR  =lib
+!IF "$(BUILD_ARCH)" == "x64"
+AS  =ml64
+!ELSE IF "$(BUILD_ARCH)" == "x86"
+AS  =ml
+!ENDIF
+LD  =link
+
+ASFLAGS  = /c /nologo
+CFLAGS   = /EHsc /GR- /GS- /Ox /c /nologo /I$(TOP)\dyncall /I$(TOP)\dyncallback
+CXXFLAGS = $(CFLAGS)
+LDFLAGS  = /OPT:REF /OPT:ICF /NOLOGO
+ARFLAGS  = /NOLOGO
+
+
+.SUFFIXES:
+.SUFFIXES: .obj .exe .dll .lib .pdf .c .cpp .asm .tex .cc
+
+
+.asm.obj:
+	echo .asm.obj: Assembling $< ...
+	$(AS) $(ASFLAGS) /Fo$@ $<
+
+.c.obj:
+	echo .c.obj: Compiling $< ...
+	$(CC) $(CFLAGS) /Fo$@ $<
+
+.cpp.obj:
+	echo .cpp.obj: Compiling $< ...
+	$(CXX) $(CXXFLAGS) /Fo$@ $<
+
+.cc.obj:
+	echo .cc.obj: Compiling $< ...
+	$(CXX) $(CXXFLAGS) /Fo$@ $<
+
+.tex.pdf:
+	pdflatex $<
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/scripts/batch-build-linux.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+cd `dirname $0`/../../
+
+# Build libraries.
+
+make -f Makefile.generic clean all
+
+# Build tests: dynload tests need '-ldl'.
+
+( cd test ; make -f Makefile.generic clean )
+( cd test ; LDLIBS=-ldl make -f Makefile.generic all-dynload )
+( cd test ; make -f Makefile.generic all )
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/scripts/batch-build-minix.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+cd `dirname $0`/../../
+
+# ---------------------------------------------------------- #
+# DynCall build script using Makefile.generic on Minix 3.1.8 #
+# ---------------------------------------------------------- #
+
+# build libs and tests, but exclude dynload
+
+./configure
+make libdyncall libdyncallback tests-libdyncallback tests-libdyncall
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/scripts/batch-build-psp.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+cd `dirname $0`/../../
+
+# ------------------------------------------------------------- #
+# DynCall build script using Makefile.generic for PSP toolchain #
+# ------------------------------------------------------------- #
+
+# build libs and tests, but exclude dynload
+
+./configure --target=PSP
+#no callback for mips, yet, but build 'empty' libdyncallback to make linker happy
+make libdyncall libdyncallback tests-libdyncall # tests-libdyncallback
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/scripts/conf-nds.bat	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,41 @@
+@ECHO OFF
+REM ///////////////////////////////////////////////////////////////////////////
+REM
+REM Copyright (c) 2007-2009 Daniel Adler <dadler@uni-goettingen.de>, 
+REM                         Tassilo Philipp <tphilipp@potion-studios.com>
+REM
+REM Permission to use, copy, modify, and distribute this software for any
+REM purpose with or without fee is hereby granted, provided that the above
+REM copyright notice and this permission notice appear in all copies.
+REM
+REM THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+REM WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+REM MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+REM ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+REM WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+REM ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+REM OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+REM
+REM ///////////////////////////////////////////////////////////////////////////
+
+REM We need at least 2 characters in the path.
+IF [%DEVKITPRO:~0,1%]==[%DEVKITPRO%] (
+	GOTO END_ABORT
+)
+
+REM Extract devkitPro path.
+IF [%DEVKITPRO:~0,1%]==[/] (
+	ECHO DEVKITPRO_PATH=%DEVKITPRO:~1,1%:%DEVKITPRO:~2%#>>ConfigVars
+) ELSE IF [%DEVKITPRO:~1,1%]==[:] (
+	ECHO DEVKITPRO_PATH=%DEVKITPRO%#>>ConfigVars
+) ELSE (
+	GOTO END_ABORT
+)
+
+GOTO END
+
+:END_ABORT
+ECHO ERROR: Environment variable DEVKITPRO must be set to absolute devkitPro path.
+DEL ConfigVars
+
+:END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/scripts/elf-to-psp-eboot.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+if ! [ -x "$1" ]; then
+	echo Usage: $0 \<elf\>
+	exit 1
+fi
+
+TITLE=`basename $1`
+SFO=/tmp/${TITLE}.sfo
+FIXED_ELF=/tmp/${TITLE}.fixed
+STRIPPED_ELF=/tmp/${TITLE}.stripped
+
+mksfo             dyncall_${TITLE} $SFO
+psp-fixup-imports -o $FIXED_ELF $1
+psp-strip         $FIXED_ELF -o $STRIPPED_ELF
+pack-pbp          EBOOT.PBP $SFO NULL NULL NULL NULL NULL $STRIPPED_ELF NULL
+rm $SFO
+rm $FIXED_ELF
+rm $STRIPPED_ELF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/scripts/setenv-cross-ios.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,8 @@
+
+IOS_ARCH="armv6"
+IOS_SDK_VERSION="4.3" 
+
+export TARGET_MACH="-arch ${IOS_ARCH}" 
+export TARGET_ARCH="-arch ${IOS_ARCH} -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${IOS_SDK_VERSION}.sdk" 
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/scripts/setenv-sdk-ios.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,22 @@
+#!/bin/sh
+#export PATH=`xcode-select -print-path`/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:${PATH}
+DEVELOPER=`xcode-select -print-path`
+# WORKS: P="${DEVELOPER}/Platforms/iPhoneOS.platform/Developer"
+P="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain"
+export MANPATH="$P/usr/share/man:${MANPATH}"
+export PATH="$P/usr/bin:${PATH}"
+
+#if [ -z "${DEVELOPER}" ]; then
+#DEVELOPER=/Developer
+#fi
+#export PATH="${DEVELOPER}/Platforms/iPhoneOS.platform/Developer/usr/bin:${PATH}"
+# export CPATH="$P/usr/include:${CPATH}"
+#if [ `exec sw_vers -productVersion` ]; then
+#  case `sw_vers -productVersion` in
+#    10.*)
+#       
+#      ;;
+#  esac
+#export PATH=${DEVELOPER}/Platforms/iPhoneOS.platform/Developer/usr/bin:${PATH}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/vs2005/dyncall/dyncall.vcproj	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="dyncall"
+	ProjectGUID="{DF67B85F-C8F8-4FB1-A701-867A9C835ABA}"
+	RootNamespace="dyncall"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+		<DefaultToolFile
+			FileName="masm.rules"
+		/>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="MASM"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="MASM"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_api.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_call_x86_generic_masm.asm"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_callf.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_callvm.c"
+				>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_callvm_base.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_vector.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_alloc.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_call_x86.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_callf.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_callvm.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_callvm_x86.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_config.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_macros.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_signature.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_types.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_value.h"
+				>
+			</File>
+			<File
+				RelativePath="..\..\..\dyncall\dyncall_vector.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/vs2005/test_plain/test_plain.vcproj	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="test_plain"
+	ProjectGUID="{65E1A63C-079D-4F72-8307-E070A499D2EA}"
+	RootNamespace="test_plain"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../../dyncall"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\..\test\plain\test_main.cc"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\..\..\test\plain\test_framework.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildsys/vs2005/vs2005.sln	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,29 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dyncall", "dyncall\dyncall.vcproj", "{DF67B85F-C8F8-4FB1-A701-867A9C835ABA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_plain", "test_plain\test_plain.vcproj", "{65E1A63C-079D-4F72-8307-E070A499D2EA}"
+	ProjectSection(ProjectDependencies) = postProject
+		{DF67B85F-C8F8-4FB1-A701-867A9C835ABA} = {DF67B85F-C8F8-4FB1-A701-867A9C835ABA}
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{DF67B85F-C8F8-4FB1-A701-867A9C835ABA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{DF67B85F-C8F8-4FB1-A701-867A9C835ABA}.Debug|Win32.Build.0 = Debug|Win32
+		{DF67B85F-C8F8-4FB1-A701-867A9C835ABA}.Release|Win32.ActiveCfg = Release|Win32
+		{DF67B85F-C8F8-4FB1-A701-867A9C835ABA}.Release|Win32.Build.0 = Release|Win32
+		{65E1A63C-079D-4F72-8307-E070A499D2EA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{65E1A63C-079D-4F72-8307-E070A499D2EA}.Debug|Win32.Build.0 = Debug|Win32
+		{65E1A63C-079D-4F72-8307-E070A499D2EA}.Release|Win32.ActiveCfg = Release|Win32
+		{65E1A63C-079D-4F72-8307-E070A499D2EA}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configure	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,203 @@
+#!/bin/sh
+C=Makefile.config
+
+# get full path
+case $0 in
+  /*)
+    FULL=$0
+    ;;
+  *)
+    FULL=$PWD/$0
+    ;;
+esac
+
+printf "# auto-generated by $0\n" >$C
+while [ $# -gt 0 ]; do
+  X=$1
+  shift 1
+# Shell common:
+  case $X in
+    --help|-h|-?)
+cat <<EOF
+usage: $0 --<option>=<value> <var>=<value> ..
+
+  --prefix=<dir>
+  --target=<platform>       uname/special targets: MacOSX,iOS,iPhoneSimulator
+  --sdk=<version>           Mac OS X/iOS SDK version (e.g. '6.1' or '10.9.3')
+                            Tested iOS SDK versions: 4.3, 6.1, 8.1 
+  --sdkroot=<dir>
+
+Useful variables CC, CXX, CFLAGS, CXXFLAGS, etc..
+
+EOF
+      exit 1
+      ;;
+# GNU Compatibility:
+    --prefix=*)
+      PREFIX=`printf -- "${X}" | cut -c 10-`
+      ;;
+    --target=*)
+      TARGET=`printf -- "${X}" | cut -c 10-`
+      ;;
+    --sdk=*)
+      SDK=`printf -- "${X}" | cut -c 7-`
+      ;;
+    --sdkroot=*)
+      SDKROOT=`printf -- "${X}" | cut -c 11-`
+      ;;
+# Environment variables:
+    [A-Za-z_]*=*)
+      printf "${X}\n" >>$C
+      k=`printf "${X}" | cut -d = -f 1`
+      v=`printf "${X}" | cut -d = -f 2`
+      export $k="$v"
+      ;;
+# Others fail:
+    *)
+      printf "error: invalid option ${X}\n" >&2
+      exit 1
+      ;;
+  esac
+done
+printf "PREFIX=${PREFIX:=/usr/local}\n" >>$C
+case ${TARGET:=`uname`} in
+  Linux)
+    if [ -z "${CFLAGS}" ]; then
+      printf "CFLAGS=-fPIC\n" >>$C
+    fi
+    printf "LDLIBS=-lm -ldl\n" >>$C
+    ;;
+  OpenBSD)
+    printf "LDLIBS=-lm\n" >>$C
+    ;;
+  DragonFly|NetBSD)
+    if [ -z "${CFLAGS}" ]; then
+      printf "CFLAGS=-fPIC\n" >>$C
+    fi
+    printf "LDLIBS=-lm\n" >>$C
+    ;;
+  FreeBSD)
+    if [ -z "${CFLAGS}" ]; then
+      printf "CFLAGS=-fPIC\n" >>$C
+    fi
+    printf "LDLIBS=-lm\n" >>$C
+    printf "RM=rm -f\n" >>$C
+    ;;
+  MacOSX|Darwin)
+    # if Apple's libtool (not to be confused with GNU's) is available, which is according to libtool(1) "with -static [...] intended
+    # to replace ar(5) and ranlib", use it - if it is shadowed by some install of GNU's libtool assume that a foreign environment is
+    # intentionally used, and fall back to using 'ar rs' (the equivalent to 'libtool -static'), for compatibility:
+    if libtool -V >/dev/null 2>/dev/null; then # Apple's libtool has -V for version, which GNU does not.
+      printf "AR=libtool\n" >>$C
+      printf "ARFLAGS=-static -o\n" >>$C
+    else
+      printf "AR=ar\n" >>$C
+      printf "ARFLAGS=rs\n" >>$C # 's' is crucial for universal binary archives
+    fi
+    if [ `uname -n` = 'iPhone' ]; then # building on iPhone itself, uname yields Darwin (gcc setup for current/correct arch)
+      printf "CC=gcc\n" >>$C
+    elif [ -z ${SDK} ]; then
+      case `sw_vers -productVersion` in
+        10.4.*)
+          ARCHS="-arch ppc -arch i386 -arch x86_64" 
+          ;;
+        10.[56].*)
+          ARCHS="-arch i386 -arch x86_64 -arch ppc"
+          ;;
+        10.6.*)
+          ARCHS="-arch i386 -arch x86_64"
+          ;;
+        10.10.*)
+          ARCHS="-arch x86_64 -arch i386"
+          ;;
+        10.[789].*)
+          ARCHS="-arch x86_64 -arch i386"
+          ;;
+      esac
+      printf "ASFLAGS=${ARCHS}\n" >>$C
+      printf "CFLAGS=${ARCHS}\n" >>$C
+      printf "CXXFLAGS=${ARCHS}\n" >>$C
+    else
+      if [ -z ${SDKROOT} ]; then
+        SDKROOT="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${SDK}.sdk"
+      fi
+      printf "CFLAGS=-isysroot ${SDKROOT}\n" >>$C
+      printf "CXXFLAGS=-isysroot ${SDKROOT}\n" >>$C
+    fi
+    ;;
+  iPhoneOS|iOS)
+    if [ -z ${SDKROOT} ]; then
+      SDKROOT="`xcode-select -print-path`/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDK}.sdk"
+    fi
+    if [ -z "${ARCHS}" ]; then
+      case "${SDK}" in
+        [45].*)
+          ARCHS="-arch armv6"
+          ;;
+        [67].*)
+          ARCHS="-arch armv7"
+          ;;
+        8.*)
+          ARCHS="-arch armv7 -arch arm64"
+          ;;
+      esac
+    fi
+    printf "ARFLAGS=rs\n" >>$C # 's' is crucial for universal binary archives
+    printf "ASFLAGS=${ARCHS} -isysroot ${SDKROOT}\n" >>$C
+    printf "CFLAGS=${ARCHS} -isysroot ${SDKROOT}\n" >>$C
+    printf "CXXFLAGS=${ARCHS} -isysroot ${SDKROOT}\n" >>$C
+    printf "LDFLAGS=-Wl,-syslibroot ${SDKROOT}\n" >>$C
+    ;;
+  iPhoneSimulator)
+    if [ -z ${SDKROOT} ]; then
+      SDKROOT="`xcode-select -print-path`/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDK}.sdk"
+    fi
+    ARCHS="-arch i386"
+    printf "ASFLAGS=${ARCHS} -isysroot ${SDKROOT}\n" >>$C
+    printf "CFLAGS=${ARCHS} -isysroot ${SDKROOT}\n" >>$C
+    printf "CXXFLAGS=${ARCHS} -isysroot ${SDKROOT}\n" >>$C
+    printf "LDFLAGS=-Wl,-syslibroot ${SDKROOT}\n" >>$C
+    ;;
+  SunOS)
+    # open distributions often don't come with default cc and CC, check for common alternatives.
+    printf "CC=` (which cc || which gcc || which clang  ) | grep -v '^no '`\n" >>$C
+    printf "CXX=`(which CC || which g++ || which clang++) | grep -v '^no '`\n" >>$C # C++ compiler traditionally named CC
+    printf "CCC=${CXX}\n" >>$C # Sun make's rules use CCC for c++ compiler
+    printf "LDLIBS=-lm\n" >>$C
+    ;;
+  Minix)
+    printf "CC=gcc\n" >>$C
+    printf "CXX=g++\n">>$C
+    printf "AR=ar\n"  >>$C
+    ;;
+  PSP)
+    SDKROOT="`psp-config --pspsdk-path`"
+    printf "CC=psp-gcc\n" >>$C
+    printf "CXX=psp-gcc\n">>$C # don't use psp-g++, buggy
+    printf "AR=psp-ar\n"  >>$C
+    printf "CFLAGS=-I${SDKROOT}/include/\n" >>$C
+    printf "CXXFLAGS=-I${SDKROOT}/include/\n" >>$C
+    # Pulling in dyncall libs below is a hack, for some reason psp-ld is super-picky about order.
+    # Use your C lib of choice, from the PSPSDK, or...
+    #printf "LDLIBS=-L${SDKROOT}/lib/ -L`dirname ${FULL}`/dyncall -L`dirname ${FULL}`/dyncallback -ldyncall_s -ldyncallback_s -lm -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lstdc++ -lpsplibc -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser \n" >>$C
+    # ... newlib.
+    printf "LDLIBS=-L${SDKROOT}/lib/ -L`dirname ${FULL}`/dyncall -L`dirname ${FULL}`/dyncallback -ldyncall_s -ldyncallback_s -lm -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lstdc++ -lc       -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser \n" >>$C
+    ;;
+esac
+
+BLDTOP="$PWD"
+SRCTOP=`dirname ${FULL}`
+
+FILES=`( cd $SRCTOP ; find . -name "Makefile.generic" )`
+for FILE in $FILES ; do
+  SRCFILE="$SRCTOP/$FILE"
+  BLDFILE="$BLDTOP/$FILE"
+  SRCDIR=`dirname $SRCFILE`
+  BLDDIR=`dirname $BLDFILE`
+  mkdir -p "$BLDDIR"
+  cat <<EOF >$BLDDIR/Makefile
+VPATH = $SRCDIR
+include $BLDTOP/Makefile.config
+include \${VPATH}/Makefile.generic
+EOF
+done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configure.bat	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,157 @@
+@ECHO OFF
+REM ///////////////////////////////////////////////////////////////////////////
+REM
+REM Copyright (c) 2007-2009 Daniel Adler <dadler@uni-goettingen.de>, 
+REM                         Tassilo Philipp <tphilipp@potion-studios.com>
+REM
+REM Permission to use, copy, modify, and distribute this software for any
+REM purpose with or without fee is hereby granted, provided that the above
+REM copyright notice and this permission notice appear in all copies.
+REM
+REM THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+REM WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+REM MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+REM ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+REM WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+REM ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+REM OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+REM
+REM ///////////////////////////////////////////////////////////////////////////
+
+
+SETLOCAL
+
+REM Set default values.
+SET PACKAGE=dyncall
+SET CONFIG_HOST=windows
+SET CONFIG_OS=windows
+SET CONFIG_TOOL=msvc
+SET CONFIG_ASM=ml
+SET CONFIG_CONFIG=release
+IF [%PROCESSOR_ARCHITECTURE%] == [AMD64] (
+	SET CONFIG_ARCH=x64
+) ELSE IF [%PROCESSOR_ARCHITEW6432%] == [AMD64] (
+	SET CONFIG_ARCH=x64
+) ELSE (
+	SET CONFIG_ARCH=x86
+)
+
+REM Scan arguments.
+:MAIN_LOOP
+
+
+REM Help.
+IF [%1]==[] (
+	GOTO DONE
+) ELSE IF [%1]==[/?] (
+	ECHO.
+	ECHO.dyncall configuration shell-script
+	ECHO.Usage:
+	ECHO.  configure.bat [ options ]
+	ECHO.
+	ECHO.Options:
+	ECHO.  /?                print this page
+	ECHO.
+	ECHO.  /prefix PATH      set installation prefix ^(GNU make only^)
+	ECHO.  /prefix-bd PATH   set build directory prefix ^(GNU make only^)
+	ECHO.                    ^(only for use with gmake^)
+	ECHO.
+	ECHO.  /target-x86       build for x86 architecture ^(default^)
+	ECHO.  /target-x64       build for x64 architecture
+	ECHO.  /target-psp       build for PlayStation Portable ^(homebrew SDK^)
+	ECHO.  /target-nds-arm   build for Nintendo DS ^(devkitPro, ARM mode^)
+	ECHO.  /target-nds-thumb build for Nintendo DS ^(devkitPro, THUMB mode^)
+	ECHO.
+	ECHO.  /tool-msvc        use Microsoft Visual C++ compiler ^(default^)
+	ECHO.  /tool-gcc         use GNU Compiler Collection
+	ECHO.
+	ECHO.  /asm-ml           use Microsoft Macro Assembler ^(default^)
+	ECHO.  /asm-as           use the GNU Assembler
+	ECHO.  /asm-nasm         use NASM Assembler
+	ECHO.
+	ECHO.  /config-release   build release version ^(default^)
+	ECHO.  /config-debug     build debug version
+	GOTO:EOF
+) ELSE IF [%1]==[/prefix] (
+	SET CONFIG_PREFIX=%2
+	SHIFT
+) ELSE IF [%1]==[/prefix-bd] (
+	SET CONFIG_BUILDPREFIX=%2
+	SHIFT
+) ELSE IF [%1]==[/target-x86] (
+	SET CONFIG_ARCH=x86
+) ELSE IF [%1]==[/target-x64] (
+	SET CONFIG_ARCH=x64
+) ELSE IF [%1]==[/target-psp] (
+	SET CONFIG_ARCH=mips32
+	SET CONFIG_OS=psp
+) ELSE IF [%1]==[/target-nds-arm] (
+	SET CONFIG_ARCH=arm32_arm
+	SET CONFIG_OS=nds
+) ELSE IF [%1]==[/target-nds-thumb] (
+	SET CONFIG_ARCH=arm32_thumb
+	SET CONFIG_OS=nds
+) ELSE IF [%1]==[/tool-gcc] (
+	SET CONFIG_TOOL=gcc
+	SET CONFIG_ASM=as
+) ELSE IF [%1]==[/tool-msvc] (
+	SET CONFIG_TOOL=msvc
+	SET CONFIG_ASM=ml
+) ELSE IF [%1]==[/asm-as] (
+	SET CONFIG_ASM=as
+) ELSE IF [%1]==[/asm-nasm] (
+	SET CONFIG_ASM=nasm
+) ELSE IF [%1]==[/asm-ml] (
+	SET CONFIG_ASM=ml
+) ELSE IF [%1]==[/config-release] (
+	SET CONFIG_CONFIG=release
+) ELSE IF [%1]==[/config-debug] (
+	SET CONFIG_CONFIG=debug
+) ELSE (
+	ECHO Unknown parameter '%1'.
+	GOTO DONE
+)
+
+SHIFT
+GOTO MAIN_LOOP
+:DONE
+
+IF [%CONFIG_PREFIX%]==[] (
+	SET CONFIG_PREFIX=%CD%\install_%CONFIG_OS%_%CONFIG_ARCH%_%CONFIG_TOOL%_%CONFIG_CONFIG%
+)
+IF [%CONFIG_BUILDPREFIX%]==[] (
+	SET CONFIG_BUILDPREFIX=%CD%\build_out\%CONFIG_OS%_%CONFIG_ARCH%_%CONFIG_TOOL%_%CONFIG_CONFIG%
+)
+
+ECHO # auto-generated by configure.bat >ConfigVars
+ECHO CONFIG_PACKAGE=%PACKAGE%#>>ConfigVars
+ECHO CONFIG_HOST=%CONFIG_HOST%#>>ConfigVars
+ECHO CONFIG_OS=%CONFIG_OS%#>>ConfigVars
+ECHO CONFIG_ARCH=%CONFIG_ARCH%#>>ConfigVars
+ECHO CONFIG_TOOL=%CONFIG_TOOL%#>>ConfigVars
+ECHO CONFIG_ASM=%CONFIG_ASM%#>>ConfigVars
+ECHO CONFIG_CONFIG=%CONFIG_CONFIG%#>>ConfigVars
+ECHO CONFIG_PREFIX=%CONFIG_PREFIX%#>>ConfigVars
+ECHO CONFIG_BUILDPREFIX=%CONFIG_BUILDPREFIX%#>>ConfigVars
+
+ECHO Writing following configuration to ConfigVars:
+ECHO.
+ECHO Host OS:             %CONFIG_HOST%
+ECHO Target OS:           %CONFIG_OS%
+ECHO Target Architecture: %CONFIG_ARCH%
+ECHO Compiler:            %CONFIG_TOOL%
+ECHO Assembler:           %CONFIG_ASM%
+ECHO Build configuration: %CONFIG_CONFIG%
+ECHO Install prefix:      %CONFIG_PREFIX%
+ECHO Build prefix:        %CONFIG_BUILDPREFIX%
+
+
+REM We have to transform some pathes for the nds/devkitPro build.
+IF [%CONFIG_OS%]==[nds] (
+	REM Check if DEVKITPRO is set.
+	IF [%DEVKITPRO%]==[] (
+		ECHO ERROR: Environment variable DEVKITPRO must be set to absolute devkitPro path.
+	) ELSE (
+		buildsys\scripts\conf-nds.bat
+	)
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configure.rc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,234 @@
+#!/bin/rc
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007-2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+# --- configure settings ------------------------------------------------------
+
+PACKAGE=dyncall
+CONFIG_PREFIX=/usr/local #@@@
+
+# --- output error message ----------------------------------------------------
+fn error {
+  echo error: $*
+  exit 1
+}
+
+# --- output warning message --------------------------------------------------
+
+fn warning {
+  echo warning: $*
+}
+
+# --- output info message -----------------------------------------------------
+
+fn info {
+  echo $*
+}
+
+# --- print usage -------------------------------------------------------------
+
+fn usage {
+  echo $PACKAGE' configuration shell-script'
+  echo 'Usage:'
+  echo '  configure [ options ]'
+  echo
+  echo 'Options:'
+  echo '  --help'
+  echo '   -h                print this page'
+  #echo
+  #echo '  --target-x86       build for x86 architecture platform'
+  #echo '  --target-x64       build for x64 architecture platform'
+  #echo '  --target-ppc32     build for ppc32 architecture platform'
+  #echo '  --target-arm-arm   build for ARM architecture platform (ARM mode)'
+  #echo '  --target-arm-thumb build for ARM architecture platform (THUMB mode)'
+  #echo
+  #echo '  --tool-pcc         use Portable C Compiler'
+  #echo 
+  #echo '  --asm-xa           use Plan9 Assemblers (0a, 1a, 2a, etc.)'
+  #echo
+  #echo '  --config-release   build release version (default)'
+  #echo '  --config-debug     build debug version'
+  echo
+  exit 0
+}
+
+# --- guess operating system -------------------------------------------------
+
+CONFIG_OS=()
+fn guess_os {
+  CONFIG_OS='plan9'
+  info 'guess os '$CONFIG_OS
+}
+
+# --- guess architecture -----------------------------------------------------
+
+CONFIG_ARCH=()
+fn guess_arch {
+  CONFIG_ARCH='x86'
+  switch($cputype) {
+    case 386
+      CONFIG_ARCH='x86'
+    case amd64
+      CONFIG_ARCH='x64'
+    case arm
+      CONFIG_ARCH='arm32_arm'
+    case power
+      CONFIG_ARCH='ppc32'
+    case mips
+      CONFIG_ARCH='mips32'
+    case *
+      warning 'unknown architecture '$cputype' - using default (x86)'
+  }
+  info 'guess arch '$CONFIG_ARCH
+}
+
+# --- guess tool chain -------------------------------------------------------
+
+CONFIG_TOOL=()
+fn guess_tool {
+  #CONFIG_TOOL=`{grep CC /$objtype/mkfile | sed s/CC.//}
+  CONFIG_TOOL='pcc'
+  info 'guess tool '$CONFIG_TOOL
+}
+
+# --- guess assembler --------------------------------------------------------
+
+CONFIG_ASM=()
+fn guess_asm {
+  CONFIG_ASM=`{grep AS /$objtype/mkfile | sed s/AS.//}
+  info 'guess assembler '$CONFIG_ASM
+}
+
+# --- process arguments ------------------------------------------------------
+
+fn args {
+  while(! ~ $#* 0 && ~ $1 -*) {
+    OPT=$1
+    shift
+
+    switch($OPT) {
+      case --help -h
+        usage
+      #case --target-x86
+        #CONFIG_ARCH='x86'
+      #case --target-x64
+        #CONFIG_ARCH='x64'
+      #case --target-ppc32
+        #CONFIG_ARCH='ppc32'
+      #case --target-arm-arm
+        #CONFIG_ARCH='arm32_arm'
+      #case --target-arm-thumb
+        #CONFIG_ARCH='arm32_thumb'
+      #case --tool-pcc
+        #CONFIG_TOOL=pcc
+        #CONFIG_ASM=2a
+      #case --tool-xa
+        #CONFIG_ASM=2a
+      #case --config-release
+        #CONFIG_CONFIG=release
+      #case --config-debug
+        #CONFIG_CONFIG=debug
+      case *
+        warning 'unknown option '$OPT
+    }
+  }
+}
+
+# --- guess variables --------------------------------------------------------
+
+fn guess {
+  if(~ $#CONFIG_OS 0) {
+    guess_os
+    if(~ $#CONFIG_OS 0) {
+      error 'unsupported operating system '$OS
+    }
+  }
+
+  if(~ $#CONFIG_ARCH 0) {
+    guess_arch 
+    if(~ $#CONFIG_ARCH 0) {
+      error 'unsupported architecture '$ARCH
+    }
+  }
+
+  if(~ $#CONFIG_TOOL 0) {
+    guess_tool
+    if(~ $#CONFIG_TOOL 0) {
+      error 'no tool'
+    }
+  }
+
+  if(~ $#CONFIG_ASM 0) {
+    guess_asm
+    if(~ $#CONFIG_ASM 0) {
+      error 'no assembler tool'
+    }
+  }
+
+  if(~ $#CONFIG_CONFIG 0) {
+    CONFIG_CONFIG=release
+  }
+}
+  
+# --- set default variables --------------------------------------------------
+
+fn set_defaults {
+  CONFIG_HOST=$CONFIG_OS
+}
+
+# --- derive variables -------------------------------------------------------
+
+fn derive_vars {
+  BUILD_HOST=$CONFIG_HOST
+  if(! ~ $CONFIG_HOST $CONFIG_OS) {
+    BUILD_HOST=$CONFIG_HOST'_'$CONFIG_OS
+  }
+}
+
+# --- write ConfigVars files ------------------------------------------------
+
+fn output {
+  echo '#auto-generated by '$PACKAGE'/configure' >$1
+  echo 'CONFIG_PACKAGE='$PACKAGE >>$1
+  echo 'CONFIG_HOST='$CONFIG_HOST >>$1
+  echo 'CONFIG_OS='$CONFIG_OS >>$1
+  echo 'CONFIG_ARCH='$CONFIG_ARCH >>$1
+  echo 'CONFIG_TOOL='$CONFIG_TOOL >>$1
+  echo 'CONFIG_ASM='$CONFIG_ASM >>$1
+  echo 'CONFIG_CONFIG='$CONFIG_CONFIG >>$1
+  echo 'CONFIG_PREFIX='$CONFIG_PREFIX >>$1
+  if(! ~ $#CONFIG_BUILDPREFIX 0) {
+    echo 'CONFIG_BUILDPREFIX='$CONFIG_BUILDPREFIX >>$1
+  }
+  echo '' >>$1
+}
+
+# --- main -------------------------------------------------------------------
+
+fn main {
+  args $*
+  info '* configure package '$PACKAGE
+  guess
+  set_defaults
+  derive_vars
+  output ConfigVars 
+}
+
+main $*
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/Description.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+DynCall Project
+
+The dyncall library encapsulates architecture-, OS- and compiler-specific function call semantics in a virtual "bind argument parameters from left to right and then call" interface allowing programmers to call C functions in a completely dynamic manner. In other words, instead of calling a function directly, the dyncall library provides a mechanism to push the function parameters manually and to issue the call afterwards.
+This means, that a program can determine at runtime what function to call, and what parameters to pass to it. The library is written in C and assembly and provides a very simple C interface to program against.
+
+The library comes in very handy to power flexible message systems, dynamic function call dispatch mechanisms, closure implementations or even to bridge different programming languages.
+When it comes to language bindings, the dyncall library provides a clean and portable C interface to dynamically issue calls to foreign code using small call kernels written in assembly. Instead of providing code for every bridged function call, which unnecessarily results in code bloat, only a couple of instructions are used to invoke every possible call.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/License.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,15 @@
+Copyright (c) 2007-2012 Daniel Adler <dadler@uni-goettingen.de>, 
+                        Tassilo Philipp <tphilipp@potion-studios.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+.PHONY: all
+all clean:
+	cd manual && ${MAKE} $@
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/README-Cross.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,21 @@
+Cross-compilation of dyncall with gcc
+=====================================
+
+Make sure cross-compile tools are installed and in your path, and set the
+CC, AR and LD envvars, explicitly (where $PREFIX is arm-eabi, etc., depending
+on the toolchain to be used):
+
+  $ export CC=$PREFIX-gcc
+  $ export AR=$PREFIX-ar
+  $ export LD=$PREFIX-ld
+
+Also set CXX if you want to build the tests:
+
+  $ export CXX=$PREFIX-g++
+
+
+Then, build dyncall - one way would be to simply use Makefile.embedded:
+
+  $ make -f Makefile.embedded sun
+  $ (cd test; make -f Makefile.embedded)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/README.CMake	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,82 @@
+Notes on building DynCall with CMake
+====================================
+
+
+Build with CMake (in-source)
+----------------------------
+
+cd <dyncall-source-dir>
+
+On Unix:
+  cmake .
+  make
+
+On Windows:
+  cmake . -G "NMake Makefiles"
+  nmake /f Makefile
+
+  NOTE: Assembly Support is broken for Visual Studio Generators in CMake
+        So we support NMake for now only.
+
+Install in a specific location
+------------------------------
+cmake -DCMAKE_INSTALL_PREFIX=<absolute-path>
+
+
+Tested settings
+---------------
+- CMake Unix Makefile generators on Mac OS X and Linux.
+
+
+Using from other CMake-based projects
+-------------------------------------
+Under buildsys/cmake/Modules you find some Find*() scripts
+which you might find useful.
+
+
+Make Universal Binary
+---------------------
+cmake -DCMAKE_OSX_ARCHITECTURES="i386;x86_64;ppc"
+
+
+CMake Framework
+---------------
+The project name is "DynCall".
+Each library in the source tree represents a target (not a sub-project!).
+Support scripts for 'find_package' are at buildsys/cmake/Modules.
+
+find_package( [DynLoad | DynCall | DynCallback] ) 
+
+will set the variables:
+
+	Dyn*_INCLUDE_DIRS
+	Dyn*_LIBRARIES
+
+
+Using dyncall libraries in other CMake projects
+-----------------------------------------------
+find_package(DynLoad REQUIRED)
+add_includes(${DynLoad_INCLUDE_DIRS})
+target_link_libraries( ... ${DynLoad_LIBRARIES})
+
+
+Use as sub-project within CMake top-level project
+-------------------------------------------------
+
+add_subdirectory(path/to/dyncall/project/tree)
+set(DynLoad_DIR ${DynCall_SOURCE_DIR}/dynload)
+set(DynCall_DIR ${DynCall_SOURCE_DIR}/dyncall)
+set(DynCallback_DIR ${DynCall_SOURCE_DIR}/dyncallback)
+
+has the effect, that the 'find_package' works from within the project source 
+tree.
+
+
+Building for SPARC64 Architectures
+----------------------------------
+
+Supported Compilers: GCC, SunPro
+Add -m64 to C, C++ and ASM flags, e.g.
+
+$ cmake -DCMAKE_C_FLAGS=-m64 -DCMAKE_ASM_FLAGS=-m64 -DCMAKE_ASM_CXX_FLAGS=-m64
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/README.Generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,168 @@
+Building DynCall with generic makefiles
+=======================================
+
+
+Description
+-----------
+
+Makefile.generic is a simple and _hybrid_ make-based build system setup for dyncall, 
+designed to work with with GNU and BSD make.
+
+This build-flavour supports two operating modes: Embedded and Configure.
+
+Project files are specified in Makefile.generic.
+
+
+History
+-------
+During the integration of dyncall into the R package rdyncall, there
+was a need for a clean simple build system that could be launched from R
+and works with various make's such as GNU, BSD and sun make.
+
+
+Generic Usage
+-------------
+
+[g|bsd]make [-f Makefile.generic] [all|clean|install|...] [INSTALL_TOP=<path>]
+
+
+Embedded Mode
+-------------
+Makefile.generic makefiles are taken "as-is" without the need for extra configuration.
+
+<VAR1>=<VALUE1> ... bsdmake -f Makefile.generic
+<VAR1>=<VALUE1> ... gmake -f Makefile.generic
+
+(Note that setting an env var as above (<VAR1>=<VALUE1>) before running a command is
+shell specific. If your shell doesn't support this, set it according to the shell's
+style.)
+
+Example:
+  dyncall libraries should compile fine on most platforms:
+  
+  BSDmake:
+  $ bsdmake -f Makefile.generic
+
+  GNUmake:
+  $ make -f Makefile.generic
+
+  The tests sometimes require special attention to additional 'usual' libraries
+  such as math and dynamic linker run-time libs.
+  $ LDLIBS="-lm -ldl" make -f Makefile.generic
+
+
+Configure Mode
+--------------
+
+Usage:
+
+  cd <build-dir> # build-dir can be arbitrary
+  ../<path-to-source>/configure [--prefix=<path>]
+  make
+  make install [DESTDIR=<path>]
+
+The configure script 'configure' writes 'Makefile' files that 
+include 'Makefile.generic' and setup variables such as 
+VPATH, {SRC,BLD}{TOP,DIR}.
+
+Two build types are supported: In-source and out-of-Source.
+
+in-source builds:
+Makefile's are created in parallel to the Makefile.generic files.
+
+out-of-source builds:
+the configure script is executed from a (possible empty) build directory. 
+The source directory tree is duplicated into that directory.
+
+
+Useful Variables
+----------------
+
+For libraries:
+  CC, CFLAGS, CPPFLAGS
+For tests:
+  CXX, LDLIBS
+
+MAKE_CMD - The make tool (including -f flag) to run sub-directories.
+SRCTOP   - Source top-level directory (defaults to relative top).
+BLDTOP   - Build  top-level directory (defaults to SRCTOP).
+SRCDIR   - Source directory (defaults to '.').
+BLDDIR   - Build  directory (defaults to SRCDIR).
+
+e.g. Makefile.generic in source-tree:
+
+SRCTOP ?= ../../../ # relative path to source-top
+BLDTOP ?= ${SRCTOP} # defaults for in-source builds
+SRCDIR ?= .         # relative path to current directory
+BLDDIR ?= ${BLDDIR} # relative path to current directory
+
+
+Include Directories
+-------------------
+Use -I${SRCTOP}/... to refer to other include directories.
+
+
+Link Directories
+----------------
+Use -L${BLDTOP}/... to refer to other build directories.
+
+
+Plaform Notes:
+--------------
+Linux: 
+- all: ok.
+  make -f Makefile.generic all
+- tests: need 'm' and 'dl' libs. 
+  ( cd tests ; LDLIBS="-lm -ldl" make -f Makefile.generic )
+- see batch script: buildsys/scripts/batch-build-linux.sh
+
+Minix: No dynload support. No '-fPIC' is allowed.
+- dynload: unsupport, no dynamic linker present in Minix 3.
+- dyn{call,callback}: ok, without '-fPIC'!
+  ( cd dyncall ; CFLAGS= make -f Makefile.generic dyncall dyncallback )
+- tests: ok
+  ( cd test ; make -f Makefile.generic all-dyncall all-dyncallback )
+- see batch script: buildsys/scripts/batch-build-minix.sh
+
+NetBSD/FreeBSD:
+- all: ok.
+  make -f Makefile.generic all
+- tests: need math lib:
+  ( cd tests ; LDLIBS="-lm" make -f Makefile.generic )
+
+OpenBSD:
+- all: ok.
+  make -f Makefile.generic all
+- tests: *.cpp implicit rule not set, therefore only c tests work:
+  ( cd tests ; LDLIBS="-lm" make -f Makefile.generic all-c )
+- install: ok.
+
+Haiku Alpha 2:
+- dynload: elf.h header found, install system source for dynload support
+- dyn{call,callback}: ok.
+  make -f Makefile.generic dyncall dyncallback
+- tests: ok
+  ( cd test ; make -f Makefile.generic all-dyncall all-dyncallback )
+
+
+Build notes related to dyncall:
+-------------------------------
+
+CFLAGS
+  Use '-fPIC' for at least 64-bit systems and when you want the code to be 
+  included as a shared library or module image.
+LDLIBS
+  Use '-lm' for test/suite - it uses pow function.
+  Use '-ldl' for dynload examples such as test/nm and test/resolve_self on Linux.
+
+
+Feature:
+--------
+configure --prefix=<prefix> -> Makefile DESTDIR=variable
+make -f Makefile.generic DESTDIR=<prefix>
+
+
+Todo: 
+-----
+- sun's make: CXX does not exist.. no rule for *.cpp files but *.cc.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/README.MacOSX	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,31 @@
+Building DynCall on Mac OS X
+============================
+
+
+The build system supports universal binaries (including static libraries) by
+default (i386, x86_64).
+In addition, the desired SDK can be choosen.
+
+Optional configure switches for Mac OS X:
+
+  Operating System:
+    --target=MacOSX (optional, auto-detect)
+
+  SDK:
+    --sdk=<version> (optional, auto-detect)
+
+  Architecture:
+    not specified, builds universal binaries depending on SDK version
+
+
+Configure and build for host platform:
+
+  ./configure
+  make
+  sudo make install
+
+
+Compile for Mac OS X 10.4u:
+
+  configure --target=MacOSX --sdk=10.4u
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/README.Minix	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,37 @@
+Building DynCall on Minix 3
+===========================
+
+
+Status:
+-------
+- Compiles under GNU tool-chain on Minix 3.1.8 using script for Makefile.generic
+  or by building specific make targets
+- dyncall: tests run ok.
+- dyncallback: minor bugs on dyncallback (some cases fail)
+- dynload: unsupported due to missing dynamic linker.
+- Integration of ACK tool-chain is in progress but not functional at the moment...
+
+
+Building:
+---------
+
+1) using configure and make:
+$ ./configure
+$ make libdyncall libdyncallback
+
+2) or using build script for gcc (using Makefile.generic):
+$ sh buildsys/scripts/batch-build-minix.sh
+
+
+Minix facts:
+------------
+- posix make
+- ACK (Amsterdam Compiler Kit) compiler for C, Modula-2 and Pascal
+  using own Assembly format
+- ACK Assembler:
+   if very first character is '#' - C preprocessor is run..
+
+- Minix 32-bit: 
+- ACK 32-bit compiler: long long is not supported
+- Minix 16-bit: not yet reviewed...
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/README.NDS	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,25 @@
+Build instructions for DynCall on Nintendo DS
+   using devkitPro and NMake under Windows
+=============================================
+
+
+To build the library, you have to configure it first.
+Since the NDS build uses devkitPro and NMake, assure
+to have them in your %PATH%.
+
+To configure the library, call one of the following,
+depending if you want to use the processor in ARM or
+THUMB mode:
+
+  configure.bat /tool-gcc /target-nds-arm
+  configure.bat /tool-gcc /target-nds-thumb
+
+Note that the /tool-gcc flag is needed, because we're
+using devkitARM (via devkitPro) which is based on the
+GCC toolchain. The /target-nds-* flags don't imply
+this.
+
+Then, call:
+
+  nmake /F Nmakefile
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/README.PSP	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+Cross-compile DynCall for PSP using PSP-SDK
+===========================================
+
+
+Make sure the PSP SDK's is installed and that the build tools (e.g. psp-gcc) are
+in your PATH. Also make sure that your PSP SDK's include files are in your CPATH
+
+
+Status:
+-------
+
+- dyncall: tests run ok.
+- dyncallback: all good.
+- dynload: unsupported due to missing dynamic linker and ELF headers.
+  
+
+
+There are currently two ways to build dyncall for PSP.
+
+Build using configure and make:
+-------------------------------
+
+  $ ./configure --target=PSP
+  $ make libdyncall libdyncallback
+
+
+Build using build script for gcc (using Makefile.generic):
+----------------------------------------------------------
+  $ sh buildsys/scripts/batch-build-psp.sh
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/README.SunOS	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,91 @@
+Building DynCall on Solaris and other SunOS distributions
+=========================================================
+
+
+Current Status of Solaris Architectures:
+
+i386      : ok.
+AMD64     : ok.
+SPARC     : no dyncallback support.
+SPARC64   : bugs in dyncall (see BUGS), no dyncallback support.
+
+Supported Compilers: SunPro C/C++ compiler and GCC.
+Supported Build-Systems: configure/make, Makefile.embedded and CMake.
+
+
+Details
+=======
+It has been ported and tested for x86 and sparc32/64 on Solaris 10/X86 
+using the SunPro compiler suite and sun's make. The same goes for
+OpenSolaris distributions - the library builds and runs fine on Nexenta
+x86 and x64.
+On Solaris, it also cross-builds for amd64 just fine, but the we don't
+have access to a x64 Solaris to run the tests.
+
+
+Building DynCall:
+-----------------
+
+  $ ./configure
+  $ make
+
+
+
+It is also possible to use 'Makefile.embedded' for sun make, GNU make and
+BSD make:
+
+
+Build with SUN make and compilers from sun using Makefile.embedded:
+-------------------------------------------------------------------
+
+  $ make -f Makefile.embedded sun
+  $ (cd test; make -f Makefile.embedded sun)
+
+
+Build for sparc64 with SUN make and compilers from sun using Makefile.embedded:
+-------------------------------------------------------------------------------
+
+  $ make -f Makefile.embedded sun-64bit
+  $ (cd test; make -f Makefile.embedded sun-64bit)
+
+
+Build with SUN make and GNU C compiler using Makefile.embedded:
+---------------------------------------------------------------
+
+  $ make -f Makefile.embedded sun-gcc
+  $ (cd test; make -f Makefile.embedded sun-gcc)
+ 
+
+Build for sparc64 with SUN make and GNU C compiler using Makefile.embedded:
+---------------------------------------------------------------------------
+
+  $ make -f Makefile.embedded sun-gcc-64bit
+  $ (cd test; make -f Makefile.embedded sun-gcc-64bit)
+
+
+NOTE: There are still issues with the sparc64 port on Solaris.
+
+
+Build with CMake, Sun make and SunPro for sparc64:
+--------------------------------------------------
+
+  $ cmake -DCMAKE_C_FLAGS=-m64 -DCMAKE_ASM_FLAGS=-m64 -DCMAKE_CXX_FLAGS=-m64 .
+  $ make
+
+Installation
+------------
+
+  $ make -f Makefile.embedded PREFIX=<some/prefix> install
+
+
+Tested Platforms
+----------------
+
+x86/amd64: 
+  - using Solaris 10 using SunPro Tools
+  - using Nexenta (SunOS 5.11 kernel) using GNU tools
+
+sparc 32/64 bit:
+  - SunOS 5.1 using SunPro and GCC on a Sun Fire V440 via developer account
+    thanks to gwdg.de!
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/README.Windows	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,64 @@
+Bulding DynCall on Windows
+==========================
+
+
+Build using buildsys/nmake and MS Visual Studio Tools:
+------------------------------------------------------
+
+  32-bit:
+    vcvarsall.bat x86
+    .\configure.bat /target-x86
+    nmake /f Nmakefile
+
+  64-bit:
+    vcvarsall.bat amd64
+    .\configure.bat /target-x64
+    nmake /f Nmakefile
+
+  Build/run tests:
+    cd test
+    nmake /f Nmakefile
+    
+    NOTE: if you encounter 'python'/'lua' not found messages (which is 
+     executed mistakenly for re-generation of test C code)
+     timestamps are wrong; workaround: run "svn revert -R ." several times.
+
+Build using buildsys/gmake and MinGW or Cygwin:
+-----------------------------------------------
+
+  32-bit:
+    .\configure.bat /target-x86 /tool-gcc
+    make
+
+  64-bit:
+    .\configure.bat /target-x64 /tool-gcc
+    make
+
+
+Build using Makefile.embedded and MinGW or Cygwin:
+--------------------------------------------------
+
+    > mingw32-make -f Makefile.embedded
+    $ make -f Makefile.embedded CC=gcc
+
+
+Build using CMake and Nmake:
+----------------------------
+
+  Put the appropriate tool-chain in path (32 or 64-bit version of MSVC), then:
+  
+    cmake -G "NMake Makefiles" %DYNCALL_SOURCE_DIR%
+    nmake
+
+
+Build using CMake and Visual Studio:
+------------------------------------
+ 
+  32-bit:
+    cmake .
+    open DynCall.sln
+
+  BROKEN: SAFE EH.
+
+  BROKEN: Rules to assemble MASM files are still missing.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/README.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,84 @@
+Makefile.embedded - hybrid DynCall makefiles for GNU, BSD and SUN make
+======================================================================
+
+
+Brief overview
+--------------
+This is one of the latest build systems designed for DynCall.
+It was designed for being embeddable in bigger 'make' based systems.
+It uses a very simple structure and it does not require any 'configure' phase.
+Instead the user can specify the CFLAGS and LDFLAGS by himself.
+For a couple of platforms, the make system supports phony targets of popular
+operating-systems such as 'bsd'.
+
+Building the library:
+---------------------
+$ make -f Makefile.embedded <variant>
+
+Building the tests:
+-------------------
+$ cd test ; make -f Makefile.embedded <variant>
+
+Installation:
+-------------
+$ make -f Makefile.embedded PREFIX=/usr/local install
+
+Installation with support for DESTDIR:
+--------------------------------------
+$ make -f Makefile.embedded DESTDIR=/tmp/staging PREFIX=/usr/local install
+
+
+Available variants:
+-------------------
+bsd                   Free/Net/Open/DragonFly/Mir BSD     
+linux                 Linux
+osx                   Mac OS X
+osx-universal         Mac OS X universal binaries (i386,x86_64 and ppc)
+sun                   SunOS and Sun Pro compiler
+sun-64bit             SunOS and Sun Pro compiler for sparc64(? amd64) 
+sun-gcc               SunOS and GCC compiler
+sun-gcc-64bit         SunOS and GCC compiler for sparc64 (? amd64)
+ios61                 iOS SDK 6.1 armv7  (untested!)
+ios61-nothumb         iOS SDK 6.1 armv7 -mno-thumb (untested!)
+
+Tweaking the build:
+-------------------
+$ VAR1=<VALUE1> VAR2=<VALUE2> .. make -f Makefile.embedded <variant>
+
+Adding a variant
+-----------------
+Currently we deal with two files to specify a custom target.
+
+The top-level Makefile.embedded controls for building the libraries.
+Useful variables are AR, CC, CFLAGS and ASFLAGS.
+
+The test/Makefile.embedded file controls for building the tests.
+The tests currently involve sometimes C++ and some platforms need
+to link with the math library. Others need the dynamic linker.
+Useful variables are CXX, CC, CCC (Sun), CFLAGS, CCFLAGS (Sun), 
+CXXFLAGS andLDFLAGS.
+
+Background
+----------
+During the preparation for the public release of the R package 'rdyncall' I was 
+looking for a way to get DynCall integrated into an existing Make system such 
+as offered by R for build R packages. 
+
+It was inspired by the make files of Lua which are damn simple and
+don't need a configure but a user that knows the target platform name.
+
+The source package can be configured automatically during compilation and
+does not require explicit configuration anymore using "*.S" files that
+are Assembly files which are preprocessed by the C Preprocessor.
+
+This feature is available by GCC and SunPro compilers.
+
+Limitations
+-----------
+
+Mac OS X universal static libraries require to use 
+
+'libtool -static -o libname.a obj1.o obj2.o ...' instead of 'ar cru libname.a obj1.o obj2.o'.
+We use predefined variables AR and ARFLAGS. 
+The variant osx-universal uses AR=libtool.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/README.iOS	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,77 @@
+Building DynCall for apple's iOS platforms (iPhone, iPod touch, iPad)
+=====================================================================
+
+
+Environment Setup for Cross-Compilation using iPhone SDK:
+
+  $ source ./buildsys/scripts/setenv-sdk-ios.sh
+
+
+Package Configuration
+
+  $ ./configure --target=iOS --sdk=<MAJOR>.<MINOR>
+
+
+Building
+
+  $ make 
+  
+
+
+Details:
+
+This builds by default universal binaries (armv7,arm64).
+
+Required configure switches:
+
+  --target=[iOS|iPhoneSimulator]
+  
+  --sdk=<version> (tested versions 2.0..4.0, 6.1, 8.3)
+
+
+Supported Tool-chains
+
+  gcc, clang
+
+
+
+
+
+Other ways to build
+-------------------
+
+Building directly with Makefile.embedded ..
+
+  ARMv7 for iOS 6.1
+
+  $ make -f Makefile.embedded ios61-os
+  $ cd test && make -f Makefile.embedded ios61-os
+
+  ARMv7 (no thumb) for iOS 6.1
+
+  $ make -f Makefile.embedded ios61-os-nothumb
+  $ cd test && make -f Makefile.embedded ios61-os-nothumb
+
+  Simulator for iOS 6.1
+
+  $ make -f Makefile.embedded ios61-sim
+  $ cd test && make -f Makefile.embedded ios61-sim
+
+  ARMv7/ARM64 Universal build for iOS 8.3
+
+  $ make -f Makefile.embedded ios83-os-universal
+  $ cd test && make -f Makefile.embedded ios83-os-universal
+
+  Tested Mac OS X platforms: 10.[7,8,10]
+  Tested Xcode toolchains: 4.6, 6.3
+
+
+Building directly with Makefile.generic ..
+
+  $ source buildsys/scripts/setenv-sdk-ios.sh
+  $ source buildsys/scripts/setenv-cross-ios.sh
+
+  make -f Makefile.generic ...
+
+  uses armv6 and sdk 4.3 as default, can be changed in 'setenv-cross-ios.sh'.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,13 @@
+find_package(LATEX)
+if(PDFLATEX_COMPILER)
+  add_custom_command(
+    OUTPUT  manual.pdf
+    COMMAND ${PDFLATEX_COMPILER}
+    ARGS manual.tex
+    DEPENDS manual.tex
+  )
+  file(GLOB CLEAN_FILES *.aux *.log *.lof *.lol *.lot *.out *.toc)
+  set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CLEAN_FILES}")
+endif()
+add_custom_target(manual ALL echo DEPENDS manual.pdf)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,21 @@
+all: manual.pdf
+
+sources: *.tex callconvs/*.tex dyncall_logo.* dyncall_watermark.*
+
+manual.pdf: sources
+	# run twice for toc on some tex installs
+	cd ${VPATH} && pdflatex -output-directory=${PWD} manual.tex
+	cd ${VPATH} && pdflatex -output-directory=${PWD} manual.tex
+
+manual.html: manual_tex4ht.cfg sources
+	# Create tex4ht.env from default one, but with better bitmaps
+	cp $$(dirname $$(which tex4ht))/../share/texmf-dist/tex4ht/base/unix/tex4ht.env ${VPATH}/
+	cd ${VPATH} && sed -E -i '' 's/(Text|Graphics)(AlphaBits)=[1,2,3]([^0-9])/\1\2=4\3/g' tex4ht.env
+	cd ${VPATH} && htlatex manual.tex manual_tex4ht " -cunihtf"
+
+clean:
+	# pdf
+	for i in pdf aux lof log lol lot out toc; do rm -f manual.$$i || true; done
+	# html
+	for i in 4ct 4tc css dvi html idv lg tmp xref; do rm -f manual.$$i || true; done
+	for i in manual*x.png manual*.html texput.log manual_*.log zzmanual.eps zzmanual.ps tex4ht.env; do rm -f $$i || true; done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,31 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+TOP   = ..  
+
+!INCLUDE $(TOP)/buildsys/nmake/prolog.nmake
+
+TARGETS=manual.pdf
+manual.pdf: dummy
+
+# Pseudo-targets are always out of date...
+dummy:
+
+!INCLUDE $(TOP)/buildsys/nmake/epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/callconvs/callconv_arm32.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,322 @@
+%
+% Copyright (c) 2007,2010 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+
+% ==================================================
+% ARM32
+% ==================================================
+\subsection{ARM32 Calling Convention}
+
+\paragraph{Overview}
+
+The ARM32 family of processors is based on 
+the Advanced RISC Machines (ARM) processor architecture (32 bit RISC). 
+The word size is 32 bits (and the programming model is LLP64).\\
+Basically, this family of microprocessors can be run in 2 major modes:\\
+\\
+\begin{tabular}{2 B}
+\hline
+Mode          & Description\\
+\hline
+{\bf ARM}     & 32bit instruction set\\
+{\bf THUMB}   & compressed instruction set using 16bit wide instruction encoding\\
+\hline
+\end{tabular}
+\\
+\\
+For more details, take a look at the ARM-THUMB Procedure Call Standard (ATPCS) \cite{ATPCS}, the Procedure Call Standard for the ARM Architecture (AAPCS) \cite{AAPCS}, as well as the Debian ARM EABI port wiki \cite{armeabi}.
+
+
+\paragraph{\product{dyncall} support}
+
+Currently, the \product{dyncall} library supports the ARM and THUMB mode of the ARM32 family (ATPCS \cite{ATPCS} and EABI \cite{armeabi}), excluding manually triggered ARM-THUMB interworking calls. Although it's quite possible that the current implementation runs on other ARM processor families as well, please note that only the ARMv4t family has been thoroughly tested at the time of writing. Please report if the code runs on other ARM families, too.\\
+It is important to note, that dyncall supports the ARM architecture calling convention variant {\bf with floating point hardware disabled} (meaning that the FPA and the VFP (scalar mode) procedure call standards are not supported).
+This processor family features some instruction sets accelerating DSP and multimedia application like the ARM Jazelle Technology (direct Java bytecode execution, providing acceleration for some bytecodes while calling software code for others), etc. that are not supported by the dyncall library.\\
+
+
+\subsubsection{ATPCS ARM mode}
+
+
+\paragraph{Registers and register usage}
+
+In ARM mode, the ARM32 processor has sixteen 32 bit general purpose registers, namely r0-r15:\\
+\\
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name         & Brief description\\
+\hline
+{\bf r0}     & parameter 0, scratch, return value\\
+{\bf r1}     & parameter 1, scratch, return value\\
+{\bf r2-r3}  & parameters 2 and 3, scratch\\
+{\bf r4-r10} & permanent\\
+{\bf r11}    & frame pointer, permanent\\
+{\bf r12}    & scratch\\
+{\bf r13}    & stack pointer, permanent\\
+{\bf r14}    & link register, permanent\\
+{\bf r15}    & program counter (note: due to pipeline, r15 points to 2 instructions ahead)\\
+\hline
+\end{tabular}
+\caption{Register usage on arm32}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: right-to-left
+\item caller cleans up the stack
+\item first four words are passed using r0-r3
+\item subsequent parameters are pushed onto the stack (in right to left order, such that the stack pointer points to the first of the remaining parameters)
+\item if the callee takes the address of one of the parameters and uses it to address other parameters (e.g. varargs) it has to copy - in its prolog - the first four words to a reserved stack area adjacent to the other parameters on the stack
+\item parameters \textless=\ 32 bits are passed as 32 bit words
+\item 64 bit parameters are passed as two 32 bit parts (even partly via the register and partly via the stack), although this doesn't seem to be specified in the ATPCS), with the loword coming first
+\item structures and unions are passed by value, with the first four words of the parameters in r0-r3
+\item if return value is a structure, a pointer pointing to the return value's space is passed in r0, the first parameter in r1, etc... (see {\bf return values})
+\item keeping the stack eight-byte aligned can improve memory access performance and is required by LDRD and STRD on ARMv5TE processors which are part of the ARM32 family, so, in order to avoid problems one should always align the stack (tests have shown, that GCC does care about the alignment when using the ellipsis)
+\end{itemize}
+
+\paragraph{Return values}
+\begin{itemize}
+\item return values \textless=\ 32 bits use r0
+\item 64 bit return values use r0 and r1
+\item if return value is a structure, the caller allocates space for the return value on the stack in its frame and passes a pointer to it in r0
+\end{itemize}
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                         & \vdots &                                      &                              \\
+\hhline{~=~~}
+register save area                       &        &                                      & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+local data                               &        &                                      &                              \\
+\hhline{~-~~}
+\mrlbrace{7}{parameter area}             & \ldots & \mrrbrace{3}{stack parameters}       &                              \\
+                                         & \ldots &                                      &                              \\
+                                         & \ldots &                                      &                              \\
+\hhline{~=~~}
+                                         & r3     & \mrrbrace{4}{spill area (if needed)} & \mrrbrace{7}{current frame}  \\
+                                         & r2     &                                      &                              \\
+                                         & r1     &                                      &                              \\
+                                         & r0     &                                      &                              \\
+\hhline{~-~~}
+register save area (with return address) &        &                                      &                              \\
+\hhline{~-~~}
+local data                               &        &                                      &                              \\
+\hhline{~-~~}
+parameter area                           & \vdots &                                      &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on arm32}
+\end{figure}
+
+
+\newpage
+
+\subsubsection{ATPCS THUMB mode}
+
+
+\paragraph{Status}
+
+\begin{itemize}
+\item The ATPCS THUMB mode is untested.
+\item Ellipse calls may not work.
+\item C++ this calls do not work.
+\end{itemize}
+
+\paragraph{Registers and register usage}
+
+In THUMB mode, the ARM32 processor family supports eight 32 bit general purpose registers r0-r7 and access to high order registers r8-r15:\\
+\\
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name         & Brief description\\
+\hline
+{\bf r0}     & parameter 0, scratch, return value\\
+{\bf r1}     & parameter 1, scratch, return value\\
+{\bf r2-r3}  & parameters 2 and 3, scratch\\
+{\bf r4-r6}  & permanent\\
+{\bf r7}     & frame pointer, permanent\\
+{\bf r8-r11} & permanent\\
+{\bf r12}    & scratch\\
+{\bf r13}    & stack pointer, permanent\\
+{\bf r14}    & link register, permanent\\
+{\bf r15}    & program counter (note: due to pipeline, r15 points to 2 instructions ahead)\\
+\hline
+\end{tabular}
+\caption{Register usage on arm32 thumb mode}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: right-to-left
+\item caller cleans up the stack
+\item first four words are passed using r0-r3
+\item subsequent parameters are pushed onto the stack (in right to left order, such that the stack pointer points to the first of the remaining parameters)
+\item if the callee takes the address of one of the parameters and uses it to address other parameters (e.g. varargs) it has to copy - in its prolog - the first four words to a reserved stack area adjacent to the other parameters on the stack
+\item parameters \textless=\ 32 bits are passed as 32 bit words
+\item 64 bit parameters are passed as two 32 bit parts (even partly via the register and partly via the stack), although this doesn't seem to be specified in the ATPCS), with the loword coming first
+\item structures and unions are passed by value, with the first four words of the parameters in r0-r3
+\item if return value is a structure, a pointer pointing to the return value's space is passed in r0, the first parameter in r1, etc. (see {\bf return values})
+\item keeping the stack eight-byte aligned can improve memory access performance and is required by LDRD and STRD on ARMv5TE processors which are part of the ARM32 family, so, in order to avoid problems one should always align the stack (tests have shown, that GCC does care about the alignment when using the ellipsis)
+\end{itemize}
+
+
+\paragraph{Return values}
+\begin{itemize}
+\item return values \textless=\ 32 bits use r0
+\item 64 bit return values use r0 and r1
+\item if return value is a structure, the caller allocates space for the return value on the stack in its frame and passes a pointer to it in r0
+\end{itemize}
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                         & \vdots &                                      &                              \\
+\hhline{~=~~}
+register save area                       &        &                                      & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+local data                               &        &                                      &                              \\
+\hhline{~-~~}
+\mrlbrace{7}{parameter area}             & \ldots & \mrrbrace{3}{stack parameters}       &                              \\
+                                         & \ldots &                                      &                              \\
+                                         & \ldots &                                      &                              \\
+\hhline{~=~~}
+                                         & r3     & \mrrbrace{4}{spill area (if needed)} & \mrrbrace{7}{current frame}  \\
+                                         & r2     &                                      &                              \\
+                                         & r1     &                                      &                              \\
+                                         & r0     &                                      &                              \\
+\hhline{~-~~}
+register save area (with return address) &        &                                      &                              \\
+\hhline{~-~~}
+local data                               &        &                                      &                              \\
+\hhline{~-~~}
+parameter area                           & \vdots &                                      &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on arm32 thumb mode}
+\end{figure}
+
+
+
+\newpage
+
+\subsubsection{EABI (ARM and THUMB mode)}
+
+
+The ARM EABI is very similar to the ABI outlined in ARM-THUMB procedure call
+standard (ATPCS) \cite{ATPCS} - however, the EABI requires the stack to be
+8-byte aligned at function entries, as well as 64 bit parameters. The latter
+are aligned on 8-byte boundaries on the stack and 2-registers for parameters
+passed via register. In order to achieve such an alignment, a register might
+have to be skipped for parameters passed via registers, or 4-bytes on the stack
+for parameters passed via the stack. Refer to the Debian ARM EABI port wiki for more information \cite{armeabi}.
+
+
+\paragraph{Status}
+
+\begin{itemize}
+\item The EABI THUMB mode is tested and works fine (contrary to the ATPCS).
+\item Ellipse calls do not work.
+\item C++ this calls do not work.
+\end{itemize}
+
+\newpage
+
+\subsubsection{ARM on Apple's iOS (Darwin) Platform}
+
+
+The iOS runs on ARMv6 (iOS 2.0) and ARMv7 (iOS 3.0) architectures.
+Typically code is compiled in Thumb mode.
+
+\paragraph{Register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name         & Brief description\\
+\hline
+{\bf R0}     & parameter 0, scratch, return value\\
+{\bf R1}     & parameter 1, scratch, return value\\
+{\bf R2-R3}  & parameters 2 and 3, scratch\\
+{\bf R4-R6}  & permanent\\
+{\bf R7}     & frame pointer, permanent\\
+{\bf R8}     & permanent\\
+{\bf R9}     & permanent(iOS 2.0) and scratch (since iOS 3.0)\\
+{\bf R10-R11}& permanent\\
+{\bf R12}    & scratch, intra-procedure scratch register (IP) used by dynamic linker\\
+{\bf R13}    & stack pointer, permanent\\
+{\bf R14}    & link register, permanent\\
+{\bf R15}    & program counter (note: due to pipeline, r15 points to 2 instructions ahead)\\
+{\bf CPSR}   & Program status register\\
+{\bf D0-D7}  & scratch. aliases S0-S15, on ARMv7 alsa as Q0-Q3. Not accessible from Thumb mode on ARMv6.\\
+{\bf D8-D15} & permanent, aliases S16-S31, on ARMv7 alsa as Q4-A7. Not accesible from Thumb mode on ARMv6.\\
+{\bf D16-D31}& Only available in ARMv7, aliases Q8-Q15.\\
+{\bf FPSCR}  & VFP status register.\\
+\hline
+\end{tabular}
+\caption{Register usage on ARM Apple iOS}
+\end{table}
+
+The ABI is based on the AAPCS but with some important differences listed below:
+
+\begin{itemize}
+\item R7 instead of R11 is used as frame pointer
+\item R9 is scratch since iOS 3.0, was preserved before.
+\end{itemize}
+
+\subsubsection{Architectures}
+
+The ARM architecture family contains several revisions with capabilities and
+extensions (such as thumb-interworking and more vector registers) 
+The following table summaries important properties of the various 
+architecture standards.
+
+% iPhone 3GS : ARM Cortex-A8
+% Nintendo DS: ARM 7 and ARM 9
+% ARM 7: ARMv4T
+% ARM 9: ARMv4T, HTC Wizard
+
+\begin{table}[h]
+\begin{tabular}{lll}
+Arch   & Platforms & Details \\
+\hline
+ARMv4  & & \\
+\hline
+ARMv4T & ARM 7, ARM 9, Neo FreeRunner (OpenMoko) & \\
+\hline
+ARMv5  & & BLX instruction available \\
+\hline
+ARMv6  & & No vector registers available in thumb \\
+\hline
+ARMv7  & iPod touch, iPhone 3GS/4 & \\ 
+\hline
+\end{tabular}
+\caption{Overview of ARM Architecture, Platforms and Details}
+\end{table}
+
+\newpage
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/callconvs/callconv_arm64.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,138 @@
+%
+% Copyright (c) 2014,2015 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+
+% ==================================================
+% ARM64
+% ==================================================
+\subsection{ARM64 Calling Convention}
+
+\paragraph{Overview}
+
+ARMv8 introduced the AArch64 calling convention. ARM64 chips can be run in 64 or 32bit mode, but not by the same process. Interworking is only intre-process.\\
+The word size is defined to be 32 bits, a dword 64 bits. Note that this is due to historical reasons (terminology
+didn't change from ARM32).\\
+For more details, take a look at the Procedure Call Standard for the ARM 64-bit Architecture \cite{AAPCS64}.
+
+
+\paragraph{\product{dyncall} support}
+
+The \product{dyncall} library supports the ARM 64-bit AArch64 PCS ABI, for calls and callbacks.
+
+\subsubsection{AAPCS64 Calling Convention}
+
+\paragraph{Registers and register usage}
+
+ARM64 features thirty-one 64 bit general purpose registers, namely x0-x30. Also, there is SP, a register with restricted use, used for the stack pointer, and PC dedicated as program counter. Additionally, there are thirty-two 128 bit registers v0-v31, to be used as SIMD and floating point registers, referred to as q0-q31, d0-d31 and s0-s31, respectively, depending on their use:\\
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name          & Brief description\\
+\hline        
+{\bf x0-x7}   & parameters, scratch, return value\\
+{\bf x8}      & indirect result location pointer\\
+{\bf x9-x15}  & scratch\\
+{\bf x16}     & permanent in some cases, can have special function (IP0), see doc\\
+{\bf x17}     & permanent in some cases, can have special function (IP1), see doc\\
+{\bf x18}     & reserved as platform register, advised not to be used for handwritten, portable asm, see doc \\
+{\bf x19-x28} & permanent\\
+{\bf x29}     & permanent, frame pointer\\
+{\bf x30}     & permanent, link register\\
+{\bf SP}      & permanent, stack pointer\\
+{\bf PC}      & program counter\\
+\hline
+\end{tabular}
+\caption{Register usage on arm64}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: right-to-left
+\item caller cleans up the stack
+\item first 8 integer arguments are passed using x0-x7
+\item first 8 floating point arguments are passed using d0-d7
+\item subsequent parameters are pushed onto the stack
+\item if the callee takes the address of one of the parameters and uses it to address other parameters (e.g. varargs) it has to copy - in its prolog - the first 8 integer and 8 floating-point registers to a reserved stack area adjacent to the other parameters on the stack (only the unnamed parameters require saving, though)
+\item structures and unions are passed by value, with the first four words of the parameters in r0-r3
+\item if return value is a structure, a pointer pointing to the return value's space is passed in r0, the first parameter in r1, etc... (see {\bf return values})
+\item stack is required to be throughout eight-byte aligned
+\end{itemize}
+
+\paragraph{Return values}
+\begin{itemize}
+\item integer return values use x0
+\item floating-point return values use d0
+\item otherwise, the caller allocates space, passes pointer to it to the callee through x8, and callee writes return value to this space
+\end{itemize}
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                   & \vdots &                                       &                              \\
+\hhline{~=~~}                                                                       
+register save area                 &        &                                       & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}                                                                       
+local data                         &        &                                       &                              \\
+\hhline{~-~~}                                                                       
+\mrlbrace{13}{parameter area}      & \ldots & \mrrbrace{3}{stack parameters}        &                              \\
+                                   & \ldots &                                       &                              \\
+                                   & \ldots &                                       &                              \\
+\hhline{~=~~}
+                                   & x0     & \mrrbrace{10}{spill area (if needed)} & \mrrbrace{15}{current frame} \\
+                                   & x1     &                                       &                              \\
+                                   & \ldots &                                       &                              \\
+                                   & x2     &                                       &                              \\
+                                   & x7     &                                       &                              \\
+                                   & d0     &                                       &                              \\
+                                   & d1     &                                       &                              \\
+                                   & \ldots &                                       &                              \\
+                                   & d2     &                                       &                              \\
+                                   & d7     &                                       &                              \\
+\hhline{~-~~}                                                                       
+register save area                 &        &                                       &                              \\
+\hhline{~-~~}                                                                       
+local data                         &        &                                       &                              \\
+\hhline{~-~~}                                                                       
+link and frame register            & x30    &                                       &                              \\
+                                   & x29    &                                       &                              \\
+\hhline{~-~~}                                                                       
+parameter area                     & \vdots &                                       &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on arm64}
+\end{figure}
+
+\newpage
+
+
+\subsubsection{Apple's ARM64 Function Calling Conventions}
+
+\paragraph{Overview}
+
+Apple's ARM64 calling convention is based on the AAPCS64 standard, however, diverges in some ways.
+Only the differences are listed here, for more details, take a look at Apple's official documentation \cite{AppleARM64}.
+
+\begin{itemize}
+\item arguments passed via stack use only the space they need, but are subject to the type alignment requirements (which is 1 byte for char and bool, 2 for short, 4 for int and 8 for every other type)
+\item caller is required to sign and zero-extend arguments smaller than 32bits
+\end{itemize}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/callconvs/callconv_mips.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,117 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\subsection{MIPS Calling Convention}
+
+\paragraph{Overview}
+
+The MIPS family of processors is based on the MIPS processor architecture.
+Multiple revisions of the MIPS Instruction set exist, namely MIPS I, MIPS II, MIPS III, MIPS IV, MIPS32 and MIPS64.
+Today, MIPS32 and MIPS64 for 32-bit and 64-bit respectively.\\
+Several add-on extensions exist for the MIPS family: 
+
+\begin{description}
+\item [MIPS-3D] simple floating-point SIMD instructions dedicated to common 3D tasks.
+\item [MDMX] (MaDMaX) more extensive integer SIMD instruction set using 64 bit floating-point registers.
+\item [MIPS16e] adds compression to the instruction stream to make programs take up less room (allegedly a response to the THUMB instruction set of the ARM architecture).
+\item [MIPS MT] multithreading additions to the system similar to HyperThreading.
+\end{description}
+
+Unfortunately, there is actually no such thing as "The MIPS Calling Convention".  Many possible conventions are used
+by many different environments such as \emph{32}, \emph{O64}, \emph{N32}, \emph{64} and \emph{EABI}.
+
+\paragraph{\product{dyncall} support}
+
+Currently, dyncall supports the EABI calling convention which is used on the Homebrew SDK for the Playstation Portable.
+As documentation for this EABI is unofficial, this port is currently experimental.
+
+\subsubsection{MIPS EABI 32-bit Calling Convention}
+
+\paragraph{Register usage}
+
+\begin{table}[h]
+\begin{tabular}{lll}
+\hline
+Name                                   & Alias                     & Brief description\\
+\hline                                                             
+{\bf \$0}                              & {\bf \$zero}              & Hardware zero \\
+{\bf \$1}                              & {\bf \$at}                & Assembler temporary \\
+{\bf \$2-\$3}                          & {\bf \$v0-\$v1}           & Integer results \\
+{\bf \$4-\$11}                         & {\bf \$a0-\$a7}           & Integer arguments\\
+{\bf \$12-\$15,\$24,\$25}              & {\bf \$t4-\$t7,\$t8,\$t9} & Integer temporaries \\
+{\bf \$25}                             & {\bf \$t9}                & Integer temporary, hold the address of the called function for all PIC calls (by convention) \\
+{\bf \$16-\$23}                        & {\bf \$s0-\$s7}           & Preserved \\
+{\bf \$26,\$27}                        & {\bf \$kt0,\$kt1}         & Reserved for kernel \\
+{\bf \$28}                             & {\bf \$gp}                & Global pointer \\
+{\bf \$29}                             & {\bf \$sp}                & Stack pointer \\
+{\bf \$30}                             & {\bf \$s8}                & Frame pointer \\
+{\bf \$31}                             & {\bf \$ra}                & Return address \\
+{\bf hi, lo}                           &                           & Multiply/divide special registers \\
+{\bf \$f0,\$f2}                        &                           & Float results \\
+{\bf \$f1,\$f3,\$f4-\$f11,\$f20-\$f23} &                           & Float temporaries \\
+{\bf \$f12-\$f19}                      &                           & Float arguments \\
+\end{tabular}
+\caption{Register usage on mips32 eabi calling convention}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item Stack parameter order: right-to-left
+\item Caller cleans up the stack
+\item Stack always aligned to 8 bytes.
+\item first 8 integers and floats are passed independently in registers using \$a0-\$a7 and \$f12-\$f19, respectively.
+\item if either integer or float registers are consumed up, the stack is used.
+\item 64-bit floats and integers are passed on two integer registers starting at an even register number, probably skipping one odd register.
+\item \$a0-\$a7 and \$f12-\$f19 are not required to be preserved.
+\item results are returned in \$v0 (32-bit integer), \$v0 and \$v1 (64-bit integer/float), \$f0 (32 bit float) and \$f0 and \$f2 (2 $\times$ 32 bit float e.g. complex).
+\end{itemize}
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+register save area                &                            &                                & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+local data                        &                            &                                &   \\
+\hhline{~-~~}
+\mrlbrace{3}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+\hhline{~=~~}
+register save area (with return address) &                            &                                & \mrrbrace{5}{current frame}  \\
+\hhline{~-~~}
+local data                         &                            &                                &                              \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\\
+\\
+\\
+\caption{Stack layout on mips32 eabi calling convention}
+\end{figure}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/callconvs/callconv_mips64.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,33 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\subsection{MIPS64 Calling Convention}
+
+\paragraph{Overview}
+
+TBC.
+
+\paragraph{\product{dyncall} support}
+
+We are currently working on that.
+
+Our test machine is a Loongson-CPU 2F subnotebook with OpenBSD.
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/callconvs/callconv_ppc32.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,249 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+% ==================================================
+% PowerPC 32
+% ==================================================
+\subsection{PowerPC (32bit) Calling Convention}
+
+\paragraph{Overview}
+
+\begin{itemize}
+\item Word size is 32 bits
+\item Big endian (MSB) and litte endian (LSB) operating modes.
+\item Processor operates on floats in double precision floating point arithmetc (IEEE-754) values directly (single precision is converted on the fly)
+\item Apple Mac OS X/Darwin PPC is specified in "Mac OS X ABI Function Call Guide"\cite{ppcMacOSX}. It uses Big Endian (MSB).
+\item Linux PPC 32-bit ABI is specified in "LSB for PPC"\cite{ppc32LSB} which is based on "System V ABI". It uses Big Endian (MSB).
+\item PowerPC EABI is defined in the "PowerPC Embedded Application Binary Interface 32-Bit Implementation".
+\end{itemize}
+
+
+\paragraph{\product{dyncall} support}
+
+\product{Dyncall} and \product{dyncallback} are supported for PowerPC (32bit) Big Endian (MSB) on Darwin (tested on Apple Mac OS X) and Linux, however, fail for *BSD.
+
+
+\subsubsection{Mac OS X/Darwin}
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name                & Brief description\\
+\hline
+{\bf gpr0}          & scratch\\
+{\bf gpr1}          & stack pointer\\
+{\bf gpr2}          & scratch\\
+{\bf gpr3}          & return value, parameter 0 if integer or pointer\\
+{\bf gpr4-gpr10}    & return value, parameter 1-7 for integer or pointer parameters\\
+{\bf gpr11}         & permanent\\
+{\bf gpr12}         & branch target for dynamic code generation\\
+{\bf gpr13-31}      & permanent\\
+{\bf fpr0}          & scratch\\
+{\bf fpr1-fpr13}    & parameter 0-12 for floating point (always double precision)\\
+{\bf fpr14-fpr31}   & permanent\\
+{\bf v0-v1}         & scratch\\
+{\bf v2-v13}        & vector parameters\\
+{\bf v14-v19}       & scratch\\
+{\bf v20-v31}       & permanent\\
+{\bf lr}            & scratch, link-register\\
+{\bf ctr}           & scratch, count-register\\
+{\bf cr0-cr1}       & scratch\\
+{\bf cr2-cr4}       & permanent\\
+{\bf cr5-cr7}       & scratch\\
+\hline
+\end{tabular}
+\caption{Register usage on Darwin PowerPC 32-Bit}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: right-to-left@@@?
+\item caller cleans up the stack@@@?
+\item the first 8 integer parameters are passed in registers gpr3-gpr10
+\item the first 12 floating point parameters are passed in registers fpr1-fpr13
+\item if a float parameter is passed via a register, gpr registers are skipped for subsequent integer parameters (based on the size of
+the float - 1 register for single precision and 2 for double precision floating point values)
+\item the caller pushes subsequent parameters onto the stack
+\item for every parameter passed via a register, space is reserved in the stack parameter area (in order to spill the parameters if
+needed - e.g. varargs)
+\item ellipsis calls take floating point values in int and float registers (single precision floats are promoted to double precision
+as defined for ellipsis calls)
+\item all nonvector parameters are aligned on 4-byte boundaries
+\item vector parameters are aligned on 16-byte boundaries
+\item integer parameters \textless\ 32 bit occupy high-order bytes of their 4-byte area
+\item composite parameters with size of 1 or 2 bytes occupy low-order bytes of their 4-byte area. INCONSISTENT with other 32-bit PPC
+binary interfaces. In AIX and OS 9, padding bytes always follow the data structure
+\item composite parameters 3 bytes or larger in size occupy high-order bytes
+\end{itemize}
+
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item return values of integer \textless=\ 32bit or pointer type use gpr3
+\item 64 bit integers use gpr3 and gpr4 (hiword in gpr3, loword in gpr4)
+\item floating point values are returned via fpr1
+\item structures \textless=\ 64 bits use gpr3 and gpr4
+\item for types \textgreater\ 64 bits, a secret first parameter with an address to the return value is passed
+\end{itemize}
+
+\pagebreak
+
+\paragraph{Stack layout}
+
+Stack frame is always 16-byte aligned. Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots              &                                      &                               \\
+\hhline{~=~~}
+local data                        &                     &                                      & \mrrbrace{13}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{6}{parameter area}      & \ldots              & \mrrbrace{3}{stack parameters}       &                               \\
+                                  & \ldots              &                                      &                               \\
+                                  & \ldots              &                                      &                               \\
+                                  & \ldots              & \mrrbrace{3}{spill area (as needed)} &                               \\
+                                  & \ldots              &                                      &                               \\
+                                  & gpr3 or fpr1        &                                      &                               \\
+\hhline{~-~~}
+\mrlbrace{6}{linkage area}        & reserved            &                                      &                               \\
+                                  & reserved            &                                      &                               \\
+                                  & reserved            &                                      &                               \\
+                                  & return address      &                                      &                               \\
+                                  & reserved for callee &                                      &                               \\
+                                  & saved by callee     &                                      &                               \\
+\hhline{~=~~}
+local data                        &                     &                                      & \mrrbrace{3}{current frame}   \\
+\hhline{~-~~}
+parameter area                    &                     &                                      &                               \\
+\hhline{~-~~}
+linkage area                      & \vdots              &                                      &                               \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on ppc32 Darwin}
+\end{figure}
+
+\subsubsection{System V PPC 32-bit}
+
+\paragraph{Status}
+
+\begin{itemize}
+\item C++ this calls do not work.
+\item Callbacks don't work on *BSD.
+\end{itemize}
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name                & Brief description\\
+\hline
+{\bf r0}          & scratch\\
+{\bf r1}          & stack pointer\\
+{\bf r2}          & system-reserved\\
+{\bf r3-r4}       & parameter passing and return value\\
+{\bf r5-r10}      & parameter passing\\
+{\bf r11-r12}     & scratch\\
+{\bf r13}         & Small data area pointer register\\
+{\bf r14-r30}     & Local variables\\
+{\bf r31}         & Used for local variables or \emph{environment pointer}\\
+{\bf f0}          & scratch\\
+{\bf f1}          & parameter passing and return value\\
+{\bf f2-f8}       & parameter passing\\
+{\bf f9-13}       & scratch\\
+{\bf f14-f31}     & Local variables\\
+{\bf cr0-cr7}     & Conditional register fields, each 4-bit wide (cr0-cr1 and   cr5-cr7 are scratch)\\
+{\bf lr}          & Link register (scratch)\\
+{\bf ctr}         & Count register (scratch) \\
+{\bf xer}         & Fixed-point exception register (scratch)\\
+{\bf fpscr}       & Floating-point Status and Control Register\\
+
+% {\bf v0-v1}         & scratch\\
+% {\bf v2-v13}        & vector parameters\\
+% {\bf v14-v19}       & scratch\\
+% {\bf v20-v31}       & permanent\\
+% {\bf lr}            & scratch, link-register\\
+% {\bf ctr}           & scratch, count-register\\
+% {\bf cr0-cr1}       & scratch\\
+% {\bf cr2-cr4}       & permanent\\
+% {\bf cr5-cr7}       & scratch\\
+\hline
+\end{tabular}
+\caption{Register usage on System V ABI PowerPC Processor}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item Stack pointer (r1) is always 16-byte aligned. The EABI differs here - it is 8-byte alignment.
+\item 8 general-purpose registers (r3-r10) for integer and pointer types.
+\item 8 floating-pointer registers (f1-f8) for float (promoted to double) and double types.
+\item Additional arguments are passed on the stack directly after the back-chain and saved return address (8 bytes structure) on the callers stack frame.
+\item 64-bit integer data types are passed in general-purpose registers as a whole in two
+ 32-bit general purpose registers (an odd and an even e.g. r3 and r4), probably skipping an even integer register.
+ or passed on the stack. They are never splitted into a register and stack part.
+\item Ellipse calls set CR bit 6 
+
+\end{itemize}
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item 32-bit integers use register r3, 64-bit use registers r3 and r4 (hiword in r3, loword in r4).
+\item floating-point values are returned using register f1.
+\end{itemize}
+
+\pagebreak
+
+\paragraph{Stack layout}
+
+Stack frame is always 16-byte aligned. Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{6}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{3}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+\hhline{~-~~}
+                                  & saved return address (for callee) &                                &                              \\
+\hhline{~-~~}
+                                  & parent stack frame pointer &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{3}{current frame}  \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\\
+\\
+\\
+\caption{Stack layout on System V ABI for PowerPC 32-bit calling convention}
+\end{figure}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/callconvs/callconv_ppc64.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,60 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+% ==================================================
+% PowerPC 64
+% ==================================================
+\subsection{PowerPC (64bit) Calling Convention}
+
+\paragraph{Overview}
+
+\begin{itemize}
+\item Word size is 64 bits
+\item Big endian (MSB) and litte endian (LSB) operating modes.
+\item Apple Mac OS X/Darwin PPC is specified in "Mac OS X ABI Function Call Guide"\cite{ppcMacOSX}. It uses Big Endian (MSB).
+\item Linux PPC 64-bit ABI is specified in "64-bit PowerPC ELF Application Binary Interface Supplement"\cite{ppcelf64abi} which is based on "System V ABI".
+\end{itemize}
+
+
+\paragraph{\product{dyncall} support}
+
+\product{Dyncall} supports PowerPC (64bit) Big Endian and Little Endian ELF ABIs on System V systems (Linux, etc.). Mac OS X is not supported.
+
+
+\subsubsection{PPC64 ELF ABI}
+
+\paragraph{Registers and register usage}
+
+@@@
+
+
+\paragraph{Parameter passing}
+
+@@@
+
+
+\paragraph{Return values}
+
+@@@
+
+
+\paragraph{Stack layout}
+
+@@@
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/callconvs/callconv_sparc.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,103 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2012 Daniel Adler <dadler@uni-goettingen.de>, 
+%                    Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\subsection{SPARC Calling Convention}
+
+\paragraph{Overview}
+
+The SPARC family of processors is based on the SPARC instruction set architecture, which comes in basically tree revisions,
+V7, V8 and V9. The former two are 32-bit whereas the latter refers to the 64-bit SPARC architecture (see next chapter). SPARC is big endian.
+
+\paragraph{\product{dyncall} support}
+
+\product{dyncall} fully supports the SPARC 32-bit instruction set (V7 and V8), \product{dyncallback} support is missing, though.
+
+\subsubsection{SPARC (32-bit) Calling Convention}
+
+\paragraph{Register usage}
+
+\begin{itemize}
+\item 32 32-bit integer/pointer registers
+\item 32 floating point registers (usable as 8 quad precision, 16 double precision or 32 single precision registers)
+\item 32 registers are accessible at a time (8 are global ones (g*), whereas the rest forms a register window with 8 input (i*), 8 output (o*) and 8 local (l*) ones)
+\item invoking a function shifts the register window, the old output registers become the new input registers (old local and input ones are not accessible anymore)
+\end{itemize}
+
+\begin{table}[h]
+\begin{tabular}{lll}
+\hline
+Name                                 & Alias                   & Brief description\\
+\hline
+{\bf \%g0}                           &                         & Read-only, hardwired to 0 \\
+{\bf \%g1-\%g7}                      &                         & Global \\
+{\bf \%o0 and \%i0}                  &                         & Output and input argument 0, return value \\
+{\bf \%o1-\%o5 and \%i1-\%i5}        &                         & Output and input argument registers \\
+{\bf \%o6 and \%i6}                  &                         & Stack and frame pointer \\
+{\bf \%o7 and \%i7}                  &                         & Return address (caller writes to o7, callee uses i7) \\
+\end{tabular}
+\caption{Register usage on sparc calling convention}
+\end{table}
+
+\paragraph{Parameter passing}
+\begin{itemize}
+\item Stack parameter order: right-to-left @@@ really?
+\item Caller cleans up the stack @@@ really?
+\item Stack always aligned to 8 bytes.
+\item first 6 integers and floats are passed independently in registers using \%o0-\%o5
+\item for every other argument the stack is used
+\item @@@ what about floats, 64bit integers, etc.?
+\item results are returned in \%i0, and structs/unions pass a pointer to them as a hidden stack parameter (see below)
+\end{itemize}
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                   & \vdots                      &                                &                               \\
+\hhline{~=~~}
+local data                         &                             &                                & \mrrbrace{10}{caller's frame} \\
+\hhline{~-~~}
+padding                            &                             &                                &                               \\
+\hhline{~-~~}
+\mrlbrace{7}{parameter area}       & argument x                  & \mrrbrace{3}{stack parameters} &                               \\
+                                   & \ldots                      &                                &                               \\
+                                   & argument 6                  &                                &                               \\
+                                   & input argument 5 spill      & \mrrbrace{3}{spill area}       &                               \\
+                                   & \ldots                      &                                &                               \\
+                                   & input argument 0 spill      &                                &                               \\
+                                   & struct/union return pointer &                                &                               \\
+\hhline{~-~~}
+register save area (\%i* and \%l*) &                             &                                &                               \\
+\hhline{~=~~}
+local data and padding             &                             &                                & \mrrbrace{3}{current frame}   \\
+\hhline{~-~~}
+parameter area                     &                             &                                &                               \\
+\hhline{~-~~}
+                                   & \vdots                      &                                &                               \\
+\hhline{~-~~}
+\end{tabular}
+\\
+\\
+\\
+\caption{Stack layout on sparc calling convention}
+\end{figure}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/callconvs/callconv_sparc64.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,33 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2012 Daniel Adler <dadler@uni-goettingen.de>, 
+%                    Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\subsection{SPARC64 Calling Convention}
+
+\paragraph{Overview}
+
+The SPARC family of processors is based on the SPARC instruction set architecture, which comes in basically tree revisions,
+V7, V8 and V9. The former two are 32-bit (see previous chapter) whereas the latter refers to the 64-bit SPARC architecture. SPARC is big endian.
+
+\paragraph{\product{dyncall} support}
+
+\product{dyncall} fully supports the SPARC 64-bit instruction set (V9), \product{dyncallback} support is missing, though.
+
+\subsubsection{SPARC (64-bit) Calling Convention}
+
+@@@ finish
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/callconvs/callconv_x64.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,239 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+% ==================================================
+% x64
+% ==================================================
+\subsection{x64 Calling Convention}
+
+
+\paragraph{Overview}
+
+The x64 (64bit) architecture designed by AMD is based on Intel's x86 (32bit)
+architecture, supporting it natively. It is sometimes referred to as x86-64,
+AMD64, or, cloned by Intel, EM64T or Intel64.\\
+On this processor, a word is defined to be 16 bits in size, a dword 32 bits
+and a qword 64 bits. Note that this is due to historical reasons (terminology
+didn't change with the introduction of 32 and 64 bit processors).\\
+The x64 calling convention for MS Windows \cite{x64Win} differs from the
+SystemV x64 calling convention \cite{x64SysV} used by Linux/*BSD/...
+Note that this is not the only difference between these operating systems. The
+64 bit programming model in use by 64 bit windows is LLP64, meaning that the C
+types int and long remain 32 bits in size, whereas long long becomes 64 bits.
+Under Linux/*BSD/... it's LP64.\\
+\\
+Compared to the x86 architecture, the 64 bit versions of the registers are
+called rax, rbx, etc.. Furthermore, there are eight new general purpose
+registers r8-r15.
+
+
+
+\paragraph{\product{dyncall} support}
+
+\product{dyncall} supports the MS Windows and System V calling convention.\\
+\\
+
+
+
+\subsubsection{MS Windows}
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name                & Brief description\\
+\hline
+{\bf rax}           & scratch, return value\\
+{\bf rbx}           & permanent\\
+{\bf rcx}           & scratch, parameter 0 if integer or pointer\\
+{\bf rdx}           & scratch, parameter 1 if integer or pointer\\
+{\bf rdi}           & permanent\\
+{\bf rsi}           & permanent\\
+{\bf rbp}           & permanent, may be used ase frame pointer\\
+{\bf rsp}           & stack pointer\\
+{\bf r8-r9}         & scratch, parameter 2 and 3 if integer or pointer\\
+{\bf r10-r11}       & scratch, permanent if required by caller (used for syscall/sysret)\\
+{\bf r12-r15}       & permanent\\
+{\bf xmm0}          & scratch, floating point parameter 0, floating point return value\\
+{\bf xmm1-xmm3}     & scratch, floating point parameters 1-3\\
+{\bf xmm4-xmm5}     & scratch, permanent if required by caller\\
+{\bf xmm6-xmm15}    & permanent\\
+\hline
+\end{tabular}
+\caption{Register usage on x64 MS Windows platform}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: right-to-left
+\item caller cleans up the stack
+\item first 4 integer/pointer parameters are passed via rcx, rdx, r8, r9 (from left to right), others are pushed on stack (there is a
+preserve area for the first 4)
+\item float and double parameters are passed via xmm0l-xmm3l
+\item first 4 parameters are passed via the correct register depending on the parameter type - with mixed float and int parameters,
+some registers are left out (e.g. first parameter ends up in rcx or xmm0, second in rdx or xmm1, etc.)
+\item parameters in registers are right justified
+\item parameters \textless\ 64bits are not zero extended - zero the upper bits contiaining garbage if needed (but they are always
+passed as a qword)
+\item parameters \textgreater\ 64 bit are passed by reference
+\item if callee takes address of a parameter, first 4 parameters must be dumped (to the reserved space on the stack) - for
+floating point parameters, value must be stored in integer AND floating point register
+\item caller cleans up the stack, not the callee (like cdecl)
+\item stack is always 16byte aligned - since return address is 64 bits in size, stacks with an odd number of parameters are
+already aligned
+\item ellipsis calls take floating point values in int and float registers (single precision floats are promoted to double precision
+as defined for ellipsis calls)
+\item if size of parameters \textgreater\ 1 page of memory (usually between 4k and 64k), chkstk must be called
+\end{itemize}
+
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item return values of pointer or integral type (\textless=\ 64 bits) are returned via the rax register
+\item floating point types are returned via the xmm0 register
+\item for types \textgreater\ 64 bits, a secret first parameter with an address to the return value is passed
+\end{itemize}
+
+
+\paragraph{Stack layout}
+
+Stack frame is always 16-byte aligned. Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{9}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{7}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & r9 or xmm3                 & \mrrbrace{4}{spill area}       &                              \\
+                                  & r8 or xmm2                 &                                &                              \\
+                                  & rdx or xmm1                &                                &                              \\
+                                  & rcx or xmm0                &                                &                              \\
+\hhline{~-~~}
+                                  & return address             &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{3}{current frame}  \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on x64 Microsoft platform}
+\end{figure}
+
+
+
+\newpage
+
+\subsubsection{System V (Linux / *BSD / MacOS X)}
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name                & Brief description\\
+\hline
+{\bf rax}           & scratch, return value\\
+{\bf rbx}           & permanent\\
+{\bf rcx}           & scratch, parameter 3 if integer or pointer\\
+{\bf rdx}           & scratch, parameter 2 if integer or pointer, return value\\
+{\bf rdi}           & scratch, parameter 0 if integer or pointer\\
+{\bf rsi}           & scratch, parameter 1 if integer or pointer\\
+{\bf rbp}           & permanent, may be used ase frame pointer\\
+{\bf rsp}           & stack pointer\\
+{\bf r8-r9}         & scratch, parameter 4 and 5 if integer or pointer\\
+{\bf r10-r11}       & scratch\\
+{\bf r12-r15}       & permanent\\
+{\bf xmm0}          & scratch, floating point parameters 0, floating point return value\\
+{\bf xmm1-xmm7}     & scratch, floating point parameters 1-7\\
+{\bf xmm8-xmm15}    & scratch\\
+{\bf st0-st1}       & scratch, 16 byte floating point return value\\
+{\bf st2-st7}       & scratch\\
+\hline
+\end{tabular}
+\caption{Register usage on x64 System V (Linux/*BSD)}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: right-to-left
+\item caller cleans up the stack
+\item first 6 integer/pointer parameters are passed via rdi, rsi, rdx, rcx, r8, r9
+\item first 8 floating point parameters \textless=\ 64 bits are passed via xmm0l-xmm7l
+\item parameters in registers are right justified
+\item parameters that are not passed via registers are pushed onto the stack
+\item parameters \textless\ 64bits are not zero extended - zero the upper bits contiaining garbage if needed (but they are always
+passed as a qword)
+\item integer/pointer parameters \textgreater\ 64 bit are passed via 2 registers
+\item if callee takes address of a parameter, number of used xmm registers is passed silently in al (passed number mustn't be
+exact but an upper bound on the number of used xmm registers)
+\item stack is always 16byte aligned - since return address is 64 bits in size, stacks with an odd number of parameters are
+already aligned
+\end{itemize}
+
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item return values of pointer or integral type (\textless=\ 64 bits) are returned via the rax register
+\item floating point types are returned via the xmm0 register
+\item for types \textgreater\ 64 bits, a secret first parameter with an address to the return value is passed - the passed in address
+will be returned in rax
+\item floating point values \textgreater\ 64 bits are returned via st0 and st1
+\end{itemize}
+
+
+\paragraph{Stack layout}
+
+Stack frame is always 16-byte aligned. Note that there is no spill area.
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{3}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+\hhline{~-~~}
+                                  & return address             &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{3}{current frame}  \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on x64 System V (Linux/*BSD)}
+\end{figure}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/callconvs/callconv_x86.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,782 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+% ==================================================
+% x86 
+% ==================================================
+\subsection{x86 Calling Conventions}
+
+
+\paragraph{Overview}
+
+There are numerous different calling conventions on the x86 processor
+architecture, like cdecl \cite{x86cdecl}, MS fastcall \cite{x86Winfastcall}, GNU
+fastcall \cite{x86GNUfastcall}, Borland fastcall \cite{x86Borlandfastcall}, Watcom
+fastcall \cite{x86Watcomfastcall}, Win32 stdcall \cite{x86Winstdcall}, MS thiscall
+\cite{x86Winthiscall}, GNU thiscall \cite{x86GNUthiscall}, the pascal calling
+convention \cite{x86Pascal} and a cdecl-like version for Plan9 \cite{x86Plan9}
+(dubbed plan9call by us), etc.
+
+
+\paragraph{\product{dyncall} support}
+
+Currently cdecl, stdcall, fastcall (MS and GNU), thiscall (MS and GNU) and
+plan9call are supported.\\
+\\
+
+
+\subsubsection{cdecl}
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name          & Brief description\\
+\hline
+{\bf eax}     & scratch, return value\\
+{\bf ebx}     & permanent\\
+{\bf ecx}     & scratch\\
+{\bf edx}     & scratch, return value\\
+{\bf esi}     & permanent\\
+{\bf edi}     & permanent\\
+{\bf ebp}     & permanent\\
+{\bf esp}     & stack pointer\\
+{\bf st0}     & scratch, floating point return value\\
+{\bf st1-st7} & scratch\\
+\hline
+\end{tabular}
+\caption{Register usage on x86 cdecl calling convention}
+\end{table}
+
+
+\pagebreak
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: right-to-left
+\item caller cleans up the stack
+\item all arguments are pushed onto the stack
+\end{itemize}
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item return values of pointer or integral type (\textless=\ 32 bits) are returned via the eax register
+\item integers \textgreater\ 32 bits are returned via the eax and edx registers
+\item floating point types are returned via the st0 register
+\end{itemize}
+
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{3}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+\hhline{~-~~}
+                                  & return address             &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{3}{current frame}  \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on x86 cdecl calling convention}
+\end{figure}
+
+
+\pagebreak
+
+\subsubsection{MS fastcall}
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name          & Brief description\\
+\hline
+{\bf eax}     & scratch, return value\\
+{\bf ebx}     & permanent\\
+{\bf ecx}     & scratch, parameter 0\\
+{\bf edx}     & scratch, parameter 1, return value\\
+{\bf esi}     & permanent\\
+{\bf edi}     & permanent\\
+{\bf ebp}     & permanent\\
+{\bf esp}     & stack pointer\\
+{\bf st0}     & scratch, floating point return value\\
+{\bf st1-st7} & scratch\\
+\hline
+\end{tabular}
+\caption{Register usage on x86 fastcall (MS) calling convention}
+\end{table}
+
+
+\pagebreak
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: right-to-left
+\item called function cleans up the stack
+\item first two integers/pointers (\textless=\ 32bit) are passed via ecx and edx (even if preceded by other arguments)
+\item integer types 64 bits in size @@@ ? first in edx:eax ?
+\item if first argument is a 64 bit integer, it is passed via ecx and edx
+\item all other parameters are pushed onto the stack
+\end{itemize}
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item return values of pointer or integral type (\textless=\ 32 bits) are returned via the eax register
+\item integers \textgreater\ 32 bits are returned via the eax and edx registers@@@verify
+\item floating point types are returned via the st0 register@@@ really ?
+\end{itemize}
+
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{3}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+\hhline{~-~~}
+                                  & return address             &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{3}{current frame}  \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on x86 fastcall (MS) calling convention}
+\end{figure}
+
+
+\pagebreak
+
+\subsubsection{GNU fastcall}
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name          & Brief description\\
+\hline
+{\bf eax}     & scratch, return value\\
+{\bf ebx}     & permanent\\
+{\bf ecx}     & scratch, parameter 0\\
+{\bf edx}     & scratch, parameter 1, return value\\
+{\bf esi}     & permanent\\
+{\bf edi}     & permanent\\
+{\bf ebp}     & permanent\\
+{\bf esp}     & stack pointer\\
+{\bf st0}     & scratch, floating point return value\\
+{\bf st1-st7} & scratch\\
+\hline
+\end{tabular}
+\caption{Register usage on x86 fastcall (GNU) calling convention}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: right-to-left
+\item called function cleans up the stack
+\item first two integers/pointers (\textless=\ 32bit) are passed via ecx and edx (even if preceded by other arguments)
+\item if first argument is a 64 bit integer, it is pushed on the stack and the two registers are skipped 
+\item all other parameters are pushed onto the stack
+\end{itemize}
+
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item return values of pointer or integral type (\textless=\ 32 bits) are returned via the eax register.
+\item integers \textgreater\ 32 bits are returned via the eax and edx registers.
+\item floating point types are returned via the st0.
+\end{itemize}
+
+
+\pagebreak
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{3}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+\hhline{~-~~}
+                                  & return address             &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{3}{current frame}  \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on x86 fastcall (GNU) calling convention}
+\end{figure}
+
+
+\subsubsection{Borland fastcall}
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name          & Brief description\\
+\hline
+{\bf eax}     & scratch, parameter 0, return value\\
+{\bf ebx}     & permanent\\
+{\bf ecx}     & scratch, parameter 2\\
+{\bf edx}     & scratch, parameter 1, return value\\
+{\bf esi}     & permanent\\
+{\bf edi}     & permanent\\
+{\bf ebp}     & permanent\\
+{\bf esp}     & stack pointer\\
+{\bf st0}     & scratch, floating point return value\\
+{\bf st1-st7} & scratch\\
+\hline
+\end{tabular}
+\caption{Register usage on x86 fastcall (Borland) calling convention}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: left-to-right
+\item called function cleans up the stack
+\item first three integers/pointers (\textless=\ 32bit) are passed via eax, ecx and edx (even if preceded by other arguments@@@?)
+\item integer types 64 bits in size @@@ ?
+\item all other parameters are pushed onto the stack
+\end{itemize}
+
+
+\pagebreak
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item return values of pointer or integral type (\textless=\ 32 bits) are returned via the eax register
+\item integers \textgreater\ 32 bits are returned via the eax and edx registers@@@ verify
+\item floating point types are returned via the st0 register@@@ really ?
+\end{itemize}
+
+
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{3}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+\hhline{~-~~}
+                                  & return address             &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{3}{current frame}  \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on x86 fastcall (Borland) calling convention}
+\end{figure}
+
+
+\subsubsection{Watcom fastcall}
+
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name          & Brief description\\
+\hline
+{\bf eax}     & scratch, parameter 0, return value@@@\\
+{\bf ebx}     & scratch when used for parameter, parameter 2\\
+{\bf ecx}     & scratch when used for parameter, parameter 3\\
+{\bf edx}     & scratch when used for parameter, parameter 1, return value@@@\\
+{\bf esi}     & scratch when used for return pointer @@@??\\
+{\bf edi}     & permanent\\
+{\bf ebp}     & permanent\\
+{\bf esp}     & stack pointer\\
+{\bf st0}     & scratch, floating point return value\\
+{\bf st1-st7} & scratch\\
+\hline
+\end{tabular}
+\caption{Register usage on x86 fastcall (Watcom) calling convention}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: right-to-left
+\item called function cleans up the stack
+\item first four integers/pointers (\textless=\ 32bit) are passed via eax, edx, ebx and ecx (even if preceded by other arguments@@@?)
+\item integer types 64 bits in size @@@ ?
+\item all other parameters are pushed onto the stack
+\end{itemize}
+
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item return values of pointer or integral type (\textless=\ 32 bits) are returned via the eax register@@@verify, I thnik its esi?
+\item integers \textgreater\ 32 bits are returned via the eax and edx registers@@@ verify
+\item floating point types are returned via the st0 register@@@ really ?
+\end{itemize}
+
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{3}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+\hhline{~-~~}
+                                  & return address             &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{3}{current frame}  \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on x86 fastcall (Watcom) calling convention}
+\end{figure}
+
+
+
+\subsubsection{win32 stdcall}
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name          & Brief description\\
+\hline
+{\bf eax}     & scratch, return value\\
+{\bf ebx}     & permanent\\
+{\bf ecx}     & scratch\\
+{\bf edx}     & scratch, return value\\
+{\bf esi}     & permanent\\
+{\bf edi}     & permanent\\
+{\bf ebp}     & permanent\\
+{\bf esp}     & stack pointer\\
+{\bf st0}     & scratch, floating point return value\\
+{\bf st1-st7} & scratch\\
+\hline
+\end{tabular}
+\caption{Register usage on x86 stdcall calling convention}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item Stack parameter order: right-to-left
+\item Called function cleans up the stack
+\item All parameters are pushed onto the stack
+\item Stack is usually 4 byte aligned (GCC \textgreater=\ 3.x seems to use a 16byte alignement@@@)
+\item Function name is decorated by prepending an underscore character and appending a '@' character and the number of bytes of stack space required
+\end{itemize}
+
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item return values of pointer or integral type (\textless=\ 32 bits) are returned via the eax register
+\item integers \textgreater\ 32 bits are returned via the eax and edx registers
+\item floating point types are returned via the st0 register
+\end{itemize}
+
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{3}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+\hhline{~-~~}
+                                  & return address             &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{3}{current frame}  \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on x86 stdcall calling convention}
+\end{figure}
+
+\subsubsection{MS thiscall}
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name          & Brief description\\
+\hline
+{\bf eax}     & scratch, return value\\
+{\bf ebx}     & permanent\\
+{\bf ecx}     & scratch, parameter 0\\
+{\bf edx}     & scratch, return value\\
+{\bf esi}     & permanent\\
+{\bf edi}     & permanent\\
+{\bf ebp}     & permanent\\
+{\bf esp}     & stack pointer\\
+{\bf st0}     & scratch, floating point return value\\
+{\bf st1-st7} & scratch\\
+\hline
+\end{tabular}
+\caption{Register usage on x86 thiscall (MS) calling convention}
+\end{table}
+
+\newpage
+
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: right-to-left
+\item called function cleans up the stack
+\item first parameter (this pointer) is passed via ecx
+\item all other parameters are pushed onto the stack
+\item Function name is decorated by prepending a '@' character and appending a '@' character and the number of bytes (decimal) of stack space required
+\end{itemize}
+
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item return values of pointer or integral type (\textless=\ 32 bits) are returned via the eax register
+\item integers \textgreater\ 32 bits are returned via the eax and edx registers@@@verify
+\item floating point types are returned via the st0 register@@@ really ?
+\end{itemize}
+
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{3}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+\hhline{~-~~}
+                                  & return address             &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{3}{current frame}  \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on x86 thiscall (MS) calling convention}
+\end{figure}
+
+
+
+\subsubsection{GNU thiscall}
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name          & Brief description\\
+\hline
+{\bf eax}     & scratch, return value\\
+{\bf ebx}     & permanent\\
+{\bf ecx}     & scratch\\
+{\bf edx}     & scratch, return value\\
+{\bf esi}     & permanent\\
+{\bf edi}     & permanent\\
+{\bf ebp}     & permanent\\
+{\bf esp}     & stack pointer\\
+{\bf st0}     & scratch, floating point return value\\
+{\bf st1-st7} & scratch\\
+\hline
+\end{tabular}
+\caption{Register usage on x86 thiscall (GNU) calling convention}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: right-to-left
+\item caller cleans up the stack
+\item all parameters are pushed onto the stack
+\end{itemize}
+
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item return values of pointer or integral type (\textless=\ 32 bits) are returned via the eax register
+\item integers \textgreater\ 32 bits are returned via the eax and edx registers@@@verify
+\item floating point types are returned via the st0 register@@@ really ?
+\end{itemize}
+
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{3}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+\hhline{~-~~}
+                                  & return address             &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{3}{current frame}  \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on x86 thiscall (GNU) calling convention}
+\end{figure}
+
+
+
+\subsubsection{pascal}
+
+The best known uses of the pascal calling convention are the 16 bit OS/2 APIs, Microsoft Windows 3.x and Borland Delphi 1.x.
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name          & Brief description\\
+\hline
+{\bf eax}     & scratch, return value\\
+{\bf ebx}     & permanent\\
+{\bf ecx}     & scratch\\
+{\bf edx}     & scratch, return value\\
+{\bf esi}     & permanent\\
+{\bf edi}     & permanent\\
+{\bf ebp}     & permanent\\
+{\bf esp}     & stack pointer\\
+{\bf st0}     & scratch, floating point return value\\
+{\bf st1-st7} & scratch\\
+\hline
+\end{tabular}
+\caption{Register usage on x86 pascal calling convention}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: left-to-right
+\item called function cleans up the stack
+\item all parameters are pushed onto the stack
+\end{itemize}
+
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item return values of pointer or integral type (\textless=\ 32 bits) are returned via the eax register
+\item integers \textgreater\ 32 bits are returned via the eax and edx registers
+\item floating point types are returned via the st0 register
+\end{itemize}
+
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{3}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+\hhline{~-~~}
+                                  & return address             &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{3}{current frame}  \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\caption{Stack layout on x86 pascal calling convention}
+\end{figure}
+
+
+\newpage
+
+\subsubsection{plan9call}
+
+\paragraph{Registers and register usage}
+
+\begin{table}[h]
+\begin{tabular}{3 B}
+\hline
+Name          & Brief description\\
+\hline
+{\bf eax}     & scratch, return value\\
+{\bf ebx}     & scratch\\
+{\bf ecx}     & scratch\\
+{\bf edx}     & scratch\\
+{\bf esi}     & scratch\\
+{\bf edi}     & scratch\\
+{\bf ebp}     & scratch\\
+{\bf esp}     & stack pointer\\
+{\bf st0}     & scratch, floating point return value\\
+{\bf st1-st7} & scratch\\
+\hline
+\end{tabular}
+\caption{Register usage on x86 plan9call calling convention}
+\end{table}
+
+\paragraph{Parameter passing}
+
+\begin{itemize}
+\item stack parameter order: right-to-left
+\item caller cleans up the stack%@@@ doesn't belong to "parameter passing"
+\item all parameters are pushed onto the stack
+\end{itemize}
+
+\pagebreak
+
+\paragraph{Return values}
+
+\begin{itemize}
+\item return values of pointer or integral type (\textless=\ 32 bits) are returned via the eax register
+\item integers \textgreater\ 32 bits or structures are returned by the caller allocating the space and
+passing a pointer to the callee as a new, implicit first parameter (this means, on the stack)
+\item floating point types are returned via the st0 register (called F0 in plan9 8a's terms)
+\end{itemize}
+
+
+\paragraph{Stack layout}
+
+Stack directly after function prolog:\\
+
+\begin{figure}[h]
+\begin{tabular}{5|3|1 1}
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{5}{caller's frame} \\
+\hhline{~-~~}
+\mrlbrace{3}{parameter area}      & \ldots                     & \mrrbrace{3}{stack parameters} &                              \\
+                                  & \ldots                     &                                &                              \\
+                                  & \ldots                     &                                &                              \\
+\hhline{~-~~}
+                                  & return address             &                                &                              \\
+\hhline{~=~~}
+local data                        &                            &                                & \mrrbrace{3}{current frame}  \\
+\hhline{~-~~}
+parameter area                    &                            &                                &                              \\
+\hhline{~-~~}
+                                  & \vdots                     &                                &                              \\
+\hhline{~-~~}
+\end{tabular}
+\\
+\\
+\\
+\caption{Stack layout on x86 plan9call calling convention}
+\end{figure}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/dyncall_logo.eps	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,488 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: 0.45pre1
+%%Pages: 1
+%%Orientation: Portrait
+%%BoundingBox: 28 43 573 661
+%%HiResBoundingBox: 28.615222 43.973395 572.35188 660.44216
+%%EndComments
+%%Page: 1 1
+0 842 translate
+0.8 -0.8 scale
+0 0 0 setrgbcolor
+[] 0 setdash
+1 setlinewidth
+0 setlinejoin
+0 setlinecap
+gsave [1 0 0 1 0 0] concat
+gsave [2.2965446 0 0 2.2965446 -189.23706 135.3048] concat
+gsave
+0 0 0 setrgbcolor
+newpath
+247.59 265.078 moveto
+235.699 273.664 257.766 281.555 244.684 288.172 curveto
+231.598 294.793 238.313 272.344 224.352 276.836 curveto
+210.395 281.328 228.941 295.648 214.453 297.902 curveto
+199.961 300.152 213.285 280.879 198.621 280.836 curveto
+183.957 280.793 197.172 300.145 182.695 297.812 curveto
+168.219 295.477 186.848 281.262 172.914 276.687 curveto
+158.98 272.117 165.566 294.605 152.52 287.914 curveto
+139.473 281.219 161.582 273.453 149.742 264.801 curveto
+137.906 256.148 137.223 279.57 126.883 269.172 curveto
+116.543 258.773 139.969 258.223 131.383 246.336 curveto
+122.797 234.445 114.91 256.516 108.289 243.43 curveto
+101.668 230.344 124.117 237.059 119.625 223.102 curveto
+115.133 209.141 100.813 227.687 98.5586 213.199 curveto
+96.3086 198.707 115.586 212.031 115.625 197.367 curveto
+115.668 182.703 96.3164 195.918 98.6484 181.441 curveto
+100.984 166.965 115.199 185.594 119.773 171.66 curveto
+124.344 157.727 101.855 164.312 108.551 151.266 curveto
+115.242 138.219 123.008 160.332 131.66 148.492 curveto
+140.313 136.652 116.891 135.969 127.289 125.629 curveto
+137.688 115.289 138.238 138.715 150.125 130.129 curveto
+162.016 121.543 139.949 113.656 153.031 107.035 curveto
+166.117 100.414 159.402 122.867 173.363 118.375 curveto
+187.32 113.883 168.773 99.559 183.262 97.309 curveto
+197.754 95.055 184.43 114.332 199.094 114.371 curveto
+213.758 114.414 200.543 95.062 215.02 97.398 curveto
+229.496 99.73 210.867 113.949 224.801 118.52 curveto
+238.734 123.09 232.148 100.602 245.195 107.297 curveto
+258.242 113.992 236.129 121.754 247.969 130.406 curveto
+259.809 139.059 260.492 115.637 270.832 126.035 curveto
+281.172 136.434 257.746 136.984 266.332 148.871 curveto
+274.918 160.762 282.805 138.695 289.426 151.781 curveto
+296.047 164.863 273.598 158.148 278.086 172.109 curveto
+282.578 186.066 296.902 167.52 299.152 182.008 curveto
+301.406 196.5 282.129 183.176 282.09 197.84 curveto
+282.047 212.504 301.398 199.289 299.063 213.766 curveto
+296.73 228.242 282.512 209.613 277.941 223.547 curveto
+273.371 237.48 295.859 230.895 289.164 243.941 curveto
+282.473 256.988 274.707 234.879 266.055 246.719 curveto
+257.402 258.555 280.824 259.238 270.426 269.578 curveto
+260.027 279.922 259.477 256.492 247.59 265.078 curveto
+closepath
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+247.59 265.078 moveto
+235.699 273.664 257.766 281.555 244.684 288.172 curveto
+231.598 294.793 238.313 272.344 224.352 276.836 curveto
+210.395 281.328 228.941 295.648 214.453 297.902 curveto
+199.961 300.152 213.285 280.879 198.621 280.836 curveto
+183.957 280.793 197.172 300.145 182.695 297.812 curveto
+168.219 295.477 186.848 281.262 172.914 276.687 curveto
+158.98 272.117 165.566 294.605 152.52 287.914 curveto
+139.473 281.219 161.582 273.453 149.742 264.801 curveto
+137.906 256.148 137.223 279.57 126.883 269.172 curveto
+116.543 258.773 139.969 258.223 131.383 246.336 curveto
+122.797 234.445 114.91 256.516 108.289 243.43 curveto
+101.668 230.344 124.117 237.059 119.625 223.102 curveto
+115.133 209.141 100.813 227.687 98.5586 213.199 curveto
+96.3086 198.707 115.586 212.031 115.625 197.367 curveto
+115.668 182.703 96.3164 195.918 98.6484 181.441 curveto
+100.984 166.965 115.199 185.594 119.773 171.66 curveto
+124.344 157.727 101.855 164.312 108.551 151.266 curveto
+115.242 138.219 123.008 160.332 131.66 148.492 curveto
+140.313 136.652 116.891 135.969 127.289 125.629 curveto
+137.688 115.289 138.238 138.715 150.125 130.129 curveto
+162.016 121.543 139.949 113.656 153.031 107.035 curveto
+166.117 100.414 159.402 122.867 173.363 118.375 curveto
+187.32 113.883 168.773 99.559 183.262 97.309 curveto
+197.754 95.055 184.43 114.332 199.094 114.371 curveto
+213.758 114.414 200.543 95.062 215.02 97.398 curveto
+229.496 99.73 210.867 113.949 224.801 118.52 curveto
+238.734 123.09 232.148 100.602 245.195 107.297 curveto
+258.242 113.992 236.129 121.754 247.969 130.406 curveto
+259.809 139.059 260.492 115.637 270.832 126.035 curveto
+281.172 136.434 257.746 136.984 266.332 148.871 curveto
+274.918 160.762 282.805 138.695 289.426 151.781 curveto
+296.047 164.863 273.598 158.148 278.086 172.109 curveto
+282.578 186.066 296.902 167.52 299.152 182.008 curveto
+301.406 196.5 282.129 183.176 282.09 197.84 curveto
+282.047 212.504 301.398 199.289 299.063 213.766 curveto
+296.73 228.242 282.512 209.613 277.941 223.547 curveto
+273.371 237.48 295.859 230.895 289.164 243.941 curveto
+282.473 256.988 274.707 234.879 266.055 246.719 curveto
+257.402 258.555 280.824 259.238 270.426 269.578 curveto
+260.027 279.922 259.477 256.492 247.59 265.078 curveto
+closepath
+fill
+grestore
+0 0 0 setrgbcolor
+[] 0 setdash
+0.80000001 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+247.59 265.078 moveto
+235.699 273.664 257.766 281.555 244.684 288.172 curveto
+231.598 294.793 238.313 272.344 224.352 276.836 curveto
+210.395 281.328 228.941 295.648 214.453 297.902 curveto
+199.961 300.152 213.285 280.879 198.621 280.836 curveto
+183.957 280.793 197.172 300.145 182.695 297.812 curveto
+168.219 295.477 186.848 281.262 172.914 276.687 curveto
+158.98 272.117 165.566 294.605 152.52 287.914 curveto
+139.473 281.219 161.582 273.453 149.742 264.801 curveto
+137.906 256.148 137.223 279.57 126.883 269.172 curveto
+116.543 258.773 139.969 258.223 131.383 246.336 curveto
+122.797 234.445 114.91 256.516 108.289 243.43 curveto
+101.668 230.344 124.117 237.059 119.625 223.102 curveto
+115.133 209.141 100.813 227.687 98.5586 213.199 curveto
+96.3086 198.707 115.586 212.031 115.625 197.367 curveto
+115.668 182.703 96.3164 195.918 98.6484 181.441 curveto
+100.984 166.965 115.199 185.594 119.773 171.66 curveto
+124.344 157.727 101.855 164.312 108.551 151.266 curveto
+115.242 138.219 123.008 160.332 131.66 148.492 curveto
+140.313 136.652 116.891 135.969 127.289 125.629 curveto
+137.688 115.289 138.238 138.715 150.125 130.129 curveto
+162.016 121.543 139.949 113.656 153.031 107.035 curveto
+166.117 100.414 159.402 122.867 173.363 118.375 curveto
+187.32 113.883 168.773 99.559 183.262 97.309 curveto
+197.754 95.055 184.43 114.332 199.094 114.371 curveto
+213.758 114.414 200.543 95.062 215.02 97.398 curveto
+229.496 99.73 210.867 113.949 224.801 118.52 curveto
+238.734 123.09 232.148 100.602 245.195 107.297 curveto
+258.242 113.992 236.129 121.754 247.969 130.406 curveto
+259.809 139.059 260.492 115.637 270.832 126.035 curveto
+281.172 136.434 257.746 136.984 266.332 148.871 curveto
+274.918 160.762 282.805 138.695 289.426 151.781 curveto
+296.047 164.863 273.598 158.148 278.086 172.109 curveto
+282.578 186.066 296.902 167.52 299.152 182.008 curveto
+301.406 196.5 282.129 183.176 282.09 197.84 curveto
+282.047 212.504 301.398 199.289 299.063 213.766 curveto
+296.73 228.242 282.512 209.613 277.941 223.547 curveto
+273.371 237.48 295.859 230.895 289.164 243.941 curveto
+282.473 256.988 274.707 234.879 266.055 246.719 curveto
+257.402 258.555 280.824 259.238 270.426 269.578 curveto
+260.027 279.922 259.477 256.492 247.59 265.078 curveto
+closepath
+stroke
+gsave
+0 0 0 setrgbcolor
+newpath
+354.973 349.148 moveto
+345.719 361.668 345.527 339.457 333.348 349.156 curveto
+321.172 358.855 342.773 364.012 328.5 370.227 curveto
+314.227 376.441 325.164 357.113 309.77 359.422 curveto
+294.375 361.734 310.504 377 295.035 375.246 curveto
+279.566 373.492 298.703 362.223 284.215 356.527 curveto
+269.727 350.828 276.063 372.113 263.543 362.859 curveto
+251.023 353.609 273.23 353.418 263.535 341.238 curveto
+253.836 329.062 248.68 350.664 242.465 336.391 curveto
+236.246 322.117 255.574 333.055 253.266 317.66 curveto
+250.957 302.266 235.688 318.395 237.441 302.926 curveto
+239.195 287.457 250.465 306.594 256.164 292.105 curveto
+261.863 277.617 240.574 283.953 249.828 271.434 curveto
+259.082 258.914 259.273 281.121 271.449 271.422 curveto
+283.629 261.727 262.027 256.566 276.301 250.352 curveto
+290.574 244.137 279.633 263.465 295.031 261.156 curveto
+310.426 258.848 294.297 243.578 309.766 245.332 curveto
+325.234 247.086 306.098 258.355 320.586 264.055 curveto
+335.07 269.75 328.738 248.465 341.258 257.719 curveto
+353.777 266.973 331.57 267.16 341.266 279.34 curveto
+350.965 291.52 356.121 269.918 362.336 284.191 curveto
+368.551 298.465 349.223 287.523 351.535 302.918 curveto
+353.844 318.316 369.109 302.187 367.355 317.656 curveto
+365.602 333.125 354.336 313.988 348.637 328.473 curveto
+342.938 342.961 364.227 336.629 354.973 349.148 curveto
+closepath
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+354.973 349.148 moveto
+345.719 361.668 345.527 339.457 333.348 349.156 curveto
+321.172 358.855 342.773 364.012 328.5 370.227 curveto
+314.227 376.441 325.164 357.113 309.77 359.422 curveto
+294.375 361.734 310.504 377 295.035 375.246 curveto
+279.566 373.492 298.703 362.223 284.215 356.527 curveto
+269.727 350.828 276.063 372.113 263.543 362.859 curveto
+251.023 353.609 273.23 353.418 263.535 341.238 curveto
+253.836 329.062 248.68 350.664 242.465 336.391 curveto
+236.246 322.117 255.574 333.055 253.266 317.66 curveto
+250.957 302.266 235.688 318.395 237.441 302.926 curveto
+239.195 287.457 250.465 306.594 256.164 292.105 curveto
+261.863 277.617 240.574 283.953 249.828 271.434 curveto
+259.082 258.914 259.273 281.121 271.449 271.422 curveto
+283.629 261.727 262.027 256.566 276.301 250.352 curveto
+290.574 244.137 279.633 263.465 295.031 261.156 curveto
+310.426 258.848 294.297 243.578 309.766 245.332 curveto
+325.234 247.086 306.098 258.355 320.586 264.055 curveto
+335.07 269.75 328.738 248.465 341.258 257.719 curveto
+353.777 266.973 331.57 267.16 341.266 279.34 curveto
+350.965 291.52 356.121 269.918 362.336 284.191 curveto
+368.551 298.465 349.223 287.523 351.535 302.918 curveto
+353.844 318.316 369.109 302.187 367.355 317.656 curveto
+365.602 333.125 354.336 313.988 348.637 328.473 curveto
+342.938 342.961 364.227 336.629 354.973 349.148 curveto
+closepath
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+307.188 310.25 moveto
+307.188 312.992 304.969 315.223 302.238 315.223 curveto
+299.504 315.223 297.289 312.992 297.289 310.25 curveto
+297.289 307.504 299.504 305.277 302.238 305.277 curveto
+304.969 305.277 307.188 307.504 307.188 310.25 curveto
+closepath
+fill
+grestore
+gsave
+1 1 1 setrgbcolor
+newpath
+307.188 310.25 moveto
+307.188 312.992 304.969 315.223 302.238 315.223 curveto
+299.504 315.223 297.289 312.992 297.289 310.25 curveto
+297.289 307.504 299.504 305.277 302.238 305.277 curveto
+304.969 305.277 307.188 307.504 307.188 310.25 curveto
+closepath
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+273.918 198.176 moveto
+273.918 239.805 240.289 273.59 198.855 273.59 curveto
+157.426 273.59 123.797 239.805 123.797 198.176 curveto
+123.797 156.547 157.426 122.758 198.855 122.758 curveto
+240.289 122.758 273.918 156.547 273.918 198.176 curveto
+closepath
+fill
+grestore
+gsave
+1 1 1 setrgbcolor
+newpath
+273.918 198.176 moveto
+273.918 239.805 240.289 273.59 198.855 273.59 curveto
+157.426 273.59 123.797 239.805 123.797 198.176 curveto
+123.797 156.547 157.426 122.758 198.855 122.758 curveto
+240.289 122.758 273.918 156.547 273.918 198.176 curveto
+closepath
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+203.785 198.195 moveto
+203.785 200.941 201.566 203.168 198.836 203.168 curveto
+196.105 203.168 193.887 200.941 193.887 198.195 curveto
+193.887 195.449 196.105 193.223 198.836 193.223 curveto
+201.566 193.223 203.785 195.449 203.785 198.195 curveto
+closepath
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+203.785 198.195 moveto
+203.785 200.941 201.566 203.168 198.836 203.168 curveto
+196.105 203.168 193.887 200.941 193.887 198.195 curveto
+193.887 195.449 196.105 193.223 198.836 193.223 curveto
+201.566 193.223 203.785 195.449 203.785 198.195 curveto
+closepath
+fill
+grestore
+gsave [0.4354368 0 0 0.4354368 82.400777 -58.916687] concat
+gsave
+0 0 0 setrgbcolor
+newpath
+372.4375 226.8125 moveto
+350.03614 226.99774 326.37254 235.86686 301.53125 253.375 curveto
+368.53125 345.625 lineto
+371.39273 344.04727 374.33807 342.1941 377.40625 339.96875 curveto
+419.75 309.1875 lineto
+431.09721 316.83039 443.82523 328.92944 457.9375 345.375 curveto
+557.875 482.9375 lineto
+569.15331 501.44535 576.62605 517.13205 580.25 530.09375 curveto
+537.90625 560.875 lineto
+534.83804 563.09806 532.16736 565.31878 529.78125 567.5625 curveto
+596.78125 659.75 lineto
+626.75298 637.33253 643.69738 612.67138 647.59375 585.75 curveto
+651.58512 558.10191 635.79682 513.598 600.21875 452.15625 curveto
+582.8125 425.21875 lineto
+552.28125 381.71875 lineto
+520.53125 339.46875 lineto
+500.28125 314.625 lineto
+452.84383 261.79529 415.32322 232.90591 387.71875 228.0625 curveto
+382.68286 227.17934 377.60704 226.76975 372.4375 226.8125 curveto
+closepath
+298.59375 255.53125 moveto
+292.22542 260.26672 288.42952 265.62733 287.28125 271.59375 curveto
+286.09854 277.70256 287.25876 283.07104 290.6875 287.78125 curveto
+328.125 339.34375 lineto
+337.38467 352.07348 349.72995 354.71426 365.25 347.3125 curveto
+298.59375 255.53125 lineto
+closepath
+527.15625 570.15625 moveto
+515.3428 582.66092 514.16594 595.3595 523.53125 608.25 curveto
+560.71875 659.46875 lineto
+564.28758 664.37648 569.05433 667.18005 575.15625 667.84375 curveto
+581.11347 668.50094 587.37058 666.49603 593.84375 661.90625 curveto
+527.15625 570.15625 lineto
+closepath
+fill
+grestore
+grestore
+gsave [0.4354368 0 0 0.4354368 82.400777 -58.916687] concat
+gsave
+0 0 0 setrgbcolor
+newpath
+658.03125 626.5625 moveto
+655.25013 626.68881 652.89528 628.64662 650.5 630.34375 curveto
+645.86328 633.50839 641.64235 636.86247 638 641.6875 curveto
+636.50265 643.53622 636.13403 645.73808 635.8125 648.3125 curveto
+635.79309 648.61363 635.79586 648.91743 635.78125 649.21875 curveto
+635.23223 649.19257 634.70569 649.15791 634.15625 649.09375 curveto
+632.90004 648.82505 631.6188 648.56494 630.40625 648 curveto
+629.26716 647.40749 628.11703 646.83331 626.96875 646.25 curveto
+626.10755 645.68505 625.17836 645.1645 624.46875 644.3125 curveto
+623.94054 642.88405 623.48803 641.40243 622.5625 640.34375 curveto
+621.71048 638.89922 620.89835 637.66941 620.78125 635.6875 curveto
+620.55619 633.53334 620.32635 631.3761 620.46875 629.1875 curveto
+613.25 634.125 lineto
+613.24081 636.35035 613.4845 638.53016 613.71875 640.71875 curveto
+613.85195 642.89817 614.81159 644.35797 615.71875 646 curveto
+616.57995 646.98751 616.99334 648.35779 617.46875 649.6875 curveto
+618.15771 650.96897 619.23721 651.5114 620.25 652.21875 curveto
+621.40746 652.85489 622.58337 653.44241 623.75 654.0625 curveto
+624.99702 654.6619 626.29163 654.97031 627.59375 655.3125 curveto
+629.14392 655.59038 630.71963 655.55329 632.28125 655.5625 curveto
+633.40247 655.5625 634.53435 655.59144 635.65625 655.59375 curveto
+635.65602 655.66675 635.65652 655.73949 635.65625 655.8125 curveto
+635.50468 658.17335 636.22468 660.11922 636.96875 662.15625 curveto
+637.87359 664.67786 639.42176 666.43805 640.9375 668.25 curveto
+642.75866 670.26866 644.74418 671.94434 646.78125 673.53125 curveto
+648.69198 674.7622 650.70926 675.69811 652.71875 676.59375 curveto
+656.14519 677.86833 659.603 678.9573 663.09375 679.84375 curveto
+664.02122 680.06128 664.94201 680.22593 665.875 680.375 curveto
+665.76219 683.23707 665.89639 686.10725 666.03125 688.96875 curveto
+666.10244 692.71901 667.28887 695.7388 668.6875 698.84375 curveto
+670.90367 702.89715 674.1061 705.11973 677.40625 707.21875 curveto
+680.51905 709.33564 683.68848 711.12476 686.96875 712.5 curveto
+686.27445 713.84958 685.59527 715.21275 684.90625 716.5625 curveto
+682.09758 722.75398 678.51334 728.5208 676.84375 735.5 curveto
+675.95499 739.41102 676.12805 743.17354 676.65625 747.09375 curveto
+676.74319 747.40856 676.86916 747.69777 676.96875 748 curveto
+676.52343 748.36731 676.07405 748.71255 675.59375 749.09375 curveto
+670.58669 754.22361 665.07597 758.95221 661.40625 765.0625 curveto
+657.98224 768.95528 656.79145 775.20535 655.40625 780.0625 curveto
+655.2626 780.90806 655.17126 781.73797 655.09375 782.59375 curveto
+649.8835 782.96621 644.62777 782.87146 639.46875 783.84375 curveto
+635.56462 784.53271 632.0128 786.6759 628.53125 789 curveto
+622.53125 795.4375 lineto
+625.97607 793.00776 629.52281 790.76565 633.40625 789.96875 curveto
+639.26474 788.76536 645.21139 788.7314 651.125 788.28125 curveto
+652.35836 788.26976 653.60825 788.24556 654.84375 788.25 curveto
+654.84003 788.40659 654.81634 788.56232 654.8125 788.71875 curveto
+654.55299 791.19672 655.30873 793.18268 656 795.34375 curveto
+656.83365 797.38997 658.11847 798.37459 659.625 799.34375 curveto
+661.09709 800.08094 662.63732 800.14753 664.1875 800.21875 curveto
+669.26516 800.59538 669.3314 799.11144 675.34375 794.5 curveto
+676.12458 792.20346 675.99662 789.97387 675.71875 787.5625 curveto
+675.05505 784.64589 673.67862 783.925 671.6875 782.9375 curveto
+668.45971 782.35662 665.19867 782.29356 661.9375 782.34375 curveto
+661.99928 780.03433 662.13138 777.7163 662.5625 775.46875 curveto
+663.21931 772.65089 665.09458 768.82277 666.65625 766.625 curveto
+669.20204 762.82554 674.96145 757.26163 679.21875 752.75 curveto
+680.48024 754.70163 681.99017 756.37702 683.53125 758 curveto
+686.32155 761.1233 689.50188 762.95982 692.9375 764.3125 curveto
+698.33668 765.34595 703.75165 760.99336 705.125 753.90625 curveto
+705.07907 749.0904 703.10202 746.54029 700.5 743.75 curveto
+697.42263 741.67852 693.98575 741.28994 690.59375 741.21875 curveto
+687.88208 741.05633 685.78146 741.65596 683.8125 742.75 curveto
+683.7427 742.52184 683.65599 742.29759 683.59375 742.0625 curveto
+683.15281 738.33062 683.00463 734.75992 683.875 731.0625 curveto
+685.46098 724.86821 688.28073 719.4255 690.90625 713.9375 curveto
+691.22142 714.03134 691.52582 714.13349 691.84375 714.21875 curveto
+696.29445 715.15115 700.80898 715.7729 705.3125 715.59375 curveto
+712.04827 712.56001 715.54313 710.41086 715.4375 701.96875 curveto
+714.16292 697.58235 711.70289 695.58585 708.6875 693.71875 curveto
+702.80375 691.93433 701.13556 695.05715 695.1875 699.625 curveto
+693.53745 701.46038 692.0678 703.5253 690.71875 705.71875 curveto
+688.35474 704.56503 686.06885 703.15492 683.8125 701.53125 curveto
+680.66394 699.5034 677.577 697.39496 675.46875 693.5 curveto
+674.16891 690.53975 673.05511 687.64651 673 684.09375 curveto
+672.95152 683.08548 672.91042 682.07355 672.875 681.0625 curveto
+673.39623 681.09037 673.91645 681.10166 674.4375 681.125 curveto
+680.69099 681.79789 681.20995 680.48892 687.8125 675.3125 curveto
+688.98833 672.67377 689.34532 669.61282 689.6875 666.625 curveto
+690.14451 664.07813 689.48216 662.14768 688.84375 659.90625 curveto
+687.75059 657.69008 686.23662 657.37616 684.40625 656.9375 curveto
+679.84991 657.2682 677.68005 660.39024 673.25 663.90625 curveto
+671.64242 665.98692 670.31033 668.38726 668.875 670.65625 curveto
+668.22014 671.50865 667.68792 672.40889 667.28125 673.34375 curveto
+664.57176 672.59674 661.8957 671.71207 659.25 670.625 curveto
+657.27727 669.75461 655.34822 668.76456 653.4375 667.6875 curveto
+651.41884 666.19934 649.42459 664.62531 647.65625 662.625 curveto
+646.22091 660.89341 644.74907 659.20782 643.90625 656.8125 curveto
+643.7724 656.39254 643.63115 656.00124 643.5 655.59375 curveto
+644.57691 655.47117 645.61819 655.10606 646.6875 654.65625 curveto
+650.86951 652.64677 654.50896 649.03691 658.25 645.96875 curveto
+659.64171 644.67809 660.68762 642.95584 661.71875 641.1875 curveto
+662.92903 639.79809 663.36287 638.192 663.875 636.28125 curveto
+664.2769 634.48765 664.0693 632.80647 663.90625 631.03125 curveto
+663.44005 629.56835 662.50829 628.61573 661.65625 627.59375 curveto
+660.54243 626.59935 659.29433 626.68878 658.03125 626.5625 curveto
+closepath
+651.59375 632.9375 moveto
+652.70528 632.94669 653.82545 632.75541 654.875 633.4375 curveto
+655.57315 634.28952 656.43586 634.96251 656.8125 636.21875 curveto
+656.84006 637.7804 657.06596 639.3538 656.625 640.90625 curveto
+655.99804 642.54828 655.39699 644.08803 654.375 645.40625 curveto
+653.69487 646.41725 653.04785 647.44777 652.3125 648.375 curveto
+651.04694 648.99271 649.80651 649.46345 648.40625 649.25 curveto
+646.96172 649.25 645.53825 649.22245 644.09375 649.25 curveto
+643.65774 649.25226 643.21826 649.24788 642.78125 649.25 curveto
+642.78082 647.36247 642.78858 645.46453 642.96875 643.59375 curveto
+643.38213 641.22601 643.91759 639.27024 645.34375 637.59375 curveto
+646.19916 636.54731 647.61346 635.06047 648.75 633.875 curveto
+649.65408 633.38586 650.59819 633.04515 651.59375 632.9375 curveto
+closepath
+678.1875 663.1875 moveto
+679.71023 663.37727 680.96176 663.5183 681.9375 665.34375 curveto
+682.48408 667.34404 682.95384 669.10601 682.53125 671.375 curveto
+682.38459 672.63589 682.23887 673.8787 682 675.09375 curveto
+681.58116 675.08836 681.16759 675.06947 680.75 675 curveto
+678.17138 674.93272 675.57044 674.82459 673 674.5 curveto
+673.03456 674.16414 673.07882 673.83509 673.125 673.5 curveto
+673.73358 670.81764 674.60007 668.55909 676.125 666.53125 curveto
+676.81974 665.43557 677.47675 664.27416 678.1875 663.1875 curveto
+closepath
+700.5 699.40625 moveto
+701.05272 699.40103 701.6068 699.45907 702.15625 699.625 curveto
+704.99248 701.1522 707.3549 702.74812 708.46875 706.875 curveto
+708.43173 707.89726 708.31328 708.77868 708.1875 709.5625 curveto
+704.78983 709.55023 701.3882 709.01624 698.03125 708.4375 curveto
+696.80899 708.12018 695.59215 707.71996 694.40625 707.28125 curveto
+695.91621 704.55008 697.51405 701.90285 699.3125 699.53125 curveto
+699.69159 699.47092 700.09085 699.41011 700.5 699.40625 curveto
+closepath
+707 713.4375 moveto
+706.73935 713.87833 706.68419 713.86452 707 713.4375 curveto
+closepath
+689.71875 747 moveto
+691.4837 747.02838 692.01015 748.328 693.90625 749.4375 curveto
+696.21719 751.77455 697.96769 753.84841 698.0625 757.84375 curveto
+695.14109 756.75553 692.4328 755.19472 690.03125 752.5 curveto
+688.68709 751.09314 687.36714 749.5936 686.25 747.90625 curveto
+687.81088 747.26499 688.91885 746.98714 689.71875 747 curveto
+closepath
+662.53125 788.625 moveto
+663.41661 788.72096 664.30614 788.81888 665.1875 788.96875 curveto
+666.91909 789.6669 668.06375 790.13097 668.65625 792.625 curveto
+668.69532 793.04687 668.72432 793.44288 668.75 793.84375 curveto
+667.9077 793.78585 667.069 793.6661 666.25 793.34375 curveto
+664.90422 792.47336 663.70365 791.91625 662.96875 789.96875 curveto
+662.81877 789.51249 662.66908 789.0682 662.53125 788.625 curveto
+closepath
+fill
+grestore
+grestore
+grestore
+grestore
+showpage
+%%EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/dyncall_logo.pdf	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,540 @@
+%PDF-1.4
+%Âéî¡
+3 0 obj
+<<
+  /Type /Catalog
+  /Pages 2 0 R
+>>
+endobj
+4 0 obj
+<<
+  /Type /Page
+  /Parent 2 0 R
+  /MediaBox [ 0 0 595.27557373 841.88977051 ]
+  /Resources 5 0 R
+  /Contents 6 0 R
+  /Group
+  << /Type /Group
+     /S /Transparency
+     /CS /DeviceRGB
+  >>
+>>
+endobj
+6 0 obj
+<<
+  /Length 7 0 R
+>>
+stream
+0.8 0 0 -0.8 0 842 cm
+q
+1 0 0 1 0 0 cm
+q
+2.2965446 0 0 2.2965446 -189.23706 135.3048 cm
+q
+0 0 0 rg
+247.59 265.078 m
+235.699 273.664 257.766 281.555 244.684 288.172 c
+231.598 294.793 238.313 272.344 224.352 276.836 c
+210.395 281.328 228.941 295.648 214.453 297.902 c
+199.961 300.152 213.285 280.879 198.621 280.836 c
+183.957 280.793 197.172 300.145 182.695 297.812 c
+168.219 295.477 186.848 281.262 172.914 276.687 c
+158.98 272.117 165.566 294.605 152.52 287.914 c
+139.473 281.219 161.582 273.453 149.742 264.801 c
+137.906 256.148 137.223 279.57 126.883 269.172 c
+116.543 258.773 139.969 258.223 131.383 246.336 c
+122.797 234.445 114.91 256.516 108.289 243.43 c
+101.668 230.344 124.117 237.059 119.625 223.102 c
+115.133 209.141 100.813 227.687 98.5586 213.199 c
+96.3086 198.707 115.586 212.031 115.625 197.367 c
+115.668 182.703 96.3164 195.918 98.6484 181.441 c
+100.984 166.965 115.199 185.594 119.773 171.66 c
+124.344 157.727 101.855 164.312 108.551 151.266 c
+115.242 138.219 123.008 160.332 131.66 148.492 c
+140.313 136.652 116.891 135.969 127.289 125.629 c
+137.688 115.289 138.238 138.715 150.125 130.129 c
+162.016 121.543 139.949 113.656 153.031 107.035 c
+166.117 100.414 159.402 122.867 173.363 118.375 c
+187.32 113.883 168.773 99.559 183.262 97.309 c
+197.754 95.055 184.43 114.332 199.094 114.371 c
+213.758 114.414 200.543 95.062 215.02 97.398 c
+229.496 99.73 210.867 113.949 224.801 118.52 c
+238.734 123.09 232.148 100.602 245.195 107.297 c
+258.242 113.992 236.129 121.754 247.969 130.406 c
+259.809 139.059 260.492 115.637 270.832 126.035 c
+281.172 136.434 257.746 136.984 266.332 148.871 c
+274.918 160.762 282.805 138.695 289.426 151.781 c
+296.047 164.863 273.598 158.148 278.086 172.109 c
+282.578 186.066 296.902 167.52 299.152 182.008 c
+301.406 196.5 282.129 183.176 282.09 197.84 c
+282.047 212.504 301.398 199.289 299.063 213.766 c
+296.73 228.242 282.512 209.613 277.941 223.547 c
+273.371 237.48 295.859 230.895 289.164 243.941 c
+282.473 256.988 274.707 234.879 266.055 246.719 c
+257.402 258.555 280.824 259.238 270.426 269.578 c
+260.027 279.922 259.477 256.492 247.59 265.078 c
+h
+f
+Q
+q
+0 0 0 rg
+247.59 265.078 m
+235.699 273.664 257.766 281.555 244.684 288.172 c
+231.598 294.793 238.313 272.344 224.352 276.836 c
+210.395 281.328 228.941 295.648 214.453 297.902 c
+199.961 300.152 213.285 280.879 198.621 280.836 c
+183.957 280.793 197.172 300.145 182.695 297.812 c
+168.219 295.477 186.848 281.262 172.914 276.687 c
+158.98 272.117 165.566 294.605 152.52 287.914 c
+139.473 281.219 161.582 273.453 149.742 264.801 c
+137.906 256.148 137.223 279.57 126.883 269.172 c
+116.543 258.773 139.969 258.223 131.383 246.336 c
+122.797 234.445 114.91 256.516 108.289 243.43 c
+101.668 230.344 124.117 237.059 119.625 223.102 c
+115.133 209.141 100.813 227.687 98.5586 213.199 c
+96.3086 198.707 115.586 212.031 115.625 197.367 c
+115.668 182.703 96.3164 195.918 98.6484 181.441 c
+100.984 166.965 115.199 185.594 119.773 171.66 c
+124.344 157.727 101.855 164.312 108.551 151.266 c
+115.242 138.219 123.008 160.332 131.66 148.492 c
+140.313 136.652 116.891 135.969 127.289 125.629 c
+137.688 115.289 138.238 138.715 150.125 130.129 c
+162.016 121.543 139.949 113.656 153.031 107.035 c
+166.117 100.414 159.402 122.867 173.363 118.375 c
+187.32 113.883 168.773 99.559 183.262 97.309 c
+197.754 95.055 184.43 114.332 199.094 114.371 c
+213.758 114.414 200.543 95.062 215.02 97.398 c
+229.496 99.73 210.867 113.949 224.801 118.52 c
+238.734 123.09 232.148 100.602 245.195 107.297 c
+258.242 113.992 236.129 121.754 247.969 130.406 c
+259.809 139.059 260.492 115.637 270.832 126.035 c
+281.172 136.434 257.746 136.984 266.332 148.871 c
+274.918 160.762 282.805 138.695 289.426 151.781 c
+296.047 164.863 273.598 158.148 278.086 172.109 c
+282.578 186.066 296.902 167.52 299.152 182.008 c
+301.406 196.5 282.129 183.176 282.09 197.84 c
+282.047 212.504 301.398 199.289 299.063 213.766 c
+296.73 228.242 282.512 209.613 277.941 223.547 c
+273.371 237.48 295.859 230.895 289.164 243.941 c
+282.473 256.988 274.707 234.879 266.055 246.719 c
+257.402 258.555 280.824 259.238 270.426 269.578 c
+260.027 279.922 259.477 256.492 247.59 265.078 c
+h
+f
+Q
+q
+0 0 0 RG
+[] 0 d
+0.80000001 w
+0 j
+0 J
+10 M
+247.59 265.078 m
+235.699 273.664 257.766 281.555 244.684 288.172 c
+231.598 294.793 238.313 272.344 224.352 276.836 c
+210.395 281.328 228.941 295.648 214.453 297.902 c
+199.961 300.152 213.285 280.879 198.621 280.836 c
+183.957 280.793 197.172 300.145 182.695 297.812 c
+168.219 295.477 186.848 281.262 172.914 276.687 c
+158.98 272.117 165.566 294.605 152.52 287.914 c
+139.473 281.219 161.582 273.453 149.742 264.801 c
+137.906 256.148 137.223 279.57 126.883 269.172 c
+116.543 258.773 139.969 258.223 131.383 246.336 c
+122.797 234.445 114.91 256.516 108.289 243.43 c
+101.668 230.344 124.117 237.059 119.625 223.102 c
+115.133 209.141 100.813 227.687 98.5586 213.199 c
+96.3086 198.707 115.586 212.031 115.625 197.367 c
+115.668 182.703 96.3164 195.918 98.6484 181.441 c
+100.984 166.965 115.199 185.594 119.773 171.66 c
+124.344 157.727 101.855 164.312 108.551 151.266 c
+115.242 138.219 123.008 160.332 131.66 148.492 c
+140.313 136.652 116.891 135.969 127.289 125.629 c
+137.688 115.289 138.238 138.715 150.125 130.129 c
+162.016 121.543 139.949 113.656 153.031 107.035 c
+166.117 100.414 159.402 122.867 173.363 118.375 c
+187.32 113.883 168.773 99.559 183.262 97.309 c
+197.754 95.055 184.43 114.332 199.094 114.371 c
+213.758 114.414 200.543 95.062 215.02 97.398 c
+229.496 99.73 210.867 113.949 224.801 118.52 c
+238.734 123.09 232.148 100.602 245.195 107.297 c
+258.242 113.992 236.129 121.754 247.969 130.406 c
+259.809 139.059 260.492 115.637 270.832 126.035 c
+281.172 136.434 257.746 136.984 266.332 148.871 c
+274.918 160.762 282.805 138.695 289.426 151.781 c
+296.047 164.863 273.598 158.148 278.086 172.109 c
+282.578 186.066 296.902 167.52 299.152 182.008 c
+301.406 196.5 282.129 183.176 282.09 197.84 c
+282.047 212.504 301.398 199.289 299.063 213.766 c
+296.73 228.242 282.512 209.613 277.941 223.547 c
+273.371 237.48 295.859 230.895 289.164 243.941 c
+282.473 256.988 274.707 234.879 266.055 246.719 c
+257.402 258.555 280.824 259.238 270.426 269.578 c
+260.027 279.922 259.477 256.492 247.59 265.078 c
+h
+S
+Q
+q
+0 0 0 rg
+354.973 349.148 m
+345.719 361.668 345.527 339.457 333.348 349.156 c
+321.172 358.855 342.773 364.012 328.5 370.227 c
+314.227 376.441 325.164 357.113 309.77 359.422 c
+294.375 361.734 310.504 377 295.035 375.246 c
+279.566 373.492 298.703 362.223 284.215 356.527 c
+269.727 350.828 276.063 372.113 263.543 362.859 c
+251.023 353.609 273.23 353.418 263.535 341.238 c
+253.836 329.062 248.68 350.664 242.465 336.391 c
+236.246 322.117 255.574 333.055 253.266 317.66 c
+250.957 302.266 235.688 318.395 237.441 302.926 c
+239.195 287.457 250.465 306.594 256.164 292.105 c
+261.863 277.617 240.574 283.953 249.828 271.434 c
+259.082 258.914 259.273 281.121 271.449 271.422 c
+283.629 261.727 262.027 256.566 276.301 250.352 c
+290.574 244.137 279.633 263.465 295.031 261.156 c
+310.426 258.848 294.297 243.578 309.766 245.332 c
+325.234 247.086 306.098 258.355 320.586 264.055 c
+335.07 269.75 328.738 248.465 341.258 257.719 c
+353.777 266.973 331.57 267.16 341.266 279.34 c
+350.965 291.52 356.121 269.918 362.336 284.191 c
+368.551 298.465 349.223 287.523 351.535 302.918 c
+353.844 318.316 369.109 302.187 367.355 317.656 c
+365.602 333.125 354.336 313.988 348.637 328.473 c
+342.938 342.961 364.227 336.629 354.973 349.148 c
+h
+f
+Q
+q
+0 0 0 rg
+354.973 349.148 m
+345.719 361.668 345.527 339.457 333.348 349.156 c
+321.172 358.855 342.773 364.012 328.5 370.227 c
+314.227 376.441 325.164 357.113 309.77 359.422 c
+294.375 361.734 310.504 377 295.035 375.246 c
+279.566 373.492 298.703 362.223 284.215 356.527 c
+269.727 350.828 276.063 372.113 263.543 362.859 c
+251.023 353.609 273.23 353.418 263.535 341.238 c
+253.836 329.062 248.68 350.664 242.465 336.391 c
+236.246 322.117 255.574 333.055 253.266 317.66 c
+250.957 302.266 235.688 318.395 237.441 302.926 c
+239.195 287.457 250.465 306.594 256.164 292.105 c
+261.863 277.617 240.574 283.953 249.828 271.434 c
+259.082 258.914 259.273 281.121 271.449 271.422 c
+283.629 261.727 262.027 256.566 276.301 250.352 c
+290.574 244.137 279.633 263.465 295.031 261.156 c
+310.426 258.848 294.297 243.578 309.766 245.332 c
+325.234 247.086 306.098 258.355 320.586 264.055 c
+335.07 269.75 328.738 248.465 341.258 257.719 c
+353.777 266.973 331.57 267.16 341.266 279.34 c
+350.965 291.52 356.121 269.918 362.336 284.191 c
+368.551 298.465 349.223 287.523 351.535 302.918 c
+353.844 318.316 369.109 302.187 367.355 317.656 c
+365.602 333.125 354.336 313.988 348.637 328.473 c
+342.938 342.961 364.227 336.629 354.973 349.148 c
+h
+f
+Q
+q
+0 0 0 rg
+307.188 310.25 m
+307.188 312.992 304.969 315.223 302.238 315.223 c
+299.504 315.223 297.289 312.992 297.289 310.25 c
+297.289 307.504 299.504 305.277 302.238 305.277 c
+304.969 305.277 307.188 307.504 307.188 310.25 c
+h
+f
+Q
+q
+1 1 1 rg
+307.188 310.25 m
+307.188 312.992 304.969 315.223 302.238 315.223 c
+299.504 315.223 297.289 312.992 297.289 310.25 c
+297.289 307.504 299.504 305.277 302.238 305.277 c
+304.969 305.277 307.188 307.504 307.188 310.25 c
+h
+f
+Q
+q
+0 0 0 rg
+273.918 198.176 m
+273.918 239.805 240.289 273.59 198.855 273.59 c
+157.426 273.59 123.797 239.805 123.797 198.176 c
+123.797 156.547 157.426 122.758 198.855 122.758 c
+240.289 122.758 273.918 156.547 273.918 198.176 c
+h
+f
+Q
+q
+1 1 1 rg
+273.918 198.176 m
+273.918 239.805 240.289 273.59 198.855 273.59 c
+157.426 273.59 123.797 239.805 123.797 198.176 c
+123.797 156.547 157.426 122.758 198.855 122.758 c
+240.289 122.758 273.918 156.547 273.918 198.176 c
+h
+f
+Q
+q
+0 0 0 rg
+203.785 198.195 m
+203.785 200.941 201.566 203.168 198.836 203.168 c
+196.105 203.168 193.887 200.941 193.887 198.195 c
+193.887 195.449 196.105 193.223 198.836 193.223 c
+201.566 193.223 203.785 195.449 203.785 198.195 c
+h
+f
+Q
+q
+0 0 0 rg
+203.785 198.195 m
+203.785 200.941 201.566 203.168 198.836 203.168 c
+196.105 203.168 193.887 200.941 193.887 198.195 c
+193.887 195.449 196.105 193.223 198.836 193.223 c
+201.566 193.223 203.785 195.449 203.785 198.195 c
+h
+f
+Q
+q
+0.4354368 0 0 0.4354368 82.400777 -58.916687 cm
+q
+0 0 0 rg
+372.4375 226.8125 m
+350.03614 226.99774 326.37254 235.86686 301.53125 253.375 c
+368.53125 345.625 l
+371.39273 344.04727 374.33807 342.1941 377.40625 339.96875 c
+419.75 309.1875 l
+431.09721 316.83039 443.82523 328.92944 457.9375 345.375 c
+557.875 482.9375 l
+569.15331 501.44535 576.62605 517.13205 580.25 530.09375 c
+537.90625 560.875 l
+534.83804 563.09806 532.16736 565.31878 529.78125 567.5625 c
+596.78125 659.75 l
+626.75298 637.33253 643.69738 612.67138 647.59375 585.75 c
+651.58512 558.10191 635.79682 513.598 600.21875 452.15625 c
+582.8125 425.21875 l
+552.28125 381.71875 l
+520.53125 339.46875 l
+500.28125 314.625 l
+452.84383 261.79529 415.32322 232.90591 387.71875 228.0625 c
+382.68286 227.17934 377.60704 226.76975 372.4375 226.8125 c
+h
+298.59375 255.53125 m
+292.22542 260.26672 288.42952 265.62733 287.28125 271.59375 c
+286.09854 277.70256 287.25876 283.07104 290.6875 287.78125 c
+328.125 339.34375 l
+337.38467 352.07348 349.72995 354.71426 365.25 347.3125 c
+298.59375 255.53125 l
+h
+527.15625 570.15625 m
+515.3428 582.66092 514.16594 595.3595 523.53125 608.25 c
+560.71875 659.46875 l
+564.28758 664.37648 569.05433 667.18005 575.15625 667.84375 c
+581.11347 668.50094 587.37058 666.49603 593.84375 661.90625 c
+527.15625 570.15625 l
+h
+f
+Q
+Q
+q
+0.4354368 0 0 0.4354368 82.400777 -58.916687 cm
+q
+0 0 0 rg
+658.03125 626.5625 m
+655.25013 626.68881 652.89528 628.64662 650.5 630.34375 c
+645.86328 633.50839 641.64235 636.86247 638 641.6875 c
+636.50265 643.53622 636.13403 645.73808 635.8125 648.3125 c
+635.79309 648.61363 635.79586 648.91743 635.78125 649.21875 c
+635.23223 649.19257 634.70569 649.15791 634.15625 649.09375 c
+632.90004 648.82505 631.6188 648.56494 630.40625 648 c
+629.26716 647.40749 628.11703 646.83331 626.96875 646.25 c
+626.10755 645.68505 625.17836 645.1645 624.46875 644.3125 c
+623.94054 642.88405 623.48803 641.40243 622.5625 640.34375 c
+621.71048 638.89922 620.89835 637.66941 620.78125 635.6875 c
+620.55619 633.53334 620.32635 631.3761 620.46875 629.1875 c
+613.25 634.125 l
+613.24081 636.35035 613.4845 638.53016 613.71875 640.71875 c
+613.85195 642.89817 614.81159 644.35797 615.71875 646 c
+616.57995 646.98751 616.99334 648.35779 617.46875 649.6875 c
+618.15771 650.96897 619.23721 651.5114 620.25 652.21875 c
+621.40746 652.85489 622.58337 653.44241 623.75 654.0625 c
+624.99702 654.6619 626.29163 654.97031 627.59375 655.3125 c
+629.14392 655.59038 630.71963 655.55329 632.28125 655.5625 c
+633.40247 655.5625 634.53435 655.59144 635.65625 655.59375 c
+635.65602 655.66675 635.65652 655.73949 635.65625 655.8125 c
+635.50468 658.17335 636.22468 660.11922 636.96875 662.15625 c
+637.87359 664.67786 639.42176 666.43805 640.9375 668.25 c
+642.75866 670.26866 644.74418 671.94434 646.78125 673.53125 c
+648.69198 674.7622 650.70926 675.69811 652.71875 676.59375 c
+656.14519 677.86833 659.603 678.9573 663.09375 679.84375 c
+664.02122 680.06128 664.94201 680.22593 665.875 680.375 c
+665.76219 683.23707 665.89639 686.10725 666.03125 688.96875 c
+666.10244 692.71901 667.28887 695.7388 668.6875 698.84375 c
+670.90367 702.89715 674.1061 705.11973 677.40625 707.21875 c
+680.51905 709.33564 683.68848 711.12476 686.96875 712.5 c
+686.27445 713.84958 685.59527 715.21275 684.90625 716.5625 c
+682.09758 722.75398 678.51334 728.5208 676.84375 735.5 c
+675.95499 739.41102 676.12805 743.17354 676.65625 747.09375 c
+676.74319 747.40856 676.86916 747.69777 676.96875 748 c
+676.52343 748.36731 676.07405 748.71255 675.59375 749.09375 c
+670.58669 754.22361 665.07597 758.95221 661.40625 765.0625 c
+657.98224 768.95528 656.79145 775.20535 655.40625 780.0625 c
+655.2626 780.90806 655.17126 781.73797 655.09375 782.59375 c
+649.8835 782.96621 644.62777 782.87146 639.46875 783.84375 c
+635.56462 784.53271 632.0128 786.6759 628.53125 789 c
+622.53125 795.4375 l
+625.97607 793.00776 629.52281 790.76565 633.40625 789.96875 c
+639.26474 788.76536 645.21139 788.7314 651.125 788.28125 c
+652.35836 788.26976 653.60825 788.24556 654.84375 788.25 c
+654.84003 788.40659 654.81634 788.56232 654.8125 788.71875 c
+654.55299 791.19672 655.30873 793.18268 656 795.34375 c
+656.83365 797.38997 658.11847 798.37459 659.625 799.34375 c
+661.09709 800.08094 662.63732 800.14753 664.1875 800.21875 c
+669.26516 800.59538 669.3314 799.11144 675.34375 794.5 c
+676.12458 792.20346 675.99662 789.97387 675.71875 787.5625 c
+675.05505 784.64589 673.67862 783.925 671.6875 782.9375 c
+668.45971 782.35662 665.19867 782.29356 661.9375 782.34375 c
+661.99928 780.03433 662.13138 777.7163 662.5625 775.46875 c
+663.21931 772.65089 665.09458 768.82277 666.65625 766.625 c
+669.20204 762.82554 674.96145 757.26163 679.21875 752.75 c
+680.48024 754.70163 681.99017 756.37702 683.53125 758 c
+686.32155 761.1233 689.50188 762.95982 692.9375 764.3125 c
+698.33668 765.34595 703.75165 760.99336 705.125 753.90625 c
+705.07907 749.0904 703.10202 746.54029 700.5 743.75 c
+697.42263 741.67852 693.98575 741.28994 690.59375 741.21875 c
+687.88208 741.05633 685.78146 741.65596 683.8125 742.75 c
+683.7427 742.52184 683.65599 742.29759 683.59375 742.0625 c
+683.15281 738.33062 683.00463 734.75992 683.875 731.0625 c
+685.46098 724.86821 688.28073 719.4255 690.90625 713.9375 c
+691.22142 714.03134 691.52582 714.13349 691.84375 714.21875 c
+696.29445 715.15115 700.80898 715.7729 705.3125 715.59375 c
+712.04827 712.56001 715.54313 710.41086 715.4375 701.96875 c
+714.16292 697.58235 711.70289 695.58585 708.6875 693.71875 c
+702.80375 691.93433 701.13556 695.05715 695.1875 699.625 c
+693.53745 701.46038 692.0678 703.5253 690.71875 705.71875 c
+688.35474 704.56503 686.06885 703.15492 683.8125 701.53125 c
+680.66394 699.5034 677.577 697.39496 675.46875 693.5 c
+674.16891 690.53975 673.05511 687.64651 673 684.09375 c
+672.95152 683.08548 672.91042 682.07355 672.875 681.0625 c
+673.39623 681.09037 673.91645 681.10166 674.4375 681.125 c
+680.69099 681.79789 681.20995 680.48892 687.8125 675.3125 c
+688.98833 672.67377 689.34532 669.61282 689.6875 666.625 c
+690.14451 664.07813 689.48216 662.14768 688.84375 659.90625 c
+687.75059 657.69008 686.23662 657.37616 684.40625 656.9375 c
+679.84991 657.2682 677.68005 660.39024 673.25 663.90625 c
+671.64242 665.98692 670.31033 668.38726 668.875 670.65625 c
+668.22014 671.50865 667.68792 672.40889 667.28125 673.34375 c
+664.57176 672.59674 661.8957 671.71207 659.25 670.625 c
+657.27727 669.75461 655.34822 668.76456 653.4375 667.6875 c
+651.41884 666.19934 649.42459 664.62531 647.65625 662.625 c
+646.22091 660.89341 644.74907 659.20782 643.90625 656.8125 c
+643.7724 656.39254 643.63115 656.00124 643.5 655.59375 c
+644.57691 655.47117 645.61819 655.10606 646.6875 654.65625 c
+650.86951 652.64677 654.50896 649.03691 658.25 645.96875 c
+659.64171 644.67809 660.68762 642.95584 661.71875 641.1875 c
+662.92903 639.79809 663.36287 638.192 663.875 636.28125 c
+664.2769 634.48765 664.0693 632.80647 663.90625 631.03125 c
+663.44005 629.56835 662.50829 628.61573 661.65625 627.59375 c
+660.54243 626.59935 659.29433 626.68878 658.03125 626.5625 c
+h
+651.59375 632.9375 m
+652.70528 632.94669 653.82545 632.75541 654.875 633.4375 c
+655.57315 634.28952 656.43586 634.96251 656.8125 636.21875 c
+656.84006 637.7804 657.06596 639.3538 656.625 640.90625 c
+655.99804 642.54828 655.39699 644.08803 654.375 645.40625 c
+653.69487 646.41725 653.04785 647.44777 652.3125 648.375 c
+651.04694 648.99271 649.80651 649.46345 648.40625 649.25 c
+646.96172 649.25 645.53825 649.22245 644.09375 649.25 c
+643.65774 649.25226 643.21826 649.24788 642.78125 649.25 c
+642.78082 647.36247 642.78858 645.46453 642.96875 643.59375 c
+643.38213 641.22601 643.91759 639.27024 645.34375 637.59375 c
+646.19916 636.54731 647.61346 635.06047 648.75 633.875 c
+649.65408 633.38586 650.59819 633.04515 651.59375 632.9375 c
+h
+678.1875 663.1875 m
+679.71023 663.37727 680.96176 663.5183 681.9375 665.34375 c
+682.48408 667.34404 682.95384 669.10601 682.53125 671.375 c
+682.38459 672.63589 682.23887 673.8787 682 675.09375 c
+681.58116 675.08836 681.16759 675.06947 680.75 675 c
+678.17138 674.93272 675.57044 674.82459 673 674.5 c
+673.03456 674.16414 673.07882 673.83509 673.125 673.5 c
+673.73358 670.81764 674.60007 668.55909 676.125 666.53125 c
+676.81974 665.43557 677.47675 664.27416 678.1875 663.1875 c
+h
+700.5 699.40625 m
+701.05272 699.40103 701.6068 699.45907 702.15625 699.625 c
+704.99248 701.1522 707.3549 702.74812 708.46875 706.875 c
+708.43173 707.89726 708.31328 708.77868 708.1875 709.5625 c
+704.78983 709.55023 701.3882 709.01624 698.03125 708.4375 c
+696.80899 708.12018 695.59215 707.71996 694.40625 707.28125 c
+695.91621 704.55008 697.51405 701.90285 699.3125 699.53125 c
+699.69159 699.47092 700.09085 699.41011 700.5 699.40625 c
+h
+707 713.4375 m
+706.73935 713.87833 706.68419 713.86452 707 713.4375 c
+h
+689.71875 747 m
+691.4837 747.02838 692.01015 748.328 693.90625 749.4375 c
+696.21719 751.77455 697.96769 753.84841 698.0625 757.84375 c
+695.14109 756.75553 692.4328 755.19472 690.03125 752.5 c
+688.68709 751.09314 687.36714 749.5936 686.25 747.90625 c
+687.81088 747.26499 688.91885 746.98714 689.71875 747 c
+h
+662.53125 788.625 m
+663.41661 788.72096 664.30614 788.81888 665.1875 788.96875 c
+666.91909 789.6669 668.06375 790.13097 668.65625 792.625 c
+668.69532 793.04687 668.72432 793.44288 668.75 793.84375 c
+667.9077 793.78585 667.069 793.6661 666.25 793.34375 c
+664.90422 792.47336 663.70365 791.91625 662.96875 789.96875 c
+662.81877 789.51249 662.66908 789.0682 662.53125 788.625 c
+h
+f
+Q
+Q
+Q
+Q
+endstream
+endobj
+7 0 obj
+19365
+endobj
+5 0 obj
+<<
+  /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+>>
+endobj
+1 0 obj
+<<
+  /Title(dyncall_logo.svg.eps)
+  /Author(Admin)
+  /Creator(www.inkscape.org)
+  /Producer(Inkscape 0.45pre1)
+  /CreationDate(D:20071206130538Z)
+>>
+endobj
+2 0 obj
+<<
+  /Type /Pages
+  /Count 1
+  /Kids [
+    4 0 R
+  ]
+>>
+endobj
+xref
+0 8
+0000000000 65535 f 
+0000019785 00000 n 
+0000019949 00000 n 
+0000000015 00000 n 
+0000000068 00000 n 
+0000019716 00000 n 
+0000000276 00000 n 
+0000019695 00000 n 
+trailer
+<<
+  /Size 7
+  /Root 3 0 R
+  /Info 1 0 R
+>>
+startxref
+20020
+%%EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/dyncall_logo.svg	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="744.09448"
+   height="1052.3622"
+   viewBox="96px 39px 297px 338px"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.45pre1"
+   sodipodi:docname="dyncall_logo.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   sodipodi:docbase="D:\dyncall\doc"
+   sodipodi:modified="true"
+   version="1.0">
+  <metadata
+     id="metadata59">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs57" />
+  <sodipodi:namedview
+     inkscape:window-height="575"
+     inkscape:window-width="765"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     width="744.09449px"
+     height="1052.3622px"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:zoom="0.39434801"
+     inkscape:cx="616.83582"
+     inkscape:cy="397.87537"
+     inkscape:window-x="186"
+     inkscape:window-y="80"
+     inkscape:current-layer="g6" />
+  <title
+     id="title4">generated by pstoedit version:3.45 from dyncall_logo.eps</title>
+  <g
+     xml:space="preserve"
+     id="g6"
+     transform="matrix(2.2965446,0,0,2.2965446,-189.23706,135.3048)"
+     style="fill:#000000">
+<g
+   stroke-miterlimit="10"
+   id="g8"
+   style="fill:#000000;fill-rule:evenodd;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 247.59,265.078 C 235.699,273.664 257.766,281.555 244.684,288.172 C 231.598,294.793 238.313,272.344 224.352,276.836 C 210.395,281.328 228.941,295.648 214.453,297.902 C 199.961,300.152 213.285,280.879 198.621,280.836 C 183.957,280.793 197.172,300.145 182.695,297.812 C 168.219,295.477 186.848,281.262 172.914,276.687 C 158.98,272.117 165.566,294.605 152.52,287.914 C 139.473,281.219 161.582,273.453 149.742,264.801 C 137.906,256.148 137.223,279.57 126.883,269.172 C 116.543,258.773 139.969,258.223 131.383,246.336 C 122.797,234.445 114.91,256.516 108.289,243.43 C 101.668,230.344 124.117,237.059 119.625,223.102 C 115.133,209.141 100.813,227.687 98.5586,213.199 C 96.3086,198.707 115.586,212.031 115.625,197.367 C 115.668,182.703 96.3164,195.918 98.6484,181.441 C 100.984,166.965 115.199,185.594 119.773,171.66 C 124.344,157.727 101.855,164.312 108.551,151.266 C 115.242,138.219 123.008,160.332 131.66,148.492 C 140.313,136.652 116.891,135.969 127.289,125.629 C 137.688,115.289 138.238,138.715 150.125,130.129 C 162.016,121.543 139.949,113.656 153.031,107.035 C 166.117,100.414 159.402,122.867 173.363,118.375 C 187.32,113.883 168.773,99.559 183.262,97.309 C 197.754,95.055 184.43,114.332 199.094,114.371 C 213.758,114.414 200.543,95.062 215.02,97.398 C 229.496,99.73 210.867,113.949 224.801,118.52 C 238.734,123.09 232.148,100.602 245.195,107.297 C 258.242,113.992 236.129,121.754 247.969,130.406 C 259.809,139.059 260.492,115.637 270.832,126.035 C 281.172,136.434 257.746,136.984 266.332,148.871 C 274.918,160.762 282.805,138.695 289.426,151.781 C 296.047,164.863 273.598,158.148 278.086,172.109 C 282.578,186.066 296.902,167.52 299.152,182.008 C 301.406,196.5 282.129,183.176 282.09,197.84 C 282.047,212.504 301.398,199.289 299.063,213.766 C 296.73,228.242 282.512,209.613 277.941,223.547 C 273.371,237.48 295.859,230.895 289.164,243.941 C 282.473,256.988 274.707,234.879 266.055,246.719 C 257.402,258.555 280.824,259.238 270.426,269.578 C 260.027,279.922 259.477,256.492 247.59,265.078 z "
+   id="path10"
+   style="fill:#000000" />
+</g>
+<g
+   stroke-miterlimit="10"
+   id="g12"
+   style="fill:#000000;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1">
+	<path
+   d="M 247.59,265.078 C 235.699,273.664 257.766,281.555 244.684,288.172 C 231.598,294.793 238.313,272.344 224.352,276.836 C 210.395,281.328 228.941,295.648 214.453,297.902 C 199.961,300.152 213.285,280.879 198.621,280.836 C 183.957,280.793 197.172,300.145 182.695,297.812 C 168.219,295.477 186.848,281.262 172.914,276.687 C 158.98,272.117 165.566,294.605 152.52,287.914 C 139.473,281.219 161.582,273.453 149.742,264.801 C 137.906,256.148 137.223,279.57 126.883,269.172 C 116.543,258.773 139.969,258.223 131.383,246.336 C 122.797,234.445 114.91,256.516 108.289,243.43 C 101.668,230.344 124.117,237.059 119.625,223.102 C 115.133,209.141 100.813,227.687 98.5586,213.199 C 96.3086,198.707 115.586,212.031 115.625,197.367 C 115.668,182.703 96.3164,195.918 98.6484,181.441 C 100.984,166.965 115.199,185.594 119.773,171.66 C 124.344,157.727 101.855,164.312 108.551,151.266 C 115.242,138.219 123.008,160.332 131.66,148.492 C 140.313,136.652 116.891,135.969 127.289,125.629 C 137.688,115.289 138.238,138.715 150.125,130.129 C 162.016,121.543 139.949,113.656 153.031,107.035 C 166.117,100.414 159.402,122.867 173.363,118.375 C 187.32,113.883 168.773,99.559 183.262,97.309 C 197.754,95.055 184.43,114.332 199.094,114.371 C 213.758,114.414 200.543,95.062 215.02,97.398 C 229.496,99.73 210.867,113.949 224.801,118.52 C 238.734,123.09 232.148,100.602 245.195,107.297 C 258.242,113.992 236.129,121.754 247.969,130.406 C 259.809,139.059 260.492,115.637 270.832,126.035 C 281.172,136.434 257.746,136.984 266.332,148.871 C 274.918,160.762 282.805,138.695 289.426,151.781 C 296.047,164.863 273.598,158.148 278.086,172.109 C 282.578,186.066 296.902,167.52 299.152,182.008 C 301.406,196.5 282.129,183.176 282.09,197.84 C 282.047,212.504 301.398,199.289 299.063,213.766 C 296.73,228.242 282.512,209.613 277.941,223.547 C 273.371,237.48 295.859,230.895 289.164,243.941 C 282.473,256.988 274.707,234.879 266.055,246.719 C 257.402,258.555 280.824,259.238 270.426,269.578 C 260.027,279.922 259.477,256.492 247.59,265.078 z "
+   id="path14"
+   style="fill:#000000;stroke:#000000;stroke-opacity:1" />
+</g>
+<g
+   stroke-miterlimit="10"
+   id="g16"
+   style="fill:#000000;fill-rule:nonzero;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 354.973,349.148 C 345.719,361.668 345.527,339.457 333.348,349.156 C 321.172,358.855 342.773,364.012 328.5,370.227 C 314.227,376.441 325.164,357.113 309.77,359.422 C 294.375,361.734 310.504,377 295.035,375.246 C 279.566,373.492 298.703,362.223 284.215,356.527 C 269.727,350.828 276.063,372.113 263.543,362.859 C 251.023,353.609 273.23,353.418 263.535,341.238 C 253.836,329.062 248.68,350.664 242.465,336.391 C 236.246,322.117 255.574,333.055 253.266,317.66 C 250.957,302.266 235.688,318.395 237.441,302.926 C 239.195,287.457 250.465,306.594 256.164,292.105 C 261.863,277.617 240.574,283.953 249.828,271.434 C 259.082,258.914 259.273,281.121 271.449,271.422 C 283.629,261.727 262.027,256.566 276.301,250.352 C 290.574,244.137 279.633,263.465 295.031,261.156 C 310.426,258.848 294.297,243.578 309.766,245.332 C 325.234,247.086 306.098,258.355 320.586,264.055 C 335.07,269.75 328.738,248.465 341.258,257.719 C 353.777,266.973 331.57,267.16 341.266,279.34 C 350.965,291.52 356.121,269.918 362.336,284.191 C 368.551,298.465 349.223,287.523 351.535,302.918 C 353.844,318.316 369.109,302.187 367.355,317.656 C 365.602,333.125 354.336,313.988 348.637,328.473 C 342.938,342.961 364.227,336.629 354.973,349.148 z "
+   id="path18"
+   style="fill:#000000" />
+</g>
+<g
+   stroke-miterlimit="10"
+   id="g20"
+   style="fill:#000000;stroke:#7f7f7f;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 354.973,349.148 C 345.719,361.668 345.527,339.457 333.348,349.156 C 321.172,358.855 342.773,364.012 328.5,370.227 C 314.227,376.441 325.164,357.113 309.77,359.422 C 294.375,361.734 310.504,377 295.035,375.246 C 279.566,373.492 298.703,362.223 284.215,356.527 C 269.727,350.828 276.063,372.113 263.543,362.859 C 251.023,353.609 273.23,353.418 263.535,341.238 C 253.836,329.062 248.68,350.664 242.465,336.391 C 236.246,322.117 255.574,333.055 253.266,317.66 C 250.957,302.266 235.688,318.395 237.441,302.926 C 239.195,287.457 250.465,306.594 256.164,292.105 C 261.863,277.617 240.574,283.953 249.828,271.434 C 259.082,258.914 259.273,281.121 271.449,271.422 C 283.629,261.727 262.027,256.566 276.301,250.352 C 290.574,244.137 279.633,263.465 295.031,261.156 C 310.426,258.848 294.297,243.578 309.766,245.332 C 325.234,247.086 306.098,258.355 320.586,264.055 C 335.07,269.75 328.738,248.465 341.258,257.719 C 353.777,266.973 331.57,267.16 341.266,279.34 C 350.965,291.52 356.121,269.918 362.336,284.191 C 368.551,298.465 349.223,287.523 351.535,302.918 C 353.844,318.316 369.109,302.187 367.355,317.656 C 365.602,333.125 354.336,313.988 348.637,328.473 C 342.938,342.961 364.227,336.629 354.973,349.148 z "
+   id="path22"
+   style="fill:#000000;stroke:none" />
+</g>
+<g
+   stroke-miterlimit="10"
+   id="g24"
+   style="fill:#000000;fill-rule:nonzero;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 307.188,310.25 C 307.188,312.992 304.969,315.223 302.238,315.223 C 299.504,315.223 297.289,312.992 297.289,310.25 C 297.289,307.504 299.504,305.277 302.238,305.277 C 304.969,305.277 307.188,307.504 307.188,310.25 z "
+   id="path26"
+   style="fill:#000000" />
+</g>
+<g
+   stroke-miterlimit="10"
+   id="g28"
+   style="fill:#000000;stroke:none;stroke-width:0.80376798;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 307.188,310.25 C 307.188,312.992 304.969,315.223 302.238,315.223 C 299.504,315.223 297.289,312.992 297.289,310.25 C 297.289,307.504 299.504,305.277 302.238,305.277 C 304.969,305.277 307.188,307.504 307.188,310.25 z "
+   id="path30"
+   style="fill:#ffffff;stroke:none" />
+</g>
+<g
+   stroke-miterlimit="10"
+   id="g32"
+   style="fill:#000000;fill-rule:nonzero;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 273.918,198.176 C 273.918,239.805 240.289,273.59 198.855,273.59 C 157.426,273.59 123.797,239.805 123.797,198.176 C 123.797,156.547 157.426,122.758 198.855,122.758 C 240.289,122.758 273.918,156.547 273.918,198.176 z "
+   id="path34"
+   style="fill:#000000" />
+</g>
+<g
+   stroke-miterlimit="10"
+   id="g36"
+   style="fill:#000000;stroke:#7f7f7f;stroke-width:0.80376798;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 273.918,198.176 C 273.918,239.805 240.289,273.59 198.855,273.59 C 157.426,273.59 123.797,239.805 123.797,198.176 C 123.797,156.547 157.426,122.758 198.855,122.758 C 240.289,122.758 273.918,156.547 273.918,198.176 z "
+   id="path38"
+   style="fill:#ffffff;stroke:none" />
+</g>
+<g
+   stroke-miterlimit="10"
+   id="g40"
+   style="fill:#000000;fill-rule:nonzero;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 203.785,198.195 C 203.785,200.941 201.566,203.168 198.836,203.168 C 196.105,203.168 193.887,200.941 193.887,198.195 C 193.887,195.449 196.105,193.223 198.836,193.223 C 201.566,193.223 203.785,195.449 203.785,198.195 z "
+   id="path42"
+   style="fill:#000000" />
+</g>
+<g
+   stroke-miterlimit="10"
+   id="g44"
+   style="fill:#000000;stroke:none;stroke-width:0.80376798;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 203.785,198.195 C 203.785,200.941 201.566,203.168 198.836,203.168 C 196.105,203.168 193.887,200.941 193.887,198.195 C 193.887,195.449 196.105,193.223 198.836,193.223 C 201.566,193.223 203.785,195.449 203.785,198.195 z "
+   id="path46"
+   style="fill:#000000;stroke:none" />
+</g>
+<g
+   stroke-miterlimit="10"
+   id="g48"
+   style="fill:#000000;fill-rule:nonzero;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   style="fill:#000000"
+   d="M 372.4375,226.8125 C 350.03614,226.99774 326.37254,235.86686 301.53125,253.375 L 368.53125,345.625 C 371.39273,344.04727 374.33807,342.1941 377.40625,339.96875 L 419.75,309.1875 C 431.09721,316.83039 443.82523,328.92944 457.9375,345.375 L 557.875,482.9375 C 569.15331,501.44535 576.62605,517.13205 580.25,530.09375 L 537.90625,560.875 C 534.83804,563.09806 532.16736,565.31878 529.78125,567.5625 L 596.78125,659.75 C 626.75298,637.33253 643.69738,612.67138 647.59375,585.75 C 651.58512,558.10191 635.79682,513.598 600.21875,452.15625 L 582.8125,425.21875 L 552.28125,381.71875 L 520.53125,339.46875 L 500.28125,314.625 C 452.84383,261.79529 415.32322,232.90591 387.71875,228.0625 C 382.68286,227.17934 377.60704,226.76975 372.4375,226.8125 z M 298.59375,255.53125 C 292.22542,260.26672 288.42952,265.62733 287.28125,271.59375 C 286.09854,277.70256 287.25876,283.07104 290.6875,287.78125 L 328.125,339.34375 C 337.38467,352.07348 349.72995,354.71426 365.25,347.3125 L 298.59375,255.53125 z M 527.15625,570.15625 C 515.3428,582.66092 514.16594,595.3595 523.53125,608.25 L 560.71875,659.46875 C 564.28758,664.37648 569.05433,667.18005 575.15625,667.84375 C 581.11347,668.50094 587.37058,666.49603 593.84375,661.90625 L 527.15625,570.15625 z "
+   transform="matrix(0.4354368,0,0,0.4354368,82.400777,-58.916687)"
+   id="path50"
+   sodipodi:nodetypes="ccccccccccccccccccccccccccccccc" />
+</g>
+<g
+   stroke-miterlimit="10"
+   id="g52"
+   style="fill:#000000;fill-rule:nonzero;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   style="fill:#000000"
+   d="M 658.03125 626.5625 C 655.25013 626.68881 652.89528 628.64662 650.5 630.34375 C 645.86328 633.50839 641.64235 636.86247 638 641.6875 C 636.50265 643.53622 636.13403 645.73808 635.8125 648.3125 C 635.79309 648.61363 635.79586 648.91743 635.78125 649.21875 C 635.23223 649.19257 634.70569 649.15791 634.15625 649.09375 C 632.90004 648.82505 631.6188 648.56494 630.40625 648 C 629.26716 647.40749 628.11703 646.83331 626.96875 646.25 C 626.10755 645.68505 625.17836 645.1645 624.46875 644.3125 C 623.94054 642.88405 623.48803 641.40243 622.5625 640.34375 C 621.71048 638.89922 620.89835 637.66941 620.78125 635.6875 C 620.55619 633.53334 620.32635 631.3761 620.46875 629.1875 L 613.25 634.125 C 613.24081 636.35035 613.4845 638.53016 613.71875 640.71875 C 613.85195 642.89817 614.81159 644.35797 615.71875 646 C 616.57995 646.98751 616.99334 648.35779 617.46875 649.6875 C 618.15771 650.96897 619.23721 651.5114 620.25 652.21875 C 621.40746 652.85489 622.58337 653.44241 623.75 654.0625 C 624.99702 654.6619 626.29163 654.97031 627.59375 655.3125 C 629.14392 655.59038 630.71963 655.55329 632.28125 655.5625 C 633.40247 655.5625 634.53435 655.59144 635.65625 655.59375 C 635.65602 655.66675 635.65652 655.73949 635.65625 655.8125 C 635.50468 658.17335 636.22468 660.11922 636.96875 662.15625 C 637.87359 664.67786 639.42176 666.43805 640.9375 668.25 C 642.75866 670.26866 644.74418 671.94434 646.78125 673.53125 C 648.69198 674.7622 650.70926 675.69811 652.71875 676.59375 C 656.14519 677.86833 659.603 678.9573 663.09375 679.84375 C 664.02122 680.06128 664.94201 680.22593 665.875 680.375 C 665.76219 683.23707 665.89639 686.10725 666.03125 688.96875 C 666.10244 692.71901 667.28887 695.7388 668.6875 698.84375 C 670.90367 702.89715 674.1061 705.11973 677.40625 707.21875 C 680.51905 709.33564 683.68848 711.12476 686.96875 712.5 C 686.27445 713.84958 685.59527 715.21275 684.90625 716.5625 C 682.09758 722.75398 678.51334 728.5208 676.84375 735.5 C 675.95499 739.41102 676.12805 743.17354 676.65625 747.09375 C 676.74319 747.40856 676.86916 747.69777 676.96875 748 C 676.52343 748.36731 676.07405 748.71255 675.59375 749.09375 C 670.58669 754.22361 665.07597 758.95221 661.40625 765.0625 C 657.98224 768.95528 656.79145 775.20535 655.40625 780.0625 C 655.2626 780.90806 655.17126 781.73797 655.09375 782.59375 C 649.8835 782.96621 644.62777 782.87146 639.46875 783.84375 C 635.56462 784.53271 632.0128 786.6759 628.53125 789 L 622.53125 795.4375 C 625.97607 793.00776 629.52281 790.76565 633.40625 789.96875 C 639.26474 788.76536 645.21139 788.7314 651.125 788.28125 C 652.35836 788.26976 653.60825 788.24556 654.84375 788.25 C 654.84003 788.40659 654.81634 788.56232 654.8125 788.71875 C 654.55299 791.19672 655.30873 793.18268 656 795.34375 C 656.83365 797.38997 658.11847 798.37459 659.625 799.34375 C 661.09709 800.08094 662.63732 800.14753 664.1875 800.21875 C 669.26516 800.59538 669.3314 799.11144 675.34375 794.5 C 676.12458 792.20346 675.99662 789.97387 675.71875 787.5625 C 675.05505 784.64589 673.67862 783.925 671.6875 782.9375 C 668.45971 782.35662 665.19867 782.29356 661.9375 782.34375 C 661.99928 780.03433 662.13138 777.7163 662.5625 775.46875 C 663.21931 772.65089 665.09458 768.82277 666.65625 766.625 C 669.20204 762.82554 674.96145 757.26163 679.21875 752.75 C 680.48024 754.70163 681.99017 756.37702 683.53125 758 C 686.32155 761.1233 689.50188 762.95982 692.9375 764.3125 C 698.33668 765.34595 703.75165 760.99336 705.125 753.90625 C 705.07907 749.0904 703.10202 746.54029 700.5 743.75 C 697.42263 741.67852 693.98575 741.28994 690.59375 741.21875 C 687.88208 741.05633 685.78146 741.65596 683.8125 742.75 C 683.7427 742.52184 683.65599 742.29759 683.59375 742.0625 C 683.15281 738.33062 683.00463 734.75992 683.875 731.0625 C 685.46098 724.86821 688.28073 719.4255 690.90625 713.9375 C 691.22142 714.03134 691.52582 714.13349 691.84375 714.21875 C 696.29445 715.15115 700.80898 715.7729 705.3125 715.59375 C 712.04827 712.56001 715.54313 710.41086 715.4375 701.96875 C 714.16292 697.58235 711.70289 695.58585 708.6875 693.71875 C 702.80375 691.93433 701.13556 695.05715 695.1875 699.625 C 693.53745 701.46038 692.0678 703.5253 690.71875 705.71875 C 688.35474 704.56503 686.06885 703.15492 683.8125 701.53125 C 680.66394 699.5034 677.577 697.39496 675.46875 693.5 C 674.16891 690.53975 673.05511 687.64651 673 684.09375 C 672.95152 683.08548 672.91042 682.07355 672.875 681.0625 C 673.39623 681.09037 673.91645 681.10166 674.4375 681.125 C 680.69099 681.79789 681.20995 680.48892 687.8125 675.3125 C 688.98833 672.67377 689.34532 669.61282 689.6875 666.625 C 690.14451 664.07813 689.48216 662.14768 688.84375 659.90625 C 687.75059 657.69008 686.23662 657.37616 684.40625 656.9375 C 679.84991 657.2682 677.68005 660.39024 673.25 663.90625 C 671.64242 665.98692 670.31033 668.38726 668.875 670.65625 C 668.22014 671.50865 667.68792 672.40889 667.28125 673.34375 C 664.57176 672.59674 661.8957 671.71207 659.25 670.625 C 657.27727 669.75461 655.34822 668.76456 653.4375 667.6875 C 651.41884 666.19934 649.42459 664.62531 647.65625 662.625 C 646.22091 660.89341 644.74907 659.20782 643.90625 656.8125 C 643.7724 656.39254 643.63115 656.00124 643.5 655.59375 C 644.57691 655.47117 645.61819 655.10606 646.6875 654.65625 C 650.86951 652.64677 654.50896 649.03691 658.25 645.96875 C 659.64171 644.67809 660.68762 642.95584 661.71875 641.1875 C 662.92903 639.79809 663.36287 638.192 663.875 636.28125 C 664.2769 634.48765 664.0693 632.80647 663.90625 631.03125 C 663.44005 629.56835 662.50829 628.61573 661.65625 627.59375 C 660.54243 626.59935 659.29433 626.68878 658.03125 626.5625 z M 651.59375 632.9375 C 652.70528 632.94669 653.82545 632.75541 654.875 633.4375 C 655.57315 634.28952 656.43586 634.96251 656.8125 636.21875 C 656.84006 637.7804 657.06596 639.3538 656.625 640.90625 C 655.99804 642.54828 655.39699 644.08803 654.375 645.40625 C 653.69487 646.41725 653.04785 647.44777 652.3125 648.375 C 651.04694 648.99271 649.80651 649.46345 648.40625 649.25 C 646.96172 649.25 645.53825 649.22245 644.09375 649.25 C 643.65774 649.25226 643.21826 649.24788 642.78125 649.25 C 642.78082 647.36247 642.78858 645.46453 642.96875 643.59375 C 643.38213 641.22601 643.91759 639.27024 645.34375 637.59375 C 646.19916 636.54731 647.61346 635.06047 648.75 633.875 C 649.65408 633.38586 650.59819 633.04515 651.59375 632.9375 z M 678.1875 663.1875 C 679.71023 663.37727 680.96176 663.5183 681.9375 665.34375 C 682.48408 667.34404 682.95384 669.10601 682.53125 671.375 C 682.38459 672.63589 682.23887 673.8787 682 675.09375 C 681.58116 675.08836 681.16759 675.06947 680.75 675 C 678.17138 674.93272 675.57044 674.82459 673 674.5 C 673.03456 674.16414 673.07882 673.83509 673.125 673.5 C 673.73358 670.81764 674.60007 668.55909 676.125 666.53125 C 676.81974 665.43557 677.47675 664.27416 678.1875 663.1875 z M 700.5 699.40625 C 701.05272 699.40103 701.6068 699.45907 702.15625 699.625 C 704.99248 701.1522 707.3549 702.74812 708.46875 706.875 C 708.43173 707.89726 708.31328 708.77868 708.1875 709.5625 C 704.78983 709.55023 701.3882 709.01624 698.03125 708.4375 C 696.80899 708.12018 695.59215 707.71996 694.40625 707.28125 C 695.91621 704.55008 697.51405 701.90285 699.3125 699.53125 C 699.69159 699.47092 700.09085 699.41011 700.5 699.40625 z M 707 713.4375 C 706.73935 713.87833 706.68419 713.86452 707 713.4375 z M 689.71875 747 C 691.4837 747.02838 692.01015 748.328 693.90625 749.4375 C 696.21719 751.77455 697.96769 753.84841 698.0625 757.84375 C 695.14109 756.75553 692.4328 755.19472 690.03125 752.5 C 688.68709 751.09314 687.36714 749.5936 686.25 747.90625 C 687.81088 747.26499 688.91885 746.98714 689.71875 747 z M 662.53125 788.625 C 663.41661 788.72096 664.30614 788.81888 665.1875 788.96875 C 666.91909 789.6669 668.06375 790.13097 668.65625 792.625 C 668.69532 793.04687 668.72432 793.44288 668.75 793.84375 C 667.9077 793.78585 667.069 793.6661 666.25 793.34375 C 664.90422 792.47336 663.70365 791.91625 662.96875 789.96875 C 662.81877 789.51249 662.66908 789.0682 662.53125 788.625 z "
+   transform="matrix(0.4354368,0,0,0.4354368,82.400777,-58.916687)"
+   id="path54" />
+</g>
+</g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/dyncall_watermark.eps	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,635 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: 0.46
+%%Pages: 1
+%%Orientation: Portrait
+%%BoundingBox: 0 115 298 598
+%%HiResBoundingBox: 0.59680556 115.88804 297.2909 597.45151
+%%EndComments
+%%Page: 1 1
+0 842 translate
+0.8 -0.8 scale
+0 0 0 setrgbcolor
+[] 0 setdash
+1 setlinewidth
+0 setlinejoin
+0 setlinecap
+gsave [1 0 0 1 0 0] concat
+gsave [2.2965446 0 0 2.2965446 -189.23706 135.3048] concat
+gsave [0.7802343 0 0 0.7802343 -63.142369 43.042016] concat
+gsave
+0.90196079 0.90196079 0.90196079 setrgbcolor
+newpath
+354.973 349.148 moveto
+345.719 361.668 345.527 339.457 333.348 349.156 curveto
+321.172 358.855 342.773 364.012 328.5 370.227 curveto
+314.227 376.441 325.164 357.113 309.77 359.422 curveto
+294.375 361.734 310.504 377 295.035 375.246 curveto
+279.566 373.492 298.703 362.223 284.215 356.527 curveto
+269.727 350.828 276.063 372.113 263.543 362.859 curveto
+251.023 353.609 273.23 353.418 263.535 341.238 curveto
+253.836 329.062 248.68 350.664 242.465 336.391 curveto
+236.246 322.117 255.574 333.055 253.266 317.66 curveto
+250.957 302.266 235.688 318.395 237.441 302.926 curveto
+239.195 287.457 250.465 306.594 256.164 292.105 curveto
+261.863 277.617 240.574 283.953 249.828 271.434 curveto
+259.082 258.914 259.273 281.121 271.449 271.422 curveto
+283.629 261.727 262.027 256.566 276.301 250.352 curveto
+290.574 244.137 279.633 263.465 295.031 261.156 curveto
+310.426 258.848 294.297 243.578 309.766 245.332 curveto
+325.234 247.086 306.098 258.355 320.586 264.055 curveto
+335.07 269.75 328.738 248.465 341.258 257.719 curveto
+353.777 266.973 331.57 267.16 341.266 279.34 curveto
+350.965 291.52 356.121 269.918 362.336 284.191 curveto
+368.551 298.465 349.223 287.523 351.535 302.918 curveto
+353.844 318.316 369.109 302.187 367.355 317.656 curveto
+365.602 333.125 354.336 313.988 348.637 328.473 curveto
+342.938 342.961 364.227 336.629 354.973 349.148 curveto
+closepath
+fill
+grestore
+0.90196079 0.90196079 0.90196079 setrgbcolor
+[] 0 setdash
+0.80000001 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+354.973 349.148 moveto
+345.719 361.668 345.527 339.457 333.348 349.156 curveto
+321.172 358.855 342.773 364.012 328.5 370.227 curveto
+314.227 376.441 325.164 357.113 309.77 359.422 curveto
+294.375 361.734 310.504 377 295.035 375.246 curveto
+279.566 373.492 298.703 362.223 284.215 356.527 curveto
+269.727 350.828 276.063 372.113 263.543 362.859 curveto
+251.023 353.609 273.23 353.418 263.535 341.238 curveto
+253.836 329.062 248.68 350.664 242.465 336.391 curveto
+236.246 322.117 255.574 333.055 253.266 317.66 curveto
+250.957 302.266 235.688 318.395 237.441 302.926 curveto
+239.195 287.457 250.465 306.594 256.164 292.105 curveto
+261.863 277.617 240.574 283.953 249.828 271.434 curveto
+259.082 258.914 259.273 281.121 271.449 271.422 curveto
+283.629 261.727 262.027 256.566 276.301 250.352 curveto
+290.574 244.137 279.633 263.465 295.031 261.156 curveto
+310.426 258.848 294.297 243.578 309.766 245.332 curveto
+325.234 247.086 306.098 258.355 320.586 264.055 curveto
+335.07 269.75 328.738 248.465 341.258 257.719 curveto
+353.777 266.973 331.57 267.16 341.266 279.34 curveto
+350.965 291.52 356.121 269.918 362.336 284.191 curveto
+368.551 298.465 349.223 287.523 351.535 302.918 curveto
+353.844 318.316 369.109 302.187 367.355 317.656 curveto
+365.602 333.125 354.336 313.988 348.637 328.473 curveto
+342.938 342.961 364.227 336.629 354.973 349.148 curveto
+closepath
+stroke
+grestore
+gsave [0.7802343 0 0 0.7802343 -63.142369 43.042016] concat
+gsave
+1 1 1 setrgbcolor
+newpath
+307.188 310.25 moveto
+307.188 312.992 304.969 315.223 302.238 315.223 curveto
+299.504 315.223 297.289 312.992 297.289 310.25 curveto
+297.289 307.504 299.504 305.277 302.238 305.277 curveto
+304.969 305.277 307.188 307.504 307.188 310.25 curveto
+closepath
+fill
+grestore
+0.90196079 0.90196079 0.90196079 setrgbcolor
+[] 0 setdash
+0.80376798 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+307.188 310.25 moveto
+307.188 312.992 304.969 315.223 302.238 315.223 curveto
+299.504 315.223 297.289 312.992 297.289 310.25 curveto
+297.289 307.504 299.504 305.277 302.238 305.277 curveto
+304.969 305.277 307.188 307.504 307.188 310.25 curveto
+closepath
+stroke
+grestore
+gsave [0.7802343 0 0 0.7802343 -63.142369 43.042016] concat
+gsave [0.4572086 0 0 0.4572086 176.55441 -80.651816] concat
+gsave
+0.90196079 0.90196079 0.90196079 setrgbcolor
+newpath
+78.875 389 moveto
+55.84276 389.43987 79.380834 426.65068 49.3125 426.5625 curveto
+21.06764 426.48738 40.280391 393.75196 23.625 389.3125 curveto
+23.625 827.3125 lineto
+38.095155 821.66378 20.746118 790.57562 48.25 790.65625 curveto
+80.322887 790.7503 51.209558 832.88991 82.90625 827.96875 curveto
+114.59419 823.03883 74.004704 791.73108 104.53125 781.90625 curveto
+135.06655 772.08141 120.3785 821.16884 149 806.6875 curveto
+177.61276 792.21489 129.36717 774.96666 155.375 756.1875 curveto
+181.37407 737.40833 182.56796 788.65547 205.3125 766.03125 curveto
+228.05485 743.41575 176.82429 741.91877 195.75 716.03125 curveto
+214.67353 690.13497 231.67805 738.47369 246.3125 709.9375 curveto
+260.95571 681.40348 211.75457 695.81779 221.75 665.34375 curveto
+231.74762 634.86751 262.83479 675.59921 267.9375 643.9375 curveto
+273.04458 612.27362 230.71846 641.19791 230.8125 609.125 curveto
+230.8978 577.05211 273.08615 606.1967 268.15625 574.5 curveto
+263.23508 542.81206 231.88733 583.3703 222.0625 552.84375 curveto
+212.24641 522.30845 261.35636 536.98777 246.875 508.375 curveto
+232.39365 479.75349 215.15418 528.00781 196.375 502 curveto
+177.59583 476.00093 228.80299 474.80703 206.1875 452.0625 curveto
+183.572 429.32015 182.08378 480.55071 156.1875 461.625 curveto
+130.29122 442.70147 178.66121 425.73695 150.125 411.09375 curveto
+121.58879 396.45054 136.0053 445.62043 105.53125 435.625 curveto
+75.055008 425.62738 115.7867 394.538 84.125 389.4375 curveto
+82.146007 389.11817 80.410483 388.97068 78.875 389 curveto
+closepath
+fill
+grestore
+0.90196079 0.90196079 0.90196079 setrgbcolor
+[] 0 setdash
+1.7497483 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+78.875 389 moveto
+55.84276 389.43987 79.380834 426.65068 49.3125 426.5625 curveto
+21.06764 426.48738 40.280391 393.75196 23.625 389.3125 curveto
+23.625 827.3125 lineto
+38.095155 821.66378 20.746118 790.57562 48.25 790.65625 curveto
+80.322887 790.7503 51.209558 832.88991 82.90625 827.96875 curveto
+114.59419 823.03883 74.004704 791.73108 104.53125 781.90625 curveto
+135.06655 772.08141 120.3785 821.16884 149 806.6875 curveto
+177.61276 792.21489 129.36717 774.96666 155.375 756.1875 curveto
+181.37407 737.40833 182.56796 788.65547 205.3125 766.03125 curveto
+228.05485 743.41575 176.82429 741.91877 195.75 716.03125 curveto
+214.67353 690.13497 231.67805 738.47369 246.3125 709.9375 curveto
+260.95571 681.40348 211.75457 695.81779 221.75 665.34375 curveto
+231.74762 634.86751 262.83479 675.59921 267.9375 643.9375 curveto
+273.04458 612.27362 230.71846 641.19791 230.8125 609.125 curveto
+230.8978 577.05211 273.08615 606.1967 268.15625 574.5 curveto
+263.23508 542.81206 231.88733 583.3703 222.0625 552.84375 curveto
+212.24641 522.30845 261.35636 536.98777 246.875 508.375 curveto
+232.39365 479.75349 215.15418 528.00781 196.375 502 curveto
+177.59583 476.00093 228.80299 474.80703 206.1875 452.0625 curveto
+183.572 429.32015 182.08378 480.55071 156.1875 461.625 curveto
+130.29122 442.70147 178.66121 425.73695 150.125 411.09375 curveto
+121.58879 396.45054 136.0053 445.62043 105.53125 435.625 curveto
+75.055008 425.62738 115.7867 394.538 84.125 389.4375 curveto
+82.146007 389.11817 80.410483 388.97068 78.875 389 curveto
+closepath
+stroke
+grestore
+grestore
+gsave [0.7802343 0 0 0.7802343 -63.142369 43.042016] concat
+gsave [0.4572086 0 0 0.4572086 176.55441 -80.651816] concat
+gsave
+1 1 1 setrgbcolor
+newpath
+48.78125 444.90625 moveto
+40.23156 444.90625 31.823476 445.54431 23.625 446.8125 curveto
+23.625 772.875 lineto
+31.823476 774.14305 40.23156 774.78125 48.78125 774.78125 curveto
+139.40509 774.78125 212.9375 700.89409 212.9375 609.84375 curveto
+212.9375 518.79341 139.40509 444.90625 48.78125 444.90625 curveto
+closepath
+fill
+grestore
+1 1 1 setrgbcolor
+[] 0 setdash
+1.7579896 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+48.78125 444.90625 moveto
+40.23156 444.90625 31.823476 445.54431 23.625 446.8125 curveto
+23.625 772.875 lineto
+31.823476 774.14305 40.23156 774.78125 48.78125 774.78125 curveto
+139.40509 774.78125 212.9375 700.89409 212.9375 609.84375 curveto
+212.9375 518.79341 139.40509 444.90625 48.78125 444.90625 curveto
+closepath
+stroke
+grestore
+grestore
+gsave [0.7802343 0 0 0.7802343 -63.142369 43.042016] concat
+gsave
+0.90196079 0.90196079 0.90196079 setrgbcolor
+newpath
+203.785 198.195 moveto
+203.785 200.941 201.566 203.168 198.836 203.168 curveto
+196.105 203.168 193.887 200.941 193.887 198.195 curveto
+193.887 195.449 196.105 193.223 198.836 193.223 curveto
+201.566 193.223 203.785 195.449 203.785 198.195 curveto
+closepath
+fill
+grestore
+0.90196079 0.90196079 0.90196079 setrgbcolor
+[] 0 setdash
+0.80376798 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+203.785 198.195 moveto
+203.785 200.941 201.566 203.168 198.836 203.168 curveto
+196.105 203.168 193.887 200.941 193.887 198.195 curveto
+193.887 195.449 196.105 193.223 198.836 193.223 curveto
+201.566 193.223 203.785 195.449 203.785 198.195 curveto
+closepath
+stroke
+grestore
+gsave [0.7802343 0 0 0.7802343 -63.142369 43.042016] concat
+gsave [0.4354368 0 0 0.4354368 82.400777 -58.916687] concat
+gsave
+0.90196079 0.90196079 0.90196079 setrgbcolor
+newpath
+372.4375 226.8125 moveto
+350.03614 226.99774 326.37254 235.86686 301.53125 253.375 curveto
+368.53125 345.625 lineto
+371.39273 344.04727 374.33807 342.1941 377.40625 339.96875 curveto
+419.75 309.1875 lineto
+431.09721 316.83039 443.82523 328.92944 457.9375 345.375 curveto
+557.875 482.9375 lineto
+569.15331 501.44535 576.62605 517.13205 580.25 530.09375 curveto
+537.90625 560.875 lineto
+534.83804 563.09806 532.16736 565.31878 529.78125 567.5625 curveto
+596.78125 659.75 lineto
+626.75298 637.33253 643.69738 612.67138 647.59375 585.75 curveto
+651.58512 558.10191 635.79682 513.598 600.21875 452.15625 curveto
+582.8125 425.21875 lineto
+552.28125 381.71875 lineto
+520.53125 339.46875 lineto
+500.28125 314.625 lineto
+452.84383 261.79529 415.32322 232.90591 387.71875 228.0625 curveto
+382.68286 227.17934 377.60704 226.76975 372.4375 226.8125 curveto
+closepath
+298.59375 255.53125 moveto
+292.22542 260.26672 288.42952 265.62733 287.28125 271.59375 curveto
+286.09854 277.70256 287.25876 283.07104 290.6875 287.78125 curveto
+328.125 339.34375 lineto
+337.38467 352.07348 349.72995 354.71426 365.25 347.3125 curveto
+298.59375 255.53125 lineto
+closepath
+527.15625 570.15625 moveto
+515.3428 582.66092 514.16594 595.3595 523.53125 608.25 curveto
+560.71875 659.46875 lineto
+564.28758 664.37648 569.05433 667.18005 575.15625 667.84375 curveto
+581.11347 668.50094 587.37058 666.49603 593.84375 661.90625 curveto
+527.15625 570.15625 lineto
+closepath
+fill
+grestore
+0.90196079 0.90196079 0.90196079 setrgbcolor
+[] 0 setdash
+0 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+372.4375 226.8125 moveto
+350.03614 226.99774 326.37254 235.86686 301.53125 253.375 curveto
+368.53125 345.625 lineto
+371.39273 344.04727 374.33807 342.1941 377.40625 339.96875 curveto
+419.75 309.1875 lineto
+431.09721 316.83039 443.82523 328.92944 457.9375 345.375 curveto
+557.875 482.9375 lineto
+569.15331 501.44535 576.62605 517.13205 580.25 530.09375 curveto
+537.90625 560.875 lineto
+534.83804 563.09806 532.16736 565.31878 529.78125 567.5625 curveto
+596.78125 659.75 lineto
+626.75298 637.33253 643.69738 612.67138 647.59375 585.75 curveto
+651.58512 558.10191 635.79682 513.598 600.21875 452.15625 curveto
+582.8125 425.21875 lineto
+552.28125 381.71875 lineto
+520.53125 339.46875 lineto
+500.28125 314.625 lineto
+452.84383 261.79529 415.32322 232.90591 387.71875 228.0625 curveto
+382.68286 227.17934 377.60704 226.76975 372.4375 226.8125 curveto
+closepath
+298.59375 255.53125 moveto
+292.22542 260.26672 288.42952 265.62733 287.28125 271.59375 curveto
+286.09854 277.70256 287.25876 283.07104 290.6875 287.78125 curveto
+328.125 339.34375 lineto
+337.38467 352.07348 349.72995 354.71426 365.25 347.3125 curveto
+298.59375 255.53125 lineto
+closepath
+527.15625 570.15625 moveto
+515.3428 582.66092 514.16594 595.3595 523.53125 608.25 curveto
+560.71875 659.46875 lineto
+564.28758 664.37648 569.05433 667.18005 575.15625 667.84375 curveto
+581.11347 668.50094 587.37058 666.49603 593.84375 661.90625 curveto
+527.15625 570.15625 lineto
+closepath
+stroke
+grestore
+grestore
+gsave [0.7802343 0 0 0.7802343 -63.142369 43.042016] concat
+gsave [0.4354368 0 0 0.4354368 82.400777 -58.916687] concat
+gsave
+0.90196079 0.90196079 0.90196079 setrgbcolor
+newpath
+658.03125 626.5625 moveto
+655.25013 626.68881 652.89528 628.64662 650.5 630.34375 curveto
+645.86328 633.50839 641.64235 636.86247 638 641.6875 curveto
+636.50265 643.53622 636.13403 645.73808 635.8125 648.3125 curveto
+635.79309 648.61363 635.79586 648.91743 635.78125 649.21875 curveto
+635.23223 649.19257 634.70569 649.15791 634.15625 649.09375 curveto
+632.90004 648.82505 631.6188 648.56494 630.40625 648 curveto
+629.26716 647.40749 628.11703 646.83331 626.96875 646.25 curveto
+626.10755 645.68505 625.17836 645.1645 624.46875 644.3125 curveto
+623.94054 642.88405 623.48803 641.40243 622.5625 640.34375 curveto
+621.71048 638.89922 620.89835 637.66941 620.78125 635.6875 curveto
+620.55619 633.53334 620.32635 631.3761 620.46875 629.1875 curveto
+613.25 634.125 lineto
+613.24081 636.35035 613.4845 638.53016 613.71875 640.71875 curveto
+613.85195 642.89817 614.81159 644.35797 615.71875 646 curveto
+616.57995 646.98751 616.99334 648.35779 617.46875 649.6875 curveto
+618.15771 650.96897 619.23721 651.5114 620.25 652.21875 curveto
+621.40746 652.85489 622.58337 653.44241 623.75 654.0625 curveto
+624.99702 654.6619 626.29163 654.97031 627.59375 655.3125 curveto
+629.14392 655.59038 630.71963 655.55329 632.28125 655.5625 curveto
+633.40247 655.5625 634.53435 655.59144 635.65625 655.59375 curveto
+635.65602 655.66675 635.65652 655.73949 635.65625 655.8125 curveto
+635.50468 658.17335 636.22468 660.11922 636.96875 662.15625 curveto
+637.87359 664.67786 639.42176 666.43805 640.9375 668.25 curveto
+642.75866 670.26866 644.74418 671.94434 646.78125 673.53125 curveto
+648.69198 674.7622 650.70926 675.69811 652.71875 676.59375 curveto
+656.14519 677.86833 659.603 678.9573 663.09375 679.84375 curveto
+664.02122 680.06128 664.94201 680.22593 665.875 680.375 curveto
+665.76219 683.23707 665.89639 686.10725 666.03125 688.96875 curveto
+666.10244 692.71901 667.28887 695.7388 668.6875 698.84375 curveto
+670.90367 702.89715 674.1061 705.11973 677.40625 707.21875 curveto
+680.51905 709.33564 683.68848 711.12476 686.96875 712.5 curveto
+686.27445 713.84958 685.59527 715.21275 684.90625 716.5625 curveto
+682.09758 722.75398 678.51334 728.5208 676.84375 735.5 curveto
+675.95499 739.41102 676.12805 743.17354 676.65625 747.09375 curveto
+676.74319 747.40856 676.86916 747.69777 676.96875 748 curveto
+676.52343 748.36731 676.07405 748.71255 675.59375 749.09375 curveto
+670.58669 754.22361 665.07597 758.95221 661.40625 765.0625 curveto
+657.98224 768.95528 656.79145 775.20535 655.40625 780.0625 curveto
+655.2626 780.90806 655.17126 781.73797 655.09375 782.59375 curveto
+649.8835 782.96621 644.62777 782.87146 639.46875 783.84375 curveto
+635.56462 784.53271 632.0128 786.6759 628.53125 789 curveto
+622.53125 795.4375 lineto
+625.97607 793.00776 629.52281 790.76565 633.40625 789.96875 curveto
+639.26474 788.76536 645.21139 788.7314 651.125 788.28125 curveto
+652.35836 788.26976 653.60825 788.24556 654.84375 788.25 curveto
+654.84003 788.40659 654.81634 788.56232 654.8125 788.71875 curveto
+654.55299 791.19672 655.30873 793.18268 656 795.34375 curveto
+656.83365 797.38997 658.11847 798.37459 659.625 799.34375 curveto
+661.09709 800.08094 662.63732 800.14753 664.1875 800.21875 curveto
+669.26516 800.59538 669.3314 799.11144 675.34375 794.5 curveto
+676.12458 792.20346 675.99662 789.97387 675.71875 787.5625 curveto
+675.05505 784.64589 673.67862 783.925 671.6875 782.9375 curveto
+668.45971 782.35662 665.19867 782.29356 661.9375 782.34375 curveto
+661.99928 780.03433 662.13138 777.7163 662.5625 775.46875 curveto
+663.21931 772.65089 665.09458 768.82277 666.65625 766.625 curveto
+669.20204 762.82554 674.96145 757.26163 679.21875 752.75 curveto
+680.48024 754.70163 681.99017 756.37702 683.53125 758 curveto
+686.32155 761.1233 689.50188 762.95982 692.9375 764.3125 curveto
+698.33668 765.34595 703.75165 760.99336 705.125 753.90625 curveto
+705.07907 749.0904 703.10202 746.54029 700.5 743.75 curveto
+697.42263 741.67852 693.98575 741.28994 690.59375 741.21875 curveto
+687.88208 741.05633 685.78146 741.65596 683.8125 742.75 curveto
+683.7427 742.52184 683.65599 742.29759 683.59375 742.0625 curveto
+683.15281 738.33062 683.00463 734.75992 683.875 731.0625 curveto
+685.46098 724.86821 688.28073 719.4255 690.90625 713.9375 curveto
+691.22142 714.03134 691.52582 714.13349 691.84375 714.21875 curveto
+696.29445 715.15115 700.80898 715.7729 705.3125 715.59375 curveto
+712.04827 712.56001 715.54313 710.41086 715.4375 701.96875 curveto
+714.16292 697.58235 711.70289 695.58585 708.6875 693.71875 curveto
+702.80375 691.93433 701.13556 695.05715 695.1875 699.625 curveto
+693.53745 701.46038 692.0678 703.5253 690.71875 705.71875 curveto
+688.35474 704.56503 686.06885 703.15492 683.8125 701.53125 curveto
+680.66394 699.5034 677.577 697.39496 675.46875 693.5 curveto
+674.16891 690.53975 673.05511 687.64651 673 684.09375 curveto
+672.95152 683.08548 672.91042 682.07355 672.875 681.0625 curveto
+673.39623 681.09037 673.91645 681.10166 674.4375 681.125 curveto
+680.69099 681.79789 681.20995 680.48892 687.8125 675.3125 curveto
+688.98833 672.67377 689.34532 669.61282 689.6875 666.625 curveto
+690.14451 664.07813 689.48216 662.14768 688.84375 659.90625 curveto
+687.75059 657.69008 686.23662 657.37616 684.40625 656.9375 curveto
+679.84991 657.2682 677.68005 660.39024 673.25 663.90625 curveto
+671.64242 665.98692 670.31033 668.38726 668.875 670.65625 curveto
+668.22014 671.50865 667.68792 672.40889 667.28125 673.34375 curveto
+664.57176 672.59674 661.8957 671.71207 659.25 670.625 curveto
+657.27727 669.75461 655.34822 668.76456 653.4375 667.6875 curveto
+651.41884 666.19934 649.42459 664.62531 647.65625 662.625 curveto
+646.22091 660.89341 644.74907 659.20782 643.90625 656.8125 curveto
+643.7724 656.39254 643.63115 656.00124 643.5 655.59375 curveto
+644.57691 655.47117 645.61819 655.10606 646.6875 654.65625 curveto
+650.86951 652.64677 654.50896 649.03691 658.25 645.96875 curveto
+659.64171 644.67809 660.68762 642.95584 661.71875 641.1875 curveto
+662.92903 639.79809 663.36287 638.192 663.875 636.28125 curveto
+664.2769 634.48765 664.0693 632.80647 663.90625 631.03125 curveto
+663.44005 629.56835 662.50829 628.61573 661.65625 627.59375 curveto
+660.54243 626.59935 659.29433 626.68878 658.03125 626.5625 curveto
+closepath
+651.59375 632.9375 moveto
+652.70528 632.94669 653.82545 632.75541 654.875 633.4375 curveto
+655.57315 634.28952 656.43586 634.96251 656.8125 636.21875 curveto
+656.84006 637.7804 657.06596 639.3538 656.625 640.90625 curveto
+655.99804 642.54828 655.39699 644.08803 654.375 645.40625 curveto
+653.69487 646.41725 653.04785 647.44777 652.3125 648.375 curveto
+651.04694 648.99271 649.80651 649.46345 648.40625 649.25 curveto
+646.96172 649.25 645.53825 649.22245 644.09375 649.25 curveto
+643.65774 649.25226 643.21826 649.24788 642.78125 649.25 curveto
+642.78082 647.36247 642.78858 645.46453 642.96875 643.59375 curveto
+643.38213 641.22601 643.91759 639.27024 645.34375 637.59375 curveto
+646.19916 636.54731 647.61346 635.06047 648.75 633.875 curveto
+649.65408 633.38586 650.59819 633.04515 651.59375 632.9375 curveto
+closepath
+678.1875 663.1875 moveto
+679.71023 663.37727 680.96176 663.5183 681.9375 665.34375 curveto
+682.48408 667.34404 682.95384 669.10601 682.53125 671.375 curveto
+682.38459 672.63589 682.23887 673.8787 682 675.09375 curveto
+681.58116 675.08836 681.16759 675.06947 680.75 675 curveto
+678.17138 674.93272 675.57044 674.82459 673 674.5 curveto
+673.03456 674.16414 673.07882 673.83509 673.125 673.5 curveto
+673.73358 670.81764 674.60007 668.55909 676.125 666.53125 curveto
+676.81974 665.43557 677.47675 664.27416 678.1875 663.1875 curveto
+closepath
+700.5 699.40625 moveto
+701.05272 699.40103 701.6068 699.45907 702.15625 699.625 curveto
+704.99248 701.1522 707.3549 702.74812 708.46875 706.875 curveto
+708.43173 707.89726 708.31328 708.77868 708.1875 709.5625 curveto
+704.78983 709.55023 701.3882 709.01624 698.03125 708.4375 curveto
+696.80899 708.12018 695.59215 707.71996 694.40625 707.28125 curveto
+695.91621 704.55008 697.51405 701.90285 699.3125 699.53125 curveto
+699.69159 699.47092 700.09085 699.41011 700.5 699.40625 curveto
+closepath
+707 713.4375 moveto
+706.73935 713.87833 706.68419 713.86452 707 713.4375 curveto
+closepath
+689.71875 747 moveto
+691.4837 747.02838 692.01015 748.328 693.90625 749.4375 curveto
+696.21719 751.77455 697.96769 753.84841 698.0625 757.84375 curveto
+695.14109 756.75553 692.4328 755.19472 690.03125 752.5 curveto
+688.68709 751.09314 687.36714 749.5936 686.25 747.90625 curveto
+687.81088 747.26499 688.91885 746.98714 689.71875 747 curveto
+closepath
+662.53125 788.625 moveto
+663.41661 788.72096 664.30614 788.81888 665.1875 788.96875 curveto
+666.91909 789.6669 668.06375 790.13097 668.65625 792.625 curveto
+668.69532 793.04687 668.72432 793.44288 668.75 793.84375 curveto
+667.9077 793.78585 667.069 793.6661 666.25 793.34375 curveto
+664.90422 792.47336 663.70365 791.91625 662.96875 789.96875 curveto
+662.81877 789.51249 662.66908 789.0682 662.53125 788.625 curveto
+closepath
+fill
+grestore
+0.90196079 0.90196079 0.90196079 setrgbcolor
+[] 0 setdash
+0 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+658.03125 626.5625 moveto
+655.25013 626.68881 652.89528 628.64662 650.5 630.34375 curveto
+645.86328 633.50839 641.64235 636.86247 638 641.6875 curveto
+636.50265 643.53622 636.13403 645.73808 635.8125 648.3125 curveto
+635.79309 648.61363 635.79586 648.91743 635.78125 649.21875 curveto
+635.23223 649.19257 634.70569 649.15791 634.15625 649.09375 curveto
+632.90004 648.82505 631.6188 648.56494 630.40625 648 curveto
+629.26716 647.40749 628.11703 646.83331 626.96875 646.25 curveto
+626.10755 645.68505 625.17836 645.1645 624.46875 644.3125 curveto
+623.94054 642.88405 623.48803 641.40243 622.5625 640.34375 curveto
+621.71048 638.89922 620.89835 637.66941 620.78125 635.6875 curveto
+620.55619 633.53334 620.32635 631.3761 620.46875 629.1875 curveto
+613.25 634.125 lineto
+613.24081 636.35035 613.4845 638.53016 613.71875 640.71875 curveto
+613.85195 642.89817 614.81159 644.35797 615.71875 646 curveto
+616.57995 646.98751 616.99334 648.35779 617.46875 649.6875 curveto
+618.15771 650.96897 619.23721 651.5114 620.25 652.21875 curveto
+621.40746 652.85489 622.58337 653.44241 623.75 654.0625 curveto
+624.99702 654.6619 626.29163 654.97031 627.59375 655.3125 curveto
+629.14392 655.59038 630.71963 655.55329 632.28125 655.5625 curveto
+633.40247 655.5625 634.53435 655.59144 635.65625 655.59375 curveto
+635.65602 655.66675 635.65652 655.73949 635.65625 655.8125 curveto
+635.50468 658.17335 636.22468 660.11922 636.96875 662.15625 curveto
+637.87359 664.67786 639.42176 666.43805 640.9375 668.25 curveto
+642.75866 670.26866 644.74418 671.94434 646.78125 673.53125 curveto
+648.69198 674.7622 650.70926 675.69811 652.71875 676.59375 curveto
+656.14519 677.86833 659.603 678.9573 663.09375 679.84375 curveto
+664.02122 680.06128 664.94201 680.22593 665.875 680.375 curveto
+665.76219 683.23707 665.89639 686.10725 666.03125 688.96875 curveto
+666.10244 692.71901 667.28887 695.7388 668.6875 698.84375 curveto
+670.90367 702.89715 674.1061 705.11973 677.40625 707.21875 curveto
+680.51905 709.33564 683.68848 711.12476 686.96875 712.5 curveto
+686.27445 713.84958 685.59527 715.21275 684.90625 716.5625 curveto
+682.09758 722.75398 678.51334 728.5208 676.84375 735.5 curveto
+675.95499 739.41102 676.12805 743.17354 676.65625 747.09375 curveto
+676.74319 747.40856 676.86916 747.69777 676.96875 748 curveto
+676.52343 748.36731 676.07405 748.71255 675.59375 749.09375 curveto
+670.58669 754.22361 665.07597 758.95221 661.40625 765.0625 curveto
+657.98224 768.95528 656.79145 775.20535 655.40625 780.0625 curveto
+655.2626 780.90806 655.17126 781.73797 655.09375 782.59375 curveto
+649.8835 782.96621 644.62777 782.87146 639.46875 783.84375 curveto
+635.56462 784.53271 632.0128 786.6759 628.53125 789 curveto
+622.53125 795.4375 lineto
+625.97607 793.00776 629.52281 790.76565 633.40625 789.96875 curveto
+639.26474 788.76536 645.21139 788.7314 651.125 788.28125 curveto
+652.35836 788.26976 653.60825 788.24556 654.84375 788.25 curveto
+654.84003 788.40659 654.81634 788.56232 654.8125 788.71875 curveto
+654.55299 791.19672 655.30873 793.18268 656 795.34375 curveto
+656.83365 797.38997 658.11847 798.37459 659.625 799.34375 curveto
+661.09709 800.08094 662.63732 800.14753 664.1875 800.21875 curveto
+669.26516 800.59538 669.3314 799.11144 675.34375 794.5 curveto
+676.12458 792.20346 675.99662 789.97387 675.71875 787.5625 curveto
+675.05505 784.64589 673.67862 783.925 671.6875 782.9375 curveto
+668.45971 782.35662 665.19867 782.29356 661.9375 782.34375 curveto
+661.99928 780.03433 662.13138 777.7163 662.5625 775.46875 curveto
+663.21931 772.65089 665.09458 768.82277 666.65625 766.625 curveto
+669.20204 762.82554 674.96145 757.26163 679.21875 752.75 curveto
+680.48024 754.70163 681.99017 756.37702 683.53125 758 curveto
+686.32155 761.1233 689.50188 762.95982 692.9375 764.3125 curveto
+698.33668 765.34595 703.75165 760.99336 705.125 753.90625 curveto
+705.07907 749.0904 703.10202 746.54029 700.5 743.75 curveto
+697.42263 741.67852 693.98575 741.28994 690.59375 741.21875 curveto
+687.88208 741.05633 685.78146 741.65596 683.8125 742.75 curveto
+683.7427 742.52184 683.65599 742.29759 683.59375 742.0625 curveto
+683.15281 738.33062 683.00463 734.75992 683.875 731.0625 curveto
+685.46098 724.86821 688.28073 719.4255 690.90625 713.9375 curveto
+691.22142 714.03134 691.52582 714.13349 691.84375 714.21875 curveto
+696.29445 715.15115 700.80898 715.7729 705.3125 715.59375 curveto
+712.04827 712.56001 715.54313 710.41086 715.4375 701.96875 curveto
+714.16292 697.58235 711.70289 695.58585 708.6875 693.71875 curveto
+702.80375 691.93433 701.13556 695.05715 695.1875 699.625 curveto
+693.53745 701.46038 692.0678 703.5253 690.71875 705.71875 curveto
+688.35474 704.56503 686.06885 703.15492 683.8125 701.53125 curveto
+680.66394 699.5034 677.577 697.39496 675.46875 693.5 curveto
+674.16891 690.53975 673.05511 687.64651 673 684.09375 curveto
+672.95152 683.08548 672.91042 682.07355 672.875 681.0625 curveto
+673.39623 681.09037 673.91645 681.10166 674.4375 681.125 curveto
+680.69099 681.79789 681.20995 680.48892 687.8125 675.3125 curveto
+688.98833 672.67377 689.34532 669.61282 689.6875 666.625 curveto
+690.14451 664.07813 689.48216 662.14768 688.84375 659.90625 curveto
+687.75059 657.69008 686.23662 657.37616 684.40625 656.9375 curveto
+679.84991 657.2682 677.68005 660.39024 673.25 663.90625 curveto
+671.64242 665.98692 670.31033 668.38726 668.875 670.65625 curveto
+668.22014 671.50865 667.68792 672.40889 667.28125 673.34375 curveto
+664.57176 672.59674 661.8957 671.71207 659.25 670.625 curveto
+657.27727 669.75461 655.34822 668.76456 653.4375 667.6875 curveto
+651.41884 666.19934 649.42459 664.62531 647.65625 662.625 curveto
+646.22091 660.89341 644.74907 659.20782 643.90625 656.8125 curveto
+643.7724 656.39254 643.63115 656.00124 643.5 655.59375 curveto
+644.57691 655.47117 645.61819 655.10606 646.6875 654.65625 curveto
+650.86951 652.64677 654.50896 649.03691 658.25 645.96875 curveto
+659.64171 644.67809 660.68762 642.95584 661.71875 641.1875 curveto
+662.92903 639.79809 663.36287 638.192 663.875 636.28125 curveto
+664.2769 634.48765 664.0693 632.80647 663.90625 631.03125 curveto
+663.44005 629.56835 662.50829 628.61573 661.65625 627.59375 curveto
+660.54243 626.59935 659.29433 626.68878 658.03125 626.5625 curveto
+closepath
+651.59375 632.9375 moveto
+652.70528 632.94669 653.82545 632.75541 654.875 633.4375 curveto
+655.57315 634.28952 656.43586 634.96251 656.8125 636.21875 curveto
+656.84006 637.7804 657.06596 639.3538 656.625 640.90625 curveto
+655.99804 642.54828 655.39699 644.08803 654.375 645.40625 curveto
+653.69487 646.41725 653.04785 647.44777 652.3125 648.375 curveto
+651.04694 648.99271 649.80651 649.46345 648.40625 649.25 curveto
+646.96172 649.25 645.53825 649.22245 644.09375 649.25 curveto
+643.65774 649.25226 643.21826 649.24788 642.78125 649.25 curveto
+642.78082 647.36247 642.78858 645.46453 642.96875 643.59375 curveto
+643.38213 641.22601 643.91759 639.27024 645.34375 637.59375 curveto
+646.19916 636.54731 647.61346 635.06047 648.75 633.875 curveto
+649.65408 633.38586 650.59819 633.04515 651.59375 632.9375 curveto
+closepath
+678.1875 663.1875 moveto
+679.71023 663.37727 680.96176 663.5183 681.9375 665.34375 curveto
+682.48408 667.34404 682.95384 669.10601 682.53125 671.375 curveto
+682.38459 672.63589 682.23887 673.8787 682 675.09375 curveto
+681.58116 675.08836 681.16759 675.06947 680.75 675 curveto
+678.17138 674.93272 675.57044 674.82459 673 674.5 curveto
+673.03456 674.16414 673.07882 673.83509 673.125 673.5 curveto
+673.73358 670.81764 674.60007 668.55909 676.125 666.53125 curveto
+676.81974 665.43557 677.47675 664.27416 678.1875 663.1875 curveto
+closepath
+700.5 699.40625 moveto
+701.05272 699.40103 701.6068 699.45907 702.15625 699.625 curveto
+704.99248 701.1522 707.3549 702.74812 708.46875 706.875 curveto
+708.43173 707.89726 708.31328 708.77868 708.1875 709.5625 curveto
+704.78983 709.55023 701.3882 709.01624 698.03125 708.4375 curveto
+696.80899 708.12018 695.59215 707.71996 694.40625 707.28125 curveto
+695.91621 704.55008 697.51405 701.90285 699.3125 699.53125 curveto
+699.69159 699.47092 700.09085 699.41011 700.5 699.40625 curveto
+closepath
+707 713.4375 moveto
+706.73935 713.87833 706.68419 713.86452 707 713.4375 curveto
+closepath
+689.71875 747 moveto
+691.4837 747.02838 692.01015 748.328 693.90625 749.4375 curveto
+696.21719 751.77455 697.96769 753.84841 698.0625 757.84375 curveto
+695.14109 756.75553 692.4328 755.19472 690.03125 752.5 curveto
+688.68709 751.09314 687.36714 749.5936 686.25 747.90625 curveto
+687.81088 747.26499 688.91885 746.98714 689.71875 747 curveto
+closepath
+662.53125 788.625 moveto
+663.41661 788.72096 664.30614 788.81888 665.1875 788.96875 curveto
+666.91909 789.6669 668.06375 790.13097 668.65625 792.625 curveto
+668.69532 793.04687 668.72432 793.44288 668.75 793.84375 curveto
+667.9077 793.78585 667.069 793.6661 666.25 793.34375 curveto
+664.90422 792.47336 663.70365 791.91625 662.96875 789.96875 curveto
+662.81877 789.51249 662.66908 789.0682 662.53125 788.625 curveto
+closepath
+stroke
+grestore
+grestore
+gsave [0.7802343 0 0 0.7802343 -63.142369 43.042016] concat
+grestore
+grestore
+grestore
+showpage
+%%EOF
Binary file doc/manual/dyncall_watermark.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/dyncall_watermark.svg	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.0"
+   width="744.09448"
+   height="1052.3622"
+   id="svg2">
+  <defs
+     id="defs57" />
+  <title
+     id="title4">generated by pstoedit version:3.45 from dyncall_logo.eps</title>
+  <g
+     transform="matrix(2.2965446,0,0,2.2965446,-189.23706,135.3048)"
+     id="g6"
+     xml:space="preserve"
+     style="fill:#000000">
+
+<g
+   transform="matrix(0.7802343,0,0,0.7802343,-63.142369,43.042016)"
+   id="g20"
+   style="fill:#e6e6e6;stroke:#e6e6e6;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 354.973,349.148 C 345.719,361.668 345.527,339.457 333.348,349.156 C 321.172,358.855 342.773,364.012 328.5,370.227 C 314.227,376.441 325.164,357.113 309.77,359.422 C 294.375,361.734 310.504,377 295.035,375.246 C 279.566,373.492 298.703,362.223 284.215,356.527 C 269.727,350.828 276.063,372.113 263.543,362.859 C 251.023,353.609 273.23,353.418 263.535,341.238 C 253.836,329.062 248.68,350.664 242.465,336.391 C 236.246,322.117 255.574,333.055 253.266,317.66 C 250.957,302.266 235.688,318.395 237.441,302.926 C 239.195,287.457 250.465,306.594 256.164,292.105 C 261.863,277.617 240.574,283.953 249.828,271.434 C 259.082,258.914 259.273,281.121 271.449,271.422 C 283.629,261.727 262.027,256.566 276.301,250.352 C 290.574,244.137 279.633,263.465 295.031,261.156 C 310.426,258.848 294.297,243.578 309.766,245.332 C 325.234,247.086 306.098,258.355 320.586,264.055 C 335.07,269.75 328.738,248.465 341.258,257.719 C 353.777,266.973 331.57,267.16 341.266,279.34 C 350.965,291.52 356.121,269.918 362.336,284.191 C 368.551,298.465 349.223,287.523 351.535,302.918 C 353.844,318.316 369.109,302.187 367.355,317.656 C 365.602,333.125 354.336,313.988 348.637,328.473 C 342.938,342.961 364.227,336.629 354.973,349.148 z"
+   id="path22"
+   style="fill:#e6e6e6;stroke:#e6e6e6" />
+</g><g
+   transform="matrix(0.7802343,0,0,0.7802343,-63.142369,43.042016)"
+   id="g28"
+   style="fill:#000000;stroke:#e6e6e6;stroke-width:0.80376798;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 307.188,310.25 C 307.188,312.992 304.969,315.223 302.238,315.223 C 299.504,315.223 297.289,312.992 297.289,310.25 C 297.289,307.504 299.504,305.277 302.238,305.277 C 304.969,305.277 307.188,307.504 307.188,310.25 z"
+   id="path30"
+   style="fill:#ffffff;stroke:#e6e6e6" />
+</g><g
+   transform="matrix(0.7802343,0,0,0.7802343,-63.142369,43.042016)"
+   id="g12"
+   style="fill:#e6e6e6;stroke:#e6e6e6;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1">
+	<path
+   d="M 78.875,389 C 55.84276,389.43987 79.380834,426.65068 49.3125,426.5625 C 21.06764,426.48738 40.280391,393.75196 23.625,389.3125 L 23.625,827.3125 C 38.095155,821.66378 20.746118,790.57562 48.25,790.65625 C 80.322887,790.7503 51.209558,832.88991 82.90625,827.96875 C 114.59419,823.03883 74.004704,791.73108 104.53125,781.90625 C 135.06655,772.08141 120.3785,821.16884 149,806.6875 C 177.61276,792.21489 129.36717,774.96666 155.375,756.1875 C 181.37407,737.40833 182.56796,788.65547 205.3125,766.03125 C 228.05485,743.41575 176.82429,741.91877 195.75,716.03125 C 214.67353,690.13497 231.67805,738.47369 246.3125,709.9375 C 260.95571,681.40348 211.75457,695.81779 221.75,665.34375 C 231.74762,634.86751 262.83479,675.59921 267.9375,643.9375 C 273.04458,612.27362 230.71846,641.19791 230.8125,609.125 C 230.8978,577.05211 273.08615,606.1967 268.15625,574.5 C 263.23508,542.81206 231.88733,583.3703 222.0625,552.84375 C 212.24641,522.30845 261.35636,536.98777 246.875,508.375 C 232.39365,479.75349 215.15418,528.00781 196.375,502 C 177.59583,476.00093 228.80299,474.80703 206.1875,452.0625 C 183.572,429.32015 182.08378,480.55071 156.1875,461.625 C 130.29122,442.70147 178.66121,425.73695 150.125,411.09375 C 121.58879,396.45054 136.0053,445.62043 105.53125,435.625 C 75.055008,425.62738 115.7867,394.538 84.125,389.4375 C 82.146007,389.11817 80.410483,388.97068 78.875,389 z"
+   transform="matrix(0.4572086,0,0,0.4572086,176.55441,-80.651816)"
+   id="path14"
+   style="fill:#e6e6e6;stroke:#e6e6e6;stroke-width:1.74974835;stroke-opacity:1" />
+</g><g
+   transform="matrix(0.7802343,0,0,0.7802343,-63.142369,43.042016)"
+   id="g36"
+   style="fill:#000000;stroke:#ffffff;stroke-width:0.80376798;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 48.78125,444.90625 C 40.23156,444.90625 31.823476,445.54431 23.625,446.8125 L 23.625,772.875 C 31.823476,774.14305 40.23156,774.78125 48.78125,774.78125 C 139.40509,774.78125 212.9375,700.89409 212.9375,609.84375 C 212.9375,518.79341 139.40509,444.90625 48.78125,444.90625 z"
+   transform="matrix(0.4572086,0,0,0.4572086,176.55441,-80.651816)"
+   id="path38"
+   style="fill:#ffffff;stroke:#ffffff;stroke-width:1.75798965" />
+</g><g
+   transform="matrix(0.7802343,0,0,0.7802343,-63.142369,43.042016)"
+   id="g44"
+   style="fill:#e6e6e6;stroke:#e6e6e6;stroke-width:0.80376798;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 203.785,198.195 C 203.785,200.941 201.566,203.168 198.836,203.168 C 196.105,203.168 193.887,200.941 193.887,198.195 C 193.887,195.449 196.105,193.223 198.836,193.223 C 201.566,193.223 203.785,195.449 203.785,198.195 z"
+   id="path46"
+   style="fill:#e6e6e6;stroke:#e6e6e6" />
+</g><g
+   transform="matrix(0.7802343,0,0,0.7802343,-63.142369,43.042016)"
+   id="g48"
+   style="fill:#e6e6e6;fill-rule:nonzero;stroke:#e6e6e6;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 372.4375,226.8125 C 350.03614,226.99774 326.37254,235.86686 301.53125,253.375 L 368.53125,345.625 C 371.39273,344.04727 374.33807,342.1941 377.40625,339.96875 L 419.75,309.1875 C 431.09721,316.83039 443.82523,328.92944 457.9375,345.375 L 557.875,482.9375 C 569.15331,501.44535 576.62605,517.13205 580.25,530.09375 L 537.90625,560.875 C 534.83804,563.09806 532.16736,565.31878 529.78125,567.5625 L 596.78125,659.75 C 626.75298,637.33253 643.69738,612.67138 647.59375,585.75 C 651.58512,558.10191 635.79682,513.598 600.21875,452.15625 L 582.8125,425.21875 L 552.28125,381.71875 L 520.53125,339.46875 L 500.28125,314.625 C 452.84383,261.79529 415.32322,232.90591 387.71875,228.0625 C 382.68286,227.17934 377.60704,226.76975 372.4375,226.8125 z M 298.59375,255.53125 C 292.22542,260.26672 288.42952,265.62733 287.28125,271.59375 C 286.09854,277.70256 287.25876,283.07104 290.6875,287.78125 L 328.125,339.34375 C 337.38467,352.07348 349.72995,354.71426 365.25,347.3125 L 298.59375,255.53125 z M 527.15625,570.15625 C 515.3428,582.66092 514.16594,595.3595 523.53125,608.25 L 560.71875,659.46875 C 564.28758,664.37648 569.05433,667.18005 575.15625,667.84375 C 581.11347,668.50094 587.37058,666.49603 593.84375,661.90625 L 527.15625,570.15625 z"
+   transform="matrix(0.4354368,0,0,0.4354368,82.400777,-58.916687)"
+   id="path50"
+   style="fill:#e6e6e6;stroke:#e6e6e6" />
+</g><g
+   transform="matrix(0.7802343,0,0,0.7802343,-63.142369,43.042016)"
+   id="g52"
+   style="fill:#e6e6e6;fill-rule:nonzero;stroke:#e6e6e6;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	<path
+   d="M 658.03125,626.5625 C 655.25013,626.68881 652.89528,628.64662 650.5,630.34375 C 645.86328,633.50839 641.64235,636.86247 638,641.6875 C 636.50265,643.53622 636.13403,645.73808 635.8125,648.3125 C 635.79309,648.61363 635.79586,648.91743 635.78125,649.21875 C 635.23223,649.19257 634.70569,649.15791 634.15625,649.09375 C 632.90004,648.82505 631.6188,648.56494 630.40625,648 C 629.26716,647.40749 628.11703,646.83331 626.96875,646.25 C 626.10755,645.68505 625.17836,645.1645 624.46875,644.3125 C 623.94054,642.88405 623.48803,641.40243 622.5625,640.34375 C 621.71048,638.89922 620.89835,637.66941 620.78125,635.6875 C 620.55619,633.53334 620.32635,631.3761 620.46875,629.1875 L 613.25,634.125 C 613.24081,636.35035 613.4845,638.53016 613.71875,640.71875 C 613.85195,642.89817 614.81159,644.35797 615.71875,646 C 616.57995,646.98751 616.99334,648.35779 617.46875,649.6875 C 618.15771,650.96897 619.23721,651.5114 620.25,652.21875 C 621.40746,652.85489 622.58337,653.44241 623.75,654.0625 C 624.99702,654.6619 626.29163,654.97031 627.59375,655.3125 C 629.14392,655.59038 630.71963,655.55329 632.28125,655.5625 C 633.40247,655.5625 634.53435,655.59144 635.65625,655.59375 C 635.65602,655.66675 635.65652,655.73949 635.65625,655.8125 C 635.50468,658.17335 636.22468,660.11922 636.96875,662.15625 C 637.87359,664.67786 639.42176,666.43805 640.9375,668.25 C 642.75866,670.26866 644.74418,671.94434 646.78125,673.53125 C 648.69198,674.7622 650.70926,675.69811 652.71875,676.59375 C 656.14519,677.86833 659.603,678.9573 663.09375,679.84375 C 664.02122,680.06128 664.94201,680.22593 665.875,680.375 C 665.76219,683.23707 665.89639,686.10725 666.03125,688.96875 C 666.10244,692.71901 667.28887,695.7388 668.6875,698.84375 C 670.90367,702.89715 674.1061,705.11973 677.40625,707.21875 C 680.51905,709.33564 683.68848,711.12476 686.96875,712.5 C 686.27445,713.84958 685.59527,715.21275 684.90625,716.5625 C 682.09758,722.75398 678.51334,728.5208 676.84375,735.5 C 675.95499,739.41102 676.12805,743.17354 676.65625,747.09375 C 676.74319,747.40856 676.86916,747.69777 676.96875,748 C 676.52343,748.36731 676.07405,748.71255 675.59375,749.09375 C 670.58669,754.22361 665.07597,758.95221 661.40625,765.0625 C 657.98224,768.95528 656.79145,775.20535 655.40625,780.0625 C 655.2626,780.90806 655.17126,781.73797 655.09375,782.59375 C 649.8835,782.96621 644.62777,782.87146 639.46875,783.84375 C 635.56462,784.53271 632.0128,786.6759 628.53125,789 L 622.53125,795.4375 C 625.97607,793.00776 629.52281,790.76565 633.40625,789.96875 C 639.26474,788.76536 645.21139,788.7314 651.125,788.28125 C 652.35836,788.26976 653.60825,788.24556 654.84375,788.25 C 654.84003,788.40659 654.81634,788.56232 654.8125,788.71875 C 654.55299,791.19672 655.30873,793.18268 656,795.34375 C 656.83365,797.38997 658.11847,798.37459 659.625,799.34375 C 661.09709,800.08094 662.63732,800.14753 664.1875,800.21875 C 669.26516,800.59538 669.3314,799.11144 675.34375,794.5 C 676.12458,792.20346 675.99662,789.97387 675.71875,787.5625 C 675.05505,784.64589 673.67862,783.925 671.6875,782.9375 C 668.45971,782.35662 665.19867,782.29356 661.9375,782.34375 C 661.99928,780.03433 662.13138,777.7163 662.5625,775.46875 C 663.21931,772.65089 665.09458,768.82277 666.65625,766.625 C 669.20204,762.82554 674.96145,757.26163 679.21875,752.75 C 680.48024,754.70163 681.99017,756.37702 683.53125,758 C 686.32155,761.1233 689.50188,762.95982 692.9375,764.3125 C 698.33668,765.34595 703.75165,760.99336 705.125,753.90625 C 705.07907,749.0904 703.10202,746.54029 700.5,743.75 C 697.42263,741.67852 693.98575,741.28994 690.59375,741.21875 C 687.88208,741.05633 685.78146,741.65596 683.8125,742.75 C 683.7427,742.52184 683.65599,742.29759 683.59375,742.0625 C 683.15281,738.33062 683.00463,734.75992 683.875,731.0625 C 685.46098,724.86821 688.28073,719.4255 690.90625,713.9375 C 691.22142,714.03134 691.52582,714.13349 691.84375,714.21875 C 696.29445,715.15115 700.80898,715.7729 705.3125,715.59375 C 712.04827,712.56001 715.54313,710.41086 715.4375,701.96875 C 714.16292,697.58235 711.70289,695.58585 708.6875,693.71875 C 702.80375,691.93433 701.13556,695.05715 695.1875,699.625 C 693.53745,701.46038 692.0678,703.5253 690.71875,705.71875 C 688.35474,704.56503 686.06885,703.15492 683.8125,701.53125 C 680.66394,699.5034 677.577,697.39496 675.46875,693.5 C 674.16891,690.53975 673.05511,687.64651 673,684.09375 C 672.95152,683.08548 672.91042,682.07355 672.875,681.0625 C 673.39623,681.09037 673.91645,681.10166 674.4375,681.125 C 680.69099,681.79789 681.20995,680.48892 687.8125,675.3125 C 688.98833,672.67377 689.34532,669.61282 689.6875,666.625 C 690.14451,664.07813 689.48216,662.14768 688.84375,659.90625 C 687.75059,657.69008 686.23662,657.37616 684.40625,656.9375 C 679.84991,657.2682 677.68005,660.39024 673.25,663.90625 C 671.64242,665.98692 670.31033,668.38726 668.875,670.65625 C 668.22014,671.50865 667.68792,672.40889 667.28125,673.34375 C 664.57176,672.59674 661.8957,671.71207 659.25,670.625 C 657.27727,669.75461 655.34822,668.76456 653.4375,667.6875 C 651.41884,666.19934 649.42459,664.62531 647.65625,662.625 C 646.22091,660.89341 644.74907,659.20782 643.90625,656.8125 C 643.7724,656.39254 643.63115,656.00124 643.5,655.59375 C 644.57691,655.47117 645.61819,655.10606 646.6875,654.65625 C 650.86951,652.64677 654.50896,649.03691 658.25,645.96875 C 659.64171,644.67809 660.68762,642.95584 661.71875,641.1875 C 662.92903,639.79809 663.36287,638.192 663.875,636.28125 C 664.2769,634.48765 664.0693,632.80647 663.90625,631.03125 C 663.44005,629.56835 662.50829,628.61573 661.65625,627.59375 C 660.54243,626.59935 659.29433,626.68878 658.03125,626.5625 z M 651.59375,632.9375 C 652.70528,632.94669 653.82545,632.75541 654.875,633.4375 C 655.57315,634.28952 656.43586,634.96251 656.8125,636.21875 C 656.84006,637.7804 657.06596,639.3538 656.625,640.90625 C 655.99804,642.54828 655.39699,644.08803 654.375,645.40625 C 653.69487,646.41725 653.04785,647.44777 652.3125,648.375 C 651.04694,648.99271 649.80651,649.46345 648.40625,649.25 C 646.96172,649.25 645.53825,649.22245 644.09375,649.25 C 643.65774,649.25226 643.21826,649.24788 642.78125,649.25 C 642.78082,647.36247 642.78858,645.46453 642.96875,643.59375 C 643.38213,641.22601 643.91759,639.27024 645.34375,637.59375 C 646.19916,636.54731 647.61346,635.06047 648.75,633.875 C 649.65408,633.38586 650.59819,633.04515 651.59375,632.9375 z M 678.1875,663.1875 C 679.71023,663.37727 680.96176,663.5183 681.9375,665.34375 C 682.48408,667.34404 682.95384,669.10601 682.53125,671.375 C 682.38459,672.63589 682.23887,673.8787 682,675.09375 C 681.58116,675.08836 681.16759,675.06947 680.75,675 C 678.17138,674.93272 675.57044,674.82459 673,674.5 C 673.03456,674.16414 673.07882,673.83509 673.125,673.5 C 673.73358,670.81764 674.60007,668.55909 676.125,666.53125 C 676.81974,665.43557 677.47675,664.27416 678.1875,663.1875 z M 700.5,699.40625 C 701.05272,699.40103 701.6068,699.45907 702.15625,699.625 C 704.99248,701.1522 707.3549,702.74812 708.46875,706.875 C 708.43173,707.89726 708.31328,708.77868 708.1875,709.5625 C 704.78983,709.55023 701.3882,709.01624 698.03125,708.4375 C 696.80899,708.12018 695.59215,707.71996 694.40625,707.28125 C 695.91621,704.55008 697.51405,701.90285 699.3125,699.53125 C 699.69159,699.47092 700.09085,699.41011 700.5,699.40625 z M 707,713.4375 C 706.73935,713.87833 706.68419,713.86452 707,713.4375 z M 689.71875,747 C 691.4837,747.02838 692.01015,748.328 693.90625,749.4375 C 696.21719,751.77455 697.96769,753.84841 698.0625,757.84375 C 695.14109,756.75553 692.4328,755.19472 690.03125,752.5 C 688.68709,751.09314 687.36714,749.5936 686.25,747.90625 C 687.81088,747.26499 688.91885,746.98714 689.71875,747 z M 662.53125,788.625 C 663.41661,788.72096 664.30614,788.81888 665.1875,788.96875 C 666.91909,789.6669 668.06375,790.13097 668.65625,792.625 C 668.69532,793.04687 668.72432,793.44288 668.75,793.84375 C 667.9077,793.78585 667.069,793.6661 666.25,793.34375 C 664.90422,792.47336 663.70365,791.91625 662.96875,789.96875 C 662.81877,789.51249 662.66908,789.0682 662.53125,788.625 z"
+   transform="matrix(0.4354368,0,0,0.4354368,82.400777,-58.916687)"
+   id="path54"
+   style="fill:#e6e6e6;stroke:#e6e6e6" />
+</g>
+
+
+
+
+<g
+   transform="matrix(0.7802343,0,0,0.7802343,-63.142369,43.042016)"
+   id="g32"
+   style="fill:#000000;fill-rule:nonzero;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10">
+	
+</g>
+
+
+
+
+
+</g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,205 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007-2014 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+% Set the normal line height for the entire document (some command depend on it).
+\newcommand{\normallineheight}{10pt}
+\documentclass[\normallineheight,a4paper]{article}
+
+
+% Value multiplier.
+\newlength\mrbraceheight
+\newcommand{\tassimultiply}[2]{%
+\setlength{\mrbraceheight}{0pt}%
+\newcount\qq%
+\qq=1	% Subtract 1 by starting at 1 .
+\loop%
+	\addtolength\mrbraceheight{#2}%
+	\advance\qq by 1%
+\ifnum\qq < #1 \repeat%
+}
+
+
+% Conditional if tex4ht is on or not
+\newcommand{\ifhtml}[1]{%
+	\ifx\HCode\Undef \else%
+		#1%
+	\fi%
+}
+\newcommand{\ifnhtml}[1]{%
+	\ifx\HCode\Undef%
+		#1%
+	\fi%
+}
+
+
+% Packages.
+\usepackage{a4wide}
+\usepackage{multirow}
+\usepackage{hhline}
+\usepackage{color}
+\usepackage{colortbl}
+\usepackage{bigdelim}
+\usepackage{rotating}
+\usepackage{graphicx}
+\usepackage{moreverb}
+\usepackage{listings}
+\usepackage{hyperref}
+\ifnhtml{\usepackage{watermark}}
+
+
+% Define own commands and style.
+\newcommand{\dc}{\emph{dyncall}}
+\newcommand{\capi}[1]{%
+	\noindent%
+%	\begin{verbatim}%
+		{\tt #1}%
+%	\end{verbatim}%
+}
+\newcommand{\tab}{\indent}
+
+\newcommand{\shell}[1]{\noindent{\tt #1}}
+
+% Multiline table row with left or right curly brace.
+%\newcommand{\mrrbrace}[2]{\tassimultiply{#1}{5pt} \multirow{#1}{*}{$\smash{\left. {\vrule height 0pt depth \mrbraceheight width 0pt}\right\}}$#2}}
+\newcommand{\mrrbrace}[2]{\rdelim\}{#1}{\normallineheight} \multirow{#1}{*}{#2}                                 }
+\newcommand{\mrlbrace}[2]{                                 \multirow{#1}{*}{#2} \ldelim\{{#1}{\normallineheight}}
+
+
+\newcommand{\tablewidth}{130mm}
+%\setlength{\oddsidemargin}{10mm}
+%\setlength{\textwidth}{140mm}
+%\setlength{\parindent}{0mm}
+%\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
+
+\newcommand{\ninetyb}{\begin{sideways}}
+\newcommand{\ninetye}{\end{sideways}}
+
+\renewcommand{\paragraph}[1]{%
+	\par\vspace{12pt}%
+	\noindent%
+	{\bf#1}%
+	\par%
+	\vspace{6pt}%
+}%
+
+% Set a watermark, but not when running htlatex
+\ifnhtml{%
+\watermark{%
+\begingroup%
+\setlength{\unitlength}{1mm}%
+\begin{picture}(0,0)(32,300)%
+	\includegraphics[scale=1.0]{dyncall_watermark}%
+\end{picture}%
+\endgroup%
+}%
+}
+
+
+% Use a sans-serif font.
+\renewcommand{\familydefault}{\sfdefault}
+
+
+\definecolor{defbkgd}{gray}{1.0}
+\definecolor{gray1}{gray}{0.9}
+\definecolor{gray2}{gray}{0.8}
+\definecolor{gray3}{gray}{0.7}
+\definecolor{gray4}{gray}{0.6}
+\definecolor{lightgreen}{rgb}{0.0,1.0,0.0}
+\definecolor{darkgreen}{rgb}{0.0,0.6,0.0}
+
+% Define some column types for our colortables
+\usepackage{array}
+
+\newcommand{\cellcA}{}
+\newcommand{\cellcB}{}
+\newcommand{\cellcC}{}
+\newcommand{\cellcD}{}
+\newcolumntype{1}{l}
+\newcolumntype{2}{l}
+\newcolumntype{3}{l}
+\newcolumntype{4}{l}
+\newcolumntype{5}{r}
+\newcolumntype{6}{r}
+\newcolumntype{7}{r}
+\newcolumntype{8}{r}
+\newcolumntype{A}{p{\tablewidth}}
+\newcolumntype{B}{p{\tablewidth}}
+\newcolumntype{C}{p{\tablewidth}}
+\newcolumntype{D}{p{\tablewidth}}
+
+% listings package related settings
+
+\lstset{captionpos=b}
+\lstset{frame=tblr}
+\lstset{frameround=tttt}
+\lstset{basicstyle=\ttfamily}
+
+% text building blocks
+\newcommand{\group}[1]{{\it$<$#1$>$}}
+\newcommand{\sigchar}[1]{'{\tt #1}'}
+\newcommand{\sigstr}[1]{"{\tt #1}"}
+\newcommand{\cenum}[1]{#1}
+\newcommand{\product}[1]{\emph{#1}}
+
+% colors used to signalize undefined, not used, supported, etc. states.
+\newcommand{\marknull}{\cellcolor{white}}
+\newcommand{\markcmpl}{\cellcolor{lightgreen}}
+\newcommand{\markimpl}{\cellcolor{darkgreen}}
+\newcommand{\marknimp}{\cellcolor{red}}
+\newcommand{\markunkn}{\cellcolor{yellow}}
+\newcommand{\marknotx}{\cellcolor{gray1}}
+
+
+% table of contents config
+\setcounter{tocdepth}{3}
+
+
+\begin{document}
+
+% html output options (that need to come after \begin{document})..
+\ifhtml{
+	\Configure{tableofcontents*}{chapter}
+}
+
+% main document content -->
+\input{manual_title}
+\newpage
+\tableofcontents
+\newpage
+\ifnhtml{
+	\listoftables
+	\listoffigures
+	\lstlistoflistings
+}
+\newpage
+\input{manual_motivation}
+\input{manual_overview}
+\input{manual_build}
+\input{manual_bindings}
+\input{manual_design}
+\input{manual_devel}
+\input{manual_epilog}
+\appendix
+\addtocontents{toc}{\protect\pagebreak}
+\input{manual_dyncall_api}
+\input{manual_dyncallback_api}
+\input{manual_dynload_api}
+\input{manual_cc}
+\input{manual_literature}
+\end{document}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_bindings.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,305 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\newpage
+\section{Bindings to programming languages}
+
+Through binding of the \product{dyncall} library into a scripting environment,
+the scripting language can gain system programming status to a certain degree.\\
+The \product{dyncall} library provides bindings to Erlang\cite{Erlang}, Java\cite{Java},
+Lua\cite{Lua}, Python\cite{Python}, R\cite{R}, Ruby\cite{Ruby}, Go\cite{Go} and the shell/command line.\\
+However, please note that some of these bindings are work-in-progress and not
+automatically tested, meaning it might require some additional work to make them
+work.
+
+\subsection{Common Architecture}
+
+The binding interfaces of the \product{dyncall} library to various scripting
+languages share a common set of functionality to invoke a function call.
+
+\subsubsection{Dynamic loading of code}
+
+The helper library \emph{dynload} which accompanies the \product{dyncall}
+library provides an abstract interface to operating-system specific mechanisms
+for loading and accessing executable code out of, but not limited to, shared
+libraries.
+
+\subsubsection{Functions}
+
+All bindings are based on a common interface convention providing a common set
+of the following 4 functions (exact spelling depending on the binding's scripting
+environment):
+\begin{description}
+\item [load] - load a module of compiled code
+\item [free] - unload a module of compiled code
+\item [find] - find function pointer by symbolic names
+\item [call] - invoke a function call
+\end{description}
+
+\pagebreak
+
+\subsubsection{Signatures}
+
+A signature is a character string that represents a function's arguments and
+return value types. It is used in the scripting language bindings invoke
+functions to perform automatic type-conversion of the languages' types to the
+low-level C/C++ data types. This is an essential part of mapping the more flexible
+and often abstract data types provided in scripting languages conveniently to the
+strict machine-level data types used by C-libraries.
+The high-level C interface functions \capi{dcCallF()}, \capi{dcVCallF()},
+\capi{dcArgF()} and \capi{dcVArgF()} of the \product{dyncall} library also make
+use of this signature string format.\\
+\\
+The format of a \product{dyncall} signature string is as depicted below:
+
+
+\paragraph{\product{dyncall} signature string format}
+
+\begin{center}
+\group{input parameter type signature character}* \sigchar{)} \group{return
+type signature character} \\
+\end{center}
+
+The \group{input parameter type signature character} sequence left to the
+\sigchar{)} is in left-to-right order of the corresponding C function
+parameter type list.\\
+The special \group{return type signature character} \sigchar{v} specifies
+that the function does not return a value and corresponds to \capi{void}
+functions in C.
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular*}{0.75\textwidth}{cl}
+\hline
+Signature character & C/C++ data type \\
+\hline
+\sigchar{B} & \_Bool, bool \\
+\sigchar{c} & char \\
+\sigchar{C} & unsigned char \\
+\sigchar{s} & short \\
+\sigchar{S} & unsigned short \\
+\sigchar{i} & int \\
+\sigchar{I} & unsigned int \\
+\sigchar{j} & long \\
+\sigchar{J} & unsigned long \\
+\sigchar{l} & long long, int64\_t \\
+\sigchar{L} & unsigned long long, uint64\_t \\
+\sigchar{f} & float \\
+\sigchar{d} & double \\
+\sigchar{p} & void* \\
+\sigchar{Z} & const char* (pointing to C string) \\
+\sigchar{v} & void \\
+\hline
+\end{tabular*}
+\caption{Type signature encoding for function call data types}
+\label{sigchar}
+\end{center}
+\end{table}
+
+Please note that using a \sigchar{(} at the beginning of a signature string is possible,
+although not required. The character doesn't have any meaning and will simply be
+ignored. However, using it prevents annoying syntax highlighting problems with some code
+editors.
+
+\pagebreak
+
+\paragraph{Examples of C function prototypes}
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular*}{0.75\textwidth}{rll}
+\hline
+& C function prototype & dyncall signature \\
+\hline
+void      & f1();                                     & \sigstr{)v}\\
+int       & f2(int, int);                             & \sigstr{ii)i}\\
+long long & f3(void*);                                & \sigstr{p)L}\\
+void      & f3(int**);                                & \sigstr{p)v}\\
+double    & f4(int, bool, char, double, const char*); & \sigstr{iBcdZ)d}\\
+\hline
+\end{tabular*}
+\caption{Type signature examples of C function prototypes}
+\label{sigex}
+\end{center}
+\end{table}
+
+
+
+\subsection{Erlang language bindings}
+
+The OTP library application {\tt erldc} implements the Erlang language bindings.
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular*}{0.75\textwidth}{ll}
+\hline
+Signature character & accepted Erlang data types\\
+\hline
+\sigchar{B} & atoms 'true' and 'false' converted to bool\\
+\sigchar{c}, \sigchar{C} & integer cast to (unsigned) char\\
+\sigchar{s}, \sigchar{S} & integer cast to (unsigned) short\\
+\sigchar{i}, \sigchar{I} & integer cast to (unsigned) int\\
+\sigchar{j}, \sigchar{J} & integer cast to (unsigned) long\\
+\sigchar{l}, \sigchar{L} & integer cast to (unsigned) long long\\
+\sigchar{f}              & decimal cast to float\\
+\sigchar{d}              & decimal cast to double\\
+\sigchar{p}              & binary (previously returned from call\_ptr or callf) cast to void*\\
+\sigchar{Z}              & string cast to void*\\
+\sigchar{v}              & no return type\\
+\hline
+\end{tabular*}
+\caption{Type signature encoding for Erlang bindings}
+\label{Erlangsigchar}
+\end{center}
+\end{table}
+
+\pagebreak
+
+\subsection{Go language bindings}
+
+A Go binding is provided through the {\tt godc} package. Since Go's type system is basically a superset of C's, the type mapping from Go to C is straightforward.
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular*}{0.75\textwidth}{ll}
+\hline
+Signature character & accepted Go data types\\
+\hline
+\sigchar{B} & bool\\
+\sigchar{c}, \sigchar{C} & int8, uint8\\
+\sigchar{s}, \sigchar{S} & int16, uint16\\
+\sigchar{i}, \sigchar{I} & int, uint\\
+\sigchar{j}, \sigchar{J} & int32, uint32\\
+\sigchar{l}, \sigchar{L} & int64, uint64\\
+\sigchar{f}              & float32\\
+\sigchar{d}              & float64\\
+\sigchar{p}, \sigchar{Z} & uintptr, unsafe.Pointer\\
+\sigchar{v}              & no return type\\
+\hline
+\end{tabular*}
+\caption{Type signature encoding for Go bindings}
+\label{Gosigchar}
+\end{center}
+\end{table}
+
+Note that passing a Go-{\tt string} directly to a C-function expecting a pointer is not directly possible. However, the binding comes with
+two helper functions, {\tt AllocCString(value string) unsafe.Pointer} and {\tt FreeCString(value unsafe.Pointer)} to help with converting
+a {\tt string} to an {\tt unsafe.Pointer} which then can be passed to {\tt ArgPointer(value unsafe.Pointer)}. Once you are done with this
+temporary string, free it using {\tt FreeCString(value unsafe.Pointer)}.
+
+
+\subsection{Python language bindings}
+
+The python module {\tt pydc} implements the Python language bindings,
+namely {\tt load}, {\tt find}, {\tt free}, {\tt call}.
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular*}{0.75\textwidth}{ll}
+\hline
+Signature character & accepted Python data types\\
+\hline
+\sigchar{B} & bool \\
+\sigchar{c} & if string, take first item\\
+\sigchar{s} & int, check in range\\
+\sigchar{i} & int\\
+\sigchar{j} & int\\
+\sigchar{l} & long, casted to long long\\
+\sigchar{f} & float\\
+\sigchar{d} & double\\
+\sigchar{p} & string or long casted to void*\\
+\sigchar{v} & no return type\\
+\hline
+\end{tabular*}
+\caption{Type signature encoding for Python bindings}
+\label{Pysigchar}
+\end{center}
+\end{table}
+
+\pagebreak
+
+\subsection{R language bindings}
+
+The R package {\tt rdyncall} implements the R langugae bindings providing the function
+{\tt .dyncall() }.
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular*}{0.75\textwidth}{ll}
+\hline
+Signature character & accepted R data types\\
+\hline
+\sigchar{B} & coerced to logical vector, first item\\
+\sigchar{c} & coerced to integer vector, first item truncated char\\
+\sigchar{C} & coerced to integer vector, first item truncated to unsigned char\\
+\sigchar{s} & coerced to integer vector, first item truncated to short\\
+\sigchar{S} & coerced to integer vector, first item truncated to unsigned short\\
+\sigchar{i} & coerced to integer vector, first item\\
+\sigchar{I} & coerced to integer vector, first item casted to unsigned int\\
+\sigchar{j} & coerced to integer vector, first item\\
+\sigchar{J} & coerced to integer vector, first item casted to unsigned long\\
+\sigchar{l} & coerced to numeric, first item casted to long long\\
+\sigchar{L} & coerced to numeric, first item casted to unsigned long long\\
+\sigchar{f} & coerced to numeric, first item casted to float\\
+\sigchar{d} & coerced to numeric, first item\\
+\sigchar{p} & external pointer or coerced to string vector, first item\\
+\sigchar{Z} & coerced to string vector, first item\\
+\sigchar{v} & no return type\\
+\hline
+\end{tabular*}
+\caption{Type signature encoding for R bindings}
+\label{Rsigchar}
+\end{center}
+\end{table}
+
+Some notes on the R Binding:
+\begin{itemize}
+\item Unsigned 32-bit integers are represented as signed integers in R.
+\item 64-bit integer types do not exist in R, therefore we use double floats
+to represent 64-bit integers (using only the 52-bit mantissa part).
+\end{itemize}
+
+\pagebreak
+
+\subsection{Ruby language bindings}
+
+The Ruby gem {\tt rbdc} implements the Ruby language bindings.
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular*}{0.75\textwidth}{ll}
+\hline
+Signature character & accepted Ruby data types\\
+\hline
+\sigchar{B} & TrueClass, FalseClass, NilCalss, Fixnum casted to bool\\
+\sigchar{c}, \sigchar{C} & Fixnum cast to (unsigned) char\\
+\sigchar{s}, \sigchar{S} & Fixnum cast to (unsigned) short\\
+\sigchar{i}, \sigchar{I} & Fixnum cast to (unsigned) int\\
+\sigchar{j}, \sigchar{J} & Fixnum cast to (unsigned) long\\
+\sigchar{l}, \sigchar{L} & Fixnum cast to (unsigned) long long\\
+\sigchar{f}              & Float cast to float\\
+\sigchar{d}              & Float cast to double\\
+\sigchar{p}, \sigchar{Z} & String cast to void*\\
+\sigchar{v}              & no return type\\
+\hline
+\end{tabular*}
+\caption{Type signature encoding for Ruby bindings}
+\label{Rubysigchar}
+\end{center}
+\end{table}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_build.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,177 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\newpage
+\section{Building the library}
+
+The library has been built and used successfully on several 
+platform/architecture configurations and build systems.
+Please see notes on specfic platforms to check if the target
+architecture is currently supported.
+
+
+\subsection{Requirements}
+
+The following tools are supported directly to build the \product{dyncall} library.
+However, as the number of source files to be compiled for a given
+platform is small, it shouldn't be difficult to build it manually with
+another toolchain.
+\begin{itemize}
+\item C compiler to build the \product{dyncall} library (GCC, Clang, SunPro or Microsoft C/C++ compiler)
+\item C++ compiler to build the optional test cases (GCC, Clang, SunPro or Microsoft C/C++ compiler)
+\item BSD make, GNU make, Microsoft nmake or mk (on Plan9) as automated build tools
+\item Python (optional - for generation of some test cases)
+\item Lua (optional - for generation of some test cases)
+\item CMake (optional support)
+\end{itemize}
+
+
+\subsection{Supported/tested platforms and build systems}
+
+Building \product{dyncall} is a straightforward two-step process, first configure, then make. The
+library should be able to be built with the default operating systems' build tools, so BSD make on
+BSD and derived systems, GNU make on GNU and compatible, mk on Plan9, nmake on Windows, etc..
+This is a detailed overview of platforms and their build tools that are known to build
+\product{dyncall}:\\
+\\
+
+
+\begin{tabular}{l l l}
+{\bf{\large Platform}}             & Build Tool(s)    & Compiler, SDK                              \\
+\hline
+{\bf{\large Windows}}              & nmake,Visual Studio & cl, cygwin (gcc), mingw (gcc)              \\
+{\bf{\large Unix-like}}            & GNU/BSD/Sun make & gcc, clang, sunc                           \\
+{\bf{\large Plan9}}                & mk               & 8c                                         \\
+{\bf{\large Haiku/BeOS}}           & GNU make         & gcc                                        \\
+{\bf{\large iOS/iPhone}}           & GNU make         & gcc and iPhone SDK on Mac OS X             \\
+{\bf{\large Nintendo DS}}          & nmake            & devkitPro\cite{devkitPro} tools on Windows \\
+{\bf{\large Playstation Portable}} & GNU make         & psptoolchain\cite{psptoolchain} tools      \\
+
+\end{tabular}\\
+
+\pagebreak
+
+\subsection{Build instructions}
+
+
+\begin{enumerate}
+\item Configure the source (not needed for Makefile.embedded)
+
+\paragraph{*nix flavour}
+\begin{lstlisting}
+./configure [--option ...]
+\end{lstlisting}
+
+Available options (omit for defaults):
+
+\begin{tabular}{ll}	
+{\tt --help}                  & display help                             \\
+{\tt --prefix={\it path}}     & specify installation prefix (Unix shell) \\
+{\tt --target={\it platform}} & MacOSX,iOS,iPhoneSimulator,PSP,...       \\
+{\tt --sdk={\it version}}     & SDK version                              \\
+\end{tabular}
+
+\paragraph{Windows flavour, and cross-build from Windows (PSP, NDS, etc.)}
+
+\begin{lstlisting}
+.\configure [/option ...]
+\end{lstlisting}
+
+Available options:
+
+\begin{tabular}{ll}	
+{\tt /?}                    & display help \\
+{\tt /prefix {\it path}}    & set installation prefix (GNU make only) \\
+{\tt /prefix-bd {\it path}} & set build directory prefix (GNU make only) \\
+{\tt /target-x86}           & build for x86 architecture (default) \\
+{\tt /target-x64}           & build for x64 architecture \\
+{\tt /target-psp}           & build for PlayStation Portable (homebrew SDK) \\
+{\tt /target-nds-arm}       & build for Nintendo DS (devkitPro, ARM mode) \\
+{\tt /target-nds-thumb}     & build for Nintendo DS (devkitPro, THUMB mode) \\
+{\tt /tool-msvc}            & use Microsoft Visual C++ compiler (default) \\
+{\tt /tool-gcc}             & use GNU Compiler Collection \\
+{\tt /asm-ml}               & use Microsoft Macro Assembler (default) \\
+{\tt /asm-as}               & use the GNU Assembler \\
+{\tt /asm-nasm}             & use NASM Assembler \\
+{\tt /config-release}       & build release version (default) \\
+{\tt /config-debug}         & build debug version \\
+\end{tabular}
+
+
+\paragraph{Plan 9 flavour}
+
+\begin{lstlisting}
+./configure.rc [--option ...]
+\end{lstlisting}
+
+Available options (none, at the moment):
+
+\begin{tabular}{ll}	
+{\tt --help} & display help \\
+\end{tabular}
+
+
+\item Build the static libraries \product{dyncall}, \product{dynload} and \product{dyncallback}
+\begin{lstlisting}
+make                      # for {GNU,BSD} Make
+nmake /f Nmakefile        # for NMake on Windows
+mk                        # for mk on Plan9
+\end{lstlisting}
+
+\item Install libraries and includes (supported for GNU and BSD make based builds, only)
+\begin{lstlisting}
+make install 
+\end{lstlisting}
+
+\item Optionally, build the test suite
+\begin{lstlisting}
+make tests                     # for {GNU,BSD} Make
+nmake /f Nmakefile tests       # for NMake on Windows
+mk tests                       # for mk on Plan9
+\end{lstlisting}% @@@ check Plan9, should work already
+\end{enumerate}
+
+\subsection{Build-tool specific notes}
+
+Some platforms require some manual tweaks:
+
+Problem: Build fails because CC and/or related are not set, or different compiler,
+linker, etc. should be used.
+
+Solution: Set the 'CC' and other environment variables explicitly to the desired
+tools. E.g.:
+
+\begin{lstlisting}
+CC=gcc make
+\end{lstlisting}
+
+
+Problem: On windows using mingw and msys/unixutils 'Make', the make uses
+'cc' for C compilation, which does not exist in mingw.
+
+Solution: Set the 'CC' environment variable explicitly to 'gcc' (as in
+the example above).
+
+\subsection{Build with CMake}
+
+\begin{lstlisting}
+cmake -DCMAKE_INSTALL_PREFIX=<location>
+make
+\end{lstlisting}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_cc.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,47 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\newpage
+
+% ==================================================
+% Calling Conventions
+% ==================================================
+
+\section{Calling Conventions}
+
+\paragraph{Before we go any further\ldots}
+
+It is important to understand that this section isn't a general
+purpose description of the present calling conventions.
+It merely explains the calling conventions {\bf for the parameter/return types
+supported by \dc}, not for aggregates (structures, unions and classes), SIMD
+data types (\_\_m64, \_\_m128, \_\_m128i, \_\_m128d), etc.\\
+We strongly advise the reader not to use this document as a general purpose
+calling convention reference.
+
+\input{callconvs/callconv_x86}\newpage
+\input{callconvs/callconv_x64}\newpage
+\input{callconvs/callconv_ppc32}\newpage
+\input{callconvs/callconv_ppc64}\newpage
+\input{callconvs/callconv_arm32}\newpage
+\input{callconvs/callconv_arm64}\newpage
+\input{callconvs/callconv_mips}\newpage
+\input{callconvs/callconv_sparc}\newpage
+\input{callconvs/callconv_sparc64}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_design.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,49 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\newpage
+\section{Library Design}
+
+
+\subsection{Design considerations}
+
+The \product{dyncall} library encapsulates function call invocation semantics
+that depend on the compiler, operating system and architecture.
+The core library is driven by a function call invocation engine, 
+named \emph{CallVM}, that encapsulates a call stack to foreign functions 
+and manages the following three phases that constitute a truly dynamic function
+call:
+
+\begin{enumerate}
+\item Specify the calling convention. Some run-time platforms, such as
+Microsoft Windows on a 32-bit X86 architecture, even support multiple calling
+conventions.
+\item Specify the function call arguments in a specific order. The 
+interface design dictates a \emph{left to right} order for C and C++ function 
+calls in which the arguments are bound.
+\item Specify the target function address, expected return value and 
+invoke the function call.
+\end{enumerate}
+
+The calling convention mode entirely depends on the way the foreign function
+has been compiled and specifies the low-level details on how a function
+actually expects input parameters (in memory, in registers or both) and how to
+return its result(s).
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_devel.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,127 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\newpage
+\section{Developers}
+
+\subsection{Noteworthy files in the project root}
+\begin{verbatim}
+configure     -- pre-make configuration tool (unix-shell)
+configure.bat -- pre-nmake configuration tool (windows batch)
+configure.rc  -- pre-mk configuration tool (Plan 9's rc)
+CMakeLists.txt-- top-level project information for CMake
+Makefile      -- GNU/BSD makefile (output of ./configure)
+Nmakefile     -- MS nmake makefile
+mkfile        -- Plan 9 mkfile
+LICENSE       -- license information
+README        -- quickstart doc
+buildsys/     -- build system details and extras
+doc/          -- platform specific readme's and manual
+dyncall/      -- dyncall library source code
+dyncallback/  -- dyncallback library source code
+dynload/      -- dynload library source code
+test/         -- test suites
+\end{verbatim}
+
+
+\subsection{Test suites}
+
+\begin{description}
+
+\item [plain] 
+Simple, identity, unary function calls for all supported return types and
+calling conventions.
+
+\item [plain\_c++] 
+Similar to plain, but for C++ thiscalls (GNU and MS calling convention).
+
+\item [suite] 
+All combinations of parameter types and counts are tested on void function
+calls. A script written in Python ({\tt mkcase.py}) generates the tests up to
+an upper MAXARG limit.
+
+\item [suite\_floats]
+Based on suite. Test double/float variants with up to 10 arguments.
+
+\item [suite\_x86win32std] 
+All combinations of parameter types and counts are tested on {\tt \_\_stdcall}
+void function calls. A script written in Python ({\tt mkcase.py}) generates
+the tests up to an upper MAXARG limit. This is a x86/Windows only test.
+
+\item [suite\_x86win32fast] 
+All combinations of parameter types and counts are tested on {\tt \_\_fastcall}
+(MS or GNU, depending on the build tool) void function calls.
+A script written in Python ({\tt mkcase.py}) generates the tests up to
+an upper MAXARG limit. This is a x86/Windows only test.
+
+\item [ellipsis]
+All combinations of parameter types and counts are tested on void ellipsis 
+function calls. A script written in Python ({\tt mkcase.py}) generates the 
+tests up to an upper MAXARG limit.
+
+\item [suite2]
+Designed mass test suite for void function calls.
+Tests individual void functions with a varying count of arguments and type.
+
+\item [suite2\_win32std]
+Designed mass test suite for {\tt \_\_stdcall} void function calls.
+Tests individual void functions with a varying count of arguments and type.
+This is a x86/Windows only test.
+
+\item [suite2\_win32fast]
+Designed mass test suite for {\tt \_\_fastcall} (MS or GNU, depending on the build tool) void function calls.
+Tests individual void functions with a varying count of arguments and type.
+This is a x86/Windows only test.
+
+\item [suite3]
+All combinations of parameter types integer, long long, float and double and
+counts are tested on void function calls.
+A script written in Python ({\tt mkcase.py}) generates the tests up to
+an upper MAXARG limit.
+This is a modified version of suite.
+
+\item [call\_suite]
+General purpose test suite combining aspects from all others suites (usually enough for
+testing non-callback calls).
+A script written in Lua generates the tests.
+
+\item [callf]
+Tests the \emph{formatted call} \product{dyncall} C API.
+
+\item [malloc\_wx]
+Tests \emph{writable and executable memory allocation} used by the
+\product{dyncallback} C API.
+
+\item [thunk]
+Tests \emph{callbacks} for the \product{dyncallback} C API.
+
+\item [callback\_plain]
+Simple callback function test (useful for easy debugging of new ports).
+
+\item [callback\_suite]
+Mass test suite for callback function testing. Uses random function argument
+number and type.
+A script written in Lua generates the tests up to a given number of calls and
+type combinations.
+
+\item [resolv\_self]
+Test for dynload library to resolve symbols from application image itself.
+
+\end{description}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_dyncall_api.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,299 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2010 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\newpage
+\section{\emph{Dyncall} C library API}
+
+The library provides low-level functionality to make foreign function calls
+from different run-time environments. The flexibility is constrained by the
+set of supported types.
+
+\paragraph{C interface style conventions}
+
+This manual and the \product{dyncall} library's C interface {\tt "dyncall.h"}
+use the following C source code style.
+
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular*}{0.8\textwidth}{llll}
+\hline
+Subject    & C symbol & Details & Example \\
+\hline  
+Types      
+  & {\tt DC\group{type name}}      
+  & lower-case & \capi{DCint}, \capi{DCfloat}, \capi{DClong}, \ldots\\
+Structures 
+  & {\tt DC\group{structure name}} 
+  & camel-case 
+  & \capi{DCCallVM}\\
+Functions  & {\tt dc\group{function name}}  & camel-case & \capi{dcNewCallVM}, \capi{dcArgInt}, \ldots\\
+\hline
+\end{tabular*}
+\caption{C interface conventions}
+\label{sourcecode}
+\end{center}
+\end{table}
+
+\subsection{Supported C/C++ argument and return types}
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular*}{0.75\textwidth}{ll}
+\hline
+Type alias & C/C++ data type\\
+\hline
+DCbool     & \_Bool, bool\\
+DCchar     & char\\
+DCshort    & short\\
+DCint      & int\\
+DClong     & long\\
+DClonglong & long long\\
+DCfloat    & float\\
+DCdouble   & double\\
+DCpointer  & void*\\
+DCvoid     & void\\
+\hline
+\end{tabular*}
+\caption{Supported C/C++ argument and return types}
+\label{types}
+\end{center}
+\end{table}
+
+\pagebreak
+
+\subsection{Call Virtual Machine - CallVM}
+
+This \emph{CallVM} is the main entry to the functionality of the library.
+
+\paragraph{Types}
+
+\begin{lstlisting}[language=c]
+typedef void DCCallVM; /* abstract handle */
+\end{lstlisting}
+
+\paragraph{Details}
+The \emph{CallVM} is a state machine that manages all aspects of a function 
+call from configuration, argument passing up the actual function call on
+the processor.
+
+\subsection{Allocation}
+
+\paragraph{Functions}
+
+\begin{lstlisting}[language=c]
+DCCallVM* dcNewCallVM (DCsize size);
+void      dcFree(DCCallVM* vm);
+\end{lstlisting}
+
+\lstinline{dcNewCallVM} creates a new \emph{CallVM} object, where
+\lstinline{size} specifies the max size of the internal stack that will be
+allocated and used to bind arguments to. Use \lstinline{dcFree} to
+destroy the \emph{CallVM} object.\\
+\\
+This will allocate memory using the system allocators or custom ones provided
+custom \capi{dcAllocMem} and \capi{dcFreeMem} macros are defined to override the
+default behaviour. See \capi{dyncall\_alloc.h} for defails.
+
+
+\subsection{Error Reporting}
+
+\paragraph{Function}
+
+\begin{lstlisting}[language=c]
+DCint dcGetError(DCCallVM* vm);
+\end{lstlisting}
+
+Returns the most recent error state code out of the following:
+
+\paragraph{Errors}
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular*}{0.75\textwidth}{ll}
+\hline
+Constant & Description\\
+\hline
+\lstinline@DC_ERROR_NONE@             & No error occured. \\
+\lstinline@DC_ERROR_UNSUPPORTED_MODE@ & Unsupported mode, caused by \lstinline@dcMode()@ \\
+\hline
+\end{tabular*}
+\caption{CallVM calling convention modes}
+\label{errorcodes}
+\end{center}
+\end{table}
+
+\pagebreak
+
+\subsection{Configuration}
+
+\paragraph{Function}
+
+\begin{lstlisting}[language=c]
+void dcMode (DCCallVM* vm, DCint mode);
+\end{lstlisting}
+
+Sets the calling convention to use. Note that some mode/platform combination
+don't make any sense (e.g. using a PowerPC calling convention on a MIPS
+platform) and are silently ignored.
+
+\paragraph{Modes}
+
+\begin{table}[h]
+\begin{center}
+\begin{tabular*}{0.75\textwidth}{ll}
+\hline
+Constant & Description\\
+\hline
+\lstinline@DC_CALL_C_DEFAULT@            & C default function call for current platform\\
+\lstinline@DC_CALL_C_ELLIPSIS@           & C ellipsis function call (named arguments (before '...'))\\
+\lstinline@DC_CALL_C_ELLIPSIS_VARARGS@   & C ellipsis function call (variable/unnamed arguments (after '...'))\\
+\lstinline@DC_CALL_C_X86_CDECL@          & C x86 platforms standard call\\
+\lstinline@DC_CALL_C_X86_WIN32_STD@      & C x86 Windows standard call\\
+\lstinline@DC_CALL_C_X86_WIN32_FAST_MS@  & C x86 Windows Microsoft fast call\\
+\lstinline@DC_CALL_C_X86_WIN32_FAST_GNU@ & C x86 Windows GCC fast call\\
+\lstinline@DC_CALL_C_X86_WIN32_THIS_MS@  & C x86 Windows Microsoft this call\\
+\lstinline@DC_CALL_C_X86_WIN32_THIS_GNU@ & C x86 Windows GCC this call\\
+\lstinline@DC_CALL_C_X86_PLAN9@          & C x86 Plan9 call\\
+\lstinline@DC_CALL_C_X64_WIN64@          & C x64 Windows standard call\\
+\lstinline@DC_CALL_C_X64_SYSV@           & C x64 System V standard call\\
+\lstinline@DC_CALL_C_PPC32_DARWIN@       & C ppc32 Mac OS X standard call\\
+\lstinline@DC_CALL_C_PPC32_OSX@          & alias for DC\_CALL\_C\_PPC32\_DARWIN\\
+\lstinline@DC_CALL_C_PPC32_SYSV@         & C ppc32 SystemV standard call\\
+\lstinline@DC_CALL_C_PPC32_LINUX@        & alias for DC\_CALL\_C\_PPC32\_SYSV\\
+\lstinline@DC_CALL_C_PPC64@              & C ppc64 SystemV standard call\\
+\lstinline@DC_CALL_C_PPC64_LINUX@        & alias for DC\_CALL\_C\_PPC64\\
+\lstinline@DC_CALL_C_ARM_ARM@            & C arm call (arm mode)\\
+\lstinline@DC_CALL_C_ARM_THUMB@          & C arm call (thumb mode)\\
+\lstinline@DC_CALL_C_ARM_ARM_EABI@       & C arm eabi call (arm mode)\\
+\lstinline@DC_CALL_C_ARM_THUMB_EABI@     & C arm eabi call (thumb mode)\\
+\lstinline@DC_CALL_C_ARM_ARMHF@          & C arm call (arm hardfloat - e.g. raspberry pi)\\
+\lstinline@DC_CALL_C_ARM64@              & C arm64 call (AArch64)\\
+\lstinline@DC_CALL_C_MIPS32_EABI@        & C mips32 eabi call\\
+\lstinline@DC_CALL_C_MIPS32_PSPSDK@      & alias for DC\_CALL\_C\_MIPS32\_EABI (deprecated)\\
+\lstinline@DC_CALL_C_MIPS32_O32@         & C mips32 o32 call\\
+\lstinline@DC_CALL_C_MIPS64_N64@         & C mips64 n64 call\\
+\lstinline@DC_CALL_C_MIPS64_N32@         & C mips64 n32 call\\
+\lstinline@DC_CALL_C_SPARC32@            & C sparc32 call\\
+\lstinline@DC_CALL_C_SPARC64@            & C sparc64 call\\
+\lstinline@DC_CALL_SYS_DEFAULT@          & C default syscall for current platform\\
+\lstinline@DC_CALL_SYS_X86_INT80H_BSD@   & C syscall for x86 BSD platforms\\
+\lstinline@DC_CALL_SYS_X86_INT80H_LINUX@ & C syscall for x86 Linux\\
+\lstinline@DC_CALL_SYS_PPC32@            & C syscall for ppc32 Linux\\
+\hline
+\end{tabular*}
+\caption{CallVM calling convention modes}
+\label{callingconventionmodes}
+\end{center}
+\end{table}
+
+\paragraph{Details}
+
+\lstinline@DC_CALL_C_DEFAULT@ is the default standard C call on the target
+platform. It uses the standard C calling convention.
+\lstinline@DC_CALL_C_ELLIPSIS@ is used for C ellipsis calls which allow
+to build up a variable argument list.
+On many platforms, there is only one C calling convention. 
+The X86 platform provides a rich family of different calling conventions.
+\\
+
+
+\subsection{Machine state reset}
+
+\begin{lstlisting}[language=c]
+void dcReset(DCCallVM* vm);
+\end{lstlisting}
+
+Resets the internal stack of arguments and prepares it for the selected mode.
+This function should be called after setting the call mode (using dcMode), but
+prior to binding arguments to the CallVM. Use it also when reusing a CallVM, as
+arguments don't get flushed automatically after a function call invocation.\\
+
+\subsection{Argument binding}
+
+\paragraph{Functions}
+
+\begin{lstlisting}[language=c]
+void dcArgBool    (DCCallVM* vm, DCbool     arg);
+void dcArgChar    (DCCallVM* vm, DCchar     arg);
+void dcArgShort   (DCCallVM* vm, DCshort    arg);
+void dcArgInt     (DCCallVM* vm, DCint      arg);
+void dcArgLong    (DCCallVM* vm, DClong     arg);
+void dcArgLongLong(DCCallVM* vm, DClonglong arg);
+void dcArgFloat   (DCCallVM* vm, DCfloat    arg);
+void dcArgDouble  (DCCallVM* vm, DCdouble   arg);
+void dcArgPointer (DCCallVM* vm, DCpointer  arg);
+\end{lstlisting}
+
+\paragraph{Details}
+
+Used to bind arguments of the named types to the CallVM object.
+Arguments should be bound in \emph{left-to-right} order regarding the C
+function prototype.\\
+
+\subsection{Call invocation}
+
+\paragraph{Functions}
+
+\begin{lstlisting}[language=c]
+DCvoid     dcCallVoid    (DCCallVM* vm, DCpointer funcptr);
+DCbool     dcCallBool    (DCCallVM* vm, DCpointer funcptr);
+DCchar     dcCallChar    (DCCallVM* vm, DCpointer funcptr);
+DCshort    dcCallShort   (DCCallVM* vm, DCpointer funcptr);
+DCint      dcCallInt     (DCCallVM* vm, DCpointer funcptr);
+DClong     dcCallLong    (DCCallVM* vm, DCpointer funcptr);
+DClonglong dcCallLongLong(DCCallVM* vm, DCpointer funcptr);
+DCfloat    dcCallFloat   (DCCallVM* vm, DCpointer funcptr);
+DCdouble   dcCallDouble  (DCCallVM* vm, DCpointer funcptr);
+DCpointer  dcCallPointer (DCCallVM* vm, DCpointer funcptr);
+\end{lstlisting}
+
+\paragraph{Details}
+Calls the function specified by \emph{funcptr} with the arguments bound to
+the \emph{CallVM} and returns. Use the function that corresponds to the
+dynamically called function's return value.\\
+\\
+After the invocation of the foreign function call, the argument values are
+still bound and a second call using the same arguments can be issued. If you
+need to clear the argument bindings, you have to reset the \emph{CallVM}.
+
+\subsection{Formatted argument binding and calls (ANSI C ellipsis interface)}
+
+\paragraph{Functions}
+
+\begin{lstlisting}[language=c]
+void dcArgF (DCCallVM* vm, const DCsigchar* signature, ...);
+void dcVArgF(DCCallVM* vm, const DCsigchar* signature, va_list args);
+void dcCallF (DCCallVM* vm, DCValue* result, DCpointer funcptr, 
+              const DCsigchar* signature, ...);
+void dcVCallF(DCCallVM* vm, DCValue* result, DCpointer funcptr, 
+              const DCsigchar* signature, va_list args);
+\end{lstlisting}
+
+\paragraph{Details}
+
+These functions can be used to operate \product{dyncall} via a printf-style
+functional interface, using a signature string encoding the argument types and 
+return type.
+\capi{dcArgF()} and \capi{dcVArgF()} just bind arguments to the \capi{DCCallVM}
+object, so any return value specified in the signature is ignored. \capi{dcCallF()}
+and \capi{dcVCallF()} also take a function pointer to call after binding the arguments.
+The return value will be stored in what \lstinline{result} points to.
+For more information about the signature format, refer to \ref{sigchar}.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_dyncallback_api.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,99 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2013 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\newpage
+\section{\emph{Dyncallback} C library API}
+
+This library extends \product{dyncall} with function callback support, allowing
+the user to dynamically create a callback object that can be called directly,
+or passed to functions expecting a function-pointer as argument.\\
+\\
+Invoking a \product{dyncallback} calls into a user-defined unified handler that 
+permits iteration and thus dynamic handling over the called-back-function's
+parameters.\\
+\\
+The flexibility is constrained by the set of supported types, though.\\
+\\
+For style conventions and supported types, see \product{dyncall} API section.
+In order to use \product{dyncallback}, include {\tt "dyncall\_callback.h"}.
+
+\subsection{Callback Object}
+
+The \emph{Callback Object} is the core component to this library.
+
+\paragraph{Types}
+
+\begin{lstlisting}[language=c]
+typedef struct DCCallback DCCallback;
+\end{lstlisting}
+
+\paragraph{Details}
+The \emph{Callback Object} is an object that mimics a fully typed function
+call to another function (a generic callback handler, in this case).\\
+\\
+This means, a pointer to this object is passed to a function accepting a pointer
+to a callback function \emph{as the very callback function pointer itself}.
+Or, if called directly, cast a pointer to this object to a function pointer and
+issue a call.
+
+
+\subsection{Allocation}
+
+\paragraph{Functions}
+
+\begin{lstlisting}[language=c]
+DCCallback* dcbNewCallback(const char*        signature,
+                           DCCallbackHandler* funcptr,
+                           void*              userdata);
+void dcbFreeCallback(DCCallback* pcb);
+\end{lstlisting}
+
+\lstinline{dcbNewCallback} creates and initializes a new \emph{Callback} object,
+where \lstinline{signature} is the needed function signature (format is the
+one outlined in the language bindings-section of this manual, see \ref{sigchar})
+of the function to mimic, \lstinline{funcptr} is a pointer to a callback handler,
+and \lstinline{userdata} a pointer to custom data that might be useful in the
+handler.
+Use \lstinline{dcbFreeCallback} to destroy the \emph{Callback} object.\\
+\\
+As with \capi{dcNewCallVM}/\capi{dcFree}, this will allocate memory using the
+system allocators or custom overrides.
+
+
+\subsection{Callback handler}
+
+The unified callback handler's declaration used when creating a \capi{DCCallback}
+is:
+
+\begin{lstlisting}
+char cbHandler(DCCallback* cb,
+               DCArgs*     args,
+               DCValue*    result,
+               void*       userdata);
+\end{lstlisting}
+
+\capi{cb} is a pointer to the \capi{DCCallback} object in use, \capi{args} allows
+for dynamic iteration over the called-back-function's arguments (input) and
+\capi{result} is a pointer to a \capi{DCValue} object in order to store the
+callback's return value (output, to be set by handler).\\
+Finally, \capi{userdata} is a pointer to some user defined data that can be
+set when creating the callback object.
+The handler itself returns a signature character (see \ref{sigchar}) specifying the
+data type used for \capi{result}.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_dynload_api.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,47 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\newpage
+\section{\product{Dynload} C library API}
+
+The \product{dynload} library encapsulates dynamic loading mechanisms and
+gives access to functions in foreign dynamic libraries and code modules.
+
+\subsection{Loading code}
+
+\begin{lstlisting}[language=c,label=dl-load]
+void* dlLoadLibrary(const char* libpath);
+void  dlFreeLibrary(void* libhandle);
+\end{lstlisting}
+
+\lstinline{dlLoadLibrary} loads a dynamic library at \lstinline{libpath}
+and returns a handle to it for use in \lstinline{dlFreeLibrary} and
+\lstinline{dlFindSymbol} calls.
+
+\lstinline{dlFreeLibrary} frees the loaded library with handle \lstinline{pLib}.
+
+\subsection{Retrieving functions}
+
+\begin{lstlisting}[language=c]
+void* dlFindSymbol(void* libhandle, const char* symbol);
+\end{lstlisting}
+
+returns a pointer to a symbol with name \lstinline{pSymbolName} in the
+library with handle \lstinline{pLib}, or returns a null pointer if the symbol cannot
+be found.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_epilog.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,93 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\newpage
+
+\section{Epilog}
+
+\subsection{Stability and security considerations}
+
+Since the \product{dyncall} library doesn't know anything about the called
+function itself (except its address), no parameter-type validation is done.
+This means that in order to avoid crashes, data corruption, etc., the user is
+required to ascertain the number and types of parameters. It is strongly advised to
+double check the parameter types of every function to be called, and not to
+call unknown functions at all.\\
+
+Consider a simple program that issues a call by directly passing some
+unchecked command line arguments to the call itself, or even worse, by indirectly
+choosing a library and a function to call without verification.
+Such unchecked input data can quite easily be used to intentionally crash the
+program or to hijack it by taking over control of the program flow.\\
+To put it in a nutshell, if not used with care, programs depending on the
+\product{dyncall}, \product{dyncallback} and \product{dynload} libraries,
+can be exploited as arbitrary function call dispatchers through manipulating
+of their input data. Successful exploits of programs like the example outlined above
+can be sed as very powerful tools for a wide variety of malicious attacks, \ldots
+ 
+
+\subsection{Embedding}
+
+The \product{dyncall} library strives to have a minimal set of dependencies,
+meaning no required runtime dependencies and usually only the necessary tools
+to build the library as build-time dependencies.
+The library uses some heap-memory to store the CallVM and uses by default the
+platform's \capi{malloc()} and \capi{free()} calls. However, providing custom
+\capi{dcAllocMem()} and \capi{dcFreeMem()} functions will override the default
+behaviour.
+See \shell{dyncall/dyncall\_alloc.h} for details.
+
+
+\subsection{Multi-threading}
+
+The \product{dyncall} library is thread-safe and reentrant, by means that it
+works correctly during execution of multiple threads if, and only if there is
+at most a single thread pushing arguments to one CallVM (invoking the call is
+always thread-safe, though). Since there's no limitation on the number of
+created CallVM objects, it is recommended to keep a copy for each thread if
+mutliple thread make use of \product{dyncall} at once.
+
+
+\subsection{Supported types}
+
+Currently, the \product{dyncall} library supports all of ANSI C's integer,
+floating point and pointer types as function call arguments as well as return
+values. Additionally, C++'s \capi{bool} and C99's \capi{\_Bool} types are supported.
+Due to the still rare and often incomplete support of the \capi{long double} type
+on various platforms, the latter is currently not officially supported.
+
+
+\subsection{Roadmap}
+
+The \product{dyncall} library should be extended by a wide variety of other
+calling conventions and ported to other and more esoteric platforms. With its low
+memory footprint it surely might come in handy on embedded systems.
+Furthermore, the authors plan to provide more scripting language bindings,
+examples, and other projects based on \product{dyncall}.\\
+Besides \product{dyncall} and \product{dyncallback}, the \product{dynload}
+library needs to be extended with support for other shared library formats
+(e.g. AmigaOS .library or GEM \cite{.ldg} files).
+
+
+\subsection{Related libraries}
+
+Besides the \product{dyncall} library, there are other free and open projects
+with similar goals. The most noteworthy libraries are libffi \cite{libffi},
+C/Invoke \cite{cinvoke} and libffcall \cite{libffcall}.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_literature.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,184 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\newpage
+
+\section{Literature}
+
+\begin{thebibliography}{14}
+\bibitem{Erlang}
+	Erlang/OTP\\
+	\url{http://www.erlang.org}
+
+\bibitem{Java}
+	Java Programming Language\\
+	\url{http://www.java.com/}
+
+\bibitem{Lua}
+	The Programming Language Lua\\
+	\url{http://www.lua.org/}
+
+\bibitem{Python}
+	Python Programming Language\\
+	\url{http://www.python.org/}
+
+\bibitem{R}
+	The R Project for Statistical Computing\\
+	\url{http://www.r-project.org/}
+
+\bibitem{Ruby}
+	Ruby Programming Language\\
+	\url{http://www.ruby-lang.org/}
+
+\bibitem{Go}
+	Go Programming Language\\
+	\url{http://www.golang.org/}
+
+\bibitem{x86cdecl}
+	cdecl calling convention / Calling conventions on the x86 platformn\\
+	\url{http://en.wikipedia.org/wiki/X86\_calling\_conventions#cdecl}\\
+	\url{http://www.angelcode.com/dev/callconv/callconv.html#thiscall}
+
+\bibitem{x86Winstdcall}
+	Windows stdcall calling convention / Microsoft calling conventions\\
+	\url{http://msdn.microsoft.com/en-us/library/zxk0tw93(vs.71).aspx}\\
+	\url{http://www.cs.cornell.edu/courses/cs412/2001sp/resources/microsoft-calling-conventions.html}
+
+\bibitem{x86Winfastcall}
+	Windows fastcall calling convention / Microsoft calling conventions\\
+	\url{http://msdn.microsoft.com/en-us/library/Aa271991}\\
+	\url{http://www.cs.cornell.edu/courses/cs412/2001sp/resources/microsoft-calling-conventions.html}
+
+\bibitem{x86GNUfastcall}
+	GNU fastcall calling conventio / Calling conventions on the x86 platformn\\
+	\url{http://www.ohse.de/uwe/articles/gcc-attributes.html#func-fastcall}\\
+	\url{http://www.angelcode.com/dev/callconv/callconv.html#thiscall}
+
+\bibitem{x86Borlandfastcall}
+	Borland register calling convention\\
+	\url{http://docwiki.embarcadero.com/RADStudio/en/Program\_Control#Register\_Convention}
+
+\bibitem{x86Watcomfastcall}
+	Watcom 32-bit register-based calling convention\\
+	\url{http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/function-calling-conventions.html#Watcall32R}
+	\url{http://www.openwatcom.org/index.php/Calling\_Conventions}
+
+\bibitem{x86Winthiscall}
+	Microsoft calling conventions / Calling conventions on the x86 platform\\
+	\url{http://www.cs.cornell.edu/courses/cs412/2001sp/resources/microsoft-calling-conventions.html}\\
+	\url{http://www.angelcode.com/dev/callconv/callconv.html#thiscall}
+
+\bibitem{x86GNUthiscall}
+	Calling conventions on the x86 platform\\
+	\url{http://www.angelcode.com/dev/callconv/callconv.html#thiscall}
+
+\bibitem{x86Pascal}
+	Pascal calling convention\\
+	\url{http://en.wikipedia.org/wiki/X86\_calling\_conventions#pascal}% better link?@@@
+
+\bibitem{x86Plan9}
+	Plan9 C compiler calling convention\\
+	\url{http://plan9.bell-labs.com/sys/doc/compiler.pdf}\\
+	\url{http://www.mail-archive.com/9fans@9fans.net/msg16421.html}
+
+\bibitem{ATPCS}
+	ARM-THUMB Procedure Call Standard\\
+	\url{http://infocenter.arm.com/help/topic/com.arm.doc.dui0056d/DUI0056.pdf}
+
+\bibitem{AAPCS}
+	Procedure Call Standard for the ARM Architecture\\
+	\url{http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C\_aapcs.pdf}
+
+\bibitem{AAPCS64}
+	Procedure Call Standard for the ARM 64-bit Architecture\\
+	\url{http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B\_aapcs64.pdf}
+
+\bibitem{AppleARM64}
+	ARM64 Function Calling Conventions\\
+	\url{https://developer.apple.com/library/ios/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARM64FunctionCallingConventions.html}
+
+\bibitem{armeabi}
+	Debian ARM EABI Port Wiki\\
+	\url{http://wiki.debian.org/ArmEabiPort}
+
+\bibitem{x64Win}
+	MSDN: x64 Software Conventions\\
+	\url{http://msdn.microsoft.com/en-us/library/ms235286\%28VS.80\%29.aspx}
+
+\bibitem{x64SysV}
+	System V Application Binary Interface - AMD64 Architecture Processor Supplement\\
+	\url{http://www.x86-64.org/documentation/abi.pdf}
+
+\bibitem{SPARCSysV}
+	System V Application Binary Interface - SPARC Processor Supplement\\
+	\url{http://www.sparc.com/standards/psABI3rd.pdf}
+
+\bibitem{ppcMacOSX}
+	Introduction to Mac OS X ABI Function Call Guide\\
+	\url{https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/LowLevelABI/000-Introduction/introduction.html}
+
+\bibitem{ppc32LSB}
+	Linux Standard Base Core Specification for PPC32 3.2 - Chapter 8. Low Level System Information\\
+	\url{http://refspecs.linuxbase.org/LSB\_3.2.0/LSB-Core-PPC32/LSB-Core-PPC32/callingsequence.html}
+
+\bibitem{ppceabi}
+	PowerPC Embedded Application Binary Interface 32-bit Implementation\\
+	\url{http://ftp.twaren.net/Unix/Sourceware/binutils/ppc-eabi-1995-01.pdf}
+
+\bibitem{ppceabiibm}
+	Developing PowerPC Embedded Application Binary Interface (EABI)\\
+	\url{http://www.ibm.com/chips/techlib/techlib.nsf/techdocs/852569B20050FF778525699700}
+
+\bibitem{ppcelf64abi}
+	64-bit PowerPC ELF Application Binary Interface Supplement 1.9\\
+	\url{http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html}
+
+\bibitem{devkitPro}
+	devkitPro - homebrew game development\\
+	\url{http://www.devkitpro.org/}
+
+\bibitem{psptoolchain}
+	psptoolchain - all the homebrew related material ps2dev.org\\
+	\url{http://ps2dev.org/psp/}
+
+\bibitem{.ldg}
+	a GEM Dynamical Library system for TOS computer\\
+	\url{http://ldg.sourceforge.net/}
+
+\bibitem{libffi}
+	libffi - a portable foreign function interface library\\
+	\url{http://sources.redhat.com/libffi/}
+
+\bibitem{cinvoke}
+	C/Invoke - library for connecting to C libraries at runtime\\
+	\url{http://www.nongnu.org/cinvoke/}
+
+\bibitem{libffcall}
+	libffcall - foreign function call libraries\\
+	\url{http://www.haible.de/bruno/packages-ffcall.html}
+
+\bibitem{universalbinary}
+	Universal Binary Programming Guidelines, Second Edition\\
+	\url{http://developer.apple.com/legacy/mac/library/documentation/MacOSX/Conceptual/universal\_binary/universal\_binary.pdf}
+
+\bibitem{seemipsruns}
+	See Mips Run, Second Edition, 2006, Dominic Sweetman
+
+\end{thebibliography}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_motivation.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,135 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\newpage
+\section{Motivation}
+
+Interoperability between programming languages is a desirable feature 
+in complex software systems. While functions in scripting languages and virtual machine
+languages can be called in a dynamic manner, statically compiled programming
+languages such as C, C++ and Objective-C lack this ability.\\
+The majority of systems use C function interfaces as their system-level 
+interface. Calling these (foreign) functions from within a dynamic environment 
+often involves the development of so called "glue code" on both sides,
+the use of external tools generating communication code, or integration
+of other middleware fulfilling that purpose. However, even inside a completely
+static environment, without having to bridge multiple languages, it
+can be very useful to call functions dynamically. Consider, for example, message 
+systems, dynamic function call dispatch mechanisms, without even knowing about the 
+target.\\
+
+The \product{dyncall} library project provides a clean and portable C interface
+to dynamically issue calls to foreign code using small call kernels written in
+assembly. Instead of providing code for every bridged function call, which
+unnecessarily results in code bloat, only a modest number of instructions are used
+to invoke all the calls.\\
+
+\subsection{Static function calls in C}
+
+The C programming language and its direct derivatives are limited in the way 
+function calls are handled. A C compiler regards a function call as a
+fully qualified atomic operation. In such a statically typed environment, this 
+includes the function call's argument arity and type, as well as the
+return type.\\
+
+
+\subsection{Anatomy of machine-level calls}
+
+The process of calling a function on the machine level yields a common pattern:
+
+\begin{enumerate}
+\item The target function's calling convention dictates how the stack is 
+prepared, arguments are passed, results are returned and how to clean up
+afterwards.
+\item Function call arguments are loaded in registers and on the stack according
+to the calling convention that take alignment constraints into account.
+\item Control flow transfer from caller to callee.
+\item Process return value, if any. Some calling conventions specify that
+the caller is responsible for cleaning up the argument stack.
+\end{enumerate}
+
+
+\newpage
+
+%\paragraph{Example}
+The following example depicts a C source and the corresponding assembly for the X86 32-bit processor architecture.
+
+
+\begin{lstlisting}[label=cfuncall,caption=C function call,language=C]
+extern void f(int x, double y,float z);
+void caller()
+{
+  f(1,2.0,3.0f);
+}
+\end{lstlisting}
+
+
+\begin{lstlisting}[label=x86asm,caption=Assembly X86 32-bit function call,language={[x86masm]Assembler}]
+.global f         ; external symbol 'f'
+caller:
+  push  40400000H ; 3.0f (32 bit float)
+                  ; 2.0  (64 bit float)
+  push  40000000H ;          low  DWORD
+  push  0H        ;          high DWORD 
+  push  1H        ; 1    (32 bit integer)
+  call  f         ; call 'f'
+  add   esp, 16   ; cleanup stack
+\end{lstlisting}
+
+
+\begin{comment}
+
+Due to the statically compiled nature of the
+language itself, the abstraction to the underlying hardware machine 
+These languages make an abstraction to the machine in a way, where a function 
+call is an atomic operation that has to be fully qualified at compilation time.
+
+This library follows the approach to abstract the construction of a function call
+and provides a small and clean implementation that is extendable by ports to
+compilers, operating-systems and processor architectures.
+The library solely uses a small kernel function to perform the actual call and
+does not require just-in-time code generation.
+
+General-purpose programming languages such as C\footnote{and derived programming
+languages such as C++ and Objective-C} are powerful statically compiled 
+programming languages that allow to implement low-level tasks. They abstract
+the underlying hardware to a degree where one is allowed to write functions
+that implement algorithms. At the same time, this
+
+Although C is very powerful and a portable language to implement time-critical
+and performance greedy application - it is limited in the way it handles calls
+to functions.
+
+General-purpose programming languages such as C and C++ are limited in the way 
+function calls are handled. These languages make an abstraction to the 
+underlying hardware architecture, so that writing algorithms can be done in a 
+portable way. While C is quite flexible in case of pointer arithmetics and
+I/O in main memory, the flexibility ends at the function call.
+
+In contrast to implementing algorithms, the function call in C is something 
+that is black-box to the language. 
+
+One can either fully bind and call a function at once or none at all.
+
+ construct a half-baked function-call without providing C code that performs a particular desired function call
+in regard to arity, argument type list, return type and calling convention.
+The compiler requires exact information about the desired calling convention, 
+arity, argument- and return types.
+\end{comment}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_overview.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,180 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\newpage
+
+\section{Overview}
+
+The \product{dyncall} library encapsulates architecture-, OS- and compiler-specific
+function call semantics in a virtual
+
+\begin{center}
+\emph{bind argument parameters from left to right and then call}
+\end{center}
+ 
+interface allowing programmers to call C functions 
+in a completely dynamic manner. In other words, instead of calling a function 
+directly, the \product{dyncall} library provides a mechanism to push the function parameters 
+manually and to issue the call afterwards.\\
+Since the idea behind this concept is similar to call dispatching mechanisms
+of virtual machines, the object that can be dynamically loaded with arguments,
+and then used to actually invoke the call, is called CallVM. It is possible to
+change the calling convention used by the CallVM at run-time.
+Due to the fact that nearly every platform comes with one or more distinct calling
+conventions, the \product{dyncall} library project intends to be a portable and open-source
+approach to the variety of compiler-specific binary interfaces, platform specific
+subtleties, and so on\ldots\\
+\\
+The core of the library consists of dynamic implementations of different 
+calling conventions written in assembler.
+Although the library aims to be highly portable, some assembler code needs to 
+be written for nearly every platform/compiler/OS combination.
+Unfortunately, there are architectures we just don't have at home or work. If 
+you want to see \product{dyncall} running on such a platform, feel free to send
+in code and patches, or even to donate hardware you don't need anymore.
+Check the {\bf supported platforms} section for an overview of the supported 
+platforms and the different calling convention sections for details about the 
+support.
+\\
+\begin{comment}
+@@@
+A typical binary library consists of symbolic names that map to variables and
+functions, the latter being pre-compiled for a
+specific calling convention and architecture. Given \product{dyncall} has been ported to
+that binary platform, it is possible to call such a function dynamically 
+without writing glue code or prototypes or even knowing its C declaration - 
+all that is needed is a pointer to it.\\
+To avoid confusion, note that from the point of view of the library all 
+parameters are handled the same way, even though the implementation might use
+other ways to pass parameters in order to suit specific calling conventions.\\
+\end{comment}
+
+
+\subsection{Features}
+
+\begin{itemize}
+\item A portable and extendable function call interface for the C programming 
+language.
+\item Ports to major platforms including Windows, Mac OS X, Linux, BSD derivates, iPhone and embedded devices and more, including lesser known and/or older platforms like Plan 9, Playstation Portable, Nintendo DS, etc..
+\item Add-on language bindings to Python, R, Ruby, Go, Erlang, Java, Lua, sh, ...
+\item High-level state machine design using C to model calling convention
+parameter transfer.
+\item One assembly \emph{hybrid} call routine per calling convention.
+\item Formatted call, vararg function API.
+\item Comprehensive test suite.
+\end{itemize}
+
+\pagebreak
+
+\subsection{Showcase}
+
+\paragraph{Foreign function call in C}
+This section demonstrates how the foreign function call is issued without, and then 
+with, the help of the \product{dyncall} library and scripting language
+bindings.
+
+\begin{lstlisting}[language=c,caption=Foreign function call in C]
+double call_as_sqrt(void* funptr, double x)
+{
+  return ( ( double (*)(double) )funptr)(x);
+}
+\end{lstlisting}
+
+\paragraph{\product{Dyncall} C library example}
+
+The same operation can be broken down into atomic pieces 
+(specify calling convention, binding arguments, invoking the call)
+using the \dc\ library.
+
+\begin{lstlisting}[language=c,caption=Dyncall C library example]
+#include <dyncall.h>
+double call_as_sqrt(void* funptr, double x)
+{
+  double r;
+  DCCallVM* vm = dcNewCallVM(4096);
+  dcMode(vm, DC_CALL_C_DEFAULT);
+  dcReset(vm);
+  dcArgDouble(vm, x);  
+  r = dcCallDouble(vm, funptr);
+  dcFree(vm);
+  return r;
+}
+\end{lstlisting}
+
+As you can see, this is more code after all, but completely dynamic.
+And definitely less than generated glue-code for each function call, if
+used correctly.
+
+The following are examples from script bindings:
+
+\paragraph{Python example}
+
+\begin{lstlisting}[language=python,caption=Dyncall Python bindings example]
+import pydc
+def call_as_sqrt(funptr,x):
+  return pydc.call(funptr,"d)d", x)
+\end{lstlisting}
+
+
+\paragraph{R example}
+
+\begin{lstlisting}[language=R,caption=Dyncall R bindings example,escapeinside={TEX}{XET}] % escapeinside is a workaround for issues with '<' in lstlisting+tex4ht
+library(rdyncall)
+call.as.sqrt TEX\textlessXET- function(funptr,x)
+  .dyncall(funptr,"d)d", x)
+\end{lstlisting}
+
+
+\pagebreak
+
+\subsection{Supported platforms/architectures}
+
+The feature matrix below gives a brief overview of the currently supported
+platforms. Different colors are used, where a green cell indicates a supported
+platform, yellow a platform that might work (but is untested) and red a platform
+that is currently unsupported. Gray cells are combinations that don't exist
+at the time of writing, or that are not taken into account.\\
+Light green cells mark complete feature support, as in dyncall and dyncallback. Dark green means basic support but lacking features (e.g. dyncall support, but not dyncallback).
+Please note that a green cell (even a light-green one) doesn't imply that all existing calling conventions/features/build tools are supported for that platform (but the most
+important).
+For detailed info about a platform's support consult the calling convention appendix.
+
+\begin{table}[h]
+\begin{tabular}{r|*{15}{c}}
+
+                               &                              &                            &                              &                                  &                                  &                               &                                     &                                     &                             &                             &                            &                            &                                &                              &                                \\
+                               & \ninetyb {\bf Alpha}\ninetye & \ninetyb {\bf ARM}\ninetye & \ninetyb {\bf ARM64}\ninetye & \ninetyb {\bf MIPS (32)}\ninetye & \ninetyb {\bf MIPS (64)}\ninetye & \ninetyb {\bf SuperH}\ninetye & \ninetyb {\bf PowerPC (32)}\ninetye & \ninetyb {\bf PowerPC (64)}\ninetye & \ninetyb {\bf m68k}\ninetye & \ninetyb {\bf m88k}\ninetye & \ninetyb {\bf x86}\ninetye & \ninetyb {\bf x64}\ninetye & \ninetyb {\bf Itanium}\ninetye & \ninetyb {\bf SPARC}\ninetye & \ninetyb {\bf SPARC64}\ninetye \\
+\hline                                                                                     
+{\bf Windows family}           & \marknotx                    & \markunkn                  & \marknotx                    & \marknotx                        & \marknotx                        & \marknotx                     & \marknotx                           & \marknotx                           & \marknotx                   & \marknotx                   & \markcmpl                  & \markcmpl                  & \marknimp                      & \marknotx                    & \marknotx                      \\
+{\bf Linux}                    & \marknimp                    & \markcmpl                  & \markcmpl                    & \markunkn                        & \markunkn                        & \marknotx                     & \markcmpl                           & \markcmpl                           & \marknotx                   & \marknotx                   & \markcmpl                  & \markcmpl                  & \marknotx                      & \markimpl                    & \markimpl                      \\
+{\bf Mac OS X/iOS/Darwin}      & \marknotx                    & \markcmpl                  & \markcmpl                    & \marknotx                        & \marknotx                        & \marknotx                     & \markcmpl                           & \markunkn                           & \marknotx                   & \marknotx                   & \markcmpl                  & \markcmpl                  & \marknotx                      & \marknotx                    & \marknotx                      \\
+{\bf FreeBSD}                  & \marknimp                    & \markcmpl                  & \marknotx                    & \markunkn                        & \markunkn                        & \marknimp                     & \markimpl                           & \markunkn                           & \marknotx                   & \marknotx                   & \markcmpl                  & \markcmpl                  & \marknimp                      & \markunkn                    & \markunkn                      \\
+{\bf NetBSD}                   & \marknimp                    & \markcmpl                  & \marknotx                    & \markimpl                        & \markunkn                        & \marknimp                     & \markimpl                           & \markunkn                           & \marknimp                   & \marknimp                   & \markcmpl                  & \markcmpl                  & \marknimp                      & \markimpl                    & \markunkn                      \\
+{\bf OpenBSD}                  & \marknimp                    & \markunkn                  & \marknotx                    & \markunkn                        & \markimpl                        & \marknimp                     & \markunkn                           & \markunkn                           & \marknimp                   & \marknimp                   & \markcmpl                  & \markcmpl                  & \marknimp                      & \markimpl                    & \markimpl                      \\
+{\bf DragonFlyBSD}             & \marknotx                    & \marknotx                  & \marknotx                    & \marknotx                        & \marknotx                        & \marknotx                     & \marknotx                           & \marknotx                           & \marknotx                   & \marknotx                   & \markcmpl                  & \markcmpl                  & \marknotx                      & \marknotx                    & \marknotx                      \\
+{\bf Solaris}                  & \marknotx                    & \marknotx                  & \marknotx                    & \marknotx                        & \marknotx                        & \marknotx                     & \marknotx                           & \marknotx                           & \marknotx                   & \marknotx                   & \markcmpl                  & \markcmpl                  & \marknotx                      & \markimpl                    & \markimpl                      \\
+{\bf Plan 9}                   & \marknimp                    & \marknimp                  & \marknotx                    & \marknimp                        & \marknotx                        & \marknotx                     & \marknimp                           & \marknotx                           & \marknotx                   & \marknotx                   & \markcmpl                  & \marknimp                  & \marknotx                      & \marknimp                    & \marknotx                      \\
+{\bf Haiku/BeOS}               & \marknotx                    & \marknotx                  & \marknotx                    & \marknotx                        & \marknotx                        & \marknotx                     & \marknotx                           & \marknotx                           & \marknotx                   & \marknotx                   & \markcmpl                  & \marknotx                  & \marknotx                      & \marknotx                    & \marknotx                      \\
+{\bf Minix}                    & \marknotx                    & \marknotx                  & \marknotx                    & \marknotx                        & \marknotx                        & \marknotx                     & \marknotx                           & \marknotx                           & \marknotx                   & \marknotx                   & \markcmpl                  & \marknotx                  & \marknotx                      & \marknotx                    & \marknotx                      \\
+{\bf Playstation Portable}     & \marknotx                    & \marknotx                  & \marknotx                    & \markimpl                        & \marknotx                        & \marknotx                     & \marknotx                           & \marknotx                           & \marknotx                   & \marknotx                   & \marknotx                  & \marknotx                  & \marknotx                      & \marknotx                    & \marknotx                      \\
+{\bf Nintendo DS}              & \marknotx                    & \markcmpl                  & \marknotx                    & \marknotx                        & \marknotx                        & \marknotx                     & \marknotx                           & \marknotx                           & \marknotx                   & \marknotx                   & \marknotx                  & \marknotx                  & \marknotx                      & \marknotx                    & \marknotx                      \\
+\end{tabular}
+\caption{Supported platforms}
+\end{table}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_tex4ht.cfg	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,22 @@
+\Preamble{xhtml,index=2,2,next,pic-tabular,charset="utf-8",p-width,pic-align}
+\Configure{VERSION}{} 
+\Configure{VERSION}{} 
+\Configure{DOCTYPE}{\HCode{<!DOCTYPE html>\Hnewline}} 
+\Configure{HTML}{\HCode{<html>\Hnewline}}{\HCode{\Hnewline</html>}}
+\Configure{@HEAD}{}
+\Configure{@HEAD}{\HCode{<meta http-equiv="content-type" content="text/html; charset=utf-8"/>\Hnewline}}
+\Configure{@HEAD}{\HCode{<meta name="resource-type" content="document"/>\Hnewline}}
+\Configure{@HEAD}{\HCode{<meta name="keywords"      content="C, function, dynamic, call, calling, convention, VM, abstraction, closure"/>\Hnewline}}
+\Configure{@HEAD}{\HCode{<meta name="distribution"  content="global"/>\Hnewline}}
+\Configure{@HEAD}{\HCode{<link rel="stylesheet" id="dyn-fonts-css" href="https://fonts.googleapis.com/css?family=Open+Sans:400,700&amp;subset=latin,latin-ext" type="text/css" media="all"/>\Hnewline}}
+% should this really rely on online content (dyncall's .css) even for an offline build? @@@
+\Configure{@HEAD}{\HCode{<link rel="stylesheet" href="http://dyncall.org/data/main.css" type="text/css" media="all"/>\Hnewline}}
+\Configure{@HEAD}{\HCode{<title>dyncall.org - dyncall Manual</title>\Hnewline}}
+
+%\DeclareMathSizes{12}{11}{7}{6}
+%\DeclareMathSizes{10}{9}{5}{4} 
+%\DeclareMathSizes{11}{10}{6}{5}
+
+\begin{document} 
+
+\EndPreamble
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/manual/manual_title.tex	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,78 @@
+%//////////////////////////////////////////////////////////////////////////////
+%
+% Copyright (c) 2007-2014 Daniel Adler <dadler@uni-goettingen.de>, 
+%                         Tassilo Philipp <tphilipp@potion-studios.com>
+%
+% Permission to use, copy, modify, and distribute this software for any
+% purpose with or without fee is hereby granted, provided that the above
+% copyright notice and this permission notice appear in all copies.
+%
+% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+%
+%//////////////////////////////////////////////////////////////////////////////
+
+\begin{titlepage}
+\begin{center}%
+	{\Huge {\bf \product{dyncall}}}\\%
+        \ \\%
+        Version 0.8\\%
+        \ \\%
+        \ \\%
+	\ \\%
+	Daniel {\sc Adler} \small{\tt{(dadler@uni-goettingen.de)}}\\%
+	Tassilo {\sc Philipp} \small{\tt{(tphilipp@potion-studios.com)}}%
+\end{center}
+%
+\begingroup%
+\setlength{\unitlength}{1mm}%
+\begin{picture}(0,0)(-38,110)%
+\includegraphics[scale=0.35]{dyncall_logo}%
+\end{picture}%
+\endgroup%
+%\begingroup
+%\setlength{\unitlength}{1bp}%
+%\begin{picture}(250,400)%
+%\end{picture}%
+%\endgroup
+%
+%
+%\setlength{\unitlength}{1mm}
+%\begin{picture}(60, 40)
+%\put(42,31){\circle*{1}}
+%\put(42,30){\circle{2}}
+%\put(40,31){\circle{4}}
+%\put(40,30){\circle{8}}
+%\put(41,31){\circle{16}}
+%\put(41,30){\circle{32}}
+%\put(19,31){\circle{1}}
+%\put(20,30){\circle*{2}}
+%\put(21,31){\circle{3}}
+%\put(19,30){\circle{4}}
+%\put(21,31){\circle{5}}
+%\put(20,30){\circle{6}}
+%\put(19,31){\circle{7}}
+%\put(20,30){\circle{8}}
+%\put(19,31){\circle{9}}
+%\put(20,30){\circle{10}}
+%\put(21,31){\circle{11}}
+%\put(20,30){\circle{12}}
+%\put(21,31){\circle{13}}
+%\put(20,30){\circle{14}}
+%\put(20,12){\circle*{3}}
+%\put(23,10){\circle*{2}}
+%\put(27, 9){\circle*{3}}
+%\put(32,10){\circle*{4}}
+%\put(37,12){\circle*{5}}
+%\end{picture}
+%
+\begin{center}
+	\today
+\end{center}
+\end{titlepage}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,53 @@
+# Package: dyncall
+# File: dyncall/CMakeLists.txt
+# Description: DynCall library cmake files
+# License:
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>
+# 
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+if(MSVC)
+  if(CMAKE_SIZEOF_VOID_P MATCHES 4)
+    set(ASM_SRC dyncall_call_x86_generic_masm.asm)	
+  else()
+    set(ASM_SRC dyncall_call_x64_generic_masm.asm)
+  endif()
+else()
+  set(ASM_SRC dyncall_call.S)
+  set_source_files_properties(${ASM_SRC} PROPERTIES LANGUAGE "C")
+endif()
+
+add_library(dyncall_s STATIC ${ASM_SRC} 
+  dyncall_vector.c 
+  dyncall_struct.c 
+  dyncall_api.c 
+  dyncall_callvm.c 
+  dyncall_callvm_base.c
+  dyncall_callf.c
+)
+
+install(TARGETS dyncall_s ARCHIVE DESTINATION lib )
+
+install(FILES 
+  dyncall_macros.h 
+  dyncall_config.h 
+  dyncall_types.h 
+  dyncall.h
+  dyncall_signature.h
+  dyncall_value.h
+  dyncall_callf.h
+  DESTINATION include
+)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/DynCallConfig.cmake	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+set(DYNCALL_INCLUDE_DIRS ${DynCall_SOURCE_DIR}/dyncall)
+set(DYNCALL_LIBRARIES dyncall_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,10 @@
+#include "../buildsys/dynmake/Makefile.base.M"
+
+all: _L(dyncall_s)
+
+_L(dyncall_s): _O(dyncall_vector) _O(dyncall_api) _O(dyncall_callvm) _O(dyncall_callvm_base) _O(dyncall_call) _O(dyncall_callf) _O(dyncall_struct)
+	_(AR) _(ARFLAGS) _(ARFLAG_OUT_PREFIX)_(TARGET) _(PREREQS)
+
+clean:
+	_(RM) _O(*)
+	_(RM) _L(dyncall_s)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,20 @@
+MAKEFILE = Makefile.embedded
+MAKE_CMD = ${MAKE} -f ${MAKEFILE} 
+TARGET	= libdyncall_s.a
+OBJS	= dyncall_vector.o dyncall_api.o dyncall_callvm.o dyncall_callvm_base.o dyncall_call.o dyncall_callf.o dyncall_struct.o
+HEADERS	= dyncall_macros.h dyncall_config.h dyncall_types.h dyncall.h dyncall_signature.h dyncall_value.h dyncall_callf.h dyncall_alloc.h
+all: ${TARGET}
+libdyncall_s.a: ${OBJS}
+	${AR} ${ARFLAGS} $@ ${OBJS}
+clean:
+	rm -f ${OBJS} ${TARGET}
+install: all
+	mkdir -p ${DESTDIR}${PREFIX}/include
+	cp ${HEADERS} ${DESTDIR}${PREFIX}/include
+	mkdir -p ${DESTDIR}${PREFIX}/lib
+	cp ${TARGET}  ${DESTDIR}${PREFIX}/lib
+	mkdir -p ${DESTDIR}${PREFIX}/man/man3
+	gzip -c dyncall.3 >${DESTDIR}${PREFIX}/man/man3/dyncall.3.gz
+.PHONY: all clean install
+osx-universal:
+	CFLAGS="${CFLAGS} -arch i386 -arch x86_64 -arch ppc" ASFLAGS="${ASFLAGS} -arch i386 -arch x86_64 -arch ppc" AR="libtool" ARFLAGS="-static -o" ${MAKE_CMD} all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+LIBNAME = dyncall
+OBJS = dyncall_vector.o dyncall_api.o dyncall_callvm.o dyncall_callvm_base.o dyncall_call.o dyncall_callf.o dyncall_struct.o
+HEADERS = ${VPATH}/dyncall_macros.h ${VPATH}/dyncall_config.h ${VPATH}/dyncall_types.h ${VPATH}/dyncall.h ${VPATH}/dyncall_signature.h ${VPATH}/dyncall_value.h ${VPATH}/dyncall_callf.h ${VPATH}/dyncall_alloc.h
+LIB = lib${LIBNAME}_s.a
+.PHONY: all clean install
+all: ${LIB}
+${LIB}: ${OBJS}
+	${AR} ${ARFLAGS} ${LIB} ${OBJS}
+clean:
+	rm -f ${OBJS} ${LIB}
+install: all
+	mkdir -p ${PREFIX}/lib 
+	mkdir -p ${PREFIX}/include
+	cp ${LIB} ${PREFIX}/lib
+	cp ${HEADERS} ${PREFIX}/include
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,62 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP=..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = libdyncall_s.lib #libdyncall.lib libdyncall.dll
+
+OBJS = dyncall_call_$(BUILD_ARCH)_generic_masm.obj dyncall_vector.obj dyncall_vector.obj dyncall_callvm.obj dyncall_callvm_base.obj dyncall_api.obj dyncall_callf.obj dyncall_struct.obj
+
+libdyncall_s.lib: $(OBJS)
+	echo Creating library $@ ...
+	$(AR) $(ARFLAGS) /OUT:"$@" $(OBJS) > nul
+
+libdyncall.dll libdyncall.lib: $(OBJS)
+	echo Creating shared/import library $@ ...
+	$(LD) /DLL $(LDFLAGS) $(OBJS) > nul
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = libdyncall_s.a
+
+OBJS = dyncall_call.o dyncall_vector.o dyncall_vector.o dyncall_callvm.o dyncall_callvm_base.o dyncall_api.o dyncall_callf.o
+
+libdyncall_s.a: $(OBJS)
+	echo Creating library $@ ...
+	$(AR) -rc $(ARFLAGS) "$@" $(OBJS)
+
+!ENDIF
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/README-Developer.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+Build with GCC Tool-Chain:
+
+  One assembly front-end *.S source file for all supported architectures:
+  
+  Usage:
+    gcc -c dyncall_call.S -o dyncall_call.o
+
+  Advantages:
+  - works fine with universal binary builds (fat binaries), e.g.:
+    gcc -arch i386 -arch ppc -arch x86_64 -c dyncall_call.S -o dyncall_call.o
+    
+  Details:
+  Simplified assembly file compilation via using a gigantic C Preprocessor switch include.
+  
+  source file "dyncall_call.S" selects the appropriate GAS/Apple assembly file
+  "dyncall_call_<arch>_<asmtool>.[sS]".
+  
+  archs so far:
+  
+  arm32_thumb		.s
+  arm32_arm		.s
+  mips		.s
+  ppc32		.s
+  x64			.s
+  x86			.S  [ uses C macros ]
+  
+  asmtools:
+  
+  gas	  - standard GNU assembler
+  apple - apple's assembler (based on GNU but is significantly different in syntax)
+  masm  - Microsoft assembler x86 and x64
+  nasm  - Netwide assembler for x86 and x64
+  
+  
+  NOTE: .S is used for preprocessing assembly files using gcc
+        .s is used directly with as
+      
+advantages:
+  - one way to build the kernel: 
+  
+     gcc -c dyncall_call.S -o dyncall_call.o
+     
+  - we can build now universal binaries
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,65 @@
+Library Design
+
+Overview:
+1. Call Kernel
+2. Utilities (memory and static sized vectors)
+3. Call State Machine
+4. Application Programming Interface
+5. extension: high-level formatted C API (ellipsis style)
+
+
+1. Call Kernel 
+
+Assembly Implementation:
+
+  gcc front-end: dyncall_call.S
+    uses the C preprocessor
+    will include the apropriate assembly source
+
+  architecture/tool specific sources:
+    dyncall_call_<ARCH>_<ASMTOOL>.[s|asm]
+
+
+2. Utilities (memory and static sized vectors)
+
+2.1 Memory Management
+
+C Interface: dyncall_alloc.h
+
+
+2.2 Static-sized Vector
+
+C Interface: dyncall_vector.h
+
+C Implementation: dyncall_vector.c
+
+
+3. Call State Machine
+
+C Implementation:
+  Top-level: dynall_callvm.c
+  Sub-levels: 
+    dyncall_callvm_<ARCH>.c
+
+
+4. Application Programming Interface
+
+C Header:
+  Top-level: dyncall.h
+  Sub-level headers: 
+    dyncall_macros.h 
+    dyncall_config.h 
+    dyncall_types.h 
+C Implementation: dyncall_api.c
+
+
+5. Extension: High-level C API (ellipsis style)
+
+C Header:
+  Top-level: dyncall_callf.h
+  Sub-level headers:
+    dyncall_value.h
+    dyncall_signature.h
+C Implementation: dyncall_callf.c
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/TODO	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,9 @@
+- implement structure passing for all calling conventinos and platforms
+- make sure that struct support for ellipsis calls are not forgotten (copy everything by value)
+
+- merge arm32_thumb_{gas/apple} and include thumb support for portasm
+- check dyncall_call_x64_traditional_cpp.S / try-sync with win64 masm
+- remove dyncall_call_x86_apple.s
+- x64 port cleanup: all x64 calling conventions on all platforms
+- remove dyncall_call_x86_masm.asm dyncall_call_x64_masm.asm
+- x64 verification: return values are passed via RAX and RDX, and XMM0 and XMM1.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall.3	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,199 @@
+.\" Copyright (c) 2007-2013 Daniel Adler <dadler AT uni-goettingen DOT de>, 
+.\"                         Tassilo Philipp <tphilipp AT potion-studios DOT com>
+.\" 
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd $Mdocdate$
+.Dt dyncall 3
+.Os
+
+.Sh NAME
+.Nm dyncall
+.Nd encapsulation of architecture-, OS- and compiler-specific function call
+semantics 
+.Sh SYNOPSIS
+.In dyncall.h
+.Ft DCCallVM *
+.Fn dcNewCallVM "DCsize size"
+.Ft void
+.Fn dcFree "DCCallVM * vm"
+.Ft void
+.Fn dcMode "DCCallVM * vm" "DCint mode"
+.Ft void
+.Fn dcReset "DCCallVM * vm"
+.Ft void
+.Fn dcArgBool "DCCallVM * vm" "DCbool arg"
+.Ft void
+.Fn dcArgChar "DCCallVM * vm" "DCchar arg"
+.Ft void
+.Fn dcArgShort "DCCallVM * vm" "DCshort arg"
+.Ft void
+.Fn dcArgInt "DCCallVM * vm" "DCint arg"
+.Ft void
+.Fn dcArgLong "DCCallVM * vm" "DClong arg"
+.Ft void
+.Fn dcArgLongLong "DCCallVM * vm" "DClonglong arg"
+.Ft void
+.Fn dcArgFloat "DCCallVM * vm" "DCfloat arg"
+.Ft void
+.Fn dcArgDouble "DCCallVM * vm" "DCdouble arg"
+.Ft void
+.Fn dcArgPointer "DCCallVM * vm" "DCpointer arg"
+.Ft DCvoid
+.Fn dcCallVoid "DCCallVM * vm" "DCpointer funcptr"
+.Ft DCbool
+.Fn dcCallBool "DCCallVM * vm" "DCpointer funcptr"
+.Ft DCchar
+.Fn dcCallChar "DCCallVM * vm" "DCpointer funcptr"
+.Ft DCshort
+.Fn dcCallShort "DCCallVM * vm" "DCpointer funcptr"
+.Ft DCint
+.Fn dcCallInt "DCCallVM * vm" "DCpointer funcptr"
+.Ft DClong
+.Fn dcCallLong "DCCallVM * vm" "DCpointer funcptr"
+.Ft DClonglong
+.Fn dcCallLongLong "DCCallVM * vm" "DCpointer funcptr"
+.Ft DCfloat
+.Fn dcCallFloat "DCCallVM * vm" "DCpointer funcptr"
+.Ft DCdouble
+.Fn dcCallDouble "DCCallVM * vm" "DCpointer funcptr"
+.Ft DCpointer
+.Fn dcCallPointer "DCCallVM * vm" "DCpointer funcptr"
+.Ft void
+.Fn dcArgF "DCCallVM * vm" "const DCsigchar * signature" "..."
+.Ft void
+.Fn dcVArgF "DCCallVM * vm" "const DCsigchar * signature" "va_list args"
+.Ft void
+.Fn dcCallF "DCCallVM * vm" "DCValue * result" "DCpointer funcptr" "const DCsigchar * signature" "..."
+.Ft void
+.Fn dcVCallF "DCCallVM * vm" "DCValue * result" "DCpointer funcptr" "const DCsigchar * signature" "va_list args"
+.Sh DESCRIPTION
+The
+.Nm
+library encapsulates architecture-, OS- and compiler-specific function call
+semantics in a virtual "bind argument parameters from left to right and then
+call" interface allowing programmers to call C functions in a completely
+dynamic manner.
+.Pp
+In other words, instead of calling a function directly, the
+.Nm
+library provides a mechanism to push the function parameters manually and to
+issue the call afterwards.
+.Pp
+Since the idea behind this concept is similar to call dispatching mechanisms
+of virtual machines, the object that can be dynamically loaded with arguments,
+and then used to actually invoke the call, is called CallVM. It is possible to
+change the calling convention used by the CallVM at run-time. Due to the fact
+that nearly every platform comes with one or more distinct calling conventions, the
+.Nm
+library project intends to be a portable and open-source approach to the variety of
+compiler-specific binary interfaces, platform specific subtleties, and so on...
+.Pp
+.Fn dcNewCallVM
+creates a new CallVM object, where
+.Ar size
+specifies the max size of the internal stack that will be allocated and used to
+bind the arguments to. Use
+.Fn dcFree
+to destroy the CallVM object.
+.Pp
+.Fn dcMode
+sets the calling convention to use. See dyncall.h for a list of
+available modes. Note that some mode/platform combinations don't make any
+sense (e.g. using a PowerPC calling convention on a MIPS platform) and are
+silently ignored.
+.Pp
+.Fn dcReset
+resets the internal stack of arguments and prepares it for the selected mode.
+This function should be called after setting the call mode (using dcMode), but
+prior to binding arguments to the CallVM. Use it also when reusing a CallVM, as
+arguments don't get flushed automatically after a function call invocation.
+.Pp
+.Fn dcArgBool ,
+.Fn dcArgChar ,
+.Fn dcArgShort ,
+.Fn dcArgInt ,
+.Fn dcArgLong ,
+.Fn dcArgLongLong ,
+.Fn dcArgFloat ,
+.Fn dcArgDouble
+and
+.Fn dcArgPointer
+are used to bind arguments of the named types to the CallVM object. Arguments should
+be bound in
+.Em "left to right"
+order regarding the C function prototype.
+.Pp
+.Fn dcCallVoid ,
+.Fn dcCallBool ,
+.Fn dcCallChar ,
+.Fn dcCallShort ,
+.Fn dcCallInt ,
+.Fn dcCallLong ,
+.Fn dcCallLongLong ,
+.Fn dcCallFloat ,
+.Fn dcCallDouble
+and
+.Fn dcCallPointer
+call the function with the bound arguments and returning the named type, where
+.Ar funcptr
+is a pointer to the function to call. After the invocation of the function
+call, the argument values are still bound to the CallVM and a second call
+using the same arguments can be issued. Call
+.Fn reset
+to clear the internal argument stack.
+.Pp
+.Fn dcArgF ,
+.Fn dcVArgF ,
+.Fn dcCallF
+and
+.Fn dcVCallF
+can be used to bind arguments in a printf-style call, using a signature
+string encoding the argument types and return type. The former 2 only bind
+the arguments to the
+.Ar vm
+object (and ignore return types specified in the
+signature), whereas the latter two issue a call to the given function pointer,
+afterwards. The return value will be stored in
+.Ar result .
+For information about the signature format, refer to the
+.Nm
+manual in PDF format.
+.Sh EXAMPLE
+Let's say, we want to make a call to the function:
+.Bd -literal -offset indent
+	double sqrt(double x); 
+.Ed
+.Pp
+Using the
+.Nm
+library, this function would be called as follows: 
+.Bd -literal -offset indent
+	double r;
+	DCCallVM* vm = dcNewCallVM(4096);
+	dcMode(vm, DC_CALL_C_DEFAULT);
+	dcReset(vm);
+	dcArgDouble(vm, 4.2373);
+	r = dcCallDouble(vm, (DCpointer)&sqrt);
+	dcFree(vm);
+.Ed
+.Sh SEE ALSO
+.Xr dyncallback 3 ,
+.Xr dynload 3
+and the
+.Nm
+manual (available in PDF format) for a way more detailed documentation of this
+library.
+.Sh AUTHORS
+.An "Daniel Adler" Aq dadler@uni-goettingen.de
+.An "Tassilo Philipp" Aq tphilipp@potion-studios.com
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,141 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall.h
+ Description: public header for library dyncall
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+/*
+
+  dyncall C API
+
+  REVISION
+  2015/01/16 added SYS_PPC32 system call
+  2007/12/11 initial
+  
+*/
+
+#ifndef DYNCALL_H
+#define DYNCALL_H
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+typedef struct DCCallVM_    DCCallVM;
+typedef struct DCstruct_    DCstruct;
+
+/* Supported Calling Convention Modes */
+
+#define DC_CALL_C_DEFAULT               0
+#define DC_CALL_C_ELLIPSIS            100
+#define DC_CALL_C_ELLIPSIS_VARARGS    101
+#define DC_CALL_C_X86_CDECL             1
+#define DC_CALL_C_X86_WIN32_STD         2
+#define DC_CALL_C_X86_WIN32_FAST_MS     3
+#define DC_CALL_C_X86_WIN32_FAST_GNU    4
+#define DC_CALL_C_X86_WIN32_THIS_MS     5
+#define DC_CALL_C_X86_WIN32_THIS_GNU    6
+#define DC_CALL_C_X64_WIN64             7
+#define DC_CALL_C_X64_SYSV              8
+#define DC_CALL_C_PPC32_DARWIN          9
+#define DC_CALL_C_PPC32_OSX            DC_CALL_C_PPC32_DARWIN /* alias */
+#define DC_CALL_C_ARM_ARM_EABI         10
+#define DC_CALL_C_ARM_THUMB_EABI       11
+#define DC_CALL_C_ARM_ARMHF            30
+#define DC_CALL_C_MIPS32_EABI          12
+#define DC_CALL_C_MIPS32_PSPSDK        DC_CALL_C_MIPS32_EABI /* alias - deprecated. */
+#define DC_CALL_C_PPC32_SYSV           13
+#define DC_CALL_C_PPC32_LINUX          DC_CALL_C_PPC32_SYSV /* alias */
+#define DC_CALL_C_ARM_ARM              14
+#define DC_CALL_C_ARM_THUMB            15
+#define DC_CALL_C_MIPS32_O32           16
+#define DC_CALL_C_MIPS64_N32           17
+#define DC_CALL_C_MIPS64_N64           18
+#define DC_CALL_C_X86_PLAN9            19
+#define DC_CALL_C_SPARC32              20
+#define DC_CALL_C_SPARC64              21
+#define DC_CALL_C_ARM64                22
+#define DC_CALL_C_PPC64                23
+#define DC_CALL_C_PPC64_LINUX          DC_CALL_C_PPC64 /* alias */
+#define DC_CALL_SYS_DEFAULT           200
+#define DC_CALL_SYS_X86_INT80H_LINUX  201
+#define DC_CALL_SYS_X86_INT80H_BSD    202
+#define DC_CALL_SYS_PPC32             210
+
+/* Error codes. */
+
+#define DC_ERROR_NONE                0
+#define DC_ERROR_UNSUPPORTED_MODE   -1
+
+DC_API DCCallVM*  dcNewCallVM     (DCsize size);
+DC_API void       dcFree          (DCCallVM* vm);
+DC_API void       dcReset         (DCCallVM* vm);
+
+DC_API void       dcMode          (DCCallVM* vm, DCint mode);
+
+DC_API void       dcArgBool       (DCCallVM* vm, DCbool     value);
+DC_API void       dcArgChar       (DCCallVM* vm, DCchar     value);
+DC_API void       dcArgShort      (DCCallVM* vm, DCshort    value);
+DC_API void       dcArgInt        (DCCallVM* vm, DCint      value);
+DC_API void       dcArgLong       (DCCallVM* vm, DClong     value);
+DC_API void       dcArgLongLong   (DCCallVM* vm, DClonglong value);
+DC_API void       dcArgFloat      (DCCallVM* vm, DCfloat    value);
+DC_API void       dcArgDouble     (DCCallVM* vm, DCdouble   value);
+DC_API void       dcArgPointer    (DCCallVM* vm, DCpointer  value);
+DC_API void       dcArgStruct     (DCCallVM* vm, DCstruct* s, DCpointer value);
+
+DC_API void       dcCallVoid      (DCCallVM* vm, DCpointer funcptr);
+DC_API DCbool     dcCallBool      (DCCallVM* vm, DCpointer funcptr);
+DC_API DCchar     dcCallChar      (DCCallVM* vm, DCpointer funcptr);
+DC_API DCshort    dcCallShort     (DCCallVM* vm, DCpointer funcptr);
+DC_API DCint      dcCallInt       (DCCallVM* vm, DCpointer funcptr);
+DC_API DClong     dcCallLong      (DCCallVM* vm, DCpointer funcptr);
+DC_API DClonglong dcCallLongLong  (DCCallVM* vm, DCpointer funcptr);
+DC_API DCfloat    dcCallFloat     (DCCallVM* vm, DCpointer funcptr);
+DC_API DCdouble   dcCallDouble    (DCCallVM* vm, DCpointer funcptr);
+DC_API DCpointer  dcCallPointer   (DCCallVM* vm, DCpointer funcptr);
+DC_API void       dcCallStruct    (DCCallVM* vm, DCpointer funcptr, DCstruct* s, DCpointer returnValue);
+
+DC_API DCint      dcGetError      (DCCallVM* vm);
+
+#define DEFAULT_ALIGNMENT 0
+DC_API DCstruct*  dcNewStruct      (DCsize fieldCount, DCint alignment);
+DC_API void       dcStructField    (DCstruct* s, DCint type, DCint alignment, DCsize arrayLength);
+DC_API void       dcSubStruct      (DCstruct* s, DCsize fieldCount, DCint alignment, DCsize arrayLength);  	
+/* Each dcNewStruct or dcSubStruct call must be paired with a dcCloseStruct. */
+DC_API void       dcCloseStruct    (DCstruct* s);  	
+DC_API DCsize     dcStructSize     (DCstruct* s);  	
+DC_API DCsize     dcStructAlignment(DCstruct* s);  	
+DC_API void       dcFreeStruct     (DCstruct* s);
+
+DC_API DCstruct*  dcDefineStruct  (const char* signature);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DYNCALL_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_alloc.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,41 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_alloc.h
+ Description: heap memory management interface (header only)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_ALLOC_H
+#define DYNCALL_ALLOC_H
+
+#ifndef dcAllocMem
+#include <stdlib.h>
+#define dcAllocMem malloc
+#endif
+
+#ifndef dcFreeMem
+#define dcFreeMem  free
+#endif
+
+#endif /* DYNCALL_ALLOC_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_api.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,168 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_api.c
+ Description: C interface to call vm
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall.h"
+#include "dyncall_callvm.h"
+#include "dyncall_alloc.h"
+
+void dcReset(DCCallVM* vm)
+{ 
+  vm->mVTpointer->reset(vm); 
+}
+
+void dcFree(DCCallVM* vm) 
+{ 
+  vm->mVTpointer->free(vm); 
+}
+
+void dcMode(DCCallVM* vm,DCint mode) 
+{ 
+  vm->mVTpointer->mode(vm,mode);
+  /* dcReset(vm); -- in order to support ellipsis calls, we need to allow
+   * a dcMode(callvm, DC_CALL_C_ELLIPSIS_VARARGS) */
+}
+
+void dcArgBool(DCCallVM* vm,DCbool x) 
+{ 
+  vm->mVTpointer->argBool(vm, x); 
+}
+
+void dcArgChar(DCCallVM* vm,DCchar x)
+{ 
+  vm->mVTpointer->argChar(vm, x); 
+}
+
+void dcArgShort(DCCallVM* vm,DCshort x) 
+{ 
+  vm->mVTpointer->argShort(vm, x); 
+}
+
+void dcArgInt(DCCallVM* vm,DCint x) 
+{ 
+  vm->mVTpointer->argInt(vm, x); 
+}
+
+void dcArgLong(DCCallVM* vm,DClong x) 
+{ 
+  vm->mVTpointer->argLong(vm, x); 
+}
+
+void dcArgLongLong(DCCallVM* vm, DClonglong x) 
+{ 
+  vm->mVTpointer->argLongLong(vm, x); 
+}
+
+void dcArgFloat(DCCallVM* vm, DCfloat x) 
+{ 
+  vm->mVTpointer->argFloat(vm, x); 
+}
+
+void dcArgDouble(DCCallVM* vm, DCdouble x) 
+{ 
+  vm->mVTpointer->argDouble(vm, x); 
+}
+
+void dcArgPointer(DCCallVM* vm, DCpointer x) 
+{ 
+  vm->mVTpointer->argPointer(vm, x); 
+}
+
+void dcArgStruct(DCCallVM* vm, DCstruct* s, DCpointer x) 
+{ 
+  vm->mVTpointer->argStruct(vm, s, x); 
+}
+
+
+void dcCallVoid(DCCallVM* vm, DCpointer funcptr) 
+{        
+  vm->mVTpointer->callVoid(vm, funcptr); 
+}
+
+DCchar dcCallChar(DCCallVM* vm, DCpointer funcptr) 
+{ 
+  return vm->mVTpointer->callChar(vm, funcptr); 
+}
+
+DCbool dcCallBool(DCCallVM* vm, DCpointer funcptr) 
+{ 
+  return vm->mVTpointer->callBool(vm, funcptr); 
+}
+
+DCshort dcCallShort(DCCallVM* vm, DCpointer funcptr) 
+{ 
+  return vm->mVTpointer->callShort(vm, funcptr); 
+}
+
+DCint dcCallInt(DCCallVM* vm, DCpointer funcptr) 
+{ 
+  return vm->mVTpointer->callInt(vm, funcptr); 
+}
+
+DClong dcCallLong(DCCallVM* vm, DCpointer funcptr) 
+{ 
+  return vm->mVTpointer->callLong(vm, funcptr); 
+}
+
+DClonglong dcCallLongLong(DCCallVM* vm, DCpointer funcptr) 
+{ 
+  return vm->mVTpointer->callLongLong(vm, funcptr); 
+}
+
+DCfloat dcCallFloat(DCCallVM* vm, DCpointer funcptr) 
+{ 
+  return vm->mVTpointer->callFloat(vm, funcptr); 
+}
+
+DCdouble dcCallDouble(DCCallVM* vm, DCpointer funcptr) 
+{ 
+  return vm->mVTpointer->callDouble(vm, funcptr); 
+}
+
+DCpointer dcCallPointer(DCCallVM* vm, DCpointer funcptr) 
+{ 
+  return vm->mVTpointer->callPointer(vm, funcptr); 
+}
+
+void dcCallStruct(DCCallVM* vm, DCpointer funcptr, DCstruct* s, DCpointer x) 
+{ 
+  vm->mVTpointer->callStruct(vm, funcptr, s, x); 
+}
+
+DCint dcGetError(DCCallVM *vm)
+{
+  return vm->mError;
+}
+
+const char* dcGetErrorString(int mode)
+{
+  switch(mode) {
+    case DC_ERROR_NONE: return "none";
+    case DC_ERROR_UNSUPPORTED_MODE: return "unsupported mode";
+    default: return "(unknown mode id)";
+  }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,79 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call.S
+ Description: assembly call kernel, auto-selected by gcc / Plan9 build system
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_macros.h"
+
+/* Plan9 */
+#if defined(DC__OS_Plan9)
+#  if defined(DC__Arch_Intel_x86)
+#    include "dyncall_call_x86_8a.s"
+#  else
+#    error Unsupported Architecture on Plan9.
+#  endif
+#elif defined(DC__C_MSVC)
+#  if defined(DC__OS_Win32)
+#    include "dyncall_call_x86_generic_masm.asm"
+#  elif defined(DC__OS_Win64)
+#    include "dyncall_call_x64_generic_masm.asm"
+#  endif
+#else
+#  if defined(DC__Arch_Intel_x86)
+#    include "dyncall_call_x86.S"
+#  elif defined(DC__Arch_AMD64)
+#    include "dyncall_call_x64-att.S"
+#  elif defined(DC__Arch_ARM_ARM)
+#    if defined(DC__ABI_ARM_HF)
+#      include "dyncall_call_arm32_arm_armhf.S"
+#    else
+#      include "dyncall_call_arm32_arm.S"
+#    endif
+#  elif defined(DC__Arch_ARM_THUMB)
+#    if defined(DC__OS_Darwin)
+#      include "dyncall_call_arm32_thumb_apple.s"
+#    else
+#      if defined(DC__ABI_ARM_HF)
+#        include "dyncall_call_arm32_thumb_armhf.S"
+#      else
+#        include "dyncall_call_arm32_thumb_gas.s"
+#      endif
+#    endif
+#  elif defined(DC__Arch_ARM64)
+#    include "dyncall_call_arm64.S"
+#  elif defined(DC__Arch_PPC32)
+#    include "dyncall_call_ppc32.S"
+#  elif defined(DC__Arch_PPC64)
+#    include "dyncall_call_ppc64.S"
+#  elif defined(DC__Arch_MIPS) || defined(DC__Arch_MIPS64)
+#    include "dyncall_call_mips_gas.S"
+#  elif defined(DC__Arch_Sparcv9)
+#    include "dyncall_call_sparc_v9.S"
+#  elif defined(DC__Arch_Sparc)
+#    include "dyncall_call_sparc.S"
+#  else
+#    error Unsupported Architecture.
+#  endif
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_arm32_arm.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,81 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_arm32_arm.S
+ Description: Call Kernel for ARM 32-bit ARM Architecture
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../portasm/portasm-arm.S"
+
+/* ============================================================================
+   DynCall Call Kernel for ARM 32-bit ARM Architecture
+   ----------------------------------------------------------------------------
+   C Interface:
+     dcCall_arm32_arm(DCpointer target, DCpointer argv, DCsize size);
+
+   This Call Kernel works across multiple OS.
+   It has been tested on Nintendo DS, Linux and Darwin(iOS).
+
+*/
+
+.text
+.code 32	/* ARM mode */
+.align 4
+GLOBAL_C(dcCall_arm32_arm)
+ENTRY_C(dcCall_arm32_arm)
+	/* Prolog. This function never needs to spill inside its prolog, so just store the permanent registers. */
+	mov	r12, r13	/* Stack ptr (r13) -> temporary (r12). */
+	stmdb	r13!, {r4-r12, r14}	/* Permanent registers and stack pointer (now in r12), etc... -> save area on stack (except counter). */
+	mov	r11, r12	/* Set frame ptr. */
+
+	/* Call. */
+	mov	r4, r0		/* r4 = 'fptr' (1st argument is passed in r0). */
+	mov	r5, r1		/* r5 = 'args' (2nd argument is passed in r1). */
+	mov	r6, r2		/* r6 = 'size' (3rd argument is passed in r2). */
+	ldmia	r5!, {r0-r3}	/* Load first 4 arguments for new call into r0-r3. */
+
+	subs	r6, r6, #16	/* Size of remaining arguments. */
+	ble	call		/* Jump to call if no more arguments. */
+
+	sub	r13, r13, r6	/* Set stack pointer to top of stack. */
+	and	r9, r6, #7	/* Align stack on 8 byte boundaries. */
+	sub	r13, r13, r9
+
+	mov	r8, r13		/* Temp. destination pointer. */
+	mov	r9, #0		/* Init byte counter. */
+
+pushArgs:
+	ldrb	r7, [r5, r9]	/* Load a byte into r7. */
+	strb	r7, [r8, r9]	/* Push byte onto stack. */
+	add	r9, r9, #1	/* Increment byte counter. */
+	cmp	r9, r6
+	bne	pushArgs
+
+call:
+				/* 'blx %r4' workaround for ARMv4t: */
+	mov	r14, r15	/*   Branch return address(r15) -> link register (r14) -- r15 always points to address of current + 2 instructions (= Epilog code). */ 
+	bx	r4		/*   Call (ARM/THUMB), available for ARMv4t. */
+
+	/* Epilog. */
+	ldmdb	r11, {r4-r11, r13, r15}	/* Restore permanent registers (ignore temporary (r12), restore stack ptr and program counter).@@@db not needed since we rewrite r13? */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_arm32_arm.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,62 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_arm32_arm.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall 32bit ARM32 family interface (ARM mode)
+
+  REVISION
+  2007/12/11 initial
+
+*/
+
+
+#ifndef DYNCALL_CALL_ARM32_ARM_H
+#define DYNCALL_CALL_ARM32_ARM_H
+
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* 
+** arm32 arm mode calling convention calls 
+**
+** - hybrid return-type call (bool ... pointer)
+**
+*/
+
+void dcCall_arm32_arm(DCpointer target, DCpointer stackdata, DCsize size);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* DYNCALL_CALL_ARM32_ARM_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_arm32_arm_armhf.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,97 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_arm32_arm_armhf.S
+ Description: Call Kernel for ARM 32-bit ARM Architecture - Hard Float
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../portasm/portasm-arm.S"
+
+/* ============================================================================
+   DynCall Call Kernel for ARM 32-bit ARM Architecture Hard-Float
+   ----------------------------------------------------------------------------
+   C Interface:
+     dcCall_arm32_armhf (DCpointer target, DCpointer argv, DCsize size, DCfloat* regdata);
+
+   This Call Kernel was tested on Raspberry Pi/Raspbian (Debian)
+*/
+
+.text
+.code 32	/* ARM mode */
+.arch armv6
+.fpu  vfp
+
+GLOBAL_C(dcCall_arm32_armhf)
+ENTRY_C(dcCall_arm32_armhf)
+
+	/* Prolog. This function never needs to spill inside its prolog, so just store the permanent registers. */
+	mov	r12 , r13	 /* Stack ptr (r13) -> temporary (r12). */
+	stmdb	r13!, {r4-r5, r11, r12, r14} /* Permanent registers and stack pointer (now in r12), etc... -> save area on stack (except counter). */
+
+	mov	r11 , r12	 /* Set frame ptr. */
+	mov	r4  , r0 	 /* r4 = 'fptr' (1st argument is passed in r0). */
+	mov	r5  , r1	 /* r5 = 'args' (2nd argument is passed in r1). */
+	
+	/* Load 16 single-precision registers (= 8 double-precision registers). */
+	flds	s0,  [r3,#0 ]
+	flds	s1,  [r3,#4 ]
+	flds	s2,  [r3,#8 ]
+	flds	s3,  [r3,#12]
+	flds	s4,  [r3,#16]
+	flds	s5,  [r3,#20]
+	flds	s6,  [r3,#24]
+	flds	s7,  [r3,#28]
+	flds	s8,  [r3,#32]
+	flds	s9,  [r3,#36]
+	flds	s10, [r3,#40]
+	flds	s11, [r3,#44]
+	flds	s12, [r3,#48]
+	flds	s13, [r3,#52]
+	flds	s14, [r3,#56]
+	flds	s15, [r3,#60]
+
+	sub	r2 , r2 , #16	
+	cmp     r2, #0
+	ble	armhf_call
+
+	sub	r13, r13, r2
+	and	r13, r13, #-8	/* align 8-byte. */
+
+	mov	r3, #0		/* Init byte counter. */
+	add	r1 , r1 , #16
+armhf_pushArgs:
+	ldr	r0, [r1,  +r3]	/* Load word into r0. */
+	str	r0, [r13, +r3]	/* Push word onto stack. */
+	add	r3, r3, #4	/* Increment byte counter. */
+	cmp	r2, r3
+	bne	armhf_pushArgs
+
+armhf_call:
+	ldmia	r5, {r0-r3}	/* Load first 4 arguments for new call into r0-r3. */
+				/* 'blx %r4' workaround for ARMv4t: */
+	mov	r14, r15	/*   Branch return address(r15) -> link register (r14) -- r15 always points to address of current + 2 instructions (= Epilog code). */ 
+	bx	r4		/*   Call (ARM/THUMB), available for ARMv4t. */
+
+	/* Epilog. */
+	ldmdb	r11, {r4-r5, r11, r13, r15}	/* Restore permanent registers (ignore temporary (r12), restore stack ptr and program counter).@@@db not needed since we rewrite r13? */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_arm32_arm_armhf.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_arm32_arm_armhf.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALL_ARM32_ARM_ARMHF_H
+#define DYNCALL_CALL_ARM32_ARM_ARMHF_H
+
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void dcCall_arm32_armhf(DCpointer target, DCpointer stackdata, DCsize size, DCfloat* p_s16);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* DYNCALL_CALL_ARM32_ARM_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_arm32_thumb.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,66 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_arm32_thumb.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall 32bit ARM32 family interface (THUMB mode)
+
+  REVISION
+  2008/08/12 initial
+
+*/
+
+
+#ifndef DYNCALL_CALL_ARM32_THUMB_H
+#define DYNCALL_CALL_ARM32_THUMB_H
+
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* 
+** arm32 thumb mode calling convention calls 
+**
+** - hybrid return-type call (bool ... pointer)
+**
+*/
+
+void dcCall_arm32_thumb(DCpointer target, DCpointer stackdata, DCsize size);
+
+/* Internally used to avoid compiler overwriting r0 and r1 in call stub */
+DClong     dcCall_arm32_thumb_word (DCpointer target, DCpointer stackdata, DCsize size);
+DClonglong dcCall_arm32_thumb_dword(DCpointer target, DCpointer stackdata, DCsize size);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* DYNCALL_CALL_ARM32_THUMB_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_arm32_thumb_apple.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,80 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_arm32_thumb_apple.s
+ Description: ARM Thumb call kernel implementation for apple assembler.
+ License:
+
+   Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+.text
+.thumb
+.code 16 
+.globl _dcCall_arm32_thumb
+
+/* Main dyncall call. */
+.thumb_func
+_dcCall_arm32_thumb:
+
+	/* Prolog. This function never needs to spill inside its prolog, so just store the permanent registers. */
+	push	{r4-r7, r14}	   	/* Frame ptr, permanent registers, link register -> save area on stack. */
+	mov		r7, r13	/* Set frame ptr. */
+
+	/* Call. */
+	mov		r4, r0	/* Move 'fptr' to r4 (1st argument is passed in r0). */
+
+	/* Disable 'thumb' address forcing... */
+
+	/* mov		r0, #1	*/	/* Assure that LSB is set to 1 (THUMB call). - Not Required and not useful for interworking calls */
+	/* orr		r4, r0 */
+	
+	mov		r5, r1	/* Move 'args' to r5 (2nd argument is passed in r1). */
+	mov		r6, r2	/* Move 'size' to r6 (3rd argument is passed in r2). */
+
+	cmp		r6, #16	/* Jump to call if no more than 4 arguments. */
+	ble		call
+
+	sub		r6, #16	/* Size of remaining arguments. */
+	mov		r0, r13	/* Set stack pointer to top of stack. */
+	sub		r0, r0, r6
+	lsr		r0, #3		/* Align stack on 8 byte boundaries. */
+	lsl		r0, #3
+	mov		r13, r0
+
+	add		r1, #16	/* Let r1 point to remaining arguments. */
+	mov		r2, #0		/* Init byte counter to 0. */
+.thumb_func
+pushArgs:
+	ldrb		r3, [r1, r2]		/* Load a byte into r3. */
+	strb		r3, [r0, r2]		/* Push byte onto stack. */
+	add		r2, r2, #1	/* Increment byte counter. */
+	cmp		r2, r6
+	bne		pushArgs
+.thumb_func
+call:
+	ldmia	r5!, {r0-r3}		/* Load first 4 arguments for new call into r0-r3. */
+					
+					/* 'blx %r4' workaround for ARMv4t in THUMB: */
+	blx		r4		/* Branch and force THUMB-mode return (LR bit 0 set). */
+
+	/* Epilog. */
+	mov		r13, r7		/* Reset stack ptr. */
+	pop		{r4-r7, r15}	/* Restore permanent registers and program counter. (Force a stay in THUMB in ARMv4, whether ARMv5 can return in ARM or THUMB depending on the bit 0. */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_arm32_thumb_armhf.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,122 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_arm32_thumb_armhf.S
+ Description: Call Kernel for ARM 32-bit ARM Architecture - Hard Float in Thumb code
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../portasm/portasm-arm.S"
+
+/* ============================================================================
+   DynCall Call Kernel for ARM 32-bit ARM Architecture Hard-Float
+   ----------------------------------------------------------------------------
+   C Interface:
+     dcCall_arm32_armhf (DCpointer target, DCpointer argv, DCsize size, DCfloat* regdata);
+
+   This Call Kernel was tested on Raspberry Pi/Raspbian (Debian)
+*/
+
+.text
+.thumb
+#ifndef __thumb2__
+.code 16
+#endif
+// .arch armv6
+// .fpu  vfp
+
+GLOBAL_C(dcCall_arm32_armhf)
+.thumb_func
+ENTRY_C(dcCall_arm32_armhf)
+
+	/* Prolog. This function never needs to spill inside its prolog, so just store the permanent registers. */
+
+	// mov	r12 , r13	 /* Stack ptr (r13) -> temporary (r12). */
+	// stmdb	r13!, {r4-r5, r11, r12, r14} /* Permanent registers and stack pointer (now in r12), etc... -> save area on stack (except counter). */
+
+	//mov	r11 , r12	 /* Set frame ptr. */
+	
+	push	{r4-r7, r14}
+	mov	r7  , r13
+
+	mov	r4  , r0 	 /* r4 = 'fptr' (1st argument is passed in r0). */
+	mov	r5  , r1	 /* r5 = 'args' (2nd argument is passed in r1). */
+	
+	/* Load 16 single-precision registers (= 8 double-precision registers). */
+	flds	s0,  [r3,#0 ]
+	flds	s1,  [r3,#4 ]
+	flds	s2,  [r3,#8 ]
+	flds	s3,  [r3,#12]
+	flds	s4,  [r3,#16]
+	flds	s5,  [r3,#20]
+	flds	s6,  [r3,#24]
+	flds	s7,  [r3,#28]
+	flds	s8,  [r3,#32]
+	flds	s9,  [r3,#36]
+	flds	s10, [r3,#40]
+	flds	s11, [r3,#44]
+	flds	s12, [r3,#48]
+	flds	s13, [r3,#52]
+	flds	s14, [r3,#56]
+	flds	s15, [r3,#60]
+
+	sub	r2 , #16	
+	cmp     r2, #0
+	ble	armhf_call
+
+
+	// sub	r13, r13, r2
+	// and	r13, #-8	/* align 8-byte. */
+	
+	mov	r6,  r13
+	sub	r6 , r2
+	// mov	r3 , #8
+	// neg	r3 , r3
+	// and	r6 , r3
+	lsr	r6 , #3
+	lsl	r6 , #3
+	mov	r13, r6
+
+	mov	r3, #0		/* Init byte counter. */
+	add	r1 , #16
+armhf_pushArgs:
+	ldr	r0, [r1,  +r3]	/* Load word into r0. */
+	// str	r0, [r13, +r3]	/* Push word onto stack. */
+	str	r0, [r6, +r3]	/* Push word onto stack. */
+	add	r3, #4		/* Increment byte counter. */
+	cmp	r2, r3
+	bne	armhf_pushArgs
+
+armhf_call:
+	ldmia	r5!, {r0-r3}	/* Load first 4 arguments for new call into r0-r3. */
+				/* 'blx %r4' workaround for ARMv4t: */
+	// mov	r14, r15	/*   Branch return address(r15) -> link register (r14) -- r15 always points to address of current + 2 instructions (= Epilog code). */ 
+	mov	r6, r15
+	add	r6, #5
+	mov	r14, r6
+	bx	r4		/*   Call (ARM/THUMB), available for ARMv4t. */
+
+	/* Epilog. */
+	// ldmdb	r11, {r4-r5, r11, r13, r15}	/* Restore permanent registers (ignore temporary (r12), restore stack ptr and program counter).@@@db not needed since we rewrite r13? */
+	mov	r13, r7
+	pop	{r4-r7, r15}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_arm32_thumb_gas.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,101 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_arm32_thumb_gas.s
+ Description: ARM Thumb call kernel implementation for GNU assembler.
+ License:
+
+   Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+.text
+#if !defined(__thumb2__)
+.code 16	/* THUMB mode */
+#endif
+
+.globl dcCall_arm32_thumb
+
+/* Main dyncall call. */
+.thumb_func
+dcCall_arm32_thumb:
+
+	/* Prolog. This function never needs to spill inside its prolog, so just store the permanent registers. */
+	push	{%r4-%r7, %r14}	   	/* Frame ptr, permanent registers, link register -> save area on stack. */
+	mov		%r7, %r13	/* Set frame ptr. */
+
+	/* Call. */
+	mov		%r4, %r0	/* Move 'fptr' to r4 (1st argument is passed in r0). */
+
+	/* Disable 'thumb' address forcing... */
+
+	/* mov		%r0, #1	*/	/* Assure that LSB is set to 1 (THUMB call). - Not Required and not useful for interworking calls */
+	/* orr		%r4, %r0 */
+	
+	mov		%r5, %r1	/* Move 'args' to r5 (2nd argument is passed in r1). */
+	mov		%r6, %r2	/* Move 'size' to r6 (3rd argument is passed in r2). */
+
+	cmp		%r6, #16	/* Jump to call if no more than 4 arguments. */
+	ble		call
+
+	sub		%r6, #16	/* Size of remaining arguments. */
+	mov		%r0, %r13	/* Set stack pointer to top of stack. */
+	sub		%r0, %r0, %r6
+	lsr		%r0, #3		/* Align stack on 8 byte boundaries. */
+	lsl		%r0, #3
+	mov		%r13, %r0
+
+	add		%r1, #16	/* Let r1 point to remaining arguments. */
+	mov		%r2, #0		/* Init byte counter to 0. */
+.thumb_func
+pushArgs:
+	ldrb	%r3, [%r1, %r2]		/* Load a byte into r3. */
+	strb	%r3, [%r0, %r2]		/* Push byte onto stack. */
+	add		%r2, %r2, #1	/* Increment byte counter. */
+	cmp		%r2, %r6
+	bne		pushArgs
+.thumb_func
+call:
+	ldmia	%r5!, {%r0-%r3}		/* Load first 4 arguments for new call into r0-r3. */
+					
+					/* 'blx %r4' workaround for ARMv4t in THUMB: */
+	mov		%r6,  %r15	/* Load PC+2 instructions from here */
+	add		%r6,  #5	/* Increment by 2 instructions (Address of 'Epilog') and set bit 0 (THUMB) */
+	mov		%r14, %r6	/* Store in link register. */
+	bx		%r4		/* Branch and force THUMB-mode return (LR bit 0 set). */
+
+	/* Epilog. */
+	mov		%r13, %r7	/* Reset stack ptr. */
+	pop		{%r4-%r7, %r15}	/* Restore permanent registers and program counter. (Force a stay in THUMB in ARMv4, whether ARMv5 can return in ARM or THUMB depending on the bit 0. */
+
+
+
+/* Internally used to avoid compiler overwriting r0 and r1 in call stub */
+.globl dcCall_arm32_thumb_word
+
+.thumb_func
+dcCall_arm32_thumb_word:
+	b	dcCall_arm32_thumb
+
+
+.globl dcCall_arm32_thumb_dword
+
+.thumb_func
+dcCall_arm32_thumb_dword:
+	b	dcCall_arm32_thumb
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_arm64.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,226 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_arm64.S
+ Description: Call Kernel for ARM 64-bit Architecture (aka ARM64, AArch64)
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                      Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../portasm/portasm-arm.S"
+
+/* ============================================================================
+   DynCall Call Kernel for ARM 64-bit ARM Architecture 
+   ----------------------------------------------------------------------------
+   C Interface:
+     dcCall_arm64 (DCpointer target, DCpointer data, DCsize size, DCfloat* regdata);
+
+   This Call Kernel was tested on Debian/qemu-debootstrap arm64 jessie.
+*/
+
+.text
+
+//
+// DynCall Back-End arm64 
+// 
+// Supported ABIs:
+// - 'ARM 64-bit AArch64 PCS' (@dadler: work in progress)
+// 
+// Useful Links:
+// - http://lxr.free-electrons.com/source/arch/arm64/kernel/stacktrace.c
+
+GLOBAL_C(dcCall_arm64)
+ENTRY_C(dcCall_arm64)
+
+// input:
+//   x0: target   (address of target)
+//   x1: data     (address of stack copy data)
+//   x2: size     (number of 'pair' 16-byte units)
+//   x3: regdata  (address of register data)
+
+// prolog:
+	
+	stp  x29, x30, [sp, #-16]!	// allocate frame
+	mov  x29,  sp
+
+// load 64-bit floating-point registers
+        
+	ldr  d0,  [x3,#0 ]
+	ldr  d1,  [x3,#8 ]
+	ldr  d2,  [x3,#16]
+	ldr  d3,  [x3,#24]
+	ldr  d4,  [x3,#32]
+	ldr  d5,  [x3,#40]
+	ldr  d6,  [x3,#48]
+	ldr  d7,  [x3,#56]
+
+// copy to stack
+	
+	sub  sp, sp, x2		// create call-frame
+
+	eor  x4, x4, x4		// x4: cnt = 0
+
+	mov  x5, x1		// x5: read pointer = data
+	mov  x6, sp		// x6: write pointer = sp
+
+.next:
+	cmp  x4, x2
+	b.ge  .done
+	
+	ldp  x7, x9, [x5], #16	// get pair from data
+	stp  x7, x9, [x6], #16	// put to stack
+	add  x4, x4, 16	        // advance 16 bytes
+
+	b   .next
+
+.done:
+	
+// rescue temp int registers
+
+	mov  x9 , x0			// x9: target
+	add  x10, x3, 64                // x3: integer reg buffer
+
+// load 64-bit integer registers ( 8 x 64-bit )
+	
+	// load register set
+
+	ldr  x0, [x10, #0]
+	ldr  x1, [x10, #8]
+	ldr  x2, [x10, #16]
+	ldr  x3, [x10, #24]
+	ldr  x4, [x10, #32]
+	ldr  x5, [x10, #40]
+	ldr  x6, [x10, #48]
+	ldr  x7, [x10, #56]
+	
+// call target:
+	
+	blr  x9
+
+// epilog:
+
+	mov  sp,  x29
+	ldp  x29, x30, [sp], 16
+
+	ret
+
+#if 0
+
+	
+
+// epilog:
+
+	add  sp, x28, 0		// remove call record
+	
+	ret
+
+	// -- OLD:
+
+	str  x27,      [sp, 16]			// use 1 local var (size)
+	
+
+        ldr  q0,  [x3,#0 ]
+	ldr  q1,  [x3,#8 ]
+	ldr  q2,  [x3,#16]
+	ldr  q3,  [x3,#24]
+	ldr  q4,  [x3,#32]
+	ldr  q5,  [x3,#40]
+	ldr  q6,  [x3,#48]
+	ldr  q7,  [x3,#56]
+
+	ldr  d8,  [x3,#32]
+	ldr  d9,  [x3,#36]
+	ldr  d10, [x3,#40]
+	ldr  d11, [x3,#44]
+	ldr  d12, [x3,#48]
+	ldr  d13, [x3,#52]
+	ldr  d14, [x3,#56]
+	ldr  d15, [x3,#60]
+
+
+	// load float ( 16 x 32-bit ) 
+
+        ldr  s0,  [x3,#0 ]
+	ldr  s1,  [x3,#4 ]
+	ldr  s2,  [x3,#8 ]
+	ldr  s3,  [x3,#12]
+	ldr  s4,  [x3,#16]
+	ldr  s5,  [x3,#20]
+	ldr  s6,  [x3,#24]
+	ldr  s7,  [x3,#28]
+	ldr  s8,  [x3,#32]
+	ldr  s9,  [x3,#36]
+	ldr  s10, [x3,#40]
+	ldr  s11, [x3,#44]
+	ldr  s12, [x3,#48]
+	ldr  s13, [x3,#52]
+	ldr  s14, [x3,#56]
+	ldr  s15, [x3,#60]
+ 
+	// call
+	
+	blr  x0
+
+	// epilog
+
+	ldp  x29, x30, [sp], 32
+	ret
+
+	// stack copy 
+
+	sub  sp, sp, x2	// decrement stack by size (x2) 
+	eor  x3, x3, x3	// x3 = counter, set to zero
+
+// .next:
+	ldr  x4, [x1, x3]  // x4 = 64-bit stack data
+	str  x4, [sp, x3]  // store to stack
+	add  x3, x3, #8
+	cmp  x3, x2
+	blt .next
+
+
+	// rescue int registers
+
+	mov  x9 , x0			// x9 = code ptr
+	mov  x10, x2
+
+	// load int ( 8 x 64-bit )
+
+	ldr  x0, [sp, #0]
+	ldr  x1, [sp, #8]
+	ldr  x2, [sp, #16]
+	ldr  x3, [sp, #24]
+	ldr  x4, [sp, #32]
+	ldr  x5, [sp, #40]
+	ldr  x6, [sp, #48]
+	ldr  x7, [sp, #56]
+
+	// call
+	
+	blr  x9
+
+	// epilog
+
+	ldp  x29, x30, [sp], 32
+	ret
+#endif
+ 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_arm64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_arm64.h
+ Description: ARM 64-bit
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                      Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALL_ARM64_DEBIAN_H
+#define DYNCALL_CALL_ARM64_DEBIAN_H
+
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void dcCall_arm64(DCpointer target, DCpointer data, DCsize size, DCpointer regdata);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* DYNCALL_CALL_ARM64_DEBIAN_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_mips.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,51 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_mips.h
+ Description: mips call-kernel C interfaces.
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall MIPS call kernel C interface for all ABIs
+
+  REVISION
+  2010/06/03 initial
+
+*/
+
+
+#ifndef DYNCALL_CALL_MIPS_H
+#define DYNCALL_CALL_MIPS_H
+
+/* supported abi-specific call kernels: */
+
+#include "dyncall_call_mips_o32.h"
+#include "dyncall_call_mips_eabi.h"
+#include "dyncall_call_mips_n64.h"
+#include "dyncall_call_mips_n32.h"
+
+typedef void (*dcCall_mips_common) (DCpointer target, DCpointer regdata_abispecific, DCsize stacksize, DCpointer stackdata);
+
+#endif /* DYNCALL_CALL_MIPS_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_mips_eabi.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,62 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_mips_eabi.h
+ Description: mips "eabi" abi call kernel C interface.
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALL_MIPS_EABI_H
+#define DYNCALL_CALL_MIPS_EABI_H
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Call-kernel register data: 
+
+   Details:
+   Two register content buffers for the corresponding register types 
+   integer and float are filled from CallVM code and then later at
+   call-kernel loaded into the registers.
+ */
+
+struct DCRegData_mips_eabi
+{
+  DCint   mIntData[8];
+  DCfloat mSingleData[8];
+};
+
+
+/* Call kernel. */
+
+void dcCall_mips_eabi(DCpointer target, struct DCRegData_mips_eabi*  regdata, DCsize stksize, DCpointer stkdata);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* DYNCALL_CALL_MIPS_EABI_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_mips_eabi_gas.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,115 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_mips_eabi_gas.s
+ Description: 
+ License:
+
+   Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+/*//////////////////////////////////////////////////////////////////////
+
+	dyncall_call_mips_eabi_gas.s
+
+	MIPS 32bit family of processors.
+	2008-01-03
+
+//////////////////////////////////////////////////////////////////////*/
+.text
+.globl dcCall_mips_eabi
+
+dcCall_mips_eabi:
+	/* $4 target function */
+ 	/* $5 register data */
+	/* $6 stack size */
+	/* $7 stack data */
+	addiu	$sp,$sp,-16
+	sw	$16,8($sp)
+	sw	$31,4($sp)
+	sw	$fp,0($sp)
+
+	move	$fp,$sp
+	
+	move	$2, $0
+	add	$2, 8
+	neg	$2
+	and	$sp, $2
+	add	$6, 7
+	and	$6, $2
+
+	move	$12,$4		/* target function */
+	move	$13,$5		/* register data   */
+	move    $16,$6		/* stack size      */
+	
+	sub	$sp,$sp,$16	/* allocate stack frame */
+	
+	/* copy stack data */
+
+.next:
+	beq	$6,$0, .skip
+	nop
+	addiu	$6,$6, -4
+
+	lw	$2, 0($7)
+	sw	$2, 0($sp)
+	addiu	$7,$7, 4
+	addiu	$sp,$sp, 4
+	j	.next
+	nop
+	
+.skip:	
+
+	sub	$sp,$sp,$16
+
+	/* load integer parameter registers */
+
+	lw	$4 , 0($13)
+	lw	$5 , 4($13)
+	lw	$6 , 8($13)
+	lw	$7 ,12($13)
+	lw	$8 ,16($13)
+	lw	$9 ,20($13)
+	lw	$10,24($13)
+	lw	$11,28($13)
+
+	/* load single-precise floating pointer parameter registers */
+
+	lwc1	$f12, 32($13)
+	lwc1	$f13, 36($13)
+	lwc1	$f14, 40($13)
+	lwc1	$f15, 44($13)
+	lwc1	$f16, 48($13)
+	lwc1	$f17, 52($13)
+	lwc1	$f18, 56($13)
+	lwc1	$f19, 60($13)	
+
+	jal	$12
+	nop
+
+	/* add	$sp,$sp,$16  */
+	move	$sp,$fp 
+
+	lw	$16,8($sp)
+	lw	$31,4($sp)
+	lw	$fp,0($sp)
+	addiu	$sp,$sp,16
+	j	$31
+	nop
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_mips_gas.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,37 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_mips_gas.S
+ Description: auto-select (via gnu c preprocessor) mips abi call kernel
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#if defined(DC__ABI_MIPS_O32)
+#include "dyncall_call_mips_o32_gas.s"
+#elif defined(DC__ABI_MIPS_N64)
+#include "dyncall_call_mips_n64_gas.s"
+#elif defined(DC__ABI_MIPS_N32)
+#include "dyncall_call_mips_n32_gas.s"
+#else
+#include "dyncall_call_mips_eabi_gas.s"
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_mips_n32.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,68 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_mips_n32.h
+ Description: mips "n32" ABI call-kernel C interface.
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALL_MIPS_N32_H
+#define DYNCALL_CALL_MIPS_N32_H
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+  two register-files for integer (promoted to 64-bit) and float (not promoted!)
+  are used.
+
+  arguments are transfered in a free slot on the corresponding register file.
+  the other register-file will be skipped by one.
+
+  float arguments are either loaded from single or double -
+  a auto-conversion into double and then loaded as double precision
+  turned out to fail for several tests.
+
+  therefore a union for storage of float or double is used instead.
+  a bitmask (mUseDouble) records which type is used and will be
+  interpreted in the call-kernel.
+*/
+
+struct DCRegData_mips_n32
+{
+  DClonglong   mIntData[8];
+  union { DCfloat f; DCdouble d; } mFloatData[8];
+  DClonglong   mUseDouble; /* bitmask: lower 8 bits specifies to use float or double from union array. */
+};
+
+void dcCall_mips_n32(DCpointer target, struct DCRegData_mips_n32* regdata, DCsize stksize, DCpointer stkdata);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* DYNCALL_CALL_MIPS_N64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_mips_n32_gas.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,192 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_mips_n32_gas.s
+ Description: mips "n32" abi call kernel implementation in GNU Assembler
+ License:
+
+   Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+	.section .mdebug.abiN32
+	.previous
+	.abicalls
+	.text
+	.align	2
+	.globl	dcCall_mips_n32
+	.ent	dcCall_mips_n32
+dcCall_mips_n32:
+
+	/* Stack-frame prolog */
+
+	.frame	$fp,64,$31		/* vars=16, regs=3/0, args=0, extra=16 */
+	.mask	0xd0000000,-8
+	.fmask	0x00000000,0
+	subu	$sp,$sp,64
+	sd	$31,48($sp)	/* save return address register (ra) */
+	sd	$30,40($sp)	/* save frame pointer register (fp) */
+	sd	$28,32($sp)	/* save global pointer register (gp) */
+	move	$fp,$sp
+
+
+	/* arguments: */
+		
+	/* $4 target function */
+ 	/* $5 register data */
+	/* $6 stack size */
+	/* $7 stack data */
+	
+
+	/* allocate argument stack space */
+
+	subu	$sp, $sp, $6
+	
+	/* copy stack data */
+
+	/* n64 abi call assumptions:
+           - stack data is 16-byte aligned.
+           - no extra-storage for arguments passed via registers.
+        */
+
+	/* $12  source pointer (parameter stack data) */
+	/* $14  destination (stack pointer) */
+	/* $6   byte count */
+
+	move	$12, $7
+	move	$14, $sp
+
+.next:
+	beq	$6, $0, .skip
+	nop
+	daddiu	$6, $6, -8
+	ld	$2, 0($12)
+	sd	$2, 0($14)
+	daddiu	$12,$12, 8
+	daddiu	$14,$14, 8
+	b	.next
+.skip:
+	move	$25, $4
+
+	/* load registers */
+
+	/* locals: */
+	/* $13 = register data */
+	/* $14 = useDouble flags */
+	move	$13, $5
+	ld	$14, 128($13)
+	
+	/* load integer parameter registers */
+
+	ld	$4 , 0($13)
+	ld	$5 , 8($13)
+	ld	$6 ,16($13)
+	ld	$7 ,24($13)
+	ld	$8 ,32($13)
+	ld	$9 ,40($13)
+	ld	$10,48($13)
+	ld	$11,56($13)
+
+	/* load float-or-double floating pointer parameter registers 
+           a 64-bit bitmask given at byte offset 128 of regdata indicates
+           if loading a float (bit cleared) or double (bit set), starting
+           at bit position 0 in bitmask.
+        */
+.t0:
+	and     $15, $14, 1
+	bgtz	$15, .d0
+.f0:
+	l.s	$f12, 64($13)
+	j	.t1
+.d0:
+	l.d	$f12, 64($13)
+
+.t1:
+	and	$15, $14, 2
+	bgtz	$15, .d1
+.f1:
+	l.s	$f13, 72($13)
+	j	.t2
+.d1:
+	l.d	$f13, 72($13)
+.t2:	
+	and	$15, $14, 4
+	bgtz	$15, .d2
+.f2:
+	l.s	$f14, 80($13)
+	j	.t3
+.d2:	
+	l.d	$f14, 80($13)
+.t3:
+	and	$15, $14, 8
+	bgtz	$15, .d3
+.f3:
+	l.s	$f15, 88($13)
+	j	.t4
+.d3:
+	l.d	$f15, 88($13)
+.t4:
+	and	$15, $14, 16
+	bgtz	$15, .d4
+.f4:
+	l.s	$f16, 96($13)
+	j	.t5
+.d4:
+	l.d	$f16, 96($13)
+.t5:
+	and	$15, $14, 32
+	bgtz	$15, .d5
+.f5:
+	l.s	$f17,104($13)
+	j	.t6
+.d5:
+	l.d	$f17,104($13)
+.t6:
+	and	$15, $14, 64
+	bgtz	$15, .d6
+.f6:
+	l.s	$f18,112($13)
+	j	.t7
+.d6:
+	l.d	$f18,112($13)
+.t7:
+	and	$15, $14, 128
+	bgtz	$15, .d7
+.f7:
+	l.s	$f19,120($13)
+	j	.fregend
+.d7:
+	l.d	$f19,120($13)
+
+.fregend:
+
+	/* jump-and-link to register $25 */
+
+	jal	$31, $25
+
+	/* no nop according to gcc assembly output */	
+
+	/* Stack-frame epilog */	
+	move	$sp,$fp 
+	ld	$31,48($sp)	/* restore ra register */
+	ld	$fp,40($sp)	/* restore fp register */
+	ld	$28,32($sp)	/* restore gp register */
+	daddu	$sp,$sp,64
+	j	$31
+	.end	dcCall_mips_n64
+	.size	dcCall_mips_n64, .-dcCall_mips_n64
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_mips_n64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,68 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_mips_n64.h
+ Description: mips "n64" ABI call-kernel C interface.
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALL_MIPS_N64_H
+#define DYNCALL_CALL_MIPS_N64_H
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+  two register-files for integer (promoted to 64-bit) and float (not promoted!)
+  are used.
+
+  arguments are transfered in a free slot on the corresponding register file.
+  the other register-file will be skipped by one.
+
+  float arguments are either loaded from single or double -
+  a auto-conversion into double and then loaded as double precision
+  turned out to fail for several tests.
+
+  therefore a union for storage of float or double is used instead.
+  a bitmask (mUseDouble) records which type is used and will be
+  interpreted in the call-kernel.
+*/
+
+struct DCRegData_mips_n64
+{
+  DClonglong   mIntData[8];
+  union { DCfloat f; DCdouble d; } mFloatData[8];
+  DClonglong   mUseDouble; /* bitmask: lower 8 bits specifies to use float or double from union array. */
+};
+
+void dcCall_mips_n64(DCpointer target, struct DCRegData_mips_n64* regdata, DCsize stksize, DCpointer stkdata);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* DYNCALL_CALL_MIPS_N64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_mips_n64_gas.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,192 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_mips_n64_gas.s
+ Description: mips "n64" abi call kernel implementation in GNU Assembler
+ License:
+
+   Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+	.section .mdebug.abi64
+	.previous
+	.abicalls
+	.text
+	.align	2
+	.globl	dcCall_mips_n64
+	.ent	dcCall_mips_n64
+dcCall_mips_n64:
+
+	/* Stack-frame prolog */
+
+	# .frame	$fp,64,$31		/* vars=16, regs=3/0, args=0, extra=16 */
+	# .mask	0xd0000000,-8
+	# .fmask	0x00000000,0
+	dsubu	$sp,$sp,64
+	sd	$31,48($sp)	/* save return address register (ra) */
+	sd	$30,40($sp)	/* save frame pointer register (fp) */
+	sd	$28,32($sp)	/* save global pointer register (gp) */
+	move	$fp,$sp
+
+
+	/* arguments: */
+		
+	/* $4 target function */
+ 	/* $5 register data */
+	/* $6 stack size */
+	/* $7 stack data */
+	
+
+	/* allocate argument stack space */
+
+	dsubu	$sp, $sp, $6
+	
+	/* copy stack data */
+
+	/* n64 abi call assumptions:
+           - stack data is 16-byte aligned.
+           - no extra-storage for arguments passed via registers.
+        */
+
+	/* $12  source pointer (parameter stack data) */
+	/* $14  destination (stack pointer) */
+	/* $6   byte count */
+
+	move	$12, $7
+	move	$14, $sp
+
+.next:
+	beq	$6, $0, .skip
+	# nop
+	daddiu	$6, $6, -8
+	ld	$2, 0($12)
+	sd	$2, 0($14)
+	daddiu	$12,$12, 8
+	daddiu	$14,$14, 8
+	b	.next
+.skip:
+	move	$25, $4
+
+	/* load registers */
+
+	/* locals: */
+	/* $13 = register data */
+	/* $14 = useDouble flags */
+	move	$13, $5
+	ld	$14, 128($13)
+	
+	/* load integer parameter registers */
+
+	ld	$4 , 0($13)
+	ld	$5 , 8($13)
+	ld	$6 ,16($13)
+	ld	$7 ,24($13)
+	ld	$8 ,32($13)
+	ld	$9 ,40($13)
+	ld	$10,48($13)
+	ld	$11,56($13)
+
+	/* load float-or-double floating pointer parameter registers 
+           a 64-bit bitmask given at byte offset 128 of regdata indicates
+           if loading a float (bit cleared) or double (bit set), starting
+           at bit position 0 in bitmask.
+        */
+.t0:
+	and     $15, $14, 1
+	bgtz	$15, .d0
+.f0:
+	l.s	$f12, 64($13)
+	j	.t1
+.d0:
+	l.d	$f12, 64($13)
+
+.t1:
+	and	$15, $14, 2
+	bgtz	$15, .d1
+.f1:
+	l.s	$f13, 72($13)
+	j	.t2
+.d1:
+	l.d	$f13, 72($13)
+.t2:	
+	and	$15, $14, 4
+	bgtz	$15, .d2
+.f2:
+	l.s	$f14, 80($13)
+	j	.t3
+.d2:	
+	l.d	$f14, 80($13)
+.t3:
+	and	$15, $14, 8
+	bgtz	$15, .d3
+.f3:
+	l.s	$f15, 88($13)
+	j	.t4
+.d3:
+	l.d	$f15, 88($13)
+.t4:
+	and	$15, $14, 16
+	bgtz	$15, .d4
+.f4:
+	l.s	$f16, 96($13)
+	j	.t5
+.d4:
+	l.d	$f16, 96($13)
+.t5:
+	and	$15, $14, 32
+	bgtz	$15, .d5
+.f5:
+	l.s	$f17,104($13)
+	j	.t6
+.d5:
+	l.d	$f17,104($13)
+.t6:
+	and	$15, $14, 64
+	bgtz	$15, .d6
+.f6:
+	l.s	$f18,112($13)
+	j	.t7
+.d6:
+	l.d	$f18,112($13)
+.t7:
+	and	$15, $14, 128
+	bgtz	$15, .d7
+.f7:
+	l.s	$f19,120($13)
+	j	.fregend
+.d7:
+	l.d	$f19,120($13)
+
+.fregend:
+
+	/* jump-and-link to register $25 */
+
+	jal	$31, $25
+
+	/* no nop according to gcc assembly output */	
+
+	/* Stack-frame epilog */	
+	move	$sp,$fp 
+	ld	$ra,48($sp)	/* restore ra register */
+	ld	$fp,40($sp)	/* restore fp register */
+	ld	$gp,32($sp)	/* restore gp register */
+	daddu	$sp,$sp,64
+	j	$ra
+	.end	dcCall_mips_n64
+	.size	dcCall_mips_n64, .-dcCall_mips_n64
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_mips_o32.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,71 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_mips_o32.h
+ Description: mips "o32" abi call kernel C interface.
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALL_MIPS_O32_H
+#define DYNCALL_CALL_MIPS_O32_H
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Call-kernel register data:
+
+  Details:
+  The structure holds the argument data for transfering float/double arguments
+  via registers as well.
+  The call-kernel implements loads two doubles, which involves four
+  32-bit floating pointer registers.
+  Float arguments map as following:
+  
+    float argument 0 is at floats[1] and
+    float argument 1 is at floats[3] of DCRegData_mips_o32 union.
+
+*/
+
+typedef struct DCRegData_mips_o32_
+{
+  union {
+    double d;
+    float  f[2];
+  } u[2];
+} DCRegData_mips_o32;
+
+
+/* Call kernel. */
+
+void dcCall_mips_o32(DCpointer target, DCRegData_mips_o32* regdata, DCsize stksize, DCpointer stkdata);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* DYNCALL_CALL_MIPS_O32_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_mips_o32_gas.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,109 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_mips_o32_gas.s
+ Description: mips "o32" abi call kernel implementation in GNU Assembler
+ License:
+
+   Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+	/* $4   target function */
+ 	/* $5   register data */
+	/* $6   stack size (min 16-byte aligned to 8-bytes already) */
+	/* $7   stack data */
+
+
+
+	.section .mdebug.abi32
+	.previous
+	.abicalls
+	.text
+	.align	2
+	.globl	dcCall_mips_o32
+	.ent	dcCall_mips_o32
+	.type	dcCall_mips_o32, @function
+dcCall_mips_o32:
+	.frame	$fp,40,$31		/* vars=8, regs=2/0, args=16, gp=8 */
+	.mask	0xc0000000,-4
+	.fmask	0x00000000,0
+	.set	noreorder
+	.set	nomacro
+	
+	addiu	$sp,$sp,-8
+	sw	$31,4($sp)	/* save link register */
+	sw	$fp,0($sp)	/* save frame pointer */
+	nop
+	move	$fp,$sp		/* frame pointer = sp */
+	sub	$sp, $sp, $6	/* increment stack */
+
+	/* copy stack data */
+
+	/* $12  source pointer (parameter stack data) */
+	/* $14  destination (stack pointer) */
+	/* $6   byte count */
+
+	move	$12, $7
+	move	$14, $sp
+
+.next:
+	beq	$6, $0, .skip
+	nop
+	lw	$2, 0($12)
+	nop
+	sw	$2, 0($14)
+	addiu	$12,$12, 4
+	addiu	$14,$14, 4
+	addiu	$6, $6, -4
+	j	.next
+	nop
+.skip:
+
+	/* load two double-precision floating-point argument registers ($f12, $f14) */
+
+	l.d     $f12, 0($5)
+	l.d     $f14, 8($5)
+	/* prepare call */
+
+
+	move	$12, $7		/* $12  stack data */
+	move	$25, $4		/* $25  target function */
+
+	/* load first four integer arguments ($4-$7) */
+
+	lw	$4, 0($12)
+	lw	$5, 4($12)
+	lw	$6, 8($12)
+	lw	$7,12($12)
+
+	/* call target function */
+
+	jalr	$25
+	nop
+	move	$sp,$fp 	/* restore stack pointer */
+	nop
+	lw	$31,4($sp)	/* restore return address */
+	lw	$fp,0($sp)	/* restore frame pointer */
+	addiu	$sp,$sp,8	/* end stack frame */
+	j	$31		/* return */
+	nop
+
+	.set	macro
+	.set	reorder
+	.end	dcCall_mips_o32 
+	.ident 	"handwritten"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_ppc32.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,291 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_ppc32.S
+ Description: Call Kernel for PowerPC 32-bit Architecture
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../portasm/portasm-ppc.S"
+
+/*
+  Call Kernel Implementations for PowerPC.
+  Supported Calling Conventions: sysv, darwin, syscall
+
+*/
+
+	.machine ppc
+	.text
+
+/* ============================================================================
+   DynCall Call Kernels for PPC32 Architecture
+   -------------------------------------------------------------------------
+   C Interface:
+     struct DCRegData { int i[8]; double d[13]; };
+     dcCall_ppc32_XXX(DCpointer target, struct DCRegData* pRegData, DCsize stacksize, DCptr stackdata);
+   
+   Where XXX is one of the following Calling Conventions:
+	darwin, sysv
+  
+  ChangeLog:
+  2015-01-15: Added support for system calls.
+  2011-04-03: Using portasm.
+  2009-01-09: Added Support for System V ABI.
+  2007-11-28: Initial Support for Darwin.
+
+*/
+
+/*---------------------------------------------------------------------------
+  
+  Call Kernel for ppc32 Darwin
+
+  Input:	
+    r3 : target address ptr 
+    r4 : register data ptr (8 x GPR 32 bytes, 13 x FPR 64 bytes)
+    r5 : stack data size  
+    r6 : stack data ptr
+
+  Details:
+  - Stack frames are always aligned on 16 byte
+  - The GPR3 .. GPR10 are loaded
+  - The FPR1 .. FPR13 are loaded
+  - No support for Vector Parameters so far. 
+  - Parameter Area (min. 32 Bytes)
+  - Linkage Area (24 Bytes)
+*/
+
+	.align 2
+GLOBAL_C(dcCall_ppc32_darwin)
+ENTRY_C(dcCall_ppc32_darwin)
+
+
+	mflr r0			/* r0 = return address */
+	stw  r0,8(r1)		/* store return address in caller link-area */
+
+	/* compute aligned stack-size */
+
+	/* add link area and align to 16 byte border */
+
+	addi r0,r5,24+15	/* r0 = stacksize + link area */
+                                
+	rlwinm r0,r0,0,0,27	/* r0 = r0 and -15 */
+				/* r0 = r0 and -15 */
+	neg r2,r0		/* r2 = -stacksize */
+
+	stwux r1,r1,r2		/* r1 = r1 - stacksize */
+
+	/* copy stack data */
+
+	subi r6,r6,4		/* r6 = 4 bytes before source stack ptr */
+	addi r7,r1,20		/* r7 = 4 bytes before target stack parameter-block */
+
+	srwi r5,r5,2		/* r5 = size in words */
+
+	cmpi cr0,r5,0		/* if stacksize != 0 .. */
+	beq  cr0,.osx_done
+
+	mtctr r5		/* copy loop */
+
+.osx_next:	
+	lwzu r0, 4(r6)		
+	stwu r0, 4(r7)
+	bdnz .osx_next
+
+.osx_done:
+
+	mr    r12, r3		/* r12 = target function */
+	mtctr r12		/* control register = target function */
+	mr     r2, r4		/* r2 = reg data */
+
+        /* load 8 integer registers */
+
+	lwz  r3 , 0(r2)
+	lwz  r4 , 4(r2)
+	lwz  r5 , 8(r2)
+	lwz  r6 ,12(r2)
+	lwz  r7 ,16(r2)
+	lwz  r8 ,20(r2)
+	lwz  r9 ,24(r2)
+	lwz  r10,28(r2)
+
+	/* load 13 float registers */
+
+	lfd  f1 ,32(r2)
+	lfd  f2 ,40(r2)
+	lfd  f3 ,48(r2)
+	lfd  f4 ,56(r2)
+	lfd  f5 ,64(r2)
+	lfd  f6 ,72(r2)
+	lfd  f7 ,80(r2)
+	lfd  f8 ,88(r2)
+	lfd  f9 ,96(r2)
+	lfd  f10,104(r2)
+	lfd  f11,112(r2)
+	lfd  f12,120(r2)
+	lfd  f13,128(r2)
+
+	/* branch */
+
+	bctrl
+
+	/* epilog */
+
+	lwz  r1, 0(r1)		/* restore stack */
+	lwz  r0, 8(r1)		/* r0 = return address */
+	mtlr r0			/* setup link register */
+	blr			/* return */
+
+/* ----------------------------------------------------------------------------
+
+  Call Kernel for ppc32 System 
+
+  Input:	
+    r3 : target address ptr 
+    r4 : register data ptr (8 x GPR 32 bytes, 8 x FPR 64 bytes)
+    r5 : stack data size  
+    r6 : stack data ptr
+
+  Details:
+   - Stack frames are always aligned on 16 byte
+   - Reserve GPR2 (System register)  
+   - The GPR3 .. GPR10 are loaded
+   - The FPR1 .. FPR8 are loaded
+   - No support for Vector Parameters so far. 
+
+   Frame structure:
+
+     on entry, parent frame layout:
+
+     offset
+     4:      LR save word (Callee stores LR in parent frame)
+     0:      parent stack frame (back-chain)
+
+     after frame initialization:
+
+    	stack size = ( (8+15) + stacksize ) & -(16)
+
+     ...     locals and register spills
+     8:      parameter list area
+     4:      LR save word (Callee stores LR in parent frame)
+     0:      parent stack frame (back-chain)
+*/
+
+	.align 2
+GLOBAL_C(dcCall_ppc32_sysv)
+ENTRY_C(dcCall_ppc32_sysv)
+	mflr r0			/* r0 = return address */
+	stw  r0,4(r1)		/* store r0 to link-area */
+
+	/* compute aligned stack-size */
+	
+	/* add link area (+8) and align to 16 byte (+15) */
+	
+	/* r0 = stacksize + frame parameter(back-chain link, this callee's call return address) */
+	addi r0,r5,8+15		/* r0 = r5 + 8 + 15 */
+	rlwinm r0,r0,0,0,27  	/* r0 = r0 and -15 */
+	neg r0,r0 		/* r0 = -r0 */
+	stwux r1,r1,r0 		/* store r1 and decrement */
+
+	/* copy stack data */
+
+	subi r6,r6,4		/* r6 = 4 bytes before source stack ptr */
+	                      
+			        /* 4 bytes before target stack parameter-block */
+	addi r7,r1,4		/* r7 = r1 + 8 offset - 4 displacement */
+
+	srwi r5,r5,2		/* r5 = size in words */
+
+	cmpi cr0,r5,0		/* if stacksize != 0 .. */
+	beq  cr0,.sysv_done
+
+	mtctr r5		/* copy loop */
+
+.sysv_next:	
+	lwzu r0, 4(r6)		
+	stwu r0, 4(r7)
+	bdnz .sysv_next
+
+.sysv_done:
+
+	/* this call support using ctr branch register */
+
+	mr    r12, r3		/* r12 = target function */
+	mtctr r12		/* control register = r12 */
+	mr    r11, r4		/* r11 = reg data */
+
+	/* load 8 integer registers */
+	
+	lwz  r3 , 0(r11)
+	lwz  r4 , 4(r11)
+	lwz  r5 , 8(r11)
+	lwz  r6 ,12(r11)
+	lwz  r7 ,16(r11)
+	lwz  r8 ,20(r11)
+	lwz  r9 ,24(r11)
+	lwz  r10,28(r11)
+
+	/* load 8 float registers */
+	
+	lfd  f1 ,32(r11)
+	lfd  f2 ,40(r11)
+	lfd  f3 ,48(r11)
+	lfd  f4 ,56(r11)
+	lfd  f5 ,64(r11)
+	lfd  f6 ,72(r11)
+	lfd  f7 ,80(r11)
+	lfd  f8 ,88(r11)
+	
+	creqv 6,6,6		/* used for ellipsis calls */
+	
+	bctrl 			/* branch with this call support */
+
+	/* epilog */
+
+	lwz  r1, 0(r1)		/* restore stack */
+	lwz  r0, 4(r1)		/* r0 = return address */
+	mtlr r0			/* setup link register */
+	blr			/* return */
+
+
+	.align 2
+
+GLOBAL_C(dcCall_ppc32_syscall)
+ENTRY_C(dcCall_ppc32_syscall)
+	mflr r0			/* r0 = return address */
+	stw  r0,4(r1)		/* store r0 to link-area */
+	li   r0, -8
+	stwux r1,r1,r0 		/* store r1 and decrement */
+	
+	mr   r0, r3		/* r0 = syscall number ( passed as 'target function' ) */
+	mr   r11, r4		/* r11 = reg data */
+	lwz  r3 , 0(r11)
+	lwz  r4 , 4(r11)
+	lwz  r5 , 8(r11)
+	lwz  r6 ,12(r11)
+	lwz  r7 ,16(r11)
+	sc
+
+	lwz  r1, 0(r1)		/* restore stack */
+	lwz  r0, 4(r1)		/* r0 = return address */
+	mtlr r0			/* setup link register */
+	blr
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_ppc32.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,62 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_ppc32.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_PPC32_H
+#define DYNCALL_PPC32_H
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct DCRegData_ppc32_
+{
+  DCint     mIntData[8];
+  DCdouble  mFloatData[13];	/* 13 for darwin, 8 for sysv */
+};
+
+/* 
+** PowerPC 32-bit calling convention call
+**
+** - hybrid return-type call (bool ... pointer)
+**
+*/
+
+/* Darwin ABI */
+
+void     dcCall_ppc32_darwin (DCpointer target, struct DCRegData_ppc32_* ppc32data, DCsize stksize, DCpointer stkdata);
+
+/* System V (Linux) ABI */
+
+void     dcCall_ppc32_sysv (DCpointer target, struct DCRegData_ppc32_* ppc32data, DCsize stksize, DCpointer stkdata);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DYNCALL_PPC32_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_ppc64.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,197 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_ppc64.S
+ Description: Call Kernel for PowerPC 64-bit Architecture
+ License:
+
+   Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "../portasm/portasm-ppc.S"
+
+/*
+  Call Kernel Implementations for PowerPC64.
+*/
+
+/* ============================================================================
+   DynCall Call Kernels for PPC64 Architecture
+   -------------------------------------------------------------------------
+   C Interface:
+     struct DCRegData { int i[8]; double d[13]; };
+     dcCall_ppc64(DCpointer target, struct DCRegData* pRegData, DCsize stacksize, DCptr stackdata);
+   
+  ChangeLog:
+  2014-08-07: Initial Support
+
+*/
+
+/* ----------------------------------------------------------------------------
+
+  Call Kernel for ppc64
+
+  Input:
+    r3 : target address ptr 
+    r4 : register data ptr (8 x GPR 64 bytes, 13 x FPR 64 bytes)
+    r5 : stack data size  
+    r6 : stack data ptr
+
+  Details:
+   - Stack frames are always aligned on 16 byte
+   - Reserve GPR2 (System register)  
+   - The GPR3 .. GPR10 are loaded
+   - The FPR1 .. FPR8 are loaded
+   - No support for Vector Parameters so far. 
+   - Parameter Area (min. v1:64 Bytes v2:0 Byte)
+   - Frame Header Area (v1:48 Bytes v2:32 Bytes)
+
+
+   Frame structure:
+
+     on entry, parent frame layout:
+
+     offset
+     16:     LR save word (Callee stores LR in parent frame)
+     0:      parent stack frame (back-chain)
+
+     after frame initialization:
+
+    	v1: stack size = ( (48+64+8+15) + stacksize ) & -(16)
+    	v2: stack size = ( (32+0+8+15) + stacksize ) & -(16)
+
+     ...     locals and register spills
+     48 or 32:      parameter list area
+     16:      LR save word (Callee stores LR in parent frame)
+     0:      parent stack frame (back-chain)
+*/
+
+/* Constants */
+#if DC__ABI_PPC64_ELF_V != 2
+STACK_MIN  = 120  /* v1 */
+TOC_SAVE   = 40
+PARAM_SAVE = 48
+#else
+STACK_MIN  = 40   /* v2 */
+TOC_SAVE   = 24
+PARAM_SAVE = 32
+#endif
+
+.text
+	.global dcCall_ppc64
+	.type dcCall_ppc64, @function
+#if DC__ABI_PPC64_ELF_V != 2
+	.section .opd, "aw"
+	.align 3
+#endif
+
+dcCall_ppc64:
+#if DC__ABI_PPC64_ELF_V != 2
+	.quad .dcCall_ppc64, .TOC.@tocbase, 0
+	.previous
+	.global .dcCall_ppc64
+
+.dcCall_ppc64:
+#else
+0:	addis r2, r12,.TOC.-0b@ha
+	addi  r2, r2,.TOC.-0b@l
+	.localentry dcCall_ppc64,.-dcCall_ppc64
+#endif
+	mflr r0                 /* r0 = return address */
+	std  r0,16(r1)          /* store r0 to link-area */
+	std  r31,-8(r1)
+
+	/* compute aligned stack-size */
+	
+	/* add link area and align to 16 byte (+15) */
+	
+	/* r0 = stacksize + frame parameter(back-chain link, this callee's call return address) */
+	addi r0,r5,STACK_MIN+15 /* r0 = r5 + STACK_MIN + 15 */
+	rlwinm r0,r0,0,0,27     /* r0 = r0 and -15 */
+	neg r0,r0               /* r0 = -r0 */
+	stdux r1,r1,r0          /* store r1 and decrement */
+
+	/* copy stack data */
+
+	subi r6,r6,8            /* r6 = 8 bytes before source stack ptr */
+	addi r7,r1,PARAM_SAVE-8 /* r7 = 8 bytes before target stack parameter-block */
+
+	srwi r5,r5,3            /* r5 = size in double words */
+
+	cmpi cr0,r5,0           /* if stacksize != 0 .. */
+	beq  cr0,.copy_done
+
+	mtctr r5                /* copy loop */
+
+.copy_next:
+	ldu  r0, 8(r6)
+	stdu r0, 8(r7)
+	bdnz .copy_next
+
+.copy_done:
+
+	/* this call support using ctr branch register */
+
+	mr    r12, r3           /* r12 = target function */
+	std   r2,TOC_SAVE(r1)
+#if DC__ABI_PPC64_ELF_V != 2
+	ld    r2,8(r12)
+	ld    r0,0(r12)
+	mtctr r0
+#else
+	mtctr r12
+#endif
+	mr    r11, r4           /* r11 = reg data */
+
+	/* load 8 integer registers */
+	
+	ld  r3 , 0(r11)
+	ld  r4 , 8(r11)
+	ld  r5 ,16(r11)
+	ld  r6 ,24(r11)
+	ld  r7 ,32(r11)
+	ld  r8 ,40(r11)
+	ld  r9 ,48(r11)
+	ld  r10,56(r11)
+
+	/* load 13 float registers */
+	
+	lfd  f1 , 64(r11)
+	lfd  f2 , 72(r11)
+	lfd  f3 , 80(r11)
+	lfd  f4 , 88(r11)
+	lfd  f5 , 96(r11)
+	lfd  f6 ,104(r11)
+	lfd  f7 ,112(r11)
+	lfd  f8 ,120(r11)
+	lfd  f9 ,128(r11)
+	lfd  f10,136(r11)
+	lfd  f11,144(r11)
+	lfd  f12,152(r11)
+	lfd  f13,160(r11)
+
+	bctrl                    /* branch with this call support */
+
+	/* epilog */
+
+	ld   r2,TOC_SAVE(r1)
+	ld   r1, 0(r1)          /* restore stack */
+	ld   r31,-8(r1)
+	ld   r0,16(r1)          /* r0 = return address */
+	mtlr r0                 /* setup link register */
+	blr                     /* return */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_ppc64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,55 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_ppc64.h
+ Description: 
+ License:
+
+   Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_PPC64_H
+#define DYNCALL_PPC64_H
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct DCRegData_ppc64_
+{
+  DClonglong mIntData[8];
+  DCdouble   mFloatData[13];
+};
+
+/* 
+** PowerPC 64-bit calling convention call
+**
+** - hybrid return-type call (bool ... pointer)
+**
+*/
+
+void     dcCall_ppc64(DCpointer target, struct DCRegData_ppc64_* ppc64data, DCsize stksize, DCpointer stkdata);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DYNCALL_PPC64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_sparc.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,193 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_sparc.S
+ Description: Call kernel for sparc processor architecture.
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+
+/* --------------------------------------------------------------------------- 
+
+call kernel for sparc 32-bit
+----------------------------
+tested on linux/debian [gcc54.fsffrance.org - thanx to the farm!] 
+
+new C Interface:
+  void dcCall_sparc (DCCallVM* callvm, DCpointer target);
+                     %i0               %1 
+
+we need to do that, due to the special property of sparc, its 'register windows'
+that propagate input registers..
+otherwise, we would have a 'void' return-value layer which results in failure
+to propagate back return values.
+instead of implementing 'dummy'-C return-values, we call directly.
+
+in sparc, this is simply a leaf-function layer using %o3.
+
+old C Interface:
+  void dcCall_sparc (DCpointer target, DCsize size, DCpointer data);
+		     %i0             , %i1        , %i2
+
+
+Input:
+  i0   callvm
+  i1   target
+
+old Input:
+  i0   target
+  i1   size
+  i2   data
+
+Description:
+We need to raise a dynamic stack frame.
+Therefore we need to compute the stack size in the context of the caller as a leaf note (using o3 in addition).
+Then we raise the frame.
+
+sparc:
+- big endian
+
+sparc V8:
+- integer/pointer: 32 32-bit integers.
+- float: 8 quad precision, 16 double precision, 32 single precision.
+
+sparc V9:
+- integer/pointer: 32 64-bit integers.
+
+plan9:
+- completely different scheme - similar to mips/plan9.
+- registers are named r0 .. r31
+  r1 stack pointer
+  r2 static base register
+  .. to be continued..
+
+Stack Layout 32-Bit Model:
+- sp+92 seventh argument
+- sp+68 first argument
+- sp+64 
+- 16 registers save area (in/local).
+
+	XX: should be 8 byte aligned (min stack frame size is 96).
+	            ...
+	92: on stack argument 6
+	88: input argument 5 spill
+	            ...
+	68: input argument 0 spill
+	64: struct/union pointer return value
+	 0: 16 registers save area
+
+Stack Layout 64-Bit Model:
+        XX: should be 16 byte aligned (min stack frame size is 172).
+       168: on stack argument 6
+       136: input argument 0 spill
+       128: struct/union poiner return value
+	 0: 16 registers save area
+
+
+
+Register Usage:
+%sp or  %o6: stack pointer, always 8 (or 16?)-byte aligned.
+%fp or  %i6: frame pointer.
+%i0 and %o0: integer and pointer return values.
+%i7 and %o7: return address. (caller puts return address to %o7, callee uses %i7)
+%f0 and %f1: return value (float).
+%i0..%i5:    input argument registers 
+%o0..%o5:    output argument registers
+%g0:         always zero, writes to it have no effect.
+
+Register Mappings:
+r0-7    -> globals
+r8-15   -> outs
+r16-r23 -> locals
+r24-r31 -> ins
+
+*/
+
+#if defined __arch64__
+#define REGSIZE 8
+#error invalid arch
+#else
+#define REGSIZE 4
+#endif
+
+#define ALIGN   16
+CALLVM_size    = 12
+CALLVM_dataoff = 16
+.global dcCall_sparc
+dcCall_sparc:
+
+/* Basic Prolog: supports up to 6 arguments. */
+
+	/* new C interface */
+	/* o0-1: callvm,target */
+	
+	or   %o0, %g0, %o3	       /* %o3: callvm */
+	or   %o1, %g0, %o0	       /* %o0: target */
+	ld  [%o3+CALLVM_size], %o1     /* %o1: size */
+	add  %o3, CALLVM_dataoff, %o2  /* %o2: data */
+	/*o0-2:target,size,data*/
+
+	/*leaf functions: may use the first six output registers.*/
+	/*o3-5:free to use */
+
+	/* Compute a matiching stack size (approximate): o3 = align(92+o1,16) */
+
+	add     %o1, (16+1+6)*REGSIZE+ALIGN-1, %o3
+	and     %o3,   -ALIGN, %o3
+	neg     %o3
+	
+	/* Prolog. */
+	save	%sp, %o3, %sp	/* min stack size (16+1+6)*sizeof(ptr)=92 paddded to 8-byte alignment => min frame size of 96 bytes. */
+	
+	/* Load output registers. */
+
+	ld	[%i2           ],%o0
+	ld	[%i2+REGSIZE*1 ],%o1
+	ld	[%i2+REGSIZE*2 ],%o2
+	ld	[%i2+REGSIZE*3 ],%o3
+	ld	[%i2+REGSIZE*4 ],%o4
+	ld	[%i2+REGSIZE*5 ],%o5
+
+	/* Copy on stack? */
+	sub	%i1,  REGSIZE*6, %i1   		/* i1 = decrement copy size by 6 regs (=6 regs x 4 bytes = 24 bytes total). */
+	cmp %i1, 0
+    ble .do_call
+	nop
+
+	/* Copy loop: */
+	add     %i2,  REGSIZE*6, %i2	/* i2 = address of 7th word of args buffer. */
+	or      %g0, %g0, %l0			/* l0 = offset initialized to 0. */
+	add     %sp,  (16+1+6)*REGSIZE, %l2	/* l2 = argument area on stack space (7th word). (64+4+6*4 = byte offset 92). */
+.next:
+	ld      [%i2+%l0],%l1			/* Read from arg buffer(%i2) to %l1. */
+	st      %l1, [%l2+%l0]			/* Write %l1 to stack space(%l2). */
+	add     %l0, REGSIZE, %l0		/* Increment offset. */
+	sub     %i1, REGSIZE, %i1		/* Decrement copy size. */
+	cmp     %i1, 0
+	bgt     .next
+	nop
+.do_call:
+	call    %i0						/* Call target. */
+	nop
+    	or     %o0, %g0, %i0
+    	or     %o1, %g0, %i1
+	jmpl	%i7 + 8, %g0
+	restore
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_sparc.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,43 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_sparc.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALL_SPARC_H
+#define DYNCALL_CALL_SPARC_H
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void dcCall_sparc (DCpointer target, DCsize size, DCpointer data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DYNCALL_CALL_SPARC_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_sparc64.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,362 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_sparc64.S
+ Description: Call kernel for sparc64 v9 ABI.
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+
+/* --------------------------------------------------------------------------- 
+
+call kernel for sparc64 v9 abi
+tested on sparc64/linux/debian [gcc54.fsffrance.org - thanx to the farm!] 
+
+new C Interface:
+  void dcCall_sparc (DCCallVM* callvm, DCpointer target);
+                     %i0               %1 
+
+see dyncall_call_sparc.S for details.
+
+old C Interface:
+  void dcCall_sparc (DCpointer target, DCsize size, DCpointer data);
+		     %i0             , %i1        , %i2
+Input:
+  i0   target
+  i1   size
+  i2   data
+
+*/
+
+#define REGSIZE 8
+
+#define BIAS 2047
+
+#define ALIGN 16 
+
+#define IREGS 6
+#define FREGS 16
+#define SREGS 16
+#define IBASE  0
+#define FBASE  (IREGS*8)
+
+#define SHEAD ((16+6)*8)
+#define DHEAD  ((IREGS+FREGS)*8)+SREGS*4
+
+CALLVM_singleUseFlags = 24
+CALLVM_size    = 40
+CALLVM_dataoff = 48
+
+
+.global dcCall_sparc64
+dcCall_sparc64:
+
+/* Basic Prolog: supports up to 6 arguments. */
+	
+	/* new C interface */
+	/* o0-1: callvm,target */
+	
+	or   %o0, %g0, %o3	       /* %o3: callvm */
+	or   %o1, %g0, %o0	       /* %o0: target */
+	ldx [%o3+CALLVM_size], %o1     /* %o1: size */
+	add %o3, CALLVM_dataoff, %o2  /* %o2: data */
+	ld  [%o3+CALLVM_singleUseFlags], %o4 /* %o4: flags */
+	/*leaf functions: may use the first six output registers.*/
+	/*o0-2:target,size,data*/
+	/*o3-5:free to use */
+		
+		/* Arguments: */
+		/* %o0 = ptr to target. */
+		/* %o1 = size of data. */
+		/* %o2 = data pointer. */
+		/* %o4 = use flags. */
+
+	/* Compute a matching stack size (approximate): o3 = align(o1+136,16) */
+
+	add     %o1, SHEAD+ALIGN-1, %o3
+	and     %o3,   -ALIGN, %o3
+	neg     %o3
+	
+	/* Prolog. */
+	save	%sp, %o3, %sp	
+
+		/* Arguments: */
+		/* %i0 = ptr to target. */
+		/* %i1 = size of data. */
+		/* %i2 = data pointer. */
+		/* %i3 = stack size. */
+	
+	/* Load output registers. */
+
+	ldx	[%i2+IBASE+REGSIZE*0 ],%o0
+	ldx	[%i2+IBASE+REGSIZE*1 ],%o1
+	ldx	[%i2+IBASE+REGSIZE*2 ],%o2
+	ldx	[%i2+IBASE+REGSIZE*3 ],%o3
+	ldx	[%i2+IBASE+REGSIZE*4 ],%o4
+	ldx	[%i2+IBASE+REGSIZE*5 ],%o5
+
+	/* Load double-precision float registers. */
+
+	ldd     [%i2+FBASE+REGSIZE*0 ],%f0
+	ldd     [%i2+FBASE+REGSIZE*1 ],%f2
+	ldd     [%i2+FBASE+REGSIZE*2 ],%f4
+	ldd     [%i2+FBASE+REGSIZE*3 ],%f6
+	ldd     [%i2+FBASE+REGSIZE*4 ],%f8
+	ldd     [%i2+FBASE+REGSIZE*5 ],%f10
+	ldd     [%i2+FBASE+REGSIZE*6 ],%f12
+	ldd     [%i2+FBASE+REGSIZE*7 ],%f14
+	ldd     [%i2+FBASE+REGSIZE*8 ],%f16
+    ldd     [%i2+FBASE+REGSIZE*9 ],%f18
+	ldd     [%i2+FBASE+REGSIZE*10],%f20
+	ldd     [%i2+FBASE+REGSIZE*11],%f22
+	ldd     [%i2+FBASE+REGSIZE*12],%f24
+	ldd     [%i2+FBASE+REGSIZE*13],%f26
+	ldd     [%i2+FBASE+REGSIZE*14],%f28
+	ldd     [%i2+FBASE+REGSIZE*15],%f30
+
+	/* load single-precision float registers */
+
+	or	%g0, 1, %l0
+.f0:
+	andcc   %i4, %l0, %g0
+	beq	.f1	
+	nop
+	ld	[%i2+FBASE+REGSIZE*16+4*0 ], %f1
+.f1:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f2	
+	nop
+	ld	[%i2+FBASE+REGSIZE*16+4*1 ], %f3
+.f2:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f3	
+	nop
+	ld	[%i2+FBASE+REGSIZE*16+4*2 ], %f5
+.f3:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f4	
+	nop
+	ld	[%i2+FBASE+REGSIZE*16+4*3 ], %f7
+.f4:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f5	
+	nop
+	ld	[%i2+FBASE+REGSIZE*16+4*4 ], %f9
+.f5:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f6	
+	nop
+	ld	[%i2+FBASE+REGSIZE*16+4*5 ], %f11
+.f6:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f7
+	nop	
+	ld	[%i2+FBASE+REGSIZE*16+4*6 ], %f13
+.f7:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f8
+	nop	
+	ld	[%i2+FBASE+REGSIZE*16+4*7 ], %f15
+.f8:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f9
+	nop	
+	ld	[%i2+FBASE+REGSIZE*16+4*8 ], %f17
+.f9:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f10
+	nop	
+	ld	[%i2+FBASE+REGSIZE*16+4*9 ], %f19
+.f10:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f11
+	nop	
+	ld	[%i2+FBASE+REGSIZE*16+4*10], %f21
+.f11:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f12
+	nop	
+	ld	[%i2+FBASE+REGSIZE*16+4*11], %f23
+.f12:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f13
+	nop	
+	ld	[%i2+FBASE+REGSIZE*16+4*12], %f25
+.f13:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f14
+	nop	
+	ld	[%i2+FBASE+REGSIZE*16+4*13], %f27
+.f14:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f15
+	nop	
+	ld	[%i2+FBASE+REGSIZE*16+4*14], %f29
+.f15:
+	sll     %l0, 1, %l0
+	andcc   %i4, %l0, %g0
+	beq	.f_end
+	nop	
+	ld	[%i2+FBASE+REGSIZE*16+4*15], %f31
+.f_end:
+        /* Skip Register Data, do we nee to copy on stack at all? */
+	sub	%i1,  DHEAD, %i1   		/* skip data header. */
+	cmp     %i1, 0
+    ble	.do_call
+    nop
+
+	/* Copy loop: */
+	add     %i2,  DHEAD, %i2		/* i2 = skip data header. */
+	or	%g0, %g0, %l0			/* l0 = offset initialized to 0. */
+	add     %sp,  BIAS+SHEAD, %l2		/* l2 = argument area on stack space (7th word). (64+4+6*4 = byte offset 92). */
+
+.next:
+	ldx     [%i2+%l0],%l1			/* Read from arg buffer(%i2) to %l1. */
+	stx     %l1, [%l2+%l0]			/* Write %l1 to stack space(%l2). */
+	add     %l0, REGSIZE, %l0		/* Increment offset. */
+	sub     %i1, REGSIZE, %i1		/* Decrement copy size. */
+	cmp     %i1, 0
+	bgt     .next
+	nop
+.do_call:
+	call	%i0				/* Call target. */
+    	nop
+	or	%o0, %g0, %i0
+	jmpl	%i7 + 8, %g0
+    	restore
+/*
+	return  %i7 + 8
+	jmpl %i7 + 8, %g0
+        nop
+
+	jmpl %i7 + 8, %g0
+    nop
+    restore
+	ret
+*/
+
+/* 
+    or     %o0, %g0, %i0
+    or     %o1, %g0, %i1
+    or     %o2, %g0, %i2
+    or     %o3, %g0, %i3
+	return  %i7 + 8
+    nop
+
+Changes from v8:
+- fundamental data types
+	- (un)signed int: 8,16,32,64
+	- float: 32,64,128
+- float: IEEE 754 compilant
+	32 32-bit  float registers f0,f1,..,f31
+	32 64-bit  float registers f0,f2,..,f62
+	16 128-bit float registers f0,f4,..,f60
+
+Description:
+We need to raise up a dynamic stack frame.
+Therefore we need to compute the stack size. We do this first, 
+in the context of the caller as a leaf function (using o3 as scratch for addition).
+Then we raise the frame, ending up in o0-o3 is then i0-i3.
+
+
+Stack Layout:
+     BIAS = 2047
+
+   BIAS+XX: should be 16 byte aligned.
+                 ...
+       136: argument overflow area
+       128:  1 extended word  for struct/union poiner return value
+   BIAS+ 0: 16 extended words for registers (in/local) save area [register window]
+
+
+Function Argument Passing:
+- integer %o0..%o5 (caller view).
+- floating-point %f0 .. %f15
+- continuous memory starting at %sp+BIAS+136 (caller view).
+
+Register Usage:
+%fp0..%fp31  : floating-point arguments.
+%sp  or  %o6 : stack pointer, always 8 (or 16?)-byte aligned.
+%fp  or  %i6 : frame pointer.
+%i0  and %o0 : integer and pointer return values.
+%i7  and %o7 : return address. (caller puts return address to %o7, callee uses %i7)
+%fp0 and %fp1: return value (float).
+%i0..%i5     : input argument registers 
+%o0..%o5     : output argument registers
+%g0          : always zero, writes to it have no effect.
+
+Register Mappings:
+r0-7    -> globals
+r8-15   -> outs
+r16-r23 -> locals
+r24-r31 -> ins
+
+Integer Register Overview Table:
+ID      Class   Name    Description
+------------------------------------------------------------------------------
+0	globals	g0	always zero, writes to it have no effect
+1		g1
+2		g2
+3		g3
+4		g4
+5		g5
+6		g6
+7		g7
+8	out	o0	[int/ptr] arg 0 and return
+9		o1	          arg 1
+10		o2	          arg 2
+11		o3	          arg 3
+12              o4                arg 4
+13              o5                arg 5
+14              o6	stack pointer
+15		o7
+16	local	l0	scratch
+17		l1
+18		l2
+19		l3
+20		l4
+21		l5
+22		l6
+23		l7
+24	in	i0	[int/pt] arg 0 and return
+25		i1
+26		i2
+27		i3
+28		i4
+29		i5
+30		i6	frame pointer
+31		i7
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_sparc64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,43 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_sparc64.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALL_SPARC64_H
+#define DYNCALL_CALL_SPARC64_H
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void dcCall_sparc64 (DCpointer target, DCsize size, DCpointer data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DYNCALL_CALL_SPARC64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_sparc_v9.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,222 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_sparc_v9.S
+ Description: Call kernel for sparc64 v9 ABI.
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#define BIAS 2047
+.global dcCall_v9
+	/* dcCall_sparc64( DCCallVM* , void * target ) */ 
+        /*                 o0          o1              */
+dcCall_v9:
+	or   %o0, %g0, %o3  /* o3: callvm   */
+	or   %o1, %g0, %o0  /* o0: target   */
+	ldx  [%o3+24], %o1  /* o1: mVecSize */
+	add   %o3, 32, %o2  /* o2: stack    */
+	/* Compute a matching stack size (approximate): o3 = align(o1+136,16) */
+
+	add  %o1, (16+1+6)*8+15, %o3
+	and  %o3, -16, %o3
+	neg  %o3            /* o3: -stacksize */
+	save %sp, %o3, %sp	
+
+	ldd     [%i2+8*0 ],%f0		/* Load double-precision float registers. */
+	ldd     [%i2+8*1 ],%f2
+	ldd     [%i2+8*2 ],%f4
+	ldd     [%i2+8*3 ],%f6
+	ldd     [%i2+8*4 ],%f8
+	ldd     [%i2+8*5 ],%f10
+	ldd     [%i2+8*6 ],%f12
+	ldd     [%i2+8*7 ],%f14
+	ldd     [%i2+8*8 ],%f16
+        ldd     [%i2+8*9 ],%f18
+	ldd     [%i2+8*10],%f20
+	ldd     [%i2+8*11],%f22
+	ldd     [%i2+8*12],%f24
+	ldd     [%i2+8*13],%f26
+	ldd     [%i2+8*14],%f28
+	ldd     [%i2+8*15],%f30
+	ldx	[%i2+8*0],%o0		/* Load output registers. */
+	ldx	[%i2+8*1],%o1
+	ldx	[%i2+8*2],%o2
+	ldx	[%i2+8*3],%o3
+	ldx	[%i2+8*4],%o4
+	ldx	[%i2+8*5],%o5
+	sub     %i1, 48, %i1
+	cmp     %i1, 0
+    	ble	.do_call
+    	nop
+	/* Copy loop: */
+	add     %i2, 48, %i2	/* skip homing area */
+	or	%g0, %g0, %l0			/* l0 = offset initialized to 0. */
+	add     %sp, BIAS+((16+6)*8), %l2	/* l2 = argument area on stack space (7th word). (64+4+6*4 = byte offset 92). */
+.next:
+	ldx     [%i2+%l0],%l1	/* Read from arg buffer(%i2) to %l1. */
+	stx     %l1, [%l2+%l0]	/* Write %l1 to stack space(%l2). */
+	add     %l0, 8, %l0	/* Increment offset. */
+	sub     %i1, 8, %i1	/* Decrement copy size. */
+	cmp     %i1, 0
+	bgt     .next
+	nop
+.do_call:
+	call	%i0				/* Call target. */
+    	nop
+	or	%o0, %g0, %i0
+	jmpl	%i7 + 8, %g0
+    	restore
+
+/* 
+    or     %o0, %g0, %i0
+    or     %o1, %g0, %i1
+    or     %o2, %g0, %i2
+    or     %o3, %g0, %i3
+	return  %i7 + 8
+    nop
+
+Changes from v8:
+- fundamental data types
+	- (un)signed int: 8,16,32,64
+	- float: 32,64,128
+- float: IEEE 754 compilant
+	32 32-bit  float registers f0,f1,..,f31
+	32 64-bit  float registers f0,f2,..,f62
+	16 128-bit float registers f0,f4,..,f60
+
+Description:
+We need to raise up a dynamic stack frame.
+Therefore we need to compute the stack size. We do this first, 
+in the context of the caller as a leaf function (using o3 as scratch for addition).
+Then we raise the frame, ending up in o0-o3 is then i0-i3.
+
+
+Stack Layout:
+     BIAS = 2047
+
+   BIAS+XX: should be 16 byte aligned.
+                 ...
+       136: argument overflow area
+       128:  1 extended word  for struct/union poiner return value
+   BIAS+ 0: 16 extended words for registers (in/local) save area [register window]
+
+
+Function Argument Passing:
+- integer %o0..%o5 (caller view).
+- floating-point %f0 .. %f15
+- continuous memory starting at %sp+BIAS+136 (caller view).
+
+Register Usage:
+%fp0..%fp31  : floating-point arguments.
+%sp  or  %o6 : stack pointer, always 8 (or 16?)-byte aligned.
+%fp  or  %i6 : frame pointer.
+%i0  and %o0 : integer and pointer return values.
+%i7  and %o7 : return address. (caller puts return address to %o7, callee uses %i7)
+%fp0 and %fp1: return value (float).
+%i0..%i5     : input argument registers 
+%o0..%o5     : output argument registers
+%g0          : always zero, writes to it have no effect.
+
+Register Mappings:
+r0-7    -> globals
+r8-15   -> outs
+r16-r23 -> locals
+r24-r31 -> ins
+
+Integer Register Overview Table:
+ID      Class   Name    Description
+------------------------------------------------------------------------------
+0	globals	g0	always zero, writes to it have no effect
+1		g1
+2		g2
+3		g3
+4		g4
+5		g5
+6		g6
+7		g7
+8	out	o0	[int/ptr] arg 0 and return
+9		o1	          arg 1
+10		o2	          arg 2
+11		o3	          arg 3
+12              o4                arg 4
+13              o5                arg 5
+14              o6	stack pointer
+15		o7
+16	local	l0	scratch
+17		l1
+18		l2
+19		l3
+20		l4
+21		l5
+22		l6
+23		l7
+24	in	i0	[int/pt] arg 0 and return
+25		i1
+26		i2
+27		i3
+28		i4
+29		i5
+30		i6	frame pointer
+31		i7
+*/
+
+/* --------------------------------------------------------------------------- 
+
+call kernel for sparc64 v9 abi
+tested on sparc64/linux/debian [gcc54.fsffrance.org - thanx to the farm!] 
+
+new C Interface:
+  void dcCall_sparc (DCCallVM* callvm, DCpointer target);
+                     %i0               %1 
+
+see dyncall_call_sparc.S for details.
+
+old C Interface:
+  void dcCall_sparc (DCpointer target, DCsize size, DCpointer data);
+		     %i0             , %i1        , %i2
+Input:
+  i0   target
+  i1   size
+  i2   data
+
+*/
+
+#if 0
+
+
+#define REGSIZE 8
+
+
+
+#define SHEAD ((16+6)*8)
+#define ALIGN 16 
+#define IREGS 6
+#define FREGS 16
+#define SREGS 16
+#define IBASE  0
+#define FBASE  (IREGS*8)
+
+// #define DHEAD  ((IREGS+FREGS)*8)+SREGS*4
+
+CALLVM_regdata = 72
+CALLVM_size    = 208
+CALLVM_buffer  = 216
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_sparc_v9.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,43 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_sparc_v9.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALL_SPARC_V9_H
+#define DYNCALL_CALL_SPARC_V9_H
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void dcCall_v9 (DCCallVM* vm, DCpointer target);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DYNCALL_CALL_SPARC_v9_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_x64-att.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,147 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_x64-att.S
+ Description: All x64 abi call kernel implementation
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../portasm/portasm-x64-att.S"
+
+BEGIN_ASM
+
+/*---------------------------------------------------------------------------
+  
+  Call Kernel for x64 System V
+  
+  Input:
+    RDI : size of arguments to be passed via stack 
+    RSI : pointer to arguments to be passed via the stack 
+    RDX : pointer to arguments of integral/pointer type to be passed via registers 
+    RCX : pointer to arguments of floating point type to be passed via registers 
+    R8  : target function pointer 
+  Notes:
+    RSP+8: is always 16-byte aligned (32-byte align if __m256 is used)
+*/
+
+GLOBAL(dcCall_x64_sysv)
+BEGIN_PROC(dcCall_x64_sysv)
+	PUSH(RBP)			/* Pseudo-prolog - preserve RBP. */
+	PUSH(RBX)			/* Preserve RBX and store pointer to function in it. */
+	MOV(RSP,RBP)			/* Store stack pointer in RBP. */
+	MOV(R8 ,RBX)
+	MOVSD(QWORD(RCX,0) ,XMM0)	/* Copy first 8 floats to XMM0-XMM7. */
+	MOVSD(QWORD(RCX,8) ,XMM1)
+	MOVSD(QWORD(RCX,16),XMM2)
+	MOVSD(QWORD(RCX,24),XMM3)
+	MOVSD(QWORD(RCX,32),XMM4)
+	MOVSD(QWORD(RCX,40),XMM5)
+	MOVSD(QWORD(RCX,48),XMM6)
+	MOVSD(QWORD(RCX,56),XMM7)
+
+	ADD(LIT(31),RDI)		/* Align stack to 32-byte. */
+	AND(LIT(-32),RDI)
+	ADD(LIT(8),RDI)		/* Adjust by 8-byte for the return-address. */
+	SUB(RDI,RSP)			/* Setup stack frame by subtracting the size of arguments. */
+					
+	MOV(RDI,RCX)			/* Store number of bytes to copy to stack in RCX (for rep movsb). */
+	MOV(RSP,RDI)			/* Store pointer to beginning of stack arguments in RDI (for rep movsb). */
+
+	REP(MOVSB)			/* copy bytes (@@@ should be optimized). */
+
+	MOV(QWORD(RDX,0),RDI)		/* copy first six int/pointer arguments to RDI, RSI, RDX, RCX, R8, R9. */
+	MOV(QWORD(RDX,8),RSI)
+	MOV(QWORD(RDX,24),RCX)
+	MOV(QWORD(RDX,32),R8)
+	MOV(QWORD(RDX,40),R9)
+	MOV(QWORD(RDX,16),RDX)		/* Set RDX last to not overwrite it to soon. */
+
+	MOVB(LIT(8),AL)			/* Put upper bound of number of used xmm registers in AL. */
+	CALL_REG(RBX)			/* Call function. */
+
+	MOV(RBP,RSP)			/* Restore stack pointer. */
+	POP(RBX)			/* Restore RBX. */
+	POP(RBP)			/* Pseudo-epilog. */
+	RET()
+END_PROC(dcCALl_x64_sysv)
+
+/*---------------------------------------------------------------------------
+
+  Call Kernel for x64 Win64
+	
+  Input:
+    RCX : size of arguments to be passed via stack 
+    RDX : pointer to arguments to be passed via the stack 
+    R8  : pointer to arguments of integral/pointer type to be passed via registers 
+    R9  : target function pointer
+
+*/
+
+GLOBAL(dcCall_x64_win64)
+BEGIN_PROC(dcCall_x64_win64)
+
+	PUSH(RBP)			/* Pseudo-prolog - preserve RBP. */
+	PUSH(RSI)			/* Preserve RSI and RDI. */
+	PUSH(RDI)
+	
+	MOV(RSP,RBP)			/* Store stack pointer in RBP. */
+
+	ADD(LIT(15),RCX)		/* Align stack size to 16 bytes. */
+	AND(LIT(-16),RCX)
+	SUB(RCX,RSP)			/* Setup stack frame by subtracting the size of the arguments. */
+
+
+	MOV(RDX, RSI)			/* Let RSI point to the arguments. */
+	MOV(RSP, RDI)			/* Store pointer to beginning of stack arguments in RDI (for rep movsb). */
+	MOV(R9,  RAX)			/* Put function address in RAX. */
+
+	REP(MOVSB) 			/* @@@ should be optimized (e.g. movq) */
+
+	MOV(QWORD(R8,0),RCX)		/* Copy first four arguments to RCX, RDX, R9, R8 ( and XMM0-XMM3. ) */
+	MOV(QWORD(R8,8),RDX)
+	MOV(QWORD(R8,24),R9)
+	MOV(QWORD(R8,16),R8)
+
+	MOVD(RCX, XMM0)
+	MOVD(RDX, XMM1)
+	MOVD(R8,  XMM2)
+	MOVD(R9,  XMM3)
+
+	PUSH(R9)			/* Push first four arguments onto the stack preserve area. */
+	PUSH(R8)
+	PUSH(RDX)
+	PUSH(RCX)
+
+	CALL_REG(RAX)			/* Invoke function. */
+
+	MOV(RBP, RSP)			/* Restore stack pointer (such that we can pop the preserved vALues). */
+
+	POP(RDI)			/* Restore RSI and RDI. */
+	POP(RSI)
+	POP(RBP)			/* Pseudo-epilog. */
+
+	RET()
+
+END_PROC(dcCall_x64_win64)
+
+END_ASM
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_x64.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,150 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_x64.S
+ Description: All x64 abi call kernel implementation
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../portasm/portasm-x64.S"
+
+BEGIN_ASM
+
+/*---------------------------------------------------------------------------
+  
+  Call Kernel for x64 System V
+  
+  Input:
+    RDI : size of arguments to be passed via stack 
+    RSI : pointer to arguments to be passed via the stack 
+    RDX : pointer to arguments of integral/pointer type to be passed via registers 
+    RCX : pointer to arguments of floating point type to be passed via registers 
+    R8  : target function pointer 
+
+*/
+
+GLOBAL(dcCall_x64_sysv)
+BEGIN_PROC(dcCall_x64_sysv)
+
+	push	RBP			/* Pseudo-prolog - preserve RBP. */
+	push	RBX			/* Preserve RBX and store pointer to function in it. */
+
+	mov	RBP, RSP		/* Store stack pointer in RBP.   */
+
+	mov	RBX, R8
+
+	movsd	XMM0, qword ptr[RCX   ]	/* Copy first 8 floats to XMM0-XMM7 (this makes RCX free to use). */
+	movsd	XMM1, qword ptr[RCX+ 8]
+	movsd	XMM2, qword ptr[RCX+16]
+	movsd	XMM3, qword ptr[RCX+24]
+	movsd	XMM4, qword ptr[RCX+32]
+	movsd	XMM5, qword ptr[RCX+40]
+	movsd	XMM6, qword ptr[RCX+48]
+	movsd	XMM7, qword ptr[RCX+56]
+
+	sub	RSP, RDI		/* Setup stack frame by subtracting the size of the arguments. */
+
+	and     RSP, -32		/* Align stack to 32-byte border. */
+
+	mov	RCX, RDI		/* Store number of bytes to copy to stack in RCX (for rep movsb). */
+	mov	RDI, RSP		/* Store pointer to beginning of stack arguments in RDI (for rep movsb). */
+
+	rep movsb			/* @@@ should be optimized (e.g. movq) */
+
+	mov	RDI, qword ptr[RDX   ]	/* Copy first six int/pointer arguments to RDI, RSI, RDX, RCX, R8, R9. */
+	mov	RSI, qword ptr[RDX+ 8]
+	mov	RCX, qword ptr[RDX+24]
+	mov	R8,  qword ptr[RDX+32]
+	mov	R9,  qword ptr[RDX+40]
+	mov	RDX, qword ptr[RDX+16]	/* Set RDX last to not overwrite it to soon. */
+
+	mov	AL, 8						/* Put upper bound of number of used xmm registers in AL. */
+	call	RBX						/* Invoke function. */
+
+	mov	RSP, RBP					/* Restore stack pointer (such that we can pop the preserved vALues). */
+
+	pop	RBX						/* Restore RBX. */
+	pop	RBP						/* Pseudo-epilog. */
+
+	ret
+END_PROC(dcCall_x64_sysv)
+
+/*---------------------------------------------------------------------------
+
+  Call Kernel for x64 Win64
+	
+  Input:
+    RCX : size of arguments to be passed via stack 
+    RDX : pointer to arguments to be passed via the stack 
+    R8  : pointer to arguments of integral/pointer type to be passed via registers 
+    R9  : target function pointer
+
+*/
+
+GLOBAL(dcCall_x64_win64)
+BEGIN_PROC(dcCall_x64_win64)
+
+	push	RBP			/* Pseudo-prolog - preserve RBP. */
+	push	RSI			/* Preserve RSI and RDI. */
+	push	RDI
+	
+	/* and  RSP, -16		/* Align frame to 16 bytes.    */
+	mov	RBP, RSP		/* Store stack pointer in RBP. */
+
+	add	RCX, 15			/* Align stack size to 16 bytes. */
+	and	RCX, -16
+	sub	RSP, RCX		/* Setup stack frame by subtracting the size of the arguments. */
+
+	mov	RSI, RDX		/* Let RSI point to the arguments. */
+	mov	RDI, RSP		/* Store pointer to beginning of stack arguments in RDI (for rep movsb). */
+	mov	RAX, R9			/* Put function address in RAX. */
+
+	rep movsb			/* @@@ should be optimized (e.g. movq) */
+
+	mov	RCX,  qword ptr[R8   ]	/* Copy first four arguments to RCX, RDX, R8, R9 and XMM0-XMM3. */
+	mov	RDX,  qword ptr[R8+ 8]
+	mov	R9,   qword ptr[R8+24]	/* Set R9 first to not overwrite R8 too soon. */
+	mov	R8,   qword ptr[R8+16]
+	movd	XMM0, RCX
+	movd	XMM1, RDX
+	movd	XMM2, R8
+	movd	XMM3, R9
+
+	push	R9			/* Push first four arguments onto the stack preserve area. */
+	push	R8
+	push	RDX
+	push	RCX
+
+	call	RAX			/* Invoke function. */
+
+	mov	RSP, RBP		/* Restore stack pointer (such that we can pop the preserved vALues). */
+
+	pop	RDI			/* Restore RSI and RDI. */
+	pop	RSI
+	pop	RBP			/* Pseudo-epilog. */
+
+	ret
+
+END_PROC(dcCall_x64_win64)
+
+END_ASM
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_x64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,64 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_x64.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall x64
+
+  REVISION
+  2007/12/11 initial
+
+*/
+
+
+#ifndef DYNCALL_CALL_X64_H
+#define DYNCALL_CALL_X64_H
+
+
+#include "dyncall.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* 
+** x64 SystemV calling convention 
+**
+** - hybrid return-type call (bool ... pointer)
+**
+*/
+
+void dcCall_x64_sysv(DCsize stacksize, DCpointer stackdata, DCpointer regdata_i, DCpointer regdata_f, DCpointer target);
+void dcCall_x64_win64(DCsize stacksize, DCpointer stackdata, DCpointer regdata, DCpointer target);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* DYNCALL_CALL_X64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_x64_generic_masm.asm	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,70 @@
+; auto-generated by gen-masm.sh
+.CODE
+
+dcCall_x64_sysv PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push RBP
+ push RBX
+ mov RBP,RSP
+ mov RBX,R8
+ movsd XMM0,qword ptr [RCX+0]
+ movsd XMM1,qword ptr [RCX+8]
+ movsd XMM2,qword ptr [RCX+16]
+ movsd XMM3,qword ptr [RCX+24]
+ movsd XMM4,qword ptr [RCX+32]
+ movsd XMM5,qword ptr [RCX+40]
+ movsd XMM6,qword ptr [RCX+48]
+ movsd XMM7,qword ptr [RCX+56]
+ add RDI,31
+ and RDI,-32
+ add RDI,8
+ sub RSP,RDI
+ mov RCX,RDI
+ mov RDI,RSP
+ rep movsb
+ mov RDI,qword ptr [RDX+0]
+ mov RSI,qword ptr [RDX+8]
+ mov RCX,qword ptr [RDX+24]
+ mov R8,qword ptr [RDX+32]
+ mov R9,qword ptr [RDX+40]
+ mov RDX,qword ptr [RDX+16]
+ mov AL,8
+ call RBX
+ mov RSP,RBP
+ pop RBX
+ pop RBP
+ ret
+dcCALl_x64_sysv ENDP
+dcCall_x64_win64 PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push RBP
+ push RSI
+ push RDI
+ mov RBP,RSP
+ add RCX,15
+ and RCX,-16
+ sub RSP,RCX
+ mov RSI,RDX
+ mov RDI,RSP
+ mov RAX,R9
+ rep movsb
+ mov RCX,qword ptr [R8+0]
+ mov RDX,qword ptr [R8+8]
+ mov R9,qword ptr [R8+24]
+ mov R8,qword ptr [R8+16]
+ movd XMM0,RCX
+ movd XMM1,RDX
+ movd XMM2,R8
+ movd XMM3,R9
+ push R9
+ push R8
+ push RDX
+ push RCX
+ call RAX
+ mov RSP,RBP
+ pop RDI
+ pop RSI
+ pop RBP
+ ret
+dcCall_x64_win64 ENDP
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_x86.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,239 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_x86.S
+ Description: All - except Plan9 - x86 abi call kernel implementation
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../portasm/portasm-x86.S"
+BEGIN_ASM
+/* ============================================================================
+   DynCall Call Kernels for X86 Architecture
+   ----------------------------------------------------------------------------
+   C Interface:
+      dcCall_x86_XXX(void* target, void* args, size_t size);
+      ddCall_x86_sys_XXX(int_ptr target, void* args, size_t size);
+ 
+   Where XXX is one of calling-conventions,
+	cdecl, win32_msthis, win32_std, win32_fastcall.
+
+   Parameter Stack layout:
+      size    :=  EBP + 16
+      args    :=  EBP + 12
+      target  :=  EBP +  8
+  
+   NOTES:
+    - epilog restore ESP serves callee cleanup 
+    - 16 byte alignment (to be compatible with darwin).
+*/
+
+
+/*--- default / cdecl --------------------------------------------------------
+
+  Details:
+  - caller clean-up
+
+*/
+
+GLOBAL(dcCall_x86_cdecl)
+BEGIN_PROC(dcCall_x86_cdecl)
+	PUSH(EBP)			/* prolog. */
+	MOVL(ESP,EBP)
+	PUSH(ESI)			/* save preserved registers. */
+	PUSH(EDI)
+	MOVL(DWORD(EBP,12),ESI)		/* ESI = arg buffer ptr */
+	MOVL(DWORD(EBP,16),ECX)		/* ECX = arg buffer size */
+	ADDL(LIT(15),ECX)		/* ECX = align(ECX,16) */
+	ANDL(LIT(-16),ECX)
+	MOVL(ECX,DWORD(EBP,16))		/* save ECX. */
+	SUBL(ECX,ESP)			/* allocate stack size */
+	MOVL(ESP,EDI)			/* EDI = stack ptr */			
+	
+	/* 
+		work around for rep movsd (not supported by SunPro) 
+	
+	SHRL(LIT(2),ECX)		
+	REP(MOVSD)
+	
+	*/
+
+	REP(MOVSB)
+	CALL_DWORD(EBP,8)
+	ADDL(DWORD(EBP,16),ESP)
+	POP(EDI)
+	POP(ESI)
+	MOVL(EBP,ESP)
+	POP(EBP)
+	RET()
+END_PROC(dcCall_x86_cdecl)
+/* ---- C++ this calls (microsoft) ------------------------------------------ 
+
+  Details:
+  - this pointer is in ECX
+
+*/
+
+GLOBAL(dcCall_x86_win32_msthis)
+BEGIN_PROC(dcCall_x86_win32_msthis)
+	PUSH(EBP)               	/* prolog. */
+	MOVL(ESP,EBP)
+	PUSH(ESI)               	/* save preserved. */
+	PUSH(EDI)
+	MOVL(DWORD(EBP,12),ESI)		/* ESI = pointer on args. */
+	MOVL(DWORD(EBP,16),ECX)		/* ECX = size. */
+	MOVL(DWORD(ESI,0),EAX) 		/* EAX = this pointer. */ 
+	ADDL(LIT(4),ESI)           		/* increment args pointer by thisptr. */
+	SUBL(LIT(4),ECX)        		/* decrement size by sizeof(thisptr). */
+	SUBL(ECX,ESP)         		/* allocate argument-block on stack. */
+	MOVL(ESP,EDI)       		/* EDI = stack args. */
+	REP(MOVSB)              	/* copy arguments. */
+	MOVL(EAX,ECX)        		/* ECX = this pointer. */
+	CALL_DWORD(EBP,8)		/* call function. */
+	POP(EDI)			/* restore preserved. */
+	POP(ESI)
+	MOVL(EBP,ESP)       		/* epilog. */
+	POP(EBP)
+	RET()
+END_PROC(dcCall_x86_win32_msthis)
+
+/*---- win32 stdcall ---------------------------------------------------------
+  
+  Details:
+  - callee cleans up stack
+
+*/
+
+GLOBAL(dcCall_x86_win32_std)
+BEGIN_PROC(dcCall_x86_win32_std)
+	PUSH(EBP)			/* prolog. */
+	MOVL(ESP,EBP)
+	PUSH(ESI)			/* save ESI, EDI. */
+	PUSH(EDI)
+	MOVL(DWORD(EBP,12),ESI)		/* ESI = args. */
+	MOVL(DWORD(EBP,16),ECX)		/* ECX = size. */
+	SUBL(ECX,ESP)			/* allocate size bytes on stack. */
+	MOVL(ESP,EDI)			/* EDI = copy destination stack. */
+	REP(MOVSB)			/* copy BYTEs. */
+	CALL_DWORD(EBP,8)		/* call target. */
+	POP(EDI)			/* restore EDI, ESI. */
+	POP(ESI)
+	MOVL(EBP,ESP)			/* epilog. */
+	POP(EBP)
+	RET()
+END_PROC(dcCall_x86_win32_std)
+
+/*---- win32 fastcall (GNU/Microsoft) ----------------------------------------
+
+  Details:
+  - callee cleans up stack
+  - first two integer (up to 32bits) are passed in ECX and EDX
+
+*/
+
+GLOBAL(dcCall_x86_win32_fast)
+BEGIN_PROC(dcCall_x86_win32_fast)
+	PUSH(EBP)			/* prolog. */
+	MOVL(ESP,EBP)
+	PUSH(ESI)			/* save preserved. */
+	PUSH(EDI)
+	MOVL(DWORD(EBP,12),ESI)		/* ESI = copy source args. */
+	MOVL(DWORD(EBP,16),ECX)		/* ECX = size. */
+	MOVL(DWORD(ESI,0),EAX)		/* EAX = first argument. */
+	MOVL(DWORD(ESI,4),EDX)		/* EDX = second argument. */
+	ADDL(LIT(8),ESI)		/* skip registers. */
+	SUBL(LIT(8),ECX)
+	MOVL(ECX,DWORD(EBP,16))		/* save stack alloc size. */
+	SUBL(ECX,ESP)  			/* allocate stack. */
+	MOVL(ESP,EDI)  			/* EDI = stack args. */ 
+	REP(MOVSB) 			/* copy BYTEs. */
+	MOVL(EAX,ECX)			/* ECX = first argument. */ 
+	CALL_DWORD(EBP,8)		/* call target. */
+	POP(EDI)			/* restore preserved. */
+	POP(ESI)
+	MOVL(EBP,ESP)			/* epilog. */
+	POP(EBP)
+	RET()
+END_PROC(dcCall_x86_win32_fast)
+
+/*--- syscall int80 linux ---------------------------------------------------
+  
+  Details:
+  - all arguments are passed via registers
+
+*/
+
+GLOBAL(dcCall_x86_sys_int80h_linux)
+BEGIN_PROC(dcCall_x86_sys_int80h_linux)
+	PUSH(EBP)        		/* prolog. */
+ 	MOVL(ESP,EBP)
+	PUSH(EBX)			/* save preserved. */
+	PUSH(ESI)               
+	PUSH(EDI)
+	MOVL(DWORD(EBP,12),EAX)		/* EAX = argument buffer. */
+	MOVL(DWORD(EAX,0),EBX)		/* move first five arguments. */
+	MOVL(DWORD(EAX,4),ECX)	
+	MOVL(DWORD(EAX,8),EDX)
+	MOVL(DWORD(EAX,12),ESI)
+	MOVL(DWORD(EAX,16),EDI)
+	MOVL(DWORD(EBP,8),EAX)		/* EAX = syscall id. */
+	INT(LIT(HEX(80)))
+	POP(EDI)			/* restore preserved. */
+	POP(ESI)
+	POP(EBX)
+	MOVL(EBP,ESP)			/* epilog. */
+	POP(EBP)
+	RET()
+END_PROC(dcCall_x86_sys_int80h_linux)
+
+/*--- syscall int80 bsd -----------------------------------------------------
+
+  Details:
+  - all arguments are passed via stack
+
+*/
+	
+GLOBAL(dcCall_x86_sys_int80h_bsd)
+BEGIN_PROC(dcCall_x86_sys_int80h_bsd)
+	PUSH(EBP)			/* prolog. */
+ 	MOVL(ESP,EBP)
+	PUSH(ESI)			/* save preserved. */
+	PUSH(EDI)
+	MOVL(DWORD(EBP,12),ESI)    	/* ESI = pointer on args. */
+	MOVL(DWORD(EBP,16),ECX)   	/* ECX = size. */
+	SUBL(ECX,ESP)       		/* allocate stack space. */
+	MOVL(ESP,EDI)           		/* EDI = stack args. */
+	REP(MOVSB)
+	MOVL(DWORD(EBP,8),EAX)		/* load system call id. */
+	CALL(_do_int)
+	POP(EDI)               		/* restore preserved. */
+	POP(ESI)
+	MOVL(EBP,ESP)          		/* epilog. */
+	POP(EBP)
+	RET()
+_do_int:
+	INT(LIT(HEX(80)))
+	RET()
+END_PROC(dcCall_x86_sys_int80h_bsd)
+
+END_ASM
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_x86.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,71 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_x86.h
+ Description: heap memory management interface (header only)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall 32bit Intel x86 family interface
+
+  REVISION
+  2007/12/10 initial
+
+*/
+
+
+#ifndef DYNCALL_CALL_X86_H
+#define DYNCALL_CALL_X86_H
+
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* 
+** x86 calling convention calls 
+**
+** - hybrid return-type call (bool ... pointer)
+**
+*/
+
+#if defined(DC__OS_Plan9) /* No support for other cconvs on Plan9 and vice-versa. */
+void dcCall_x86_plan9        (DCpointer target, DCpointer stackdata, DCsize size);
+#else
+void dcCall_x86_cdecl        (DCpointer target, DCpointer stackdata, DCsize size);
+void dcCall_x86_win32_std    (DCpointer target, DCpointer stackdata, DCsize size);
+void dcCall_x86_win32_fast   (DCpointer target, DCpointer stackdata, DCsize size);
+void dcCall_x86_win32_msthis (DCpointer target, DCpointer stackdata, DCsize size);
+void dcCall_x86_sys_int80h_linux (DCpointer target, DCpointer stackdata, DCsize size);
+void dcCall_x86_sys_int80h_bsd   (DCpointer target, DCpointer stackdata, DCsize size);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* DYNCALL_CALL_X86_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_x86_8a.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,127 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_call_x86_8a.s
+ Description: All x86 abi call kernel implementations in Plan9's assembler
+ License:
+
+   Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/* 64 bit integer return value calls require caller to create space for return
+   value, and pass a pointer to it as 1st argument. This main function handles
+   all cases (32 and 64 bit integers, as well as floats and doubles), however,
+   it has to be called through the 2 corresponding functions at the end of
+   this file.
+   In order to keep things simple, we basically put the pointer to the
+   return value in EDX and call the other assembler code, above. If EDX
+   is not null, then the code below will push it to the stack as first
+   argument.
+*/
+
+call_main:
+
+    /* Since all registers except SP are scratch, and we have a variable
+       argument size depending on the function to call, we have to find
+       a way to store and restore SP.
+       The idea is to replace the return address with a custom one on the
+       stack, and to put some logic there, jumping back to the real
+       return address. This allows us, to put the SP somewhere next to
+       the fake return address on the stack, so that we can get it back
+       with a fixed offset (relative to the program counter, in our case).
+
+       The only real issue with this approach would be a non-executable
+       stack. However, Plan9 doesn't support w^x at the time of writing.
+    */
+
+    /* On the stack at this point:
+       RETADDR  0(SP)
+       FUNPTR   4(SP)
+       ARGS     8(SP)
+       SIZE    12(SP)
+    */
+
+    MOVL  SP, BP      /* base pointer for convenience */
+    PUSHL SP          /* save stack pointer */
+
+    MOVL   8(BP), SI  /* SI = pointer on args */
+    MOVL  12(BP), CX  /* CX = size of args */
+
+    SUBL  $16, SP     /* Make some room for our SP-refetch logic */
+    MOVL   SP, BX     /* Copy address to new, executable stack space to BX */
+
+/* This part fills our executable stack space with instructions. We
+       need to get the program counter, first, with a little hack. */
+    MOVL  $0x000003e8, 0(SP) /* Copy 'call (cur ip+8)' */
+    MOVL  $0x00000000, 4(SP) /* '00' for call address, rest is garbage */
+    MOVL  $0x5a909090, 8(SP) /* 'nop, nop, nop, pop edx' to get eip+5 in edx */
+    MOVL  $0xc30b628b,12(SP) /* Restore stack ptr and return: 'mov [edx+11] to esp, ret' */
+
+    SUBL  CX, SP      /* allocate 'size' bytes on stack for args */
+    MOVL  SP, DI      /* DI = stack args */
+
+    SHRL $2, SP       /* Align stack. */
+    SHLL $2, SP       /*   "     "    */
+
+    /* I didn't figure out how to use MOVSB with the 8a syntax. The following
+       can probably be written in a better way. */
+    JMP  copy_loop_cmp
+copy_loop:
+    MOVL 0(SI), AX     /* Copy args. */
+    MOVL AX, 0(DI)
+    SUBL $4, CX
+    ADDL $4, SI
+    ADDL $4, DI
+copy_loop_cmp:
+    CMPL CX, $0
+    JGT  copy_loop
+
+    /* Check if we need to push a pointer to long long that might be used as
+       container for 64-bit return values. */
+    CMPL DX, $0
+    JEQ  call_ffi
+    PUSHL DX
+
+    /* Now we try to fake a call, meaning setting up our fake return address,
+       and then jumping to the FFI call. This should call the function, but
+       the return will jump into our stack space we reserved above. */
+call_ffi:
+    PUSHL BX
+    MOVL  4(BP), BX
+    JMP   BX
+
+    /* Note that there is no return here, b/c the return is in the asm code
+       above, that has been generated on the fly. */
+
+
+/* Main call for 32 bit integer return values and floating point arguments.
+   See call_main for explanation. */
+TEXT dcCall_x86_plan9(SB), $0
+
+    MOVL $0, DX
+    JMP call_main
+
+
+/* Call for 64 bit integer return values.
+   See call_main for explanation. */
+TEXT dcCall_x86_plan9_ll(SB), $0
+
+    MOVL 16(SP), DX  /* Copy pointer to variable for return value. */
+    JMP call_main
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_x86_generic_masm.asm	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,136 @@
+; auto-generated by gen-masm.sh
+.386
+.MODEL FLAT
+.CODE
+
+_dcCall_x86_cdecl PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push EBP
+ mov EBP,ESP
+ push ESI
+ push EDI
+ mov ESI,dword ptr [EBP+12]
+ mov ECX,dword ptr [EBP+16]
+ add ECX,15
+ and ECX,-16
+ mov dword ptr [EBP+16],ECX
+ sub ESP,ECX
+ mov EDI,ESP
+ rep movsb
+ call dword ptr [EBP+8]
+ add ESP,dword ptr [EBP+16]
+ pop EDI
+ pop ESI
+ mov ESP,EBP
+ pop EBP
+ ret
+_dcCall_x86_cdecl ENDP
+_dcCall_x86_win32_msthis PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push EBP
+ mov EBP,ESP
+ push ESI
+ push EDI
+ mov ESI,dword ptr [EBP+12]
+ mov ECX,dword ptr [EBP+16]
+ mov EAX,dword ptr [ESI+0]
+ add ESI,4
+ sub ECX,4
+ sub ESP,ECX
+ mov EDI,ESP
+ rep movsb
+ mov ECX,EAX
+ call dword ptr [EBP+8]
+ pop EDI
+ pop ESI
+ mov ESP,EBP
+ pop EBP
+ ret
+_dcCall_x86_win32_msthis ENDP
+_dcCall_x86_win32_std PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push EBP
+ mov EBP,ESP
+ push ESI
+ push EDI
+ mov ESI,dword ptr [EBP+12]
+ mov ECX,dword ptr [EBP+16]
+ sub ESP,ECX
+ mov EDI,ESP
+ rep movsb
+ call dword ptr [EBP+8]
+ pop EDI
+ pop ESI
+ mov ESP,EBP
+ pop EBP
+ ret
+_dcCall_x86_win32_std ENDP
+_dcCall_x86_win32_fast PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push EBP
+ mov EBP,ESP
+ push ESI
+ push EDI
+ mov ESI,dword ptr [EBP+12]
+ mov ECX,dword ptr [EBP+16]
+ mov EAX,dword ptr [ESI+0]
+ mov EDX,dword ptr [ESI+4]
+ add ESI,8
+ sub ECX,8
+ mov dword ptr [EBP+16],ECX
+ sub ESP,ECX
+ mov EDI,ESP
+ rep movsb
+ mov ECX,EAX
+ call dword ptr [EBP+8]
+ pop EDI
+ pop ESI
+ mov ESP,EBP
+ pop EBP
+ ret
+_dcCall_x86_win32_fast ENDP
+_dcCall_x86_sys_int80h_linux PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push EBP
+  mov EBP,ESP
+ push EBX
+ push ESI
+ push EDI
+ mov EAX,dword ptr [EBP+12]
+ mov EBX,dword ptr [EAX+0]
+ mov ECX,dword ptr [EAX+4]
+ mov EDX,dword ptr [EAX+8]
+ mov ESI,dword ptr [EAX+12]
+ mov EDI,dword ptr [EAX+16]
+ mov EAX,dword ptr [EBP+8]
+ int 80h
+ pop EDI
+ pop ESI
+ pop EBX
+ mov ESP,EBP
+ pop EBP
+ ret
+_dcCall_x86_sys_int80h_linux ENDP
+_dcCall_x86_sys_int80h_bsd PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push EBP
+  mov EBP,ESP
+ push ESI
+ push EDI
+ mov ESI,dword ptr [EBP+12]
+ mov ECX,dword ptr [EBP+16]
+ sub ESP,ECX
+ mov EDI,ESP
+ rep movsb
+ mov EAX,dword ptr [EBP+8]
+ call _do_int
+ pop EDI
+ pop ESI
+ mov ESP,EBP
+ pop EBP
+ ret
+_do_int:
+ int 80h
+ ret
+_dcCall_x86_sys_int80h_bsd ENDP
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_call_x86_nasm.asm	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,234 @@
+;//////////////////////////////////////////////////////////////////////////////
+;
+; Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+;                         Tassilo Philipp <tphilipp@potion-studios.com>
+;
+; Permission to use, copy, modify, and distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+;
+;//////////////////////////////////////////////////////////////////////////////
+
+;///////////////////////////////////////////////////////////////////////
+;
+;	dyncall_call_x86_nasm.nasm
+;
+;	X86 Calls for nasm assembler
+;
+;///////////////////////////////////////////////////////////////////////
+
+
+    BITS 32
+    section .text
+
+;///////////////////////////////////////////////////////////////////////
+; CSYM macro
+;///////////////////////////////////////////////////////////////////////
+
+%ifdef BUILD_OS_windows
+
+%macro EXPORT_C 1
+  global _%1
+_%1:
+%endmacro
+
+%else
+
+%macro EXPORT_C 1
+  global %1
+%1:
+%endmacro
+
+%endif
+
+; -----------------------------------------------------------------------------
+; Calling Convention x86 standard C
+; - all arguments are on the stack
+; - caller cleans up stack
+;
+; C proto 
+;   dcCallC(DCptr funptr, DCptr args, DCsize size)
+; -----------------------------------------------------------------------------
+
+EXPORT_C dcCall_x86_cdecl
+
+	push ebp              ; prolog 
+	mov  ebp, esp         
+
+	; arguments:
+	;
+	; funptr  ebp+8
+	; args    ebp+12
+	; size    ebp+16
+	; result  ebp+20
+
+	push esi              ; save esi, edi
+	push edi
+
+	mov  esi, [ebp+12]    ; esi = pointer on args
+	mov  ecx, [ebp+16]    ; ecx = size
+
+	sub  esp, ecx         ; cdecl call: allocate 'size' bytes on stack
+	mov  edi, esp         ; edi = stack args
+
+	rep movsb             ; copy arguments
+
+	call [ebp+8]          ; call function
+
+	add  esp, [ebp+16]    ; cdecl call: cleanup stack
+
+	pop  edi              ; restore edi, esi
+	pop  esi
+
+	mov  esp, ebp         ; epilog
+	pop  ebp
+
+	ret
+
+; -----------------------------------------------------------------------------
+; Calling Convention x86 microsoft thiscall
+; - thispointer is in ECX, rest is on the stack
+; - callee cleans up stack
+;  
+; C proto
+;   dcCallThisMS(DCptr funptr, DCptr args, DCsize size)
+; -----------------------------------------------------------------------------
+EXPORT_C dcCall_x86_win32_msthis
+    
+	push ebp              ; prolog 
+	mov  ebp, esp         
+
+	; arguments:
+	;
+	; funptr  ebp+8
+	; args    ebp+12
+	; size    ebp+16
+
+	push esi              ; save esi, edi
+	push edi
+
+	mov  esi, [ebp+12]    ; esi = pointer on args
+	mov  ecx, [ebp+16]    ; ecx = size
+
+	mov  eax, [esi]       ; eax = this pointer
+	add  esi, 4           ; increment args pointer by thisptr
+	sub  ecx, 4           ; decrement size by sizeof(thisptr)
+
+	sub  esp, ecx         ; allocate argument-block on stack
+	mov  edi, esp         ; edi = stack args
+
+	rep movsb             ; copy arguments
+
+	mov  ecx, eax         ; ecx = this pointer
+
+	call [ebp+8]          ; call function (thiscall: cleanup by callee)
+
+	pop  edi              ; restore edi, esi
+	pop  esi
+
+	mov  esp, ebp         ; epilog
+	pop  ebp
+
+	ret    
+
+; -----------------------------------------------------------------------------
+; Calling Convention x86 win32 stdcall
+; - all arguments are passed by stack
+; - callee cleans up stack
+; 
+; C proto
+;   dcCallStd(DCptr funptr, DCptr args, DCsize size)
+; -----------------------------------------------------------------------------
+EXPORT_C dcCall_x86_win32_std
+
+	push ebp              ; prolog 
+	mov  ebp, esp         
+
+	; arguments:
+	;
+	; funptr  ebp+8
+	; args    ebp+12
+	; size    ebp+16
+
+	push esi              ; save esi, edi
+	push edi
+
+	mov  esi, [ebp+12]    ; esi = pointer on args
+	mov  ecx, [ebp+16]    ; ecx = size
+
+	sub  esp, ecx         ; stdcall: allocate 'size'-8 bytes on stack
+	mov  edi, esp         ; edi = stack args
+
+	rep movsb             ; copy arguments
+
+	call [ebp+8]          ; call function (stdcall: cleanup by callee)
+
+	pop  edi              ; restore edi, esi
+	pop  esi
+
+	mov  esp, ebp         ; epilog
+	pop  ebp
+
+	ret
+
+; -----------------------------------------------------------------------------
+; Calling Convention x86 win32 fastcall
+; - first two integer (up to 32bits) are passed in ECX and EDX
+; - others are passed on the stack
+; - callee cleans up stack
+; 
+; C proto
+;   dcCallFast(DCptr funptr, DCptr args, DCsize size)
+; -----------------------------------------------------------------------------
+EXPORT_C dcCall_x86_win32_fast
+
+	push ebp              ; prolog 
+	mov  ebp, esp
+
+	; arguments:
+	;
+	; funptr  ebp+8
+	; args    ebp+12
+	; size    ebp+16
+
+	push esi              ; save esi, edi
+	push edi
+
+	mov  esi, [ebp+12]    ; esi = pointer on args
+	mov  ecx, [ebp+16]    ; ecx = size
+	mov  eax, [esi]       ; eax = first argument
+	mov  edx, [esi+4]     ; edx = second argument
+	add  esi, 8           ; increment source pointer
+	sub  ecx, 8           ; decrement size by 8
+
+	sub  esp, ecx         ; fastcall: allocate 'size'-8 bytes on stack
+	mov  edi, esp         ; edi = stack args
+
+	rep movsb             ; copy arguments
+
+	mov  ecx, eax         ; ecx = first argument
+
+	call [ebp+8]          ; call function (fastcall: cleanup by callee)
+
+	pop  edi              ; restore edi, esi
+	pop  esi
+
+	mov  esp, ebp         ; epilog
+	pop  ebp
+
+	ret    
+
+; Stack markings for ELF/GNU to specify no executable stack */
+
+%ifidn __OUTPUT_FORMAT__,elf
+section .note.GNU-stack noalloc noexec nowrite progbits
+%endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callf.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,102 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callf.c
+ Description: formatted call C interface (extension module)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_callf.h"
+
+
+// Shareable implementation for argument binding used in ArgF and CallF  below.
+static void dcArgF_impl(DCCallVM* vm, const DCsigchar** sigptr, va_list args)
+{
+  DCsigchar ch;
+  dcReset(vm);
+  while((ch=*(*sigptr)++) != '\0' && ch != DC_SIGCHAR_ENDARG) {
+    switch(ch) {
+      case DC_SIGCHAR_BOOL:      dcArgBool    (vm, (DCbool)           va_arg(args, DCint     )); break;
+      case DC_SIGCHAR_CHAR:      dcArgChar    (vm, (DCchar)           va_arg(args, DCint     )); break;
+      case DC_SIGCHAR_UCHAR:     dcArgChar    (vm, (DCchar)(DCuchar)  va_arg(args, DCint     )); break;
+      case DC_SIGCHAR_SHORT:     dcArgShort   (vm, (DCshort)          va_arg(args, DCint     )); break;
+      case DC_SIGCHAR_USHORT:    dcArgShort   (vm, (DCshort)(DCushort)va_arg(args, DCint     )); break;
+      case DC_SIGCHAR_INT:       dcArgInt     (vm, (DCint)            va_arg(args, DCint     )); break;
+      case DC_SIGCHAR_UINT:      dcArgInt     (vm, (DCint)(DCuint)    va_arg(args, DCint     )); break;
+      case DC_SIGCHAR_LONG:      dcArgLong    (vm, (DClong)           va_arg(args, DClong    )); break;
+      case DC_SIGCHAR_ULONG:     dcArgLong    (vm, (DCulong)          va_arg(args, DClong    )); break;
+      case DC_SIGCHAR_LONGLONG:  dcArgLongLong(vm, (DClonglong)       va_arg(args, DClonglong)); break;
+      case DC_SIGCHAR_ULONGLONG: dcArgLongLong(vm, (DCulonglong)      va_arg(args, DClonglong)); break;
+      case DC_SIGCHAR_FLOAT:     dcArgFloat   (vm, (DCfloat)          va_arg(args, DCdouble  )); break;
+      case DC_SIGCHAR_DOUBLE:    dcArgDouble  (vm, (DCdouble)         va_arg(args, DCdouble  )); break;
+      case DC_SIGCHAR_POINTER:   dcArgPointer (vm, (DCpointer)        va_arg(args, DCpointer )); break;
+      case DC_SIGCHAR_STRING:    dcArgPointer (vm, (DCpointer)        va_arg(args, DCpointer )); break;
+    }
+  }
+}
+
+void dcVArgF(DCCallVM* vm, const DCsigchar* signature, va_list args)
+{
+  dcArgF_impl(vm, &signature, args);
+}
+
+void dcArgF(DCCallVM* vm, const DCsigchar* signature, ...)
+{
+  va_list va;
+  va_start(va, signature);
+  dcVArgF(vm,signature,va);
+  va_end(va);
+}
+
+void dcVCallF(DCCallVM* vm, DCValue* result, DCpointer funcptr, const DCsigchar* signature, va_list args)
+{
+  const DCsigchar* ptr = signature;
+  dcArgF_impl(vm, &ptr, args);
+
+  switch(*ptr) {
+    case DC_SIGCHAR_VOID:                   dcCallVoid         (vm,funcptr); break;
+    case DC_SIGCHAR_BOOL:       result->B = dcCallBool         (vm,funcptr); break;
+    case DC_SIGCHAR_CHAR:       result->c = dcCallChar         (vm,funcptr); break;
+    case DC_SIGCHAR_UCHAR:      result->C = (DCuchar)dcCallChar(vm,funcptr); break;
+    case DC_SIGCHAR_SHORT:      result->s = dcCallShort        (vm,funcptr); break;
+    case DC_SIGCHAR_USHORT:     result->S = dcCallShort        (vm,funcptr); break;
+    case DC_SIGCHAR_INT:        result->i = dcCallInt          (vm,funcptr); break;
+    case DC_SIGCHAR_UINT:       result->I = dcCallInt          (vm,funcptr); break;
+    case DC_SIGCHAR_LONG:       result->j = dcCallLong         (vm,funcptr); break;
+    case DC_SIGCHAR_ULONG:      result->J = dcCallLong         (vm,funcptr); break;
+    case DC_SIGCHAR_LONGLONG:   result->l = dcCallLongLong     (vm,funcptr); break;
+    case DC_SIGCHAR_ULONGLONG:  result->L = dcCallLongLong     (vm,funcptr); break;
+    case DC_SIGCHAR_FLOAT:      result->f = dcCallFloat        (vm,funcptr); break;
+    case DC_SIGCHAR_DOUBLE:     result->d = dcCallDouble       (vm,funcptr); break;
+    case DC_SIGCHAR_POINTER:    result->p = dcCallPointer      (vm,funcptr); break;
+    case DC_SIGCHAR_STRING:     result->Z = dcCallPointer      (vm,funcptr); break;
+  }
+}
+
+void dcCallF(DCCallVM* vm, DCValue* result, DCpointer funcptr, const DCsigchar* signature, ...)
+{
+  va_list va;
+  va_start(va, signature);
+  dcVCallF(vm,result,funcptr,signature,va);
+  va_end(va);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callf.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,56 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callf.h
+ Description: formatted call interface to dyncall
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall formatted calls C API
+
+  REVISION
+  2007/12/11 initial
+  
+*/
+
+
+#ifndef DYNCALL_CALLF_H
+#define DYNCALL_CALLF_H
+
+/* dyncall formatted calls */
+
+#include "dyncall.h"
+#include "dyncall_signature.h"
+#include "dyncall_value.h"
+
+#include <stdarg.h>
+
+void dcArgF (DCCallVM* vm, const DCsigchar* signature, ...);
+void dcVArgF(DCCallVM* vm, const DCsigchar* signature, va_list args);
+
+void dcCallF (DCCallVM* vm, DCValue* result, DCpointer funcptr, const DCsigchar* signature, ...);
+void dcVCallF(DCCallVM* vm, DCValue* result, DCpointer funcptr, const DCsigchar* signature, va_list args);
+
+#endif /* DYNCALL_CALLF_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,77 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm.c
+ Description: auto-select default callvm (includes other C sources).
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_macros.h"
+
+#if defined(DC__Arch_Intel_x86)
+#  include "dyncall_callvm_x86.c"
+#elif defined(DC__Arch_AMD64)
+#  include "dyncall_callvm_x64.c"
+#elif defined(DC__Arch_PPC32)
+#  include "dyncall_callvm_ppc32.c"
+#elif defined(DC__Arch_PPC64)
+#  include "dyncall_callvm_ppc64.c"
+#elif defined(DC__Arch_MIPS) || defined(DC__Arch_MIPS64)
+#  if defined(DC__ABI_MIPS_EABI)
+#    include "dyncall_callvm_mips_eabi.c"
+#  elif defined(DC__ABI_MIPS_O32)
+#    include "dyncall_callvm_mips_o32.c"
+#  elif defined(DC__ABI_MIPS_N64)
+#    include "dyncall_callvm_mips_n64.c"
+#  elif defined(DC__ABI_MIPS_N32)
+#    include "dyncall_callvm_mips_n32.c"
+#  else
+#    error Unknown MIPS ABI.
+#  endif /* DC__Arch_MIPS || DC__Arch_MIPS64 */
+#elif defined(DC__Arch_ARM_ARM)
+#  if defined(DC__ABI_ARM_HF)
+#    include "dyncall_callvm_arm32_arm_armhf.c"
+#  else
+#    include "dyncall_callvm_arm32_arm.c"
+#  endif
+#elif defined(DC__Arch_ARM_THUMB)
+#  if defined(DC__ABI_ARM_HF)
+#    include "dyncall_callvm_arm32_arm_armhf.c"
+#  else
+#    include "dyncall_callvm_arm32_thumb.c"
+#  endif
+#elif defined(DC__Arch_ARM64)
+#  if defined(DC__OS_Darwin)
+#    include "dyncall_callvm_arm64_apple.c"
+#  else
+#    include "dyncall_callvm_arm64.c"
+#  endif
+#elif defined(DC__Arch_Sparc)
+#  include "dyncall_callvm_sparc.c"
+#elif defined(DC__Arch_Sparcv9)
+#  include "dyncall_callvm_sparc_v9.c"
+#elif defined(DC__Arch_RiscV)
+#  include "dyncall_callvm_riscv.c"
+#else
+#  error unsupported platform
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,89 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm.h
+ Description: Common call vm binary interface.
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALLVM_H
+#define DYNCALL_CALLVM_H
+
+#include "dyncall.h"
+
+/* --- callvm virtual function table --------------------------------------- */
+
+/* NOTE: if something changes in DCCallVM_, update offset marks in dyncall_call_sparc.S */
+
+typedef struct DCCallVM_vt_ DCCallVM_vt;
+
+struct DCCallVM_
+{
+  DCCallVM_vt* mVTpointer;
+  DCint        mError;
+};
+
+struct DCCallVM_vt_
+{
+  void         (*free)           (DCCallVM* vm);
+  void         (*reset)          (DCCallVM* vm);
+  void         (*mode)           (DCCallVM* vm,DCint        mode);
+  void         (*argBool)        (DCCallVM* vm,DCbool          B);
+  void         (*argChar)        (DCCallVM* vm,DCchar          c);
+  void         (*argShort)       (DCCallVM* vm,DCshort         s);
+  void         (*argInt)         (DCCallVM* vm,DCint           i);
+  void         (*argLong)        (DCCallVM* vm,DClong          l);
+  void         (*argLongLong)    (DCCallVM* vm,DClonglong      L);
+  void         (*argFloat)       (DCCallVM* vm,DCfloat         f);
+  void         (*argDouble)      (DCCallVM* vm,DCdouble        d);
+  void         (*argPointer)     (DCCallVM* vm,DCpointer       p);
+  void         (*argStruct)      (DCCallVM* vm,DCstruct* s, DCpointer p);
+  void         (*callVoid)       (DCCallVM* vm,DCpointer funcptr);
+  DCbool       (*callBool)       (DCCallVM* vm,DCpointer funcptr);
+  DCchar       (*callChar)       (DCCallVM* vm,DCpointer funcptr);
+  DCshort      (*callShort)      (DCCallVM* vm,DCpointer funcptr);
+  DCint        (*callInt)        (DCCallVM* vm,DCpointer funcptr);
+  DClong       (*callLong)       (DCCallVM* vm,DCpointer funcptr);
+  DClonglong   (*callLongLong)   (DCCallVM* vm,DCpointer funcptr);
+  DCfloat      (*callFloat)      (DCCallVM* vm,DCpointer funcptr);
+  DCdouble     (*callDouble)     (DCCallVM* vm,DCpointer funcptr);
+  DCpointer    (*callPointer)    (DCCallVM* vm,DCpointer funcptr);
+  void         (*callStruct)     (DCCallVM* vm,DCpointer funcptr,DCstruct* s, DCpointer returnValue);
+};
+
+typedef DCvoid       (DCvoidvmfunc)      (DCCallVM* vm,DCpointer funcptr); 
+typedef DCbool       (DCboolvmfunc)      (DCCallVM* vn,DCpointer funcptr);
+typedef DCchar       (DCcharvmfunc)      (DCCallVM* vm,DCpointer funcptr);
+typedef DCshort      (DCshortvmfunc)     (DCCallVM* vm,DCpointer funcptr);
+typedef DCint        (DCintvmfunc)       (DCCallVM* vm,DCpointer funcptr);
+typedef DClong       (DClongvmfunc)      (DCCallVM* vm,DCpointer funcptr);
+typedef DClonglong   (DClonglongvmfunc)  (DCCallVM* vm,DCpointer funcptr);
+typedef DCfloat      (DCfloatvmfunc)     (DCCallVM* vm,DCpointer funcptr);
+typedef DCdouble     (DCdoublevmfunc)    (DCCallVM* vm,DCpointer funcptr);
+typedef DCpointer    (DCpointervmfunc)   (DCCallVM* vm,DCpointer funcptr);
+
+/* Common base functions for CallVM implementations. */
+
+void dc_callvm_base_init(DCCallVM *pInstance, DCCallVM_vt* pVTable);
+
+#endif /* DYNCALL_CALLVM_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_arm32_arm.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,251 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_arm32_arm.c
+ Description: ARM 32-bit "arm" ABI callvm implementation
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall callvm for 32bit ARM32 family of processors
+
+  SUPPORTED CALLING CONVENTIONS
+  armcall
+
+  REVISION
+  2007/12/11 initial
+
+*/
+
+
+#include "dyncall_callvm_arm32_arm.h"
+#include "dyncall_alloc.h"
+
+static void dc_callvm_mode_arm32_arm(DCCallVM* in_self,DCint mode);
+
+static DCCallVM* dc_callvm_new_arm32_arm(DCCallVM_vt* vt, DCsize size)
+{
+  /* Store at least 16 bytes (4 words) for internal spill area. Assembly code depends on it. */
+  DCCallVM_arm32_arm* self = (DCCallVM_arm32_arm*)dcAllocMem(sizeof(DCCallVM_arm32_arm)+size+16);
+  dc_callvm_base_init(&self->mInterface, vt);
+  dcVecInit(&self->mVecHead, size);
+  return (DCCallVM*)self;
+}
+
+
+static void dc_callvm_free_arm32_arm(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+
+static void dc_callvm_reset_arm32_arm(DCCallVM* in_self)
+{
+  DCCallVM_arm32_arm* self = (DCCallVM_arm32_arm*)in_self;
+  dcVecReset(&self->mVecHead);
+}
+
+
+static void dc_callvm_argInt_arm32_arm(DCCallVM* in_self, DCint x)
+{
+  DCCallVM_arm32_arm* self = (DCCallVM_arm32_arm*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCint));
+}
+
+
+static void dc_callvm_argBool_arm32_arm(DCCallVM* in_self, DCbool x)
+{
+  dc_callvm_argInt_arm32_arm(in_self, (DCint)x);
+}
+
+
+static void dc_callvm_argChar_arm32_arm(DCCallVM* in_self, DCchar x)
+{
+  dc_callvm_argInt_arm32_arm(in_self, x);
+}
+
+
+static void dc_callvm_argShort_arm32_arm(DCCallVM* in_self, DCshort x)
+{
+  dc_callvm_argInt_arm32_arm(in_self, x);
+}
+
+
+static void dc_callvm_argLong_arm32_arm(DCCallVM* in_self, DClong x)
+{
+  dc_callvm_argInt_arm32_arm(in_self, x);
+}
+
+
+static void dc_callvm_argLongLong_arm32_arm(DCCallVM* in_self, DClonglong x)
+{
+  DCCallVM_arm32_arm* self = (DCCallVM_arm32_arm*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DClonglong));
+}
+
+
+static void dc_callvm_argLongLong_arm32_arm_eabi(DCCallVM* in_self, DClonglong x)
+{
+  DCCallVM_arm32_arm* self = (DCCallVM_arm32_arm*)in_self;
+
+  /* 64 bit values need to be aligned on 8 byte boundaries */
+  dcVecSkip(&self->mVecHead, dcVecSize(&self->mVecHead) & 4);
+  dcVecAppend(&self->mVecHead, &x, sizeof(DClonglong));
+}
+
+
+static void dc_callvm_argFloat_arm32_arm(DCCallVM* in_self, DCfloat x)
+{
+  DCCallVM_arm32_arm* self = (DCCallVM_arm32_arm*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCfloat));
+}
+
+
+static void dc_callvm_argDouble_arm32_arm(DCCallVM* in_self, DCdouble x)
+{
+  DCCallVM_arm32_arm* self = (DCCallVM_arm32_arm*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble));
+}
+
+
+static void dc_callvm_argDouble_arm32_arm_eabi(DCCallVM* in_self, DCdouble x)
+{
+  DCCallVM_arm32_arm* self = (DCCallVM_arm32_arm*)in_self;
+
+  /* 64 bit values need to be aligned on 8 byte boundaries */
+  dcVecSkip(&self->mVecHead, dcVecSize(&self->mVecHead) & 4);
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble));
+}
+
+
+static void dc_callvm_argPointer_arm32_arm(DCCallVM* in_self, DCpointer x)
+{
+  DCCallVM_arm32_arm* self = (DCCallVM_arm32_arm*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCpointer));
+}
+
+
+/* Call. */
+void dc_callvm_call_arm32_arm(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_arm32_arm* self = (DCCallVM_arm32_arm*)in_self;
+  dcCall_arm32_arm(target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead));
+}
+
+
+DCCallVM_vt gVT_arm32_arm =
+{
+  &dc_callvm_free_arm32_arm
+, &dc_callvm_reset_arm32_arm
+, &dc_callvm_mode_arm32_arm
+, &dc_callvm_argBool_arm32_arm
+, &dc_callvm_argChar_arm32_arm
+, &dc_callvm_argShort_arm32_arm 
+, &dc_callvm_argInt_arm32_arm
+, &dc_callvm_argLong_arm32_arm
+, &dc_callvm_argLongLong_arm32_arm
+, &dc_callvm_argFloat_arm32_arm
+, &dc_callvm_argDouble_arm32_arm
+, &dc_callvm_argPointer_arm32_arm
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_arm32_arm
+, (DCboolvmfunc*)       &dc_callvm_call_arm32_arm
+, (DCcharvmfunc*)       &dc_callvm_call_arm32_arm
+, (DCshortvmfunc*)      &dc_callvm_call_arm32_arm
+, (DCintvmfunc*)        &dc_callvm_call_arm32_arm
+, (DClongvmfunc*)       &dc_callvm_call_arm32_arm
+, (DClonglongvmfunc*)   &dc_callvm_call_arm32_arm
+, (DCfloatvmfunc*)      &dc_callvm_call_arm32_arm
+, (DCdoublevmfunc*)     &dc_callvm_call_arm32_arm
+, (DCpointervmfunc*)    &dc_callvm_call_arm32_arm
+, NULL /* callStruct */
+};
+
+
+DCCallVM_vt gVT_arm32_arm_eabi =
+{
+  &dc_callvm_free_arm32_arm
+, &dc_callvm_reset_arm32_arm
+, &dc_callvm_mode_arm32_arm
+, &dc_callvm_argBool_arm32_arm
+, &dc_callvm_argChar_arm32_arm
+, &dc_callvm_argShort_arm32_arm 
+, &dc_callvm_argInt_arm32_arm
+, &dc_callvm_argLong_arm32_arm
+, &dc_callvm_argLongLong_arm32_arm_eabi
+, &dc_callvm_argFloat_arm32_arm
+, &dc_callvm_argDouble_arm32_arm_eabi
+, &dc_callvm_argPointer_arm32_arm
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_arm32_arm
+, (DCboolvmfunc*)       &dc_callvm_call_arm32_arm
+, (DCcharvmfunc*)       &dc_callvm_call_arm32_arm
+, (DCshortvmfunc*)      &dc_callvm_call_arm32_arm
+, (DCintvmfunc*)        &dc_callvm_call_arm32_arm
+, (DClongvmfunc*)       &dc_callvm_call_arm32_arm
+, (DClonglongvmfunc*)   &dc_callvm_call_arm32_arm
+, (DCfloatvmfunc*)      &dc_callvm_call_arm32_arm
+, (DCdoublevmfunc*)     &dc_callvm_call_arm32_arm
+, (DCpointervmfunc*)    &dc_callvm_call_arm32_arm
+, NULL /* callStruct */
+};
+
+
+DCCallVM* dcNewCallVM_arm32_arm(DCsize size) 
+{
+/* Check OS if we need EABI as default. */
+#if defined(DC__ABI_ARM_EABI)
+  return dc_callvm_new_arm32_arm(&gVT_arm32_arm_eabi, size);
+#else
+  return dc_callvm_new_arm32_arm(&gVT_arm32_arm, size);
+#endif
+}
+
+
+DCCallVM* dcNewCallVM(DCsize size)
+{
+  return dcNewCallVM_arm32_arm(size);
+}
+
+static void dc_callvm_mode_arm32_arm(DCCallVM* in_self,DCint mode)
+{
+  DCCallVM_arm32_arm* self = (DCCallVM_arm32_arm*) in_self;
+  DCCallVM_vt*  vt;
+  switch(mode) {
+/* Check OS if we need EABI as default. */
+    case DC_CALL_C_ELLIPSIS:
+    case DC_CALL_C_ELLIPSIS_VARARGS:
+#if defined(DC__ABI_ARM_EABI)
+    case DC_CALL_C_DEFAULT:          vt = &gVT_arm32_arm_eabi; break;
+#else
+    case DC_CALL_C_DEFAULT:          vt = &gVT_arm32_arm;      break;
+#endif
+    case DC_CALL_C_ARM_ARM:          vt = &gVT_arm32_arm;      break;
+    case DC_CALL_C_ARM_ARM_EABI:     vt = &gVT_arm32_arm_eabi; break;
+    default: 
+      in_self->mError = DC_ERROR_UNSUPPORTED_MODE;
+      return;
+  }
+  self->mInterface.mVTpointer = vt;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_arm32_arm.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,60 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_arm32_arm.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall callvm for 32bit ARM32 family of processors
+
+  SUPPORTED CALLING CONVENTIONS
+  armcall
+
+  REVISION
+  2007/12/11 initial
+
+*/
+
+
+#ifndef DYNCALL_CALLVM_ARM32_ARM_H
+#define DYNCALL_CALLVM_ARM32_ARM_H
+
+#include "dyncall_call_arm32_arm.h"
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+
+typedef struct
+{
+  DCCallVM  mInterface;
+  DCpointer mpCallFunc;
+  DCVecHead mVecHead;
+} DCCallVM_arm32_arm;
+
+DCCallVM* dcNewCallVM_arm32_arm(DCsize size);
+
+
+#endif /* DYNCALL_CALLVM_ARM32_ARM_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_arm32_arm_armhf.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,205 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_arm32_arm_armhf.c
+ Description: ARM 'armhf' ABI implementation
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_callvm_arm32_arm_armhf.h"
+#include "dyncall_alloc.h"
+
+
+static DCCallVM* dc_callvm_new_arm32_armhf(DCCallVM_vt* vt, DCsize size)
+{
+  /* Store at least 16 bytes (4 words) for internal spill area. Assembly code depends on it. */
+  DCCallVM_arm32_armhf* p = (DCCallVM_arm32_armhf*)dcAllocMem(sizeof(DCCallVM_arm32_armhf)+size+16);
+  dc_callvm_base_init(&p->mInterface, vt);
+  dcVecInit(&p->mVecHead, size);
+  p->i = 0;
+  p->s = 0;
+  p->d = 0;
+  return (DCCallVM*)p;
+}
+
+static void mode(DCCallVM* in_self,DCint mode);
+
+static void deinit(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+
+static void reset(DCCallVM* in_p)
+{
+  DCCallVM_arm32_armhf* p = (DCCallVM_arm32_armhf*)in_p;
+  p->i = 0;
+  p->s = 0;
+  p->d = 0;
+  dcVecResize(&p->mVecHead, 16);
+}
+
+static void a_int(DCCallVM* in_self, DCint x)
+{
+  DCCallVM_arm32_armhf* p = (DCCallVM_arm32_armhf*)in_self;
+  if (p->i < 16) {
+    * (DCint*) dcVecAt(&p->mVecHead, p->i) = x;
+    p->i += 4;
+  } else {
+    dcVecAppend(&p->mVecHead, &x, sizeof(DCint));
+  }
+}
+
+static void a_bool    (DCCallVM* in_self, DCbool  x) { a_int(in_self, (DCint)x); }
+static void a_char    (DCCallVM* in_self, DCchar  x) { a_int(in_self, x); }
+static void a_short   (DCCallVM* in_self, DCshort x) { a_int(in_self, x); }
+static void a_long    (DCCallVM* in_self, DClong  x) { a_int(in_self, x); }
+static void a_longlong(DCCallVM* in_self, DClonglong x)
+{
+  DCCallVM_arm32_armhf* p = (DCCallVM_arm32_armhf*)in_self;
+
+  p->i = (p->i+4) & -8;
+  if (p->i < 16) {
+    * (DClonglong*) dcVecAt(&p->mVecHead, p->i) = x;
+    p->i += 8;
+  } else {
+    /* 64 bit values need to be aligned on 8 byte boundaries */
+    dcVecSkip(&p->mVecHead, dcVecSize(&p->mVecHead) & 4);
+    dcVecAppend(&p->mVecHead, &x, sizeof(DClonglong));
+  }
+}
+static void a_pointer(DCCallVM* in_p, DCpointer x) { a_int(in_p, (DCint) x ); }
+
+static void a_float(DCCallVM* in_p, DCfloat x)
+{
+  DCCallVM_arm32_armhf* p = (DCCallVM_arm32_armhf*)in_p;
+  if (p->s < 16) {
+    p->S[p->s++] = x;
+    if (p->d < p->s) {
+      p->d = (p->s+1) & ~(1U);
+    } else {
+      p->s = p->d;
+    }
+  } else {
+    dcVecAppend(&p->mVecHead, &x, sizeof(DCfloat));
+  } 
+}
+
+static void a_double(DCCallVM* in_p, DCdouble x)
+{
+  DCCallVM_arm32_armhf* p = (DCCallVM_arm32_armhf*)in_p;
+  if (p->d < 16) {
+    * (double*) &p->S[p->d] = x;
+    p->d += 2;
+    if (!(p->s & 1)) {
+      /* if s is even it always equals d. 
+	 otherwise, s points to an odd float register. 
+       */
+      p->s = p->d;
+    }
+  } else {
+    p->s = 16;
+    union {
+      DCdouble d;
+      DCchar   b[8];
+    } v; // ,w;
+    v.d = x;
+#if 0
+    w.b[0] = v.b[7];
+    w.b[1] = v.b[6];
+    w.b[2] = v.b[5];
+    w.b[3] = v.b[4];
+    w.b[4] = v.b[3];
+    w.b[5] = v.b[2];
+    w.b[6] = v.b[1];
+    w.b[7] = v.b[0];
+#endif
+    /* 64 bit values need to be aligned on 8 byte boundaries */
+    dcVecSkip(&p->mVecHead, dcVecSize(&p->mVecHead) & 4);
+    dcVecAppend(&p->mVecHead, &v.b[0], sizeof(DCdouble));
+  }
+}
+
+void call(DCCallVM* in_p, DCpointer target)
+{
+  DCCallVM_arm32_armhf* p = (DCCallVM_arm32_armhf*)in_p;
+  dcCall_arm32_armhf(target, dcVecData(&p->mVecHead), dcVecSize(&p->mVecHead), &p->S[0]);
+}
+
+DCCallVM_vt vt_armhf =
+{
+  &deinit
+, &reset
+, &mode
+, &a_bool
+, &a_char
+, &a_short 
+, &a_int
+, &a_long
+, &a_longlong
+, &a_float
+, &a_double
+, &a_pointer
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &call
+, (DCboolvmfunc*)       &call
+, (DCcharvmfunc*)       &call
+, (DCshortvmfunc*)      &call
+, (DCintvmfunc*)        &call
+, (DClongvmfunc*)       &call
+, (DClonglongvmfunc*)   &call
+, (DCfloatvmfunc*)      &call
+, (DCdoublevmfunc*)     &call
+, (DCpointervmfunc*)    &call
+, NULL /* callStruct */
+};
+
+DCCallVM* dcNewCallVM(DCsize size) 
+{
+#if defined(DC__ABI_ARM_EABI)
+  return dc_callvm_new_arm32_arm(&eabi, size);
+#elif defined(DC__ABI_ARM_HF)
+  return dc_callvm_new_arm32_armhf(&vt_armhf, size);
+#elif defined(DC__ABI_ARM_OABI)
+  return dc_callvm_new_arm32_arm(&oabi, size);
+#else
+#error unknown ARM abi
+#endif
+}
+
+static void mode(DCCallVM* in_self,DCint mode)
+{
+  DCCallVM_arm32_armhf* self = (DCCallVM_arm32_armhf*) in_self;
+  DCCallVM_vt*  vt;
+  switch(mode) {
+    case DC_CALL_C_DEFAULT:        
+    case DC_CALL_C_ELLIPSIS:
+    case DC_CALL_C_ELLIPSIS_VARARGS:
+    case DC_CALL_C_ARM_ARMHF:        
+      vt = &vt_armhf;
+      break;
+    default: 
+      in_self->mError = DC_ERROR_UNSUPPORTED_MODE;
+      return;
+  }
+  self->mInterface.mVTpointer = vt;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_arm32_arm_armhf.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,64 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_arm32_arm_armhf.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall callvm for 32bit ARM32 family of processors
+
+  SUPPORTED CALLING CONVENTIONS
+  armcall
+
+  REVISION
+  2007/12/11 initial
+
+*/
+
+
+#ifndef DYNCALL_CALLVM_ARM32_ARM_ARMHF_H
+#define DYNCALL_CALLVM_ARM32_ARM_ARMHF_H
+
+#include "dyncall_call_arm32_arm_armhf.h"
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+
+typedef struct
+{
+  DCCallVM     mInterface;
+  unsigned int i;
+  unsigned int s;
+  unsigned int d;
+  DCfloat      S[16];
+  DCpointer    mpCallFunc;
+  DCVecHead    mVecHead;
+} DCCallVM_arm32_armhf;
+
+DCCallVM* dcNewCallVM_arm32_armhf(DCsize size);
+
+
+#endif /* DYNCALL_CALLVM_ARM32_ARM_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_arm32_thumb.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,272 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_arm32_thumb.c
+ Description: ARM 32-bit "thumb" ABI callvm implementation
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall callvm for 32bit ARM32 family of processors
+
+  SUPPORTED CALLING CONVENTIONS
+  armthumbcall
+
+  REVISION
+  2007/12/11 initial
+
+*/
+
+
+#include "dyncall_callvm_arm32_thumb.h"
+#include "dyncall_alloc.h"
+
+static void dc_callvm_mode_arm32_thumb(DCCallVM* in_self,DCint mode);
+
+static DCCallVM* dc_callvm_new_arm32_thumb(DCCallVM_vt* vt, DCsize size)
+{
+  /* Store at least 16 bytes (4 words) for internal spill area. Assembly code depends on it. */
+  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*)dcAllocMem(sizeof(DCCallVM_arm32_thumb)+size+16);
+  dc_callvm_base_init(&self->mInterface, vt);
+  dcVecInit(&self->mVecHead, size);
+  return (DCCallVM*)self;
+}
+
+
+static void dc_callvm_free_arm32_thumb(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+
+static void dc_callvm_reset_arm32_thumb(DCCallVM* in_self)
+{
+  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*)in_self;
+  dcVecReset(&self->mVecHead);
+}
+
+
+static void dc_callvm_argInt_arm32_thumb(DCCallVM* in_self, DCint x)
+{
+  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCint));
+}
+
+
+static void dc_callvm_argBool_arm32_thumb(DCCallVM* in_self, DCbool x)
+{
+  dc_callvm_argInt_arm32_thumb(in_self, (DCint)x);
+}
+
+
+static void dc_callvm_argChar_arm32_thumb(DCCallVM* in_self, DCchar x)
+{
+  dc_callvm_argInt_arm32_thumb(in_self, x);
+}
+
+
+static void dc_callvm_argShort_arm32_thumb(DCCallVM* in_self, DCshort x)
+{
+  dc_callvm_argInt_arm32_thumb(in_self, x);
+}
+
+
+static void dc_callvm_argLong_arm32_thumb(DCCallVM* in_self, DClong x)
+{
+  dc_callvm_argInt_arm32_thumb(in_self, x);
+}
+
+
+static void dc_callvm_argLongLong_arm32_thumb(DCCallVM* in_self, DClonglong x)
+{
+  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DClonglong));
+}
+
+
+static void dc_callvm_argLongLong_arm32_thumb_eabi(DCCallVM* in_self, DClonglong x)
+{
+  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*)in_self;
+
+  /* 64 bit values need to be aligned on 8 byte boundaries */
+  dcVecSkip(&self->mVecHead, dcVecSize(&self->mVecHead) & 4);
+  dcVecAppend(&self->mVecHead, &x, sizeof(DClonglong));
+}
+
+
+static void dc_callvm_argFloat_arm32_thumb(DCCallVM* in_self, DCfloat x)
+{
+  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCfloat));
+}
+
+
+static void dc_callvm_argDouble_arm32_thumb(DCCallVM* in_self, DCdouble x)
+{
+  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble));
+}
+
+
+static void dc_callvm_argDouble_arm32_thumb_eabi(DCCallVM* in_self, DCdouble x)
+{
+  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*)in_self;
+
+  /* 64 bit values need to be aligned on 8 byte boundaries */
+  dcVecSkip(&self->mVecHead, dcVecSize(&self->mVecHead) & 4);
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble));
+}
+
+
+static void dc_callvm_argPointer_arm32_thumb(DCCallVM* in_self, DCpointer x)
+{
+  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCpointer));
+}
+
+typedef void       (*call_void)  (DCpointer target, DCpointer data, DCsize size);
+typedef DClong     (*call_word)  (DCpointer target, DCpointer data, DCsize size);
+typedef DClonglong (*call_dword) (DCpointer target, DCpointer data, DCsize size);
+
+
+
+/* Call. */
+void dc_callvm_call_arm32_thumb(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*)in_self;
+  dcCall_arm32_thumb(target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead));
+}
+
+
+#if 0
+DClong dc_callvm_call_arm32_thumb_word(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*)in_self;
+  // return dcCall_arm32_thumb_word(target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead));
+  return ( (call_word) dcCall_arm32_thumb) (target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead));
+}
+
+
+DClonglong dc_callvm_call_arm32_thumb_dword(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*)in_self;
+  // return dcCall_arm32_thumb_dword(target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead));
+  return ( (call_dword) dcCall_arm32_thumb ) (target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead));
+}
+#endif
+
+
+DCCallVM_vt gVT_arm32_thumb =
+{
+  &dc_callvm_free_arm32_thumb
+, &dc_callvm_reset_arm32_thumb
+, &dc_callvm_mode_arm32_thumb
+, &dc_callvm_argBool_arm32_thumb
+, &dc_callvm_argChar_arm32_thumb
+, &dc_callvm_argShort_arm32_thumb 
+, &dc_callvm_argInt_arm32_thumb
+, &dc_callvm_argLong_arm32_thumb
+, &dc_callvm_argLongLong_arm32_thumb
+, &dc_callvm_argFloat_arm32_thumb
+, &dc_callvm_argDouble_arm32_thumb
+, &dc_callvm_argPointer_arm32_thumb
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_arm32_thumb
+, (DCboolvmfunc*)       &dc_callvm_call_arm32_thumb
+, (DCcharvmfunc*)       &dc_callvm_call_arm32_thumb
+, (DCshortvmfunc*)      &dc_callvm_call_arm32_thumb
+, (DCintvmfunc*)        &dc_callvm_call_arm32_thumb
+, (DClongvmfunc*)       &dc_callvm_call_arm32_thumb
+, (DClonglongvmfunc*)   &dc_callvm_call_arm32_thumb
+, (DCfloatvmfunc*)      &dc_callvm_call_arm32_thumb
+, (DCdoublevmfunc*)     &dc_callvm_call_arm32_thumb
+, (DCpointervmfunc*)    &dc_callvm_call_arm32_thumb
+, NULL /* callStruct */
+};
+
+
+DCCallVM_vt gVT_arm32_thumb_eabi =
+{
+  &dc_callvm_free_arm32_thumb
+, &dc_callvm_reset_arm32_thumb
+, &dc_callvm_mode_arm32_thumb
+, &dc_callvm_argBool_arm32_thumb
+, &dc_callvm_argChar_arm32_thumb
+, &dc_callvm_argShort_arm32_thumb 
+, &dc_callvm_argInt_arm32_thumb
+, &dc_callvm_argLong_arm32_thumb
+, &dc_callvm_argLongLong_arm32_thumb_eabi
+, &dc_callvm_argFloat_arm32_thumb
+, &dc_callvm_argDouble_arm32_thumb_eabi
+, &dc_callvm_argPointer_arm32_thumb
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_arm32_thumb
+, (DCboolvmfunc*)       &dc_callvm_call_arm32_thumb
+, (DCcharvmfunc*)       &dc_callvm_call_arm32_thumb
+, (DCshortvmfunc*)      &dc_callvm_call_arm32_thumb
+, (DCintvmfunc*)        &dc_callvm_call_arm32_thumb
+, (DClongvmfunc*)       &dc_callvm_call_arm32_thumb
+, (DClonglongvmfunc*)   &dc_callvm_call_arm32_thumb
+, (DCfloatvmfunc*)      &dc_callvm_call_arm32_thumb
+, (DCdoublevmfunc*)     &dc_callvm_call_arm32_thumb
+, (DCpointervmfunc*)    &dc_callvm_call_arm32_thumb
+, NULL /* callStruct */
+};
+
+
+DCCallVM* dcNewCallVM_arm32_thumb(DCsize size) 
+{
+/* Check OS if we need EABI as default. */
+#if defined(DC__ABI_ARM_EABI)
+  return dc_callvm_new_arm32_thumb(&gVT_arm32_thumb_eabi, size);
+#else
+  return dc_callvm_new_arm32_thumb(&gVT_arm32_thumb, size);
+#endif
+}
+
+
+DCCallVM* dcNewCallVM(DCsize size)
+{
+  return dcNewCallVM_arm32_thumb(size);
+}
+
+
+static void dc_callvm_mode_arm32_thumb(DCCallVM* in_self,DCint mode)
+{
+  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*) in_self;
+  DCCallVM_vt*  vt;
+  switch(mode) {
+/* Check OS if we need EABI as default. */
+    case DC_CALL_C_ELLIPSIS:
+#if defined(DC__ABI_ARM_EABI)
+    case DC_CALL_C_DEFAULT:          vt = &gVT_arm32_thumb_eabi; break;
+#else
+    case DC_CALL_C_DEFAULT:          vt = &gVT_arm32_thumb;      break;
+#endif
+    case DC_CALL_C_ARM_THUMB:        vt = &gVT_arm32_thumb;      break;
+    case DC_CALL_C_ARM_THUMB_EABI:   vt = &gVT_arm32_thumb_eabi; break;
+    default: self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; return;
+  }
+  self->mInterface.mVTpointer = vt;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_arm32_thumb.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,60 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_arm32_thumb.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall callvm for 32bit ARM32 family of processors
+
+  SUPPORTED CALLING CONVENTIONS
+  armthumbcall
+
+  REVISION
+  2008/08/12 initial
+
+*/
+
+
+#ifndef DYNCALL_CALLVM_ARM32_THUMB_H
+#define DYNCALL_CALLVM_ARM32_THUMB_H
+
+#include "dyncall_call_arm32_thumb.h"
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+
+typedef struct
+{
+  DCCallVM  mInterface;
+  DCpointer mpCallFunc;
+  DCVecHead mVecHead;
+} DCCallVM_arm32_thumb;
+
+DCCallVM* dcNewCallVM_arm32_thumb(DCsize size);
+
+
+#endif /* DYNCALL_CALLVM_ARM32_THUMB_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_arm64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,165 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_arm64.c
+ Description: ARM 64-bit ABI implementation
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                      Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_callvm_arm64.h"
+#include "dyncall_alloc.h"
+
+static DCCallVM* dc_callvm_new_arm64(DCCallVM_vt* vt, DCsize size)
+{
+  DCCallVM_arm64* p = (DCCallVM_arm64*) dcAllocMem(size);
+
+  dc_callvm_base_init(&p->mInterface, vt);
+
+  dcVecInit(&p->mVecHead, size);
+
+  p->i = 0;
+  p->f = 0;
+
+  return (DCCallVM*)p;
+}
+
+static void reset(DCCallVM* in_p)
+{
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+  p->i = 0;
+  p->f = 0;
+  dcVecReset(&p->mVecHead);
+}
+
+
+static void mode(DCCallVM* in_self,DCint mode);
+
+static void deinit(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+
+
+static void a_i64(DCCallVM* in_self, DClonglong x)
+{
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_self;
+  if (p->i < 8) {
+    p->I[p->i] = x;
+    p->i++;
+  } else {
+    dcVecAppend(&p->mVecHead, &x, sizeof(DClonglong));
+  }
+}
+
+static void a_bool    (DCCallVM* self, DCbool  x)   { a_i64(self, (DClonglong)x); }
+static void a_char    (DCCallVM* self, DCchar  x)   { a_i64(self, x); }
+static void a_short   (DCCallVM* self, DCshort x)   { a_i64(self, x); }
+static void a_int     (DCCallVM* self, DCint x)     { a_i64(self, x); }
+static void a_long    (DCCallVM* self, DClong  x)   { a_i64(self, x); }
+static void a_pointer (DCCallVM* self, DCpointer x) { a_i64(self, (DClonglong) x ); }
+
+static void a_float(DCCallVM* in_p, DCfloat x)
+{
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+
+  if (p->f < 8) {
+    p->u.S[ p->f << 1 ] = x;
+    p->f++;
+  } else {
+    dcVecAppend(&p->mVecHead, &x, sizeof(DCfloat));
+    dcVecSkip(&p->mVecHead, 4);	/* align to 8-bytes */
+  }
+}
+
+static void a_double(DCCallVM* in_p, DCdouble x)
+{
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+  if (p->f < 8) {
+    p->u.D[ p->f ] = x;
+    p->f++; 
+  } else {
+    dcVecAppend(&p->mVecHead, &x, sizeof(DCdouble));
+  }
+}
+
+void call(DCCallVM* in_p, DCpointer target)
+{
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+  
+  /*
+  ** copy 'size' argument is given in number of 16-byte 'pair' blocks.
+  */
+  
+  dcCall_arm64(target, dcVecData(&p->mVecHead), ( dcVecSize(&p->mVecHead) + 15 ) & -16, &p->u.S[0]);
+}
+
+DCCallVM_vt vt_arm64 =
+{
+  &deinit
+, &reset
+, &mode
+, &a_bool
+, &a_char
+, &a_short 
+, &a_int
+, &a_long
+, &a_i64
+, &a_float
+, &a_double
+, &a_pointer
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &call
+, (DCboolvmfunc*)       &call
+, (DCcharvmfunc*)       &call
+, (DCshortvmfunc*)      &call
+, (DCintvmfunc*)        &call
+, (DClongvmfunc*)       &call
+, (DClonglongvmfunc*)   &call
+, (DCfloatvmfunc*)      &call
+, (DCdoublevmfunc*)     &call
+, (DCpointervmfunc*)    &call
+, NULL /* callStruct */
+};
+
+DCCallVM* dcNewCallVM(DCsize size) 
+{
+  return dc_callvm_new_arm64(&vt_arm64, size);
+}
+
+static void mode(DCCallVM* in_self,DCint mode)
+{
+  DCCallVM_arm64* self = (DCCallVM_arm64*) in_self;
+  DCCallVM_vt*  vt;
+  switch(mode) {
+    case DC_CALL_C_DEFAULT:        
+    case DC_CALL_C_ELLIPSIS:
+    case DC_CALL_C_ELLIPSIS_VARARGS:
+    case DC_CALL_C_ARM64:        
+      vt = &vt_arm64;
+      break;
+    default: 
+      in_self->mError = DC_ERROR_UNSUPPORTED_MODE;
+      return;
+  }
+  self->mInterface.mVTpointer = vt;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_arm64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,51 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_arm64.h
+ Description: 
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                      Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef DYNCALL_CALLVM_ARM64_H
+#define DYNCALL_CALLVM_ARM64_H
+
+#include "dyncall_call_arm64.h"
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+
+typedef struct
+{
+  DCCallVM mInterface;
+  unsigned int i;	/* int register counter */
+  unsigned int f;	/* float register counter */
+  union {		/* float register buffer */
+    DCfloat  S[16];
+    DCdouble D[8];
+  } u;
+  unsigned long long I[8]; /* int register buffer */
+  DCVecHead mVecHead;	/* argument buffer head */
+} DCCallVM_arm64;
+
+DCCallVM* dcNewCallVM_arm64(DCsize size);
+
+
+#endif /* DYNCALL_CALLVM_ARM64_DEBIAN_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_arm64_apple.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,216 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_arm64_apple.c
+ Description: ARM 64-bit Apple ABI implementation
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                      Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_callvm_arm64.h"
+#include "dyncall_alloc.h"
+
+static DCCallVM* dc_callvm_new_arm64(DCCallVM_vt* vt, DCsize size)
+{
+  DCCallVM_arm64* p = (DCCallVM_arm64*) dcAllocMem(size);
+
+  dc_callvm_base_init(&p->mInterface, vt);
+
+  dcVecInit(&p->mVecHead, size);
+
+  p->i = 0;
+  p->f = 0;
+
+  return (DCCallVM*)p;
+}
+
+static void reset(DCCallVM* in_p)
+{
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+  p->i = 0;
+  p->f = 0;
+  dcVecReset(&p->mVecHead);
+}
+
+
+static void mode(DCCallVM* in_p,DCint mode);
+
+static void deinit(DCCallVM* in_p)
+{
+  dcFreeMem(in_p);
+}
+
+
+
+static void a_i64(DCCallVM* in_p, DClonglong x)
+{
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+  if (p->i < 8) {
+    p->I[p->i] = x;
+    p->i++;
+  } else {
+    dcVecAlign(&p->mVecHead, sizeof(DClonglong));
+    dcVecAppend(&p->mVecHead, &x, sizeof(DClonglong));
+  }
+}
+
+static void a_bool    (DCCallVM* in_p, DCbool  x)   
+{ 
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+  if (p->i < 8) {
+    p->I[p->i] = (DClonglong) x;
+    p->i++;
+  } else {
+    dcVecAlign(&p->mVecHead, sizeof(DCbool));
+    dcVecAppend(&p->mVecHead, &x, sizeof(DCbool));
+  }
+}
+static void a_char    (DCCallVM* in_p, DCchar  x)
+{ 
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+  if (p->i < 8) {
+    p->I[p->i] = (DClonglong) x;
+    p->i++;
+  } else {
+    dcVecAppend(&p->mVecHead, &x, sizeof(DCchar));
+  }
+}
+static void a_short   (DCCallVM* in_p, DCshort x)   
+{ 
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+  if (p->i < 8) {
+    p->I[p->i] = (DClonglong) x;
+    p->i++;
+  } else {
+    dcVecAlign(&p->mVecHead, sizeof(DCshort));
+    dcVecAppend(&p->mVecHead, &x, sizeof(DCshort));
+  }
+}
+static void a_int     (DCCallVM* in_p, DCint x)     
+{ 
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+  if (p->i < 8) {
+    p->I[p->i] = (DClonglong) x;
+    p->i++;
+  } else {
+    dcVecAlign(&p->mVecHead, sizeof(DCint));
+    dcVecAppend(&p->mVecHead, &x, sizeof(DCint));
+  }
+}
+static void a_long    (DCCallVM* in_p, DClong  x)   
+{ 
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+  if (p->i < 8) {
+    p->I[p->i] = (DClonglong) x;
+    p->i++;
+  } else {
+    dcVecAlign(&p->mVecHead, sizeof(DClong));
+    dcVecAppend(&p->mVecHead, &x, sizeof(DClong));
+  }
+}
+static void a_pointer (DCCallVM* in_p, DCpointer x) { a_i64(in_p, (DClonglong) x ); }
+
+static void a_float(DCCallVM* in_p, DCfloat x)
+{
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+
+  if (p->f < 8) {
+    p->u.S[ p->f << 1 ] = x;
+    p->f++;
+  } else {
+    dcVecAlign(&p->mVecHead, sizeof(DCfloat));
+    dcVecAppend(&p->mVecHead, &x, sizeof(DCfloat));
+  }
+}
+
+static void a_double(DCCallVM* in_p, DCdouble x)
+{
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+  if (p->f < 8) {
+    p->u.D[ p->f ] = x;
+    p->f++; 
+  } else {
+    dcVecAlign(&p->mVecHead, sizeof(DCdouble));
+    dcVecAppend(&p->mVecHead, &x, sizeof(DCdouble));
+  }
+}
+
+void call(DCCallVM* in_p, DCpointer target)
+{
+  DCCallVM_arm64* p = (DCCallVM_arm64*)in_p;
+  
+  /*
+  ** copy 'size' argument is given in number of 16-byte 'pair' blocks.
+  */
+  
+  dcCall_arm64(target, dcVecData(&p->mVecHead), ( dcVecSize(&p->mVecHead) + 15 ) & -16, &p->u.S[0]);
+}
+
+DCCallVM_vt vt_arm64 =
+{
+  &deinit
+, &reset
+, &mode
+, &a_bool
+, &a_char
+, &a_short 
+, &a_int
+, &a_long
+, &a_i64
+, &a_float
+, &a_double
+, &a_pointer
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &call
+, (DCboolvmfunc*)       &call
+, (DCcharvmfunc*)       &call
+, (DCshortvmfunc*)      &call
+, (DCintvmfunc*)        &call
+, (DClongvmfunc*)       &call
+, (DClonglongvmfunc*)   &call
+, (DCfloatvmfunc*)      &call
+, (DCdoublevmfunc*)     &call
+, (DCpointervmfunc*)    &call
+, NULL /* callStruct */
+};
+
+DCCallVM* dcNewCallVM(DCsize size) 
+{
+  return dc_callvm_new_arm64(&vt_arm64, size);
+}
+
+static void mode(DCCallVM* in_self,DCint mode)
+{
+  DCCallVM_arm64* self = (DCCallVM_arm64*) in_self;
+  DCCallVM_vt*  vt;
+  switch(mode) {
+    case DC_CALL_C_DEFAULT:        
+    case DC_CALL_C_ELLIPSIS:
+    case DC_CALL_C_ELLIPSIS_VARARGS:
+    case DC_CALL_C_ARM64:        
+      vt = &vt_arm64;
+      break;
+    default: 
+      in_self->mError = DC_ERROR_UNSUPPORTED_MODE;
+      return;
+  }
+  self->mInterface.mVTpointer = vt;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_base.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,34 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_base.c
+ Description: ARM 32-bit "thumb" ABI callvm implementation
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_callvm.h"
+
+void dc_callvm_base_init(DCCallVM* pInstance, DCCallVM_vt* pVTable)
+{
+  pInstance->mVTpointer = pVTable;
+  pInstance->mError = DC_ERROR_NONE;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_mips.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,41 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_mips.c
+ Description: ARM 32-bit "thumb" ABI callvm implementation
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#if defined(__GNUC__)
+
+#if defined(DC__ABI_MIPS_O32)
+#include "dyncall_callvm_mips_o32.c"
+#elif defined(DC__ABI_MIPS_N64)
+#include "dyncall_callvm_mips_n64.c"
+#elif defined(DC__ABI_MIPS_N32)
+#include "dyncall_callvm_mips_n32.c"
+#else
+#include "dyncall_callvm_mips_eabi.c"
+#endif
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_mips.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,38 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_mips.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALLVM_MIPS_H
+#define DYNCALL_CALLVM_MIPS_H
+
+/* Suported ABIs: */
+
+#include "dyncall_callvm_mips_o32.h"
+#include "dyncall_callvm_mips_eabi.h"
+#include "dyncall_callvm_mips_n64.h"
+
+#endif /* DYNCALL_CALLVM_MIPS_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_mips_eabi.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,182 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_mips_eabi.c
+ Description: Implementation of Call VM for mips "eabi" abi.
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_callvm_mips_eabi.h"
+#include "dyncall_alloc.h"
+
+static void dc_callvm_reset_mips_eabi(DCCallVM* in_self)
+{
+  DCCallVM_mips_eabi* self = (DCCallVM_mips_eabi*)in_self;
+  dcVecReset(&self->mVecHead);
+  self->mIntRegs = 0;
+  self->mSingleRegs = 0;
+}
+
+static DCCallVM* dc_callvm_new_mips_eabi(DCCallVM_vt* vt, DCsize size)
+{
+  /* Store at least 16 bytes (4 words) for internal spill area. Assembly code depends on it. */
+  DCCallVM_mips_eabi* self = (DCCallVM_mips_eabi*)dcAllocMem(sizeof(DCCallVM_mips_eabi)+size+16);
+  dc_callvm_base_init(&self->mInterface, vt);
+  dcVecInit(&self->mVecHead, size);
+  dc_callvm_reset_mips_eabi( (DCCallVM*) self );
+  return (DCCallVM*)self;
+}
+
+
+static void dc_callvm_free_mips_eabi(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+static void dc_callvm_mode_mips_eabi(DCCallVM* in_self,DCint mode)
+{
+  switch(mode) {
+    case DC_CALL_C_DEFAULT:
+    case DC_CALL_C_ELLIPSIS:
+    case DC_CALL_C_MIPS32_EABI:
+      break;
+    default:
+      in_self->mError = DC_ERROR_UNSUPPORTED_MODE; return;
+  }
+}
+
+/* arg int -- fillup integer register file OR push on stack */
+
+static void dc_callvm_argInt_mips_eabi(DCCallVM* in_self, DCint i)
+{
+  DCCallVM_mips_eabi* self = (DCCallVM_mips_eabi*)in_self;
+  /* fillup integer register file */
+  if (self->mIntRegs < 8)
+    self->mRegData.mIntData[self->mIntRegs++] = i;
+  else
+    dcVecAppend(&self->mVecHead, &i, sizeof(DCint));
+}
+
+static void dc_callvm_argPointer_mips_eabi(DCCallVM* in_self, DCpointer x)
+{
+  dc_callvm_argInt_mips_eabi(in_self, * (DCint*) &x );
+}
+
+static void dc_callvm_argBool_mips_eabi(DCCallVM* in_self, DCbool x)
+{
+  dc_callvm_argInt_mips_eabi(in_self, (DCint)x);
+}
+
+static void dc_callvm_argChar_mips_eabi(DCCallVM* in_self, DCchar x)
+{
+  dc_callvm_argInt_mips_eabi(in_self, (DCint)x);
+}
+
+static void dc_callvm_argShort_mips_eabi(DCCallVM* in_self, DCshort x)
+{
+  dc_callvm_argInt_mips_eabi(in_self, (DCint)x);
+}
+
+static void dc_callvm_argLong_mips_eabi(DCCallVM* in_self, DClong x)
+{
+  dc_callvm_argInt_mips_eabi(in_self, (DCint)x);
+}
+
+static void dc_callvm_argLongLong_mips_eabi(DCCallVM* in_self, DClonglong Lv)
+{
+  DCCallVM_mips_eabi* self = (DCCallVM_mips_eabi*)in_self;
+
+  if (self->mIntRegs < 7) {
+    DCint* p = (DCint*) &Lv;
+    /* skip odd register (align 64 bit) */
+    self->mIntRegs += self->mIntRegs & 1;
+    self->mRegData.mIntData[self->mIntRegs++] = p[0];
+    self->mRegData.mIntData[self->mIntRegs++] = p[1];
+  } else {
+    self->mIntRegs = 8;
+    /* 64 bit values need to be aligned on 8 byte boundaries */
+    dcVecSkip(&self->mVecHead, dcVecSize(&self->mVecHead) & 4);
+    dcVecAppend(&self->mVecHead, &Lv, sizeof(DClonglong));
+  }
+}
+
+static void dc_callvm_argFloat_mips_eabi(DCCallVM* in_self, DCfloat x)
+{
+  DCCallVM_mips_eabi* self = (DCCallVM_mips_eabi*)in_self;
+  if (self->mSingleRegs < 8) {
+    self->mRegData.mSingleData[self->mSingleRegs++] = x;
+  } else {
+    dcVecAppend(&self->mVecHead, &x, sizeof(DCfloat) );
+  }
+}
+
+static void dc_callvm_argDouble_mips_eabi(DCCallVM* in_self, DCdouble x)
+{
+  DClonglong* p = (DClonglong*) &x;
+  dc_callvm_argLongLong_mips_eabi(in_self, *p);
+}
+
+/* Call. */
+void dc_callvm_call_mips_eabi(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_mips_eabi* self = (DCCallVM_mips_eabi*)in_self;
+  dcCall_mips_eabi(target, &self->mRegData, dcVecSize(&self->mVecHead), dcVecData(&self->mVecHead));
+}
+
+DCCallVM_vt gVT_mips_eabi =
+{
+  &dc_callvm_free_mips_eabi
+, &dc_callvm_reset_mips_eabi
+, &dc_callvm_mode_mips_eabi
+, &dc_callvm_argBool_mips_eabi
+, &dc_callvm_argChar_mips_eabi
+, &dc_callvm_argShort_mips_eabi 
+, &dc_callvm_argInt_mips_eabi
+, &dc_callvm_argLong_mips_eabi
+, &dc_callvm_argLongLong_mips_eabi
+, &dc_callvm_argFloat_mips_eabi
+, &dc_callvm_argDouble_mips_eabi
+, &dc_callvm_argPointer_mips_eabi
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_mips_eabi
+, (DCboolvmfunc*)       &dc_callvm_call_mips_eabi
+, (DCcharvmfunc*)       &dc_callvm_call_mips_eabi
+, (DCshortvmfunc*)      &dc_callvm_call_mips_eabi
+, (DCintvmfunc*)        &dc_callvm_call_mips_eabi
+, (DClongvmfunc*)       &dc_callvm_call_mips_eabi
+, (DClonglongvmfunc*)   &dc_callvm_call_mips_eabi
+, (DCfloatvmfunc*)      &dc_callvm_call_mips_eabi
+, (DCdoublevmfunc*)     &dc_callvm_call_mips_eabi
+, (DCpointervmfunc*)    &dc_callvm_call_mips_eabi
+, NULL /* callStruct */
+};
+
+DCCallVM* dcNewCallVM_mips_eabi(DCsize size) 
+{
+  return dc_callvm_new_mips_eabi(&gVT_mips_eabi, size);
+}
+
+DCCallVM* dcNewCallVM(DCsize size)
+{
+  return dcNewCallVM_mips_eabi(size);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_mips_eabi.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,62 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_mips_eabi.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall callvm for 32bit MIPS family of processors
+
+  SUPPORTED CALLING CONVENTIONS
+  eabi
+
+  REVISION
+  2008/01/03 initial
+
+*/
+
+
+#ifndef DYNCALL_CALLVM_MIPS_EABI_H
+#define DYNCALL_CALLVM_MIPS_EABI_H
+
+#include "dyncall_call_mips_eabi.h"
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+
+typedef struct
+{
+  DCCallVM  mInterface;
+  int mIntRegs;
+  int mSingleRegs;
+  struct DCRegData_mips_eabi mRegData;
+  DCVecHead mVecHead;
+} DCCallVM_mips_eabi;
+
+DCCallVM* dcNewCallVM_mips_eabi(DCsize size);
+
+
+#endif /* DYNCALL_CALLVM_MIPS_EABI_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_mips_n32.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,269 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_mips_n32.c
+ Description: mips "n32" ABI callvm implementation
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall callvm for 64bit MIPS family of processors
+
+  SUPPORTED CALLING CONVENTIONS
+  n32
+
+  REVISION
+  2010/05/30 initial
+
+  in contrast to o32, there is no space reserved for parameters
+  passed over registers.
+  more registers are used and registers are always used.
+
+  stack is always 16-byte aligned at entry (call to call-kernel automatically
+  aligns argument stack.
+
+  integer and float register-file is interleaved either taking one slot up
+  skipping the other.
+
+
+*/
+
+
+#include "dyncall_callvm_mips_n32.h"
+#include "dyncall_alloc.h"
+#include "dyncall_utils.h"
+
+static void dc_callvm_reset_mips_n32(DCCallVM* in_self)
+{
+  DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)in_self;
+  dcVecReset(&self->mVecHead);
+  self->mRegCount = 0;
+  self->mRegData.mUseDouble = 0LL;
+}
+
+static DCCallVM* dc_callvm_new_mips_n32(DCCallVM_vt* vt, DCsize size)
+{
+  DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)dcAllocMem(sizeof(DCCallVM_mips_n32)+size);
+  dc_callvm_base_init(&self->mInterface, vt);
+  dcVecInit(&self->mVecHead, size);
+  dc_callvm_reset_mips_n32( (DCCallVM*) self );
+  return (DCCallVM*)self;
+}
+
+
+static void dc_callvm_free_mips_n32(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+/* pass arguments :
+
+   - promote to 64-bit integer.
+   - fill up integers and float - left-to-right otherwise go over stack.
+ */
+
+/* arg int -- fillup 64-bit integer register file OR push on stack */
+
+static void dc_callvm_argLongLong_mips_n32(DCCallVM* in_self, DClonglong Lv)
+{
+  DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)in_self;
+  /* fillup integer register file */
+  if (self->mRegCount < 8)
+    self->mRegData.mIntData[self->mRegCount++] = Lv;
+  else
+    dcVecAppend(&self->mVecHead, &Lv, sizeof(DClonglong));
+}
+
+static void dc_callvm_argInt_mips_n32(DCCallVM* in_self, DCint i)
+{
+  dc_callvm_argLongLong_mips_n32(in_self, (DClonglong) i );
+}
+
+static void dc_callvm_argPointer_mips_n32(DCCallVM* in_self, DCpointer x)
+{
+  dc_callvm_argLongLong_mips_n32(in_self, * (DClonglong*) &x );
+}
+
+static void dc_callvm_argBool_mips_n32(DCCallVM* in_self, DCbool x)
+{
+  dc_callvm_argLongLong_mips_n32(in_self, (DClonglong)x);
+}
+
+static void dc_callvm_argChar_mips_n32(DCCallVM* in_self, DCchar x)
+{
+  dc_callvm_argLongLong_mips_n32(in_self, (DClonglong)x);
+}
+
+static void dc_callvm_argShort_mips_n32(DCCallVM* in_self, DCshort x)
+{
+  dc_callvm_argLongLong_mips_n32(in_self, (DClonglong)x);
+}
+
+static void dc_callvm_argLong_mips_n32(DCCallVM* in_self, DClong x)
+{
+  dc_callvm_argLongLong_mips_n32(in_self, (DClonglong)x);
+}
+
+static void dc_callvm_argDouble_mips_n32(DCCallVM* in_self, DCdouble x)
+{
+  DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)in_self;
+  if (self->mRegCount < 8) {
+    self->mRegData.mUseDouble |= 1<<( self->mRegCount );
+    self->mRegData.mFloatData[self->mRegCount++].d = x;
+  } else {
+    dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble) );
+  }
+}
+
+static void dc_callvm_argFloat_mips_n32(DCCallVM* in_self, DCfloat x)
+{
+  DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)in_self;
+  if (self->mRegCount < 8) {
+    /*self->mRegData.mFloatData[self->mRegCount++].d = (DCdouble) x;*/
+    self->mRegData.mFloatData[self->mRegCount++].f = x;
+  } else {
+    dcVecAppend(&self->mVecHead, &x, sizeof(DCfloat) );
+    dcVecSkip(&self->mVecHead, sizeof(DCfloat) );
+  }
+}
+
+
+/* Ellipsis calls: 
+   - float is promoted to double (due to ANSI C).
+   - double is passed via integer register-file (due to MIPS ABI).
+*/
+
+static void dc_callvm_argDouble_mips_n32_ellipsis(DCCallVM* in_self, DCdouble x)
+{
+  dc_callvm_argLongLong_mips_n32(in_self, * ( (DClonglong*) &x ) );
+}
+
+static void dc_callvm_argFloat_mips_n32_ellipsis(DCCallVM* in_self, DCfloat x)
+{
+  dc_callvm_argDouble_mips_n32_ellipsis(in_self, (DCdouble) x );
+}
+
+
+/* Call. */
+
+void dc_callvm_call_mips_n32(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)in_self;
+  /* at minimum provide 16-bytes
+     which hold the first four integer register as spill area 
+     and are automatically loaded to $4-$7
+   */
+  size_t size = DC_MAX(16, ( ( (unsigned) dcVecSize(&self->mVecHead) ) +7UL ) & (-8UL) );
+  dcCall_mips_n32(target, &self->mRegData, size, dcVecData(&self->mVecHead));
+}
+
+/* Forward Declaration. */
+static void dc_callvm_mode_mips_n32(DCCallVM* in_self,DCint mode);
+
+DCCallVM_vt gVT_mips_n32 =
+{
+  &dc_callvm_free_mips_n32
+, &dc_callvm_reset_mips_n32
+, &dc_callvm_mode_mips_n32
+, &dc_callvm_argBool_mips_n32
+, &dc_callvm_argChar_mips_n32
+, &dc_callvm_argShort_mips_n32 
+, &dc_callvm_argInt_mips_n32
+, &dc_callvm_argLong_mips_n32
+, &dc_callvm_argLongLong_mips_n32
+, &dc_callvm_argFloat_mips_n32
+, &dc_callvm_argDouble_mips_n32
+, &dc_callvm_argPointer_mips_n32
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_mips_n32
+, (DCboolvmfunc*)       &dc_callvm_call_mips_n32
+, (DCcharvmfunc*)       &dc_callvm_call_mips_n32
+, (DCshortvmfunc*)      &dc_callvm_call_mips_n32
+, (DCintvmfunc*)        &dc_callvm_call_mips_n32
+, (DClongvmfunc*)       &dc_callvm_call_mips_n32
+, (DClonglongvmfunc*)   &dc_callvm_call_mips_n32
+, (DCfloatvmfunc*)      &dc_callvm_call_mips_n32
+, (DCdoublevmfunc*)     &dc_callvm_call_mips_n32
+, (DCpointervmfunc*)    &dc_callvm_call_mips_n32
+, NULL /* callStruct */
+};
+
+DCCallVM_vt gVT_mips_n32_ellipsis =
+{
+  &dc_callvm_free_mips_n32
+, &dc_callvm_reset_mips_n32
+, &dc_callvm_mode_mips_n32
+, &dc_callvm_argBool_mips_n32
+, &dc_callvm_argChar_mips_n32
+, &dc_callvm_argShort_mips_n32
+, &dc_callvm_argInt_mips_n32
+, &dc_callvm_argLong_mips_n32
+, &dc_callvm_argLongLong_mips_n32
+, &dc_callvm_argFloat_mips_n32_ellipsis
+, &dc_callvm_argDouble_mips_n32_ellipsis
+, &dc_callvm_argPointer_mips_n32
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_mips_n32
+, (DCboolvmfunc*)       &dc_callvm_call_mips_n32
+, (DCcharvmfunc*)       &dc_callvm_call_mips_n32
+, (DCshortvmfunc*)      &dc_callvm_call_mips_n32
+, (DCintvmfunc*)        &dc_callvm_call_mips_n32
+, (DClongvmfunc*)       &dc_callvm_call_mips_n32
+, (DClonglongvmfunc*)   &dc_callvm_call_mips_n32
+, (DCfloatvmfunc*)      &dc_callvm_call_mips_n32
+, (DCdoublevmfunc*)     &dc_callvm_call_mips_n32
+, (DCpointervmfunc*)    &dc_callvm_call_mips_n32
+, NULL /* callStruct */
+};
+
+static void dc_callvm_mode_mips_n32(DCCallVM* self,DCint mode)
+{
+  switch(mode) {
+    case DC_CALL_C_DEFAULT:
+      self->mVTpointer = &gVT_mips_n32;
+      break;
+    case DC_CALL_C_ELLIPSIS:
+      self->mVTpointer = &gVT_mips_n32_ellipsis;
+      break;
+    default:
+      self->mError = DC_ERROR_UNSUPPORTED_MODE;
+      break;
+  }
+}
+
+DCCallVM* dcNewCallVM_mips_n32(DCsize size) 
+{
+  return dc_callvm_new_mips_n32(&gVT_mips_n32, size);
+}
+
+DCCallVM* dcNewCallVM_mips_n32_ellipsis(DCsize size) 
+{
+  return dc_callvm_new_mips_n32(&gVT_mips_n32_ellipsis, size);
+}
+
+
+DCCallVM* dcNewCallVM(DCsize size)
+{
+  return dcNewCallVM_mips_n32(size);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_mips_n64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,269 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_mips_n64.c
+ Description: mips "n64" ABI callvm implementation
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall callvm for 64bit MIPS family of processors
+
+  SUPPORTED CALLING CONVENTIONS
+  n64
+
+  REVISION
+  2010/05/30 initial
+
+  in contrast to o32, there is no space reserved for parameters
+  passed over registers.
+  more registers are used and registers are always used.
+
+  stack is always 16-byte aligned at entry (call to call-kernel automatically
+  aligns argument stack.
+
+  integer and float register-file is interleaved either taking one slot up
+  skipping the other.
+
+
+*/
+
+
+#include "dyncall_callvm_mips_n64.h"
+#include "dyncall_alloc.h"
+#include "dyncall_utils.h"
+
+static void dc_callvm_reset_mips_n64(DCCallVM* in_self)
+{
+  DCCallVM_mips_n64* self = (DCCallVM_mips_n64*)in_self;
+  dcVecReset(&self->mVecHead);
+  self->mRegCount = 0;
+  self->mRegData.mUseDouble = 0LL;
+}
+
+static DCCallVM* dc_callvm_new_mips_n64(DCCallVM_vt* vt, DCsize size)
+{
+  DCCallVM_mips_n64* self = (DCCallVM_mips_n64*)dcAllocMem(sizeof(DCCallVM_mips_n64)+size);
+  dc_callvm_base_init(&self->mInterface, vt);
+  dcVecInit(&self->mVecHead, size);
+  dc_callvm_reset_mips_n64( (DCCallVM*) self );
+  return (DCCallVM*)self;
+}
+
+
+static void dc_callvm_free_mips_n64(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+/* pass arguments :
+
+   - promote to 64-bit integer.
+   - fill up integers and float - left-to-right otherwise go over stack.
+ */
+
+/* arg int -- fillup 64-bit integer register file OR push on stack */
+
+static void dc_callvm_argLongLong_mips_n64(DCCallVM* in_self, DClonglong Lv)
+{
+  DCCallVM_mips_n64* self = (DCCallVM_mips_n64*)in_self;
+  /* fillup integer register file */
+  if (self->mRegCount < 8)
+    self->mRegData.mIntData[self->mRegCount++] = Lv;
+  else
+    dcVecAppend(&self->mVecHead, &Lv, sizeof(DClonglong));
+}
+
+static void dc_callvm_argInt_mips_n64(DCCallVM* in_self, DCint i)
+{
+  dc_callvm_argLongLong_mips_n64(in_self, (DClonglong) i );
+}
+
+static void dc_callvm_argPointer_mips_n64(DCCallVM* in_self, DCpointer x)
+{
+  dc_callvm_argLongLong_mips_n64(in_self, * (DClonglong*) &x );
+}
+
+static void dc_callvm_argBool_mips_n64(DCCallVM* in_self, DCbool x)
+{
+  dc_callvm_argLongLong_mips_n64(in_self, (DClonglong)x);
+}
+
+static void dc_callvm_argChar_mips_n64(DCCallVM* in_self, DCchar x)
+{
+  dc_callvm_argLongLong_mips_n64(in_self, (DClonglong)x);
+}
+
+static void dc_callvm_argShort_mips_n64(DCCallVM* in_self, DCshort x)
+{
+  dc_callvm_argLongLong_mips_n64(in_self, (DClonglong)x);
+}
+
+static void dc_callvm_argLong_mips_n64(DCCallVM* in_self, DClong x)
+{
+  dc_callvm_argLongLong_mips_n64(in_self, (DClonglong)x);
+}
+
+static void dc_callvm_argDouble_mips_n64(DCCallVM* in_self, DCdouble x)
+{
+  DCCallVM_mips_n64* self = (DCCallVM_mips_n64*)in_self;
+  if (self->mRegCount < 8) {
+    self->mRegData.mUseDouble |= 1<<( self->mRegCount );
+    self->mRegData.mFloatData[self->mRegCount++].d = x;
+  } else {
+    dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble) );
+  }
+}
+
+static void dc_callvm_argFloat_mips_n64(DCCallVM* in_self, DCfloat x)
+{
+  DCCallVM_mips_n64* self = (DCCallVM_mips_n64*)in_self;
+  if (self->mRegCount < 8) {
+    /*self->mRegData.mFloatData[self->mRegCount++].d = (DCdouble) x;*/
+    self->mRegData.mFloatData[self->mRegCount++].f = x;
+  } else {
+    dcVecAppend(&self->mVecHead, &x, sizeof(DCfloat) );
+    dcVecSkip(&self->mVecHead, sizeof(DCfloat) );
+  }
+}
+
+
+/* Ellipsis calls: 
+   - float is promoted to double (due to ANSI C).
+   - double is passed via integer register-file (due to MIPS ABI).
+*/
+
+static void dc_callvm_argDouble_mips_n64_ellipsis(DCCallVM* in_self, DCdouble x)
+{
+  dc_callvm_argLongLong_mips_n64(in_self, * ( (DClonglong*) &x ) );
+}
+
+static void dc_callvm_argFloat_mips_n64_ellipsis(DCCallVM* in_self, DCfloat x)
+{
+  dc_callvm_argDouble_mips_n64_ellipsis(in_self, (DCdouble) x );
+}
+
+
+/* Call. */
+
+void dc_callvm_call_mips_n64(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_mips_n64* self = (DCCallVM_mips_n64*)in_self;
+  /* at minimum provide 16-bytes
+     which hold the first four integer register as spill area 
+     and are automatically loaded to $4-$7
+   */
+  size_t size = DC_MAX(16, ( ( (unsigned) dcVecSize(&self->mVecHead) ) +7UL ) & (-8UL) );
+  dcCall_mips_n64(target, &self->mRegData, size, dcVecData(&self->mVecHead));
+}
+
+/* Forward Declaration. */
+static void dc_callvm_mode_mips_n64(DCCallVM* in_self,DCint mode);
+
+DCCallVM_vt gVT_mips_n64 =
+{
+  &dc_callvm_free_mips_n64
+, &dc_callvm_reset_mips_n64
+, &dc_callvm_mode_mips_n64
+, &dc_callvm_argBool_mips_n64
+, &dc_callvm_argChar_mips_n64
+, &dc_callvm_argShort_mips_n64 
+, &dc_callvm_argInt_mips_n64
+, &dc_callvm_argLong_mips_n64
+, &dc_callvm_argLongLong_mips_n64
+, &dc_callvm_argFloat_mips_n64
+, &dc_callvm_argDouble_mips_n64
+, &dc_callvm_argPointer_mips_n64
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_mips_n64
+, (DCboolvmfunc*)       &dc_callvm_call_mips_n64
+, (DCcharvmfunc*)       &dc_callvm_call_mips_n64
+, (DCshortvmfunc*)      &dc_callvm_call_mips_n64
+, (DCintvmfunc*)        &dc_callvm_call_mips_n64
+, (DClongvmfunc*)       &dc_callvm_call_mips_n64
+, (DClonglongvmfunc*)   &dc_callvm_call_mips_n64
+, (DCfloatvmfunc*)      &dc_callvm_call_mips_n64
+, (DCdoublevmfunc*)     &dc_callvm_call_mips_n64
+, (DCpointervmfunc*)    &dc_callvm_call_mips_n64
+, NULL /* callStruct */
+};
+
+DCCallVM_vt gVT_mips_n64_ellipsis =
+{
+  &dc_callvm_free_mips_n64
+, &dc_callvm_reset_mips_n64
+, &dc_callvm_mode_mips_n64
+, &dc_callvm_argBool_mips_n64
+, &dc_callvm_argChar_mips_n64
+, &dc_callvm_argShort_mips_n64
+, &dc_callvm_argInt_mips_n64
+, &dc_callvm_argLong_mips_n64
+, &dc_callvm_argLongLong_mips_n64
+, &dc_callvm_argFloat_mips_n64_ellipsis
+, &dc_callvm_argDouble_mips_n64_ellipsis
+, &dc_callvm_argPointer_mips_n64
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_mips_n64
+, (DCboolvmfunc*)       &dc_callvm_call_mips_n64
+, (DCcharvmfunc*)       &dc_callvm_call_mips_n64
+, (DCshortvmfunc*)      &dc_callvm_call_mips_n64
+, (DCintvmfunc*)        &dc_callvm_call_mips_n64
+, (DClongvmfunc*)       &dc_callvm_call_mips_n64
+, (DClonglongvmfunc*)   &dc_callvm_call_mips_n64
+, (DCfloatvmfunc*)      &dc_callvm_call_mips_n64
+, (DCdoublevmfunc*)     &dc_callvm_call_mips_n64
+, (DCpointervmfunc*)    &dc_callvm_call_mips_n64
+, NULL /* callStruct */
+};
+
+static void dc_callvm_mode_mips_n64(DCCallVM* self,DCint mode)
+{
+  switch(mode) {
+    case DC_CALL_C_DEFAULT:
+      self->mVTpointer = &gVT_mips_n64;
+      break;
+    case DC_CALL_C_ELLIPSIS:
+      self->mVTpointer = &gVT_mips_n64_ellipsis;
+      break;
+    default:
+      self->mError = DC_ERROR_UNSUPPORTED_MODE;
+      break;
+  }
+}
+
+DCCallVM* dcNewCallVM_mips_n64(DCsize size) 
+{
+  return dc_callvm_new_mips_n64(&gVT_mips_n64, size);
+}
+
+DCCallVM* dcNewCallVM_mips_n64_ellipsis(DCsize size) 
+{
+  return dc_callvm_new_mips_n64(&gVT_mips_n64_ellipsis, size);
+}
+
+
+DCCallVM* dcNewCallVM(DCsize size)
+{
+  return dcNewCallVM_mips_n64(size);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_mips_n64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,54 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_mips_n64.h
+ Description: mips "n64" ABI callvm C interface.
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALLVM_MIPS_N64_H
+#define DYNCALL_CALLVM_MIPS_N64_H
+
+#include "dyncall_call_mips_n64.h"
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct
+{
+  DCCallVM  mInterface;
+  int mRegCount;
+  struct DCRegData_mips_n64 mRegData;
+  DCVecHead mVecHead;
+} DCCallVM_mips_n64;
+
+DCCallVM* dcNewCallVM_mips_n64(DCsize size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DYNCALL_CALLVM_MIPS_N64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_mips_o32.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,236 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_mips_o32.c
+ Description: mips "o32" ABI callvm implementation
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall callvm for mips o32 abi
+
+  REVISION
+  2010/06/03 initial
+
+  NOTES:
+  we need an argument counter for supporting floating point arguments
+  correctly.
+
+  first two (if any) double/float arguments are mapped via a common structure --
+  code must take care to write the right float argument indices which
+  differs on C and Assembly-side depending on endianness. (therefore
+  both sources have two variants 'mipseb' and 'mipsel'.)
+  (only for the first two float/double arguments) see float/double handling
+
+  although, the abi does not expect usage of floats if first argument is
+  not floating point, the call kernel can be used universal for all cases.
+
+*/
+
+
+#include "dyncall_callvm_mips_o32.h"
+#include "dyncall_alloc.h"
+#include "dyncall_utils.h"
+
+
+static void dc_callvm_reset_mips_o32(DCCallVM* in_self)
+{
+  DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
+  dcVecReset(&self->mVecHead);
+  self->mArgCount = 0;
+}
+
+static DCCallVM* dc_callvm_new_mips_o32(DCCallVM_vt* vt, DCsize size)
+{
+  DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)dcAllocMem(sizeof(DCCallVM_mips_o32)+size);
+  dc_callvm_base_init(&self->mInterface, vt);
+  dcVecInit(&self->mVecHead, size);
+  dc_callvm_reset_mips_o32( (DCCallVM*) self );
+  return (DCCallVM*)self;
+}
+
+
+static void dc_callvm_free_mips_o32(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+static void dc_callvm_mode_mips_o32(DCCallVM* self, DCint mode)
+{
+  switch(mode) {
+    case DC_CALL_C_DEFAULT:
+    case DC_CALL_C_ELLIPSIS:
+    case DC_CALL_C_MIPS32_O32:
+      break;
+    default:
+      self->mError = DC_ERROR_UNSUPPORTED_MODE;
+      break;
+  }
+}
+
+/* arg int -- fillup integer register file OR push on stack */
+
+static void dc_callvm_argInt_mips_o32(DCCallVM* in_self, DCint i)
+{
+  DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
+  dcVecAppend(&self->mVecHead, &i, sizeof(DCint));
+  self->mArgCount++;
+}
+
+static void dc_callvm_argPointer_mips_o32(DCCallVM* in_self, DCpointer x)
+{
+  dc_callvm_argInt_mips_o32(in_self, * (DCint*) &x );
+}
+
+static void dc_callvm_argBool_mips_o32(DCCallVM* in_self, DCbool x)
+{
+  dc_callvm_argInt_mips_o32(in_self, (DCint)x);
+}
+
+static void dc_callvm_argChar_mips_o32(DCCallVM* in_self, DCchar x)
+{
+  dc_callvm_argInt_mips_o32(in_self, (DCint)x);
+}
+
+static void dc_callvm_argShort_mips_o32(DCCallVM* in_self, DCshort x)
+{
+  dc_callvm_argInt_mips_o32(in_self, (DCint)x);
+}
+
+static void dc_callvm_argLong_mips_o32(DCCallVM* in_self, DClong x)
+{
+  dc_callvm_argInt_mips_o32(in_self, (DCint)x);
+}
+
+static void dc_callvm_argLongLong_mips_o32(DCCallVM* in_self, DClonglong Lv)
+{
+  DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
+    
+  /* 64-bit values need to be aligned on 8 byte boundaries */
+  dcVecSkip(&self->mVecHead, dcVecSize(&self->mVecHead) & 4);
+  dcVecAppend(&self->mVecHead, &Lv, sizeof(DClonglong));
+  self->mArgCount += 1;
+}
+
+static void dc_callvm_argFloat_mips_o32(DCCallVM* in_self, DCfloat x)
+{
+  DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
+
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCfloat) );
+  if (self->mArgCount < 2) {
+#if defined(__MIPSEL__)
+    self->mRegData.u[self->mArgCount].f[0] = x;
+#else
+    self->mRegData.u[self->mArgCount].f[1] = x;
+#endif
+#if 0
+    self->mRegData.u[self->mArgCount].f[1] = x;
+   call kernel
+        
+        mips:
+        lwc1	$f12, 4($5)       <--- byte offset 4
+	lwc1	$f13, 0($5)
+	lwc1	$f14, 12($5)      <--- byte offset 12 
+	lwc1	$f15, 8($5)
+        mipsel:
+        lwc1	$f12, 0($5)       <--- byte offset 4
+	lwc1	$f13, 4($5)
+	lwc1	$f14, 8($5)      <--- byte offset 12 
+	lwc1	$f15, 12($5)
+
+#if defined(__MIPSEL__)
+    /* index 0 and 2 */
+    self->mRegData.floats[self->mArgCount*2] = x;
+#else
+    /* index 1 and 3 */
+    self->mRegData.floats[self->mArgCount*2+1] = x;
+#endif
+#endif
+  }
+  self->mArgCount++;
+}
+
+static void dc_callvm_argDouble_mips_o32(DCCallVM* in_self, DCdouble x)
+{
+  DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
+  /* 64-bit values need to be aligned on 8 byte boundaries */
+  dcVecSkip(&self->mVecHead, dcVecSize(&self->mVecHead) & 4);
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble) );
+  if (self->mArgCount < 2)
+    self->mRegData.u[self->mArgCount].d = x;
+  self->mArgCount++;
+}
+
+/* Call. */
+void dc_callvm_call_mips_o32(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
+  /* at minimum provide 16-bytes
+     which hold the first four integer register as spill area 
+     and are automatically loaded to $4-$7
+   */
+
+  size_t size = DC_MAX(16, ( ( (unsigned) dcVecSize(&self->mVecHead) ) +7UL ) & (-8UL) );
+
+  dcCall_mips_o32(target, &self->mRegData, size, dcVecData(&self->mVecHead));
+}
+
+DCCallVM_vt gVT_mips_o32 =
+{
+  &dc_callvm_free_mips_o32
+, &dc_callvm_reset_mips_o32
+, &dc_callvm_mode_mips_o32
+, &dc_callvm_argBool_mips_o32
+, &dc_callvm_argChar_mips_o32
+, &dc_callvm_argShort_mips_o32 
+, &dc_callvm_argInt_mips_o32
+, &dc_callvm_argLong_mips_o32
+, &dc_callvm_argLongLong_mips_o32
+, &dc_callvm_argFloat_mips_o32
+, &dc_callvm_argDouble_mips_o32
+, &dc_callvm_argPointer_mips_o32
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_mips_o32
+, (DCboolvmfunc*)       &dc_callvm_call_mips_o32
+, (DCcharvmfunc*)       &dc_callvm_call_mips_o32
+, (DCshortvmfunc*)      &dc_callvm_call_mips_o32
+, (DCintvmfunc*)        &dc_callvm_call_mips_o32
+, (DClongvmfunc*)       &dc_callvm_call_mips_o32
+, (DClonglongvmfunc*)   &dc_callvm_call_mips_o32
+, (DCfloatvmfunc*)      &dc_callvm_call_mips_o32
+, (DCdoublevmfunc*)     &dc_callvm_call_mips_o32
+, (DCpointervmfunc*)    &dc_callvm_call_mips_o32
+, NULL /* callStruct */
+};
+
+DCCallVM* dcNewCallVM_mips_o32(DCsize size) 
+{
+  return dc_callvm_new_mips_o32(&gVT_mips_o32, size);
+}
+
+
+DCCallVM* dcNewCallVM(DCsize size)
+{
+  return dcNewCallVM_mips_o32(size);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_mips_o32.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,46 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_mips_o32.h
+ Description: mips "o32" ABI callvm C interface.
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALLVM_MIPS_O32_H
+#define DYNCALL_CALLVM_MIPS_O32_H
+
+#include "dyncall_call_mips_o32.h"
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+typedef struct
+{
+  DCCallVM           mInterface;
+  int                mArgCount;
+  DCRegData_mips_o32 mRegData;
+  DCVecHead          mVecHead;
+} DCCallVM_mips_o32;
+
+DCCallVM* dcNewCallVM_mips_o32(DCsize size);
+
+#endif /* DYNCALL_CALLVM_MIPS_O32_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_ppc32.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,415 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_ppc32.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall callvm for ppc32 architectures
+
+  SUPPORTED CALLING CONVENTIONS
+  ppc32/osx 
+  ppc32/linux (sysv abi)
+  ppc32/syscall 
+
+  REVISION
+  2015/01/15 added syscall (tested on Linux)
+  2009/01/09 added System V ABI support
+  2007/12/11 initial support for Darwin ABI
+
+*/
+
+#include "dyncall_callvm_ppc32.h"
+#include "dyncall_call_ppc32.h"
+#include "dyncall_alloc.h"
+#include "dyncall_macros.h"
+#include "dyncall_types.h"
+#include "dyncall_utils.h"
+
+/* Support for Mac OS X (Darwin) and Systen V ABI for Power PC 32-bit */
+
+#if defined(DC__OS_Darwin)
+#define DC__ABI_Darwin
+#elif defined(DC__OS_Linux) || defined(DC__OS_FreeBSD) || defined(DC__OS_OpenBSD) || defined(DC__OS_NetBSD) || defined(DC__OS_DragonFlyBSD) || defined(DC__OS_SunOS)
+#define DC__ABI_SysV
+#else
+#error Unsupported OS for ppc32 architecture.
+#endif
+
+static void dc_callvm_free_ppc32(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+static void dc_callvm_reset_ppc32(DCCallVM* in_self)
+{
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*)in_self;
+  dcVecReset(&self->mVecHead);
+  self->mIntRegs   = 0;
+  self->mFloatRegs = 0;
+}
+
+/* OS X/Darwin: fillup integer register file AND push on stack (for ellipsis) */
+
+static void dc_callvm_argInt_ppc32_darwin(DCCallVM* in_self, DCint i)
+{
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*)in_self;
+  /* fillup integer register file */
+  if (self->mIntRegs < 8)
+    self->mRegData.mIntData[self->mIntRegs++] = i;
+  /* AND push onto stack */
+  dcVecAppend(&self->mVecHead,&i,sizeof(DCint));
+}
+
+static void dc_callvm_argInt_ppc32_sysv(DCCallVM* in_self, DCint i)
+{
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*)in_self;
+  /* fillup integer register file */
+  if (self->mIntRegs < 8)
+    self->mRegData.mIntData[self->mIntRegs++] = i;
+  /* OR push onto stack */
+  else 
+    dcVecAppend(&self->mVecHead,&i,sizeof(DCint));
+}
+
+/** floating-point **/
+
+/* double*/
+
+static void dc_callvm_argDouble_ppc32_darwin(DCCallVM* in_self, DCdouble d)
+{
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*)in_self;
+  if (self->mFloatRegs < 13) {
+    self->mRegData.mFloatData[self->mFloatRegs++] = d;
+    /* skip two integer register file entries */
+    if (self->mIntRegs < 8) 
+      self->mRegData.mIntData[self->mIntRegs++] = ( (DCint*) &d )[0];
+    if (self->mIntRegs < 8) 
+      self->mRegData.mIntData[self->mIntRegs++] = ( (DCint*) &d )[1];
+  }
+  /* push on stack */
+  dcVecAppend(&self->mVecHead, &d, sizeof(DCdouble));
+}
+
+#if 0
+static void dc_callvm_argDouble_ppc32_sysv(DCCallVM* in_self, DCdouble d)
+{
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*)in_self;
+  if (self->mFloatRegs < 8) {
+    self->mRegData.mFloatData[self->mFloatRegs++] = d;
+    /* skip two integer register file entries */
+    if (self->mIntRegs < 8) 
+      self->mRegData.mIntData[self->mIntRegs++] = ( (DCint*) &d )[0];
+    if (self->mIntRegs < 8) 
+      self->mRegData.mIntData[self->mIntRegs++] = ( (DCint*) &d )[1];
+  }
+  /* push on stack */
+  dcVecAppend(&self->mVecHead, &d, sizeof(DCdouble));
+}
+#endif
+static void dc_callvm_argDouble_ppc32_sysv(DCCallVM* in_self, DCdouble d)
+{
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*)in_self;
+  if (self->mFloatRegs < 8) 
+    self->mRegData.mFloatData[self->mFloatRegs++] = d;
+  else /* OR push data on stack */
+  {
+    /* align stack to 8 byte boundary */
+  dcVecResize(&self->mVecHead , ( dcVecSize(&self->mVecHead) + 7UL ) & -8UL ); 
+    /* AND push data */
+    dcVecAppend(&self->mVecHead,(DCpointer) &d,sizeof(DCdouble));
+  }
+}
+
+/* Floating-point */
+  
+  
+/* darwin:
+ * - skip one integer register file entry (write in - for ellipsis calls) 
+ * sysv:
+ * - 
+ */
+
+static void dc_callvm_argFloat_ppc32_darwin(DCCallVM* in_self, DCfloat f)
+{
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*)in_self;
+  if (self->mFloatRegs < 13) {
+    self->mRegData.mFloatData[self->mFloatRegs++] = (DCdouble) (f);
+  }
+  
+  /* AND skip one integer register file entry (write in - for ellipsis calls) */
+  
+  if (self->mIntRegs < 8) 
+    self->mRegData.mIntData[self->mIntRegs++] = *( (DCint*) &f );
+  
+  /* AND push on stack */
+  
+  dcVecAppend(&self->mVecHead, &f, sizeof(DCfloat));
+}
+
+static void dc_callvm_argFloat_ppc32_sysv(DCCallVM* in_self, DCfloat f)
+{
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*)in_self;
+
+  /* Put as float register (casted to double) */
+
+  if (self->mFloatRegs < 8)
+    self->mRegData.mFloatData[self->mFloatRegs++] = (DCdouble) (f);
+  
+  else /* OR put float on stack */
+    dcVecAppend(&self->mVecHead, &f, sizeof(DCfloat));
+}
+
+/* long long integer */
+
+static void dc_callvm_argLongLong_ppc32_darwin(DCCallVM* in_self, DClonglong L)
+{
+  DCint* p = (DCint*) &L;
+  dcArgInt(in_self, p[0]);
+  dcArgInt(in_self, p[1]);
+}
+
+static void dc_callvm_argLongLong_ppc32_sysv(DCCallVM* in_self, DClonglong L)
+{
+  DCint* p = (DCint*) &L;
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*)in_self;
+  /* fillup integer register file */
+  if (self->mIntRegs < 7)
+  {
+    /* next free integer register is even (r0, r2, r3) ? */
+    /* if not, skip one integer */
+    if (self->mIntRegs & 1) self->mIntRegs++;
+
+    self->mRegData.mIntData[self->mIntRegs++] = p[0];
+    self->mRegData.mIntData[self->mIntRegs++] = p[1];
+  }
+  /* OR push onto stack */
+  else  
+  {
+    /* in case, mIntRegs == 7, set it to 8 */
+    self->mIntRegs = 8;
+    /* align stack to 8 byte boundary */
+    dcVecResize(&self->mVecHead , ( dcVecSize(&self->mVecHead) + 7 ) & (-8UL) );
+    /* push data */
+    dcVecAppend(&self->mVecHead,&L,sizeof(DClonglong));
+  }
+}
+
+
+static void dc_callvm_argBool_ppc32(DCCallVM* in_self, DCbool x)
+{
+  /* promote to integer */
+  dcArgInt(in_self, (x == 0) ? DC_FALSE : DC_TRUE );
+}
+
+
+static void dc_callvm_argChar_ppc32(DCCallVM* in_self, DCchar ch)
+{
+  /* promote to integer */
+  dcArgInt(in_self, (DCint) ch );
+}
+
+
+static void dc_callvm_argShort_ppc32(DCCallVM* in_self, DCshort s)
+{
+  /* promote to integer */
+  dcArgInt(in_self, (DCint) s );
+}
+
+
+static void dc_callvm_argLong_ppc32(DCCallVM* in_self, DClong l)
+{
+  /* promote to integer */
+  dcArgInt(in_self, (DCint) l );
+}
+
+static void dc_callvm_argPointer_ppc32(DCCallVM* in_self, DCpointer p)
+{
+  /* promote to integer */
+  dcArgInt(in_self, *(DCint*) &p );
+}
+
+
+void dc_callvm_call_ppc32_darwin(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*)in_self;
+  dcCall_ppc32_darwin( 
+    target, 
+    &self->mRegData, 
+    DC_MAX(dcVecSize(&self->mVecHead), 8*4),
+    dcVecData(&self->mVecHead)
+  );
+}
+
+void dc_callvm_call_ppc32_sysv(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*) in_self;
+  dcCall_ppc32_sysv( target, &self->mRegData, dcVecSize(&self->mVecHead) , dcVecData(&self->mVecHead));
+}
+
+void dc_callvm_call_ppc32_syscall(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*) in_self;
+  dcCall_ppc32_syscall( target, &self->mRegData, dcVecSize(&self->mVecHead) , dcVecData(&self->mVecHead));
+}
+
+void dc_callvm_mode_ppc32(DCCallVM* in_self, DCint mode);
+
+DCCallVM_vt gVT_ppc32_darwin =
+{
+  &dc_callvm_free_ppc32
+, &dc_callvm_reset_ppc32
+, &dc_callvm_mode_ppc32
+, &dc_callvm_argBool_ppc32
+, &dc_callvm_argChar_ppc32
+, &dc_callvm_argShort_ppc32 
+, &dc_callvm_argInt_ppc32_darwin
+, &dc_callvm_argLong_ppc32
+, &dc_callvm_argLongLong_ppc32_darwin
+, &dc_callvm_argFloat_ppc32_darwin
+, &dc_callvm_argDouble_ppc32_darwin
+, &dc_callvm_argPointer_ppc32
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_ppc32_darwin
+, (DCboolvmfunc*)       &dc_callvm_call_ppc32_darwin
+, (DCcharvmfunc*)       &dc_callvm_call_ppc32_darwin
+, (DCshortvmfunc*)      &dc_callvm_call_ppc32_darwin
+, (DCintvmfunc*)        &dc_callvm_call_ppc32_darwin
+, (DClongvmfunc*)       &dc_callvm_call_ppc32_darwin
+, (DClonglongvmfunc*)   &dc_callvm_call_ppc32_darwin
+, (DCfloatvmfunc*)      &dc_callvm_call_ppc32_darwin
+, (DCdoublevmfunc*)     &dc_callvm_call_ppc32_darwin
+, (DCpointervmfunc*)    &dc_callvm_call_ppc32_darwin
+, NULL /* callStruct */
+};
+
+DCCallVM_vt gVT_ppc32_sysv =
+{
+  &dc_callvm_free_ppc32
+, &dc_callvm_reset_ppc32
+, &dc_callvm_mode_ppc32
+, &dc_callvm_argBool_ppc32
+, &dc_callvm_argChar_ppc32
+, &dc_callvm_argShort_ppc32 
+, &dc_callvm_argInt_ppc32_sysv
+, &dc_callvm_argLong_ppc32
+, &dc_callvm_argLongLong_ppc32_sysv
+, &dc_callvm_argFloat_ppc32_sysv
+, &dc_callvm_argDouble_ppc32_sysv
+, &dc_callvm_argPointer_ppc32
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_ppc32_sysv
+, (DCboolvmfunc*)       &dc_callvm_call_ppc32_sysv
+, (DCcharvmfunc*)       &dc_callvm_call_ppc32_sysv
+, (DCshortvmfunc*)      &dc_callvm_call_ppc32_sysv
+, (DCintvmfunc*)        &dc_callvm_call_ppc32_sysv
+, (DClongvmfunc*)       &dc_callvm_call_ppc32_sysv
+, (DClonglongvmfunc*)   &dc_callvm_call_ppc32_sysv
+, (DCfloatvmfunc*)      &dc_callvm_call_ppc32_sysv
+, (DCdoublevmfunc*)     &dc_callvm_call_ppc32_sysv
+, (DCpointervmfunc*)    &dc_callvm_call_ppc32_sysv
+, NULL /* callStruct */
+};
+
+DCCallVM_vt gVT_ppc32_syscall =
+{
+  &dc_callvm_free_ppc32
+, &dc_callvm_reset_ppc32
+, &dc_callvm_mode_ppc32
+, &dc_callvm_argBool_ppc32
+, &dc_callvm_argChar_ppc32
+, &dc_callvm_argShort_ppc32 
+, &dc_callvm_argInt_ppc32_sysv
+, &dc_callvm_argLong_ppc32
+, &dc_callvm_argLongLong_ppc32_sysv
+, &dc_callvm_argFloat_ppc32_sysv
+, &dc_callvm_argDouble_ppc32_sysv
+, &dc_callvm_argPointer_ppc32
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_ppc32_syscall
+, (DCboolvmfunc*)       &dc_callvm_call_ppc32_syscall
+, (DCcharvmfunc*)       &dc_callvm_call_ppc32_syscall
+, (DCshortvmfunc*)      &dc_callvm_call_ppc32_syscall
+, (DCintvmfunc*)        &dc_callvm_call_ppc32_syscall
+, (DClongvmfunc*)       &dc_callvm_call_ppc32_syscall
+, (DClonglongvmfunc*)   &dc_callvm_call_ppc32_syscall
+, (DCfloatvmfunc*)      &dc_callvm_call_ppc32_syscall
+, (DCdoublevmfunc*)     &dc_callvm_call_ppc32_syscall
+, (DCpointervmfunc*)    &dc_callvm_call_ppc32_syscall
+, NULL /* callStruct */
+};
+
+
+void dc_callvm_mode_ppc32(DCCallVM* in_self, DCint mode)
+{
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*) in_self;
+  DCCallVM_vt* vt;
+  switch(mode) {
+
+    case DC_CALL_C_PPC32_OSX:  
+
+#if defined(DC__ABI_Darwin)
+    case DC_CALL_C_DEFAULT:
+    case DC_CALL_C_ELLIPSIS:
+    case DC_CALL_C_ELLIPSIS_VARARGS:
+#endif
+
+      vt = &gVT_ppc32_darwin; 
+      break;
+
+    case DC_CALL_C_PPC32_SYSV: 
+
+#if defined(DC__ABI_SysV)
+    case DC_CALL_C_DEFAULT:
+    case DC_CALL_C_ELLIPSIS:
+    case DC_CALL_C_ELLIPSIS_VARARGS:
+#endif
+
+      vt = &gVT_ppc32_sysv;
+      break;
+
+    case DC_CALL_SYS_DEFAULT:
+    case DC_CALL_SYS_PPC32:
+      vt = &gVT_ppc32_syscall;
+      break;
+
+    default: 
+      self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; 
+      return;
+  }
+  
+  dc_callvm_base_init(&self->mInterface, vt);
+}
+
+DCCallVM* dcNewCallVM(DCsize size)
+{
+  DCCallVM_ppc32* self = (DCCallVM_ppc32*)dcAllocMem(sizeof(DCCallVM_ppc32)+size);
+  dcVecInit(&self->mVecHead, size);
+  self->mIntRegs              = 0;
+  self->mFloatRegs            = 0;
+  dc_callvm_mode_ppc32( (DCCallVM*) self, DC_CALL_C_DEFAULT );
+  return (DCCallVM*)self;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_ppc32.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,62 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_ppc32.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALLVM_PPC32_H
+#define DYNCALL_CALLVM_PPC32_H
+
+/*
+
+  dyncall callvm for 32bit ppc architectures
+
+  SUPPORTED CALLING CONVENTIONS
+  standard and ... (ellipsis) calls
+
+  REVISION
+  2007/12/11 initial
+
+*/
+
+
+#include "dyncall_call_ppc32.h"
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+typedef struct DCCallVM_ppc32_ DCCallVM_ppc32;
+
+struct DCCallVM_ppc32_
+{
+  DCCallVM  mInterface;
+  int       mIntRegs;
+  int       mFloatRegs;
+  struct DCRegData_ppc32_ mRegData;
+  DCVecHead mVecHead;
+};
+
+DCCallVM* dcNewCallVM_ppc32(DCsize size);
+
+#endif /* DYNCALL_CALLVM_PPC32_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_ppc64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,310 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_ppc64.c
+ Description: 
+ License:
+
+   Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+/*
+
+  dyncall callvm for ppc64 architectures
+
+  SUPPORTED CALLING CONVENTIONS
+  ppc64/linux
+
+  REVISION
+  2014/08/07 initial support
+
+*/
+
+#include "dyncall_callvm_ppc64.h"
+#include "dyncall_call_ppc64.h"
+#include "dyncall_alloc.h"
+#include "dyncall_macros.h"
+#include "dyncall_types.h"
+
+/* Support for Power PC 64-bit */
+
+static void dc_callvm_free_ppc64(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+static void dc_callvm_reset_ppc64(DCCallVM* in_self)
+{
+  DCCallVM_ppc64* self = (DCCallVM_ppc64*)in_self;
+  dcVecReset(&self->mVecHead);
+  self->mIntRegs   = 0;
+  self->mFloatRegs = 0;
+}
+
+/* fillup integer register file AND push on stack (for ellipsis) */
+
+static void dc_callvm_argInt_ppc64(DCCallVM* in_self, DCint i)
+{
+  /* promote to longlong */
+  dcArgLongLong(in_self, (DClonglong)i);
+}
+
+/** floating-point **/
+
+/* double*/
+
+static void dc_callvm_argDouble_ppc64(DCCallVM* in_self, DCdouble d)
+{
+  DCCallVM_ppc64* self = (DCCallVM_ppc64*)in_self;
+
+  if (self->mFloatRegs < 13) { 
+    self->mRegData.mFloatData[self->mFloatRegs++] = d;
+    if (self->mIntRegs < 8) {
+      self->mRegData.mIntData[self->mIntRegs++] = *( (DClonglong*) &d );
+#if DC__ABI_PPC64_ELF_V == 2
+      return;
+#endif
+    }
+  } 
+
+#if DC__ABI_PPC64_ELF_V == 2
+  if (dcVecSize(&self->mVecHead) == 0) {
+    dcVecSkip(&self->mVecHead,sizeof(DClonglong)*8);
+  }
+#endif
+
+  /* push on stack */
+  dcVecAppend(&self->mVecHead,(DCpointer) &d,sizeof(DCdouble));
+}
+
+#if DC__ABI_PPC64_ELF_V == 2
+static void dc_callvm_argDouble_ppc64_ellipsis(DCCallVM* in_self, DCdouble d)
+{
+  DCCallVM_ppc64* self = (DCCallVM_ppc64*)in_self;
+
+  if (dcVecSize(&self->mVecHead) == 0) 
+    dcVecSkip(&self->mVecHead,(sizeof(DClonglong))*(self->mIntRegs));
+
+  if (self->mFloatRegs < 13) { 
+    self->mRegData.mFloatData[self->mFloatRegs++] = d;
+    if (self->mIntRegs < 8) {
+      self->mRegData.mIntData[self->mIntRegs++] = *( (DClonglong*) &d );
+    }
+  }
+
+  /* push on stack */
+  dcVecAppend(&self->mVecHead,(DCpointer) &d,sizeof(DCdouble));
+}
+#endif
+
+
+/* Floating-point */
+  
+static void dc_callvm_argFloat_ppc64(DCCallVM* in_self, DCfloat f)
+{
+  /* promote to double */
+  dcArgDouble(in_self, (DCdouble) f );
+}
+
+/* long long integer */
+
+static void dc_callvm_argLongLong_ppc64(DCCallVM* in_self, DClonglong L)
+{
+  DCCallVM_ppc64* self = (DCCallVM_ppc64*)in_self;
+  
+  /* fillup integer register file */
+  if (self->mIntRegs < 8) {
+    self->mRegData.mIntData[self->mIntRegs++] = L;
+#if DC__ABI_PPC64_ELF_V == 2
+    return;
+#endif
+  }
+
+#if DC__ABI_PPC64_ELF_V == 2
+  if (dcVecSize(&self->mVecHead) == 0) {
+    dcVecSkip(&self->mVecHead,sizeof(DClonglong)*8);
+  }
+#endif
+
+  /* push on stack */
+  dcVecAppend(&self->mVecHead,&L,sizeof(DClonglong));
+}
+
+#if DC__ABI_PPC64_ELF_V == 2
+static void dc_callvm_argLongLong_ppc64_ellipsis(DCCallVM* in_self, DClonglong L)
+{
+  DCCallVM_ppc64* self = (DCCallVM_ppc64*)in_self;
+
+  if (dcVecSize(&self->mVecHead) == 0) 
+    dcVecSkip(&self->mVecHead,(sizeof(DClonglong))*(self->mIntRegs));
+
+  if (self->mIntRegs < 8) 
+    self->mRegData.mIntData[self->mIntRegs++] = L;
+
+  /* push on stack */
+  dcVecAppend(&self->mVecHead,&L,sizeof(DClonglong));
+}
+#endif
+
+
+static void dc_callvm_argBool_ppc64(DCCallVM* in_self, DCbool x)
+{
+  /* promote to longlong */
+  dcArgLongLong(in_self, (DClonglong) x );
+}
+
+
+static void dc_callvm_argChar_ppc64(DCCallVM* in_self, DCchar ch)
+{
+  /* promote to longlong */
+  dcArgLongLong(in_self, (DClonglong) ch );
+}
+
+
+static void dc_callvm_argShort_ppc64(DCCallVM* in_self, DCshort s)
+{
+  /* promote to longlong */
+  dcArgLongLong(in_self, (DClonglong) s );
+}
+
+
+static void dc_callvm_argLong_ppc64(DCCallVM* in_self, DClong l)
+{
+  /* promote to longlong */
+  dcArgLongLong(in_self, (DClonglong) l );
+}
+
+
+static void dc_callvm_argPointer_ppc64(DCCallVM* in_self, DCpointer p)
+{
+  /* promote to longlong */
+  dcArgLongLong(in_self, *(DClonglong *) &p );
+}
+
+
+void dc_callvm_call_ppc64(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_ppc64* self = (DCCallVM_ppc64*) in_self;
+  int size = dcVecSize(&self->mVecHead);
+
+  if (size < 64) {
+	dcVecSkip(&self->mVecHead, 64-size);
+  }
+  
+  dcCall_ppc64( target, &self->mRegData, dcVecSize(&self->mVecHead) , dcVecData(&self->mVecHead));
+}
+
+void dc_callvm_mode_ppc64(DCCallVM* in_self, DCint mode);
+
+DCCallVM_vt gVT_ppc64 =
+{
+  &dc_callvm_free_ppc64
+, &dc_callvm_reset_ppc64
+, &dc_callvm_mode_ppc64
+, &dc_callvm_argBool_ppc64
+, &dc_callvm_argChar_ppc64
+, &dc_callvm_argShort_ppc64
+, &dc_callvm_argInt_ppc64
+, &dc_callvm_argLong_ppc64
+, &dc_callvm_argLongLong_ppc64
+, &dc_callvm_argFloat_ppc64
+, &dc_callvm_argDouble_ppc64
+, &dc_callvm_argPointer_ppc64
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_ppc64
+, (DCboolvmfunc*)       &dc_callvm_call_ppc64
+, (DCcharvmfunc*)       &dc_callvm_call_ppc64
+, (DCshortvmfunc*)      &dc_callvm_call_ppc64
+, (DCintvmfunc*)        &dc_callvm_call_ppc64
+, (DClongvmfunc*)       &dc_callvm_call_ppc64
+, (DClonglongvmfunc*)   &dc_callvm_call_ppc64
+, (DCfloatvmfunc*)      &dc_callvm_call_ppc64
+, (DCdoublevmfunc*)     &dc_callvm_call_ppc64
+, (DCpointervmfunc*)    &dc_callvm_call_ppc64
+, NULL /* callStruct */
+};
+
+#if DC__ABI_PPC64_ELF_V == 2
+DCCallVM_vt gVT_ppc64_ellipsis =
+{
+  &dc_callvm_free_ppc64
+, &dc_callvm_reset_ppc64
+, &dc_callvm_mode_ppc64
+, &dc_callvm_argBool_ppc64
+, &dc_callvm_argChar_ppc64
+, &dc_callvm_argShort_ppc64
+, &dc_callvm_argInt_ppc64
+, &dc_callvm_argLong_ppc64
+, &dc_callvm_argLongLong_ppc64_ellipsis
+, &dc_callvm_argFloat_ppc64
+, &dc_callvm_argDouble_ppc64_ellipsis
+, &dc_callvm_argPointer_ppc64
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_ppc64
+, (DCboolvmfunc*)       &dc_callvm_call_ppc64
+, (DCcharvmfunc*)       &dc_callvm_call_ppc64
+, (DCshortvmfunc*)      &dc_callvm_call_ppc64
+, (DCintvmfunc*)        &dc_callvm_call_ppc64
+, (DClongvmfunc*)       &dc_callvm_call_ppc64
+, (DClonglongvmfunc*)   &dc_callvm_call_ppc64
+, (DCfloatvmfunc*)      &dc_callvm_call_ppc64
+, (DCdoublevmfunc*)     &dc_callvm_call_ppc64
+, (DCpointervmfunc*)    &dc_callvm_call_ppc64
+, NULL /* callStruct */
+};
+#endif
+
+void dc_callvm_mode_ppc64(DCCallVM* in_self, DCint mode)
+{
+  DCCallVM_ppc64* self = (DCCallVM_ppc64*) in_self;
+  DCCallVM_vt* vt;
+  switch(mode) {
+
+    case DC_CALL_C_PPC64: 
+    case DC_CALL_C_DEFAULT:
+    case DC_CALL_C_ELLIPSIS:
+#if DC__ABI_PPC64_ELF_V == 2
+      vt = &gVT_ppc64;
+      break;
+    case DC_CALL_C_ELLIPSIS_VARARGS:
+      vt = &gVT_ppc64_ellipsis;
+      break;
+#else
+    case DC_CALL_C_ELLIPSIS_VARARGS:
+      vt = &gVT_ppc64;
+      break;
+#endif
+
+    default: 
+      self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; 
+      return;
+  }
+  
+  dc_callvm_base_init(&self->mInterface, vt);
+}
+
+DCCallVM* dcNewCallVM(DCsize size)
+{
+  DCCallVM_ppc64* self = (DCCallVM_ppc64*)dcAllocMem(sizeof(DCCallVM_ppc64)+size);
+  dcVecInit(&self->mVecHead, size);
+  self->mIntRegs              = 0;
+  self->mFloatRegs            = 0;
+  dc_callvm_mode_ppc64( (DCCallVM*) self, DC_CALL_C_DEFAULT );
+  return (DCCallVM*)self;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_ppc64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,60 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_ppc64.h
+ Description: 
+ License:
+
+   Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_CALLVM_PPC64_H
+#define DYNCALL_CALLVM_PPC64_H
+
+/*
+
+  dyncall callvm for 64bit ppc architectures
+
+  SUPPORTED CALLING CONVENTIONS
+  standard and ... (ellipsis) calls
+
+  REVISION
+  2014/08/07 initial
+
+*/
+
+
+#include "dyncall_call_ppc64.h"
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+typedef struct DCCallVM_ppc64_ DCCallVM_ppc64;
+
+struct DCCallVM_ppc64_
+{
+  DCCallVM  mInterface;
+  int       mIntRegs;
+  int       mFloatRegs;
+  struct DCRegData_ppc64_ mRegData;
+  DCVecHead mVecHead;
+};
+
+DCCallVM* dcNewCallVM_ppc64(DCsize size);
+
+#endif /* DYNCALL_CALLVM_PPC64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_sparc.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,156 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_sparc.c
+ Description: Call VM for sparc processor architecture.
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_callvm_sparc.h"
+#include "dyncall_call_sparc.h"
+#include "dyncall_utils.h"
+#include "dyncall_alloc.h"
+#define DEFAULT_STACK_ALIGN	16
+/* Construtor. */
+/* the six output registers %o0-%o5 are always loaded, thus we need to ensure the argument buffer has space for at least 24 bytes. */
+static DCCallVM* dc_callvm_new_sparc(DCCallVM_vt* vt, DCsize size)
+{
+  size=DC_MAX(size,sizeof(void*)*(6+1));
+  DCCallVM_sparc* self = (DCCallVM_sparc*) dcAllocMem(sizeof(DCCallVM_sparc)+size);
+  dc_callvm_base_init(&self->mInterface, vt);
+  dcVecInit(&self->mVecHead,size);
+  return (DCCallVM*)self;
+}
+
+/* Destructor. */
+static void dc_callvm_free_sparc(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+/* Reset argument buffer. */
+static void dc_callvm_reset_sparc(DCCallVM* in_self)
+{
+  DCCallVM_sparc* self = (DCCallVM_sparc*)in_self;
+  dcVecReset(&self->mVecHead);
+}
+
+/* Load integer 32-bit. */
+static void dc_callvm_argInt_sparc(DCCallVM* in_self, DCint x)
+{
+  DCCallVM_sparc* self = (DCCallVM_sparc*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCint));
+}
+
+/* we propagate Bool,Char,Short to Int. */
+
+static void dc_callvm_argBool_sparc(DCCallVM* in_self, DCbool x) { dc_callvm_argInt_sparc(in_self, (DCint)x); }
+static void dc_callvm_argChar_sparc(DCCallVM* in_self, DCchar x) { dc_callvm_argInt_sparc(in_self, (DCint)x); }
+static void dc_callvm_argShort_sparc(DCCallVM* in_self, DCshort x) { dc_callvm_argInt_sparc(in_self, (DCint)x); }
+
+/* handle others Pointer, Long, LongLong, Float and Double as-is. */
+
+static void dc_callvm_argPointer_sparc(DCCallVM* in_self, DCpointer x) 
+{ 
+  DCCallVM_sparc* self = (DCCallVM_sparc*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCpointer));
+}
+
+static void dc_callvm_argLong_sparc(DCCallVM* in_self, DClong x) 
+{ 
+  DCCallVM_sparc* self = (DCCallVM_sparc*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DClong));
+}
+static void dc_callvm_argLongLong_sparc(DCCallVM* in_self, DClonglong x)
+{
+  DCCallVM_sparc* self = (DCCallVM_sparc*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DClonglong));
+}
+static void dc_callvm_argFloat_sparc(DCCallVM* in_self, DCfloat x)
+{
+  DCCallVM_sparc* self = (DCCallVM_sparc*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCfloat));
+}
+static void dc_callvm_argDouble_sparc(DCCallVM* in_self, DCdouble x)
+{
+  DCCallVM_sparc* self = (DCCallVM_sparc*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble));
+}
+  
+/* mode: only a single mode available currently. */
+static void dc_callvm_mode_sparc(DCCallVM* in_self, DCint mode)
+{
+  switch(mode) {
+    case DC_CALL_C_DEFAULT:
+    case DC_CALL_C_ELLIPSIS:
+    case DC_CALL_C_SPARC32:
+      break;
+    default:
+      in_self->mError = DC_ERROR_UNSUPPORTED_MODE;
+      break; 
+  }
+}
+
+/* we call directly with 'RTYPE dcCall(DCCallVM* in_self, DCpointer target)' */
+#if 0
+/* call: delegate to default call kernel */
+static void dc_callvm_call_sparc(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_sparc* self = (DCCallVM_sparc*)in_self;
+  dcCall_sparc(target, dcVecSize(&self->mVecHead), dcVecData(&self->mVecHead));
+}
+#endif
+
+/* CallVM virtual table. */
+DCCallVM_vt gVT_sparc =
+{
+  &dc_callvm_free_sparc, 
+  &dc_callvm_reset_sparc, 
+  &dc_callvm_mode_sparc, 
+  &dc_callvm_argBool_sparc, 
+  &dc_callvm_argChar_sparc, 
+  &dc_callvm_argShort_sparc, 
+  &dc_callvm_argInt_sparc, 
+  &dc_callvm_argLong_sparc, 
+  &dc_callvm_argLongLong_sparc, 
+  &dc_callvm_argFloat_sparc, 
+  &dc_callvm_argDouble_sparc, 
+  &dc_callvm_argPointer_sparc, 
+  NULL /* argStruct */, 
+  (DCvoidvmfunc*)       &dcCall_sparc,  
+  (DCboolvmfunc*)       &dcCall_sparc,  
+  (DCcharvmfunc*)       &dcCall_sparc,  
+  (DCshortvmfunc*)      &dcCall_sparc,  
+  (DCintvmfunc*)        &dcCall_sparc, 
+  (DClongvmfunc*)       &dcCall_sparc, 
+  (DClonglongvmfunc*)   &dcCall_sparc,  
+  (DCfloatvmfunc*)      &dcCall_sparc,  
+  (DCdoublevmfunc*)     &dcCall_sparc,  
+  (DCpointervmfunc*)    &dcCall_sparc,
+  NULL /* callStruct */
+};
+
+/* Public API. */
+DCCallVM* dcNewCallVM(DCsize size)
+{
+  return dc_callvm_new_sparc(&gVT_sparc,size);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_sparc.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_sparc.h
+ Description: Call VM for sparc processor architecture.
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALLVM_SPARC_H
+#define DYNCALL_CALLVM_SPARC_H
+
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+/* NOTE: if something changes here, update offset marks in dyncall_call_sparc.S */
+
+typedef struct DCCallVM_sparc_ DCCallVM_sparc;
+struct DCCallVM_sparc_
+{
+  DCCallVM  mInterface;	/* 8 bytes (vtable,errorid) */
+  DCVecHead mVecHead;	/* 8 bytes (max,size)       */
+};
+
+DCCallVM* dcNewCallVM_sparc(DCsize size);
+
+#endif /* DYNCALL_CALLVM_SPARC_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_sparc64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,239 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_sparc64.c
+ Description: Call VM for sparc64 64-bit processor architecture.
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_callvm_sparc64.h"
+#include "dyncall_call_sparc64.h"
+#include "dyncall_alloc.h"
+
+#define IREGS 6
+#define FREGS 16
+#define SREGS 16
+#define DHEAD (IREGS+FREGS)*8+SREGS*4
+
+/* Reset argument buffer. */
+static void dc_callvm_reset_sparc64(DCCallVM* in_self)
+{
+  DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
+  dcVecResize(&self->mVecHead,DHEAD);
+  self->mIntRegs        = 0;
+  self->mFloatRegs      = 0;
+  self->mUseSingleFlags = 0;
+}
+
+/* Construtor. */
+/* the six output registers %o0-%o5 are always loaded, thus we need to ensure the argument buffer has space for at least 24 bytes. */
+static DCCallVM* dc_callvm_new_sparc64(DCCallVM_vt* vt, DCsize size)
+{
+  DCCallVM_sparc64* self = (DCCallVM_sparc64*) dcAllocMem(sizeof(DCCallVM_sparc64)+DHEAD+size);
+  dc_callvm_base_init(&self->mInterface, vt);
+  dcVecInit(&self->mVecHead,DHEAD+size);
+  dc_callvm_reset_sparc64(&self->mInterface);
+  return (DCCallVM*)self;
+}
+
+/* Destructor. */
+static void dc_callvm_free_sparc64(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+/* all integers are promoted to 64-bit. */
+
+static void dc_callvm_argLongLong_sparc64(DCCallVM* in_self, DClonglong x)
+{
+  DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
+  if (self->mIntRegs < IREGS) {
+    * ( (DClonglong*) ( dcVecAt(&self->mVecHead, (self->mIntRegs++)*8) ) ) = x;
+  } else {
+    dcVecAppend(&self->mVecHead, &x, sizeof(DClonglong));
+  }
+  if (self->mFloatRegs < FREGS) self->mFloatRegs++;
+}
+
+static void dc_callvm_argLong_sparc64   (DCCallVM* in_self, DClong    x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
+static void dc_callvm_argInt_sparc64    (DCCallVM* in_self, DCint     x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
+static void dc_callvm_argBool_sparc64   (DCCallVM* in_self, DCbool    x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
+static void dc_callvm_argChar_sparc64   (DCCallVM* in_self, DCchar    x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
+static void dc_callvm_argShort_sparc64  (DCCallVM* in_self, DCshort   x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
+static void dc_callvm_argPointer_sparc64(DCCallVM* in_self, DCpointer x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
+
+static void dc_callvm_argDouble_sparc64(DCCallVM* in_self, DCdouble x)
+{
+  DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
+  if (self->mFloatRegs < FREGS) {
+    * ((double*)dcVecAt(&self->mVecHead,(IREGS+(self->mFloatRegs++))*8)) = x;
+  }
+  if (self->mIntRegs < IREGS) {
+    self->mIntRegs++;
+  } else {
+    dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble));
+  }
+}
+
+static void dc_callvm_argDouble_sparc64_ellipsis(DCCallVM* in_self, DCdouble x)
+{
+  union {
+    long long l;
+    double d;
+  } u;
+  u.d = x;
+  dc_callvm_argLongLong_sparc64(in_self, u.l);
+}
+
+static void dc_callvm_argFloat_sparc64_ellipsis(DCCallVM* in_self, DCfloat x)
+{
+  dc_callvm_argDouble_sparc64_ellipsis(in_self, (DCdouble) x);
+}
+
+static void dc_callvm_argFloat_sparc64(DCCallVM* in_self, DCfloat x)
+{
+  DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
+  if (self->mFloatRegs < FREGS) {
+    self->mUseSingleFlags |= 1<<self->mFloatRegs;
+    * ((float*)dcVecAt(&self->mVecHead,(IREGS+FREGS)*8 + (self->mFloatRegs++)*4)) = x;
+  } 
+  
+  if (self->mIntRegs < IREGS) {
+    self->mIntRegs++;
+  } else {
+    union {
+      DCdouble d;
+      DClonglong l;
+      DCfloat f[2];
+    } u;
+    u.f[1] = x;
+    dcVecAppend(&self->mVecHead, &u.l, sizeof(DClonglong));
+  }
+}
+
+#if 0
+/* call: delegate to default call kernel */
+static void dc_callvm_call_sparc64(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
+  dcCall_sparc64(target, dcVecSize(&self->mVecHead), dcVecData(&self->mVecHead));
+}
+#endif
+
+static void dc_callvm_mode_sparc64(DCCallVM* in_self, DCint mode);
+
+DCCallVM_vt gVT_sparc64_ellipsis = 
+{
+  &dc_callvm_free_sparc64, 
+  &dc_callvm_reset_sparc64, 
+  &dc_callvm_mode_sparc64, 
+  &dc_callvm_argBool_sparc64, 
+  &dc_callvm_argChar_sparc64, 
+  &dc_callvm_argShort_sparc64, 
+  &dc_callvm_argInt_sparc64, 
+  &dc_callvm_argLong_sparc64, 
+  &dc_callvm_argLongLong_sparc64, 
+  &dc_callvm_argFloat_sparc64_ellipsis, 
+  &dc_callvm_argDouble_sparc64_ellipsis, 
+  &dc_callvm_argPointer_sparc64, 
+  NULL /* argStruct */, 
+  (DCvoidvmfunc*)       &dcCall_sparc64, 
+  (DCboolvmfunc*)       &dcCall_sparc64, 
+  (DCcharvmfunc*)       &dcCall_sparc64, 
+  (DCshortvmfunc*)      &dcCall_sparc64, 
+  (DCintvmfunc*)        &dcCall_sparc64, 
+  (DClongvmfunc*)       &dcCall_sparc64, 
+  (DClonglongvmfunc*)   &dcCall_sparc64, 
+  (DCfloatvmfunc*)      &dcCall_sparc64, 
+  (DCdoublevmfunc*)     &dcCall_sparc64, 
+  (DCpointervmfunc*)    &dcCall_sparc64, 
+  NULL /* callStruct */
+};
+
+/* CallVM virtual table. */
+DCCallVM_vt gVT_sparc64 =
+{
+  &dc_callvm_free_sparc64, 
+  &dc_callvm_reset_sparc64, 
+  &dc_callvm_mode_sparc64, 
+  &dc_callvm_argBool_sparc64, 
+  &dc_callvm_argChar_sparc64, 
+  &dc_callvm_argShort_sparc64, 
+  &dc_callvm_argInt_sparc64, 
+  &dc_callvm_argLong_sparc64, 
+  &dc_callvm_argLongLong_sparc64, 
+  &dc_callvm_argFloat_sparc64, 
+  &dc_callvm_argDouble_sparc64, 
+  &dc_callvm_argPointer_sparc64, 
+  NULL /* argStruct */, 
+  (DCvoidvmfunc*)       &dcCall_sparc64, 
+  (DCboolvmfunc*)       &dcCall_sparc64, 
+  (DCcharvmfunc*)       &dcCall_sparc64, 
+  (DCshortvmfunc*)      &dcCall_sparc64, 
+  (DCintvmfunc*)        &dcCall_sparc64, 
+  (DClongvmfunc*)       &dcCall_sparc64, 
+  (DClonglongvmfunc*)   &dcCall_sparc64, 
+  (DCfloatvmfunc*)      &dcCall_sparc64, 
+  (DCdoublevmfunc*)     &dcCall_sparc64, 
+  (DCpointervmfunc*)    &dcCall_sparc64, 
+  NULL /* callStruct */
+};
+
+/* mode: only a single mode available currently. */
+static void dc_callvm_mode_sparc64(DCCallVM* in_self, DCint mode)
+{
+  switch(mode) {
+    case DC_CALL_C_DEFAULT:
+    case DC_CALL_C_ELLIPSIS:
+    case DC_CALL_C_SPARC64:
+      in_self->mVTpointer = &gVT_sparc64; 
+      break;
+    case DC_CALL_C_ELLIPSIS_VARARGS:
+      in_self->mVTpointer = &gVT_sparc64_ellipsis; 
+      break;
+    default:
+      in_self->mError = DC_ERROR_UNSUPPORTED_MODE;
+      break; 
+  }
+}
+
+
+/* Public API. */
+DCCallVM* dcNewCallVM(DCsize size)
+{
+  return dc_callvm_new_sparc64(&gVT_sparc64,size);
+}
+
+#if 0
+/* Load integer 32-bit. */
+static void dc_callvm_argInt_sparc64(DCCallVM* in_self, DCint x)
+{
+  DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCint));
+}
+
+/* we propagate Bool,Char,Short,Int to LongLong. */
+
+static void dc_callvm_argBool_sparc64(DCCallVM* in_self, DCbool x)   { dc_callvm_argInt_sparc64(in_self, (DCint)x); }
+static void dc_callvm_argChar_sparc64(DCCallVM* in_self, DCchar x)   { dc_callvm_argInt_sparc64(in_self, (DCint)x); }
+static void dc_callvm_argShort_sparc64(DCCallVM* in_self, DCshort x) { dc_callvm_argInt_sparc64(in_self, (DCint)x); }
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_sparc64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,48 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_sparc64.h
+ Description: Call VM for sparc64 processor architecture.
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALLVM_SPARC_H
+#define DYNCALL_CALLVM_SPARC_H
+
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+typedef struct DCCallVM_sparc64_ DCCallVM_sparc64;
+struct DCCallVM_sparc64_
+{
+  DCCallVM     mInterface;	/* 12:8 -> 16 */
+  int          mIntRegs;	/* 16 */
+  int          mFloatRegs;      /* 20 */
+  unsigned int mUseSingleFlags; /* 24 */
+  DCVecHead    mVecHead;        /* 36:16, 28 => 40 */
+};
+
+DCCallVM* dcNewCallVM_sparc64(DCsize size);
+
+#endif /* DYNCALL_CALLVM_SPARC64_H */
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_sparc_v9.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,182 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_sparc_v9.c
+ Description: Call VM for sparc-v9 ABI.
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_callvm_sparc_v9.h"
+#include "dyncall_call_sparc_v9.h"
+#include "dyncall_alloc.h"
+
+/* Reset argument buffer. */
+static void dc_callvm_reset_v9(DCCallVM* in_self)
+{
+  DCCallVM_v9* self = (DCCallVM_v9*)in_self;
+  dcVecResize(&self->mVecHead,0);
+}
+
+/* Construtor. */
+static DCCallVM* dc_callvm_new_v9(DCCallVM_vt* vt, DCsize size)
+{
+  DCCallVM_v9* self = (DCCallVM_v9*) dcAllocMem(sizeof(DCCallVM_v9)+size);
+  dc_callvm_base_init(&self->mInterface, vt);
+  dcVecInit(&self->mVecHead,size);
+  dc_callvm_reset_v9(&self->mInterface);
+  return (DCCallVM*)self;
+}
+
+/* Destructor. */
+static void dc_callvm_free_v9(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+static void dc_callvm_argLongLong_v9(DCCallVM* in_self, DClonglong x)
+{
+  DCCallVM_v9* self = (DCCallVM_v9*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DClonglong));
+}
+
+/* all integers are promoted to 64-bit. */
+static void dc_callvm_argLong_v9   (DCCallVM* in_self, DClong    x) { dc_callvm_argLongLong_v9(in_self, (DClonglong) x ); }
+static void dc_callvm_argInt_v9    (DCCallVM* in_self, DCint     x) { dc_callvm_argLongLong_v9(in_self, (DClonglong) x ); }
+static void dc_callvm_argBool_v9   (DCCallVM* in_self, DCbool    x) { dc_callvm_argLongLong_v9(in_self, (DClonglong) x ); }
+static void dc_callvm_argChar_v9   (DCCallVM* in_self, DCchar    x) { dc_callvm_argLongLong_v9(in_self, (DClonglong) x ); }
+static void dc_callvm_argShort_v9  (DCCallVM* in_self, DCshort   x) { dc_callvm_argLongLong_v9(in_self, (DClonglong) x ); }
+static void dc_callvm_argPointer_v9(DCCallVM* in_self, DCpointer x) { dc_callvm_argLongLong_v9(in_self, (DClonglong) x ); }
+
+static void dc_callvm_argDouble_v9(DCCallVM* in_self, DCdouble x)
+{
+  DCCallVM_v9* self = (DCCallVM_v9*)in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble));
+}
+
+static void dc_callvm_argDouble_v9_ellipsis(DCCallVM* in_self, DCdouble x)
+{
+  union {
+    long long l;
+    double d;
+  } u;
+  u.d = x;
+  dc_callvm_argLongLong_v9(in_self, u.l);
+}
+
+static void dc_callvm_argFloat_v9_ellipsis(DCCallVM* in_self, DCfloat x)
+{
+  dc_callvm_argDouble_v9_ellipsis(in_self, (DCdouble) x);
+}
+
+static void dc_callvm_argFloat_v9(DCCallVM* in_self, DCfloat x)
+{
+  union {
+    double d;
+    float  f[2];
+  } u;
+  u.f[1] = x;
+  dc_callvm_argDouble_v9(in_self, u.d);
+}
+
+static void dc_callvm_mode_v9(DCCallVM* in_self, DCint mode);
+
+DCCallVM_vt gVT_v9_ellipsis = 
+{
+  &dc_callvm_free_v9, 
+  &dc_callvm_reset_v9, 
+  &dc_callvm_mode_v9, 
+  &dc_callvm_argBool_v9, 
+  &dc_callvm_argChar_v9, 
+  &dc_callvm_argShort_v9, 
+  &dc_callvm_argInt_v9, 
+  &dc_callvm_argLong_v9, 
+  &dc_callvm_argLongLong_v9, 
+  &dc_callvm_argFloat_v9_ellipsis, 
+  &dc_callvm_argDouble_v9_ellipsis, 
+  &dc_callvm_argPointer_v9, 
+  NULL /* argStruct */, 
+  (DCvoidvmfunc*)       &dcCall_v9, 
+  (DCboolvmfunc*)       &dcCall_v9, 
+  (DCcharvmfunc*)       &dcCall_v9, 
+  (DCshortvmfunc*)      &dcCall_v9, 
+  (DCintvmfunc*)        &dcCall_v9, 
+  (DClongvmfunc*)       &dcCall_v9, 
+  (DClonglongvmfunc*)   &dcCall_v9, 
+  (DCfloatvmfunc*)      &dcCall_v9, 
+  (DCdoublevmfunc*)     &dcCall_v9, 
+  (DCpointervmfunc*)    &dcCall_v9, 
+  NULL /* callStruct */
+};
+
+/* CallVM virtual table. */
+DCCallVM_vt gVT_v9 =
+{
+  &dc_callvm_free_v9, 
+  &dc_callvm_reset_v9, 
+  &dc_callvm_mode_v9, 
+  &dc_callvm_argBool_v9, 
+  &dc_callvm_argChar_v9, 
+  &dc_callvm_argShort_v9, 
+  &dc_callvm_argInt_v9, 
+  &dc_callvm_argLong_v9, 
+  &dc_callvm_argLongLong_v9, 
+  &dc_callvm_argFloat_v9, 
+  &dc_callvm_argDouble_v9, 
+  &dc_callvm_argPointer_v9, 
+  NULL /* argStruct */, 
+  (DCvoidvmfunc*)       &dcCall_v9, 
+  (DCboolvmfunc*)       &dcCall_v9, 
+  (DCcharvmfunc*)       &dcCall_v9, 
+  (DCshortvmfunc*)      &dcCall_v9, 
+  (DCintvmfunc*)        &dcCall_v9, 
+  (DClongvmfunc*)       &dcCall_v9, 
+  (DClonglongvmfunc*)   &dcCall_v9, 
+  (DCfloatvmfunc*)      &dcCall_v9, 
+  (DCdoublevmfunc*)     &dcCall_v9, 
+  (DCpointervmfunc*)    &dcCall_v9, 
+  NULL /* callStruct */
+};
+
+/* mode: only a single mode available currently. */
+static void dc_callvm_mode_v9(DCCallVM* in_self, DCint mode)
+{
+  switch(mode) {
+    case DC_CALL_C_DEFAULT:
+    case DC_CALL_C_ELLIPSIS:
+    case DC_CALL_C_SPARC64:
+      in_self->mVTpointer = &gVT_v9; 
+      break;
+    case DC_CALL_C_ELLIPSIS_VARARGS:
+      in_self->mVTpointer = &gVT_v9_ellipsis; 
+      break;
+    default:
+      in_self->mError = DC_ERROR_UNSUPPORTED_MODE;
+      break; 
+  }
+}
+
+
+/* Public API. */
+DCCallVM* dcNewCallVM(DCsize size)
+{
+  return dc_callvm_new_v9(&gVT_v9,size);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_sparc_v9.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,46 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_sparc_v9.h
+ Description: Call VM for sparc-v9 ABI.
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALLVM_SPARC_V9_H
+#define DYNCALL_CALLVM_SPARC_V9_H
+
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+typedef struct 
+{
+  DCCallVM     mInterface;	/*   0: +12:8 = 16*/
+  DCVecHead    mVecHead;        /* 16   152: mTotalSize +8 */
+                                /* 24   160: mSize      +8 */
+                                /* 32  168: mData  */ 
+} DCCallVM_v9;
+
+DCCallVM* dcNewCallVM_v9(DCsize size);
+
+#endif /* DYNCALL_CALLVM_SPARC_V9_H */
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_x64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,229 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_x64.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+
+/* MS Windows x64 calling convention, AMD64 SystemV ABI. */
+
+
+#include "dyncall_callvm_x64.h"
+#include "dyncall_alloc.h"
+#include "dyncall_struct.h"
+
+static DCCallVM* dc_callvm_new_x64(DCCallVM_vt* vt, DCsize size)
+{
+  DCCallVM_x64* self = (DCCallVM_x64*)dcAllocMem(sizeof(DCCallVM_x64)+size);
+  
+  dc_callvm_base_init(&self->mInterface, vt);
+
+  /* Since we store register parameters in DCCallVM_x64 directly, adjust the stack size. */
+  size -= sizeof(DCRegData_x64);
+  size = (((signed long)size) < 0) ? 0 : size;
+
+
+  self->mRegCount.i = self->mRegCount.f =  0;
+
+  dcVecInit(&self->mVecHead, size);
+  return (DCCallVM*)self;
+}
+
+
+static void dc_callvm_free_x64(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+
+static void dc_callvm_reset_x64(DCCallVM* in_self)
+{
+  DCCallVM_x64* self = (DCCallVM_x64*)in_self;
+  dcVecReset(&self->mVecHead);
+  self->mRegCount.i = self->mRegCount.f =  0;
+}
+
+
+static void dc_callvm_mode_x64(DCCallVM* self, DCint mode)
+{
+  switch(mode) {
+    case DC_CALL_C_DEFAULT:
+    case DC_CALL_C_ELLIPSIS:
+      break;
+    default:
+      self->mError = DC_ERROR_UNSUPPORTED_MODE;
+      break;
+  }
+}
+
+
+static void dc_callvm_argLongLong_x64(DCCallVM* in_self, DClonglong x)
+{
+  /* A long long always has 64 bits on the supported x64 platforms (lp64 on unix and llp64 on windows). */
+  DCCallVM_x64* self = (DCCallVM_x64*)in_self;
+  if(self->mRegCount.i < numIntRegs)
+    self->mRegData.i[self->mRegCount.i++] = x;
+  else
+    dcVecAppend(&self->mVecHead, &x, sizeof(DClonglong));
+}
+
+
+static void dc_callvm_argBool_x64(DCCallVM* in_self, DCbool x)
+{
+  dc_callvm_argLongLong_x64(in_self, (DClonglong)x);
+}
+
+
+static void dc_callvm_argChar_x64(DCCallVM* in_self, DCchar x)
+{
+  dc_callvm_argLongLong_x64(in_self, x);
+}
+
+
+static void dc_callvm_argShort_x64(DCCallVM* in_self, DCshort x)
+{
+  dc_callvm_argLongLong_x64(in_self, x);
+}
+
+
+static void dc_callvm_argInt_x64(DCCallVM* in_self, DCint x)
+{
+  dc_callvm_argLongLong_x64(in_self, x);
+}
+
+
+static void dc_callvm_argLong_x64(DCCallVM* in_self, DClong x)
+{
+  dc_callvm_argLongLong_x64(in_self, x);
+}
+
+
+static void dc_callvm_argFloat_x64(DCCallVM* in_self, DCfloat x)
+{
+  DCCallVM_x64* self = (DCCallVM_x64*)in_self;
+
+  /* Although not promoted to doubles, floats are stored with 64bits in this API.*/
+  union {
+    DCdouble d;
+    DCfloat  f;
+  } f;
+  f.f = x;
+
+  if(self->mRegCount.f < numFloatRegs)
+    *(DCfloat*)&self->mRegData.f[self->mRegCount.f++] = x;
+  else
+    dcVecAppend(&self->mVecHead, &f.f, sizeof(DCdouble));
+}
+
+
+static void dc_callvm_argDouble_x64(DCCallVM* in_self, DCdouble x)
+{
+  DCCallVM_x64* self = (DCCallVM_x64*)in_self;
+  if(self->mRegCount.f < numFloatRegs)
+    self->mRegData.f[self->mRegCount.f++] = x;
+  else
+    dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble));
+}
+
+
+static void dc_callvm_argPointer_x64(DCCallVM* in_self, DCpointer x)
+{
+  DCCallVM_x64* self = (DCCallVM_x64*)in_self;
+  if(self->mRegCount.i < numIntRegs)
+    *(DCpointer*)&self->mRegData.i[self->mRegCount.i++] = x;
+  else
+    dcVecAppend(&self->mVecHead, &x, sizeof(DCpointer));
+}
+
+static void dc_callvm_argStruct_x64(DCCallVM* in_self, DCstruct* s, DCpointer x)
+{
+  DCCallVM_x64* self = (DCCallVM_x64*)in_self;
+  dcVecAppend(&self->mVecHead, x, s->size);
+  /*printf("dc_callvm_argStruct_x64 size = %d\n", (int)s->size);@@@*/
+  if (s->size <= 64)
+  	  dcArgStructUnroll(in_self, s, x);
+  /*else@@@*/
+  /*	  dcVecAppend(&self->mVecHead, &x, sizeof(DCpointer));@@@*/
+}
+
+
+/* Call. */
+void dc_callvm_call_x64(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_x64* self = (DCCallVM_x64*)in_self;
+#if defined(DC_UNIX)
+  dcCall_x64_sysv(
+#else
+  dcCall_x64_win64(
+#endif
+    dcVecSize(&self->mVecHead),  /* Size of stack data.                           */
+    dcVecData(&self->mVecHead),  /* Pointer to stack arguments.                   */
+    self->mRegData.i,            /* Pointer to register arguments (ints on SysV). */
+#if defined(DC_UNIX)
+    self->mRegData.f,            /* Pointer to floating point register arguments. */
+#endif
+    target
+  );
+}
+
+
+DCCallVM_vt gVT_x64 =
+{
+  &dc_callvm_free_x64
+, &dc_callvm_reset_x64
+, &dc_callvm_mode_x64
+, &dc_callvm_argBool_x64
+, &dc_callvm_argChar_x64
+, &dc_callvm_argShort_x64 
+, &dc_callvm_argInt_x64
+, &dc_callvm_argLong_x64
+, &dc_callvm_argLongLong_x64
+, &dc_callvm_argFloat_x64
+, &dc_callvm_argDouble_x64
+, &dc_callvm_argPointer_x64
+, &dc_callvm_argStruct_x64
+, (DCvoidvmfunc*)       &dc_callvm_call_x64
+, (DCboolvmfunc*)       &dc_callvm_call_x64
+, (DCcharvmfunc*)       &dc_callvm_call_x64
+, (DCshortvmfunc*)      &dc_callvm_call_x64
+, (DCintvmfunc*)        &dc_callvm_call_x64
+, (DClongvmfunc*)       &dc_callvm_call_x64
+, (DClonglongvmfunc*)   &dc_callvm_call_x64
+, (DCfloatvmfunc*)      &dc_callvm_call_x64
+, (DCdoublevmfunc*)     &dc_callvm_call_x64
+, (DCpointervmfunc*)    &dc_callvm_call_x64
+, NULL /* callStruct */
+};
+
+
+DCCallVM* dcNewCallVM_x64(DCsize size) 
+{
+  return dc_callvm_new_x64(&gVT_x64, size);
+}
+
+DCCallVM* dcNewCallVM(DCsize size)
+{
+  return dcNewCallVM_x64(size);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_x64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,112 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_x64.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall callvm for x64 architecture
+
+  SUPPORTED CALLING CONVENTIONS
+  MS Windows x64 calling convention, AMD64 SystemV ABI 
+
+  REVISION
+  2007/12/11 initial
+
+*/
+
+
+#ifndef DYNCALL_CALLVM_X64_H
+#define DYNCALL_CALLVM_X64_H
+
+#include "dyncall_macros.h"
+#include "dyncall_call_x64.h"
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+
+#if defined(DC_WINDOWS)
+
+typedef long long int64;	/* llp64 */
+
+#define numIntRegs   4
+#define numFloatRegs 4
+#define DCRegCount_x64 DCRegCount_x64_u
+#define DCRegData_x64  DCRegData_x64_u
+
+#elif defined(DC_UNIX)
+
+typedef long int64;		/* lp64 */
+
+#define numIntRegs   6
+#define numFloatRegs 8
+#define DCRegCount_x64 DCRegCount_x64_s
+#define DCRegData_x64  DCRegData_x64_s
+
+#else
+
+#error Unsupported OS.
+
+#endif
+
+typedef union
+{
+  int i;
+  int f;
+} DCRegCount_x64_u;
+
+typedef struct
+{
+  int i;
+  int f;
+} DCRegCount_x64_s;
+
+typedef union
+{
+  int64  i[numIntRegs  ];
+  double f[numFloatRegs];
+} DCRegData_x64_u;
+
+typedef struct
+{
+  int64  i[numIntRegs  ];
+  double f[numFloatRegs];
+} DCRegData_x64_s;
+
+
+typedef struct
+{
+  DCCallVM       mInterface;  /* This CallVM interface.                                  */
+  DCpointer      mpCallFunc;  /* Function to call.                                       */
+  DCRegCount_x64 mRegCount;   /* Number of int/sse registers used for parameter passing. */
+  DCRegData_x64  mRegData;    /* Parameters to be passed via registers.                  */
+  DCVecHead      mVecHead;    /* Parameters to be pushed onto stack.                     */
+} DCCallVM_x64;
+
+DCCallVM* dcNewCallVM_x64(DCsize size);
+
+
+#endif /* DYNCALL_CALLVM_X64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_x86.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,668 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_x86.c
+ Description: Call VM for x86 architecture implementation
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_callvm_x86.h"
+#include "dyncall_alloc.h"
+
+
+void dc_callvm_mode_x86(DCCallVM* in_self, DCint mode);
+
+/* call vm allocator */
+
+static DCCallVM* dc_callvm_new_x86(DCCallVM_vt* vt, DCsize size)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) dcAllocMem( sizeof(DCCallVM_x86)+size );
+
+  dc_callvm_base_init(&self->mInterface, vt);
+
+  self->mIntRegs              = 0;
+  dcVecInit(&self->mVecHead, size);
+  return (DCCallVM*) self;
+}
+
+/* call vm destructor */
+
+static void dc_callvm_free_x86(DCCallVM* in_self)
+{
+  dcFreeMem(in_self);
+}
+
+/* reset */
+
+static void dc_callvm_reset_x86(DCCallVM* in_self)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcVecReset(&self->mVecHead);
+  self->mIntRegs = 0;
+}
+
+/* arg (bool,char,short,long auto-promoted) to int */
+
+static void dc_callvm_argInt_x86(DCCallVM* in_self, DCint x)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCint) );
+}
+
+/* arg bool - promoted to int */
+
+static void dc_callvm_argBool_x86(DCCallVM* in_self, DCbool x)
+{
+
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86(in_self, v);
+}
+
+/* arg char - promoted to int */
+
+static void dc_callvm_argChar_x86(DCCallVM* in_self, DCchar x)
+{
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86(in_self, v);
+}
+
+/* arg short - promoted to int */
+
+static void dc_callvm_argShort_x86(DCCallVM* in_self, DCshort x)
+{
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86(in_self, v);
+}
+
+/* arg long - promoted to int */
+
+static void dc_callvm_argLong_x86(DCCallVM* in_self, DClong x)
+{
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86(in_self, v);
+}
+
+/* arg long long */
+
+static void dc_callvm_argLongLong_x86(DCCallVM* in_self, DClonglong x)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DClonglong) );
+}
+
+/* arg float */
+
+static void dc_callvm_argFloat_x86(DCCallVM* in_self, DCfloat x)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCfloat) );
+}
+
+/* arg double */
+
+static void dc_callvm_argDouble_x86(DCCallVM* in_self, DCdouble x)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble) );
+}
+
+/* arg pointer */
+
+static void dc_callvm_argPointer_x86(DCCallVM* in_self, DCpointer x)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcVecAppend(&self->mVecHead, &x, sizeof(DCpointer) );
+}
+
+
+/* Plan9 specific calling convention. */
+#if defined(DC__OS_Plan9)
+
+/* call 'plan9' */
+
+void dc_callvm_call_x86_plan9(DCCallVM* in_self, DCpointer target)
+{
+  /* Calls with 32-bit return values have it returned via EAX, so we don't */
+  /* need to do anything special here.                                     */
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcCall_x86_plan9(target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead));
+}
+
+DClonglong dc_callvm_call_x86_plan9_ll(DCCallVM* in_self, DCpointer target)
+{
+  /* Call for 64 bit integer return values is a bit different, call a    */
+  /* different assembler stub that stores the return value in a variable */
+  /* for us, and return the latter.                                      */
+  DClonglong ret;
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcCall_x86_plan9_ll(target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead), &ret );
+  return ret;
+}
+
+DCCallVM_vt gVT_x86_plan9 =
+{
+  &dc_callvm_free_x86
+, &dc_callvm_reset_x86
+, &dc_callvm_mode_x86
+, &dc_callvm_argBool_x86
+, &dc_callvm_argChar_x86
+, &dc_callvm_argShort_x86 
+, &dc_callvm_argInt_x86
+, &dc_callvm_argLong_x86
+, &dc_callvm_argLongLong_x86
+, &dc_callvm_argFloat_x86
+, &dc_callvm_argDouble_x86
+, &dc_callvm_argPointer_x86
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_x86_plan9
+, (DCboolvmfunc*)       &dc_callvm_call_x86_plan9
+, (DCcharvmfunc*)       &dc_callvm_call_x86_plan9
+, (DCshortvmfunc*)      &dc_callvm_call_x86_plan9
+, (DCintvmfunc*)        &dc_callvm_call_x86_plan9
+, (DClongvmfunc*)       &dc_callvm_call_x86_plan9
+, (DClonglongvmfunc*)   &dc_callvm_call_x86_plan9_ll
+, (DCfloatvmfunc*)      &dc_callvm_call_x86_plan9
+, (DCdoublevmfunc*)     &dc_callvm_call_x86_plan9
+, (DCpointervmfunc*)    &dc_callvm_call_x86_plan9
+, NULL /* callStruct */
+};
+
+DCCallVM* dcNewCallVM_x86_plan9(DCsize size) 
+{ 
+  return dc_callvm_new_x86( &gVT_x86_plan9, size );
+}
+
+
+#else
+
+
+/* call 'cdecl' */
+
+void dc_callvm_call_x86_cdecl(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcCall_x86_cdecl( target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead) );
+}
+
+DCCallVM_vt gVT_x86_cdecl =
+{
+  &dc_callvm_free_x86
+, &dc_callvm_reset_x86
+, &dc_callvm_mode_x86
+, &dc_callvm_argBool_x86
+, &dc_callvm_argChar_x86
+, &dc_callvm_argShort_x86 
+, &dc_callvm_argInt_x86
+, &dc_callvm_argLong_x86
+, &dc_callvm_argLongLong_x86
+, &dc_callvm_argFloat_x86
+, &dc_callvm_argDouble_x86
+, &dc_callvm_argPointer_x86
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_x86_cdecl
+, (DCboolvmfunc*)       &dc_callvm_call_x86_cdecl
+, (DCcharvmfunc*)       &dc_callvm_call_x86_cdecl
+, (DCshortvmfunc*)      &dc_callvm_call_x86_cdecl
+, (DCintvmfunc*)        &dc_callvm_call_x86_cdecl
+, (DClongvmfunc*)       &dc_callvm_call_x86_cdecl
+, (DClonglongvmfunc*)   &dc_callvm_call_x86_cdecl
+, (DCfloatvmfunc*)      &dc_callvm_call_x86_cdecl
+, (DCdoublevmfunc*)     &dc_callvm_call_x86_cdecl
+, (DCpointervmfunc*)    &dc_callvm_call_x86_cdecl
+, NULL /* callStruct */
+};
+
+DCCallVM* dcNewCallVM_x86_cdecl(DCsize size) 
+{ 
+  return dc_callvm_new_x86( &gVT_x86_cdecl, size );
+}
+
+
+
+/* --- stdcall -------------------------------------------------------------- */
+
+/* call win32/std */
+
+void dc_callvm_call_x86_win32_std(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcCall_x86_win32_std( target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead) );
+}
+
+/* win32/std vtable */
+
+DCCallVM_vt gVT_x86_win32_std =
+{
+  &dc_callvm_free_x86
+, &dc_callvm_reset_x86
+, &dc_callvm_mode_x86
+, &dc_callvm_argBool_x86
+, &dc_callvm_argChar_x86
+, &dc_callvm_argShort_x86
+, &dc_callvm_argInt_x86
+, &dc_callvm_argLong_x86
+, &dc_callvm_argLongLong_x86
+, &dc_callvm_argFloat_x86
+, &dc_callvm_argDouble_x86
+, &dc_callvm_argPointer_x86
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_x86_win32_std
+, (DCboolvmfunc*)       &dc_callvm_call_x86_win32_std
+, (DCcharvmfunc*)       &dc_callvm_call_x86_win32_std
+, (DCshortvmfunc*)      &dc_callvm_call_x86_win32_std
+, (DCintvmfunc*)        &dc_callvm_call_x86_win32_std
+, (DClongvmfunc*)       &dc_callvm_call_x86_win32_std
+, (DClonglongvmfunc*)   &dc_callvm_call_x86_win32_std
+, (DCfloatvmfunc*)      &dc_callvm_call_x86_win32_std
+, (DCdoublevmfunc*)     &dc_callvm_call_x86_win32_std
+, (DCpointervmfunc*)    &dc_callvm_call_x86_win32_std
+, NULL /* callStruct */
+};
+
+/* win32/std callvm allocator */
+
+DCCallVM* dcNewCallVM_x86_win32_std(DCsize size) 
+{ 
+  return dc_callvm_new_x86( &gVT_x86_win32_std, size );
+}
+
+/* --- fastcall common (ms/gnu) -------------------------------------------- */
+
+/* call win32 ms fast */
+
+static void dc_callvm_call_x86_win32_fast(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcCall_x86_win32_fast( target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead) );
+}
+
+/* reset - always resize to 8 bytes (stores ECX and EDX) */
+
+static void dc_callvm_reset_x86_win32_fast(DCCallVM* in_self)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcVecResize(&self->mVecHead, sizeof(DCint) * 2 );
+  self->mIntRegs = 0;
+}
+
+
+/* --- fastcall ms --------------------------------------------------------- */
+
+/* arg int - probably hold in ECX and EDX */
+
+static void dc_callvm_argInt_x86_win32_fast_ms(DCCallVM* in_self, DCint x)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  if (self->mIntRegs < 2) {
+    *( (int*) dcVecAt(&self->mVecHead, sizeof(DCint) * self->mIntRegs ) ) = x;
+    ++( self->mIntRegs );
+  } else
+    dcVecAppend(&self->mVecHead, &x, sizeof(DCint) );
+}
+
+/* arg bool - promote to int */
+
+static void dc_callvm_argBool_x86_win32_fast_ms(DCCallVM* in_self, DCbool x)
+{
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86_win32_fast_ms(in_self,v);
+}
+
+/* arg char - promote to int */
+
+static void dc_callvm_argChar_x86_win32_fast_ms(DCCallVM* in_self, DCchar x)
+{
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86_win32_fast_ms(in_self,v);
+}
+
+/* arg short - promote to int */
+
+static void dc_callvm_argShort_x86_win32_fast_ms(DCCallVM* in_self, DCshort x)
+{
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86_win32_fast_ms(in_self,v);
+}
+
+/* arg long - promote to int */
+
+static void dc_callvm_argLong_x86_win32_fast_ms(DCCallVM* in_self, DClong x)
+{
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86_win32_fast_ms(in_self,v);
+}
+
+/* arg pointer - promote to int */
+
+static void dc_callvm_argPointer_x86_win32_fast_ms(DCCallVM* in_self, DCpointer x)
+{
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86_win32_fast_ms(in_self,v);
+}
+
+/* win32/fast vt */
+
+DCCallVM_vt gVT_x86_win32_fast_ms =
+{
+  &dc_callvm_free_x86
+, &dc_callvm_reset_x86_win32_fast
+, &dc_callvm_mode_x86
+, &dc_callvm_argBool_x86_win32_fast_ms
+, &dc_callvm_argChar_x86_win32_fast_ms
+, &dc_callvm_argShort_x86_win32_fast_ms
+, &dc_callvm_argInt_x86_win32_fast_ms
+, &dc_callvm_argLong_x86_win32_fast_ms
+, &dc_callvm_argLongLong_x86
+, &dc_callvm_argFloat_x86
+, &dc_callvm_argDouble_x86
+, &dc_callvm_argPointer_x86_win32_fast_ms
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_x86_win32_fast
+, (DCboolvmfunc*)       &dc_callvm_call_x86_win32_fast
+, (DCcharvmfunc*)       &dc_callvm_call_x86_win32_fast
+, (DCshortvmfunc*)      &dc_callvm_call_x86_win32_fast
+, (DCintvmfunc*)        &dc_callvm_call_x86_win32_fast
+, (DClongvmfunc*)       &dc_callvm_call_x86_win32_fast
+, (DClonglongvmfunc*)   &dc_callvm_call_x86_win32_fast
+, (DCfloatvmfunc*)      &dc_callvm_call_x86_win32_fast
+, (DCdoublevmfunc*)     &dc_callvm_call_x86_win32_fast
+, (DCpointervmfunc*)    &dc_callvm_call_x86_win32_fast
+, NULL /* callStruct */
+};
+
+DCCallVM* dcNewCallVM_x86_win32_fast_ms(DCsize size) 
+{ 
+  return dc_callvm_new_x86( &gVT_x86_win32_fast_ms, size );
+}
+
+/* --- gnu fastcall -------------------------------------------------------- */
+
+/* arg int - probably hold in ECX and EDX */
+
+static void dc_callvm_argInt_x86_win32_fast_gnu(DCCallVM* in_self, DCint x)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  if (self->mIntRegs < 2) {
+    *( (int*) dcVecAt(&self->mVecHead, sizeof(DCint) * self->mIntRegs ) ) = x;
+    ++( self->mIntRegs );
+  } else
+    dcVecAppend(&self->mVecHead, &x, sizeof(DCint) );
+}
+
+/* arg bool - promote to int */
+
+static void dc_callvm_argBool_x86_win32_fast_gnu(DCCallVM* in_self, DCbool x)
+{
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86_win32_fast_gnu(in_self,v);
+}
+
+/* arg char - promote to int */
+
+static void dc_callvm_argChar_x86_win32_fast_gnu(DCCallVM* in_self, DCchar x)
+{
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86_win32_fast_gnu(in_self,v);
+}
+
+/* arg short - promote to int */
+
+static void dc_callvm_argShort_x86_win32_fast_gnu(DCCallVM* in_self, DCshort x)
+{
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86_win32_fast_gnu(in_self,v);
+}
+
+/* arg long - promote to int */
+
+static void dc_callvm_argLong_x86_win32_fast_gnu(DCCallVM* in_self, DClong x)
+{
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86_win32_fast_gnu(in_self,v);
+}
+
+/* arg pointer - promote to int */
+
+static void dc_callvm_argPointer_x86_win32_fast_gnu(DCCallVM* in_self, DCpointer x)
+{
+  DCint v = (DCint) x;
+  dc_callvm_argInt_x86_win32_fast_gnu(in_self,v);
+}
+
+/* arg long long - skip registers and push on stack */
+
+static void dc_callvm_argLongLong_x86_win32_fast_gnu(DCCallVM* in_self, DClonglong x)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  self->mIntRegs = 2;
+  dc_callvm_argLongLong_x86(in_self,x);
+}
+
+/* win32/fast/gnu vt */
+
+DCCallVM_vt gVT_x86_win32_fast_gnu =
+{
+  &dc_callvm_free_x86
+, &dc_callvm_reset_x86_win32_fast
+, &dc_callvm_mode_x86
+, &dc_callvm_argBool_x86_win32_fast_gnu
+, &dc_callvm_argChar_x86_win32_fast_gnu
+, &dc_callvm_argShort_x86_win32_fast_gnu
+, &dc_callvm_argInt_x86_win32_fast_gnu
+, &dc_callvm_argLong_x86_win32_fast_gnu
+, &dc_callvm_argLongLong_x86_win32_fast_gnu
+, &dc_callvm_argFloat_x86
+, &dc_callvm_argDouble_x86
+, &dc_callvm_argPointer_x86_win32_fast_gnu
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_x86_win32_fast
+, (DCboolvmfunc*)       &dc_callvm_call_x86_win32_fast
+, (DCcharvmfunc*)       &dc_callvm_call_x86_win32_fast
+, (DCshortvmfunc*)      &dc_callvm_call_x86_win32_fast
+, (DCintvmfunc*)        &dc_callvm_call_x86_win32_fast
+, (DClongvmfunc*)       &dc_callvm_call_x86_win32_fast
+, (DClonglongvmfunc*)   &dc_callvm_call_x86_win32_fast
+, (DCfloatvmfunc*)      &dc_callvm_call_x86_win32_fast
+, (DCdoublevmfunc*)     &dc_callvm_call_x86_win32_fast
+, (DCpointervmfunc*)    &dc_callvm_call_x86_win32_fast
+, NULL /* callStruct */
+};
+
+DCCallVM* dcNewCallVM_x86_win32_fast_gnu(DCsize size) 
+{ 
+  return dc_callvm_new_x86( &gVT_x86_win32_fast_gnu, size );
+}
+
+/* --- this ms ------------------------------------------------------------- */
+
+/* call win32/this/ms */
+
+void dc_callvm_call_x86_win32_this_ms(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcCall_x86_win32_msthis( target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead) );
+}
+
+/* win32/this/ms vt */
+
+DCCallVM_vt gVT_x86_win32_this_ms =
+{
+  &dc_callvm_free_x86
+, &dc_callvm_reset_x86
+, &dc_callvm_mode_x86
+, &dc_callvm_argBool_x86
+, &dc_callvm_argChar_x86
+, &dc_callvm_argShort_x86
+, &dc_callvm_argInt_x86
+, &dc_callvm_argLong_x86
+, &dc_callvm_argLongLong_x86
+, &dc_callvm_argFloat_x86
+, &dc_callvm_argDouble_x86
+, &dc_callvm_argPointer_x86
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_x86_win32_this_ms
+, (DCboolvmfunc*)       &dc_callvm_call_x86_win32_this_ms
+, (DCcharvmfunc*)       &dc_callvm_call_x86_win32_this_ms
+, (DCshortvmfunc*)      &dc_callvm_call_x86_win32_this_ms
+, (DCintvmfunc*)        &dc_callvm_call_x86_win32_this_ms
+, (DClongvmfunc*)       &dc_callvm_call_x86_win32_this_ms
+, (DClonglongvmfunc*)   &dc_callvm_call_x86_win32_this_ms
+, (DCfloatvmfunc*)      &dc_callvm_call_x86_win32_this_ms
+, (DCdoublevmfunc*)     &dc_callvm_call_x86_win32_this_ms
+, (DCpointervmfunc*)    &dc_callvm_call_x86_win32_this_ms
+, NULL /* callStruct */
+};
+
+/* --- syscall ------------------------------------------------------------- */
+
+/* call syscall */
+
+void dc_callvm_call_x86_sys_int80h_linux(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcCall_x86_sys_int80h_linux( target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead) );
+}
+
+void dc_callvm_call_x86_sys_int80h_bsd(DCCallVM* in_self, DCpointer target)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  dcCall_x86_sys_int80h_bsd( target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead) );
+}
+
+DCCallVM_vt gVT_x86_sys_int80h_linux =
+{
+  &dc_callvm_free_x86
+, &dc_callvm_reset_x86
+, &dc_callvm_mode_x86
+, &dc_callvm_argBool_x86
+, &dc_callvm_argChar_x86
+, &dc_callvm_argShort_x86
+, &dc_callvm_argInt_x86
+, &dc_callvm_argLong_x86
+, &dc_callvm_argLongLong_x86
+, &dc_callvm_argFloat_x86
+, &dc_callvm_argDouble_x86
+, &dc_callvm_argPointer_x86
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_x86_sys_int80h_linux
+, (DCboolvmfunc*)       &dc_callvm_call_x86_sys_int80h_linux
+, (DCcharvmfunc*)       &dc_callvm_call_x86_sys_int80h_linux
+, (DCshortvmfunc*)      &dc_callvm_call_x86_sys_int80h_linux
+, (DCintvmfunc*)        &dc_callvm_call_x86_sys_int80h_linux
+, (DClongvmfunc*)       &dc_callvm_call_x86_sys_int80h_linux
+, (DClonglongvmfunc*)   &dc_callvm_call_x86_sys_int80h_linux
+, (DCfloatvmfunc*)      &dc_callvm_call_x86_sys_int80h_linux
+, (DCdoublevmfunc*)     &dc_callvm_call_x86_sys_int80h_linux
+, (DCpointervmfunc*)    &dc_callvm_call_x86_sys_int80h_linux
+, NULL /* callStruct */
+};
+
+DCCallVM_vt gVT_x86_sys_int80h_bsd =
+{
+  &dc_callvm_free_x86
+, &dc_callvm_reset_x86
+, &dc_callvm_mode_x86
+, &dc_callvm_argBool_x86
+, &dc_callvm_argChar_x86
+, &dc_callvm_argShort_x86
+, &dc_callvm_argInt_x86
+, &dc_callvm_argLong_x86
+, &dc_callvm_argLongLong_x86
+, &dc_callvm_argFloat_x86
+, &dc_callvm_argDouble_x86
+, &dc_callvm_argPointer_x86
+, NULL /* argStruct */
+, (DCvoidvmfunc*)       &dc_callvm_call_x86_sys_int80h_bsd
+, (DCboolvmfunc*)       &dc_callvm_call_x86_sys_int80h_bsd
+, (DCcharvmfunc*)       &dc_callvm_call_x86_sys_int80h_bsd
+, (DCshortvmfunc*)      &dc_callvm_call_x86_sys_int80h_bsd
+, (DCintvmfunc*)        &dc_callvm_call_x86_sys_int80h_bsd
+, (DClongvmfunc*)       &dc_callvm_call_x86_sys_int80h_bsd
+, (DClonglongvmfunc*)   &dc_callvm_call_x86_sys_int80h_bsd
+, (DCfloatvmfunc*)      &dc_callvm_call_x86_sys_int80h_bsd
+, (DCdoublevmfunc*)     &dc_callvm_call_x86_sys_int80h_bsd
+, (DCpointervmfunc*)    &dc_callvm_call_x86_sys_int80h_bsd
+, NULL /* callStruct */
+};
+
+
+/* win32/this/ms callvm allocator */
+
+DCCallVM* dcNewCallVM_x86_win32_this_ms(DCsize size) 
+{ 
+  return dc_callvm_new_x86( &gVT_x86_win32_this_ms, size );
+}
+
+#endif
+
+
+/* mode */
+
+void dc_callvm_mode_x86(DCCallVM* in_self, DCint mode)
+{
+  DCCallVM_x86* self = (DCCallVM_x86*) in_self;
+  DCCallVM_vt*  vt;
+  switch(mode) {
+    case DC_CALL_C_ELLIPSIS:
+    case DC_CALL_C_ELLIPSIS_VARARGS:
+    case DC_CALL_C_DEFAULT:
+#if defined(DC_PLAN9) /* Plan9 (and forks) have their own calling convention (and no support for foreign ones). */
+    case DC_CALL_C_X86_PLAN9:          vt = &gVT_x86_plan9;          break;
+#else
+    case DC_CALL_C_X86_CDECL:          vt = &gVT_x86_cdecl;          break;
+    case DC_CALL_C_X86_WIN32_STD:      vt = &gVT_x86_win32_std;      break;
+    case DC_CALL_C_X86_WIN32_FAST_MS:  vt = &gVT_x86_win32_fast_ms;  break;
+    case DC_CALL_C_X86_WIN32_THIS_MS:  vt = &gVT_x86_win32_this_ms;  break;
+    case DC_CALL_C_X86_WIN32_FAST_GNU: vt = &gVT_x86_win32_fast_gnu; break;
+    case DC_CALL_C_X86_WIN32_THIS_GNU: vt = &gVT_x86_cdecl;          break;
+    case DC_CALL_SYS_DEFAULT:         
+# if defined DC_UNIX
+#   if defined DC__OS_Linux
+      vt = &gVT_x86_sys_int80h_linux; break;
+#   else
+      vt = &gVT_x86_sys_int80h_bsd; break;
+#   endif
+# else
+      self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; return;
+# endif
+    case DC_CALL_SYS_X86_INT80H_LINUX:
+      vt = &gVT_x86_sys_int80h_linux; break;
+    case DC_CALL_SYS_X86_INT80H_BSD:
+      vt = &gVT_x86_sys_int80h_bsd; break;
+#endif
+    default: 
+      self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; return;
+  }
+  self->mInterface.mVTpointer = vt;
+}
+
+/* new */
+
+DCCallVM* dcNewCallVM(DCsize size)
+{
+#if defined(DC__OS_Plan9)
+  return dcNewCallVM_x86_plan9(size);
+#else
+  return dcNewCallVM_x86_cdecl(size);
+#endif
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_callvm_x86.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,76 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callvm_x86.h
+ Description: Call virtual machine for x86 architecture header
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALLVM_X86_H
+#define DYNCALL_CALLVM_X86_H
+
+/*
+
+  dyncall callvm for 32bit X86 architectures
+  Copyright 2007 Daniel Adler.
+
+  SUPPORTED CALLING CONVENTIONS
+  cdecl,stdcall,fastcall,thiscall,msthiscall
+
+  REVISION
+  2007/12/10 initial
+
+*/
+
+
+#include "dyncall_call_x86.h"
+#include "dyncall_callvm.h"
+#include "dyncall_vector.h"
+
+typedef struct DCCallVM_x86_ DCCallVM_x86;
+
+struct DCCallVM_x86_
+{
+  DCCallVM  mInterface;
+  DCpointer mpCallFunc;
+  int       mIntRegs;     /* used by fastcall implementation */
+  DCVecHead mVecHead;
+};
+
+/* Plan9 has no support for OS foreign calling conventions at
+   the time, and vice-versa. */
+#if defined(DC__OS_Plan9)
+
+DCCallVM* dcNewCallVM_x86_plan9(DCsize size);
+
+#else
+
+DCCallVM* dcNewCallVM_x86_cdecl(DCsize size);
+DCCallVM* dcNewCallVM_x86_win32_std(DCsize size);
+DCCallVM* dcNewCallVM_x86_win32_fast_ms(DCsize size);
+DCCallVM* dcNewCallVM_x86_win32_fast_gnu(DCsize size);
+DCCallVM* dcNewCallVM_x86_win32_this_ms(DCsize size);
+
+#endif
+
+#endif /* DYNCALL_CALLVM_X86_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_config.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,47 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_config.h
+ Description: Macro configuration file for non-standard C types
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall type configuration
+
+  REVISION
+  2007/12/11 initial
+
+*/
+
+#ifndef DYNCALL_CONFIG_H
+#define DYNCALL_CONFIG_H
+
+#include "dyncall_macros.h"
+
+#define DC_BOOL         int
+#define DC_LONG_LONG    long long
+#define DC_POINTER      void*
+
+#endif /* DYNCALL_CONFIG_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_macros.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,289 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_macros.h
+ Description: Platform detection macros
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall macros
+
+  Platform detection, specific defines and configuration.
+  The purpose of this file is to provide coherent platform and compiler
+  specific defines. So instead of defines like WIN32, _OpenBSD_ or
+  __GNUC__, one should use DC__OS_Win32, DC__OS_OpenBSD or DC__C_GNU,
+  respectively.
+
+  REVISION
+  2007/12/11 initial
+
+*/
+
+
+#ifndef DYNCALL_MACROS_H
+#define DYNCALL_MACROS_H
+
+
+/* Platform specific defines. */
+
+/* MS Windows XP x64/Vista64 or later. */
+#if defined(WIN64) || defined(_WIN64) || defined(__WIN64__)
+#define DC__OS_Win64
+
+/* MS Windows NT/95/98/ME/2000/XP/Vista32. */
+#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) || defined(__WINDOWS__) || defined(_WINDOWS)
+#define DC__OS_Win32
+
+/* All the OS' based on Darwin OS (MacOS X, OpenDarwin). Note that '__APPLE__' may be defined for classic MacOS, too. */
+/* __MACOSX__ is not defined in gcc assembler mode (switch: -S) */
+/* @@@ TODO: Check for Classic OS */
+
+#elif defined(__APPLE__) || defined(__Darwin__)
+#  define DC__OS_Darwin
+#  if defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__)
+#    define DC__OS_IPhone
+#  else /* defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) */
+#    define DC__OS_MacOSX
+#  endif
+
+/* The most popular open source Unix-like OS - Linux. */
+#elif defined(__linux__) || defined(__linux) || defined(__gnu_linux__)
+#define DC__OS_Linux
+
+/* The most powerful open source Unix-like OS - FreeBSD. */
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#define DC__OS_FreeBSD
+
+/* The most secure open source Unix-like OS - OpenBSD. */
+#elif defined(__OpenBSD__)
+#define DC__OS_OpenBSD
+
+/* The most portable open source Unix-like OS - NetBSD. */
+#elif defined(__NetBSD__)
+#define DC__OS_NetBSD
+
+/* The FreeBSD fork having heavy clusterization in mind - DragonFlyBSD. */
+#elif defined(__DragonFly__)
+#define DC__OS_DragonFlyBSD
+
+/* Sun's Unix-like OS - SunOS / Solaris. */
+#elif defined(__sun__) || defined(__sun) || defined(sun)
+#define DC__OS_SunOS
+
+/* The "Linux-like environment for Windows" - Cygwin. */
+#elif defined(__CYGWIN__)
+#define DC__OS_Cygwin
+
+/* The "Minimalist GNU for Windows" - MinGW. */
+#elif defined(__MINGW__)/*@@@*/
+#define DC__OS_MinGW
+
+/* The Nintendo DS (homebrew) using devkitpro. */
+#elif defined(__nds__)
+#define DC__OS_NDS
+
+/* The PlayStation Portable (homebrew) SDK. */
+#elif defined(__psp__) || defined(PSP)
+#define DC__OS_PSP
+
+/* Haiku (BeOS alike). */
+#elif defined(__HAIKU__)
+#define DC__OS_BeOS
+
+/* The Unix successor - Plan9 from Bell Labs */
+#elif defined(Plan9) || defined(__Plan9__)
+#define DC__OS_Plan9
+
+/* Digital's Unix-like OS - VMS */
+#elif defined(__vms)
+#define DC__OS_VMS
+
+#elif defined(__minix)
+#define DC__OS_Minix
+
+#else
+	#error Unsupported OS.
+#endif
+
+
+
+/* Compiler specific defines. Do not change the order, because  */
+/* some of the compilers define flags for compatible ones, too. */
+
+/* Intel's C/C++ compiler. */
+#if defined(__INTEL_COMPILER)
+#define DC__C_Intel
+
+/* MS C/C++ compiler. */
+#elif defined(_MSC_VER)
+#define DC__C_MSVC
+
+/* LLVM clang. */
+#elif defined(__clang__)
+#define DC__C_CLANG
+
+/* The GNU Compiler Collection - GCC. */
+#elif defined(__GNUC__)
+#define DC__C_GNU
+
+/* Watcom compiler. */
+#elif defined(__WATCOMC__)
+#define DC__C_WATCOM
+
+/* Portable C Compiler. */
+#elif defined(__PCC__)
+#define DC__C_PCC
+
+/* Sun Pro C. */
+#elif defined(__SUNPRO_C)
+#define DC__C_SUNPRO
+
+/* Undetected C Compiler. */
+#else
+#define DC__C_UNKNOWN
+#endif
+
+
+
+/* Architecture. */
+
+/* Check architecture. */
+#if defined(_M_IX86) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(__386__) || defined(__i386)
+# define DC__Arch_Intel_x86
+#elif defined(_M_X64_) || defined(_M_AMD64) || defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) 
+# define DC__Arch_AMD64
+#elif defined(_M_IA64) || defined(__ia64__)
+# define DC__Arch_Itanium
+#elif defined(_M_PPC) || defined(__powerpc__) || defined(__powerpc) || defined(__POWERPC__) || defined(__ppc__) || defined(__power__)
+# if defined(__ppc64__) || defined(_ARCH_PPC64) || defined(__power64__) || defined(__powerpc64__)
+#   define DC__Arch_PPC64
+# else
+#   define DC__Arch_PPC32
+# endif
+#elif defined(__mips64__) || defined(__mips64)
+# define DC__Arch_MIPS64
+#elif defined(_M_MRX000) || defined(__mips__) || defined(__mips) || defined(_mips)
+# define DC__Arch_MIPS
+#elif defined(__arm__)
+# define DC__Arch_ARM
+#elif defined(__aarch64__)
+# define DC__Arch_ARM64
+#elif defined(__sh__)
+# define DC__Arch_SuperH
+#elif defined(__sparcv9) || defined(__sparc64__) || ( defined(__sparc) && defined(__arch64__) ) 
+/* this could be needed on Linux/GNU sparc64 in the future: || ( defined(__sparc) && defined(__arch64__) ) */
+# define DC__Arch_Sparcv9
+#elif defined(__sparc)
+# define DC__Arch_Sparc
+#endif
+
+
+
+/* Rough OS classification. */
+
+#if defined(DC__OS_Win32) || defined(DC__OS_Win64)
+# define DC_WINDOWS
+#elif defined(DC__OS_Plan9)
+# define DC_PLAN9
+#elif defined(DC__OS_NDS) || defined(DC__OS_PSP)
+# define DC_OTHER
+#else
+# define DC_UNIX
+#endif
+
+
+
+/* Misc machine-dependent modes, ABIs, etc.. */
+
+#if defined(__arm__) && !defined(__thumb__)
+# define DC__Arch_ARM_ARM
+#elif defined(__arm__) && defined(__thumb__)
+# define DC__Arch_ARM_THUMB
+#endif
+
+#if defined(DC__Arch_ARM_ARM) || defined(DC__Arch_ARM_THUMB)
+# if defined(__ARM_EABI__) || defined(DC__OS_NDS)
+#  if defined (__ARM_PCS_VFP) && (__ARM_PCS_VFP == 1)
+#    define DC__ABI_ARM_HF
+#  else
+#    define DC__ABI_ARM_EABI
+#  endif
+# elif defined(__APCS_32__)
+#  define DC__ABI_ARM_OABI
+# endif
+#endif /* ARM */
+
+#if defined(DC__Arch_MIPS) || defined(DC__Arch_MIPS64)
+# if defined(_ABIO32) || defined(_MIPS_ARCH_MIPS1) || defined(_MIPS_ARCH_MIPS2)
+#  define DC__ABI_MIPS_O32
+# elif defined(_ABIN32)
+#  define DC__ABI_MIPS_N32
+# elif defined(_ABI64)
+#  define DC__ABI_MIPS_N64
+# else
+#  define DC__ABI_MIPS_EABI
+# endif
+#endif /* MIPS */
+
+#if defined(DC__Arch_PPC64)
+# if defined(_CALL_ELF)
+#  define DC__ABI_PPC64_ELF_V _CALL_ELF
+# else
+#  define DC__ABI_PPC64_ELF_V 0 /* 0 means not explicitly set, otherwise this is 1 (big endian) and 2 (little endian) */
+# endif
+#endif /* MIPS */
+
+
+/* Endian detection. */
+#if defined(DC__Arch_Intel_x86) || defined(DC__Arch_AMD64) /* always little */
+# define DC__Endian_LITTLE
+#elif defined(DC__Arch_Sparc)                              /*always big until v9*/
+# define DC__Endian_BIG
+#else                                                      /* all others are bi-endian */
+/* @@@check flags used on following bi-endianness archs:
+DC__Arch_ARM
+DC__Arch_ARM64
+DC__Arch_Itanium
+DC__Arch_MIPS
+DC__Arch_MIPS64
+DC__Arch_PPC32
+DC__Arch_PPC64
+DC__Arch_Sparcv9
+DC__Arch_SuperH
+*/
+# if (defined(DC__Arch_PPC64) && (DC__ABI_PPC64_ELF_V == 1)) || defined(_BIG_ENDIAN) || defined(MIPSEB)
+#  define DC__Endian_BIG
+# elif (defined(DC__Arch_PPC64) && (DC__ABI_PPC64_ELF_V == 2)) || defined(_LITTLE_ENDIAN) || defined(MIPSEL)
+#  define DC__Endian_LITTLE
+# endif /* no else, leave unset if not sure */
+#endif
+
+
+/* Internal macro/tag. */
+#if !defined(DC_API)
+#define DC_API
+#endif
+
+#endif /* DYNCALL_MACROS_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_signature.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,72 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_signature.h
+ Description: Type and calling-convention signature character defines
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall signature characters
+
+  REVISION
+  2007/12/11 initial
+  
+*/
+
+
+#ifndef DYNCALL_SIGNATURE_H
+#define DYNCALL_SIGNATURE_H
+
+typedef char DCsigchar;
+
+#define DC_SIGCHAR_VOID         'v'
+#define DC_SIGCHAR_BOOL         'B'
+#define DC_SIGCHAR_CHAR         'c'
+#define DC_SIGCHAR_UCHAR        'C'
+#define DC_SIGCHAR_SHORT        's'
+#define DC_SIGCHAR_USHORT       'S'
+#define DC_SIGCHAR_INT          'i'
+#define DC_SIGCHAR_UINT         'I'
+#define DC_SIGCHAR_LONG         'j'
+#define DC_SIGCHAR_ULONG        'J'
+#define DC_SIGCHAR_LONGLONG     'l'
+#define DC_SIGCHAR_ULONGLONG    'L'
+#define DC_SIGCHAR_FLOAT        'f'
+#define DC_SIGCHAR_DOUBLE       'd'
+#define DC_SIGCHAR_POINTER      'p'
+#define DC_SIGCHAR_STRING       'Z'
+#define DC_SIGCHAR_STRUCT       'T'
+#define DC_SIGCHAR_ENDARG       ')' /* also works for end struct */
+
+/* callback signatures */
+
+#define DC_SIGCHAR_CC_PREFIX        '_'
+#define DC_SIGCHAR_CC_ELLIPSIS      'e'
+#define DC_SIGCHAR_CC_STDCALL       's'
+#define DC_SIGCHAR_CC_FASTCALL_GNU  'f'
+#define DC_SIGCHAR_CC_FASTCALL_MS   'F'
+#define DC_SIGCHAR_CC_THISCALL_MS   '+'
+
+#endif /* DYNCALL_SIGNATURE_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_struct.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,256 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_struct.c
+ Description: C interface to compute struct size
+ License:
+
+   Copyright (c) 2010-2015 Olivier Chafik <olivier.chafik@centraliens.net>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall.h"
+#include "dyncall_signature.h"
+#include "dyncall_struct.h"
+#include "dyncall_alloc.h"
+#include <stdio.h>
+#include <assert.h>
+
+
+DCstruct* dcNewStruct(DCsize fieldCount, DCint alignment)
+{
+	DCstruct* s = (DCstruct*)dcAllocMem(sizeof(DCstruct));
+	s->pCurrentStruct = s;
+	s->pLastStruct = NULL;
+	s->nextField = 0;
+	s->fieldCount = fieldCount;
+	s->alignment = alignment;
+	s->size = 0;
+	s->pFields = (DCfield*)dcAllocMem(fieldCount * sizeof(DCfield));
+	return s;
+}
+
+
+void dcStructField(DCstruct* s, DCint type, DCint alignment, DCsize arrayLength)
+{
+	DCfield *f;
+	if (type == DC_SIGCHAR_STRING) {
+		assert(!"Use dcSubStruct instead !!!");
+		return;
+	}
+	assert(s && s->pCurrentStruct);
+	assert(s->pCurrentStruct->nextField <= (DCint)s->pCurrentStruct->fieldCount - 1);
+	f = s->pCurrentStruct->pFields + (s->pCurrentStruct->nextField++);
+	f->type = type;
+	f->alignment = alignment;
+	f->arrayLength = arrayLength;
+	f->pSubStruct = NULL;
+	switch (type) {
+    	case DC_SIGCHAR_BOOL:       f->size = sizeof(DCbool);     break;
+    	case DC_SIGCHAR_CHAR:       
+    	case DC_SIGCHAR_UCHAR:      f->size = sizeof(DCchar);     break;
+    	case DC_SIGCHAR_SHORT:      
+    	case DC_SIGCHAR_USHORT:     f->size = sizeof(DCshort);    break;
+    	case DC_SIGCHAR_INT:        
+    	case DC_SIGCHAR_UINT:       f->size = sizeof(DCint);      break;
+    	case DC_SIGCHAR_LONG:       
+    	case DC_SIGCHAR_ULONG:      f->size = sizeof(DClong);     break;
+    	case DC_SIGCHAR_LONGLONG:   
+    	case DC_SIGCHAR_ULONGLONG:  f->size = sizeof(DClonglong); break;
+    	case DC_SIGCHAR_FLOAT:      f->size = sizeof(DCfloat);    break;
+    	case DC_SIGCHAR_DOUBLE:     f->size = sizeof(DCdouble);   break;
+    	case DC_SIGCHAR_POINTER:
+		case DC_SIGCHAR_STRING:     f->size = sizeof(DCpointer);  break;
+		default:                    assert(0);
+	}
+}
+
+
+void dcSubStruct(DCstruct* s, DCsize fieldCount, DCint alignment, DCsize arrayLength)
+{
+	DCfield *f = s->pCurrentStruct->pFields + (s->pCurrentStruct->nextField++);
+	f->type = DC_SIGCHAR_STRUCT;
+	f->arrayLength = arrayLength;
+	f->alignment = alignment;
+	f->pSubStruct = dcNewStruct(fieldCount, alignment);
+	f->pSubStruct->pLastStruct = s->pCurrentStruct;
+	s->pCurrentStruct = f->pSubStruct;
+}  	
+
+
+static void dcAlign(DCsize *size, DCsize alignment)
+{
+	DCsize mod = (*size) % alignment;
+	if (mod) {
+		DCsize rest = alignment - mod;
+		(*size) += rest;
+	}
+}
+
+
+static void dcComputeStructSize(DCstruct* s)
+{
+	DCsize i;
+	assert(s);
+	for (i = 0; i < s->fieldCount; i++) {
+		DCfield *f = s->pFields + i;
+		DCsize fieldAlignment;
+		if (f->type == DC_SIGCHAR_STRUCT) {
+			dcComputeStructSize(f->pSubStruct);
+			f->size = f->pSubStruct->size;
+			fieldAlignment = f->pSubStruct->alignment;
+		} else {
+			fieldAlignment = f->size;
+		}
+		if (!f->alignment)
+			f->alignment = fieldAlignment;
+		
+		if (f->alignment > s->alignment)
+			s->alignment = f->alignment;
+		
+		f->size *= f->arrayLength;
+		
+		/*printf("FIELD %d, size = %d, alignment = %d\n", (int)i, (int)f->size, (int)f->alignment);@@@*/
+	}
+	for (i = 0; i < s->fieldCount; i++) {
+		DCfield *f = s->pFields + i;
+		dcAlign(&s->size, f->alignment);
+		s->size += f->size;
+	}
+	dcAlign(&s->size, s->alignment);
+	
+	/*printf("STRUCT size = %d, alignment = %d\n", (int)s->size, (int)s->alignment);@@@*/
+}
+
+
+void dcCloseStruct(DCstruct* s)
+{
+	assert(s);
+	assert(s->pCurrentStruct);
+	assert(s->pCurrentStruct->nextField == s->pCurrentStruct->fieldCount);
+	if (!s->pCurrentStruct->pLastStruct) {
+		dcComputeStructSize(s->pCurrentStruct);
+	}
+	s->pCurrentStruct = s->pCurrentStruct->pLastStruct;
+}
+
+
+void dcFreeStruct(DCstruct* s)
+{
+	DCsize i;
+	assert(s);
+	for (i = 0; i < s->fieldCount; i++) {
+		DCfield *f = s->pFields + i;
+		if (f->type == DC_SIGCHAR_STRUCT)
+			dcFreeStruct(f->pSubStruct);
+	}
+	free(s->pFields);
+	free(s);
+}
+
+
+DCsize dcStructSize(DCstruct* s)
+{
+	assert(!s->pCurrentStruct && "Struct was not closed");
+	return s->size;
+}
+
+DCsize dcStructAlignment(DCstruct* s)
+{
+	assert(!s->pCurrentStruct && "Struct was not closed");
+	return s->alignment;
+}
+
+
+void dcArgStructUnroll(DCCallVM* vm, DCstruct* s, DCpointer  value)
+{
+	DCsize i;
+	/*printf("UNROLLING STRUCT !\n");@@@*/
+	assert(s && value);
+	for (i = 0; i < s->fieldCount; i++) {
+		DCfield *f = s->pFields + i;
+		DCpointer p = (char*)value + f->offset;
+		switch(f->type) {
+		  case DC_SIGCHAR_STRUCT:
+		  	dcArgStruct(vm, f->pSubStruct, p);
+		  	break;
+		  case DC_SIGCHAR_BOOL: 
+			dcArgBool      (vm, *(DCbool*)p); 
+			break;
+		  case DC_SIGCHAR_CHAR:
+		  case DC_SIGCHAR_UCHAR:
+			dcArgChar      (vm, *(DCchar*)p);
+			break;
+		  case DC_SIGCHAR_SHORT:
+		  case DC_SIGCHAR_USHORT:
+			dcArgShort     (vm, *(DCshort*)p);
+			break;
+		  case DC_SIGCHAR_INT:
+		  case DC_SIGCHAR_UINT:
+			dcArgInt       (vm, *(DCint*)p);
+			break;
+		  case DC_SIGCHAR_LONG:
+		  case DC_SIGCHAR_ULONG:
+			dcArgLong      (vm, *(DCulong*)p);
+			break;
+		  case DC_SIGCHAR_LONGLONG:
+		  case DC_SIGCHAR_ULONGLONG:
+			dcArgLongLong  (vm, *(DCulonglong*)p);
+			break;
+		  case DC_SIGCHAR_FLOAT:
+			dcArgFloat     (vm, *(DCfloat*)p);
+			break;
+		  case DC_SIGCHAR_DOUBLE:
+			dcArgDouble    (vm, *(DCdouble*)p);
+			break;
+		  case DC_SIGCHAR_POINTER:
+		  case DC_SIGCHAR_STRING:
+			dcArgPointer   (vm, *(DCpointer**)p);
+			break;
+	       default:
+	       	assert(0);
+		}	
+	}
+}
+
+
+static DCint readInt(const char** ptr)
+{
+	return strtol(*ptr, (char**)ptr, 10);/*@@@ enough*/
+}
+
+
+DCstruct* dcDefineStruct(const char* signature)
+{
+	DCstruct* s;
+	const char* ptr = signature;
+	DCint fieldCount = readInt(&ptr);
+	s = dcNewStruct(fieldCount, DEFAULT_ALIGNMENT);
+	
+	while (*ptr) {
+		char type = *(ptr++);
+		if (type == DC_SIGCHAR_STRUCT) {
+			/*dcSubStruct(	@@@*/
+		} else {
+			dcStructField(s, type, DEFAULT_ALIGNMENT, readInt(&ptr));
+		}
+	}
+	dcCloseStruct(s);
+	return s;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_struct.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,70 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_struct.h
+ Description: C interface to compute struct size
+ License:
+
+   Copyright (c) 2010-2015 Olivier Chafik <olivier.chafik@centraliens.net>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall struct metadata structures
+
+  REVISION
+  2007/12/11 initial
+  
+*/
+
+#ifndef DYNCALL_STRUCT_H
+#define DYNCALL_STRUCT_H
+
+#include "dyncall.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+typedef struct DCfield_ {
+	DCsize offset, size, alignment, arrayLength;
+	DCint type;
+	DCstruct* pSubStruct;
+} DCfield;
+
+struct DCstruct_ {
+	DCfield *pFields;
+	DCsize size, alignment, fieldCount;
+	
+	/* struct building uses a state machine. */
+	DCint nextField;       /* == -1 if struct is closed */
+	DCstruct *pCurrentStruct, *pLastStruct; /* == this, unless we're in a sub struct */
+};
+
+
+/* Helper. */
+void dcArgStructUnroll(DCCallVM* vm, DCstruct* s, DCpointer  value);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DYNCALL_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_types.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,75 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_types.h
+ Description: Typedefs
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dyncall argument- and return-types
+
+  REVISION
+  2007/12/11 initial
+  
+*/
+
+#ifndef DYNCALL_TYPES_H
+#define DYNCALL_TYPES_H
+
+#include <stddef.h>
+
+#include "dyncall_config.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+typedef void            DCvoid;
+typedef DC_BOOL         DCbool;
+typedef char            DCchar;
+typedef unsigned char   DCuchar;
+typedef short           DCshort;
+typedef unsigned short  DCushort;
+typedef int             DCint;
+typedef unsigned int    DCuint;
+typedef long            DClong;
+typedef unsigned long   DCulong;
+typedef DC_LONG_LONG    DClonglong;
+typedef unsigned DC_LONG_LONG DCulonglong;
+typedef float           DCfloat;
+typedef double          DCdouble;
+typedef DC_POINTER      DCpointer;
+typedef const char*     DCstring;
+
+typedef size_t          DCsize;
+
+#define DC_TRUE   1
+#define DC_FALSE  0
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DYNCALL_TYPES_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_utils.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,39 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_utils.h
+ Description: Type and calling-convention signature character defines
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+
+#ifndef DYNCALL_UTILS_H
+#define DYNCALL_UTILS_H
+
+/* C portable macros. */
+
+#ifndef DC_MAX
+#define DC_MAX(a,b) ((a)>=(b))?(a):(b)
+#endif
+
+#endif /* DYNCALL_UTILS_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_value.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,80 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_value.h
+ Description: Value variant type
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+/*
+
+  dyncall value variant
+
+  a value variant union-type that carries all supported dyncall types.
+
+  REVISION
+  2007/12/11 initial
+
+*/
+
+#ifndef DYNCALL_VALUE_H
+#define DYNCALL_VALUE_H
+
+#include "dyncall_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+typedef union DCValue_ DCValue;
+
+union DCValue_
+{
+  DCbool        B;
+#if defined (DC__Arch_PPC32) && defined(DC__Endian_BIG)
+  struct { DCchar  c_pad[3]; DCchar  c; };
+  struct { DCuchar C_pad[3]; DCuchar C; };
+  struct { DCshort s_pad;    DCshort s; };
+  struct { DCshort S_pad;    DCshort S; };
+#else
+  DCchar        c;
+  DCuchar       C;
+  DCshort       s;
+  DCushort      S;
+#endif
+  DCint         i;
+  DCuint        I;
+  DClong        j;
+  DCulong       J;
+  DClonglong    l;
+  DCulonglong   L;
+  DCfloat       f;
+  DCdouble      d;
+  DCpointer     p;
+  DCstring      Z;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DYNCALL_VALUE_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_vector.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,53 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_vector.c
+ Description: Simple dynamic vector container type implementation
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_vector.h"
+#include <string.h>
+
+
+void dcVecAppend(DCVecHead* pHead, const void* pData, size_t size)
+{
+  size_t newSize = pHead->mSize + size;
+  if(newSize <= pHead->mTotal) 
+  {
+  	void* dst = (DCchar*)dcVecData(pHead) + pHead->mSize;
+  	switch (size) {
+  	  case 1: *(DCchar    *)dst = *(const DCchar    *)pData; break;
+  	  case 2: *(DCshort   *)dst = *(const DCshort   *)pData; break;
+  	  case 4: *(DCint     *)dst = *(const DCint     *)pData; break;
+  	  case 8: *(DCint     *)( ( (char*)dst )+4) = *(const DCint     *)( ( (char*)pData )+4); 
+  	          *(DCint     *)dst = *(const DCint     *)pData; break;
+ 	  /* On sparc 32-bit, this one crashes if ptrs are not aligned.
+          case 8: *(DClonglong*)dst = *(const DClonglong*)pData; break;
+  	  */
+          default: memcpy(dst, pData, size); /* for all the rest. */
+  	}
+    pHead->mSize = newSize;
+  }
+  /*else @@@ warning? error?*/
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/dyncall_vector.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,58 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_vector.h
+ Description: Simple dynamic vector container type header
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DC_VECTOR_H
+#define DC_VECTOR_H
+
+#include "dyncall_types.h"
+
+typedef struct
+{
+  DCsize mTotal;
+  DCsize mSize;
+} DCVecHead;
+
+#define DC_SIZEOF_DCVector(size) (sizeof(DCVecHead)+size)
+
+#define dcVecInit(p,size)   (p)->mTotal=size;(p)->mSize=0
+#define dcVecReset(p)       (p)->mSize=0
+#define dcVecResize(p,size) (p)->mSize=(size)
+#define dcVecSkip(p,size)   (p)->mSize+=(size)
+#define dcVecData(p)        ( (unsigned char*) (((DCVecHead*)(p))+1) )
+#define dcVecAt(p,index)    ( dcVecData(p)+index )
+#define dcVecSize(p)        ( (p)->mSize )
+#define dcVecAlign(p,align) (p)->mSize=( (p)->mSize + align-1 ) & -align
+
+/*
+#include <string.h>
+ #define dcVecAppend(p,s,n) memcpy( dcVecData(p)+p->mSize, s, n );p->mSize+=n
+*/
+
+void dcVecAppend(DCVecHead* pHead, const void* source, size_t length);
+
+#endif /* DC_VECTOR_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/gen-masm.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# Uses portasm to generates MASM sources for intel platforms.
+printf "; auto-generated by `basename $0`\r\n" > dyncall_call_x86_generic_masm.asm
+printf "; auto-generated by `basename $0`\r\n" > dyncall_call_x64_generic_masm.asm
+gcc -E -P -DGEN_MASM dyncall_call_x86.S     | awk '{printf "%s\r\n", $0}' >> dyncall_call_x86_generic_masm.asm
+gcc -E -P -DGEN_MASM dyncall_call_x64-att.S | awk '{printf "%s\r\n", $0}' >> dyncall_call_x64_generic_masm.asm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncall/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,29 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+TOP		= ..
+<$TOP/buildsys/mk/prolog.mk
+
+
+LIBRARY		= dyncall
+UNITS = $UNITS dyncall_vector dyncall_api dyncall_callf dyncall_call dyncall_callvm dyncall_callvm_base dyncall_struct
+
+
+<$TOP/buildsys/mk/epilog.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,55 @@
+# Package: dyncall
+# File: dyncallback/CMakeLists.txt
+# Description: DynCallback library cmake files
+# License:
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>
+# 
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+include_directories(${PROJECT_SOURCE_DIR}/dyncall)
+
+if(MSVC)
+  if(CMAKE_SIZEOF_VOID_P MATCHES 4)
+    set(ASM_SRC dyncall_callback_x86_masm.asm)	
+  else()
+    set(ASM_SRC dyncall_callback_x64_masm.asm)
+  endif()
+else()
+  set(ASM_SRC dyncall_callback_arch.S)
+  set_source_files_properties(${ASM_SRC} PROPERTIES LANGUAGE "C")
+endif()
+
+add_library(dyncallback_s STATIC ${ASM_SRC}
+  dyncall_thunk.c
+  dyncall_alloc_wx.c
+  dyncall_args.c
+  dyncall_callback.c
+)
+
+install(TARGETS dyncallback_s ARCHIVE DESTINATION lib )
+
+install(FILES
+  dyncall_thunk.h
+  dyncall_thunk_x86.h
+  dyncall_thunk_ppc32.h
+  dyncall_thunk_x64.h
+  dyncall_thunk_arm32_arm.h
+  dyncall_thunk_arm32_thumb.h
+  dyncall_alloc_wx.h
+  dyncall_args.h
+  dyncall_callback.h
+  DESTINATION include
+)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/DynCallbackConfig.cmake	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,2 @@
+set(DYNCALLBACK_INCLUDE_DIRS ${DynCall_SOURCE_DIR}/dyncallback)
+set(DYNCALLBACK_LIBRARIES dyncallback_s)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,10 @@
+#include "../buildsys/dynmake/Makefile.base.M"
+
+all: _L(dyncallback_s)
+
+_L(dyncallback_s): _O(dyncall_thunk) _O(dyncall_alloc_wx) _O(dyncall_args) _O(dyncall_callback) _O(dyncall_callback_arch)
+	_(AR) _(ARFLAGS) _(ARFLAG_OUT_PREFIX)_(TARGET) _(PREREQS)
+
+clean:
+        _(RM) _O(*)
+        _(RM) _L(dyncallback_s)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,15 @@
+TARGET	= libdyncallback_s.a
+OBJS	= dyncall_alloc_wx.o dyncall_args.o dyncall_callback.o dyncall_callback_arch.o dyncall_thunk.o
+CFLAGS += -I../dyncall
+HEADERS = dyncall_callback.h dyncall_args.h
+all: ${TARGET}
+${TARGET}: ${OBJS}
+	${AR} ${ARFLAGS} $@ ${OBJS}
+clean:
+	rm -f ${OBJS} ${TARGET}
+install: all
+	mkdir -p ${DESTDIR}${PREFIX}/include
+	cp ${HEADERS} ${DESTDIR}${PREFIX}/include
+	mkdir -p ${DESTDIR}${PREFIX}/lib
+	cp ${TARGET} ${DESTDIR}${PREFIX}/lib
+.PHONY: all clean install
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,20 @@
+LIBNAME = dyncallback
+OBJS = dyncall_alloc_wx.o dyncall_args.o dyncall_callback.o dyncall_callback_arch.o dyncall_thunk.o
+HEADERS = ${VPATH}/dyncall_thunk.h ${VPATH}/dyncall_thunk_x86.h ${VPATH}/dyncall_thunk_ppc32.h ${VPATH}/dyncall_thunk_x64.h ${VPATH}/dyncall_thunk_arm32_arm.h ${VPATH}/dyncall_thunk_arm32_thumb.h ${VPATH}/dyncall_thunk_arm64.h ${VPATH}/dyncall_args.h ${VPATH}/dyncall_callback.h
+TOP = ${VPATH}/..
+CFLAGS += -I${TOP}/dyncall 
+
+LIB = lib${LIBNAME}_s.a
+
+.PHONY: all clean install
+
+all: ${LIB}
+${LIB}: ${OBJS}
+	${AR} ${ARFLAGS} ${LIB} ${OBJS}
+clean:
+	rm -f ${OBJS} ${LIB}
+install: all
+	mkdir -p ${PREFIX}/lib
+	mkdir -p ${PREFIX}/include
+	cp ${LIB} ${PREFIX}/lib
+	cp ${HEADERS} ${PREFIX}/include
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,71 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP=..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = libdyncallback_s.lib #libdyncallback.lib libdyncallback.dll
+OBJS = dyncall_thunk.obj dyncall_alloc_wx.obj dyncall_args.obj dyncall_callback.obj dyncall_callback_$(BUILD_ARCH)_masm.obj 
+
+libdyncallback_s.lib: $(OBJS)
+	echo Creating library $@ ...
+	$(AR) $(ARFLAGS) /OUT:"$@" $(OBJS) > nul
+
+libdyncallback.dll libdyncallback.lib: $(OBJS)
+	echo Creating shared/import library $@ ...
+	$(LD) /DLL $(LDFLAGS) $(OBJS) > nul
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = libdyncallback_s.a
+OBJS = dyncall_thunk.o dyncall_alloc_wx.o dyncall_args.o dyncall_callback.o dyncall_callback_$(BUILD_ARCH)_gas.o 
+
+libdyncallback_s.a: $(OBJS)
+	echo Creating library $@ ...
+	$(AR) -rc $(ARFLAGS) "$@" $(OBJS)
+
+
+!ELSE
+
+TARGETS = libdyncallback_s.a
+#OBJS = dyncall_thunk.obj dyncall_alloc_wx.obj dyncall_args.obj dyncall_callback.obj dyncall_callback_$(BUILD_ARCH).obj
+
+libdyncallback_s.a:# $(OBJS)
+	echo Not building dyncallback: There is no dyncallback support on this platform.
+#	echo Creating library $@ ...
+#	$(AR) -rc $(ARFLAGS) "$@" $(OBJS)
+
+!ENDIF
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,9 @@
+components:
+- alloc_wx
+- thunk
+
+BUGS
+call back failures for x64 apple:
+
+lppffldplfffddd)i
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/TODO	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+URGENT:
+- discuss character literal return value specifiers (e.g. cmp %al, 'i'), we might wanna use just an int for the size
+
+- psp mips support
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_alloc_wx.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,36 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_alloc_wx.c
+ Description: Allocate write/executable memory - Implementation back-end selector (mmap or win32)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "../dyncall/dyncall_macros.h"
+
+#if defined(DC_WINDOWS)
+#include "dyncall_alloc_wx_win32.c"
+#elif defined(DC_UNIX)
+#include "dyncall_alloc_wx_mmap.c"
+#else
+#include "dyncall_alloc_wx_malloc.c"
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_alloc_wx.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,47 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_alloc_wx.h
+ Description: Allocate write/executable memory - Interface
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_ALLOC_WX_HPP
+#define DYNCALL_ALLOC_WX_HPP
+
+#include "dyncall_types.h"
+
+typedef int DCerror;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+DCerror dcAllocWX(DCsize size, void** p);
+void    dcFreeWX (void* p, DCsize size);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* DYNCALL_ALLOC_WX_HPP */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_alloc_wx_malloc.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,41 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_alloc_wx_malloc.c
+ Description: Allocate write/executable memory - Fallback implementation based
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_alloc_wx.h"
+
+#include <stdlib.h>
+
+
+int dcAllocWX(size_t size, void** pp)
+{
+  *pp = malloc(size);
+  return 0;
+}
+
+void dcFreeWX(void* p, size_t size)
+{
+  free(p);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_alloc_wx_mmap.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,43 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_alloc_wx_mmap.c
+ Description: Allocate write/executable memory - Implementation for posix
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_alloc_wx.h"
+
+#include <sys/types.h>
+#include <sys/mman.h>
+
+int dcAllocWX(size_t size, void** pp)
+{
+  void* p = mmap(0, size, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0);
+  if (p == ( (void*)-1 ) ) return -1;
+  *pp = p;
+  return 0;
+}
+
+void dcFreeWX(void* p, size_t size)
+{
+  munmap(p, size);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_alloc_wx_win32.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,43 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_alloc_wx_win32.c
+ Description: Allocate write/executable memory  - Implementation for win32 platform
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_alloc_wx.h"
+#include <windows.h>
+#include <assert.h>
+
+int dcAllocWX(size_t size, void** ptr)
+{
+  LPVOID p = VirtualAlloc(0, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
+  if (p == NULL) return -1;
+  *ptr = p;
+  return 0;
+}
+
+void dcFreeWX(void* p, size_t size)
+{
+  BOOL b = VirtualFree( p, 0, MEM_RELEASE);
+  assert(b);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,57 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args.c
+ Description: Callback's Arguments VM - Implementation back-end selector
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "../dyncall/dyncall_macros.h"
+
+#if defined(DC__Arch_Intel_x86)
+#include "dyncall_args_x86.c"
+#elif defined (DC__Arch_AMD64)
+#include "dyncall_args_x64.c"
+#elif defined (DC__Arch_PPC32)
+# if defined (DC__OS_Darwin)
+#   include "dyncall_args_ppc32.c"
+# else
+#   include "dyncall_args_ppc32_sysv.c"
+# endif
+#elif defined (DC__Arch_PPC64)
+#include "dyncall_args_ppc64.c"
+#elif defined (DC__Arch_ARM_ARM)
+#include "dyncall_args_arm32_arm.c"
+#elif defined (DC__Arch_ARM_THUMB)
+#include "dyncall_args_arm32_thumb.c"
+#elif defined (DC__Arch_MIPS)
+#include "dyncall_args_mips.c"
+#elif defined (DC__Arch_Sparc)
+#include "dyncall_args_sparc32.c"
+#elif defined (DC__Arch_Sparcv9)
+#include "dyncall_args_sparc64.c"
+#elif defined (DC__Arch_ARM64)
+#  if defined (DC__OS_Darwin)
+#    include "dyncall_args_arm64_apple.c"
+#  else
+#    include "dyncall_args_arm64.c"
+#  endif
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,66 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args.h
+ Description: Callback's Arguments VM - Interface
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_ARGS_H
+#define DYNCALL_ARGS_H
+
+/*
+ * dyncall args C API
+ *
+ * dyncall args provides serialized access to arguments of a function call.
+ * related concepts: callback
+ *
+ */
+
+#include "dyncall.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct DCArgs DCArgs;
+
+DC_API DCbool      dcbArgBool     (DCArgs*);
+DC_API DCchar      dcbArgChar     (DCArgs*);
+DC_API DCshort     dcbArgShort    (DCArgs*);
+DC_API DCint       dcbArgInt      (DCArgs*);
+DC_API DClong      dcbArgLong     (DCArgs*);
+DC_API DClonglong  dcbArgLongLong (DCArgs*);
+DC_API DCuchar     dcbArgUChar    (DCArgs*);
+DC_API DCushort    dcbArgUShort   (DCArgs*);
+DC_API DCuint      dcbArgUInt     (DCArgs*);
+DC_API DCulong     dcbArgULong    (DCArgs*);
+DC_API DCulonglong dcbArgULongLong(DCArgs*);
+DC_API DCfloat     dcbArgFloat    (DCArgs*);
+DC_API DCdouble    dcbArgDouble   (DCArgs*);
+DC_API DCpointer   dcbArgPointer  (DCArgs*);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DYNCALL_ARGS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_arm32_arm.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,113 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_arm32_arm.c
+ Description: Callback's Arguments VM - Implementation for ARM32 (ARM mode)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_args_arm32_arm.h"
+
+
+static void arm_align_64(DCArgs* args)
+{
+  /* Look at signature to see if current calling convention needs alignment */
+  /* or not (e.g. EABI has different alignment). If nothing specified, fall */
+  /* back to default behaviour for this platform.                           */
+  /* @@@ check signature string */
+
+  int sig =
+#if defined(DC__ABI_ARM_EABI)
+    0; /* EABI */
+#else
+    1; /* ATPCS */
+#endif
+  if(sig == 0) {
+    if(args->reg_count < 4)
+      args->reg_count = (args->reg_count+1)&~1;
+    if(args->reg_count >= 4 && (int)args->stack_ptr & 4)
+      ++args->stack_ptr;
+  }
+}
+
+
+static void* arm_word(DCArgs* args)
+{
+  if(args->reg_count < 4)
+    return &args->reg_data[args->reg_count++];
+  else
+    return (void*)args->stack_ptr++;
+}
+
+
+static DCdouble arm_double(DCArgs* args)
+{
+  union {
+    DCdouble d;
+    DClong   l[2];
+  } d;
+  arm_align_64(args);
+  d.l[0] = *(DClong*)arm_word(args);
+  d.l[1] = *(DClong*)arm_word(args);
+  return d.d;
+}
+
+
+static DClonglong arm_longlong(DCArgs* args)
+{
+  union {
+    DClonglong ll;
+    DClong     l[2];
+  } ll;
+  arm_align_64(args);
+  ll.l[0] = *(DClong*)arm_word(args);
+  ll.l[1] = *(DClong*)arm_word(args);
+  return ll.ll;
+}
+
+
+
+// ----------------------------------------------------------------------------
+// C API implementation:
+
+
+// base operations:
+
+DClonglong  dcbArgLongLong (DCArgs* p) { return arm_longlong(p); }
+DClong      dcbArgLong     (DCArgs* p) { return *(DClong*)arm_word(p); }
+DCint       dcbArgInt      (DCArgs* p) { return (DCint)   dcbArgLong(p); }
+DCchar      dcbArgChar     (DCArgs* p) { return (DCchar)  dcbArgLong(p); }
+DCshort     dcbArgShort    (DCArgs* p) { return (DCshort) dcbArgLong(p); }
+DCbool      dcbArgBool     (DCArgs* p) { return (dcbArgLong(p) == 0) ? 0 : 1; }
+
+DCuint      dcbArgUInt     (DCArgs* p) { return (DCuint)     dcbArgInt(p);      }
+DCuchar     dcbArgUChar    (DCArgs* p) { return (DCuchar)    dcbArgChar(p);     }
+DCushort    dcbArgUShort   (DCArgs* p) { return (DCushort)   dcbArgShort(p);    }
+DCulong     dcbArgULong    (DCArgs* p) { return (DCulong)    dcbArgLong(p);     }
+DCulonglong dcbArgULongLong(DCArgs* p) { return (DCulonglong)dcbArgLongLong(p); }
+
+
+DCpointer   dcbArgPointer  (DCArgs* p) { return (DCpointer)  dcbArgLong(p); }
+
+DCdouble    dcbArgDouble   (DCArgs* p) { return arm_double(p); }
+DCfloat     dcbArgFloat    (DCArgs* p) { return *(DCfloat*)  arm_word(p); }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_arm32_arm.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,41 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_arm32_arm.h
+ Description: Callback's Arguments VM - Header for ARM32 (ARM mode)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALLBACK_ARGS_ARM32_ARM_H
+#define DYNCALLBACK_ARGS_ARM32_ARM_H
+
+#include "dyncall_args.h"
+
+struct DCArgs
+{
+	/* Don't change order! */
+	long  reg_data[4];
+	int   reg_count;
+	long* stack_ptr;
+};
+
+#endif /* DYNCALLBACK_ARGS_ARM32_ARM_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_arm32_thumb.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_arm32_thumb.c
+ Description: Callback's Arguments VM - Implementation for ARM32 (THUMB mode)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_args_arm32_thumb.h"
+#include "dyncall_args_arm32_arm.c"	/* Uses same code as ARM mode. */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_arm32_thumb.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,33 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_arm32_thumb.h
+ Description: Callback's Arguments VM - Header for ARM32 (THUMB mode)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALLBACK_ARGS_ARM32_THUMB_H
+#define DYNCALLBACK_ARGS_ARM32_THUMB_H
+
+#include "dyncall_args_arm32_arm.h"	/* Uses same code as ARM mode. */
+
+#endif /* DYNCALLBACK_ARGS_ARM32_THUMB_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_arm64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,77 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_arm64.c
+ Description: Callback's Arguments VM - Implementation for ARM64 / ARMv8 / AAPCS64
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>,
+                      Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+#include "dyncall_args.h"
+
+#include <stdint.h>
+
+typedef union {
+  struct { double value; } d;
+  struct { float  value; } f;
+} DCFPU_t;
+
+struct DCArgs
+{
+  /* buffers and stack-pointer: */
+
+  uint64_t  I[8];
+  DCFPU_t   F[8];
+  uint64_t* sp;
+  
+  /* counters: */
+  int i;
+  int f;
+  int s;
+  int reserved;
+};
+
+DClonglong dcbArgLongLong (DCArgs* p) 
+{
+  if (p->i < 8) {
+    return p->I[p->i++];
+  } else {
+    return *(p->sp)++;
+  }
+}
+DCdouble  dcbArgDouble (DCArgs* p) {
+  return (p->f < 8) ? p->F[p->f++].d.value : * ( (double*) (p->sp++) );
+}
+DCfloat   dcbArgFloat  (DCArgs* p) {
+  return (p->f < 8) ? p->F[p->f++].f.value : * ( (float*)  (p->sp++) );
+}
+
+
+DClong    dcbArgLong   (DCArgs* p) { return (DClong)  dcbArgLongLong(p); }
+DCint     dcbArgInt    (DCArgs* p) { return (DCint)   dcbArgLongLong(p); }
+DCshort   dcbArgShort  (DCArgs* p) { return (DCshort) dcbArgLongLong(p); }
+DCchar    dcbArgChar   (DCArgs* p) { return (DCchar)  dcbArgLongLong(p); }
+DCbool    dcbArgBool   (DCArgs* p) { return dcbArgLongLong(p) & 0x1; }
+DCpointer dcbArgPointer(DCArgs* p) { return (DCpointer) dcbArgLongLong(p); }
+
+DCuint      dcbArgUInt     (DCArgs* p) { return (DCuint)      dcbArgInt(p);      }
+DCuchar     dcbArgUChar    (DCArgs* p) { return (DCuchar)     dcbArgChar(p);     }
+DCushort    dcbArgUShort   (DCArgs* p) { return (DCushort)    dcbArgShort(p);    }
+DCulong     dcbArgULong    (DCArgs* p) { return (DCulong)     dcbArgLong(p);     }
+DCulonglong dcbArgULongLong(DCArgs* p) { return (DCulonglong) dcbArgLongLong(p); }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_arm64_apple.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,160 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_arm64_apple.c
+ Description: Callback's Arguments VM - Implementation for Apple's ARM64 / ARMv8 / AAPCS64
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>,
+                      Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "dyncall_args.h"
+
+#include <stdint.h>
+
+typedef union {
+  struct { double value; } d;
+  struct { float  value; } f;
+} DCFPU_t;
+
+struct DCArgs
+{
+  /* buffers and stack-pointer: */
+
+  uint64_t  I[8];
+  DCFPU_t   F[8];
+  uint8_t*  sp;
+  
+  /* counters: */
+  int i;
+  int f;
+  int s;
+  int reserved;
+};
+
+static inline uint8_t* align(uint8_t* p, size_t v)
+{
+  return (uint8_t*) ( ( ( (ptrdiff_t) p ) + v - 1) & (ptrdiff_t) -v );
+}
+
+
+DClonglong dcbArgLongLong (DCArgs* p) 
+{
+  if (p->i < 8) {
+    return p->I[p->i++];
+  } else {
+    DClonglong value;
+    p->sp = align(p->sp,sizeof(DClonglong));
+    value =  * ( (DClonglong*) p->sp );
+    p->sp += sizeof(DClonglong);
+    return value;
+  }
+}
+DCdouble  dcbArgDouble (DCArgs* p) {
+  if (p->f < 8) { 
+    return p->F[p->f++].d.value;
+  } else {
+    DCdouble value;
+    p->sp = align(p->sp,sizeof(DCdouble));
+    value =  * ( (DCdouble*) p->sp );
+    p->sp += sizeof(DCdouble);
+    return value;
+  }
+}
+DCfloat   dcbArgFloat  (DCArgs* p) {
+  if (p->f < 8) {
+    return p->F[p->f++].f.value;
+  } else {
+    DCfloat value;
+    p->sp = align(p->sp,sizeof(DCfloat));
+    value =  * ( (DCfloat*) p->sp );
+    p->sp += sizeof(DCfloat);
+    return value;
+  }
+}
+
+DClong    dcbArgLong   (DCArgs* p) { 
+  if (p->i < 8) {
+    return (DClong) p->I[p->i++];
+  } else {
+    DClong value;
+    p->sp = align(p->sp,sizeof(DClong));
+    value =  * ( (DClong*) p->sp );
+    p->sp += sizeof(DClong);
+    return value;
+  }
+}
+
+DCint     dcbArgInt    (DCArgs* p) { 
+  if (p->i < 8) {
+    return (DCint) p->I[p->i++];
+  } else {
+    DCint value;
+    p->sp = align(p->sp,sizeof(DCint));
+    value =  * ( (DCint*) p->sp );
+    p->sp += sizeof(DCint);
+    return value;
+  }
+}
+
+DCshort   dcbArgShort  (DCArgs* p) { 
+  if (p->i < 8) {
+    return (DCshort) p->I[p->i++];
+  } else {
+    DCshort value;
+    p->sp = align(p->sp,sizeof(DCshort));
+    value =  * ( (DCshort*) p->sp );
+    p->sp += sizeof(DCshort);
+    return value;
+  }
+}
+
+DCchar    dcbArgChar   (DCArgs* p) { 
+  if (p->i < 8) {
+    return (DCchar) p->I[p->i++];
+  } else {
+    DCchar value;
+    p->sp = align(p->sp,sizeof(DCchar));
+    value =  * ( (DCchar*) p->sp );
+    p->sp += sizeof(DCchar);
+    return value;
+  }
+}
+
+DCbool    dcbArgBool   (DCArgs* p) { 
+  if (p->i < 8) {
+    return (DCbool) p->I[p->i++];
+  } else {
+    DCbool value;
+    p->sp = align(p->sp,sizeof(DCbool));
+    value =  * ( (DCbool*) p->sp );
+    p->sp += sizeof(DCbool);
+    return value;
+  }
+}
+
+DCpointer dcbArgPointer(DCArgs* p) { 
+  return (DCpointer) dcbArgLongLong(p); 
+}
+
+DCuint      dcbArgUInt     (DCArgs* p) { return (DCuint)      dcbArgInt(p);      }
+DCuchar     dcbArgUChar    (DCArgs* p) { return (DCuchar)     dcbArgChar(p);     }
+DCushort    dcbArgUShort   (DCArgs* p) { return (DCushort)    dcbArgShort(p);    }
+DCulong     dcbArgULong    (DCArgs* p) { return (DCulong)     dcbArgLong(p);     }
+DCulonglong dcbArgULongLong(DCArgs* p) { return (DCulonglong) dcbArgLongLong(p); }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_mips.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,82 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_mips.c
+ Description: Callback's Arguments VM - Implementation for MIPS
+ License:
+
+   Copyright (c) 2013-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_args_mips.h"
+
+DCint dcbArgInt(DCArgs* p) 
+{
+  DCint value;
+  if(p->ireg_count < 8)
+    value = p->ireg_data[p->ireg_count++];
+  else {
+    value = *((int*)p->stackptr);
+    p->stackptr += sizeof(int);
+  }
+  return value;
+}
+DCuint dcbArgUInt(DCArgs* p) { return (DCuint)dcbArgInt(p); }
+
+DCulonglong dcbArgULongLong(DCArgs* p) 
+{
+  DCulonglong value;
+  p->ireg_count += (p->ireg_count & 1); // Skip one reg if not aligned.
+  value  = ((DCulonglong)dcbArgUInt(p)) << 32;
+  value |= dcbArgUInt(p);
+  return value;
+}
+DClonglong dcbArgLongLong(DCArgs* p) { return (DClonglong)dcbArgULongLong(p); }
+
+DClong      dcbArgLong   (DCArgs* p) { return (DClong)   dcbArgUInt(p); }
+DCulong     dcbArgULong  (DCArgs* p) { return (DCulong)  dcbArgUInt(p); }
+DCchar      dcbArgChar   (DCArgs* p) { return (DCchar)   dcbArgUInt(p); }
+DCuchar     dcbArgUChar  (DCArgs* p) { return (DCuchar)  dcbArgUInt(p); }
+DCshort     dcbArgShort  (DCArgs* p) { return (DCshort)  dcbArgUInt(p); }
+DCushort    dcbArgUShort (DCArgs* p) { return (DCushort) dcbArgUInt(p); }
+DCbool      dcbArgBool   (DCArgs* p) { return (DCbool)   dcbArgUInt(p); }
+DCpointer   dcbArgPointer(DCArgs* p) { return (DCpointer)dcbArgUInt(p); }
+
+DCfloat dcbArgFloat(DCArgs* p)
+{ 
+  DCfloat result;
+  if(p->freg_count < 8)
+    result = (DCfloat)p->freg_data[p->freg_count++];
+  else {
+    result = *((float*)p->stackptr);
+    p->stackptr += sizeof(float);
+  }
+  return result; 
+}
+DCdouble dcbArgDouble(DCArgs* p) 
+{ 
+  union {
+    DCdouble result;
+    DCfloat f[2];
+  } d;
+  p->freg_count += (p->freg_count & 1); // Skip one reg if not aligned.
+  d.f[0] = dcbArgFloat(p);
+  d.f[1] = dcbArgFloat(p);
+  return d.result;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_mips.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,42 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_mips.h
+ Description: Callback's Arguments VM - Header for MIPS
+ License:
+
+   Copyright (c) 2013-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALLBACK_ARGS_MIPS_H
+#define DYNCALLBACK_ARGS_MIPS_H
+
+#include "dyncall_args.h"
+
+struct DCArgs
+{
+  int            ireg_data[8];
+  float          freg_data[8];
+  int            ireg_count;
+  int            freg_count;
+  unsigned char* stackptr;
+};
+
+#endif /* DYNCALLBACK_ARGS_MIPS_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_ppc32.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,89 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_ppc32.c
+ Description: Callback's Arguments VM - Implementation for ppc32
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_args_ppc32.h"
+
+DCint       dcbArgInt      (DCArgs* p) 
+{
+  DCint value;
+  if (p->ireg_count < 8)
+    value = p->ireg_data[p->ireg_count++];
+  else
+    value = *( (int*) p->stackptr );
+  p->stackptr += sizeof(int);
+  return value;
+}
+DCuint      dcbArgUInt     (DCArgs* p) { return (DCuint)  dcbArgInt(p);  }
+
+DCulonglong  dcbArgULongLong (DCArgs* p) 
+{
+  DCulonglong value;
+  value  = ( (DCulonglong) dcbArgUInt(p) ) << 16UL;
+  value |= dcbArgUInt(p);
+  return value;
+}
+DClonglong  dcbArgLongLong(DCArgs* p) { return (DClonglong)dcbArgULongLong(p); }
+
+DClong      dcbArgLong     (DCArgs* p) { return (DClong)  dcbArgUInt(p); }
+DCulong     dcbArgULong    (DCArgs* p) { return (DCulong) dcbArgUInt(p); }
+DCchar      dcbArgChar     (DCArgs* p) { return (DCchar)  dcbArgUInt(p); }
+DCuchar     dcbArgUChar    (DCArgs* p) { return (DCuchar) dcbArgUInt(p); }
+DCshort     dcbArgShort    (DCArgs* p) { return (DCshort) dcbArgUInt(p); }
+DCushort    dcbArgUShort   (DCArgs* p) { return (DCushort)dcbArgUInt(p); }
+DCbool      dcbArgBool     (DCArgs* p) { return (DCbool)  dcbArgUInt(p); }
+
+DCpointer   dcbArgPointer  (DCArgs* p) { return (DCpointer)dcbArgUInt(p); }
+
+DCdouble    dcbArgDouble   (DCArgs* p) 
+{ 
+  DCdouble result;
+  if (p->ireg_count < 7) { 
+    p->ireg_count+=2;
+  } else if (p->ireg_count == 7) {
+    p->ireg_count = 8;
+  }
+  if (p->freg_count < 13) {
+    result = p->freg_data[p->freg_count++];
+  } else {
+    result = * ( (double*) p->stackptr );
+  }
+  p->stackptr += sizeof(double);
+  return result;
+}
+DCfloat     dcbArgFloat    (DCArgs* p)
+{ 
+  DCfloat result;
+  if (p->ireg_count < 8)
+    p->ireg_count++;
+  if (p->freg_count < 13) {
+    result = (DCfloat) p->freg_data[p->freg_count++];
+  } else {
+    result = * ( (float*) p->stackptr );
+  }
+  p->stackptr += sizeof(float);
+  return result; 
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_ppc32.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,43 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_ppc32.h
+ Description: Callback's Arguments VM - Header for ppc32
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef DYNCALLBACK_ARGS_PPC32_H
+#define DYNCALLBACK_ARGS_PPC32_H
+
+#include "dyncall_args.h"
+
+/* Common Args iterator for Apple and System V ABI. */
+
+struct DCArgs
+{
+  int            ireg_data[8];		/* offset: 0   size: 4*8 = 32  */
+  double         freg_data[13];		/* offset: 32  size: 8*13= 104 */	
+  unsigned char* stackptr;		/* offset: 136 size:       4   */
+  int            ireg_count;            /* offset: 140 size:       4   */
+  int            freg_count;            /* offset: 144 size:       4   */
+};                                      /*       total size:       148 */
+
+#endif /* DYNCALLBACK_ARGS_PPC32_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_ppc32_sysv.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,95 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_ppc32_sysv.c
+ Description: Callback's Args Implementation for PowerPC 32-bit System V ABI
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_args_ppc32.h"
+
+DCint       dcbArgInt      (DCArgs* p) 
+{
+  DCint value;
+  if (p->ireg_count < 8)
+    value = p->ireg_data[p->ireg_count++];
+  else {
+    value = *( (int*) p->stackptr );
+    p->stackptr += sizeof(int);
+  }
+  return value;
+}
+DCuint      dcbArgUInt     (DCArgs* p) { return (DCuint)  dcbArgInt(p);  }
+
+DCulonglong  dcbArgULongLong (DCArgs* p) 
+{
+  DCulonglong value;
+  if (p->ireg_count < 7)
+  {
+    /* next free integer register is even (r0, r2, r3) ? */
+    /* if not, skip one integer */
+    p->ireg_count = (p->ireg_count + 1) & -2;
+    value = * (unsigned long long*) ( & p->ireg_data[p->ireg_count] );
+    p->ireg_count += 2;
+  } else {
+    p->ireg_count = 8;
+    /* 64-bit values are naturally aligned on stack */
+    p->stackptr = (unsigned char*) ( ( ( (ptrdiff_t) (p->stackptr) ) + 7) & ( (ptrdiff_t) -8 ) );
+    value = * ( (unsigned long long*) p->stackptr );
+    p->stackptr += sizeof(unsigned long long);
+  }
+  return value;
+}
+DClonglong  dcbArgLongLong(DCArgs* p) { return (DClonglong)dcbArgULongLong(p); }
+
+DClong      dcbArgLong     (DCArgs* p) { return (DClong)  dcbArgUInt(p); }
+DCulong     dcbArgULong    (DCArgs* p) { return (DCulong) dcbArgUInt(p); }
+DCchar      dcbArgChar     (DCArgs* p) { return (DCchar)  dcbArgUInt(p); }
+DCuchar     dcbArgUChar    (DCArgs* p) { return (DCuchar) dcbArgUInt(p); }
+DCshort     dcbArgShort    (DCArgs* p) { return (DCshort) dcbArgUInt(p); }
+DCushort    dcbArgUShort   (DCArgs* p) { return (DCushort)dcbArgUInt(p); }
+DCbool      dcbArgBool     (DCArgs* p) { return (DCbool)  dcbArgUInt(p); }
+
+DCpointer   dcbArgPointer  (DCArgs* p) { return (DCpointer)dcbArgUInt(p); }
+
+DCdouble    dcbArgDouble   (DCArgs* p) 
+{ 
+  DCdouble result;
+  if (p->freg_count < 8) {
+    result = p->freg_data[p->freg_count++];
+  } else {
+    p->stackptr = (unsigned char*) ( ( ( (ptrdiff_t) (p->stackptr) ) + 7) & ( (ptrdiff_t) -8 ) );
+    result = * ( (double*) p->stackptr );
+    p->stackptr += sizeof(double);
+  }
+  return result;
+}
+DCfloat     dcbArgFloat    (DCArgs* p)
+{ 
+  DCfloat result;
+  if (p->freg_count < 8) {
+    result = (DCfloat) p->freg_data[p->freg_count++];
+  } else {
+    result = * ( (float*) p->stackptr );
+    p->stackptr += sizeof(float);
+  }
+  return result; 
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_ppc64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,71 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_ppc64.c
+ Description: Callback's Arguments VM - Implementation for ppc64
+ License:
+
+   Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "dyncall_args_ppc64.h"
+
+DCint       dcbArgInt      (DCArgs* p) { return (DCint)       dcbArgLongLong(p); }
+DCuint      dcbArgUInt     (DCArgs* p) { return (DCuint)      dcbArgLongLong(p); }
+DCulonglong dcbArgULongLong(DCArgs* p) { return (DCulonglong) dcbArgLongLong(p); }
+
+DClonglong  dcbArgLongLong(DCArgs* p)
+{
+  DClonglong value;
+  if (p->ireg_count < 8) {
+    value = p->ireg_data[p->ireg_count++];
+  } else {
+    value = *( (long long*) p->stackptr );
+  }
+  p->stackptr += sizeof(long long);
+  return value;
+}
+
+DClong      dcbArgLong     (DCArgs* p) { return (DClong)  dcbArgLongLong(p); }
+DCulong     dcbArgULong    (DCArgs* p) { return (DCulong) dcbArgLongLong(p); }
+DCchar      dcbArgChar     (DCArgs* p) { return (DCchar)  dcbArgLongLong(p); }
+DCuchar     dcbArgUChar    (DCArgs* p) { return (DCuchar) dcbArgLongLong(p); }
+DCshort     dcbArgShort    (DCArgs* p) { return (DCshort) dcbArgLongLong(p); }
+DCushort    dcbArgUShort   (DCArgs* p) { return (DCushort)dcbArgLongLong(p); }
+DCbool      dcbArgBool     (DCArgs* p) { return (DCbool)  dcbArgLongLong(p); }
+
+DCpointer   dcbArgPointer  (DCArgs* p) { return (DCpointer)dcbArgLongLong(p); }
+
+DCdouble    dcbArgDouble   (DCArgs* p) 
+{ 
+  DCdouble result;
+
+  if (p->freg_count < 13) {
+    result = p->freg_data[p->freg_count++];
+    if (p->ireg_count < 8) {
+      p->ireg_count++;
+    }
+  } else {
+    result = * ( (double*) p->stackptr );
+  }
+
+  p->stackptr += sizeof(double);
+  return result;
+}
+
+DCfloat     dcbArgFloat    (DCArgs* p) { return (DCfloat)dcbArgDouble(p); }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_ppc64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,40 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_ppc64.h
+ Description: Callback's Arguments VM - Header for ppc64
+ License:
+
+   Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef DYNCALLBACK_ARGS_PPC64_H
+#define DYNCALLBACK_ARGS_PPC64_H
+
+#include "dyncall_args.h"
+
+struct DCArgs
+{
+  long long      ireg_data[8];
+  double         freg_data[13];
+  unsigned char* stackptr;
+  int            ireg_count;
+  int            freg_count;
+};
+
+#endif /* DYNCALLBACK_ARGS_PPC64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_sparc32.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,42 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_sparc32.c
+ Description: Callback's Arguments VM - Implementation for sparc32 - not yet
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_args_sparc32.h"
+
+DCint       dcbArgInt      (DCArgs* p) { return 0; }
+DCuint      dcbArgUInt     (DCArgs* p) { return 0; }
+DCulonglong dcbArgULongLong (DCArgs* p) {  return 0; }
+DClonglong  dcbArgLongLong(DCArgs* p) { return (DClonglong)dcbArgULongLong(p); }
+DClong      dcbArgLong     (DCArgs* p) { return (DClong)  dcbArgUInt(p); }
+DCulong     dcbArgULong    (DCArgs* p) { return (DCulong) dcbArgUInt(p); }
+DCchar      dcbArgChar     (DCArgs* p) { return (DCchar)  dcbArgUInt(p); }
+DCuchar     dcbArgUChar    (DCArgs* p) { return (DCuchar) dcbArgUInt(p); }
+DCshort     dcbArgShort    (DCArgs* p) { return (DCshort) dcbArgUInt(p); }
+DCushort    dcbArgUShort   (DCArgs* p) { return (DCushort)dcbArgUInt(p); }
+DCbool      dcbArgBool     (DCArgs* p) { return (DCbool)  dcbArgUInt(p); }
+DCpointer   dcbArgPointer  (DCArgs* p) { return (DCpointer)dcbArgUInt(p); }
+DCdouble    dcbArgDouble   (DCArgs* p) { return 0.0; }
+DCfloat     dcbArgFloat    (DCArgs* p) { return 0.0f; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_sparc32.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,38 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_sparc32.h
+ Description: Callback's Arguments VM - Header for sparc32
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALLBACK_ARGS_SPARC32_H
+#define DYNCALLBACK_ARGS_SPARC32_H
+
+#include "dyncall_args.h"
+
+struct DCArgs
+{
+  int dummy;
+};
+
+#endif /* DYNCALLBACK_ARGS_SPARC32_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_sparc64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,42 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_sparc64.c
+ Description: Callback's Arguments VM - Implementation for sparc64 - not yet
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_args_sparc64.h"
+
+DCint       dcbArgInt      (DCArgs* p) { return 0; }
+DCuint      dcbArgUInt     (DCArgs* p) { return 0; }
+DCulonglong dcbArgULongLong (DCArgs* p) {  return 0; }
+DClonglong  dcbArgLongLong(DCArgs* p) { return (DClonglong)dcbArgULongLong(p); }
+DClong      dcbArgLong     (DCArgs* p) { return (DClong)  dcbArgUInt(p); }
+DCulong     dcbArgULong    (DCArgs* p) { return (DCulong) dcbArgUInt(p); }
+DCchar      dcbArgChar     (DCArgs* p) { return (DCchar)  dcbArgUInt(p); }
+DCuchar     dcbArgUChar    (DCArgs* p) { return (DCuchar) dcbArgUInt(p); }
+DCshort     dcbArgShort    (DCArgs* p) { return (DCshort) dcbArgUInt(p); }
+DCushort    dcbArgUShort   (DCArgs* p) { return (DCushort)dcbArgUInt(p); }
+DCbool      dcbArgBool     (DCArgs* p) { return (DCbool)  dcbArgUInt(p); }
+DCpointer   dcbArgPointer  (DCArgs* p) { return (DCpointer)dcbArgUInt(p); }
+DCdouble    dcbArgDouble   (DCArgs* p) { return 0.0; }
+DCfloat     dcbArgFloat    (DCArgs* p) { return 0.0f; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_sparc64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,38 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_sparc64.h
+ Description: Callback's Arguments VM - Header for sparc32 - not yet
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALLBACK_ARGS_SPARC64_H
+#define DYNCALLBACK_ARGS_SPARC64_H
+
+#include "dyncall_args.h"
+
+struct DCArgs
+{
+  int dummy;
+};
+
+#endif /* DYNCALLBACK_ARGS_SPARC64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_x64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,74 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_x64.c
+ Description: Callback's Arguments VM - Implementation for x64
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_args_x64.h"
+
+
+static int64* arg_i64(DCArgs* args)
+{
+  if (args->reg_count.i < numIntRegs)
+    return &args->reg_data.i[args->reg_count.i++];
+  else
+    return args->stack_ptr++;
+}
+
+
+static double* arg_f64(DCArgs* args)
+{
+  if (args->reg_count.f < numFloatRegs)
+    return &args->reg_data.f[args->reg_count.f++];
+  else
+  {
+    return (double*)args->stack_ptr++;
+  }
+}
+
+
+// ----------------------------------------------------------------------------
+// C API implementation:
+
+
+// base operations:
+
+DClonglong  dcbArgLongLong (DCArgs* p) { return *arg_i64(p); }
+DCint       dcbArgInt      (DCArgs* p) { return (int)   dcbArgLongLong(p); }
+DClong      dcbArgLong     (DCArgs* p) { return (long)  dcbArgLongLong(p); }
+DCchar      dcbArgChar     (DCArgs* p) { return (char)  dcbArgLongLong(p); }
+DCshort     dcbArgShort    (DCArgs* p) { return (short) dcbArgLongLong(p); }
+DCbool      dcbArgBool     (DCArgs* p) { return (dcbArgInt(p) == 0) ? 0 : 1; }
+
+DCuint      dcbArgUInt     (DCArgs* p) { return (DCuint)      dcbArgInt(p);      }
+DCuchar     dcbArgUChar    (DCArgs* p) { return (DCuchar)     dcbArgChar(p);     }
+DCushort    dcbArgUShort   (DCArgs* p) { return (DCushort)    dcbArgShort(p);    }
+DCulong     dcbArgULong    (DCArgs* p) { return (DCulong)     dcbArgLong(p);     }
+DCulonglong dcbArgULongLong(DCArgs* p) { return (DCulonglong) dcbArgLongLong(p); }
+
+
+DCpointer   dcbArgPointer  (DCArgs* p) { return (DCpointer)   dcbArgLongLong(p); }
+
+DCdouble    dcbArgDouble   (DCArgs* p) { return *arg_f64(p); }
+DCfloat     dcbArgFloat    (DCArgs* p) { return *(float*)arg_f64(p); }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_x64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_x64.h
+ Description: Callback's Arguments VM - Header for x64
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALLBACK_ARGS_X64_H
+#define DYNCALLBACK_ARGS_X64_H
+
+#include "dyncall_args.h"
+#include "dyncall_callvm_x64.h"  /* reuse structures */
+
+
+struct DCArgs
+{
+	/* state */
+	int64*          stack_ptr;
+	DCRegCount_x64  reg_count;	/* @@@ win64 version should maybe force alignment to 8 in order to be secure */
+
+	/* reg data */
+	DCRegData_x64_s reg_data;
+};
+
+#endif /* DYNCALLBACK_ARGS_X64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_x86.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,122 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_x86.c
+ Description: Callback's Arguments VM - Implementation for x86
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_args_x86.h"
+
+/* ---------------------------------------------------------------------------- */
+/* C API implementation: */
+
+/* base operations */
+
+DCint      dcbArgInt     (DCArgs* p) { return p->vt->i32(p); }
+DClonglong dcbArgLongLong(DCArgs* p) { return p->vt->i64(p); }
+DCfloat    dcbArgFloat   (DCArgs* p) { return p->vt->f32(p); }
+DCdouble   dcbArgDouble  (DCArgs* p) { return p->vt->f64(p); }
+
+/* promote to integer: bool, char, short, long and pointer */
+
+DCbool     dcbArgBool    (DCArgs* p) { return ( dcbArgInt(p) == 0 ) ? 0 : 1; }
+DCchar     dcbArgChar    (DCArgs* p) { return (char)      dcbArgInt(p); }
+DCshort    dcbArgShort   (DCArgs* p) { return (short)     dcbArgInt(p); }
+DClong     dcbArgLong    (DCArgs* p) { return (long)      dcbArgInt(p); }
+DCpointer  dcbArgPointer (DCArgs* p) { return (DCpointer) dcbArgInt(p); }
+
+/* unsigned types */
+
+DCuint      dcbArgUInt     (DCArgs* p) { return (DCuint)      dcbArgInt(p); }
+DCuchar     dcbArgUChar    (DCArgs* p) { return (DCuchar)     dcbArgChar(p); }
+DCushort    dcbArgUShort   (DCArgs* p) { return (DCushort)    dcbArgShort(p); }
+DCulong     dcbArgULong    (DCArgs* p) { return (DCulong)     dcbArgLong(p); }
+DCulonglong dcbArgULongLong(DCArgs* p) { return (DCulonglong) dcbArgLongLong(p); }
+
+/* ---------------------------------------------------------------------------- */
+/* virtual tables: */
+
+/* cdecl calling convention */
+
+static int default_i32(DCArgs* args)
+{
+	return *args->stack_ptr++;
+}
+
+static long long default_i64(DCArgs* args)
+{
+	long long result = * (long long*) args->stack_ptr;
+	args->stack_ptr += 2;
+	return result;
+}
+
+static float default_f32(DCArgs* args)
+{
+	float result = * ( (float*) args->stack_ptr );
+	args->stack_ptr++;
+	return result;
+}
+
+static double default_f64(DCArgs* args)
+{
+	double result = * ( (double*) args->stack_ptr );
+	args->stack_ptr += 2;
+	return  result;
+}
+
+DCArgsVT dcArgsVT_default   = { default_i32, default_i64, default_f32, default_f64 };
+
+/* thiscall (microsoft) calling convention */
+
+static int this_i32(DCArgs* args)
+{
+	if(args->fast_data[0]) { /* ecx register = this pointer */
+		int thisArg = args->fast_data[0];
+		args->fast_data[0] = 0;
+		return thisArg;
+	}
+	return *args->stack_ptr++;
+}
+
+DCArgsVT dcArgsVT_this_ms = { this_i32, default_i64, default_f32, default_f64 };
+
+/* fastcall (microsoft) calling convention */
+
+static int fast_i32(DCArgs* args)
+{
+	if(args->fast_count < 2)
+		return args->fast_data[args->fast_count++];
+	else
+		return default_i32(args);
+}
+
+DCArgsVT dcArgsVT_fast_ms = { fast_i32, default_i64, default_f32, default_f64 };
+
+/* fastcall (gnu) calling convention */
+
+static long long fast_gnu_i64(DCArgs* args)
+{
+	args->fast_count += 2;
+	return default_i64(args);
+}
+
+DCArgsVT dcArgsVT_fast_gnu = { fast_i32, fast_gnu_i64, default_f32, default_f64 };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_args_x86.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,59 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_args_x86.h
+ Description: Callback's Arguments VM - Header for x86
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_ARGS_X86_H_
+#define DYNCALL_ARGS_X86_H_
+
+#include "dyncall_args.h"
+
+typedef struct
+{
+	DCint      (*i32)(DCArgs*);
+	DClonglong (*i64)(DCArgs*);
+	DCfloat    (*f32)(DCArgs*);
+	DCdouble   (*f64)(DCArgs*);
+} DCArgsVT;
+
+extern DCArgsVT dcArgsVT_default;
+extern DCArgsVT dcArgsVT_this_ms;
+extern DCArgsVT dcArgsVT_fast_ms;
+extern DCArgsVT dcArgsVT_fast_gnu;
+
+struct DCArgs
+{
+	/* callmode */
+	DCArgsVT* vt;
+
+	/* state */
+	int* stack_ptr;
+
+	/* fast data / 'this-ptr' info */
+	int  fast_data[2];
+	int  fast_count;
+};
+
+#endif /* DYNCALL_ARGS_X86_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,50 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback.c
+ Description: Callback - Implementation back-end selector
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "../dyncall/dyncall_macros.h"
+
+#if defined(DC__Arch_Intel_x86)
+#include "dyncall_callback_x86.c"
+#elif defined (DC__Arch_AMD64)
+#include "dyncall_callback_x64.c"
+#elif defined (DC__Arch_PPC32)
+#include "dyncall_callback_ppc32.c"
+#elif defined (DC__Arch_PPC64)
+#include "dyncall_callback_ppc64.c"
+#elif defined (DC__Arch_ARM_ARM)
+#include "dyncall_callback_arm32_arm.c"
+#elif defined (DC__Arch_ARM_THUMB)
+#include "dyncall_callback_arm32_thumb.c"
+#elif defined (DC__Arch_MIPS)
+#include "dyncall_callback_mips.c"
+#elif defined (DC__Arch_Sparc)
+#include "dyncall_callback_sparc32.c"
+#elif defined (DC__Arch_Sparcv9)
+#include "dyncall_callback_sparc64.c"
+#elif defined (DC__Arch_ARM64)
+#include "dyncall_callback_arm64.c"
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,53 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback.h
+ Description: Callback - Interface
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef DYNCALL_CALLBACK_H
+#define DYNCALL_CALLBACK_H
+
+#include "dyncall_args.h"
+#include "dyncall_signature.h"
+#include "dyncall_value.h"
+
+typedef struct DCCallback DCCallback;
+
+// TODO: return value is the type encoded as a signature char (character of the set [vBcCsSiIjJlLfd]).
+
+typedef char (DCCallbackHandler)(DCCallback* pcb, DCArgs* args, DCValue* result, void* userdata);
+
+#ifdef __cplusplus
+extern "C" {
+#endif 
+
+DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* funcptr, void* userdata);
+void        dcbInitCallback(DCCallback* pcb, const char* signature, DCCallbackHandler* handler, void* userdata);
+void        dcbFreeCallback(DCCallback* pcb);
+void*       dcbGetUserData (DCCallback* pcb);
+
+
+#ifdef __cplusplus
+}
+#endif 
+
+#endif /* DYNCALL_CALLBACK_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_arch.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,79 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_arch.S
+ Description: Callback Thunk - Implementation Back-end selector
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../dyncall/dyncall_macros.h"
+
+#if defined(DC__C_MSVC)
+#  if defined(DC__OS_Win32)
+#    include "dyncall_callback_x86_masm.asm"
+#  elif defined(DC__OS_Win64)
+#    include "dyncall_callback_x64_masm.asm"
+#  endif
+#elif defined(DC__OS_Plan9)
+#  if defined(DC__Arch_Intel_x86)
+#    include "dyncall_callback_x86_8a.s"
+#  else
+#    error Unsupported Architecture on Plan9.
+#  endif
+#elif defined(DC__OS_Darwin)
+#  if defined(DC__Arch_PPC32)
+#    include "dyncall_callback_ppc32_apple.s"
+#  elif defined(DC__Arch_ARM_ARM)
+#    include "dyncall_callback_arm32_arm_apple.s"
+#  elif defined(DC__Arch_ARM_THUMB)
+#    include "dyncall_callback_arm32_thumb_apple.s"
+#  elif defined(DC__Arch_AMD64)
+#    include "dyncall_callback_x64.S"
+#  elif defined(DC__Arch_Intel_x86)
+#    include "dyncall_callback_x86.S"
+#  elif defined(DC__Arch_ARM64)
+#    include "dyncall_callback_arm64.s"
+#  else // e.g. PowerPC G5, which is PPC64, etc.
+#    error Unsupported Architecture on Darwin/OS X.
+#  endif
+#else 
+#  if defined(DC__Arch_Intel_x86)
+#    include "dyncall_callback_x86.S"
+#  elif defined(DC__Arch_AMD64)
+#    include "dyncall_callback_x64.S"
+#  elif defined(DC__Arch_PPC32)
+#    include "dyncall_callback_ppc32.S"
+#  elif defined(DC__Arch_PPC64)
+#    include "dyncall_callback_ppc64.S"
+#  elif defined(DC__Arch_ARM_ARM)
+#    include "dyncall_callback_arm32_arm_gas.s"
+#  elif defined(DC__Arch_ARM_THUMB)
+#    include "dyncall_callback_arm32_thumb_gas.s"
+#  elif defined(DC__Arch_Sparc)
+#    include "dyncall_callback_sparc32.s"
+#  elif defined(DC__Arch_Sparcv9)
+#    include "dyncall_callback_sparc64.s"
+#  elif defined(DC__Arch_ARM64)
+#    include "dyncall_callback_arm64.s"
+#  endif
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_arm32_arm.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,64 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_arm32_arm.c
+ Description: Callback - Implementation for ARM32 (ARM mode)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_callback_arm32_arm.h"
+#include "dyncall_args_arm32_arm.h"
+
+#include "dyncall_alloc_wx.h"
+#include "dyncall_signature.h"
+
+extern void dcCallbackThunkEntry();
+
+void dcbInitCallback(DCCallback* pcb, const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  pcb->handler  = handler;
+  pcb->userdata = userdata;
+}
+
+
+DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  int err;
+  DCCallback* pcb;
+  err = dcAllocWX(sizeof(DCCallback), (void**)&pcb);
+  if(err || !pcb)
+    return 0;
+  dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
+  dcbInitCallback(pcb, signature, handler, userdata);
+  return pcb;
+}
+
+
+void dcbFreeCallback(DCCallback* pcb)
+{
+  dcFreeWX(pcb, sizeof(DCCallback));
+}
+
+void* dcbGetUserData(DCCallback* pcb)
+{
+  return pcb->userdata;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_arm32_arm.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,46 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_arm32_arm.h
+ Description: Callback - Header for ARM32 (ARM mode)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALLBACK_ARM32_ARM_H_
+#define DYNCALL_CALLBACK_ARM32_ARM_H_
+
+#include "dyncall_callback.h"
+
+#include "dyncall_thunk.h"
+#include "dyncall_args_arm32_arm.h"
+
+
+struct DCCallback
+{
+  DCThunk  	         thunk;    // offset 0
+  DCCallbackHandler* handler;  // offset 12
+  void*              userdata; // offset 16
+};
+
+
+#endif /* DYNCALL_CALLBACK_ARM32_ARM_H_ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_arm32_arm_apple.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,73 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_arm32_arm_apple.s
+ Description: Callback Thunk - Implementation for ARM32 (ARM mode) for Apple's as
+ License:
+
+   Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+.text
+.code 32	/* ARM mode */
+
+.globl _dcCallbackThunkEntry
+.align 4
+/* sizes */
+.set DCThunk_size   ,   8
+.set DCArgs_size    ,  24
+.set DCValue_size   ,   8
+
+/* struct DCCallback offsets and size */
+.set CTX_thunk      ,   0
+.set CTX_handler    ,  12
+.set CTX_userdata   ,  16
+.set DCCallback_size,  20
+
+
+/* Called by thunk - thunk stores pointer to DCCallback in r12 */
+_dcCallbackThunkEntry:
+
+	/* Prolog. This function never needs to spill inside its prolog, so just store the permanent registers. */
+	stmdb	r13, {r4-r11, r13, r14}	/* Permanent registers and stack pointer, etc... -> save area on stack (except counter). */
+	mov		r11, r13						/* Set frame pointer. */
+	sub		r13, r13, #40					/* Adjust stack pointer. */
+
+	/* Grab arguments. */
+	mov		r4, #0
+	stmdb	r13!, {r0-r4, r11}			/* Spill first 4 args to DCArgs, along with reg_count and (stack) pointer to remaining args. */
+
+	/* Prepare callback handler call. */
+	mov		r0, r12						/* Parameter 0 (r0) = DCCallback pointer (r12, pointer to thunk). */
+	mov		r1, r13						/* Parameter 1 (r1) = DCArgs pointer (r13, stack pointer). */
+	sub		r13, r13, #DCValue_size		/* Make room for return value. */
+	mov		r2, r13						/* Parameter 2 (r2) = results pointer. */
+	ldr		r3, [r12, #CTX_userdata]		/* Parameter 3 (r3) = userdata pointer. */
+
+	/* Call. */
+	ldr		r4, [r12, #CTX_handler]		/* Load callback handler pointer into r4. */
+	mov		r14, r15						/* Branch return address(r15) -> link register (r14) -- r15 always points to address of current + 2 instructions (= Epilog code). */ 
+	bx		r4								/* Call. */
+
+	/* Return value. */
+	ldmia	r13, {r0, r1}				/* Load return value in r0 and r1. */
+
+	/* Epilog. */
+	ldmdb	r11, {r4-r11, r13, r15}	/* Restore permanent registers (restore stack ptr and program counter).@@@db not needed since we rewrite r13? */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_arm32_arm_gas.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,73 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_arm32_arm_gas.s
+ Description: Callback Thunk - Implementation for ARM32 (ARM mode)
+ License:
+
+   Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+.text
+.code 32	/* ARM mode */
+
+.globl dcCallbackThunkEntry
+
+/* sizes */
+.set DCThunk_size   ,   8
+.set DCArgs_size    ,  24
+.set DCValue_size   ,   8
+
+/* struct DCCallback offsets and size */
+.set CTX_thunk      ,   0
+.set CTX_handler    ,  12
+.set CTX_userdata   ,  16
+.set DCCallback_size,  20
+
+
+/* Called by thunk - thunk stores pointer to DCCallback in r12 */
+dcCallbackThunkEntry:
+
+	/* Prolog. This function never needs to spill inside its prolog, so just store the permanent registers. */
+	stmdb	%r13, {%r4-%r11, %r13, %r14}	/* Permanent registers and stack pointer, etc... -> save area on stack (except counter). */
+	mov		%r11, %r13						/* Set frame pointer. */
+	sub		%r13, %r13, #40					/* Adjust stack pointer. */
+
+	/* Grab arguments. */
+	mov		%r4, #0
+	stmdb	%r13!, {%r0-%r4, %r11}			/* Spill first 4 args to DCArgs, along with reg_count and (stack) pointer to remaining args. */
+
+	/* Prepare callback handler call. */
+	mov		%r0, %r12						/* Parameter 0 (r0) = DCCallback pointer (r12, pointer to thunk). */
+	mov		%r1, %r13						/* Parameter 1 (r1) = DCArgs pointer (r13, stack pointer). */
+	sub		%r13, %r13, #DCValue_size		/* Make room for return value. */
+	mov		%r2, %r13						/* Parameter 2 (r2) = results pointer. */
+	ldr		%r3, [%r12, #CTX_userdata]		/* Parameter 3 (r3) = userdata pointer. */
+
+	/* Call. */
+	ldr		%r4, [%r12, #CTX_handler]		/* Load callback handler pointer into r4. */
+	mov		%r14, %r15						/* Branch return address(r15) -> link register (r14) -- r15 always points to address of current + 2 instructions (= Epilog code). */ 
+	bx		%r4								/* Call. */
+
+	/* Return value. */
+	ldmia	%r13, {%r0, %r1}				/* Load return value in r0 and r1. */
+
+	/* Epilog. */
+	ldmdb	%r11, {%r4-%r11, %r13, %r15}	/* Restore permanent registers (restore stack ptr and program counter).@@@db not needed since we rewrite r13? */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_arm32_thumb.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_arm32_thumb.c
+ Description: Callback - Implementation for ARM32 (THUMB mode)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_callback_arm32_thumb.h"
+#include "dyncall_callback_arm32_arm.c" /* Uses same code as ARM mode. */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_arm32_thumb.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,34 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_arm32_thumb.h
+ Description: Callback - Header for ARM32 (THUMB mode)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALLBACK_ARM32_THUMB_H_
+#define DYNCALL_CALLBACK_ARM32_THUMB_H_
+
+#include "dyncall_callback_arm32_arm.h" /* Uses same code as ARM mode. */
+
+#endif /* DYNCALL_CALLBACK_ARM32_THUMB_H_ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_arm32_thumb_apple.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,32 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_arm32_thumb_gas.s
+ Description: Callback Thunk - Implementation for ARM32 (THUMB mode)
+ License:
+
+   Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+/* We can use the ARM mode callback code here, because the thunk switches  */
+/* into ARM mode, the parameters passed use the same registers/stack spase */
+/* as the ARM mode, and the bx instruction switches back to THUMB mode, if */
+/* the function to be called has a "THUMB function address" (=address+1).  */
+.include "dyncall_callback_arm32_arm_apple.s"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_arm32_thumb_gas.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,32 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_arm32_thumb_gas.s
+ Description: Callback Thunk - Implementation for ARM32 (THUMB mode)
+ License:
+
+   Copyright (c) 2007-2013 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+/* We can use the ARM mode callback code here, because the thunk switches  */
+/* into ARM mode, the parameters passed use the same registers/stack space */
+/* as the ARM mode, and the bx instruction switches back to THUMB mode, if */
+/* the function to be called has a "THUMB function address" (=address+1).  */
+.include "dyncall_callback_arm32_arm_gas.s"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_arm64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,71 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_arm64.c
+ Description: Callback - Implementation for ARM64 / ARMv8 / AAPCS64
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>,
+                      Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "dyncall_callback.h"
+#include "dyncall_alloc_wx.h"
+#include "dyncall_thunk.h"
+
+extern void dcCallbackThunkEntry();
+
+struct DCCallback
+{
+                                //  off  size
+                                // ----|-----
+  DCThunk            thunk;	//   0     32
+  DCCallbackHandler* handler; 	//  32      8
+  void*              userdata;	//  40      8
+                                //
+                                //  size   48 
+                                // aligned 48 
+};
+
+void dcbInitCallback(DCCallback* pcb, const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  pcb->handler = handler;
+  pcb->userdata = userdata;
+}
+
+DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  int err;
+  DCCallback* pcb;
+  err = dcAllocWX(sizeof(DCCallback), (void**) &pcb);
+  if (err != 0) return 0;
+
+  dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
+  dcbInitCallback(pcb, signature, handler, userdata);
+  return pcb;
+}
+
+void dcbFreeCallback(DCCallback* pcb)
+{
+  dcFreeWX(pcb, sizeof(DCCallback));
+}
+
+void* dcbGetUserData(DCCallback* pcb)
+{
+  return pcb->userdata;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_arm64.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,111 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_arm64.s
+ Description: Callback Thunk - Implementation for ARM64 / ARMv8 / AAPCS64
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>,
+                      Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+// struct DCCallback
+//   type       off   size
+//   ---------|------|------
+//   DCThunk  |   0  |  32
+//   handler  |  32  |   8
+//   userdata |  40  |   8
+
+#include "../portasm/portasm-arm.S"
+
+.align 4
+GLOBAL_C(dcCallbackThunkEntry)
+ENTRY_C(dcCallbackThunkEntry)
+
+// input:
+//  x9: DCCallback* pcb
+//  x0..x7 ?? GP regs
+//  d0..d7 ?? FP/SIMD regs
+//  sp...  ?? arguments on stack
+//
+// locals:
+//   type       off   size
+//   ---------|------|------
+//   Frame        0     16
+//   DCArgs      16    168
+//   DCValue    184     16
+//
+//   size              200
+//   aligned           208
+//
+
+// locals:
+//    x10: sp
+//    x11: DCArgs* args
+
+	mov x10, sp
+	stp x29, x30, [sp, #-208 ]! 
+	mov x29, sp
+
+	add x11, x29 , #16
+
+// save integer registers
+
+	stp x0, x1, [x11, #0 ]
+	stp x2, x3, [x11, #16]
+	stp x4, x5, [x11, #32]
+        stp x6, x7, [x11, #48]
+
+	stp d0, d1, [x11, #64]
+	stp d2, d3, [x11, #80]
+     	stp d4, d5, [x11, #96]
+        stp d6, d7, [x11, #112]
+
+	eor x12, x12, x12
+	stp x10,x12,[x11, #128]		// sp=sp, i=0, f=0
+	
+	str x12,    [x11, #144]		// s=0, reserved=0
+          
+
+// call handler:
+//   args:
+//     x0: DCCallback* pcb
+//     x1: DCArgs*     args
+//     x2: DCValue*    result
+//     x3: void*       userdata
+
+	mov x0 , x9
+	add x1 , x29 , #16
+	add x2 , x29 , #184
+	ldr x3 , [x9 , #40]
+
+	ldr x11, [x9 , #32]
+	blr  x11
+
+	and w0, w0, #255
+	cmp w0, 'f'
+	b.eq .retf
+	cmp w0, 'd'
+	b.eq .retf
+	
+.reti:
+	ldr x0, [x29, #184]
+	b .ret
+.retf:
+	ldr d0, [x29, #184]
+.ret:
+	ldp x29, x30, [sp], #208
+	ret
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_mips.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,62 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_mips.c
+ Description: Callback - Implementation Header for MIPS
+ License:
+
+   Copyright (c) 2013-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_callback.h"
+#include "dyncall_callback_mips.h"
+
+void dcbInitCallback(DCCallback* pcb, const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  const char* ptr;
+  char ch;
+
+  pcb->handler  = handler;
+  pcb->userdata = userdata;
+}
+
+extern void dcCallbackThunkEntry();
+
+DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  DCCallback* pcb;
+  int err = dcAllocWX(sizeof(DCCallback), (void**)&pcb);
+  if (err != 0) return 0;
+
+  dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
+  dcbInitCallback(pcb, signature, handler, userdata);
+
+  return pcb;
+}
+
+void dcbFreeCallback(DCCallback* pcb)
+{
+  dcFreeWX(pcb, sizeof(DCCallback));
+}
+
+void* dcbGetUserData(DCCallback* pcb)
+{
+  return pcb->userdata;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_mips.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,43 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_mips.h
+ Description: Callback - Header for MIPS
+ License:
+
+   Copyright (c) 2013-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_CALLBACK_MIPS_H
+#define DYNCALL_CALLBACK_MIPS_H
+
+#include "dyncall_callback.h"
+
+#include "dyncall_thunk.h"
+#include "dyncall_args_mips.h"
+
+struct DCCallback
+{
+  DCThunk            thunk;         /* offset  0, size 20 */
+  DCCallbackHandler* handler;       /* offset 20, size  4 */
+  void*              userdata;      /* offset 24, size  4 */
+};
+
+#endif /* DYNCALL_CALLBACK_MIPS_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_ppc32.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,144 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_ppc32.S
+ Description: Callback Thunk Entry for PowerPC 32-bit System V Big-Endian ABI
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "../portasm/portasm-ppc.S"
+
+	.machine ppc
+	.text
+	.align 2
+
+/* Struct DCCallback */
+
+DCB_THUNK 	= 0
+DCB_HANDLER     = 24
+DCB_CLEANUP     = 28
+DCB_USERDATA    = 32
+
+/* Struct DCArgs */
+
+ARGS_IREGS = 0
+ARGS_FREGS = ARGS_IREGS + 4*8
+ARGS_SP    = ARGS_FREGS + 8*13
+ARGS_ICNT  = ARGS_SP    + 4
+ARGS_FCNT  = ARGS_ICNT  + 4
+ARGS_SIZE  = ARGS_FCNT  + 4
+
+/* Struct DCValue  */
+
+RESULT_SIZE = 8
+
+/* Stack Offsets: */
+
+SP_PREV   = 0
+SP_LR     = (SP_PREV  + 4)
+SP_PAR    = SP_LR + 4
+PAR_SZ    = 0
+SP_ARGS   = SP_PAR    + PAR_SZ
+SP_IREGS  = SP_ARGS   + ARGS_IREGS
+SP_FREGS  = SP_ARGS   + ARGS_FREGS
+SP_SP     = SP_ARGS   + ARGS_SP
+SP_ICNT   = SP_ARGS   + ARGS_ICNT
+SP_FCNT   = SP_ARGS   + ARGS_FCNT
+SP_RESULT = SP_ARGS   + ARGS_SIZE
+SP_SIZE   = SP_RESULT + RESULT_SIZE
+
+#define ALIGN(M,X) ( M+(X-1) & (-X) )
+
+FRAMESIZE = ALIGN(SP_SIZE,16)
+
+GLOBAL_C(dcCallbackThunkEntry)
+ENTRY_C(dcCallbackThunkEntry)
+
+/* --------------------------------------------------------------------------
+
+Input:
+	r1    	Stack Pointer            
+	r3-r10	Integer Arguments        
+	f1-f8 	Floating-point Arguments 
+	r11 	Thunk Pointer            
+
+*/
+	
+	/* prolog */
+
+	mflr	r0			
+	stw	r0,      SP_LR(r1)	/* store return address */
+	addi	r12, r1, SP_PAR         /* temporary r12: parameter area on callers stack frame */
+	stwu    r1, -FRAMESIZE(r1)
+	
+	stw	r3, SP_IREGS + 0*4(r1)	/* spill 8 integer parameter registers */
+	stw	r4, SP_IREGS + 1*4(r1)
+	stw	r5, SP_IREGS + 2*4(r1)
+	stw     r6, SP_IREGS + 3*4(r1)
+	stw     r7, SP_IREGS + 4*4(r1)
+	stw     r8, SP_IREGS + 5*4(r1)
+	stw     r9, SP_IREGS + 6*4(r1)
+	stw     r10,SP_IREGS + 7*4(r1)
+	
+        stfd    f1, SP_FREGS + 0*8(r1)	/* spill 8 (of 13) float parameter registers */
+	stfd    f2, SP_FREGS + 1*8(r1)
+	stfd    f3, SP_FREGS + 2*8(r1)
+	stfd    f4, SP_FREGS + 3*8(r1)
+	stfd    f5, SP_FREGS + 4*8(r1)
+	stfd    f6, SP_FREGS + 5*8(r1)
+	stfd    f7, SP_FREGS + 6*8(r1)
+	stfd    f8, SP_FREGS + 7*8(r1)
+
+	stw	r12, SP_SP(r1)		/* init stack pointer */
+	xor	r0, r0, r0		/* init register counters */
+	stw	r0, SP_ICNT(r1)
+	stw	r0, SP_FCNT(r1)
+	stw     r0, SP_RESULT(r1)	/* init result object */
+        stw     r0, SP_RESULT + 4(r1)
+					/* invoke callback handler */
+	mr	r3, r11	                /* arg 1: DCCallback* pcb (r11 is thunk pointer) */
+	addi	r4, r1, SP_ARGS		/* arg 2: DCArgs* args 		*/
+	addi	r5, r1, SP_RESULT	/* arg 3: DCValue* result	*/
+	lwz	r6, DCB_USERDATA(r11)   /* arg 4: void* userdata 	*/
+
+					/* branch-and-link to DCCallback.handler */
+	lwz	r12,  DCB_HANDLER(r11)
+	mtctr	r12
+	bctrl
+					/* check result type */	
+	cmpi	cr0, r3, 'f
+	beq	.f32
+	cmpi	cr0, r3, 'd
+	beq	.f64
+.i64:
+	lwz    r3, SP_RESULT     (r1)
+	lwz    r4, SP_RESULT + 4 (r1) 
+.end:
+	lwz    r1, SP_PREV(r1)	/* restore stack pointer */
+	lwz    r0, SP_LR(r1)	/* load link register with return address */
+	mtlr   r0
+	blr			/* branch back to link register */
+.f32:	
+	lfs	f1, SP_RESULT(r1)
+	b	.end
+.f64:
+	lfd	f1, SP_RESULT(r1)
+	b	.end
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_ppc32.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,61 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_ppc32.c
+ Description: Callback - Implementation Header for ppc32
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_callback.h"
+#include "dyncall_callback_ppc32.h"
+
+void dcbInitCallback(DCCallback* pcb, const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  const char* ptr;
+  char ch;
+
+  pcb->handler  = handler;
+  pcb->userdata = userdata;
+}
+
+extern void dcCallbackThunkEntry();
+
+DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  DCCallback* pcb;
+  int err = dcAllocWX(sizeof(DCCallback), (void**) &pcb);
+  if (err != 0) return 0;
+
+  dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
+  dcbInitCallback(pcb, signature, handler, userdata);
+
+  return pcb;
+}
+
+void dcbFreeCallback(DCCallback* pcb)
+{
+  dcFreeWX(pcb, sizeof(DCCallback));
+}
+
+void* dcbGetUserData(DCCallback* pcb)
+{
+  return pcb->userdata;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_ppc32.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,43 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_ppc32.h
+ Description: Callback - Header for ppc32
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef DYNCALL_CALLBACK_PPC32_H
+#define DYNCALL_CALLBACK_PPC32_H
+
+#include "dyncall_callback.h"
+
+#include "dyncall_thunk.h"
+#include "dyncall_args_ppc32.h"
+
+struct DCCallback
+{
+  DCThunk            thunk;         /* offset  0, size 24 */
+  DCCallbackHandler* handler;       /* offset 24, size  4 */
+  size_t             stack_cleanup; /* offset 28, size  4 */
+  void*              userdata;      /* offset 32, size  4 */
+};                                  /*      total size 36 */                                  
+
+#endif /* DYNCALL_CALLBACK_PPC32_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_ppc32_apple.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,181 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_ppc32_apple.s
+ Description: Callback Thunk - PowerPC 32-bit System V ABI
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+	.machine ppc
+	.text
+	.align 2
+
+/* Callback Thunk Entry code for PowerPC 32-bit Darwin/Apple Mac OS X. */
+
+
+/* Stack Frame Layout: 
+	
+       204 DCValue ( )
+	56 DCArgs (32+104+4+8 = 148)
+	24 Parameter area ( 4*8 = 32 )
+	0  Linkage area   ( 24 )
+
+
+*/
+
+/* Constants. */
+INT_REGS	= 8
+FLOAT_REGS	= 13
+SIZEOF_INT      = 4
+SIZEOF_DOUBLE	= 8
+
+	
+/* Linkage area. */
+LINK_SP 	= 0
+LINK_CR    	= 4
+LINK_LR    	= 8
+LINK_OFFSET	= 0
+LINK_SIZE	= 24
+/* Parameter area. */
+PAR_OFFSET	= LINK_SIZE
+PAR_SIZE	= 32
+/* local struct DCArgs */
+ARGS_OFFSET	= (PAR_OFFSET+PAR_SIZE)
+ARGS_SIZE 	= (SIZEOF_INT*INT_REGS)+(SIZEOF_DOUBLE*FLOAT_REGS) /* = 136 */
+/* local struct DCValue */
+RESULT_OFFSET	= (ARGS_OFFSET+ARGS_SIZE)
+RESULT_SIZE	= 16
+/* additional locals (reg 30/31) */
+LOCALS_OFFSET   = (RESULT_OFFSET+RESULT_SIZE)
+LOCALS_SIZE     = 2*SIZEOF_INT
+/* total */
+FRAME_SIZE	= ( (LOCALS_OFFSET+LOCALS_SIZE)+15 & (-16) )
+
+/* struct DCCallback */
+DCB_THUNK 	= 0
+DCB_HANDLER	= 24
+DCB_STACKCLEAN	= 28
+DCB_USERDATA	= 32
+
+/* struct DCArgs */
+DCA_IARRAY 	= 0
+DCA_FARRAY	= SIZEOF_INT*INT_REGS
+DCA_SP          = DCA_FARRAY + SIZEOF_DOUBLE*FLOAT_REGS
+DCA_ICOUNT	= DCA_SP + 4
+DCA_FCOUNT	= DCA_ICOUNT + 4
+
+/* struct DCValue */
+DCV_INT		= 0
+DCV_FLOAT	= 0 
+DCV_DOUBLE	= 0
+DCV_LONG_HI32	= 0
+DCV_LONG_LO32	= 4
+DCV_SIZE	= 8
+
+iregfile	= ARGS_OFFSET+DCA_IARRAY
+fregfile	= ARGS_OFFSET+DCA_FARRAY
+save_sp		= ARGS_OFFSET+DCA_SP
+icount		= ARGS_OFFSET+DCA_ICOUNT
+fcount		= ARGS_OFFSET+DCA_FCOUNT
+	.globl _dcCallbackThunkEntry
+
+	/* 
+	  Thunk entry:
+	  R2 = DCCallback*
+	*/
+_dcCallbackThunkEntry:
+
+	mflr	r0			
+	stw	r0,  8(r1)		/* store return address */
+	/* stmw  r30, -8(r1) */	/* store preserved registers (r30/r31) */
+	addi	r12, r1, PAR_OFFSET	/* temporary r12 = parameter area on callers stack frame */
+	stwu	r1, -FRAME_SIZE(r1)	/* save callers stack pointer and make new stack frame. */
+	stw	r3, iregfile+0*4(r1)	/* spill 8 integer parameter registers */
+	stw	r4, iregfile+1*4(r1)
+	stw	r5, iregfile+2*4(r1)
+	stw     r6, iregfile+3*4(r1)
+	stw     r7, iregfile+4*4(r1)
+	stw     r8, iregfile+5*4(r1)
+	stw     r9, iregfile+6*4(r1)
+	stw     r10,iregfile+7*4(r1)
+	stfd    f1, fregfile+ 0*8(r1)	/* spill 13 float parameter registers */
+	stfd    f2, fregfile+ 1*8(r1)
+	stfd    f3, fregfile+ 2*8(r1)
+	stfd    f4, fregfile+ 3*8(r1)
+	stfd    f5, fregfile+ 4*8(r1)
+	stfd    f6, fregfile+ 5*8(r1)
+	stfd    f7, fregfile+ 6*8(r1)
+	stfd    f8, fregfile+ 7*8(r1)
+	stfd    f9, fregfile+ 8*8(r1)
+	stfd    f10,fregfile+ 9*8(r1)
+	stfd    f11,fregfile+10*8(r1)
+	stfd    f12,fregfile+11*8(r1)
+	stfd    f13,fregfile+12*8(r1)
+					/* initialize struct DCCallback */
+	stw	r12,save_sp(r1)		/* init stack pointer */
+	xor	r0, r0, r0		/* init register counters */
+	stw	r0, icount(r1)
+	stw	r0, fcount(r1)
+					/* invoke callback handler */
+	mr	r3, r2			/* arg 1: DCCallback* pcb 	*/
+	addi	r4, r1, ARGS_OFFSET	/* arg 2: DCArgs* args 		*/
+	addi	r5, r1, RESULT_OFFSET	/* arg 3: DCValue* result	*/
+	lwz	r6, DCB_USERDATA(r2)    /* arg 4: void* userdata 	*/
+
+					/* branch-and-link to DCCallback.handler */
+	lwz	r12,  DCB_HANDLER(r2)
+	mtctr	r12
+	bctrl
+	addi	r0, r1, RESULT_OFFSET	/* r0 = DCValue* */
+					/* switch on base result type */	
+	cmpi	cr0, r3, 'B
+	beq	.i32
+	cmpi	cr0, r3, 'i
+	beq	.i32 
+	cmpi	cr0, r3, 'l
+	beq	.i64
+	cmpi	cr0, r3, 'f
+	beq	.f32
+	cmpi	cr0, r3, 'd
+	beq	.f64
+	cmpi	cr0, r3, 'p
+	beq	.i32
+.void:				/* ignore result (void call) */
+	b	.end
+.i32:				/* result is integer <= 32-bit result */
+	lwz	r3, RESULT_OFFSET + DCV_INT(r1)	
+	b	.end
+.f32:				/* result is C float result */
+	lfs	f1, RESULT_OFFSET + DCV_FLOAT(r1)
+	b	.end
+.f64:
+	lfd	f1, RESULT_OFFSET + DCV_FLOAT(r1)
+	b	.end
+.i64:				/* result is C double result */
+	lwz    r3, RESULT_OFFSET + DCV_LONG_HI32(r1)
+	lwz    r4, RESULT_OFFSET + DCV_LONG_LO32(r1)
+	b .end
+.end:
+	lwz    r1,  0(r1)	/* restore stack pointer */
+	/* lmw   r30, -8(r1)	*/  /* restore preserved registers */
+	lwz    r0,  8(r1)	/* load link register with return address */
+	mtlr   r0
+	blr			/* branch back to link register */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_ppc64.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,215 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_ppc64.S
+ Description: Callback Thunk - Implementation for PowerPC 64-bit
+ License:
+
+   Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "../portasm/portasm-ppc.S"
+
+/* Callback Thunk Entry code for PowerPC 64-bit. */
+
+/* Stack Frame Layout: 
+
+	296 DCValue ( 8 )
+	112 DCArgs ( 64+104+8+4+4 = 184 )
+	 48 Parameter area ( 8*8 = 64 )
+	  0 Linkage area   ( 48 )
+
+
+*/
+
+/* Constants. */
+INT_REGS    = 8
+FLOAT_REGS  = 13
+SIZEOF_GPR  = 8
+SIZEOF_FPR  = 8
+
+/* Linkage area. */
+LINK_SP     = 0
+LINK_CR     = 8
+LINK_LR     = 16
+LINK_OFFSET = 0
+#if DC__ABI_PPC64_ELF_V == 2
+LINK_TOC    = 24
+LINK_SIZE   = 32
+#else
+LINK_TOC    = 40
+LINK_SIZE   = 48
+#endif
+/* Parameter area. */
+PAR_OFFSET = LINK_SIZE
+#if DC__ABI_PPC64_ELF_V == 2
+PAR_SIZE = 0
+#else
+PAR_SIZE = 64
+#endif 
+/* local struct DCArgs */
+ARGS_OFFSET = (PAR_OFFSET+PAR_SIZE)
+ARGS_SIZE   = (SIZEOF_GPR*INT_REGS)+(SIZEOF_FPR*FLOAT_REGS) + 8 + 4 * 4 
+/* local struct DCValue */
+RESULT_OFFSET = (ARGS_OFFSET+ARGS_SIZE)
+RESULT_SIZE   = 8
+/* additional locals (reg 30/31) */
+LOCALS_OFFSET = (RESULT_OFFSET+RESULT_SIZE)
+LOCALS_SIZE   = 2*SIZEOF_GPR
+/* total */
+FRAME_SIZE = ( (LOCALS_OFFSET+LOCALS_SIZE)+15 & (-16) )
+
+/* struct DCCallback */
+#if DC__ABI_PPC64_ELF_V == 2
+DCB_THUNK      = 0
+DCB_HANDLER    = 48
+DCB_STACKCLEAN = 56
+DCB_USERDATA   = 64
+#else
+DCB_THUNK      = 0
+DCB_HANDLER    = 64
+DCB_STACKCLEAN = 72
+DCB_USERDATA   = 80
+#endif
+
+/* struct DCArgs */
+DCA_IARRAY = 0
+DCA_FARRAY = SIZEOF_GPR*INT_REGS
+DCA_SP     = DCA_FARRAY + SIZEOF_FPR*FLOAT_REGS
+DCA_ICOUNT = DCA_SP + 8
+DCA_FCOUNT = DCA_ICOUNT + 4
+
+/* struct DCValue */
+DCV_INT   = 0
+DCV_FLOAT = 0
+DCV_SIZE  = 8
+
+iregfile = ARGS_OFFSET+DCA_IARRAY
+fregfile = ARGS_OFFSET+DCA_FARRAY
+save_sp  = ARGS_OFFSET+DCA_SP
+icount   = ARGS_OFFSET+DCA_ICOUNT
+fcount   = ARGS_OFFSET+DCA_FCOUNT
+
+/* 
+  Thunk entry:
+  R2 = DCCallback*
+*/
+.text
+	.global dcCallbackThunkEntry
+	.type dcCallbackThunkEntry, @function
+#if DC__ABI_PPC64_ELF_V != 2
+	.section .opd, "aw"
+	.align 3
+#endif
+
+dcCallbackThunkEntry:
+#if DC__ABI_PPC64_ELF_V != 2
+	.quad .dcCallbackThunkEntry, .TOC.@tocbase, 0
+	.previous
+	.global .dcCallbackThunkEntry
+
+.dcCallbackThunkEntry:
+#endif
+	mflr    r0
+	std     r0,  16(r1)           /* store return address */
+	std     r31, -8(r1)           /* store preserved registers (r31) */
+	addi    r12, r1, PAR_OFFSET   /* temporary r12 = parameter area on callers stack frame */
+	stdu    r1, -FRAME_SIZE(r1)   /* save callers stack pointer and make new stack frame. */
+
+	std     r3, iregfile+0*8(r1)  /* spill 8 integer parameter registers */
+	std     r4, iregfile+1*8(r1)
+	std     r5, iregfile+2*8(r1)
+	std     r6, iregfile+3*8(r1)
+	std     r7, iregfile+4*8(r1)
+	std     r8, iregfile+5*8(r1)
+	std     r9, iregfile+6*8(r1)
+	std     r10,iregfile+7*8(r1)
+	stfd    f1, fregfile+ 0*8(r1) /* spill 13 float parameter registers */
+	stfd    f2, fregfile+ 1*8(r1)
+	stfd    f3, fregfile+ 2*8(r1)
+	stfd    f4, fregfile+ 3*8(r1)
+	stfd    f5, fregfile+ 4*8(r1)
+	stfd    f6, fregfile+ 5*8(r1)
+	stfd    f7, fregfile+ 6*8(r1)
+	stfd    f8, fregfile+ 7*8(r1)
+	stfd    f9, fregfile+ 8*8(r1)
+	stfd    f10,fregfile+ 9*8(r1)
+	stfd    f11,fregfile+10*8(r1)
+	stfd    f12,fregfile+11*8(r1)
+	stfd    f13,fregfile+12*8(r1)
+	                        /* initialize struct DCCallback */
+	std     r12,save_sp(r1) /* init stack pointer */
+	xor     r0, r0, r0      /* init register counters */
+	std     r0, icount(r1)
+	std     r0, fcount(r1)
+	std     r0, RESULT_OFFSET(r1)
+	                               /* invoke callback handler */
+	mr      r3, r11                /* arg 1: DCCallback* pcb  */
+	addi    r4, r1, ARGS_OFFSET    /* arg 2: DCArgs* args     */
+	addi    r5, r1, RESULT_OFFSET  /* arg 3: DCValue* result  */
+	ld      r6, DCB_USERDATA(r11)  /* arg 4: void* userdata   */
+
+	/* branch-and-link to DCCallback.handler */
+	ld      r12,  DCB_HANDLER(r11)
+	std     r2, LINK_TOC(r1)
+#if DC__ABI_PPC64_ELF_V != 2
+	ld      r2, 8(r12)
+	ld      r0, 0(r12)
+	mtctr   r0
+#else
+	mtctr   r12
+#endif
+	bctrl
+
+	addi    r0, r1, RESULT_OFFSET /* r0 = DCValue* */
+	                              /* switch on base result type */
+	cmpi    cr0, r3, 'B
+	beq     .i64
+	cmpi    cr0, r3, 'i
+	beq     .i64
+	cmpi    cr0, r3, 'c
+	beq     .i64
+	cmpi    cr0, r3, 's
+	beq     .i64
+	cmpi    cr0, r3, 'l
+	beq     .i64
+	cmpi    cr0, r3, 'f
+	beq     .f32
+	cmpi    cr0, r3, 'd
+	beq     .f64
+	cmpi    cr0, r3, 'p
+	beq     .i64
+.void: /* ignore result (void call) */
+	b       .end
+.i64:  /* result is 64-bit long long result */
+	ld       r3, RESULT_OFFSET + DCV_INT(r1)
+	b       .end
+.f32:  /* result is C float result */
+	lfs       f1, RESULT_OFFSET + DCV_FLOAT(r1)
+	b       .end
+.f64:  /* result is C double result */
+	lfd       f1, RESULT_OFFSET + DCV_FLOAT(r1)
+	b       .end
+.end:
+
+	ld     r2,  LINK_TOC(r1)
+	ld     r1,  0(r1)  /* restore stack pointer */
+	ld     r31, -8(r1) /* restore preserved registers */
+	ld     r0,  16(r1) /* load link register with return address */
+	mtlr   r0
+	blr                /* branch back to link register */
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_ppc64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,60 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_ppc64.c
+ Description: Callback - Implementation Header for ppc64
+ License:
+
+   Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_callback.h"
+#include "dyncall_callback_ppc64.h"
+
+void dcbInitCallback(DCCallback* pcb, const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  const char* ptr;
+  char ch;
+
+  pcb->handler  = handler;
+  pcb->userdata = userdata;
+}
+
+extern void dcCallbackThunkEntry();
+
+DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  DCCallback* pcb;
+  int err = dcAllocWX(sizeof(DCCallback), (void**) &pcb);
+  if (err != 0) return 0;
+
+  dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
+  dcbInitCallback(pcb, signature, handler, userdata);
+
+  return pcb;
+}
+
+void dcbFreeCallback(DCCallback* pcb)
+{
+  dcFreeWX(pcb, sizeof(DCCallback));
+}
+
+void* dcbGetUserData(DCCallback* pcb)
+{
+  return pcb->userdata;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_ppc64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,56 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_ppc64.h
+ Description: Callback - Header for ppc64
+ License:
+
+   Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef DYNCALL_CALLBACK_PPC64_H
+#define DYNCALL_CALLBACK_PPC64_H
+
+#include "dyncall_callback.h"
+
+#include "dyncall_thunk.h"
+#include "dyncall_args_ppc64.h"
+
+/*
+  ELF v2
+  thunk           : offset 0,  size 48
+  handler         : offset 48, size  8
+  stack_cleanup   : offset 56, size  8
+  userdata        : offset 64, size  8
+
+  ELF v1
+  thunk           : offset 0,  size 64
+  handler         : offset 64, size  8
+  stack_cleanup   : offset 72, size  8
+  userdata        : offset 80, size  8
+*/
+
+struct DCCallback
+{
+  DCThunk            thunk;
+  DCCallbackHandler* handler;
+  size_t             stack_cleanup;
+  void*              userdata;
+};
+
+#endif /* DYNCALL_CALLBACK_PPC64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_sparc32.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,58 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_sparc32.c
+ Description: Callback - Implementation for sparc32 (TODO: not implemented yet)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_callback.h"
+#include "dyncall_callback_sparc32.h"
+
+#include "dyncall_alloc_wx.h"
+
+void dcbInitCallback(DCCallback* pcb, const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+}
+
+extern void dcCallbackThunkEntry();
+
+DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  DCCallback* pcb;
+  int err = dcAllocWX(sizeof(DCCallback), (void**) &pcb);
+  if (err != 0) return 0;
+
+  dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
+  dcbInitCallback(pcb, signature, handler, userdata);
+
+  return pcb;
+}
+
+void dcbFreeCallback(DCCallback* pcb)
+{
+  dcFreeWX(pcb, sizeof(DCCallback));
+}
+
+void* dcbGetUserData(DCCallback* pcb)
+{
+  return pcb->userdata;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_sparc32.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,44 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_sparc32.h
+ Description: Callback - Header for sparc32
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_CALLBACK_SPARC32_H
+#define DYNCALL_CALLBACK_SPARC32_H
+
+#include "dyncall_callback.h"
+
+#include "dyncall_thunk.h"
+#include "dyncall_args_sparc32.h"
+
+struct DCCallback
+{
+  DCThunk            thunk;         /* offset  0, size ?? */
+  DCCallbackHandler* handler;       /* offset ??, size  4 */
+  size_t             stack_cleanup; /* offset ??, size  4 */
+  void*              userdata;      /* offset ??, size  4 */
+};
+
+#endif /* DYNCALL_CALLBACK_SPARC32_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_sparc32.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_sparc32.s
+ Description: Callback Thunk - Implementation for Sparc 32-bit
+ License:
+
+   Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+	.globl dcCallbackThunkEntry
+dcCallbackThunkEntry:
+        jmpl %i7 + 8, %g0			/* Return from proc. */
+	 nop
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_sparc64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,58 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_sparc64.c
+ Description: Callback - Implementation for sparc64 (TODO: not implemented yet)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_callback.h"
+#include "dyncall_callback_sparc32.h"
+
+#include "dyncall_alloc_wx.h"
+
+void dcbInitCallback(DCCallback* pcb, const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+}
+
+extern void dcCallbackThunkEntry();
+
+DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  DCCallback* pcb;
+  int err = dcAllocWX(sizeof(DCCallback), (void**) &pcb);
+  if (err != 0) return 0;
+
+  dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
+  dcbInitCallback(pcb, signature, handler, userdata);
+
+  return pcb;
+}
+
+void dcbFreeCallback(DCCallback* pcb)
+{
+  dcFreeWX(pcb, sizeof(DCCallback));
+}
+
+void* dcbGetUserData(DCCallback* pcb)
+{
+  return pcb->userdata;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_sparc64.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_sparc64.s
+ Description: Callback Thunk - Implementation for Sparc 64-bit
+ License:
+
+   Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+	.globl dcCallbackThunkEntry
+dcCallbackThunkEntry:
+        jmpl %i7 + 8, %g0			/* Return from proc. */
+	 nop
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_x64.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,180 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_x64.S
+ Description: Callback Thunk entry for x64 (portasm version)
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../portasm/portasm-x64-att.S"
+
+/* structure sizes */
+
+SET(DCThunk_size,24)
+SET(DCArgs_size_win64,80)
+SET(DCArgs_size_sysv,128)
+SET(DCValue_size,8)
+
+/* frame local variable offsets relative to %rbp*/
+
+SET(FRAME_arg0_win64,48)
+SET(FRAME_arg0_sysv,16)
+SET(FRAME_return,8)
+SET(FRAME_parent,0)
+SET(FRAME_DCArgs_sysv,-128)
+SET(FRAME_DCValue_sysv,-136)
+SET(FRAME_DCArgs_win64,-80)
+SET(FRAME_DCValue_win64,-80)
+
+/* struct DCCallback */
+
+SET(CTX_thunk,0)
+SET(CTX_handler,24)
+SET(CTX_userdata,32)
+SET(DCCallback_size,40)
+
+/* character constants */
+
+#define ASCII_f 102
+#define ASCII_d 100
+
+GLOBAL(dcCallback_x64_sysv)
+BEGIN_PROC(dcCallback_x64_sysv)
+	
+	PUSH(RBP)
+	MOV(RSP,RBP)
+
+	/* initialize DCArgs */
+
+	/* float parameters (8 registers spill to DCArgs) */
+
+	SUB(LIT(8*8),RSP)	
+
+	MOVSD(XMM7, QWORD(RSP,8*7))		/* struct offset 120: float parameter 7 */
+	MOVSD(XMM6, QWORD(RSP,8*6))		/* struct offset 112: float parameter 6 */
+	MOVSD(XMM5, QWORD(RSP,8*5))		/* struct offset 104: float parameter 5 */
+	MOVSD(XMM4, QWORD(RSP,8*4))		/* struct offset  96: float parameter 4 */
+	MOVSD(XMM3, QWORD(RSP,8*3))		/* struct offset  88: float parameter 3 */
+	MOVSD(XMM2, QWORD(RSP,8*2))		/* struct offset  80: float parameter 2 */
+	MOVSD(XMM1, QWORD(RSP,8*1))		/* struct offset  72: float parameter 1 */
+	MOVSD(XMM0, QWORD(RSP,8*0))		/* struct offset  64: float parameter 0 */
+
+	/* integer parameters (6 registers spill to DCArgs) */
+
+	PUSH(R9)				/* struct offset 56: parameter 5 */
+	PUSH(R8)				/* struct offset 48: parameter 4 */
+	PUSH(RCX)				/* struct offset 40: parameter 3 */
+	PUSH(RDX)				/* struct offset 32: parameter 2 */
+	PUSH(RSI)				/* struct offset 24: parameter 1 */
+	PUSH(RDI)				/* struct offset 16: parameter 0 */
+	
+	/* register counts for integer/pointer and float regs */
+
+	PUSH(LIT(0))				/* struct offset 12: fcount */
+						/* struct offset  8: icount */
+
+	LEA(QWORD(RBP,FRAME_arg0_sysv),RDX)		/* struct offset  0: stack pointer */
+	PUSH(RDX)
+
+	MOV(RSP,RSI)				/* arg 1 RSI : DCArgs* */
+	
+	/* initialize DCValue */
+
+	PUSH(LIT(0))				/* struct offset 0: return value (max long long) */
+
+	/* call handler( *ctx, *args, *value, *userdata) */
+
+	MOV(RAX,RDI)				/* arg 0 RDI : DCCallback* (RAX) */
+	MOV(QWORD(RDI,CTX_userdata),RCX)	/* arg 3 RCX : userdata* */
+	MOV(RSP,RDX)				/* arg 2 RDX : DCValue*  */
+	PUSH(LIT(0))				/* align to 16 bytes */
+	CALL_REG(QWORD(RAX,CTX_handler))
+
+	/* pass return type via registers, handle ints and floats */
+	
+	MOV(QWORD(RBP,FRAME_DCValue_sysv),RAX)
+	MOVD(RAX,XMM0)
+
+	MOV(RBP,RSP)
+	POP(RBP)
+	RET()
+
+END_PROC(dcCallback_x64_sysv)
+
+GLOBAL(dcCallback_x64_win64)
+BEGIN_PROC(dcCallback_x64_win64)
+	
+	PUSH(RBP)
+	MOV(RSP,RBP)
+
+	/* initialize DCArgs */
+
+	/* float parameters (4 registers spill to DCArgs) */
+
+	SUB(LIT(4*8),RSP)	
+
+	MOVSD(XMM3, QWORD(RSP,8*3))		/* struct offset  72: float parameter 3 */
+	MOVSD(XMM2, QWORD(RSP,8*2))		/* struct offset  64: float parameter 2 */
+	MOVSD(XMM1, QWORD(RSP,8*1))		/* struct offset  56: float parameter 1 */
+	MOVSD(XMM0, QWORD(RSP,8*0))		/* struct offset  48: float parameter 0 */
+
+	/* integer parameters (4 registers spill to DCArgs) */
+
+	PUSH(R9)				/* struct offset 40: parameter 3 */
+	PUSH(R8)				/* struct offset 32: parameter 2 */
+	PUSH(RDX)				/* struct offset 24: parameter 1 */
+	PUSH(RCX)				/* struct offset 16: parameter 0 */
+	
+	/* register counts for integer/pointer and float regs */
+
+	PUSH(LIT(0))				/* struct offset 12: fcount */
+						/* struct offset  8: icount */
+
+	LEA(QWORD(RBP,FRAME_arg0_win64),RDX)		/* struct offset  0: stack pointer */
+	PUSH(RDX)
+
+	MOV(RSP,RDX)				/* arg 1 RDX : DCArgs* */
+	
+	/* initialize DCValue */
+
+	// PUSHQ(LIT(0))				/* struct offset 0: return value (max long long) */
+
+	/* call handler( *ctx, *args, *value, *userdata) */
+
+	MOV(RAX,RCX)				/* arg 0 RCX : DCCallback* (RAX) */
+	MOV(QWORD(RAX,CTX_userdata),R9)	/* arg 3 R9  : userdata* */
+	MOV(RSP,R8)				/* arg 2 R8  : DCValue*  */
+	SUB(LIT(4*8),RSP)                      /* make room for spill area and call */
+	CALL_REG(QWORD(RAX,CTX_handler))
+
+	/* pass return type via registers, handle ints and floats */
+	
+	MOV(QWORD(RBP,FRAME_DCValue_win64),RAX)
+	MOVD(RAX,XMM0)
+
+	MOV(RBP,RSP)
+	POP(RBP)
+	RET()
+
+END_PROC(dcCallback_x64_win64)	
+
+END_ASM
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_x64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,70 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_x64.c
+ Description: Callback - Implementation for x64
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_callback_x64.h"
+#include "dyncall_args_x64.h"
+#include "dyncall_alloc_wx.h"
+
+
+/* Callback symbol. */
+extern void dcCallback_x64_sysv();
+extern void dcCallback_x64_win64();
+
+
+void dcbInitCallback(DCCallback* pcb, const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  pcb->handler  = handler;
+  pcb->userdata = userdata;
+}
+
+
+DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  int err;
+  DCCallback* pcb;
+  err = dcAllocWX(sizeof(DCCallback), (void**) &pcb);
+  if (err != 0) return 0;
+
+#if defined (DC__OS_Win64)
+  dcbInitThunk(&pcb->thunk, dcCallback_x64_win64); 
+#else
+  dcbInitThunk(&pcb->thunk, dcCallback_x64_sysv); 
+#endif
+  dcbInitCallback(pcb, signature, handler, userdata);
+  return pcb;
+}
+
+
+void dcbFreeCallback(DCCallback* pcb)
+{
+  dcFreeWX(pcb, sizeof(DCCallback));
+}
+
+void* dcbGetUserData(DCCallback* pcb)
+{
+  return pcb->userdata;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_x64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_x64.h
+ Description: Callback - Header for x64
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALLBACK_X64_H_
+#define DYNCALL_CALLBACK_X64_H_
+
+#include "dyncall_callback.h"
+
+#include "dyncall_thunk.h"
+#include "dyncall_args_x64.h"
+
+
+struct DCCallback
+{
+  DCThunk  	         thunk;    // offset 0,  size 24
+  DCCallbackHandler* handler;  // offset 24
+  void*              userdata; // offset 32
+};
+
+#endif /* DYNCALL_CALLBACK_X64_H_ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_x64_masm.asm	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,82 @@
+; auto-generated by gen-masm.sh
+.CODE
+DCThunk_size = 24
+DCArgs_size_win64 = 80
+DCArgs_size_sysv = 128
+DCValue_size = 8
+FRAME_arg0_win64 = 48
+FRAME_arg0_sysv = 16
+FRAME_return = 8
+FRAME_parent = 0
+FRAME_DCArgs_sysv = -128
+FRAME_DCValue_sysv = -136
+FRAME_DCArgs_win64 = -80
+FRAME_DCValue_win64 = -80
+CTX_thunk = 0
+CTX_handler = 24
+CTX_userdata = 32
+DCCallback_size = 40
+dcCallback_x64_sysv PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push RBP
+ mov RBP,RSP
+ sub RSP,8*8
+ movsd qword ptr [RSP+8*7],XMM7
+ movsd qword ptr [RSP+8*6],XMM6
+ movsd qword ptr [RSP+8*5],XMM5
+ movsd qword ptr [RSP+8*4],XMM4
+ movsd qword ptr [RSP+8*3],XMM3
+ movsd qword ptr [RSP+8*2],XMM2
+ movsd qword ptr [RSP+8*1],XMM1
+ movsd qword ptr [RSP+8*0],XMM0
+ push R9
+ push R8
+ push RCX
+ push RDX
+ push RSI
+ push RDI
+ push 0
+ lea RDX,qword ptr [RBP+FRAME_arg0_sysv]
+ push RDX
+ mov RSI,RSP
+ push 0
+ mov RDI,RAX
+ mov RCX,qword ptr [RDI+CTX_userdata]
+ mov RDX,RSP
+ push 0
+ call qword ptr [RAX+CTX_handler]
+ mov RAX,qword ptr [RBP+FRAME_DCValue_sysv]
+ movd XMM0,RAX
+ mov RSP,RBP
+ pop RBP
+ ret
+dcCallback_x64_sysv ENDP
+dcCallback_x64_win64 PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push RBP
+ mov RBP,RSP
+ sub RSP,4*8
+ movsd qword ptr [RSP+8*3],XMM3
+ movsd qword ptr [RSP+8*2],XMM2
+ movsd qword ptr [RSP+8*1],XMM1
+ movsd qword ptr [RSP+8*0],XMM0
+ push R9
+ push R8
+ push RDX
+ push RCX
+ push 0
+ lea RDX,qword ptr [RBP+FRAME_arg0_win64]
+ push RDX
+ mov RDX,RSP
+ mov RCX,RAX
+ mov R9,qword ptr [RAX+CTX_userdata]
+ mov R8,RSP
+ sub RSP,4*8
+ call qword ptr [RAX+CTX_handler]
+ mov RAX,qword ptr [RBP+FRAME_DCValue_win64]
+ movd XMM0,RAX
+ mov RSP,RBP
+ pop RBP
+ ret
+dcCallback_x64_win64 ENDP
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_x86.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,108 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_x86.S
+ Description: Callback Thunk entry for x86
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "../portasm/portasm-x86.S"
+BEGIN_ASM
+DCThunk_size		= 16
+DCArgs_size		= 20
+DCValue_size		=  8
+
+CTX_thunk		=  0
+CTX_phandler		= 16
+CTX_pargsvt		= 20
+CTX_stack_cleanup	= 24
+CTX_userdata		= 28
+
+frame_arg0         	=  8
+frame_ret          	=  4
+frame_parent       	=  0
+frame_CTX         	= -4
+frame_DCArgs       	= -24
+frame_DCValue      	= -32
+
+#define ASCII_L	76
+#define ASCII_l	108
+#define ASCII_d	100
+#define ASCII_f	102
+#define ASCII_i	105
+#define ASCII_v	118
+
+GLOBAL(dcCallbackThunkEntry)
+BEGIN_PROC(dcCallbackThunkEntry)
+	PUSH(EBP)
+	MOVL(ESP,EBP)
+	/* local variable frame_CTX) */
+	PUSH(EAX)				/* EAX = CTX* */
+	/* initialize DCArgs */
+	PUSH(LIT(0))				/* fast_count */
+	PUSH(EDX)				/* fast_data[1] */
+	PUSH(ECX)				/* fast_data[0] */
+	LEA(DWORD(EBP,frame_arg0),ECX)		/* compute arg stack address */
+	PUSH(ECX)				/* stack-ptr */
+	PUSH(DWORD(EAX,CTX_pargsvt))		/* vtbl-ptr */
+	MOVL(ESP,ECX)				/* ECX = DCArgs* */
+	/* initialize DCvalue */
+	PUSH(LIT(0))
+	PUSH(LIT(0))
+	
+	MOVL(ESP,EDX)				/* EDX = DCValue* */
+	ANDL(LIT(-16),ESP)			/* align stack to 16 bytes. */
+	/* call handler(context) */
+	PUSH(DWORD(EAX,CTX_userdata))		/* userdata */
+	PUSH(EDX)				/* DCValue* */
+	PUSH(ECX)				/* DCargs* */
+	PUSH(EAX)				/* DCCallback* */
+	CALL_DWORD(EAX,CTX_phandler)
+	/* cleanup stack */
+	MOVL(EBP,ESP)				/* reset esp to frame */
+	POP(ECX)				/* skip parent frame */	
+	POP(ECX)				/* pop return address */
+	MOVL(DWORD(EBP,frame_CTX),EDX)	
+	ADD(DWORD(EDX,CTX_stack_cleanup),ESP)	/* cleanup stack */
+	PUSH(ECX)				/* push back return address */
+	LEA(DWORD(EBP,frame_DCValue), EDX)
+	MOVL(DWORD(EBP,0), EBP)			/* EBP = parent frame */
+	/* handle return value */
+	
+	CMP(LIT(ASCII_f),AL)
+	JE(LOCAL(return_f32))
+	CMP(LIT(ASCII_d),AL)
+	JE(LOCAL(return_f64))
+	
+	/* All int cases <= 32 bits (+ pointer & string cases) fall in the 32 bits int case*/
+LOCAL(return_i64):
+	MOVL(DWORD(EDX,0),EAX)
+	MOVL(DWORD(EDX,4),EDX)
+	RET()
+LOCAL(return_f32):
+	FLDS(DWORD(EDX,0))
+	RET()
+LOCAL(return_f64):
+	FLDL(QWORD(EDX,0))
+LOCAL(return_void):
+	RET()
+END_PROC(dcCallbackThunkEntry)
+END_ASM
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_x86.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,282 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_x86.c
+ Description: Callback - Implementation for x86
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_callback_x86.h"
+#include "dyncall_args_x86.h"
+
+#include "dyncall_alloc_wx.h"
+#include "dyncall_signature.h"
+
+/*
+ * assembly thunk entry for callbacks
+ */
+
+extern void dcCallbackThunkEntry();
+
+/* compute stacksize for callee cleanup calling conventions:
+ *
+ * stdcall,fastcall_ms,fastcall_gnu
+ */
+
+static int dcbCleanupSize_x86_cdecl(const char* signature)
+{
+  return 0;
+}
+
+static int dcbCleanupSize_x86_std(const char* signature)
+{
+  const char* ptr = signature;
+  int size = 0;
+  char ch;
+  while( (ch = *ptr++) != DC_SIGCHAR_ENDARG ) {
+    switch(ch) {
+      case DC_SIGCHAR_BOOL:
+      case DC_SIGCHAR_CHAR:
+      case DC_SIGCHAR_SHORT:
+      case DC_SIGCHAR_INT:
+      case DC_SIGCHAR_LONG:
+      case DC_SIGCHAR_POINTER:
+      case DC_SIGCHAR_UCHAR:
+      case DC_SIGCHAR_USHORT:
+      case DC_SIGCHAR_UINT:
+      case DC_SIGCHAR_ULONG:
+      case DC_SIGCHAR_STRING:
+      case DC_SIGCHAR_FLOAT:
+        size += 4;
+        break;
+      case DC_SIGCHAR_DOUBLE:
+      case DC_SIGCHAR_LONGLONG:
+      case DC_SIGCHAR_ULONGLONG:
+        size += 8;
+        break;
+    }
+  }
+  return size;
+}
+
+static int dcbCleanupSize_x86_this_ms(const char* signature)
+{
+  const char* ptr = signature;
+  int size = 0;
+  char ch;
+  while( (ch = *ptr++) != DC_SIGCHAR_ENDARG )
+  {
+    switch(ch)
+    {
+    case DC_SIGCHAR_BOOL:
+    case DC_SIGCHAR_CHAR:
+    case DC_SIGCHAR_SHORT:
+    case DC_SIGCHAR_INT:
+    case DC_SIGCHAR_LONG:
+    case DC_SIGCHAR_POINTER:
+    case DC_SIGCHAR_UCHAR:
+    case DC_SIGCHAR_USHORT:
+    case DC_SIGCHAR_UINT:
+    case DC_SIGCHAR_ULONG:
+    case DC_SIGCHAR_STRING:
+    case DC_SIGCHAR_FLOAT:
+      size += 4;
+      break;
+    case DC_SIGCHAR_DOUBLE:
+    case DC_SIGCHAR_LONGLONG:
+    case DC_SIGCHAR_ULONGLONG:
+      size += 8;
+      break;
+    }
+  }
+  return size;
+}
+
+static int dcbCleanupSize_x86_fast_ms(const char* signature)
+{
+  const char* ptr = signature;
+  int size = 0;
+  int regs = 0;
+  char ch;
+  while( (ch = *ptr++) != DC_SIGCHAR_ENDARG )
+  {
+    switch(ch)
+    {
+    case DC_SIGCHAR_BOOL:
+    case DC_SIGCHAR_CHAR:
+    case DC_SIGCHAR_SHORT:
+    case DC_SIGCHAR_INT:
+    case DC_SIGCHAR_LONG:
+    case DC_SIGCHAR_POINTER:
+    case DC_SIGCHAR_UCHAR:
+    case DC_SIGCHAR_USHORT:
+    case DC_SIGCHAR_UINT:
+    case DC_SIGCHAR_ULONG:
+    case DC_SIGCHAR_STRING:
+      if (regs < 2) regs++;
+      else size += 4;
+      break;
+    case DC_SIGCHAR_FLOAT:
+      size += 4;
+      break;
+    case DC_SIGCHAR_DOUBLE:
+      size += 8;
+      break;
+    case DC_SIGCHAR_LONGLONG:
+    case DC_SIGCHAR_ULONGLONG:
+      size += 8;
+      break;
+    }
+  }
+  return size;
+}
+
+static int dcbCleanupSize_x86_fast_gnu(const char* signature)
+{
+  const char* ptr = signature;
+  char ch;
+  int size = 0;
+  int regs = 0;
+  while( (ch = *ptr++) != DC_SIGCHAR_ENDARG ) {
+    switch(ch) {
+      case DC_SIGCHAR_FLOAT:
+        size += 4;
+        break;
+      case DC_SIGCHAR_DOUBLE:
+        size += 8;
+        break;
+      case DC_SIGCHAR_LONGLONG:
+      case DC_SIGCHAR_ULONGLONG:
+        regs  = 2;
+        size += 8;
+        break;
+      default:
+        if (regs < 2) regs++;
+        else size += 4;
+        break;
+    }
+  }
+  return size;
+}
+
+void dcbInitCallback(DCCallback* pcb, const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  const char* ptr;
+  char  ch;
+  int mode;
+  pcb->handler = handler;
+  pcb->userdata = userdata;
+
+  ptr = signature;
+  ch = *ptr;
+
+  /* x86 hints: */
+
+  mode = DC_CALL_C_X86_CDECL;
+
+  if(ch == DC_SIGCHAR_CC_PREFIX)
+  {
+    ptr++;
+    ch = *ptr++;
+    switch(ch) {
+      case DC_SIGCHAR_CC_STDCALL:      mode = DC_CALL_C_X86_WIN32_STD;      break;
+      case DC_SIGCHAR_CC_THISCALL_MS:  mode = DC_CALL_C_X86_WIN32_THIS_MS;  break;
+      case DC_SIGCHAR_CC_FASTCALL_GNU: mode = DC_CALL_C_X86_WIN32_FAST_GNU; break;
+      case DC_SIGCHAR_CC_FASTCALL_MS:  mode = DC_CALL_C_X86_WIN32_FAST_MS;  break;
+    }
+  }
+
+  /* x86 configuration: */
+
+  switch(mode) {
+    case DC_CALL_C_X86_CDECL:
+      pcb->args_vt = &dcArgsVT_default;
+      pcb->stack_cleanup = dcbCleanupSize_x86_cdecl(ptr);
+      break;
+    case DC_CALL_C_X86_WIN32_STD:
+      pcb->args_vt = &dcArgsVT_default;
+      pcb->stack_cleanup = dcbCleanupSize_x86_std(ptr);
+      break;
+    case DC_CALL_C_X86_WIN32_THIS_MS:
+      pcb->args_vt = &dcArgsVT_this_ms;
+      pcb->stack_cleanup = dcbCleanupSize_x86_this_ms(ptr);
+      break;
+    case DC_CALL_C_X86_WIN32_FAST_MS:
+      pcb->args_vt = &dcArgsVT_fast_ms;
+      pcb->stack_cleanup = dcbCleanupSize_x86_fast_ms(ptr);
+      break;
+    case DC_CALL_C_X86_WIN32_FAST_GNU:
+      pcb->args_vt = &dcArgsVT_fast_gnu;
+      pcb->stack_cleanup = dcbCleanupSize_x86_fast_gnu(ptr);
+      break;
+  }
+
+#if defined(DC_PLAN9)
+  /* HACK for Plan9 - 'reuse' pcb->stack_cleanup as a flag
+     to indicate if return value is 64bit. The field is not
+     used anyways as the caller is responsible to clean up
+     the stack in Plan9. If set to '1' the callback kernel
+     takes into account an extra stack-parameter (pointer
+     to 64bit return value).
+     I thought of introducing a new field, but for one single
+     x86 calling convention out of many, it seemed overkill
+     to change the struct for everybody else. Maybe renaming
+     would be a good idea, though. ~ Tassilo
+  */
+  while(*ptr) {
+    if(*ptr++ == DC_SIGCHAR_ENDARG) {
+      pcb->stack_cleanup = (*ptr == DC_SIGCHAR_LONGLONG) || (*ptr == DC_SIGCHAR_ULONGLONG);
+      break;
+    }
+  }
+#endif
+}
+
+/*
+ * callback constructor
+ */
+
+DCCallback* dcbNewCallback(const char* signature, DCCallbackHandler* handler, void* userdata)
+{
+  int err;
+  DCCallback* pcb;
+  err = dcAllocWX(sizeof(DCCallback), (void**) &pcb);
+  if (err != 0) return 0;
+
+  dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
+  dcbInitCallback(pcb, signature, handler, userdata);
+  return pcb;
+}
+
+/*
+ * free
+ */
+
+void dcbFreeCallback(DCCallback* pcb)
+{
+  dcFreeWX(pcb, sizeof(DCCallback));
+}
+
+void* dcbGetUserData(DCCallback* pcb)
+{
+  return pcb->userdata;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_x86.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,50 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_callback_x86.h
+ Description: Callback - Header for x86
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNCALL_CALLBACK_X86_H_
+#define DYNCALL_CALLBACK_X86_H_
+
+#include "dyncall_callback.h"
+
+#include "dyncall_thunk.h"
+#include "dyncall_args_x86.h"
+
+struct DCCallback
+{
+  DCThunk            thunk;         /* offset 0,  size 16 */
+  DCCallbackHandler* handler;       /* offset 16 */
+  DCArgsVT*          args_vt;       /* offset 20 */
+  size_t             stack_cleanup; /* offset 24 */
+  void*              userdata;      /* offset 28 */
+};
+
+int dcCleanupSize_x86_cdecl   (const char* args_signature);
+int dcCleanupSize_x86_std     (const char* args_signature);
+int dcCleanupSize_x86_fast_ms (const char* args_signature);
+int dcCleanupSize_x86_fast_gnu(const char* args_signature);
+
+#endif /* DYNCALL_CALLBACK_X86_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_x86_8a.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,100 @@
+/*
+
+ Package: dyncall
+ Library: dyncall
+ File: dyncall/dyncall_callback_x86_8a.s
+ Description: x86 abi callback kernel implementation for Plan9's 8a
+ License:
+
+   Copyright (c) 2013 Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+TEXT dcCallbackThunkEntry(SB), $0
+
+	/* input:
+		AX    -> thunk
+		AX+16 -> cb handler
+		AX+20 -> dcargsvt
+		AX+24 -> stack cleanup <-- not used for stack cleaning as caller cleans up,
+		AX+28 -> userdata          however reused as flag to indicate 64bit return value)
+	*/
+
+	/* prolog */
+	MOVL SP, BP
+
+	/* copy of DCargs passed to cb handler */
+	PUSHL $0           /* fast_count (unused on plan9, but using shared x86 dcargs struct) */
+	SUBL  $8, SP       /* skip fast_data[] ( " ) */
+	LEAL  8(BP), CX    /* ptr to args on stack, depending if return val is 64bit ... */
+	CMPL  24(AX), $1
+	JEQ   is_ll_ret
+	LEAL  4(BP), CX    /* ... or not */
+is_ll_ret:
+	PUSHL CX
+	PUSHL 20(AX)       /* args vtable ptr */
+	MOVL  SP, CX       /* DCArgs-ptr (data pushed above) */
+
+	/* space for return value (long long) */
+	PUSHL $0
+	PUSHL $0
+	MOVL  SP, DX       /* retval ptr */
+
+	/* call the handler */
+	PUSHL 28(AX)       /* userdata for handler */
+	PUSHL DX           /* results */
+	PUSHL CX           /* args */
+	PUSHL AX           /* callback obj */
+	MOVL  16(AX), AX
+	CALL  AX
+
+	/* copy retval from ptr on stack to AX or stack space if 64bit */
+	MOVL 8(SP), BX     /* ptr to retval */
+	CMPL  AX, $0x6c    /* 'l' @@@ compares return from handler, might be different from sig - design currently in discussion */
+	JEQ   ll_ret;
+	CMPL  AX, $0x4c    /* 'L' @@@ compares return from handler, might be different from sig - design currently in discussion */
+	JEQ   ll_ret;
+	CMPL  AX, $0x66    /* 'f' @@@ compares return from handler, might be different from sig - design currently in discussion */
+	JEQ   f_ret;
+	CMPL  AX, $0x64    /* 'd' @@@ compares return from handler, might be different from sig - design currently in discussion */
+	JEQ   d_ret;
+	JMP   other_ret
+
+ll_ret:
+	MOVL  48(SP), DX    /* ptr to ret address space; 48 = stack size + caller's ret address */
+	MOVL  (BX), CX
+	MOVL  CX, (DX)
+	MOVL  4(BX), CX
+	MOVL  CX, 4(DX)
+	JMP   cont_ret
+
+f_ret:
+	FMOVF (BX), F0
+	JMP   cont_ret
+
+d_ret:
+	FMOVD (BX), F0
+	JMP   cont_ret
+
+other_ret:
+	MOVL (BX), AX      /* 32bit non-fp are returned in AX */
+
+	/* epilog */
+cont_ret:
+	ADDL $44, SP       /* Cleanup stack */
+	POPL CX            /* hack to emulate RET without getting overly strict */
+	JMP CX             /* 'unbalanced PUSH/POP' warning/error from 8l */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_callback_x86_masm.asm	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,65 @@
+; auto-generated by gen-masm.sh
+.386
+.MODEL FLAT
+.CODE
+
+DCThunk_size = 16
+DCArgs_size = 20
+DCValue_size = 8
+CTX_thunk = 0
+CTX_phandler = 16
+CTX_pargsvt = 20
+CTX_stack_cleanup = 24
+CTX_userdata = 28
+frame_arg0 = 8
+frame_ret = 4
+frame_parent = 0
+frame_CTX = -4
+frame_DCArgs = -24
+frame_DCValue = -32
+_dcCallbackThunkEntry PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push EBP
+ mov EBP,ESP
+ push EAX
+ push 0
+ push EDX
+ push ECX
+ lea ECX,dword ptr [EBP+frame_arg0]
+ push ECX
+ push dword ptr [EAX+CTX_pargsvt]
+ mov ECX,ESP
+ push 0
+ push 0
+ mov EDX,ESP
+ and ESP,-16
+ push dword ptr [EAX+CTX_userdata]
+ push EDX
+ push ECX
+ push EAX
+ call dword ptr [EAX+CTX_phandler]
+ mov ESP,EBP
+ pop ECX
+ pop ECX
+ mov EDX,dword ptr [EBP+frame_CTX]
+ add ESP,dword ptr [EDX+CTX_stack_cleanup]
+ push ECX
+ lea EDX,dword ptr [EBP+frame_DCValue]
+ mov EBP,dword ptr [EBP+0]
+ cmp AL,102
+ je return_f32
+ cmp AL,100
+ je return_f64
+return_i64:
+ mov EAX,dword ptr [EDX+0]
+ mov EDX,dword ptr [EDX+4]
+ ret
+return_f32:
+ fld dword ptr [EDX+0]
+ ret
+return_f64:
+ fld qword ptr [EDX+0]
+return_void:
+ ret
+_dcCallbackThunkEntry ENDP
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,55 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk.c
+ Description: Thunk - Implementation Back-end selection
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_thunk.h"
+
+
+#if defined(DC__Arch_Intel_x86)
+# include "dyncall_thunk_x86.c"
+#elif defined(DC__Arch_AMD64)
+# include "dyncall_thunk_x64.c"
+#elif defined(DC__Arch_PPC32)
+# if defined(DC__OS_Darwin)
+#   include "dyncall_thunk_ppc32.c"
+# else
+#   include "dyncall_thunk_ppc32_sysv.c"
+# endif
+#elif defined(DC__Arch_PPC64)
+# include "dyncall_thunk_ppc64.c"
+#elif defined(DC__Arch_ARM_ARM)
+#include "dyncall_thunk_arm32_arm.c"
+#elif defined(DC__Arch_ARM_THUMB)
+#include "dyncall_thunk_arm32_thumb.c"
+#elif defined(DC__Arch_MIPS)
+#include "dyncall_thunk_mips.c"
+#elif defined(DC__Arch_Sparc)
+#include "dyncall_thunk_sparc32.c"
+#elif defined(DC__Arch_Sparcv9)
+#include "dyncall_thunk_sparc64.c"
+#elif defined(DC__Arch_ARM64)
+#include "dyncall_thunk_arm64.c"
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,90 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk.h
+ Description: Thunk - Interface
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_THUNK_H
+#define DYNCALL_THUNK_H
+
+/**
+ ** dyncall thunks
+ **
+ ** thunks are small-size hybrid code/data objects, created at run-time to
+ ** be used as function pointers with associated data and entry functions.
+ **
+ ** The header contains code, that does load its address into a designated scratch
+ ** register and will jump to a thunk function.
+ **
+ ** Thunk entry procedures are compiled functions, that are called as a result of
+ ** a thunk function.
+ ** There is one thunk entry currently for supporting callbacks.
+ **
+ ** Thunk context register ( ::= an available scratch register in the calling convention):
+ **
+ ** x86:  eax
+ ** x64:  rax
+ ** ppc:   r2
+ ** arm:  r12
+ ** arm64: x9
+ **
+ **/
+
+#include "dyncall_macros.h"
+
+typedef struct DCThunk_ DCThunk;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void   dcbInitThunk(DCThunk* p, void (*entry)());
+
+#if defined(DC__Arch_Intel_x86)
+#include "dyncall_thunk_x86.h"
+#elif defined (DC__Arch_AMD64)
+#include "dyncall_thunk_x64.h"
+#elif defined (DC__Arch_PPC32)
+#include "dyncall_thunk_ppc32.h"
+#elif defined (DC__Arch_PPC64)
+#include "dyncall_thunk_ppc64.h"
+#elif defined (DC__Arch_ARM_ARM)
+#include "dyncall_thunk_arm32_arm.h"
+#elif defined (DC__Arch_ARM_THUMB)
+#include "dyncall_thunk_arm32_thumb.h"
+#elif defined (DC__Arch_MIPS)
+#include "dyncall_thunk_mips.h"
+#elif defined (DC__Arch_Sparc)
+#include "dyncall_thunk_sparc32.h"
+#elif defined (DC__Arch_Sparcv9)
+#include "dyncall_thunk_sparc64.h"
+#elif defined (DC__Arch_ARM64)
+#include "dyncall_thunk_arm64.h"
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* DYNCALL_THUNK_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_arm32_arm.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,46 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_arm32_arm.c
+ Description: Thunk - Implementation for ARM32 (ARM mode)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_thunk.h"
+
+void dcbInitThunk(DCThunk* p, void (*entry)())
+{
+  /*
+    # ARM32 (ARM mode) thunk code:
+    .code 32
+      sub %r12, %r15, #8
+      ldr %r15, [%r15, #-4]
+  */
+
+  /* This code loads 'entry+8' into r15. The -4 is needed, because r15 as  */
+  /* program counter points to the current instruction+8, but the pointer  */
+  /* to the code to execute follows the ldr instruction directly. Add 8 to */
+  /* entry for similar reasons. NOTE: Latter seems to be implicit with     */ 
+  /* latest update of arm-eabi tools.                                      */
+  p->code[0]  = 0xe24fc008UL;  /* sub %r12, %r15, #8 */
+  p->code[1]  = 0xe51ff004UL;  /* ldr %r15, [%r15, #-4] */
+  p->entry = entry/*+8*/;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_arm32_arm.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,41 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_arm32_arm.h
+ Description: Thunk - Header for ARM32 (ARM mode)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_THUNK_ARM32_ARM_H
+#define DYNCALL_THUNK_ARM32_ARM_H
+
+
+struct DCThunk_
+{
+  unsigned int code[2];
+  void       (*entry)();
+};
+
+#define DCTHUNK_ARM32_ARM_SIZE 12
+
+
+#endif /* DYNCALL_THUNK_ARM32_ARM_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_arm32_thumb.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_arm32_thumb.c
+ Description: Thunk - Implementation for ARM32 (THUMB mode)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_thunk_arm32_arm.c" /* Since we can mix ARM and THUMB    */
+                                     /* assembly, reuse the ARM mode code */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_arm32_thumb.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,36 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_arm32_thumb.h
+ Description: Thunk - Header for ARM32 (THUMB mode)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_THUNK_ARM32_THUMB_H
+#define DYNCALL_THUNK_ARM32_THUMB_H
+
+#include "dyncall_thunk_arm32_arm.h" /* Uses same code as ARM mode. */
+
+#define DCTHUNK_ARM32_THUMB_SIZE 12
+
+
+#endif /* DYNCALL_THUNK_ARM32_THUMB_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_arm64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,64 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_arm64.c
+ Description: Thunk - Implementation for ARM64 / ARMv8 / AAPCS64
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>,
+                      Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dyncall_thunk.h"
+
+/*
+
+Thunk Register: x9
+
+Thunk:
+	adr x9,  Thunk
+	ldr x10, .target
+	br  x10
+	nop
+.target:
+	.xword 0
+
+-- Encoded in:
+
+0000000000000000 <Thunk>:
+   0:	10000009 	adr	x9, 0 <Thunk>
+   4:	5800006a 	ldr	x10, 10 <.target>
+   8:	d61f0140 	br	x10
+   c:	d503201f 	nop
+
+0000000000000010 <.target>:
+  10:	76543210 	.word	0x76543210
+  14:	fedcba98 	.word	0xfedcba98
+*/
+
+void dcbInitThunk(DCThunk* p, void (*entry)())
+{
+  p->code[0] = 0x10000009; //   adr x9, 0
+  p->code[1] = 0x5800006a; //	ldr x9, entry
+  p->code[2] = 0xd61f0140; //   br  x9
+  p->code[3] = 0xd503201f; //   nop
+  p->entry   = entry;      // entry: 
+                           //   .xword 0
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_arm64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,42 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_arm64.h
+ Description: Thunk - Header for ARM64 / ARMv8 / AAPCS64
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>,
+                      Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef DYNCALL_THUNK_ARM64_H
+#define DYNCALL_THUNK_ARM64_H
+
+struct DCThunk_
+{
+                                // off  size
+                                //-----|----------
+  unsigned int code[4];		//   0    16
+  void (*entry)();		//  16     8
+  void* reserved;         	//  24     8
+
+                                //  32 total size
+  
+};
+
+#endif /* DYNCALL_THUNK_ARM64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_mips.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,84 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_mips.c
+ Description: Thunk - Implementation for MIPS
+ License:
+
+   Copyright (c) 2013-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "dyncall_thunk.h"
+
+unsigned short hi16(x) { return ( (unsigned short) (((unsigned int)x)>>16UL) ); }
+unsigned short lo16(x) { return ( (unsigned short)  ((unsigned int)x)        ); }
+
+void dcbInitThunk(DCThunk* p, void (*entry)())
+{
+/*
+
+Thunk Register: $t4 ($12)
+According to o32abi: $t9 
+
+'The Linux/MIPS convention is that all PIC calls use t9 to hold the address of the called function.'
+[See MIPS Run, p.413]
+
+    mips thunk code:
+      lui $t4,      %hi(p)
+      lui $t9,      %hi(entry)
+      ori $t9, $t9, %lo(entry)
+      jr  $t9
+      ori $t4, $t4, %lo(p)    
+
+thunk.o:     file format elf32-tradbigmips
+
+
+Disassembly of section .text:
+
+00000000 <thunk>:
+   0:	3c0c0000 	lui	t4,0x0
+   4:	3c190000 	lui	t9,0x0
+   8:	37390000 	ori	t9,t9,0x0
+   c:	03200008 	jr	t9
+  10:	00200825 	move	at,at
+  14:	358c0000 	ori	t4,t4,0x0
+  18:	00200825 	move	at,at
+  1c:	00200825 	move	at,at
+
+  */
+
+#if defined(DC__Endian_BIG)
+
+  p->data[0] = 0x3c0c; p->data[1] = hi16(p);     /* lui $t4, hi(p) */
+  p->data[2] = 0x3c19; p->data[3] = hi16(entry); /* lui $t9, hi(entry) */
+  p->data[4] = 0x3739; p->data[5] = lo16(entry); /* ori $t9, $t9, lo(entry) */
+  p->jump    = 0x03200008;                       /* jr $t9 */
+  p->bddt[0] = 0x358c; p->bddt[1] = lo16(p);     /* ori $t4, $t4, lo(p) - branch delay slot */
+
+#else /* defined(DC__Endian_LITTLE) */
+  
+  p->data[1] = 0x3c0c; p->data[0] = hi16(p);     /* lui $t4, hi(p) */
+  p->data[3] = 0x3c19; p->data[2] = hi16(entry); /* lui $t9, hi(entry) */
+  p->data[5] = 0x3739; p->data[4] = lo16(entry); /* ori $t9, $t9, lo(entry) */
+  p->jump    = 0x03200008;                       /* jr $t9 */
+  p->bddt[1] = 0x358c; p->bddt[0] = lo16(p);     /* ori $t4, $t4, lo(p) - branch delay slot */
+  
+#endif
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_mips.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,38 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_mips.h
+ Description: Thunk - Header for MIPS
+ License:
+
+   Copyright (c) 2013-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_THUNK_MIPS_H
+#define DYNCALL_THUNK_MIPS_H
+
+struct DCThunk_
+{
+  unsigned short data[6];
+  unsigned int   jump;
+  unsigned short bddt[2];
+};
+
+#endif /* DYNCALL_THUNK_MIPS_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_ppc32.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,52 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_ppc32.c
+ Description: Thunk - Implementation for ppc32 darwin/apple
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_thunk.h"
+
+unsigned short hi16(x) { return ( (unsigned short) (((unsigned int)x)>>16UL) ); }
+unsigned short lo16(x) { return ( (unsigned short)  ((unsigned int)x)        ); }   
+
+void dcbInitThunk(DCThunk* p, void (*entry)())
+{
+  /*
+    ppc32 thunk code:
+      lis   r2 , HI16(p)
+      ori   r2 , r2, LO16(p)
+      lwz   r12, 20(r2)
+      mtctr r12
+      bctr
+  */
+
+  p->code_load_hi = 0x3c40U;     /* lis  r2, HI16(p) */
+  p->addr_self_hi = hi16(p);
+  p->code_load_lo = 0x6042U; 	 /* ori  r2, r2, LO16(p) */
+  p->addr_self_lo = lo16(p);
+  p->code_jump[0] = 0x81820014U; /* lwz   r12, 20(r2) */
+  p->code_jump[1] = 0x7d8903a6U; /* mtclr r12 */
+  p->code_jump[2] = 0x4e800420U; /* bctr */
+  p->addr_entry   = entry;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_ppc32.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,40 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_ppc32.h
+ Description: Thunk - Header for ppc32 (darwin/sysv)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef DYNCALL_THUNK_PPC32_H
+#define DYNCALL_THUNK_PPC32_H
+
+struct DCThunk_
+{
+  unsigned short code_load_hi, addr_self_hi;  /* offset:  0  size: 4  */
+  unsigned short code_load_lo, addr_self_lo;  /* offset:  4  size: 4  */
+  unsigned int   code_jump[3];                /* offset:  8  size: 12 */
+  void          (*addr_entry)();              /* offset: 20  size:  4 */
+};                                            /*       total size: 24 */
+
+#define DCTHUNK_SIZE_PPC32 24
+
+#endif /* DYNCALL_THUNK_PPC32_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_ppc32_sysv.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,50 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_ppc32_sysv.c
+ Description: Thunks on PowerPC 32-bit System V ABI
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_thunk.h"
+
+unsigned short hi16(x) { return ( (unsigned short) (((unsigned int)x)>>16UL) ); }
+unsigned short lo16(x) { return ( (unsigned short)  ((unsigned int)x)        ); }   
+
+void dcbInitThunk(DCThunk* p, void (*entry)())
+{
+/*
+   0:	3d 60 00 00 	lis     r11,0
+   4:	61 6b 00 01 	ori     r11,r11,1
+   8:	81 82 00 14 	lwz     r12,20(r2)
+   c:	7d 89 03 a6 	mtctr   r12
+  10:	4e 80 04 20 	bctr
+*/
+  p->code_load_hi = 0x3d60U;     /* lis  r11, HI16(p) */
+  p->addr_self_hi = hi16(p);
+  p->code_load_lo = 0x616bU; 	 /* ori  r11, r11, LO16(p) */
+  p->addr_self_lo = lo16(p);
+  p->code_jump[0] = 0x818b0014U; /* lwz   r12, 20(r11) */
+  p->code_jump[1] = 0x7d8903a6U; /* mtclr r12 */
+  p->code_jump[2] = 0x4e800420U; /* bctr */
+  p->addr_entry   = entry;
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_ppc64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,87 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_ppc64.c
+ Description: Thunk - Implementation for ppc64
+ License:
+
+   Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "dyncall_thunk.h"
+
+#define HIST16(x) (unsigned short)((((unsigned long)(x))>>48UL) & 0xffff)
+#define HIER16(x) (unsigned short)((((unsigned long)(x))>>32UL) & 0xffff)
+#define HI16(x)   (unsigned short)((((unsigned long)(x))>>16UL) & 0xffff)
+#define LO16(x)   (unsigned short)( ((unsigned long)(x))        & 0xffff)
+
+void dcbInitThunk(DCThunk* p, void (*entry)())
+{
+#if DC__ABI_PPC64_ELF_V == 2
+  /*
+    ppc64 thunk code:
+      lis    r11, HIST16(p)
+      ori    r11,r11, HIER16(p)
+      rldicr r11,r11,32,31
+      oris   r11,r11, HI16(p)
+      ori    r11,r11, LO16(p)
+      ld     r12,40(r11)
+      mtctr r12
+      bctr
+  */
+
+  p->code_load_hist = 0x3d60U;     /* lis    r11,HIST16(p) */
+  p->addr_self_hist = HIST16(p);
+  p->code_load_hier = 0x616bU;     /* ori    r11,r11, HIER16(p) */
+  p->addr_self_hier = HIER16(p);
+  p->code_rot       = 0x796b07c6U; /* rldicr r11,r11,32,31 */
+  p->code_load_hi   = 0x656bU;     /* oris   r11,r11, HI16(p) */
+  p->addr_self_hi   = HI16(p);
+  p->code_load_lo   = 0x616bU; 	   /* ori    r11,r11, LO16(p) */
+  p->addr_self_lo   = LO16(p);
+  p->code_jump[0]   = 0xe98b0028U; /* ld     r12,40(r11) */
+  p->code_jump[1]   = 0x7d8903a6U; /* mtclr  r12 */
+  p->code_jump[2]   = 0x4e800420U; /* bctr */
+  p->addr_entry     = (void *)(entry);
+
+#else
+  /*
+    ppc64 thunk code:
+      oris   r11, r2, HI16(p)
+      ori    r11,r11, LO16(p)
+      ld     r12,48(r11)
+      ld     r2,56(r11)
+      mtctr r12
+      bctr
+  */
+
+  p->thunk_entry  = (void *)&(p->code_load_hi);
+  p->toc_thunk    = ((long)(p->thunk_entry) & 0xffffffff00000000UL);
+
+  p->code_load_hi = 0x644bU;     /* oris  r11, r2, HI16(p) */
+  p->addr_self_hi = HI16(p);
+  p->code_load_lo = 0x616bU; 	 /* ori   r11,r11, LO16(p) */
+  p->addr_self_lo = LO16(p);
+  p->code_jump[0] = 0xe98b0030U; /* ld    r12,48(r11) */
+  p->code_jump[1] = 0xe84b0038U; /* ld    r2,56(r11) */
+  p->code_jump[2] = 0x7d8903a6U; /* mtclr r12 */
+  p->code_jump[3] = 0x4e800420U; /* bctr */
+  p->addr_entry   = (void *)*((long *)entry);
+  p->toc_entry    = *((long *)(entry + 8));
+#endif
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_ppc64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,55 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_ppc64.h
+ Description: Thunk - Header for ppc64
+ License:
+
+   Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifndef DYNCALL_THUNK_PPC64_H
+#define DYNCALL_THUNK_PPC64_H
+
+#if DC__ABI_PPC64_ELF_V == 2
+struct DCThunk_
+{
+  unsigned short addr_self_hist, code_load_hist;  /* offset:  0 */
+  unsigned short addr_self_hier, code_load_hier;  /* offset:  4 */
+  unsigned int   code_rot;                        /* offset:  8 */
+  unsigned short addr_self_hi, code_load_hi;      /* offset: 12 */
+  unsigned short addr_self_lo, code_load_lo;      /* offset: 16 */
+  unsigned int   code_jump[5];                    /* offset: 20 */
+  void          (*addr_entry)();                  /* offset: 40 */
+};
+#define DCTHUNK_SIZE_PPC64 48
+#else
+struct DCThunk_
+{
+  void          (*thunk_entry)();                 /* offset:  0 */
+  long           toc_thunk;                       /* offset:  8 */
+  unsigned short code_load_hi, addr_self_hi;      /* offset: 16 */
+  unsigned short code_load_lo, addr_self_lo;      /* offset: 20 */
+  unsigned int   code_jump[6];                    /* offset: 24 */
+  void          (*addr_entry)();                  /* offset: 48 */
+  long           toc_entry;                       /* offset: 56 */
+};
+#define DCTHUNK_SIZE_PPC64 64
+#endif
+
+#endif /* DYNCALL_THUNK_PPC64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_sparc32.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,33 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_sparc32.c
+ Description: Thunk - Implementation for sparc32
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_thunk.h"
+
+void dcbInitThunk(DCThunk* p, void (*entry)())
+{
+  /* not yet implemented */
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_sparc32.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,37 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_sparc32.h
+ Description: Thunk - Header for sparc32 - not yet implemented
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_THUNK_SPARC32_H
+#define DYNCALL_THUNK_SPARC32_H
+
+struct DCThunk_
+{
+  int x[4]; /* dummy */
+};
+
+#define DCTHUNK_SIZE_SPARC32 32
+
+#endif /* DYNCALL_THUNK_SPARC32_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_sparc64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,33 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_sparc64.c
+ Description: Thunk - Implementation for sparc64
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_thunk.h"
+
+void dcbInitThunk(DCThunk* p, void (*entry)())
+{
+  /* not yet implemented */
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_sparc64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,37 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_sparc64.h
+ Description: Thunk - Header for sparc64 - not yet implemented
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_THUNK_SPARC64_H
+#define DYNCALL_THUNK_SPARC64_H
+
+struct DCThunk_
+{
+  int x[4]; /* dummy */
+};
+
+#define DCTHUNK_SIZE_SPARC64 32
+
+#endif /* DYNCALL_THUNK_SPARC32_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_x64.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,49 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_x64.c
+ Description: Thunk - Implementation for x64
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_thunk.h"
+
+void dcbInitThunk(DCThunk* p, void (*entry)())
+{
+  /*
+    # x64 thunk code:
+    .intel_syntax
+
+    thunk:
+        lea   rax, (rip)  # copy RIP (=p?) to RAX and use address in
+        jmp   [rax+16]    # 'entry' (stored at RIP+16) for jump
+        nop
+        nop
+        nop
+    entry:
+        .resq 1
+   */
+
+  p->code[0] = 0xfffffffff9058d48ULL;
+  p->code[1] = 0x9090900000000325ULL;
+  p->entry   = entry;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_x64.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,40 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_x64.h
+ Description: Thunk - Header for x64
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_THUNK_X64_H
+#define DYNCALL_THUNK_X64_H
+
+struct DCThunk_
+{
+  unsigned long long code[2];
+  void (*entry)();
+};
+
+#define DCTHUNK_X64_SIZE	24
+
+
+#endif /* DYNCALL_THUNK_X64_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_x86.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_x86.c
+ Description: Thunk - Implementation for x86
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall_thunk.h"
+
+void dcbInitThunk(DCThunk* p, void (*entry)())
+{
+  /*
+    x86 thunk code:
+      nop
+      nop
+      nop
+      mov %eax, p
+      jmp [%eax+12]
+      nop
+  */
+
+  p->code_load  = 0xb8909090UL; /* nop;nop;nop;mov %eax, ... */
+  p->addr_self  = p;
+  p->code_jump  = 0x900C60ffUL; /* jmp [%eax+12] ; nop */
+  p->addr_entry = entry;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncall_thunk_x86.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,40 @@
+/*
+
+ Package: dyncall
+ Library: dyncallback
+ File: dyncallback/dyncall_thunk_x86.h
+ Description: Thunk - Header for x86
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef DYNCALL_THUNK_X86_H
+#define DYNCALL_THUNK_X86_H
+
+struct DCThunk_
+{
+  unsigned int code_load;
+  void*        addr_self;
+  unsigned int code_jump;
+  void        (*addr_entry)();
+};
+
+#define DCTHUNK_X86_SIZE	16
+
+#endif /* DYNCALL_THUNK_X86_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/dyncallback.3	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,134 @@
+.\" Copyright (c) 2007-2014 Daniel Adler <dadler AT uni-goettingen DOT de>, 
+.\"                         Tassilo Philipp <tphilipp AT potion-studios DOT com>
+.\" 
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd $Mdocdate$
+.Dt dyncallback 3
+.Os
+.Sh NAME
+.Nm dyncallback
+.Nd callback interface of dyncall
+.Sh SYNOPSIS
+.In dyncall_callback.h
+.Ft DCCallback *
+.Fn dcbNewCallback "const char * signature" "DCCallbackHandler * funcptr" "void * userdata"
+.Ft void
+.Fn dcbInitCallback "DCCallback * pcb" "const char * signature" "DCCallbackHandler * funcptr" "void * userdata"
+.Ft void
+.Fn dcbFreeCallback "DCCallback * pcb"
+.Ft void
+.Fn dcbGetUserData "DCCallback * pcb"
+.Sh DESCRIPTION
+The
+.Nm
+dyncall library has an interface to create callback objects, that can be passed
+to functions as callback arguments. In other words, a pointer to the callback
+object can be "called", directly. The callback handler then allows iterating
+dynamically over the arguments once called back.
+.Pp
+.Fn dcbNewCallback
+creates a new callback object, where
+.Ar signature
+is a signature string describing the function to be called back (see manual for
+format). This is needed for
+.Nm
+dyncallback to correctly prepare the arguments passed in by the function that
+calls the callback handler. Note that the handler doesn't return the value
+specified in the signature, directly, but simply 'i' or 'f' depending on whether
+it is a integral or floating point type. The return value itself is stored
+where the handler's 3rd parameter points to (see example).
+.Ar funcptr
+is a pointer to the
+.Nm
+dyncallback callback handler (see below), and
+.Ar userdata
+a pointer to arbitrary user data you want to use in the callback handler.
+Use the returned pointer as callback argument in functions requiring a callback
+function pointer.
+.Pp
+.Fn dcbInitCallback
+(re)initialize the callback object.
+.Pp
+.Fn dcbFreeCallback
+destroys and frees the callback handler.
+.Pp
+.Fn dcbGetUserData
+returns a pointer to the userdata passed to the callback object on creation or
+initialization.
+.Pp
+Declaration of a dyncallback handler (following function pointer definition in
+dyncallback/dyncall_callback.h):
+.Bd -literal -offset indent
+char cbHandler(DCCallback* cb,
+               DCArgs*     args,
+               DCValue*    result,
+               void*       userdata);
+.Ed
+.Pp
+.Ar cb is a pointer to the DCCallback object in use
+.Nm
+result is a pointer to a DCValue object in order to store the callback's
+return value (output, to be set by handler). Finally,
+.Ar userdata is a pointer to some user defined data that can be
+set when creating the callback object.
+The handler itself returns a signature character (see manual for format)
+specifying the data type used for
+.Ar result .
+.Sh EXAMPLE
+Let's say, we want to create a callback object and call it. For simplicity, this
+example will omit passing it as a function pointer to a function (e.g. compar
+in qsort(), etc.) and demonstrate calling it, directly. First, we need to define
+our callback handler - the following handler illustrates how to access the passed-
+in arguments:
+.Bd -literal -offset indent
+char cbHandler(DCCallback* cb,
+               DCArgs*     args,
+               DCValue*    result,
+               void*       userdata)
+{
+  int* ud = (int*)userdata;
+  int       arg1 = dcbArgInt     (args);
+  float     arg2 = dcbArgFloat   (args);
+  short     arg3 = dcbArgShort   (args);
+  double    arg4 = dcbArgDouble  (args);
+  long long arg5 = dcbArgLongLong(args);
+
+  // .. do something ..
+
+  result->s = 1244;
+  return 'i';
+}
+.Ed
+.Pp
+Note that the return value of the handler is a signature character, not the
+actual return value, itself, and note that the actual return value is of type
+short.
+Now, let's call it through a DCCallback object:
+.Bd -literal -offset indent
+  DCCallback* cb;
+  short result = 0;
+  int userdata = 1337;
+  cb = dcbNewCallback("ifsdl)s", &cbHandler, &userdata);
+  result = ((short(*)(int, float, short, double, long long))cb)
+    (123, 23.f, 3, 1.82, 9909ll);
+  dcbFreeCallback(cb);
+.Ed
+.Sh SEE ALSO
+.Xr dyncall 3 ,
+.Xr dynload 3
+and the dyncall manual (available in PDF format) for a way more detailed documentation of this
+library.
+.Sh AUTHORS
+.An "Daniel Adler" Aq dadler@uni-goettingen.de
+.An "Tassilo Philipp" Aq tphilipp@potion-studios.com
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/gen-masm.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# Uses portasm to generates MASM sources for intel platforms.
+printf "; auto-generated by `basename $0`\r\n" >dyncall_callback_x86_masm.asm
+printf "; auto-generated by `basename $0`\r\n" >dyncall_callback_x64_masm.asm
+gcc -E -P -DGEN_MASM dyncall_callback_x86.S | awk '{printf "%s\r\n", $0}' >> dyncall_callback_x86_masm.asm
+gcc -E -P -DGEN_MASM dyncall_callback_x64.S | awk '{printf "%s\r\n", $0}' >> dyncall_callback_x64_masm.asm
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dyncallback/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,29 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2013 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+TOP		= ..
+<$TOP/buildsys/mk/prolog.mk
+
+
+LIBRARY		= dyncallback
+UNITS = $UNITS dyncall_alloc_wx dyncall_args dyncall_callback dyncall_callback_arch dyncall_thunk
+
+
+<$TOP/buildsys/mk/epilog.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,25 @@
+# Package: dyncall
+# File: dynload/CMakeLists.txt
+# Description: DynLoad library cmake files
+# License:
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>
+# 
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+add_library(dynload_s STATIC dynload.c dynload_syms.c)
+install(TARGETS dynload_s ARCHIVE DESTINATION lib)
+install(FILES dynload.h DESTINATION include)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/DynLoadConfig.cmake	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+set(DYNLOAD_INCLUDE_DIRS ${DynCall_SOURCE_DIR}/dynload)
+set(DYNLOAD_LIBRARIES dynload_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,10 @@
+#include "../buildsys/dynmake/Makefile.base.M"
+
+all: _L(dynload_s)
+
+_L(dynload_s): _O(dynload) _O(dynload_syms)
+	_(AR) _(ARFLAGS) _(ARFLAG_OUT_PREFIX)_(TARGET) _(PREREQS)
+
+clean:
+        _(RM) _O(*)
+        _(RM) _L(dynload_s)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,22 @@
+MAKEFILE  = Makefile.embedded
+MAKE_CMD  = ${MAKE} -f Makefile.embedded
+TARGET    = libdynload_s.a
+OBJS      = dynload.o dynload_syms.o
+HEADERS	  = dynload.h
+all: ${TARGET}
+libdynload_s.a: ${OBJS}
+	${AR} ${ARFLAGS} $@ ${OBJS}
+clean:
+	rm -f ${OBJS} ${TARGET}
+install: all
+	mkdir -p ${DESTDIR}${PREFIX}/include
+	cp ${HEADERS} ${DESTDIR}${PREFIX}/include
+	mkdir -p ${DESTDIR}${PREFIX}/lib
+	cp ${TARGET} ${DESTDIR}${PREFIX}/lib
+.PHONY: all clean install
+osx-universal:
+	CFLAGS="${CFLAGS} -arch i386 -arch x86_64 -arch ppc" ASFLAGS="${ASFLAGS} -arch i386 -arch x86_64 -arch ppc" AR="libtool" ARFLAGS="-static -o" ${MAKE_CMD} all
+sun-64bit:
+	CFLAGS="${CFLAGS} -m64" ASFLAGS="${ASFLAGS} -m64" ${MAKE_CMD} all
+sun-gcc:
+	CC=gcc CFLAGS="${CFLAGS} -fPIC" ${MAKE_CMD} all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+LIBNAME = dynload
+OBJS 	= dynload.o dynload_syms.o
+HEADERS = ${VPATH}/dynload.h 
+
+LIB = lib${LIBNAME}_s.a
+
+.PHONY: all clean install
+
+all: ${LIB}
+${LIB}: ${OBJS}
+	${AR} ${ARFLAGS} ${LIB} ${OBJS}
+clean:
+	rm -f ${OBJS} ${LIB}
+install: all
+	mkdir -p ${PREFIX}/lib
+	mkdir -p ${PREFIX}/include
+	cp ${LIB} ${PREFIX}/lib
+	cp ${HEADERS} ${PREFIX}/include
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,57 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP=..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = libdynload_s.lib
+OBJS = dynload.obj dynload_syms.obj
+
+$(TARGETS): $(OBJS)
+	echo Creating library $@ ...
+	lib $(ARFLAGS) /OUT:"$@" $(OBJS) > nul
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = libdynload_s.a
+OBJS = dynload_unix.o
+
+$(TARGETS):# $(OBJS)
+	echo Not building dynload: There is no dynload support on this platform.
+#	echo Creating library $@ ...
+#	$(AR) -rc $(ARFLAGS) "$@" $(OBJS)
+
+!ENDIF
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,113 @@
+dynload / abstraction to run-time shared library services:
+
+- loading/unloading into the current process
+- symbol lookup
+- enumerating symbol tables
+- elf: support for DT_GNU_HASH
+
+
+Todo:
+- a.out format
+- support for different kind of symbols
+  (exports,imports,sections,constants...)
+
+Notes on windows pe format:
+
+File Extension: dll
+
+Implementation:
+
+1. Access to internals
+   The handle returned by LoadLibrary() is a pointer to the PE header 
+   (which is a DOS header).
+
+
+Notes on elf:
+
+File Extension: so
+Variants: Two core classes are defined Elf 32- and 64-bit. 
+Only one model is compiled in the library (the current run-time format).
+
+Dynamic symbol table:
+
+Symbol table layout:
+1. Index 0 in any symbol table is used to represent undefined symbols.
+As such, the first entry in a symbol table (index 0) is always completely
+zeroed (type STT_NOTYPE), and is not used.
+
+2. If the file contains any local symbols, the second entry (index 1)
+the symbol table will be a STT_FILE symbol giving the name of the file.
+
+3. Section symbols.
+
+4. Register symbols.
+
+5. Global symbols that have been reduced to local scope via a mapfile.
+
+6. For each input file that supplied local symbols, a STT_FILE symbol
+   giving the name of the input file is put in the symbol table, 
+   followed by the symbols in question.
+
+7. The global symbols immediately follow the local symbols in the
+   symbol table. Local and global symbols are always kept separate
+   in this manner, and cannot be mixed together.
+
+
+Dynamic symbol table handling seem to be different among platforms.
+Due to System V ABI, one get access to the dynamic symbol table through
+the DT_HASH entry in "DYNAMIC" Program Header.
+
+It does not work on x86 on a x86_64 linux 2.6 machine.
+
+A closer look to the binaries in /usr/lib32 revealed, there are differences:
+
+differences
+ - elf32 has 21 sections
+ - elf64 has (21 + 2) sections
+     ".hash"
+     ".eh_frame_hdr"
+ -       elf64 has  ".rela.*" 
+   while elf32 has  ".rel.*"
+ 
+in common:
+ - both have a ".gnu.hash" section
+
+
+the ".gnu.hash" 
+
+
+Idea: "GNU hash" method ([3])
+
+
+Symbol Versioning:
+
+
+
+OS supported prelinking:
+
+linux has prelink
+irix has quickstart
+solaris has crle
+
+sparc uses STT_REGISTER:
+  STT_REGISTER is
+    The Sparc architecture has a concept known as a "register symbol". These
+    symbols are used to validate symbol/register usage, and can also be
+    used to initialize global registers. Other architectures don't use these.
+
+
+
+
+
+
+
+References:
+[1] Levin, R. John: Linkers & Loader
+[2] System V ABI
+[3] The cost of elf symbol hashing: http://blogs.sun.com/ali/entry/the_cost_of_elf_symbol 
+[4] GNU Hash ELF Section: http://blogs.sun.com/ali/entry/gnu_hash_elf_sections
+[5] http://refspecs.freestandards.org/LSB_3.2.0/LSB-Core-generic/LSB-Core-generic/symversion.html
+[6] elf: http://greek0.net/elf.html
+[7] System V ABI Application Binary Interface - Draft 17 - December 2003 (SCO) : 
+    http://sco.com/developers/gabi/latest/contents.html 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/TODO	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,20 @@
+- RTLD_LAZY in darwin, why not in unix?
+- Failed On Open Solaris 11:
+  
+In file included from dynload_syms.c:28:
+dynload_syms_elf.c:56: error: syntax error before "Elf_Dyn"
+dynload_syms_elf.c:56: warning: data definition has no type or storage class
+dynload_syms_elf.c: In function `dlSymsInit':
+dynload_syms_elf.c:155: error: `pDyn' undeclared (first use in this function)
+dynload_syms_elf.c:155: error: (Each undeclared identifier is reported only once
+dynload_syms_elf.c:155: error: for each function it appears in.)
+dynload_syms_elf.c:155: error: syntax error before ')' token
+dynload_syms_elf.c:160: error: `DT_NULL' undeclared (first use in this function)
+dynload_syms_elf.c:163: error: `DT_STRTAB' undeclared (first use in this function)
+dynload_syms_elf.c:164: error: `DT_SYMTAB' undeclared (first use in this function)
+dynload_syms_elf.c:165: error: `DT_HASH' undeclared (first use in this function)
+make: *** [dynload_syms.o] Error 1
+
+DONE:
+- remove dependencies dyncall_{alloc,macros}.h
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/dynload.3	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,64 @@
+.\" Copyright (c) 2007-2014 Daniel Adler <dadler AT uni-goettingen DOT de>, 
+.\"                         Tassilo Philipp <tphilipp AT potion-studios DOT com>
+.\" 
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.Dd $Mdocdate$
+.Dt dynload 3
+.Os
+
+.Sh NAME
+.Nm dynload
+.Nd encapsulates dynamic loading mechanisms and
+gives access to functions in foreign dynamic libraries and code modules.
+.Sh SYNOPSIS
+.In dynload.h
+.Ft DLLib *
+.Fn dlLoadLibrary "const char * libpath"
+.Ft void
+.Fn dlFreeLibrary "DLLib * pLib"
+.Ft void *
+.Fn dlFindSymbol "DLLib pLibode" "const char * pSymbolName"
+.Sh DESCRIPTION
+The
+.Nm
+library provides an interface to load foreign dynamic libraries and access
+to their symbols.
+.Pp
+.Fn dlLoadLibrary
+loads a dynamic library at
+.Ar libpath
+and returns a handle to it for use in
+.Fn dlFreeLibrary 
+and
+.Fn dlFindSymbol
+calls.
+.Pp
+.Fn dlFreeLibrary 
+frees the loaded library with handle
+.Ar pLib .
+.Pp
+.Fn dlFindSymbol
+returns a pointer to a symbol with name
+.Ar pSymbolName
+in the library with handle
+.Ar pLib ,
+or returns a null pointer if the symbol cannot be found.
+.Sh SEE ALSO
+.Xr dyncall 3 ,
+.Xr dyncallback 3
+and the dyncall manual (available in PDF format) for a way more detailed documentation of this
+library.
+.Sh AUTHORS
+.An "Daniel Adler" Aq dadler@uni-goettingen.de
+.An "Tassilo Philipp" Aq tphilipp@potion-studios.com
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/dynload.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,39 @@
+/*
+
+ Package: dyncall
+ Library: dynload
+ File: dynload/dynload.c
+ Description: Auto-include delegate to windows/posix-based dynamic linker.
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../autovar/autovar_OSFAMILY.h"
+#if defined(OSFAMILY_Windows)
+#  include "dynload_windows.c"
+#elif defined(OSFAMILY_Unix)
+#  include "../autovar/autovar_OS.h"
+#  if defined(OS_Darwin)
+#    include "dynload_darwin.c"
+#  else
+#    include "dynload_unix.c"
+#  endif
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/dynload.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,66 @@
+/*
+
+ Package: dyncall
+ Library: dynload
+ File: dynload/dynload.h
+ Description: public header for library dynload
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DYNLOAD_H
+#define DYNLOAD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef DL_API
+#define DL_API
+#endif
+
+/* --- public api ---------------------------------------------------------- */
+
+/* shared library loading and explicit symbol resolving */
+
+typedef struct DLLib_ DLLib;
+
+DL_API DLLib* dlLoadLibrary(const char* libpath);
+DL_API void   dlFreeLibrary(DLLib* pLib);
+DL_API void*  dlFindSymbol(DLLib* pLib, const char* pSymbolName);
+
+/* symbol table enumeration - only for symbol lookup, not resolve */
+
+typedef struct DLSyms_ DLSyms;
+
+DL_API DLSyms*     dlSymsInit   (const char* libPath);
+DL_API void        dlSymsCleanup(DLSyms* pSyms);
+
+DL_API int         dlSymsCount        (DLSyms* pSyms);
+DL_API const char* dlSymsName         (DLSyms* pSyms, int index);
+DL_API const char* dlSymsNameFromValue(DLSyms* pSyms, void* value); /* symbol must be loaded */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* DYNLOAD_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/dynload_alloc.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,41 @@
+/*
+
+ Package: dyncall
+ Library: dynload
+ File: dynload/dynload_alloc.h
+ Description: heap memory management interface (header only)
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DL_ALLOC_H
+#define DL_ALLOC_H
+
+#ifndef dlAllocMem
+#include <stdlib.h>
+#define dlAllocMem malloc
+#endif
+
+#ifndef dlFreeMem
+#define dlFreeMem  free
+#endif
+
+#endif /* DL_ALLOC_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/dynload_darwin.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,90 @@
+/*
+
+ Package: dyncall
+ Library: dynload
+ File: dynload/dynload_darwin.c
+ Description: dynload module for .dylib (mach-o darwin/OS X) files
+ License:
+
+   Copyright (c) 2007-2015 Olivier Chafik <olivier.chafik@gmail.com>
+                           Minor bug-fix modifications by Daniel Adler.
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dynload_darwin.c
+
+  dynload module for .dylib (mach-o darwin/OS X) files
+
+*/
+
+
+#include "dynload.h"
+#include "dynload_alloc.h"
+#include <dlfcn.h>
+#include <string.h>
+
+struct DLLib_
+{
+	char* libPath;
+	void* handle;
+};
+
+
+DLLib* dlLoadLibrary(const char* libPath)
+{
+	void* handle;
+	size_t len;
+	DLLib* lib;
+	
+	handle = dlopen(libPath, RTLD_LAZY);
+	if (!handle)
+		return NULL;
+
+      
+        lib = (DLLib*)dlAllocMem(sizeof(DLLib));
+        lib->handle = handle;
+        /* libPath might be null (self reference on image) [Daniel] */
+        if (libPath != NULL) {
+                len = strlen(libPath);
+                lib->libPath = (char*)dlAllocMem(len + 1);
+                strcpy(lib->libPath, libPath);
+                lib->libPath[len] = '\0';
+        } else {
+                lib->libPath = NULL;
+        }
+        return lib;
+}
+
+void* dlFindSymbol(DLLib* libHandle, const char* symbol)
+{
+  return dlsym(libHandle && libHandle->handle ? libHandle->handle : RTLD_DEFAULT, symbol);
+}
+
+
+void  dlFreeLibrary(DLLib* libHandle)
+{
+	if (!libHandle)
+		return;
+	
+	dlclose(libHandle->handle);
+        if (libHandle->libPath)
+	        dlFreeMem(libHandle->libPath);
+	dlFreeMem(libHandle);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/dynload_syms.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,39 @@
+/*
+
+ Package: dyncall
+ Library: dynload
+ File: dynload/dynload_syms.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dynload.h"
+#include "../autovar/autovar_ABI.h"
+#if defined(ABI_PE)
+#include "dynload_syms_pe.c"
+#elif defined(ABI_Mach)
+#include "dynload_syms_mach-o.c"
+#elif defined(ABI_ELF)
+#include "dynload_syms_elf.c"
+#else
+void dummy() { }
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/dynload_syms_elf.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,215 @@
+/*
+
+ Package: dyncall
+ Library: dynload
+ File: dynload/dynload_syms_elf.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>,
+                           Olivier Chafik <olivier.chafik@gmail.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../autovar/autovar_OS.h"
+
+/*
+ 
+ dynamic symbol resolver for elf
+
+*/
+
+#include "dynload.h"
+#if defined(OS_OpenBSD)
+#  include <stdint.h>
+#  include <elf_abi.h>
+#elif defined(OS_SunOS)
+#  include <libelf.h>
+#elif defined(OS_BeOS)
+#  include <elf32.h>
+#else
+#  include <elf.h>
+#endif
+
+#if defined(__GLIBC__)
+#  define _GNU_SOURCE
+#  define __USE_GNU
+#endif
+
+#include "dynload_alloc.h"
+
+#include <assert.h>
+#include <fcntl.h>
+#include <dlfcn.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <unistd.h> 
+
+/* run-time configuration 64/32 */
+#if defined(OS_OpenBSD)
+#else 
+#  include "../autovar/autovar_ABI.h"
+#  ifdef ABI_ELF64
+
+typedef Elf64_Ehdr   Elf_Ehdr;
+typedef Elf64_Phdr   Elf_Phdr;
+typedef Elf64_Shdr   Elf_Shdr;
+typedef Elf64_Sym    Elf_Sym;
+#    ifndef OS_SunOS
+typedef Elf64_Dyn    Elf_Dyn;
+#    endif
+typedef Elf64_Sxword Elf_tag;
+typedef Elf64_Addr   Elf_Addr;
+
+#  else
+#    if defined(OS_BeOS)
+typedef struct Elf32_Ehdr   Elf_Ehdr;
+typedef struct Elf32_Phdr   Elf_Phdr;
+typedef struct Elf32_Shdr   Elf_Shdr;
+typedef struct Elf32_Sym    Elf_Sym;
+typedef struct Elf32_Dyn    Elf_Dyn;
+typedef        Elf32_Sword  Elf_tag;
+typedef        Elf32_Addr   Elf_Addr;
+
+#    else
+
+typedef Elf32_Ehdr   Elf_Ehdr;
+typedef Elf32_Phdr   Elf_Phdr;
+typedef Elf32_Shdr   Elf_Shdr;
+typedef Elf32_Sym    Elf_Sym;
+#      ifndef OS_SunOS
+typedef Elf32_Dyn    Elf_Dyn;
+#      endif
+typedef Elf32_Sword  Elf_tag;
+typedef Elf32_Addr   Elf_Addr;
+
+#    endif
+#  endif
+#endif
+
+
+struct DLSyms_
+{
+  const char* pStrTab;
+  Elf_Sym*    pSymTab;
+  size_t      strTabSize;
+  size_t      nSymbols;
+  Elf_Ehdr*   pElf_Ehdr;	/* pointer to elf header */
+  int         file;			/* fd of lib */
+  size_t      fileSize;	    /* filesize of open lib */
+};
+
+
+DLSyms* dlSymsInit(const char* libPath)
+{
+  unsigned char* pMem;
+  void* pSectionContent;
+  int i;
+  struct stat st;
+  Elf_Shdr* pS;
+  DLSyms* pSyms = (DLSyms*)dlAllocMem(sizeof(DLSyms));
+  memset(pSyms, 0, sizeof(DLSyms));
+  pSyms->file = open(libPath, O_RDONLY);
+  stat(libPath, &st);
+  pSyms->fileSize = st.st_size;
+  pSyms->pElf_Ehdr = (Elf_Ehdr*) mmap((void*) NULL, pSyms->fileSize, PROT_READ, MAP_SHARED, pSyms->file, 0);
+
+#ifdef ABI_ELF32
+  assert(pSyms->pElf_Ehdr->e_ident[EI_CLASS] == ELFCLASS32);
+#else
+  assert(pSyms->pElf_Ehdr->e_ident[EI_CLASS] == ELFCLASS64);
+#endif
+
+  assert(pSyms->pElf_Ehdr->e_phoff > 0);
+  assert(pSyms->pElf_Ehdr->e_shoff > 0);
+
+
+  pMem = (unsigned char*)pSyms->pElf_Ehdr;
+  
+  /* traverse section headers */
+  pS = (Elf_Shdr*) ( pMem + pSyms->pElf_Ehdr->e_shoff );
+  /* skip section 0 which is always zero due to the Elf standard. */
+  for (i = 1; i < pSyms->pElf_Ehdr->e_shnum; i++) 
+  {
+    Elf_Shdr* pSection = &pS[i];
+    pSectionContent = ((char*)pMem) + pSection->sh_offset;
+    switch (pSection->sh_type)
+    {
+      case SHT_DYNSYM:
+        if (!pSyms->pSymTab) {
+          pSyms->pSymTab  = (Elf_Sym*)pSectionContent;
+          pSyms->nSymbols = pSection->sh_size / pSection->sh_entsize;
+        }
+        break;
+      case SHT_STRTAB:
+        // Do not trust pSyms->pElf_Ehdr->e_shstrndx!
+        if (!pSyms->pStrTab) {
+          pSyms->pStrTab  = (const char*)pSectionContent;
+          pSyms->strTabSize = pSection->sh_size;
+        }
+        break;
+    }
+    if (pSyms->pSymTab && pSyms->pStrTab)
+      break;
+  }
+  return pSyms;
+}
+
+
+void dlSymsCleanup(DLSyms* pSyms)
+{
+  if(pSyms) {
+    munmap((void*) pSyms->pElf_Ehdr, pSyms->fileSize);
+    close(pSyms->file);
+    dlFreeMem(pSyms);
+  }
+}
+
+
+int dlSymsCount(DLSyms* pSyms)
+{
+  if (!pSyms)
+    return 0;
+  return pSyms->nSymbols;
+}
+
+
+const char* dlSymsName(DLSyms* pSyms, int index)
+{
+  int str_index;
+  if(!pSyms || !pSyms->pSymTab || index < 0 || index >= pSyms->nSymbols)
+    return NULL;
+  
+  str_index = pSyms->pSymTab[index].st_name;
+  if (str_index < 0 || str_index >= pSyms->strTabSize)
+    return NULL;
+  return &pSyms->pStrTab[str_index];
+}
+
+
+const char* dlSymsNameFromValue(DLSyms* pSyms, void* value)
+{
+  Dl_info info;
+  return (dladdr(value, &info) && (value == info.dli_saddr))
+    ? info.dli_sname
+    : NULL;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/dynload_syms_mach-o.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,168 @@
+/*
+
+ Package: dyncall
+ Library: dynload
+ File: dynload/dynload_syms_mach-o.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Olivier Chafik <olivier.chafik@gmail.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+ 
+ dynamic symbol resolver for Mach-O
+
+*/
+
+#include "dynload.h"
+#include "dynload_alloc.h"
+
+#include <mach-o/dyld.h>
+#include <mach-o/nlist.h>
+#include <dlfcn.h>
+#include <string.h>
+
+#if defined(ARCH_X64) //@@@ use dyncall_macros.h
+#define MACH_HEADER_TYPE mach_header_64
+#define SEGMENT_COMMAND segment_command_64
+#define NLIST_TYPE nlist_64
+#else
+#define MACH_HEADER_TYPE mach_header
+#define SEGMENT_COMMAND segment_command
+#define NLIST_TYPE nlist
+#endif
+
+
+struct DLLib_
+{
+	char* libPath;
+	void* handle;
+};
+
+
+struct DLSyms_
+{
+	const char* pStringTable;
+	const struct NLIST_TYPE* pSymbolTable;
+	uint32_t symbolCount;
+};
+
+
+DLSyms* dlSymsInit(const char* libPath) 
+{
+	DLSyms* pSyms = NULL;
+	uint32_t iImage, nImages;
+	for (iImage = 0, nImages = _dyld_image_count(); iImage < nImages; iImage++)
+	{
+		const char* name = _dyld_get_image_name(iImage);
+		if (name && !strcmp(name, libPath))
+		{
+			const struct MACH_HEADER_TYPE* pHeader = (const struct MACH_HEADER_TYPE*) _dyld_get_image_header(iImage);
+			const char* pBase = ((const char*)pHeader);
+			if (pHeader->filetype != MH_DYLIB)
+				return NULL;
+			if (pHeader->flags & MH_SPLIT_SEGS)
+				return NULL;
+
+			if (pHeader)
+			{
+				uint32_t iCmd, nCmds = pHeader->ncmds;
+				const struct load_command* cmd = (const struct load_command*)(pBase + sizeof(struct MACH_HEADER_TYPE));
+				
+				for (iCmd = 0; iCmd < nCmds; iCmd++) 
+				{
+					if (cmd->cmd == LC_SYMTAB) 
+					{
+						const struct symtab_command* scmd = (const struct symtab_command*)cmd;
+					
+						pSyms = (DLSyms*)( dlAllocMem(sizeof(DLSyms)) );
+						pSyms->symbolCount = scmd->nsyms;
+						pSyms->pStringTable = pBase + scmd->stroff;
+						pSyms->pSymbolTable = (struct NLIST_TYPE*)(pBase + scmd->symoff);
+						
+						return pSyms;
+					}
+					cmd = (const struct load_command*)(((char*)cmd) + cmd->cmdsize);
+				}
+			}
+			break;
+		}
+	}
+	return NULL;
+}
+
+
+void dlSymsCleanup(DLSyms* pSyms)
+{
+	if (!pSyms)
+		return;
+	
+	dlFreeMem(pSyms);
+}
+
+int dlSymsCount(DLSyms* pSyms)
+{
+	if (!pSyms)
+		return 0;
+	return pSyms->symbolCount;
+}
+
+static const struct NLIST_TYPE* get_nlist(DLSyms* pSyms, int index)
+{
+	const struct NLIST_TYPE* nl;
+	if (!pSyms)
+		return NULL;
+	
+	nl = pSyms->pSymbolTable + index;
+	if (nl->n_un.n_strx <= 1)
+		return NULL; // would be empty string anyway
+	
+	//TODO skip more symbols based on nl->n_desc and nl->n_type ?
+	return nl;
+}
+
+
+const char* dlSymsName(DLSyms* pSyms, int index)
+{
+	const struct NLIST_TYPE* nl = get_nlist(pSyms, index);
+	if (!nl)
+		return NULL;
+	
+	return pSyms->pStringTable + nl->n_un.n_strx;
+}
+
+
+void* dlSymsValue(DLSyms* pSyms, int index)
+{
+	const struct NLIST_TYPE* nl = get_nlist(pSyms, index);
+	if (!nl)
+		return NULL;
+	
+	return (void*) (ptrdiff_t) (nl->n_value);
+}
+
+
+const char* dlSymsNameFromValue(DLSyms* pSyms, void* value)
+{
+	Dl_info info;
+	if (!dladdr(value, &info) || (value != info.dli_saddr))
+		return NULL;
+	
+	return info.dli_sname;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/dynload_syms_pe.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,110 @@
+/*
+
+ Package: dyncall
+ Library: dynload
+ File: dynload/dynload_syms_pe.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+                           Olivier Chafik <olivier.chafik@gmail.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "dynload.h"
+#include "dynload_alloc.h"
+
+#include <windows.h>
+
+struct DLLib_
+{
+  IMAGE_DOS_HEADER dos_header;
+};
+
+
+struct DLSyms_
+{
+  DLLib*                pLib;
+  const char*           pBase;
+  const DWORD*          pNames;
+  const DWORD*          pFuncs;
+  const unsigned short* pOrds;
+  size_t                count;
+};
+
+
+DLSyms* dlSymsInit(const char* libPath)
+{
+  DLLib* pLib = dlLoadLibrary(libPath);
+  DLSyms* pSyms = (DLSyms*)dlAllocMem(sizeof(DLSyms));
+  const char* base = (const char*) pLib;
+  IMAGE_DOS_HEADER*       pDOSHeader      = (IMAGE_DOS_HEADER*) base;  
+  IMAGE_NT_HEADERS*       pNTHeader       = (IMAGE_NT_HEADERS*) ( base + pDOSHeader->e_lfanew );  
+  IMAGE_DATA_DIRECTORY*   pExportsDataDir = &pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
+  IMAGE_EXPORT_DIRECTORY* pExports        = (IMAGE_EXPORT_DIRECTORY*) (base + pExportsDataDir->VirtualAddress);  
+
+  pSyms->pBase  = base;
+  pSyms->pNames = (DWORD*)(base + pExports->AddressOfNames);
+  pSyms->pFuncs = (DWORD*)(base + pExports->AddressOfFunctions);
+  pSyms->pOrds  = (unsigned short*)(base + pExports->AddressOfNameOrdinals);
+  pSyms->count  = (size_t)pExports->NumberOfNames;
+  pSyms->pLib   = pLib;
+
+  return pSyms;
+}
+
+
+void dlSymsCleanup(DLSyms* pSyms)
+{
+  if(pSyms) {
+    dlFreeLibrary(pSyms->pLib);
+    dlFreeMem(pSyms);
+  }
+}
+
+
+int dlSymsCount(DLSyms* pSyms)
+{
+  return (int)pSyms->count;
+}
+
+
+const char* dlSymsName(DLSyms* pSyms, int index)
+{
+  return (const char*)((const char*)pSyms->pBase + pSyms->pNames[index]);
+}
+
+
+void* dlSymsValue(DLSyms* pSyms, int index)
+{
+  return (void*)(pSyms->pBase + pSyms->pFuncs[pSyms->pOrds[index]]);
+}
+
+
+const char* dlSymsNameFromValue(DLSyms* pSyms, void* value) 
+{
+  int i, c=dlSymsCount(pSyms);
+  for(i=0; i<c; ++i)
+  {
+    if(dlSymsValue(pSyms, i) == value)
+      return dlSymsName(pSyms, i);
+  }
+
+  /* Not found. */
+  return NULL;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/dynload_unix.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,65 @@
+/*
+
+ Package: dyncall
+ Library: dynload
+ File: dynload/dynload_unix.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dynload_unix.c
+
+  dynload module for .so (unix) and .dylib (mach-o darwin/OS X) files
+
+*/
+
+
+#include "dynload.h"
+
+#include <dlfcn.h>
+
+
+DLLib* dlLoadLibrary(const char* libPath)
+{
+  return (DLLib*)dlopen(libPath,RTLD_NOW|RTLD_GLOBAL);
+}
+
+
+void* dlFindSymbol(DLLib* libHandle, const char* symbol)
+{
+  return dlsym((void*)libHandle, symbol);
+}
+
+
+void dlFreeLibrary(DLLib* libHandle)
+{
+
+  // Check for NULL for cross-platform consistency. *BSD seems
+  // to do that in dlclose, Linux does not. POSIX states "if handle
+  // does not refer to an open object, dlclose() returns a non-zero
+  // value", which unfortunately sounds like it's not explicitly
+  // specified.
+  if(libHandle)
+  	dlclose((void*)libHandle);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynload/dynload_windows.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,60 @@
+/*
+
+ Package: dyncall
+ Library: dynload
+ File: dynload/dynload_windows.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/*
+
+  dynload_windows.c
+
+  dynload module for .dll files
+
+*/
+
+
+#include "dynload.h"
+
+#include <windows.h>
+
+DLLib* dlLoadLibrary(const char* libPath)
+{
+  if (libPath != NULL) {
+    return (DLLib*) LoadLibraryA(libPath);
+    /*return (DLLib*) LoadLibraryA(libPath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);*/
+  } else {
+    return (DLLib*) GetModuleHandle(NULL);
+  }
+}
+
+void* dlFindSymbol(DLLib* libHandle, const char* symbol)
+{
+  return (void*) GetProcAddress( (HINSTANCE)libHandle, symbol);
+}
+
+void  dlFreeLibrary(DLLib* libHandle)
+{
+  FreeLibrary( (HINSTANCE)libHandle );
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,36 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+TOP = .
+
+<$TOP/buildsys/mk/prolog.mk
+
+# directories:
+DIRS  = dyncall dyncallback
+AUTOS = ConfigVars
+
+#.PHONY: tests doc
+tests:V:
+	cd test; $MK
+doc:V:
+	cd $target/manual; $MK
+
+<$TOP/buildsys/mk/epilog.mk
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/portasm/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,42 @@
+portasm - a toolkit for writing portable generic assembler sources 
+------------------------------------------------------------------
+
+Copyright (C) 2011 Daniel Adler <dadler@uni-goettingen.de>.
+Licensed under BSD two-clause license.
+
+
+Requirements
+------------
+- C Preprocessor
+
+
+Supported Architectures and Tool-chains:
+----------------------------------------
+
+- x86: gas, apple as, masm
+- x64: gas, apple as, masm
+- ppc: gas, apple as
+- arm: gas, apple as
+
+
+Usage:
+------
+
+Implement assembler sources in *.S files which use C preprocessor.
+#include portasm-<ARCH>.S at front
+
+In order to generate MASM files for X86 and X64, run 
+  'gen-masm.sh <name>' script which reads <name>.S and outputs <name>.masm file.
+
+
+Common Macros:
+--------------
+
+BEGIN_ASM
+END_ASM
+BEGIN_PROC(name)
+END_PROC(name)
+GLOBAL(name)
+HEX(value)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/portasm/gen-masm.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+#!/bin/sh
+gcc -E -P -DGEN_MASM $1.S >$1.asm
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/portasm/portasm-arm.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,37 @@
+/*
+
+ Package: dyncall
+ Library: portasm
+ File: portasm/portasm-arm.S
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#define BEGIN_ASM	.text
+#include "../autovar/autovar_OS.h"
+#if defined(OS_Darwin)
+#define GLOBAL_C(X) .globl _##X
+#define ENTRY_C(X) _##X:
+#else
+#define GLOBAL_C(X) .globl X
+#define ENTRY_C(X) X:
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/portasm/portasm-ppc.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,99 @@
+/*
+
+ Package: dyncall
+ Library: portasm
+ File: portasm/portasm-ppc.S
+ Description: Portable Assembler Macros for ppc
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../autovar/autovar_OS.h"
+#if defined(OS_Darwin)
+#define GLOBAL_C(X) .globl _##X 
+#define ENTRY_C(X)  _##X:
+#else
+#define GLOBAL_C(X) .globl X 
+#define ENTRY_C(X) X:
+#define r0 0
+#define r1 1
+#define r2 2
+#define r3 3
+#define r4 4
+#define r5 5
+#define r6 6
+#define r7 7
+#define r8 8
+#define r9 9
+#define r10 10
+#define r11 11
+#define r12 12
+#define r13 13
+#define r14 14
+#define r15 15
+#define r16 16
+#define r17 17
+#define r18 18
+#define r19 19
+#define r20 20
+#define r21 21
+#define r22 22
+#define r23 23
+#define r24 24
+#define r25 25
+#define r26 26
+#define r27 27
+#define r28 28
+#define r29 29
+#define r30 30
+#define r31 31
+#define f0 0
+#define f1 1
+#define f2 2
+#define f3 3
+#define f4 4
+#define f5 5
+#define f6 6
+#define f7 7
+#define f8 8
+#define f9 9
+#define f10 10
+#define f11 11
+#define f12 12
+#define f13 13
+#define f14 14
+#define f15 15
+#define f16 16
+#define f17 17
+#define f18 18
+#define f19 19
+#define f20 20
+#define f21 21
+#define f22 22
+#define f23 23
+#define f24 24
+#define f25 25
+#define f26 26
+#define f27 27
+#define f28 28
+#define f29 29
+#define f30 30
+#define f31 31
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/portasm/portasm-x64-att.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,156 @@
+/*
+
+ Package: dyncall
+ Library: portasm
+ File: portasm/portasm-x64-att.S
+ Description: Portable Assembler Macros for X64
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/* Common macros. */
+#define XCONCAT(A,B) A##B
+#if defined(GEN_MASM)
+/* MASM syntax. */
+.CODE
+#  define BEGIN_ASM
+#  define END_ASM END
+#  define GLOBAL(X) X PROC
+#  define BEGIN_PROC(X) 	OPTION PROLOGUE:NONE, EPILOGUE:NONE
+#  define END_PROC(X)   X ENDP
+#  define PUSH(R) push R
+#  define POP(R) pop R
+#  define MOV(S,D)  mov D,S
+#  define MOVB(S,D) mov D,S
+#  define MOVL(S,D) mov D,S
+#  define ADDL(S,D) add D,S
+#  define ANDL(S,D) and D,S
+#  define SUBL(S,D) sub D,S
+#  define SHRL(S,D) shr D,S
+#  define MOVQ(S,D) movq D,S
+#  define ADD(S,D)  add D,S
+#  define AND(S,D)  and D,S
+#  define SUB(S,D)  sub D,S
+#  define SHR(S,D)  shr D,S
+#  define MOVD(S,D) movd D,S
+#  define RET() ret
+#  define CALL_DWORD(R,OFF) call DWORD(R,OFF)
+#  define REP(X) rep X
+#  define MOVSB movsb
+#  define MOVSW movsw
+#  define MOVSD(S,D)  movsd D,S
+#  define MOVSDX(S,D) movsdx D,S
+#  define DWORD(R,OFF) dword ptr [R+OFF]
+#  define QWORD(R,OFF) qword ptr [R+OFF]
+#  define LIT(X) X
+#  define INT(X) int X
+#  define HEX(X) XCONCAT(X,h)
+#  define CALL(X) call X
+#  define CALL_REG(X) call X
+#  define LEA(S,D) lea D,S
+#  define SET(K,V) K = V
+#  define JE(X) je X
+#  define JNE(X) jne X
+#  define CMP(A,B) cmp B,A
+#  define LOCAL(X) X
+#else
+/* GNU/SunPro Assembler AT&T Syntax */
+	.text
+#  define BEGIN_ASM
+#  define END_ASM
+#  include "../autovar/autovar_OS.h"
+#  if defined (OS_Darwin)
+#    define CSYM(X) _##X
+#  else
+#    define CSYM(X) X
+#  endif
+#  define RAX %rax
+#  define RBX %rbx
+#  define RCX %rcx
+#  define RDX %rdx
+#  define RSI %rsi
+#  define RDI %rdi
+#  define RBP %rbp
+#  define RSP %rsp
+#  define R8   %r8
+#  define R9   %r9
+#  define R10  %r10
+#  define R11  %r11
+#  define R12  %r12
+#  define R13  %r13
+#  define R14  %r14
+#  define R15  %r15
+#  define XMM0 %xmm0
+#  define XMM1 %xmm1
+#  define XMM2 %xmm2
+#  define XMM3 %xmm3
+#  define XMM4 %xmm4
+#  define XMM5 %xmm5
+#  define XMM6 %xmm6
+#  define XMM7 %xmm7
+#  define AL   %al
+#  define AH   %ah
+#  define BL   %bl
+#  define BH   %bh
+#  define CL   %cl
+#  define CH   %ch
+#  define DL   %dl
+#  define DH   %dh
+#  define GLOBAL(X) .globl CSYM(X)
+#  define BEGIN_PROC(X)  CSYM(X):
+#  define END_PROC(X)
+#  define PUSH(R) pushq R
+#  define POP(R) popq R
+#  define MOV(S,D)  movq S,D
+#  define MOVB(S,D) movb S,D
+#  define MOVL(S,D) movl S,D
+#  define ADDL(S,D) addl S,D
+#  define ANDL(S,D) andl S,D
+#  define SUBL(S,D) subl S,D
+#  define SHRL(S,D) shrl S,D
+#  define MOVQ(S,D) movq S,D
+#  define ADD(S,D) addq S,D
+#  define AND(S,D) andq S,D
+#  define SUB(S,D) subq S,D
+#  define SHR(S,D) shrq S,D
+#  define MOVD(S,D) movd S,D
+#  define RET() ret
+#  define CALL_DWORD(R,OFF) call *DWORD(R,OFF)
+#  define REP(X) rep X
+#  define MOVSB movsb
+#  define MOVSW movsw
+#  define MOVSD(S,D) movsd S,D
+#  define DWORD(R,OFF) OFF(R)
+#  define QWORD(R,OFF) OFF(R)
+#  define LIT(X) $X
+#  define INT(X) int X
+#  define HEX(X) XCONCAT(0x,X)
+#  define CALL(X) call X
+#  define CALL_REG(X) call *X
+#  define LEA(A,B) lea A,B
+#  define CMP(A,B) cmp A,B
+#  define CMPB(A,B) cmpb A,B
+#  define JE(X)    je X
+#  define JNE(X)    jne X
+#  define FLDS(X)  flds X
+#  define FLDL(X)  fldl X
+#  define SET(K,V) .set K,V
+#  define LOCAL(X) .X
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/portasm/portasm-x86.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,128 @@
+/*
+
+ Package: dyncall
+ Library: portasm
+ File: portasm/portasm-x86.S
+ Description: Portable Assembler Macros for x86
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/* Common macros. */
+#define XCONCAT(A,B) A##B
+/* MASM syntax. */
+#if defined(GEN_MASM)
+.386
+.MODEL FLAT
+.CODE
+#  define BEGIN_ASM
+#  define END_ASM END
+#  define GLOBAL(X) _##X PROC
+#  define BEGIN_PROC(X) 	OPTION PROLOGUE:NONE, EPILOGUE:NONE
+#  define END_PROC(X)   _##X ENDP
+#  define PUSH(R) push R
+#  define POP(R) pop R
+#  define MOVL(S,D) mov D,S
+#  define ADDL(S,D) add D,S
+#  define ANDL(S,D) and D,S
+#  define SUBL(S,D) sub D,S
+#  define SHRL(S,D) shr D,S
+#  define RET() ret
+#  define CALL_DWORD(R,OFF) call DWORD(R,OFF)
+#  define REP(X) rep X
+#  define MOVSB movsb
+#  define MOVSW movsw
+#  define MOVSD movsd
+#  define DWORD(R,OFF) dword ptr [R+OFF]
+#  define QWORD(R,OFF) qword ptr [R+OFF]
+#  define LIT(X) X
+#  define INT(X) int X
+#  define HEX(X) XCONCAT(X,h)
+#  define CALL(X) call X
+#  define LEA(S,D) lea D,S
+#  define ADD(S,D) add D,S
+#  define CMP(S,D) cmp D,S
+#  define JE(T) je T
+#  define FLDS(OP) fld OP
+#  define FLDL(OP) fld OP
+#  define LOCAL(NAME) NAME
+#else
+/* GNU/SunPro Assembler AT&T Syntax */
+	.text
+#  define BEGIN_ASM
+#  define END_ASM 
+#  include "../autovar/autovar_OS.h"
+#  if defined(OS_Win32) || defined(OS_Cygwin) || defined(OS_MinGW) || defined(OS_Darwin) || defined(OS_Minix)
+#    define CSYM(X) _##X
+#  else
+#    define CSYM(X) X
+#  endif
+/* Systems that work without '%' prefix: MinGW,Apple */
+#  define EAX %eax
+#  define EBX %ebx
+#  define ECX %ecx
+#  define EDX %edx
+#  define ESI %esi
+#  define EDI %edi
+#  define EBP %ebp
+#  define ESP %esp
+#  define AL  %al
+#  define AH  %ah
+#  define BL  %bl
+#  define BH  %bh
+#  define CL  %cl
+#  define CH  %ch
+#  define DL  %dl
+#  define DH  %dh
+#  define GLOBAL(X) .globl CSYM(X)
+#  define BEGIN_PROC(X)  CSYM(X):
+#  define END_PROC(X)
+#  define PUSH(R) pushl R
+#  define POP(R) popl R
+#  define MOVL(S,D) movl S,D
+#  define ADDL(S,D) addl S,D
+#  define ANDL(S,D) andl S,D
+#  define SUBL(S,D) subl S,D
+#  define SHRL(S,D) shrl S,D
+#  define RET() ret
+#  define CALL_DWORD(R,OFF) call *DWORD(R,OFF)
+#  define REP(X) rep; X
+#  define MOVSB movsb
+#  define MOVSW movsw
+#  define MOVSD movsd
+#  define DWORD(R,OFF) OFF(R)
+#  define QWORD(R,OFF) OFF(R)
+#  include "../autovar/autovar_CC.h"
+#  if defined CC_SUN
+#    define LIT(X) $X
+#  else
+#    define LIT(X) XCONCAT($,X)
+#  endif
+#  define INT(X) int X
+#  define HEX(X) XCONCAT(0x,X)
+#  define CALL(X) call X
+#  define LEA(A,B) lea A,B
+#  define CMP(A,B) cmp A,B
+#  define JE(X)    je X
+#  define FLDS(X)  flds X
+#  define FLDL(X)  fldl X
+#  define ADD(A,B) add A,B
+#  define LOCAL(X) .X
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,31 @@
+include_directories(
+  ${PROJECT_SOURCE_DIR}/dynload
+  ${PROJECT_SOURCE_DIR}/dyncall
+  ${PROJECT_SOURCE_DIR}/dyncallback
+)
+add_subdirectory(suite)
+add_subdirectory(ellipsis)
+add_subdirectory(suite2)
+add_subdirectory(callf)
+add_subdirectory(plain)
+add_subdirectory(plain_c++)
+add_subdirectory(suite3)
+add_subdirectory(suite_floats)
+add_subdirectory(callback_suite)
+add_subdirectory(thunk)
+add_subdirectory(malloc_wx)
+add_subdirectory(callback_plain)
+add_subdirectory(sharedlib)
+add_subdirectory(nm)
+
+if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86")
+add_subdirectory(suite_x86win32fast)
+add_subdirectory(suite_x86win32std)
+add_subdirectory(suite2_x86win32fast)
+add_subdirectory(suite2_x86win32std)
+endif()
+
+if(${UNIX})
+add_subdirectory(syscall)
+endif()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,62 @@
+#include "../buildsys/dynmake/Makefile.base.M"
+
+all:
+	cd plain                       _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd plain_c++                   _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd call_suite                  _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd suite                       _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd suite2                      _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd suite3                      _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd suite_floats                _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd callback_plain              _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd callback_suite              _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd ellipsis                    _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd callf                       _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd nm                          _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd resolve_self                _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd thunk                       _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd malloc_wx                   _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+#if defined(DC__Arch_Intel_x86)
+	cd syscall                     _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd suite_x86win32fast          _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd suite_x86win32std           _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd suite2_x86win32fast         _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+	cd suite2_x86win32std          _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+#endif
+//	cd gen-masm                    _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+//	cd hacking-arm-thumb-interwork _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+//	cd hacking-mips                _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+//	cd samples                     _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+//	cd sharedlib                   _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+//	cd sign                        _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE)
+
+clean:
+	cd plain                       _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd plain_c++                   _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd call_suite                  _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd suite                       _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd suite2                      _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd suite3                      _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd suite_floats                _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd callback_plain              _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd callback_suite              _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd ellipsis                    _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd callf                       _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd nm                          _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd resolve_self                _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd thunk                       _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd malloc_wx                   _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+#if defined(DC__Arch_Intel_x86)
+	cd syscall                     _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd suite_x86win32fast          _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd suite_x86win32std           _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd suite2_x86win32fast         _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+	cd suite2_x86win32std          _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+#endif
+//	cd gen-masm                    _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+//	cd hacking-arm-thumb-interwork _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+//	cd hacking-mips                _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+//	cd samples                     _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+//	cd sharedlib                   _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+//	cd sign                        _(SHELL_COMMAND_SEPARATOR) _(MAKE) _(MAKEFLAGS_USER) _(MAKEFLAG_FILE) _(MAKE_DEFAULT_FILE) clean
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,109 @@
+MAKEFILE = Makefile.embedded
+MAKE_CMD = ${MAKE} -f ${MAKEFILE} 
+all: all-dyncall all-dyncallback all-dynload
+all-dynload:
+	cd nm && ${MAKE_CMD}
+	cd resolve_self && ${MAKE_CMD}
+all-dyncall:
+	cd suite && ${MAKE_CMD}
+	cd call_suite && ${MAKE_CMD}
+	cd suite2 && ${MAKE_CMD}
+	cd suite3 && ${MAKE_CMD}
+	cd suite_floats && ${MAKE_CMD}
+	cd callf && ${MAKE_CMD}
+	cd plain && ${MAKE_CMD}
+	cd plain_c++ && ${MAKE_CMD}
+	cd ellipsis && ${MAKE_CMD}
+all-dyncallback:
+	cd thunk && ${MAKE_CMD}
+	cd malloc_wx && ${MAKE_CMD}
+	cd callback_plain && ${MAKE_CMD}
+	cd callback_suite && ${MAKE_CMD}
+all-c:
+	cd plain && ${MAKE_CMD}
+	cd syscall && ${MAKE_CMD}
+	cd suite && ${MAKE_CMD}
+	cd call_suite && ${MAKE_CMD}
+	cd callf && ${MAKE_CMD}
+	cd nm && ${MAKE_CMD}
+	cd resolve_self && ${MAKE_CMD}
+	cd thunk && ${MAKE_CMD}
+	cd malloc_wx && ${MAKE_CMD}
+	cd callback_plain && ${MAKE_CMD}
+	cd callback_suite && ${MAKE_CMD}
+all-win32:
+	cd suite_x86win32std  && ${MAKE_CMD}
+	cd suite_x86win32fast && ${MAKE_CMD}
+	cd suite2_x86win32std && ${MAKE_CMD}
+	cd suite2_x86win32fast && ${MAKE_CMD}
+run-all-win32:
+	suite_X86win32std/suite_x86win32std
+	suite_X86win32fast/suite_x86win32fast
+	suite2_X86win32std/suite2_x86win32std
+	suite2_X86win32fast/suite2_x86win32fast
+all-unix:
+	cd syscall && ${MAKE_CMD}
+clean:
+	cd plain && ${MAKE_CMD} clean
+	cd plain_c++ && ${MAKE_CMD} clean
+	cd syscall && ${MAKE_CMD} clean
+	cd suite && ${MAKE_CMD} clean
+	cd call_suite && ${MAKE_CMD} clean
+	cd suite2 && ${MAKE_CMD} clean
+	cd suite3 && ${MAKE_CMD} clean
+	cd suite_floats && ${MAKE_CMD} clean
+	cd callback_plain && ${MAKE_CMD} clean
+	cd callback_suite && ${MAKE_CMD} clean
+	cd ellipsis && ${MAKE_CMD} clean
+	cd callf && ${MAKE_CMD} clean
+	cd nm && ${MAKE_CMD} clean
+	cd resolve_self && ${MAKE_CMD} clean
+	cd thunk && ${MAKE_CMD} clean
+	cd malloc_wx && ${MAKE_CMD} clean
+	cd syscall && ${MAKE_CMD} clean
+bsd:
+	LDLIBS="${LDLIBS} -lm" ${MAKE_CMD} all
+linux:
+	LDLIBS="${LDLIBS} -lm -ldl" ${MAKE_CMD} all
+linux64:
+	CFLAGS="${CFLAGS} -m64" CXXFLAGS="${CXXFLAGS} -m64" CCFLAGS="${CXXFLAGS} -m64" LDFLAGS="${LDFLAGS} -m64" LDLIBS="${LDLIBS} -lm -ldl" ${MAKE_CMD} all-c
+mingw32:
+	${MAKE_CMD} CC="gcc" all
+osx:
+	${MAKE_CMD} all
+osx-template:
+	CC="${CC} ${OSX_ARCH}" AS="${AS} ${OSX_ARCH}" CXX="${CXX} ${OSX_ARCH}" ${MAKE_CMD}
+osx-universal:
+	OSX_ARCH="-arch i386 -arch x86_64" ${MAKE_CMD} osx-template
+osx-i386:
+	OSX_ARCH="-arch i386" ${MAKE_CMD} osx-template
+sun:
+	CXX=CC LDLIBS="${LDLIBS} -lm" ${MAKE_CMD} all
+sun-64bit:
+	CXX=CC CFLAGS="${CFLAGS} -m64" CXXFLAGS="${CXXFLAGS} -m64" CCFLAGS="${CXXFLAGS} -m64" LDFLAGS="${LDFLAGS} -m64" LDLIBS="${LDLIBS} -lm" ${MAKE_CMD} all
+sun-gcc:
+	CC=gcc CCC=g++ CXX=g++ LDLIBS="${LDLIBS} -lm" ${MAKE_CMD} all
+sun-gcc-64bit:
+	CC=gcc CCC=g++ CXX=g++ CFLAGS="${CFLAGS} -m64" CXXFLAGS="${CXXFLAGS} -m64" CCFLAGS=-m64 LDFLAGS="${LDFLAGS} -m64" LDLIBS="${LDLIBS} -lm" ${MAKE_CMD} all
+ios-sdkroot:
+	\
+  CC="${CC} ${IOS_ARCH} -miphoneos-version-min=${IOS_SDK}"\
+  CXX="${CXX} ${IOS_ARCH} -miphoneos-version-min=${IOS_SDK}"\
+  LD="${LD} ${IOS_ARCH} -miphoneos-version-min=${IOS_SDK}"\
+  ASFLAGS="-isysroot ${IOS_SDKROOT}"\
+  CFLAGS="-isysroot ${IOS_SDKROOT}"\
+  CXXFLAGS="-isysroot ${IOS_SDKROOT}"\
+  LDFLAGS="-Wl,-syslibroot ${IOS_SDKROOT}"\
+  ${MAKE_CMD} all  
+ios:
+	IOS_SDKROOT="`xcode-select -print-path`/Platforms/iPhone${IOS_PLATFORM}.platform/Developer/SDKs/iPhone${IOS_PLATFORM}${IOS_SDK}.sdk" ${MAKE_CMD} ios-sdkroot
+ios-sim:
+	IOS_PLATFORM="Simulator" ${MAKE_CMD} ios
+ios-os:
+	IOS_PLATFORM="OS"        ${MAKE_CMD} ios
+ios61-os:
+	IOS_SDK="6.1" IOS_ARCH="-arch armv7"            ${MAKE_CMD} ios-os
+ios61-os-no-thumb:
+	IOS_SDK="6.1" IOS_ARCH="-arch armv7 -mno-thumb" ${MAKE_CMD} ios-os
+ios61-sim:
+	IOS_SDK="6.1" IOS_ARCH="-arch i386"             ${MAKE_CMD} ios-sim
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,83 @@
+ALL=call_suite callback_suite plain plain_c++ suite suite2 suite3 suite_floats ellipsis callf syscall nm resolve_self thunk malloc_wx callback_plain
+PACK=call_suite callback_suite plain plain_c++ suite suite2 suite3 suite_floats ellipsis callf resolve_self callback_plain
+ALL_C=plain call_suite suite callf syscall nm resolve_self thunk malloc_wx callback_plain callback_suite
+.PHONY: all clean run-tests install distclean ${ALL} 
+all clean install: 
+	${MAKE} TARGET=$@ ${ALL}
+${ALL}::
+	cd $@ && ${MAKE} ${TARGET}
+run-tests: all
+	${VPATH}/run-build.sh ${ALL} | grep "result:"
+all-c:
+	cd plain && ${MAKE}
+	cd call_suite && ${MAKE}
+	cd suite && ${MAKE}
+	cd callf && ${MAKE}
+	cd syscall && ${MAKE}
+	cd nm && ${MAKE}
+	cd resolve_self && ${MAKE}
+	cd thunk && ${MAKE}
+	cd malloc_wx && ${MAKE}
+	cd callback_plain && ${MAKE}
+	cd callback_suite && ${MAKE}
+all-win32:
+	cd suite_x86win32std  && ${MAKE}
+	cd suite_x86win32fast && ${MAKE}
+	cd suite2_x86win32std && ${MAKE}
+	cd suite2_x86win32fast && ${MAKE}
+run-win32:
+	suite_X86win32std/suite_x86win32std
+	suite_X86win32fast/suite_x86win32fast
+	suite2_X86win32std/suite2_x86win32std
+	suite2_X86win32fast/suite2_x86win32fast
+all-dyncall:
+	cd plain && ${MAKE}
+	cd plain_c++ && ${MAKE}
+	cd call_suite && ${MAKE}
+	cd suite && ${MAKE}
+	cd suite2 && ${MAKE}
+	cd suite3 && ${MAKE}
+	cd suite_floats && ${MAKE}
+	cd ellipsis && ${MAKE}
+	cd callf && ${MAKE}
+	cd syscall && ${MAKE}
+run-dyncall:
+	plain/plain
+	plain_c++/plain_c++
+	call_suite/call_suite
+	suite/suite
+	suite2/suite2
+	suite3/suite3
+	suite_floats/suite_floats
+	ellipsis/ellipsis
+	callf/callf
+	syscall/syscall
+# BUG: need to disable on sparc: testStructSize not found
+#	cd plain && ${MAKE}
+all-dynload:
+	cd nm && ${MAKE}
+	cd resolve_self && ${MAKE}
+run-dynload:
+	#nm/nm
+	resolve_self/resolve_self
+all-dyncallback:
+	cd thunk && ${MAKE}
+	cd malloc_wx && ${MAKE}
+	cd callback_plain && ${MAKE}
+	cd callback_suite && ${MAKE}
+run-dyncallback:
+	thunk/thunk
+	malloc_wx/malloc_wx
+	callback_plain/callback_plain
+	callback_suite/callback_suite
+
+linux:
+	LDLIBS="-lm -ldl" ${MAKE} all
+bsd:
+	LDLIBS="-lm" ${MAKE} all
+
+pack: ${PACK}
+	${VPATH}/pack-tests.sh ${PACK}
+
+distclean:
+	rm -rf _work _packed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,39 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007-2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..  
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+DIRS = call_suite suite suite2 suite3 suite_floats callf ellipsis plain plain_c++ nm resolve_self thunk malloc_wx callback_plain callback_suite
+!IF "$(BUILD_ARCH)" == "x86"
+DIRS = $(DIRS) suite_x86win32fast suite_x86win32std suite2_x86win32fast suite2_x86win32std
+!ENDIF
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/arm-thumb-interwork/Makefile-default.config	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,6 @@
+# auto-generated by ./configure
+PREFIX=/usr/local
+ASFLAGS=
+CFLAGS=-fPIC 
+CXXFLAGS=-fPIC 
+LDLIBS=-lm -ldl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/arm-thumb-interwork/Makefile-thumb.config	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,6 @@
+# auto-generated by ./configure
+PREFIX=/usr/local
+ASFLAGS=-mthumb
+CFLAGS=-fPIC -mthumb
+CXXFLAGS=-fPIC -mthumb
+LDLIBS=-lm -ldl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/arm-thumb-interwork/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+This tests arm/thumb interwork.
+Run build.sh from top-level build directory.
+
+1. dyncall is compiled as default using Makefile-default.config
+2. tests are compiled with -mthumb using Makefile-thumb.config
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/arm-thumb-interwork/build.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,5 @@
+cp buildsys/arm-thumb-interwork/Makefile-default.config Makefile.config
+make clean all
+cp buildsys/arm-thumb-interwork/Makefile-thumb.config Makefile.config
+cd test && make all
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,25 @@
+TARGET	= call_suite ${OBJS} 
+OBJS	= globals.o invoke.o cases.o main.o
+
+SRCDIR 	= ../..
+BLDDIR 	= ${SRCDIR}
+LUA	= lua
+
+CPPFLAGS	+= -I${SRCDIR}/dyncall
+LDFLAGS		+= -L${BLDDIR}/dyncall
+LDLIBS		+= -ldyncall_s
+
+.PHONY: all clean config config-random
+
+all: ${TARGET}
+call_suite: ${OBJS}
+	${CC} ${OBJS} ${LDFLAGS} ${LDLIBS} -o $@
+config:
+	${LUA} mk-cases.lua <design.txt >cases.h
+config-random: 
+	${LUA} rand-sig.lua >cases.txt
+	${LUA} mk-cases.lua <cases.txt >cases.h
+cases.o: cases.h 
+clean:
+	rm -f ${TARGET}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,21 @@
+APP     = call_suite
+OBJS    = globals.o invoke.o cases.o main.o
+SRCTOP  = ${VPATH}/../..
+BLDTOP  = ../..
+CFLAGS += -I${SRCTOP}/dyncall
+LDLIBS += -L${BLDTOP}/dyncall -ldyncall_s 
+LUA     = lua
+.PHONY: all clean install config config-random
+all: ${APP}
+${APP}: ${OBJS} 
+	${CC} ${CFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP} 
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+config:
+	${LUA} mk-cases.lua <design.txt >cases.h
+config-random: 
+	${LUA} rand-sig.lua >cases.txt
+	${LUA} mk-cases.lua <cases.txt >cases.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,69 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2011 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+AUTOS = cases.h
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = call_suite.exe
+OBJS = main.obj cases.obj globals.obj invoke.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = call_suite.nds
+OBJS = main.o cases.o globals.o invoke.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+
+$(OBJS): $(AUTOS)
+
+$(AUTOS): mk-cases.lua
+	lua mk-cases.lua <cases.txt >cases.h
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,2 @@
+call_suite for dyncall written in C and Lua.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/cases.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,52 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/call_suite/cases.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "globals.h"
+
+#define ret_v(X) 
+#define ret_c(X) return(K_c[X]);
+#define ret_s(X) return(K_s[X]);
+#define ret_i(X) return(K_i[X]);
+#define ret_j(X) return(K_j[X]);
+#define ret_l(X) return(K_l[X]);
+#define ret_p(X) return(K_p[X]);
+#define ret_f(X) return(K_f[X]);
+#define ret_d(X) return(K_d[X]);
+extern int fid;
+
+#define v void
+#define c char
+#define s short
+#define i int
+#define j long
+#define l long long
+#define p void*
+#define f float
+#define d double
+
+#include "cases.h"
+
+int G_ncases = sizeof(G_sigtab)/sizeof(G_sigtab[0]);
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/cases.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,330 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/call_suite/cases.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* 1:jifjdidpslfdfpifdflclcsjfjsdd */ j f1(i a1,f a2,j a3,d a4,i a5,d a6,p a7,s a8,l a9,f a10,d a11,f a12,p a13,i a14,f a15,d a16,f a17,l a18,c a19,l a20,c a21,s a22,j a23,f a24,j a25,s a26,d a27,d a28){fid=1;V_i[1]=a1;V_f[2]=a2;V_j[3]=a3;V_d[4]=a4;V_i[5]=a5;V_d[6]=a6;V_p[7]=a7;V_s[8]=a8;V_l[9]=a9;V_f[10]=a10;V_d[11]=a11;V_f[12]=a12;V_p[13]=a13;V_i[14]=a14;V_f[15]=a15;V_d[16]=a16;V_f[17]=a17;V_l[18]=a18;V_c[19]=a19;V_l[20]=a20;V_c[21]=a21;V_s[22]=a22;V_j[23]=a23;V_f[24]=a24;V_j[25]=a25;V_s[26]=a26;V_d[27]=a27;V_d[28]=a28;ret_j(28)}
+/* 2:fdsdcjjjjlpd */ f f2(d a1,s a2,d a3,c a4,j a5,j a6,j a7,j a8,l a9,p a10,d a11){fid=2;V_d[1]=a1;V_s[2]=a2;V_d[3]=a3;V_c[4]=a4;V_j[5]=a5;V_j[6]=a6;V_j[7]=a7;V_j[8]=a8;V_l[9]=a9;V_p[10]=a10;V_d[11]=a11;ret_f(11)}
+/* 3:jlisplppcdifsjfsjcliipfpcpj */ j f3(l a1,i a2,s a3,p a4,l a5,p a6,p a7,c a8,d a9,i a10,f a11,s a12,j a13,f a14,s a15,j a16,c a17,l a18,i a19,i a20,p a21,f a22,p a23,c a24,p a25,j a26){fid=3;V_l[1]=a1;V_i[2]=a2;V_s[3]=a3;V_p[4]=a4;V_l[5]=a5;V_p[6]=a6;V_p[7]=a7;V_c[8]=a8;V_d[9]=a9;V_i[10]=a10;V_f[11]=a11;V_s[12]=a12;V_j[13]=a13;V_f[14]=a14;V_s[15]=a15;V_j[16]=a16;V_c[17]=a17;V_l[18]=a18;V_i[19]=a19;V_i[20]=a20;V_p[21]=a21;V_f[22]=a22;V_p[23]=a23;V_c[24]=a24;V_p[25]=a25;V_j[26]=a26;ret_j(26)}
+/* 4:cjsjpcjsipcfccljpcpplsslji */ c f4(j a1,s a2,j a3,p a4,c a5,j a6,s a7,i a8,p a9,c a10,f a11,c a12,c a13,l a14,j a15,p a16,c a17,p a18,p a19,l a20,s a21,s a22,l a23,j a24,i a25){fid=4;V_j[1]=a1;V_s[2]=a2;V_j[3]=a3;V_p[4]=a4;V_c[5]=a5;V_j[6]=a6;V_s[7]=a7;V_i[8]=a8;V_p[9]=a9;V_c[10]=a10;V_f[11]=a11;V_c[12]=a12;V_c[13]=a13;V_l[14]=a14;V_j[15]=a15;V_p[16]=a16;V_c[17]=a17;V_p[18]=a18;V_p[19]=a19;V_l[20]=a20;V_s[21]=a21;V_s[22]=a22;V_l[23]=a23;V_j[24]=a24;V_i[25]=a25;ret_c(25)}
+/* 5:vijsclcsdjijsficilfjpdfjiffiljc */ v f5(i a1,j a2,s a3,c a4,l a5,c a6,s a7,d a8,j a9,i a10,j a11,s a12,f a13,i a14,c a15,i a16,l a17,f a18,j a19,p a20,d a21,f a22,j a23,i a24,f a25,f a26,i a27,l a28,j a29,c a30){fid=5;V_i[1]=a1;V_j[2]=a2;V_s[3]=a3;V_c[4]=a4;V_l[5]=a5;V_c[6]=a6;V_s[7]=a7;V_d[8]=a8;V_j[9]=a9;V_i[10]=a10;V_j[11]=a11;V_s[12]=a12;V_f[13]=a13;V_i[14]=a14;V_c[15]=a15;V_i[16]=a16;V_l[17]=a17;V_f[18]=a18;V_j[19]=a19;V_p[20]=a20;V_d[21]=a21;V_f[22]=a22;V_j[23]=a23;V_i[24]=a24;V_f[25]=a25;V_f[26]=a26;V_i[27]=a27;V_l[28]=a28;V_j[29]=a29;V_c[30]=a30;ret_v(30)}
+/* 6:fiffdisiicijddpjdpsici */ f f6(i a1,f a2,f a3,d a4,i a5,s a6,i a7,i a8,c a9,i a10,j a11,d a12,d a13,p a14,j a15,d a16,p a17,s a18,i a19,c a20,i a21){fid=6;V_i[1]=a1;V_f[2]=a2;V_f[3]=a3;V_d[4]=a4;V_i[5]=a5;V_s[6]=a6;V_i[7]=a7;V_i[8]=a8;V_c[9]=a9;V_i[10]=a10;V_j[11]=a11;V_d[12]=a12;V_d[13]=a13;V_p[14]=a14;V_j[15]=a15;V_d[16]=a16;V_p[17]=a17;V_s[18]=a18;V_i[19]=a19;V_c[20]=a20;V_i[21]=a21;ret_f(21)}
+/* 7:scllcsjjilfjcpfsj */ s f7(c a1,l a2,l a3,c a4,s a5,j a6,j a7,i a8,l a9,f a10,j a11,c a12,p a13,f a14,s a15,j a16){fid=7;V_c[1]=a1;V_l[2]=a2;V_l[3]=a3;V_c[4]=a4;V_s[5]=a5;V_j[6]=a6;V_j[7]=a7;V_i[8]=a8;V_l[9]=a9;V_f[10]=a10;V_j[11]=a11;V_c[12]=a12;V_p[13]=a13;V_f[14]=a14;V_s[15]=a15;V_j[16]=a16;ret_s(16)}
+/* 8:ddcfdispifjpjicffjfsis */ d f8(d a1,c a2,f a3,d a4,i a5,s a6,p a7,i a8,f a9,j a10,p a11,j a12,i a13,c a14,f a15,f a16,j a17,f a18,s a19,i a20,s a21){fid=8;V_d[1]=a1;V_c[2]=a2;V_f[3]=a3;V_d[4]=a4;V_i[5]=a5;V_s[6]=a6;V_p[7]=a7;V_i[8]=a8;V_f[9]=a9;V_j[10]=a10;V_p[11]=a11;V_j[12]=a12;V_i[13]=a13;V_c[14]=a14;V_f[15]=a15;V_f[16]=a16;V_j[17]=a17;V_f[18]=a18;V_s[19]=a19;V_i[20]=a20;V_s[21]=a21;ret_d(21)}
+/* 9:jjfflllfipdsjsjdscd */ j f9(j a1,f a2,f a3,l a4,l a5,l a6,f a7,i a8,p a9,d a10,s a11,j a12,s a13,j a14,d a15,s a16,c a17,d a18){fid=9;V_j[1]=a1;V_f[2]=a2;V_f[3]=a3;V_l[4]=a4;V_l[5]=a5;V_l[6]=a6;V_f[7]=a7;V_i[8]=a8;V_p[9]=a9;V_d[10]=a10;V_s[11]=a11;V_j[12]=a12;V_s[13]=a13;V_j[14]=a14;V_d[15]=a15;V_s[16]=a16;V_c[17]=a17;V_d[18]=a18;ret_j(18)}
+/* 10:ildl */ i f10(l a1,d a2,l a3){fid=10;V_l[1]=a1;V_d[2]=a2;V_l[3]=a3;ret_i(3)}
+/* 11:llllppplsldpccjsflsj */ l f11(l a1,l a2,l a3,p a4,p a5,p a6,l a7,s a8,l a9,d a10,p a11,c a12,c a13,j a14,s a15,f a16,l a17,s a18,j a19){fid=11;V_l[1]=a1;V_l[2]=a2;V_l[3]=a3;V_p[4]=a4;V_p[5]=a5;V_p[6]=a6;V_l[7]=a7;V_s[8]=a8;V_l[9]=a9;V_d[10]=a10;V_p[11]=a11;V_c[12]=a12;V_c[13]=a13;V_j[14]=a14;V_s[15]=a15;V_f[16]=a16;V_l[17]=a17;V_s[18]=a18;V_j[19]=a19;ret_l(19)}
+/* 12:ippcii */ i f12(p a1,p a2,c a3,i a4,i a5){fid=12;V_p[1]=a1;V_p[2]=a2;V_c[3]=a3;V_i[4]=a4;V_i[5]=a5;ret_i(5)}
+/* 13:jdipcdpc */ j f13(d a1,i a2,p a3,c a4,d a5,p a6,c a7){fid=13;V_d[1]=a1;V_i[2]=a2;V_p[3]=a3;V_c[4]=a4;V_d[5]=a5;V_p[6]=a6;V_c[7]=a7;ret_j(7)}
+/* 14:jjlspi */ j f14(j a1,l a2,s a3,p a4,i a5){fid=14;V_j[1]=a1;V_l[2]=a2;V_s[3]=a3;V_p[4]=a4;V_i[5]=a5;ret_j(5)}
+/* 15:cdicfiidisdsp */ c f15(d a1,i a2,c a3,f a4,i a5,i a6,d a7,i a8,s a9,d a10,s a11,p a12){fid=15;V_d[1]=a1;V_i[2]=a2;V_c[3]=a3;V_f[4]=a4;V_i[5]=a5;V_i[6]=a6;V_d[7]=a7;V_i[8]=a8;V_s[9]=a9;V_d[10]=a10;V_s[11]=a11;V_p[12]=a12;ret_c(12)}
+/* 16:pfcdlcpsiccpifdll */ p f16(f a1,c a2,d a3,l a4,c a5,p a6,s a7,i a8,c a9,c a10,p a11,i a12,f a13,d a14,l a15,l a16){fid=16;V_f[1]=a1;V_c[2]=a2;V_d[3]=a3;V_l[4]=a4;V_c[5]=a5;V_p[6]=a6;V_s[7]=a7;V_i[8]=a8;V_c[9]=a9;V_c[10]=a10;V_p[11]=a11;V_i[12]=a12;V_f[13]=a13;V_d[14]=a14;V_l[15]=a15;V_l[16]=a16;ret_p(16)}
+/* 17:pfjf */ p f17(f a1,j a2,f a3){fid=17;V_f[1]=a1;V_j[2]=a2;V_f[3]=a3;ret_p(3)}
+/* 18:plispfpjjijdjij */ p f18(l a1,i a2,s a3,p a4,f a5,p a6,j a7,j a8,i a9,j a10,d a11,j a12,i a13,j a14){fid=18;V_l[1]=a1;V_i[2]=a2;V_s[3]=a3;V_p[4]=a4;V_f[5]=a5;V_p[6]=a6;V_j[7]=a7;V_j[8]=a8;V_i[9]=a9;V_j[10]=a10;V_d[11]=a11;V_j[12]=a12;V_i[13]=a13;V_j[14]=a14;ret_p(14)}
+/* 19:cjlfs */ c f19(j a1,l a2,f a3,s a4){fid=19;V_j[1]=a1;V_l[2]=a2;V_f[3]=a3;V_s[4]=a4;ret_c(4)}
+/* 20:fddljfldscfcc */ f f20(d a1,d a2,l a3,j a4,f a5,l a6,d a7,s a8,c a9,f a10,c a11,c a12){fid=20;V_d[1]=a1;V_d[2]=a2;V_l[3]=a3;V_j[4]=a4;V_f[5]=a5;V_l[6]=a6;V_d[7]=a7;V_s[8]=a8;V_c[9]=a9;V_f[10]=a10;V_c[11]=a11;V_c[12]=a12;ret_f(12)}
+/* 21:vlpdsdidfsfjcidijspcldsfijis */ v f21(l a1,p a2,d a3,s a4,d a5,i a6,d a7,f a8,s a9,f a10,j a11,c a12,i a13,d a14,i a15,j a16,s a17,p a18,c a19,l a20,d a21,s a22,f a23,i a24,j a25,i a26,s a27){fid=21;V_l[1]=a1;V_p[2]=a2;V_d[3]=a3;V_s[4]=a4;V_d[5]=a5;V_i[6]=a6;V_d[7]=a7;V_f[8]=a8;V_s[9]=a9;V_f[10]=a10;V_j[11]=a11;V_c[12]=a12;V_i[13]=a13;V_d[14]=a14;V_i[15]=a15;V_j[16]=a16;V_s[17]=a17;V_p[18]=a18;V_c[19]=a19;V_l[20]=a20;V_d[21]=a21;V_s[22]=a22;V_f[23]=a23;V_i[24]=a24;V_j[25]=a25;V_i[26]=a26;V_s[27]=a27;ret_v(27)}
+/* 22:jfljilsflciddclicljsssisiifpci */ j f22(f a1,l a2,j a3,i a4,l a5,s a6,f a7,l a8,c a9,i a10,d a11,d a12,c a13,l a14,i a15,c a16,l a17,j a18,s a19,s a20,s a21,i a22,s a23,i a24,i a25,f a26,p a27,c a28,i a29){fid=22;V_f[1]=a1;V_l[2]=a2;V_j[3]=a3;V_i[4]=a4;V_l[5]=a5;V_s[6]=a6;V_f[7]=a7;V_l[8]=a8;V_c[9]=a9;V_i[10]=a10;V_d[11]=a11;V_d[12]=a12;V_c[13]=a13;V_l[14]=a14;V_i[15]=a15;V_c[16]=a16;V_l[17]=a17;V_j[18]=a18;V_s[19]=a19;V_s[20]=a20;V_s[21]=a21;V_i[22]=a22;V_s[23]=a23;V_i[24]=a24;V_i[25]=a25;V_f[26]=a26;V_p[27]=a27;V_c[28]=a28;V_i[29]=a29;ret_j(29)}
+/* 23:p */ p f23(){fid=23;ret_p(0)}
+/* 24:cjj */ c f24(j a1,j a2){fid=24;V_j[1]=a1;V_j[2]=a2;ret_c(2)}
+/* 25:sjpidpsdldcjfippicilfl */ s f25(j a1,p a2,i a3,d a4,p a5,s a6,d a7,l a8,d a9,c a10,j a11,f a12,i a13,p a14,p a15,i a16,c a17,i a18,l a19,f a20,l a21){fid=25;V_j[1]=a1;V_p[2]=a2;V_i[3]=a3;V_d[4]=a4;V_p[5]=a5;V_s[6]=a6;V_d[7]=a7;V_l[8]=a8;V_d[9]=a9;V_c[10]=a10;V_j[11]=a11;V_f[12]=a12;V_i[13]=a13;V_p[14]=a14;V_p[15]=a15;V_i[16]=a16;V_c[17]=a17;V_i[18]=a18;V_l[19]=a19;V_f[20]=a20;V_l[21]=a21;ret_s(21)}
+/* 26:psfcffpijlfjjlpssc */ p f26(s a1,f a2,c a3,f a4,f a5,p a6,i a7,j a8,l a9,f a10,j a11,j a12,l a13,p a14,s a15,s a16,c a17){fid=26;V_s[1]=a1;V_f[2]=a2;V_c[3]=a3;V_f[4]=a4;V_f[5]=a5;V_p[6]=a6;V_i[7]=a7;V_j[8]=a8;V_l[9]=a9;V_f[10]=a10;V_j[11]=a11;V_j[12]=a12;V_l[13]=a13;V_p[14]=a14;V_s[15]=a15;V_s[16]=a16;V_c[17]=a17;ret_p(17)}
+/* 27:cpiijlppici */ c f27(p a1,i a2,i a3,j a4,l a5,p a6,p a7,i a8,c a9,i a10){fid=27;V_p[1]=a1;V_i[2]=a2;V_i[3]=a3;V_j[4]=a4;V_l[5]=a5;V_p[6]=a6;V_p[7]=a7;V_i[8]=a8;V_c[9]=a9;V_i[10]=a10;ret_c(10)}
+/* 28:jfslddfifcdscfllpfjffff */ j f28(f a1,s a2,l a3,d a4,d a5,f a6,i a7,f a8,c a9,d a10,s a11,c a12,f a13,l a14,l a15,p a16,f a17,j a18,f a19,f a20,f a21,f a22){fid=28;V_f[1]=a1;V_s[2]=a2;V_l[3]=a3;V_d[4]=a4;V_d[5]=a5;V_f[6]=a6;V_i[7]=a7;V_f[8]=a8;V_c[9]=a9;V_d[10]=a10;V_s[11]=a11;V_c[12]=a12;V_f[13]=a13;V_l[14]=a14;V_l[15]=a15;V_p[16]=a16;V_f[17]=a17;V_j[18]=a18;V_f[19]=a19;V_f[20]=a20;V_f[21]=a21;V_f[22]=a22;ret_j(22)}
+/* 29:ppcdclclclpic */ p f29(p a1,c a2,d a3,c a4,l a5,c a6,l a7,c a8,l a9,p a10,i a11,c a12){fid=29;V_p[1]=a1;V_c[2]=a2;V_d[3]=a3;V_c[4]=a4;V_l[5]=a5;V_c[6]=a6;V_l[7]=a7;V_c[8]=a8;V_l[9]=a9;V_p[10]=a10;V_i[11]=a11;V_c[12]=a12;ret_p(12)}
+/* 30:jd */ j f30(d a1){fid=30;V_d[1]=a1;ret_j(1)}
+/* 31:flsdfpssplsilflfpsfdlplffsfisj */ f f31(l a1,s a2,d a3,f a4,p a5,s a6,s a7,p a8,l a9,s a10,i a11,l a12,f a13,l a14,f a15,p a16,s a17,f a18,d a19,l a20,p a21,l a22,f a23,f a24,s a25,f a26,i a27,s a28,j a29){fid=31;V_l[1]=a1;V_s[2]=a2;V_d[3]=a3;V_f[4]=a4;V_p[5]=a5;V_s[6]=a6;V_s[7]=a7;V_p[8]=a8;V_l[9]=a9;V_s[10]=a10;V_i[11]=a11;V_l[12]=a12;V_f[13]=a13;V_l[14]=a14;V_f[15]=a15;V_p[16]=a16;V_s[17]=a17;V_f[18]=a18;V_d[19]=a19;V_l[20]=a20;V_p[21]=a21;V_l[22]=a22;V_f[23]=a23;V_f[24]=a24;V_s[25]=a25;V_f[26]=a26;V_i[27]=a27;V_s[28]=a28;V_j[29]=a29;ret_f(29)}
+/* 32:fi */ f f32(i a1){fid=32;V_i[1]=a1;ret_f(1)}
+/* 33:cpipsssjssfjpsjdijllsjdspfsiscd */ c f33(p a1,i a2,p a3,s a4,s a5,s a6,j a7,s a8,s a9,f a10,j a11,p a12,s a13,j a14,d a15,i a16,j a17,l a18,l a19,s a20,j a21,d a22,s a23,p a24,f a25,s a26,i a27,s a28,c a29,d a30){fid=33;V_p[1]=a1;V_i[2]=a2;V_p[3]=a3;V_s[4]=a4;V_s[5]=a5;V_s[6]=a6;V_j[7]=a7;V_s[8]=a8;V_s[9]=a9;V_f[10]=a10;V_j[11]=a11;V_p[12]=a12;V_s[13]=a13;V_j[14]=a14;V_d[15]=a15;V_i[16]=a16;V_j[17]=a17;V_l[18]=a18;V_l[19]=a19;V_s[20]=a20;V_j[21]=a21;V_d[22]=a22;V_s[23]=a23;V_p[24]=a24;V_f[25]=a25;V_s[26]=a26;V_i[27]=a27;V_s[28]=a28;V_c[29]=a29;V_d[30]=a30;ret_c(30)}
+/* 34:fiildffcjdpjsplidlspji */ f f34(i a1,i a2,l a3,d a4,f a5,f a6,c a7,j a8,d a9,p a10,j a11,s a12,p a13,l a14,i a15,d a16,l a17,s a18,p a19,j a20,i a21){fid=34;V_i[1]=a1;V_i[2]=a2;V_l[3]=a3;V_d[4]=a4;V_f[5]=a5;V_f[6]=a6;V_c[7]=a7;V_j[8]=a8;V_d[9]=a9;V_p[10]=a10;V_j[11]=a11;V_s[12]=a12;V_p[13]=a13;V_l[14]=a14;V_i[15]=a15;V_d[16]=a16;V_l[17]=a17;V_s[18]=a18;V_p[19]=a19;V_j[20]=a20;V_i[21]=a21;ret_f(21)}
+/* 35:dcssppdcjfif */ d f35(c a1,s a2,s a3,p a4,p a5,d a6,c a7,j a8,f a9,i a10,f a11){fid=35;V_c[1]=a1;V_s[2]=a2;V_s[3]=a3;V_p[4]=a4;V_p[5]=a5;V_d[6]=a6;V_c[7]=a7;V_j[8]=a8;V_f[9]=a9;V_i[10]=a10;V_f[11]=a11;ret_d(11)}
+/* 36:csdplfddlifispppj */ c f36(s a1,d a2,p a3,l a4,f a5,d a6,d a7,l a8,i a9,f a10,i a11,s a12,p a13,p a14,p a15,j a16){fid=36;V_s[1]=a1;V_d[2]=a2;V_p[3]=a3;V_l[4]=a4;V_f[5]=a5;V_d[6]=a6;V_d[7]=a7;V_l[8]=a8;V_i[9]=a9;V_f[10]=a10;V_i[11]=a11;V_s[12]=a12;V_p[13]=a13;V_p[14]=a14;V_p[15]=a15;V_j[16]=a16;ret_c(16)}
+/* 37:lissccfiiis */ l f37(i a1,s a2,s a3,c a4,c a5,f a6,i a7,i a8,i a9,s a10){fid=37;V_i[1]=a1;V_s[2]=a2;V_s[3]=a3;V_c[4]=a4;V_c[5]=a5;V_f[6]=a6;V_i[7]=a7;V_i[8]=a8;V_i[9]=a9;V_s[10]=a10;ret_l(10)}
+/* 38:cffccljpsdjffifsllppddlipf */ c f38(f a1,f a2,c a3,c a4,l a5,j a6,p a7,s a8,d a9,j a10,f a11,f a12,i a13,f a14,s a15,l a16,l a17,p a18,p a19,d a20,d a21,l a22,i a23,p a24,f a25){fid=38;V_f[1]=a1;V_f[2]=a2;V_c[3]=a3;V_c[4]=a4;V_l[5]=a5;V_j[6]=a6;V_p[7]=a7;V_s[8]=a8;V_d[9]=a9;V_j[10]=a10;V_f[11]=a11;V_f[12]=a12;V_i[13]=a13;V_f[14]=a14;V_s[15]=a15;V_l[16]=a16;V_l[17]=a17;V_p[18]=a18;V_p[19]=a19;V_d[20]=a20;V_d[21]=a21;V_l[22]=a22;V_i[23]=a23;V_p[24]=a24;V_f[25]=a25;ret_c(25)}
+/* 39:dpjlscjiijdcllflsiicjjsfccsd */ d f39(p a1,j a2,l a3,s a4,c a5,j a6,i a7,i a8,j a9,d a10,c a11,l a12,l a13,f a14,l a15,s a16,i a17,i a18,c a19,j a20,j a21,s a22,f a23,c a24,c a25,s a26,d a27){fid=39;V_p[1]=a1;V_j[2]=a2;V_l[3]=a3;V_s[4]=a4;V_c[5]=a5;V_j[6]=a6;V_i[7]=a7;V_i[8]=a8;V_j[9]=a9;V_d[10]=a10;V_c[11]=a11;V_l[12]=a12;V_l[13]=a13;V_f[14]=a14;V_l[15]=a15;V_s[16]=a16;V_i[17]=a17;V_i[18]=a18;V_c[19]=a19;V_j[20]=a20;V_j[21]=a21;V_s[22]=a22;V_f[23]=a23;V_c[24]=a24;V_c[25]=a25;V_s[26]=a26;V_d[27]=a27;ret_d(27)}
+/* 40:pldpcscpppilpldsjpsppf */ p f40(l a1,d a2,p a3,c a4,s a5,c a6,p a7,p a8,p a9,i a10,l a11,p a12,l a13,d a14,s a15,j a16,p a17,s a18,p a19,p a20,f a21){fid=40;V_l[1]=a1;V_d[2]=a2;V_p[3]=a3;V_c[4]=a4;V_s[5]=a5;V_c[6]=a6;V_p[7]=a7;V_p[8]=a8;V_p[9]=a9;V_i[10]=a10;V_l[11]=a11;V_p[12]=a12;V_l[13]=a13;V_d[14]=a14;V_s[15]=a15;V_j[16]=a16;V_p[17]=a17;V_s[18]=a18;V_p[19]=a19;V_p[20]=a20;V_f[21]=a21;ret_p(21)}
+/* 41:fifffldcpf */ f f41(i a1,f a2,f a3,f a4,l a5,d a6,c a7,p a8,f a9){fid=41;V_i[1]=a1;V_f[2]=a2;V_f[3]=a3;V_f[4]=a4;V_l[5]=a5;V_d[6]=a6;V_c[7]=a7;V_p[8]=a8;V_f[9]=a9;ret_f(9)}
+/* 42:lijcsijlpippi */ l f42(i a1,j a2,c a3,s a4,i a5,j a6,l a7,p a8,i a9,p a10,p a11,i a12){fid=42;V_i[1]=a1;V_j[2]=a2;V_c[3]=a3;V_s[4]=a4;V_i[5]=a5;V_j[6]=a6;V_l[7]=a7;V_p[8]=a8;V_i[9]=a9;V_p[10]=a10;V_p[11]=a11;V_i[12]=a12;ret_l(12)}
+/* 43:vssdpsdffjjidjisfdfliljsdfip */ v f43(s a1,s a2,d a3,p a4,s a5,d a6,f a7,f a8,j a9,j a10,i a11,d a12,j a13,i a14,s a15,f a16,d a17,f a18,l a19,i a20,l a21,j a22,s a23,d a24,f a25,i a26,p a27){fid=43;V_s[1]=a1;V_s[2]=a2;V_d[3]=a3;V_p[4]=a4;V_s[5]=a5;V_d[6]=a6;V_f[7]=a7;V_f[8]=a8;V_j[9]=a9;V_j[10]=a10;V_i[11]=a11;V_d[12]=a12;V_j[13]=a13;V_i[14]=a14;V_s[15]=a15;V_f[16]=a16;V_d[17]=a17;V_f[18]=a18;V_l[19]=a19;V_i[20]=a20;V_l[21]=a21;V_j[22]=a22;V_s[23]=a23;V_d[24]=a24;V_f[25]=a25;V_i[26]=a26;V_p[27]=a27;ret_v(27)}
+/* 44:s */ s f44(){fid=44;ret_s(0)}
+/* 45:ciplclcfpclsippfcjssp */ c f45(i a1,p a2,l a3,c a4,l a5,c a6,f a7,p a8,c a9,l a10,s a11,i a12,p a13,p a14,f a15,c a16,j a17,s a18,s a19,p a20){fid=45;V_i[1]=a1;V_p[2]=a2;V_l[3]=a3;V_c[4]=a4;V_l[5]=a5;V_c[6]=a6;V_f[7]=a7;V_p[8]=a8;V_c[9]=a9;V_l[10]=a10;V_s[11]=a11;V_i[12]=a12;V_p[13]=a13;V_p[14]=a14;V_f[15]=a15;V_c[16]=a16;V_j[17]=a17;V_s[18]=a18;V_s[19]=a19;V_p[20]=a20;ret_c(20)}
+/* 46:lld */ l f46(l a1,d a2){fid=46;V_l[1]=a1;V_d[2]=a2;ret_l(2)}
+/* 47:sidsjjslfliicjpjslfssidijjcdj */ s f47(i a1,d a2,s a3,j a4,j a5,s a6,l a7,f a8,l a9,i a10,i a11,c a12,j a13,p a14,j a15,s a16,l a17,f a18,s a19,s a20,i a21,d a22,i a23,j a24,j a25,c a26,d a27,j a28){fid=47;V_i[1]=a1;V_d[2]=a2;V_s[3]=a3;V_j[4]=a4;V_j[5]=a5;V_s[6]=a6;V_l[7]=a7;V_f[8]=a8;V_l[9]=a9;V_i[10]=a10;V_i[11]=a11;V_c[12]=a12;V_j[13]=a13;V_p[14]=a14;V_j[15]=a15;V_s[16]=a16;V_l[17]=a17;V_f[18]=a18;V_s[19]=a19;V_s[20]=a20;V_i[21]=a21;V_d[22]=a22;V_i[23]=a23;V_j[24]=a24;V_j[25]=a25;V_c[26]=a26;V_d[27]=a27;V_j[28]=a28;ret_s(28)}
+/* 48:jsjcdclsdsslifffcssjissjjdjclsjl */ j f48(s a1,j a2,c a3,d a4,c a5,l a6,s a7,d a8,s a9,s a10,l a11,i a12,f a13,f a14,f a15,c a16,s a17,s a18,j a19,i a20,s a21,s a22,j a23,j a24,d a25,j a26,c a27,l a28,s a29,j a30,l a31){fid=48;V_s[1]=a1;V_j[2]=a2;V_c[3]=a3;V_d[4]=a4;V_c[5]=a5;V_l[6]=a6;V_s[7]=a7;V_d[8]=a8;V_s[9]=a9;V_s[10]=a10;V_l[11]=a11;V_i[12]=a12;V_f[13]=a13;V_f[14]=a14;V_f[15]=a15;V_c[16]=a16;V_s[17]=a17;V_s[18]=a18;V_j[19]=a19;V_i[20]=a20;V_s[21]=a21;V_s[22]=a22;V_j[23]=a23;V_j[24]=a24;V_d[25]=a25;V_j[26]=a26;V_c[27]=a27;V_l[28]=a28;V_s[29]=a29;V_j[30]=a30;V_l[31]=a31;ret_j(31)}
+/* 49:pislpl */ p f49(i a1,s a2,l a3,p a4,l a5){fid=49;V_i[1]=a1;V_s[2]=a2;V_l[3]=a3;V_p[4]=a4;V_l[5]=a5;ret_p(5)}
+/* 50:fppssdijcjfjjfcjfdjij */ f f50(p a1,p a2,s a3,s a4,d a5,i a6,j a7,c a8,j a9,f a10,j a11,j a12,f a13,c a14,j a15,f a16,d a17,j a18,i a19,j a20){fid=50;V_p[1]=a1;V_p[2]=a2;V_s[3]=a3;V_s[4]=a4;V_d[5]=a5;V_i[6]=a6;V_j[7]=a7;V_c[8]=a8;V_j[9]=a9;V_f[10]=a10;V_j[11]=a11;V_j[12]=a12;V_f[13]=a13;V_c[14]=a14;V_j[15]=a15;V_f[16]=a16;V_d[17]=a17;V_j[18]=a18;V_i[19]=a19;V_j[20]=a20;ret_f(20)}
+/* 51:psjcijjpscsfciififcldcippilfl */ p f51(s a1,j a2,c a3,i a4,j a5,j a6,p a7,s a8,c a9,s a10,f a11,c a12,i a13,i a14,f a15,i a16,f a17,c a18,l a19,d a20,c a21,i a22,p a23,p a24,i a25,l a26,f a27,l a28){fid=51;V_s[1]=a1;V_j[2]=a2;V_c[3]=a3;V_i[4]=a4;V_j[5]=a5;V_j[6]=a6;V_p[7]=a7;V_s[8]=a8;V_c[9]=a9;V_s[10]=a10;V_f[11]=a11;V_c[12]=a12;V_i[13]=a13;V_i[14]=a14;V_f[15]=a15;V_i[16]=a16;V_f[17]=a17;V_c[18]=a18;V_l[19]=a19;V_d[20]=a20;V_c[21]=a21;V_i[22]=a22;V_p[23]=a23;V_p[24]=a24;V_i[25]=a25;V_l[26]=a26;V_f[27]=a27;V_l[28]=a28;ret_p(28)}
+/* 52:cpfcslscs */ c f52(p a1,f a2,c a3,s a4,l a5,s a6,c a7,s a8){fid=52;V_p[1]=a1;V_f[2]=a2;V_c[3]=a3;V_s[4]=a4;V_l[5]=a5;V_s[6]=a6;V_c[7]=a7;V_s[8]=a8;ret_c(8)}
+/* 53:pfscjsicdpfjcjifjljscifccdf */ p f53(f a1,s a2,c a3,j a4,s a5,i a6,c a7,d a8,p a9,f a10,j a11,c a12,j a13,i a14,f a15,j a16,l a17,j a18,s a19,c a20,i a21,f a22,c a23,c a24,d a25,f a26){fid=53;V_f[1]=a1;V_s[2]=a2;V_c[3]=a3;V_j[4]=a4;V_s[5]=a5;V_i[6]=a6;V_c[7]=a7;V_d[8]=a8;V_p[9]=a9;V_f[10]=a10;V_j[11]=a11;V_c[12]=a12;V_j[13]=a13;V_i[14]=a14;V_f[15]=a15;V_j[16]=a16;V_l[17]=a17;V_j[18]=a18;V_s[19]=a19;V_c[20]=a20;V_i[21]=a21;V_f[22]=a22;V_c[23]=a23;V_c[24]=a24;V_d[25]=a25;V_f[26]=a26;ret_p(26)}
+/* 54:sddijdsfpfjf */ s f54(d a1,d a2,i a3,j a4,d a5,s a6,f a7,p a8,f a9,j a10,f a11){fid=54;V_d[1]=a1;V_d[2]=a2;V_i[3]=a3;V_j[4]=a4;V_d[5]=a5;V_s[6]=a6;V_f[7]=a7;V_p[8]=a8;V_f[9]=a9;V_j[10]=a10;V_f[11]=a11;ret_s(11)}
+/* 55:cii */ c f55(i a1,i a2){fid=55;V_i[1]=a1;V_i[2]=a2;ret_c(2)}
+/* 56:ssccdjlssjcsc */ s f56(s a1,c a2,c a3,d a4,j a5,l a6,s a7,s a8,j a9,c a10,s a11,c a12){fid=56;V_s[1]=a1;V_c[2]=a2;V_c[3]=a3;V_d[4]=a4;V_j[5]=a5;V_l[6]=a6;V_s[7]=a7;V_s[8]=a8;V_j[9]=a9;V_c[10]=a10;V_s[11]=a11;V_c[12]=a12;ret_s(12)}
+/* 57:vldsslfllsdfliccjilsspijil */ v f57(l a1,d a2,s a3,s a4,l a5,f a6,l a7,l a8,s a9,d a10,f a11,l a12,i a13,c a14,c a15,j a16,i a17,l a18,s a19,s a20,p a21,i a22,j a23,i a24,l a25){fid=57;V_l[1]=a1;V_d[2]=a2;V_s[3]=a3;V_s[4]=a4;V_l[5]=a5;V_f[6]=a6;V_l[7]=a7;V_l[8]=a8;V_s[9]=a9;V_d[10]=a10;V_f[11]=a11;V_l[12]=a12;V_i[13]=a13;V_c[14]=a14;V_c[15]=a15;V_j[16]=a16;V_i[17]=a17;V_l[18]=a18;V_s[19]=a19;V_s[20]=a20;V_p[21]=a21;V_i[22]=a22;V_j[23]=a23;V_i[24]=a24;V_l[25]=a25;ret_v(25)}
+/* 58:dpcplpjjppididdsjiliplis */ d f58(p a1,c a2,p a3,l a4,p a5,j a6,j a7,p a8,p a9,i a10,d a11,i a12,d a13,d a14,s a15,j a16,i a17,l a18,i a19,p a20,l a21,i a22,s a23){fid=58;V_p[1]=a1;V_c[2]=a2;V_p[3]=a3;V_l[4]=a4;V_p[5]=a5;V_j[6]=a6;V_j[7]=a7;V_p[8]=a8;V_p[9]=a9;V_i[10]=a10;V_d[11]=a11;V_i[12]=a12;V_d[13]=a13;V_d[14]=a14;V_s[15]=a15;V_j[16]=a16;V_i[17]=a17;V_l[18]=a18;V_i[19]=a19;V_p[20]=a20;V_l[21]=a21;V_i[22]=a22;V_s[23]=a23;ret_d(23)}
+/* 59:pdfffpijfsjpjdljljcpslfspjsjdsili */ p f59(d a1,f a2,f a3,f a4,p a5,i a6,j a7,f a8,s a9,j a10,p a11,j a12,d a13,l a14,j a15,l a16,j a17,c a18,p a19,s a20,l a21,f a22,s a23,p a24,j a25,s a26,j a27,d a28,s a29,i a30,l a31,i a32){fid=59;V_d[1]=a1;V_f[2]=a2;V_f[3]=a3;V_f[4]=a4;V_p[5]=a5;V_i[6]=a6;V_j[7]=a7;V_f[8]=a8;V_s[9]=a9;V_j[10]=a10;V_p[11]=a11;V_j[12]=a12;V_d[13]=a13;V_l[14]=a14;V_j[15]=a15;V_l[16]=a16;V_j[17]=a17;V_c[18]=a18;V_p[19]=a19;V_s[20]=a20;V_l[21]=a21;V_f[22]=a22;V_s[23]=a23;V_p[24]=a24;V_j[25]=a25;V_s[26]=a26;V_j[27]=a27;V_d[28]=a28;V_s[29]=a29;V_i[30]=a30;V_l[31]=a31;V_i[32]=a32;ret_p(32)}
+/* 60:vslsccpdffppssdicils */ v f60(s a1,l a2,s a3,c a4,c a5,p a6,d a7,f a8,f a9,p a10,p a11,s a12,s a13,d a14,i a15,c a16,i a17,l a18,s a19){fid=60;V_s[1]=a1;V_l[2]=a2;V_s[3]=a3;V_c[4]=a4;V_c[5]=a5;V_p[6]=a6;V_d[7]=a7;V_f[8]=a8;V_f[9]=a9;V_p[10]=a10;V_p[11]=a11;V_s[12]=a12;V_s[13]=a13;V_d[14]=a14;V_i[15]=a15;V_c[16]=a16;V_i[17]=a17;V_l[18]=a18;V_s[19]=a19;ret_v(19)}
+/* 61:jjippjlpflcifdpidddcffc */ j f61(j a1,i a2,p a3,p a4,j a5,l a6,p a7,f a8,l a9,c a10,i a11,f a12,d a13,p a14,i a15,d a16,d a17,d a18,c a19,f a20,f a21,c a22){fid=61;V_j[1]=a1;V_i[2]=a2;V_p[3]=a3;V_p[4]=a4;V_j[5]=a5;V_l[6]=a6;V_p[7]=a7;V_f[8]=a8;V_l[9]=a9;V_c[10]=a10;V_i[11]=a11;V_f[12]=a12;V_d[13]=a13;V_p[14]=a14;V_i[15]=a15;V_d[16]=a16;V_d[17]=a17;V_d[18]=a18;V_c[19]=a19;V_f[20]=a20;V_f[21]=a21;V_c[22]=a22;ret_j(22)}
+/* 62:dlfcdppclifdsss */ d f62(l a1,f a2,c a3,d a4,p a5,p a6,c a7,l a8,i a9,f a10,d a11,s a12,s a13,s a14){fid=62;V_l[1]=a1;V_f[2]=a2;V_c[3]=a3;V_d[4]=a4;V_p[5]=a5;V_p[6]=a6;V_c[7]=a7;V_l[8]=a8;V_i[9]=a9;V_f[10]=a10;V_d[11]=a11;V_s[12]=a12;V_s[13]=a13;V_s[14]=a14;ret_d(14)}
+/* 63:pps */ p f63(p a1,s a2){fid=63;V_p[1]=a1;V_s[2]=a2;ret_p(2)}
+/* 64:fsicsfpsdifclpllspifcdlssfd */ f f64(s a1,i a2,c a3,s a4,f a5,p a6,s a7,d a8,i a9,f a10,c a11,l a12,p a13,l a14,l a15,s a16,p a17,i a18,f a19,c a20,d a21,l a22,s a23,s a24,f a25,d a26){fid=64;V_s[1]=a1;V_i[2]=a2;V_c[3]=a3;V_s[4]=a4;V_f[5]=a5;V_p[6]=a6;V_s[7]=a7;V_d[8]=a8;V_i[9]=a9;V_f[10]=a10;V_c[11]=a11;V_l[12]=a12;V_p[13]=a13;V_l[14]=a14;V_l[15]=a15;V_s[16]=a16;V_p[17]=a17;V_i[18]=a18;V_f[19]=a19;V_c[20]=a20;V_d[21]=a21;V_l[22]=a22;V_s[23]=a23;V_s[24]=a24;V_f[25]=a25;V_d[26]=a26;ret_f(26)}
+/* 65:ls */ l f65(s a1){fid=65;V_s[1]=a1;ret_l(1)}
+/* 66:pcllscfdfdljfcfjdldcdlfjcclcscf */ p f66(c a1,l a2,l a3,s a4,c a5,f a6,d a7,f a8,d a9,l a10,j a11,f a12,c a13,f a14,j a15,d a16,l a17,d a18,c a19,d a20,l a21,f a22,j a23,c a24,c a25,l a26,c a27,s a28,c a29,f a30){fid=66;V_c[1]=a1;V_l[2]=a2;V_l[3]=a3;V_s[4]=a4;V_c[5]=a5;V_f[6]=a6;V_d[7]=a7;V_f[8]=a8;V_d[9]=a9;V_l[10]=a10;V_j[11]=a11;V_f[12]=a12;V_c[13]=a13;V_f[14]=a14;V_j[15]=a15;V_d[16]=a16;V_l[17]=a17;V_d[18]=a18;V_c[19]=a19;V_d[20]=a20;V_l[21]=a21;V_f[22]=a22;V_j[23]=a23;V_c[24]=a24;V_c[25]=a25;V_l[26]=a26;V_c[27]=a27;V_s[28]=a28;V_c[29]=a29;V_f[30]=a30;ret_p(30)}
+/* 67:cjjfdsiliicdlpciscppcdfccpcssjd */ c f67(j a1,j a2,f a3,d a4,s a5,i a6,l a7,i a8,i a9,c a10,d a11,l a12,p a13,c a14,i a15,s a16,c a17,p a18,p a19,c a20,d a21,f a22,c a23,c a24,p a25,c a26,s a27,s a28,j a29,d a30){fid=67;V_j[1]=a1;V_j[2]=a2;V_f[3]=a3;V_d[4]=a4;V_s[5]=a5;V_i[6]=a6;V_l[7]=a7;V_i[8]=a8;V_i[9]=a9;V_c[10]=a10;V_d[11]=a11;V_l[12]=a12;V_p[13]=a13;V_c[14]=a14;V_i[15]=a15;V_s[16]=a16;V_c[17]=a17;V_p[18]=a18;V_p[19]=a19;V_c[20]=a20;V_d[21]=a21;V_f[22]=a22;V_c[23]=a23;V_c[24]=a24;V_p[25]=a25;V_c[26]=a26;V_s[27]=a27;V_s[28]=a28;V_j[29]=a29;V_d[30]=a30;ret_c(30)}
+/* 68:vpcdpppj */ v f68(p a1,c a2,d a3,p a4,p a5,p a6,j a7){fid=68;V_p[1]=a1;V_c[2]=a2;V_d[3]=a3;V_p[4]=a4;V_p[5]=a5;V_p[6]=a6;V_j[7]=a7;ret_v(7)}
+/* 69:pdcspslifccficpisicdsjf */ p f69(d a1,c a2,s a3,p a4,s a5,l a6,i a7,f a8,c a9,c a10,f a11,i a12,c a13,p a14,i a15,s a16,i a17,c a18,d a19,s a20,j a21,f a22){fid=69;V_d[1]=a1;V_c[2]=a2;V_s[3]=a3;V_p[4]=a4;V_s[5]=a5;V_l[6]=a6;V_i[7]=a7;V_f[8]=a8;V_c[9]=a9;V_c[10]=a10;V_f[11]=a11;V_i[12]=a12;V_c[13]=a13;V_p[14]=a14;V_i[15]=a15;V_s[16]=a16;V_i[17]=a17;V_c[18]=a18;V_d[19]=a19;V_s[20]=a20;V_j[21]=a21;V_f[22]=a22;ret_p(22)}
+/* 70:jljsp */ j f70(l a1,j a2,s a3,p a4){fid=70;V_l[1]=a1;V_j[2]=a2;V_s[3]=a3;V_p[4]=a4;ret_j(4)}
+/* 71:ddipfllddjficls */ d f71(d a1,i a2,p a3,f a4,l a5,l a6,d a7,d a8,j a9,f a10,i a11,c a12,l a13,s a14){fid=71;V_d[1]=a1;V_i[2]=a2;V_p[3]=a3;V_f[4]=a4;V_l[5]=a5;V_l[6]=a6;V_d[7]=a7;V_d[8]=a8;V_j[9]=a9;V_f[10]=a10;V_i[11]=a11;V_c[12]=a12;V_l[13]=a13;V_s[14]=a14;ret_d(14)}
+/* 72:lcc */ l f72(c a1,c a2){fid=72;V_c[1]=a1;V_c[2]=a2;ret_l(2)}
+/* 73:vijlslssscfp */ v f73(i a1,j a2,l a3,s a4,l a5,s a6,s a7,s a8,c a9,f a10,p a11){fid=73;V_i[1]=a1;V_j[2]=a2;V_l[3]=a3;V_s[4]=a4;V_l[5]=a5;V_s[6]=a6;V_s[7]=a7;V_s[8]=a8;V_c[9]=a9;V_f[10]=a10;V_p[11]=a11;ret_v(11)}
+/* 74:fjlspsddsdlcci */ f f74(j a1,l a2,s a3,p a4,s a5,d a6,d a7,s a8,d a9,l a10,c a11,c a12,i a13){fid=74;V_j[1]=a1;V_l[2]=a2;V_s[3]=a3;V_p[4]=a4;V_s[5]=a5;V_d[6]=a6;V_d[7]=a7;V_s[8]=a8;V_d[9]=a9;V_l[10]=a10;V_c[11]=a11;V_c[12]=a12;V_i[13]=a13;ret_f(13)}
+/* 75:jjiddsddcjscdpidp */ j f75(j a1,i a2,d a3,d a4,s a5,d a6,d a7,c a8,j a9,s a10,c a11,d a12,p a13,i a14,d a15,p a16){fid=75;V_j[1]=a1;V_i[2]=a2;V_d[3]=a3;V_d[4]=a4;V_s[5]=a5;V_d[6]=a6;V_d[7]=a7;V_c[8]=a8;V_j[9]=a9;V_s[10]=a10;V_c[11]=a11;V_d[12]=a12;V_p[13]=a13;V_i[14]=a14;V_d[15]=a15;V_p[16]=a16;ret_j(16)}
+/* 76:lfl */ l f76(f a1,l a2){fid=76;V_f[1]=a1;V_l[2]=a2;ret_l(2)}
+/* 77:sipslcdccjsifddcifijdsfdjsiscp */ s f77(i a1,p a2,s a3,l a4,c a5,d a6,c a7,c a8,j a9,s a10,i a11,f a12,d a13,d a14,c a15,i a16,f a17,i a18,j a19,d a20,s a21,f a22,d a23,j a24,s a25,i a26,s a27,c a28,p a29){fid=77;V_i[1]=a1;V_p[2]=a2;V_s[3]=a3;V_l[4]=a4;V_c[5]=a5;V_d[6]=a6;V_c[7]=a7;V_c[8]=a8;V_j[9]=a9;V_s[10]=a10;V_i[11]=a11;V_f[12]=a12;V_d[13]=a13;V_d[14]=a14;V_c[15]=a15;V_i[16]=a16;V_f[17]=a17;V_i[18]=a18;V_j[19]=a19;V_d[20]=a20;V_s[21]=a21;V_f[22]=a22;V_d[23]=a23;V_j[24]=a24;V_s[25]=a25;V_i[26]=a26;V_s[27]=a27;V_c[28]=a28;V_p[29]=a29;ret_s(29)}
+/* 78:dcifsspsdffjjjlccdd */ d f78(c a1,i a2,f a3,s a4,s a5,p a6,s a7,d a8,f a9,f a10,j a11,j a12,j a13,l a14,c a15,c a16,d a17,d a18){fid=78;V_c[1]=a1;V_i[2]=a2;V_f[3]=a3;V_s[4]=a4;V_s[5]=a5;V_p[6]=a6;V_s[7]=a7;V_d[8]=a8;V_f[9]=a9;V_f[10]=a10;V_j[11]=a11;V_j[12]=a12;V_j[13]=a13;V_l[14]=a14;V_c[15]=a15;V_c[16]=a16;V_d[17]=a17;V_d[18]=a18;ret_d(18)}
+/* 79:fjfff */ f f79(j a1,f a2,f a3,f a4){fid=79;V_j[1]=a1;V_f[2]=a2;V_f[3]=a3;V_f[4]=a4;ret_f(4)}
+/* 80:fccs */ f f80(c a1,c a2,s a3){fid=80;V_c[1]=a1;V_c[2]=a2;V_s[3]=a3;ret_f(3)}
+/* 81:ipffplspcdjclfdldiiilsifippij */ i f81(p a1,f a2,f a3,p a4,l a5,s a6,p a7,c a8,d a9,j a10,c a11,l a12,f a13,d a14,l a15,d a16,i a17,i a18,i a19,l a20,s a21,i a22,f a23,i a24,p a25,p a26,i a27,j a28){fid=81;V_p[1]=a1;V_f[2]=a2;V_f[3]=a3;V_p[4]=a4;V_l[5]=a5;V_s[6]=a6;V_p[7]=a7;V_c[8]=a8;V_d[9]=a9;V_j[10]=a10;V_c[11]=a11;V_l[12]=a12;V_f[13]=a13;V_d[14]=a14;V_l[15]=a15;V_d[16]=a16;V_i[17]=a17;V_i[18]=a18;V_i[19]=a19;V_l[20]=a20;V_s[21]=a21;V_i[22]=a22;V_f[23]=a23;V_i[24]=a24;V_p[25]=a25;V_p[26]=a26;V_i[27]=a27;V_j[28]=a28;ret_i(28)}
+/* 82:lcliijcjfcipijiflpislfdpiiil */ l f82(c a1,l a2,i a3,i a4,j a5,c a6,j a7,f a8,c a9,i a10,p a11,i a12,j a13,i a14,f a15,l a16,p a17,i a18,s a19,l a20,f a21,d a22,p a23,i a24,i a25,i a26,l a27){fid=82;V_c[1]=a1;V_l[2]=a2;V_i[3]=a3;V_i[4]=a4;V_j[5]=a5;V_c[6]=a6;V_j[7]=a7;V_f[8]=a8;V_c[9]=a9;V_i[10]=a10;V_p[11]=a11;V_i[12]=a12;V_j[13]=a13;V_i[14]=a14;V_f[15]=a15;V_l[16]=a16;V_p[17]=a17;V_i[18]=a18;V_s[19]=a19;V_l[20]=a20;V_f[21]=a21;V_d[22]=a22;V_p[23]=a23;V_i[24]=a24;V_i[25]=a25;V_i[26]=a26;V_l[27]=a27;ret_l(27)}
+/* 83:cddlfdccfllffddpjs */ c f83(d a1,d a2,l a3,f a4,d a5,c a6,c a7,f a8,l a9,l a10,f a11,f a12,d a13,d a14,p a15,j a16,s a17){fid=83;V_d[1]=a1;V_d[2]=a2;V_l[3]=a3;V_f[4]=a4;V_d[5]=a5;V_c[6]=a6;V_c[7]=a7;V_f[8]=a8;V_l[9]=a9;V_l[10]=a10;V_f[11]=a11;V_f[12]=a12;V_d[13]=a13;V_d[14]=a14;V_p[15]=a15;V_j[16]=a16;V_s[17]=a17;ret_c(17)}
+/* 84:pjdspicppiipssiflpsssidls */ p f84(j a1,d a2,s a3,p a4,i a5,c a6,p a7,p a8,i a9,i a10,p a11,s a12,s a13,i a14,f a15,l a16,p a17,s a18,s a19,s a20,i a21,d a22,l a23,s a24){fid=84;V_j[1]=a1;V_d[2]=a2;V_s[3]=a3;V_p[4]=a4;V_i[5]=a5;V_c[6]=a6;V_p[7]=a7;V_p[8]=a8;V_i[9]=a9;V_i[10]=a10;V_p[11]=a11;V_s[12]=a12;V_s[13]=a13;V_i[14]=a14;V_f[15]=a15;V_l[16]=a16;V_p[17]=a17;V_s[18]=a18;V_s[19]=a19;V_s[20]=a20;V_i[21]=a21;V_d[22]=a22;V_l[23]=a23;V_s[24]=a24;ret_p(24)}
+/* 85:fffipjp */ f f85(f a1,f a2,i a3,p a4,j a5,p a6){fid=85;V_f[1]=a1;V_f[2]=a2;V_i[3]=a3;V_p[4]=a4;V_j[5]=a5;V_p[6]=a6;ret_f(6)}
+/* 86:iiljilpppjpcsdddijpfsjjsjipidd */ i f86(i a1,l a2,j a3,i a4,l a5,p a6,p a7,p a8,j a9,p a10,c a11,s a12,d a13,d a14,d a15,i a16,j a17,p a18,f a19,s a20,j a21,j a22,s a23,j a24,i a25,p a26,i a27,d a28,d a29){fid=86;V_i[1]=a1;V_l[2]=a2;V_j[3]=a3;V_i[4]=a4;V_l[5]=a5;V_p[6]=a6;V_p[7]=a7;V_p[8]=a8;V_j[9]=a9;V_p[10]=a10;V_c[11]=a11;V_s[12]=a12;V_d[13]=a13;V_d[14]=a14;V_d[15]=a15;V_i[16]=a16;V_j[17]=a17;V_p[18]=a18;V_f[19]=a19;V_s[20]=a20;V_j[21]=a21;V_j[22]=a22;V_s[23]=a23;V_j[24]=a24;V_i[25]=a25;V_p[26]=a26;V_i[27]=a27;V_d[28]=a28;V_d[29]=a29;ret_i(29)}
+/* 87:scjdscdl */ s f87(c a1,j a2,d a3,s a4,c a5,d a6,l a7){fid=87;V_c[1]=a1;V_j[2]=a2;V_d[3]=a3;V_s[4]=a4;V_c[5]=a5;V_d[6]=a6;V_l[7]=a7;ret_s(7)}
+/* 88:ji */ j f88(i a1){fid=88;V_i[1]=a1;ret_j(1)}
+/* 89:cjjllcpllsli */ c f89(j a1,j a2,l a3,l a4,c a5,p a6,l a7,l a8,s a9,l a10,i a11){fid=89;V_j[1]=a1;V_j[2]=a2;V_l[3]=a3;V_l[4]=a4;V_c[5]=a5;V_p[6]=a6;V_l[7]=a7;V_l[8]=a8;V_s[9]=a9;V_l[10]=a10;V_i[11]=a11;ret_c(11)}
+/* 90:picllsjipssddlcjdijfcl */ p f90(i a1,c a2,l a3,l a4,s a5,j a6,i a7,p a8,s a9,s a10,d a11,d a12,l a13,c a14,j a15,d a16,i a17,j a18,f a19,c a20,l a21){fid=90;V_i[1]=a1;V_c[2]=a2;V_l[3]=a3;V_l[4]=a4;V_s[5]=a5;V_j[6]=a6;V_i[7]=a7;V_p[8]=a8;V_s[9]=a9;V_s[10]=a10;V_d[11]=a11;V_d[12]=a12;V_l[13]=a13;V_c[14]=a14;V_j[15]=a15;V_d[16]=a16;V_i[17]=a17;V_j[18]=a18;V_f[19]=a19;V_c[20]=a20;V_l[21]=a21;ret_p(21)}
+/* 91:sjclccsdspcfpp */ s f91(j a1,c a2,l a3,c a4,c a5,s a6,d a7,s a8,p a9,c a10,f a11,p a12,p a13){fid=91;V_j[1]=a1;V_c[2]=a2;V_l[3]=a3;V_c[4]=a4;V_c[5]=a5;V_s[6]=a6;V_d[7]=a7;V_s[8]=a8;V_p[9]=a9;V_c[10]=a10;V_f[11]=a11;V_p[12]=a12;V_p[13]=a13;ret_s(13)}
+/* 92:lipjddjpdlislpdfppsddfccppffsii */ l f92(i a1,p a2,j a3,d a4,d a5,j a6,p a7,d a8,l a9,i a10,s a11,l a12,p a13,d a14,f a15,p a16,p a17,s a18,d a19,d a20,f a21,c a22,c a23,p a24,p a25,f a26,f a27,s a28,i a29,i a30){fid=92;V_i[1]=a1;V_p[2]=a2;V_j[3]=a3;V_d[4]=a4;V_d[5]=a5;V_j[6]=a6;V_p[7]=a7;V_d[8]=a8;V_l[9]=a9;V_i[10]=a10;V_s[11]=a11;V_l[12]=a12;V_p[13]=a13;V_d[14]=a14;V_f[15]=a15;V_p[16]=a16;V_p[17]=a17;V_s[18]=a18;V_d[19]=a19;V_d[20]=a20;V_f[21]=a21;V_c[22]=a22;V_c[23]=a23;V_p[24]=a24;V_p[25]=a25;V_f[26]=a26;V_f[27]=a27;V_s[28]=a28;V_i[29]=a29;V_i[30]=a30;ret_l(30)}
+/* 93:plfliij */ p f93(l a1,f a2,l a3,i a4,i a5,j a6){fid=93;V_l[1]=a1;V_f[2]=a2;V_l[3]=a3;V_i[4]=a4;V_i[5]=a5;V_j[6]=a6;ret_p(6)}
+/* 94:ilp */ i f94(l a1,p a2){fid=94;V_l[1]=a1;V_p[2]=a2;ret_i(2)}
+/* 95:jpjpicpdlsiclffifsplplsdjspspis */ j f95(p a1,j a2,p a3,i a4,c a5,p a6,d a7,l a8,s a9,i a10,c a11,l a12,f a13,f a14,i a15,f a16,s a17,p a18,l a19,p a20,l a21,s a22,d a23,j a24,s a25,p a26,s a27,p a28,i a29,s a30){fid=95;V_p[1]=a1;V_j[2]=a2;V_p[3]=a3;V_i[4]=a4;V_c[5]=a5;V_p[6]=a6;V_d[7]=a7;V_l[8]=a8;V_s[9]=a9;V_i[10]=a10;V_c[11]=a11;V_l[12]=a12;V_f[13]=a13;V_f[14]=a14;V_i[15]=a15;V_f[16]=a16;V_s[17]=a17;V_p[18]=a18;V_l[19]=a19;V_p[20]=a20;V_l[21]=a21;V_s[22]=a22;V_d[23]=a23;V_j[24]=a24;V_s[25]=a25;V_p[26]=a26;V_s[27]=a27;V_p[28]=a28;V_i[29]=a29;V_s[30]=a30;ret_j(30)}
+/* 96:jfliipdlilisj */ j f96(f a1,l a2,i a3,i a4,p a5,d a6,l a7,i a8,l a9,i a10,s a11,j a12){fid=96;V_f[1]=a1;V_l[2]=a2;V_i[3]=a3;V_i[4]=a4;V_p[5]=a5;V_d[6]=a6;V_l[7]=a7;V_i[8]=a8;V_l[9]=a9;V_i[10]=a10;V_s[11]=a11;V_j[12]=a12;ret_j(12)}
+/* 97:iipfdfl */ i f97(i a1,p a2,f a3,d a4,f a5,l a6){fid=97;V_i[1]=a1;V_p[2]=a2;V_f[3]=a3;V_d[4]=a4;V_f[5]=a5;V_l[6]=a6;ret_i(6)}
+/* 98:lcspcfilfsc */ l f98(c a1,s a2,p a3,c a4,f a5,i a6,l a7,f a8,s a9,c a10){fid=98;V_c[1]=a1;V_s[2]=a2;V_p[3]=a3;V_c[4]=a4;V_f[5]=a5;V_i[6]=a6;V_l[7]=a7;V_f[8]=a8;V_s[9]=a9;V_c[10]=a10;ret_l(10)}
+/* 99:pffjliljjfcicccflcdsf */ p f99(f a1,f a2,j a3,l a4,i a5,l a6,j a7,j a8,f a9,c a10,i a11,c a12,c a13,c a14,f a15,l a16,c a17,d a18,s a19,f a20){fid=99;V_f[1]=a1;V_f[2]=a2;V_j[3]=a3;V_l[4]=a4;V_i[5]=a5;V_l[6]=a6;V_j[7]=a7;V_j[8]=a8;V_f[9]=a9;V_c[10]=a10;V_i[11]=a11;V_c[12]=a12;V_c[13]=a13;V_c[14]=a14;V_f[15]=a15;V_l[16]=a16;V_c[17]=a17;V_d[18]=a18;V_s[19]=a19;V_f[20]=a20;ret_p(20)}
+/* 100:vdlsfcpcjlsiccj */ v f100(d a1,l a2,s a3,f a4,c a5,p a6,c a7,j a8,l a9,s a10,i a11,c a12,c a13,j a14){fid=100;V_d[1]=a1;V_l[2]=a2;V_s[3]=a3;V_f[4]=a4;V_c[5]=a5;V_p[6]=a6;V_c[7]=a7;V_j[8]=a8;V_l[9]=a9;V_s[10]=a10;V_i[11]=a11;V_c[12]=a12;V_c[13]=a13;V_j[14]=a14;ret_v(14)}
+funptr G_funtab[] = {
+	(funptr)&f1,
+	(funptr)&f2,
+	(funptr)&f3,
+	(funptr)&f4,
+	(funptr)&f5,
+	(funptr)&f6,
+	(funptr)&f7,
+	(funptr)&f8,
+	(funptr)&f9,
+	(funptr)&f10,
+	(funptr)&f11,
+	(funptr)&f12,
+	(funptr)&f13,
+	(funptr)&f14,
+	(funptr)&f15,
+	(funptr)&f16,
+	(funptr)&f17,
+	(funptr)&f18,
+	(funptr)&f19,
+	(funptr)&f20,
+	(funptr)&f21,
+	(funptr)&f22,
+	(funptr)&f23,
+	(funptr)&f24,
+	(funptr)&f25,
+	(funptr)&f26,
+	(funptr)&f27,
+	(funptr)&f28,
+	(funptr)&f29,
+	(funptr)&f30,
+	(funptr)&f31,
+	(funptr)&f32,
+	(funptr)&f33,
+	(funptr)&f34,
+	(funptr)&f35,
+	(funptr)&f36,
+	(funptr)&f37,
+	(funptr)&f38,
+	(funptr)&f39,
+	(funptr)&f40,
+	(funptr)&f41,
+	(funptr)&f42,
+	(funptr)&f43,
+	(funptr)&f44,
+	(funptr)&f45,
+	(funptr)&f46,
+	(funptr)&f47,
+	(funptr)&f48,
+	(funptr)&f49,
+	(funptr)&f50,
+	(funptr)&f51,
+	(funptr)&f52,
+	(funptr)&f53,
+	(funptr)&f54,
+	(funptr)&f55,
+	(funptr)&f56,
+	(funptr)&f57,
+	(funptr)&f58,
+	(funptr)&f59,
+	(funptr)&f60,
+	(funptr)&f61,
+	(funptr)&f62,
+	(funptr)&f63,
+	(funptr)&f64,
+	(funptr)&f65,
+	(funptr)&f66,
+	(funptr)&f67,
+	(funptr)&f68,
+	(funptr)&f69,
+	(funptr)&f70,
+	(funptr)&f71,
+	(funptr)&f72,
+	(funptr)&f73,
+	(funptr)&f74,
+	(funptr)&f75,
+	(funptr)&f76,
+	(funptr)&f77,
+	(funptr)&f78,
+	(funptr)&f79,
+	(funptr)&f80,
+	(funptr)&f81,
+	(funptr)&f82,
+	(funptr)&f83,
+	(funptr)&f84,
+	(funptr)&f85,
+	(funptr)&f86,
+	(funptr)&f87,
+	(funptr)&f88,
+	(funptr)&f89,
+	(funptr)&f90,
+	(funptr)&f91,
+	(funptr)&f92,
+	(funptr)&f93,
+	(funptr)&f94,
+	(funptr)&f95,
+	(funptr)&f96,
+	(funptr)&f97,
+	(funptr)&f98,
+	(funptr)&f99,
+	(funptr)&f100,
+};
+char const * G_sigtab[] = {
+	"jifjdidpslfdfpifdflclcsjfjsdd",
+	"fdsdcjjjjlpd",
+	"jlisplppcdifsjfsjcliipfpcpj",
+	"cjsjpcjsipcfccljpcpplsslji",
+	"vijsclcsdjijsficilfjpdfjiffiljc",
+	"fiffdisiicijddpjdpsici",
+	"scllcsjjilfjcpfsj",
+	"ddcfdispifjpjicffjfsis",
+	"jjfflllfipdsjsjdscd",
+	"ildl",
+	"llllppplsldpccjsflsj",
+	"ippcii",
+	"jdipcdpc",
+	"jjlspi",
+	"cdicfiidisdsp",
+	"pfcdlcpsiccpifdll",
+	"pfjf",
+	"plispfpjjijdjij",
+	"cjlfs",
+	"fddljfldscfcc",
+	"vlpdsdidfsfjcidijspcldsfijis",
+	"jfljilsflciddclicljsssisiifpci",
+	"p",
+	"cjj",
+	"sjpidpsdldcjfippicilfl",
+	"psfcffpijlfjjlpssc",
+	"cpiijlppici",
+	"jfslddfifcdscfllpfjffff",
+	"ppcdclclclpic",
+	"jd",
+	"flsdfpssplsilflfpsfdlplffsfisj",
+	"fi",
+	"cpipsssjssfjpsjdijllsjdspfsiscd",
+	"fiildffcjdpjsplidlspji",
+	"dcssppdcjfif",
+	"csdplfddlifispppj",
+	"lissccfiiis",
+	"cffccljpsdjffifsllppddlipf",
+	"dpjlscjiijdcllflsiicjjsfccsd",
+	"pldpcscpppilpldsjpsppf",
+	"fifffldcpf",
+	"lijcsijlpippi",
+	"vssdpsdffjjidjisfdfliljsdfip",
+	"s",
+	"ciplclcfpclsippfcjssp",
+	"lld",
+	"sidsjjslfliicjpjslfssidijjcdj",
+	"jsjcdclsdsslifffcssjissjjdjclsjl",
+	"pislpl",
+	"fppssdijcjfjjfcjfdjij",
+	"psjcijjpscsfciififcldcippilfl",
+	"cpfcslscs",
+	"pfscjsicdpfjcjifjljscifccdf",
+	"sddijdsfpfjf",
+	"cii",
+	"ssccdjlssjcsc",
+	"vldsslfllsdfliccjilsspijil",
+	"dpcplpjjppididdsjiliplis",
+	"pdfffpijfsjpjdljljcpslfspjsjdsili",
+	"vslsccpdffppssdicils",
+	"jjippjlpflcifdpidddcffc",
+	"dlfcdppclifdsss",
+	"pps",
+	"fsicsfpsdifclpllspifcdlssfd",
+	"ls",
+	"pcllscfdfdljfcfjdldcdlfjcclcscf",
+	"cjjfdsiliicdlpciscppcdfccpcssjd",
+	"vpcdpppj",
+	"pdcspslifccficpisicdsjf",
+	"jljsp",
+	"ddipfllddjficls",
+	"lcc",
+	"vijlslssscfp",
+	"fjlspsddsdlcci",
+	"jjiddsddcjscdpidp",
+	"lfl",
+	"sipslcdccjsifddcifijdsfdjsiscp",
+	"dcifsspsdffjjjlccdd",
+	"fjfff",
+	"fccs",
+	"ipffplspcdjclfdldiiilsifippij",
+	"lcliijcjfcipijiflpislfdpiiil",
+	"cddlfdccfllffddpjs",
+	"pjdspicppiipssiflpsssidls",
+	"fffipjp",
+	"iiljilpppjpcsdddijpfsjjsjipidd",
+	"scjdscdl",
+	"ji",
+	"cjjllcpllsli",
+	"picllsjipssddlcjdijfcl",
+	"sjclccsdspcfpp",
+	"lipjddjpdlislpdfppsddfccppffsii",
+	"plfliij",
+	"ilp",
+	"jpjpicpdlsiclffifsplplsdjspspis",
+	"jfliipdlilisj",
+	"iipfdfl",
+	"lcspcfilfsc",
+	"pffjliljjfcicccflcdsf",
+	"vdlsfcpcjlsiccj",
+};
+int G_maxargs = 32;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/cases.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,100 @@
+jifjdidpslfdfpifdflclcsjfjsdd
+fdsdcjjjjlpd
+jlisplppcdifsjfsjcliipfpcpj
+cjsjpcjsipcfccljpcpplsslji
+vijsclcsdjijsficilfjpdfjiffiljc
+fiffdisiicijddpjdpsici
+scllcsjjilfjcpfsj
+ddcfdispifjpjicffjfsis
+jjfflllfipdsjsjdscd
+ildl
+llllppplsldpccjsflsj
+ippcii
+jdipcdpc
+jjlspi
+cdicfiidisdsp
+pfcdlcpsiccpifdll
+pfjf
+plispfpjjijdjij
+cjlfs
+fddljfldscfcc
+vlpdsdidfsfjcidijspcldsfijis
+jfljilsflciddclicljsssisiifpci
+p
+cjj
+sjpidpsdldcjfippicilfl
+psfcffpijlfjjlpssc
+cpiijlppici
+jfslddfifcdscfllpfjffff
+ppcdclclclpic
+jd
+flsdfpssplsilflfpsfdlplffsfisj
+fi
+cpipsssjssfjpsjdijllsjdspfsiscd
+fiildffcjdpjsplidlspji
+dcssppdcjfif
+csdplfddlifispppj
+lissccfiiis
+cffccljpsdjffifsllppddlipf
+dpjlscjiijdcllflsiicjjsfccsd
+pldpcscpppilpldsjpsppf
+fifffldcpf
+lijcsijlpippi
+vssdpsdffjjidjisfdfliljsdfip
+s
+ciplclcfpclsippfcjssp
+lld
+sidsjjslfliicjpjslfssidijjcdj
+jsjcdclsdsslifffcssjissjjdjclsjl
+pislpl
+fppssdijcjfjjfcjfdjij
+psjcijjpscsfciififcldcippilfl
+cpfcslscs
+pfscjsicdpfjcjifjljscifccdf
+sddijdsfpfjf
+cii
+ssccdjlssjcsc
+vldsslfllsdfliccjilsspijil
+dpcplpjjppididdsjiliplis
+pdfffpijfsjpjdljljcpslfspjsjdsili
+vslsccpdffppssdicils
+jjippjlpflcifdpidddcffc
+dlfcdppclifdsss
+pps
+fsicsfpsdifclpllspifcdlssfd
+ls
+pcllscfdfdljfcfjdldcdlfjcclcscf
+cjjfdsiliicdlpciscppcdfccpcssjd
+vpcdpppj
+pdcspslifccficpisicdsjf
+jljsp
+ddipfllddjficls
+lcc
+vijlslssscfp
+fjlspsddsdlcci
+jjiddsddcjscdpidp
+lfl
+sipslcdccjsifddcifijdsfdjsiscp
+dcifsspsdffjjjlccdd
+fjfff
+fccs
+ipffplspcdjclfdldiiilsifippij
+lcliijcjfcipijiflpislfdpiiil
+cddlfdccfllffddpjs
+pjdspicppiipssiflpsssidls
+fffipjp
+iiljilpppjpcsdddijpfsjjsjipidd
+scjdscdl
+ji
+cjjllcpllsli
+picllsjipssddlcjdijfcl
+sjclccsdspcfpp
+lipjddjpdlislpdfppsddfccppffsii
+plfliij
+ilp
+jpjpicpdlsiclffifsplplsdjspspis
+jfliipdlilisj
+iipfdfl
+lcspcfilfsc
+pffjliljjfcicccflcdsf
+vdlsfcpcjlsiccj
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/config.lua	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,6 @@
+-- user config for rand-sig.lua:
+minargs  = 0
+maxargs  = 32
+ncases   = 100
+types    = "csijlpfd"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/design.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,68 @@
+vffffffffffffffff
+vfffffffffffffffff
+vf
+vff
+vfff
+vffff
+vfffff
+vffffff
+vfffffff
+vd
+vdd
+vddd
+vdddd
+vddddd
+vdddddd
+vddddddd
+vfffddd
+vdddfff
+vffffffd
+vddddddf
+vlllllld
+vlllllldd
+vllllllddd
+vlllllldddd
+vllllllff
+vllllllfff
+vllllllffff
+vllllllfffffffffffffff
+vllllllffffffffffffffff
+vlllllldddddddddddddddd
+vllllllddddddddddddddddd
+vdddddddddddddddd
+vddddddddddddddddd
+vddddddddddddddddl
+vllllllllllllllll
+vlllllllllllllllll
+vlllldllllllllllll
+vlllldddd
+vllllddddll
+vllllddddlllll
+vllllddddlllllllll
+vdfdfdfdfdf
+vdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf
+vfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd
+vd
+vdd
+vddd
+vdddd
+vddddd
+vdddddd
+vddddddd
+vdddddddd
+vddddddddd
+vdddddddddd
+vddddddddddd
+vdddddddddddd
+vddddddddddddd
+vdddddddddddddd
+vddddddddddddddd
+vdddddddddddddddd
+vddddddddddddddddd
+vdddddddddddddddddd
+vddddddddddddddddddd
+vdddddddddddddddddddd
+vddddddddddddddddddddd
+vdddddddddddddddddddddd
+vddddddddddddddddddddddd
+vdddddddddddddddddddddddd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/globals.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,65 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/call_suite/globals.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include <stdlib.h>
+#include "globals.h"
+#include <float.h>
+
+#define X(CH,T,QCH) T *V_##CH; T *K_##CH; 
+DEF_TYPES
+#undef X
+
+int       fid;
+
+double rand_d() { return ( ( (double) rand() )  / ( (double) RAND_MAX ) ); }
+
+void init_K()
+{
+  int i;
+#define X(CH,T,QCH) V_##CH = (T*) malloc(sizeof(T)*G_maxargs); K_##CH = (T*) malloc(sizeof(T)*G_maxargs);
+DEF_TYPES
+#undef X
+  for(i=0;i<G_maxargs;++i) {
+    K_c[i] = (char)      (((rand_d()-0.5)*2) * (1<<7));
+    K_s[i] = (short)     (((rand_d()-0.5)*2) * (1<<(sizeof(short)*8-1)));
+    K_i[i] = (int)       (((rand_d()-0.5)*2) * (1<<(sizeof(int)*8-2)));
+    K_j[i] = (long)      (((rand_d()-0.5)*2) * (1L<<(sizeof(long)*8-2)));
+    K_l[i] = (long long) (((rand_d()-0.5)*2) * (1LL<<(sizeof(long long)*8-2)));
+    K_p[i] = (void*)     (long) (((rand_d()-0.5)*2) * (1LL<<(sizeof(void*)*8-1)));
+    K_f[i] = (float)     (rand_d() * FLT_MAX);	/* Plan9 doesn't know the macro. */
+    K_d[i] = (double)    (((rand_d()-0.5)*2) * 1.7976931348623157E+308/*__DBL_MAX__*/);	/* Plan9 doesn't know the macro. */
+  }
+}
+
+void clear_V()
+{
+  int i;
+  for(i=0;i<G_maxargs;++i) {
+#define X(CH,T,QCH) V_##CH[i] = (T) 0;
+DEF_TYPES
+#undef X
+  }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/globals.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,65 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/call_suite/globals.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#define DEF_TYPES X(c,char,'c') X(s,short,'s') X(i,int,'i') X(j,long,'j') X(l,long long,'l') X(p,void*,'p') X(f,float,'f') X(d,double,'d')
+
+#define X(CH,T,QCH) extern T *K_##CH; extern T *V_##CH;
+DEF_TYPES
+#undef X
+
+typedef void (*funptr)();
+
+extern void       * G_callvm;
+extern funptr       G_funtab[];
+extern char const * G_sigtab[];
+extern int          G_ncases;
+extern int          G_maxargs;
+
+void init_K();
+void init_T();
+void clear_V();
+int  invoke(char const* signature, void* target);
+
+#if 0
+extern const char      *K_c;
+extern const short     *K_s;
+extern const int       *K_i;
+extern const long      *K_j;
+extern const long long *K_l;
+extern void* const     *K_p;
+extern const float     *K_f;
+extern const double    *K_d;
+
+extern char      *V_c;
+extern short     *V_s;
+extern int       *V_i;
+extern long      *V_j;
+extern long long *V_l;
+extern void*     *V_p;
+extern float     *V_f;
+extern double    *V_d;
+#endif 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/invoke.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,102 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/call_suite/invoke.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "dyncall.h"
+#include "globals.h"
+#include "../common/platformInit.h"
+
+int invoke(char const* signature, void* t)
+{
+  DCCallVM   * p = (DCCallVM*) G_callvm;
+  char const * sig = signature;
+  char         rtype;
+  char         atype;
+  int          pos = 0;
+  int          s = 0;
+
+  clear_V();
+  
+  rtype = *sig++;
+  dcReset(p);
+
+  while ( (atype = *sig++) != '\0') {
+    pos++;
+    switch(atype) {
+      case 'c': dcArgChar    (p,K_c[pos]); break;
+      case 's': dcArgShort   (p,K_s[pos]); break;
+      case 'i': dcArgInt     (p,K_i[pos]); break;
+      case 'j': dcArgLong    (p,K_j[pos]); break;
+      case 'l': dcArgLongLong(p,K_l[pos]); break;
+      case 'p': dcArgPointer (p,K_p[pos]); break;
+      case 'f': dcArgFloat   (p,K_f[pos]); break;
+      case 'd': dcArgDouble  (p,K_d[pos]); break;
+      default: printf("unknown atype '%c' (1) ;", atype); return 0;
+    }
+  }
+  
+  switch(rtype) 
+  {
+    case 'v': dcCallVoid(p,t); s=1; /*TODO:check that no return-arg was touched.*/ break;
+    case 'c': s = (dcCallChar    (p,t) == K_c[pos]) ; break;
+    case 's': s = (dcCallShort   (p,t) == K_s[pos]) ; break;
+    case 'i': s = (dcCallInt     (p,t) == K_i[pos]) ; break;
+    case 'j': s = (dcCallLong    (p,t) == K_j[pos]) ; break;
+    case 'l': s = (dcCallLongLong(p,t) == K_l[pos]) ; break;
+    case 'p': s = (dcCallPointer (p,t) == K_p[pos]) ; break;
+    case 'f': s = (dcCallFloat   (p,t) == K_f[pos]) ; break;
+    case 'd': s = (dcCallDouble  (p,t) == K_d[pos]) ; break;
+    default: printf("unknown rtype '%c'", rtype); return 0;
+  }
+
+  if (!s) { printf("rval wrong;"); return 0; }
+  /* test: */
+  sig = signature+1;
+  pos = 1;
+  while ( (atype = *sig++) != '\0') {
+    switch(atype) {
+#if 0
+#define X(CH,T,QCH) case QCH: s = (V_##CH[pos] == K_##CH[pos]); break;
+DEF_TYPES
+#undef X
+#endif
+      case 'c': s = ( V_c[pos] == K_c[pos] ); if (!s) printf("'c':%d: %d != %d ; ", pos, V_c[pos], K_c[pos]); break;
+      case 's': s = ( V_s[pos] == K_s[pos] ); if (!s) printf("'s':%d: %d != %d ; ", pos, V_s[pos], K_s[pos]); break;
+      case 'i': s = ( V_i[pos] == K_i[pos] ); if (!s) printf("'i':%d: %d != %d ; ", pos, V_i[pos], K_i[pos]); break;
+      case 'j': s = ( V_j[pos] == K_j[pos] ); if (!s) printf("'j':%d: %ld != %ld ; ", pos, V_j[pos], K_j[pos]); break;
+      case 'l': s = ( V_l[pos] == K_l[pos] ); if (!s) printf("'l':%d: %lld != %lld ; ", pos, V_l[pos], K_l[pos]); break;
+      case 'p': s = ( V_p[pos] == K_p[pos] ); if (!s) printf("'p':%d: %lld != %lld ; ", pos, (long long) V_p[pos], (long long) K_p[pos]); break;
+      case 'f': s = ( V_f[pos] == K_f[pos] ); if (!s) printf("'f':%d: %f != %f ; ", pos, V_f[pos], K_f[pos]); break;
+      case 'd': s = ( V_d[pos] == K_d[pos] ); if (!s) printf("'d':%d: %f != %f ; ", pos, V_d[pos], K_d[pos]); break;
+      default: printf("unknown atype '%c' ; ", atype); return 0;
+    }
+    if (!s) {
+      printf("arg mismatch at %d ; ", pos);
+      return 0;
+    }
+    pos++;
+  }
+  return 1;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/main.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,73 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/call_suite/main.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "dyncall.h"
+#include "globals.h"
+#include <string.h>
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+char  linebuf[1024];
+void* G_callvm;
+  
+int run_test(int i) {  
+  char const * sig;
+  void * target;
+  int success;
+  sig = G_sigtab[i];
+  target = (void*) G_funtab[i];
+  printf("%d:%s:",i,sig);
+  success = invoke(sig,target);
+  printf("%d\n",success);
+  return success;
+}
+
+int run_all() {
+  int i;
+  int failure = 0;
+  for(i=0;i<G_ncases;++i) {
+    failure |= !( run_test(i) );
+  }
+  return !failure;
+}
+
+int main(int argc, char* argv[])
+{
+  int total;
+
+  dcTest_initPlatform();
+
+  init_K(G_maxargs);
+  G_callvm = (DCCallVM*) dcNewCallVM(4096);
+  dcReset(G_callvm);
+  total = run_all();
+  printf("result: call_suite: %d\n", total);
+
+  dcTest_deInitPlatform();
+
+  return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/mk-cases.lua	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,77 @@
+require"math"
+local max = math.max
+local maxargs = 0
+
+function trim(l) return l:gsub("^%s+",""):gsub("%s+$","") end
+function mkcase(id,sig)
+  local sig = trim(sig)
+  local h = { "/* ",id,":",sig," */ ",sig:sub(1,1), " f", id,"(",""}
+  local t = { "fid=",id,";" }
+  local pos = 0
+  maxargs = max(maxargs, #sig-1)
+  for i = 2, #sig do 
+    pos = tostring(i-1)
+    local name = "a"..pos
+    local ch   = sig:sub(i,i)
+    
+    h[#h+1] = ch
+    h[#h+1] = " "
+    h[#h+1] = name
+    h[#h+1] = ","
+
+    t[#t+1] = "V_"
+    t[#t+1] = ch
+    t[#t+1] = "["
+    t[#t+1] = pos
+    t[#t+1] = "]"
+    t[#t+1] = "="
+    t[#t+1] = name
+    t[#t+1] = ";"
+  end
+  h[#h] = "){"
+  t[#t+1] = "ret_"
+  t[#t+1] = sig:sub(1,1)
+  t[#t+1] = "("
+  t[#t+1] = pos
+  t[#t+1] = ")"
+  t[#t+1] = "}\n"
+  return table.concat(h,"")..table.concat(t,"")
+end
+
+function mkfuntab(n)
+  local s = { "funptr G_funtab[] = {\n"}
+  for i = 1, n do
+    s[#s+1] = "\t(funptr)&f"..i..",\n"
+  end
+  s[#s+1] = "};\n"
+  return table.concat(s,"")
+end
+
+function mksigtab(sigs)
+  local s = { "char const * G_sigtab[] = {\n"}
+  for k,v in pairs(sigs) do
+    s[#s+1] = '\t"'
+    s[#s+1] = v
+    s[#s+1] = '",\n'
+  end
+  s[#s+1] = "};\n"
+  return table.concat(s,"")
+end
+
+function mkall()
+  local lineno = 1
+  local sigtab = { }
+  for line in io.lines() do
+    local sig = trim(line)
+    io.write(mkcase(lineno,sig))
+    sigtab[#sigtab+1] = sig
+    lineno = lineno + 1
+  end
+  io.write(mkfuntab(lineno-1))
+  io.write(mksigtab(sigtab))
+  io.write("int G_maxargs = "..maxargs..";\n")
+end
+
+mkall()
+-- print(mkcase(1,"vififififi"))
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,37 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+TOP		= ../..
+<$TOP/buildsys/mk/prolog.mk
+
+
+UNITS       = globals invoke cases main
+APPLICATION = call_suite
+LIBS        = $TOP/dyncall/libdyncall_s.a$O
+
+#.PHONY: config 
+#config: mkconfig.lua rand-sig.lua mk-cases.lua
+#	echo Generating test cases...
+#	lua mk-config.lua >config.h
+#	lua rand-sig.lua >cases.txt
+#	lua mk-cases.lua <cases.txt >cases.h 
+
+
+<$TOP/buildsys/mk/epilog.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/rand-sig.lua	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,19 @@
+require"config"
+
+rtypes   = "v"..types
+
+math.randomseed(2342)
+local sigs = { }
+local id
+for i = 1, ncases do
+  id = math.random(#rtypes)
+  local nargs = math.random(minargs,maxargs)
+  local sig   = { rtypes:sub(id,id)}
+  for j = 1, nargs do
+    id = math.random(#types)
+    sig[#sig+1] = types:sub(id,id)
+  end
+  io.write(table.concat(sig))
+  io.write("\n")
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_plain/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+#
+add_executable(callback_plain callback_plain.c)
+target_link_libraries(callback_plain dyncallback_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_plain/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_plain/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,19 @@
+APP = callback_plain
+OBJS = callback_plain.o
+
+SRCTOP   = ../..
+BLDTOP   = ${SRCTOP}
+CFLAGS  += -I${SRCTOP}/dyncall
+LDFLAGS += -L${BLDDIR}/dyncallback
+LDLIBS  += -ldyncallback_s
+
+all: ${APP}
+
+.PHONY: all clean install
+
+${APP}: ${OBJS} 
+	${CC} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP} 
+
+clean:
+	rm -f ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_plain/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,15 @@
+APP     = callback_plain
+OBJS    = callback_plain.o
+SRCTOP  = ${VPATH}/../..
+BLDTOP  = ../..
+CFLAGS += -I${SRCTOP}/dyncall
+LDLIBS += -L${BLDTOP}/dyncallback -ldyncallback_s
+.PHONY: all clean install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CC} ${CFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP}
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_plain/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,59 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = callback_plain.exe
+OBJS = callback_plain.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib $(TOP)\dyncallback\libdyncallback_s.lib
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = callback_plain.nds
+OBJS = callback_plain.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a $(TOP)\dyncallback\libdyncallback_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_plain/callback_plain.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,81 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_plain/callback_plain.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "../../dyncallback/dyncall_thunk.h"
+#include "../../dyncallback/dyncall_callback.h"
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+char cbHandler(DCCallback* cb, DCArgs* args, DCValue* result, void* userdata)
+{
+  int* ud = (int*)userdata;
+  int       arg1 = dcbArgInt     (args);
+  float     arg2 = dcbArgFloat   (args);
+  short     arg3 = dcbArgShort   (args);
+  double    arg4 = dcbArgDouble  (args);
+  long long arg5 = dcbArgLongLong(args);
+
+  printf("reached callback\n");
+  printf("userdata (should be 1337): %d\n", *ud);
+  printf("1st argument (should be  123): %d\n", arg1);
+  printf("2nd argument (should be 23.f): %f\n", arg2);
+  printf("3rd argument (should be    3): %d\n", arg3);
+  printf("4th argument (should be 1.82): %f\n", arg4);
+  printf("5th argument (should be 9909): %lld\n", arg5);
+
+  if(*ud == 1337) *ud = 1;
+  if(arg1 ==  123) ++*ud;
+  if(arg2 == 23.f) ++*ud;
+  if(arg3 ==    3) ++*ud;
+  if(arg4 == 1.82) ++*ud;
+  if(arg5 == 9909) ++*ud;
+  result->s = 1234;
+  return 's';
+}
+
+
+int main()
+{
+  DCCallback* cb;
+  short result = 0;
+  int userdata = 1337;
+
+  dcTest_initPlatform();
+
+  printf("about to callback...\n");
+  cb = dcbNewCallback("ifsdl)s", &cbHandler, &userdata);
+  result = ((short(*)(int, float, short, double, long long))cb)(123, 23.f, 3, 1.82, 9909ull);
+  dcbFreeCallback(cb);
+  printf("successfully returned from callback\n");
+  printf("return value (should be 1234): %d\n", result);
+
+  printf("result: callback_plain: %s\n", (userdata == 6) && (result == 1234) ? "1" : "0");
+
+  dcTest_deInitPlatform();
+
+  return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_plain/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_plain/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2013 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+TOP		= ../..
+<$TOP/buildsys/mk/prolog.mk
+
+
+UNITS       = callback_plain
+APPLICATION = callback_plain
+LIBS        = $TOP/dyncallback/libdyncallback_s.a$O
+
+
+<$TOP/buildsys/mk/epilog.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+add_executable(callback_suite env.c handler.c sigstrings.c invokers.c do_test.c main.c print.c signature_utils.c)
+target_link_libraries(callback_suite dyncallback_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,19 @@
+APP = callback_suite
+OBJS = env.o handler.o sigstrings.o invokers.o do_test.o main.o print.o signature_utils.o
+
+SRCTOP   = ../..
+BLDTOP   = ${SRCTOP}
+CFLAGS  += -I${SRCTOP}/dyncall -I${SRCTOP}/dyncallback
+LDFLAGS += -L${BLDTOP}/dyncall -L${BLDTOP}/dyncallback
+LDLIBS  += -ldyncall_s -ldyncallback_s
+
+all: ${APP}
+
+.PHONY: all clean install
+
+${APP}: ${OBJS} 
+	${CC} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP} 
+
+clean:
+	rm -f ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,50 @@
+APP      = callback_suite
+OBJS     = env.o handler.o sigstrings.o invokers.o do_test.o main.o print.o signature_utils.o
+SRCTOP   = ${VPATH}/../..
+BLDTOP   = ../..
+CFLAGS  += -I${SRCTOP}/dyncall -I${SRCTOP}/dyncallback
+LDLIBS  += -L${BLDTOP}/dyncall -ldyncall_s -L${BLDTOP}/dyncallback -ldyncallback_s
+LUA      = lua
+AUTOS    = _auto_config.h _auto_sigstrings.h _auto_invokers.h \
+		   _auto_invoke_macros.h _auto_invoke_table.h _auto_signatures.txt
+
+.PHONY: all clean install config clean-config 
+all: ${APP}
+${APP}: ${OBJS} 
+	${CC} ${CFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP}
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+config: clean-config ${AUTOS}
+config-random:
+	echo "-- auto-generated file from temlate config-random.lua (created by GNUmake)" >config.lua
+	cat config-random.lua >>config.lua
+	${MAKE} config
+config-stress1:
+	echo "-- auto-generated file from temlate config-stress1.lua (created by GNUmake)" >config.lua
+	cat config-stress1.lua >>config.lua
+	${MAKE} config
+
+clean-config: clean
+	rm -f ${AUTOS}
+
+_auto_signatures.txt: 
+	${LUA} make-signatures.lua >$@
+
+_auto_invokers.h: _auto_signatures.txt 
+	${LUA} make-invokers.lua <$< >$@
+
+_auto_sigstrings.h: _auto_signatures.txt
+	${LUA} make-cstrings.lua <$< >$@
+
+_auto_config.h: 
+	${LUA} make-config.lua >$@
+
+_auto_invoke_macros.h:
+	${LUA} make-invoke-macros.lua >$@
+
+_auto_invoke_table.h:
+	${LUA} make-invoke-table.lua >$@
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,59 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = callback_suite.exe
+
+OBJS = env.obj handler.obj sigstrings.obj invokers.obj do_test.obj main.obj print.obj signature_utils.obj
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib $(TOP)\dyncallback\libdyncallback_s.lib
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = callback_suite.nds
+OBJS = env.o handler.o sigstrings.o invokers.o do_test.o main.o print.o signature_utils.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a $(TOP)\dyncallback\libdyncallback_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,66 @@
+Callback Test Suite 2 
+---------------------
+
+REQUIREMENTS
+- dyncall
+- ANSI C compiler
+- lua (tested with 5.1)
+
+CONFIGURE SUITE
+
+  edit config.lua and run "make config".
+
+DESCRIPTION
+
+Generates a set of callback invokers in C using lua as a preprocessor.
+The invokers put up an argument vector using a global Value-Matrix which
+holds a specific type-specific value pattern as a function of position.
+
+The Value-Matrix
+
+The value-matrix is a data structure consisting of n x m elements of
+type DCValueSet which can store distinct numbers for each type.
+
+It is used in the body of the auto-generated callback invokers (C code).
+
+The Callback Invocation Body
+
+Example:
+The body for a signature of type  "dpdf)p" at case id 19 is:
+
+void f19(void* addr) 
+{ 
+  Result.p = ((CONFIG_API p(*)(d,p,d,f))addr)(ValueMatrix[0].d,ValueMatrix[1].p,ValueMatrix[2].d,ValueMatrix[3].f);
+}              ^^^^^^^^^^- calling convention
+                          ^^^^^^^^^^^^^- signature
+         ^- return type signature
+                                                  ^- arg signature char 0 (later expected) value
+
+
+Result (type DCValue)  and ValueMatrix (type DCValueSet[MAXARGS]) are globals. 
+The ValueMatrix is initialized once from main.c for all cominations of types
+and argument position.
+See env.* files for details.
+
+
+Reference argument and result value
+
+The value is generated by a pure function GetReferenceValue and
+GetReferenceResult (file env.c). They have formals position and type 
+and are pure without any side-effects (means the function value does only
+relay on the input arguments - if called with same arguments it will reveal
+the same value.
+
+It defined in env.c.
+
+Tssting for exotic calling conventions on Windows:
+
+Specify 'api' and 'ccprefix' accordingly:
+
+
+"__stdcall"	"_s"
+"__fastcall"	"_f" for gcc compiler
+		"_F" for microsoft compiler
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/_auto_config.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+#define CONFIG_NSIGS 400
+#define CONFIG_MAXARGS 29
+#define CONFIG_API 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/_auto_invoke_macros.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+#define F0(ID,R) void ID(void* addr) { Result.R = ((CONFIG_API R(*)())addr)();}
+#define F1(ID,R,A0) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0))addr)(A[0].A0);}
+#define F2(ID,R,A0,A1) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1))addr)(A[0].A0,A[1].A1);}
+#define F3(ID,R,A0,A1,A2) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2))addr)(A[0].A0,A[1].A1,A[2].A2);}
+#define F4(ID,R,A0,A1,A2,A3) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3);}
+#define F5(ID,R,A0,A1,A2,A3,A4) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4);}
+#define F6(ID,R,A0,A1,A2,A3,A4,A5) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5);}
+#define F7(ID,R,A0,A1,A2,A3,A4,A5,A6) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6);}
+#define F8(ID,R,A0,A1,A2,A3,A4,A5,A6,A7) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7);}
+#define F9(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8);}
+#define F10(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9);}
+#define F11(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10);}
+#define F12(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11);}
+#define F13(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12);}
+#define F14(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13);}
+#define F15(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14);}
+#define F16(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15);}
+#define F17(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15,A[16].A16);}
+#define F18(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15,A[16].A16,A[17].A17);}
+#define F19(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15,A[16].A16,A[17].A17,A[18].A18);}
+#define F20(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15,A[16].A16,A[17].A17,A[18].A18,A[19].A19);}
+#define F21(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15,A[16].A16,A[17].A17,A[18].A18,A[19].A19,A[20].A20);}
+#define F22(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15,A[16].A16,A[17].A17,A[18].A18,A[19].A19,A[20].A20,A[21].A21);}
+#define F23(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15,A[16].A16,A[17].A17,A[18].A18,A[19].A19,A[20].A20,A[21].A21,A[22].A22);}
+#define F24(ID,R,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22,A23) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22,A23))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15,A[16].A16,A[17].A17,A[18].A18,A[19].A19,A[20].A20,A[21].A21,A[22].A22,A[23].A23);}
+#define F25(ID,R,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) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(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))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15,A[16].A16,A[17].A17,A[18].A18,A[19].A19,A[20].A20,A[21].A21,A[22].A22,A[23].A23,A[24].A24);}
+#define F26(ID,R,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) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(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))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15,A[16].A16,A[17].A17,A[18].A18,A[19].A19,A[20].A20,A[21].A21,A[22].A22,A[23].A23,A[24].A24,A[25].A25);}
+#define F27(ID,R,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) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(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))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15,A[16].A16,A[17].A17,A[18].A18,A[19].A19,A[20].A20,A[21].A21,A[22].A22,A[23].A23,A[24].A24,A[25].A25,A[26].A26);}
+#define F28(ID,R,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) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(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))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15,A[16].A16,A[17].A17,A[18].A18,A[19].A19,A[20].A20,A[21].A21,A[22].A22,A[23].A23,A[24].A24,A[25].A25,A[26].A26,A[27].A27);}
+#define F29(ID,R,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) void ID(void* addr) { Result.R = ((CONFIG_API R(*)(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))addr)(A[0].A0,A[1].A1,A[2].A2,A[3].A3,A[4].A4,A[5].A5,A[6].A6,A[7].A7,A[8].A8,A[9].A9,A[10].A10,A[11].A11,A[12].A12,A[13].A13,A[14].A14,A[15].A15,A[16].A16,A[17].A17,A[18].A18,A[19].A19,A[20].A20,A[21].A21,A[22].A22,A[23].A23,A[24].A24,A[25].A25,A[26].A26,A[27].A27,A[28].A28);}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/_auto_invoke_table.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,400 @@
+&f1,
+&f2,
+&f3,
+&f4,
+&f5,
+&f6,
+&f7,
+&f8,
+&f9,
+&f10,
+&f11,
+&f12,
+&f13,
+&f14,
+&f15,
+&f16,
+&f17,
+&f18,
+&f19,
+&f20,
+&f21,
+&f22,
+&f23,
+&f24,
+&f25,
+&f26,
+&f27,
+&f28,
+&f29,
+&f30,
+&f31,
+&f32,
+&f33,
+&f34,
+&f35,
+&f36,
+&f37,
+&f38,
+&f39,
+&f40,
+&f41,
+&f42,
+&f43,
+&f44,
+&f45,
+&f46,
+&f47,
+&f48,
+&f49,
+&f50,
+&f51,
+&f52,
+&f53,
+&f54,
+&f55,
+&f56,
+&f57,
+&f58,
+&f59,
+&f60,
+&f61,
+&f62,
+&f63,
+&f64,
+&f65,
+&f66,
+&f67,
+&f68,
+&f69,
+&f70,
+&f71,
+&f72,
+&f73,
+&f74,
+&f75,
+&f76,
+&f77,
+&f78,
+&f79,
+&f80,
+&f81,
+&f82,
+&f83,
+&f84,
+&f85,
+&f86,
+&f87,
+&f88,
+&f89,
+&f90,
+&f91,
+&f92,
+&f93,
+&f94,
+&f95,
+&f96,
+&f97,
+&f98,
+&f99,
+&f100,
+&f101,
+&f102,
+&f103,
+&f104,
+&f105,
+&f106,
+&f107,
+&f108,
+&f109,
+&f110,
+&f111,
+&f112,
+&f113,
+&f114,
+&f115,
+&f116,
+&f117,
+&f118,
+&f119,
+&f120,
+&f121,
+&f122,
+&f123,
+&f124,
+&f125,
+&f126,
+&f127,
+&f128,
+&f129,
+&f130,
+&f131,
+&f132,
+&f133,
+&f134,
+&f135,
+&f136,
+&f137,
+&f138,
+&f139,
+&f140,
+&f141,
+&f142,
+&f143,
+&f144,
+&f145,
+&f146,
+&f147,
+&f148,
+&f149,
+&f150,
+&f151,
+&f152,
+&f153,
+&f154,
+&f155,
+&f156,
+&f157,
+&f158,
+&f159,
+&f160,
+&f161,
+&f162,
+&f163,
+&f164,
+&f165,
+&f166,
+&f167,
+&f168,
+&f169,
+&f170,
+&f171,
+&f172,
+&f173,
+&f174,
+&f175,
+&f176,
+&f177,
+&f178,
+&f179,
+&f180,
+&f181,
+&f182,
+&f183,
+&f184,
+&f185,
+&f186,
+&f187,
+&f188,
+&f189,
+&f190,
+&f191,
+&f192,
+&f193,
+&f194,
+&f195,
+&f196,
+&f197,
+&f198,
+&f199,
+&f200,
+&f201,
+&f202,
+&f203,
+&f204,
+&f205,
+&f206,
+&f207,
+&f208,
+&f209,
+&f210,
+&f211,
+&f212,
+&f213,
+&f214,
+&f215,
+&f216,
+&f217,
+&f218,
+&f219,
+&f220,
+&f221,
+&f222,
+&f223,
+&f224,
+&f225,
+&f226,
+&f227,
+&f228,
+&f229,
+&f230,
+&f231,
+&f232,
+&f233,
+&f234,
+&f235,
+&f236,
+&f237,
+&f238,
+&f239,
+&f240,
+&f241,
+&f242,
+&f243,
+&f244,
+&f245,
+&f246,
+&f247,
+&f248,
+&f249,
+&f250,
+&f251,
+&f252,
+&f253,
+&f254,
+&f255,
+&f256,
+&f257,
+&f258,
+&f259,
+&f260,
+&f261,
+&f262,
+&f263,
+&f264,
+&f265,
+&f266,
+&f267,
+&f268,
+&f269,
+&f270,
+&f271,
+&f272,
+&f273,
+&f274,
+&f275,
+&f276,
+&f277,
+&f278,
+&f279,
+&f280,
+&f281,
+&f282,
+&f283,
+&f284,
+&f285,
+&f286,
+&f287,
+&f288,
+&f289,
+&f290,
+&f291,
+&f292,
+&f293,
+&f294,
+&f295,
+&f296,
+&f297,
+&f298,
+&f299,
+&f300,
+&f301,
+&f302,
+&f303,
+&f304,
+&f305,
+&f306,
+&f307,
+&f308,
+&f309,
+&f310,
+&f311,
+&f312,
+&f313,
+&f314,
+&f315,
+&f316,
+&f317,
+&f318,
+&f319,
+&f320,
+&f321,
+&f322,
+&f323,
+&f324,
+&f325,
+&f326,
+&f327,
+&f328,
+&f329,
+&f330,
+&f331,
+&f332,
+&f333,
+&f334,
+&f335,
+&f336,
+&f337,
+&f338,
+&f339,
+&f340,
+&f341,
+&f342,
+&f343,
+&f344,
+&f345,
+&f346,
+&f347,
+&f348,
+&f349,
+&f350,
+&f351,
+&f352,
+&f353,
+&f354,
+&f355,
+&f356,
+&f357,
+&f358,
+&f359,
+&f360,
+&f361,
+&f362,
+&f363,
+&f364,
+&f365,
+&f366,
+&f367,
+&f368,
+&f369,
+&f370,
+&f371,
+&f372,
+&f373,
+&f374,
+&f375,
+&f376,
+&f377,
+&f378,
+&f379,
+&f380,
+&f381,
+&f382,
+&f383,
+&f384,
+&f385,
+&f386,
+&f387,
+&f388,
+&f389,
+&f390,
+&f391,
+&f392,
+&f393,
+&f394,
+&f395,
+&f396,
+&f397,
+&f398,
+&f399,
+&f400,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/_auto_invokers.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,400 @@
+F25(f1,c,i,L,p,f,C,S,L,s,j,I,J,i,j,d,f,J,L,c,J,B,s,c,p,C,i)
+F3(f2,p,d,s,j)
+F18(f3,c,S,J,j,I,d,S,L,j,L,i,f,s,S,p,f,B,d,j)
+F5(f4,I,l,f,S,B,B)
+F1(f5,d,s)
+F27(f6,d,p,s,j,i,L,j,l,j,B,I,d,d,L,s,L,J,S,l,C,I,f,p,S,s,f,S,l)
+F17(f7,s,l,f,I,f,i,p,l,f,I,s,d,f,C,f,J,I,J)
+F23(f8,C,S,I,s,C,s,j,i,C,f,c,c,I,L,d,d,l,i,L,i,S,s,J,s)
+F21(f9,C,c,p,C,L,c,d,B,j,C,s,p,L,l,d,J,L,c,c,j,c,B)
+F13(f10,B,p,J,L,B,C,d,C,f,c,d,B,f,c)
+F27(f11,L,J,C,C,i,f,p,i,j,J,I,l,c,j,L,S,d,J,f,L,J,B,L,p,f,f,p,d)
+F27(f12,d,d,l,I,C,p,f,c,l,s,J,s,l,S,S,s,c,J,s,l,j,d,s,j,L,c,I,J)
+F13(f13,C,S,p,I,B,S,J,p,s,l,I,I,S,l)
+F18(f14,c,B,i,l,l,J,S,C,J,J,L,S,L,C,f,l,l,s,j)
+F7(f15,l,f,l,c,c,i,J,J)
+F8(f16,C,L,S,S,C,d,B,p,S)
+F13(f17,j,d,f,L,l,c,l,i,L,d,f,f,C,p)
+F8(f18,I,f,f,f,I,J,C,s,f)
+F13(f19,I,p,I,S,C,l,L,c,J,I,p,L,C,s)
+F3(f20,d,c,i,S)
+F27(f21,j,J,p,p,I,S,i,l,J,s,C,c,c,l,i,S,S,c,i,d,J,s,l,L,I,C,f,J)
+F6(f22,L,j,i,p,i,s,S)
+F19(f23,c,d,S,f,c,i,B,L,L,S,c,f,L,B,I,d,l,C,I,f)
+F2(f24,l,i,S)
+F24(f25,c,c,B,B,I,L,l,I,c,J,J,j,J,i,S,f,I,C,J,j,J,J,s,p,B)
+F27(f26,s,C,I,s,p,S,i,f,S,p,l,B,s,L,J,p,S,s,C,J,c,l,L,L,C,i,S,I)
+F11(f27,f,j,C,j,B,i,i,S,L,s,l,j)
+F20(f28,J,p,l,S,l,B,j,p,J,J,j,i,i,L,p,l,C,B,B,l,C)
+F21(f29,i,j,B,B,S,s,l,f,C,S,l,f,l,S,f,C,C,j,p,l,f,C)
+F21(f30,L,f,j,L,d,s,f,j,d,I,j,d,p,p,J,l,d,d,S,f,J,J)
+F23(f31,j,p,s,J,I,C,p,f,f,l,i,J,J,l,j,C,J,B,l,j,p,j,c,I)
+F1(f32,i,p)
+F19(f33,J,I,C,i,s,i,B,L,J,p,J,I,I,d,B,c,J,J,s,s)
+F27(f34,j,L,I,I,p,d,d,f,L,S,j,s,I,d,I,f,d,C,I,L,L,f,s,L,d,S,i,j)
+F18(f35,s,C,I,i,l,f,C,J,f,c,i,C,l,J,l,J,B,j,j)
+F0(f36,S)
+F0(f37,f)
+F18(f38,c,L,f,d,C,I,I,p,J,d,C,S,f,i,f,L,I,s,d)
+F25(f39,s,J,L,f,C,s,C,C,J,C,c,s,d,B,C,c,I,l,f,c,J,B,i,I,I,S)
+F27(f40,C,j,C,B,I,p,L,S,d,B,j,C,l,l,S,f,l,S,B,L,p,l,l,f,S,L,S,p)
+F17(f41,p,B,c,C,s,c,J,B,f,d,B,f,I,s,J,C,J,I)
+F27(f42,J,j,J,L,s,s,J,j,B,d,S,C,j,i,S,l,l,I,s,l,S,s,L,s,l,B,p,p)
+F9(f43,j,l,j,p,s,s,c,j,f,J)
+F24(f44,f,d,L,S,i,B,B,B,I,S,l,p,j,I,c,C,I,f,B,c,s,l,J,c,d)
+F4(f45,J,I,L,L,B)
+F22(f46,l,L,f,c,p,d,c,s,s,p,c,L,s,C,d,L,c,d,p,S,l,I,I)
+F9(f47,C,J,c,c,i,c,l,c,f,J)
+F20(f48,l,j,S,d,L,c,B,j,i,C,I,C,S,I,B,l,c,I,c,L,p)
+F27(f49,L,f,B,B,j,C,f,c,i,J,J,l,j,i,p,J,f,s,p,i,i,c,p,i,L,d,p,p)
+F19(f50,c,j,J,j,J,l,B,L,J,c,C,C,L,p,L,C,l,S,c,f)
+F14(f51,s,s,C,S,l,d,s,j,L,d,c,S,j,l,f)
+F20(f52,f,J,p,p,L,B,J,J,L,L,s,c,f,C,C,i,I,i,l,c,S)
+F18(f53,J,c,p,L,i,i,i,s,J,B,f,I,f,l,I,I,S,s,s)
+F9(f54,B,c,L,I,I,C,f,c,S,C)
+F27(f55,J,S,p,l,l,C,B,d,L,c,f,C,d,j,l,I,p,f,l,i,C,p,C,l,S,S,j,I)
+F21(f56,C,I,j,B,s,C,l,I,s,l,s,S,j,i,S,B,c,p,f,d,j,s)
+F10(f57,c,I,p,l,p,i,c,i,c,J,d)
+F26(f58,j,C,p,S,i,I,j,L,d,d,c,B,B,f,f,B,i,C,s,L,J,c,I,i,I,J,p)
+F6(f59,i,p,l,B,d,I,i)
+F27(f60,I,f,c,f,f,C,f,d,c,p,d,j,B,C,S,J,s,L,B,L,S,f,s,j,l,d,J,J)
+F0(f61,d)
+F10(f62,f,f,c,s,p,S,C,L,i,B,l)
+F0(f63,f)
+F5(f64,s,J,C,f,l,f)
+F16(f65,f,C,p,s,c,I,f,j,I,p,f,i,d,C,C,s,i)
+F18(f66,S,i,J,j,i,j,l,B,l,J,l,j,f,s,l,L,I,p,C)
+F10(f67,B,J,C,s,B,c,i,C,i,L,c)
+F4(f68,s,L,j,j,s)
+F16(f69,S,f,p,s,i,L,I,c,I,d,f,J,s,s,s,I,I)
+F17(f70,S,f,j,d,l,l,d,p,i,j,S,J,L,f,j,J,c,d)
+F17(f71,L,B,p,j,f,i,L,c,l,s,J,B,p,I,j,p,c,C)
+F27(f72,d,j,S,s,C,B,c,L,J,C,l,d,p,L,L,S,l,C,c,L,f,S,i,f,c,p,i,d)
+F16(f73,J,l,f,c,B,C,S,B,s,B,l,I,l,J,s,I,S)
+F2(f74,f,I,l)
+F9(f75,L,d,s,C,c,c,J,B,c,c)
+F29(f76,S,s,L,C,j,p,i,J,I,f,S,B,C,L,S,L,p,p,i,l,C,i,d,S,j,B,f,j,c,B)
+F3(f77,f,S,c,s)
+F27(f78,L,l,I,S,j,p,i,L,j,L,I,i,j,p,B,l,s,B,B,L,B,d,S,C,B,J,s,i)
+F16(f79,i,s,l,C,L,B,L,j,i,I,c,c,f,I,l,L,j)
+F29(f80,l,j,I,L,J,i,B,L,I,l,B,p,i,j,B,B,L,p,B,j,S,I,B,i,j,d,f,s,L,i)
+F21(f81,C,d,c,i,j,I,I,s,d,c,S,L,I,f,p,j,J,J,j,C,f,d)
+F10(f82,d,j,C,C,p,f,J,I,j,j,j)
+F1(f83,I,B)
+F9(f84,c,d,j,J,L,d,I,j,j,c)
+F1(f85,B,s)
+F0(f86,I)
+F11(f87,p,j,J,J,S,I,s,p,B,L,S,B)
+F10(f88,S,I,C,S,d,L,B,d,s,J,I)
+F21(f89,s,j,J,L,j,c,C,c,L,L,I,C,d,s,s,L,J,S,j,d,p,l)
+F23(f90,p,I,S,L,l,f,s,B,J,p,J,i,i,L,j,j,I,s,d,l,s,s,d,d)
+F7(f91,i,I,L,B,C,B,p,J)
+F18(f92,p,S,s,f,S,f,L,d,s,c,l,L,J,C,B,J,p,s,p)
+F5(f93,p,J,B,l,i,c)
+F13(f94,L,d,I,p,J,L,c,I,c,B,C,B,s,S)
+F0(f95,d)
+F27(f96,B,B,j,L,s,S,j,I,d,J,c,i,l,f,p,J,i,l,C,C,p,l,s,p,f,s,c,s)
+F3(f97,l,C,f,C)
+F19(f98,I,i,d,C,f,d,L,d,S,I,f,C,B,s,f,s,i,l,d,l)
+F24(f99,C,f,J,B,f,l,C,p,f,p,I,S,p,l,C,L,i,c,c,p,d,S,f,s,C)
+F20(f100,j,p,c,S,S,d,s,f,d,C,J,C,d,I,B,I,L,p,c,f,J)
+F29(f101,J,L,S,d,B,s,s,C,i,f,B,j,s,S,I,I,s,I,J,p,J,J,S,J,B,B,I,c,d,c)
+F27(f102,p,p,d,f,f,s,C,c,l,B,c,s,s,I,l,L,l,c,S,j,L,f,p,S,d,f,p,c)
+F26(f103,s,L,L,L,L,l,J,d,p,l,l,p,p,f,c,S,J,p,B,l,C,j,i,c,i,L,c)
+F15(f104,C,C,c,i,f,p,C,J,I,L,J,S,I,S,c,s)
+F7(f105,f,J,L,c,J,I,S,c)
+F11(f106,C,j,J,I,p,c,l,f,j,j,L,l)
+F7(f107,S,I,p,j,f,c,l,C)
+F28(f108,d,L,c,B,S,j,S,I,i,L,B,B,C,p,C,p,L,l,i,j,i,J,L,p,i,S,L,j,B)
+F25(f109,L,d,l,d,B,B,I,S,j,f,B,j,d,s,i,c,c,C,L,j,l,C,c,I,d,j)
+F21(f110,B,B,p,l,f,L,i,p,L,I,S,c,d,s,C,j,C,i,d,s,j,c)
+F1(f111,C,p)
+F5(f112,L,s,C,l,B,f)
+F25(f113,L,j,J,J,d,I,i,i,L,I,i,B,J,d,C,B,d,i,J,B,I,l,f,J,p,C)
+F15(f114,c,C,l,s,B,s,p,l,C,S,B,J,B,I,d,c)
+F28(f115,s,s,C,f,l,L,d,c,i,p,L,s,d,j,L,C,C,d,s,I,p,f,l,c,f,s,C,i,s)
+F15(f116,B,C,j,l,c,C,i,B,S,p,f,B,B,f,J,L)
+F23(f117,J,L,S,s,j,C,f,l,c,c,p,j,i,c,B,j,J,L,J,L,C,l,c,d)
+F4(f118,j,B,I,L,p)
+F15(f119,S,j,p,L,c,B,J,p,c,L,l,l,c,L,L,l)
+F13(f120,j,S,c,J,d,C,J,j,S,J,B,B,i,j)
+F29(f121,f,S,S,c,i,f,f,I,l,J,C,L,S,f,I,l,S,L,L,f,L,d,I,s,S,c,S,S,j,p)
+F15(f122,i,C,C,J,j,c,j,B,p,c,C,J,I,B,B,c)
+F23(f123,L,f,S,I,p,p,L,c,f,B,I,I,f,i,d,B,J,J,j,L,c,j,j,s)
+F3(f124,p,l,p,c)
+F5(f125,S,f,l,I,i,j)
+F5(f126,c,l,C,s,C,J)
+F16(f127,B,J,C,C,C,L,f,S,s,i,j,B,j,s,p,l,c)
+F17(f128,I,p,I,d,S,p,C,d,d,i,C,J,j,l,C,L,f,i)
+F22(f129,I,l,L,C,s,L,l,j,j,S,J,j,f,i,B,f,L,f,B,l,p,I,p)
+F0(f130,j)
+F20(f131,s,L,i,B,s,C,L,d,S,d,l,d,I,s,S,c,p,C,j,f,c)
+F22(f132,j,c,d,J,j,L,c,J,S,L,S,L,p,j,d,J,j,s,j,C,s,B,I)
+F4(f133,f,S,L,J,C)
+F25(f134,j,d,d,p,j,j,J,l,c,f,I,I,l,s,B,J,p,j,f,i,L,c,I,s,l,j)
+F14(f135,I,C,L,S,B,L,S,p,S,f,i,d,d,S,i)
+F0(f136,l)
+F15(f137,s,l,j,c,j,f,p,l,S,c,i,f,l,f,c,i)
+F4(f138,i,C,j,B,I)
+F12(f139,p,i,i,L,L,f,L,i,i,I,f,j,d)
+F10(f140,s,l,c,I,B,B,c,d,c,j,C)
+F20(f141,j,L,s,c,C,l,j,J,I,s,I,s,l,f,l,j,i,l,i,L,S)
+F6(f142,I,i,j,S,S,l,p)
+F28(f143,p,j,C,s,l,i,d,C,d,i,i,i,J,c,S,S,l,l,d,B,I,s,j,l,J,c,d,f,L)
+F11(f144,S,L,i,J,d,B,d,f,C,f,S,J)
+F27(f145,L,L,J,s,i,S,C,i,p,i,d,I,B,c,I,f,p,s,S,J,l,f,j,l,p,I,f,L)
+F15(f146,p,B,l,s,l,f,J,B,c,B,f,I,B,S,j,c)
+F13(f147,f,d,c,L,j,L,J,c,I,I,j,S,s,S)
+F8(f148,f,d,c,d,f,L,B,d,p)
+F14(f149,s,p,s,d,d,c,i,f,C,C,I,f,p,j,S)
+F2(f150,i,l,j)
+F15(f151,c,p,i,l,p,S,i,p,s,C,L,L,B,B,l,d)
+F3(f152,S,f,S,S)
+F6(f153,f,c,p,j,i,f,s)
+F8(f154,s,L,l,l,i,I,d,p,S)
+F29(f155,d,c,d,B,C,l,B,s,p,f,j,c,C,L,C,d,S,j,f,j,I,C,s,c,p,l,J,L,I,d)
+F13(f156,l,B,d,I,C,J,I,I,i,i,B,I,j,p)
+F15(f157,I,c,s,i,J,l,j,f,p,i,j,i,C,B,i,C)
+F12(f158,s,c,d,J,L,I,c,c,p,c,J,S,f)
+F25(f159,d,d,I,s,J,C,p,j,d,s,c,i,i,c,L,J,J,C,l,j,L,i,B,p,j,p)
+F3(f160,B,C,f,i)
+F25(f161,c,f,S,I,B,c,d,d,i,c,i,L,C,c,S,p,s,B,S,B,I,i,f,d,C,f)
+F10(f162,S,L,I,i,J,S,l,B,S,p,B)
+F5(f163,s,C,l,d,S,p)
+F4(f164,L,c,S,j,C)
+F26(f165,d,B,L,B,f,p,i,l,s,p,s,J,I,S,d,s,i,S,I,j,B,i,f,p,l,B,f)
+F15(f166,s,B,L,i,c,I,I,B,S,f,l,J,l,d,C,c)
+F4(f167,c,i,J,I,f)
+F14(f168,I,s,d,S,d,d,s,d,j,S,l,f,i,C,i)
+F13(f169,B,s,C,B,f,c,s,B,S,i,I,f,p,i)
+F9(f170,s,l,B,J,J,B,p,j,j,c)
+F13(f171,j,j,i,p,B,f,c,C,f,B,s,c,c,J)
+F17(f172,I,j,S,d,j,l,J,j,s,s,J,c,L,c,s,B,j,L)
+F11(f173,C,L,S,I,d,s,j,C,i,J,p,f)
+F10(f174,L,s,c,f,f,L,I,C,d,B,s)
+F4(f175,C,I,L,l,s)
+F2(f176,j,B,j)
+F29(f177,s,L,B,C,c,l,d,d,p,S,s,d,s,c,L,l,S,l,L,j,I,f,B,C,J,S,i,l,S,f)
+F9(f178,d,J,S,I,L,d,I,L,L,p)
+F22(f179,I,B,c,I,L,i,C,I,d,J,S,B,p,f,S,C,j,l,c,L,d,L,B)
+F14(f180,J,B,d,C,L,p,C,j,p,s,d,j,J,c,d)
+F22(f181,l,S,J,j,s,f,L,L,J,p,j,j,j,J,B,B,J,B,s,i,p,i,f)
+F19(f182,J,f,C,S,B,C,f,p,I,I,S,l,S,B,I,f,f,B,I,i)
+F16(f183,S,i,s,J,l,l,i,B,J,B,l,I,s,d,j,i,p)
+F27(f184,s,s,l,J,J,L,c,j,J,c,B,d,L,j,i,d,c,B,l,j,c,s,J,L,L,p,L,S)
+F17(f185,l,J,C,f,S,L,I,B,p,B,J,d,B,J,l,J,B,l)
+F1(f186,s,S)
+F4(f187,l,J,p,f,S)
+F19(f188,f,J,f,s,s,B,c,J,p,J,J,J,J,s,j,J,p,s,C,p)
+F26(f189,p,f,s,c,B,p,d,f,C,J,J,p,j,p,c,J,d,l,i,j,S,B,c,j,J,L,S)
+F27(f190,J,c,L,p,d,d,d,d,p,f,f,d,j,I,L,c,S,p,l,s,j,B,L,p,B,f,S,l)
+F18(f191,I,I,I,L,C,S,L,C,s,l,d,C,J,f,L,c,l,p,i)
+F14(f192,f,l,B,j,i,p,J,s,c,s,p,L,L,S,j)
+F19(f193,f,s,B,f,f,d,B,j,f,L,J,j,J,B,B,B,l,B,J,B)
+F5(f194,c,S,d,i,C,L)
+F15(f195,j,s,B,c,j,c,B,i,c,c,d,d,f,j,j,I)
+F16(f196,i,j,s,J,c,S,I,s,J,I,l,p,C,p,S,I,p)
+F29(f197,c,d,I,i,B,j,i,B,i,f,j,p,I,c,i,l,l,I,B,c,l,J,J,i,i,p,C,l,s,B)
+F7(f198,I,d,j,l,B,c,B,B)
+F28(f199,I,J,S,I,l,l,c,i,C,C,j,p,L,c,s,C,f,i,f,c,I,d,i,I,j,B,I,J,c)
+F3(f200,I,B,c,I)
+F22(f201,l,C,J,c,S,L,l,C,j,L,i,l,J,p,j,L,S,j,c,L,B,C,C)
+F9(f202,J,l,p,S,L,s,p,I,I,I)
+F22(f203,S,C,s,d,L,d,S,i,J,C,d,S,I,I,I,C,j,l,S,s,d,d,B)
+F21(f204,J,S,C,C,L,J,p,j,L,B,I,I,B,p,f,l,d,p,d,i,S,I)
+F25(f205,i,c,d,c,c,d,c,i,J,i,j,p,C,c,J,l,f,l,c,i,L,f,S,i,f,C)
+F8(f206,p,I,p,f,S,d,f,i,B)
+F15(f207,L,I,I,d,d,s,c,c,f,L,B,J,f,I,S,p)
+F22(f208,I,l,d,C,d,i,d,f,L,f,L,C,d,j,l,i,d,J,i,s,L,j,C)
+F17(f209,c,L,i,B,c,C,p,p,f,L,d,p,C,d,L,f,f,I)
+F25(f210,l,B,L,s,B,i,l,s,c,C,i,J,p,C,B,p,s,s,l,c,c,i,B,d,j,B)
+F14(f211,I,d,C,j,p,s,S,B,s,L,L,j,p,d,d)
+F21(f212,S,c,I,j,S,l,s,I,p,J,I,L,C,j,I,J,I,l,C,s,f,j)
+F3(f213,c,s,c,l)
+F0(f214,J)
+F16(f215,d,L,l,B,S,B,L,j,I,J,c,d,S,S,j,p,f)
+F13(f216,I,c,s,S,J,J,I,f,l,c,d,l,l,j)
+F11(f217,i,J,L,I,S,S,f,f,I,f,s,L)
+F2(f218,j,l,i)
+F23(f219,p,l,p,i,s,s,s,d,i,C,l,B,L,c,i,S,f,p,J,C,L,j,l,l)
+F12(f220,S,B,f,c,I,i,f,c,s,s,i,j,j)
+F27(f221,d,L,B,d,I,c,i,L,B,s,i,s,d,d,f,l,p,S,l,l,i,C,c,s,s,i,j,l)
+F1(f222,f,B)
+F24(f223,p,B,p,s,C,C,B,C,I,I,I,I,I,S,c,s,J,p,d,B,d,B,S,s,I)
+F27(f224,s,i,f,d,s,l,d,c,d,C,s,d,S,L,I,L,C,f,c,s,C,L,B,c,p,B,C,c)
+F18(f225,L,f,C,B,L,c,s,I,c,i,i,s,l,i,J,i,p,S,j)
+F14(f226,L,L,d,s,p,B,B,p,s,c,c,p,d,s,f)
+F11(f227,l,C,C,I,j,J,L,C,d,S,j,p)
+F1(f228,c,J)
+F25(f229,L,j,S,l,j,i,j,L,I,J,J,I,f,I,C,S,l,i,p,C,d,j,S,d,p,p)
+F13(f230,p,f,i,j,L,f,f,I,I,s,d,s,L,J)
+F5(f231,p,j,S,i,p,d)
+F19(f232,i,C,L,C,I,L,d,S,I,i,s,p,d,d,L,f,i,C,C,i)
+F26(f233,B,d,s,c,j,j,I,i,j,s,B,L,B,C,C,L,c,j,s,j,L,c,j,L,p,I,C)
+F18(f234,L,J,i,j,J,J,J,c,C,B,I,L,s,I,I,S,J,l,B)
+F6(f235,s,S,S,d,i,p,L)
+F8(f236,d,d,s,f,j,l,i,c,S)
+F6(f237,L,I,B,l,s,s,c)
+F17(f238,I,L,I,l,j,l,d,p,l,S,l,i,j,d,i,p,p,d)
+F7(f239,j,B,L,s,S,s,s,d)
+F15(f240,p,c,s,c,f,l,L,i,S,l,s,d,B,f,i,J)
+F23(f241,l,i,l,L,p,d,p,J,C,c,p,i,c,S,f,C,J,d,B,s,L,I,J,i)
+F17(f242,I,I,J,B,B,i,p,i,c,j,s,c,S,p,s,i,l,l)
+F29(f243,j,j,l,J,j,L,p,S,C,I,l,f,B,c,I,B,C,f,p,j,B,i,p,c,l,l,i,c,S,B)
+F9(f244,c,J,s,f,c,d,L,i,C,C)
+F0(f245,s)
+F7(f246,j,I,S,i,S,C,d,i)
+F23(f247,I,I,C,I,p,s,L,f,p,B,I,B,d,J,B,l,B,C,f,C,C,C,i,l)
+F24(f248,L,B,J,p,i,c,J,p,S,B,l,J,L,j,I,p,d,I,p,J,I,I,J,l,i)
+F24(f249,C,j,C,I,B,d,j,l,L,f,p,i,L,c,i,i,L,c,d,C,d,d,l,L,j)
+F7(f250,c,c,p,l,f,J,s,B)
+F7(f251,s,B,l,f,p,j,l,C)
+F24(f252,J,j,l,j,J,l,L,J,l,i,S,C,j,J,S,i,s,C,B,I,s,C,L,s,p)
+F0(f253,S)
+F8(f254,i,C,J,c,l,S,l,S,B)
+F27(f255,c,l,L,S,p,S,f,C,l,C,i,l,J,J,p,S,f,l,d,f,d,s,c,J,S,L,f,B)
+F28(f256,d,i,B,J,C,S,I,I,C,J,C,i,B,f,d,J,L,S,I,i,S,i,i,j,I,d,f,s,f)
+F9(f257,I,p,S,S,i,I,l,f,d,f)
+F3(f258,s,s,I,d)
+F3(f259,c,L,J,J)
+F26(f260,p,d,I,I,I,I,i,l,S,S,d,C,J,S,J,c,d,I,B,f,f,c,c,i,c,S,I)
+F26(f261,f,c,d,L,B,I,s,I,f,J,C,s,d,c,i,j,I,d,l,i,i,l,s,S,L,i,l)
+F20(f262,i,C,L,J,s,l,i,S,C,J,p,B,s,d,s,C,c,l,L,j,J)
+F28(f263,f,d,B,s,s,p,J,d,l,S,C,I,f,I,C,s,L,S,f,J,i,c,j,l,S,J,S,c,C)
+F14(f264,l,c,f,j,S,C,i,d,c,c,s,S,j,C,L)
+F12(f265,I,I,B,S,c,i,I,J,B,p,s,S,f)
+F7(f266,p,i,j,C,d,f,S,S)
+F13(f267,I,i,c,L,d,s,I,l,l,d,l,d,B,c)
+F20(f268,B,c,s,d,I,c,i,L,I,d,f,i,f,s,L,l,l,C,p,I,c)
+F27(f269,C,L,l,f,I,l,d,j,c,J,l,S,J,C,I,B,f,d,d,p,i,p,B,c,j,L,s,S)
+F10(f270,j,S,c,c,B,d,J,L,f,c,p)
+F24(f271,I,C,c,d,l,c,f,J,c,l,d,f,L,c,I,I,S,L,l,l,c,p,p,C,L)
+F27(f272,B,l,j,L,s,i,d,S,S,l,I,s,S,j,f,s,I,l,i,d,C,L,L,p,I,p,J,s)
+F11(f273,c,l,d,c,s,L,S,l,l,l,d,i)
+F6(f274,S,l,l,c,d,C,p)
+F3(f275,L,d,B,p)
+F14(f276,i,l,i,L,L,L,I,l,f,L,i,C,i,c,p)
+F13(f277,s,d,J,c,l,L,B,f,j,S,d,I,i,p)
+F25(f278,p,j,J,J,s,i,B,f,s,L,s,I,c,S,S,I,p,S,c,f,d,p,f,p,S,s)
+F23(f279,s,J,l,B,I,C,J,B,i,B,c,S,s,p,J,L,d,f,B,I,L,S,J,J)
+F11(f280,C,j,c,L,p,d,j,i,l,j,f,p)
+F28(f281,i,s,s,B,j,I,f,c,C,f,B,s,i,L,j,d,i,L,S,f,f,c,l,f,J,c,j,C,B)
+F10(f282,S,d,J,j,B,C,B,d,s,s,p)
+F14(f283,c,s,c,d,C,I,L,j,i,l,J,c,j,C,s)
+F10(f284,j,S,I,l,s,B,s,S,s,S,s)
+F16(f285,s,c,p,B,S,d,B,I,I,p,B,f,I,J,B,B,p)
+F4(f286,p,C,j,J,p)
+F20(f287,I,c,c,f,i,i,i,d,I,s,d,p,C,B,S,J,p,S,I,s,f)
+F9(f288,p,L,L,I,f,S,c,l,C,L)
+F9(f289,I,l,C,L,B,c,C,s,c,B)
+F3(f290,J,S,B,f)
+F16(f291,L,C,j,B,j,s,p,d,c,C,B,p,S,p,J,l,I)
+F11(f292,j,j,f,J,L,B,J,s,c,f,S,B)
+F25(f293,J,C,B,f,l,S,L,l,i,f,L,s,C,J,p,f,B,J,s,j,j,p,S,j,i,J)
+F8(f294,C,f,J,p,L,p,p,J,j)
+F10(f295,s,s,j,s,B,p,I,J,J,S,l)
+F15(f296,i,C,L,S,j,S,l,C,d,d,B,j,L,L,i,J)
+F27(f297,d,L,L,C,S,B,C,c,I,L,L,L,i,B,s,J,p,j,C,c,s,S,B,s,S,J,B,c)
+F19(f298,C,j,f,i,S,B,L,S,s,f,L,d,J,I,i,l,L,d,I,s)
+F16(f299,C,j,I,j,L,p,C,L,d,c,i,j,B,p,p,c,j)
+F9(f300,C,I,f,s,B,i,l,L,c,l)
+F11(f301,p,p,l,f,S,s,l,C,i,I,C,j)
+F20(f302,S,j,l,j,J,s,l,d,l,J,C,L,d,f,I,c,j,J,I,S,S)
+F19(f303,j,j,B,p,d,I,d,I,S,J,B,d,C,J,C,p,j,p,i,L)
+F10(f304,i,l,d,I,C,j,f,j,f,s,C)
+F7(f305,p,d,S,l,d,p,B,J)
+F29(f306,S,L,I,C,j,B,d,d,p,j,S,I,j,L,J,B,J,c,d,p,S,S,c,S,l,p,s,I,p,f)
+F23(f307,d,J,L,d,C,p,f,c,J,I,i,c,d,C,l,B,p,p,d,l,C,s,L,I)
+F17(f308,i,l,I,i,j,L,C,C,j,c,S,i,B,I,d,I,f,c)
+F1(f309,i,p)
+F25(f310,p,J,i,j,L,J,s,C,J,p,f,B,C,I,p,i,l,i,I,d,L,j,I,L,d,S)
+F12(f311,p,i,J,p,s,s,C,L,d,p,B,C,I)
+F3(f312,S,I,B,J)
+F12(f313,i,s,l,f,s,i,I,l,c,I,B,d,p)
+F15(f314,f,l,l,L,f,i,L,L,i,d,C,s,B,J,s,l)
+F20(f315,J,f,J,J,C,d,B,p,c,I,p,B,S,s,j,d,f,S,f,S,B)
+F22(f316,j,B,L,d,c,i,s,L,S,d,l,f,j,p,p,J,J,d,B,I,d,i,L)
+F11(f317,d,l,p,s,B,f,p,L,f,j,L,d)
+F29(f318,I,l,s,d,S,c,I,C,d,c,L,f,C,s,p,j,d,i,f,l,s,C,l,c,B,i,B,j,C,d)
+F4(f319,p,l,L,B,B)
+F16(f320,C,C,L,J,d,J,L,C,I,S,C,p,s,p,B,i,j)
+F11(f321,d,d,C,d,c,c,I,s,p,C,S,p)
+F25(f322,d,d,l,I,f,S,s,c,L,j,s,J,L,c,l,C,J,f,j,j,B,I,l,C,d,f)
+F3(f323,B,C,p,c)
+F23(f324,f,p,j,l,c,L,p,f,S,c,j,B,C,s,s,p,c,L,i,c,s,B,S,C)
+F8(f325,J,S,c,c,i,c,f,C,l)
+F10(f326,j,i,i,s,l,I,L,L,l,d,d)
+F1(f327,f,L)
+F5(f328,L,d,f,I,C,p)
+F14(f329,I,f,f,f,B,L,c,l,S,I,c,L,l,p,s)
+F16(f330,p,d,I,j,I,j,s,S,l,s,s,C,I,B,d,f,d)
+F24(f331,J,d,j,d,l,f,i,L,l,B,j,f,j,c,f,d,J,S,I,f,J,c,C,p,S)
+F25(f332,p,s,j,p,c,i,L,J,S,i,j,l,C,s,L,l,C,s,L,B,C,i,S,l,S,d)
+F14(f333,d,L,c,c,J,i,J,i,I,d,C,c,S,J,J)
+F23(f334,C,f,l,I,B,d,s,B,C,l,i,p,d,S,J,I,c,L,J,l,c,C,c,j)
+F8(f335,C,J,I,f,s,I,l,c,C)
+F4(f336,c,c,i,C,s)
+F17(f337,d,B,B,f,l,j,d,i,c,l,I,S,L,d,j,B,J,B)
+F24(f338,j,I,l,d,J,p,c,l,s,s,d,S,p,B,i,L,l,d,l,c,B,S,j,i,c)
+F26(f339,d,C,C,f,C,d,i,p,f,d,l,d,l,d,s,J,s,c,J,l,p,S,J,j,i,l,f)
+F1(f340,j,B)
+F28(f341,S,s,l,f,i,l,s,s,J,C,d,J,p,f,f,I,C,B,B,p,p,i,I,i,p,C,S,p,C)
+F10(f342,C,C,J,B,B,d,L,s,s,i,I)
+F29(f343,L,s,B,f,L,C,f,p,B,L,C,j,c,d,l,I,L,f,p,c,B,i,C,c,S,f,S,j,s,p)
+F7(f344,d,B,L,c,p,d,B,J)
+F22(f345,S,L,I,f,L,C,S,j,B,c,J,c,I,L,C,p,l,I,i,f,s,c,C)
+F25(f346,L,S,C,p,S,L,p,B,I,S,f,s,I,s,L,I,S,i,j,p,C,L,J,p,s,d)
+F14(f347,I,c,d,p,d,s,d,L,j,L,j,j,C,f,I)
+F10(f348,J,l,s,p,B,J,i,p,L,c,I)
+F9(f349,s,I,i,p,j,S,l,I,j,l)
+F1(f350,L,i)
+F19(f351,I,J,l,c,B,d,p,s,p,f,f,C,L,l,S,C,S,J,J,l)
+F4(f352,p,d,c,J,j)
+F24(f353,l,j,C,J,C,L,s,S,p,s,C,c,B,B,d,s,L,l,j,f,d,C,j,J,l)
+F18(f354,I,p,S,c,J,c,l,L,l,f,j,d,C,i,C,S,I,s,i)
+F14(f355,S,c,c,B,B,c,s,j,L,f,s,S,l,j,I)
+F18(f356,B,c,c,S,d,J,S,C,d,I,j,I,L,d,f,C,B,B,s)
+F4(f357,p,I,J,f,i)
+F6(f358,I,c,i,l,i,d,L)
+F10(f359,I,L,c,J,d,c,c,j,j,p,I)
+F0(f360,j)
+F16(f361,L,s,J,l,L,C,J,c,B,p,C,i,I,j,i,s,B)
+F1(f362,i,c)
+F0(f363,s)
+F14(f364,I,j,L,S,B,s,i,j,p,J,c,j,S,S,c)
+F9(f365,L,d,J,L,I,C,c,l,s,f)
+F10(f366,f,s,L,J,L,S,i,c,S,J,I)
+F13(f367,I,c,d,d,I,s,c,f,J,B,j,S,I,L)
+F5(f368,l,d,S,d,S,J)
+F26(f369,c,S,B,s,I,S,f,f,s,S,d,C,S,i,I,i,S,B,I,p,i,d,j,p,C,I,C)
+F23(f370,s,p,p,l,C,p,f,J,C,p,I,i,c,I,J,I,f,B,p,C,c,S,d,I)
+F15(f371,j,S,i,B,j,j,p,S,S,I,I,C,i,B,S,C)
+F21(f372,I,s,d,S,L,f,S,j,B,I,f,B,d,C,j,S,J,j,p,c,S,C)
+F23(f373,j,l,J,c,L,f,S,S,J,j,S,f,s,C,s,p,C,L,L,C,l,f,L,d)
+F8(f374,j,p,J,J,B,B,i,l,J)
+F13(f375,S,j,p,L,C,i,B,c,l,s,S,j,i,c)
+F18(f376,j,L,C,S,L,l,J,J,S,s,J,i,J,S,B,C,p,j,B)
+F21(f377,j,i,J,p,c,p,C,J,s,s,f,p,d,c,C,L,p,p,S,c,B,d)
+F20(f378,B,s,j,p,c,c,p,J,p,s,s,J,S,B,L,d,s,d,f,c,d)
+F8(f379,p,L,p,c,c,d,c,B,j)
+F9(f380,J,B,l,i,C,j,B,d,L,s)
+F4(f381,S,S,S,c,J)
+F1(f382,S,l)
+F2(f383,d,d,c)
+F2(f384,s,C,d)
+F6(f385,l,I,B,j,I,L,d)
+F7(f386,j,d,J,B,s,C,C,j)
+F8(f387,i,c,f,S,L,s,i,L,S)
+F25(f388,I,j,S,c,L,L,c,S,s,p,s,f,c,C,j,c,i,L,s,d,S,j,B,C,f,p)
+F9(f389,l,J,p,l,I,S,B,j,c,L)
+F11(f390,C,B,j,J,f,J,p,I,L,s,C,d)
+F13(f391,J,j,s,l,I,B,c,p,J,d,I,c,S,I)
+F11(f392,I,s,S,L,s,p,i,C,I,s,J,C)
+F24(f393,l,C,l,s,l,f,d,C,d,B,d,J,B,I,l,S,d,S,l,C,J,I,I,i,p)
+F24(f394,s,c,s,d,j,c,c,s,S,p,C,S,B,c,S,d,L,i,i,i,l,S,l,S,j)
+F24(f395,B,d,l,l,J,I,L,f,I,S,B,J,j,i,I,L,l,I,p,B,i,J,i,p,d)
+F4(f396,C,l,i,l,d)
+F20(f397,J,J,p,S,c,j,s,j,p,s,C,i,J,J,c,s,c,d,s,I,j)
+F9(f398,L,j,l,I,C,B,C,C,C,f)
+F0(f399,C)
+F25(f400,S,J,I,I,i,l,J,p,S,s,f,j,S,f,p,p,i,I,c,f,c,J,c,c,L,s)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/_auto_signatures.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,400 @@
+iLpfCSLsjIJijdfJLcJBscpCi)c
+dsj)p
+SJjIdSLjLifsSpfBdj)c
+lfSBB)I
+s)d
+psjiLjljBIddLsLJSlCIfpSsfSl)d
+lfIfiplfIsdfCfJIJ)s
+SIsCsjiCfccILddliLiSsJs)C
+cpCLcdBjCspLldJLccjcB)C
+pJLBCdCfcdBfc)B
+JCCifpijJIlcjLSdJfLJBLpffpd)L
+dlICpfclsJslSSscJsljdsjLcIJ)d
+SpIBSJpslIISl)C
+BillJSCJJLSLCfllsj)c
+flcciJJ)l
+LSSCdBpS)C
+dfLlcliLdffCp)j
+fffIJCsf)I
+pISClLcJIpLCs)I
+ciS)d
+JppISilJsCccliSScidJslLICfJ)j
+jipisS)L
+dSfciBLLScfLBIdlCIf)c
+iS)l
+cBBILlIcJJjJiSfICJjJJspB)c
+CIspSifSplBsLJpSsCJclLLCiSI)s
+jCjBiiSLslj)f
+plSlBjpJJjiiLplCBBlC)J
+jBBSslfCSlflSfCCjplfC)i
+fjLdsfjdIjdppJlddSfJJ)L
+psJICpffliJJljCJBljpjcI)j
+p)i
+ICisiBLJpJIIdBcJJss)J
+LIIpddfLSjsIdIfdCILLfsLdSij)j
+CIilfCJfciClJlJBjj)s
+)S
+)f
+LfdCIIpJdCSfifLIsd)c
+JLfCsCCJCcsdBCcIlfcJBiIIS)s
+jCBIpLSdBjCllSflSBLpllfSLSp)C
+BcCscJBfdBfIsJCJI)p
+jJLssJjBdSCjiSllIslSsLslBpp)J
+ljpsscjfJ)j
+dLSiBBBISlpjIcCIfBcslJcd)f
+ILLB)J
+LfcpdcsspcLsCdLcdpSlII)l
+JcciclcfJ)C
+jSdLcBjiCICSIBlcIcLp)l
+fBBjCfciJJljipJfspiicpiLdpp)L
+jJjJlBLJcCCLpLClScf)c
+sCSldsjLdcSjlf)s
+JppLBJJLLscfCCiIilcS)f
+cpLiiisJBfIflIISss)J
+cLIICfcSC)B
+SpllCBdLcfCdjlIpfliCpClSSjI)J
+IjBsClIslsSjiSBcpfdjs)C
+IplpicicJd)c
+CpSiIjLddcBBffBiCsLJcIiIJp)j
+plBdIi)i
+fcffCfdcpdjBCSJsLBLSfsjldJJ)I
+)d
+fcspSCLiBl)f
+)f
+JCflf)s
+CpscIfjIpfidCCsi)f
+iJjijlBlJljfslLIpC)S
+JCsBciCiLc)B
+Ljjs)s
+fpsiLIcIdfJsssII)S
+fjdlldpijSJLfjJcd)S
+BpjfiLclsJBpIjpcC)L
+jSsCBcLJCldpLLSlCcLfSifcpid)d
+lfcBCSBsBlIlJsIS)J
+Il)f
+dsCccJBcc)L
+sLCjpiJIfSBCLSLppilCidSjBfjcB)S
+Scs)f
+lISjpiLjLIijpBlsBBLBdSCBJsi)L
+slCLBLjiIccfIlLj)i
+jILJiBLIlBpijBBLpBjSIBijdfsLi)l
+dcijIIsdcSLIfpjJJjCfd)C
+jCCpfJIjjj)d
+B)I
+djJLdIjjc)c
+s)B
+)I
+jJJSIspBLSB)p
+ICSdLBdsJI)S
+jJLjcCcLLICdssLJSjdpl)s
+ISLlfsBJpJiiLjjIsdlssdd)p
+ILBCBpJ)i
+SsfSfLdsclLJCBJpsp)p
+JBlic)p
+dIpJLcIcBCBsS)L
+)d
+BjLsSjIdJcilfpJilCCplspfscs)B
+CfC)l
+idCfdLdSIfCBsfsildl)I
+fJBflCpfpISplCLiccpdSfsC)C
+pcSSdsfdCJCdIBILpcfJ)j
+LSdBssCifBjsSIIsIJpJJSJBBIcdc)J
+pdffsCclBcssIlLlcSjLfpSdfpc)p
+LLLLlJdpllppfcSJpBlCjiciLc)s
+CcifpCJILJSIScs)C
+JLcJISc)f
+jJIpclfjjLl)C
+IpjfclC)S
+LcBSjSIiLBBCpCpLlijiJLpiSLjB)d
+dldBBISjfBjdsiccCLjlCcIdj)L
+BplfLipLIScdsCjCidsjc)B
+p)C
+sClBf)L
+jJJdIiiLIiBJdCBdiJBIlfJpC)L
+ClsBsplCSBJBIdc)c
+sCflLdcipLsdjLCCdsIpflcfsCis)s
+CjlcCiBSpfBBfJL)B
+LSsjCflccpjicBjJLJLClcd)J
+BILp)j
+jpLcBJpcLllcLLl)S
+ScJdCJjSJBBij)j
+SSciffIlJCLSfIlSLLfLdIsScSSjp)f
+CCJjcjBpcCJIBBc)i
+fSIppLcfBIIfidBJJjLcjjs)L
+lpc)p
+flIij)S
+lCsCJ)c
+JCCCLfSsijBjsplc)B
+pIdSpCddiCJjlCLfi)I
+lLCsLljjSJjfiBfLfBlpIp)I
+)j
+LiBsCLdSdldIsScpCjfc)s
+cdJjLcJSLSLpjdJjsjCsBI)j
+SLJC)f
+ddpjjJlcfIIlsBJpjfiLcIslj)j
+CLSBLSpSfiddSi)I
+)l
+ljcjfplSciflfci)s
+CjBI)i
+iiLLfLiiIfjd)p
+lcIBBcdcjC)s
+LscCljJIsIslfljiliLS)j
+ijSSlp)I
+jCslidCdiiiJcSSlldBIsjlJcdfL)p
+LiJdBdfCfSJ)S
+LJsiSCipidIBcIfpsSJlfjlpIfL)L
+BlslfJBcBfIBSjc)p
+dcLjLJcIIjSsS)f
+dcdfLBdp)f
+psddcifCCIfpjS)s
+lj)i
+pilpSipsCLLBBld)c
+fSS)S
+cpjifs)f
+LlliIdpS)s
+cdBClBspfjcCLCdSjfjICscplJLId)d
+BdICJIIiiBIjp)l
+csiJljfpijiCBiC)I
+cdJLIccpcJSf)s
+dIsJCpjdsciicLJJCljLiBpjp)d
+Cfi)B
+fSIBcddiciLCcSpsBSBIifdCf)c
+LIiJSlBSpB)S
+CldSp)s
+cSjC)L
+BLBfpilspsJISdsiSIjBifplBf)d
+BLicIIBSflJldCc)s
+iJIf)c
+sdSddsdjSlfiCi)I
+sCBfcsBSiIfpi)B
+lBJJBpjjc)s
+jipBfcCfBsccJ)j
+jSdjlJjssJcLcsBjL)I
+LSIdsjCiJpf)C
+scffLICdBs)L
+ILls)C
+Bj)j
+LBCclddpSsdscLlSlLjIfBCJSilSf)s
+JSILdILLp)d
+BcILiCIdJSBpfSCjlcLdLB)I
+BdCLpCjpsdjJcd)J
+SJjsfLLJpjjjJBBJBsipif)l
+fCSBCfpIISlSBIffBIi)J
+isJlliBJBlIsdjip)S
+slJJLcjJcBdLjidcBljcsJLLpLS)s
+JCfSLIBpBJdBJlJBl)l
+S)s
+JpfS)l
+JfssBcJpJJJJsjJpsCp)f
+fscBpdfCJJpjpcJdlijSBcjJLS)p
+cLpddddpffdjILcSplsjBLpBfSl)J
+IILCSLCsldCJfLclpi)I
+lBjipJscspLLSj)f
+sBffdBjfLJjJBBBlBJB)f
+SdiCL)c
+sBcjcBiccddfjjI)j
+jsJcSIsJIlpCpSIp)i
+dIiBjiBifjpIcillIBclJJiipClsB)c
+djlBcBB)I
+JSIllciCCjpLcsCfifcIdiIjBIJc)I
+BcI)I
+CJcSLlCjLilJpjLSjcLBCC)l
+lpSLspIII)J
+CsdLdSiJCdSIIICjlSsddB)S
+SCCLJpjLBIIBpfldpdiSI)J
+cdccdciJijpCcJlflciLfSifC)i
+IpfSdfiB)p
+IIddsccfLBJfISp)L
+ldCdidfLfLCdjlidJisLjC)I
+LiBcCppfLdpCdLffI)c
+BLsBilscCiJpCBpsslcciBdjB)l
+dCjpsSBsLLjpdd)I
+cIjSlsIpJILCjIJIlCsfj)S
+scl)c
+)J
+LlBSBLjIJcdSSjpf)d
+csSJJIflcdllj)I
+JLISSffIfsL)i
+li)j
+lpisssdiClBLciSfpJCLjll)p
+BfcIifcssijj)S
+LBdIciLBsisddflpSlliCcssijl)d
+B)f
+BpsCCBCIIIIIScsJpdBdBSsI)p
+ifdsldcdCsdSLILCfcsCLBcpBCc)s
+fCBLcsIciisliJipSj)L
+LdspBBpsccpdsf)L
+CCIjJLCdSjp)l
+J)c
+jSljijLIJJIfICSlipCdjSdpp)L
+fijLffIIsdsLJ)p
+jSipd)p
+CLCILdSIispddLfiCCi)i
+dscjjIijsBLBCCLcjsjLcjLpIC)B
+JijJJJcCBILsIISJlB)L
+SSdipL)s
+dsfjlicS)d
+IBlssc)L
+LIljldplSlijdippd)I
+BLsSssd)j
+cscflLiSlsdBfiJ)p
+ilLpdpJCcpicSfCJdBsLIJi)l
+IJBBipicjscSpsill)I
+jlJjLpSCIlfBcIBCfpjBipcllicSB)j
+JsfcdLiCC)c
+)s
+ISiSCdi)j
+ICIpsLfpBIBdJBlBCfCCCil)I
+BJpicJpSBlJLjIpdIpJIIJli)L
+jCIBdjlLfpiLciiLcdCddlLj)C
+cplfJsB)c
+BlfpjlC)s
+jljJlLJliSCjJSisCBIsCLsp)J
+)S
+CJclSlSB)i
+lLSpSfClCilJJpSfldfdscJSLfB)c
+iBJCSIICJCiBfdJLSIiSiijIdfsf)d
+pSSiIlfdf)I
+sId)s
+LJJ)c
+dIIIIilSSdCJSJcdIBffccicSI)p
+cdLBIsIfJCsdcijIdliilsSLil)f
+CLJsliSCJpBsdsCclLjJ)i
+dBsspJdlSCIfICsLSfJicjlSJScC)f
+cfjSCidccsSjCL)l
+IBSciIJBpsSf)I
+ijCdfSS)p
+icLdsIlldldBc)I
+csdIciLIdfifsLllCpIc)B
+LlfIldjcJlSJCIBfddpipBcjLsS)C
+SccBdJLfcp)j
+CcdlcfJcldfLcIISLllcppCL)I
+ljLsidSSlIsSjfsIlidCLLpIpJs)B
+ldcsLSllldi)c
+llcdCp)S
+dBp)L
+liLLLIlfLiCicp)i
+dJclLBfjSdIip)s
+jJJsiBfsLsIcSSIpScfdpfpSs)p
+JlBICJBiBcSspJLdfBILSJJ)s
+jcLpdjiljfp)C
+ssBjIfcCfBsiLjdiLSffclfJcjCB)i
+dJjBCBdssp)S
+scdCILjilJcjCs)c
+SIlsBsSsSs)j
+cpBSdBIIpBfIJBBp)s
+CjJp)p
+ccfiiidIsdpCBSJpSIsf)I
+LLIfSclCL)p
+lCLBcCscB)I
+SBf)J
+CjBjspdcCBpSpJlI)L
+jfJLBJscfSB)j
+CBflSLlifLsCJpfBJsjjpSjiJ)J
+fJpLppJj)C
+sjsBpIJJSl)s
+CLSjSlCddBjLLiJ)i
+LLCSBCcILLLiBsJpjCcsSBsSJBc)d
+jfiSBLSsfLdJIilLdIs)C
+jIjLpCLdcijBppcj)C
+IfsBilLcl)C
+plfSslCiICj)p
+jljJsldlJCLdfIcjJISS)S
+jBpdIdISJBdCJCpjpiL)j
+ldICjfjfsC)i
+dSldpBJ)p
+LICjBddpjSIjLJBJcdpSScSlpsIpf)S
+JLdCpfcJIicdClBppdlCsLI)d
+lIijLCCjcSiBIdIfc)i
+p)i
+JijLJsCJpfBCIpiliIdLjILdS)p
+iJpssCLdpBCI)p
+IBJ)S
+slfsiIlcIBdp)i
+llLfiLLidCsBJsl)f
+fJJCdBpcIpBSsjdfSfSB)J
+BLdcisLSdlfjppJJdBIdiL)j
+lpsBfpLfjLd)d
+lsdScICdcLfCspjdiflsClcBiBjCd)I
+lLBB)p
+CLJdJLCISCpspBij)C
+dCdccIspCSp)d
+dlIfSscLjsJLclCJfjjBIlCdf)d
+Cpc)B
+pjlcLpfScjBCsspcLicsBSC)f
+SccicfCl)J
+iislILLldd)j
+L)f
+dfICp)L
+fffBLclSIcLlps)I
+dIjIjsSlssCIBdfd)p
+djdlfiLlBjfjcfdJSIfJcCpS)J
+sjpciLJSijlCsLlCsLBCiSlSd)p
+LccJiJiIdCcSJJ)d
+flIBdsBClipdSJIcLJlcCcj)C
+JIfsIlcC)C
+ciCs)c
+BBfljdiclISLdjBJB)d
+IldJpclssdSpBiLldlcBSjic)j
+CCfCdipfdldldsJscJlpSJjilf)d
+B)j
+slfilssJCdJpffICBBppiIipCSpC)S
+CJBBdLssiI)C
+sBfLCfpBLCjcdlILfpcBiCcSfSjsp)L
+BLcpdBJ)d
+LIfLCSjBcJcILCplIifscC)S
+SCpSLpBISfsIsLISijpCLJpsd)L
+cdpdsdLjLjjCfI)I
+lspBJipLcI)J
+IipjSlIjl)s
+i)L
+JlcBdpspffCLlSCSJJl)I
+dcJj)p
+jCJCLsSpsCcBBdsLljfdCjJl)l
+pScJclLlfjdCiCSIsi)I
+ccBBcsjLfsSljI)S
+ccSdJSCdIjILdfCBBs)B
+IJfi)p
+cilidL)I
+LcJdccjjpI)I
+)j
+sJlLCJcBpCiIjisB)L
+c)i
+)s
+jLSBsijpJcjSSc)I
+dJLICclsf)L
+sLJLSicSJI)f
+cddIscfJBjSIL)I
+dSdSJ)l
+SBsISffsSdCSiIiSBIpidjpCIC)c
+pplCpfJCpIicIJIfBpCcSdI)s
+SiBjjpSSIICiBSC)j
+sdSLfSjBIfBdCjSJjpcSC)I
+lJcLfSSJjSfsCspCLLClfLd)j
+pJJBBilJ)j
+jpLCiBclsSjic)S
+LCSLlJJSsJiJSBCpjB)j
+iJpcpCJssfpdcCLppScBd)j
+sjpccpJpssJSBLdsdfcd)B
+LpccdcBj)p
+BliCjBdLs)J
+SScJ)S
+l)S
+dc)d
+Cd)s
+IBjILd)l
+dJBsCCj)j
+cfSLsiLS)i
+jScLLcSspsfcCjciLsdSjBCfp)I
+JplISBjcL)l
+BjJfJpILsCd)C
+jslIBcpJdIcSI)J
+sSLspiCIsJC)I
+ClslfdCdBdJBIlSdSlCJIIip)l
+csdjccsSpCSBcSdLiiilSlSj)s
+dllJILfISBJjiILlIpBiJipd)B
+lild)C
+JpScjsjpsCiJJcscdsIj)J
+jlICBCCCf)L
+)C
+JIIilJpSsfjSfppiIcfcJccLs)S
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/_auto_sigstrings.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,400 @@
+"iLpfCSLsjIJijdfJLcJBscpCi)c",
+"dsj)p",
+"SJjIdSLjLifsSpfBdj)c",
+"lfSBB)I",
+"s)d",
+"psjiLjljBIddLsLJSlCIfpSsfSl)d",
+"lfIfiplfIsdfCfJIJ)s",
+"SIsCsjiCfccILddliLiSsJs)C",
+"cpCLcdBjCspLldJLccjcB)C",
+"pJLBCdCfcdBfc)B",
+"JCCifpijJIlcjLSdJfLJBLpffpd)L",
+"dlICpfclsJslSSscJsljdsjLcIJ)d",
+"SpIBSJpslIISl)C",
+"BillJSCJJLSLCfllsj)c",
+"flcciJJ)l",
+"LSSCdBpS)C",
+"dfLlcliLdffCp)j",
+"fffIJCsf)I",
+"pISClLcJIpLCs)I",
+"ciS)d",
+"JppISilJsCccliSScidJslLICfJ)j",
+"jipisS)L",
+"dSfciBLLScfLBIdlCIf)c",
+"iS)l",
+"cBBILlIcJJjJiSfICJjJJspB)c",
+"CIspSifSplBsLJpSsCJclLLCiSI)s",
+"jCjBiiSLslj)f",
+"plSlBjpJJjiiLplCBBlC)J",
+"jBBSslfCSlflSfCCjplfC)i",
+"fjLdsfjdIjdppJlddSfJJ)L",
+"psJICpffliJJljCJBljpjcI)j",
+"p)i",
+"ICisiBLJpJIIdBcJJss)J",
+"LIIpddfLSjsIdIfdCILLfsLdSij)j",
+"CIilfCJfciClJlJBjj)s",
+")S",
+")f",
+"LfdCIIpJdCSfifLIsd)c",
+"JLfCsCCJCcsdBCcIlfcJBiIIS)s",
+"jCBIpLSdBjCllSflSBLpllfSLSp)C",
+"BcCscJBfdBfIsJCJI)p",
+"jJLssJjBdSCjiSllIslSsLslBpp)J",
+"ljpsscjfJ)j",
+"dLSiBBBISlpjIcCIfBcslJcd)f",
+"ILLB)J",
+"LfcpdcsspcLsCdLcdpSlII)l",
+"JcciclcfJ)C",
+"jSdLcBjiCICSIBlcIcLp)l",
+"fBBjCfciJJljipJfspiicpiLdpp)L",
+"jJjJlBLJcCCLpLClScf)c",
+"sCSldsjLdcSjlf)s",
+"JppLBJJLLscfCCiIilcS)f",
+"cpLiiisJBfIflIISss)J",
+"cLIICfcSC)B",
+"SpllCBdLcfCdjlIpfliCpClSSjI)J",
+"IjBsClIslsSjiSBcpfdjs)C",
+"IplpicicJd)c",
+"CpSiIjLddcBBffBiCsLJcIiIJp)j",
+"plBdIi)i",
+"fcffCfdcpdjBCSJsLBLSfsjldJJ)I",
+")d",
+"fcspSCLiBl)f",
+")f",
+"JCflf)s",
+"CpscIfjIpfidCCsi)f",
+"iJjijlBlJljfslLIpC)S",
+"JCsBciCiLc)B",
+"Ljjs)s",
+"fpsiLIcIdfJsssII)S",
+"fjdlldpijSJLfjJcd)S",
+"BpjfiLclsJBpIjpcC)L",
+"jSsCBcLJCldpLLSlCcLfSifcpid)d",
+"lfcBCSBsBlIlJsIS)J",
+"Il)f",
+"dsCccJBcc)L",
+"sLCjpiJIfSBCLSLppilCidSjBfjcB)S",
+"Scs)f",
+"lISjpiLjLIijpBlsBBLBdSCBJsi)L",
+"slCLBLjiIccfIlLj)i",
+"jILJiBLIlBpijBBLpBjSIBijdfsLi)l",
+"dcijIIsdcSLIfpjJJjCfd)C",
+"jCCpfJIjjj)d",
+"B)I",
+"djJLdIjjc)c",
+"s)B",
+")I",
+"jJJSIspBLSB)p",
+"ICSdLBdsJI)S",
+"jJLjcCcLLICdssLJSjdpl)s",
+"ISLlfsBJpJiiLjjIsdlssdd)p",
+"ILBCBpJ)i",
+"SsfSfLdsclLJCBJpsp)p",
+"JBlic)p",
+"dIpJLcIcBCBsS)L",
+")d",
+"BjLsSjIdJcilfpJilCCplspfscs)B",
+"CfC)l",
+"idCfdLdSIfCBsfsildl)I",
+"fJBflCpfpISplCLiccpdSfsC)C",
+"pcSSdsfdCJCdIBILpcfJ)j",
+"LSdBssCifBjsSIIsIJpJJSJBBIcdc)J",
+"pdffsCclBcssIlLlcSjLfpSdfpc)p",
+"LLLLlJdpllppfcSJpBlCjiciLc)s",
+"CcifpCJILJSIScs)C",
+"JLcJISc)f",
+"jJIpclfjjLl)C",
+"IpjfclC)S",
+"LcBSjSIiLBBCpCpLlijiJLpiSLjB)d",
+"dldBBISjfBjdsiccCLjlCcIdj)L",
+"BplfLipLIScdsCjCidsjc)B",
+"p)C",
+"sClBf)L",
+"jJJdIiiLIiBJdCBdiJBIlfJpC)L",
+"ClsBsplCSBJBIdc)c",
+"sCflLdcipLsdjLCCdsIpflcfsCis)s",
+"CjlcCiBSpfBBfJL)B",
+"LSsjCflccpjicBjJLJLClcd)J",
+"BILp)j",
+"jpLcBJpcLllcLLl)S",
+"ScJdCJjSJBBij)j",
+"SSciffIlJCLSfIlSLLfLdIsScSSjp)f",
+"CCJjcjBpcCJIBBc)i",
+"fSIppLcfBIIfidBJJjLcjjs)L",
+"lpc)p",
+"flIij)S",
+"lCsCJ)c",
+"JCCCLfSsijBjsplc)B",
+"pIdSpCddiCJjlCLfi)I",
+"lLCsLljjSJjfiBfLfBlpIp)I",
+")j",
+"LiBsCLdSdldIsScpCjfc)s",
+"cdJjLcJSLSLpjdJjsjCsBI)j",
+"SLJC)f",
+"ddpjjJlcfIIlsBJpjfiLcIslj)j",
+"CLSBLSpSfiddSi)I",
+")l",
+"ljcjfplSciflfci)s",
+"CjBI)i",
+"iiLLfLiiIfjd)p",
+"lcIBBcdcjC)s",
+"LscCljJIsIslfljiliLS)j",
+"ijSSlp)I",
+"jCslidCdiiiJcSSlldBIsjlJcdfL)p",
+"LiJdBdfCfSJ)S",
+"LJsiSCipidIBcIfpsSJlfjlpIfL)L",
+"BlslfJBcBfIBSjc)p",
+"dcLjLJcIIjSsS)f",
+"dcdfLBdp)f",
+"psddcifCCIfpjS)s",
+"lj)i",
+"pilpSipsCLLBBld)c",
+"fSS)S",
+"cpjifs)f",
+"LlliIdpS)s",
+"cdBClBspfjcCLCdSjfjICscplJLId)d",
+"BdICJIIiiBIjp)l",
+"csiJljfpijiCBiC)I",
+"cdJLIccpcJSf)s",
+"dIsJCpjdsciicLJJCljLiBpjp)d",
+"Cfi)B",
+"fSIBcddiciLCcSpsBSBIifdCf)c",
+"LIiJSlBSpB)S",
+"CldSp)s",
+"cSjC)L",
+"BLBfpilspsJISdsiSIjBifplBf)d",
+"BLicIIBSflJldCc)s",
+"iJIf)c",
+"sdSddsdjSlfiCi)I",
+"sCBfcsBSiIfpi)B",
+"lBJJBpjjc)s",
+"jipBfcCfBsccJ)j",
+"jSdjlJjssJcLcsBjL)I",
+"LSIdsjCiJpf)C",
+"scffLICdBs)L",
+"ILls)C",
+"Bj)j",
+"LBCclddpSsdscLlSlLjIfBCJSilSf)s",
+"JSILdILLp)d",
+"BcILiCIdJSBpfSCjlcLdLB)I",
+"BdCLpCjpsdjJcd)J",
+"SJjsfLLJpjjjJBBJBsipif)l",
+"fCSBCfpIISlSBIffBIi)J",
+"isJlliBJBlIsdjip)S",
+"slJJLcjJcBdLjidcBljcsJLLpLS)s",
+"JCfSLIBpBJdBJlJBl)l",
+"S)s",
+"JpfS)l",
+"JfssBcJpJJJJsjJpsCp)f",
+"fscBpdfCJJpjpcJdlijSBcjJLS)p",
+"cLpddddpffdjILcSplsjBLpBfSl)J",
+"IILCSLCsldCJfLclpi)I",
+"lBjipJscspLLSj)f",
+"sBffdBjfLJjJBBBlBJB)f",
+"SdiCL)c",
+"sBcjcBiccddfjjI)j",
+"jsJcSIsJIlpCpSIp)i",
+"dIiBjiBifjpIcillIBclJJiipClsB)c",
+"djlBcBB)I",
+"JSIllciCCjpLcsCfifcIdiIjBIJc)I",
+"BcI)I",
+"CJcSLlCjLilJpjLSjcLBCC)l",
+"lpSLspIII)J",
+"CsdLdSiJCdSIIICjlSsddB)S",
+"SCCLJpjLBIIBpfldpdiSI)J",
+"cdccdciJijpCcJlflciLfSifC)i",
+"IpfSdfiB)p",
+"IIddsccfLBJfISp)L",
+"ldCdidfLfLCdjlidJisLjC)I",
+"LiBcCppfLdpCdLffI)c",
+"BLsBilscCiJpCBpsslcciBdjB)l",
+"dCjpsSBsLLjpdd)I",
+"cIjSlsIpJILCjIJIlCsfj)S",
+"scl)c",
+")J",
+"LlBSBLjIJcdSSjpf)d",
+"csSJJIflcdllj)I",
+"JLISSffIfsL)i",
+"li)j",
+"lpisssdiClBLciSfpJCLjll)p",
+"BfcIifcssijj)S",
+"LBdIciLBsisddflpSlliCcssijl)d",
+"B)f",
+"BpsCCBCIIIIIScsJpdBdBSsI)p",
+"ifdsldcdCsdSLILCfcsCLBcpBCc)s",
+"fCBLcsIciisliJipSj)L",
+"LdspBBpsccpdsf)L",
+"CCIjJLCdSjp)l",
+"J)c",
+"jSljijLIJJIfICSlipCdjSdpp)L",
+"fijLffIIsdsLJ)p",
+"jSipd)p",
+"CLCILdSIispddLfiCCi)i",
+"dscjjIijsBLBCCLcjsjLcjLpIC)B",
+"JijJJJcCBILsIISJlB)L",
+"SSdipL)s",
+"dsfjlicS)d",
+"IBlssc)L",
+"LIljldplSlijdippd)I",
+"BLsSssd)j",
+"cscflLiSlsdBfiJ)p",
+"ilLpdpJCcpicSfCJdBsLIJi)l",
+"IJBBipicjscSpsill)I",
+"jlJjLpSCIlfBcIBCfpjBipcllicSB)j",
+"JsfcdLiCC)c",
+")s",
+"ISiSCdi)j",
+"ICIpsLfpBIBdJBlBCfCCCil)I",
+"BJpicJpSBlJLjIpdIpJIIJli)L",
+"jCIBdjlLfpiLciiLcdCddlLj)C",
+"cplfJsB)c",
+"BlfpjlC)s",
+"jljJlLJliSCjJSisCBIsCLsp)J",
+")S",
+"CJclSlSB)i",
+"lLSpSfClCilJJpSfldfdscJSLfB)c",
+"iBJCSIICJCiBfdJLSIiSiijIdfsf)d",
+"pSSiIlfdf)I",
+"sId)s",
+"LJJ)c",
+"dIIIIilSSdCJSJcdIBffccicSI)p",
+"cdLBIsIfJCsdcijIdliilsSLil)f",
+"CLJsliSCJpBsdsCclLjJ)i",
+"dBsspJdlSCIfICsLSfJicjlSJScC)f",
+"cfjSCidccsSjCL)l",
+"IBSciIJBpsSf)I",
+"ijCdfSS)p",
+"icLdsIlldldBc)I",
+"csdIciLIdfifsLllCpIc)B",
+"LlfIldjcJlSJCIBfddpipBcjLsS)C",
+"SccBdJLfcp)j",
+"CcdlcfJcldfLcIISLllcppCL)I",
+"ljLsidSSlIsSjfsIlidCLLpIpJs)B",
+"ldcsLSllldi)c",
+"llcdCp)S",
+"dBp)L",
+"liLLLIlfLiCicp)i",
+"dJclLBfjSdIip)s",
+"jJJsiBfsLsIcSSIpScfdpfpSs)p",
+"JlBICJBiBcSspJLdfBILSJJ)s",
+"jcLpdjiljfp)C",
+"ssBjIfcCfBsiLjdiLSffclfJcjCB)i",
+"dJjBCBdssp)S",
+"scdCILjilJcjCs)c",
+"SIlsBsSsSs)j",
+"cpBSdBIIpBfIJBBp)s",
+"CjJp)p",
+"ccfiiidIsdpCBSJpSIsf)I",
+"LLIfSclCL)p",
+"lCLBcCscB)I",
+"SBf)J",
+"CjBjspdcCBpSpJlI)L",
+"jfJLBJscfSB)j",
+"CBflSLlifLsCJpfBJsjjpSjiJ)J",
+"fJpLppJj)C",
+"sjsBpIJJSl)s",
+"CLSjSlCddBjLLiJ)i",
+"LLCSBCcILLLiBsJpjCcsSBsSJBc)d",
+"jfiSBLSsfLdJIilLdIs)C",
+"jIjLpCLdcijBppcj)C",
+"IfsBilLcl)C",
+"plfSslCiICj)p",
+"jljJsldlJCLdfIcjJISS)S",
+"jBpdIdISJBdCJCpjpiL)j",
+"ldICjfjfsC)i",
+"dSldpBJ)p",
+"LICjBddpjSIjLJBJcdpSScSlpsIpf)S",
+"JLdCpfcJIicdClBppdlCsLI)d",
+"lIijLCCjcSiBIdIfc)i",
+"p)i",
+"JijLJsCJpfBCIpiliIdLjILdS)p",
+"iJpssCLdpBCI)p",
+"IBJ)S",
+"slfsiIlcIBdp)i",
+"llLfiLLidCsBJsl)f",
+"fJJCdBpcIpBSsjdfSfSB)J",
+"BLdcisLSdlfjppJJdBIdiL)j",
+"lpsBfpLfjLd)d",
+"lsdScICdcLfCspjdiflsClcBiBjCd)I",
+"lLBB)p",
+"CLJdJLCISCpspBij)C",
+"dCdccIspCSp)d",
+"dlIfSscLjsJLclCJfjjBIlCdf)d",
+"Cpc)B",
+"pjlcLpfScjBCsspcLicsBSC)f",
+"SccicfCl)J",
+"iislILLldd)j",
+"L)f",
+"dfICp)L",
+"fffBLclSIcLlps)I",
+"dIjIjsSlssCIBdfd)p",
+"djdlfiLlBjfjcfdJSIfJcCpS)J",
+"sjpciLJSijlCsLlCsLBCiSlSd)p",
+"LccJiJiIdCcSJJ)d",
+"flIBdsBClipdSJIcLJlcCcj)C",
+"JIfsIlcC)C",
+"ciCs)c",
+"BBfljdiclISLdjBJB)d",
+"IldJpclssdSpBiLldlcBSjic)j",
+"CCfCdipfdldldsJscJlpSJjilf)d",
+"B)j",
+"slfilssJCdJpffICBBppiIipCSpC)S",
+"CJBBdLssiI)C",
+"sBfLCfpBLCjcdlILfpcBiCcSfSjsp)L",
+"BLcpdBJ)d",
+"LIfLCSjBcJcILCplIifscC)S",
+"SCpSLpBISfsIsLISijpCLJpsd)L",
+"cdpdsdLjLjjCfI)I",
+"lspBJipLcI)J",
+"IipjSlIjl)s",
+"i)L",
+"JlcBdpspffCLlSCSJJl)I",
+"dcJj)p",
+"jCJCLsSpsCcBBdsLljfdCjJl)l",
+"pScJclLlfjdCiCSIsi)I",
+"ccBBcsjLfsSljI)S",
+"ccSdJSCdIjILdfCBBs)B",
+"IJfi)p",
+"cilidL)I",
+"LcJdccjjpI)I",
+")j",
+"sJlLCJcBpCiIjisB)L",
+"c)i",
+")s",
+"jLSBsijpJcjSSc)I",
+"dJLICclsf)L",
+"sLJLSicSJI)f",
+"cddIscfJBjSIL)I",
+"dSdSJ)l",
+"SBsISffsSdCSiIiSBIpidjpCIC)c",
+"pplCpfJCpIicIJIfBpCcSdI)s",
+"SiBjjpSSIICiBSC)j",
+"sdSLfSjBIfBdCjSJjpcSC)I",
+"lJcLfSSJjSfsCspCLLClfLd)j",
+"pJJBBilJ)j",
+"jpLCiBclsSjic)S",
+"LCSLlJJSsJiJSBCpjB)j",
+"iJpcpCJssfpdcCLppScBd)j",
+"sjpccpJpssJSBLdsdfcd)B",
+"LpccdcBj)p",
+"BliCjBdLs)J",
+"SScJ)S",
+"l)S",
+"dc)d",
+"Cd)s",
+"IBjILd)l",
+"dJBsCCj)j",
+"cfSLsiLS)i",
+"jScLLcSspsfcCjciLsdSjBCfp)I",
+"JplISBjcL)l",
+"BjJfJpILsCd)C",
+"jslIBcpJdIcSI)J",
+"sSLspiCIsJC)I",
+"ClslfdCdBdJBIlSdSlCJIIip)l",
+"csdjccsSpCSBcSdLiiilSlSj)s",
+"dllJILfISBJjiILlIpBiJipd)B",
+"lild)C",
+"JpScjsjpsCiJJcscdsIj)J",
+"jlICBCCCf)L",
+")C",
+"JIIilJpSsfjSfppiIcfcJccLs)S",
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/config-random.lua	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,31 @@
+-- section 'main' --------------------------------------------------------------
+                  
+nsigs     = 300         -- number of test cases
+mode      = "random"    -- generatore mode: 'random' or 'ordered' type sequences
+minargs   = 1           -- minimum num. of supported arguments (>= 0)
+maxargs   = 67          -- maximum num. of supported arguments (>= minargs)
+
+
+-- section 'types' -------------------------------------------------------------
+
+argtypes  = "BcCsSiIjJlLpfd"    -- supported argument types
+rettypes  = argtypes    -- supported return types (currently no void support)
+
+
+-- section 'ordered' -----------------------------------------------------------
+
+offset    = 0           -- permutation index offset (default = 0)
+step      = 1           -- permutation index increment (default = 1)
+
+
+-- section 'random' ------------------------------------------------------------
+                        
+seed      = 1           -- random seed
+
+
+-- section 'calling convention' (useful on Windows for now) --------------------
+                        
+api       = ""          -- calling convention ("__stdcall" or "__fastcall")
+            -- for gcc use "__attribute__((__stdcall__))" or "__attribute__((__fastcall__))"
+            -- for ms ?
+ccprefix  = ""          -- signature prefix ("_s" (stdcall), "_f" (gcc fastcall) or "_F" (microsoft fastcall))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/config-stress1.lua	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,41 @@
+-- section 'main' --------------------------------------------------------------
+                  
+mode      = "designed"    -- generator mode: 'random', 'ordered' or 'designed' type sequences
+designfile= "stress1.cfg" -- design file 
+
+function nlines()
+  local cnt = 0
+  for l in io.open(designfile):lines() do
+    cnt = cnt + 1
+  end
+  return cnt
+end
+
+nsigs     = nlines()    -- number of test cases
+
+minargs   = 0           -- minimum num. of supported arguments (>= 0)
+maxargs   = 20          -- maximum num. of supported arguments (>= minargs)
+
+-- section 'types' (not used by 'designed') ------------------------------------
+
+argtypes  = "BcCsSiIjJlLpfd" -- "BcCsSiIjJlLpfd"    -- supported argument types
+rettypes  = argtypes    -- supported return types (currently no void support)
+
+
+-- section 'ordered' -----------------------------------------------------------
+
+offset    = 0           -- permutation index offset (default = 1)
+step      = 1           -- permutation index increment (default = 1)
+
+
+-- section 'random' ------------------------------------------------------------
+                        
+seed      = 1           -- random seed
+
+
+-- section 'calling convention' (useful on Windows for now) --------------------
+                        
+api       = ""          -- calling convention ("__stdcall" or "__fastcall")
+            -- for gcc use "__attribute__((__stdcall__))" or "__attribute__((__fastcall__))"
+            -- for ms ?
+ccprefix  = ""          -- signature prefix ("_s" (stdcall), "_f" (gcc fastcall) or "_F" (microsoft fastcall))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/config.lua	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,32 @@
+-- auto-generated file from temlate config-random.lua (created by GNUmake)
+-- section 'main' --------------------------------------------------------------
+                  
+nsigs     = 400         -- number of test cases
+mode      = "random"    -- generatore mode: 'random' or 'ordered' type sequences
+minargs   = 0           -- minimum num. of supported arguments (>= 0)
+maxargs   = 29          -- maximum num. of supported arguments (>= minargs)
+
+
+-- section 'types' -------------------------------------------------------------
+
+argtypes  = "BcCsSiIjJlLpfd"    -- supported argument types
+rettypes  = argtypes    -- supported return types (currently no void support)
+
+
+-- section 'ordered' -----------------------------------------------------------
+
+offset    = 0           -- permutation index offset (default = 0)
+step      = 1           -- permutation index increment (default = 1)
+
+
+-- section 'random' ------------------------------------------------------------
+                        
+seed      = 1           -- random seed
+
+
+-- section 'calling convention' (useful on Windows for now) --------------------
+                        
+api       = ""          -- calling convention ("__stdcall" or "__fastcall")
+            -- for gcc use "__attribute__((__stdcall__))" or "__attribute__((__fastcall__))"
+            -- for ms ?
+ccprefix  = ""          -- signature prefix ("_s" (stdcall), "_f" (gcc fastcall) or "_F" (microsoft fastcall))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/do_test.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,128 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/do_test.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include <assert.h>
+#include "_auto_config.h"
+#include "invokers.h"
+#include "dyncall_callback.h"
+#include "sigstrings.h"
+#include "signature_utils.h"
+#include "env.h"
+#include "print.h"
+#include "../common/platformInit.h"
+
+int CompareValues(char type, DCValue* a, DCValue* b)
+{
+  int isequal = 0;
+  switch(type) 
+  {
+    case DC_SIGCHAR_BOOL:      isequal = (a->B == b->B) ? 1 : 0 ; break;
+    case DC_SIGCHAR_CHAR:      isequal = (a->c == b->c) ? 1 : 0 ; break;
+    case DC_SIGCHAR_UCHAR:     isequal = (a->C == b->C) ? 1 : 0 ; break;
+    case DC_SIGCHAR_SHORT:     isequal = (a->s == b->s) ? 1 : 0 ; break;
+    case DC_SIGCHAR_USHORT:    isequal = (a->S == b->S) ? 1 : 0 ; break;
+    case DC_SIGCHAR_INT:       isequal = (a->i == b->i) ? 1 : 0 ; break;
+    case DC_SIGCHAR_UINT:      isequal = (a->I == b->I) ? 1 : 0 ; break;
+    case DC_SIGCHAR_LONG:      isequal = (a->j == b->j) ? 1 : 0 ; break;
+    case DC_SIGCHAR_ULONG:     isequal = (a->J == b->J) ? 1 : 0 ; break;
+    case DC_SIGCHAR_LONGLONG:  isequal = (a->l == b->l) ? 1 : 0 ; break;
+    case DC_SIGCHAR_ULONGLONG: isequal = (a->L == b->L) ? 1 : 0 ; break;
+    case DC_SIGCHAR_FLOAT:     isequal = (a->f == b->f) ? 1 : 0 ; break;
+    case DC_SIGCHAR_DOUBLE:    isequal = (a->d == b->d) ? 1 : 0 ; break;
+    case DC_SIGCHAR_POINTER:   isequal = (a->p == b->p) ? 1 : 0 ; break;
+    default: assert(0);
+  }
+  return isequal;
+}
+
+int Compare(const char* signature)
+{
+  DCValue ref;
+  int total = 1;
+  int pos;
+  int isequal;
+  char ch;
+
+  /* skip prefix */
+
+  signature = SignatureSkipCallPrefix(signature);
+
+  /* check arguments */
+
+  pos = 0;
+
+  for(;;) {
+
+    ch  = *signature++;
+    
+    if (ch == DC_SIGCHAR_ENDARG) break;
+    GetReferenceArg(&ref, ch, pos);
+    isequal = CompareValues( ch, &ref, &Args[pos] );
+    if ( !isequal ) {
+      if (OptionVerbose) { total = 0; fprintf(stdout, " @%d[%c] ", pos, ch); }
+      else return 0;
+    }
+    ++ pos;
+  }
+    
+  ch  = *signature++;
+
+  /* check result */
+
+  GetReferenceResult(&ref, ch);
+
+  isequal = CompareValues(ch, &ref, &Result);
+  if (!isequal) {
+    if (OptionVerbose) { total = 0; fprintf(stdout, " @-1 "); }
+    else return 0;
+  }
+
+  return total;
+}
+
+
+extern DCCallbackHandler handler; /* see handler.c for implementation */
+
+int DoTest(int id)
+{
+  int index, result;
+  const char* signature;
+  DCCallback* pcb;
+
+  assert( id > 0 && id <= CONFIG_NSIGS );
+  index = id - 1;
+  
+  signature = GetSignature(index);
+  PrintCaseInfo(id,signature);
+
+  pcb = dcbNewCallback( signature, handler, (void*) signature );
+  assert(pcb != NULL);
+  DoInvoke(index, (void*) pcb);
+  result = Compare(signature); 
+  PrintCaseResult(result);
+  dcbFreeCallback(pcb);
+  return result;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/dyncall_value_set.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,44 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/dyncall_value_set.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "dyncall_types.h"
+typedef struct DCValueSet_
+{
+  DCbool      B;
+  DCchar      c;
+  DCuchar     C;
+  DCshort     s;
+  DCushort    S;
+  DCint       i;
+  DCuint      I;
+  DClong      j;
+  DCulong     J;
+  DClonglong  l;
+  DCulonglong L;
+  DCfloat     f;
+  DCdouble    d;
+  DCpointer   p;
+} DCValueSet;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/env.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,113 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/env.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include <assert.h>
+#include "_auto_config.h"
+#include "dyncall_signature.h"
+#include "env.h"
+
+DCValueSet ValueMatrix[CONFIG_MAXARGS];
+DCValue    Args[CONFIG_MAXARGS];
+DCValue    Result;
+
+DCValueSet K;
+
+void GetReferenceArg(DCValue* output, char ch, int pos)
+{
+/*
+static const int Ki = 134;
+static const double Kd = 1.012356;
+static const float Kf = 1.20432545f; 
+static const int Kp = 0x1020345;
+static const DClonglong Kl = 24534543;
+*/
+
+  output->L = 0xCAFEBABEDEADC0DELL;
+  pos = pos + 2;
+  switch(ch) {
+    case DC_SIGCHAR_BOOL:     output->B = ( (pos*K.i) % 2) ? DC_TRUE : DC_FALSE ; break;
+    case DC_SIGCHAR_CHAR:     output->c = pos*K.c; break;
+    case DC_SIGCHAR_UCHAR:    output->C = pos*K.C; break;
+    case DC_SIGCHAR_SHORT:    output->s = pos*K.s; break;
+    case DC_SIGCHAR_USHORT:   output->S = pos*K.S; break;
+    case DC_SIGCHAR_INT:      output->i = pos*K.i; break;
+    case DC_SIGCHAR_UINT:     output->I = pos*K.I; break;
+    case DC_SIGCHAR_LONG:     output->j = pos*K.j; break;
+    case DC_SIGCHAR_ULONG:    output->J = pos*K.J; break;
+    case DC_SIGCHAR_LONGLONG: output->l = ( (long long) pos ) * K.l; break;
+    case DC_SIGCHAR_ULONGLONG:output->L = pos*K.L; break;
+    case DC_SIGCHAR_FLOAT:    output->f = ( (float) pos ) * K.f; break;
+    case DC_SIGCHAR_DOUBLE:   output->d = ( (double) pos ) * K.d; break;
+    case DC_SIGCHAR_POINTER:  output->p = (DCpointer) (unsigned long) (pos* ( (unsigned long) K.p ) ); break;
+    default: assert(0);
+  }
+}
+
+void GetReferenceResult(DCValue* output, char ch)
+{
+  GetReferenceArg(output, ch, -1);
+}
+
+void InitEnv()
+{
+  int pos;
+  
+  K.B = DC_TRUE;
+  K.c =  13;
+  K.C =  19;
+  K.s = -23;
+  K.S =  41;
+  K.i = 134;
+  K.I = 257;
+  K.j = -12357;
+  K.J = 356;
+  K.l = -1234556687721LL;
+  K.L = 23564634576581ULL;
+  K.f = 1.20432545f;
+  K.d = 1.0123456;
+  K.p = (void*) 0x1020345;
+  
+  for(pos = 0 ;pos < CONFIG_MAXARGS ;++pos) {
+    DCValue ref;
+    GetReferenceArg( &ref, DC_SIGCHAR_BOOL     , pos); ValueMatrix[pos].B = ref.B;
+    GetReferenceArg( &ref, DC_SIGCHAR_CHAR     , pos); ValueMatrix[pos].c = ref.c;
+    GetReferenceArg( &ref, DC_SIGCHAR_UCHAR    , pos); ValueMatrix[pos].C = ref.C;
+    GetReferenceArg( &ref, DC_SIGCHAR_SHORT    , pos); ValueMatrix[pos].s = ref.s;
+    GetReferenceArg( &ref, DC_SIGCHAR_USHORT   , pos); ValueMatrix[pos].S = ref.S;
+    GetReferenceArg( &ref, DC_SIGCHAR_INT      , pos); ValueMatrix[pos].i = ref.i;
+    GetReferenceArg( &ref, DC_SIGCHAR_UINT     , pos); ValueMatrix[pos].I = ref.I;
+    GetReferenceArg( &ref, DC_SIGCHAR_LONG     , pos); ValueMatrix[pos].j = ref.j;
+    GetReferenceArg( &ref, DC_SIGCHAR_ULONG    , pos); ValueMatrix[pos].J = ref.J;
+    GetReferenceArg( &ref, DC_SIGCHAR_LONGLONG , pos); ValueMatrix[pos].l = ref.l;
+    GetReferenceArg( &ref, DC_SIGCHAR_ULONGLONG, pos); ValueMatrix[pos].L = ref.L;
+    GetReferenceArg( &ref, DC_SIGCHAR_FLOAT    , pos); ValueMatrix[pos].f = ref.f;
+    GetReferenceArg( &ref, DC_SIGCHAR_DOUBLE   , pos); ValueMatrix[pos].d = ref.d;
+    GetReferenceArg( &ref, DC_SIGCHAR_POINTER  , pos); ValueMatrix[pos].p = ref.p;
+  }
+}
+
+/* Global Options. */
+int OptionVerbose = 0;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/env.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,46 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/env.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "dyncall_value.h"
+#include "dyncall_value_set.h"
+
+/* test related */
+
+void InitEnv(); /* initializes ValueMatrix */
+
+
+/* function of type and position */
+void GetReferenceArg(DCValue* output, char type, int argpos);
+/* function of type (position = -1) */
+void GetReferenceResult(DCValue* output, char type);
+
+extern DCValueSet    ValueMatrix[CONFIG_MAXARGS];
+extern DCValue       Args[CONFIG_MAXARGS];
+extern DCValue       Result;
+
+/* Global Options. */
+extern int OptionVerbose;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/handler.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,102 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/handler.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "_auto_config.h"
+#include <assert.h>
+#include "dyncall_callback.h"
+#include "env.h"
+#include "signature_utils.h"
+
+char handler(DCCallback* that, DCArgs* input, DCValue* output, void* userdata)
+{
+  const char* signature = (const char*) userdata;
+  int pos = 0; 
+  char ch;
+
+  signature = SignatureSkipCallPrefix(signature);
+
+  for(;;) {
+    ch = *signature++;
+    if (ch == DC_SIGCHAR_ENDARG) break;
+    Args[pos].L = 0xDEADC0DECAFEBABELL;
+    switch(ch) {
+      case DC_SIGCHAR_BOOL:     Args[pos].B = dcbArgBool     (input); break;
+      case DC_SIGCHAR_CHAR:     Args[pos].c = dcbArgChar     (input); break;
+      case DC_SIGCHAR_UCHAR:    Args[pos].C = dcbArgUChar    (input); break;
+      case DC_SIGCHAR_SHORT:    Args[pos].s = dcbArgShort    (input); break;
+      case DC_SIGCHAR_USHORT:   Args[pos].S = dcbArgUShort   (input); break;
+      case DC_SIGCHAR_INT:      Args[pos].i = dcbArgInt      (input); break;
+      case DC_SIGCHAR_UINT:     Args[pos].I = dcbArgUInt     (input); break;
+      case DC_SIGCHAR_LONG:     Args[pos].j = dcbArgLong     (input); break;
+      case DC_SIGCHAR_ULONG:    Args[pos].J = dcbArgULong    (input); break;
+      case DC_SIGCHAR_LONGLONG: Args[pos].l = dcbArgLongLong (input); break;
+      case DC_SIGCHAR_ULONGLONG:Args[pos].L = dcbArgULongLong(input); break;
+      case DC_SIGCHAR_FLOAT:    Args[pos].f = dcbArgFloat    (input); break; 
+      case DC_SIGCHAR_DOUBLE:   Args[pos].d = dcbArgDouble   (input); break;
+      case DC_SIGCHAR_POINTER:  Args[pos].p = dcbArgPointer  (input); break;
+    }
+    ++pos;
+  }
+
+  ch = *signature++;
+
+  /* currently, no void result is supported by the suite */
+  GetReferenceResult(output, ch);
+
+#if defined(DC__Arch_PPC64) && defined(DC__Endian_BIG)
+  switch (ch) {
+    case DC_SIGCHAR_BOOL:     output->l = ((long long)output->B); break;
+    case DC_SIGCHAR_CHAR:     output->l = ((long long)output->c); break;
+    case DC_SIGCHAR_UCHAR:    output->l = ((long long)output->C); break;
+    case DC_SIGCHAR_SHORT:    output->l = ((long long)output->s); break;
+    case DC_SIGCHAR_USHORT:   output->l = ((long long)output->S); break;
+    case DC_SIGCHAR_INT:      output->l = ((long long)output->i); break;
+    case DC_SIGCHAR_UINT:     output->l = ((long long)output->I); break;
+    case DC_SIGCHAR_LONG:     output->l = ((long long)output->j); break;
+    case DC_SIGCHAR_ULONG:    output->l = ((long long)output->J); break;
+    case DC_SIGCHAR_ULONGLONG:output->l = ((long long)output->L); break;
+    case DC_SIGCHAR_FLOAT:    output->d = ((double)output->f); break;
+  }
+#endif
+
+  switch(ch) {
+    case DC_SIGCHAR_BOOL:     return 'B';
+    case DC_SIGCHAR_CHAR:     return 'c';
+    case DC_SIGCHAR_UCHAR:    return 'C';
+    case DC_SIGCHAR_SHORT:    return 's';
+    case DC_SIGCHAR_USHORT:   return 'S';
+    case DC_SIGCHAR_INT:      return 'i';
+    case DC_SIGCHAR_UINT:     return 'I';
+    case DC_SIGCHAR_LONG:     return 'j'; 
+    case DC_SIGCHAR_ULONG:    return 'J'; 
+    case DC_SIGCHAR_LONGLONG: return 'l';
+    case DC_SIGCHAR_ULONGLONG:return 'l';
+    case DC_SIGCHAR_FLOAT:    return 'f';
+    case DC_SIGCHAR_DOUBLE:   return 'd';
+    case DC_SIGCHAR_POINTER:  return 'p';
+    default: assert(0); return 'v';
+  }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/invokers.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,77 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/invokers.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "_auto_config.h"
+#include <assert.h>
+#include "invokers.h"
+#include "env.h"
+
+/* Callback Invokers implementation. */
+
+/* type short-cuts */
+
+typedef DCvoid      v;
+
+typedef DCbool      B;
+
+typedef DCchar      c;
+typedef DCshort     s;
+typedef DCint       i;
+typedef DClong      j;
+typedef DClonglong  l;
+
+typedef DCuchar     C;
+typedef DCushort    S;
+typedef DCuint      I;
+typedef DCulong     J;
+typedef DCulonglong L;
+
+typedef DCfloat     f;
+typedef DCdouble    d;
+
+typedef DCpointer   p;
+
+typedef DCstring    Z;
+
+#define A ValueMatrix
+#include "_auto_invoke_macros.h"
+#include "_auto_invokers.h"
+
+/* table of invokers */
+
+typedef void (invoker) (void*);
+
+invoker* invokers[CONFIG_NSIGS] = {
+#include "_auto_invoke_table.h"
+};
+
+
+/* Front-End. */
+
+void DoInvoke(int index, void* addr)
+{
+  invokers[index](addr);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/invokers.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,26 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/invokers.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+void DoInvoke(int index, void* addr);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/main.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,113 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/main.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include <assert.h>
+#include <stdlib.h>
+#include "_auto_config.h"
+#include "env.h"
+#include "print.h"
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+const char* appname = "unknown";
+
+/* test one case, returns error code */
+int DoTest(int id);
+
+/* capture total results for failure (0) and success (1) */
+int totalErrorCodes[2] = { 0, 0 };
+
+void TestRange(int from, int to)
+{
+  int i;
+  for(i = from ; i <= to ; ++i )
+  {
+    int status = DoTest(i);
+    totalErrorCodes[status]++;
+  }
+}
+
+void InitEnv();
+
+void ExitWithUsage()
+{
+  PrintUsage(appname);
+  exit(0);
+}
+        
+#define Error(X, Y) fprintf(stderr, X, Y); ExitWithUsage()
+
+int main(int argc, char* argv[] )
+{
+  int from = 1;
+  int to = CONFIG_NSIGS;
+  int ncases;
+
+  int i;
+  int pos;
+  int number;
+  int totalResult;
+
+  dcTest_initPlatform();
+
+  InitEnv();
+  appname = argv[0];
+
+  pos = 0;
+  for(i = 1 ; i < argc ; ++i ) {
+
+    if ( argv[i][0] == '-' ) {
+      switch(argv[i][1]) {
+        case 'v': OptionVerbose = 1; continue;
+        case 'h': PrintUsage(appname); return 0;
+        default: Error("invalid option: %s", argv[i]);
+      }      
+    }
+
+    number = atoi(argv[i]);
+    switch(pos) {
+      case 0: to   = from = number; ++pos; break;
+      case 1: to   = number; break;
+      default: Error("too many arguments%s", "");
+    }
+  }
+
+  assert(from > 0);
+  assert(to   <= CONFIG_NSIGS);
+  assert(from <= to);
+
+  ncases = (to - from) + 1;
+
+  PrintHeader();
+  TestRange(from, to);
+  totalResult = (totalErrorCodes[1] == ncases) ? 1 : 0; 
+  PrintTotalResult(totalResult);
+
+  dcTest_deInitPlatform();
+
+  return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/make-config.lua	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,13 @@
+require "config"
+
+local defs = {
+  MAXARGS = maxargs,
+  NSIGS   = nsigs,
+  API     = api
+}
+
+for k,v in pairs(defs) do
+  io.write("#define CONFIG_" .. k .. " " .. v .. "\n" )
+end
+io.flush()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/make-cstrings.lua	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,6 @@
+require "config"
+for line in io.lines() do
+  io.write( '"' .. ccprefix .. line .. '",\n' )
+end
+io.flush()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/make-invoke-macros.lua	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,27 @@
+require "config"
+if mode == "ordered" then
+  minargs = 0
+end
+local i
+for i = minargs, maxargs do
+  local line = "#define F" .. i .. "(ID,R"
+  local argdef = ""
+  local argset = ""
+  if i > 0 then
+    line = line .. ","
+    local j
+    for j = 0, i-1 do
+      if j > 0 then 
+        argdef = argdef .. ","
+        argset = argset .. ","
+      end
+      argdef = argdef .. "A" .. j
+      argset = argset .. "A[" .. j .. "].A" .. j
+    end
+  end
+  line = line .. argdef .. ") void ID(void* addr) { Result.R = ((CONFIG_API R(*)("  .. argdef .. "))addr)(" .. argset .. ");}\n"
+  io.write(line)
+end
+io.flush()
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/make-invoke-table.lua	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,8 @@
+require "config"
+
+local i
+for i = 1, nsigs do
+  line = "&f" .. i .. ",\n"
+  io.write(line)
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/make-invokers.lua	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+require "config"
+local id = 1
+for signature in io.lines() do
+  local nargs = string.len(signature) - 2
+  local rtype = string.sub(signature, nargs + 2, nargs + 2)
+  local outline   = "F" .. nargs .. "(f" .. id .. "," .. rtype
+  for i = 1, nargs do
+    local type  = string.sub(signature, i, i)
+    outline = outline .. "," .. type 
+  end
+  outline = outline .. ")\n"
+  io.write( outline )
+  id = id + 1
+end
+io.flush()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/make-signatures.lua	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,64 @@
+require "config"
+require "math"
+require "string"
+
+local nargtypes = string.len(argtypes)
+local nrettypes = string.len(rettypes)
+local argrange  = maxargs - minargs
+math.randomseed(seed)
+
+function randomSignatures(nsigs)
+  local i 
+  for i = 1, nsigs do
+    local nargs = minargs + math.random(argrange+1) - 1 
+    local signature = ""
+    for j = 1, nargs do
+      local typeindex = math.random(nargtypes)
+      signature = signature .. string.sub(argtypes, typeindex, typeindex)
+    end
+    local rtypeindex = math.random(nrettypes)
+    signature = signature .. ")" .. string.sub(rettypes, rtypeindex, rtypeindex)
+    io.write(signature .. "\n")
+  end
+end
+
+function orderedSignature(x)
+  local signature = ""
+  local typeindex
+  while true do
+    if x < nargtypes then break end
+    typeindex = 1 + math.mod(x, nargtypes)
+    signature = signature .. string.sub(argtypes, typeindex, typeindex)
+    x = math.floor( x / nargtypes )
+  end
+  typeindex = 1 + x
+  signature = signature .. ")" .. string.sub(argtypes, typeindex, typeindex)
+  return signature
+end
+
+function orderedSignatures(nsigs)
+  local i 
+  for i = 1, nsigs do
+    io.write( orderedSignature(offset+i*step) .. "\n" )
+  end
+end
+
+function designedSignatures()
+ for line in io.lines(designfile) do
+   io.write( line )
+   io.write( "\n" )
+ end
+end
+
+if mode == "random" then
+  randomSignatures(nsigs)
+elseif mode == "ordered" then
+  orderedSignatures(nsigs)
+elseif mode == "designed" then
+  designedSignatures()
+else
+  error("'mode' must be 'random' or 'ordered'")
+end
+
+io.flush()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2013 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+TOP		= ../..
+<$TOP/buildsys/mk/prolog.mk
+
+
+UNITS       = env handler sigstrings invokers do_test main print signature_utils
+APPLICATION = callback_suite
+LIBS        = $TOP/dyncallback/libdyncallback_s.a$O
+
+
+<$TOP/buildsys/mk/epilog.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/print.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,64 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/print.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "../common/platformInit.h"
+
+void PrintUsage(const char* appName)
+{
+  fprintf(stdout, "usage:\n\
+%s [ -v ] [ from [to] ]\n\
+where\n\
+  from, to: test range\n\
+options\n\
+  -v        verbose reports\n\
+  -h        help on usage\n\
+\n\
+", appName);
+  fflush(stdout);
+}
+
+void PrintHeader()
+{
+  fprintf(stdout, "case\tsignat.\tresult\n");
+}
+
+void PrintCaseInfo(int caseId, const char* signatureString)
+{
+  fprintf(stdout, "f%d(\t%s", caseId, signatureString);
+  fflush(stdout);
+}
+
+void PrintCaseResult(int resultId)
+{
+  fprintf(stdout, " :%d\n", resultId);
+  fflush(stdout);
+}
+
+void PrintTotalResult(int resultId)
+{
+  printf("result: callback_suite: %d\n", resultId);
+  fflush(stdout);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/print.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/print.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+void PrintUsage(const char* appname);
+void PrintHeader();
+void PrintCaseInfo(int index, const char* signature); 
+void PrintCaseResult(int result);
+void PrintTotalResult(int result);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/signature_utils.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,34 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/signature_utils.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "dyncall_signature.h"
+
+const char* SignatureSkipCallPrefix(const char* signature)
+{
+  if ( signature[0] == DC_SIGCHAR_CC_PREFIX ) {
+    signature += 2;
+  }
+  return signature;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/signature_utils.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,26 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/signature_utils.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+const char* SignatureSkipCallPrefix(const char* signature);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/sigstrings.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,37 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/sigstrings.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "_auto_config.h"
+
+const char* sigstrings[CONFIG_NSIGS] = 
+{
+#include "_auto_sigstrings.h"
+};
+
+const char* GetSignature(int index)
+{
+  return sigstrings[index];
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/sigstrings.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,27 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callback_suite/sigstrings.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+const char* GetSignature(int index); /* index starts at 0 */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callback_suite/stress1.cfg	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,56 @@
+i)B
+i)c
+i)C
+i)s
+i)S
+i)i
+i)I
+i)j
+i)J
+i)l
+i)L
+i)p
+i)f
+i)d
+ii)B
+iii)B
+i)c
+ii)C
+iii)C
+i)i
+ii)i
+iii)i
+iiii)i
+iiiii)i
+iiiiii)i
+iiiiiii)i
+iiiiiiii)i
+iiiiiiiii)i
+iiiiiiiiii)i
+iiiiiiiiiii)i
+iiiiiiiiiiii)i
+l)l
+ll)l
+lll)l
+llll)l
+lllll)l
+llllll)l
+lllllll)l
+j)j
+jj)j
+jjj)j
+jjjj)j
+jjjjj)j
+jjjjjj)j
+fdfdid)i
+fdidid)f
+ffidid)d
+didddd)l
+dfdidd)i
+ddiddd)f
+jjjjjj)j
+llllll)l
+iiiiii)i
+ffffff)f
+dddddd)d
+idfdid)l
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callf/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+add_executable(callf main.c)
+target_link_libraries(callf dyncall_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callf/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callf/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+APP = callf
+OBJS = main.o
+
+TOP      = ../..
+CFLAGS  += -I${TOP}/dyncall
+LDFLAGS += -L${TOP}/dyncall
+LDLIBS  += -ldyncall_s
+
+all: ${APP}
+
+.PHONY: all clean
+
+${APP}: ${OBJS} 
+	${CC} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP} 
+
+clean:
+	rm -f ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callf/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP     = callf
+OBJS    = main.o
+SRCTOP  = ${VPATH}/../..
+BLDTOP  = ../..
+CFLAGS += -I${SRCTOP}/dyncall
+LDLIBS += -L${BLDTOP}/dyncall -ldyncall_s
+.PHONY: all clean install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CC} ${CFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP}
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callf/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,59 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = callf.exe
+OBJS = main.obj# ..\testmain\main_ansic.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib > nul
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = callf.nds
+OBJS = main.o# ..\testmain\main_NDS.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callf/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callf/main.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,108 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/callf/main.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+/* test dcCallF API */
+
+#include "../../dyncall/dyncall_callf.h"
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+/* sample void function */
+
+int vf_iii(int x,int y,int z)
+{
+  int r = (x == 1 && y == 2 && z == 3);
+  printf("%d %d %d: %d", x, y, z, r);
+  return r;
+}
+
+int vf_ffiffiffi(float a, float b, int c, float d, float e, int f, float g, float h, int i)
+{
+  int r = (a == 1.f && b == 2.f && c == 3 && d == 4.f && e == 5.f && f == 6 && g == 7.f && h == 8.f && i == 9);
+  printf("%f %f %d %f %f %d %f %f %d: %d", a, b, c, d, e, f, g, h, i, r);
+  return r;
+}
+
+/* main */
+
+int main(int argc, char* argv[])
+{
+  DCCallVM* vm;
+  DCValue ret;
+  int r = 1;
+
+  dcTest_initPlatform();
+
+  /* allocate call vm */
+  vm = dcNewCallVM(4096);
+
+
+  /* calls using 'formatted' API */
+  dcReset(vm);
+  printf("callf iii)i:       ");
+  dcCallF(vm, &ret, (void*)&vf_iii, "iii)i", 1, 2, 3);
+  r = ret.i && r;
+
+  dcReset(vm);
+  printf("\ncallf ffiffiffi)i: ");
+  dcCallF(vm, &ret, (void*)&vf_ffiffiffi, "ffiffiffi)i", 1.f, 2.f, 3, 4.f, 5.f, 6, 7.f, 8.f, 9);
+  r = ret.i && r;
+
+
+  /* arg binding then call using 'formatted' API */
+  dcReset(vm);
+  printf("\nargf iii)i       then call: ");
+  dcArgF(vm, "iii)i", 1, 2, 3);
+  r = r && dcCallInt(vm, (void*)&vf_iii);
+
+  dcReset(vm);
+  printf("\nargf iii         then call: ");
+  dcArgF(vm, "iii", 1, 2, 3);
+  r = r && dcCallInt(vm, (void*)&vf_iii);
+
+  dcReset(vm);
+  printf("\nargf ffiffiffi)i then call: ");
+  dcArgF(vm, "ffiffiffi)i", 1.f, 2.f, 3, 4.f, 5.f, 6, 7.f, 8.f, 9);
+  r = r && dcCallInt(vm, (void*)&vf_ffiffiffi);
+
+  dcReset(vm);
+  printf("\nargf ffiffiffi   then call: ");
+  dcArgF(vm, "ffiffiffi", 1.f, 2.f, 3, 4.f, 5.f, 6, 7.f, 8.f, 9);
+  r = r && dcCallInt(vm, (void*)&vf_ffiffiffi);
+
+
+  /* free vm */
+  dcFree(vm);
+
+  printf("\nresult: callf: %d\n", r);
+
+  dcTest_deInitPlatform();
+  
+  return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/callf/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,29 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+TOP		= ../..
+<$TOP/buildsys/mk/prolog.mk
+
+
+UNITS       =   main
+APPLICATION =   callf
+LIBS        =   $TOP/dyncall/libdyncall_s.a$O
+
+<$TOP/buildsys/mk/epilog.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/common/platformInit.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,115 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/common/platformInit.c
+ Description: 
+ License:
+
+   Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                      Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "platformInit.h"
+
+
+#if defined(DC__OS_NDS)
+
+void dcTest_initPlatform()
+{
+  powerOn(POWER_ALL);
+
+  /* Interrupt handlers. */
+  /*irqInit();*/
+  /*irqSet(IRQ_VBLANK, OnIrq);*/
+
+  /* Use the touch screen for output. */
+  videoSetMode(MODE_FB0);
+  vramSetBankA(VRAM_A_LCD);
+  videoSetModeSub(MODE_0_2D | DISPLAY_BG0_ACTIVE);
+  vramSetBankC(VRAM_C_SUB_BG);
+  REG_BG0CNT_SUB = BG_MAP_BASE(31);
+
+  /* Set the colour of the font. */
+  /* BG_PALETTE_SUB[255] = RGB15(25, 11, 9); */
+
+  /* consoleInitDefault((u16*)SCREEN_BASE_BLOCK_SUB(31), (u16*)CHAR_BASE_BLOCK_SUB(0), 16); */
+  consoleDemoInit();
+}
+
+
+void dcTest_deInitPlatform()
+{
+  /* Main loop - console style. */
+  while(1) {
+    swiWaitForVBlank();
+  }
+}
+
+
+#elif defined(DC__OS_PSP)
+
+PSP_MODULE_INFO("dyncall_test",0,1,1);
+
+int exit_callback(int arg1, int arg2, void *common)
+{
+  sceKernelExitGame();
+  return 0;
+}
+
+int CallbackThread(SceSize args, void *argp)
+{
+  int cbid;
+  cbid = sceKernelCreateCallback("Exit Callback", &exit_callback, NULL);
+  sceKernelRegisterExitCallback(cbid);
+  sceKernelSleepThreadCB();
+  return 0;
+}
+
+void dcTest_initPlatform()
+{
+  pspDebugScreenInit();
+  pspDebugScreenClear();
+
+  int thid = 0;
+  thid = sceKernelCreateThread("update_thread", &CallbackThread, 0x11, 0xFA0, THREAD_ATTR_USER, 0);
+  if (thid >= 0)
+      sceKernelStartThread(thid, 0, 0);
+
+  sceDisplayWaitVblankStart();
+  pspDebugScreenSetXY(0, 0);
+}
+
+void dcTest_deInitPlatform()
+{
+  sceKernelSleepThread();
+  sceKernelExitGame();
+}
+
+
+#else /* All other platforms, usually just pulling in standard headers and empty init function. */
+
+void dcTest_initPlatform()
+{
+}
+
+void dcTest_deInitPlatform()
+{
+}
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/common/platformInit.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,61 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/common/platformInit.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#ifndef PLATFORMINIT_H
+#define PLATFORMINIT_H
+
+
+#include "../../dyncall/dyncall_macros.h"
+
+#if defined(DC__OS_NDS)
+#  include <nds.h>
+#  include <stdio.h>
+#elif defined(DC__OS_PSP)
+#  include <pspkernel.h>
+#  include <pspdebug.h>
+#  include <pspdisplay.h>
+#  define printf pspDebugScreenPrintf
+/* All other platforms, usually just pulling in standard headers and empty init function. */
+#else
+#  if defined(__cplusplus)
+#    if defined(__SUNPRO_CC) || defined(__ANDROID__) /* needed by SunPro .. otherwise printf not included */
+#      include <stdio.h>
+#    else
+#      include <cstdio>
+#    endif
+#  else
+#    include <stdio.h>
+#  endif
+#endif
+
+
+/* Init/shutdown forwards, should be used by every (portable) test. */
+void dcTest_initPlatform();
+void dcTest_deInitPlatform();
+
+
+#endif /* PLATFORMINIT_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all && exit || sh $(?:bat=sh) all
+clean: ./../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean && exit || sh $(?:bat=sh) clean
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ellipsis/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+add_executable(ellipsis main.cc ellipsis.cc)
+target_link_libraries(ellipsis dyncall_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ellipsis/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ellipsis/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+APP  = ellipsis
+OBJS = ellipsis.o main.o
+
+TOP      = ../..
+CFLAGS  += -I${TOP}/dyncall
+LDFLAGS += -L${TOP}/dyncall
+LDLIBS  += -ldyncall_s
+
+all: ${APP}
+
+.PHONY: all clean install
+
+${APP}: ${OBJS} 
+	${CXX} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP} 
+
+clean:
+	rm -f ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ellipsis/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP       = ellipsis
+OBJS      = ellipsis.o main.o
+SRCTOP    = ${VPATH}/../..
+BLDTOP    = ../..
+CXXFLAGS += -I${SRCTOP}/dyncall
+LDLIBS   += -L${BLDTOP}/dyncall -ldyncall_s
+.PHONY: all clean install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CXX} ${CXXFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP} 
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ellipsis/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,69 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+AUTOS = config.h case.h
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = ellipsis.exe
+OBJS = main.obj ellipsis.obj# ..\testmain\main_ansic.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib > nul
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = ellipsis.nds
+OBJS = main.o ellipsis.o# ..\testmain\main_NDS.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+
+$(OBJS): $(AUTOS)
+
+$(AUTOS): mkcase.py
+	python mkcase.py >case.h 2>config.h
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ellipsis/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,54 @@
+dyncall stress test suite: testing ellipsis C calls
+===================================================
+Copyright (c) 2007-2009 Daniel Adler <dadler@uni-goettingen.de>, 
+                        Tassilo Philipp <tphilipp@potion-studios.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
+
+requirements:
+  python (for preprocessing)
+
+configuration:
+  edit "nargs" in mkcase.py and run
+  
+    make distclean 
+    make 
+    
+  on shell.
+  
+
+usage:
+
+  ellipsis         	        - run full range
+  ellipsis <id> 		- run test id <id>
+  ellipsis <from> <to>		- run test id <from> to id <to> (inclusive).
+
+  see test details in case.h
+
+
+description:
+
+  the test invokes 'void'-ellipsis functions that effectively overwrite global 
+  variables in a structured way.
+  
+  functions are identified by an id (a number starting at 0).
+  
+  the implementation of each function does
+  
+    sets the gID to its id (which is compiled in) 
+  
+    sets all arguments into type-specific value vectors at the given position
+  
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ellipsis/case.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,111 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/ellipsis/case.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase.py (on stdout) */
+VF0(0,f_)
+VF1(1,DCint,f_i)
+VF1(2,DClonglong,f_l)
+VF1(3,DCdouble,f_d)
+VF1(4,DCpointer,f_p)
+VF2(5,DCint,DCint,f_ii)
+VF2(6,DClonglong,DCint,f_li)
+VF2(7,DCdouble,DCint,f_di)
+VF2(8,DCpointer,DCint,f_pi)
+VF2(9,DCint,DClonglong,f_il)
+VF2(10,DClonglong,DClonglong,f_ll)
+VF2(11,DCdouble,DClonglong,f_dl)
+VF2(12,DCpointer,DClonglong,f_pl)
+VF2(13,DCint,DCdouble,f_id)
+VF2(14,DClonglong,DCdouble,f_ld)
+VF2(15,DCdouble,DCdouble,f_dd)
+VF2(16,DCpointer,DCdouble,f_pd)
+VF2(17,DCint,DCpointer,f_ip)
+VF2(18,DClonglong,DCpointer,f_lp)
+VF2(19,DCdouble,DCpointer,f_dp)
+VF2(20,DCpointer,DCpointer,f_pp)
+VF3(21,DCint,DCint,DCint,f_iii)
+VF3(22,DClonglong,DCint,DCint,f_lii)
+VF3(23,DCdouble,DCint,DCint,f_dii)
+VF3(24,DCpointer,DCint,DCint,f_pii)
+VF3(25,DCint,DClonglong,DCint,f_ili)
+VF3(26,DClonglong,DClonglong,DCint,f_lli)
+VF3(27,DCdouble,DClonglong,DCint,f_dli)
+VF3(28,DCpointer,DClonglong,DCint,f_pli)
+VF3(29,DCint,DCdouble,DCint,f_idi)
+VF3(30,DClonglong,DCdouble,DCint,f_ldi)
+VF3(31,DCdouble,DCdouble,DCint,f_ddi)
+VF3(32,DCpointer,DCdouble,DCint,f_pdi)
+VF3(33,DCint,DCpointer,DCint,f_ipi)
+VF3(34,DClonglong,DCpointer,DCint,f_lpi)
+VF3(35,DCdouble,DCpointer,DCint,f_dpi)
+VF3(36,DCpointer,DCpointer,DCint,f_ppi)
+VF3(37,DCint,DCint,DClonglong,f_iil)
+VF3(38,DClonglong,DCint,DClonglong,f_lil)
+VF3(39,DCdouble,DCint,DClonglong,f_dil)
+VF3(40,DCpointer,DCint,DClonglong,f_pil)
+VF3(41,DCint,DClonglong,DClonglong,f_ill)
+VF3(42,DClonglong,DClonglong,DClonglong,f_lll)
+VF3(43,DCdouble,DClonglong,DClonglong,f_dll)
+VF3(44,DCpointer,DClonglong,DClonglong,f_pll)
+VF3(45,DCint,DCdouble,DClonglong,f_idl)
+VF3(46,DClonglong,DCdouble,DClonglong,f_ldl)
+VF3(47,DCdouble,DCdouble,DClonglong,f_ddl)
+VF3(48,DCpointer,DCdouble,DClonglong,f_pdl)
+VF3(49,DCint,DCpointer,DClonglong,f_ipl)
+VF3(50,DClonglong,DCpointer,DClonglong,f_lpl)
+VF3(51,DCdouble,DCpointer,DClonglong,f_dpl)
+VF3(52,DCpointer,DCpointer,DClonglong,f_ppl)
+VF3(53,DCint,DCint,DCdouble,f_iid)
+VF3(54,DClonglong,DCint,DCdouble,f_lid)
+VF3(55,DCdouble,DCint,DCdouble,f_did)
+VF3(56,DCpointer,DCint,DCdouble,f_pid)
+VF3(57,DCint,DClonglong,DCdouble,f_ild)
+VF3(58,DClonglong,DClonglong,DCdouble,f_lld)
+VF3(59,DCdouble,DClonglong,DCdouble,f_dld)
+VF3(60,DCpointer,DClonglong,DCdouble,f_pld)
+VF3(61,DCint,DCdouble,DCdouble,f_idd)
+VF3(62,DClonglong,DCdouble,DCdouble,f_ldd)
+VF3(63,DCdouble,DCdouble,DCdouble,f_ddd)
+VF3(64,DCpointer,DCdouble,DCdouble,f_pdd)
+VF3(65,DCint,DCpointer,DCdouble,f_ipd)
+VF3(66,DClonglong,DCpointer,DCdouble,f_lpd)
+VF3(67,DCdouble,DCpointer,DCdouble,f_dpd)
+VF3(68,DCpointer,DCpointer,DCdouble,f_ppd)
+VF3(69,DCint,DCint,DCpointer,f_iip)
+VF3(70,DClonglong,DCint,DCpointer,f_lip)
+VF3(71,DCdouble,DCint,DCpointer,f_dip)
+VF3(72,DCpointer,DCint,DCpointer,f_pip)
+VF3(73,DCint,DClonglong,DCpointer,f_ilp)
+VF3(74,DClonglong,DClonglong,DCpointer,f_llp)
+VF3(75,DCdouble,DClonglong,DCpointer,f_dlp)
+VF3(76,DCpointer,DClonglong,DCpointer,f_plp)
+VF3(77,DCint,DCdouble,DCpointer,f_idp)
+VF3(78,DClonglong,DCdouble,DCpointer,f_ldp)
+VF3(79,DCdouble,DCdouble,DCpointer,f_ddp)
+VF3(80,DCpointer,DCdouble,DCpointer,f_pdp)
+VF3(81,DCint,DCpointer,DCpointer,f_ipp)
+VF3(82,DClonglong,DCpointer,DCpointer,f_lpp)
+VF3(83,DCdouble,DCpointer,DCpointer,f_dpp)
+VF3(84,DCpointer,DCpointer,DCpointer,f_ppp)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ellipsis/config.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,28 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/ellipsis/config.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase (on stderr) */
+#define NARGS  3
+#define NTYPES 4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ellipsis/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ellipsis/ellipsis.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,107 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/ellipsis/ellipsis.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "config.h"
+#include "../../dyncall/dyncall.h"
+#include "../../dyncall/dyncall_value.h"
+
+
+#if defined(__SUNPRO_CC) || defined(__ANDROID__)
+#include <stdarg.h>
+#else
+#include <cstdarg>
+#endif
+
+DCValue mValue[NARGS];
+
+void clearValues() { for(int i = 0;i<NARGS;++i) mValue[i].L = 0xCAFEBABEDEADC0DEULL; }
+
+template<typename T> void g(T value, int pos);
+
+template<> void g(DCchar value, int pos) { mValue[pos].c = value; }
+template<> void g(DCshort value, int pos) { mValue[pos].s = value; }
+template<> void g(DCint value, int pos) { mValue[pos].i = value; }
+template<> void g(DClong value, int pos) { mValue[pos].l = value; }
+template<> void g(DClonglong value, int pos) { mValue[pos].L = value; }
+template<> void g(DCfloat value, int pos) { mValue[pos].f = value; }
+template<> void g(DCdouble value, int pos) { mValue[pos].d = value; }
+template<> void g(DCpointer value, int pos) { mValue[pos].p = value; }
+
+DCValue* getArg(int pos) { return &mValue[pos]; }
+
+int gID;
+int getId() { return gID; }
+
+extern "C" {
+
+#define VF0(id,S) void S () {gID=id;}
+#define VF1(id,A1,S) void S (A1 a1) {gID=id;g<A1>(a1,0);}
+#define VF2(id,A1,A2,S) void S (A1 a1, ...) {va_list l;va_start(l,a1);gID=id;g<A1>(a1,0);g<A2>(va_arg(l,A2),1);va_end(l);}
+#define VF3(id,A1,A2,A3,S) void S (A1 a1, ...) {va_list l;va_start(l,a1);gID=id;g<A1>(a1,0);g<A2>(va_arg(l,A2),1);g<A3>(va_arg(l,A3),2);va_end(l);}
+#define VF4(id,A1,A2,A3,A4,S) void S (A1 a1, ...) {va_list l;va_start(l,a1);gID=id;g<A1>(a1,0);g<A2>(va_arg(l,A2),1);g<A3>(va_arg(l,A3),2);g<A4>(va_arg(l,A4),3);va_end(l);}
+#define VF5(id,A1,A2,A3,A4,A5,S) void S (A1 a1, ...) {va_list l;va_start(l,a1);gID=id;g<A1>(a1,0);g<A2>(va_arg(l,A2),1);g<A3>(va_arg(l,A3),2);g<A4>(va_arg(l,A4),3);g<A5>(va_arg(l,A5),4);va_end(l);}
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) void S (A1 a1, ...) {va_list l;va_start(l,a1);gID=id;g<A1>(a1,0);g<A2>(va_arg(l,A2),1);g<A3>(va_arg(l,A3),2);g<A4>(va_arg(l,A4),3);g<A5>(va_arg(l,A5),4);g<A6>(va_arg(l,A6),5);va_end(l);}
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) void S (A1 a1, ...) {va_list l;va_start(l,a1);gID=id;g<A1>(a1,0);g<A2>(va_arg(l,A2),1);g<A3>(va_arg(l,A3),2);g<A4>(va_arg(l,A4),3);g<A5>(va_arg(l,A5),4);g<A6>(va_arg(l,A6),5);g<A7>(va_arg(l,A7),6);va_end(l);}
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) void S (A1 a1, ...) {va_list l;va_start(l,a1);gID=id;g<A1>(a1,0);g<A2>(va_arg(l,A2),1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);va_end(l);}
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) void S (A1 a1, ...) {va_list l;va_start(l,a1);gID=id;g<A1>(a1,0);g<A2>(va_arg(l,A2),1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);va_end(l);}
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) void S (A1 a1, ...) {va_list l;va_start(l,a1);gID=id;g<A1>(a1,0);g<A2>(va_arg(l,A2),1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);va_end(l);}
+
+#include "case.h"
+
+}
+
+#undef VF0
+#undef VF1
+#undef VF2
+#undef VF3
+#undef VF4
+#undef VF5
+#undef VF6
+#undef VF7
+#undef VF8
+#undef VF9
+#undef VF10
+
+#define VF0(id,S) (void*)S,
+#define VF1(id,A1,S) (void*)S,
+#define VF2(id,A1,A2,S) (void*)S,
+#define VF3(id,A1,A2,A3,S) (void*)S,
+#define VF4(id,A1,A2,A3,A4,S) (void*)S,
+#define VF5(id,A1,A2,A3,A4,A5,S) (void*)S,
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) (void*)S,
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) (void*)S,
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) (void*)S,
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) (void*)S,
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) (void*)S,
+
+DCpointer gFuncTable[] = {
+#include "case.h"
+};
+
+DCpointer getFunc(int x) {
+  return gFuncTable[x];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ellipsis/main.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,177 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/ellipsis/main.cc
+ Description: call (...) functions via dyncall library, targets are auto-generated
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "config.h"
+#include <math.h>
+#include "../../dyncall/dyncall.h"
+#include "../../dyncall/dyncall_value.h"
+#include <stdlib.h>
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+int       getId();
+DCpointer getFunc(int x);
+DCValue*  getArg(int pos);
+
+DCint      valueInt     [NARGS];
+DClonglong valueLongLong[NARGS];
+DCdouble   valueDouble  [NARGS];
+DCpointer  valuePointer [NARGS];
+
+bool equals(int select, int pos, void* data)
+{
+  switch(select)
+  {
+    case 0: return ( getArg(pos)->i == valueInt     [pos] ); break;
+    case 1: return ( getArg(pos)->l == valueLongLong[pos] ); break;
+    case 2: return ( getArg(pos)->d == valueDouble  [pos] ); break;
+    case 3: return ( getArg(pos)->p == valuePointer [pos] ); break;
+  }
+  return false;
+}
+void clearValues();
+
+void init()
+{
+  for (int i = 0 ; i < NARGS ; ++i ) 
+  {
+    valueInt     [i] = DCint     (i);
+    valueLongLong[i] = DClonglong(i);
+    valueDouble  [i] = DCdouble  (i);
+    valuePointer [i] = DCpointer (i);
+  } 
+}
+
+void arg(DCCallVM* pCall, int select, int pos)
+{
+  switch(select) 
+  {
+    case 0: dcArgInt     ( pCall, valueInt     [pos] ); break;
+    case 1: dcArgLongLong( pCall, valueLongLong[pos] ); break;
+    case 2: dcArgDouble  ( pCall, valueDouble  [pos] ); break;
+    case 3: dcArgPointer ( pCall, valuePointer [pos] ); break;
+  }
+}
+
+#define assert(x) if (!(x)) return false
+
+bool test_ellipsis_case(int x)
+{
+  clearValues();
+
+  DCCallVM* pCall = dcNewCallVM(4096);
+
+  assert( dcGetError(pCall) == DC_ERROR_NONE );
+ 
+  dcMode(pCall, DC_CALL_C_ELLIPSIS);
+  
+  assert( dcGetError(pCall) == DC_ERROR_NONE );
+ 
+  int y = x;
+  int selects[NARGS] = { 0 };
+  int pos = 0;
+  if (y > 0) 
+  {
+    int select = (y-1) % NTYPES; 
+    selects[pos] = select;
+    arg(pCall,select,pos);
+    y = (y-1) / NTYPES;
+    ++pos;
+  }
+
+  dcMode(pCall, DC_CALL_C_ELLIPSIS_VARARGS);
+
+  for(; y>0; ++pos) 
+  {
+    int select = (y-1) % NTYPES; 
+    selects[pos] = select;
+    arg(pCall,select,pos);
+    y = (y-1) / NTYPES;
+  }
+  dcCallVoid(pCall,getFunc(x));
+  
+  assert( getId() == x );
+  
+  for(int i=0; i<pos; ++i) {
+    assert( equals( selects[i], i, getArg(i) ) );      
+  }
+  
+  dcFree(pCall);
+  return true;
+}
+
+int powerfact(int x, int n)
+{
+  if (n==0) return 0;
+  return static_cast<int>( pow((double)x,n)+powerfact(x,n-1) );
+}
+
+
+bool run_range(int from, int to)
+{
+  bool tr = true;
+  for (int i = from ; i < to ; ++i ) {
+    printf("%d:", i);
+    bool r = test_ellipsis_case(i);
+    printf("%d\n", r);
+
+    tr &= r;
+  }
+  return tr;
+}
+
+
+extern "C" {
+
+int main(int argc, char* argv[])
+{
+  dcTest_initPlatform();
+
+  bool success = false;
+  init();
+  if (argc == 2) {
+    int index = atoi(argv[1]);
+    success = run_range( index, index+1 ); 
+  } else if (argc == 3) {
+    int from = atoi(argv[1]);
+    int to   = atoi(argv[2])+1;
+    success = run_range(from,to);
+  } else {
+    int ncalls = powerfact(NTYPES,NARGS)+1;
+    success = run_range(0,ncalls);
+  }
+
+  printf("result: ellipsis: %s\n", success ? "1" : "0");
+
+  dcTest_deInitPlatform();
+
+  return (success) ? 0 : -1;
+}
+
+}  // extern "C"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/ellipsis/mkcase.py	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,67 @@
+#!/usr/bin/python
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+import sys
+
+# parameters
+
+nargs  = 3
+
+# all types without (float)
+
+types  = ["DCint","DClonglong","DCdouble","DCpointer"]
+sigs   = ['i','l','d','p']
+
+
+# generator
+
+ntypes = len(types)
+
+sys.stderr.write("/* auto generated by mkcase (on stderr) */\n");
+sys.stderr.write("".join(["#define NARGS  ",str(nargs),"\n"]))
+sys.stderr.write("".join(["#define NTYPES ",str(ntypes),"\n"]))
+
+def powerfact(x, n):
+  if n==0:
+    return 0
+  else:
+    return x**n+powerfact(x,n-1)
+
+x     = 0
+end   = powerfact(ntypes,nargs)+1
+
+sys.stdout.write("/* auto generated by mkcase.py (on stdout) */\n");
+
+while x < end:
+  args = [str(x)]
+  sig  = ["f_"]
+  pos  = 0
+  y    = x
+  while y > 0:
+    s     = (y-1) % ntypes
+    y     = (y-1) / ntypes
+    args += [ types[s] ]
+    sig  += [ sigs[s] ] # types[s][2] ]
+    pos  += 1
+  sig   = "".join(sig)
+  args += [ sig ]
+  args  = ",".join(args)
+  sys.stdout.write( "".join(["VF",str(pos),"(",args,")\n"]) )
+  x += 1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/gen-masm/Makefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: call_x86.masm call_x64.masm
+
+%.masm: %.S
+	${CPP} -E -P -DGEN_MASM $< -o $@
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/gen-masm/call_x64.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,154 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/gen-masm/call_x64.S
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#if defined(GEN_MASM)
+.CODE
+#  define BEGIN_ASM
+#  define END_ASM END
+#  define GLOBAL(X) X PROC
+#  define BEGIN_PROC(X) 	OPTION PROLOGUE:NONE, EPILOGUE:NONE
+#  define END_PROC(X)   X ENDP
+#else
+	.intel_syntax
+	.text
+#  define BEGIN_ASM
+#  define END_ASM 
+#  define GLOBAL(X) .globl X
+#  define BEGIN_PROC(X)  X:
+#  define END_PROC(X)
+#endif
+
+BEGIN_ASM
+
+// ---------------------------------------------------------------------------
+// Call Kernel for x64 System V
+
+GLOBAL(dcCall_x64_sysv)
+BEGIN_PROC(dcCall_x64_sysv)
+	// rdi : size of arguments to be passed via stack 
+	// rsi : pointer to arguments to be passed via the stack 
+	// rdx : pointer to arguments of integral/pointer type to be passed via registers 
+	// rcx : pointer to arguments of floating point type to be passed via registers 
+	// r8  : target function pointer 
+
+	push	rbp			// Pseudo-prolog - preserve rbp. 
+	push	rbx			// Preserve rbx and store pointer to function in it. 
+
+	mov	rbp, rsp		// Store stack pointer in rbp. 
+
+	mov	rbx, r8
+
+	movsd	xmm0, qword ptr[rcx   ]	// Copy first 8 floats to xmm0-xmm7 (this makes rcx free to use).
+	movsd	xmm1, qword ptr[rcx+ 8]
+	movsd	xmm2, qword ptr[rcx+16]
+	movsd	xmm3, qword ptr[rcx+24]
+	movsd	xmm4, qword ptr[rcx+32]
+	movsd	xmm5, qword ptr[rcx+40]
+	movsd	xmm6, qword ptr[rcx+48]
+	movsd	xmm7, qword ptr[rcx+56]
+
+	sub	rsp, rdi		// Setup stack frame by subtracting the size of the arguments. 
+
+	mov	rax, rdi		// Align stack.
+	add	rax, 8
+	and	rax, 15
+	sub	rsp, rax
+
+	mov	rcx, rdi		// Store number of bytes to copy to stack in rcx (for rep movsb).
+	mov	rdi, rsp		// Store pointer to beginning of stack arguments in rdi (for rep movsb). 
+
+	rep movsb			// @@@ should be optimized (e.g. movq)
+
+	mov	rdi, qword ptr[rdx   ]	// Copy first six int/pointer arguments to rdi, rsi, rdx, rcx, r8, r9.
+	mov	rsi, qword ptr[rdx+ 8]
+	mov	rcx, qword ptr[rdx+24]
+	mov	r8,  qword ptr[rdx+32]
+	mov	r9,  qword ptr[rdx+40]
+	mov	rdx, qword ptr[rdx+16]	/* Set rdx last to not overwrite it to soon. */
+
+	mov	al, 8						/* Put upper bound of number of used xmm registers in al. */
+	call	rbx						/* Invoke function. */
+
+	mov	rsp, rbp					/* Restore stack pointer (such that we can pop the preserved values). */
+
+	pop	rbx						/* Restore rbx. */
+	pop	rbp						/* Pseudo-epilog. */
+
+	ret
+END_PROC(dcCall_x64_sysv)
+
+// ---------------------------------------------------------------------------
+// Call Kernel for x64 Win64
+
+GLOBAL(dcCall_x64_win64)
+BEGIN_PROC(dcCall_x64_win64)
+	push	rbp			// Pseudo-prolog - preserve rbp.
+	push	rsi			// Preserve rsi and rdi.
+	push	rdi
+
+	mov	rbp, rsp		// Store stack pointer in rbp.
+
+	sub	rsp, rcx		// Setup stack frame by subtracting the size of the arguments.
+
+	mov	rax, rcx		// Align stack.
+	add	rax, 8
+	and	rax, 15
+	sub	rsp, rax
+
+	mov	rsi, rdx		// Let rsi point to the arguments.
+	mov	rdi, rsp		// Store pointer to beginning of stack arguments in rdi (for rep movsb).
+	mov	rax, r9			// Put function address in rax.
+
+	rep movsb			// @@@ should be optimized (e.g. movq)
+
+	mov	rcx,  qword ptr[r8   ]	// Copy first four arguments to rcx, rdx, r8, r9 and xmm0-xmm3.
+	mov	rdx,  qword ptr[r8+ 8]
+	mov	r9,   qword ptr[r8+24]	// Set r9 first to not overwrite r8 too soon.
+	mov	r8,   qword ptr[r8+16]
+	movd	xmm0, rcx
+	movd	xmm1, rdx
+	movd	xmm2, r8
+	movd	xmm3, r9
+
+	push	r9			// Push first four arguments onto the stack preserve area.
+	push	r8
+	push	rdx
+	push	rcx
+
+	call	rax			// Invoke function.
+
+	mov	rsp, rbp		// Restore stack pointer (such that we can pop the preserved values).
+
+	pop	rdi			// Restore rsi and rdi.
+	pop	rsi
+	pop	rbp			// Pseudo-epilog.
+
+	ret
+END_PROC(dcCall_x64_win64)
+
+END_ASM
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/gen-masm/call_x64.masm	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,72 @@
+.CODE
+
+dcCall_x64_sysv PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push rbp
+ push rbx
+ mov rbp, rsp
+ mov rbx, r8
+ movsd xmm0, qword ptr[rcx ]
+ movsd xmm1, qword ptr[rcx+ 8]
+ movsd xmm2, qword ptr[rcx+16]
+ movsd xmm3, qword ptr[rcx+24]
+ movsd xmm4, qword ptr[rcx+32]
+ movsd xmm5, qword ptr[rcx+40]
+ movsd xmm6, qword ptr[rcx+48]
+ movsd xmm7, qword ptr[rcx+56]
+ sub rsp, rdi
+ mov rax, rdi
+ add rax, 8
+ and rax, 15
+ sub rsp, rax
+ mov rcx, rdi
+ mov rdi, rsp
+ rep movsb
+ mov rdi, qword ptr[rdx ]
+ mov rsi, qword ptr[rdx+ 8]
+ mov rcx, qword ptr[rdx+24]
+ mov r8, qword ptr[rdx+32]
+ mov r9, qword ptr[rdx+40]
+ mov rdx, qword ptr[rdx+16]
+ mov al, 8
+ call rbx
+ mov rsp, rbp
+ pop rbx
+ pop rbp
+ ret
+dcCall_x64_sysv ENDP
+dcCall_x64_win64 PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push rbp
+ push rsi
+ push rdi
+ mov rbp, rsp
+ sub rsp, rcx
+ mov rax, rcx
+ add rax, 8
+ and rax, 15
+ sub rsp, rax
+ mov rsi, rdx
+ mov rdi, rsp
+ mov rax, r9
+ rep movsb
+ mov rcx, qword ptr[r8 ]
+ mov rdx, qword ptr[r8+ 8]
+ mov r9, qword ptr[r8+24]
+ mov r8, qword ptr[r8+16]
+ movd xmm0, rcx
+ movd xmm1, rdx
+ movd xmm2, r8
+ movd xmm3, r9
+ push r9
+ push r8
+ push rdx
+ push rcx
+ call rax
+ mov rsp, rbp
+ pop rdi
+ pop rsi
+ pop rbp
+ ret
+dcCall_x64_win64 ENDP
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/gen-masm/call_x86.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,246 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/gen-masm/call_x86.S
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#if defined(GEN_MASM)
+.386
+.MODEL FLAT
+.CODE
+#  define BEGIN_ASM
+#  define END_ASM END
+#  define GLOBAL(X) _##X PROC
+#  define BEGIN_PROC(X) 	OPTION PROLOGUE:NONE, EPILOGUE:NONE
+#  define END_PROC(X)   _##X ENDP
+#  define HEX(X) X##h
+#else
+	.intel_syntax
+	.text
+#  define BEGIN_ASM
+#  define END_ASM 
+#  include "../../dyncall/dyncall_macros.h"
+#  if defined(DC__OS_Win32) || defined(DC__OS_Cygwin) || defined(DC__OS_MinGW) || defined(DC__OS_Darwin)
+#    define CSYM(X) _##X
+#  else
+#    define CSYM(X) X
+#  endif
+#  define GLOBAL(X) .globl CSYM(X)
+#  define BEGIN_PROC(X)  CSYM(X):
+#  define END_PROC(X)
+#  define HEX(X) 0x##X
+#endif
+
+// Package: dyncall
+// File: dyncall/dyncall_call_x86_gas.S
+// Description: All x86 abi call kernel implementations in GNU Assembler using C Preprocessor
+// License:
+//
+// Copyright (c) 2007-2010 Daniel Adler <dadler@uni-goettingen.de>,
+//                         Tassilo Philipp <tphilipp@potion-studios.com>
+//
+// Permission to use, copy, modify, and distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+//
+
+// === end of macros ==========================================================
+
+// ============================================================================
+// DynCall Call Kernels for X86 Architecture
+// ----------------------------------------------------------------------------
+// C Interface:
+//    dcCall_x86_XXX(void* target, void* args, size_t size);
+//
+// Parameter Stack layout:
+//    size    :=  ebp + 16
+//    args    :=  ebp + 12
+//    target  :=  ebp +  8
+//
+// NOTES:
+//  - epilog restore esp serves callee cleanup 
+
+// --- default / cdecl --------------------------------------------------------
+//  - caller clean-up
+BEGIN_ASM
+GLOBAL(dcCall_x86_cdecl)
+BEGIN_PROC(dcCall_x86_cdecl)
+	push ebp			// prolog
+ 	mov  ebp, esp
+	push esi			// save preserved
+	push edi
+	mov  esi, dword ptr[ebp+12] 	// esi = copy source args
+	mov  ecx, dword ptr[ebp+16] 	// ecx = size
+	sub  esp, ecx         	    	// alloc stack size
+	mov  edi, esp		    	// edi = copy target stack
+	shr  ecx, 2			// ecx = count DWORDs
+	rep  movsd			// copy DWORDs
+	call dword ptr[ebp+8] 		// call target
+	add  esp, dword ptr[ebp+16] 	// cleanup stack
+	pop  edi               	    	// restore preserved 
+	pop  esi
+	mov  esp, ebp			// epilog
+	pop  ebp
+	ret
+END_PROC(dcCall_x86_cdecl)
+
+// ---- C++ this calls (microsoft) ------------------------------------------ 
+// Details:
+//   - this pointer is in ECX
+
+GLOBAL(dcCall_x86_win32_msthis)
+BEGIN_PROC(dcCall_x86_win32_msthis)
+	push ebp               	// prolog 
+	mov  ebp, esp
+	push esi               // save preserved
+	push edi
+	mov esi, dword ptr [ebp+12] // esi = pointer on args 
+	mov ecx, dword ptr [ebp+16] // ecx = size 
+	mov eax, dword ptr [esi+0]  // eax = this pointer 
+	add esi, 4           // increment args pointer by thisptr 
+	sub ecx, 4         // decrement size by sizeof(thisptr) 
+	sub esp, ecx         // allocate argument-block on stack 
+	mov edi, esp       // edi = stack args
+	rep movsb               // copy arguments
+	mov ecx, eax       // ecx = this pointer
+	call dword ptr[ebp+8]	// call function
+	pop  edi		// restore preserved
+	pop  esi
+	mov esp, ebp        // epilog
+	pop  ebp
+	ret
+END_PROC(dcCall_x86_win32_msthis)
+
+// ---- win32 stdcall ---------------------------------------------------------
+// - callee cleans up stack
+
+GLOBAL(dcCall_x86_win32_std)
+BEGIN_PROC(dcCall_x86_win32_std)
+	push ebp               // prolog
+	mov ebp, esp
+	push esi               // save esi, edi
+	push edi
+	mov esi, dword ptr[ebp+12] 	// esi = args
+	mov ecx, dword ptr[ebp+16]	// ecx = size
+	sub esp, ecx	// allocate size bytes on stack
+	mov  edi, esp		// edi = copy destination stack
+	rep movsb		// copy BYTEs
+	call dword ptr[ebp+8]		// call target
+	pop  edi		// restore edi, esi */
+	pop  esi
+	mov  esp, ebp		// epilog
+	pop  ebp
+	ret
+END_PROC(dcCall_x86_win32_std)
+
+// ---- win32 fastcall (GNU/Microsoft) ----------------------------------------
+// - callee cleans up stack
+// - first two integer (up to 32bits) are passed in ECX and EDX
+
+GLOBAL(dcCall_x86_win32_fast)
+BEGIN_PROC(dcCall_x86_win32_fast)
+	push ebp               // prolog
+	mov  ebp, esp
+	push esi               // save preserved
+	push edi
+	mov  esi, dword ptr[ebp+12] 	// esi = copy source args
+	mov ecx, dword ptr[ebp+16]	// ecx = size
+	mov eax, dword ptr[esi+0]  	// eax = first argument
+	mov edx, dword ptr[esi+4] // edx = second argument
+	add esi, 8           // skip registers
+	sub ecx, 8           // 
+	mov dword ptr [ebp+16], ecx	// save stack alloc size
+	sub esp, ecx        // allocate stack 
+	mov edi, esp       // edi = stack args 
+	rep movsb               // copy BYTEs
+	mov  ecx, eax        // ecx = first argument 
+	call dword ptr[ebp+8]          // call target
+	pop  edi               // restore preserved
+	pop  esi
+	mov  esp, ebp        // epilog 
+	pop  ebp
+	ret
+END_PROC(dcCall_x86_win32_fast)
+
+// --- syscall int80 linux ---------------------------------------------------
+//  - all arguments are passed via registers
+
+GLOBAL(dcCall_x86_sys_int80h_linux)
+BEGIN_PROC(dcCall_x86_sys_int80h_linux)
+	push ebp        	// prolog
+ 	mov  ebp, esp
+	push ebx		// save preserved
+	push esi               
+	push edi
+	mov  eax, dword ptr[ebp+12]	// eax = argument buffer 
+	mov  ebx, dword ptr[eax+0]	// move first five arguments
+	mov  ecx, dword ptr[eax+4] 	
+	mov  edx, dword ptr[eax+8] 
+	mov  esi, dword ptr[eax+12]
+	mov  edi, dword ptr[eax+16]
+	mov  eax, dword ptr[ebp+8] 	// eax = syscall id
+	int  HEX(80)
+	pop  edi               // restore preserved
+	pop  esi
+	pop  ebx
+	mov  esp, ebp        	// epilog
+	pop  ebp
+	ret
+END_PROC(dcCall_x86_sys_int80h_linux)
+
+// --- syscall int80 bsd -----------------------------------------------------
+// - all arguments are passed via stack
+	
+GLOBAL(dcCall_x86_sys_int80h_bsd)
+BEGIN_PROC(dcCall_x86_sys_int80h_bsd)
+	push ebp               // prolog
+ 	mov  ebp, esp
+	push esi               // save preserved
+	push edi
+	mov  esi, dword ptr[ebp+12]    	// esi = pointer on args
+	mov  ecx, dword ptr[ebp+16]    	// ecx = size
+	sub  esp, ecx       	// allocate stack space
+	mov  edi, esp           // edi = stack args
+	shr ecx, 2             // ecx = number of DWORDs
+	rep movsd               // copy DWORDs
+	mov  eax, dword ptr[ebp+8]	// load system call id
+	call _do_int
+	pop  edi               // restore preserved
+	pop  esi
+	mov  esp, ebp          // epilog
+	pop  ebp
+	ret
+_do_int:
+	int  HEX(80)
+	ret
+END_PROC(dcCall_x86_sys_int80h_bsd)
+END_ASM
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/gen-masm/call_x86.masm	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,134 @@
+.386
+.MODEL FLAT
+.CODE
+
+_dcCall_x86_cdecl PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push ebp
+  mov ebp, esp
+ push esi
+ push edi
+ mov esi, dword ptr[ebp+12]
+ mov ecx, dword ptr[ebp+16]
+ sub esp, ecx
+ mov edi, esp
+ shr ecx, 2
+ rep movsd
+ call dword ptr[ebp+8]
+ add esp, dword ptr[ebp+16]
+ pop edi
+ pop esi
+ mov esp, ebp
+ pop ebp
+ ret
+_dcCall_x86_cdecl ENDP
+_dcCall_x86_win32_msthis PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push ebp
+ mov ebp, esp
+ push esi
+ push edi
+ mov esi, dword ptr [ebp+12]
+ mov ecx, dword ptr [ebp+16]
+ mov eax, dword ptr [esi+0]
+ add esi, 4
+ sub ecx, 4
+ sub esp, ecx
+ mov edi, esp
+ rep movsb
+ mov ecx, eax
+ call dword ptr[ebp+8]
+ pop edi
+ pop esi
+ mov esp, ebp
+ pop ebp
+ ret
+_dcCall_x86_win32_msthis ENDP
+_dcCall_x86_win32_std PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push ebp
+ mov ebp, esp
+ push esi
+ push edi
+ mov esi, dword ptr[ebp+12]
+ mov ecx, dword ptr[ebp+16]
+ sub esp, ecx
+ mov edi, esp
+ rep movsb
+ call dword ptr[ebp+8]
+ pop edi
+ pop esi
+ mov esp, ebp
+ pop ebp
+ ret
+_dcCall_x86_win32_std ENDP
+_dcCall_x86_win32_fast PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push ebp
+ mov ebp, esp
+ push esi
+ push edi
+ mov esi, dword ptr[ebp+12]
+ mov ecx, dword ptr[ebp+16]
+ mov eax, dword ptr[esi+0]
+ mov edx, dword ptr[esi+4]
+ add esi, 8
+ sub ecx, 8
+ mov dword ptr [ebp+16], ecx
+ sub esp, ecx
+ mov edi, esp
+ rep movsb
+ mov ecx, eax
+ call dword ptr[ebp+8]
+ pop edi
+ pop esi
+ mov esp, ebp
+ pop ebp
+ ret
+_dcCall_x86_win32_fast ENDP
+_dcCall_x86_sys_int80h_linux PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push ebp
+  mov ebp, esp
+ push ebx
+ push esi
+ push edi
+ mov eax, dword ptr[ebp+12]
+ mov ebx, dword ptr[eax+0]
+ mov ecx, dword ptr[eax+4]
+ mov edx, dword ptr[eax+8]
+ mov esi, dword ptr[eax+12]
+ mov edi, dword ptr[eax+16]
+ mov eax, dword ptr[ebp+8]
+ int 80h
+ pop edi
+ pop esi
+ pop ebx
+ mov esp, ebp
+ pop ebp
+ ret
+_dcCall_x86_sys_int80h_linux ENDP
+_dcCall_x86_sys_int80h_bsd PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ push ebp
+  mov ebp, esp
+ push esi
+ push edi
+ mov esi, dword ptr[ebp+12]
+ mov ecx, dword ptr[ebp+16]
+ sub esp, ecx
+ mov edi, esp
+ shr ecx, 2
+ rep movsd
+ mov eax, dword ptr[ebp+8]
+ call _do_int
+ pop edi
+ pop esi
+ mov esp, ebp
+ pop ebp
+ ret
+_do_int:
+ int 80h
+ ret
+_dcCall_x86_sys_int80h_bsd ENDP
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/gen-masm/gen_masm.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+gcc -E -P -DGEN_MASM call_x86.S >call_x86.masm
+gcc -E -P -DGEN_MASM call_x64.S >call_x64.masm
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-arm-thumb-interwork/Makefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,2 @@
+include Makefile.darwin
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-arm-thumb-interwork/Makefile.darwin	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,26 @@
+TARGETS		= test
+TARGET_ARCH	+= -arch armv6
+TARGET_ARCH	+= -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk
+# TARGET_ARCH	+= -mno-thumb-interwork
+# TARGET_ARCH	+= -mthumb-interwork 
+CFLAGS		+= -mthumb
+# CFLAGS		= -mthumb-interwork
+# CFLAGS_THUMB	= -mthumb $(CFLAGS)
+# CFLAGS		+= -mthumb-interwork
+all: $(LOADLIBES) test
+
+thumb.o: thumb.c
+	$(CC) -c $(CPPFLAGS) $(CFLAGS) $(TARGET_ARCH) -mthumb $< -o $@
+
+arm.o: arm.c
+
+test.o: test.c
+
+test: test.o thumb.o arm.o
+	$(LINK.o) $^ $(OUTPUT_OPTION)
+
+%.s: %.c
+	$(CC) -S $(CPPFLAGS) $(CFLAGS) $(TARGET_ARCH) $< -o $@
+
+clean:
+	$(RM) $(TARGETS) *.o
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-arm-thumb-interwork/Makefile.linux	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,10 @@
+TARGETS		= test
+TARGET_ARCH	+= -mthumb-interwork
+all: test
+thumb.o: thumb.c
+	$(COMPILE.c) $< -mthumb $(OUTPUT_OPTION)
+test: test.o thumb.o arm.o
+	$(LINK.o) $^ $(OUTPUT_OPTION)
+clean:
+	$(RM) $(TARGETS) *.o
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-arm-thumb-interwork/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,8 @@
+darwin:
+
+  armv6:  addresses are even
+      
+    arm addresses are even
+    thumb addresses are odd
+
+  armv7:  addresses are odd -mthumb-interwork and -mno-thumb-interwork no effect
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-arm-thumb-interwork/arm.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,29 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-arm-thumb-interwork/arm.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+void arm()
+{
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-arm-thumb-interwork/diff-gcc-defs/Makefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+default: all
+.PHONY: all clean
+
+TOP = ../../..
+
+include $(TOP)/ConfigVars
+
+ifeq ("${CONFIG_OS}","iphoneos")
+DIFFSCRIPT=diff-iphoneos.sh 
+else
+DIFFSCRIPT=diff-generic.sh
+endif
+
+all:
+	sh ${DIFFSCRIPT}
+clean:
+	rm -Rf out
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-arm-thumb-interwork/diff-gcc-defs/diff-generic.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,26 @@
+#!/bin/sh
+TARGET_ARCH="-arch armv7"
+mkdir -p out
+
+# ARCHS="armv2 armv2a armv3 armv3m armv4 armv4t armv5 armv5t armv5te armv6 armv6j armv6t2 armv6z armv7-a armv7-r ep9312"
+ARCHS="armv2"
+# armv7 armv7-m iwmmxt
+
+touch empty.c
+touch empty.S
+
+gcc ${TARGET_ARCH} -E -dM empty.c | sort >out/c_default
+gcc ${TARGET_ARCH} -E -dM empty.S | sort >out/a_default
+
+rm -f out/diff_c out/diff_a
+
+for a in ${ARCHS} ; do 
+gcc ${TARGET_ARCH} -E -dM -march=${a} empty.c | sort >out/c_${a}
+gcc ${TARGET_ARCH} -E -dM -march=${a} empty.S | sort >out/a_${a}
+echo ${a} >>out/diff_c
+echo ${a} >>out/diff_a
+diff out/c_default out/c_${a} >>out/diff_c
+diff out/a_default out/a_${a} >>out/diff_a
+done
+
+# armv3 is default.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-arm-thumb-interwork/diff-gcc-defs/empty.S	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,25 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-arm-thumb-interwork/diff-gcc-defs/empty.S
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-arm-thumb-interwork/diff-gcc-defs/empty.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,25 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-arm-thumb-interwork/diff-gcc-defs/empty.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-arm-thumb-interwork/test.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,39 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-arm-thumb-interwork/test.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include <stddef.h>
+#include "../common/platformInit.h"
+
+void arm();
+void thumb();
+
+int main(int argc, char* argv[])
+{
+	arm();
+	thumb();
+        printf("arm: %d\n", (ptrdiff_t) &arm);
+        printf("thumb: %d\n", (ptrdiff_t) &thumb);
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-arm-thumb-interwork/thumb.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,29 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-arm-thumb-interwork/thumb.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+void thumb()
+{
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-mips/Makefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,10 @@
+CFLAGS = 
+MODULES = main.o dispatch.o f.o node.o call.o
+TARGETS = calls.s test
+all: $(TARGETS)
+test: $(MODULES)
+	$(CC) $^ -o $@
+%.s: %.c
+	$(CC) -S $< -o $@
+clean:
+	$(RM) $(TARGETS) *.o
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-mips/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,1 @@
+here are some snippets that helped when exploring the mips abis.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-mips/call.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,40 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-mips/call.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+void call_f0()
+{
+  n0();
+}
+
+void call_f4()
+{
+  n4(1,2,3,4);
+}
+
+void call_f8()
+{
+  n8(1,2,3,4,5,6,7,8);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-mips/calls.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,54 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-mips/calls.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+typedef int i;
+typedef float f;
+typedef double d;
+void _();
+void _iiiiiiiiii(i,i,i,i,i,i,i,i,i,i);
+void _ffffffffff(f,f,f,f,f,f,f,f,f,f);
+void _dddddddddd(d,d,d,d,d,d,d,d,d,d);
+void _ifffffffff(i,f,f,f,f,f,f,f,f,f);
+void _iddddddddd(i,d,d,d,d,d,d,d,d,d);
+void _fdidfd(f,d,i,d,f,d);
+void _ddidfd(d,d,i,d,f,d);
+void _ididfd(i,d,i,d,f,d);
+int    ai[] = { 0   , 1   , 2   , 3   , 4   , 5   , 6   , 7   , 8   , 9    };
+float  af[] = { 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f }; 
+double ad[] = { 0.0 , 1.0 , 2.0 , 3.0 , 4.0 , 5.0 , 6.0 , 7.0 , 8.0 , 9.0  };
+
+void call_()       { _(); }
+void call_iiiiiiiiii() { _iiiiiiiiii(ai[0],ai[1],ai[2],ai[3],ai[4],ai[5],ai[6],ai[7],ai[8],ai[9]); }
+void call_ffffffffff() { _ffffffffff(af[0],af[1],af[2],af[3],af[4],af[5],af[6],af[7],af[8],af[9]); }
+void call_dddddddddd() { _dddddddddd(ad[0],ad[1],ad[2],ad[3],ad[4],ad[5],ad[6],ad[7],ad[8],ad[9]); }
+void call_ifffffffff() { _ifffffffff(ai[0],af[1],af[2],af[3],af[4],af[5],af[6],af[7],af[8],af[9]); } 
+void call_iddddddddd() { _iddddddddd(ai[0],ad[1],ad[2],ad[3],ad[4],ad[5],ad[6],ad[7],ad[8],ad[9]); }
+
+void call_fififififi() { _fififififi(af[0],ai[1],af[2],ai[3],af[4],ai[5],af[6],ai[7],af[8],ai[9]); }
+
+void call_fdidfd() { _fdidfd(1.0f,2.0, 3   ,4.0, 5.0f,6.0 ); }
+void call_ddidfd() { _ddidfd(1.0, 2.0, 3   ,4.0, 5.0f,6.0 ); }
+void call_ididfd() { _ididfd(1  , 2.0, 3   ,4.0, 5.0f,6.0 ); }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-mips/common.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,39 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-mips/common.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+typedef int (*fp)(int,int,int,int,int,int);
+
+extern int f(int,int,int,int,int,int);
+extern int dispatch(fp,int,int,int,int,int,int);
+extern void ext();
+extern void n0();
+extern void n1(int a);
+extern void n2(int a, int b);
+extern void n4(int a, int b, int c, int d);
+extern void n8(int a, int b, int c, int d, int e, int f, int g, int h);
+extern void call_f0();
+extern void call_f4();
+extern void call_f8();
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-mips/dispatch.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,34 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-mips/dispatch.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "common.h"
+int dispatch(fp funptr, int a0, int a1, int a2, int a3, int a4, int a5)
+{
+  return funptr(a0,a1,a2,a3,a4,a5);
+/*
+  int result1 = funptr(a0,a1,a2,a3,a4,a5);
+  return result1 + a0 + a1 + a2;
+*/
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-mips/f.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,31 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-mips/f.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "common.h"
+int f(int a0, int a1, int a2, int a3, int a4, int a5)
+{
+  return a0+a1+a2+a3+a4+a5;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-mips/f0.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,29 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-mips/f0.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+void f0()
+{
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-mips/funs.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,31 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-mips/funs.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+typedef float f;
+f _ffffffffff(f f0, f f1, f f2, f f3, f f4, f f5, f f6, f f7, f f8, f f9)
+{
+  return f0+f1+f2+f3+f4+f5+f6+f7+f8+f9;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-mips/main.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,52 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-mips/main.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "common.h"
+#include <assert.h>
+
+#define v0 0
+#define v1 1
+#define v2 2
+#define v3 3
+#define v4 4
+#define v5 5
+
+void ext()
+{
+}
+
+int main(int argc, char* argv[])
+{
+  int result;
+  call_f0();
+  call_f4();
+  call_f8();
+  n0();
+  n8(1,2,3,4,5,6,7,8);
+  result = dispatch(&f,v0,v1,v2,v3,v4,v5);
+  assert(result == v0+v1+v2+v3+v4+v5+v0+v1+v2 );
+  return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-mips/node.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,39 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-mips/node.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "common.h"
+
+void l0() { }
+void l1(int a) { }
+void l2(int a, int b) { }
+void l4(int a, int b, int c, int d) { }
+void l8(int a, int b, int c, int d, int e, int f, int g, int h) { }
+
+void n0() { ext(); }
+void n1(int a) { ext(); }
+void n2(int a, int b) { ext(); }
+void n4(int a, int b, int c, int d) { ext(); }
+void n8(int a, int b, int c, int d, int e, int f, int g, int h) { ext(); }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-mips/prolog.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,51 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-mips/prolog.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define DEF_CALL1(RT) \
+typedef RT (*f_##RT) (i,i,i,i,i,i,i,i); \
+RT call_##RT(void* target,void* regdata, int* data, int size) \
+{ \
+  f_##RT f = (f_##RT) target; \
+  return f(data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]); \
+}
+
+#define DEF_CALL(RT) \
+typedef RT (*f_##RT) (i,i,i,i,i,i,i,i); \
+RT call_##RT(void* target,void* regdata, int* data, int size) \
+{ \
+  f_##RT f = (f_##RT) target; \
+  return f(); \
+}
+
+typedef long long llong;
+typedef long double ldouble;
+
+DEF_CALL(int)
+DEF_CALL(float)
+DEF_CALL(double)
+DEF_CALL(llong)
+DEF_CALL(ldouble)
+DEF_CALL(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hacking-mips/retn.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,34 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/hacking-mips/retn.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define DEF_RETN(N) int ret##N(int a0, int a1, int a2, int a3, int a4, int a5) { return a##N; }
+
+DEF_RETN(0)
+DEF_RETN(1)
+DEF_RETN(2)
+DEF_RETN(3)
+DEF_RETN(4)
+DEF_RETN(5)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/makepkg.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,24 @@
+#!/bin/sh
+# script to package some tests for quick deployment (useful for embedded stuff)
+
+TOP=..
+. $TOP/ConfigVars
+
+TESTS="callf ellipsis malloc_wx plain plain_c++ suite suite2 suite3 suite_floats callback_plain callback_suite"
+# addition test:
+#
+# callback_plain callback_suite callf
+# ellipsis
+# malloc_wx thunk
+# nm
+# plain suite suite2 suite3
+# suite2_x86win32fast suite2_x86win32std suite_x86win32fast suite_x86win32std
+
+TARGET="${CONFIG_OS}_${CONFIG_ARCH}_${CONFIG_TOOL}_${CONFIG_CONFIG}"
+BUILD_DIR=build_out
+
+mkdir -p pack_out/testpkg
+for I in $TESTS ; do
+cp $I/$BUILD_DIR/$TARGET/$I pack_out/testpkg
+done
+tar -cvzf test-pack.tar.gz -C pack_out testpkg
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/malloc_wx/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+add_executable(malloc_wx test_wx.c)
+target_link_libraries(malloc_wx dyncallback_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/malloc_wx/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/malloc_wx/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+APP = malloc_wx
+OBJS = test_wx.o
+
+TOP      = ../..
+CFLAGS  += -I${TOP}/dyncallback -I${TOP}/dyncall
+LDFLAGS += -L${TOP}/dyncallback
+LDLIBS  += -ldyncallback_s
+
+all: ${APP}
+
+.PHONY: all clean 
+
+${APP}: ${OBJS} 
+	${CC} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP} 
+
+clean:
+	rm -f ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/malloc_wx/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP     = malloc_wx
+OBJS    = test_wx.o
+SRCTOP  = ${VPATH}/../..
+BLDTOP  = ../..
+CFLAGS += -I${SRCTOP}/dyncallback -I${SRCTOP}/dyncall
+LDLIBS += -L${BLDTOP}/dyncallback -ldyncallback_s
+.PHONY: all clean install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CC} ${CFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP} 
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/malloc_wx/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,59 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = malloc_wx.exe
+OBJS = test_wx.obj# ..\testmain\main_ansic.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib $(TOP)\dyncallback\libdyncallback_s.lib
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = malloc_wx.nds
+OBJS = test_wx.o# ..\testmain\main_NDS.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a $(TOP)\dyncallback\libdyncallback_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/malloc_wx/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/malloc_wx/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2013 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+TOP		= ../..
+<$TOP/buildsys/mk/prolog.mk
+
+
+UNITS       = test_wx
+APPLICATION = malloc_wx
+LIBS        = $TOP/dyncallback/libdyncallback_s.a$O
+
+
+<$TOP/buildsys/mk/epilog.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/malloc_wx/test_wx.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,47 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/malloc_wx/test_wx.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncallback/dyncall_alloc_wx.h"
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+int main()
+{
+  int err;
+  void* ptr;
+  dcTest_initPlatform();
+
+  err = dcAllocWX(23, &ptr);
+  if(!err) dcFreeWX(ptr, 23);
+  printf("result: test_alloc_wx: %d\n", (!err) ? 1 : 0 );
+
+  dcTest_deInitPlatform();
+
+  return err;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,28 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+TOP		= ..
+<$TOP/buildsys/mk/prolog.mk
+
+# only C-stuff for now...
+DIRS = callf plain call_suite suite thunk malloc_wx callback_plain callback_suite  # plain_c++ is not included, b/c C++ on Plan9 is rather inexistant
+#DIRS = suite2 suite3 suite_floats ellipsis
+
+<$TOP/buildsys/mk/epilog.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/nm/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+add_executable(nm nm.c)
+target_link_libraries(nm dynload_s ${CMAKE_DL_LIBS})
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/nm/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/nm/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,20 @@
+APP = nm
+OBJS = nm.o
+
+TOP = ../..
+CFLAGS  += -I${TOP}/dynload
+LDFLAGS += -L${TOP}/dynload
+LDLIBS  += -ldynload_s
+# Works on: Darwin, NetBSD.
+# Linux: add '-ldl'
+
+all: ${APP}
+
+.PHONY: all clean
+
+${APP}: ${OBJS} 
+	${CC} ${OBJS} ${LDFLAGS} ${LDLIBS} -o $@
+
+clean:
+	rm -f ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/nm/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+APP       = nm
+OBJS      = nm.o
+SRCTOP    = ${VPATH}/../..
+BLDTOP    = ../..
+CFLAGS   += -I${SRCTOP}/dynload
+LDLIBS_D += -L${BLDTOP}/dynload -ldynload_s
+# Works on: Darwin, NetBSD.
+# Linux: add '-ldl'
+.PHONY: all clean install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CC} ${CFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS_D} ${LDLIBS} -o ${APP}
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/nm/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,60 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007-2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = nm.exe
+OBJS = nm.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dynload\libdynload_s.lib $(TOP)\dyncall\libdyncall_s.lib
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = nm.nds
+OBJS = nm.o
+
+$(TARGETS):# $(OBJS)
+	echo Not building: There is no dynload support on this platform.
+#	echo Linking $@ ...
+#	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)\dynload\libdynload_s.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+#	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+#	ndstool -c "$@" -9 "$(@B).arm9"
+#	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/nm/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/nm/nm.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,79 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/nm/nm.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dynload/dynload.h"
+#include "../../dynload/dynload_alloc.h"
+#include "../common/platformInit.h"
+
+void list_syms(const char* filePath)
+{
+  DLSyms* pSyms;
+  int i,n;
+  
+  pSyms = dlSymsInit(filePath);
+  if (!pSyms) {
+    fprintf(stderr, "dlSymsInit fail.");
+    return; 
+  }
+  i = 0, n = dlSymsCount(pSyms);
+
+  for (; i < n; ++i) {
+    const char* name = dlSymsName(pSyms,i);
+    printf("%s\n", name);
+  }
+  dlSymsCleanup(pSyms);
+}
+
+
+int main(int argc, char* argv[])
+{
+  int i, n;
+  DLLib* pLib;
+  const char* libPath;
+  
+  if (argc == 1) {
+    fprintf(stderr, "usage : %s <dllpath>\n", argv[0]);
+    return 1;
+  }
+  
+  libPath = argv[1];
+  
+  /* load lib */
+
+  pLib = dlLoadLibrary(libPath);
+  
+  if (!pLib) {
+    fprintf(stderr, "unable to open library %s\n", libPath);
+    return 2;
+  }
+
+  list_syms(libPath);
+
+  dlFreeLibrary(pLib);
+  return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/pack-tests.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+#!/bin/sh
+# pack-script for embedded testing.
+
+DATE=`date +%s`
+NAME="dyncall-tests-${DATE}"
+
+mkdir -p _work/${NAME}
+printf "#!/bin/sh\n" >_work/${NAME}/run.sh
+for I in $* ; do
+cp $I/$I _work/${NAME}
+printf "./$I\n" >>_work/${NAME}/run.sh
+printf "%-20s <- %-20s\n" "$I" "$PWD/$I/$I" >>_work/${NAME}/CONTENTS.txt
+done
+mkdir -p _packed
+chmod +x _work/${NAME}/run.sh
+tar -cvzf _packed/${NAME}.tar.gz -C _work ${NAME}
+printf "finished: tests are in ${PWD}/_packed/${NAME}.tar.gz, execute run-all.sh\n"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+add_executable(plain test_main.c test_structs.c)
+target_link_libraries(plain dyncall_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,10 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all: plain
+
+plain: _O(test_main) _O(test_structs)
+	_(CC) _(CFLAGS) _(PREREQS) _(LDFLAGS) _(LDFLAG_IN_PREFIX)dyncall_s _(LDFLAG_OUT_PREFIX)_(TARGET)
+
+clean:
+	_(RM) _O(*)
+	_(RM) plain
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+APP = plain
+OBJS = test_main.o test_structs.o
+
+TOP      = ../..
+CFLAGS  += -I${TOP}/dyncall
+LDFLAGS += -L${TOP}/dyncall
+LDLIBS  += -ldyncall_s
+
+all: ${APP}
+
+.PHONY: all clean install
+
+${APP}: ${OBJS} 
+	${CC} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP}
+
+clean:
+	rm -f ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP     = plain
+OBJS    = test_main.o test_structs.o
+SRCTOP  = ${VPATH}/../..
+BLDTOP  = ../..
+CFLAGS += -I${SRCTOP}/dyncall
+LDLIBS += -L${BLDTOP}/dyncall -ldyncall_s
+.PHONY: all clean install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CC} ${CFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP} 
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,60 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = plain.exe
+OBJS = test_main.obj test_structs.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = plain.nds
+OBJS = test_main.o test_structs.o
+
+$(TARGETS):# $(OBJS)
+	echo Not building: There is no struct support on this platform @@@ or not taken into account.
+#	echo Linking $@ ...
+#	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+#	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+#	ndstool -c "$@" -9 "$(@B).arm9"
+#	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,29 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+TOP		= ../..
+<$TOP/buildsys/mk/prolog.mk
+
+
+UNITS       =   test_main test_structs
+APPLICATION =   plain
+LIBS        =   $TOP/dyncall/libdyncall_s.a$O
+
+<$TOP/buildsys/mk/epilog.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain/test_framework.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,67 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/plain/test_framework.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+
+#ifndef TRUE
+#define TRUE (1)
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+// Statement breaking into debugger (for various platforms). @@@add if defined, etc...
+#ifdef _WIN32
+# ifdef _MSC_VER
+#  define DC_TEST_BREAK __debugbreak
+# else
+#  include <windows.h>
+#  define DC_TEST_BREAK DebugBreak
+# endif
+#else
+# define DC_TEST_BREAK
+#endif
+
+// Test state - evaluates to false inside a test function if a test fails.
+#define DC_TEST_STATE				testFramework_state
+
+// Test functions defined by DC_DEFINE_TEST_FUNC_BEGIN and DC_DEFINE_TEST_FUNC_END pairs do come with
+// a default parameter used to pass a path to them specifying where to find external data needed to
+// run the tests (if desired). NULL by default. It can be queried by using DC_TEST_PATH.
+#define DC_TEST_PATH				testFramework_suitePath
+
+// Test a single expression - the expression must evaluate to true in order to succeed.
+// #define DC_TEST(exp)				{ TEST_STATE = TEST_STATE && (exp); if(!TEST_STATE) DC_TEST_BREAK(); }
+
+#include <assert.h>
+
+#define DC_TEST(exp)        assert(exp)
+// { if (! (exp) ) DC_TEST_BREAK(); }
+
+// Macros used to define a test functions.
+#define DC_DEFINE_TEST_FUNC_BEGIN(name)	/*static */int name(/*const char* DC_TEST_PATH=NULL*/) { /*@@@ add logging*/ int TEST_STATE = TRUE;
+#define DC_DEFINE_TEST_FUNC_END			/*@@@ add logging*/ return TEST_STATE; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain/test_main.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,332 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/plain/test_main.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+
+#include "test_framework.h"
+#include "../../dyncall/dyncall.h"
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+/* ------------------------------------------------------------------------- 
+ * test: identity function calls 
+ * ------------------------------------------------------------------------- */
+
+#define DEF_FUNCS(API,NAME) \
+void       API fun_##NAME##_v()             {           } \
+DCbool     API fun_##NAME##_b(DCbool x)     { return x; } \
+DCint      API fun_##NAME##_i(DCint x)      { return x; } \
+DClong     API fun_##NAME##_j(DClong x)     { return x; } \
+DClonglong API fun_##NAME##_l(DClonglong x) { return x; } \
+DCfloat    API fun_##NAME##_f(DCfloat x)    { return x; } \
+DCdouble   API fun_##NAME##_d(DCdouble x)   { return x; } \
+DCpointer  API fun_##NAME##_p(DCpointer  x) { return x; }
+
+/* __cdecl */
+
+#if !defined(DC__OS_Win32)
+#  define __declspec(X)
+#  define __cdecl
+#endif
+
+DEF_FUNCS(__cdecl,c)
+
+DC_DEFINE_TEST_FUNC_BEGIN(testCallC)
+
+  DCCallVM* pc = dcNewCallVM(4096);
+  dcMode(pc,DC_CALL_C_DEFAULT);
+  /* void */
+  dcReset(pc);
+  dcCallVoid(pc, (DCpointer) &fun_c_v);
+  /* bool */
+  {
+    DCbool r, val=DC_TRUE; 
+    dcReset(pc);
+    dcArgBool(pc, val);
+    r = dcCallBool(pc, (DCpointer) &fun_c_b);
+    DC_TEST(r == val);
+
+	val=DC_FALSE;
+    dcReset(pc);
+    dcArgBool(pc, val);
+    r = dcCallBool(pc, (DCpointer) &fun_c_b);
+    DC_TEST(r == val);
+  }
+  /* int */
+  {
+    DCint r, val=1234;
+    dcReset(pc);
+    dcArgInt(pc, val);
+    r = dcCallInt(pc, (DCpointer) &fun_c_i);
+    DC_TEST(r == val);
+  }
+  /* long */
+  {
+    DClong r, val=(DClong) 0xCAFEBABEL;
+    dcReset(pc);
+    dcArgLong(pc, val);
+    r = dcCallLong(pc, (DCpointer) &fun_c_j);
+    DC_TEST(r == val);
+  }
+  /* long long */
+  {
+    DClonglong r, val=(DClonglong) 0xCAFEBABEDEADC0DELL;
+    dcReset(pc);
+    dcArgLongLong(pc, val);
+    r = dcCallLongLong(pc, (DCpointer) &fun_c_l);
+    DC_TEST(r == (DClonglong)val);
+  }
+  /* float */
+  {
+    DCfloat r, val=1.234567f;
+    dcReset(pc);
+    dcArgFloat(pc, val);
+    r = dcCallFloat(pc, (DCpointer) &fun_c_f);
+    DC_TEST(r == val);
+  }
+  /* double */
+  {
+    DCdouble r, val=1.23456789;
+    dcReset(pc);
+    dcArgDouble(pc, val);
+    r = dcCallDouble(pc, (DCpointer) &fun_c_d);
+    DC_TEST(r == val);
+  }
+  /* ptr */
+  {
+    DCpointer r;
+    dcReset(pc);
+    dcArgPointer(pc, (DCpointer) &fun_c_b);
+    r = dcCallPointer(pc, (DCpointer) &fun_c_p);
+    DC_TEST(r == (DCpointer) &fun_c_b);
+  }
+  dcFree(pc);
+
+DC_DEFINE_TEST_FUNC_END
+
+
+#ifdef DC__OS_Win32
+/* win32 __stdcall */
+
+DEF_FUNCS(__stdcall,std)
+
+DC_DEFINE_TEST_FUNC_BEGIN(testCallStd)
+
+  DCCallVM* pc = dcNewCallVM(4096);
+  dcMode(pc,DC_CALL_C_X86_WIN32_STD);
+  /* void */
+  dcReset(pc);
+  dcCallVoid(pc, (DCpointer) &fun_std_v);
+  /* bool */
+  {
+    DCbool r, val=DC_TRUE;
+    dcReset(pc);
+    dcArgBool(pc, val);
+    r = dcCallBool(pc, (DCpointer) &fun_std_b);
+    DC_TEST(r == val);
+
+	val=DC_FALSE;
+    dcReset(pc);
+    dcArgBool(pc, val);
+    r = dcCallBool(pc, (DCpointer) &fun_std_b);
+    DC_TEST(r == val);
+  }
+  /* int */
+  {
+    DCint r, val=1234;
+    dcReset(pc);
+    dcArgInt(pc, val);
+    r = dcCallInt(pc, (DCpointer) &fun_std_i);
+    DC_TEST(r == val);
+  }
+  /* long */
+  {
+    DClong r, val=0xCAFEBABEUL;
+    dcReset(pc);
+    dcArgLong(pc, val);
+    r = dcCallLong(pc, (DCpointer) &fun_std_j);
+    DC_TEST(r == val);
+  }
+  /* long long */
+  {
+    DClonglong r, val=0xCAFEBABEDEADC0DEULL;
+    dcReset(pc);
+    dcArgLongLong(pc, val);
+    r = dcCallLongLong(pc, (DCpointer) &fun_std_l);
+    DC_TEST(r == val);
+  }
+  /* float */
+  {
+    DCfloat r, val=1.234567f;
+    dcReset(pc);
+    dcArgFloat(pc, val);
+    r = dcCallFloat(pc, (DCpointer) &fun_std_f);
+    DC_TEST(r == val);
+  }
+  /* double */
+  {
+    DCdouble r, val=1.23456789;
+    dcReset(pc);
+    dcArgDouble(pc, val);
+    r = dcCallDouble(pc, (DCpointer) &fun_std_d);
+    DC_TEST(r == val);
+  }
+  /* ptr */
+  {
+    DCpointer r;
+    dcReset(pc);
+    dcArgPointer(pc, (DCpointer) &fun_c_b);
+    r = dcCallPointer(pc, (DCpointer) &fun_std_p);
+    DC_TEST(r == &fun_c_b);
+  }
+  dcFree(pc);
+
+DC_DEFINE_TEST_FUNC_END
+
+#endif
+
+
+#ifdef DC__OS_Win32
+/* win32 __fastcall */
+
+DEF_FUNCS(__fastcall,fast)
+
+DC_DEFINE_TEST_FUNC_BEGIN(testCallFast)
+
+  DCCallVM* pc = dcNewCallVM(4096);
+#ifdef DC__C_GNU
+  dcMode(pc,DC_CALL_C_X86_WIN32_FAST_GNU);
+#else
+  dcMode(pc,DC_CALL_C_X86_WIN32_FAST_MS);
+#endif
+  /* void */
+  dcReset(pc);
+  dcCallVoid(pc, (DCpointer) &fun_fast_v);
+  /* bool */
+  {
+    DCbool r, val=DC_TRUE;
+    dcReset(pc);
+    dcArgBool(pc, val);
+    r = dcCallBool(pc, (DCpointer) &fun_fast_b);
+    DC_TEST(r == val);
+
+	val=DC_FALSE;
+    dcReset(pc);
+    dcArgBool(pc, val);
+    r = dcCallBool(pc, (DCpointer) &fun_fast_b);
+    DC_TEST(r == val);
+  }
+  /* int */
+  {
+    DCint r, val=1234;
+    dcReset(pc);
+    dcArgInt(pc, val);
+    r = dcCallInt(pc, (DCpointer) &fun_fast_i);
+    DC_TEST(r == val);
+  }
+  /* long */
+  {
+    DClong r, val=0xCAFEBABEUL;
+    dcReset(pc);
+    dcArgLong(pc, val);
+    r = dcCallLong(pc, (DCpointer) &fun_fast_j);
+    DC_TEST(r == val);
+  }
+  /* long long */
+  {
+    DClonglong r, val=0xCAFEBABEDEADC0DEULL;
+    dcReset(pc);
+    dcArgLongLong(pc, val);
+    r = dcCallLongLong(pc, (DCpointer) &fun_fast_l);
+    DC_TEST(r == val);
+  }
+  /* float */
+  {
+    DCfloat r, val=1.234567f;
+    dcReset(pc);
+    dcArgFloat(pc, val);
+    r = dcCallFloat(pc, (DCpointer) &fun_fast_f);
+    DC_TEST(r == val);
+  }
+  /* double */
+  {
+    DCdouble r, val=1.23456789;
+    dcReset(pc);
+    dcArgDouble(pc, val);
+    r = dcCallDouble(pc, (DCpointer) &fun_fast_d);
+    DC_TEST(r == val);
+  }
+  /* ptr */
+  {
+    DCpointer r;
+    dcReset(pc);
+    dcArgPointer(pc, (DCpointer) &fun_c_b);
+    r = dcCallPointer(pc, (DCpointer) &fun_fast_p);
+    DC_TEST(r == &fun_c_b);
+  }
+  dcFree(pc);
+
+DC_DEFINE_TEST_FUNC_END
+#endif
+
+int testCallStructs();
+int testStructSizes();
+int main(int argc, char* argv[])
+{
+  int b = TRUE;
+  dcTest_initPlatform();
+  
+  b = b && testCallC();
+  printf("C:%d\n",b);
+
+  b = b && testStructSizes();
+  printf("Struct Sizes:%d\n",b);
+
+  /*b = b && testCallStructs();
+  printf("Call Structs:%d\n",b);*/
+
+#if defined(DC__OS_Win32)
+  
+  b = b && testCallStd();
+  printf("Std:%d\n",b);
+
+  b = b && testCallFast();
+#ifdef DC__C_GNU
+  printf("FastGNU:%d\n",b);
+#else
+  printf("FastMS:%d\n",b);
+#endif
+
+#endif
+
+  printf("result: plain: %d\n", b);
+
+  dcTest_deInitPlatform();
+
+  return !b;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain/test_structs.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,218 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/plain/test_structs.c
+ Description: 
+ License:
+
+   Copyright (c) 2010-2015 Olivier Chafik <olivier.chafik@gmail.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+
+#include "test_framework.h"
+#include "../../dyncall/dyncall.h"
+#include "../../dyncall/dyncall_signature.h"
+#include "../../dyncall/dyncall_struct.h"
+#include "../common/platformInit.h"
+
+#define DC_TEST_INT_EQUAL(expected, computed) { \
+	if (expected != computed) \
+		printf("expected = %d, computed = %d\n\n", (int)expected, (int)computed); \
+	DC_TEST(expected == computed); \
+}
+#define DC_TEST_STRUCT_SIZE(type, s) { \
+	DCsize expected = sizeof(type), computed = dcStructSize(s);\
+	DC_TEST_INT_EQUAL(expected, computed); \
+}
+
+DC_DEFINE_TEST_FUNC_BEGIN(testStructSizes)
+
+	{
+		typedef struct {
+			double a, b, c, d;
+		} S;
+
+		size_t size;
+		DCstruct* s = dcNewStruct(4, DEFAULT_ALIGNMENT);
+		dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
+		dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
+		dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
+		dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
+		dcCloseStruct(s);
+
+		DC_TEST_STRUCT_SIZE(S, s);
+		dcFreeStruct(s);
+	}
+	{
+		typedef struct {
+			char a, b;
+			void* p[3];
+		} S;
+
+		size_t size;
+		DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT);
+		dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
+		dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
+		dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3);
+		dcCloseStruct(s);
+
+		DC_TEST_STRUCT_SIZE(S, s);
+		dcFreeStruct(s);
+	}
+	{
+		typedef struct {
+			short a;
+			struct {
+			char a, b;
+			void* p[3];
+			} sub;
+			short b;
+		} S;
+	 	
+		size_t size;
+		DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT);
+		dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1);
+		dcSubStruct(s, 3, DEFAULT_ALIGNMENT, 1);
+		dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
+		dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
+		dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3);
+		dcCloseStruct(s);
+		dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1);
+		dcCloseStruct(s);
+
+		DC_TEST_STRUCT_SIZE(S, s);
+		dcFreeStruct(s);
+	}
+
+#define TEST_MONO_STRUCT(type, sig) \
+	{ \
+		typedef struct { \
+			type v; \
+		} S; \
+		 \
+		DCstruct* s = dcNewStruct(1, DEFAULT_ALIGNMENT); \
+		dcStructField(s, sig, DEFAULT_ALIGNMENT, 1); \
+		dcCloseStruct(s); \
+		 \
+		DC_TEST_STRUCT_SIZE(S, s); \
+		dcFreeStruct(s); \
+	}
+
+	TEST_MONO_STRUCT(char,               DC_SIGCHAR_CHAR);
+	TEST_MONO_STRUCT(unsigned char,      DC_SIGCHAR_UCHAR);
+	TEST_MONO_STRUCT(short,              DC_SIGCHAR_SHORT);
+	TEST_MONO_STRUCT(unsigned short,     DC_SIGCHAR_USHORT);
+	TEST_MONO_STRUCT(int,                DC_SIGCHAR_INT);
+	TEST_MONO_STRUCT(unsigned int,       DC_SIGCHAR_UINT);
+	TEST_MONO_STRUCT(long,               DC_SIGCHAR_LONG);
+	TEST_MONO_STRUCT(unsigned long,      DC_SIGCHAR_ULONG);
+	TEST_MONO_STRUCT(long long,          DC_SIGCHAR_LONGLONG);
+	TEST_MONO_STRUCT(unsigned long long, DC_SIGCHAR_ULONGLONG);
+	TEST_MONO_STRUCT(void*,              DC_SIGCHAR_POINTER);
+	TEST_MONO_STRUCT(float,              DC_SIGCHAR_FLOAT);
+	TEST_MONO_STRUCT(double,             DC_SIGCHAR_DOUBLE);
+
+DC_DEFINE_TEST_FUNC_END
+
+
+
+typedef struct
+{
+	char a, b, c;
+} FewValues;
+
+double sum_FewValues(FewValues values)
+{
+	printf("sum_FewValues(a = %d, b = %d, c = %d)\n", (int)values.a, (int)values.b, (int)values.c);
+	return ((double)values.a) + ((double)values.b) + ((double)values.c);
+}
+
+
+typedef struct
+{
+	char a, b;
+	double p[10];
+} SomeValues;
+
+double sum_SomeValues(SomeValues values)
+{
+	return ((double)values.a) + ((double)values.b) + values.p[0] + values.p[1] + values.p[2];
+}
+
+
+DC_DEFINE_TEST_FUNC_BEGIN(testCallStructs)
+
+	DCCallVM* pc = dcNewCallVM(4096);
+	{
+		FewValues values;
+		double calledSum, expectedSum;
+		DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT);
+		dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
+		dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
+		dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
+		dcCloseStruct(s);
+
+		DC_TEST_STRUCT_SIZE(FewValues, s);
+
+		values.a = 1;
+		values.b = 2;
+		values.c = 3;
+
+		dcMode(pc, DC_CALL_C_DEFAULT);
+		dcReset(pc);
+		printf("BEFORE dcArgStruct\n");
+		dcArgStruct(pc, s, &values);
+		printf("AFTER dcArgStruct\n");
+		calledSum = dcCallDouble(pc, (DCpointer)&sum_FewValues);
+		expectedSum = sum_FewValues(values);
+
+		DC_TEST_INT_EQUAL(expectedSum, calledSum);
+		dcFreeStruct(s);
+	}
+	{
+		SomeValues values;
+		double calledSum, expectedSum;
+		DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT);
+		dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
+		dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
+		dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 10);
+		dcCloseStruct(s);
+
+		DC_TEST_STRUCT_SIZE(SomeValues, s);
+
+		values.a = 1;
+		values.b = 2;
+		values.p[0] = 10;
+		values.p[1] = 11;
+		values.p[2] = 12;
+
+		dcMode(pc, DC_CALL_C_DEFAULT);
+		dcReset(pc);
+		dcArgStruct(pc, s, &values);
+		calledSum = dcCallDouble(pc, (DCpointer) &sum_SomeValues);
+		expectedSum = sum_SomeValues(values);
+
+		DC_TEST_INT_EQUAL(expectedSum, calledSum);
+		dcFreeStruct(s);
+	}
+
+	dcFree(pc);
+
+DC_DEFINE_TEST_FUNC_END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain_c++/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+add_executable(plain_cxx test_main.cc)
+target_link_libraries(plain_cxx dyncall_s)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain_c++/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain_c++/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,17 @@
+APP      = plain_c++
+OBJS     = test_main.o
+TOP      = ../..
+CFLAGS  += -I${TOP}/dyncall
+LDFLAGS += -L${TOP}/dyncall
+LDLIBS  += -ldyncall_s 
+
+all: ${APP}
+
+.PHONY: all clean install
+
+${APP}: ${OBJS} 
+	${CXX} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP}
+
+clean:
+	rm -f ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain_c++/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP       = plain_c++
+OBJS      = test_main.o
+SRCTOP    = ${VPATH}/../..
+BLDTOP    = ../..
+CXXFLAGS += -I${SRCTOP}/dyncall
+LDLIBS   += -L${BLDTOP}/dyncall -ldyncall_s 
+.PHONY: all clean install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CXX} ${CXXFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP}
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain_c++/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,59 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = plain_c++.exe
+OBJS = test_main.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = plain_c++.nds
+OBJS = test_main.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain_c++/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain_c++/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,29 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+TOP		= ../..
+<$TOP/buildsys/mk/prolog.mk
+
+
+UNITS       =       test_main
+APPLICATION =       plain_c++
+
+
+<$TOP/buildsys/mk/epilog.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain_c++/test_framework.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,68 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/plain_c++/test_framework.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+// 2007-10-11
+
+#ifndef TRUE
+#define TRUE (1)
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+
+// Statement breaking into debugger (for various platforms). @@@add if defined, etc...
+#ifdef _WIN32
+# ifdef _MSC_VER
+#  define DC_TEST_BREAK __debugbreak
+# else
+#  include <windows.h>
+#  define DC_TEST_BREAK DebugBreak
+# endif
+#else
+# define DC_TEST_BREAK
+#endif
+
+// Test state - evaluates to false inside a test function if a test fails.
+#define DC_TEST_STATE				testFramework_state
+
+// Test functions defined by DC_DEFINE_TEST_FUNC_BEGIN and DC_DEFINE_TEST_FUNC_END pairs do come with
+// a default parameter used to pass a path to them specifying where to find external data needed to
+// run the tests (if desired). NULL by default. It can be queried by using DC_TEST_PATH.
+#define DC_TEST_PATH				testFramework_suitePath
+
+// Test a single expression - the expression must evaluate to true in order to succeed.
+// #define DC_TEST(exp)				{ TEST_STATE = TEST_STATE && (exp); if(!TEST_STATE) DC_TEST_BREAK(); }
+
+#include <assert.h>
+
+#define DC_TEST(exp)        assert(exp)
+// { if (! (exp) ) DC_TEST_BREAK(); }
+
+// Macros used to define a test functions.
+#define DC_DEFINE_TEST_FUNC_BEGIN(name)	/*static */int name(/*const char* DC_TEST_PATH=NULL*/) { /*@@@ add logging*/ int TEST_STATE = TRUE;
+#define DC_DEFINE_TEST_FUNC_END			/*@@@ add logging*/ return TEST_STATE; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/plain_c++/test_main.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,293 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/plain_c++/test_main.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+
+#include "test_framework.h"
+#include "../../dyncall/dyncall.h"
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+/* ------------------------------------------------------------------------- 
+ * test: identity function calls 
+ * ------------------------------------------------------------------------- */
+
+#define DEF_FUNCS(API,NAME) \
+void       API fun_##NAME##_v()             {           } \
+DCbool     API fun_##NAME##_b(DCbool x)     { return x; } \
+DCint      API fun_##NAME##_i(DCint x)      { return x; } \
+DClong     API fun_##NAME##_j(DClong x)     { return x; } \
+DClonglong API fun_##NAME##_l(DClonglong x) { return x; } \
+DCfloat    API fun_##NAME##_f(DCfloat x)    { return x; } \
+DCdouble   API fun_##NAME##_d(DCdouble x)   { return x; } \
+DCpointer  API fun_##NAME##_p(DCpointer  x) { return x; }
+
+/* __cdecl */
+
+#if !defined(DC__OS_Win32)
+#  define __declspec(X)
+#  define __cdecl
+#endif
+
+
+/* ------------------------------------------------------------------------- 
+ * test: identity this calls 
+ * ------------------------------------------------------------------------- */
+
+union ValueUnion
+{
+  DCbool     B;
+  DCint      i;
+  DClong     j;
+  DClonglong l;
+  DCfloat    f;
+  DCdouble   d;
+  DCpointer  p;
+};
+
+/* C++ class using __cdecl this call */
+
+// #define VTBI_DESTRUCTOR 0
+
+/*
+ * the layout of the VTable is non-standard and it is not clear what is the initial real first method index.
+ * so for it turns out that: 
+ * on vc/x86  : 1
+ * on GCC/x86 : 2
+ */
+
+#if defined DC__C_MSVC
+#define VTBI_BASE 1
+#else
+#define VTBI_BASE 2
+#endif
+
+#define VTBI_SET_BOOL VTBI_BASE+0
+#define VTBI_GET_BOOL VTBI_BASE+1
+#define VTBI_SET_INT  VTBI_BASE+2
+#define VTBI_GET_INT  VTBI_BASE+3
+#define VTBI_SET_LONG VTBI_BASE+4
+#define VTBI_GET_LONG VTBI_BASE+5
+#define VTBI_SET_LONG_LONG VTBI_BASE+6
+#define VTBI_GET_LONG_LONG VTBI_BASE+7
+#define VTBI_SET_FLOAT VTBI_BASE+8
+#define VTBI_GET_FLOAT VTBI_BASE+9
+#define VTBI_SET_DOUBLE VTBI_BASE+10
+#define VTBI_GET_DOUBLE VTBI_BASE+11
+#define VTBI_SET_POINTER VTBI_BASE+12
+#define VTBI_GET_POINTER VTBI_BASE+13
+
+class Value
+{
+public:
+  virtual ~Value()   {}
+
+  virtual void       __cdecl setBool(DCbool x)         { mValue.B = x; }
+  virtual DCbool     __cdecl getBool()                 { return mValue.B; }
+  virtual void       __cdecl setInt(DCint x)           { mValue.i = x; }
+  virtual DCint      __cdecl getInt()                  { return mValue.i; }
+  virtual void       __cdecl setLong(DClong x)         { mValue.j = x; }
+  virtual DClong     __cdecl getLong()                 { return mValue.j; }
+  virtual void       __cdecl setLongLong(DClonglong x) { mValue.l = x; }
+  virtual DClonglong __cdecl getLongLong()             { return mValue.l; }
+  virtual void       __cdecl setFloat(DCfloat x)       { mValue.f = x; }
+  virtual DCfloat    __cdecl getFloat()                { return mValue.f; }
+  virtual void       __cdecl setDouble(DCdouble x)     { mValue.d = x; }
+  virtual DCdouble   __cdecl getDouble()               { return mValue.d; }
+  virtual void       __cdecl setPtr(DCpointer x)       { mValue.p = x; }
+  virtual DCpointer  __cdecl getPtr()                  { return mValue.p; }
+private:
+  ValueUnion mValue;
+};
+
+/* C++ class using (on win32: microsoft) this call */
+
+class ValueMS
+{
+public:
+  virtual ~ValueMS()    {}
+
+  virtual void       setBool(DCbool x)         { mValue.B = x; }
+  virtual DCbool     getBool()                 { return mValue.B; }
+  virtual void       setInt(DCint x)           { mValue.i = x; }
+  virtual DCint      getInt()                  { return mValue.i; }
+  virtual void       setLong(DClong x)         { mValue.j = x; }
+  virtual DClong     getLong()                 { return mValue.j; }
+  virtual void       setLongLong(DClonglong x) { mValue.l = x; }
+  virtual DClonglong getLongLong()             { return mValue.l; }
+  virtual void       setFloat(DCfloat x)       { mValue.f = x; }
+  virtual DCfloat    getFloat()                { return mValue.f; }
+  virtual void       setDouble(DCdouble x)     { mValue.d = x; }
+  virtual DCdouble   getDouble()               { return mValue.d; }
+  virtual void       setPtr(DCpointer x)       { mValue.p = x; }
+  virtual DCpointer  getPtr()                  { return mValue.p; }
+private:
+  ValueUnion mValue;
+};
+
+template<typename T>
+void testCallValue(DCCallVM* pc)
+{
+  T o;
+  T* pThis = &o;
+  DCpointer* vtbl =  *( (DCpointer**) pThis ); /* vtbl is located at beginning of class */
+
+  /* set/get bool (TRUE) */
+
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  dcArgBool(pc,DC_TRUE);
+  dcCallVoid(pc, vtbl[VTBI_SET_BOOL] );
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  DC_TEST( dcCallBool(pc, vtbl[VTBI_GET_BOOL] ) == DC_TRUE );
+  /* set/get bool (FALSE) */
+
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  dcArgBool(pc,DC_FALSE);
+  dcCallVoid(pc, vtbl[VTBI_SET_BOOL] );
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  DC_TEST( dcCallBool(pc, vtbl[VTBI_GET_BOOL] ) == DC_FALSE );
+
+  /* set/get int */
+
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  dcArgInt(pc,1234);
+  dcCallVoid(pc, vtbl[VTBI_SET_INT] );
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  DC_TEST( dcCallInt(pc, vtbl[VTBI_GET_INT] ) == 1234 );
+
+  /* set/get long */
+
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  dcArgLong(pc,0xCAFEBABEUL);
+  dcCallVoid(pc, vtbl[VTBI_SET_LONG] );
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  DC_TEST( dcCallLong(pc, vtbl[VTBI_GET_LONG] ) == (DClong)0xCAFEBABEUL );
+
+  /* set/get long long */
+
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  dcArgLongLong(pc,0xCAFEBABEDEADC0DELL);
+  dcCallVoid(pc, vtbl[VTBI_SET_LONG_LONG] );
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  DC_TEST( dcCallLongLong(pc, vtbl[VTBI_GET_LONG_LONG] ) == (DClonglong)0xCAFEBABEDEADC0DELL );
+
+  /* set/get float */
+
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  dcArgFloat(pc,1.2345f);
+  dcCallVoid(pc, vtbl[VTBI_SET_FLOAT] );
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  DC_TEST( dcCallFloat(pc, vtbl[VTBI_GET_FLOAT] ) == 1.2345f );
+
+  /* set/get double */
+
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  dcArgDouble(pc,1.23456789);
+  dcCallVoid(pc, vtbl[VTBI_SET_DOUBLE] );
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  DC_TEST( dcCallDouble(pc, vtbl[VTBI_GET_DOUBLE] ) == 1.23456789 );
+
+  /* set/get pointer */
+
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  dcArgPointer(pc, (DCpointer) 0xCAFEBABE );
+  dcCallVoid(pc, vtbl[VTBI_SET_POINTER] );
+  dcReset(pc);
+  dcArgPointer(pc, pThis);
+  DC_TEST( dcCallPointer(pc, vtbl[VTBI_GET_POINTER] ) == ( (DCpointer) 0xCAFEBABE ) );
+}
+
+
+#ifdef DC__OS_Win32
+
+DC_DEFINE_TEST_FUNC_BEGIN(testCallThisMS)
+
+  DCCallVM* pc = dcNewCallVM(4096);
+  dcMode(pc,DC_CALL_C_X86_WIN32_THIS_MS);
+  dcReset(pc);
+  testCallValue<ValueMS>(pc); 
+  dcFree(pc);
+
+DC_DEFINE_TEST_FUNC_END
+
+#endif
+
+
+DC_DEFINE_TEST_FUNC_BEGIN(testCallThisC)
+
+  DCCallVM* pc = dcNewCallVM(4096);
+  dcReset(pc);
+  testCallValue<Value>(pc); 
+  dcFree(pc);
+
+DC_DEFINE_TEST_FUNC_END
+
+
+extern "C" {
+
+int main(int argc, char* argv[])
+{
+  dcTest_initPlatform();
+
+  int b = TRUE;
+  
+#if defined(DC__OS_Win32)	// ThisCall temporarily only for win 32 @@@
+  
+  b = b && testCallThisC();
+  printf("ThisC:%d\n",b);
+
+#if defined(DC__C_MSVC)
+  b = b && testCallThisMS();
+  printf("ThisMS:%d\n",b);
+#endif
+
+#endif
+
+  printf("result: plain_cpp: %d\n", b);
+
+  dcTest_deInitPlatform();
+
+  return !b;
+}
+
+}  // extern "C"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/resolve_self/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/resolve_self/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+APP = resolve_self
+OBJS = main.o
+
+TOP      = ../..
+CFLAGS  += -I${TOP}/dynload
+LDFLAGS += -L${TOP}/dynload
+LDLIBS  += -ldynload_s
+
+all: ${APP}
+
+.PHONY: all clean install
+
+${APP}: ${OBJS} 
+	${CC} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP} 
+
+clean:
+	rm -f ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/resolve_self/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP       = resolve_self
+OBJS      = main.o
+SRCTOP    = ${VPATH}/../..
+BLDTOP    = ../..
+CFLAGS   += -I${SRCTOP}/dynload
+LDLIBS_D  = -L${BLDTOP}/dynload -ldynload_s 
+.PHONY: all clean install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CC} ${CFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS_D} ${LDLIBS} -o ${APP}
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/resolve_self/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,55 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007-2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = resolve_self.exe
+OBJS = main.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dynload\libdynload_s.lib $(TOP)\dyncall\libdyncall_s.lib
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = resolve_self.nds
+OBJS = main.o
+
+$(TARGETS):# $(OBJS)
+	echo Not building: There is no dynload support on this platform.
+
+!ENDIF
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/resolve_self/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,19 @@
+test for dynload library to resolve symbols from application image itself.
+by Daniel Adler in 2010
+
+Description
+A test function is specified in the main application, that will be 
+dynamically resolved on main entry of the test program.
+
+The library path argument to dlLoadLibrary is set to NULL to 
+specify the application image.
+
+Background
+self referencing is important on configurations where there is no
+shared library but everything is statically linked.
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/resolve_self/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/resolve_self/main.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,58 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/resolve_self/main.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "../../dynload/dynload.h"
+#include "../../dyncall/dyncall_macros.h"
+#include <assert.h>
+#include "../common/platformInit.h"
+
+#ifdef DC_WINDOWS
+#define DLL_EXPORT __declspec( dllexport )
+#else
+#define DLL_EXPORT
+#endif
+
+DLL_EXPORT double add_dd_d(double x, double y);
+
+double add_dd_d(double x, double y) 
+{
+  return x+y;
+}
+
+int main(int argc, char* argv[])
+{
+  void* address;
+  double result;
+  int status;
+  DLLib* pLib = dlLoadLibrary(NULL);
+  assert(pLib);
+
+  address = dlFindSymbol(pLib, "add_dd_d");
+  assert(address);
+  result = ( (double (*) (double,double) ) address ) (20.0, 3.0);
+  status = (result == 23); 
+  printf("result: resolve_self: %d\n", status);
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/run-build.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,5 @@
+#!/bin/sh
+for i in $* ; do
+  $i/$i
+done
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/runalltests.bat	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,33 @@
+@echo off
+callf\callf.exe
+pause
+ellipsis\ellipsis.exe
+pause
+malloc_wx\malloc_wx.exe
+pause
+plain\plain.exe
+pause
+plain_c++\plain_c++.exe
+pause
+suite\suite.exe
+pause
+suite_x86win32std\suite.exe
+pause
+suite_x86win32fast\suite.exe
+pause
+suite2\suite2.exe
+pause
+suite2_x86win32std\suite2.exe
+pause
+suite2_x86win32fast\suite2.exe
+pause
+suite3\suite3.exe
+pause
+suite_floats\suite_floats.exe
+pause
+thunk\thunk.exe
+pause
+callback_plain\callback_plain.exe
+pause
+callback_suite\callback_suite.exe
+pause
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/runalltests.sh	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,5 @@
+A="callf ellipsis malloc_wx plain plain_c++ suite suite2 suite3 suite_floats callback_plain call_suite callback_suite" # syscall nm resolve_self thunk
+for i in $A ; do
+  $i/$i
+done
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/calls/d16.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,36 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/samples/calls/d16.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define d double
+void d16(
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d
+);
+void t(d* x)
+{
+	d16(x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],x[10],x[11],x[12],x[13],x[14],x[15]);	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/calls/d20.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,37 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/samples/calls/d20.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define d double
+void d20(
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d
+);
+void t(d*x)
+{
+	d20(x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],x[10],x[11],x[12],x[13],x[14],x[15],x[16],x[17],x[18],x[19]);	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/calls/d40.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/samples/calls/d40.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define d double
+void d40(
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d
+);
+void t()
+{
+	d40(
+	0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
+	0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
+	);	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/calls/f16.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,36 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/samples/calls/f16.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define f float
+void f16(
+  f,f,f,f,
+  f,f,f,f,
+  f,f,f,f,
+  f,f,f,f
+);
+void t(f* x)
+{
+	f16(x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],x[10],x[11],x[12],x[13],x[14],x[15]);	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/calls/f20.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,37 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/samples/calls/f20.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define f float
+void f20(
+  f,f,f,f,
+  f,f,f,f,
+  f,f,f,f,
+  f,f,f,f,
+  f,f,f,f
+);
+void t()
+{
+	f20(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19);	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/calls/f40.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/samples/calls/f40.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define d float
+void f40(
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d
+);
+void t()
+{
+	f40(
+	0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
+	0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
+	);	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/calls/fd40.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,47 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/samples/calls/fd40.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define a float
+#define b double
+
+void ab40(
+  a,b,a,b,
+  a,b,a,b,
+  a,b,a,b,
+  a,b,a,b,
+  a,b,a,b,
+  a,b,a,b,
+  a,b,a,b,
+  a,b,a,b,
+  a,b,a,b,
+  a,b,a,b
+);
+void t(a*x,b*y)
+{
+  ab40(
+    x[ 0],y[ 1],x[ 2],y[ 3],x[ 4],y[ 5],x[ 6],y[ 7],x[ 8],y[ 9],x[10],y[11],x[12],y[13],x[14],y[15],x[16],y[17],x[18],y[19],
+    x[20],y[21],x[22],y[23],x[24],y[25],x[26],y[27],x[28],y[29],x[30],y[31],x[32],y[33],x[34],y[35],x[36],y[37],x[38],y[39]
+  );	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/calls/i3.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,32 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/samples/calls/i3.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define i int
+void i3(i,i,i);
+
+void t(i*x)
+{
+  i3(x[1],x[2],x[3]);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/calls/i7.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,31 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/samples/calls/i7.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define i int
+void i7(i,i,i,i,i,i,i);
+void t()
+{
+  i7(0,1,2,3,4,5,6);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/calls/id40.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,46 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/samples/calls/id40.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define d double
+#define i int
+void id40(
+  i,d,i,d,
+  i,d,i,d,
+  i,d,i,d,
+  i,d,i,d,
+  i,d,i,d,
+  i,d,i,d,
+  i,d,i,d,
+  i,d,i,d,
+  i,d,i,d,
+  i,d,i,d
+);
+void t(int*x,double*y)
+{
+  id40(
+    x[ 0],y[ 1],x[ 2],y[ 3],x[ 4],y[ 5],x[ 6],y[ 7],x[ 8],y[ 9],x[10],y[11],x[12],y[13],x[14],y[15],x[16],y[17],x[18],y[19],
+    x[20],y[21],x[22],y[23],x[24],y[25],x[26],y[27],x[28],y[29],x[30],y[31],x[32],y[33],x[34],y[35],x[36],y[37],x[38],y[39]
+  );	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/calls/l16.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,36 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/samples/calls/l16.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define X long long
+void f16(
+  X,X,X,X,
+  X,X,X,X,
+  X,X,X,X,
+  X,X,X,X
+);
+void t(X* x)
+{
+  f16(x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],x[10],x[11],x[12],x[13],x[14],x[15]);	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/calls/many.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,74 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/samples/calls/many.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#define i int
+#define f float
+#define d double
+#define l long long
+
+void fi16(
+  f,i,f,i,
+  f,i,f,i,
+  f,i,f,i,
+  f,i,f,i
+);
+
+
+void i16(
+  i,i,i,i,
+  i,i,i,i,
+  i,i,i,i,
+  i,i,i,i
+);
+
+void f16(
+  f,f,f,f,
+  f,f,f,f,
+  f,f,f,f,
+  f,f,f,f
+);
+void d16(
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d,
+  d,d,d,d
+);
+void l16(
+  l,l,l,l,
+  l,l,l,l,
+  l,l,l,l,
+  l,l,l,l
+);
+void t()
+{
+/*
+	l16(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);	
+	d16(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);	
+	i16(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);	
+	f16(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);	
+*/
+	di16(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);	
+	fi16(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/composite/args.asm	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,556 @@
+; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.21022.08 
+
+include listing.inc
+
+INCLUDELIB LIBCMT
+INCLUDELIB OLDNAMES
+
+PUBLIC	call_f_s2i
+EXTRN	f_s2i:PROC
+; Function compile flags: /Ogtpy
+;	COMDAT call_f_s2i
+_TEXT	SEGMENT
+a1$ = 8
+call_f_s2i PROC						; COMDAT
+; File c:\lab\dynabi\tests\composite\args.c
+; Line 130
+	xor	eax, eax
+	mov	DWORD PTR a1$[rsp], 0
+	mov	DWORD PTR a1$[rsp+4], eax
+	mov	rcx, QWORD PTR a1$[rsp]
+	jmp	f_s2i
+call_f_s2i ENDP
+_TEXT	ENDS
+PUBLIC	$T993
+PUBLIC	call_f_s4i
+EXTRN	f_s4i:PROC
+;	COMDAT pdata
+pdata	SEGMENT
+$pdata$call_f_s4i DD imagerel $LN3
+	DD	imagerel $LN3+52
+	DD	imagerel $unwind$call_f_s4i
+pdata	ENDS
+;	COMDAT xdata
+xdata	SEGMENT
+$unwind$call_f_s4i DD 010401H
+	DD	06204H
+; Function compile flags: /Ogtpy
+xdata	ENDS
+;	COMDAT call_f_s4i
+_TEXT	SEGMENT
+$T993 = 32
+a1$ = 32
+call_f_s4i PROC						; COMDAT
+; Line 131
+$LN3:
+	sub	rsp, 56					; 00000038H
+	xor	eax, eax
+	mov	DWORD PTR a1$[rsp], 0
+	lea	rcx, QWORD PTR $T993[rsp]
+	mov	DWORD PTR a1$[rsp+4], eax
+	mov	DWORD PTR a1$[rsp+8], eax
+	mov	DWORD PTR a1$[rsp+12], eax
+	movaps	xmm0, XMMWORD PTR a1$[rsp]
+	movdqa	XMMWORD PTR $T993[rsp], xmm0
+	call	f_s4i
+	add	rsp, 56					; 00000038H
+	ret	0
+call_f_s4i ENDP
+_TEXT	ENDS
+PUBLIC	$T1004
+PUBLIC	call_f_s8i
+EXTRN	f_s8i:PROC
+;	COMDAT pdata
+pdata	SEGMENT
+$pdata$call_f_s8i DD imagerel $LN3
+	DD	imagerel $LN3+97
+	DD	imagerel $unwind$call_f_s8i
+pdata	ENDS
+;	COMDAT xdata
+xdata	SEGMENT
+$unwind$call_f_s8i DD 010401H
+	DD	0c204H
+; Function compile flags: /Ogtpy
+xdata	ENDS
+;	COMDAT call_f_s8i
+_TEXT	SEGMENT
+a1$ = 32
+$T1004 = 64
+call_f_s8i PROC						; COMDAT
+; Line 132
+$LN3:
+	sub	rsp, 104				; 00000068H
+	xor	eax, eax
+	lea	rcx, QWORD PTR a1$[rsp]
+	lea	rdx, QWORD PTR $T1004[rsp]
+	mov	DWORD PTR a1$[rsp+4], eax
+	mov	DWORD PTR a1$[rsp+8], eax
+	mov	DWORD PTR a1$[rsp+12], eax
+	mov	DWORD PTR a1$[rsp+16], eax
+	mov	DWORD PTR a1$[rsp+20], eax
+	mov	DWORD PTR a1$[rsp+24], eax
+	mov	DWORD PTR a1$[rsp+28], eax
+	mov	DWORD PTR a1$[rsp], 0
+	mov	rax, QWORD PTR [rcx]
+	mov	QWORD PTR [rdx], rax
+	mov	rax, QWORD PTR [rcx+8]
+	mov	QWORD PTR [rdx+8], rax
+	mov	rax, QWORD PTR [rcx+16]
+	mov	QWORD PTR [rdx+16], rax
+	mov	rax, QWORD PTR [rcx+24]
+	lea	rcx, QWORD PTR $T1004[rsp]
+	mov	QWORD PTR [rdx+24], rax
+	call	f_s8i
+	add	rsp, 104				; 00000068H
+	ret	0
+call_f_s8i ENDP
+_TEXT	ENDS
+PUBLIC	call_f_s2f
+EXTRN	f_s2f:PROC
+EXTRN	_fltused:DWORD
+; Function compile flags: /Ogtpy
+;	COMDAT call_f_s2f
+_TEXT	SEGMENT
+a1$ = 8
+call_f_s2f PROC						; COMDAT
+; Line 134
+	xorps	xmm0, xmm0
+	xor	eax, eax
+	movss	DWORD PTR a1$[rsp], xmm0
+	mov	DWORD PTR a1$[rsp+4], eax
+	mov	rcx, QWORD PTR a1$[rsp]
+	jmp	f_s2f
+call_f_s2f ENDP
+_TEXT	ENDS
+PUBLIC	$T1023
+PUBLIC	call_f_s4f
+EXTRN	f_s4f:PROC
+;	COMDAT pdata
+pdata	SEGMENT
+$pdata$call_f_s4f DD imagerel $LN3
+	DD	imagerel $LN3+53
+	DD	imagerel $unwind$call_f_s4f
+pdata	ENDS
+;	COMDAT xdata
+xdata	SEGMENT
+$unwind$call_f_s4f DD 010401H
+	DD	06204H
+; Function compile flags: /Ogtpy
+xdata	ENDS
+;	COMDAT call_f_s4f
+_TEXT	SEGMENT
+$T1023 = 32
+a1$ = 32
+call_f_s4f PROC						; COMDAT
+; Line 135
+$LN3:
+	sub	rsp, 56					; 00000038H
+	xorps	xmm0, xmm0
+	xor	eax, eax
+	lea	rcx, QWORD PTR $T1023[rsp]
+	movss	DWORD PTR a1$[rsp], xmm0
+	mov	DWORD PTR a1$[rsp+4], eax
+	mov	DWORD PTR a1$[rsp+8], eax
+	mov	DWORD PTR a1$[rsp+12], eax
+	movaps	xmm0, XMMWORD PTR a1$[rsp]
+	movdqa	XMMWORD PTR $T1023[rsp], xmm0
+	call	f_s4f
+	add	rsp, 56					; 00000038H
+	ret	0
+call_f_s4f ENDP
+_TEXT	ENDS
+PUBLIC	call_f_s1d
+EXTRN	f_s1d:PROC
+; Function compile flags: /Ogtpy
+;	COMDAT call_f_s1d
+_TEXT	SEGMENT
+a1$ = 8
+call_f_s1d PROC						; COMDAT
+; Line 137
+	xorpd	xmm0, xmm0
+	movsdx	QWORD PTR a1$[rsp], xmm0
+	mov	rcx, QWORD PTR a1$[rsp]
+	jmp	f_s1d
+call_f_s1d ENDP
+_TEXT	ENDS
+PUBLIC	$T1041
+PUBLIC	call_f_s2d
+EXTRN	f_s2d:PROC
+;	COMDAT pdata
+pdata	SEGMENT
+$pdata$call_f_s2d DD imagerel $LN3
+	DD	imagerel $LN3+47
+	DD	imagerel $unwind$call_f_s2d
+pdata	ENDS
+;	COMDAT xdata
+xdata	SEGMENT
+$unwind$call_f_s2d DD 010401H
+	DD	06204H
+; Function compile flags: /Ogtpy
+xdata	ENDS
+;	COMDAT call_f_s2d
+_TEXT	SEGMENT
+$T1041 = 32
+a1$ = 32
+call_f_s2d PROC						; COMDAT
+; Line 138
+$LN3:
+	sub	rsp, 56					; 00000038H
+	xorpd	xmm0, xmm0
+	xor	eax, eax
+	lea	rcx, QWORD PTR $T1041[rsp]
+	movsdx	QWORD PTR a1$[rsp], xmm0
+	mov	QWORD PTR a1$[rsp+8], rax
+	movaps	xmm0, XMMWORD PTR a1$[rsp]
+	movdqa	XMMWORD PTR $T1041[rsp], xmm0
+	call	f_s2d
+	add	rsp, 56					; 00000038H
+	ret	0
+call_f_s2d ENDP
+_TEXT	ENDS
+PUBLIC	$T1052
+PUBLIC	call_f_s4d
+EXTRN	f_s4d:PROC
+;	COMDAT pdata
+pdata	SEGMENT
+$pdata$call_f_s4d DD imagerel $LN3
+	DD	imagerel $LN3+86
+	DD	imagerel $unwind$call_f_s4d
+pdata	ENDS
+;	COMDAT xdata
+xdata	SEGMENT
+$unwind$call_f_s4d DD 010401H
+	DD	0c204H
+; Function compile flags: /Ogtpy
+xdata	ENDS
+;	COMDAT call_f_s4d
+_TEXT	SEGMENT
+a1$ = 32
+$T1052 = 64
+call_f_s4d PROC						; COMDAT
+; Line 139
+$LN3:
+	sub	rsp, 104				; 00000068H
+	xorpd	xmm0, xmm0
+	xor	eax, eax
+	lea	rcx, QWORD PTR a1$[rsp]
+	movsdx	QWORD PTR a1$[rsp], xmm0
+	mov	QWORD PTR a1$[rsp+8], rax
+	mov	QWORD PTR a1$[rsp+16], rax
+	mov	QWORD PTR a1$[rsp+24], rax
+	mov	rax, QWORD PTR [rcx]
+	lea	rdx, QWORD PTR $T1052[rsp]
+	mov	QWORD PTR [rdx], rax
+	mov	rax, QWORD PTR [rcx+8]
+	mov	QWORD PTR [rdx+8], rax
+	mov	rax, QWORD PTR [rcx+16]
+	mov	QWORD PTR [rdx+16], rax
+	mov	rax, QWORD PTR [rcx+24]
+	lea	rcx, QWORD PTR $T1052[rsp]
+	mov	QWORD PTR [rdx+24], rax
+	call	f_s4d
+	add	rsp, 104				; 00000068H
+	ret	0
+call_f_s4d ENDP
+_TEXT	ENDS
+PUBLIC	call_f_s1q
+EXTRN	f_s1q:PROC
+; Function compile flags: /Ogtpy
+;	COMDAT call_f_s1q
+_TEXT	SEGMENT
+a1$ = 8
+call_f_s1q PROC						; COMDAT
+; Line 141
+	xorpd	xmm0, xmm0
+	movsdx	QWORD PTR a1$[rsp], xmm0
+	mov	rcx, QWORD PTR a1$[rsp]
+	jmp	f_s1q
+call_f_s1q ENDP
+_TEXT	ENDS
+PUBLIC	$T1068
+PUBLIC	$T1069
+PUBLIC	call_f_s2ds2d
+EXTRN	f_s2ds2d:PROC
+;	COMDAT pdata
+pdata	SEGMENT
+$pdata$call_f_s2ds2d DD imagerel $LN3
+	DD	imagerel $LN3+74
+	DD	imagerel $unwind$call_f_s2ds2d
+pdata	ENDS
+;	COMDAT xdata
+xdata	SEGMENT
+$unwind$call_f_s2ds2d DD 010401H
+	DD	08204H
+; Function compile flags: /Ogtpy
+xdata	ENDS
+;	COMDAT call_f_s2ds2d
+_TEXT	SEGMENT
+$T1069 = 32
+a2$ = 32
+$T1068 = 48
+a1$ = 48
+call_f_s2ds2d PROC					; COMDAT
+; Line 147
+$LN3:
+	sub	rsp, 72					; 00000048H
+; Line 148
+	xorpd	xmm0, xmm0
+	xor	eax, eax
+; Line 150
+	lea	rdx, QWORD PTR $T1069[rsp]
+	movsdx	QWORD PTR a1$[rsp], xmm0
+	movsdx	QWORD PTR a2$[rsp], xmm0
+	mov	QWORD PTR a1$[rsp+8], rax
+	mov	QWORD PTR a2$[rsp+8], rax
+	lea	rcx, QWORD PTR $T1068[rsp]
+	movaps	xmm1, XMMWORD PTR a1$[rsp]
+	movaps	xmm0, XMMWORD PTR a2$[rsp]
+	movdqa	XMMWORD PTR $T1068[rsp], xmm1
+	movdqa	XMMWORD PTR $T1069[rsp], xmm0
+	call	f_s2ds2d
+; Line 151
+	add	rsp, 72					; 00000048H
+	ret	0
+call_f_s2ds2d ENDP
+_TEXT	ENDS
+PUBLIC	__real@40000000
+PUBLIC	call_f_sfifi
+EXTRN	f_sfifi:PROC
+;	COMDAT pdata
+pdata	SEGMENT
+$pdata$call_f_sfifi DD imagerel $LN3
+	DD	imagerel $LN3+65
+	DD	imagerel $unwind$call_f_sfifi
+pdata	ENDS
+;	COMDAT xdata
+xdata	SEGMENT
+$unwind$call_f_sfifi DD 010701H
+	DD	06207H
+xdata	ENDS
+;	COMDAT __real@40000000
+CONST	SEGMENT
+__real@40000000 DD 040000000r			; 2
+; Function compile flags: /Ogtpy
+CONST	ENDS
+;	COMDAT call_f_sfifi
+_TEXT	SEGMENT
+call_f_sfifi PROC					; COMDAT
+; Line 155
+$LN3:
+	mov	rax, rsp
+	sub	rsp, 56					; 00000038H
+	xorps	xmm0, xmm0
+	movss	xmm1, DWORD PTR __real@40000000
+	mov	DWORD PTR [rax-20], 1
+	mov	DWORD PTR [rax-12], 3
+	lea	rcx, QWORD PTR [rax-24]
+	movss	DWORD PTR [rax-24], xmm0
+	movss	DWORD PTR [rax-16], xmm1
+	movaps	xmm0, XMMWORD PTR [rax-24]
+	movdqa	XMMWORD PTR [rax-24], xmm0
+	call	f_sfifi
+	add	rsp, 56					; 00000038H
+	ret	0
+call_f_sfifi ENDP
+_TEXT	ENDS
+PUBLIC	__real@40400000
+PUBLIC	__real@3f800000
+PUBLIC	call_f_sifif
+EXTRN	f_sifif:PROC
+;	COMDAT pdata
+pdata	SEGMENT
+$pdata$call_f_sifif DD imagerel $LN3
+	DD	imagerel $LN3+70
+	DD	imagerel $unwind$call_f_sifif
+pdata	ENDS
+;	COMDAT xdata
+xdata	SEGMENT
+$unwind$call_f_sifif DD 010701H
+	DD	06207H
+xdata	ENDS
+;	COMDAT __real@40400000
+CONST	SEGMENT
+__real@40400000 DD 040400000r			; 3
+CONST	ENDS
+;	COMDAT __real@3f800000
+CONST	SEGMENT
+__real@3f800000 DD 03f800000r			; 1
+; Function compile flags: /Ogtpy
+CONST	ENDS
+;	COMDAT call_f_sifif
+_TEXT	SEGMENT
+call_f_sifif PROC					; COMDAT
+; Line 161
+$LN3:
+	mov	rax, rsp
+	sub	rsp, 56					; 00000038H
+	movss	xmm0, DWORD PTR __real@3f800000
+	movss	xmm1, DWORD PTR __real@40400000
+	mov	DWORD PTR [rax-24], 0
+	mov	DWORD PTR [rax-16], 2
+	lea	rcx, QWORD PTR [rax-24]
+	movss	DWORD PTR [rax-20], xmm0
+	movss	DWORD PTR [rax-12], xmm1
+	movaps	xmm0, XMMWORD PTR [rax-24]
+	movdqa	XMMWORD PTR [rax-24], xmm0
+	call	f_sifif
+	add	rsp, 56					; 00000038H
+	ret	0
+call_f_sifif ENDP
+_TEXT	ENDS
+PUBLIC	$T1109
+PUBLIC	call_f_full_sifif
+EXTRN	f_full_sifif:PROC
+;	COMDAT pdata
+pdata	SEGMENT
+$pdata$call_f_full_sifif DD imagerel $LN3
+	DD	imagerel $LN3+90
+	DD	imagerel $unwind$call_f_full_sifif
+pdata	ENDS
+;	COMDAT xdata
+xdata	SEGMENT
+$unwind$call_f_full_sifif DD 010401H
+	DD	0c204H
+; Function compile flags: /Ogtpy
+xdata	ENDS
+;	COMDAT call_f_full_sifif
+_TEXT	SEGMENT
+$T1109 = 80
+a1$ = 80
+call_f_full_sifif PROC					; COMDAT
+; Line 168
+$LN3:
+	sub	rsp, 104				; 00000068H
+	xor	eax, eax
+	mov	DWORD PTR a1$[rsp], 0
+	xor	ecx, ecx
+	lea	edx, QWORD PTR [rax+1]
+	mov	DWORD PTR a1$[rsp+4], eax
+	mov	DWORD PTR a1$[rsp+8], eax
+	mov	DWORD PTR a1$[rsp+12], eax
+	lea	rax, QWORD PTR $T1109[rsp]
+	lea	r9d, QWORD PTR [rdx+2]
+	movaps	xmm0, XMMWORD PTR a1$[rsp]
+	movdqa	XMMWORD PTR $T1109[rsp], xmm0
+	mov	QWORD PTR [rsp+64], rax
+	mov	BYTE PTR [rsp+56], 7
+	mov	BYTE PTR [rsp+48], 6
+	lea	r8d, QWORD PTR [rdx+1]
+	mov	BYTE PTR [rsp+40], 5
+	mov	BYTE PTR [rsp+32], 4
+	call	f_full_sifif
+	add	rsp, 104				; 00000068H
+	ret	0
+call_f_full_sifif ENDP
+_TEXT	ENDS
+PUBLIC	$T1120
+PUBLIC	call_f_remain64_sifif
+EXTRN	f_remain64_sifif:PROC
+;	COMDAT pdata
+pdata	SEGMENT
+$pdata$call_f_remain64_sifif DD imagerel $LN3
+	DD	imagerel $LN3+56
+	DD	imagerel $unwind$call_f_remain64_sifif
+pdata	ENDS
+;	COMDAT xdata
+xdata	SEGMENT
+$unwind$call_f_remain64_sifif DD 010401H
+	DD	06204H
+; Function compile flags: /Ogtpy
+xdata	ENDS
+;	COMDAT call_f_remain64_sifif
+_TEXT	SEGMENT
+$T1120 = 32
+a1$ = 32
+call_f_remain64_sifif PROC				; COMDAT
+; Line 169
+$LN3:
+	sub	rsp, 56					; 00000038H
+	xor	eax, eax
+	mov	DWORD PTR a1$[rsp], 0
+	lea	r8, QWORD PTR $T1120[rsp]
+	mov	DWORD PTR a1$[rsp+4], eax
+	mov	DWORD PTR a1$[rsp+8], eax
+	mov	DWORD PTR a1$[rsp+12], eax
+	movaps	xmm0, XMMWORD PTR a1$[rsp]
+	movdqa	XMMWORD PTR $T1120[rsp], xmm0
+	mov	dl, 1
+	xor	ecx, ecx
+	call	f_remain64_sifif
+	add	rsp, 56					; 00000038H
+	ret	0
+call_f_remain64_sifif ENDP
+_TEXT	ENDS
+PUBLIC	call_f_sfffc
+EXTRN	f_sfffc:PROC
+;	COMDAT pdata
+pdata	SEGMENT
+$pdata$call_f_sfffc DD imagerel $LN3
+	DD	imagerel $LN3+68
+	DD	imagerel $unwind$call_f_sfffc
+pdata	ENDS
+;	COMDAT xdata
+xdata	SEGMENT
+$unwind$call_f_sfffc DD 010701H
+	DD	06207H
+; Function compile flags: /Ogtpy
+xdata	ENDS
+;	COMDAT call_f_sfffc
+_TEXT	SEGMENT
+call_f_sfffc PROC					; COMDAT
+; Line 173
+$LN3:
+	mov	rax, rsp
+	sub	rsp, 56					; 00000038H
+	xorps	xmm0, xmm0
+	movss	xmm1, DWORD PTR __real@3f800000
+	mov	BYTE PTR [rax-12], 3
+	lea	rcx, QWORD PTR [rax-24]
+	movss	DWORD PTR [rax-24], xmm0
+	movss	xmm0, DWORD PTR __real@40000000
+	movss	DWORD PTR [rax-20], xmm1
+	movss	DWORD PTR [rax-16], xmm0
+	movaps	xmm1, XMMWORD PTR [rax-24]
+	movdqa	XMMWORD PTR [rax-24], xmm1
+	call	f_sfffc
+	add	rsp, 56					; 00000038H
+	ret	0
+call_f_sfffc ENDP
+_TEXT	ENDS
+PUBLIC	call_f_scfff
+EXTRN	f_scfff:PROC
+;	COMDAT pdata
+pdata	SEGMENT
+$pdata$call_f_scfff DD imagerel $LN3
+	DD	imagerel $LN3+73
+	DD	imagerel $unwind$call_f_scfff
+pdata	ENDS
+;	COMDAT xdata
+xdata	SEGMENT
+$unwind$call_f_scfff DD 010701H
+	DD	06207H
+; Function compile flags: /Ogtpy
+xdata	ENDS
+;	COMDAT call_f_scfff
+_TEXT	SEGMENT
+call_f_scfff PROC					; COMDAT
+; Line 177
+$LN3:
+	mov	rax, rsp
+	sub	rsp, 56					; 00000038H
+	movss	xmm0, DWORD PTR __real@3f800000
+	movss	xmm1, DWORD PTR __real@40000000
+	mov	BYTE PTR [rax-24], 0
+	lea	rcx, QWORD PTR [rax-24]
+	movss	DWORD PTR [rax-20], xmm0
+	movss	xmm0, DWORD PTR __real@40400000
+	movss	DWORD PTR [rax-16], xmm1
+	movss	DWORD PTR [rax-12], xmm0
+	movaps	xmm1, XMMWORD PTR [rax-24]
+	movdqa	XMMWORD PTR [rax-24], xmm1
+	call	f_scfff
+	add	rsp, 56					; 00000038H
+	ret	0
+call_f_scfff ENDP
+_TEXT	ENDS
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/composite/args.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,178 @@
+// types:
+
+typedef struct { int x, y; } s2i; 
+typedef struct { int x, y, z, w; } s4i; 
+typedef struct { int x, y, z, w, a, b, c, d; } s8i; 
+
+typedef struct { float x, y; } s2f; 
+typedef struct { float x, y, z, w; } s4f; 
+
+typedef struct { double x; } s1d; 
+typedef struct { double x, y; } s2d; 
+typedef struct { double x, y, z, w; } s4d; 
+
+typedef struct { long double x; } s1q;
+
+#if defined(__ARM_NEON__) 
+#include <arm_neon.h>
+#endif
+
+#if defined(__i386__) || defined(__x86_64__) && ( defined(__MMX__) || defined(__SSE__) )
+#if defined(__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ > 2)
+
+#include <immintrin.h> 
+
+#if defined(__AVX__)
+#define V256 1
+typedef __m256 v256_t;
+#endif
+
+#else
+
+#include <emmintrin.h>
+
+#endif
+
+#if defined(__MMX__)
+#define V64 1
+typedef __m64  v64_t;
+#endif
+
+#if defined(__SSE__)
+#define V128 1
+typedef __m128 v128_t;
+#endif
+
+#endif
+
+#if V64
+
+typedef struct { v64_t f1; } s1w;
+typedef struct { v64_t f1, f2; } s2w;
+typedef struct { v64_t f1, f2, f3, f4; } s4w;
+
+#endif
+
+#if V128
+
+typedef struct { v128_t f1; } s1x;
+typedef struct { v128_t f1, f2; } s2x;
+
+typedef struct { v64_t f1; v128_t f2; } swx;
+
+#endif
+
+// x86_64:
+
+/*
+                  x86_64
+                  ------------
+  (v{ii})         regs  int 8
+  (v{iiii})       regs  int 16
+  (v{iiiiiiii})   stack     32
+  (v{ff})         regs  sse 8
+  (v{ffff})       regs  sse 16
+  (v{d})          regs  sse 8
+  (v{dd})         regs  sse 16
+  (v{dddd})       stack     32
+  (v{w})          regs  sse 8
+  (v{ww})         regs  sse 16         
+  (v{wwww})       stack     32
+  (v{x})          regs  sse 16  
+  (v{xx})         stack     32
+  (v(wx})         stack     32 
+  (v{xw})         stack     32
+  (v{y})          stack     32
+  (v{yy}{x})      stack     32
+  (v{ifif})              
+*/
+
+#if V256
+
+typedef struct { v256_t f1; } s1y;
+typedef struct { v256_t f1; v256_t f2; } s2y;
+
+typedef v256_t y;
+
+extern void f_y(y a1); void call_f_y() { y a1 = {0,}; f_y(a1); }
+
+
+extern void f_s2ys1x(s2y a1,s1x a2); void call_f_s2ys1x() { s2y a1 = {0,}; s1x a2 = {0,}; f_s2ys1x(a1,a2); }
+extern void f_s1xs2y(s1x a1,s2y a2); void call_f_s1xs2y() { s1x a1 = {0,}; s2y a2 = {0,}; f_s1xs2y(a1,a2); }
+
+extern void f_s1y(s1y a1); void call_f_s1y() { s1y a1 = {0,}; f_s1y(a1); }
+extern void f_s2y(s2y a1); void call_f_s2y() { s2y a1 = {0,}; f_s2y(a1); }
+
+extern void f_s1ys1y(s1y a1,s1y a2); void call_f_s1ys1y() { s1y a1 = {0,}, a2 = {0,}; f_s1ys1y(a1,a2); }
+extern void f_s2ys1y(s2y a1,s1y a2); void call_f_s2ys1y() { s2y a1 = {0,}; s1y a2 = {0,}; f_s2ys1y(a1,a2); }
+
+#endif
+
+#if V128
+
+extern void f_swx(swx a1); void call_f_swx() { swx a1 = {0,}; f_swx(a1); }
+
+extern void f_s2x(s2x a1); void call_f_s2x() { s2x a1 = {0,}; f_s2x(a1); }
+extern void f_s1x(s1x a1); void call_f_s1x() { s1x a1 = {0,}; f_s1x(a1); }
+
+#endif
+
+#if V64
+
+extern void f_s4w(s4w a1); void call_f_s4w() { s4w a1 = {0,}; f_s4w(a1); }
+extern void f_s2w(s2w a1); void call_f_s2w() { s2w a1 = {0,}; f_s2w(a1); }
+extern void f_s1w(s1w a1); void call_f_s1w() { s1w a1 = {0,}; f_s1w(a1); }
+
+#endif
+
+// one composite argument:
+
+extern void f_s2i(s2i a1); void call_f_s2i() { s2i a1 = {0,}; f_s2i(a1); }
+extern void f_s4i(s4i a1); void call_f_s4i() { s4i a1 = {0,}; f_s4i(a1); }
+extern void f_s8i(s8i a1); void call_f_s8i() { s8i a1 = {0,}; f_s8i(a1); }
+
+extern void f_s2f(s2f a1); void call_f_s2f() { s2f a1 = {0,}; f_s2f(a1); }
+extern void f_s4f(s4f a1); void call_f_s4f() { s4f a1 = {0,}; f_s4f(a1); }
+
+extern void f_s1d(s1d a1); void call_f_s1d() { s1d a1 = {0,}; f_s1d(a1); }
+extern void f_s2d(s2d a1); void call_f_s2d() { s2d a1 = {0,}; f_s2d(a1); }
+extern void f_s4d(s4d a1); void call_f_s4d() { s4d a1 = {0,}; f_s4d(a1); }
+
+extern void f_s1q(s1q a1); void call_f_s1q() { s1q a1 = {0,}; f_s1q(a1); }
+
+
+// multiple arguments:
+
+extern void f_s2ds2d(s2d a1, s2d a2); 
+void call_f_s2ds2d() { 
+  s2d a1={0,}; 
+  s2d a2={0,}; 
+  f_s2ds2d(a1,a2); 
+} 
+
+typedef struct { float x; int y; float z; int w; } sfifi;
+extern void f_sfifi(sfifi a1); 
+void call_f_sfifi() { sfifi a1 = {0,1,2,3,}; f_sfifi(a1); }
+
+// int/float 4-byte alignment.
+
+typedef struct { int x; float y; int z; float w; } sifif;
+extern void f_sifif(sifif a1); 
+void call_f_sifif() { sifif a1 = {0,1,2,3,}; f_sifif(a1); }
+
+#define FULL_T char, short, int, long int, char, char, char, char
+#define FULL_V 0,1,2,3,4,5,6,7
+
+#define REMAIN64_T char, char
+#define REMAIN64_V 0,1
+extern void f_full_sifif(FULL_T, sifif a1); void call_f_full_sifif() { sifif a1 = {0,}; f_full_sifif(FULL_V,a1); }
+extern void f_remain64_sifif(REMAIN64_T, sifif a1); void call_f_remain64_sifif() { sifif a1 = {0,}; f_remain64_sifif(REMAIN64_V,a1); }
+
+typedef struct { float f1,f2,f3; char f4; } sfffc;
+extern void f_sfffc(sfffc a1); 
+void call_f_sfffc() { sfffc a1 = {0,1,2,3,}; f_sfffc(a1); }
+
+typedef struct { char f1; float f2,f3,f4; } scfff;
+extern void f_scfff(scfff a1); 
+void call_f_scfff() { scfff a1 = {0,1,2,3,}; f_scfff(a1); }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/composite/args.s	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,574 @@
+	.section	__TEXT,__text,regular,pure_instructions
+	.globl	_call_f_swx
+	.align	4, 0x90
+_call_f_swx:                            ## @call_f_swx
+Ltmp2:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp3:
+	.cfi_def_cfa_offset 16
+Ltmp4:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp5:
+	.cfi_def_cfa_register %rbp
+	subq	$64, %rsp
+	xorps	%xmm0, %xmm0
+	movaps	%xmm0, -16(%rbp)
+	movaps	%xmm0, -32(%rbp)
+	movaps	-32(%rbp), %xmm0
+	movaps	-16(%rbp), %xmm1
+	movaps	%xmm1, 16(%rsp)
+	movaps	%xmm0, (%rsp)
+	callq	_f_swx
+	addq	$64, %rsp
+	popq	%rbp
+	ret
+Ltmp6:
+	.cfi_endproc
+Leh_func_end0:
+
+	.globl	_call_f_s2x
+	.align	4, 0x90
+_call_f_s2x:                            ## @call_f_s2x
+Ltmp9:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp10:
+	.cfi_def_cfa_offset 16
+Ltmp11:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp12:
+	.cfi_def_cfa_register %rbp
+	subq	$64, %rsp
+	xorps	%xmm0, %xmm0
+	movaps	%xmm0, -16(%rbp)
+	movaps	%xmm0, -32(%rbp)
+	movaps	-32(%rbp), %xmm0
+	movaps	-16(%rbp), %xmm1
+	movaps	%xmm1, 16(%rsp)
+	movaps	%xmm0, (%rsp)
+	callq	_f_s2x
+	addq	$64, %rsp
+	popq	%rbp
+	ret
+Ltmp13:
+	.cfi_endproc
+Leh_func_end1:
+
+	.globl	_call_f_s1x
+	.align	4, 0x90
+_call_f_s1x:                            ## @call_f_s1x
+Ltmp16:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp17:
+	.cfi_def_cfa_offset 16
+Ltmp18:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp19:
+	.cfi_def_cfa_register %rbp
+	xorps	%xmm0, %xmm0
+	popq	%rbp
+	jmp	_f_s1x                  ## TAILCALL
+Ltmp20:
+	.cfi_endproc
+Leh_func_end2:
+
+	.globl	_call_f_s4w
+	.align	4, 0x90
+_call_f_s4w:                            ## @call_f_s4w
+Ltmp23:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp24:
+	.cfi_def_cfa_offset 16
+Ltmp25:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp26:
+	.cfi_def_cfa_register %rbp
+	subq	$64, %rsp
+	xorps	%xmm0, %xmm0
+	movaps	%xmm0, -16(%rbp)
+	movaps	%xmm0, -32(%rbp)
+	movq	-8(%rbp), %rax
+	movq	%rax, 24(%rsp)
+	movq	-16(%rbp), %rax
+	movq	%rax, 16(%rsp)
+	movq	-32(%rbp), %rax
+	movq	-24(%rbp), %rcx
+	movq	%rcx, 8(%rsp)
+	movq	%rax, (%rsp)
+	callq	_f_s4w
+	addq	$64, %rsp
+	popq	%rbp
+	ret
+Ltmp27:
+	.cfi_endproc
+Leh_func_end3:
+
+	.globl	_call_f_s2w
+	.align	4, 0x90
+_call_f_s2w:                            ## @call_f_s2w
+Ltmp30:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp31:
+	.cfi_def_cfa_offset 16
+Ltmp32:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp33:
+	.cfi_def_cfa_register %rbp
+	xorl	%edi, %edi
+	xorl	%esi, %esi
+	popq	%rbp
+	jmp	_f_s2w                  ## TAILCALL
+Ltmp34:
+	.cfi_endproc
+Leh_func_end4:
+
+	.globl	_call_f_s1w
+	.align	4, 0x90
+_call_f_s1w:                            ## @call_f_s1w
+Ltmp37:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp38:
+	.cfi_def_cfa_offset 16
+Ltmp39:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp40:
+	.cfi_def_cfa_register %rbp
+	xorl	%edi, %edi
+	popq	%rbp
+	jmp	_f_s1w                  ## TAILCALL
+Ltmp41:
+	.cfi_endproc
+Leh_func_end5:
+
+	.globl	_call_f_s2i
+	.align	4, 0x90
+_call_f_s2i:                            ## @call_f_s2i
+Ltmp44:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp45:
+	.cfi_def_cfa_offset 16
+Ltmp46:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp47:
+	.cfi_def_cfa_register %rbp
+	xorl	%edi, %edi
+	popq	%rbp
+	jmp	_f_s2i                  ## TAILCALL
+Ltmp48:
+	.cfi_endproc
+Leh_func_end6:
+
+	.globl	_call_f_s4i
+	.align	4, 0x90
+_call_f_s4i:                            ## @call_f_s4i
+Ltmp51:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp52:
+	.cfi_def_cfa_offset 16
+Ltmp53:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp54:
+	.cfi_def_cfa_register %rbp
+	xorl	%edi, %edi
+	xorl	%esi, %esi
+	popq	%rbp
+	jmp	_f_s4i                  ## TAILCALL
+Ltmp55:
+	.cfi_endproc
+Leh_func_end7:
+
+	.globl	_call_f_s8i
+	.align	4, 0x90
+_call_f_s8i:                            ## @call_f_s8i
+Ltmp58:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp59:
+	.cfi_def_cfa_offset 16
+Ltmp60:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp61:
+	.cfi_def_cfa_register %rbp
+	subq	$64, %rsp
+	xorps	%xmm0, %xmm0
+	movaps	%xmm0, -16(%rbp)
+	movaps	%xmm0, -32(%rbp)
+	movq	-8(%rbp), %rax
+	movq	%rax, 24(%rsp)
+	movq	-16(%rbp), %rax
+	movq	%rax, 16(%rsp)
+	movq	-32(%rbp), %rax
+	movq	-24(%rbp), %rcx
+	movq	%rcx, 8(%rsp)
+	movq	%rax, (%rsp)
+	callq	_f_s8i
+	addq	$64, %rsp
+	popq	%rbp
+	ret
+Ltmp62:
+	.cfi_endproc
+Leh_func_end8:
+
+	.globl	_call_f_s2f
+	.align	4, 0x90
+_call_f_s2f:                            ## @call_f_s2f
+Ltmp65:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp66:
+	.cfi_def_cfa_offset 16
+Ltmp67:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp68:
+	.cfi_def_cfa_register %rbp
+	xorps	%xmm0, %xmm0
+	popq	%rbp
+	jmp	_f_s2f                  ## TAILCALL
+Ltmp69:
+	.cfi_endproc
+Leh_func_end9:
+
+	.globl	_call_f_s4f
+	.align	4, 0x90
+_call_f_s4f:                            ## @call_f_s4f
+Ltmp72:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp73:
+	.cfi_def_cfa_offset 16
+Ltmp74:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp75:
+	.cfi_def_cfa_register %rbp
+	xorps	%xmm0, %xmm0
+	xorps	%xmm1, %xmm1
+	popq	%rbp
+	jmp	_f_s4f                  ## TAILCALL
+Ltmp76:
+	.cfi_endproc
+Leh_func_end10:
+
+	.globl	_call_f_s1d
+	.align	4, 0x90
+_call_f_s1d:                            ## @call_f_s1d
+Ltmp79:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp80:
+	.cfi_def_cfa_offset 16
+Ltmp81:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp82:
+	.cfi_def_cfa_register %rbp
+	pxor	%xmm0, %xmm0
+	popq	%rbp
+	jmp	_f_s1d                  ## TAILCALL
+Ltmp83:
+	.cfi_endproc
+Leh_func_end11:
+
+	.globl	_call_f_s2d
+	.align	4, 0x90
+_call_f_s2d:                            ## @call_f_s2d
+Ltmp86:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp87:
+	.cfi_def_cfa_offset 16
+Ltmp88:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp89:
+	.cfi_def_cfa_register %rbp
+	pxor	%xmm0, %xmm0
+	pxor	%xmm1, %xmm1
+	popq	%rbp
+	jmp	_f_s2d                  ## TAILCALL
+Ltmp90:
+	.cfi_endproc
+Leh_func_end12:
+
+	.globl	_call_f_s4d
+	.align	4, 0x90
+_call_f_s4d:                            ## @call_f_s4d
+Ltmp93:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp94:
+	.cfi_def_cfa_offset 16
+Ltmp95:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp96:
+	.cfi_def_cfa_register %rbp
+	subq	$64, %rsp
+	xorps	%xmm0, %xmm0
+	movaps	%xmm0, -16(%rbp)
+	movaps	%xmm0, -32(%rbp)
+	movq	-8(%rbp), %rax
+	movq	%rax, 24(%rsp)
+	movq	-16(%rbp), %rax
+	movq	%rax, 16(%rsp)
+	movq	-32(%rbp), %rax
+	movq	-24(%rbp), %rcx
+	movq	%rcx, 8(%rsp)
+	movq	%rax, (%rsp)
+	callq	_f_s4d
+	addq	$64, %rsp
+	popq	%rbp
+	ret
+Ltmp97:
+	.cfi_endproc
+Leh_func_end13:
+
+	.globl	_call_f_s1q
+	.align	4, 0x90
+_call_f_s1q:                            ## @call_f_s1q
+Ltmp100:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp101:
+	.cfi_def_cfa_offset 16
+Ltmp102:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp103:
+	.cfi_def_cfa_register %rbp
+	subq	$32, %rsp
+	xorps	%xmm0, %xmm0
+	movaps	%xmm0, -16(%rbp)
+	movaps	-16(%rbp), %xmm0
+	movaps	%xmm0, (%rsp)
+	callq	_f_s1q
+	addq	$32, %rsp
+	popq	%rbp
+	ret
+Ltmp104:
+	.cfi_endproc
+Leh_func_end14:
+
+	.globl	_call_f_s2ds2d
+	.align	4, 0x90
+_call_f_s2ds2d:                         ## @call_f_s2ds2d
+Ltmp107:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp108:
+	.cfi_def_cfa_offset 16
+Ltmp109:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp110:
+	.cfi_def_cfa_register %rbp
+	pxor	%xmm0, %xmm0
+	pxor	%xmm1, %xmm1
+	pxor	%xmm2, %xmm2
+	pxor	%xmm3, %xmm3
+	popq	%rbp
+	jmp	_f_s2ds2d               ## TAILCALL
+Ltmp111:
+	.cfi_endproc
+Leh_func_end15:
+
+	.globl	_call_f_sfifi
+	.align	4, 0x90
+_call_f_sfifi:                          ## @call_f_sfifi
+Ltmp114:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp115:
+	.cfi_def_cfa_offset 16
+Ltmp116:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp117:
+	.cfi_def_cfa_register %rbp
+	movabsq	$4294967296, %rdi       ## imm = 0x100000000
+	movabsq	$13958643712, %rsi      ## imm = 0x340000000
+	popq	%rbp
+	jmp	_f_sfifi                ## TAILCALL
+Ltmp118:
+	.cfi_endproc
+Leh_func_end16:
+
+	.globl	_call_f_sifif
+	.align	4, 0x90
+_call_f_sifif:                          ## @call_f_sifif
+Ltmp121:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp122:
+	.cfi_def_cfa_offset 16
+Ltmp123:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp124:
+	.cfi_def_cfa_register %rbp
+	movabsq	$4575657221408423936, %rdi ## imm = 0x3F80000000000000
+	movabsq	$4629700416936869890, %rsi ## imm = 0x4040000000000002
+	popq	%rbp
+	jmp	_f_sifif                ## TAILCALL
+Ltmp125:
+	.cfi_endproc
+Leh_func_end17:
+
+	.globl	_call_f_full_sifif
+	.align	4, 0x90
+_call_f_full_sifif:                     ## @call_f_full_sifif
+Ltmp128:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp129:
+	.cfi_def_cfa_offset 16
+Ltmp130:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp131:
+	.cfi_def_cfa_register %rbp
+	subq	$48, %rsp
+	xorps	%xmm0, %xmm0
+	movaps	%xmm0, -16(%rbp)
+	movq	-16(%rbp), %rax
+	movq	-8(%rbp), %rcx
+	movq	%rcx, 24(%rsp)
+	movq	%rax, 16(%rsp)
+	movl	$7, 8(%rsp)
+	movl	$6, (%rsp)
+	movl	$0, %edi
+	movl	$1, %esi
+	movl	$2, %edx
+	movl	$3, %ecx
+	movl	$4, %r8d
+	movl	$5, %r9d
+	callq	_f_full_sifif
+	addq	$48, %rsp
+	popq	%rbp
+	ret
+Ltmp132:
+	.cfi_endproc
+Leh_func_end18:
+
+	.globl	_call_f_remain64_sifif
+	.align	4, 0x90
+_call_f_remain64_sifif:                 ## @call_f_remain64_sifif
+Ltmp135:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp136:
+	.cfi_def_cfa_offset 16
+Ltmp137:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp138:
+	.cfi_def_cfa_register %rbp
+	xorl	%edi, %edi
+	movl	$1, %esi
+	xorl	%edx, %edx
+	xorl	%ecx, %ecx
+	popq	%rbp
+	jmp	_f_remain64_sifif       ## TAILCALL
+Ltmp139:
+	.cfi_endproc
+Leh_func_end19:
+
+	.section	__TEXT,__const
+	.align	4
+LCPI20_0:
+	.long	0                       ## float 0.000000e+00
+	.long	1065353216              ## float 1.000000e+00
+	.space	4
+	.space	4
+	.section	__TEXT,__text,regular,pure_instructions
+	.globl	_call_f_sfffc
+	.align	4, 0x90
+_call_f_sfffc:                          ## @call_f_sfffc
+Ltmp142:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp143:
+	.cfi_def_cfa_offset 16
+Ltmp144:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp145:
+	.cfi_def_cfa_register %rbp
+	movaps	LCPI20_0(%rip), %xmm0
+	movabsq	$13958643712, %rdi      ## imm = 0x340000000
+	popq	%rbp
+	jmp	_f_sfffc                ## TAILCALL
+Ltmp146:
+	.cfi_endproc
+Leh_func_end20:
+
+	.section	__TEXT,__const
+	.align	4
+LCPI21_0:
+	.long	1073741824              ## float 2.000000e+00
+	.long	1077936128              ## float 3.000000e+00
+	.space	4
+	.space	4
+	.section	__TEXT,__text,regular,pure_instructions
+	.globl	_call_f_scfff
+	.align	4, 0x90
+_call_f_scfff:                          ## @call_f_scfff
+Ltmp149:
+	.cfi_startproc
+## BB#0:
+	pushq	%rbp
+Ltmp150:
+	.cfi_def_cfa_offset 16
+Ltmp151:
+	.cfi_offset %rbp, -16
+	movq	%rsp, %rbp
+Ltmp152:
+	.cfi_def_cfa_register %rbp
+	movaps	LCPI21_0(%rip), %xmm0
+	movabsq	$4575657221408423936, %rdi ## imm = 0x3F80000000000000
+	popq	%rbp
+	jmp	_f_scfff                ## TAILCALL
+Ltmp153:
+	.cfi_endproc
+Leh_func_end21:
+
+
+.subsections_via_symbols
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/composite/build.bat	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,1 @@
+cl /c /O2 args.c /Faargs.asm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/samples/composite/makefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,14 @@
+TARGETS=args.s
+
+#CC=gcc-mp-4.7 
+#TARGET_ARCH=-march=corei7-avx 
+#TARGET_ARCH=-march=corei7-avx -mavx -msse2avx
+#-mno-vzeroupper
+CFLAGS=-O3 
+#-fomit-frame-pointer -fno-exceptions 
+# -fno-rtti
+all: ${TARGETS}
+clean:
+	rm -f ${TARGETS}
+.c.s:
+	${CC} -S $< -o $@ ${CFLAGS} ${TARGET_ARCH} 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sharedlib/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,2 @@
+add_library(sharedlib SHARED sharedlib.c)
+target_link_libraries(sharedlib dynload_s)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sharedlib/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+MAKEFILE  = Makefile.embedded
+MAKE_CMD  = ${MAKE} -f ${MAKEFILE}
+TARGET    = libsharedlib.so
+OBJS      = sharedlib.o
+CPPFLAGS += -I../../dynload
+LDFLAGS  += -L../../dynload
+LDLIBS   += -ldynload_s
+
+${TARGET}: ${OBJS}
+	${CC} -shared -o $@ $? ${LDFLAGS} ${LDLIBS}
+all: ${TARGET}
+clean:
+	rm -f ${TARGET} ${OBJS}
+
+sun-gcc:
+	CC=gcc CFLAGS="${CFLAGS} -fPIC" ${MAKE_CMD} all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sharedlib/sharedlib.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,31 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/sharedlib/sharedlib.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "dynload.h"
+
+DLLib* mylib_load(char const *name)
+{
+  return dlLoadLibrary(name);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sign/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP     = sign
+OBJS    = sign.o 
+SRCTOP  = ${VPATH}/../..
+BLDTOP  = ../..
+CFLAGS += -I${SRCTOP}/dyncall
+LDLIBS += -L${BLDTOP}/dyncall -ldyncall_s 
+CFLAGS += -O3
+.PHONY: all clean install 
+all: ${APP}
+${APP}: ${OBJS} 
+	${CC} ${CFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP} 
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sign/sign.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,79 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/sign/sign.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+#include "dyncall.h"
+#include "../common/platformInit.h"
+
+// This program demonstrates the need for 'unsigned' integers and the
+// ability to implement zero/sign extensions for small integers.
+// This test program indicates failure on powerpc 32-bit with
+// compiler optimizations enabled (e.g. '-O2' compilation flags).
+//
+// A fix to be incorporated in the API is also given.
+//
+
+int add1s(unsigned short x) { return x + 1; }
+
+// API BUGFIX:
+#define dcArgUShort(vm,x) dcArgInt(vm,(int)(unsigned int)(x))
+
+// OLD TEST: int add1(unsigned char x) { return x + 1; }
+
+int main(int argc, char* argv[])
+{
+  DCCallVM* vm;
+  int result;
+  int total;
+  vm = dcNewCallVM(4096);
+  dcReset(vm);
+
+  dcArgShort(vm, 0xFFFF );
+  result = dcCallInt( vm, &add1s );
+  total = (result == 0x10000);
+  printf("result: sign: %d\n", total); 
+ 
+  if (!total) {
+    //
+    // TEST BUGFIX: use instead..
+    //
+    dcReset(vm);
+    dcArgUShort( vm, 0xFFFF );
+    result = dcCallInt( vm, &add1s );
+    total = (result == 0x10000);
+    printf("result: sign (bugfix): %d\n", total); 
+  }
+  
+  // result = dcCallInt( vm, &add1s );
+  // total = (result == 0x10000);
+  
+  // OLD TEST: updated to using 'short'
+  // dcArgChar( vm, (char) 255 );
+  // result = dcCallInt( vm, &add1 );
+  // total = (result == 256);
+  
+  // printf("result: sign: %d\n", total); 
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,8 @@
+add_executable(suite main.c case.c)
+if(WIN32)
+else()
+list(APPEND AUX_LIBS m)
+endif()
+target_link_libraries(suite dyncall_s ${AUX_LIBS})
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP      = suite
+OBJS     = case.o main.o
+SRCTOP   = ../..
+BLDTOP   = ../..
+CFLAGS  += -I${SRCTOP}/dyncall
+LDFLAGS += -L${BLDTOP}/dyncall
+LDLIBS  += -ldyncall_s 
+
+.PHONY: all clean autogen
+all: ${APP}
+${APP}: ${OBJS} 
+	${CC} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP}
+clean:
+	rm -f ${APP} ${OBJS}
+autogen:
+	python mkcase.py >case.h 2>config.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP     = suite
+OBJS    = case.o main.o
+SRCTOP  = ${VPATH}/../..
+BLDTOP  = ../..
+CFLAGS += -I${SRCTOP}/dyncall
+LDLIBS += -L${BLDTOP}/dyncall -ldyncall_s 
+.PHONY: all clean install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CC} ${CFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP}
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,69 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+AUTOS = config.h case.h
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = suite.exe
+OBJS = main.obj case.obj# ..\testmain\main_ansic.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib > nul
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = suite.nds
+OBJS = main.o case.o# ..\testmain\main_NDS.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+
+$(OBJS): $(AUTOS)
+
+$(AUTOS): mkcase.py
+	python mkcase.py >case.h 2>config.h
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,55 @@
+dyncall stress test suite: testing standard C calls
+===================================================
+Copyright (c) 2007-2009 Daniel Adler <dadler@uni-goettingen.de>, 
+                        Tassilo Philipp <tphilipp@potion-studios.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+requirements:
+  python (for preprocessing)
+
+configuration:
+  edit "nargs" in mkcase.py and run
+  
+    make distclean 
+    make 
+    
+  on shell.
+  
+
+usage:
+
+  suite         	        - run full range
+  suite <id> 			- run test id <id>
+  suite <from> <to>		- run test id <from> to id <to> (inclusive).
+
+  see test details in case.h
+
+
+description:
+
+  the test invokes 'void'-functions that effectively overwrite global 
+  variables in a structured way.
+  
+  functions are identified by an id (a number starting at 0).
+  
+  the implementation of each function does
+  
+    sets the gID to its id (which is compiled in) 
+  
+    sets all arguments into type-specific value vectors at the given position
+  
+
+   
+  
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite/case.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,97 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite/case.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+
+DCValue mValue[NARGS];
+
+void clearValues() { int i; for(i=0; i<NARGS; ++i) mValue[i].L = 0xCAFEBABEDEADC0DEULL; }
+
+void g_DCbool    (DCbool     value, int pos) { mValue[pos].B = value; }
+void g_DCchar    (DCchar     value, int pos) { mValue[pos].c = value; }
+void g_DCshort   (DCshort    value, int pos) { mValue[pos].s = value; }
+void g_DCint     (DCint      value, int pos) { mValue[pos].i = value; }
+void g_DClonglong(DClonglong value, int pos) { mValue[pos].l = value; }
+void g_DCfloat   (DCfloat    value, int pos) { mValue[pos].f = value; }
+void g_DCdouble  (DCdouble   value, int pos) { mValue[pos].d = value; }
+void g_DCpointer (DCpointer  value, int pos) { mValue[pos].p = value; }
+
+DCValue* getArg(int pos) { return &mValue[pos]; }
+
+int gID;
+int getId() { return gID; }
+
+// Generate function definitions.
+#define VF0( id,                               S)  void S(                                                              ) {gID=id;                                                                                                                                    }
+#define VF1( id,A1,                            S)  void S(A1 a1                                                         ) {gID=id;g_##A1(a1,0);                                                                                                                       }
+#define VF2( id,A1,A2,                         S)  void S(A1 a1, A2 a2                                                  ) {gID=id;g_##A1(a1,0);g_##A2(a2,1);                                                                                                          }
+#define VF3( id,A1,A2,A3,                      S)  void S(A1 a1, A2 a2,A3 a3                                            ) {gID=id;g_##A1(a1,0);g_##A2(a2,1);g_##A3(a3,2);                                                                                             }
+#define VF4( id,A1,A2,A3,A4,                   S)  void S(A1 a1, A2 a2,A3 a3,A4 a4                                      ) {gID=id;g_##A1(a1,0);g_##A2(a2,1);g_##A3(a3,2);g_##A4(a4,3);                                                                                }
+#define VF5( id,A1,A2,A3,A4,A5,                S)  void S(A1 a1, A2 a2,A3 a3,A4 a4,A5 a5                                ) {gID=id;g_##A1(a1,0);g_##A2(a2,1);g_##A3(a3,2);g_##A4(a4,3);g_##A5(a5,4);                                                                   }
+#define VF6( id,A1,A2,A3,A4,A5,A6,             S)  void S(A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6                          ) {gID=id;g_##A1(a1,0);g_##A2(a2,1);g_##A3(a3,2);g_##A4(a4,3);g_##A5(a5,4);g_##A6(a6,5);                                                      }
+#define VF7( id,A1,A2,A3,A4,A5,A6,A7,          S)  void S(A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7                    ) {gID=id;g_##A1(a1,0);g_##A2(a2,1);g_##A3(a3,2);g_##A4(a4,3);g_##A5(a5,4);g_##A6(a6,5);g_##A7(a7,6);                                         }
+#define VF8( id,A1,A2,A3,A4,A5,A6,A7,A8,       S)  void S(A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8              ) {gID=id;g_##A1(a1,0);g_##A2(a2,1);g_##A3(a3,2);g_##A4(a4,3);g_##A5(a5,4);g_##A6(a6,5);g_##A7(a7,6);g_##A8(a8,7);                            }
+#define VF9( id,A1,A2,A3,A4,A5,A6,A7,A8,A9,    S)  void S(A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9        ) {gID=id;g_##A1(a1,0);g_##A2(a2,1);g_##A3(a3,2);g_##A4(a4,3);g_##A5(a5,4);g_##A6(a6,5);g_##A7(a7,6);g_##A8(a8,7);g_##A9(a9,8);               }
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S)  void S(A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) {gID=id;g_##A1(a1,0);g_##A2(a2,1);g_##A3(a3,2);g_##A4(a4,3);g_##A5(a5,4);g_##A6(a6,5);g_##A7(a7,6);g_##A8(a8,7);g_##A9(a9,8);g_##A10(a10,9);}
+#include "case.h"
+
+
+// Generate function pointer table used for loop.
+#undef VF0
+#undef VF1
+#undef VF2
+#undef VF3
+#undef VF4
+#undef VF5
+#undef VF6
+#undef VF7
+#undef VF8
+#undef VF9
+#undef VF10
+
+#define VF0( id,                               S) (void(*)())(S),
+#define VF1( id,A1,                            S) (void(*)())(S),
+#define VF2( id,A1,A2,                         S) (void(*)())(S),
+#define VF3( id,A1,A2,A3,                      S) (void(*)())(S),
+#define VF4( id,A1,A2,A3,A4,                   S) (void(*)())(S),
+#define VF5( id,A1,A2,A3,A4,A5,                S) (void(*)())(S),
+#define VF6( id,A1,A2,A3,A4,A5,A6,             S) (void(*)())(S),
+#define VF7( id,A1,A2,A3,A4,A5,A6,A7,          S) (void(*)())(S),
+#define VF8( id,A1,A2,A3,A4,A5,A6,A7,A8,       S) (void(*)())(S),
+#define VF9( id,A1,A2,A3,A4,A5,A6,A7,A8,A9,    S) (void(*)())(S),
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) (void(*)())(S),
+
+typedef void (*fp)();
+fp gFuncTable[] = {
+#include "case.h"
+};
+
+DCpointer getFunc(int x) {
+  return (DCpointer)gFuncTable[x];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite/case.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,537 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite/case.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase.py (on stdout) */
+VF0(0,f_)
+VF1(1,DCdouble,f_d)
+VF1(2,DClonglong,f_l)
+VF2(3,DCdouble,DCdouble,f_dd)
+VF2(4,DClonglong,DCdouble,f_ld)
+VF2(5,DCdouble,DClonglong,f_dl)
+VF2(6,DClonglong,DClonglong,f_ll)
+VF3(7,DCdouble,DCdouble,DCdouble,f_ddd)
+VF3(8,DClonglong,DCdouble,DCdouble,f_ldd)
+VF3(9,DCdouble,DClonglong,DCdouble,f_dld)
+VF3(10,DClonglong,DClonglong,DCdouble,f_lld)
+VF3(11,DCdouble,DCdouble,DClonglong,f_ddl)
+VF3(12,DClonglong,DCdouble,DClonglong,f_ldl)
+VF3(13,DCdouble,DClonglong,DClonglong,f_dll)
+VF3(14,DClonglong,DClonglong,DClonglong,f_lll)
+VF4(15,DCdouble,DCdouble,DCdouble,DCdouble,f_dddd)
+VF4(16,DClonglong,DCdouble,DCdouble,DCdouble,f_lddd)
+VF4(17,DCdouble,DClonglong,DCdouble,DCdouble,f_dldd)
+VF4(18,DClonglong,DClonglong,DCdouble,DCdouble,f_lldd)
+VF4(19,DCdouble,DCdouble,DClonglong,DCdouble,f_ddld)
+VF4(20,DClonglong,DCdouble,DClonglong,DCdouble,f_ldld)
+VF4(21,DCdouble,DClonglong,DClonglong,DCdouble,f_dlld)
+VF4(22,DClonglong,DClonglong,DClonglong,DCdouble,f_llld)
+VF4(23,DCdouble,DCdouble,DCdouble,DClonglong,f_dddl)
+VF4(24,DClonglong,DCdouble,DCdouble,DClonglong,f_lddl)
+VF4(25,DCdouble,DClonglong,DCdouble,DClonglong,f_dldl)
+VF4(26,DClonglong,DClonglong,DCdouble,DClonglong,f_lldl)
+VF4(27,DCdouble,DCdouble,DClonglong,DClonglong,f_ddll)
+VF4(28,DClonglong,DCdouble,DClonglong,DClonglong,f_ldll)
+VF4(29,DCdouble,DClonglong,DClonglong,DClonglong,f_dlll)
+VF4(30,DClonglong,DClonglong,DClonglong,DClonglong,f_llll)
+VF5(31,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddddd)
+VF5(32,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_ldddd)
+VF5(33,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_dlddd)
+VF5(34,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_llddd)
+VF5(35,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_ddldd)
+VF5(36,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_ldldd)
+VF5(37,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_dlldd)
+VF5(38,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_llldd)
+VF5(39,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_dddld)
+VF5(40,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_lddld)
+VF5(41,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_dldld)
+VF5(42,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_lldld)
+VF5(43,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_ddlld)
+VF5(44,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_ldlld)
+VF5(45,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_dllld)
+VF5(46,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_lllld)
+VF5(47,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_ddddl)
+VF5(48,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_ldddl)
+VF5(49,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_dlddl)
+VF5(50,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_llddl)
+VF5(51,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_ddldl)
+VF5(52,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_ldldl)
+VF5(53,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_dlldl)
+VF5(54,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_llldl)
+VF5(55,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_dddll)
+VF5(56,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_lddll)
+VF5(57,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_dldll)
+VF5(58,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_lldll)
+VF5(59,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_ddlll)
+VF5(60,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_ldlll)
+VF5(61,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_dllll)
+VF5(62,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_lllll)
+VF6(63,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dddddd)
+VF6(64,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_lddddd)
+VF6(65,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_dldddd)
+VF6(66,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_lldddd)
+VF6(67,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_ddlddd)
+VF6(68,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_ldlddd)
+VF6(69,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_dllddd)
+VF6(70,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_lllddd)
+VF6(71,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_dddldd)
+VF6(72,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_lddldd)
+VF6(73,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_dldldd)
+VF6(74,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_lldldd)
+VF6(75,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_ddlldd)
+VF6(76,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_ldlldd)
+VF6(77,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_dllldd)
+VF6(78,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_lllldd)
+VF6(79,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_ddddld)
+VF6(80,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_ldddld)
+VF6(81,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_dlddld)
+VF6(82,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_llddld)
+VF6(83,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_ddldld)
+VF6(84,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_ldldld)
+VF6(85,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_dlldld)
+VF6(86,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_llldld)
+VF6(87,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_dddlld)
+VF6(88,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_lddlld)
+VF6(89,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_dldlld)
+VF6(90,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_lldlld)
+VF6(91,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_ddllld)
+VF6(92,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_ldllld)
+VF6(93,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_dlllld)
+VF6(94,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_llllld)
+VF6(95,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_dddddl)
+VF6(96,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_lddddl)
+VF6(97,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_dldddl)
+VF6(98,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_lldddl)
+VF6(99,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_ddlddl)
+VF6(100,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_ldlddl)
+VF6(101,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_dllddl)
+VF6(102,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_lllddl)
+VF6(103,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_dddldl)
+VF6(104,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_lddldl)
+VF6(105,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_dldldl)
+VF6(106,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_lldldl)
+VF6(107,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_ddlldl)
+VF6(108,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_ldlldl)
+VF6(109,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_dllldl)
+VF6(110,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_lllldl)
+VF6(111,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_ddddll)
+VF6(112,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_ldddll)
+VF6(113,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_dlddll)
+VF6(114,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_llddll)
+VF6(115,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_ddldll)
+VF6(116,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_ldldll)
+VF6(117,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_dlldll)
+VF6(118,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_llldll)
+VF6(119,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_dddlll)
+VF6(120,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_lddlll)
+VF6(121,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_dldlll)
+VF6(122,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_lldlll)
+VF6(123,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_ddllll)
+VF6(124,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_ldllll)
+VF6(125,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_dlllll)
+VF6(126,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_llllll)
+VF7(127,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddddddd)
+VF7(128,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ldddddd)
+VF7(129,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dlddddd)
+VF7(130,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_llddddd)
+VF7(131,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_ddldddd)
+VF7(132,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_ldldddd)
+VF7(133,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_dlldddd)
+VF7(134,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_llldddd)
+VF7(135,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_dddlddd)
+VF7(136,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_lddlddd)
+VF7(137,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_dldlddd)
+VF7(138,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_lldlddd)
+VF7(139,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_ddllddd)
+VF7(140,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_ldllddd)
+VF7(141,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_dlllddd)
+VF7(142,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_llllddd)
+VF7(143,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_ddddldd)
+VF7(144,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_ldddldd)
+VF7(145,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_dlddldd)
+VF7(146,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_llddldd)
+VF7(147,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_ddldldd)
+VF7(148,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_ldldldd)
+VF7(149,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_dlldldd)
+VF7(150,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_llldldd)
+VF7(151,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_dddlldd)
+VF7(152,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_lddlldd)
+VF7(153,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_dldlldd)
+VF7(154,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_lldlldd)
+VF7(155,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_ddllldd)
+VF7(156,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_ldllldd)
+VF7(157,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_dlllldd)
+VF7(158,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_llllldd)
+VF7(159,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_dddddld)
+VF7(160,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_lddddld)
+VF7(161,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_dldddld)
+VF7(162,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_lldddld)
+VF7(163,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_ddlddld)
+VF7(164,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_ldlddld)
+VF7(165,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_dllddld)
+VF7(166,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_lllddld)
+VF7(167,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_dddldld)
+VF7(168,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_lddldld)
+VF7(169,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_dldldld)
+VF7(170,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_lldldld)
+VF7(171,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_ddlldld)
+VF7(172,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_ldlldld)
+VF7(173,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_dllldld)
+VF7(174,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_lllldld)
+VF7(175,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_ddddlld)
+VF7(176,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_ldddlld)
+VF7(177,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_dlddlld)
+VF7(178,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_llddlld)
+VF7(179,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_ddldlld)
+VF7(180,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_ldldlld)
+VF7(181,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_dlldlld)
+VF7(182,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_llldlld)
+VF7(183,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_dddllld)
+VF7(184,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_lddllld)
+VF7(185,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_dldllld)
+VF7(186,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_lldllld)
+VF7(187,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_ddlllld)
+VF7(188,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_ldlllld)
+VF7(189,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_dllllld)
+VF7(190,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_lllllld)
+VF7(191,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_ddddddl)
+VF7(192,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_ldddddl)
+VF7(193,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_dlddddl)
+VF7(194,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_llddddl)
+VF7(195,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_ddldddl)
+VF7(196,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_ldldddl)
+VF7(197,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_dlldddl)
+VF7(198,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_llldddl)
+VF7(199,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_dddlddl)
+VF7(200,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_lddlddl)
+VF7(201,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_dldlddl)
+VF7(202,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_lldlddl)
+VF7(203,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_ddllddl)
+VF7(204,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_ldllddl)
+VF7(205,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_dlllddl)
+VF7(206,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_llllddl)
+VF7(207,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_ddddldl)
+VF7(208,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_ldddldl)
+VF7(209,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_dlddldl)
+VF7(210,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_llddldl)
+VF7(211,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_ddldldl)
+VF7(212,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_ldldldl)
+VF7(213,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_dlldldl)
+VF7(214,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_llldldl)
+VF7(215,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_dddlldl)
+VF7(216,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_lddlldl)
+VF7(217,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_dldlldl)
+VF7(218,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_lldlldl)
+VF7(219,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_ddllldl)
+VF7(220,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_ldllldl)
+VF7(221,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_dlllldl)
+VF7(222,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_llllldl)
+VF7(223,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_dddddll)
+VF7(224,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_lddddll)
+VF7(225,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_dldddll)
+VF7(226,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_lldddll)
+VF7(227,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_ddlddll)
+VF7(228,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_ldlddll)
+VF7(229,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_dllddll)
+VF7(230,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_lllddll)
+VF7(231,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_dddldll)
+VF7(232,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_lddldll)
+VF7(233,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_dldldll)
+VF7(234,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_lldldll)
+VF7(235,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_ddlldll)
+VF7(236,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_ldlldll)
+VF7(237,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_dllldll)
+VF7(238,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_lllldll)
+VF7(239,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_ddddlll)
+VF7(240,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_ldddlll)
+VF7(241,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_dlddlll)
+VF7(242,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_llddlll)
+VF7(243,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_ddldlll)
+VF7(244,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_ldldlll)
+VF7(245,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_dlldlll)
+VF7(246,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_llldlll)
+VF7(247,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_dddllll)
+VF7(248,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_lddllll)
+VF7(249,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_dldllll)
+VF7(250,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_lldllll)
+VF7(251,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_ddlllll)
+VF7(252,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_ldlllll)
+VF7(253,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_dllllll)
+VF7(254,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_lllllll)
+VF8(255,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dddddddd)
+VF8(256,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_lddddddd)
+VF8(257,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dldddddd)
+VF8(258,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_lldddddd)
+VF8(259,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddlddddd)
+VF8(260,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ldlddddd)
+VF8(261,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dllddddd)
+VF8(262,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_lllddddd)
+VF8(263,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_dddldddd)
+VF8(264,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_lddldddd)
+VF8(265,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_dldldddd)
+VF8(266,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_lldldddd)
+VF8(267,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_ddlldddd)
+VF8(268,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_ldlldddd)
+VF8(269,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_dllldddd)
+VF8(270,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,f_lllldddd)
+VF8(271,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_ddddlddd)
+VF8(272,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_ldddlddd)
+VF8(273,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_dlddlddd)
+VF8(274,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_llddlddd)
+VF8(275,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_ddldlddd)
+VF8(276,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_ldldlddd)
+VF8(277,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_dlldlddd)
+VF8(278,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,f_llldlddd)
+VF8(279,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_dddllddd)
+VF8(280,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_lddllddd)
+VF8(281,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_dldllddd)
+VF8(282,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_lldllddd)
+VF8(283,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_ddlllddd)
+VF8(284,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_ldlllddd)
+VF8(285,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_dllllddd)
+VF8(286,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,f_lllllddd)
+VF8(287,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_dddddldd)
+VF8(288,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_lddddldd)
+VF8(289,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_dldddldd)
+VF8(290,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_lldddldd)
+VF8(291,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_ddlddldd)
+VF8(292,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_ldlddldd)
+VF8(293,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_dllddldd)
+VF8(294,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,f_lllddldd)
+VF8(295,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_dddldldd)
+VF8(296,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_lddldldd)
+VF8(297,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_dldldldd)
+VF8(298,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_lldldldd)
+VF8(299,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_ddlldldd)
+VF8(300,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_ldlldldd)
+VF8(301,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_dllldldd)
+VF8(302,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,f_lllldldd)
+VF8(303,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_ddddlldd)
+VF8(304,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_ldddlldd)
+VF8(305,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_dlddlldd)
+VF8(306,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_llddlldd)
+VF8(307,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_ddldlldd)
+VF8(308,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_ldldlldd)
+VF8(309,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_dlldlldd)
+VF8(310,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,f_llldlldd)
+VF8(311,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_dddllldd)
+VF8(312,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_lddllldd)
+VF8(313,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_dldllldd)
+VF8(314,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_lldllldd)
+VF8(315,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_ddlllldd)
+VF8(316,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_ldlllldd)
+VF8(317,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_dllllldd)
+VF8(318,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,f_lllllldd)
+VF8(319,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_ddddddld)
+VF8(320,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_ldddddld)
+VF8(321,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_dlddddld)
+VF8(322,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_llddddld)
+VF8(323,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_ddldddld)
+VF8(324,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_ldldddld)
+VF8(325,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_dlldddld)
+VF8(326,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,f_llldddld)
+VF8(327,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_dddlddld)
+VF8(328,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_lddlddld)
+VF8(329,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_dldlddld)
+VF8(330,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_lldlddld)
+VF8(331,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_ddllddld)
+VF8(332,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_ldllddld)
+VF8(333,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_dlllddld)
+VF8(334,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,f_llllddld)
+VF8(335,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_ddddldld)
+VF8(336,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_ldddldld)
+VF8(337,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_dlddldld)
+VF8(338,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_llddldld)
+VF8(339,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_ddldldld)
+VF8(340,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_ldldldld)
+VF8(341,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_dlldldld)
+VF8(342,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,f_llldldld)
+VF8(343,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_dddlldld)
+VF8(344,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_lddlldld)
+VF8(345,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_dldlldld)
+VF8(346,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_lldlldld)
+VF8(347,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_ddllldld)
+VF8(348,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_ldllldld)
+VF8(349,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_dlllldld)
+VF8(350,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,f_llllldld)
+VF8(351,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_dddddlld)
+VF8(352,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_lddddlld)
+VF8(353,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_dldddlld)
+VF8(354,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_lldddlld)
+VF8(355,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_ddlddlld)
+VF8(356,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_ldlddlld)
+VF8(357,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_dllddlld)
+VF8(358,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,f_lllddlld)
+VF8(359,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_dddldlld)
+VF8(360,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_lddldlld)
+VF8(361,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_dldldlld)
+VF8(362,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_lldldlld)
+VF8(363,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_ddlldlld)
+VF8(364,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_ldlldlld)
+VF8(365,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_dllldlld)
+VF8(366,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,f_lllldlld)
+VF8(367,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_ddddllld)
+VF8(368,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_ldddllld)
+VF8(369,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_dlddllld)
+VF8(370,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_llddllld)
+VF8(371,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_ddldllld)
+VF8(372,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_ldldllld)
+VF8(373,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_dlldllld)
+VF8(374,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,f_llldllld)
+VF8(375,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_dddlllld)
+VF8(376,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_lddlllld)
+VF8(377,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_dldlllld)
+VF8(378,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_lldlllld)
+VF8(379,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_ddllllld)
+VF8(380,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_ldllllld)
+VF8(381,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_dlllllld)
+VF8(382,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,f_llllllld)
+VF8(383,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_dddddddl)
+VF8(384,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_lddddddl)
+VF8(385,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_dldddddl)
+VF8(386,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_lldddddl)
+VF8(387,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_ddlddddl)
+VF8(388,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_ldlddddl)
+VF8(389,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_dllddddl)
+VF8(390,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,f_lllddddl)
+VF8(391,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_dddldddl)
+VF8(392,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_lddldddl)
+VF8(393,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_dldldddl)
+VF8(394,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_lldldddl)
+VF8(395,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_ddlldddl)
+VF8(396,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_ldlldddl)
+VF8(397,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_dllldddl)
+VF8(398,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,f_lllldddl)
+VF8(399,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_ddddlddl)
+VF8(400,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_ldddlddl)
+VF8(401,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_dlddlddl)
+VF8(402,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_llddlddl)
+VF8(403,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_ddldlddl)
+VF8(404,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_ldldlddl)
+VF8(405,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_dlldlddl)
+VF8(406,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,f_llldlddl)
+VF8(407,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_dddllddl)
+VF8(408,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_lddllddl)
+VF8(409,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_dldllddl)
+VF8(410,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_lldllddl)
+VF8(411,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_ddlllddl)
+VF8(412,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_ldlllddl)
+VF8(413,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_dllllddl)
+VF8(414,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,f_lllllddl)
+VF8(415,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_dddddldl)
+VF8(416,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_lddddldl)
+VF8(417,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_dldddldl)
+VF8(418,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_lldddldl)
+VF8(419,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_ddlddldl)
+VF8(420,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_ldlddldl)
+VF8(421,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_dllddldl)
+VF8(422,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,f_lllddldl)
+VF8(423,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_dddldldl)
+VF8(424,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_lddldldl)
+VF8(425,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_dldldldl)
+VF8(426,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_lldldldl)
+VF8(427,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_ddlldldl)
+VF8(428,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_ldlldldl)
+VF8(429,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_dllldldl)
+VF8(430,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,f_lllldldl)
+VF8(431,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_ddddlldl)
+VF8(432,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_ldddlldl)
+VF8(433,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_dlddlldl)
+VF8(434,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_llddlldl)
+VF8(435,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_ddldlldl)
+VF8(436,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_ldldlldl)
+VF8(437,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_dlldlldl)
+VF8(438,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,f_llldlldl)
+VF8(439,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_dddllldl)
+VF8(440,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_lddllldl)
+VF8(441,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_dldllldl)
+VF8(442,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_lldllldl)
+VF8(443,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_ddlllldl)
+VF8(444,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_ldlllldl)
+VF8(445,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_dllllldl)
+VF8(446,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,f_lllllldl)
+VF8(447,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_ddddddll)
+VF8(448,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_ldddddll)
+VF8(449,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_dlddddll)
+VF8(450,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_llddddll)
+VF8(451,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_ddldddll)
+VF8(452,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_ldldddll)
+VF8(453,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_dlldddll)
+VF8(454,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,f_llldddll)
+VF8(455,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_dddlddll)
+VF8(456,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_lddlddll)
+VF8(457,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_dldlddll)
+VF8(458,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_lldlddll)
+VF8(459,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_ddllddll)
+VF8(460,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_ldllddll)
+VF8(461,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_dlllddll)
+VF8(462,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,f_llllddll)
+VF8(463,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_ddddldll)
+VF8(464,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_ldddldll)
+VF8(465,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_dlddldll)
+VF8(466,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_llddldll)
+VF8(467,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_ddldldll)
+VF8(468,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_ldldldll)
+VF8(469,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_dlldldll)
+VF8(470,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,f_llldldll)
+VF8(471,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_dddlldll)
+VF8(472,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_lddlldll)
+VF8(473,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_dldlldll)
+VF8(474,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_lldlldll)
+VF8(475,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_ddllldll)
+VF8(476,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_ldllldll)
+VF8(477,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_dlllldll)
+VF8(478,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,f_llllldll)
+VF8(479,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_dddddlll)
+VF8(480,DClonglong,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_lddddlll)
+VF8(481,DCdouble,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_dldddlll)
+VF8(482,DClonglong,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_lldddlll)
+VF8(483,DCdouble,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_ddlddlll)
+VF8(484,DClonglong,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_ldlddlll)
+VF8(485,DCdouble,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_dllddlll)
+VF8(486,DClonglong,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,f_lllddlll)
+VF8(487,DCdouble,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_dddldlll)
+VF8(488,DClonglong,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_lddldlll)
+VF8(489,DCdouble,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_dldldlll)
+VF8(490,DClonglong,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_lldldlll)
+VF8(491,DCdouble,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_ddlldlll)
+VF8(492,DClonglong,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_ldlldlll)
+VF8(493,DCdouble,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_dllldlll)
+VF8(494,DClonglong,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,f_lllldlll)
+VF8(495,DCdouble,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_ddddllll)
+VF8(496,DClonglong,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_ldddllll)
+VF8(497,DCdouble,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_dlddllll)
+VF8(498,DClonglong,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_llddllll)
+VF8(499,DCdouble,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_ddldllll)
+VF8(500,DClonglong,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_ldldllll)
+VF8(501,DCdouble,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_dlldllll)
+VF8(502,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,f_llldllll)
+VF8(503,DCdouble,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_dddlllll)
+VF8(504,DClonglong,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_lddlllll)
+VF8(505,DCdouble,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_dldlllll)
+VF8(506,DClonglong,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_lldlllll)
+VF8(507,DCdouble,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_ddllllll)
+VF8(508,DClonglong,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_ldllllll)
+VF8(509,DCdouble,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_dlllllll)
+VF8(510,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,f_llllllll)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite/config.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,28 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite/config.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase (on stderr) */
+#define NARGS  8
+#define NTYPES 2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite/main.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,188 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite/main.c
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+#include <math.h>
+#include <stdlib.h>
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+int       getId();
+DCpointer getFunc(int x);
+DCValue*  getArg(int pos);
+
+
+typedef double precise;
+
+
+DCbool     valueBool    [NARGS];
+DCshort    valueShort   [NARGS];
+DCchar     valueChar    [NARGS];
+DCint      valueInt     [NARGS];
+DClonglong valueLongLong[NARGS];
+DCdouble   valueDouble  [NARGS];
+DCpointer  valuePointer [NARGS];
+DCfloat    valueFloat   [NARGS];
+
+enum {
+  ID_DOUBLE = 0,
+  ID_LONGLONG,
+  ID_INT,
+  ID_POINTER,
+  ID_BOOL,
+  ID_FLOAT
+};
+
+DCbool equals(int select, int pos, void* data)
+{
+  switch(select)
+  {
+    case ID_BOOL:     return ( getArg(pos)->B == valueBool    [pos] ); break;
+    case ID_INT:      return ( getArg(pos)->i == valueInt     [pos] ); break;
+    case ID_LONGLONG: return ( getArg(pos)->l == valueLongLong[pos] ); break;
+    case ID_DOUBLE:   return ( getArg(pos)->d == valueDouble  [pos] ); break;
+    case ID_POINTER:  return ( getArg(pos)->p == valuePointer [pos] ); break;
+    case ID_FLOAT:    return ( getArg(pos)->f == valueFloat   [pos] ); break;
+  }
+  return DC_FALSE;
+}
+
+
+void clearValues();
+
+
+void init()
+{
+  int i;
+  for(i=0; i<NARGS; ++i)
+  {
+    valueBool[i]     = (DCbool)((i % 1) ? DC_TRUE : DC_FALSE);
+    valueInt[i]      = (DCint)     (i);
+    valueLongLong[i] = (DClonglong)(i);
+    valueDouble[i]   = (DCdouble)  (i);
+    valuePointer[i]  = (DCpointer) (ptrdiff_t) (i);
+    valueFloat[i]    = (DCfloat)   (i);
+  } 
+}
+
+
+void push(DCCallVM* pCall, int select, int pos)
+{
+  switch(select) 
+  {
+    case ID_BOOL: dcArgBool    ( pCall, valueBool    [pos] ); break;
+    case ID_INT: dcArgInt     ( pCall, valueInt     [pos] ); break;
+    case ID_LONGLONG: dcArgLongLong( pCall, valueLongLong[pos] ); break;
+    case ID_DOUBLE: dcArgDouble  ( pCall, valueDouble  [pos] ); break;
+    case ID_POINTER: dcArgPointer ( pCall, valuePointer [pos] ); break;
+    case ID_FLOAT: dcArgFloat   ( pCall, valueFloat   [pos] ); break;
+  }
+}
+
+
+#define assert(x) if (!(x)) return DC_FALSE
+
+
+DCbool test(int x)
+{
+  int y = x;
+  int selects[NARGS] = { 0, };
+  int pos, i;
+
+  DCCallVM* pCall = dcNewCallVM(4096);
+  dcReset(pCall);
+  clearValues();
+
+  for(pos = 0; y>0; ++pos) 
+  {
+    int select = (y-1) % NTYPES; 
+    selects[pos] = select;
+    push(pCall,select,pos);
+    y = (y-1) / NTYPES;
+  }
+  dcCallVoid(pCall,getFunc(x));
+  
+  assert( getId() == x );
+  
+  for(i = 0;i<pos;++i) {
+    assert( equals( selects[i], i, getArg(i) ) );      
+  }
+  
+  dcFree(pCall);
+  return DC_TRUE;
+}
+
+
+int powerfact(int x, int n)
+{
+  if(n==0) return 0;
+  return (int)(pow((double)x,n)+powerfact(x,n-1));
+}
+
+
+DCbool run_range(int from, int to)
+{
+  DCbool tr = DC_TRUE, r;
+  int i;
+  for(i=from; i<to; ++i) {
+    printf("%d:",i);
+    r = test(i);
+    printf("%d\n", r);
+    tr &= r;
+  }
+  return tr;
+}
+
+
+int main(int argc, char* argv[])
+{
+  DCbool success = DC_FALSE;
+
+  dcTest_initPlatform();
+
+  init();
+  if (argc == 2) {
+    int index = atoi(argv[1]);
+    success = run_range( index, index+1 ); 
+  } else if (argc == 3) {
+    int from = atoi(argv[1]);
+    int to   = atoi(argv[2])+1;
+    success = run_range(from,to);
+  } else {
+    int ncalls = powerfact(NTYPES,NARGS)+1;
+    success = run_range(0,ncalls);
+  }
+
+  printf("result: suite: %s\n", success ? "1" : "0");
+
+  dcTest_deInitPlatform();
+
+  return (success) ? 0 : -1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite/mkcase.py	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2011 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+import sys
+
+# parameters
+
+nargs    = 8
+
+#TODO: enable all types. temporary disabled for debuggin sparc64.
+types    = ["DCdouble","DClonglong"]#,"DCint","DCpointer","DCbool"]#,"DCfloat"]
+typeSigs = ["d"       ,"l"         ]#,"i"    ,"p"        ,"B"     ]#,"f"      ]
+
+# generator
+
+ntypes = len(types)
+
+sys.stderr.write("/* auto generated by mkcase (on stderr) */\n");
+sys.stderr.write("".join(["#define NARGS  ",str(nargs),"\n"]))
+sys.stderr.write("".join(["#define NTYPES ",str(ntypes),"\n"]))
+
+def powerfact(x, n):
+  if n==0:
+    return 0
+  else:
+    return x**n+powerfact(x,n-1)
+
+x     = 0
+end   = powerfact(ntypes,nargs)+1
+
+sys.stdout.write("/* auto generated by mkcase.py (on stdout) */\n");
+
+while x < end:
+  args = [str(x)]
+  sig  = ["f_"]
+  pos  = 0
+  y    = x
+  while y > 0:
+    s     = (y-1) % ntypes
+    y     = (y-1) / ntypes
+    args += [ types   [s] ]
+    sig  += [ typeSigs[s] ]
+    pos  += 1
+  sig   = "".join(sig)
+  args += [ sig ]
+  args  = ",".join(args)
+  sys.stdout.write( "".join(["VF",str(pos),"(",args,")\n"]) )
+  x += 1
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,35 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+TOP		= ../..
+<$TOP/buildsys/mk/prolog.mk
+
+
+UNITS       = case main
+APPLICATION = suite
+LIBS        = $TOP/dyncall/libdyncall_s.a$O
+
+#.PHONY: config 
+#config: mkcase.py
+#        echo Generating test cases...
+#        python mkcase.py >case.h 2>config.h
+
+
+<$TOP/buildsys/mk/epilog.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+add_executable(suite2 case.cc main.cc)
+target_link_libraries(suite2 dyncall_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,21 @@
+APP  = suite2
+OBJS = case.o main.o
+
+TOP      = ../..
+CFLAGS  += -I${TOP}/dyncall
+LDFLAGS += -L${TOP}/dyncall
+LDLIBS  += -ldyncall_s
+
+all: ${APP}
+
+
+.PHONY: all clean autogen
+
+${APP}: ${OBJS} 
+	${CXX} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP} 
+
+clean:
+	rm -f ${APP} ${OBJS}
+
+autogen:
+	python mkcase.py 1>case.h 2>config.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+APP       = suite2
+OBJS      = case.o main.o
+SRCTOP    = ${VPATH}/../..
+BLDTOP    = ../..
+CXXFLAGS += -I${SRCTOP}/dyncall
+LDLIBS   += -L${BLDTOP}/dyncall -ldyncall_s
+.PHONY: all clean configure install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CXX} ${CXXFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP} 
+clean:
+	rm -f ${APP} ${OBJS}
+configure:
+	python mkcase.py 1>case.h 2>config.h
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,72 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+AUTOS = config.h case.h design.cfg
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = suite2.exe
+OBJS = main.obj case.obj# ..\testmain\main_ansic.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib > nul
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = suite2.nds
+OBJS = main.o case.o# ..\testmain\main_NDS.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+
+$(OBJS): $(AUTOS)
+
+case.h config.h: mkcase.py
+	python mkcase.py >case.h 2>config.h
+
+mkcase.py: design.cfg
+design.cfg: rand.py
+	python rand.py >$@
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/case.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,128 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2/case.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+#include "funcinfo.h"
+
+DCValue mValue[MAXARGS];
+
+void clearValues() { for(int i = 0;i<MAXARGS;++i) mValue[i].L = 0xCAFEBABEDEADC0DEULL; }
+
+template<typename T> void g(T value, int pos);
+
+template<> void g(DCchar     value, int pos) { mValue[pos].c = value; }
+template<> void g(DCshort    value, int pos) { mValue[pos].s = value; }
+template<> void g(DCint      value, int pos) { mValue[pos].i = value; }
+template<> void g(DCpointer  value, int pos) { mValue[pos].p = value; }
+template<> void g(DClonglong value, int pos) { mValue[pos].l = value; }
+template<> void g(DCfloat    value, int pos) { mValue[pos].f = value; }
+template<> void g(DCdouble   value, int pos) { mValue[pos].d = value; }
+
+DCValue* getArg(int pos) { return &mValue[pos]; }
+
+int gID;
+int getId() { return gID; }
+
+extern "C" {
+
+#define VF0(id,S) void  f##id () {gID=id;}
+#define VF1(id,A1,S) void  f##id (A1 a1) {gID=id;g<A1>(a1,0);}
+#define VF2(id,A1,A2,S) void  f##id (A1 a1, A2 a2) {gID=id;g<A1>(a1,0);g<A2>(a2,1);}
+#define VF3(id,A1,A2,A3,S) void  f##id (A1 a1, A2 a2,A3 a3) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);}
+#define VF4(id,A1,A2,A3,A4,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);}
+#define VF5(id,A1,A2,A3,A4,A5,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);}
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);}
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);}
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);}
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);}
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);}
+#define VF11(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);}
+#define VF12(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);}
+#define VF13(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);}
+#define VF14(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);}
+#define VF15(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);}
+#define VF16(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);}
+#define VF17(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16,A17 a17) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);g<A17>(a17,16);}
+#define VF18(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16,A17 a17,A18 a18) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);g<A17>(a17,16);g<A18>(a18,17);}
+#define VF19(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16,A17 a17,A18 a18,A19 a19) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);g<A17>(a17,16);g<A18>(a18,17);g<A19>(a19,18);}
+#define VF20(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,S) void  f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16,A17 a17,A18 a18,A19 a19,A20 a20) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);g<A17>(a17,16);g<A18>(a18,17);g<A19>(a19,18);g<A20>(a20,19);}
+
+#include "case.h"
+
+}
+
+#undef VF0
+#undef VF1
+#undef VF2
+#undef VF3
+#undef VF4
+#undef VF5
+#undef VF6
+#undef VF7
+#undef VF8
+#undef VF9
+#undef VF10
+#undef VF11
+#undef VF12
+#undef VF13
+#undef VF14
+#undef VF15
+#undef VF16
+#undef VF17
+#undef VF18
+#undef VF19
+#undef VF20
+
+#define VF0(id,S) { (void*)(f##id), #S },
+#define VF1(id,A1,S) { (void*)(f##id), #S },
+#define VF2(id,A1,A2,S) { (void*)(f##id), #S },
+#define VF3(id,A1,A2,A3,S) { (void*)(f##id), #S },
+#define VF4(id,A1,A2,A3,A4,S) { (void*)(f##id), #S },
+#define VF5(id,A1,A2,A3,A4,A5,S) { (void*)(f##id), #S },
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) { (void*)(f##id), #S },
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) { (void*)(f##id), #S },
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) { (void*)(f##id), #S },
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) { (void*)(f##id), #S },
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) { (void*)(f##id), #S },
+#define VF11(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,S) { (void*)(f##id), #S },
+#define VF12(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,S) { (void*)(f##id), #S },
+#define VF13(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,S) { (void*)(f##id), #S },
+#define VF14(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,S) { (void*)(f##id), #S },
+#define VF15(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,S) { (void*)(f##id), #S },
+#define VF16(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,S) { (void*)(f##id), #S },
+#define VF17(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,S) { (void*)(f##id), #S },
+#define VF18(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,S) { (void*)(f##id), #S },
+#define VF19(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,S) { (void*)(f##id), #S },
+#define VF20(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,S) { (void*)(f##id), #S },
+
+funcinfo gFuncInfos[] = {
+
+#include "case.h"
+
+}; 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/case.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,42 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2/case.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase.py (on stdout) */
+VF10(0,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,s_dddddddddd)
+VF10(1,DCint,DCint,DCint,DCint,DCint,DCint,DCint,DCint,DCint,DCint,s_iiiiiiiiii)
+VF14(2,DCint,DCint,DCint,DCint,DCint,DCint,DCint,DCint,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,s_iiiiiiiiffffff)
+VF14(3,DCint,DCint,DCint,DCint,DCint,DCint,DCint,DCint,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,s_iiiiiiiidddddd)
+VF10(4,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,s_ffffffffff)
+VF10(5,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,DClonglong,s_llllllllll)
+VF10(6,DCint,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,s_ifffffffff)
+VF10(7,DCint,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,s_iddddddddd)
+VF10(8,DCint,DCdouble,DCfloat,DCdouble,DCint,DCdouble,DCfloat,DCdouble,DCint,DCdouble,s_idfdidfdid)
+VF10(9,DCfloat,DCdouble,DCfloat,DCdouble,DCint,DCdouble,DCint,DCdouble,DCfloat,DCdouble,s_fdfdididfd)
+VF10(10,DCfloat,DCdouble,DCint,DCdouble,DCint,DCdouble,DCint,DCdouble,DCint,DCdouble,s_fdidididid)
+VF10(11,DCfloat,DCfloat,DCint,DCdouble,DCint,DCdouble,DCint,DCdouble,DCint,DCdouble,s_ffidididid)
+VF6(12,DCdouble,DCint,DCdouble,DCdouble,DCdouble,DCdouble,s_didddd)
+VF6(13,DCdouble,DCfloat,DCdouble,DCint,DCdouble,DCdouble,s_dfdidd)
+VF6(14,DCint,DClonglong,DCfloat,DClonglong,DCfloat,DClonglong,s_ilflfl)
+VF6(15,DCdouble,DCdouble,DCint,DCdouble,DCdouble,DCdouble,s_ddiddd)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/config.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,28 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2/config.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase (on stderr) */
+#define NCASES 16
+#define MAXARGS 14
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/design.cfg	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+
+dddddddddd
+iiiiiiiiii
+iiiiiiiiffffff
+iiiiiiiidddddd
+ffffffffff
+llllllllll
+ifffffffff
+iddddddddd
+idfdidfdid
+fdfdididfd
+fdidididid
+ffidididid
+didddd
+dfdidd
+ilflfl
+ddiddd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/funcinfo.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,41 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2/funcinfo.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DC_TEST_FUNCINFO_H
+#define DC_TEST_FUNCINFO_H
+
+#include "../../dyncall/dyncall_signature.h"
+
+struct funcinfo
+{
+  DCpointer        funcptr;
+  const DCsigchar* sig;
+};
+
+extern funcinfo gFuncInfos[];
+
+#endif /* DC_TEST_FUNCINFO_H */ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/ints.cfg	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,11 @@
+
+i
+ii
+iii
+iiii
+iiiii
+iiiiii
+iiiiiii
+iiiiiiii
+iiiiiiiii
+iiiiiiiiii
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/main.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,182 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2/main.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+#include "funcinfo.h"
+#include <stdlib.h>
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+int   getId();
+DCpointer getFunc(int x);
+DCValue* getArg(int pos);
+
+
+typedef double precise;
+
+
+DCbool     valueBool    [MAXARGS];
+DCchar     valueChar    [MAXARGS];
+DCshort    valueShort   [MAXARGS];
+DCint      valueInt     [MAXARGS];
+DClonglong valueLongLong[MAXARGS];
+DCdouble   valueDouble  [MAXARGS];
+DCpointer  valuePointer [MAXARGS];
+DCfloat    valueFloat   [MAXARGS];
+
+
+void clearValues();
+
+void error(const char* message)
+{
+  fprintf(stderr, "error: %s\n", message);
+  exit(-1);
+}
+
+void init()
+{
+  for (int i = 0 ; i < MAXARGS ; ++i ) {
+
+    valueBool[i]     = DCbool( (i % 1) ? DC_TRUE : DC_FALSE );
+    valueChar[i]     = DCchar(i);
+    valueShort[i]    = DCshort(i);
+    valueInt[i]      = DCint(i);
+    valueLongLong[i] = DClonglong(i);
+    valueDouble[i]   = DCdouble(i);
+    valuePointer[i]  = DCpointer( (ptrdiff_t) i);
+    valueFloat[i]    = DCfloat(i);
+  }
+}
+
+
+bool test(int x)
+{
+  bool r = true;
+  clearValues();
+
+  DCCallVM* pCall;
+
+  funcinfo* fi = &gFuncInfos[x];
+
+  const DCsigchar* sig = &fi->sig[2];
+  const DCsigchar* ptr = sig;
+  DCsigchar ch;
+  int pos;
+ 
+  pos = 0;
+
+  pCall = dcNewCallVM(4096);
+  dcReset(pCall);
+ 
+  while ( (ch=*ptr++) != '\0' ) {
+    switch(ch) {
+      case DC_SIGCHAR_BOOL:     dcArgBool    ( pCall, valueBool    [pos] ); break;
+      case DC_SIGCHAR_CHAR:     dcArgChar    ( pCall, valueChar    [pos] ); break;
+      case DC_SIGCHAR_SHORT:    dcArgShort   ( pCall, valueShort   [pos] ); break;
+      case DC_SIGCHAR_INT:      dcArgInt     ( pCall, valueInt     [pos] ); break;
+      case DC_SIGCHAR_LONGLONG: dcArgLongLong( pCall, valueLongLong[pos] ); break;
+      case DC_SIGCHAR_FLOAT:    dcArgFloat   ( pCall, valueFloat   [pos] ); break;
+      case DC_SIGCHAR_DOUBLE:   dcArgDouble  ( pCall, valueDouble  [pos] ); break;
+      case DC_SIGCHAR_POINTER:  dcArgPointer ( pCall, valuePointer [pos] ); break;
+      default: error("unsupported signature character"); break;
+    }
+    ++pos;
+  }
+
+  dcCallVoid( pCall, fi->funcptr );
+
+ 
+  if ( getId() == x ) { 
+
+    ptr = sig;
+    pos = 0;
+    while( ( ch=*ptr++ ) != '\0' ) {
+
+      switch(ch) {
+        case DC_SIGCHAR_BOOL: if ( getArg(pos)->B != valueBool  [pos] ) r = false; break;
+        case DC_SIGCHAR_CHAR: if ( getArg(pos)->c != valueChar  [pos] ) r = false; break;
+        case DC_SIGCHAR_SHORT: if ( getArg(pos)->s != valueShort  [pos] ) r = false; break;
+        case DC_SIGCHAR_INT: if ( getArg(pos)->i != valueInt   [pos] ) r = false; break;
+        case DC_SIGCHAR_LONGLONG: if ( getArg(pos)->L != valueLongLong  [pos] ) r = false; break;
+        case DC_SIGCHAR_FLOAT: if ( getArg(pos)->f != valueFloat [pos] ) r = false; break;
+        case DC_SIGCHAR_DOUBLE: if ( getArg(pos)->d != valueDouble[pos] ) r = false; break;
+        case DC_SIGCHAR_POINTER: if ( getArg(pos)->p != valuePointer   [pos] ) r = false; break;
+        default: error("unsupported signature character"); break;
+      }
+      ++pos;
+    }
+
+  } else {
+    r = false;
+  }
+
+  printf("%d-%s:%d\n", x, sig, r);
+   
+  dcFree(pCall);
+
+  return r;
+}
+
+
+bool run_range(int from, int to)
+{
+  bool r = true;
+  for (int i = from ; i < to ; ++i )
+    r &= test(i);
+  return r;
+}
+
+extern "C" {
+
+int main(int argc, char* argv[])
+{
+  dcTest_initPlatform();
+
+  bool success = false;
+  init();
+  if (argc == 2) {
+    int index = atoi(argv[1]);
+    success = run_range( index, index+1 ); 
+  } else if (argc == 3) {
+    int from = atoi(argv[1]);
+    int to   = atoi(argv[2])+1;
+    success = run_range(from,to);
+  } else {
+    success = run_range(0,NCASES);
+  }
+
+  printf("result: suite2: %s\n", success ? "1" : "0");
+
+  dcTest_deInitPlatform();
+
+  return (success) ? 0 : -1;
+}
+
+}  // extern "C"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/mkcase.py	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,67 @@
+#!/usr/bin/python
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+import sys
+
+f = file("design.cfg")
+
+sigmap = { 
+  'B':'DCbool'
+, 'c':'DCchar'
+, 's':'DCshort'
+, 'i':'DCint'
+, 'l':'DClonglong'
+, 'f':'DCfloat'
+, 'd':'DCdouble'
+, 'p':'DCpointer'
+}
+
+apimap = {
+  '_':''
+, 's':'__declspec(stdcall)'
+, 'f':'__declspec(fastcall)'
+}
+
+id = 0
+maxargs = 0
+sys.stdout.write("/* auto generated by mkcase.py (on stdout) */\n");
+for line in f: 
+  line = line.rstrip().lstrip()
+  if len(line) == 0 or line[0] == '#': continue
+  types = [];
+  # args  = len(line)-1
+  args = len(line)
+  maxargs = max(maxargs, args)
+  # api = apimap[ line[0] ]
+  out = [ "VF",str(args),"(", str(id), "," ];
+  for i in xrange(0,len(line)):   
+    types += [ sigmap[ line[i] ] ]
+  out += [ ",".join( types ), ",s_", line, ")\n" ]
+  out = "".join(out)
+  sys.stdout.write(out)
+  id  += 1
+
+sys.stderr.write("/* auto generated by mkcase (on stderr) */\n");
+sys.stderr.write("".join( ["#define NCASES ",str(id),"\n"] ) )
+sys.stderr.write("".join( ["#define MAXARGS ",str(maxargs),"\n"] ) )
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/rand.py	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+#!/usr/bin/python
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+import random
+import sys
+
+N = 1000
+MINARG = 0
+MAXARG = 19
+
+argtypes = [ 'B','c','s','i','l','f','d','p' ]
+apitypes = [ '_' ]
+
+def sig(n):
+  s = ""
+  x = random.randint( 0, len(apitypes)-1 )
+  # s += apitypes[x]
+  for i in xrange(0,n):
+    x = random.randint( 0, len(argtypes)-1 )
+    s += argtypes[x]
+  return s
+
+for i in xrange(0,N):
+  n = random.randint(MINARG,MAXARG)
+  sys.stdout.write( sig(n) )
+  sys.stdout.write( "\n" )
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2/stress1.cfg	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+
+dddddddddd
+iiiiiiiiii
+iiiiiiiiffffff
+iiiiiiiidddddd
+ffffffffff
+llllllllll
+ifffffffff
+iddddddddd
+idfdidfdid
+fdfdididfd
+fdidididid
+ffidididid
+didddd
+dfdidd
+ilflfl
+ddiddd
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32fast/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+add_executable(suite2_x86win32fast case.cc main.cc)
+target_link_libraries(suite2_x86win32fast dyncall_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32fast/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32fast/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,24 @@
+APP = suite2_x86win32fast
+OBJS = case.o main.o
+
+TOP     = ../..
+CFLAGS  = -I${TOP}/dyncall
+LDFLAGS = -L${TOP}/dyncall
+LDLIBS  = -ldyncall_s
+LINK    = ${CXX}
+
+all: ${APP}
+
+.PHONY: all clean install
+
+RM      ?= rm -f
+AR      ?= ar
+MKDIR   ?= mkdir
+INSTALL ?= install -p
+
+${APP}: ${OBJS} 
+	${LINK} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP} ${TARGET_ARCH}
+
+clean:
+	${RM} ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32fast/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,69 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+AUTOS = config.h case.h
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = suite2.exe
+OBJS = main.obj case.obj# ..\testmain\main_ansic.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib > nul
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = suite2.nds
+OBJS = main.o case.o# ..\testmain\main_NDS.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+
+$(OBJS): $(AUTOS)
+
+$(AUTOS): mkcase.py
+	python mkcase.py >case.h 2>config.h
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32fast/case.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,137 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2_x86win32fast/case.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+#include "funcinfo.h"
+
+#ifdef DC__C_GNU
+#define API __attribute__((fastcall))
+#else
+#define API __fastcall
+#endif
+
+DCValue mValue[MAXARGS];
+
+void clearValues() { for(int i = 0;i<MAXARGS;++i) mValue[i].L = 0xCAFEBABEDEADC0DEULL; }
+
+template<typename T> void g(T value, int pos);
+
+template<> void g(DCchar value, int pos) { mValue[pos].c = value; }
+template<> void g(DCshort value, int pos) { mValue[pos].s = value; }
+template<> void g(DCint value, int pos) { mValue[pos].i = value; }
+template<> void g(DCpointer value, int pos) { mValue[pos].p = value; }
+template<> void g(DClonglong value, int pos) { mValue[pos].l = value; }
+template<> void g(DCfloat value, int pos) { mValue[pos].f = value; }
+template<> void g(DCdouble value, int pos) { mValue[pos].d = value; }
+
+DCValue* getArg(int pos) { return &mValue[pos]; }
+
+int gID;
+int getId() { return gID; }
+
+extern "C" {
+
+#define VF0(id,S) void API f##id () {gID=id;}
+#define VF1(id,A1,S) void API f##id (A1 a1) {gID=id;g<A1>(a1,0);}
+#define VF2(id,A1,A2,S) void API f##id (A1 a1, A2 a2) {gID=id;g<A1>(a1,0);g<A2>(a2,1);}
+#define VF3(id,A1,A2,A3,S) void API f##id (A1 a1, A2 a2,A3 a3) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);}
+#define VF4(id,A1,A2,A3,A4,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);}
+#define VF5(id,A1,A2,A3,A4,A5,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);}
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);}
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);}
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);}
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);}
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);}
+#define VF11(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);}
+#define VF12(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);}
+#define VF13(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);}
+#define VF14(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);}
+#define VF15(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);}
+#define VF16(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);}
+#define VF17(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16,A17 a17) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);g<A17>(a17,16);}
+#define VF18(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16,A17 a17,A18 a18) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);g<A17>(a17,16);g<A18>(a18,17);}
+#define VF19(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16,A17 a17,A18 a18,A19 a19) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);g<A17>(a17,16);g<A18>(a18,17);g<A19>(a19,18);}
+#define VF20(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16,A17 a17,A18 a18,A19 a19,A20 a20) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);g<A17>(a17,16);g<A18>(a18,17);g<A19>(a19,18);g<A20>(a20,19);}
+
+#include "case.h"
+
+}
+
+#undef VF0
+#undef VF1
+#undef VF2
+#undef VF3
+#undef VF4
+#undef VF5
+#undef VF6
+#undef VF7
+#undef VF8
+#undef VF9
+#undef VF10
+#undef VF11
+#undef VF12
+#undef VF13
+#undef VF14
+#undef VF15
+#undef VF16
+#undef VF17
+#undef VF18
+#undef VF19
+#undef VF20
+
+funcinfo gFuncInfos[] = {
+
+#define VF0(id,S) (void*)(f##id), #S,
+#define VF1(id,A1,S) (void*)(f##id), #S,
+#define VF2(id,A1,A2,S) (void*)(f##id), #S,
+#define VF3(id,A1,A2,A3,S) (void*)(f##id), #S,
+#define VF4(id,A1,A2,A3,A4,S) (void*)(f##id), #S,
+#define VF5(id,A1,A2,A3,A4,A5,S) (void*)(f##id), #S,
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) (void*)(f##id), #S,
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) (void*)(f##id), #S,
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) (void*)(f##id), #S,
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) (void*)(f##id), #S,
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) (void*)(f##id), #S,
+#define VF11(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,S) (void*)(f##id), #S,
+#define VF12(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,S) (void*)(f##id), #S,
+#define VF13(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,S) (void*)(f##id), #S,
+#define VF14(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,S) (void*)(f##id), #S,
+#define VF15(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,S) (void*)(f##id), #S,
+#define VF16(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,S) (void*)(f##id), #S,
+#define VF17(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,S) (void*)(f##id), #S,
+#define VF18(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,S) (void*)(f##id), #S,
+#define VF19(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,S) (void*)(f##id), #S,
+#define VF20(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,S) (void*)(f##id), #S,
+
+#include "case.h"
+
+};
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32fast/case.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,123 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2_x86win32fast/case.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase.py (on stdout) */
+VF18(0,DCpointer,DCshort,DCint,DCpointer,DCshort,DCint,DClonglong,DCint,DCchar,DCbool,DCint,DCpointer,DCdouble,DCfloat,DCdouble,DCint,DCdouble,DCint,s_psipsilicBipdfdidi)
+VF13(1,DCshort,DCfloat,DCshort,DCint,DCint,DCdouble,DCint,DClonglong,DCbool,DCpointer,DCdouble,DCdouble,DClonglong,s_sfsiidilBpddl)
+VF7(2,DCchar,DCchar,DCchar,DCbool,DCbool,DCchar,DCchar,s_cccBBcc)
+VF18(3,DCbool,DCpointer,DClonglong,DCdouble,DCfloat,DClonglong,DCpointer,DCshort,DCchar,DCint,DCshort,DCint,DCdouble,DCbool,DCpointer,DCfloat,DCfloat,DCdouble,s_BpldflpscisidBpffd)
+VF7(4,DCint,DCchar,DCdouble,DCdouble,DClonglong,DCfloat,DCshort,s_icddlfs)
+VF8(5,DCbool,DCdouble,DCfloat,DCpointer,DCfloat,DCbool,DCshort,DCshort,s_BdfpfBss)
+VF1(6,DCint,s_i)
+VF3(7,DCbool,DCfloat,DCchar,s_Bfc)
+VF18(8,DCchar,DCfloat,DCpointer,DClonglong,DClonglong,DCdouble,DCchar,DCdouble,DCpointer,DClonglong,DClonglong,DClonglong,DClonglong,DCpointer,DCchar,DCpointer,DCfloat,DClonglong,s_cfplldcdpllllpcpfl)
+VF5(9,DCfloat,DCpointer,DCchar,DCbool,DCdouble,s_fpcBd)
+VF15(10,DClonglong,DCshort,DClonglong,DCfloat,DCpointer,DCchar,DClonglong,DCpointer,DCint,DCfloat,DCint,DCfloat,DCfloat,DCpointer,DCbool,s_lslfpclpififfpB)
+VF5(11,DCchar,DCfloat,DCshort,DCdouble,DCpointer,s_cfsdp)
+VF10(12,DCbool,DCint,DCdouble,DClonglong,DCint,DCbool,DCint,DCpointer,DCchar,DCdouble,s_BidliBipcd)
+VF8(13,DCpointer,DCbool,DCint,DCpointer,DCchar,DCdouble,DClonglong,DCint,s_pBipcdli)
+VF18(14,DCfloat,DCshort,DCint,DCpointer,DCdouble,DCchar,DClonglong,DCbool,DCint,DCfloat,DCshort,DCdouble,DCbool,DCbool,DCpointer,DClonglong,DClonglong,DCdouble,s_fsipdclBifsdBBplld)
+VF12(15,DCfloat,DCdouble,DClonglong,DCpointer,DCint,DCchar,DCint,DCbool,DCbool,DClonglong,DClonglong,DCpointer,s_fdlpiciBBllp)
+VF13(16,DCfloat,DCpointer,DCchar,DCpointer,DCbool,DCshort,DCpointer,DCfloat,DCpointer,DClonglong,DCchar,DCbool,DCchar,s_fpcpBspfplcBc)
+VF17(17,DCfloat,DCshort,DCshort,DCfloat,DCchar,DCfloat,DCdouble,DCfloat,DCshort,DCfloat,DCbool,DCfloat,DCchar,DCfloat,DCchar,DClonglong,DCfloat,s_fssfcfdfsfBfcfclf)
+VF14(18,DCchar,DCdouble,DCbool,DCdouble,DCfloat,DCint,DCbool,DCfloat,DCchar,DCshort,DCpointer,DCchar,DCint,DCint,s_cdBdfiBfcspcii)
+VF11(19,DCshort,DCfloat,DCchar,DClonglong,DCfloat,DCfloat,DCchar,DClonglong,DClonglong,DCchar,DCpointer,s_sfclffcllcp)
+VF14(20,DCint,DCshort,DCchar,DCchar,DCbool,DCpointer,DCfloat,DCdouble,DCbool,DCbool,DCfloat,DCint,DCfloat,DCpointer,s_isccBpfdBBfifp)
+VF9(21,DCdouble,DCshort,DCdouble,DCbool,DCshort,DClonglong,DCshort,DCfloat,DCshort,s_dsdBslsfs)
+VF3(22,DCbool,DCint,DCchar,s_Bic)
+VF18(23,DCchar,DCshort,DCchar,DCchar,DCdouble,DCshort,DCchar,DCchar,DCfloat,DCint,DCbool,DClonglong,DCfloat,DCint,DCpointer,DCchar,DClonglong,DCchar,s_csccdsccfiBlfipclc)
+VF12(24,DCchar,DCfloat,DCshort,DCshort,DCdouble,DCbool,DCchar,DClonglong,DClonglong,DCfloat,DCbool,DCchar,s_cfssdBcllfBc)
+VF13(25,DCfloat,DClonglong,DCint,DCbool,DCdouble,DCfloat,DCint,DCshort,DCbool,DCchar,DCdouble,DCshort,DCbool,s_fliBdfisBcdsB)
+VF6(26,DCchar,DCbool,DCshort,DCchar,DClonglong,DCbool,s_cBsclB)
+VF5(27,DCchar,DCint,DCshort,DCchar,DCshort,s_ciscs)
+VF9(28,DCbool,DCint,DCint,DCbool,DCbool,DCshort,DCfloat,DCfloat,DClonglong,s_BiiBBsffl)
+VF12(29,DCpointer,DCfloat,DCshort,DCpointer,DCdouble,DCdouble,DCshort,DCint,DClonglong,DCchar,DCshort,DCint,s_pfspddsilcsi)
+VF1(30,DCpointer,s_p)
+VF6(31,DCpointer,DCbool,DCbool,DCfloat,DClonglong,DCpointer,s_pBBflp)
+VF13(32,DCchar,DCint,DCdouble,DCchar,DCdouble,DCchar,DCpointer,DCdouble,DCbool,DCint,DCfloat,DCpointer,DCint,s_cidcdcpdBifpi)
+VF11(33,DCpointer,DCfloat,DCshort,DCint,DCfloat,DClonglong,DCpointer,DCint,DCshort,DCchar,DCshort,s_pfsiflpiscs)
+VF3(34,DCchar,DCchar,DCchar,s_ccc)
+VF17(35,DCpointer,DCshort,DCchar,DCint,DCchar,DCpointer,DCchar,DCshort,DCshort,DCbool,DCbool,DCshort,DCdouble,DCfloat,DCchar,DCfloat,DCdouble,s_pscicpcssBBsdfcfd)
+VF6(36,DCchar,DCchar,DCshort,DCpointer,DCfloat,DCchar,s_ccspfc)
+VF4(37,DClonglong,DCchar,DCfloat,DClonglong,s_lcfl)
+VF2(38,DCdouble,DClonglong,s_dl)
+VF1(39,DCint,s_i)
+VF8(40,DCpointer,DCshort,DCfloat,DCfloat,DCchar,DCbool,DClonglong,DCdouble,s_psffcBld)
+VF1(41,DCdouble,s_d)
+VF14(42,DCpointer,DCshort,DCdouble,DCchar,DCshort,DCbool,DCdouble,DCshort,DCchar,DCbool,DCdouble,DCpointer,DCchar,DCbool,s_psdcsBdscBdpcB)
+VF10(43,DCshort,DClonglong,DClonglong,DClonglong,DCshort,DCshort,DCpointer,DCdouble,DCbool,DCbool,s_slllsspdBB)
+VF2(44,DCint,DCchar,s_ic)
+VF4(45,DCint,DCfloat,DClonglong,DCchar,s_iflc)
+VF18(46,DCbool,DCshort,DCint,DCfloat,DClonglong,DCdouble,DCbool,DCfloat,DCpointer,DCdouble,DCpointer,DCpointer,DCbool,DCfloat,DCshort,DCbool,DCbool,DClonglong,s_BsifldBfpdppBfsBBl)
+VF10(47,DCpointer,DCpointer,DCfloat,DCdouble,DCfloat,DClonglong,DCfloat,DCshort,DCint,DCshort,s_ppfdflfsis)
+VF12(48,DCint,DCint,DCbool,DCint,DCdouble,DCbool,DCbool,DCdouble,DClonglong,DCchar,DCdouble,DCchar,s_iiBidBBdlcdc)
+VF2(49,DCdouble,DCint,s_di)
+VF1(50,DCdouble,s_d)
+VF11(51,DCint,DCfloat,DCdouble,DCbool,DCshort,DCchar,DCdouble,DCint,DCchar,DClonglong,DCdouble,s_ifdBscdicld)
+VF11(52,DCpointer,DCchar,DCdouble,DCfloat,DCdouble,DClonglong,DCpointer,DCfloat,DCint,DCbool,DCchar,s_pcdfdlpfiBc)
+VF10(53,DCshort,DCfloat,DCpointer,DCfloat,DCshort,DCdouble,DCbool,DClonglong,DCshort,DClonglong,s_sfpfsdBlsl)
+VF12(54,DCfloat,DCbool,DCfloat,DCchar,DCchar,DCpointer,DCshort,DCpointer,DCbool,DCbool,DCfloat,DClonglong,s_fBfccpspBBfl)
+VF7(55,DCint,DCchar,DCchar,DCint,DCbool,DCfloat,DCbool,s_icciBfB)
+VF19(56,DClonglong,DClonglong,DCfloat,DCbool,DCchar,DClonglong,DCchar,DClonglong,DCint,DClonglong,DCdouble,DCchar,DCpointer,DCfloat,DCdouble,DCpointer,DCdouble,DCdouble,DCfloat,s_llfBclclildcpfdpddf)
+VF12(57,DCint,DCfloat,DCbool,DCshort,DCpointer,DCshort,DCbool,DCfloat,DCpointer,DCchar,DCpointer,DCdouble,s_ifBspsBfpcpd)
+VF17(58,DCchar,DCchar,DCfloat,DCshort,DCshort,DCshort,DCbool,DCint,DCbool,DCbool,DCshort,DCpointer,DCpointer,DCfloat,DClonglong,DCint,DClonglong,s_ccfsssBiBBsppflil)
+VF1(59,DCpointer,s_p)
+VF17(60,DCdouble,DClonglong,DCfloat,DClonglong,DCdouble,DClonglong,DCbool,DCchar,DCfloat,DCbool,DCbool,DClonglong,DCpointer,DCfloat,DClonglong,DCint,DCpointer,s_dlfldlBcfBBlpflip)
+VF4(61,DCshort,DCdouble,DCint,DCint,s_sdii)
+VF4(62,DCint,DCshort,DCfloat,DClonglong,s_isfl)
+VF4(63,DCint,DCpointer,DClonglong,DCshort,s_ipls)
+VF1(64,DCdouble,s_d)
+VF17(65,DCdouble,DCchar,DCchar,DClonglong,DCpointer,DCshort,DClonglong,DCdouble,DCfloat,DCshort,DClonglong,DCdouble,DCbool,DCshort,DCfloat,DCchar,DClonglong,s_dcclpsldfsldBsfcl)
+VF2(66,DClonglong,DClonglong,s_ll)
+VF4(67,DCpointer,DCfloat,DCfloat,DCint,s_pffi)
+VF14(68,DCfloat,DCdouble,DCpointer,DCbool,DCbool,DCpointer,DCpointer,DCshort,DCchar,DCpointer,DCpointer,DCfloat,DCfloat,DCbool,s_fdpBBppscppffB)
+VF4(69,DCchar,DCint,DCshort,DClonglong,s_cisl)
+VF3(70,DCbool,DCint,DCpointer,s_Bip)
+VF1(71,DCint,s_i)
+VF4(72,DCchar,DCbool,DClonglong,DCfloat,s_cBlf)
+VF13(73,DCdouble,DCchar,DCshort,DCfloat,DCshort,DCchar,DCbool,DCdouble,DCpointer,DClonglong,DCdouble,DCfloat,DCbool,s_dcsfscBdpldfB)
+VF17(74,DCfloat,DClonglong,DCbool,DCbool,DClonglong,DCchar,DClonglong,DCbool,DCfloat,DClonglong,DClonglong,DCshort,DCshort,DCshort,DCpointer,DCchar,DCchar,s_flBBlclBfllssspcc)
+VF16(75,DCshort,DClonglong,DClonglong,DCdouble,DCshort,DCint,DCchar,DCshort,DCint,DClonglong,DCbool,DCdouble,DCbool,DCdouble,DCfloat,DCbool,s_slldsicsilBdBdfB)
+VF6(76,DClonglong,DClonglong,DCshort,DCpointer,DCfloat,DCchar,s_llspfc)
+VF9(77,DCfloat,DCpointer,DCshort,DClonglong,DCdouble,DCshort,DCshort,DCfloat,DCbool,s_fpsldssfB)
+VF12(78,DCbool,DCbool,DCfloat,DCpointer,DCshort,DCchar,DCfloat,DCint,DCdouble,DCchar,DCfloat,DCdouble,s_BBfpscfidcfd)
+VF18(79,DCint,DCint,DCint,DCshort,DCdouble,DCchar,DCbool,DCbool,DCchar,DClonglong,DCfloat,DCdouble,DCpointer,DCdouble,DCbool,DCint,DCpointer,DClonglong,s_iiisdcBBclfdpdBipl)
+VF12(80,DCpointer,DCchar,DCbool,DClonglong,DCchar,DCfloat,DCpointer,DCbool,DCchar,DCchar,DCshort,DCdouble,s_pcBlcfpBccsd)
+VF19(81,DCchar,DCshort,DCint,DCdouble,DCbool,DCshort,DCfloat,DCbool,DCfloat,DCchar,DCfloat,DCpointer,DCfloat,DCfloat,DCpointer,DCshort,DCchar,DCdouble,DCint,s_csidBsfBfcfpffpscdi)
+VF14(82,DCint,DCbool,DCchar,DCfloat,DCbool,DClonglong,DCshort,DCfloat,DCfloat,DCchar,DCshort,DCbool,DCbool,DCchar,s_iBcfBlsffcsBBc)
+VF8(83,DCpointer,DCchar,DCint,DClonglong,DClonglong,DCint,DCchar,DCfloat,s_pcillicf)
+VF17(84,DCdouble,DCshort,DCchar,DClonglong,DCshort,DCdouble,DCshort,DCfloat,DCdouble,DCshort,DCdouble,DCdouble,DClonglong,DCbool,DCdouble,DCint,DCpointer,s_dsclsdsfdsddlBdip)
+VF17(85,DCdouble,DCpointer,DClonglong,DCpointer,DCfloat,DCshort,DCpointer,DCshort,DCshort,DCdouble,DCint,DCpointer,DCshort,DCshort,DCint,DCpointer,DClonglong,s_dplpfspssdipssipl)
+VF3(86,DCbool,DCbool,DCbool,s_BBB)
+VF18(87,DCpointer,DClonglong,DClonglong,DCfloat,DClonglong,DCpointer,DCfloat,DCdouble,DClonglong,DCpointer,DCfloat,DClonglong,DClonglong,DCbool,DCint,DCpointer,DCpointer,DCint,s_pllflpfdlpfllBippi)
+VF5(88,DCint,DCfloat,DCfloat,DCdouble,DCfloat,s_iffdf)
+VF13(89,DCdouble,DCshort,DClonglong,DCchar,DCchar,DCfloat,DCshort,DCbool,DCfloat,DCbool,DCchar,DCint,DCpointer,s_dslccfsBfBcip)
+VF6(90,DCshort,DCfloat,DCchar,DCbool,DCpointer,DCshort,s_sfcBps)
+VF5(91,DCshort,DCchar,DCshort,DCfloat,DCint,s_scsfi)
+VF8(92,DCshort,DClonglong,DCdouble,DCfloat,DCdouble,DCchar,DClonglong,DCdouble,s_sldfdcld)
+VF3(93,DCfloat,DCdouble,DCshort,s_fds)
+VF15(94,DCint,DCfloat,DCshort,DCshort,DCbool,DCint,DCint,DCpointer,DCpointer,DCshort,DCint,DCfloat,DCshort,DCshort,DCfloat,s_ifssBiippsifssf)
+VF6(95,DCchar,DCbool,DClonglong,DCint,DClonglong,DCpointer,s_cBlilp)
+VF8(96,DCbool,DClonglong,DCchar,DCfloat,DCbool,DCfloat,DCbool,DCdouble,s_BlcfBfBd)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32fast/config.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,28 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2_x86win32fast/config.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase (on stderr) */
+#define NCASES 97
+#define MAXARGS 19
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32fast/design.cfg	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,100 @@
+psipsilicBipdfdidi
+sfsiidilBpddl
+cccBBcc
+BpldflpscisidBpffd
+
+icddlfs
+BdfpfBss
+i
+Bfc
+cfplldcdpllllpcpfl
+fpcBd
+lslfpclpififfpB
+cfsdp
+BidliBipcd
+pBipcdli
+fsipdclBifsdBBplld
+fdlpiciBBllp
+fpcpBspfplcBc
+
+fssfcfdfsfBfcfclf
+cdBdfiBfcspcii
+sfclffcllcp
+isccBpfdBBfifp
+dsdBslsfs
+Bic
+csccdsccfiBlfipclc
+cfssdBcllfBc
+fliBdfisBcdsB
+cBsclB
+ciscs
+BiiBBsffl
+pfspddsilcsi
+p
+pBBflp
+cidcdcpdBifpi
+pfsiflpiscs
+ccc
+pscicpcssBBsdfcfd
+ccspfc
+lcfl
+dl
+i
+psffcBld
+d
+psdcsBdscBdpcB
+
+slllsspdBB
+ic
+iflc
+BsifldBfpdppBfsBBl
+ppfdflfsis
+iiBidBBdlcdc
+di
+d
+ifdBscdicld
+pcdfdlpfiBc
+sfpfsdBlsl
+fBfccpspBBfl
+icciBfB
+llfBclclildcpfdpddf
+ifBspsBfpcpd
+ccfsssBiBBsppflil
+p
+dlfldlBcfBBlpflip
+sdii
+isfl
+ipls
+d
+dcclpsldfsldBsfcl
+ll
+pffi
+fdpBBppscppffB
+cisl
+Bip
+i
+cBlf
+dcsfscBdpldfB
+flBBlclBfllssspcc
+slldsicsilBdBdfB
+llspfc
+fpsldssfB
+BBfpscfidcfd
+iiisdcBBclfdpdBipl
+pcBlcfpBccsd
+csidBsfBfcfpffpscdi
+iBcfBlsffcsBBc
+pcillicf
+dsclsdsfdsddlBdip
+dplpfspssdipssipl
+BBB
+pllflpfdlpfllBippi
+iffdf
+dslccfsBfBcip
+sfcBps
+scsfi
+sldfdcld
+fds
+ifssBiippsifssf
+cBlilp
+BlcfBfBd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32fast/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32fast/funcinfo.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,44 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2_x86win32fast/funcinfo.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DC_TEST_FUNCINFO_H
+#define DC_TEST_FUNCINFO_H
+
+#include "../../dyncall/dyncall_signature.h"
+
+struct funcinfo
+{
+  DCpointer        funcptr;
+  const DCsigchar* sig;
+};
+
+extern funcinfo gFuncInfos[];
+
+#endif /* DC_TEST_FUNCINFO_H */
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32fast/main.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,187 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2_x86win32fast/main.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+#include "../../dyncall/dyncall_macros.h"
+#include "funcinfo.h"
+#include <stdlib.h>
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+int   getId();
+DCpointer getFunc(int x);
+DCValue* getArg(int pos);
+
+
+
+DCbool     valueBool[MAXARGS];
+DCchar     valueChar[MAXARGS];
+DCshort    valueShort[MAXARGS];
+DCint      valueInt[MAXARGS];
+DClonglong valueLongLong[MAXARGS];
+DCdouble   valueDouble[MAXARGS];
+DCpointer  valuePointer[MAXARGS];
+DCfloat    valueFloat[MAXARGS];
+
+
+void clearValues();
+
+void init()
+{
+  for (int i = 0 ; i < MAXARGS ; ++i ) {
+
+    valueBool[i] = DCbool( (i % 1) ? DC_TRUE : DC_FALSE );
+    valueChar[i] = DCchar(i);
+    valueShort[i] = DCshort(i);
+    valueInt[i] = DCint(i);
+    valueLongLong[i] = DClonglong(i);
+    valueDouble[i] = DCdouble(i);
+    valuePointer[i] = DCpointer(i);
+    valueFloat[i] = DCfloat(i);
+  }
+}
+
+void error(const char* message)
+{
+  fprintf(stderr, "error: %s\n", message);
+  exit(-1);
+}
+
+
+bool test(int x)
+{
+  bool r = true;
+  clearValues();
+
+  DCCallVM* pCall;
+
+  funcinfo* fi = &gFuncInfos[x];
+
+  const DCsigchar* sig = &fi->sig[2];
+  const DCsigchar* ptr = sig;
+  DCsigchar ch;
+  int pos;
+ 
+  pos = 0;
+
+  pCall = dcNewCallVM(4096);
+#ifdef DC__C_GNU
+  dcMode(pCall, DC_CALL_C_X86_WIN32_FAST_GNU);
+#else
+  dcMode(pCall, DC_CALL_C_X86_WIN32_FAST_MS);
+#endif
+  dcReset(pCall);
+ 
+  while ( (ch=*ptr++) != '\0' ) {
+    switch(ch) {
+      case DC_SIGCHAR_BOOL: dcArgBool( pCall, valueBool[pos] ); break;
+      case DC_SIGCHAR_CHAR: dcArgChar( pCall, valueChar[pos] ); break;
+      case DC_SIGCHAR_SHORT: dcArgShort( pCall, valueShort[pos] ); break;
+      case DC_SIGCHAR_INT: dcArgInt( pCall, valueInt[pos] ); break;
+      case DC_SIGCHAR_LONGLONG: dcArgLongLong( pCall, valueLongLong[pos] ); break;
+      case DC_SIGCHAR_FLOAT: dcArgFloat( pCall, valueFloat[pos] ); break;
+      case DC_SIGCHAR_DOUBLE: dcArgDouble( pCall, valueDouble[pos] ); break;
+      case DC_SIGCHAR_POINTER: dcArgPointer( pCall, valuePointer[pos] ); break;
+      default: error("unsupported signature character"); break;
+    }
+    ++pos;
+  }
+
+  dcCallVoid( pCall, fi->funcptr );
+
+ 
+  if ( getId() == x ) { 
+
+    ptr = sig;
+    pos = 0;
+    while( ( ch=*ptr++ ) != '\0' ) {
+
+      switch(ch) {
+        case DC_SIGCHAR_BOOL: if ( getArg(pos)->B != valueBool  [pos] ) r = false; break;
+        case DC_SIGCHAR_CHAR: if ( getArg(pos)->c != valueChar  [pos] ) r = false; break;
+        case DC_SIGCHAR_SHORT: if ( getArg(pos)->s != valueShort  [pos] ) r = false; break;
+        case DC_SIGCHAR_INT: if ( getArg(pos)->i != valueInt   [pos] ) r = false; break;
+        case DC_SIGCHAR_LONGLONG: if ( getArg(pos)->L != valueLongLong  [pos] ) r = false; break;
+        case DC_SIGCHAR_FLOAT: if ( getArg(pos)->f != valueFloat [pos] ) r = false; break;
+        case DC_SIGCHAR_DOUBLE: if ( getArg(pos)->d != valueDouble[pos] ) r = false; break;
+        case DC_SIGCHAR_POINTER: if ( getArg(pos)->p != valuePointer   [pos] ) r = false; break;
+        default: error("unsupported signature character"); break;
+      }
+      ++pos;
+    }
+
+  } else {
+    r = false;
+  }
+
+  printf("%d-%s:%d\n", x, sig, r);
+   
+  dcFree(pCall);
+
+  return r;
+}
+
+
+bool run_range(int from, int to)
+{
+  bool r = true;
+  for (int i = from ; i < to ; ++i )
+    r &= test(i);
+  return r;
+}
+
+extern "C" {
+
+int main(int argc, char* argv[])
+{
+  dcTest_initPlatform();
+
+  bool success = false;
+  init();
+  if (argc == 2) {
+    int index = atoi(argv[1]);
+    success = run_range( index, index+1 ); 
+  } else if (argc == 3) {
+    int from = atoi(argv[1]);
+    int to   = atoi(argv[2])+1;
+    success = run_range(from,to);
+  } else {
+    success = run_range(0,NCASES);
+  }
+
+  printf("result: suite2_x86win32fast: %s\n", success ? "1" : "0");
+  
+  dcTest_deInitPlatform();
+
+  return (success) ? 0 : -1;
+}
+
+}  // extern "C"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32fast/mkcase.py	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,67 @@
+#!/usr/bin/python
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+import sys
+
+f = file("design.cfg")
+
+sigmap = { 
+  'B':'DCbool'
+, 'c':'DCchar'
+, 's':'DCshort'
+, 'i':'DCint'
+, 'l':'DClonglong'
+, 'f':'DCfloat'
+, 'd':'DCdouble'
+, 'p':'DCpointer'
+}
+
+apimap = {
+  '_':''
+, 's':'__declspec(stdcall)'
+, 'f':'__declspec(fastcall)'
+}
+
+id = 0
+maxargs = 0
+sys.stdout.write("/* auto generated by mkcase.py (on stdout) */\n");
+for line in f: 
+  line = line.rstrip().lstrip()
+  if len(line) == 0 or line[0] == '#': continue
+  types = [];
+  # args  = len(line)-1
+  args = len(line)
+  maxargs = max(maxargs, args)
+  # api = apimap[ line[0] ]
+  out = [ "VF",str(args),"(", str(id), "," ];
+  for i in xrange(0,len(line)):   
+    types += [ sigmap[ line[i] ] ]
+  out += [ ",".join( types ), ",s_", line, ")\n" ]
+  out = "".join(out)
+  sys.stdout.write(out)
+  id  += 1
+
+sys.stderr.write("/* auto generated by mkcase (on stderr) */\n");
+sys.stderr.write("".join( ["#define NCASES ",str(id),"\n"] ) )
+sys.stderr.write("".join( ["#define MAXARGS ",str(maxargs),"\n"] ) )
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32fast/rand.py	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+#!/usr/bin/python
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+import random
+import sys
+
+N = 100
+MINARG = 0
+MAXARG = 19
+
+argtypes = [ 'B','c','s','i','l','f','d','p' ]
+apitypes = [ '_' ]
+
+def sig(n):
+  s = ""
+  x = random.randint( 0, len(apitypes)-1 )
+  # s += apitypes[x]
+  for i in xrange(0,n):
+    x = random.randint( 0, len(argtypes)-1 )
+    s += argtypes[x]
+  return s
+
+for i in xrange(0,N):
+  n = random.randint(MINARG,MAXARG)
+  sys.stdout.write( sig(n) )
+  sys.stdout.write( "\n" )
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32std/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+add_executable(suite2_x86win32std case.cc main.cc)
+target_link_libraries(suite2_x86win32std dyncall_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32std/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32std/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,24 @@
+APP = suite2_x86win32std
+OBJS = case.o main.o
+
+TOP     = ../..
+CFLAGS  = -I${TOP}/dyncall
+LDFLAGS = -L${TOP}/dyncall
+LDLIBS  = -ldyncall_s
+LINK    = ${CXX}
+
+all: ${APP}
+
+.PHONY: all clean install
+
+RM      ?= rm -f
+AR      ?= ar
+MKDIR   ?= mkdir
+INSTALL ?= install -p
+
+${APP}: ${OBJS} 
+	${LINK} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP} ${TARGET_ARCH}
+
+clean:
+	${RM} ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32std/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,69 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+AUTOS = config.h case.h
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = suite2.exe
+OBJS = main.obj case.obj# ..\testmain\main_ansic.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib > nul
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = suite2.nds
+OBJS = main.o case.o# ..\testmain\main_NDS.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+
+$(OBJS): $(AUTOS)
+
+$(AUTOS): mkcase.py
+	python mkcase.py >case.h 2>config.h
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32std/case.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,138 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2_x86win32std/case.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+#include "funcinfo.h"
+
+#ifdef DC__C_GNU
+#define API __attribute__((stdcall))
+#else
+#define API __stdcall
+#endif
+
+DCValue mValue[MAXARGS];
+
+void clearValues() { for(int i = 0;i<MAXARGS;++i) mValue[i].L = 0xCAFEBABEDEADC0DEULL; }
+
+template<typename T> void g(T value, int pos);
+
+template<> void g(DCchar value, int pos) { mValue[pos].c = value; }
+template<> void g(DCshort value, int pos) { mValue[pos].s = value; }
+template<> void g(DCint value, int pos) { mValue[pos].i = value; }
+template<> void g(DCpointer value, int pos) { mValue[pos].p = value; }
+template<> void g(DClong value, int pos) { mValue[pos].l = value; }
+template<> void g(DClonglong value, int pos) { mValue[pos].L = value; }
+template<> void g(DCfloat value, int pos) { mValue[pos].f = value; }
+template<> void g(DCdouble value, int pos) { mValue[pos].d = value; }
+
+DCValue* getArg(int pos) { return &mValue[pos]; }
+
+int gID;
+int getId() { return gID; }
+
+extern "C" {
+
+#define VF0(id,S) void API f##id () {gID=id;}
+#define VF1(id,A1,S) void API f##id (A1 a1) {gID=id;g<A1>(a1,0);}
+#define VF2(id,A1,A2,S) void API f##id (A1 a1, A2 a2) {gID=id;g<A1>(a1,0);g<A2>(a2,1);}
+#define VF3(id,A1,A2,A3,S) void API f##id (A1 a1, A2 a2,A3 a3) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);}
+#define VF4(id,A1,A2,A3,A4,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);}
+#define VF5(id,A1,A2,A3,A4,A5,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);}
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);}
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);}
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);}
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);}
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);}
+#define VF11(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);}
+#define VF12(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);}
+#define VF13(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);}
+#define VF14(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);}
+#define VF15(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);}
+#define VF16(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);}
+#define VF17(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16,A17 a17) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);g<A17>(a17,16);}
+#define VF18(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16,A17 a17,A18 a18) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);g<A17>(a17,16);g<A18>(a18,17);}
+#define VF19(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16,A17 a17,A18 a18,A19 a19) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);g<A17>(a17,16);g<A18>(a18,17);g<A19>(a19,18);}
+#define VF20(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,S) void API f##id (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10,A11 a11,A12 a12,A13 a13,A14 a14,A15 a15,A16 a16,A17 a17,A18 a18,A19 a19,A20 a20) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);g<A11>(a11,10);g<A12>(a12,11);g<A13>(a13,12);g<A14>(a14,13);g<A15>(a15,14);g<A16>(a16,15);g<A17>(a17,16);g<A18>(a18,17);g<A19>(a19,18);g<A20>(a20,19);}
+
+#include "case.h"
+
+}
+
+#undef VF0
+#undef VF1
+#undef VF2
+#undef VF3
+#undef VF4
+#undef VF5
+#undef VF6
+#undef VF7
+#undef VF8
+#undef VF9
+#undef VF10
+#undef VF11
+#undef VF12
+#undef VF13
+#undef VF14
+#undef VF15
+#undef VF16
+#undef VF17
+#undef VF18
+#undef VF19
+#undef VF20
+
+funcinfo gFuncInfos[] = {
+
+#define VF0(id,S) (void*)(f##id), #S,
+#define VF1(id,A1,S) (void*)(f##id), #S,
+#define VF2(id,A1,A2,S) (void*)(f##id), #S,
+#define VF3(id,A1,A2,A3,S) (void*)(f##id), #S,
+#define VF4(id,A1,A2,A3,A4,S) (void*)(f##id), #S,
+#define VF5(id,A1,A2,A3,A4,A5,S) (void*)(f##id), #S,
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) (void*)(f##id), #S,
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) (void*)(f##id), #S,
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) (void*)(f##id), #S,
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) (void*)(f##id), #S,
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) (void*)(f##id), #S,
+#define VF11(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,S) (void*)(f##id), #S,
+#define VF12(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,S) (void*)(f##id), #S,
+#define VF13(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,S) (void*)(f##id), #S,
+#define VF14(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,S) (void*)(f##id), #S,
+#define VF15(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,S) (void*)(f##id), #S,
+#define VF16(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,S) (void*)(f##id), #S,
+#define VF17(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,S) (void*)(f##id), #S,
+#define VF18(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,S) (void*)(f##id), #S,
+#define VF19(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,S) (void*)(f##id), #S,
+#define VF20(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,S) (void*)(f##id), #S,
+
+#include "case.h"
+
+};
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32std/case.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,120 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2_x86win32std/case.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase.py (on stdout) */
+VF16(0,DClonglong,DCbool,DCshort,DCint,DCint,DCfloat,DCdouble,DCpointer,DCdouble,DClonglong,DCshort,DCpointer,DClonglong,DCdouble,DCint,DCbool,s_lBsiifdpdlspldiB)
+VF19(1,DCdouble,DCint,DCshort,DCchar,DCshort,DCbool,DClonglong,DCbool,DCbool,DCpointer,DCint,DCpointer,DCint,DCbool,DCshort,DClonglong,DCbool,DCchar,DCpointer,s_discsBlBBpipiBslBcp)
+VF12(2,DClonglong,DCshort,DCdouble,DClonglong,DCfloat,DCdouble,DCpointer,DCfloat,DClonglong,DCpointer,DCint,DCint,s_lsdlfdpflpii)
+VF5(3,DCdouble,DCdouble,DCint,DCshort,DCshort,s_ddiss)
+VF8(4,DClonglong,DCfloat,DCbool,DCshort,DCdouble,DCdouble,DClonglong,DCchar,s_lfBsddlc)
+VF10(5,DCshort,DCint,DCshort,DCbool,DCdouble,DCbool,DCint,DCbool,DCfloat,DCshort,s_sisBdBiBfs)
+VF9(6,DCshort,DCbool,DCbool,DClonglong,DCchar,DCfloat,DCpointer,DCshort,DCint,s_sBBlcfpsi)
+VF17(7,DCfloat,DCchar,DCpointer,DCint,DCchar,DCdouble,DCdouble,DCpointer,DCshort,DCbool,DCdouble,DCint,DCbool,DCpointer,DCfloat,DCchar,DCshort,s_fcpicddpsBdiBpfcs)
+VF7(8,DCchar,DCbool,DCfloat,DCchar,DCshort,DClonglong,DCpointer,s_cBfcslp)
+VF13(9,DCint,DCfloat,DCint,DCchar,DCbool,DCint,DClonglong,DClonglong,DCchar,DCpointer,DCpointer,DCshort,DCpointer,s_ificBillcppsp)
+VF15(10,DCpointer,DCdouble,DCpointer,DClonglong,DCint,DCshort,DCfloat,DCbool,DCpointer,DCpointer,DCint,DCpointer,DCdouble,DCfloat,DCdouble,s_pdplisfBppipdfd)
+VF4(11,DClonglong,DCshort,DCshort,DCint,s_lssi)
+VF4(12,DClonglong,DCint,DClonglong,DCchar,s_lilc)
+VF17(13,DClonglong,DCbool,DCdouble,DCdouble,DCdouble,DCpointer,DCpointer,DCfloat,DCchar,DCbool,DClonglong,DCshort,DClonglong,DCdouble,DCdouble,DClonglong,DCpointer,s_lBdddppfcBlslddlp)
+VF2(14,DCbool,DCchar,s_Bc)
+VF18(15,DCchar,DCbool,DCint,DCshort,DCdouble,DCint,DCchar,DClonglong,DCpointer,DCbool,DCdouble,DCint,DCshort,DClonglong,DCpointer,DCpointer,DCpointer,DCchar,s_cBisdiclpBdislpppc)
+VF17(16,DCbool,DCdouble,DClonglong,DCdouble,DCpointer,DClonglong,DCdouble,DCdouble,DClonglong,DCshort,DCfloat,DCfloat,DCchar,DCbool,DCpointer,DCshort,DCdouble,s_BdldplddlsffcBpsd)
+VF8(17,DCfloat,DClonglong,DCchar,DCfloat,DClonglong,DCint,DClonglong,DCfloat,s_flcflilf)
+VF12(18,DCpointer,DCshort,DCshort,DClonglong,DCshort,DCpointer,DCbool,DCpointer,DCshort,DCchar,DCbool,DClonglong,s_psslspBpscBl)
+VF7(19,DCchar,DCchar,DClonglong,DCint,DCpointer,DCshort,DCdouble,s_cclipsd)
+VF15(20,DCshort,DCfloat,DCbool,DCdouble,DCdouble,DCint,DCshort,DCchar,DCpointer,DCbool,DClonglong,DCshort,DCint,DCbool,DCbool,s_sfBddiscpBlsiBB)
+VF4(21,DCbool,DClonglong,DCchar,DCdouble,s_Blcd)
+VF19(22,DCchar,DCfloat,DCint,DCchar,DCfloat,DClonglong,DClonglong,DClonglong,DCchar,DCchar,DCbool,DCbool,DCshort,DClonglong,DCbool,DCfloat,DCchar,DCchar,DClonglong,s_cficflllccBBslBfccl)
+VF14(23,DClonglong,DCpointer,DCbool,DCdouble,DCint,DCint,DCfloat,DClonglong,DCfloat,DCint,DClonglong,DCint,DCint,DCfloat,s_lpBdiiflfiliif)
+VF16(24,DCshort,DCbool,DCbool,DCpointer,DCint,DCshort,DClonglong,DCfloat,DCint,DCbool,DCbool,DCshort,DCpointer,DCfloat,DCbool,DCdouble,s_sBBpislfiBBspfBd)
+VF19(25,DClonglong,DClonglong,DClonglong,DCdouble,DClonglong,DCbool,DCpointer,DCint,DClonglong,DCbool,DCshort,DCpointer,DCint,DCint,DCfloat,DCfloat,DCshort,DCint,DCshort,s_llldlBpilBspiiffsis)
+VF12(26,DCdouble,DCint,DCpointer,DCshort,DCpointer,DCchar,DCfloat,DCint,DCint,DCchar,DCdouble,DClonglong,s_dipspcfiicdl)
+VF15(27,DCfloat,DCfloat,DCpointer,DCbool,DCshort,DClonglong,DCbool,DCbool,DCchar,DCshort,DClonglong,DCchar,DCbool,DCfloat,DCbool,s_ffpBslBBcslcBfB)
+VF2(28,DCfloat,DCchar,s_fc)
+VF9(29,DCdouble,DCfloat,DCfloat,DCint,DCpointer,DCbool,DCfloat,DCpointer,DCchar,s_dffipBfpc)
+VF10(30,DClonglong,DClonglong,DCfloat,DCshort,DCint,DClonglong,DCint,DCdouble,DCdouble,DCbool,s_llfsiliddB)
+VF11(31,DCfloat,DCshort,DCbool,DClonglong,DCint,DCdouble,DCint,DClonglong,DCfloat,DCshort,DCshort,s_fsBlidilfss)
+VF11(32,DCchar,DCint,DCfloat,DClonglong,DCbool,DCdouble,DCpointer,DCshort,DClonglong,DCchar,DCfloat,s_ciflBdpslcf)
+VF2(33,DCint,DClonglong,s_il)
+VF3(34,DClonglong,DCshort,DCchar,s_lsc)
+VF5(35,DCfloat,DCchar,DCfloat,DCchar,DCfloat,s_fcfcf)
+VF3(36,DCdouble,DCint,DCfloat,s_dif)
+VF13(37,DCint,DCfloat,DCbool,DClonglong,DCfloat,DClonglong,DCchar,DCpointer,DCpointer,DCchar,DCshort,DCfloat,DCint,s_ifBlflcppcsfi)
+VF2(38,DCbool,DCint,s_Bi)
+VF6(39,DCpointer,DCchar,DCdouble,DCshort,DCfloat,DCint,s_pcdsfi)
+VF5(40,DCshort,DClonglong,DCpointer,DCbool,DCchar,s_slpBc)
+VF4(41,DCdouble,DCbool,DCdouble,DCfloat,s_dBdf)
+VF16(42,DCshort,DCchar,DClonglong,DCpointer,DCint,DClonglong,DClonglong,DClonglong,DCint,DCdouble,DCchar,DCpointer,DCshort,DCbool,DCchar,DCint,s_sclpilllidcpsBci)
+VF15(43,DCshort,DCfloat,DCint,DCshort,DCfloat,DCbool,DClonglong,DClonglong,DCpointer,DCbool,DCdouble,DCint,DCpointer,DCfloat,DCshort,s_sfisfBllpBdipfs)
+VF2(44,DCfloat,DCdouble,s_fd)
+VF6(45,DClonglong,DCint,DCpointer,DCfloat,DCpointer,DCshort,s_lipfps)
+VF8(46,DCchar,DCshort,DCdouble,DCfloat,DCdouble,DCbool,DCchar,DCfloat,s_csdfdBcf)
+VF10(47,DCshort,DCint,DCpointer,DCfloat,DCchar,DCshort,DCint,DCdouble,DCpointer,DCdouble,s_sipfcsidpd)
+VF16(48,DCshort,DCdouble,DCpointer,DCbool,DCbool,DCbool,DCbool,DCbool,DCint,DClonglong,DCshort,DCint,DCbool,DCfloat,DCint,DClonglong,s_sdpBBBBBilsiBfil)
+VF3(49,DCchar,DClonglong,DCchar,s_clc)
+VF9(50,DCbool,DCpointer,DCfloat,DClonglong,DCbool,DCfloat,DClonglong,DCbool,DCpointer,s_BpflBflBp)
+VF17(51,DClonglong,DCshort,DCfloat,DCchar,DClonglong,DCdouble,DCpointer,DClonglong,DCpointer,DCint,DCfloat,DCint,DCint,DCint,DCchar,DCpointer,DCdouble,s_lsfcldplpifiiicpd)
+VF4(52,DCint,DCchar,DCint,DCdouble,s_icid)
+VF16(53,DCshort,DCint,DCbool,DClonglong,DCint,DCshort,DCbool,DClonglong,DCfloat,DCbool,DCpointer,DCint,DCint,DCpointer,DCdouble,DCchar,s_siBlisBlfBpiipdc)
+VF5(54,DCpointer,DCint,DClonglong,DCshort,DCfloat,s_pilsf)
+VF5(55,DCbool,DCint,DCshort,DCdouble,DCshort,s_Bisds)
+VF18(56,DCbool,DCdouble,DCchar,DCint,DCdouble,DCbool,DCpointer,DCint,DClonglong,DCbool,DClonglong,DCshort,DCshort,DCdouble,DCshort,DCbool,DCint,DCbool,s_BdcidBpilBlssdsBiB)
+VF6(57,DCshort,DCbool,DCshort,DCshort,DCdouble,DClonglong,s_sBssdl)
+VF8(58,DCchar,DCfloat,DCbool,DCchar,DCint,DCint,DCshort,DCfloat,s_cfBciisf)
+VF3(59,DCshort,DCdouble,DClonglong,s_sdl)
+VF16(60,DCshort,DCint,DCfloat,DClonglong,DCbool,DCdouble,DCint,DCbool,DCchar,DCpointer,DCpointer,DClonglong,DCchar,DCshort,DCbool,DCfloat,s_siflBdiBcpplcsBf)
+VF7(61,DCdouble,DCpointer,DCint,DCdouble,DCbool,DCchar,DCdouble,s_dpidBcd)
+VF18(62,DCpointer,DCbool,DCint,DCchar,DCdouble,DCfloat,DCfloat,DCfloat,DClonglong,DCfloat,DClonglong,DCfloat,DCpointer,DCchar,DClonglong,DCpointer,DCbool,DCfloat,s_pBicdffflflfpclpBf)
+VF7(63,DCshort,DCbool,DCchar,DCdouble,DCfloat,DCbool,DCpointer,s_sBcdfBp)
+VF8(64,DCchar,DCchar,DCfloat,DCpointer,DCpointer,DClonglong,DCshort,DClonglong,s_ccfpplsl)
+VF9(65,DClonglong,DCdouble,DCdouble,DCdouble,DCbool,DCpointer,DCbool,DCfloat,DCchar,s_ldddBpBfc)
+VF12(66,DCbool,DCdouble,DCpointer,DCdouble,DCpointer,DCpointer,DCint,DCshort,DCchar,DClonglong,DCpointer,DClonglong,s_Bdpdppisclpl)
+VF12(67,DCshort,DClonglong,DCshort,DClonglong,DCchar,DCint,DCpointer,DCpointer,DCshort,DCint,DClonglong,DCchar,s_slslcippsilc)
+VF3(68,DCshort,DCbool,DCfloat,s_sBf)
+VF12(69,DCdouble,DCpointer,DCpointer,DCfloat,DClonglong,DClonglong,DCint,DCchar,DCpointer,DCchar,DCdouble,DCbool,s_dppfllicpcdB)
+VF18(70,DCshort,DCshort,DCchar,DCfloat,DCint,DCdouble,DCchar,DCchar,DCint,DCshort,DCfloat,DClonglong,DCfloat,DCshort,DCdouble,DCpointer,DCshort,DClonglong,s_sscfidccisflfsdpsl)
+VF16(71,DClonglong,DCshort,DCbool,DCchar,DClonglong,DCshort,DCdouble,DCbool,DCchar,DCshort,DCchar,DCdouble,DClonglong,DCfloat,DCdouble,DCbool,s_lsBclsdBcscdlfdB)
+VF11(72,DCshort,DCchar,DCfloat,DCfloat,DClonglong,DCpointer,DCfloat,DCfloat,DCpointer,DCshort,DCdouble,s_scfflpffpsd)
+VF14(73,DClonglong,DCchar,DCint,DCbool,DCdouble,DCbool,DCdouble,DCdouble,DCbool,DCfloat,DCchar,DCbool,DCdouble,DCbool,s_lciBdBddBfcBdB)
+VF4(74,DCshort,DClonglong,DCbool,DClonglong,s_slBl)
+VF12(75,DCbool,DCbool,DCint,DCdouble,DCchar,DCpointer,DCbool,DCfloat,DCshort,DCbool,DCbool,DCchar,s_BBidcpBfsBBc)
+VF5(76,DCpointer,DClonglong,DCint,DCshort,DCchar,s_plisc)
+VF1(77,DCchar,s_c)
+VF15(78,DCpointer,DCdouble,DCfloat,DCbool,DCint,DCint,DCfloat,DCfloat,DCpointer,DCfloat,DCchar,DCdouble,DCfloat,DCshort,DCshort,s_pdfBiiffpfcdfss)
+VF14(79,DCdouble,DCchar,DCchar,DCshort,DCfloat,DClonglong,DClonglong,DCchar,DCdouble,DCbool,DCfloat,DCfloat,DClonglong,DCchar,s_dccsfllcdBfflc)
+VF18(80,DCpointer,DCshort,DCfloat,DCbool,DClonglong,DCshort,DCint,DCint,DCdouble,DCbool,DCshort,DCpointer,DCpointer,DCchar,DCbool,DCint,DCfloat,DCdouble,s_psfBlsiidBsppcBifd)
+VF14(81,DClonglong,DClonglong,DCint,DCdouble,DClonglong,DClonglong,DCbool,DClonglong,DClonglong,DClonglong,DCshort,DClonglong,DCdouble,DClonglong,s_llidllBlllsldl)
+VF8(82,DCchar,DCshort,DCbool,DCfloat,DCshort,DCfloat,DCshort,DClonglong,s_csBfsfsl)
+VF12(83,DCfloat,DCbool,DCint,DCshort,DCpointer,DCdouble,DCshort,DCpointer,DClonglong,DCbool,DCpointer,DClonglong,s_fBispdsplBpl)
+VF7(84,DCpointer,DCbool,DCchar,DCfloat,DClonglong,DCdouble,DCfloat,s_pBcfldf)
+VF18(85,DCshort,DClonglong,DCbool,DCbool,DCpointer,DCdouble,DCint,DCdouble,DCshort,DCchar,DCfloat,DCpointer,DCchar,DCint,DCint,DClonglong,DCint,DCpointer,s_slBBpdidscfpciilip)
+VF2(86,DCpointer,DCshort,s_ps)
+VF17(87,DCbool,DCint,DCint,DCchar,DCchar,DCchar,DCchar,DCbool,DCint,DCchar,DCbool,DCdouble,DCint,DCfloat,DCchar,DCpointer,DCshort,s_BiiccccBicBdifcps)
+VF7(88,DCpointer,DCshort,DCdouble,DCchar,DCpointer,DCpointer,DCshort,s_psdcpps)
+VF14(89,DCpointer,DCbool,DCbool,DCfloat,DCbool,DCpointer,DCint,DCdouble,DCchar,DClonglong,DCdouble,DClonglong,DCfloat,DCbool,s_pBBfBpidcldlfB)
+VF17(90,DCchar,DCchar,DCint,DCshort,DCfloat,DCchar,DCint,DCdouble,DCdouble,DCdouble,DCint,DClonglong,DCdouble,DCshort,DCbool,DCint,DCbool,s_ccisfcidddildsBiB)
+VF4(91,DCbool,DCint,DCshort,DCpointer,s_Bisp)
+VF11(92,DCdouble,DCshort,DCint,DCint,DCshort,DCpointer,DCchar,DCint,DCbool,DCdouble,DClonglong,s_dsiispciBdl)
+VF16(93,DCbool,DCpointer,DCshort,DClonglong,DCshort,DCchar,DClonglong,DCshort,DCshort,DCint,DCint,DCchar,DClonglong,DCdouble,DCchar,DCdouble,s_Bpslsclssiicldcd)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32std/config.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,28 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2_x86win32std/config.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase (on stderr) */
+#define NCASES 94
+#define MAXARGS 19
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32std/design.cfg	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,100 @@
+lBsiifdpdlspldiB
+discsBlBBpipiBslBcp
+lsdlfdpflpii
+ddiss
+lfBsddlc
+sisBdBiBfs
+sBBlcfpsi
+fcpicddpsBdiBpfcs
+cBfcslp
+
+ificBillcppsp
+pdplisfBppipdfd
+lssi
+lilc
+lBdddppfcBlslddlp
+
+Bc
+cBisdiclpBdislpppc
+BdldplddlsffcBpsd
+flcflilf
+psslspBpscBl
+cclipsd
+sfBddiscpBlsiBB
+Blcd
+cficflllccBBslBfccl
+lpBdiiflfiliif
+sBBpislfiBBspfBd
+llldlBpilBspiiffsis
+
+dipspcfiicdl
+ffpBslBBcslcBfB
+fc
+dffipBfpc
+llfsiliddB
+fsBlidilfss
+
+ciflBdpslcf
+il
+lsc
+fcfcf
+dif
+ifBlflcppcsfi
+Bi
+pcdsfi
+slpBc
+dBdf
+sclpilllidcpsBci
+sfisfBllpBdipfs
+fd
+lipfps
+csdfdBcf
+sipfcsidpd
+sdpBBBBBilsiBfil
+clc
+BpflBflBp
+lsfcldplpifiiicpd
+icid
+siBlisBlfBpiipdc
+pilsf
+Bisds
+BdcidBpilBlssdsBiB
+sBssdl
+cfBciisf
+sdl
+siflBdiBcpplcsBf
+dpidBcd
+pBicdffflflfpclpBf
+sBcdfBp
+ccfpplsl
+ldddBpBfc
+Bdpdppisclpl
+slslcippsilc
+sBf
+dppfllicpcdB
+sscfidccisflfsdpsl
+lsBclsdBcscdlfdB
+scfflpffpsd
+lciBdBddBfcBdB
+slBl
+BBidcpBfsBBc
+plisc
+c
+pdfBiiffpfcdfss
+dccsfllcdBfflc
+psfBlsiidBsppcBifd
+llidllBlllsldl
+csBfsfsl
+fBispdsplBpl
+pBcfldf
+slBBpdidscfpciilip
+ps
+
+
+BiiccccBicBdifcps
+psdcpps
+pBBfBpidcldlfB
+ccisfcidddildsBiB
+Bisp
+dsiispciBdl
+Bpslsclssiicldcd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32std/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32std/funcinfo.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,44 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2_x86win32std/funcinfo.h
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#ifndef DC_TEST_FUNCINFO_H
+#define DC_TEST_FUNCINFO_H
+
+#include "../../dyncall/dyncall_signature.h"
+
+struct funcinfo
+{
+  DCpointer        funcptr;
+  const DCsigchar* sig;
+};
+
+extern funcinfo gFuncInfos[];
+
+#endif /* DC_TEST_FUNCINFO_H */
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32std/main.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,180 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite2_x86win32std/main.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+#include "funcinfo.h"
+#include <stdlib.h>
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+int   getId();
+DCpointer getFunc(int x);
+DCValue* getArg(int pos);
+
+
+typedef double precise;
+
+
+DCbool     valueBool[MAXARGS];
+DCchar     valueChar[MAXARGS];
+DCshort    valueShort[MAXARGS];
+DCint      valueInt[MAXARGS];
+DClong     valueLong[MAXARGS];
+DClonglong valueLongLong[MAXARGS];
+DCdouble   valueDouble[MAXARGS];
+DCpointer  valuePointer[MAXARGS];
+DCfloat    valueFloat[MAXARGS];
+
+
+void clearValues();
+
+void init()
+{
+  for (int i = 0 ; i < MAXARGS ; ++i ) {
+
+    valueBool[i] = DCbool( (i % 1) ? DC_TRUE : DC_FALSE );
+    valueChar[i] = DCchar(i);
+    valueShort[i] = DCshort(i);
+    valueInt[i] = DCint(i);
+    valueLong[i] = DClong(i);
+    valueLongLong[i] = DClonglong(i);
+    valueDouble[i] = DCdouble(i);
+    valuePointer[i] = DCpointer(i);
+    valueFloat[i] = DCfloat(i);
+  }
+}
+
+
+bool test(int x)
+{
+  bool r = true;
+  clearValues();
+
+  DCCallVM* pCall;
+
+  funcinfo* fi = &gFuncInfos[x];
+
+  const DCsigchar* sig = &fi->sig[2];
+  const DCsigchar* ptr = sig;
+  DCsigchar ch;
+  int pos;
+ 
+  pos = 0;
+
+  pCall = dcNewCallVM(4096);
+  dcMode(pCall, DC_CALL_C_X86_WIN32_STD);
+  dcReset(pCall);
+ 
+  while ( (ch=*ptr++) != '\0' ) {
+    switch(ch) {
+      case DC_SIGCHAR_BOOL: dcArgBool( pCall, valueBool[pos] ); break;
+      case DC_SIGCHAR_CHAR: dcArgChar( pCall, valueChar[pos] ); break;
+      case DC_SIGCHAR_SHORT: dcArgShort( pCall, valueShort[pos] ); break;
+      case DC_SIGCHAR_INT: dcArgInt( pCall, valueInt[pos] ); break;
+      case DC_SIGCHAR_LONG: dcArgLong( pCall, valueLong[pos] ); break;
+      case DC_SIGCHAR_LONGLONG: dcArgLongLong( pCall, valueLongLong[pos] ); break;
+      case DC_SIGCHAR_FLOAT: dcArgFloat( pCall, valueFloat[pos] ); break;
+      case DC_SIGCHAR_DOUBLE: dcArgDouble( pCall, valueDouble[pos] ); break;
+      case DC_SIGCHAR_POINTER: dcArgPointer( pCall, valuePointer[pos] ); break;
+    }
+    ++pos;
+  }
+
+  dcCallVoid( pCall, fi->funcptr );
+
+ 
+  if ( getId() == x ) { 
+
+    ptr = sig;
+    pos = 0;
+    while( ( ch=*ptr++ ) != '\0' ) {
+
+      switch(ch) {
+        case DC_SIGCHAR_BOOL: if ( getArg(pos)->B != valueBool  [pos] ) r = false; break;
+        case DC_SIGCHAR_CHAR: if ( getArg(pos)->c != valueChar  [pos] ) r = false; break;
+        case DC_SIGCHAR_SHORT: if ( getArg(pos)->s != valueShort  [pos] ) r = false; break;
+        case DC_SIGCHAR_INT: if ( getArg(pos)->i != valueInt   [pos] ) r = false; break;
+        case DC_SIGCHAR_LONG: if ( getArg(pos)->l != valueLong [pos] ) r = false; break;
+        case DC_SIGCHAR_LONGLONG: if ( getArg(pos)->L != valueLongLong  [pos] ) r = false; break;
+        case DC_SIGCHAR_FLOAT: if ( getArg(pos)->f != valueFloat [pos] ) r = false; break;
+        case DC_SIGCHAR_DOUBLE: if ( getArg(pos)->d != valueDouble[pos] ) r = false; break;
+        case DC_SIGCHAR_POINTER: if ( getArg(pos)->p != valuePointer   [pos] ) r = false; break;
+      }
+      ++pos;
+    }
+
+  } else {
+    r = false;
+  }
+
+  printf("%d-%s:%d\n", x, sig, r);
+   
+  dcFree(pCall);
+
+  return r;
+}
+
+
+bool run_range(int from, int to)
+{
+  bool r = true;
+  for (int i = from ; i < to ; ++i )
+    r &= test(i);
+  return r;
+}
+
+extern "C" {
+
+int main(int argc, char* argv[])
+{
+  dcTest_initPlatform();
+
+  bool success = false;
+  init();
+  if (argc == 2) {
+    int index = atoi(argv[1]);
+    success = run_range( index, index+1 ); 
+  } else if (argc == 3) {
+    int from = atoi(argv[1]);
+    int to   = atoi(argv[2])+1;
+    success = run_range(from,to);
+  } else {
+    success = run_range(0,NCASES);
+  }
+
+  printf("result: suite2_x86win32std: %s\n", success ? "1" : "0");
+  
+  dcTest_deInitPlatform();
+
+  return (success) ? 0 : -1;
+}
+
+}  // extern "C"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32std/mkcase.py	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+import sys
+
+f = file("design.cfg")
+
+sigmap = { 
+  'B':'DCbool'
+, 'c':'DCchar'
+, 's':'DCshort'
+, 'i':'DCint'
+, 'l':'DClonglong'
+, 'f':'DCfloat'
+, 'd':'DCdouble'
+, 'p':'DCpointer'
+}
+
+apimap = {
+  '_':''
+, 's':'__declspec(stdcall)'
+, 'f':'__declspec(fastcall)'
+}
+
+id = 0
+maxargs = 0
+sys.stdout.write("/* auto generated by mkcase.py (on stdout) */\n");
+for line in f: 
+  line = line.rstrip().lstrip()
+  if len(line) == 0 or line[0] == '#': continue
+  types = [];
+  # args  = len(line)-1
+  args = len(line)
+  maxargs = max(maxargs, args)
+  # api = apimap[ line[0] ]
+  out = [ "VF",str(args),"(", str(id), "," ];
+  for i in xrange(0,len(line)):   
+    types += [ sigmap[ line[i] ] ]
+  out += [ ",".join( types ), ",s_", line, ")\n" ]
+  out = "".join(out)
+  sys.stdout.write(out)
+  id  += 1
+
+sys.stderr.write("/* auto generated by mkcase (on stderr) */\n");
+sys.stderr.write("".join( ["#define NCASES ",str(id),"\n"] ) )
+sys.stderr.write("".join( ["#define MAXARGS ",str(maxargs),"\n"] ) )
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite2_x86win32std/rand.py	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,45 @@
+#!/usr/bin/python
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+import random
+import sys
+
+N = 100
+MINARG = 0
+MAXARG = 19
+
+argtypes = [ 'B','c','s','i','l','f','d','p' ]
+apitypes = [ '_' ]
+
+def sig(n):
+  s = ""
+  x = random.randint( 0, len(apitypes)-1 )
+  # s += apitypes[x]
+  for i in xrange(0,n):
+    x = random.randint( 0, len(argtypes)-1 )
+    s += argtypes[x]
+  return s
+
+for i in xrange(0,N):
+  n = random.randint(MINARG,MAXARG)
+  sys.stdout.write( sig(n) )
+  sys.stdout.write( "\n" )
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite3/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+add_executable(suite3 case.cc main.cc)
+target_link_libraries(suite3 dyncall_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite3/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite3/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP      = suite3
+OBJS     = case.o main.o
+TOP      = ../..
+CFLAGS  += -I${TOP}/dyncall
+LDFLAGS += -L${TOP}/dyncall
+LDLIBS  += -ldyncall_s
+
+.PHONY: all clean autogen
+
+all: ${APP}
+${APP}: ${OBJS} 
+	${CXX} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP}
+clean:
+	rm -f ${APP} ${OBJS}
+autogen:
+	python mkcase.py 1>case.h 2>config.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite3/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP       = suite3
+OBJS      = case.o main.o
+SRCTOP    = ${VPATH}/../..
+BLDTOP    = ../..
+CPPFLAGS += -I${SRCTOP}/dyncall
+LDLIBS   += -L${BLDTOP}/dyncall -ldyncall_s
+.PHONY: all clean install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CXX} ${CXXFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP}
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite3/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,69 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+AUTOS = config.h case.h
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = suite3.exe
+OBJS = main.obj case.obj# ..\testmain\main_ansic.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib > nul
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = suite3.nds
+OBJS = main.o case.o# ..\testmain\main_NDS.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+
+$(OBJS): $(AUTOS)
+
+$(AUTOS): mkcase.py
+	python mkcase.py >case.h 2>config.h
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite3/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,56 @@
+
+
+dyncall stress test suite: testing standard C calls
+===================================================
+Copyright (c) 2007-2009 Daniel Adler <dadler@uni-goettingen.de>, 
+                        Tassilo Philipp <tphilipp@potion-studios.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+requirements:
+  python (for preprocessing)
+
+configuration:
+  edit "nargs" in mkcase.py and run
+  
+    make distclean 
+    make 
+    
+  on shell.
+  
+
+usage:
+
+  suite         	        - run full range
+  suite <id> 			- run test id <id>
+  suite <from> <to>		- run test id <from> to id <to> (inclusive).
+
+  see test details in case.h
+
+
+description:
+
+  the test invokes 'void'-functions that effectively overwrite global 
+  variables in a structured way.
+  
+  functions are identified by an id (a number starting at 0).
+  
+  the implementation of each function does
+  
+    sets the gID to its id (which is compiled in) 
+  
+    sets all arguments into type-specific value vectors at the given position
+  
+  This version is a modification to "test/suite" using only 4 basic types:
+  integer, float, double and long long.
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite3/case.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,97 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite3/case.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+
+DCValue mValue[NARGS];
+
+void clearValues() { for(int i = 0;i<NARGS;++i) mValue[i].L = 0xCAFEBABEDEADC0DEULL; }
+
+template<typename T> void g(T value, int pos);
+
+template<> void g(DCint      value, int pos) { mValue[pos].i = value; }
+template<> void g(DClonglong value, int pos) { mValue[pos].L = value; }
+template<> void g(DCfloat    value, int pos) { mValue[pos].f = value; }
+template<> void g(DCdouble   value, int pos) { mValue[pos].d = value; }
+
+DCValue* getArg(int pos) { return &mValue[pos]; }
+
+int gID;
+int getId() { return gID; }
+
+extern "C" {
+
+#define VF0(id,S) void S () {gID=id;}
+#define VF1(id,A1,S) void S (A1 a1) {gID=id;g<A1>(a1,0);}
+#define VF2(id,A1,A2,S) void S (A1 a1, A2 a2) {gID=id;g<A1>(a1,0);g<A2>(a2,1);}
+#define VF3(id,A1,A2,A3,S) void S (A1 a1, A2 a2,A3 a3) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);}
+#define VF4(id,A1,A2,A3,A4,S) void S (A1 a1, A2 a2,A3 a3,A4 a4) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);}
+#define VF5(id,A1,A2,A3,A4,A5,S) void S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);}
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) void S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);}
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) void S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);}
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) void S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);}
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) void S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);}
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) void S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);}
+
+#include "case.h"
+
+}
+
+#undef VF0
+#undef VF1
+#undef VF2
+#undef VF3
+#undef VF4
+#undef VF5
+#undef VF6
+#undef VF7
+#undef VF8
+#undef VF9
+#undef VF10
+
+#define VF0(id,S) reinterpret_cast<void(*)()>(S),
+#define VF1(id,A1,S) reinterpret_cast<void(*)()>(S),
+#define VF2(id,A1,A2,S) reinterpret_cast<void(*)()>(S),
+#define VF3(id,A1,A2,A3,S) reinterpret_cast<void(*)()>(S),
+#define VF4(id,A1,A2,A3,A4,S) reinterpret_cast<void(*)()>(S),
+#define VF5(id,A1,A2,A3,A4,A5,S) reinterpret_cast<void(*)()>(S),
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) reinterpret_cast<void(*)()>(S),
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) reinterpret_cast<void(*)()>(S),
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) reinterpret_cast<void(*)()>(S),
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) reinterpret_cast<void(*)()>(S),
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) reinterpret_cast<void(*)()>(S),
+
+typedef void (*fp)();
+fp gFuncTable[] = {
+#include "case.h"
+};
+
+DCpointer getFunc(int x) {
+  return (DCpointer) gFuncTable[x];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite3/case.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,367 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite3/case.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase.py (on stdout) */
+VF0(0,f_)
+VF1(1,DCint,f_i)
+VF1(2,DClonglong,f_L)
+VF1(3,DCdouble,f_d)
+VF1(4,DCfloat,f_f)
+VF2(5,DCint,DCint,f_ii)
+VF2(6,DClonglong,DCint,f_Li)
+VF2(7,DCdouble,DCint,f_di)
+VF2(8,DCfloat,DCint,f_fi)
+VF2(9,DCint,DClonglong,f_iL)
+VF2(10,DClonglong,DClonglong,f_LL)
+VF2(11,DCdouble,DClonglong,f_dL)
+VF2(12,DCfloat,DClonglong,f_fL)
+VF2(13,DCint,DCdouble,f_id)
+VF2(14,DClonglong,DCdouble,f_Ld)
+VF2(15,DCdouble,DCdouble,f_dd)
+VF2(16,DCfloat,DCdouble,f_fd)
+VF2(17,DCint,DCfloat,f_if)
+VF2(18,DClonglong,DCfloat,f_Lf)
+VF2(19,DCdouble,DCfloat,f_df)
+VF2(20,DCfloat,DCfloat,f_ff)
+VF3(21,DCint,DCint,DCint,f_iii)
+VF3(22,DClonglong,DCint,DCint,f_Lii)
+VF3(23,DCdouble,DCint,DCint,f_dii)
+VF3(24,DCfloat,DCint,DCint,f_fii)
+VF3(25,DCint,DClonglong,DCint,f_iLi)
+VF3(26,DClonglong,DClonglong,DCint,f_LLi)
+VF3(27,DCdouble,DClonglong,DCint,f_dLi)
+VF3(28,DCfloat,DClonglong,DCint,f_fLi)
+VF3(29,DCint,DCdouble,DCint,f_idi)
+VF3(30,DClonglong,DCdouble,DCint,f_Ldi)
+VF3(31,DCdouble,DCdouble,DCint,f_ddi)
+VF3(32,DCfloat,DCdouble,DCint,f_fdi)
+VF3(33,DCint,DCfloat,DCint,f_ifi)
+VF3(34,DClonglong,DCfloat,DCint,f_Lfi)
+VF3(35,DCdouble,DCfloat,DCint,f_dfi)
+VF3(36,DCfloat,DCfloat,DCint,f_ffi)
+VF3(37,DCint,DCint,DClonglong,f_iiL)
+VF3(38,DClonglong,DCint,DClonglong,f_LiL)
+VF3(39,DCdouble,DCint,DClonglong,f_diL)
+VF3(40,DCfloat,DCint,DClonglong,f_fiL)
+VF3(41,DCint,DClonglong,DClonglong,f_iLL)
+VF3(42,DClonglong,DClonglong,DClonglong,f_LLL)
+VF3(43,DCdouble,DClonglong,DClonglong,f_dLL)
+VF3(44,DCfloat,DClonglong,DClonglong,f_fLL)
+VF3(45,DCint,DCdouble,DClonglong,f_idL)
+VF3(46,DClonglong,DCdouble,DClonglong,f_LdL)
+VF3(47,DCdouble,DCdouble,DClonglong,f_ddL)
+VF3(48,DCfloat,DCdouble,DClonglong,f_fdL)
+VF3(49,DCint,DCfloat,DClonglong,f_ifL)
+VF3(50,DClonglong,DCfloat,DClonglong,f_LfL)
+VF3(51,DCdouble,DCfloat,DClonglong,f_dfL)
+VF3(52,DCfloat,DCfloat,DClonglong,f_ffL)
+VF3(53,DCint,DCint,DCdouble,f_iid)
+VF3(54,DClonglong,DCint,DCdouble,f_Lid)
+VF3(55,DCdouble,DCint,DCdouble,f_did)
+VF3(56,DCfloat,DCint,DCdouble,f_fid)
+VF3(57,DCint,DClonglong,DCdouble,f_iLd)
+VF3(58,DClonglong,DClonglong,DCdouble,f_LLd)
+VF3(59,DCdouble,DClonglong,DCdouble,f_dLd)
+VF3(60,DCfloat,DClonglong,DCdouble,f_fLd)
+VF3(61,DCint,DCdouble,DCdouble,f_idd)
+VF3(62,DClonglong,DCdouble,DCdouble,f_Ldd)
+VF3(63,DCdouble,DCdouble,DCdouble,f_ddd)
+VF3(64,DCfloat,DCdouble,DCdouble,f_fdd)
+VF3(65,DCint,DCfloat,DCdouble,f_ifd)
+VF3(66,DClonglong,DCfloat,DCdouble,f_Lfd)
+VF3(67,DCdouble,DCfloat,DCdouble,f_dfd)
+VF3(68,DCfloat,DCfloat,DCdouble,f_ffd)
+VF3(69,DCint,DCint,DCfloat,f_iif)
+VF3(70,DClonglong,DCint,DCfloat,f_Lif)
+VF3(71,DCdouble,DCint,DCfloat,f_dif)
+VF3(72,DCfloat,DCint,DCfloat,f_fif)
+VF3(73,DCint,DClonglong,DCfloat,f_iLf)
+VF3(74,DClonglong,DClonglong,DCfloat,f_LLf)
+VF3(75,DCdouble,DClonglong,DCfloat,f_dLf)
+VF3(76,DCfloat,DClonglong,DCfloat,f_fLf)
+VF3(77,DCint,DCdouble,DCfloat,f_idf)
+VF3(78,DClonglong,DCdouble,DCfloat,f_Ldf)
+VF3(79,DCdouble,DCdouble,DCfloat,f_ddf)
+VF3(80,DCfloat,DCdouble,DCfloat,f_fdf)
+VF3(81,DCint,DCfloat,DCfloat,f_iff)
+VF3(82,DClonglong,DCfloat,DCfloat,f_Lff)
+VF3(83,DCdouble,DCfloat,DCfloat,f_dff)
+VF3(84,DCfloat,DCfloat,DCfloat,f_fff)
+VF4(85,DCint,DCint,DCint,DCint,f_iiii)
+VF4(86,DClonglong,DCint,DCint,DCint,f_Liii)
+VF4(87,DCdouble,DCint,DCint,DCint,f_diii)
+VF4(88,DCfloat,DCint,DCint,DCint,f_fiii)
+VF4(89,DCint,DClonglong,DCint,DCint,f_iLii)
+VF4(90,DClonglong,DClonglong,DCint,DCint,f_LLii)
+VF4(91,DCdouble,DClonglong,DCint,DCint,f_dLii)
+VF4(92,DCfloat,DClonglong,DCint,DCint,f_fLii)
+VF4(93,DCint,DCdouble,DCint,DCint,f_idii)
+VF4(94,DClonglong,DCdouble,DCint,DCint,f_Ldii)
+VF4(95,DCdouble,DCdouble,DCint,DCint,f_ddii)
+VF4(96,DCfloat,DCdouble,DCint,DCint,f_fdii)
+VF4(97,DCint,DCfloat,DCint,DCint,f_ifii)
+VF4(98,DClonglong,DCfloat,DCint,DCint,f_Lfii)
+VF4(99,DCdouble,DCfloat,DCint,DCint,f_dfii)
+VF4(100,DCfloat,DCfloat,DCint,DCint,f_ffii)
+VF4(101,DCint,DCint,DClonglong,DCint,f_iiLi)
+VF4(102,DClonglong,DCint,DClonglong,DCint,f_LiLi)
+VF4(103,DCdouble,DCint,DClonglong,DCint,f_diLi)
+VF4(104,DCfloat,DCint,DClonglong,DCint,f_fiLi)
+VF4(105,DCint,DClonglong,DClonglong,DCint,f_iLLi)
+VF4(106,DClonglong,DClonglong,DClonglong,DCint,f_LLLi)
+VF4(107,DCdouble,DClonglong,DClonglong,DCint,f_dLLi)
+VF4(108,DCfloat,DClonglong,DClonglong,DCint,f_fLLi)
+VF4(109,DCint,DCdouble,DClonglong,DCint,f_idLi)
+VF4(110,DClonglong,DCdouble,DClonglong,DCint,f_LdLi)
+VF4(111,DCdouble,DCdouble,DClonglong,DCint,f_ddLi)
+VF4(112,DCfloat,DCdouble,DClonglong,DCint,f_fdLi)
+VF4(113,DCint,DCfloat,DClonglong,DCint,f_ifLi)
+VF4(114,DClonglong,DCfloat,DClonglong,DCint,f_LfLi)
+VF4(115,DCdouble,DCfloat,DClonglong,DCint,f_dfLi)
+VF4(116,DCfloat,DCfloat,DClonglong,DCint,f_ffLi)
+VF4(117,DCint,DCint,DCdouble,DCint,f_iidi)
+VF4(118,DClonglong,DCint,DCdouble,DCint,f_Lidi)
+VF4(119,DCdouble,DCint,DCdouble,DCint,f_didi)
+VF4(120,DCfloat,DCint,DCdouble,DCint,f_fidi)
+VF4(121,DCint,DClonglong,DCdouble,DCint,f_iLdi)
+VF4(122,DClonglong,DClonglong,DCdouble,DCint,f_LLdi)
+VF4(123,DCdouble,DClonglong,DCdouble,DCint,f_dLdi)
+VF4(124,DCfloat,DClonglong,DCdouble,DCint,f_fLdi)
+VF4(125,DCint,DCdouble,DCdouble,DCint,f_iddi)
+VF4(126,DClonglong,DCdouble,DCdouble,DCint,f_Lddi)
+VF4(127,DCdouble,DCdouble,DCdouble,DCint,f_dddi)
+VF4(128,DCfloat,DCdouble,DCdouble,DCint,f_fddi)
+VF4(129,DCint,DCfloat,DCdouble,DCint,f_ifdi)
+VF4(130,DClonglong,DCfloat,DCdouble,DCint,f_Lfdi)
+VF4(131,DCdouble,DCfloat,DCdouble,DCint,f_dfdi)
+VF4(132,DCfloat,DCfloat,DCdouble,DCint,f_ffdi)
+VF4(133,DCint,DCint,DCfloat,DCint,f_iifi)
+VF4(134,DClonglong,DCint,DCfloat,DCint,f_Lifi)
+VF4(135,DCdouble,DCint,DCfloat,DCint,f_difi)
+VF4(136,DCfloat,DCint,DCfloat,DCint,f_fifi)
+VF4(137,DCint,DClonglong,DCfloat,DCint,f_iLfi)
+VF4(138,DClonglong,DClonglong,DCfloat,DCint,f_LLfi)
+VF4(139,DCdouble,DClonglong,DCfloat,DCint,f_dLfi)
+VF4(140,DCfloat,DClonglong,DCfloat,DCint,f_fLfi)
+VF4(141,DCint,DCdouble,DCfloat,DCint,f_idfi)
+VF4(142,DClonglong,DCdouble,DCfloat,DCint,f_Ldfi)
+VF4(143,DCdouble,DCdouble,DCfloat,DCint,f_ddfi)
+VF4(144,DCfloat,DCdouble,DCfloat,DCint,f_fdfi)
+VF4(145,DCint,DCfloat,DCfloat,DCint,f_iffi)
+VF4(146,DClonglong,DCfloat,DCfloat,DCint,f_Lffi)
+VF4(147,DCdouble,DCfloat,DCfloat,DCint,f_dffi)
+VF4(148,DCfloat,DCfloat,DCfloat,DCint,f_fffi)
+VF4(149,DCint,DCint,DCint,DClonglong,f_iiiL)
+VF4(150,DClonglong,DCint,DCint,DClonglong,f_LiiL)
+VF4(151,DCdouble,DCint,DCint,DClonglong,f_diiL)
+VF4(152,DCfloat,DCint,DCint,DClonglong,f_fiiL)
+VF4(153,DCint,DClonglong,DCint,DClonglong,f_iLiL)
+VF4(154,DClonglong,DClonglong,DCint,DClonglong,f_LLiL)
+VF4(155,DCdouble,DClonglong,DCint,DClonglong,f_dLiL)
+VF4(156,DCfloat,DClonglong,DCint,DClonglong,f_fLiL)
+VF4(157,DCint,DCdouble,DCint,DClonglong,f_idiL)
+VF4(158,DClonglong,DCdouble,DCint,DClonglong,f_LdiL)
+VF4(159,DCdouble,DCdouble,DCint,DClonglong,f_ddiL)
+VF4(160,DCfloat,DCdouble,DCint,DClonglong,f_fdiL)
+VF4(161,DCint,DCfloat,DCint,DClonglong,f_ifiL)
+VF4(162,DClonglong,DCfloat,DCint,DClonglong,f_LfiL)
+VF4(163,DCdouble,DCfloat,DCint,DClonglong,f_dfiL)
+VF4(164,DCfloat,DCfloat,DCint,DClonglong,f_ffiL)
+VF4(165,DCint,DCint,DClonglong,DClonglong,f_iiLL)
+VF4(166,DClonglong,DCint,DClonglong,DClonglong,f_LiLL)
+VF4(167,DCdouble,DCint,DClonglong,DClonglong,f_diLL)
+VF4(168,DCfloat,DCint,DClonglong,DClonglong,f_fiLL)
+VF4(169,DCint,DClonglong,DClonglong,DClonglong,f_iLLL)
+VF4(170,DClonglong,DClonglong,DClonglong,DClonglong,f_LLLL)
+VF4(171,DCdouble,DClonglong,DClonglong,DClonglong,f_dLLL)
+VF4(172,DCfloat,DClonglong,DClonglong,DClonglong,f_fLLL)
+VF4(173,DCint,DCdouble,DClonglong,DClonglong,f_idLL)
+VF4(174,DClonglong,DCdouble,DClonglong,DClonglong,f_LdLL)
+VF4(175,DCdouble,DCdouble,DClonglong,DClonglong,f_ddLL)
+VF4(176,DCfloat,DCdouble,DClonglong,DClonglong,f_fdLL)
+VF4(177,DCint,DCfloat,DClonglong,DClonglong,f_ifLL)
+VF4(178,DClonglong,DCfloat,DClonglong,DClonglong,f_LfLL)
+VF4(179,DCdouble,DCfloat,DClonglong,DClonglong,f_dfLL)
+VF4(180,DCfloat,DCfloat,DClonglong,DClonglong,f_ffLL)
+VF4(181,DCint,DCint,DCdouble,DClonglong,f_iidL)
+VF4(182,DClonglong,DCint,DCdouble,DClonglong,f_LidL)
+VF4(183,DCdouble,DCint,DCdouble,DClonglong,f_didL)
+VF4(184,DCfloat,DCint,DCdouble,DClonglong,f_fidL)
+VF4(185,DCint,DClonglong,DCdouble,DClonglong,f_iLdL)
+VF4(186,DClonglong,DClonglong,DCdouble,DClonglong,f_LLdL)
+VF4(187,DCdouble,DClonglong,DCdouble,DClonglong,f_dLdL)
+VF4(188,DCfloat,DClonglong,DCdouble,DClonglong,f_fLdL)
+VF4(189,DCint,DCdouble,DCdouble,DClonglong,f_iddL)
+VF4(190,DClonglong,DCdouble,DCdouble,DClonglong,f_LddL)
+VF4(191,DCdouble,DCdouble,DCdouble,DClonglong,f_dddL)
+VF4(192,DCfloat,DCdouble,DCdouble,DClonglong,f_fddL)
+VF4(193,DCint,DCfloat,DCdouble,DClonglong,f_ifdL)
+VF4(194,DClonglong,DCfloat,DCdouble,DClonglong,f_LfdL)
+VF4(195,DCdouble,DCfloat,DCdouble,DClonglong,f_dfdL)
+VF4(196,DCfloat,DCfloat,DCdouble,DClonglong,f_ffdL)
+VF4(197,DCint,DCint,DCfloat,DClonglong,f_iifL)
+VF4(198,DClonglong,DCint,DCfloat,DClonglong,f_LifL)
+VF4(199,DCdouble,DCint,DCfloat,DClonglong,f_difL)
+VF4(200,DCfloat,DCint,DCfloat,DClonglong,f_fifL)
+VF4(201,DCint,DClonglong,DCfloat,DClonglong,f_iLfL)
+VF4(202,DClonglong,DClonglong,DCfloat,DClonglong,f_LLfL)
+VF4(203,DCdouble,DClonglong,DCfloat,DClonglong,f_dLfL)
+VF4(204,DCfloat,DClonglong,DCfloat,DClonglong,f_fLfL)
+VF4(205,DCint,DCdouble,DCfloat,DClonglong,f_idfL)
+VF4(206,DClonglong,DCdouble,DCfloat,DClonglong,f_LdfL)
+VF4(207,DCdouble,DCdouble,DCfloat,DClonglong,f_ddfL)
+VF4(208,DCfloat,DCdouble,DCfloat,DClonglong,f_fdfL)
+VF4(209,DCint,DCfloat,DCfloat,DClonglong,f_iffL)
+VF4(210,DClonglong,DCfloat,DCfloat,DClonglong,f_LffL)
+VF4(211,DCdouble,DCfloat,DCfloat,DClonglong,f_dffL)
+VF4(212,DCfloat,DCfloat,DCfloat,DClonglong,f_fffL)
+VF4(213,DCint,DCint,DCint,DCdouble,f_iiid)
+VF4(214,DClonglong,DCint,DCint,DCdouble,f_Liid)
+VF4(215,DCdouble,DCint,DCint,DCdouble,f_diid)
+VF4(216,DCfloat,DCint,DCint,DCdouble,f_fiid)
+VF4(217,DCint,DClonglong,DCint,DCdouble,f_iLid)
+VF4(218,DClonglong,DClonglong,DCint,DCdouble,f_LLid)
+VF4(219,DCdouble,DClonglong,DCint,DCdouble,f_dLid)
+VF4(220,DCfloat,DClonglong,DCint,DCdouble,f_fLid)
+VF4(221,DCint,DCdouble,DCint,DCdouble,f_idid)
+VF4(222,DClonglong,DCdouble,DCint,DCdouble,f_Ldid)
+VF4(223,DCdouble,DCdouble,DCint,DCdouble,f_ddid)
+VF4(224,DCfloat,DCdouble,DCint,DCdouble,f_fdid)
+VF4(225,DCint,DCfloat,DCint,DCdouble,f_ifid)
+VF4(226,DClonglong,DCfloat,DCint,DCdouble,f_Lfid)
+VF4(227,DCdouble,DCfloat,DCint,DCdouble,f_dfid)
+VF4(228,DCfloat,DCfloat,DCint,DCdouble,f_ffid)
+VF4(229,DCint,DCint,DClonglong,DCdouble,f_iiLd)
+VF4(230,DClonglong,DCint,DClonglong,DCdouble,f_LiLd)
+VF4(231,DCdouble,DCint,DClonglong,DCdouble,f_diLd)
+VF4(232,DCfloat,DCint,DClonglong,DCdouble,f_fiLd)
+VF4(233,DCint,DClonglong,DClonglong,DCdouble,f_iLLd)
+VF4(234,DClonglong,DClonglong,DClonglong,DCdouble,f_LLLd)
+VF4(235,DCdouble,DClonglong,DClonglong,DCdouble,f_dLLd)
+VF4(236,DCfloat,DClonglong,DClonglong,DCdouble,f_fLLd)
+VF4(237,DCint,DCdouble,DClonglong,DCdouble,f_idLd)
+VF4(238,DClonglong,DCdouble,DClonglong,DCdouble,f_LdLd)
+VF4(239,DCdouble,DCdouble,DClonglong,DCdouble,f_ddLd)
+VF4(240,DCfloat,DCdouble,DClonglong,DCdouble,f_fdLd)
+VF4(241,DCint,DCfloat,DClonglong,DCdouble,f_ifLd)
+VF4(242,DClonglong,DCfloat,DClonglong,DCdouble,f_LfLd)
+VF4(243,DCdouble,DCfloat,DClonglong,DCdouble,f_dfLd)
+VF4(244,DCfloat,DCfloat,DClonglong,DCdouble,f_ffLd)
+VF4(245,DCint,DCint,DCdouble,DCdouble,f_iidd)
+VF4(246,DClonglong,DCint,DCdouble,DCdouble,f_Lidd)
+VF4(247,DCdouble,DCint,DCdouble,DCdouble,f_didd)
+VF4(248,DCfloat,DCint,DCdouble,DCdouble,f_fidd)
+VF4(249,DCint,DClonglong,DCdouble,DCdouble,f_iLdd)
+VF4(250,DClonglong,DClonglong,DCdouble,DCdouble,f_LLdd)
+VF4(251,DCdouble,DClonglong,DCdouble,DCdouble,f_dLdd)
+VF4(252,DCfloat,DClonglong,DCdouble,DCdouble,f_fLdd)
+VF4(253,DCint,DCdouble,DCdouble,DCdouble,f_iddd)
+VF4(254,DClonglong,DCdouble,DCdouble,DCdouble,f_Lddd)
+VF4(255,DCdouble,DCdouble,DCdouble,DCdouble,f_dddd)
+VF4(256,DCfloat,DCdouble,DCdouble,DCdouble,f_fddd)
+VF4(257,DCint,DCfloat,DCdouble,DCdouble,f_ifdd)
+VF4(258,DClonglong,DCfloat,DCdouble,DCdouble,f_Lfdd)
+VF4(259,DCdouble,DCfloat,DCdouble,DCdouble,f_dfdd)
+VF4(260,DCfloat,DCfloat,DCdouble,DCdouble,f_ffdd)
+VF4(261,DCint,DCint,DCfloat,DCdouble,f_iifd)
+VF4(262,DClonglong,DCint,DCfloat,DCdouble,f_Lifd)
+VF4(263,DCdouble,DCint,DCfloat,DCdouble,f_difd)
+VF4(264,DCfloat,DCint,DCfloat,DCdouble,f_fifd)
+VF4(265,DCint,DClonglong,DCfloat,DCdouble,f_iLfd)
+VF4(266,DClonglong,DClonglong,DCfloat,DCdouble,f_LLfd)
+VF4(267,DCdouble,DClonglong,DCfloat,DCdouble,f_dLfd)
+VF4(268,DCfloat,DClonglong,DCfloat,DCdouble,f_fLfd)
+VF4(269,DCint,DCdouble,DCfloat,DCdouble,f_idfd)
+VF4(270,DClonglong,DCdouble,DCfloat,DCdouble,f_Ldfd)
+VF4(271,DCdouble,DCdouble,DCfloat,DCdouble,f_ddfd)
+VF4(272,DCfloat,DCdouble,DCfloat,DCdouble,f_fdfd)
+VF4(273,DCint,DCfloat,DCfloat,DCdouble,f_iffd)
+VF4(274,DClonglong,DCfloat,DCfloat,DCdouble,f_Lffd)
+VF4(275,DCdouble,DCfloat,DCfloat,DCdouble,f_dffd)
+VF4(276,DCfloat,DCfloat,DCfloat,DCdouble,f_fffd)
+VF4(277,DCint,DCint,DCint,DCfloat,f_iiif)
+VF4(278,DClonglong,DCint,DCint,DCfloat,f_Liif)
+VF4(279,DCdouble,DCint,DCint,DCfloat,f_diif)
+VF4(280,DCfloat,DCint,DCint,DCfloat,f_fiif)
+VF4(281,DCint,DClonglong,DCint,DCfloat,f_iLif)
+VF4(282,DClonglong,DClonglong,DCint,DCfloat,f_LLif)
+VF4(283,DCdouble,DClonglong,DCint,DCfloat,f_dLif)
+VF4(284,DCfloat,DClonglong,DCint,DCfloat,f_fLif)
+VF4(285,DCint,DCdouble,DCint,DCfloat,f_idif)
+VF4(286,DClonglong,DCdouble,DCint,DCfloat,f_Ldif)
+VF4(287,DCdouble,DCdouble,DCint,DCfloat,f_ddif)
+VF4(288,DCfloat,DCdouble,DCint,DCfloat,f_fdif)
+VF4(289,DCint,DCfloat,DCint,DCfloat,f_ifif)
+VF4(290,DClonglong,DCfloat,DCint,DCfloat,f_Lfif)
+VF4(291,DCdouble,DCfloat,DCint,DCfloat,f_dfif)
+VF4(292,DCfloat,DCfloat,DCint,DCfloat,f_ffif)
+VF4(293,DCint,DCint,DClonglong,DCfloat,f_iiLf)
+VF4(294,DClonglong,DCint,DClonglong,DCfloat,f_LiLf)
+VF4(295,DCdouble,DCint,DClonglong,DCfloat,f_diLf)
+VF4(296,DCfloat,DCint,DClonglong,DCfloat,f_fiLf)
+VF4(297,DCint,DClonglong,DClonglong,DCfloat,f_iLLf)
+VF4(298,DClonglong,DClonglong,DClonglong,DCfloat,f_LLLf)
+VF4(299,DCdouble,DClonglong,DClonglong,DCfloat,f_dLLf)
+VF4(300,DCfloat,DClonglong,DClonglong,DCfloat,f_fLLf)
+VF4(301,DCint,DCdouble,DClonglong,DCfloat,f_idLf)
+VF4(302,DClonglong,DCdouble,DClonglong,DCfloat,f_LdLf)
+VF4(303,DCdouble,DCdouble,DClonglong,DCfloat,f_ddLf)
+VF4(304,DCfloat,DCdouble,DClonglong,DCfloat,f_fdLf)
+VF4(305,DCint,DCfloat,DClonglong,DCfloat,f_ifLf)
+VF4(306,DClonglong,DCfloat,DClonglong,DCfloat,f_LfLf)
+VF4(307,DCdouble,DCfloat,DClonglong,DCfloat,f_dfLf)
+VF4(308,DCfloat,DCfloat,DClonglong,DCfloat,f_ffLf)
+VF4(309,DCint,DCint,DCdouble,DCfloat,f_iidf)
+VF4(310,DClonglong,DCint,DCdouble,DCfloat,f_Lidf)
+VF4(311,DCdouble,DCint,DCdouble,DCfloat,f_didf)
+VF4(312,DCfloat,DCint,DCdouble,DCfloat,f_fidf)
+VF4(313,DCint,DClonglong,DCdouble,DCfloat,f_iLdf)
+VF4(314,DClonglong,DClonglong,DCdouble,DCfloat,f_LLdf)
+VF4(315,DCdouble,DClonglong,DCdouble,DCfloat,f_dLdf)
+VF4(316,DCfloat,DClonglong,DCdouble,DCfloat,f_fLdf)
+VF4(317,DCint,DCdouble,DCdouble,DCfloat,f_iddf)
+VF4(318,DClonglong,DCdouble,DCdouble,DCfloat,f_Lddf)
+VF4(319,DCdouble,DCdouble,DCdouble,DCfloat,f_dddf)
+VF4(320,DCfloat,DCdouble,DCdouble,DCfloat,f_fddf)
+VF4(321,DCint,DCfloat,DCdouble,DCfloat,f_ifdf)
+VF4(322,DClonglong,DCfloat,DCdouble,DCfloat,f_Lfdf)
+VF4(323,DCdouble,DCfloat,DCdouble,DCfloat,f_dfdf)
+VF4(324,DCfloat,DCfloat,DCdouble,DCfloat,f_ffdf)
+VF4(325,DCint,DCint,DCfloat,DCfloat,f_iiff)
+VF4(326,DClonglong,DCint,DCfloat,DCfloat,f_Liff)
+VF4(327,DCdouble,DCint,DCfloat,DCfloat,f_diff)
+VF4(328,DCfloat,DCint,DCfloat,DCfloat,f_fiff)
+VF4(329,DCint,DClonglong,DCfloat,DCfloat,f_iLff)
+VF4(330,DClonglong,DClonglong,DCfloat,DCfloat,f_LLff)
+VF4(331,DCdouble,DClonglong,DCfloat,DCfloat,f_dLff)
+VF4(332,DCfloat,DClonglong,DCfloat,DCfloat,f_fLff)
+VF4(333,DCint,DCdouble,DCfloat,DCfloat,f_idff)
+VF4(334,DClonglong,DCdouble,DCfloat,DCfloat,f_Ldff)
+VF4(335,DCdouble,DCdouble,DCfloat,DCfloat,f_ddff)
+VF4(336,DCfloat,DCdouble,DCfloat,DCfloat,f_fdff)
+VF4(337,DCint,DCfloat,DCfloat,DCfloat,f_ifff)
+VF4(338,DClonglong,DCfloat,DCfloat,DCfloat,f_Lfff)
+VF4(339,DCdouble,DCfloat,DCfloat,DCfloat,f_dfff)
+VF4(340,DCfloat,DCfloat,DCfloat,DCfloat,f_ffff)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite3/config.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,28 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite3/config.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase (on stderr) */
+#define NARGS  4
+#define NTYPES 4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite3/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite3/main.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,167 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite3/main.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+#include <math.h>
+#include <stdlib.h>
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+int   getId();
+DCpointer getFunc(int x);
+DCValue* getArg(int pos);
+
+
+DCint      valueInt     [NARGS];
+DClonglong valueLongLong[NARGS];
+DCdouble   valueDouble  [NARGS];
+DCfloat    valueFloat   [NARGS];
+
+
+bool equals(int select, int pos, void* data)
+{
+  switch(select)
+  {
+    case 0: return ( getArg(pos)->i == valueInt     [pos] ); break;
+    case 1: return ( getArg(pos)->l == valueLongLong[pos] ); break;
+    case 2: return ( getArg(pos)->d == valueDouble  [pos] ); break;
+    case 3: return ( getArg(pos)->f == valueFloat   [pos] ); break;
+  }
+  return false;
+}
+
+
+void clearValues();
+
+
+void init()
+{
+  for (int i = 0 ; i < NARGS ; ++i ) {
+
+    valueInt[i]      = DCint(i);
+    valueLongLong[i] = DClonglong(i);
+    valueDouble[i]   = DCdouble(i);
+    valueFloat[i]    = DCfloat(i);
+  } 
+}
+
+
+void push(DCCallVM* pCall, int select, int pos)
+{
+  switch(select) 
+  {
+    case 0: dcArgInt     ( pCall, valueInt     [pos] ); break;
+    case 1: dcArgLongLong( pCall, valueLongLong[pos] ); break;
+    case 2: dcArgDouble  ( pCall, valueDouble  [pos] ); break;
+    case 3: dcArgFloat   ( pCall, valueFloat   [pos] ); break;
+  }
+}
+
+
+#define assert(x) if (!(x)) return false
+
+
+bool test(int x)
+{
+  clearValues();
+
+  DCCallVM* pCall = dcNewCallVM(4096);
+  dcReset(pCall);
+  int y = x;
+  int selects[NARGS] = { 0, };
+  int pos = 0;
+  for(pos = 0;y>0;++pos) 
+  {
+    int select = (y-1) % NTYPES; 
+    selects[pos] = select;
+    push(pCall,select,pos);
+    y = (y-1) / NTYPES;
+  }
+  dcCallVoid(pCall,getFunc(x));
+  
+  assert( getId() == x );
+  
+  for(int i = 0;i<pos;++i) {
+    assert( equals( selects[i], i, getArg(i) ) );      
+  }
+  
+  dcFree(pCall);
+  return true;
+}
+
+
+int powerfact(int x, int n)
+{
+  if (n==0) return 0;
+  return static_cast<int>( pow((double)x,n)+powerfact(x,n-1) );
+}
+
+
+bool run_range(int from, int to)
+{
+  bool tr = true;
+  for (int i = from ; i < to ; ++i ) {
+    printf("%d:",i);
+    bool r = test(i);
+    printf("%d\n", r);
+    tr &= r;
+  }
+  return tr;
+}
+
+extern "C" {
+
+int main(int argc, char* argv[])
+{
+  dcTest_initPlatform();
+
+  bool success = false;
+  init();
+  if (argc == 2) {
+    int index = atoi(argv[1]);
+    success = run_range( index, index+1 ); 
+  } else if (argc == 3) {
+    int from = atoi(argv[1]);
+    int to   = atoi(argv[2])+1;
+    success = run_range(from,to);
+  } else {
+    int ncalls = powerfact(NTYPES,NARGS)+1;
+    success = run_range(0,ncalls);
+  }
+
+  printf("result: suite3: %s\n", success ? "1" : "0");
+
+  dcTest_deInitPlatform();
+
+  return (success) ? 0 : -1;
+}
+
+}  // extern "C"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite3/mkcase.py	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+import sys
+
+# parameters
+
+# nargs max is currently 10, modify case.cpp for more arguments
+nargs    = 4
+
+types    = ["DCint","DClonglong","DCdouble","DCfloat"]
+typeSigs = ["i",    "l",         "d",       "f"      ]
+
+# generator
+
+ntypes = len(types)
+
+sys.stderr.write("/* auto generated by mkcase (on stderr) */\n");
+sys.stderr.write("".join(["#define NARGS  ",str(nargs),"\n"]))
+sys.stderr.write("".join(["#define NTYPES ",str(ntypes),"\n"]))
+
+def powerfact(x, n):
+  if n==0:
+    return 0
+  else:
+    return x**n+powerfact(x,n-1)
+
+x     = 0
+end   = powerfact(ntypes,nargs)+1
+
+sys.stdout.write("/* auto generated by mkcase.py (on stdout) */\n");
+
+while x < end:
+  args = [str(x)]
+  sig  = ["f_"]
+  pos  = 0
+  y    = x
+  while y > 0:
+    s     = (y-1) % ntypes
+    y     = (y-1) / ntypes
+    args += [ types   [s] ]
+    sig  += [ typeSigs[s] ]
+    pos  += 1
+  sig   = "".join(sig)
+  args += [ sig ]
+  args  = ",".join(args)
+  sys.stdout.write( "".join(["VF",str(pos),"(",args,")\n"]) )
+  x += 1
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_floats/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+add_executable(suite_floats case.cc main.cc)
+target_link_libraries(suite_floats dyncall_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_floats/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_floats/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,18 @@
+APP  = suite_floats
+OBJS = case.o main.o
+TOP      = ../..
+CFLAGS  += -I${TOP}/dyncall
+LDFLAGS += -L${TOP}/dyncall
+LDLIBS  += -ldyncall_s
+
+all: ${APP}
+
+
+.PHONY: all clean 
+
+${APP}: ${OBJS} 
+	${CXX} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP}
+
+clean:
+	rm -f ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_floats/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP       = suite_floats
+OBJS      = case.o main.o
+SRCTOP    = ${VPATH}/../..
+BLDTOP    = ../..
+CXXFLAGS += -I${SRCTOP}/dyncall
+LDLIBS   += -L${BLDTOP}/dyncall -ldyncall_s
+.PHONY: all clean install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CXX} ${CXXFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP}
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_floats/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,67 @@
+#
+# Copyright (c) 2007,2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+AUTOS = config.h case.h
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = suite_floats.exe
+OBJS = main.obj case.obj# ..\testmain\main_ansic.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib > nul
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = suite_floats.nds
+OBJS = main.o case.o# ..\testmain\main_NDS.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+
+$(OBJS): $(AUTOS)
+
+$(AUTOS): mkcase.py
+	python mkcase.py >case.h 2>config.h
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_floats/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,55 @@
+dyncall stress test suite: testing standard C calls
+===================================================
+Copyright (c) 2007-2010 Daniel Adler <dadler@uni-goettingen.de>, 
+                        Tassilo Philipp <tphilipp@potion-studios.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+requirements:
+  python (for preprocessing)
+
+configuration:
+  edit "nargs" in mkcase.py and run
+  
+    make distclean 
+    make 
+    
+  on shell.
+  
+
+usage:
+
+  suite_floats         	        - run full range
+  suite_floats <id> 			- run test id <id>
+  suite_floats <from> <to>		- run test id <from> to id <to> (inclusive).
+
+  see test details in case.h
+
+
+description:
+
+  the test invokes 'void'-functions that effectively overwrite global 
+  variables in a structured way.
+  
+  functions are identified by an id (a number starting at 0).
+  
+  the implementation of each function does
+  
+    sets the gID to its id (which is compiled in) 
+  
+    sets all arguments into type-specific value vectors at the given position
+  
+  this suite is a variant of suite which tests only double/float
+   
+  
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_floats/case.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,100 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite_floats/case.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+
+DCValue mValue[NARGS];
+
+void clearValues() { for(int i = 0;i<NARGS;++i) mValue[i].L = 0xCAFEBABEDEADC0DEULL; }
+
+template<typename T> void g(T value, int pos);
+
+template<> void g(DCchar     value, int pos) { mValue[pos].c = value; }
+template<> void g(DCshort    value, int pos) { mValue[pos].s = value; }
+template<> void g(DCint      value, int pos) { mValue[pos].i = value; }
+template<> void g(DClonglong value, int pos) { mValue[pos].l = value; }
+template<> void g(DCfloat    value, int pos) { mValue[pos].f = value; }
+template<> void g(DCdouble   value, int pos) { mValue[pos].d = value; }
+template<> void g(DCpointer  value, int pos) { mValue[pos].p = value; }
+
+DCValue* getArg(int pos) { return &mValue[pos]; }
+
+int gID;
+int getId() { return gID; }
+
+extern "C" {
+
+#define VF0(id,S) void S () {gID=id;}
+#define VF1(id,A1,S) void S (A1 a1) {gID=id;g<A1>(a1,0);}
+#define VF2(id,A1,A2,S) void S (A1 a1, A2 a2) {gID=id;g<A1>(a1,0);g<A2>(a2,1);}
+#define VF3(id,A1,A2,A3,S) void S (A1 a1, A2 a2,A3 a3) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);}
+#define VF4(id,A1,A2,A3,A4,S) void S (A1 a1, A2 a2,A3 a3,A4 a4) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);}
+#define VF5(id,A1,A2,A3,A4,A5,S) void S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);}
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) void S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);}
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) void S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);}
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) void S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);}
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) void S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);}
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) void S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);}
+
+#include "case.h"
+
+}
+
+#undef VF0
+#undef VF1
+#undef VF2
+#undef VF3
+#undef VF4
+#undef VF5
+#undef VF6
+#undef VF7
+#undef VF8
+#undef VF9
+#undef VF10
+
+#define VF0(id,S) reinterpret_cast<void(*)()>(S),
+#define VF1(id,A1,S) reinterpret_cast<void(*)()>(S),
+#define VF2(id,A1,A2,S) reinterpret_cast<void(*)()>(S),
+#define VF3(id,A1,A2,A3,S) reinterpret_cast<void(*)()>(S),
+#define VF4(id,A1,A2,A3,A4,S) reinterpret_cast<void(*)()>(S),
+#define VF5(id,A1,A2,A3,A4,A5,S) reinterpret_cast<void(*)()>(S),
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) reinterpret_cast<void(*)()>(S),
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) reinterpret_cast<void(*)()>(S),
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) reinterpret_cast<void(*)()>(S),
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) reinterpret_cast<void(*)()>(S),
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) reinterpret_cast<void(*)()>(S),
+
+typedef void (*fp)();
+fp gFuncTable[] = {
+#include "case.h"
+};
+
+DCpointer getFunc(int x) {
+  return (DCpointer) gFuncTable[x];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_floats/case.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,2073 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite_floats/case.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase.py (on stdout) */
+VF0(0,f_)
+VF1(1,DCdouble,f_d)
+VF1(2,DCfloat,f_f)
+VF2(3,DCdouble,DCdouble,f_dd)
+VF2(4,DCfloat,DCdouble,f_fd)
+VF2(5,DCdouble,DCfloat,f_df)
+VF2(6,DCfloat,DCfloat,f_ff)
+VF3(7,DCdouble,DCdouble,DCdouble,f_ddd)
+VF3(8,DCfloat,DCdouble,DCdouble,f_fdd)
+VF3(9,DCdouble,DCfloat,DCdouble,f_dfd)
+VF3(10,DCfloat,DCfloat,DCdouble,f_ffd)
+VF3(11,DCdouble,DCdouble,DCfloat,f_ddf)
+VF3(12,DCfloat,DCdouble,DCfloat,f_fdf)
+VF3(13,DCdouble,DCfloat,DCfloat,f_dff)
+VF3(14,DCfloat,DCfloat,DCfloat,f_fff)
+VF4(15,DCdouble,DCdouble,DCdouble,DCdouble,f_dddd)
+VF4(16,DCfloat,DCdouble,DCdouble,DCdouble,f_fddd)
+VF4(17,DCdouble,DCfloat,DCdouble,DCdouble,f_dfdd)
+VF4(18,DCfloat,DCfloat,DCdouble,DCdouble,f_ffdd)
+VF4(19,DCdouble,DCdouble,DCfloat,DCdouble,f_ddfd)
+VF4(20,DCfloat,DCdouble,DCfloat,DCdouble,f_fdfd)
+VF4(21,DCdouble,DCfloat,DCfloat,DCdouble,f_dffd)
+VF4(22,DCfloat,DCfloat,DCfloat,DCdouble,f_fffd)
+VF4(23,DCdouble,DCdouble,DCdouble,DCfloat,f_dddf)
+VF4(24,DCfloat,DCdouble,DCdouble,DCfloat,f_fddf)
+VF4(25,DCdouble,DCfloat,DCdouble,DCfloat,f_dfdf)
+VF4(26,DCfloat,DCfloat,DCdouble,DCfloat,f_ffdf)
+VF4(27,DCdouble,DCdouble,DCfloat,DCfloat,f_ddff)
+VF4(28,DCfloat,DCdouble,DCfloat,DCfloat,f_fdff)
+VF4(29,DCdouble,DCfloat,DCfloat,DCfloat,f_dfff)
+VF4(30,DCfloat,DCfloat,DCfloat,DCfloat,f_ffff)
+VF5(31,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddddd)
+VF5(32,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fdddd)
+VF5(33,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dfddd)
+VF5(34,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ffddd)
+VF5(35,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ddfdd)
+VF5(36,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fdfdd)
+VF5(37,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dffdd)
+VF5(38,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fffdd)
+VF5(39,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dddfd)
+VF5(40,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fddfd)
+VF5(41,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dfdfd)
+VF5(42,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ffdfd)
+VF5(43,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ddffd)
+VF5(44,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fdffd)
+VF5(45,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dfffd)
+VF5(46,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ffffd)
+VF5(47,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ddddf)
+VF5(48,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fdddf)
+VF5(49,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dfddf)
+VF5(50,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ffddf)
+VF5(51,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ddfdf)
+VF5(52,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fdfdf)
+VF5(53,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dffdf)
+VF5(54,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fffdf)
+VF5(55,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dddff)
+VF5(56,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fddff)
+VF5(57,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dfdff)
+VF5(58,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ffdff)
+VF5(59,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ddfff)
+VF5(60,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fdfff)
+VF5(61,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dffff)
+VF5(62,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fffff)
+VF6(63,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dddddd)
+VF6(64,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fddddd)
+VF6(65,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dfdddd)
+VF6(66,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ffdddd)
+VF6(67,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ddfddd)
+VF6(68,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fdfddd)
+VF6(69,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dffddd)
+VF6(70,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fffddd)
+VF6(71,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dddfdd)
+VF6(72,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fddfdd)
+VF6(73,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dfdfdd)
+VF6(74,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ffdfdd)
+VF6(75,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ddffdd)
+VF6(76,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fdffdd)
+VF6(77,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dfffdd)
+VF6(78,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ffffdd)
+VF6(79,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ddddfd)
+VF6(80,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fdddfd)
+VF6(81,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dfddfd)
+VF6(82,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ffddfd)
+VF6(83,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ddfdfd)
+VF6(84,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fdfdfd)
+VF6(85,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dffdfd)
+VF6(86,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fffdfd)
+VF6(87,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dddffd)
+VF6(88,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fddffd)
+VF6(89,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dfdffd)
+VF6(90,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ffdffd)
+VF6(91,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ddfffd)
+VF6(92,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fdfffd)
+VF6(93,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dffffd)
+VF6(94,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fffffd)
+VF6(95,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dddddf)
+VF6(96,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fddddf)
+VF6(97,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dfdddf)
+VF6(98,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ffdddf)
+VF6(99,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ddfddf)
+VF6(100,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fdfddf)
+VF6(101,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dffddf)
+VF6(102,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fffddf)
+VF6(103,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dddfdf)
+VF6(104,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fddfdf)
+VF6(105,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dfdfdf)
+VF6(106,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ffdfdf)
+VF6(107,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ddffdf)
+VF6(108,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fdffdf)
+VF6(109,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dfffdf)
+VF6(110,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ffffdf)
+VF6(111,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ddddff)
+VF6(112,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fdddff)
+VF6(113,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dfddff)
+VF6(114,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ffddff)
+VF6(115,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ddfdff)
+VF6(116,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fdfdff)
+VF6(117,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dffdff)
+VF6(118,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fffdff)
+VF6(119,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dddfff)
+VF6(120,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fddfff)
+VF6(121,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dfdfff)
+VF6(122,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ffdfff)
+VF6(123,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ddffff)
+VF6(124,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fdffff)
+VF6(125,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dfffff)
+VF6(126,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ffffff)
+VF7(127,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddddddd)
+VF7(128,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fdddddd)
+VF7(129,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dfddddd)
+VF7(130,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ffddddd)
+VF7(131,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ddfdddd)
+VF7(132,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fdfdddd)
+VF7(133,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dffdddd)
+VF7(134,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fffdddd)
+VF7(135,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dddfddd)
+VF7(136,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fddfddd)
+VF7(137,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dfdfddd)
+VF7(138,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ffdfddd)
+VF7(139,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ddffddd)
+VF7(140,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fdffddd)
+VF7(141,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dfffddd)
+VF7(142,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ffffddd)
+VF7(143,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ddddfdd)
+VF7(144,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fdddfdd)
+VF7(145,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dfddfdd)
+VF7(146,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ffddfdd)
+VF7(147,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ddfdfdd)
+VF7(148,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fdfdfdd)
+VF7(149,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dffdfdd)
+VF7(150,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fffdfdd)
+VF7(151,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dddffdd)
+VF7(152,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fddffdd)
+VF7(153,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dfdffdd)
+VF7(154,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ffdffdd)
+VF7(155,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ddfffdd)
+VF7(156,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fdfffdd)
+VF7(157,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dffffdd)
+VF7(158,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fffffdd)
+VF7(159,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dddddfd)
+VF7(160,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fddddfd)
+VF7(161,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dfdddfd)
+VF7(162,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ffdddfd)
+VF7(163,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ddfddfd)
+VF7(164,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fdfddfd)
+VF7(165,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dffddfd)
+VF7(166,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fffddfd)
+VF7(167,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dddfdfd)
+VF7(168,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fddfdfd)
+VF7(169,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dfdfdfd)
+VF7(170,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ffdfdfd)
+VF7(171,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ddffdfd)
+VF7(172,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fdffdfd)
+VF7(173,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dfffdfd)
+VF7(174,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ffffdfd)
+VF7(175,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ddddffd)
+VF7(176,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fdddffd)
+VF7(177,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dfddffd)
+VF7(178,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ffddffd)
+VF7(179,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ddfdffd)
+VF7(180,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fdfdffd)
+VF7(181,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dffdffd)
+VF7(182,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fffdffd)
+VF7(183,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dddfffd)
+VF7(184,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fddfffd)
+VF7(185,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dfdfffd)
+VF7(186,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ffdfffd)
+VF7(187,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ddffffd)
+VF7(188,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fdffffd)
+VF7(189,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dfffffd)
+VF7(190,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ffffffd)
+VF7(191,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ddddddf)
+VF7(192,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fdddddf)
+VF7(193,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dfddddf)
+VF7(194,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ffddddf)
+VF7(195,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ddfdddf)
+VF7(196,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fdfdddf)
+VF7(197,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dffdddf)
+VF7(198,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fffdddf)
+VF7(199,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dddfddf)
+VF7(200,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fddfddf)
+VF7(201,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dfdfddf)
+VF7(202,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ffdfddf)
+VF7(203,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ddffddf)
+VF7(204,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fdffddf)
+VF7(205,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dfffddf)
+VF7(206,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ffffddf)
+VF7(207,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ddddfdf)
+VF7(208,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fdddfdf)
+VF7(209,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dfddfdf)
+VF7(210,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ffddfdf)
+VF7(211,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ddfdfdf)
+VF7(212,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fdfdfdf)
+VF7(213,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dffdfdf)
+VF7(214,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fffdfdf)
+VF7(215,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dddffdf)
+VF7(216,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fddffdf)
+VF7(217,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dfdffdf)
+VF7(218,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ffdffdf)
+VF7(219,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ddfffdf)
+VF7(220,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fdfffdf)
+VF7(221,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dffffdf)
+VF7(222,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fffffdf)
+VF7(223,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dddddff)
+VF7(224,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fddddff)
+VF7(225,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dfdddff)
+VF7(226,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ffdddff)
+VF7(227,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ddfddff)
+VF7(228,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fdfddff)
+VF7(229,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dffddff)
+VF7(230,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fffddff)
+VF7(231,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dddfdff)
+VF7(232,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fddfdff)
+VF7(233,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dfdfdff)
+VF7(234,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ffdfdff)
+VF7(235,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ddffdff)
+VF7(236,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fdffdff)
+VF7(237,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dfffdff)
+VF7(238,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ffffdff)
+VF7(239,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ddddfff)
+VF7(240,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fdddfff)
+VF7(241,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dfddfff)
+VF7(242,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ffddfff)
+VF7(243,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ddfdfff)
+VF7(244,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fdfdfff)
+VF7(245,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dffdfff)
+VF7(246,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fffdfff)
+VF7(247,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dddffff)
+VF7(248,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fddffff)
+VF7(249,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dfdffff)
+VF7(250,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ffdffff)
+VF7(251,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ddfffff)
+VF7(252,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fdfffff)
+VF7(253,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dffffff)
+VF7(254,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fffffff)
+VF8(255,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dddddddd)
+VF8(256,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fddddddd)
+VF8(257,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dfdddddd)
+VF8(258,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ffdddddd)
+VF8(259,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddfddddd)
+VF8(260,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fdfddddd)
+VF8(261,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dffddddd)
+VF8(262,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fffddddd)
+VF8(263,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dddfdddd)
+VF8(264,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fddfdddd)
+VF8(265,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dfdfdddd)
+VF8(266,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ffdfdddd)
+VF8(267,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ddffdddd)
+VF8(268,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fdffdddd)
+VF8(269,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dfffdddd)
+VF8(270,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ffffdddd)
+VF8(271,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ddddfddd)
+VF8(272,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fdddfddd)
+VF8(273,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dfddfddd)
+VF8(274,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ffddfddd)
+VF8(275,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ddfdfddd)
+VF8(276,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fdfdfddd)
+VF8(277,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dffdfddd)
+VF8(278,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fffdfddd)
+VF8(279,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dddffddd)
+VF8(280,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fddffddd)
+VF8(281,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dfdffddd)
+VF8(282,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ffdffddd)
+VF8(283,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ddfffddd)
+VF8(284,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fdfffddd)
+VF8(285,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dffffddd)
+VF8(286,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fffffddd)
+VF8(287,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dddddfdd)
+VF8(288,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fddddfdd)
+VF8(289,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dfdddfdd)
+VF8(290,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ffdddfdd)
+VF8(291,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ddfddfdd)
+VF8(292,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fdfddfdd)
+VF8(293,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dffddfdd)
+VF8(294,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fffddfdd)
+VF8(295,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dddfdfdd)
+VF8(296,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fddfdfdd)
+VF8(297,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dfdfdfdd)
+VF8(298,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ffdfdfdd)
+VF8(299,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ddffdfdd)
+VF8(300,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fdffdfdd)
+VF8(301,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dfffdfdd)
+VF8(302,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ffffdfdd)
+VF8(303,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ddddffdd)
+VF8(304,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fdddffdd)
+VF8(305,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dfddffdd)
+VF8(306,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ffddffdd)
+VF8(307,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ddfdffdd)
+VF8(308,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fdfdffdd)
+VF8(309,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dffdffdd)
+VF8(310,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fffdffdd)
+VF8(311,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dddfffdd)
+VF8(312,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fddfffdd)
+VF8(313,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dfdfffdd)
+VF8(314,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ffdfffdd)
+VF8(315,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ddffffdd)
+VF8(316,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fdffffdd)
+VF8(317,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dfffffdd)
+VF8(318,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ffffffdd)
+VF8(319,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ddddddfd)
+VF8(320,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fdddddfd)
+VF8(321,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dfddddfd)
+VF8(322,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ffddddfd)
+VF8(323,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ddfdddfd)
+VF8(324,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fdfdddfd)
+VF8(325,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dffdddfd)
+VF8(326,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fffdddfd)
+VF8(327,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dddfddfd)
+VF8(328,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fddfddfd)
+VF8(329,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dfdfddfd)
+VF8(330,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ffdfddfd)
+VF8(331,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ddffddfd)
+VF8(332,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fdffddfd)
+VF8(333,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dfffddfd)
+VF8(334,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ffffddfd)
+VF8(335,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ddddfdfd)
+VF8(336,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fdddfdfd)
+VF8(337,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dfddfdfd)
+VF8(338,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ffddfdfd)
+VF8(339,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ddfdfdfd)
+VF8(340,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fdfdfdfd)
+VF8(341,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dffdfdfd)
+VF8(342,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fffdfdfd)
+VF8(343,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dddffdfd)
+VF8(344,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fddffdfd)
+VF8(345,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dfdffdfd)
+VF8(346,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ffdffdfd)
+VF8(347,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ddfffdfd)
+VF8(348,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fdfffdfd)
+VF8(349,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dffffdfd)
+VF8(350,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fffffdfd)
+VF8(351,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dddddffd)
+VF8(352,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fddddffd)
+VF8(353,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dfdddffd)
+VF8(354,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ffdddffd)
+VF8(355,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ddfddffd)
+VF8(356,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fdfddffd)
+VF8(357,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dffddffd)
+VF8(358,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fffddffd)
+VF8(359,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dddfdffd)
+VF8(360,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fddfdffd)
+VF8(361,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dfdfdffd)
+VF8(362,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ffdfdffd)
+VF8(363,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ddffdffd)
+VF8(364,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fdffdffd)
+VF8(365,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dfffdffd)
+VF8(366,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ffffdffd)
+VF8(367,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ddddfffd)
+VF8(368,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fdddfffd)
+VF8(369,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dfddfffd)
+VF8(370,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ffddfffd)
+VF8(371,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ddfdfffd)
+VF8(372,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fdfdfffd)
+VF8(373,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dffdfffd)
+VF8(374,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fffdfffd)
+VF8(375,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dddffffd)
+VF8(376,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fddffffd)
+VF8(377,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dfdffffd)
+VF8(378,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ffdffffd)
+VF8(379,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ddfffffd)
+VF8(380,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fdfffffd)
+VF8(381,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dffffffd)
+VF8(382,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fffffffd)
+VF8(383,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dddddddf)
+VF8(384,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fddddddf)
+VF8(385,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dfdddddf)
+VF8(386,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ffdddddf)
+VF8(387,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ddfddddf)
+VF8(388,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fdfddddf)
+VF8(389,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dffddddf)
+VF8(390,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fffddddf)
+VF8(391,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dddfdddf)
+VF8(392,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fddfdddf)
+VF8(393,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dfdfdddf)
+VF8(394,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ffdfdddf)
+VF8(395,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ddffdddf)
+VF8(396,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fdffdddf)
+VF8(397,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dfffdddf)
+VF8(398,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ffffdddf)
+VF8(399,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ddddfddf)
+VF8(400,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fdddfddf)
+VF8(401,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dfddfddf)
+VF8(402,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ffddfddf)
+VF8(403,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ddfdfddf)
+VF8(404,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fdfdfddf)
+VF8(405,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dffdfddf)
+VF8(406,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fffdfddf)
+VF8(407,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dddffddf)
+VF8(408,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fddffddf)
+VF8(409,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dfdffddf)
+VF8(410,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ffdffddf)
+VF8(411,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ddfffddf)
+VF8(412,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fdfffddf)
+VF8(413,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dffffddf)
+VF8(414,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fffffddf)
+VF8(415,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dddddfdf)
+VF8(416,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fddddfdf)
+VF8(417,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dfdddfdf)
+VF8(418,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ffdddfdf)
+VF8(419,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ddfddfdf)
+VF8(420,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fdfddfdf)
+VF8(421,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dffddfdf)
+VF8(422,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fffddfdf)
+VF8(423,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dddfdfdf)
+VF8(424,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fddfdfdf)
+VF8(425,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dfdfdfdf)
+VF8(426,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ffdfdfdf)
+VF8(427,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ddffdfdf)
+VF8(428,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fdffdfdf)
+VF8(429,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dfffdfdf)
+VF8(430,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ffffdfdf)
+VF8(431,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ddddffdf)
+VF8(432,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fdddffdf)
+VF8(433,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dfddffdf)
+VF8(434,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ffddffdf)
+VF8(435,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ddfdffdf)
+VF8(436,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fdfdffdf)
+VF8(437,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dffdffdf)
+VF8(438,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fffdffdf)
+VF8(439,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dddfffdf)
+VF8(440,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fddfffdf)
+VF8(441,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dfdfffdf)
+VF8(442,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ffdfffdf)
+VF8(443,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ddffffdf)
+VF8(444,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fdffffdf)
+VF8(445,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dfffffdf)
+VF8(446,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ffffffdf)
+VF8(447,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ddddddff)
+VF8(448,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fdddddff)
+VF8(449,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dfddddff)
+VF8(450,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ffddddff)
+VF8(451,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ddfdddff)
+VF8(452,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fdfdddff)
+VF8(453,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dffdddff)
+VF8(454,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fffdddff)
+VF8(455,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dddfddff)
+VF8(456,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fddfddff)
+VF8(457,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dfdfddff)
+VF8(458,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ffdfddff)
+VF8(459,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ddffddff)
+VF8(460,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fdffddff)
+VF8(461,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dfffddff)
+VF8(462,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ffffddff)
+VF8(463,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ddddfdff)
+VF8(464,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fdddfdff)
+VF8(465,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dfddfdff)
+VF8(466,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ffddfdff)
+VF8(467,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ddfdfdff)
+VF8(468,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fdfdfdff)
+VF8(469,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dffdfdff)
+VF8(470,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fffdfdff)
+VF8(471,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dddffdff)
+VF8(472,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fddffdff)
+VF8(473,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dfdffdff)
+VF8(474,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ffdffdff)
+VF8(475,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ddfffdff)
+VF8(476,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fdfffdff)
+VF8(477,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dffffdff)
+VF8(478,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fffffdff)
+VF8(479,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dddddfff)
+VF8(480,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fddddfff)
+VF8(481,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dfdddfff)
+VF8(482,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ffdddfff)
+VF8(483,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ddfddfff)
+VF8(484,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fdfddfff)
+VF8(485,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dffddfff)
+VF8(486,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fffddfff)
+VF8(487,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dddfdfff)
+VF8(488,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fddfdfff)
+VF8(489,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dfdfdfff)
+VF8(490,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ffdfdfff)
+VF8(491,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ddffdfff)
+VF8(492,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fdffdfff)
+VF8(493,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dfffdfff)
+VF8(494,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ffffdfff)
+VF8(495,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ddddffff)
+VF8(496,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fdddffff)
+VF8(497,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dfddffff)
+VF8(498,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ffddffff)
+VF8(499,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ddfdffff)
+VF8(500,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fdfdffff)
+VF8(501,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dffdffff)
+VF8(502,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fffdffff)
+VF8(503,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dddfffff)
+VF8(504,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fddfffff)
+VF8(505,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dfdfffff)
+VF8(506,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ffdfffff)
+VF8(507,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ddffffff)
+VF8(508,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fdffffff)
+VF8(509,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dfffffff)
+VF8(510,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ffffffff)
+VF9(511,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddddddddd)
+VF9(512,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fdddddddd)
+VF9(513,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dfddddddd)
+VF9(514,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ffddddddd)
+VF9(515,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddfdddddd)
+VF9(516,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fdfdddddd)
+VF9(517,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dffdddddd)
+VF9(518,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fffdddddd)
+VF9(519,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dddfddddd)
+VF9(520,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fddfddddd)
+VF9(521,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dfdfddddd)
+VF9(522,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ffdfddddd)
+VF9(523,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddffddddd)
+VF9(524,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fdffddddd)
+VF9(525,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dfffddddd)
+VF9(526,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ffffddddd)
+VF9(527,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ddddfdddd)
+VF9(528,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fdddfdddd)
+VF9(529,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dfddfdddd)
+VF9(530,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ffddfdddd)
+VF9(531,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ddfdfdddd)
+VF9(532,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fdfdfdddd)
+VF9(533,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dffdfdddd)
+VF9(534,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fffdfdddd)
+VF9(535,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dddffdddd)
+VF9(536,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fddffdddd)
+VF9(537,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dfdffdddd)
+VF9(538,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ffdffdddd)
+VF9(539,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ddfffdddd)
+VF9(540,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fdfffdddd)
+VF9(541,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dffffdddd)
+VF9(542,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fffffdddd)
+VF9(543,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dddddfddd)
+VF9(544,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fddddfddd)
+VF9(545,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dfdddfddd)
+VF9(546,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ffdddfddd)
+VF9(547,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ddfddfddd)
+VF9(548,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fdfddfddd)
+VF9(549,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dffddfddd)
+VF9(550,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fffddfddd)
+VF9(551,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dddfdfddd)
+VF9(552,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fddfdfddd)
+VF9(553,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dfdfdfddd)
+VF9(554,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ffdfdfddd)
+VF9(555,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ddffdfddd)
+VF9(556,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fdffdfddd)
+VF9(557,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dfffdfddd)
+VF9(558,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ffffdfddd)
+VF9(559,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ddddffddd)
+VF9(560,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fdddffddd)
+VF9(561,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dfddffddd)
+VF9(562,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ffddffddd)
+VF9(563,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ddfdffddd)
+VF9(564,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fdfdffddd)
+VF9(565,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dffdffddd)
+VF9(566,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fffdffddd)
+VF9(567,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dddfffddd)
+VF9(568,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fddfffddd)
+VF9(569,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dfdfffddd)
+VF9(570,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ffdfffddd)
+VF9(571,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ddffffddd)
+VF9(572,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fdffffddd)
+VF9(573,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dfffffddd)
+VF9(574,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ffffffddd)
+VF9(575,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ddddddfdd)
+VF9(576,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fdddddfdd)
+VF9(577,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dfddddfdd)
+VF9(578,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ffddddfdd)
+VF9(579,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ddfdddfdd)
+VF9(580,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fdfdddfdd)
+VF9(581,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dffdddfdd)
+VF9(582,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fffdddfdd)
+VF9(583,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dddfddfdd)
+VF9(584,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fddfddfdd)
+VF9(585,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dfdfddfdd)
+VF9(586,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ffdfddfdd)
+VF9(587,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ddffddfdd)
+VF9(588,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fdffddfdd)
+VF9(589,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dfffddfdd)
+VF9(590,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ffffddfdd)
+VF9(591,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ddddfdfdd)
+VF9(592,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fdddfdfdd)
+VF9(593,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dfddfdfdd)
+VF9(594,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ffddfdfdd)
+VF9(595,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ddfdfdfdd)
+VF9(596,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fdfdfdfdd)
+VF9(597,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dffdfdfdd)
+VF9(598,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fffdfdfdd)
+VF9(599,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dddffdfdd)
+VF9(600,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fddffdfdd)
+VF9(601,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dfdffdfdd)
+VF9(602,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ffdffdfdd)
+VF9(603,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ddfffdfdd)
+VF9(604,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fdfffdfdd)
+VF9(605,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dffffdfdd)
+VF9(606,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fffffdfdd)
+VF9(607,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dddddffdd)
+VF9(608,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fddddffdd)
+VF9(609,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dfdddffdd)
+VF9(610,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ffdddffdd)
+VF9(611,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ddfddffdd)
+VF9(612,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fdfddffdd)
+VF9(613,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dffddffdd)
+VF9(614,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fffddffdd)
+VF9(615,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dddfdffdd)
+VF9(616,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fddfdffdd)
+VF9(617,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dfdfdffdd)
+VF9(618,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ffdfdffdd)
+VF9(619,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ddffdffdd)
+VF9(620,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fdffdffdd)
+VF9(621,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dfffdffdd)
+VF9(622,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ffffdffdd)
+VF9(623,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ddddfffdd)
+VF9(624,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fdddfffdd)
+VF9(625,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dfddfffdd)
+VF9(626,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ffddfffdd)
+VF9(627,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ddfdfffdd)
+VF9(628,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fdfdfffdd)
+VF9(629,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dffdfffdd)
+VF9(630,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fffdfffdd)
+VF9(631,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dddffffdd)
+VF9(632,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fddffffdd)
+VF9(633,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dfdffffdd)
+VF9(634,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ffdffffdd)
+VF9(635,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ddfffffdd)
+VF9(636,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fdfffffdd)
+VF9(637,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dffffffdd)
+VF9(638,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fffffffdd)
+VF9(639,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dddddddfd)
+VF9(640,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fddddddfd)
+VF9(641,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dfdddddfd)
+VF9(642,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ffdddddfd)
+VF9(643,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ddfddddfd)
+VF9(644,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fdfddddfd)
+VF9(645,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dffddddfd)
+VF9(646,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fffddddfd)
+VF9(647,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dddfdddfd)
+VF9(648,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fddfdddfd)
+VF9(649,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dfdfdddfd)
+VF9(650,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ffdfdddfd)
+VF9(651,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ddffdddfd)
+VF9(652,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fdffdddfd)
+VF9(653,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dfffdddfd)
+VF9(654,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ffffdddfd)
+VF9(655,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ddddfddfd)
+VF9(656,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fdddfddfd)
+VF9(657,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dfddfddfd)
+VF9(658,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ffddfddfd)
+VF9(659,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ddfdfddfd)
+VF9(660,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fdfdfddfd)
+VF9(661,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dffdfddfd)
+VF9(662,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fffdfddfd)
+VF9(663,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dddffddfd)
+VF9(664,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fddffddfd)
+VF9(665,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dfdffddfd)
+VF9(666,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ffdffddfd)
+VF9(667,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ddfffddfd)
+VF9(668,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fdfffddfd)
+VF9(669,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dffffddfd)
+VF9(670,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fffffddfd)
+VF9(671,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dddddfdfd)
+VF9(672,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fddddfdfd)
+VF9(673,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dfdddfdfd)
+VF9(674,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ffdddfdfd)
+VF9(675,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ddfddfdfd)
+VF9(676,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fdfddfdfd)
+VF9(677,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dffddfdfd)
+VF9(678,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fffddfdfd)
+VF9(679,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dddfdfdfd)
+VF9(680,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fddfdfdfd)
+VF9(681,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dfdfdfdfd)
+VF9(682,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ffdfdfdfd)
+VF9(683,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ddffdfdfd)
+VF9(684,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fdffdfdfd)
+VF9(685,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dfffdfdfd)
+VF9(686,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ffffdfdfd)
+VF9(687,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ddddffdfd)
+VF9(688,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fdddffdfd)
+VF9(689,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dfddffdfd)
+VF9(690,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ffddffdfd)
+VF9(691,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ddfdffdfd)
+VF9(692,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fdfdffdfd)
+VF9(693,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dffdffdfd)
+VF9(694,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fffdffdfd)
+VF9(695,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dddfffdfd)
+VF9(696,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fddfffdfd)
+VF9(697,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dfdfffdfd)
+VF9(698,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ffdfffdfd)
+VF9(699,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ddffffdfd)
+VF9(700,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fdffffdfd)
+VF9(701,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dfffffdfd)
+VF9(702,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ffffffdfd)
+VF9(703,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ddddddffd)
+VF9(704,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fdddddffd)
+VF9(705,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dfddddffd)
+VF9(706,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ffddddffd)
+VF9(707,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ddfdddffd)
+VF9(708,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fdfdddffd)
+VF9(709,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dffdddffd)
+VF9(710,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fffdddffd)
+VF9(711,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dddfddffd)
+VF9(712,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fddfddffd)
+VF9(713,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dfdfddffd)
+VF9(714,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ffdfddffd)
+VF9(715,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ddffddffd)
+VF9(716,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fdffddffd)
+VF9(717,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dfffddffd)
+VF9(718,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ffffddffd)
+VF9(719,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ddddfdffd)
+VF9(720,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fdddfdffd)
+VF9(721,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dfddfdffd)
+VF9(722,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ffddfdffd)
+VF9(723,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ddfdfdffd)
+VF9(724,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fdfdfdffd)
+VF9(725,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dffdfdffd)
+VF9(726,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fffdfdffd)
+VF9(727,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dddffdffd)
+VF9(728,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fddffdffd)
+VF9(729,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dfdffdffd)
+VF9(730,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ffdffdffd)
+VF9(731,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ddfffdffd)
+VF9(732,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fdfffdffd)
+VF9(733,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dffffdffd)
+VF9(734,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fffffdffd)
+VF9(735,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dddddfffd)
+VF9(736,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fddddfffd)
+VF9(737,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dfdddfffd)
+VF9(738,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ffdddfffd)
+VF9(739,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ddfddfffd)
+VF9(740,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fdfddfffd)
+VF9(741,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dffddfffd)
+VF9(742,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fffddfffd)
+VF9(743,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dddfdfffd)
+VF9(744,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fddfdfffd)
+VF9(745,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dfdfdfffd)
+VF9(746,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ffdfdfffd)
+VF9(747,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ddffdfffd)
+VF9(748,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fdffdfffd)
+VF9(749,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dfffdfffd)
+VF9(750,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ffffdfffd)
+VF9(751,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ddddffffd)
+VF9(752,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fdddffffd)
+VF9(753,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dfddffffd)
+VF9(754,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ffddffffd)
+VF9(755,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ddfdffffd)
+VF9(756,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fdfdffffd)
+VF9(757,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dffdffffd)
+VF9(758,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fffdffffd)
+VF9(759,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dddfffffd)
+VF9(760,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fddfffffd)
+VF9(761,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dfdfffffd)
+VF9(762,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ffdfffffd)
+VF9(763,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ddffffffd)
+VF9(764,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fdffffffd)
+VF9(765,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dfffffffd)
+VF9(766,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ffffffffd)
+VF9(767,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ddddddddf)
+VF9(768,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fdddddddf)
+VF9(769,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dfddddddf)
+VF9(770,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ffddddddf)
+VF9(771,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ddfdddddf)
+VF9(772,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fdfdddddf)
+VF9(773,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dffdddddf)
+VF9(774,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fffdddddf)
+VF9(775,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dddfddddf)
+VF9(776,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fddfddddf)
+VF9(777,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dfdfddddf)
+VF9(778,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ffdfddddf)
+VF9(779,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ddffddddf)
+VF9(780,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fdffddddf)
+VF9(781,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dfffddddf)
+VF9(782,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ffffddddf)
+VF9(783,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ddddfdddf)
+VF9(784,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fdddfdddf)
+VF9(785,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dfddfdddf)
+VF9(786,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ffddfdddf)
+VF9(787,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ddfdfdddf)
+VF9(788,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fdfdfdddf)
+VF9(789,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dffdfdddf)
+VF9(790,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fffdfdddf)
+VF9(791,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dddffdddf)
+VF9(792,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fddffdddf)
+VF9(793,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dfdffdddf)
+VF9(794,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ffdffdddf)
+VF9(795,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ddfffdddf)
+VF9(796,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fdfffdddf)
+VF9(797,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dffffdddf)
+VF9(798,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fffffdddf)
+VF9(799,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dddddfddf)
+VF9(800,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fddddfddf)
+VF9(801,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dfdddfddf)
+VF9(802,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ffdddfddf)
+VF9(803,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ddfddfddf)
+VF9(804,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fdfddfddf)
+VF9(805,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dffddfddf)
+VF9(806,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fffddfddf)
+VF9(807,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dddfdfddf)
+VF9(808,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fddfdfddf)
+VF9(809,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dfdfdfddf)
+VF9(810,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ffdfdfddf)
+VF9(811,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ddffdfddf)
+VF9(812,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fdffdfddf)
+VF9(813,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dfffdfddf)
+VF9(814,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ffffdfddf)
+VF9(815,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ddddffddf)
+VF9(816,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fdddffddf)
+VF9(817,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dfddffddf)
+VF9(818,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ffddffddf)
+VF9(819,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ddfdffddf)
+VF9(820,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fdfdffddf)
+VF9(821,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dffdffddf)
+VF9(822,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fffdffddf)
+VF9(823,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dddfffddf)
+VF9(824,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fddfffddf)
+VF9(825,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dfdfffddf)
+VF9(826,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ffdfffddf)
+VF9(827,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ddffffddf)
+VF9(828,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fdffffddf)
+VF9(829,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dfffffddf)
+VF9(830,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ffffffddf)
+VF9(831,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ddddddfdf)
+VF9(832,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fdddddfdf)
+VF9(833,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dfddddfdf)
+VF9(834,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ffddddfdf)
+VF9(835,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ddfdddfdf)
+VF9(836,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fdfdddfdf)
+VF9(837,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dffdddfdf)
+VF9(838,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fffdddfdf)
+VF9(839,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dddfddfdf)
+VF9(840,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fddfddfdf)
+VF9(841,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dfdfddfdf)
+VF9(842,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ffdfddfdf)
+VF9(843,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ddffddfdf)
+VF9(844,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fdffddfdf)
+VF9(845,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dfffddfdf)
+VF9(846,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ffffddfdf)
+VF9(847,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ddddfdfdf)
+VF9(848,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fdddfdfdf)
+VF9(849,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dfddfdfdf)
+VF9(850,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ffddfdfdf)
+VF9(851,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ddfdfdfdf)
+VF9(852,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fdfdfdfdf)
+VF9(853,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dffdfdfdf)
+VF9(854,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fffdfdfdf)
+VF9(855,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dddffdfdf)
+VF9(856,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fddffdfdf)
+VF9(857,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dfdffdfdf)
+VF9(858,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ffdffdfdf)
+VF9(859,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ddfffdfdf)
+VF9(860,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fdfffdfdf)
+VF9(861,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dffffdfdf)
+VF9(862,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fffffdfdf)
+VF9(863,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dddddffdf)
+VF9(864,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fddddffdf)
+VF9(865,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dfdddffdf)
+VF9(866,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ffdddffdf)
+VF9(867,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ddfddffdf)
+VF9(868,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fdfddffdf)
+VF9(869,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dffddffdf)
+VF9(870,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fffddffdf)
+VF9(871,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dddfdffdf)
+VF9(872,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fddfdffdf)
+VF9(873,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dfdfdffdf)
+VF9(874,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ffdfdffdf)
+VF9(875,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ddffdffdf)
+VF9(876,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fdffdffdf)
+VF9(877,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dfffdffdf)
+VF9(878,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ffffdffdf)
+VF9(879,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ddddfffdf)
+VF9(880,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fdddfffdf)
+VF9(881,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dfddfffdf)
+VF9(882,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ffddfffdf)
+VF9(883,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ddfdfffdf)
+VF9(884,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fdfdfffdf)
+VF9(885,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dffdfffdf)
+VF9(886,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fffdfffdf)
+VF9(887,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dddffffdf)
+VF9(888,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fddffffdf)
+VF9(889,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dfdffffdf)
+VF9(890,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ffdffffdf)
+VF9(891,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ddfffffdf)
+VF9(892,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fdfffffdf)
+VF9(893,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dffffffdf)
+VF9(894,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fffffffdf)
+VF9(895,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dddddddff)
+VF9(896,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fddddddff)
+VF9(897,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dfdddddff)
+VF9(898,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ffdddddff)
+VF9(899,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ddfddddff)
+VF9(900,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fdfddddff)
+VF9(901,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dffddddff)
+VF9(902,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fffddddff)
+VF9(903,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dddfdddff)
+VF9(904,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fddfdddff)
+VF9(905,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dfdfdddff)
+VF9(906,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ffdfdddff)
+VF9(907,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ddffdddff)
+VF9(908,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fdffdddff)
+VF9(909,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dfffdddff)
+VF9(910,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ffffdddff)
+VF9(911,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ddddfddff)
+VF9(912,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fdddfddff)
+VF9(913,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dfddfddff)
+VF9(914,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ffddfddff)
+VF9(915,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ddfdfddff)
+VF9(916,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fdfdfddff)
+VF9(917,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dffdfddff)
+VF9(918,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fffdfddff)
+VF9(919,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dddffddff)
+VF9(920,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fddffddff)
+VF9(921,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dfdffddff)
+VF9(922,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ffdffddff)
+VF9(923,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ddfffddff)
+VF9(924,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fdfffddff)
+VF9(925,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dffffddff)
+VF9(926,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fffffddff)
+VF9(927,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dddddfdff)
+VF9(928,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fddddfdff)
+VF9(929,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dfdddfdff)
+VF9(930,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ffdddfdff)
+VF9(931,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ddfddfdff)
+VF9(932,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fdfddfdff)
+VF9(933,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dffddfdff)
+VF9(934,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fffddfdff)
+VF9(935,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dddfdfdff)
+VF9(936,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fddfdfdff)
+VF9(937,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dfdfdfdff)
+VF9(938,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ffdfdfdff)
+VF9(939,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ddffdfdff)
+VF9(940,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fdffdfdff)
+VF9(941,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dfffdfdff)
+VF9(942,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ffffdfdff)
+VF9(943,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ddddffdff)
+VF9(944,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fdddffdff)
+VF9(945,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dfddffdff)
+VF9(946,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ffddffdff)
+VF9(947,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ddfdffdff)
+VF9(948,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fdfdffdff)
+VF9(949,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dffdffdff)
+VF9(950,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fffdffdff)
+VF9(951,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dddfffdff)
+VF9(952,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fddfffdff)
+VF9(953,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dfdfffdff)
+VF9(954,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ffdfffdff)
+VF9(955,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ddffffdff)
+VF9(956,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fdffffdff)
+VF9(957,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dfffffdff)
+VF9(958,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ffffffdff)
+VF9(959,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ddddddfff)
+VF9(960,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fdddddfff)
+VF9(961,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dfddddfff)
+VF9(962,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ffddddfff)
+VF9(963,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ddfdddfff)
+VF9(964,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fdfdddfff)
+VF9(965,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dffdddfff)
+VF9(966,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fffdddfff)
+VF9(967,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dddfddfff)
+VF9(968,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fddfddfff)
+VF9(969,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dfdfddfff)
+VF9(970,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ffdfddfff)
+VF9(971,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ddffddfff)
+VF9(972,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fdffddfff)
+VF9(973,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dfffddfff)
+VF9(974,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ffffddfff)
+VF9(975,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ddddfdfff)
+VF9(976,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fdddfdfff)
+VF9(977,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dfddfdfff)
+VF9(978,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ffddfdfff)
+VF9(979,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ddfdfdfff)
+VF9(980,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fdfdfdfff)
+VF9(981,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dffdfdfff)
+VF9(982,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fffdfdfff)
+VF9(983,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dddffdfff)
+VF9(984,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fddffdfff)
+VF9(985,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dfdffdfff)
+VF9(986,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ffdffdfff)
+VF9(987,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ddfffdfff)
+VF9(988,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fdfffdfff)
+VF9(989,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dffffdfff)
+VF9(990,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fffffdfff)
+VF9(991,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dddddffff)
+VF9(992,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fddddffff)
+VF9(993,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dfdddffff)
+VF9(994,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ffdddffff)
+VF9(995,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ddfddffff)
+VF9(996,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fdfddffff)
+VF9(997,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dffddffff)
+VF9(998,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fffddffff)
+VF9(999,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dddfdffff)
+VF9(1000,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fddfdffff)
+VF9(1001,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dfdfdffff)
+VF9(1002,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ffdfdffff)
+VF9(1003,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ddffdffff)
+VF9(1004,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fdffdffff)
+VF9(1005,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dfffdffff)
+VF9(1006,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ffffdffff)
+VF9(1007,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ddddfffff)
+VF9(1008,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fdddfffff)
+VF9(1009,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dfddfffff)
+VF9(1010,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ffddfffff)
+VF9(1011,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ddfdfffff)
+VF9(1012,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fdfdfffff)
+VF9(1013,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dffdfffff)
+VF9(1014,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fffdfffff)
+VF9(1015,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dddffffff)
+VF9(1016,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fddffffff)
+VF9(1017,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dfdffffff)
+VF9(1018,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ffdffffff)
+VF9(1019,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ddfffffff)
+VF9(1020,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fdfffffff)
+VF9(1021,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dffffffff)
+VF9(1022,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fffffffff)
+VF10(1023,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dddddddddd)
+VF10(1024,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fddddddddd)
+VF10(1025,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dfdddddddd)
+VF10(1026,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ffdddddddd)
+VF10(1027,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddfddddddd)
+VF10(1028,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fdfddddddd)
+VF10(1029,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dffddddddd)
+VF10(1030,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fffddddddd)
+VF10(1031,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dddfdddddd)
+VF10(1032,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fddfdddddd)
+VF10(1033,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dfdfdddddd)
+VF10(1034,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ffdfdddddd)
+VF10(1035,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddffdddddd)
+VF10(1036,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fdffdddddd)
+VF10(1037,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dfffdddddd)
+VF10(1038,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ffffdddddd)
+VF10(1039,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddddfddddd)
+VF10(1040,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fdddfddddd)
+VF10(1041,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dfddfddddd)
+VF10(1042,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ffddfddddd)
+VF10(1043,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddfdfddddd)
+VF10(1044,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fdfdfddddd)
+VF10(1045,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dffdfddddd)
+VF10(1046,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fffdfddddd)
+VF10(1047,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dddffddddd)
+VF10(1048,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fddffddddd)
+VF10(1049,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dfdffddddd)
+VF10(1050,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ffdffddddd)
+VF10(1051,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_ddfffddddd)
+VF10(1052,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fdfffddddd)
+VF10(1053,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_dffffddddd)
+VF10(1054,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,f_fffffddddd)
+VF10(1055,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dddddfdddd)
+VF10(1056,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fddddfdddd)
+VF10(1057,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dfdddfdddd)
+VF10(1058,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ffdddfdddd)
+VF10(1059,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ddfddfdddd)
+VF10(1060,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fdfddfdddd)
+VF10(1061,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dffddfdddd)
+VF10(1062,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fffddfdddd)
+VF10(1063,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dddfdfdddd)
+VF10(1064,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fddfdfdddd)
+VF10(1065,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dfdfdfdddd)
+VF10(1066,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ffdfdfdddd)
+VF10(1067,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ddffdfdddd)
+VF10(1068,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fdffdfdddd)
+VF10(1069,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dfffdfdddd)
+VF10(1070,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ffffdfdddd)
+VF10(1071,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ddddffdddd)
+VF10(1072,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fdddffdddd)
+VF10(1073,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dfddffdddd)
+VF10(1074,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ffddffdddd)
+VF10(1075,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ddfdffdddd)
+VF10(1076,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fdfdffdddd)
+VF10(1077,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dffdffdddd)
+VF10(1078,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fffdffdddd)
+VF10(1079,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dddfffdddd)
+VF10(1080,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fddfffdddd)
+VF10(1081,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dfdfffdddd)
+VF10(1082,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ffdfffdddd)
+VF10(1083,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ddffffdddd)
+VF10(1084,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_fdffffdddd)
+VF10(1085,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_dfffffdddd)
+VF10(1086,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,f_ffffffdddd)
+VF10(1087,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ddddddfddd)
+VF10(1088,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fdddddfddd)
+VF10(1089,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dfddddfddd)
+VF10(1090,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ffddddfddd)
+VF10(1091,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ddfdddfddd)
+VF10(1092,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fdfdddfddd)
+VF10(1093,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dffdddfddd)
+VF10(1094,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fffdddfddd)
+VF10(1095,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dddfddfddd)
+VF10(1096,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fddfddfddd)
+VF10(1097,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dfdfddfddd)
+VF10(1098,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ffdfddfddd)
+VF10(1099,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ddffddfddd)
+VF10(1100,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fdffddfddd)
+VF10(1101,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dfffddfddd)
+VF10(1102,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ffffddfddd)
+VF10(1103,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ddddfdfddd)
+VF10(1104,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fdddfdfddd)
+VF10(1105,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dfddfdfddd)
+VF10(1106,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ffddfdfddd)
+VF10(1107,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ddfdfdfddd)
+VF10(1108,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fdfdfdfddd)
+VF10(1109,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dffdfdfddd)
+VF10(1110,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fffdfdfddd)
+VF10(1111,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dddffdfddd)
+VF10(1112,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fddffdfddd)
+VF10(1113,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dfdffdfddd)
+VF10(1114,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ffdffdfddd)
+VF10(1115,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_ddfffdfddd)
+VF10(1116,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fdfffdfddd)
+VF10(1117,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_dffffdfddd)
+VF10(1118,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,f_fffffdfddd)
+VF10(1119,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dddddffddd)
+VF10(1120,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fddddffddd)
+VF10(1121,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dfdddffddd)
+VF10(1122,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ffdddffddd)
+VF10(1123,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ddfddffddd)
+VF10(1124,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fdfddffddd)
+VF10(1125,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dffddffddd)
+VF10(1126,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fffddffddd)
+VF10(1127,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dddfdffddd)
+VF10(1128,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fddfdffddd)
+VF10(1129,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dfdfdffddd)
+VF10(1130,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ffdfdffddd)
+VF10(1131,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ddffdffddd)
+VF10(1132,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fdffdffddd)
+VF10(1133,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dfffdffddd)
+VF10(1134,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ffffdffddd)
+VF10(1135,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ddddfffddd)
+VF10(1136,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fdddfffddd)
+VF10(1137,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dfddfffddd)
+VF10(1138,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ffddfffddd)
+VF10(1139,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ddfdfffddd)
+VF10(1140,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fdfdfffddd)
+VF10(1141,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dffdfffddd)
+VF10(1142,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fffdfffddd)
+VF10(1143,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dddffffddd)
+VF10(1144,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fddffffddd)
+VF10(1145,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dfdffffddd)
+VF10(1146,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ffdffffddd)
+VF10(1147,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_ddfffffddd)
+VF10(1148,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fdfffffddd)
+VF10(1149,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_dffffffddd)
+VF10(1150,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,f_fffffffddd)
+VF10(1151,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dddddddfdd)
+VF10(1152,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fddddddfdd)
+VF10(1153,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dfdddddfdd)
+VF10(1154,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ffdddddfdd)
+VF10(1155,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ddfddddfdd)
+VF10(1156,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fdfddddfdd)
+VF10(1157,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dffddddfdd)
+VF10(1158,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fffddddfdd)
+VF10(1159,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dddfdddfdd)
+VF10(1160,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fddfdddfdd)
+VF10(1161,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dfdfdddfdd)
+VF10(1162,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ffdfdddfdd)
+VF10(1163,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ddffdddfdd)
+VF10(1164,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fdffdddfdd)
+VF10(1165,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dfffdddfdd)
+VF10(1166,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ffffdddfdd)
+VF10(1167,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ddddfddfdd)
+VF10(1168,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fdddfddfdd)
+VF10(1169,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dfddfddfdd)
+VF10(1170,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ffddfddfdd)
+VF10(1171,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ddfdfddfdd)
+VF10(1172,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fdfdfddfdd)
+VF10(1173,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dffdfddfdd)
+VF10(1174,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fffdfddfdd)
+VF10(1175,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dddffddfdd)
+VF10(1176,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fddffddfdd)
+VF10(1177,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dfdffddfdd)
+VF10(1178,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ffdffddfdd)
+VF10(1179,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_ddfffddfdd)
+VF10(1180,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fdfffddfdd)
+VF10(1181,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_dffffddfdd)
+VF10(1182,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,f_fffffddfdd)
+VF10(1183,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dddddfdfdd)
+VF10(1184,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fddddfdfdd)
+VF10(1185,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dfdddfdfdd)
+VF10(1186,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ffdddfdfdd)
+VF10(1187,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ddfddfdfdd)
+VF10(1188,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fdfddfdfdd)
+VF10(1189,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dffddfdfdd)
+VF10(1190,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fffddfdfdd)
+VF10(1191,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dddfdfdfdd)
+VF10(1192,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fddfdfdfdd)
+VF10(1193,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dfdfdfdfdd)
+VF10(1194,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ffdfdfdfdd)
+VF10(1195,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ddffdfdfdd)
+VF10(1196,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fdffdfdfdd)
+VF10(1197,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dfffdfdfdd)
+VF10(1198,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ffffdfdfdd)
+VF10(1199,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ddddffdfdd)
+VF10(1200,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fdddffdfdd)
+VF10(1201,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dfddffdfdd)
+VF10(1202,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ffddffdfdd)
+VF10(1203,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ddfdffdfdd)
+VF10(1204,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fdfdffdfdd)
+VF10(1205,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dffdffdfdd)
+VF10(1206,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fffdffdfdd)
+VF10(1207,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dddfffdfdd)
+VF10(1208,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fddfffdfdd)
+VF10(1209,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dfdfffdfdd)
+VF10(1210,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ffdfffdfdd)
+VF10(1211,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ddffffdfdd)
+VF10(1212,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_fdffffdfdd)
+VF10(1213,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_dfffffdfdd)
+VF10(1214,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,f_ffffffdfdd)
+VF10(1215,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ddddddffdd)
+VF10(1216,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fdddddffdd)
+VF10(1217,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dfddddffdd)
+VF10(1218,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ffddddffdd)
+VF10(1219,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ddfdddffdd)
+VF10(1220,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fdfdddffdd)
+VF10(1221,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dffdddffdd)
+VF10(1222,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fffdddffdd)
+VF10(1223,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dddfddffdd)
+VF10(1224,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fddfddffdd)
+VF10(1225,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dfdfddffdd)
+VF10(1226,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ffdfddffdd)
+VF10(1227,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ddffddffdd)
+VF10(1228,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fdffddffdd)
+VF10(1229,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dfffddffdd)
+VF10(1230,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ffffddffdd)
+VF10(1231,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ddddfdffdd)
+VF10(1232,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fdddfdffdd)
+VF10(1233,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dfddfdffdd)
+VF10(1234,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ffddfdffdd)
+VF10(1235,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ddfdfdffdd)
+VF10(1236,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fdfdfdffdd)
+VF10(1237,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dffdfdffdd)
+VF10(1238,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fffdfdffdd)
+VF10(1239,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dddffdffdd)
+VF10(1240,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fddffdffdd)
+VF10(1241,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dfdffdffdd)
+VF10(1242,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ffdffdffdd)
+VF10(1243,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_ddfffdffdd)
+VF10(1244,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fdfffdffdd)
+VF10(1245,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_dffffdffdd)
+VF10(1246,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,f_fffffdffdd)
+VF10(1247,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dddddfffdd)
+VF10(1248,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fddddfffdd)
+VF10(1249,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dfdddfffdd)
+VF10(1250,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ffdddfffdd)
+VF10(1251,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ddfddfffdd)
+VF10(1252,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fdfddfffdd)
+VF10(1253,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dffddfffdd)
+VF10(1254,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fffddfffdd)
+VF10(1255,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dddfdfffdd)
+VF10(1256,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fddfdfffdd)
+VF10(1257,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dfdfdfffdd)
+VF10(1258,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ffdfdfffdd)
+VF10(1259,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ddffdfffdd)
+VF10(1260,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fdffdfffdd)
+VF10(1261,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dfffdfffdd)
+VF10(1262,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ffffdfffdd)
+VF10(1263,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ddddffffdd)
+VF10(1264,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fdddffffdd)
+VF10(1265,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dfddffffdd)
+VF10(1266,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ffddffffdd)
+VF10(1267,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ddfdffffdd)
+VF10(1268,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fdfdffffdd)
+VF10(1269,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dffdffffdd)
+VF10(1270,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fffdffffdd)
+VF10(1271,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dddfffffdd)
+VF10(1272,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fddfffffdd)
+VF10(1273,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dfdfffffdd)
+VF10(1274,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ffdfffffdd)
+VF10(1275,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ddffffffdd)
+VF10(1276,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_fdffffffdd)
+VF10(1277,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_dfffffffdd)
+VF10(1278,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,f_ffffffffdd)
+VF10(1279,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ddddddddfd)
+VF10(1280,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fdddddddfd)
+VF10(1281,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dfddddddfd)
+VF10(1282,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ffddddddfd)
+VF10(1283,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ddfdddddfd)
+VF10(1284,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fdfdddddfd)
+VF10(1285,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dffdddddfd)
+VF10(1286,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fffdddddfd)
+VF10(1287,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dddfddddfd)
+VF10(1288,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fddfddddfd)
+VF10(1289,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dfdfddddfd)
+VF10(1290,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ffdfddddfd)
+VF10(1291,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ddffddddfd)
+VF10(1292,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fdffddddfd)
+VF10(1293,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dfffddddfd)
+VF10(1294,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ffffddddfd)
+VF10(1295,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ddddfdddfd)
+VF10(1296,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fdddfdddfd)
+VF10(1297,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dfddfdddfd)
+VF10(1298,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ffddfdddfd)
+VF10(1299,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ddfdfdddfd)
+VF10(1300,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fdfdfdddfd)
+VF10(1301,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dffdfdddfd)
+VF10(1302,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fffdfdddfd)
+VF10(1303,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dddffdddfd)
+VF10(1304,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fddffdddfd)
+VF10(1305,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dfdffdddfd)
+VF10(1306,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ffdffdddfd)
+VF10(1307,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_ddfffdddfd)
+VF10(1308,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fdfffdddfd)
+VF10(1309,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_dffffdddfd)
+VF10(1310,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,f_fffffdddfd)
+VF10(1311,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dddddfddfd)
+VF10(1312,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fddddfddfd)
+VF10(1313,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dfdddfddfd)
+VF10(1314,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ffdddfddfd)
+VF10(1315,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ddfddfddfd)
+VF10(1316,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fdfddfddfd)
+VF10(1317,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dffddfddfd)
+VF10(1318,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fffddfddfd)
+VF10(1319,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dddfdfddfd)
+VF10(1320,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fddfdfddfd)
+VF10(1321,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dfdfdfddfd)
+VF10(1322,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ffdfdfddfd)
+VF10(1323,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ddffdfddfd)
+VF10(1324,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fdffdfddfd)
+VF10(1325,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dfffdfddfd)
+VF10(1326,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ffffdfddfd)
+VF10(1327,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ddddffddfd)
+VF10(1328,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fdddffddfd)
+VF10(1329,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dfddffddfd)
+VF10(1330,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ffddffddfd)
+VF10(1331,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ddfdffddfd)
+VF10(1332,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fdfdffddfd)
+VF10(1333,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dffdffddfd)
+VF10(1334,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fffdffddfd)
+VF10(1335,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dddfffddfd)
+VF10(1336,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fddfffddfd)
+VF10(1337,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dfdfffddfd)
+VF10(1338,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ffdfffddfd)
+VF10(1339,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ddffffddfd)
+VF10(1340,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_fdffffddfd)
+VF10(1341,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_dfffffddfd)
+VF10(1342,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,f_ffffffddfd)
+VF10(1343,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ddddddfdfd)
+VF10(1344,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fdddddfdfd)
+VF10(1345,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dfddddfdfd)
+VF10(1346,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ffddddfdfd)
+VF10(1347,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ddfdddfdfd)
+VF10(1348,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fdfdddfdfd)
+VF10(1349,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dffdddfdfd)
+VF10(1350,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fffdddfdfd)
+VF10(1351,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dddfddfdfd)
+VF10(1352,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fddfddfdfd)
+VF10(1353,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dfdfddfdfd)
+VF10(1354,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ffdfddfdfd)
+VF10(1355,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ddffddfdfd)
+VF10(1356,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fdffddfdfd)
+VF10(1357,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dfffddfdfd)
+VF10(1358,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ffffddfdfd)
+VF10(1359,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ddddfdfdfd)
+VF10(1360,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fdddfdfdfd)
+VF10(1361,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dfddfdfdfd)
+VF10(1362,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ffddfdfdfd)
+VF10(1363,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ddfdfdfdfd)
+VF10(1364,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fdfdfdfdfd)
+VF10(1365,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dffdfdfdfd)
+VF10(1366,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fffdfdfdfd)
+VF10(1367,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dddffdfdfd)
+VF10(1368,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fddffdfdfd)
+VF10(1369,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dfdffdfdfd)
+VF10(1370,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ffdffdfdfd)
+VF10(1371,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_ddfffdfdfd)
+VF10(1372,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fdfffdfdfd)
+VF10(1373,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_dffffdfdfd)
+VF10(1374,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,f_fffffdfdfd)
+VF10(1375,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dddddffdfd)
+VF10(1376,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fddddffdfd)
+VF10(1377,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dfdddffdfd)
+VF10(1378,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ffdddffdfd)
+VF10(1379,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ddfddffdfd)
+VF10(1380,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fdfddffdfd)
+VF10(1381,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dffddffdfd)
+VF10(1382,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fffddffdfd)
+VF10(1383,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dddfdffdfd)
+VF10(1384,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fddfdffdfd)
+VF10(1385,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dfdfdffdfd)
+VF10(1386,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ffdfdffdfd)
+VF10(1387,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ddffdffdfd)
+VF10(1388,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fdffdffdfd)
+VF10(1389,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dfffdffdfd)
+VF10(1390,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ffffdffdfd)
+VF10(1391,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ddddfffdfd)
+VF10(1392,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fdddfffdfd)
+VF10(1393,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dfddfffdfd)
+VF10(1394,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ffddfffdfd)
+VF10(1395,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ddfdfffdfd)
+VF10(1396,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fdfdfffdfd)
+VF10(1397,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dffdfffdfd)
+VF10(1398,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fffdfffdfd)
+VF10(1399,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dddffffdfd)
+VF10(1400,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fddffffdfd)
+VF10(1401,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dfdffffdfd)
+VF10(1402,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ffdffffdfd)
+VF10(1403,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_ddfffffdfd)
+VF10(1404,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fdfffffdfd)
+VF10(1405,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_dffffffdfd)
+VF10(1406,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,f_fffffffdfd)
+VF10(1407,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dddddddffd)
+VF10(1408,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fddddddffd)
+VF10(1409,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dfdddddffd)
+VF10(1410,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ffdddddffd)
+VF10(1411,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ddfddddffd)
+VF10(1412,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fdfddddffd)
+VF10(1413,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dffddddffd)
+VF10(1414,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fffddddffd)
+VF10(1415,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dddfdddffd)
+VF10(1416,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fddfdddffd)
+VF10(1417,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dfdfdddffd)
+VF10(1418,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ffdfdddffd)
+VF10(1419,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ddffdddffd)
+VF10(1420,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fdffdddffd)
+VF10(1421,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dfffdddffd)
+VF10(1422,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ffffdddffd)
+VF10(1423,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ddddfddffd)
+VF10(1424,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fdddfddffd)
+VF10(1425,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dfddfddffd)
+VF10(1426,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ffddfddffd)
+VF10(1427,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ddfdfddffd)
+VF10(1428,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fdfdfddffd)
+VF10(1429,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dffdfddffd)
+VF10(1430,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fffdfddffd)
+VF10(1431,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dddffddffd)
+VF10(1432,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fddffddffd)
+VF10(1433,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dfdffddffd)
+VF10(1434,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ffdffddffd)
+VF10(1435,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_ddfffddffd)
+VF10(1436,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fdfffddffd)
+VF10(1437,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_dffffddffd)
+VF10(1438,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,f_fffffddffd)
+VF10(1439,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dddddfdffd)
+VF10(1440,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fddddfdffd)
+VF10(1441,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dfdddfdffd)
+VF10(1442,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ffdddfdffd)
+VF10(1443,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ddfddfdffd)
+VF10(1444,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fdfddfdffd)
+VF10(1445,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dffddfdffd)
+VF10(1446,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fffddfdffd)
+VF10(1447,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dddfdfdffd)
+VF10(1448,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fddfdfdffd)
+VF10(1449,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dfdfdfdffd)
+VF10(1450,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ffdfdfdffd)
+VF10(1451,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ddffdfdffd)
+VF10(1452,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fdffdfdffd)
+VF10(1453,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dfffdfdffd)
+VF10(1454,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ffffdfdffd)
+VF10(1455,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ddddffdffd)
+VF10(1456,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fdddffdffd)
+VF10(1457,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dfddffdffd)
+VF10(1458,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ffddffdffd)
+VF10(1459,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ddfdffdffd)
+VF10(1460,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fdfdffdffd)
+VF10(1461,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dffdffdffd)
+VF10(1462,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fffdffdffd)
+VF10(1463,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dddfffdffd)
+VF10(1464,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fddfffdffd)
+VF10(1465,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dfdfffdffd)
+VF10(1466,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ffdfffdffd)
+VF10(1467,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ddffffdffd)
+VF10(1468,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_fdffffdffd)
+VF10(1469,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_dfffffdffd)
+VF10(1470,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,f_ffffffdffd)
+VF10(1471,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ddddddfffd)
+VF10(1472,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fdddddfffd)
+VF10(1473,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dfddddfffd)
+VF10(1474,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ffddddfffd)
+VF10(1475,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ddfdddfffd)
+VF10(1476,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fdfdddfffd)
+VF10(1477,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dffdddfffd)
+VF10(1478,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fffdddfffd)
+VF10(1479,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dddfddfffd)
+VF10(1480,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fddfddfffd)
+VF10(1481,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dfdfddfffd)
+VF10(1482,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ffdfddfffd)
+VF10(1483,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ddffddfffd)
+VF10(1484,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fdffddfffd)
+VF10(1485,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dfffddfffd)
+VF10(1486,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ffffddfffd)
+VF10(1487,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ddddfdfffd)
+VF10(1488,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fdddfdfffd)
+VF10(1489,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dfddfdfffd)
+VF10(1490,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ffddfdfffd)
+VF10(1491,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ddfdfdfffd)
+VF10(1492,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fdfdfdfffd)
+VF10(1493,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dffdfdfffd)
+VF10(1494,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fffdfdfffd)
+VF10(1495,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dddffdfffd)
+VF10(1496,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fddffdfffd)
+VF10(1497,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dfdffdfffd)
+VF10(1498,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ffdffdfffd)
+VF10(1499,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_ddfffdfffd)
+VF10(1500,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fdfffdfffd)
+VF10(1501,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_dffffdfffd)
+VF10(1502,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,f_fffffdfffd)
+VF10(1503,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dddddffffd)
+VF10(1504,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fddddffffd)
+VF10(1505,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dfdddffffd)
+VF10(1506,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ffdddffffd)
+VF10(1507,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ddfddffffd)
+VF10(1508,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fdfddffffd)
+VF10(1509,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dffddffffd)
+VF10(1510,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fffddffffd)
+VF10(1511,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dddfdffffd)
+VF10(1512,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fddfdffffd)
+VF10(1513,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dfdfdffffd)
+VF10(1514,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ffdfdffffd)
+VF10(1515,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ddffdffffd)
+VF10(1516,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fdffdffffd)
+VF10(1517,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dfffdffffd)
+VF10(1518,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ffffdffffd)
+VF10(1519,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ddddfffffd)
+VF10(1520,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fdddfffffd)
+VF10(1521,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dfddfffffd)
+VF10(1522,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ffddfffffd)
+VF10(1523,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ddfdfffffd)
+VF10(1524,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fdfdfffffd)
+VF10(1525,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dffdfffffd)
+VF10(1526,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fffdfffffd)
+VF10(1527,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dddffffffd)
+VF10(1528,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fddffffffd)
+VF10(1529,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dfdffffffd)
+VF10(1530,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ffdffffffd)
+VF10(1531,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_ddfffffffd)
+VF10(1532,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fdfffffffd)
+VF10(1533,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_dffffffffd)
+VF10(1534,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,f_fffffffffd)
+VF10(1535,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dddddddddf)
+VF10(1536,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fddddddddf)
+VF10(1537,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dfdddddddf)
+VF10(1538,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ffdddddddf)
+VF10(1539,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ddfddddddf)
+VF10(1540,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fdfddddddf)
+VF10(1541,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dffddddddf)
+VF10(1542,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fffddddddf)
+VF10(1543,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dddfdddddf)
+VF10(1544,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fddfdddddf)
+VF10(1545,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dfdfdddddf)
+VF10(1546,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ffdfdddddf)
+VF10(1547,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ddffdddddf)
+VF10(1548,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fdffdddddf)
+VF10(1549,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dfffdddddf)
+VF10(1550,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ffffdddddf)
+VF10(1551,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ddddfddddf)
+VF10(1552,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fdddfddddf)
+VF10(1553,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dfddfddddf)
+VF10(1554,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ffddfddddf)
+VF10(1555,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ddfdfddddf)
+VF10(1556,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fdfdfddddf)
+VF10(1557,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dffdfddddf)
+VF10(1558,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fffdfddddf)
+VF10(1559,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dddffddddf)
+VF10(1560,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fddffddddf)
+VF10(1561,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dfdffddddf)
+VF10(1562,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ffdffddddf)
+VF10(1563,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_ddfffddddf)
+VF10(1564,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fdfffddddf)
+VF10(1565,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_dffffddddf)
+VF10(1566,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,f_fffffddddf)
+VF10(1567,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dddddfdddf)
+VF10(1568,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fddddfdddf)
+VF10(1569,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dfdddfdddf)
+VF10(1570,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ffdddfdddf)
+VF10(1571,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ddfddfdddf)
+VF10(1572,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fdfddfdddf)
+VF10(1573,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dffddfdddf)
+VF10(1574,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fffddfdddf)
+VF10(1575,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dddfdfdddf)
+VF10(1576,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fddfdfdddf)
+VF10(1577,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dfdfdfdddf)
+VF10(1578,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ffdfdfdddf)
+VF10(1579,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ddffdfdddf)
+VF10(1580,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fdffdfdddf)
+VF10(1581,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dfffdfdddf)
+VF10(1582,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ffffdfdddf)
+VF10(1583,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ddddffdddf)
+VF10(1584,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fdddffdddf)
+VF10(1585,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dfddffdddf)
+VF10(1586,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ffddffdddf)
+VF10(1587,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ddfdffdddf)
+VF10(1588,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fdfdffdddf)
+VF10(1589,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dffdffdddf)
+VF10(1590,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fffdffdddf)
+VF10(1591,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dddfffdddf)
+VF10(1592,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fddfffdddf)
+VF10(1593,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dfdfffdddf)
+VF10(1594,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ffdfffdddf)
+VF10(1595,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ddffffdddf)
+VF10(1596,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_fdffffdddf)
+VF10(1597,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_dfffffdddf)
+VF10(1598,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,f_ffffffdddf)
+VF10(1599,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ddddddfddf)
+VF10(1600,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fdddddfddf)
+VF10(1601,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dfddddfddf)
+VF10(1602,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ffddddfddf)
+VF10(1603,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ddfdddfddf)
+VF10(1604,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fdfdddfddf)
+VF10(1605,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dffdddfddf)
+VF10(1606,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fffdddfddf)
+VF10(1607,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dddfddfddf)
+VF10(1608,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fddfddfddf)
+VF10(1609,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dfdfddfddf)
+VF10(1610,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ffdfddfddf)
+VF10(1611,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ddffddfddf)
+VF10(1612,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fdffddfddf)
+VF10(1613,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dfffddfddf)
+VF10(1614,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ffffddfddf)
+VF10(1615,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ddddfdfddf)
+VF10(1616,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fdddfdfddf)
+VF10(1617,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dfddfdfddf)
+VF10(1618,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ffddfdfddf)
+VF10(1619,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ddfdfdfddf)
+VF10(1620,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fdfdfdfddf)
+VF10(1621,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dffdfdfddf)
+VF10(1622,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fffdfdfddf)
+VF10(1623,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dddffdfddf)
+VF10(1624,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fddffdfddf)
+VF10(1625,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dfdffdfddf)
+VF10(1626,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ffdffdfddf)
+VF10(1627,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_ddfffdfddf)
+VF10(1628,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fdfffdfddf)
+VF10(1629,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_dffffdfddf)
+VF10(1630,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,f_fffffdfddf)
+VF10(1631,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dddddffddf)
+VF10(1632,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fddddffddf)
+VF10(1633,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dfdddffddf)
+VF10(1634,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ffdddffddf)
+VF10(1635,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ddfddffddf)
+VF10(1636,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fdfddffddf)
+VF10(1637,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dffddffddf)
+VF10(1638,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fffddffddf)
+VF10(1639,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dddfdffddf)
+VF10(1640,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fddfdffddf)
+VF10(1641,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dfdfdffddf)
+VF10(1642,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ffdfdffddf)
+VF10(1643,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ddffdffddf)
+VF10(1644,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fdffdffddf)
+VF10(1645,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dfffdffddf)
+VF10(1646,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ffffdffddf)
+VF10(1647,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ddddfffddf)
+VF10(1648,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fdddfffddf)
+VF10(1649,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dfddfffddf)
+VF10(1650,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ffddfffddf)
+VF10(1651,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ddfdfffddf)
+VF10(1652,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fdfdfffddf)
+VF10(1653,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dffdfffddf)
+VF10(1654,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fffdfffddf)
+VF10(1655,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dddffffddf)
+VF10(1656,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fddffffddf)
+VF10(1657,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dfdffffddf)
+VF10(1658,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ffdffffddf)
+VF10(1659,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_ddfffffddf)
+VF10(1660,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fdfffffddf)
+VF10(1661,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_dffffffddf)
+VF10(1662,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,f_fffffffddf)
+VF10(1663,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dddddddfdf)
+VF10(1664,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fddddddfdf)
+VF10(1665,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dfdddddfdf)
+VF10(1666,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ffdddddfdf)
+VF10(1667,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ddfddddfdf)
+VF10(1668,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fdfddddfdf)
+VF10(1669,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dffddddfdf)
+VF10(1670,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fffddddfdf)
+VF10(1671,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dddfdddfdf)
+VF10(1672,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fddfdddfdf)
+VF10(1673,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dfdfdddfdf)
+VF10(1674,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ffdfdddfdf)
+VF10(1675,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ddffdddfdf)
+VF10(1676,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fdffdddfdf)
+VF10(1677,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dfffdddfdf)
+VF10(1678,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ffffdddfdf)
+VF10(1679,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ddddfddfdf)
+VF10(1680,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fdddfddfdf)
+VF10(1681,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dfddfddfdf)
+VF10(1682,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ffddfddfdf)
+VF10(1683,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ddfdfddfdf)
+VF10(1684,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fdfdfddfdf)
+VF10(1685,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dffdfddfdf)
+VF10(1686,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fffdfddfdf)
+VF10(1687,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dddffddfdf)
+VF10(1688,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fddffddfdf)
+VF10(1689,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dfdffddfdf)
+VF10(1690,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ffdffddfdf)
+VF10(1691,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_ddfffddfdf)
+VF10(1692,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fdfffddfdf)
+VF10(1693,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_dffffddfdf)
+VF10(1694,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,f_fffffddfdf)
+VF10(1695,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dddddfdfdf)
+VF10(1696,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fddddfdfdf)
+VF10(1697,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dfdddfdfdf)
+VF10(1698,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ffdddfdfdf)
+VF10(1699,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ddfddfdfdf)
+VF10(1700,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fdfddfdfdf)
+VF10(1701,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dffddfdfdf)
+VF10(1702,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fffddfdfdf)
+VF10(1703,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dddfdfdfdf)
+VF10(1704,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fddfdfdfdf)
+VF10(1705,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dfdfdfdfdf)
+VF10(1706,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ffdfdfdfdf)
+VF10(1707,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ddffdfdfdf)
+VF10(1708,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fdffdfdfdf)
+VF10(1709,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dfffdfdfdf)
+VF10(1710,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ffffdfdfdf)
+VF10(1711,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ddddffdfdf)
+VF10(1712,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fdddffdfdf)
+VF10(1713,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dfddffdfdf)
+VF10(1714,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ffddffdfdf)
+VF10(1715,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ddfdffdfdf)
+VF10(1716,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fdfdffdfdf)
+VF10(1717,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dffdffdfdf)
+VF10(1718,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fffdffdfdf)
+VF10(1719,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dddfffdfdf)
+VF10(1720,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fddfffdfdf)
+VF10(1721,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dfdfffdfdf)
+VF10(1722,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ffdfffdfdf)
+VF10(1723,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ddffffdfdf)
+VF10(1724,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_fdffffdfdf)
+VF10(1725,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_dfffffdfdf)
+VF10(1726,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,f_ffffffdfdf)
+VF10(1727,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ddddddffdf)
+VF10(1728,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fdddddffdf)
+VF10(1729,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dfddddffdf)
+VF10(1730,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ffddddffdf)
+VF10(1731,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ddfdddffdf)
+VF10(1732,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fdfdddffdf)
+VF10(1733,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dffdddffdf)
+VF10(1734,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fffdddffdf)
+VF10(1735,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dddfddffdf)
+VF10(1736,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fddfddffdf)
+VF10(1737,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dfdfddffdf)
+VF10(1738,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ffdfddffdf)
+VF10(1739,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ddffddffdf)
+VF10(1740,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fdffddffdf)
+VF10(1741,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dfffddffdf)
+VF10(1742,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ffffddffdf)
+VF10(1743,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ddddfdffdf)
+VF10(1744,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fdddfdffdf)
+VF10(1745,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dfddfdffdf)
+VF10(1746,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ffddfdffdf)
+VF10(1747,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ddfdfdffdf)
+VF10(1748,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fdfdfdffdf)
+VF10(1749,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dffdfdffdf)
+VF10(1750,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fffdfdffdf)
+VF10(1751,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dddffdffdf)
+VF10(1752,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fddffdffdf)
+VF10(1753,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dfdffdffdf)
+VF10(1754,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ffdffdffdf)
+VF10(1755,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_ddfffdffdf)
+VF10(1756,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fdfffdffdf)
+VF10(1757,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_dffffdffdf)
+VF10(1758,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,f_fffffdffdf)
+VF10(1759,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dddddfffdf)
+VF10(1760,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fddddfffdf)
+VF10(1761,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dfdddfffdf)
+VF10(1762,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ffdddfffdf)
+VF10(1763,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ddfddfffdf)
+VF10(1764,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fdfddfffdf)
+VF10(1765,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dffddfffdf)
+VF10(1766,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fffddfffdf)
+VF10(1767,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dddfdfffdf)
+VF10(1768,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fddfdfffdf)
+VF10(1769,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dfdfdfffdf)
+VF10(1770,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ffdfdfffdf)
+VF10(1771,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ddffdfffdf)
+VF10(1772,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fdffdfffdf)
+VF10(1773,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dfffdfffdf)
+VF10(1774,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ffffdfffdf)
+VF10(1775,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ddddffffdf)
+VF10(1776,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fdddffffdf)
+VF10(1777,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dfddffffdf)
+VF10(1778,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ffddffffdf)
+VF10(1779,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ddfdffffdf)
+VF10(1780,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fdfdffffdf)
+VF10(1781,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dffdffffdf)
+VF10(1782,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fffdffffdf)
+VF10(1783,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dddfffffdf)
+VF10(1784,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fddfffffdf)
+VF10(1785,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dfdfffffdf)
+VF10(1786,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ffdfffffdf)
+VF10(1787,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ddffffffdf)
+VF10(1788,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_fdffffffdf)
+VF10(1789,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_dfffffffdf)
+VF10(1790,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,f_ffffffffdf)
+VF10(1791,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ddddddddff)
+VF10(1792,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fdddddddff)
+VF10(1793,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dfddddddff)
+VF10(1794,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ffddddddff)
+VF10(1795,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ddfdddddff)
+VF10(1796,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fdfdddddff)
+VF10(1797,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dffdddddff)
+VF10(1798,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fffdddddff)
+VF10(1799,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dddfddddff)
+VF10(1800,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fddfddddff)
+VF10(1801,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dfdfddddff)
+VF10(1802,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ffdfddddff)
+VF10(1803,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ddffddddff)
+VF10(1804,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fdffddddff)
+VF10(1805,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dfffddddff)
+VF10(1806,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ffffddddff)
+VF10(1807,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ddddfdddff)
+VF10(1808,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fdddfdddff)
+VF10(1809,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dfddfdddff)
+VF10(1810,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ffddfdddff)
+VF10(1811,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ddfdfdddff)
+VF10(1812,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fdfdfdddff)
+VF10(1813,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dffdfdddff)
+VF10(1814,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fffdfdddff)
+VF10(1815,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dddffdddff)
+VF10(1816,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fddffdddff)
+VF10(1817,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dfdffdddff)
+VF10(1818,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ffdffdddff)
+VF10(1819,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_ddfffdddff)
+VF10(1820,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fdfffdddff)
+VF10(1821,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_dffffdddff)
+VF10(1822,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,f_fffffdddff)
+VF10(1823,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dddddfddff)
+VF10(1824,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fddddfddff)
+VF10(1825,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dfdddfddff)
+VF10(1826,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ffdddfddff)
+VF10(1827,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ddfddfddff)
+VF10(1828,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fdfddfddff)
+VF10(1829,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dffddfddff)
+VF10(1830,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fffddfddff)
+VF10(1831,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dddfdfddff)
+VF10(1832,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fddfdfddff)
+VF10(1833,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dfdfdfddff)
+VF10(1834,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ffdfdfddff)
+VF10(1835,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ddffdfddff)
+VF10(1836,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fdffdfddff)
+VF10(1837,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dfffdfddff)
+VF10(1838,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ffffdfddff)
+VF10(1839,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ddddffddff)
+VF10(1840,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fdddffddff)
+VF10(1841,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dfddffddff)
+VF10(1842,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ffddffddff)
+VF10(1843,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ddfdffddff)
+VF10(1844,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fdfdffddff)
+VF10(1845,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dffdffddff)
+VF10(1846,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fffdffddff)
+VF10(1847,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dddfffddff)
+VF10(1848,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fddfffddff)
+VF10(1849,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dfdfffddff)
+VF10(1850,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ffdfffddff)
+VF10(1851,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ddffffddff)
+VF10(1852,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_fdffffddff)
+VF10(1853,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_dfffffddff)
+VF10(1854,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,f_ffffffddff)
+VF10(1855,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ddddddfdff)
+VF10(1856,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fdddddfdff)
+VF10(1857,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dfddddfdff)
+VF10(1858,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ffddddfdff)
+VF10(1859,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ddfdddfdff)
+VF10(1860,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fdfdddfdff)
+VF10(1861,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dffdddfdff)
+VF10(1862,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fffdddfdff)
+VF10(1863,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dddfddfdff)
+VF10(1864,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fddfddfdff)
+VF10(1865,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dfdfddfdff)
+VF10(1866,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ffdfddfdff)
+VF10(1867,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ddffddfdff)
+VF10(1868,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fdffddfdff)
+VF10(1869,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dfffddfdff)
+VF10(1870,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ffffddfdff)
+VF10(1871,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ddddfdfdff)
+VF10(1872,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fdddfdfdff)
+VF10(1873,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dfddfdfdff)
+VF10(1874,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ffddfdfdff)
+VF10(1875,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ddfdfdfdff)
+VF10(1876,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fdfdfdfdff)
+VF10(1877,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dffdfdfdff)
+VF10(1878,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fffdfdfdff)
+VF10(1879,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dddffdfdff)
+VF10(1880,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fddffdfdff)
+VF10(1881,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dfdffdfdff)
+VF10(1882,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ffdffdfdff)
+VF10(1883,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_ddfffdfdff)
+VF10(1884,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fdfffdfdff)
+VF10(1885,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_dffffdfdff)
+VF10(1886,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,f_fffffdfdff)
+VF10(1887,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dddddffdff)
+VF10(1888,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fddddffdff)
+VF10(1889,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dfdddffdff)
+VF10(1890,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ffdddffdff)
+VF10(1891,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ddfddffdff)
+VF10(1892,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fdfddffdff)
+VF10(1893,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dffddffdff)
+VF10(1894,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fffddffdff)
+VF10(1895,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dddfdffdff)
+VF10(1896,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fddfdffdff)
+VF10(1897,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dfdfdffdff)
+VF10(1898,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ffdfdffdff)
+VF10(1899,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ddffdffdff)
+VF10(1900,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fdffdffdff)
+VF10(1901,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dfffdffdff)
+VF10(1902,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ffffdffdff)
+VF10(1903,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ddddfffdff)
+VF10(1904,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fdddfffdff)
+VF10(1905,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dfddfffdff)
+VF10(1906,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ffddfffdff)
+VF10(1907,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ddfdfffdff)
+VF10(1908,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fdfdfffdff)
+VF10(1909,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dffdfffdff)
+VF10(1910,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fffdfffdff)
+VF10(1911,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dddffffdff)
+VF10(1912,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fddffffdff)
+VF10(1913,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dfdffffdff)
+VF10(1914,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ffdffffdff)
+VF10(1915,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_ddfffffdff)
+VF10(1916,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fdfffffdff)
+VF10(1917,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_dffffffdff)
+VF10(1918,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,f_fffffffdff)
+VF10(1919,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dddddddfff)
+VF10(1920,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fddddddfff)
+VF10(1921,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dfdddddfff)
+VF10(1922,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ffdddddfff)
+VF10(1923,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ddfddddfff)
+VF10(1924,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fdfddddfff)
+VF10(1925,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dffddddfff)
+VF10(1926,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fffddddfff)
+VF10(1927,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dddfdddfff)
+VF10(1928,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fddfdddfff)
+VF10(1929,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dfdfdddfff)
+VF10(1930,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ffdfdddfff)
+VF10(1931,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ddffdddfff)
+VF10(1932,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fdffdddfff)
+VF10(1933,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dfffdddfff)
+VF10(1934,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ffffdddfff)
+VF10(1935,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ddddfddfff)
+VF10(1936,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fdddfddfff)
+VF10(1937,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dfddfddfff)
+VF10(1938,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ffddfddfff)
+VF10(1939,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ddfdfddfff)
+VF10(1940,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fdfdfddfff)
+VF10(1941,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dffdfddfff)
+VF10(1942,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fffdfddfff)
+VF10(1943,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dddffddfff)
+VF10(1944,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fddffddfff)
+VF10(1945,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dfdffddfff)
+VF10(1946,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ffdffddfff)
+VF10(1947,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_ddfffddfff)
+VF10(1948,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fdfffddfff)
+VF10(1949,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_dffffddfff)
+VF10(1950,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,f_fffffddfff)
+VF10(1951,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dddddfdfff)
+VF10(1952,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fddddfdfff)
+VF10(1953,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dfdddfdfff)
+VF10(1954,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ffdddfdfff)
+VF10(1955,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ddfddfdfff)
+VF10(1956,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fdfddfdfff)
+VF10(1957,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dffddfdfff)
+VF10(1958,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fffddfdfff)
+VF10(1959,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dddfdfdfff)
+VF10(1960,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fddfdfdfff)
+VF10(1961,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dfdfdfdfff)
+VF10(1962,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ffdfdfdfff)
+VF10(1963,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ddffdfdfff)
+VF10(1964,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fdffdfdfff)
+VF10(1965,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dfffdfdfff)
+VF10(1966,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ffffdfdfff)
+VF10(1967,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ddddffdfff)
+VF10(1968,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fdddffdfff)
+VF10(1969,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dfddffdfff)
+VF10(1970,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ffddffdfff)
+VF10(1971,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ddfdffdfff)
+VF10(1972,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fdfdffdfff)
+VF10(1973,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dffdffdfff)
+VF10(1974,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fffdffdfff)
+VF10(1975,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dddfffdfff)
+VF10(1976,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fddfffdfff)
+VF10(1977,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dfdfffdfff)
+VF10(1978,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ffdfffdfff)
+VF10(1979,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ddffffdfff)
+VF10(1980,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_fdffffdfff)
+VF10(1981,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_dfffffdfff)
+VF10(1982,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,f_ffffffdfff)
+VF10(1983,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ddddddffff)
+VF10(1984,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fdddddffff)
+VF10(1985,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dfddddffff)
+VF10(1986,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ffddddffff)
+VF10(1987,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ddfdddffff)
+VF10(1988,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fdfdddffff)
+VF10(1989,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dffdddffff)
+VF10(1990,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fffdddffff)
+VF10(1991,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dddfddffff)
+VF10(1992,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fddfddffff)
+VF10(1993,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dfdfddffff)
+VF10(1994,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ffdfddffff)
+VF10(1995,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ddffddffff)
+VF10(1996,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fdffddffff)
+VF10(1997,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dfffddffff)
+VF10(1998,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ffffddffff)
+VF10(1999,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ddddfdffff)
+VF10(2000,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fdddfdffff)
+VF10(2001,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dfddfdffff)
+VF10(2002,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ffddfdffff)
+VF10(2003,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ddfdfdffff)
+VF10(2004,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fdfdfdffff)
+VF10(2005,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dffdfdffff)
+VF10(2006,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fffdfdffff)
+VF10(2007,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dddffdffff)
+VF10(2008,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fddffdffff)
+VF10(2009,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dfdffdffff)
+VF10(2010,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ffdffdffff)
+VF10(2011,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_ddfffdffff)
+VF10(2012,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fdfffdffff)
+VF10(2013,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_dffffdffff)
+VF10(2014,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,f_fffffdffff)
+VF10(2015,DCdouble,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dddddfffff)
+VF10(2016,DCfloat,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fddddfffff)
+VF10(2017,DCdouble,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dfdddfffff)
+VF10(2018,DCfloat,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ffdddfffff)
+VF10(2019,DCdouble,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ddfddfffff)
+VF10(2020,DCfloat,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fdfddfffff)
+VF10(2021,DCdouble,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dffddfffff)
+VF10(2022,DCfloat,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fffddfffff)
+VF10(2023,DCdouble,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dddfdfffff)
+VF10(2024,DCfloat,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fddfdfffff)
+VF10(2025,DCdouble,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dfdfdfffff)
+VF10(2026,DCfloat,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ffdfdfffff)
+VF10(2027,DCdouble,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ddffdfffff)
+VF10(2028,DCfloat,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fdffdfffff)
+VF10(2029,DCdouble,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dfffdfffff)
+VF10(2030,DCfloat,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ffffdfffff)
+VF10(2031,DCdouble,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ddddffffff)
+VF10(2032,DCfloat,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fdddffffff)
+VF10(2033,DCdouble,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dfddffffff)
+VF10(2034,DCfloat,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ffddffffff)
+VF10(2035,DCdouble,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ddfdffffff)
+VF10(2036,DCfloat,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fdfdffffff)
+VF10(2037,DCdouble,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dffdffffff)
+VF10(2038,DCfloat,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fffdffffff)
+VF10(2039,DCdouble,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dddfffffff)
+VF10(2040,DCfloat,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fddfffffff)
+VF10(2041,DCdouble,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dfdfffffff)
+VF10(2042,DCfloat,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ffdfffffff)
+VF10(2043,DCdouble,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ddffffffff)
+VF10(2044,DCfloat,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_fdffffffff)
+VF10(2045,DCdouble,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_dfffffffff)
+VF10(2046,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,DCfloat,f_ffffffffff)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_floats/config.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,28 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite_floats/config.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase (on stderr) */
+#define NARGS  10
+#define NTYPES 2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_floats/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_floats/main.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,157 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite_floats/main.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+#include <math.h>
+#include <stdlib.h>
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+int   getId();
+DCpointer getFunc(int x);
+DCValue* getArg(int pos);
+
+DCdouble   valueDouble  [NARGS];
+DCfloat    valueFloat   [NARGS];
+
+
+bool equals(int select, int pos, void* data)
+{
+  switch(select)
+  {
+    case 0: return ( getArg(pos)->d == valueDouble  [pos] ); break;
+    case 1: return ( getArg(pos)->f == valueFloat   [pos] ); break;
+  }
+  return false;
+}
+
+
+void clearValues();
+
+
+void init()
+{
+  for (int i = 0 ; i < NARGS ; ++i ) {
+    valueDouble[i]   = DCdouble(i);
+    valueFloat[i]    = DCfloat(i);
+  } 
+}
+
+
+void push(DCCallVM* pCall, int select, int pos)
+{
+  switch(select) 
+  {
+    case 0: dcArgDouble  ( pCall, valueDouble  [pos] ); break;
+    case 1: dcArgFloat   ( pCall, valueFloat   [pos] ); break;
+  }
+}
+
+
+#define assert(x) if (!(x)) return false
+
+
+bool test(int x)
+{
+  clearValues();
+
+  DCCallVM* pCall = dcNewCallVM(4096);
+  dcReset(pCall);
+  int y = x;
+  int selects[NARGS] = { 0, };
+  int pos = 0;
+  for(pos = 0;y>0;++pos) 
+  {
+    int select = (y-1) % NTYPES; 
+    selects[pos] = select;
+    push(pCall,select,pos);
+    y = (y-1) / NTYPES;
+  }
+  dcCallVoid(pCall,getFunc(x));
+  
+  assert( getId() == x );
+  
+  for(int i = 0;i<pos;++i) {
+    assert( equals( selects[i], i, getArg(i) ) );      
+  }
+  
+  dcFree(pCall);
+  return true;
+}
+
+
+int powerfact(int x, int n)
+{
+  if (n==0) return 0;
+  return static_cast<int>( pow((double)x,n)+powerfact(x,n-1) );
+}
+
+
+bool run_range(int from, int to)
+{
+  bool tr = true;
+  for (int i = from ; i < to ; ++i ) {
+    printf("%d:",i);
+    bool r = test(i);
+    printf("%d\n", r);
+    tr &= r;
+  }
+  return tr;
+}
+
+extern "C" {
+
+int main(int argc, char* argv[])
+{
+  dcTest_initPlatform();
+
+  bool success = false;
+  init();
+  if (argc == 2) {
+    int index = atoi(argv[1]);
+    success = run_range( index, index+1 ); 
+  } else if (argc == 3) {
+    int from = atoi(argv[1]);
+    int to   = atoi(argv[2])+1;
+    success = run_range(from,to);
+  } else {
+    int ncalls = powerfact(NTYPES,NARGS)+1;
+    success = run_range(0,ncalls);
+  }
+
+  printf("result: suite_floats: %s\n", success ? "1" : "0");
+
+  dcTest_deInitPlatform();
+
+  return (success) ? 0 : -1;
+}
+
+}  // extern "C"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_floats/mkcase.py	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2007,2010 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+
+import sys
+
+# parameters
+
+nargs    = 10
+
+types    = ["DCdouble","DCfloat"]
+typeSigs = ["d"       ,"f"      ]
+
+# generator
+
+ntypes = len(types)
+
+sys.stderr.write("/* auto generated by mkcase (on stderr) */\n");
+sys.stderr.write("".join(["#define NARGS  ",str(nargs),"\n"]))
+sys.stderr.write("".join(["#define NTYPES ",str(ntypes),"\n"]))
+
+def powerfact(x, n):
+  if n==0:
+    return 0
+  else:
+    return x**n+powerfact(x,n-1)
+
+x     = 0
+end   = powerfact(ntypes,nargs)+1
+
+sys.stdout.write("/* auto generated by mkcase.py (on stdout) */\n");
+
+while x < end:
+  args = [str(x)]
+  sig  = ["f_"]
+  pos  = 0
+  y    = x
+  while y > 0:
+    s     = (y-1) % ntypes
+    y     = (y-1) / ntypes
+    args += [ types   [s] ]
+    sig  += [ typeSigs[s] ]
+    pos  += 1
+  sig   = "".join(sig)
+  args += [ sig ]
+  args  = ",".join(args)
+  sys.stdout.write( "".join(["VF",str(pos),"(",args,")\n"]) )
+  x += 1
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32fast/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+add_executable(suite_x86win32fast main.cc case.cc)
+target_link_libraries(suite_x86win32fast dyncall_s)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32fast/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32fast/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,25 @@
+APP = suite_x86win32fast
+OBJS = case.o main.o
+
+SRCTOP   = ../..
+BLDTOP   = ../../
+CFLAGS  += -I${SRCTOP}/dyncall
+LDFLAGS += -L${BLDTOP}/dyncall
+LDLIBS  += -ldyncall_s 
+LINK     = ${CC}
+
+all: ${APP}
+
+.PHONY: all clean install
+
+RM      ?= rm -f
+AR      ?= ar
+MKDIR   ?= mkdir
+INSTALL ?= install -p
+
+${APP}: ${OBJS} 
+	${LINK} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP} ${TARGET_ARCH}
+
+clean:
+	${RM} ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32fast/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,69 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+AUTOS = config.h case.h
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = suite.exe
+OBJS = main.obj case.obj# ..\testmain\main_ansic.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib > nul
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = suite.nds
+OBJS = main.o case.o# ..\testmain\main_NDS.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+
+$(OBJS): $(AUTOS)
+
+$(AUTOS): mkcase.py
+	python mkcase.py >case.h 2>config.h
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32fast/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,56 @@
+dyncall stress test suite: testing standard C calls
+===================================================
+Copyright (c) 2007-2009 Daniel Adler <dadler@uni-goettingen.de>, 
+                        Tassilo Philipp <tphilipp@potion-studios.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
+requirements:
+  python (for preprocessing)
+
+configuration:
+  edit "nargs" in mkcase.py and run
+  
+    make distclean 
+    make 
+    
+  on shell.
+  
+
+usage:
+
+  suite         	        - run full range
+  suite <id> 			- run test id <id>
+  suite <from> <to>		- run test id <from> to id <to> (inclusive).
+
+  see test details in case.h
+
+
+description:
+
+  the test invokes 'void'-functions that effectively overwrite global 
+  variables in a structured way.
+  
+  functions are identified by an id (a number starting at 0).
+  
+  the implementation of each function does
+  
+    sets the gID to its id (which is compiled in) 
+  
+    sets all arguments into type-specific value vectors at the given position
+  
+
+   
+  
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32fast/case.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,107 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite_x86win32fast/case.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+
+DCValue mValue[NARGS];
+
+void clearValues() { for(int i = 0;i<NARGS;++i) mValue[i].L = 0xCAFEBABEDEADC0DEULL; }
+
+template<typename T> void g(T value, int pos);
+
+template<> void g(DCchar value, int pos) { mValue[pos].c = value; }
+template<> void g(DCshort value, int pos) { mValue[pos].s = value; }
+template<> void g(DCint value, int pos) { mValue[pos].i = value; }
+template<> void g(DClong value, int pos) { mValue[pos].l = value; }
+template<> void g(DClonglong value, int pos) { mValue[pos].L = value; }
+template<> void g(DCfloat value, int pos) { mValue[pos].f = value; }
+template<> void g(DCdouble value, int pos) { mValue[pos].d = value; }
+template<> void g(DCpointer value, int pos) { mValue[pos].p = value; }
+
+DCValue* getArg(int pos) { return &mValue[pos]; }
+
+int gID;
+int getId() { return gID; }
+
+#ifdef DC__C_GNU
+#define API __attribute__((fastcall))
+#else
+#define API __fastcall
+#endif
+
+extern "C" {
+
+#define VF0(id,S) void API S () {gID=id;}
+#define VF1(id,A1,S) void API S (A1 a1) {gID=id;g<A1>(a1,0);}
+#define VF2(id,A1,A2,S) void API S (A1 a1, A2 a2) {gID=id;g<A1>(a1,0);g<A2>(a2,1);}
+#define VF3(id,A1,A2,A3,S) void API S (A1 a1, A2 a2,A3 a3) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);}
+#define VF4(id,A1,A2,A3,A4,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);}
+#define VF5(id,A1,A2,A3,A4,A5,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);}
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);}
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);}
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);}
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);}
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);}
+
+#include "case.h"
+
+}
+
+#undef VF0
+#undef VF1
+#undef VF2
+#undef VF3
+#undef VF4
+#undef VF5
+#undef VF6
+#undef VF7
+#undef VF8
+#undef VF9
+#undef VF10
+
+#define VF0(id,S) reinterpret_cast<void(*)()>(S),
+#define VF1(id,A1,S) reinterpret_cast<void(*)()>(S),
+#define VF2(id,A1,A2,S) reinterpret_cast<void(*)()>(S),
+#define VF3(id,A1,A2,A3,S) reinterpret_cast<void(*)()>(S),
+#define VF4(id,A1,A2,A3,A4,S) reinterpret_cast<void(*)()>(S),
+#define VF5(id,A1,A2,A3,A4,A5,S) reinterpret_cast<void(*)()>(S),
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) reinterpret_cast<void(*)()>(S),
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) reinterpret_cast<void(*)()>(S),
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) reinterpret_cast<void(*)()>(S),
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) reinterpret_cast<void(*)()>(S),
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) reinterpret_cast<void(*)()>(S),
+
+typedef void (*fp)();
+fp gFuncTable[] = {
+#include "case.h"
+};
+
+DCpointer getFunc(int x) {
+  return (DCpointer) gFuncTable[x];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32fast/case.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,285 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite_x86win32fast/case.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase.py (on stdout) */
+VF0(0,f_)
+VF1(1,DCbool,f_b)
+VF1(2,DCint,f_i)
+VF1(3,DClonglong,f_l)
+VF1(4,DCdouble,f_d)
+VF1(5,DCpointer,f_p)
+VF1(6,DCfloat,f_f)
+VF2(7,DCbool,DCbool,f_bb)
+VF2(8,DCint,DCbool,f_ib)
+VF2(9,DClonglong,DCbool,f_lb)
+VF2(10,DCdouble,DCbool,f_db)
+VF2(11,DCpointer,DCbool,f_pb)
+VF2(12,DCfloat,DCbool,f_fb)
+VF2(13,DCbool,DCint,f_bi)
+VF2(14,DCint,DCint,f_ii)
+VF2(15,DClonglong,DCint,f_li)
+VF2(16,DCdouble,DCint,f_di)
+VF2(17,DCpointer,DCint,f_pi)
+VF2(18,DCfloat,DCint,f_fi)
+VF2(19,DCbool,DClonglong,f_bl)
+VF2(20,DCint,DClonglong,f_il)
+VF2(21,DClonglong,DClonglong,f_ll)
+VF2(22,DCdouble,DClonglong,f_dl)
+VF2(23,DCpointer,DClonglong,f_pl)
+VF2(24,DCfloat,DClonglong,f_fl)
+VF2(25,DCbool,DCdouble,f_bd)
+VF2(26,DCint,DCdouble,f_id)
+VF2(27,DClonglong,DCdouble,f_ld)
+VF2(28,DCdouble,DCdouble,f_dd)
+VF2(29,DCpointer,DCdouble,f_pd)
+VF2(30,DCfloat,DCdouble,f_fd)
+VF2(31,DCbool,DCpointer,f_bp)
+VF2(32,DCint,DCpointer,f_ip)
+VF2(33,DClonglong,DCpointer,f_lp)
+VF2(34,DCdouble,DCpointer,f_dp)
+VF2(35,DCpointer,DCpointer,f_pp)
+VF2(36,DCfloat,DCpointer,f_fp)
+VF2(37,DCbool,DCfloat,f_bf)
+VF2(38,DCint,DCfloat,f_if)
+VF2(39,DClonglong,DCfloat,f_lf)
+VF2(40,DCdouble,DCfloat,f_df)
+VF2(41,DCpointer,DCfloat,f_pf)
+VF2(42,DCfloat,DCfloat,f_ff)
+VF3(43,DCbool,DCbool,DCbool,f_bbb)
+VF3(44,DCint,DCbool,DCbool,f_ibb)
+VF3(45,DClonglong,DCbool,DCbool,f_lbb)
+VF3(46,DCdouble,DCbool,DCbool,f_dbb)
+VF3(47,DCpointer,DCbool,DCbool,f_pbb)
+VF3(48,DCfloat,DCbool,DCbool,f_fbb)
+VF3(49,DCbool,DCint,DCbool,f_bib)
+VF3(50,DCint,DCint,DCbool,f_iib)
+VF3(51,DClonglong,DCint,DCbool,f_lib)
+VF3(52,DCdouble,DCint,DCbool,f_dib)
+VF3(53,DCpointer,DCint,DCbool,f_pib)
+VF3(54,DCfloat,DCint,DCbool,f_fib)
+VF3(55,DCbool,DClonglong,DCbool,f_blb)
+VF3(56,DCint,DClonglong,DCbool,f_ilb)
+VF3(57,DClonglong,DClonglong,DCbool,f_llb)
+VF3(58,DCdouble,DClonglong,DCbool,f_dlb)
+VF3(59,DCpointer,DClonglong,DCbool,f_plb)
+VF3(60,DCfloat,DClonglong,DCbool,f_flb)
+VF3(61,DCbool,DCdouble,DCbool,f_bdb)
+VF3(62,DCint,DCdouble,DCbool,f_idb)
+VF3(63,DClonglong,DCdouble,DCbool,f_ldb)
+VF3(64,DCdouble,DCdouble,DCbool,f_ddb)
+VF3(65,DCpointer,DCdouble,DCbool,f_pdb)
+VF3(66,DCfloat,DCdouble,DCbool,f_fdb)
+VF3(67,DCbool,DCpointer,DCbool,f_bpb)
+VF3(68,DCint,DCpointer,DCbool,f_ipb)
+VF3(69,DClonglong,DCpointer,DCbool,f_lpb)
+VF3(70,DCdouble,DCpointer,DCbool,f_dpb)
+VF3(71,DCpointer,DCpointer,DCbool,f_ppb)
+VF3(72,DCfloat,DCpointer,DCbool,f_fpb)
+VF3(73,DCbool,DCfloat,DCbool,f_bfb)
+VF3(74,DCint,DCfloat,DCbool,f_ifb)
+VF3(75,DClonglong,DCfloat,DCbool,f_lfb)
+VF3(76,DCdouble,DCfloat,DCbool,f_dfb)
+VF3(77,DCpointer,DCfloat,DCbool,f_pfb)
+VF3(78,DCfloat,DCfloat,DCbool,f_ffb)
+VF3(79,DCbool,DCbool,DCint,f_bbi)
+VF3(80,DCint,DCbool,DCint,f_ibi)
+VF3(81,DClonglong,DCbool,DCint,f_lbi)
+VF3(82,DCdouble,DCbool,DCint,f_dbi)
+VF3(83,DCpointer,DCbool,DCint,f_pbi)
+VF3(84,DCfloat,DCbool,DCint,f_fbi)
+VF3(85,DCbool,DCint,DCint,f_bii)
+VF3(86,DCint,DCint,DCint,f_iii)
+VF3(87,DClonglong,DCint,DCint,f_lii)
+VF3(88,DCdouble,DCint,DCint,f_dii)
+VF3(89,DCpointer,DCint,DCint,f_pii)
+VF3(90,DCfloat,DCint,DCint,f_fii)
+VF3(91,DCbool,DClonglong,DCint,f_bli)
+VF3(92,DCint,DClonglong,DCint,f_ili)
+VF3(93,DClonglong,DClonglong,DCint,f_lli)
+VF3(94,DCdouble,DClonglong,DCint,f_dli)
+VF3(95,DCpointer,DClonglong,DCint,f_pli)
+VF3(96,DCfloat,DClonglong,DCint,f_fli)
+VF3(97,DCbool,DCdouble,DCint,f_bdi)
+VF3(98,DCint,DCdouble,DCint,f_idi)
+VF3(99,DClonglong,DCdouble,DCint,f_ldi)
+VF3(100,DCdouble,DCdouble,DCint,f_ddi)
+VF3(101,DCpointer,DCdouble,DCint,f_pdi)
+VF3(102,DCfloat,DCdouble,DCint,f_fdi)
+VF3(103,DCbool,DCpointer,DCint,f_bpi)
+VF3(104,DCint,DCpointer,DCint,f_ipi)
+VF3(105,DClonglong,DCpointer,DCint,f_lpi)
+VF3(106,DCdouble,DCpointer,DCint,f_dpi)
+VF3(107,DCpointer,DCpointer,DCint,f_ppi)
+VF3(108,DCfloat,DCpointer,DCint,f_fpi)
+VF3(109,DCbool,DCfloat,DCint,f_bfi)
+VF3(110,DCint,DCfloat,DCint,f_ifi)
+VF3(111,DClonglong,DCfloat,DCint,f_lfi)
+VF3(112,DCdouble,DCfloat,DCint,f_dfi)
+VF3(113,DCpointer,DCfloat,DCint,f_pfi)
+VF3(114,DCfloat,DCfloat,DCint,f_ffi)
+VF3(115,DCbool,DCbool,DClonglong,f_bbl)
+VF3(116,DCint,DCbool,DClonglong,f_ibl)
+VF3(117,DClonglong,DCbool,DClonglong,f_lbl)
+VF3(118,DCdouble,DCbool,DClonglong,f_dbl)
+VF3(119,DCpointer,DCbool,DClonglong,f_pbl)
+VF3(120,DCfloat,DCbool,DClonglong,f_fbl)
+VF3(121,DCbool,DCint,DClonglong,f_bil)
+VF3(122,DCint,DCint,DClonglong,f_iil)
+VF3(123,DClonglong,DCint,DClonglong,f_lil)
+VF3(124,DCdouble,DCint,DClonglong,f_dil)
+VF3(125,DCpointer,DCint,DClonglong,f_pil)
+VF3(126,DCfloat,DCint,DClonglong,f_fil)
+VF3(127,DCbool,DClonglong,DClonglong,f_bll)
+VF3(128,DCint,DClonglong,DClonglong,f_ill)
+VF3(129,DClonglong,DClonglong,DClonglong,f_lll)
+VF3(130,DCdouble,DClonglong,DClonglong,f_dll)
+VF3(131,DCpointer,DClonglong,DClonglong,f_pll)
+VF3(132,DCfloat,DClonglong,DClonglong,f_fll)
+VF3(133,DCbool,DCdouble,DClonglong,f_bdl)
+VF3(134,DCint,DCdouble,DClonglong,f_idl)
+VF3(135,DClonglong,DCdouble,DClonglong,f_ldl)
+VF3(136,DCdouble,DCdouble,DClonglong,f_ddl)
+VF3(137,DCpointer,DCdouble,DClonglong,f_pdl)
+VF3(138,DCfloat,DCdouble,DClonglong,f_fdl)
+VF3(139,DCbool,DCpointer,DClonglong,f_bpl)
+VF3(140,DCint,DCpointer,DClonglong,f_ipl)
+VF3(141,DClonglong,DCpointer,DClonglong,f_lpl)
+VF3(142,DCdouble,DCpointer,DClonglong,f_dpl)
+VF3(143,DCpointer,DCpointer,DClonglong,f_ppl)
+VF3(144,DCfloat,DCpointer,DClonglong,f_fpl)
+VF3(145,DCbool,DCfloat,DClonglong,f_bfl)
+VF3(146,DCint,DCfloat,DClonglong,f_ifl)
+VF3(147,DClonglong,DCfloat,DClonglong,f_lfl)
+VF3(148,DCdouble,DCfloat,DClonglong,f_dfl)
+VF3(149,DCpointer,DCfloat,DClonglong,f_pfl)
+VF3(150,DCfloat,DCfloat,DClonglong,f_ffl)
+VF3(151,DCbool,DCbool,DCdouble,f_bbd)
+VF3(152,DCint,DCbool,DCdouble,f_ibd)
+VF3(153,DClonglong,DCbool,DCdouble,f_lbd)
+VF3(154,DCdouble,DCbool,DCdouble,f_dbd)
+VF3(155,DCpointer,DCbool,DCdouble,f_pbd)
+VF3(156,DCfloat,DCbool,DCdouble,f_fbd)
+VF3(157,DCbool,DCint,DCdouble,f_bid)
+VF3(158,DCint,DCint,DCdouble,f_iid)
+VF3(159,DClonglong,DCint,DCdouble,f_lid)
+VF3(160,DCdouble,DCint,DCdouble,f_did)
+VF3(161,DCpointer,DCint,DCdouble,f_pid)
+VF3(162,DCfloat,DCint,DCdouble,f_fid)
+VF3(163,DCbool,DClonglong,DCdouble,f_bld)
+VF3(164,DCint,DClonglong,DCdouble,f_ild)
+VF3(165,DClonglong,DClonglong,DCdouble,f_lld)
+VF3(166,DCdouble,DClonglong,DCdouble,f_dld)
+VF3(167,DCpointer,DClonglong,DCdouble,f_pld)
+VF3(168,DCfloat,DClonglong,DCdouble,f_fld)
+VF3(169,DCbool,DCdouble,DCdouble,f_bdd)
+VF3(170,DCint,DCdouble,DCdouble,f_idd)
+VF3(171,DClonglong,DCdouble,DCdouble,f_ldd)
+VF3(172,DCdouble,DCdouble,DCdouble,f_ddd)
+VF3(173,DCpointer,DCdouble,DCdouble,f_pdd)
+VF3(174,DCfloat,DCdouble,DCdouble,f_fdd)
+VF3(175,DCbool,DCpointer,DCdouble,f_bpd)
+VF3(176,DCint,DCpointer,DCdouble,f_ipd)
+VF3(177,DClonglong,DCpointer,DCdouble,f_lpd)
+VF3(178,DCdouble,DCpointer,DCdouble,f_dpd)
+VF3(179,DCpointer,DCpointer,DCdouble,f_ppd)
+VF3(180,DCfloat,DCpointer,DCdouble,f_fpd)
+VF3(181,DCbool,DCfloat,DCdouble,f_bfd)
+VF3(182,DCint,DCfloat,DCdouble,f_ifd)
+VF3(183,DClonglong,DCfloat,DCdouble,f_lfd)
+VF3(184,DCdouble,DCfloat,DCdouble,f_dfd)
+VF3(185,DCpointer,DCfloat,DCdouble,f_pfd)
+VF3(186,DCfloat,DCfloat,DCdouble,f_ffd)
+VF3(187,DCbool,DCbool,DCpointer,f_bbp)
+VF3(188,DCint,DCbool,DCpointer,f_ibp)
+VF3(189,DClonglong,DCbool,DCpointer,f_lbp)
+VF3(190,DCdouble,DCbool,DCpointer,f_dbp)
+VF3(191,DCpointer,DCbool,DCpointer,f_pbp)
+VF3(192,DCfloat,DCbool,DCpointer,f_fbp)
+VF3(193,DCbool,DCint,DCpointer,f_bip)
+VF3(194,DCint,DCint,DCpointer,f_iip)
+VF3(195,DClonglong,DCint,DCpointer,f_lip)
+VF3(196,DCdouble,DCint,DCpointer,f_dip)
+VF3(197,DCpointer,DCint,DCpointer,f_pip)
+VF3(198,DCfloat,DCint,DCpointer,f_fip)
+VF3(199,DCbool,DClonglong,DCpointer,f_blp)
+VF3(200,DCint,DClonglong,DCpointer,f_ilp)
+VF3(201,DClonglong,DClonglong,DCpointer,f_llp)
+VF3(202,DCdouble,DClonglong,DCpointer,f_dlp)
+VF3(203,DCpointer,DClonglong,DCpointer,f_plp)
+VF3(204,DCfloat,DClonglong,DCpointer,f_flp)
+VF3(205,DCbool,DCdouble,DCpointer,f_bdp)
+VF3(206,DCint,DCdouble,DCpointer,f_idp)
+VF3(207,DClonglong,DCdouble,DCpointer,f_ldp)
+VF3(208,DCdouble,DCdouble,DCpointer,f_ddp)
+VF3(209,DCpointer,DCdouble,DCpointer,f_pdp)
+VF3(210,DCfloat,DCdouble,DCpointer,f_fdp)
+VF3(211,DCbool,DCpointer,DCpointer,f_bpp)
+VF3(212,DCint,DCpointer,DCpointer,f_ipp)
+VF3(213,DClonglong,DCpointer,DCpointer,f_lpp)
+VF3(214,DCdouble,DCpointer,DCpointer,f_dpp)
+VF3(215,DCpointer,DCpointer,DCpointer,f_ppp)
+VF3(216,DCfloat,DCpointer,DCpointer,f_fpp)
+VF3(217,DCbool,DCfloat,DCpointer,f_bfp)
+VF3(218,DCint,DCfloat,DCpointer,f_ifp)
+VF3(219,DClonglong,DCfloat,DCpointer,f_lfp)
+VF3(220,DCdouble,DCfloat,DCpointer,f_dfp)
+VF3(221,DCpointer,DCfloat,DCpointer,f_pfp)
+VF3(222,DCfloat,DCfloat,DCpointer,f_ffp)
+VF3(223,DCbool,DCbool,DCfloat,f_bbf)
+VF3(224,DCint,DCbool,DCfloat,f_ibf)
+VF3(225,DClonglong,DCbool,DCfloat,f_lbf)
+VF3(226,DCdouble,DCbool,DCfloat,f_dbf)
+VF3(227,DCpointer,DCbool,DCfloat,f_pbf)
+VF3(228,DCfloat,DCbool,DCfloat,f_fbf)
+VF3(229,DCbool,DCint,DCfloat,f_bif)
+VF3(230,DCint,DCint,DCfloat,f_iif)
+VF3(231,DClonglong,DCint,DCfloat,f_lif)
+VF3(232,DCdouble,DCint,DCfloat,f_dif)
+VF3(233,DCpointer,DCint,DCfloat,f_pif)
+VF3(234,DCfloat,DCint,DCfloat,f_fif)
+VF3(235,DCbool,DClonglong,DCfloat,f_blf)
+VF3(236,DCint,DClonglong,DCfloat,f_ilf)
+VF3(237,DClonglong,DClonglong,DCfloat,f_llf)
+VF3(238,DCdouble,DClonglong,DCfloat,f_dlf)
+VF3(239,DCpointer,DClonglong,DCfloat,f_plf)
+VF3(240,DCfloat,DClonglong,DCfloat,f_flf)
+VF3(241,DCbool,DCdouble,DCfloat,f_bdf)
+VF3(242,DCint,DCdouble,DCfloat,f_idf)
+VF3(243,DClonglong,DCdouble,DCfloat,f_ldf)
+VF3(244,DCdouble,DCdouble,DCfloat,f_ddf)
+VF3(245,DCpointer,DCdouble,DCfloat,f_pdf)
+VF3(246,DCfloat,DCdouble,DCfloat,f_fdf)
+VF3(247,DCbool,DCpointer,DCfloat,f_bpf)
+VF3(248,DCint,DCpointer,DCfloat,f_ipf)
+VF3(249,DClonglong,DCpointer,DCfloat,f_lpf)
+VF3(250,DCdouble,DCpointer,DCfloat,f_dpf)
+VF3(251,DCpointer,DCpointer,DCfloat,f_ppf)
+VF3(252,DCfloat,DCpointer,DCfloat,f_fpf)
+VF3(253,DCbool,DCfloat,DCfloat,f_bff)
+VF3(254,DCint,DCfloat,DCfloat,f_iff)
+VF3(255,DClonglong,DCfloat,DCfloat,f_lff)
+VF3(256,DCdouble,DCfloat,DCfloat,f_dff)
+VF3(257,DCpointer,DCfloat,DCfloat,f_pff)
+VF3(258,DCfloat,DCfloat,DCfloat,f_fff)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32fast/config.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,28 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite_x86win32fast/config.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase (on stderr) */
+#define NARGS  3
+#define NTYPES 6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32fast/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32fast/main.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,188 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite_x86win32fast/main.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+#include "../../dyncall/dyncall_macros.h"
+#include <math.h>
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+int   getId();
+DCpointer getFunc(int x);
+DCValue* getArg(int pos);
+
+
+typedef double precise;
+
+
+DCbool     valueBool[NARGS];
+DCshort    valueShort[NARGS];
+DCchar     valueChar[NARGS];
+DCint      valueInt[NARGS];
+DClonglong valueLongLong[NARGS];
+DCdouble   valueDouble[NARGS];
+DCpointer  valuePointer[NARGS];
+DCfloat    valueFloat[NARGS];
+
+
+bool equals(int select, int pos, void* data)
+{
+  switch(select)
+  {
+    case 0: return ( getArg(pos)->B == valueBool[pos] ); break;
+    case 1: return ( getArg(pos)->i == valueInt[pos] ); break;
+    case 2: return ( getArg(pos)->l == valueLongLong[pos] ); break;
+    case 3: return ( getArg(pos)->d == valueDouble[pos] ); break;
+    case 4: return ( getArg(pos)->p == valuePointer[pos] ); break;
+    case 5: return ( getArg(pos)->f == valueFloat[pos] ); break;
+  }
+  return false;
+}
+
+
+void clearValues();
+
+
+void init()
+{
+  for (int i = 0 ; i < NARGS ; ++i ) {
+
+    valueBool[i] = DCbool( (i % 1) ? DC_TRUE : DC_FALSE );
+    valueInt[i] = DCint(i);
+    valueLongLong[i] = DClonglong(i);
+    valueDouble[i] = DCdouble(i);
+    valuePointer[i] = DCpointer(i);
+    valueFloat[i] = DCfloat(i);
+  } 
+}
+
+
+void push(DCCallVM* pCall, int select, int pos)
+{
+  switch(select) 
+  {
+    case 0: dcArgBool( pCall, valueBool[pos] ); break;
+    case 1: dcArgInt( pCall, valueInt[pos] ); break;
+    case 2: dcArgLongLong( pCall, valueLongLong[pos] ); break;
+    case 3: dcArgDouble( pCall, valueDouble[pos] ); break;
+    case 4: dcArgPointer( pCall, valuePointer[pos] ); break;
+    case 5: dcArgFloat( pCall, valueFloat[pos] ); break;
+  }
+}
+
+
+#define assert(x) if (!(x)) return false
+
+
+bool test(int x)
+{
+  clearValues();
+
+  DCCallVM* pCall = dcNewCallVM(4096);
+#ifdef DC__C_GNU
+  dcMode(pCall, DC_CALL_C_X86_WIN32_FAST_GNU);
+#else
+  dcMode(pCall, DC_CALL_C_X86_WIN32_FAST_MS);
+#endif
+  dcReset(pCall);
+
+  int y = x;
+  int selects[NARGS] = { 0, };
+  int pos = 0;
+  for(pos = 0;y>0;++pos) 
+  {
+    int select = (y-1) % NTYPES; 
+    selects[pos] = select;
+    push(pCall,select,pos);
+    y = (y-1) / NTYPES;
+  }
+  dcCallVoid(pCall,getFunc(x));
+  
+  assert( getId() == x );
+  
+  for(int i = 0;i<pos;++i) {
+    assert( equals( selects[i], i, getArg(i) ) );      
+  }
+  
+  dcFree(pCall);
+  return true;
+}
+
+
+int powerfact(int x, int n)
+{
+  if (n==0) return 0;
+  return static_cast<int>( pow((double)x,n)+powerfact(x,n-1) );
+}
+
+#include <stdio.h>
+#include <stdlib.h>
+
+bool run_range(int from, int to)
+{
+  bool tr = true;
+  for (int i = from ; i < to ; ++i ) {
+    printf("%d:",i);
+    bool r = test(i);
+    printf("%d\n", r);
+    tr &= r;
+  }
+  return tr;
+}
+
+extern "C" {
+
+int main(int argc, char* argv[])
+{
+  dcTest_initPlatform();
+
+  bool success = false;
+  init();
+  if (argc == 2) {
+    int index = atoi(argv[1]);
+    success = run_range( index, index+1 ); 
+  } else if (argc == 3) {
+    int from = atoi(argv[1]);
+    int to   = atoi(argv[2])+1;
+    success = run_range(from,to);
+  } else {
+    int ncalls = powerfact(NTYPES,NARGS)+1;
+    success = run_range(0,ncalls);
+  }
+  
+  printf("result: suite_x86win32fast: %s\n", success ? "1" : "0");
+
+  dcTest_deInitPlatform();
+
+  return (success) ? 0 : -1;
+}
+
+}  // extern "C"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32fast/mkcase.py	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+import sys
+
+# parameters
+
+nargs  = 3
+
+types  = ["DCbool","DCint","DClonglong","DCdouble","DCpointer","DCfloat"]
+
+# generator
+
+ntypes = len(types)
+
+sys.stderr.write("/* auto generated by mkcase (on stderr) */\n");
+sys.stderr.write("".join(["#define NARGS  ",str(nargs),"\n"]))
+sys.stderr.write("".join(["#define NTYPES ",str(ntypes),"\n"]))
+
+def powerfact(x, n):
+  if n==0:
+    return 0
+  else:
+    return x**n+powerfact(x,n-1)
+
+x     = 0
+end   = powerfact(ntypes,nargs)+1
+
+sys.stdout.write("/* auto generated by mkcase.py (on stdout) */\n");
+
+while x < end:
+  args = [str(x)]
+  sig  = ["f_"]
+  pos  = 0
+  y    = x
+  while y > 0:
+    s     = (y-1) % ntypes
+    y     = (y-1) / ntypes
+    args += [ types[s] ]
+    sig  += [ types[s][2] ]
+    pos  += 1
+  sig   = "".join(sig)
+  args += [ sig ]
+  args  = ",".join(args)
+  sys.stdout.write( "".join(["VF",str(pos),"(",args,")\n"]) )
+  x += 1
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32std/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+add_executable(suite_x86win32std main.cc case.cc)
+target_link_libraries(suite_x86win32std dyncall_s)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32std/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32std/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,25 @@
+APP = suite_x86win32std
+OBJS = case.o main.o
+
+SRCTOP   = ../..
+BLDTOP   = ../../
+CFLAGS  += -I${SRCTOP}/dyncall
+LDFLAGS += -L${BLDTOP}/dyncall
+LDLIBS  += -ldyncall_s 
+LINK     = ${CC}
+
+all: ${APP}
+
+.PHONY: all clean install
+
+RM      ?= rm -f
+AR      ?= ar
+MKDIR   ?= mkdir
+INSTALL ?= install -p
+
+${APP}: ${OBJS} 
+	${LINK} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP} ${TARGET_ARCH}
+
+clean:
+	${RM} ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32std/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,69 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+AUTOS = config.h case.h
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = suite.exe
+OBJS = main.obj case.obj# ..\testmain\main_ansic.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib > nul
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = suite.nds
+OBJS = main.o case.o# ..\testmain\main_NDS.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+
+$(OBJS): $(AUTOS)
+
+$(AUTOS): mkcase.py
+	python mkcase.py >case.h 2>config.h
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32std/README.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,55 @@
+dyncall stress test suite: testing standard C calls
+===================================================
+Copyright (c) 2007-2009 Daniel Adler <dadler@uni-goettingen.de>, 
+                        Tassilo Philipp <tphilipp@potion-studios.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+requirements:
+  python (for preprocessing)
+
+configuration:
+  edit "nargs" in mkcase.py and run
+  
+    make distclean 
+    make 
+    
+  on shell.
+  
+
+usage:
+
+  suite         	        - run full range
+  suite <id> 			- run test id <id>
+  suite <from> <to>		- run test id <from> to id <to> (inclusive).
+
+  see test details in case.h
+
+
+description:
+
+  the test invokes 'void'-functions that effectively overwrite global 
+  variables in a structured way.
+  
+  functions are identified by an id (a number starting at 0).
+  
+  the implementation of each function does
+  
+    sets the gID to its id (which is compiled in) 
+  
+    sets all arguments into type-specific value vectors at the given position
+  
+
+   
+  
+  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32std/case.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,106 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite_x86win32std/case.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+
+DCValue mValue[NARGS];
+
+void clearValues() { for(int i = 0;i<NARGS;++i) mValue[i].L = 0xCAFEBABEDEADC0DEULL; }
+
+template<typename T> void g(T value, int pos);
+
+template<> void g(DCchar value, int pos) { mValue[pos].c = value; }
+template<> void g(DCshort value, int pos) { mValue[pos].s = value; }
+template<> void g(DCint value, int pos) { mValue[pos].i = value; }
+template<> void g(DClonglong value, int pos) { mValue[pos].L = value; }
+template<> void g(DCfloat value, int pos) { mValue[pos].f = value; }
+template<> void g(DCdouble value, int pos) { mValue[pos].d = value; }
+template<> void g(DCpointer value, int pos) { mValue[pos].p = value; }
+
+DCValue* getArg(int pos) { return &mValue[pos]; }
+
+int gID;
+int getId() { return gID; }
+
+#ifdef DC__C_GNU
+#define API __attribute__((stdcall))
+#else
+#define API __stdcall
+#endif
+
+extern "C" {
+
+#define VF0(id,S) void API S () {gID=id;}
+#define VF1(id,A1,S) void API S (A1 a1) {gID=id;g<A1>(a1,0);}
+#define VF2(id,A1,A2,S) void API S (A1 a1, A2 a2) {gID=id;g<A1>(a1,0);g<A2>(a2,1);}
+#define VF3(id,A1,A2,A3,S) void API S (A1 a1, A2 a2,A3 a3) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);}
+#define VF4(id,A1,A2,A3,A4,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);}
+#define VF5(id,A1,A2,A3,A4,A5,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);}
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);}
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);}
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);}
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);}
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) void API S (A1 a1, A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9,A10 a10) {gID=id;g<A1>(a1,0);g<A2>(a2,1);g<A3>(a3,2);g<A4>(a4,3);g<A5>(a5,4);g<A6>(a6,5);g<A7>(a7,6);g<A8>(a8,7);g<A9>(a9,8);g<A10>(a10,9);}
+
+#include "case.h"
+
+}
+
+#undef VF0
+#undef VF1
+#undef VF2
+#undef VF3
+#undef VF4
+#undef VF5
+#undef VF6
+#undef VF7
+#undef VF8
+#undef VF9
+#undef VF10
+
+#define VF0(id,S) reinterpret_cast<void(*)()>(S),
+#define VF1(id,A1,S) reinterpret_cast<void(*)()>(S),
+#define VF2(id,A1,A2,S) reinterpret_cast<void(*)()>(S),
+#define VF3(id,A1,A2,A3,S) reinterpret_cast<void(*)()>(S),
+#define VF4(id,A1,A2,A3,A4,S) reinterpret_cast<void(*)()>(S),
+#define VF5(id,A1,A2,A3,A4,A5,S) reinterpret_cast<void(*)()>(S),
+#define VF6(id,A1,A2,A3,A4,A5,A6,S) reinterpret_cast<void(*)()>(S),
+#define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) reinterpret_cast<void(*)()>(S),
+#define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) reinterpret_cast<void(*)()>(S),
+#define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) reinterpret_cast<void(*)()>(S),
+#define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) reinterpret_cast<void(*)()>(S),
+
+typedef void (*fp)();
+fp gFuncTable[] = {
+#include "case.h"
+};
+
+DCpointer getFunc(int x) {
+  return (DCpointer) gFuncTable[x];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32std/case.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,285 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite_x86win32std/case.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase.py (on stdout) */
+VF0(0,f_)
+VF1(1,DCbool,f_b)
+VF1(2,DCint,f_i)
+VF1(3,DClonglong,f_l)
+VF1(4,DCdouble,f_d)
+VF1(5,DCpointer,f_p)
+VF1(6,DCfloat,f_f)
+VF2(7,DCbool,DCbool,f_bb)
+VF2(8,DCint,DCbool,f_ib)
+VF2(9,DClonglong,DCbool,f_lb)
+VF2(10,DCdouble,DCbool,f_db)
+VF2(11,DCpointer,DCbool,f_pb)
+VF2(12,DCfloat,DCbool,f_fb)
+VF2(13,DCbool,DCint,f_bi)
+VF2(14,DCint,DCint,f_ii)
+VF2(15,DClonglong,DCint,f_li)
+VF2(16,DCdouble,DCint,f_di)
+VF2(17,DCpointer,DCint,f_pi)
+VF2(18,DCfloat,DCint,f_fi)
+VF2(19,DCbool,DClonglong,f_bl)
+VF2(20,DCint,DClonglong,f_il)
+VF2(21,DClonglong,DClonglong,f_ll)
+VF2(22,DCdouble,DClonglong,f_dl)
+VF2(23,DCpointer,DClonglong,f_pl)
+VF2(24,DCfloat,DClonglong,f_fl)
+VF2(25,DCbool,DCdouble,f_bd)
+VF2(26,DCint,DCdouble,f_id)
+VF2(27,DClonglong,DCdouble,f_ld)
+VF2(28,DCdouble,DCdouble,f_dd)
+VF2(29,DCpointer,DCdouble,f_pd)
+VF2(30,DCfloat,DCdouble,f_fd)
+VF2(31,DCbool,DCpointer,f_bp)
+VF2(32,DCint,DCpointer,f_ip)
+VF2(33,DClonglong,DCpointer,f_lp)
+VF2(34,DCdouble,DCpointer,f_dp)
+VF2(35,DCpointer,DCpointer,f_pp)
+VF2(36,DCfloat,DCpointer,f_fp)
+VF2(37,DCbool,DCfloat,f_bf)
+VF2(38,DCint,DCfloat,f_if)
+VF2(39,DClonglong,DCfloat,f_lf)
+VF2(40,DCdouble,DCfloat,f_df)
+VF2(41,DCpointer,DCfloat,f_pf)
+VF2(42,DCfloat,DCfloat,f_ff)
+VF3(43,DCbool,DCbool,DCbool,f_bbb)
+VF3(44,DCint,DCbool,DCbool,f_ibb)
+VF3(45,DClonglong,DCbool,DCbool,f_lbb)
+VF3(46,DCdouble,DCbool,DCbool,f_dbb)
+VF3(47,DCpointer,DCbool,DCbool,f_pbb)
+VF3(48,DCfloat,DCbool,DCbool,f_fbb)
+VF3(49,DCbool,DCint,DCbool,f_bib)
+VF3(50,DCint,DCint,DCbool,f_iib)
+VF3(51,DClonglong,DCint,DCbool,f_lib)
+VF3(52,DCdouble,DCint,DCbool,f_dib)
+VF3(53,DCpointer,DCint,DCbool,f_pib)
+VF3(54,DCfloat,DCint,DCbool,f_fib)
+VF3(55,DCbool,DClonglong,DCbool,f_blb)
+VF3(56,DCint,DClonglong,DCbool,f_ilb)
+VF3(57,DClonglong,DClonglong,DCbool,f_llb)
+VF3(58,DCdouble,DClonglong,DCbool,f_dlb)
+VF3(59,DCpointer,DClonglong,DCbool,f_plb)
+VF3(60,DCfloat,DClonglong,DCbool,f_flb)
+VF3(61,DCbool,DCdouble,DCbool,f_bdb)
+VF3(62,DCint,DCdouble,DCbool,f_idb)
+VF3(63,DClonglong,DCdouble,DCbool,f_ldb)
+VF3(64,DCdouble,DCdouble,DCbool,f_ddb)
+VF3(65,DCpointer,DCdouble,DCbool,f_pdb)
+VF3(66,DCfloat,DCdouble,DCbool,f_fdb)
+VF3(67,DCbool,DCpointer,DCbool,f_bpb)
+VF3(68,DCint,DCpointer,DCbool,f_ipb)
+VF3(69,DClonglong,DCpointer,DCbool,f_lpb)
+VF3(70,DCdouble,DCpointer,DCbool,f_dpb)
+VF3(71,DCpointer,DCpointer,DCbool,f_ppb)
+VF3(72,DCfloat,DCpointer,DCbool,f_fpb)
+VF3(73,DCbool,DCfloat,DCbool,f_bfb)
+VF3(74,DCint,DCfloat,DCbool,f_ifb)
+VF3(75,DClonglong,DCfloat,DCbool,f_lfb)
+VF3(76,DCdouble,DCfloat,DCbool,f_dfb)
+VF3(77,DCpointer,DCfloat,DCbool,f_pfb)
+VF3(78,DCfloat,DCfloat,DCbool,f_ffb)
+VF3(79,DCbool,DCbool,DCint,f_bbi)
+VF3(80,DCint,DCbool,DCint,f_ibi)
+VF3(81,DClonglong,DCbool,DCint,f_lbi)
+VF3(82,DCdouble,DCbool,DCint,f_dbi)
+VF3(83,DCpointer,DCbool,DCint,f_pbi)
+VF3(84,DCfloat,DCbool,DCint,f_fbi)
+VF3(85,DCbool,DCint,DCint,f_bii)
+VF3(86,DCint,DCint,DCint,f_iii)
+VF3(87,DClonglong,DCint,DCint,f_lii)
+VF3(88,DCdouble,DCint,DCint,f_dii)
+VF3(89,DCpointer,DCint,DCint,f_pii)
+VF3(90,DCfloat,DCint,DCint,f_fii)
+VF3(91,DCbool,DClonglong,DCint,f_bli)
+VF3(92,DCint,DClonglong,DCint,f_ili)
+VF3(93,DClonglong,DClonglong,DCint,f_lli)
+VF3(94,DCdouble,DClonglong,DCint,f_dli)
+VF3(95,DCpointer,DClonglong,DCint,f_pli)
+VF3(96,DCfloat,DClonglong,DCint,f_fli)
+VF3(97,DCbool,DCdouble,DCint,f_bdi)
+VF3(98,DCint,DCdouble,DCint,f_idi)
+VF3(99,DClonglong,DCdouble,DCint,f_ldi)
+VF3(100,DCdouble,DCdouble,DCint,f_ddi)
+VF3(101,DCpointer,DCdouble,DCint,f_pdi)
+VF3(102,DCfloat,DCdouble,DCint,f_fdi)
+VF3(103,DCbool,DCpointer,DCint,f_bpi)
+VF3(104,DCint,DCpointer,DCint,f_ipi)
+VF3(105,DClonglong,DCpointer,DCint,f_lpi)
+VF3(106,DCdouble,DCpointer,DCint,f_dpi)
+VF3(107,DCpointer,DCpointer,DCint,f_ppi)
+VF3(108,DCfloat,DCpointer,DCint,f_fpi)
+VF3(109,DCbool,DCfloat,DCint,f_bfi)
+VF3(110,DCint,DCfloat,DCint,f_ifi)
+VF3(111,DClonglong,DCfloat,DCint,f_lfi)
+VF3(112,DCdouble,DCfloat,DCint,f_dfi)
+VF3(113,DCpointer,DCfloat,DCint,f_pfi)
+VF3(114,DCfloat,DCfloat,DCint,f_ffi)
+VF3(115,DCbool,DCbool,DClonglong,f_bbl)
+VF3(116,DCint,DCbool,DClonglong,f_ibl)
+VF3(117,DClonglong,DCbool,DClonglong,f_lbl)
+VF3(118,DCdouble,DCbool,DClonglong,f_dbl)
+VF3(119,DCpointer,DCbool,DClonglong,f_pbl)
+VF3(120,DCfloat,DCbool,DClonglong,f_fbl)
+VF3(121,DCbool,DCint,DClonglong,f_bil)
+VF3(122,DCint,DCint,DClonglong,f_iil)
+VF3(123,DClonglong,DCint,DClonglong,f_lil)
+VF3(124,DCdouble,DCint,DClonglong,f_dil)
+VF3(125,DCpointer,DCint,DClonglong,f_pil)
+VF3(126,DCfloat,DCint,DClonglong,f_fil)
+VF3(127,DCbool,DClonglong,DClonglong,f_bll)
+VF3(128,DCint,DClonglong,DClonglong,f_ill)
+VF3(129,DClonglong,DClonglong,DClonglong,f_lll)
+VF3(130,DCdouble,DClonglong,DClonglong,f_dll)
+VF3(131,DCpointer,DClonglong,DClonglong,f_pll)
+VF3(132,DCfloat,DClonglong,DClonglong,f_fll)
+VF3(133,DCbool,DCdouble,DClonglong,f_bdl)
+VF3(134,DCint,DCdouble,DClonglong,f_idl)
+VF3(135,DClonglong,DCdouble,DClonglong,f_ldl)
+VF3(136,DCdouble,DCdouble,DClonglong,f_ddl)
+VF3(137,DCpointer,DCdouble,DClonglong,f_pdl)
+VF3(138,DCfloat,DCdouble,DClonglong,f_fdl)
+VF3(139,DCbool,DCpointer,DClonglong,f_bpl)
+VF3(140,DCint,DCpointer,DClonglong,f_ipl)
+VF3(141,DClonglong,DCpointer,DClonglong,f_lpl)
+VF3(142,DCdouble,DCpointer,DClonglong,f_dpl)
+VF3(143,DCpointer,DCpointer,DClonglong,f_ppl)
+VF3(144,DCfloat,DCpointer,DClonglong,f_fpl)
+VF3(145,DCbool,DCfloat,DClonglong,f_bfl)
+VF3(146,DCint,DCfloat,DClonglong,f_ifl)
+VF3(147,DClonglong,DCfloat,DClonglong,f_lfl)
+VF3(148,DCdouble,DCfloat,DClonglong,f_dfl)
+VF3(149,DCpointer,DCfloat,DClonglong,f_pfl)
+VF3(150,DCfloat,DCfloat,DClonglong,f_ffl)
+VF3(151,DCbool,DCbool,DCdouble,f_bbd)
+VF3(152,DCint,DCbool,DCdouble,f_ibd)
+VF3(153,DClonglong,DCbool,DCdouble,f_lbd)
+VF3(154,DCdouble,DCbool,DCdouble,f_dbd)
+VF3(155,DCpointer,DCbool,DCdouble,f_pbd)
+VF3(156,DCfloat,DCbool,DCdouble,f_fbd)
+VF3(157,DCbool,DCint,DCdouble,f_bid)
+VF3(158,DCint,DCint,DCdouble,f_iid)
+VF3(159,DClonglong,DCint,DCdouble,f_lid)
+VF3(160,DCdouble,DCint,DCdouble,f_did)
+VF3(161,DCpointer,DCint,DCdouble,f_pid)
+VF3(162,DCfloat,DCint,DCdouble,f_fid)
+VF3(163,DCbool,DClonglong,DCdouble,f_bld)
+VF3(164,DCint,DClonglong,DCdouble,f_ild)
+VF3(165,DClonglong,DClonglong,DCdouble,f_lld)
+VF3(166,DCdouble,DClonglong,DCdouble,f_dld)
+VF3(167,DCpointer,DClonglong,DCdouble,f_pld)
+VF3(168,DCfloat,DClonglong,DCdouble,f_fld)
+VF3(169,DCbool,DCdouble,DCdouble,f_bdd)
+VF3(170,DCint,DCdouble,DCdouble,f_idd)
+VF3(171,DClonglong,DCdouble,DCdouble,f_ldd)
+VF3(172,DCdouble,DCdouble,DCdouble,f_ddd)
+VF3(173,DCpointer,DCdouble,DCdouble,f_pdd)
+VF3(174,DCfloat,DCdouble,DCdouble,f_fdd)
+VF3(175,DCbool,DCpointer,DCdouble,f_bpd)
+VF3(176,DCint,DCpointer,DCdouble,f_ipd)
+VF3(177,DClonglong,DCpointer,DCdouble,f_lpd)
+VF3(178,DCdouble,DCpointer,DCdouble,f_dpd)
+VF3(179,DCpointer,DCpointer,DCdouble,f_ppd)
+VF3(180,DCfloat,DCpointer,DCdouble,f_fpd)
+VF3(181,DCbool,DCfloat,DCdouble,f_bfd)
+VF3(182,DCint,DCfloat,DCdouble,f_ifd)
+VF3(183,DClonglong,DCfloat,DCdouble,f_lfd)
+VF3(184,DCdouble,DCfloat,DCdouble,f_dfd)
+VF3(185,DCpointer,DCfloat,DCdouble,f_pfd)
+VF3(186,DCfloat,DCfloat,DCdouble,f_ffd)
+VF3(187,DCbool,DCbool,DCpointer,f_bbp)
+VF3(188,DCint,DCbool,DCpointer,f_ibp)
+VF3(189,DClonglong,DCbool,DCpointer,f_lbp)
+VF3(190,DCdouble,DCbool,DCpointer,f_dbp)
+VF3(191,DCpointer,DCbool,DCpointer,f_pbp)
+VF3(192,DCfloat,DCbool,DCpointer,f_fbp)
+VF3(193,DCbool,DCint,DCpointer,f_bip)
+VF3(194,DCint,DCint,DCpointer,f_iip)
+VF3(195,DClonglong,DCint,DCpointer,f_lip)
+VF3(196,DCdouble,DCint,DCpointer,f_dip)
+VF3(197,DCpointer,DCint,DCpointer,f_pip)
+VF3(198,DCfloat,DCint,DCpointer,f_fip)
+VF3(199,DCbool,DClonglong,DCpointer,f_blp)
+VF3(200,DCint,DClonglong,DCpointer,f_ilp)
+VF3(201,DClonglong,DClonglong,DCpointer,f_llp)
+VF3(202,DCdouble,DClonglong,DCpointer,f_dlp)
+VF3(203,DCpointer,DClonglong,DCpointer,f_plp)
+VF3(204,DCfloat,DClonglong,DCpointer,f_flp)
+VF3(205,DCbool,DCdouble,DCpointer,f_bdp)
+VF3(206,DCint,DCdouble,DCpointer,f_idp)
+VF3(207,DClonglong,DCdouble,DCpointer,f_ldp)
+VF3(208,DCdouble,DCdouble,DCpointer,f_ddp)
+VF3(209,DCpointer,DCdouble,DCpointer,f_pdp)
+VF3(210,DCfloat,DCdouble,DCpointer,f_fdp)
+VF3(211,DCbool,DCpointer,DCpointer,f_bpp)
+VF3(212,DCint,DCpointer,DCpointer,f_ipp)
+VF3(213,DClonglong,DCpointer,DCpointer,f_lpp)
+VF3(214,DCdouble,DCpointer,DCpointer,f_dpp)
+VF3(215,DCpointer,DCpointer,DCpointer,f_ppp)
+VF3(216,DCfloat,DCpointer,DCpointer,f_fpp)
+VF3(217,DCbool,DCfloat,DCpointer,f_bfp)
+VF3(218,DCint,DCfloat,DCpointer,f_ifp)
+VF3(219,DClonglong,DCfloat,DCpointer,f_lfp)
+VF3(220,DCdouble,DCfloat,DCpointer,f_dfp)
+VF3(221,DCpointer,DCfloat,DCpointer,f_pfp)
+VF3(222,DCfloat,DCfloat,DCpointer,f_ffp)
+VF3(223,DCbool,DCbool,DCfloat,f_bbf)
+VF3(224,DCint,DCbool,DCfloat,f_ibf)
+VF3(225,DClonglong,DCbool,DCfloat,f_lbf)
+VF3(226,DCdouble,DCbool,DCfloat,f_dbf)
+VF3(227,DCpointer,DCbool,DCfloat,f_pbf)
+VF3(228,DCfloat,DCbool,DCfloat,f_fbf)
+VF3(229,DCbool,DCint,DCfloat,f_bif)
+VF3(230,DCint,DCint,DCfloat,f_iif)
+VF3(231,DClonglong,DCint,DCfloat,f_lif)
+VF3(232,DCdouble,DCint,DCfloat,f_dif)
+VF3(233,DCpointer,DCint,DCfloat,f_pif)
+VF3(234,DCfloat,DCint,DCfloat,f_fif)
+VF3(235,DCbool,DClonglong,DCfloat,f_blf)
+VF3(236,DCint,DClonglong,DCfloat,f_ilf)
+VF3(237,DClonglong,DClonglong,DCfloat,f_llf)
+VF3(238,DCdouble,DClonglong,DCfloat,f_dlf)
+VF3(239,DCpointer,DClonglong,DCfloat,f_plf)
+VF3(240,DCfloat,DClonglong,DCfloat,f_flf)
+VF3(241,DCbool,DCdouble,DCfloat,f_bdf)
+VF3(242,DCint,DCdouble,DCfloat,f_idf)
+VF3(243,DClonglong,DCdouble,DCfloat,f_ldf)
+VF3(244,DCdouble,DCdouble,DCfloat,f_ddf)
+VF3(245,DCpointer,DCdouble,DCfloat,f_pdf)
+VF3(246,DCfloat,DCdouble,DCfloat,f_fdf)
+VF3(247,DCbool,DCpointer,DCfloat,f_bpf)
+VF3(248,DCint,DCpointer,DCfloat,f_ipf)
+VF3(249,DClonglong,DCpointer,DCfloat,f_lpf)
+VF3(250,DCdouble,DCpointer,DCfloat,f_dpf)
+VF3(251,DCpointer,DCpointer,DCfloat,f_ppf)
+VF3(252,DCfloat,DCpointer,DCfloat,f_fpf)
+VF3(253,DCbool,DCfloat,DCfloat,f_bff)
+VF3(254,DCint,DCfloat,DCfloat,f_iff)
+VF3(255,DClonglong,DCfloat,DCfloat,f_lff)
+VF3(256,DCdouble,DCfloat,DCfloat,f_dff)
+VF3(257,DCpointer,DCfloat,DCfloat,f_pff)
+VF3(258,DCfloat,DCfloat,DCfloat,f_fff)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32std/config.h	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,28 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite_x86win32std/config.h
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+/* auto generated by mkcase (on stderr) */
+#define NARGS  3
+#define NTYPES 6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32std/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32std/main.cc	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,182 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/suite_x86win32std/main.cc
+ Description: 
+ License:
+
+   Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+
+
+#include "../../dyncall/dyncall.h"
+#include "config.h"
+#include "../../dyncall/dyncall_value.h"
+#include <math.h>
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+int   getId();
+DCpointer getFunc(int x);
+DCValue* getArg(int pos);
+
+
+typedef double precise;
+
+
+DCbool     valueBool[NARGS];
+DCshort    valueShort[NARGS];
+DCchar     valueChar[NARGS];
+DCint      valueInt[NARGS];
+DClonglong valueLongLong[NARGS];
+DCdouble   valueDouble[NARGS];
+DCpointer  valuePointer[NARGS];
+DCfloat    valueFloat[NARGS];
+
+
+bool equals(int select, int pos, void* data)
+{
+  switch(select)
+  {
+    case 0: return ( getArg(pos)->B == valueBool[pos] ); break;
+    case 1: return ( getArg(pos)->i == valueInt[pos] ); break;
+    case 2: return ( getArg(pos)->L == valueLongLong[pos] ); break;
+    case 3: return ( getArg(pos)->d == valueDouble[pos] ); break;
+    case 4: return ( getArg(pos)->p == valuePointer[pos] ); break;
+    case 5: return ( getArg(pos)->f == valueFloat[pos] ); break;
+  }
+  return false;
+}
+
+
+void clearValues();
+
+
+void init()
+{
+  for (int i = 0 ; i < NARGS ; ++i ) {
+
+    valueBool[i] = DCbool( (i % 1) ? DC_TRUE : DC_FALSE );
+    valueInt[i] = DCint(i);
+    valueLongLong[i] = DClonglong(i);
+    valueDouble[i] = DCdouble(i);
+    valuePointer[i] = DCpointer(i);
+    valueFloat[i] = DCfloat(i);
+  } 
+}
+
+
+void push(DCCallVM* pCall, int select, int pos)
+{
+  switch(select) 
+  {
+    case 0: dcArgBool( pCall, valueBool[pos] ); break;
+    case 1: dcArgInt( pCall, valueInt[pos] ); break;
+    case 2: dcArgLongLong( pCall, valueLongLong[pos] ); break;
+    case 3: dcArgDouble( pCall, valueDouble[pos] ); break;
+    case 4: dcArgPointer( pCall, valuePointer[pos] ); break;
+    case 5: dcArgFloat( pCall, valueFloat[pos] ); break;
+  }
+}
+
+
+#define assert(x) if (!(x)) return false
+
+
+bool test(int x)
+{
+  clearValues();
+
+  DCCallVM* pCall = dcNewCallVM(4096);
+  dcMode(pCall, DC_CALL_C_X86_WIN32_STD);
+  dcReset(pCall);
+  int y = x;
+  int selects[NARGS] = { 0, };
+  int pos = 0;
+  for(pos = 0;y>0;++pos) 
+  {
+    int select = (y-1) % NTYPES; 
+    selects[pos] = select;
+    push(pCall,select,pos);
+    y = (y-1) / NTYPES;
+  }
+  dcCallVoid(pCall,getFunc(x));
+  
+  assert( getId() == x );
+  
+  for(int i = 0;i<pos;++i) {
+    assert( equals( selects[i], i, getArg(i) ) );      
+  }
+  
+  dcFree(pCall);
+  return true;
+}
+
+
+int powerfact(int x, int n)
+{
+  if (n==0) return 0;
+  return static_cast<int>( pow((double)x,n)+powerfact(x,n-1) );
+}
+
+#include <stdio.h>
+#include <stdlib.h>
+
+bool run_range(int from, int to)
+{
+  bool tr = true;
+  for (int i = from ; i < to ; ++i ) {
+    printf("%d:",i);
+    bool r = test(i);
+    printf("%d\n", r);
+    tr &= r;
+  }
+  return tr;
+}
+
+extern "C" {
+
+int main(int argc, char* argv[])
+{
+  dcTest_initPlatform();
+
+  bool success = false;
+  init();
+  if (argc == 2) {
+    int index = atoi(argv[1]);
+    success = run_range( index, index+1 ); 
+  } else if (argc == 3) {
+    int from = atoi(argv[1]);
+    int to   = atoi(argv[2])+1;
+    success = run_range(from,to);
+  } else {
+    int ncalls = powerfact(NTYPES,NARGS)+1;
+    success = run_range(0,ncalls);
+  }
+
+  printf("result: suite_x86win32std: %s\n", success ? "1" : "0");
+  
+  dcTest_deInitPlatform();
+
+  return (success) ? 0 : -1;
+}
+
+}  // extern "C"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/suite_x86win32std/mkcase.py	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+import sys
+
+# parameters
+
+nargs  = 3
+
+types  = ["DCbool","DCint","DClonglong","DCdouble","DCpointer","DCfloat"]
+
+# generator
+
+ntypes = len(types)
+
+sys.stderr.write("/* auto generated by mkcase (on stderr) */\n");
+sys.stderr.write("".join(["#define NARGS  ",str(nargs),"\n"]))
+sys.stderr.write("".join(["#define NTYPES ",str(ntypes),"\n"]))
+
+def powerfact(x, n):
+  if n==0:
+    return 0
+  else:
+    return x**n+powerfact(x,n-1)
+
+x     = 0
+end   = powerfact(ntypes,nargs)+1
+
+sys.stdout.write("/* auto generated by mkcase.py (on stdout) */\n");
+
+while x < end:
+  args = [str(x)]
+  sig  = ["f_"]
+  pos  = 0
+  y    = x
+  while y > 0:
+    s     = (y-1) % ntypes
+    y     = (y-1) / ntypes
+    args += [ types[s] ]
+    sig  += [ types[s][2] ]
+    pos  += 1
+  sig   = "".join(sig)
+  args += [ sig ]
+  args  = ",".join(args)
+  sys.stdout.write( "".join(["VF",str(pos),"(",args,")\n"]) )
+  x += 1
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/syscall/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+add_executable(syscall syscall.c)
+target_link_libraries(syscall dyncall_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/syscall/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/syscall/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,20 @@
+APP = syscall
+OBJS = syscall.o
+
+SRCTOP   = ../..
+BLDTOP   = ../..
+CFLAGS  += -I${SRCTOP}/dyncall
+LDFLAGS += -L${BLDTOP}/dyncall
+LDLIBS  += -ldyncall_s
+LINK     = ${CC}
+
+all: ${APP}
+
+.PHONY: all clean 
+
+${APP}: ${OBJS} 
+	${CC} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP} 
+
+clean:
+	rm -f ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/syscall/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP       = syscall
+OBJS      = syscall.o
+SRCTOP    = ${VPATH}/../..
+BLDTOP    = ../..
+CFLAGS   += -I${SRCTOP}/dyncall
+LDLIBS   += -L${BLDTOP}/dyncall -ldyncall_s
+.PHONY: all clean install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CC} ${CFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP} 
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/syscall/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/syscall/syscall.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,53 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/syscall/syscall.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "dyncall.h"
+#include <sys/syscall.h> 
+#include <assert.h>
+DCCallVM* callvm;
+
+void syscallvm_init()
+{
+  callvm = dcNewCallVM(4096);
+  dcMode(callvm, DC_CALL_SYS_DEFAULT);
+  assert( dcGetError(callvm) == 0 );
+}
+
+int syscall_write(int fd, char* buf, size_t len)
+{
+  dcReset(callvm);
+  dcArgInt(callvm, fd);
+  dcArgPointer(callvm, buf);
+  dcArgInt(callvm, len);
+  return dcCallInt(callvm, (DCpointer)(ptrdiff_t)SYS_write);
+}
+
+int main(int argc, char* argv[])
+{
+  syscallvm_init();
+  syscall_write(1/*stdout*/, "result: syscall: 1\n", 19);
+  return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/thunk/CMakeLists.txt	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,3 @@
+add_executable(test_thunk test_thunk.c)
+target_link_libraries(test_thunk dyncallback_s)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/thunk/Makefile.M	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,7 @@
+#include "../../buildsys/dynmake/Makefile.base.M"
+
+all:
+	echo not impl!!!
+
+clean:
+	echo not impl!!!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/thunk/Makefile.embedded	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,20 @@
+APP = thunk
+OBJS = test_thunk.o
+
+SRCTOP   = ../..
+BLDTOP   = ../..
+CFLAGS  += -I${SRCTOP}/dyncallback -I${SRCTOP}/dyncall
+LDFLAGS += -L${BLDTOP}/dyncallback
+LDLIBS  += -ldyncallback_s
+LINK     = ${CC}
+
+all: ${APP}
+
+.PHONY: all clean 
+
+${APP}: ${OBJS} 
+	${CC} ${OBJS} ${LDFLAGS} ${LDLIBS} -o ${APP} 
+
+clean:
+	rm -f ${APP} ${OBJS}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/thunk/Makefile.generic	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,16 @@
+APP     = thunk
+OBJS    = test_thunk.o
+SRCTOP  = ${VPATH}/../..
+BLDTOP  = ../..
+CFLAGS += -I${SRCTOP}/dyncallback -I${SRCTOP}/dyncall
+LDLIBS += -L${BLDTOP}/dyncallback -ldyncallback_s
+.PHONY: all clean install
+all: ${APP}
+${APP}: ${OBJS} 
+	${CC} ${CFLAGS} ${LDFLAGS} ${OBJS} ${LDLIBS} -o ${APP} 
+clean:
+	rm -f ${APP} ${OBJS}
+install:
+	mkdir -p ${PREFIX}/test
+	cp ${APP} ${PREFIX}/test
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/thunk/Nmakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,59 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2007,2009 Daniel Adler <dadler@uni-goettingen.de>, 
+#                         Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+#///////////////////////////////////////////////////
+#
+#	nmake makefile
+#	Nmakefile
+#
+#///////////////////////////////////////////////////
+
+
+TOP = ..\..
+
+!INCLUDE $(TOP)\buildsys\nmake\prolog.nmake
+
+
+!IF "$(BUILD_OS)" == "windows"
+
+TARGETS = thunk.exe
+OBJS = test_thunk.obj# ..\testmain\main_ansic.obj
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) /OUT:"$@" $(LDFLAGS) $(OBJS) $(TOP)\dyncall\libdyncall_s.lib $(TOP)\dyncallback\libdyncallback_s.lib
+
+
+!ELSE IF "$(BUILD_OS)" == "nds"
+
+TARGETS = thunk.nds
+OBJS = test_thunk.o# ..\testmain\main_NDS.o
+
+$(TARGETS): $(OBJS)
+	echo Linking $@ ...
+	$(LD) $(LDFLAGS) $(OBJS) $(DEVKITPRO_PATH)\libnds\lib\libnds9.a $(TOP)/dyncall/libdyncall_s.a $(TOP)\dyncallback\libdyncallback_s.a -o "$(@B).elf"
+	$(OCP) -O binary "$(@B).elf" "$(@B).arm9"
+	ndstool -c "$@" -9 "$(@B).arm9"
+	del "$(@B).elf" "$(@B).arm9"
+
+!ENDIF
+
+
+!INCLUDE $(TOP)\buildsys\nmake\epilog.nmake
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/thunk/dynMakefile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,4 @@
+all: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) all $(MAKE) && exit || sh $(?:bat=sh) all $(MAKE)
+clean: ./../../buildsys/dynmake/dynmake.bat
+	$(?:/=\\) clean $(MAKE) && exit || sh $(?:bat=sh) clean $(MAKE)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/thunk/mkfile	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,30 @@
+#//////////////////////////////////////////////////////////////////////////////
+#
+# Copyright (c) 2013 Daniel Adler <dadler@uni-goettingen.de>, 
+#                    Tassilo Philipp <tphilipp@potion-studios.com>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+#//////////////////////////////////////////////////////////////////////////////
+
+
+TOP		= ../..
+<$TOP/buildsys/mk/prolog.mk
+
+
+UNITS       = test_thunk
+APPLICATION = thunk
+LIBS        = $TOP/dyncallback/libdyncallback_s.a$O
+
+
+<$TOP/buildsys/mk/epilog.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/thunk/test_thunk.c	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,105 @@
+/*
+
+ Package: dyncall
+ Library: test
+ File: test/thunk/test_thunk.c
+ Description: 
+ License:
+
+   Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>,
+                           Tassilo Philipp <tphilipp@potion-studios.com>
+
+   Permission to use, copy, modify, and distribute this software for any
+   purpose with or without fee is hereby granted, provided that the above
+   copyright notice and this permission notice appear in all copies.
+
+   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#include "../../dyncall/dyncall.h"
+#include "../../dyncallback/dyncall_thunk.h"
+#include "../../dyncallback/dyncall_alloc_wx.h"
+#include "../common/platformInit.h"
+#include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
+
+
+/**
+ ** test: thunks with several allocation modes
+ **       such as on stack, on heap and explicit wx
+ **
+ **/
+
+#include <assert.h>
+#include <errno.h>
+
+void my_entry(const char* text)
+{
+  printf("%s: 1\n", text);
+}
+
+typedef void (printfun)(const char*);
+
+void test_stack()
+{
+  DCThunk t;
+  printfun* fp;
+  dcbInitThunk(&t, &my_entry);
+  fp = (printfun*)&t;
+  fp("stack");
+}
+
+#include <stdlib.h>
+
+void test_heap()
+{
+  printfun* fp;
+  DCThunk* p = (DCThunk*)malloc(sizeof(DCThunk));
+  if(!p) {
+    printf("0\n");
+    return;
+  }
+  dcbInitThunk(p, &my_entry);
+  fp = (printfun*)p;
+  fp("heap");
+  free(p);
+}
+
+void test_wx()
+{
+  DCThunk* p;
+  printfun* fp;
+  int err = dcAllocWX(sizeof(DCThunk), (void**)&p);
+  if(err || !p) {
+    printf("0\n");
+    return;
+  }
+  dcbInitThunk(p, &my_entry);
+  fp = (printfun*)p;
+  fp("wx");
+  dcFreeWX((void*)p, sizeof(DCThunk));
+}
+
+int main()
+{
+  dcTest_initPlatform();
+
+  printf("Allocating ...\n");
+  printf("... W^X memory: ");
+  test_wx();
+  printf("... heap memory: ");
+  test_heap();
+  printf("... stack memory: ");
+  test_stack();
+
+  dcTest_deInitPlatform();
+
+  return 0;
+}
+