nqp-2015.11/MANIFEST000644 000765 000024 00000160141 12623421721 015566 0ustar00williamcoledastaff000000 000000 MANIFEST .gitignore .travis.yml 3rdparty/asm/LICENSE.txt 3rdparty/asm/asm-4.1.jar 3rdparty/asm/asm-tree-4.1.jar 3rdparty/dyncall/.gitignore 3rdparty/dyncall/AUTHORS 3rdparty/dyncall/BUGS 3rdparty/dyncall/CMakeLists.txt 3rdparty/dyncall/ChangeLog 3rdparty/dyncall/LICENSE 3rdparty/dyncall/Makefile.M 3rdparty/dyncall/Makefile.embedded 3rdparty/dyncall/Makefile.generic 3rdparty/dyncall/Nmakefile 3rdparty/dyncall/README 3rdparty/dyncall/ToDo 3rdparty/dyncall/autovar/LICENSE.txt 3rdparty/dyncall/autovar/README.txt 3rdparty/dyncall/autovar/autovar_ABI.h 3rdparty/dyncall/autovar/autovar_ARCH.h 3rdparty/dyncall/autovar/autovar_CC.h 3rdparty/dyncall/autovar/autovar_OS.h 3rdparty/dyncall/autovar/autovar_OSFAMILY.h 3rdparty/dyncall/buildsys/cmake/Modules/FindDynCall.cmake 3rdparty/dyncall/buildsys/cmake/Modules/FindDynCallback.cmake 3rdparty/dyncall/buildsys/cmake/Modules/FindDynLoad.cmake 3rdparty/dyncall/buildsys/cmake/Modules/UseLATEX.cmake 3rdparty/dyncall/buildsys/dynmake/Makefile.base.M 3rdparty/dyncall/buildsys/dynmake/dynmake.bat 3rdparty/dyncall/buildsys/dynmake/dynmake.sh 3rdparty/dyncall/buildsys/lua/README.txt 3rdparty/dyncall/buildsys/lua/bootstrap.sh 3rdparty/dyncall/buildsys/lua/cleanup.sh 3rdparty/dyncall/buildsys/lua/mkfile 3rdparty/dyncall/buildsys/lua/setenv.sh 3rdparty/dyncall/buildsys/mk/app.mk 3rdparty/dyncall/buildsys/mk/dirs.mk 3rdparty/dyncall/buildsys/mk/epilog.mk 3rdparty/dyncall/buildsys/mk/lib.mk 3rdparty/dyncall/buildsys/mk/pcc.mk 3rdparty/dyncall/buildsys/mk/prolog.mk 3rdparty/dyncall/buildsys/nmake/common.nmake 3rdparty/dyncall/buildsys/nmake/epilog.nmake 3rdparty/dyncall/buildsys/nmake/prolog.nmake 3rdparty/dyncall/buildsys/nmake/tool_gcc.nmake 3rdparty/dyncall/buildsys/nmake/tool_msvc.nmake 3rdparty/dyncall/buildsys/scripts/batch-build-linux.sh 3rdparty/dyncall/buildsys/scripts/batch-build-minix.sh 3rdparty/dyncall/buildsys/scripts/batch-build-psp.sh 3rdparty/dyncall/buildsys/scripts/conf-nds.bat 3rdparty/dyncall/buildsys/scripts/setenv-cross-ios.sh 3rdparty/dyncall/buildsys/scripts/setenv-sdk-ios.sh 3rdparty/dyncall/buildsys/vs2005/dyncall/dyncall.vcproj 3rdparty/dyncall/buildsys/vs2005/test_plain/test_plain.vcproj 3rdparty/dyncall/buildsys/vs2005/vs2005.sln 3rdparty/dyncall/configure 3rdparty/dyncall/configure.bat 3rdparty/dyncall/doc/Description.txt 3rdparty/dyncall/doc/License.txt 3rdparty/dyncall/doc/Makefile.generic 3rdparty/dyncall/doc/README-Cross.txt 3rdparty/dyncall/doc/README.CMake 3rdparty/dyncall/doc/README.Generic 3rdparty/dyncall/doc/README.MacOSX 3rdparty/dyncall/doc/README.Minix 3rdparty/dyncall/doc/README.NDS 3rdparty/dyncall/doc/README.PSP 3rdparty/dyncall/doc/README.SunOS 3rdparty/dyncall/doc/README.Windows 3rdparty/dyncall/doc/README.embedded 3rdparty/dyncall/doc/README.iOS 3rdparty/dyncall/doc/manual/CMakeLists.txt 3rdparty/dyncall/doc/manual/Makefile.generic 3rdparty/dyncall/doc/manual/Nmakefile 3rdparty/dyncall/doc/manual/callconvs/callconv_arm32.tex 3rdparty/dyncall/doc/manual/callconvs/callconv_mips.tex 3rdparty/dyncall/doc/manual/callconvs/callconv_mips64.tex 3rdparty/dyncall/doc/manual/callconvs/callconv_ppc32.tex 3rdparty/dyncall/doc/manual/callconvs/callconv_ppc64.tex 3rdparty/dyncall/doc/manual/callconvs/callconv_sparc.tex 3rdparty/dyncall/doc/manual/callconvs/callconv_sparc64.tex 3rdparty/dyncall/doc/manual/callconvs/callconv_x64.tex 3rdparty/dyncall/doc/manual/callconvs/callconv_x86.tex 3rdparty/dyncall/doc/manual/dyncall_logo.eps 3rdparty/dyncall/doc/manual/dyncall_logo.pdf 3rdparty/dyncall/doc/manual/dyncall_logo.svg 3rdparty/dyncall/doc/manual/dyncall_watermark.eps 3rdparty/dyncall/doc/manual/dyncall_watermark.pdf 3rdparty/dyncall/doc/manual/dyncall_watermark.svg 3rdparty/dyncall/doc/manual/manual.tex 3rdparty/dyncall/doc/manual/manual_bindings.tex 3rdparty/dyncall/doc/manual/manual_build.tex 3rdparty/dyncall/doc/manual/manual_cc.tex 3rdparty/dyncall/doc/manual/manual_design.tex 3rdparty/dyncall/doc/manual/manual_devel.tex 3rdparty/dyncall/doc/manual/manual_dyncall_api.tex 3rdparty/dyncall/doc/manual/manual_dyncallback_api.tex 3rdparty/dyncall/doc/manual/manual_dynload_api.tex 3rdparty/dyncall/doc/manual/manual_epilog.tex 3rdparty/dyncall/doc/manual/manual_literature.tex 3rdparty/dyncall/doc/manual/manual_motivation.tex 3rdparty/dyncall/doc/manual/manual_overview.tex 3rdparty/dyncall/doc/manual/manual_title.tex 3rdparty/dyncall/dynMakefile 3rdparty/dyncall/dyncall/CMakeLists.txt 3rdparty/dyncall/dyncall/DynCallConfig.cmake 3rdparty/dyncall/dyncall/Makefile.M 3rdparty/dyncall/dyncall/Makefile.embedded 3rdparty/dyncall/dyncall/Makefile.generic 3rdparty/dyncall/dyncall/Nmakefile 3rdparty/dyncall/dyncall/README-Developer.txt 3rdparty/dyncall/dyncall/README.txt 3rdparty/dyncall/dyncall/TODO 3rdparty/dyncall/dyncall/dynMakefile 3rdparty/dyncall/dyncall/dyncall.3 3rdparty/dyncall/dyncall/dyncall.h 3rdparty/dyncall/dyncall/dyncall_alloc.h 3rdparty/dyncall/dyncall/dyncall_api.c 3rdparty/dyncall/dyncall/dyncall_call.S 3rdparty/dyncall/dyncall/dyncall_call_arm32_arm.S 3rdparty/dyncall/dyncall/dyncall_call_arm32_arm.h 3rdparty/dyncall/dyncall/dyncall_call_arm32_arm_armhf.S 3rdparty/dyncall/dyncall/dyncall_call_arm32_arm_armhf.h 3rdparty/dyncall/dyncall/dyncall_call_arm32_thumb.h 3rdparty/dyncall/dyncall/dyncall_call_arm32_thumb_apple.s 3rdparty/dyncall/dyncall/dyncall_call_arm32_thumb_armhf.S 3rdparty/dyncall/dyncall/dyncall_call_arm32_thumb_gas.s 3rdparty/dyncall/dyncall/dyncall_call_mips.h 3rdparty/dyncall/dyncall/dyncall_call_mips_eabi.h 3rdparty/dyncall/dyncall/dyncall_call_mips_eabi_gas.s 3rdparty/dyncall/dyncall/dyncall_call_mips_gas.S 3rdparty/dyncall/dyncall/dyncall_call_mips_n32.h 3rdparty/dyncall/dyncall/dyncall_call_mips_n32_gas.s 3rdparty/dyncall/dyncall/dyncall_call_mips_n64.h 3rdparty/dyncall/dyncall/dyncall_call_mips_n64_gas.s 3rdparty/dyncall/dyncall/dyncall_call_mips_o32.h 3rdparty/dyncall/dyncall/dyncall_call_mips_o32_gas.s 3rdparty/dyncall/dyncall/dyncall_call_ppc32.S 3rdparty/dyncall/dyncall/dyncall_call_ppc32.h 3rdparty/dyncall/dyncall/dyncall_call_sparc.S 3rdparty/dyncall/dyncall/dyncall_call_sparc.h 3rdparty/dyncall/dyncall/dyncall_call_sparc64.S 3rdparty/dyncall/dyncall/dyncall_call_sparc64.h 3rdparty/dyncall/dyncall/dyncall_call_sparc_v9.S 3rdparty/dyncall/dyncall/dyncall_call_sparc_v9.h 3rdparty/dyncall/dyncall/dyncall_call_x64-att.S 3rdparty/dyncall/dyncall/dyncall_call_x64.S 3rdparty/dyncall/dyncall/dyncall_call_x64.h 3rdparty/dyncall/dyncall/dyncall_call_x64_generic_masm.asm 3rdparty/dyncall/dyncall/dyncall_call_x86.S 3rdparty/dyncall/dyncall/dyncall_call_x86.h 3rdparty/dyncall/dyncall/dyncall_call_x86_8a.s 3rdparty/dyncall/dyncall/dyncall_call_x86_generic_masm.asm 3rdparty/dyncall/dyncall/dyncall_call_x86_nasm.asm 3rdparty/dyncall/dyncall/dyncall_callf.c 3rdparty/dyncall/dyncall/dyncall_callf.h 3rdparty/dyncall/dyncall/dyncall_callvm.c 3rdparty/dyncall/dyncall/dyncall_callvm.h 3rdparty/dyncall/dyncall/dyncall_callvm_arm32_arm.c 3rdparty/dyncall/dyncall/dyncall_callvm_arm32_arm.h 3rdparty/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.c 3rdparty/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.h 3rdparty/dyncall/dyncall/dyncall_callvm_arm32_thumb.c 3rdparty/dyncall/dyncall/dyncall_callvm_arm32_thumb.h 3rdparty/dyncall/dyncall/dyncall_callvm_base.c 3rdparty/dyncall/dyncall/dyncall_callvm_mips.c 3rdparty/dyncall/dyncall/dyncall_callvm_mips.h 3rdparty/dyncall/dyncall/dyncall_callvm_mips_eabi.c 3rdparty/dyncall/dyncall/dyncall_callvm_mips_eabi.h 3rdparty/dyncall/dyncall/dyncall_callvm_mips_n32.c 3rdparty/dyncall/dyncall/dyncall_callvm_mips_n64.c 3rdparty/dyncall/dyncall/dyncall_callvm_mips_n64.h 3rdparty/dyncall/dyncall/dyncall_callvm_mips_o32.c 3rdparty/dyncall/dyncall/dyncall_callvm_mips_o32.h 3rdparty/dyncall/dyncall/dyncall_callvm_ppc32.c 3rdparty/dyncall/dyncall/dyncall_callvm_ppc32.h 3rdparty/dyncall/dyncall/dyncall_callvm_sparc.c 3rdparty/dyncall/dyncall/dyncall_callvm_sparc.h 3rdparty/dyncall/dyncall/dyncall_callvm_sparc64.c 3rdparty/dyncall/dyncall/dyncall_callvm_sparc64.h 3rdparty/dyncall/dyncall/dyncall_callvm_sparc_v9.c 3rdparty/dyncall/dyncall/dyncall_callvm_sparc_v9.h 3rdparty/dyncall/dyncall/dyncall_callvm_x64.c 3rdparty/dyncall/dyncall/dyncall_callvm_x64.h 3rdparty/dyncall/dyncall/dyncall_callvm_x86.c 3rdparty/dyncall/dyncall/dyncall_callvm_x86.h 3rdparty/dyncall/dyncall/dyncall_config.h 3rdparty/dyncall/dyncall/dyncall_macros.h 3rdparty/dyncall/dyncall/dyncall_signature.h 3rdparty/dyncall/dyncall/dyncall_struct.c 3rdparty/dyncall/dyncall/dyncall_struct.h 3rdparty/dyncall/dyncall/dyncall_types.h 3rdparty/dyncall/dyncall/dyncall_utils.h 3rdparty/dyncall/dyncall/dyncall_value.h 3rdparty/dyncall/dyncall/dyncall_vector.c 3rdparty/dyncall/dyncall/dyncall_vector.h 3rdparty/dyncall/dyncall/gen-masm.sh 3rdparty/dyncall/dyncall/mkfile 3rdparty/dyncall/dyncallback/CMakeLists.txt 3rdparty/dyncall/dyncallback/DynCallbackConfig.cmake 3rdparty/dyncall/dyncallback/Makefile.M 3rdparty/dyncall/dyncallback/Makefile.embedded 3rdparty/dyncall/dyncallback/Makefile.generic 3rdparty/dyncall/dyncallback/Nmakefile 3rdparty/dyncall/dyncallback/README.txt 3rdparty/dyncall/dyncallback/TODO 3rdparty/dyncall/dyncallback/dynMakefile 3rdparty/dyncall/dyncallback/dyncall_alloc_wx.c 3rdparty/dyncall/dyncallback/dyncall_alloc_wx.h 3rdparty/dyncall/dyncallback/dyncall_alloc_wx_malloc.c 3rdparty/dyncall/dyncallback/dyncall_alloc_wx_mmap.c 3rdparty/dyncall/dyncallback/dyncall_alloc_wx_win32.c 3rdparty/dyncall/dyncallback/dyncall_args.c 3rdparty/dyncall/dyncallback/dyncall_args.h 3rdparty/dyncall/dyncallback/dyncall_args_arm32_arm.c 3rdparty/dyncall/dyncallback/dyncall_args_arm32_arm.h 3rdparty/dyncall/dyncallback/dyncall_args_arm32_thumb.c 3rdparty/dyncall/dyncallback/dyncall_args_arm32_thumb.h 3rdparty/dyncall/dyncallback/dyncall_args_mips.c 3rdparty/dyncall/dyncallback/dyncall_args_mips.h 3rdparty/dyncall/dyncallback/dyncall_args_ppc32.c 3rdparty/dyncall/dyncallback/dyncall_args_ppc32.h 3rdparty/dyncall/dyncallback/dyncall_args_sparc32.c 3rdparty/dyncall/dyncallback/dyncall_args_sparc32.h 3rdparty/dyncall/dyncallback/dyncall_args_sparc64.c 3rdparty/dyncall/dyncallback/dyncall_args_sparc64.h 3rdparty/dyncall/dyncallback/dyncall_args_x64.c 3rdparty/dyncall/dyncallback/dyncall_args_x64.h 3rdparty/dyncall/dyncallback/dyncall_args_x86.c 3rdparty/dyncall/dyncallback/dyncall_args_x86.h 3rdparty/dyncall/dyncallback/dyncall_callback.c 3rdparty/dyncall/dyncallback/dyncall_callback.h 3rdparty/dyncall/dyncallback/dyncall_callback_arch.S 3rdparty/dyncall/dyncallback/dyncall_callback_arm32_arm.c 3rdparty/dyncall/dyncallback/dyncall_callback_arm32_arm.h 3rdparty/dyncall/dyncallback/dyncall_callback_arm32_arm_apple.s 3rdparty/dyncall/dyncallback/dyncall_callback_arm32_arm_gas.s 3rdparty/dyncall/dyncallback/dyncall_callback_arm32_thumb.c 3rdparty/dyncall/dyncallback/dyncall_callback_arm32_thumb.h 3rdparty/dyncall/dyncallback/dyncall_callback_arm32_thumb_apple.s 3rdparty/dyncall/dyncallback/dyncall_callback_arm32_thumb_gas.s 3rdparty/dyncall/dyncallback/dyncall_callback_mips.c 3rdparty/dyncall/dyncallback/dyncall_callback_mips.h 3rdparty/dyncall/dyncallback/dyncall_callback_ppc32.S 3rdparty/dyncall/dyncallback/dyncall_callback_ppc32.c 3rdparty/dyncall/dyncallback/dyncall_callback_ppc32.h 3rdparty/dyncall/dyncallback/dyncall_callback_ppc32_apple.s 3rdparty/dyncall/dyncallback/dyncall_callback_sparc32.c 3rdparty/dyncall/dyncallback/dyncall_callback_sparc32.h 3rdparty/dyncall/dyncallback/dyncall_callback_sparc32.s 3rdparty/dyncall/dyncallback/dyncall_callback_sparc64.c 3rdparty/dyncall/dyncallback/dyncall_callback_sparc64.s 3rdparty/dyncall/dyncallback/dyncall_callback_x64.S 3rdparty/dyncall/dyncallback/dyncall_callback_x64.c 3rdparty/dyncall/dyncallback/dyncall_callback_x64.h 3rdparty/dyncall/dyncallback/dyncall_callback_x64_apple.s 3rdparty/dyncall/dyncallback/dyncall_callback_x64_gas.s 3rdparty/dyncall/dyncallback/dyncall_callback_x64_gas_w64.s 3rdparty/dyncall/dyncallback/dyncall_callback_x64_masm.asm 3rdparty/dyncall/dyncallback/dyncall_callback_x86.S 3rdparty/dyncall/dyncallback/dyncall_callback_x86.c 3rdparty/dyncall/dyncallback/dyncall_callback_x86.h 3rdparty/dyncall/dyncallback/dyncall_callback_x86_8a.s 3rdparty/dyncall/dyncallback/dyncall_callback_x86_masm.asm 3rdparty/dyncall/dyncallback/dyncall_thunk.c 3rdparty/dyncall/dyncallback/dyncall_thunk.h 3rdparty/dyncall/dyncallback/dyncall_thunk_arm32_arm.c 3rdparty/dyncall/dyncallback/dyncall_thunk_arm32_arm.h 3rdparty/dyncall/dyncallback/dyncall_thunk_arm32_thumb.c 3rdparty/dyncall/dyncallback/dyncall_thunk_arm32_thumb.h 3rdparty/dyncall/dyncallback/dyncall_thunk_mips.c 3rdparty/dyncall/dyncallback/dyncall_thunk_mips.h 3rdparty/dyncall/dyncallback/dyncall_thunk_ppc32.c 3rdparty/dyncall/dyncallback/dyncall_thunk_ppc32.h 3rdparty/dyncall/dyncallback/dyncall_thunk_sparc32.c 3rdparty/dyncall/dyncallback/dyncall_thunk_sparc32.h 3rdparty/dyncall/dyncallback/dyncall_thunk_sparc64.c 3rdparty/dyncall/dyncallback/dyncall_thunk_sparc64.h 3rdparty/dyncall/dyncallback/dyncall_thunk_x64.c 3rdparty/dyncall/dyncallback/dyncall_thunk_x64.h 3rdparty/dyncall/dyncallback/dyncall_thunk_x86.c 3rdparty/dyncall/dyncallback/dyncall_thunk_x86.h 3rdparty/dyncall/dyncallback/dyncallback.3 3rdparty/dyncall/dyncallback/gen-masm.sh 3rdparty/dyncall/dyncallback/mkfile 3rdparty/dyncall/dynload/CMakeLists.txt 3rdparty/dyncall/dynload/DynLoadConfig.cmake 3rdparty/dyncall/dynload/Makefile.M 3rdparty/dyncall/dynload/Makefile.embedded 3rdparty/dyncall/dynload/Makefile.generic 3rdparty/dyncall/dynload/Nmakefile 3rdparty/dyncall/dynload/README.txt 3rdparty/dyncall/dynload/TODO 3rdparty/dyncall/dynload/dynMakefile 3rdparty/dyncall/dynload/dynload.3 3rdparty/dyncall/dynload/dynload.c 3rdparty/dyncall/dynload/dynload.h 3rdparty/dyncall/dynload/dynload_alloc.h 3rdparty/dyncall/dynload/dynload_darwin.c 3rdparty/dyncall/dynload/dynload_syms.c 3rdparty/dyncall/dynload/dynload_syms_elf.c 3rdparty/dyncall/dynload/dynload_syms_mach-o.c 3rdparty/dyncall/dynload/dynload_syms_pe.c 3rdparty/dyncall/dynload/dynload_unix.c 3rdparty/dyncall/dynload/dynload_windows.c 3rdparty/dyncall/mkfile 3rdparty/dyncall/portasm/README.txt 3rdparty/dyncall/portasm/gen-masm.sh 3rdparty/dyncall/portasm/portasm-arm.S 3rdparty/dyncall/portasm/portasm-ppc.S 3rdparty/dyncall/portasm/portasm-x64-att.S 3rdparty/dyncall/portasm/portasm-x86.S 3rdparty/dyncall/test/CMakeLists.txt 3rdparty/dyncall/test/Makefile.M 3rdparty/dyncall/test/Makefile.embedded 3rdparty/dyncall/test/Makefile.generic 3rdparty/dyncall/test/Nmakefile 3rdparty/dyncall/test/arm-thumb-interwork/Makefile-default.config 3rdparty/dyncall/test/arm-thumb-interwork/Makefile-thumb.config 3rdparty/dyncall/test/arm-thumb-interwork/README.txt 3rdparty/dyncall/test/arm-thumb-interwork/build.sh 3rdparty/dyncall/test/call_suite/Makefile.M 3rdparty/dyncall/test/call_suite/Makefile.embedded 3rdparty/dyncall/test/call_suite/Makefile.generic 3rdparty/dyncall/test/call_suite/Nmakefile 3rdparty/dyncall/test/call_suite/README.txt 3rdparty/dyncall/test/call_suite/cases.c 3rdparty/dyncall/test/call_suite/cases.h 3rdparty/dyncall/test/call_suite/cases.txt 3rdparty/dyncall/test/call_suite/config.lua 3rdparty/dyncall/test/call_suite/design.txt 3rdparty/dyncall/test/call_suite/dynMakefile 3rdparty/dyncall/test/call_suite/globals.c 3rdparty/dyncall/test/call_suite/globals.h 3rdparty/dyncall/test/call_suite/invoke.c 3rdparty/dyncall/test/call_suite/main.c 3rdparty/dyncall/test/call_suite/mk-cases.lua 3rdparty/dyncall/test/call_suite/mkfile 3rdparty/dyncall/test/call_suite/rand-sig.lua 3rdparty/dyncall/test/callback_plain/CMakeLists.txt 3rdparty/dyncall/test/callback_plain/Makefile.M 3rdparty/dyncall/test/callback_plain/Makefile.embedded 3rdparty/dyncall/test/callback_plain/Makefile.generic 3rdparty/dyncall/test/callback_plain/Nmakefile 3rdparty/dyncall/test/callback_plain/callback_plain.c 3rdparty/dyncall/test/callback_plain/dynMakefile 3rdparty/dyncall/test/callback_plain/mkfile 3rdparty/dyncall/test/callback_suite/CMakeLists.txt 3rdparty/dyncall/test/callback_suite/Makefile.M 3rdparty/dyncall/test/callback_suite/Makefile.embedded 3rdparty/dyncall/test/callback_suite/Makefile.generic 3rdparty/dyncall/test/callback_suite/Nmakefile 3rdparty/dyncall/test/callback_suite/README.txt 3rdparty/dyncall/test/callback_suite/_auto_config.h 3rdparty/dyncall/test/callback_suite/_auto_invoke_macros.h 3rdparty/dyncall/test/callback_suite/_auto_invoke_table.h 3rdparty/dyncall/test/callback_suite/_auto_invokers.h 3rdparty/dyncall/test/callback_suite/_auto_signatures.txt 3rdparty/dyncall/test/callback_suite/_auto_sigstrings.h 3rdparty/dyncall/test/callback_suite/config-random.lua 3rdparty/dyncall/test/callback_suite/config-stress1.lua 3rdparty/dyncall/test/callback_suite/config.lua 3rdparty/dyncall/test/callback_suite/do_test.c 3rdparty/dyncall/test/callback_suite/dynMakefile 3rdparty/dyncall/test/callback_suite/dyncall_value_set.h 3rdparty/dyncall/test/callback_suite/env.c 3rdparty/dyncall/test/callback_suite/env.h 3rdparty/dyncall/test/callback_suite/handler.c 3rdparty/dyncall/test/callback_suite/invokers.c 3rdparty/dyncall/test/callback_suite/invokers.h 3rdparty/dyncall/test/callback_suite/main.c 3rdparty/dyncall/test/callback_suite/make-config.lua 3rdparty/dyncall/test/callback_suite/make-cstrings.lua 3rdparty/dyncall/test/callback_suite/make-invoke-macros.lua 3rdparty/dyncall/test/callback_suite/make-invoke-table.lua 3rdparty/dyncall/test/callback_suite/make-invokers.lua 3rdparty/dyncall/test/callback_suite/make-signatures.lua 3rdparty/dyncall/test/callback_suite/mkfile 3rdparty/dyncall/test/callback_suite/print.c 3rdparty/dyncall/test/callback_suite/print.h 3rdparty/dyncall/test/callback_suite/signature_utils.c 3rdparty/dyncall/test/callback_suite/signature_utils.h 3rdparty/dyncall/test/callback_suite/sigstrings.c 3rdparty/dyncall/test/callback_suite/sigstrings.h 3rdparty/dyncall/test/callback_suite/stress1.cfg 3rdparty/dyncall/test/callf/CMakeLists.txt 3rdparty/dyncall/test/callf/Makefile.M 3rdparty/dyncall/test/callf/Makefile.embedded 3rdparty/dyncall/test/callf/Makefile.generic 3rdparty/dyncall/test/callf/Nmakefile 3rdparty/dyncall/test/callf/dynMakefile 3rdparty/dyncall/test/callf/main.c 3rdparty/dyncall/test/callf/mkfile 3rdparty/dyncall/test/common/platformInit.h 3rdparty/dyncall/test/dynMakefile 3rdparty/dyncall/test/ellipsis/CMakeLists.txt 3rdparty/dyncall/test/ellipsis/Makefile.M 3rdparty/dyncall/test/ellipsis/Makefile.embedded 3rdparty/dyncall/test/ellipsis/Makefile.generic 3rdparty/dyncall/test/ellipsis/Nmakefile 3rdparty/dyncall/test/ellipsis/README.txt 3rdparty/dyncall/test/ellipsis/case.h 3rdparty/dyncall/test/ellipsis/config.h 3rdparty/dyncall/test/ellipsis/dynMakefile 3rdparty/dyncall/test/ellipsis/ellipsis.cc 3rdparty/dyncall/test/ellipsis/main.cc 3rdparty/dyncall/test/ellipsis/mkcase.py 3rdparty/dyncall/test/gen-masm/call_x64.S 3rdparty/dyncall/test/gen-masm/call_x64.masm 3rdparty/dyncall/test/gen-masm/call_x86.S 3rdparty/dyncall/test/gen-masm/call_x86.masm 3rdparty/dyncall/test/gen-masm/dyncall_macros.h 3rdparty/dyncall/test/gen-masm/gen_masm.sh 3rdparty/dyncall/test/hacking-arm-thumb-interwork/Makefile.darwin 3rdparty/dyncall/test/hacking-arm-thumb-interwork/Makefile.linux 3rdparty/dyncall/test/hacking-arm-thumb-interwork/README.txt 3rdparty/dyncall/test/hacking-arm-thumb-interwork/arm.c 3rdparty/dyncall/test/hacking-arm-thumb-interwork/diff-gcc-defs/diff-generic.sh 3rdparty/dyncall/test/hacking-arm-thumb-interwork/diff-gcc-defs/empty.S 3rdparty/dyncall/test/hacking-arm-thumb-interwork/diff-gcc-defs/empty.c 3rdparty/dyncall/test/hacking-arm-thumb-interwork/test.c 3rdparty/dyncall/test/hacking-arm-thumb-interwork/thumb.c 3rdparty/dyncall/test/hacking-mips/README.txt 3rdparty/dyncall/test/hacking-mips/call.c 3rdparty/dyncall/test/hacking-mips/calls.c 3rdparty/dyncall/test/hacking-mips/common.h 3rdparty/dyncall/test/hacking-mips/dispatch.c 3rdparty/dyncall/test/hacking-mips/f.c 3rdparty/dyncall/test/hacking-mips/f0.c 3rdparty/dyncall/test/hacking-mips/funs.c 3rdparty/dyncall/test/hacking-mips/main.c 3rdparty/dyncall/test/hacking-mips/node.c 3rdparty/dyncall/test/hacking-mips/prolog.c 3rdparty/dyncall/test/hacking-mips/retn.c 3rdparty/dyncall/test/makepkg.sh 3rdparty/dyncall/test/malloc_wx/CMakeLists.txt 3rdparty/dyncall/test/malloc_wx/Makefile.M 3rdparty/dyncall/test/malloc_wx/Makefile.embedded 3rdparty/dyncall/test/malloc_wx/Makefile.generic 3rdparty/dyncall/test/malloc_wx/Nmakefile 3rdparty/dyncall/test/malloc_wx/dynMakefile 3rdparty/dyncall/test/malloc_wx/mkfile 3rdparty/dyncall/test/malloc_wx/test_wx.c 3rdparty/dyncall/test/mkfile 3rdparty/dyncall/test/nm/CMakeLists.txt 3rdparty/dyncall/test/nm/Makefile.M 3rdparty/dyncall/test/nm/Makefile.embedded 3rdparty/dyncall/test/nm/Makefile.generic 3rdparty/dyncall/test/nm/Nmakefile 3rdparty/dyncall/test/nm/dynMakefile 3rdparty/dyncall/test/nm/nm.c 3rdparty/dyncall/test/plain/CMakeLists.txt 3rdparty/dyncall/test/plain/Makefile.M 3rdparty/dyncall/test/plain/Makefile.embedded 3rdparty/dyncall/test/plain/Makefile.generic 3rdparty/dyncall/test/plain/Nmakefile 3rdparty/dyncall/test/plain/dynMakefile 3rdparty/dyncall/test/plain/mkfile 3rdparty/dyncall/test/plain/test_framework.h 3rdparty/dyncall/test/plain/test_main.c 3rdparty/dyncall/test/plain/test_structs.c 3rdparty/dyncall/test/plain_c++/CMakeLists.txt 3rdparty/dyncall/test/plain_c++/Makefile.M 3rdparty/dyncall/test/plain_c++/Makefile.embedded 3rdparty/dyncall/test/plain_c++/Makefile.generic 3rdparty/dyncall/test/plain_c++/Nmakefile 3rdparty/dyncall/test/plain_c++/dynMakefile 3rdparty/dyncall/test/plain_c++/mkfile 3rdparty/dyncall/test/plain_c++/test_framework.h 3rdparty/dyncall/test/plain_c++/test_main.cc 3rdparty/dyncall/test/resolve_self/Makefile.M 3rdparty/dyncall/test/resolve_self/Makefile.embedded 3rdparty/dyncall/test/resolve_self/Makefile.generic 3rdparty/dyncall/test/resolve_self/Nmakefile 3rdparty/dyncall/test/resolve_self/README.txt 3rdparty/dyncall/test/resolve_self/dynMakefile 3rdparty/dyncall/test/resolve_self/main.c 3rdparty/dyncall/test/runalltests.bat 3rdparty/dyncall/test/runalltests.sh 3rdparty/dyncall/test/samples/calls/d16.c 3rdparty/dyncall/test/samples/calls/d20.c 3rdparty/dyncall/test/samples/calls/d40.c 3rdparty/dyncall/test/samples/calls/f16.c 3rdparty/dyncall/test/samples/calls/f20.c 3rdparty/dyncall/test/samples/calls/f40.c 3rdparty/dyncall/test/samples/calls/fd40.c 3rdparty/dyncall/test/samples/calls/i3.c 3rdparty/dyncall/test/samples/calls/i7.c 3rdparty/dyncall/test/samples/calls/id40.c 3rdparty/dyncall/test/samples/calls/l16.c 3rdparty/dyncall/test/samples/calls/many.c 3rdparty/dyncall/test/samples/composite/args.asm 3rdparty/dyncall/test/samples/composite/args.c 3rdparty/dyncall/test/samples/composite/args.s 3rdparty/dyncall/test/samples/composite/build.bat 3rdparty/dyncall/test/samples/composite/makefile 3rdparty/dyncall/test/sharedlib/CMakeLists.txt 3rdparty/dyncall/test/sharedlib/Makefile.embedded 3rdparty/dyncall/test/sharedlib/sharedlib.c 3rdparty/dyncall/test/sign/sign.c 3rdparty/dyncall/test/suite/CMakeLists.txt 3rdparty/dyncall/test/suite/Makefile.M 3rdparty/dyncall/test/suite/Makefile.embedded 3rdparty/dyncall/test/suite/Makefile.generic 3rdparty/dyncall/test/suite/Nmakefile 3rdparty/dyncall/test/suite/README.txt 3rdparty/dyncall/test/suite/case.c 3rdparty/dyncall/test/suite/case.h 3rdparty/dyncall/test/suite/config.h 3rdparty/dyncall/test/suite/dynMakefile 3rdparty/dyncall/test/suite/main.c 3rdparty/dyncall/test/suite/mkcase.py 3rdparty/dyncall/test/suite/mkfile 3rdparty/dyncall/test/suite2/CMakeLists.txt 3rdparty/dyncall/test/suite2/Makefile.M 3rdparty/dyncall/test/suite2/Makefile.embedded 3rdparty/dyncall/test/suite2/Makefile.generic 3rdparty/dyncall/test/suite2/Nmakefile 3rdparty/dyncall/test/suite2/case.cc 3rdparty/dyncall/test/suite2/case.h 3rdparty/dyncall/test/suite2/config.h 3rdparty/dyncall/test/suite2/design.cfg 3rdparty/dyncall/test/suite2/dynMakefile 3rdparty/dyncall/test/suite2/funcinfo.h 3rdparty/dyncall/test/suite2/ints.cfg 3rdparty/dyncall/test/suite2/main.cc 3rdparty/dyncall/test/suite2/mkcase.py 3rdparty/dyncall/test/suite2/rand.py 3rdparty/dyncall/test/suite2/stress1.cfg 3rdparty/dyncall/test/suite2_x86win32fast/CMakeLists.txt 3rdparty/dyncall/test/suite2_x86win32fast/Makefile.M 3rdparty/dyncall/test/suite2_x86win32fast/Makefile.generic 3rdparty/dyncall/test/suite2_x86win32fast/Nmakefile 3rdparty/dyncall/test/suite2_x86win32fast/case.cc 3rdparty/dyncall/test/suite2_x86win32fast/case.h 3rdparty/dyncall/test/suite2_x86win32fast/config.h 3rdparty/dyncall/test/suite2_x86win32fast/design.cfg 3rdparty/dyncall/test/suite2_x86win32fast/dynMakefile 3rdparty/dyncall/test/suite2_x86win32fast/funcinfo.h 3rdparty/dyncall/test/suite2_x86win32fast/main.cc 3rdparty/dyncall/test/suite2_x86win32fast/mkcase.py 3rdparty/dyncall/test/suite2_x86win32fast/rand.py 3rdparty/dyncall/test/suite2_x86win32std/CMakeLists.txt 3rdparty/dyncall/test/suite2_x86win32std/Makefile.M 3rdparty/dyncall/test/suite2_x86win32std/Makefile.generic 3rdparty/dyncall/test/suite2_x86win32std/Nmakefile 3rdparty/dyncall/test/suite2_x86win32std/case.cc 3rdparty/dyncall/test/suite2_x86win32std/case.h 3rdparty/dyncall/test/suite2_x86win32std/config.h 3rdparty/dyncall/test/suite2_x86win32std/design.cfg 3rdparty/dyncall/test/suite2_x86win32std/dynMakefile 3rdparty/dyncall/test/suite2_x86win32std/funcinfo.h 3rdparty/dyncall/test/suite2_x86win32std/main.cc 3rdparty/dyncall/test/suite2_x86win32std/mkcase.py 3rdparty/dyncall/test/suite2_x86win32std/rand.py 3rdparty/dyncall/test/suite3/CMakeLists.txt 3rdparty/dyncall/test/suite3/Makefile.M 3rdparty/dyncall/test/suite3/Makefile.embedded 3rdparty/dyncall/test/suite3/Makefile.generic 3rdparty/dyncall/test/suite3/Nmakefile 3rdparty/dyncall/test/suite3/README.txt 3rdparty/dyncall/test/suite3/case.cc 3rdparty/dyncall/test/suite3/case.h 3rdparty/dyncall/test/suite3/config.h 3rdparty/dyncall/test/suite3/dynMakefile 3rdparty/dyncall/test/suite3/main.cc 3rdparty/dyncall/test/suite3/mkcase.py 3rdparty/dyncall/test/suite_floats/CMakeLists.txt 3rdparty/dyncall/test/suite_floats/Makefile.M 3rdparty/dyncall/test/suite_floats/Makefile.embedded 3rdparty/dyncall/test/suite_floats/Makefile.generic 3rdparty/dyncall/test/suite_floats/Nmakefile 3rdparty/dyncall/test/suite_floats/README.txt 3rdparty/dyncall/test/suite_floats/case.cc 3rdparty/dyncall/test/suite_floats/case.h 3rdparty/dyncall/test/suite_floats/config.h 3rdparty/dyncall/test/suite_floats/dynMakefile 3rdparty/dyncall/test/suite_floats/main.cc 3rdparty/dyncall/test/suite_floats/mkcase.py 3rdparty/dyncall/test/suite_x86win32fast/CMakeLists.txt 3rdparty/dyncall/test/suite_x86win32fast/Makefile.M 3rdparty/dyncall/test/suite_x86win32fast/Makefile.generic 3rdparty/dyncall/test/suite_x86win32fast/Nmakefile 3rdparty/dyncall/test/suite_x86win32fast/README.txt 3rdparty/dyncall/test/suite_x86win32fast/case.cc 3rdparty/dyncall/test/suite_x86win32fast/case.h 3rdparty/dyncall/test/suite_x86win32fast/config.h 3rdparty/dyncall/test/suite_x86win32fast/dynMakefile 3rdparty/dyncall/test/suite_x86win32fast/main.cc 3rdparty/dyncall/test/suite_x86win32fast/mkcase.py 3rdparty/dyncall/test/suite_x86win32std/CMakeLists.txt 3rdparty/dyncall/test/suite_x86win32std/Makefile.M 3rdparty/dyncall/test/suite_x86win32std/Makefile.generic 3rdparty/dyncall/test/suite_x86win32std/Nmakefile 3rdparty/dyncall/test/suite_x86win32std/README.txt 3rdparty/dyncall/test/suite_x86win32std/case.cc 3rdparty/dyncall/test/suite_x86win32std/case.h 3rdparty/dyncall/test/suite_x86win32std/config.h 3rdparty/dyncall/test/suite_x86win32std/dynMakefile 3rdparty/dyncall/test/suite_x86win32std/main.cc 3rdparty/dyncall/test/suite_x86win32std/mkcase.py 3rdparty/dyncall/test/syscall/CMakeLists.txt 3rdparty/dyncall/test/syscall/Makefile.M 3rdparty/dyncall/test/syscall/Makefile.embedded 3rdparty/dyncall/test/syscall/Makefile.generic 3rdparty/dyncall/test/syscall/dynMakefile 3rdparty/dyncall/test/syscall/syscall.c 3rdparty/dyncall/test/thunk/CMakeLists.txt 3rdparty/dyncall/test/thunk/Makefile.M 3rdparty/dyncall/test/thunk/Makefile.embedded 3rdparty/dyncall/test/thunk/Makefile.generic 3rdparty/dyncall/test/thunk/Nmakefile 3rdparty/dyncall/test/thunk/dynMakefile 3rdparty/dyncall/test/thunk/mkfile 3rdparty/dyncall/test/thunk/test_thunk.c 3rdparty/jline/LICENSE.txt 3rdparty/jline/jline-1.0.jar 3rdparty/jna/ASL2.0 3rdparty/jna/LICENSE.ASL 3rdparty/jna/jna.jar 3rdparty/libtommath/LICENSE 3rdparty/libtommath/bn_error.c 3rdparty/libtommath/bn_fast_mp_invmod.c 3rdparty/libtommath/bn_fast_mp_montgomery_reduce.c 3rdparty/libtommath/bn_fast_s_mp_mul_digs.c 3rdparty/libtommath/bn_fast_s_mp_mul_high_digs.c 3rdparty/libtommath/bn_fast_s_mp_sqr.c 3rdparty/libtommath/bn_mp_2expt.c 3rdparty/libtommath/bn_mp_abs.c 3rdparty/libtommath/bn_mp_add.c 3rdparty/libtommath/bn_mp_add_d.c 3rdparty/libtommath/bn_mp_addmod.c 3rdparty/libtommath/bn_mp_and.c 3rdparty/libtommath/bn_mp_clamp.c 3rdparty/libtommath/bn_mp_clear.c 3rdparty/libtommath/bn_mp_clear_multi.c 3rdparty/libtommath/bn_mp_cmp.c 3rdparty/libtommath/bn_mp_cmp_d.c 3rdparty/libtommath/bn_mp_cmp_mag.c 3rdparty/libtommath/bn_mp_cnt_lsb.c 3rdparty/libtommath/bn_mp_copy.c 3rdparty/libtommath/bn_mp_count_bits.c 3rdparty/libtommath/bn_mp_div.c 3rdparty/libtommath/bn_mp_div_2.c 3rdparty/libtommath/bn_mp_div_2d.c 3rdparty/libtommath/bn_mp_div_3.c 3rdparty/libtommath/bn_mp_div_d.c 3rdparty/libtommath/bn_mp_dr_is_modulus.c 3rdparty/libtommath/bn_mp_dr_reduce.c 3rdparty/libtommath/bn_mp_dr_setup.c 3rdparty/libtommath/bn_mp_exch.c 3rdparty/libtommath/bn_mp_expt_d.c 3rdparty/libtommath/bn_mp_exptmod.c 3rdparty/libtommath/bn_mp_exptmod_fast.c 3rdparty/libtommath/bn_mp_exteuclid.c 3rdparty/libtommath/bn_mp_fread.c 3rdparty/libtommath/bn_mp_fwrite.c 3rdparty/libtommath/bn_mp_gcd.c 3rdparty/libtommath/bn_mp_get_int.c 3rdparty/libtommath/bn_mp_get_long.c 3rdparty/libtommath/bn_mp_grow.c 3rdparty/libtommath/bn_mp_init.c 3rdparty/libtommath/bn_mp_init_copy.c 3rdparty/libtommath/bn_mp_init_multi.c 3rdparty/libtommath/bn_mp_init_set.c 3rdparty/libtommath/bn_mp_init_set_int.c 3rdparty/libtommath/bn_mp_init_size.c 3rdparty/libtommath/bn_mp_invmod.c 3rdparty/libtommath/bn_mp_invmod_slow.c 3rdparty/libtommath/bn_mp_is_square.c 3rdparty/libtommath/bn_mp_jacobi.c 3rdparty/libtommath/bn_mp_karatsuba_mul.c 3rdparty/libtommath/bn_mp_karatsuba_sqr.c 3rdparty/libtommath/bn_mp_lcm.c 3rdparty/libtommath/bn_mp_lshd.c 3rdparty/libtommath/bn_mp_mod.c 3rdparty/libtommath/bn_mp_mod_2d.c 3rdparty/libtommath/bn_mp_mod_d.c 3rdparty/libtommath/bn_mp_montgomery_calc_normalization.c 3rdparty/libtommath/bn_mp_montgomery_reduce.c 3rdparty/libtommath/bn_mp_montgomery_setup.c 3rdparty/libtommath/bn_mp_mul.c 3rdparty/libtommath/bn_mp_mul_2.c 3rdparty/libtommath/bn_mp_mul_2d.c 3rdparty/libtommath/bn_mp_mul_d.c 3rdparty/libtommath/bn_mp_mulmod.c 3rdparty/libtommath/bn_mp_n_root.c 3rdparty/libtommath/bn_mp_neg.c 3rdparty/libtommath/bn_mp_or.c 3rdparty/libtommath/bn_mp_prime_fermat.c 3rdparty/libtommath/bn_mp_prime_is_divisible.c 3rdparty/libtommath/bn_mp_prime_is_prime.c 3rdparty/libtommath/bn_mp_prime_miller_rabin.c 3rdparty/libtommath/bn_mp_prime_next_prime.c 3rdparty/libtommath/bn_mp_prime_rabin_miller_trials.c 3rdparty/libtommath/bn_mp_prime_random_ex.c 3rdparty/libtommath/bn_mp_radix_size.c 3rdparty/libtommath/bn_mp_radix_smap.c 3rdparty/libtommath/bn_mp_rand.c 3rdparty/libtommath/bn_mp_read_radix.c 3rdparty/libtommath/bn_mp_read_signed_bin.c 3rdparty/libtommath/bn_mp_read_unsigned_bin.c 3rdparty/libtommath/bn_mp_reduce.c 3rdparty/libtommath/bn_mp_reduce_2k.c 3rdparty/libtommath/bn_mp_reduce_2k_l.c 3rdparty/libtommath/bn_mp_reduce_2k_setup.c 3rdparty/libtommath/bn_mp_reduce_2k_setup_l.c 3rdparty/libtommath/bn_mp_reduce_is_2k.c 3rdparty/libtommath/bn_mp_reduce_is_2k_l.c 3rdparty/libtommath/bn_mp_reduce_setup.c 3rdparty/libtommath/bn_mp_rshd.c 3rdparty/libtommath/bn_mp_set.c 3rdparty/libtommath/bn_mp_set_int.c 3rdparty/libtommath/bn_mp_set_long.c 3rdparty/libtommath/bn_mp_shrink.c 3rdparty/libtommath/bn_mp_signed_bin_size.c 3rdparty/libtommath/bn_mp_sqr.c 3rdparty/libtommath/bn_mp_sqrmod.c 3rdparty/libtommath/bn_mp_sqrt.c 3rdparty/libtommath/bn_mp_sub.c 3rdparty/libtommath/bn_mp_sub_d.c 3rdparty/libtommath/bn_mp_submod.c 3rdparty/libtommath/bn_mp_to_signed_bin.c 3rdparty/libtommath/bn_mp_to_signed_bin_n.c 3rdparty/libtommath/bn_mp_to_unsigned_bin.c 3rdparty/libtommath/bn_mp_to_unsigned_bin_n.c 3rdparty/libtommath/bn_mp_toom_mul.c 3rdparty/libtommath/bn_mp_toom_sqr.c 3rdparty/libtommath/bn_mp_toradix.c 3rdparty/libtommath/bn_mp_toradix_n.c 3rdparty/libtommath/bn_mp_unsigned_bin_size.c 3rdparty/libtommath/bn_mp_xor.c 3rdparty/libtommath/bn_mp_zero.c 3rdparty/libtommath/bn_prime_tab.c 3rdparty/libtommath/bn_reverse.c 3rdparty/libtommath/bn_s_mp_add.c 3rdparty/libtommath/bn_s_mp_exptmod.c 3rdparty/libtommath/bn_s_mp_mul_digs.c 3rdparty/libtommath/bn_s_mp_mul_high_digs.c 3rdparty/libtommath/bn_s_mp_sqr.c 3rdparty/libtommath/bn_s_mp_sub.c 3rdparty/libtommath/bncore.c 3rdparty/libtommath/changes.txt 3rdparty/libtommath/tommath.h 3rdparty/libtommath/tommath_class.h 3rdparty/libtommath/tommath_superclass.h 3rdparty/sha1/sha1.c 3rdparty/sha1/sha1.h CREDITS Configure.pl LICENSE README.pod TODO VERSION docs/6model/faq.markdown docs/6model/overview.markdown docs/6model/repr-compose-protocol.markdown docs/HACKING-js docs/bootstrapping.pod docs/continuations.pod docs/jvminterop-goals.md docs/jvminterop.pod docs/nqp-overview.txt docs/ops.markdown docs/pir2nqp.todo docs/qast.markdown docs/release_guide.pod docs/serialization_format.markdown dynext/IGNOREME examples/CallFromJava.java examples/fib.nqp examples/hello_world.nqp examples/json.nqp examples/loops.nqp examples/rubyish/README.md examples/rubyish/examples-rubyish/closure.rbi examples/rubyish/examples-rubyish/fractal-tree.rbi examples/rubyish/examples-rubyish/pi.rbi examples/rubyish/examples-rubyish/template.rbi examples/rubyish/rubyish.nqp examples/rubyish/t/00hello-worldish.t examples/rubyish/t/arrays.t examples/rubyish/t/bitwise.t examples/rubyish/t/contextual.t examples/rubyish/t/functional.t examples/rubyish/t/hashs.t examples/rubyish/t/if-then-else.t examples/rubyish/t/infix.t examples/rubyish/t/inheritance.t examples/rubyish/t/interpolation.t examples/rubyish/t/lambda.t examples/rubyish/t/line-spanning.t examples/rubyish/t/loops.t examples/rubyish/t/modifiers.t examples/rubyish/t/nqp-ops.t examples/rubyish/t/params.t examples/rubyish/t/recursion.t examples/rubyish/t/rubyish-3-tests.t examples/rubyish/t/rubyish-4-tests.t examples/rubyish/t/scoping.t examples/rubyish/t/template.t examples/webpacked/README examples/webpacked/example.nqp examples/webpacked/index.html examples/webpacked/webpack.config.js gen/js/.gitignore gen/jvm/.gitignore gen/moar/.gitignore gen/parrot/.gitignore nqp-js ports/macports/Portfile ports/macports/README src/HLL/Actions.nqp src/HLL/CommandLine.nqp src/HLL/Compiler.nqp src/HLL/Grammar.nqp src/HLL/World.nqp src/HLL/sprintf.nqp src/NQP/Actions.nqp src/NQP/Compiler.nqp src/NQP/Grammar.nqp src/NQP/Optimizer.nqp src/NQP/World.nqp src/QAST/BVal.nqp src/QAST/Block.nqp src/QAST/Children.nqp src/QAST/CompUnit.nqp src/QAST/CompileTimeValue.nqp src/QAST/IVal.nqp src/QAST/InlinePlaceholder.nqp src/QAST/NVal.nqp src/QAST/Node.nqp src/QAST/NodeList.nqp src/QAST/Op.nqp src/QAST/ParamTypeCheck.nqp src/QAST/Regex.nqp src/QAST/SVal.nqp src/QAST/SpecialArg.nqp src/QAST/Stmt.nqp src/QAST/Stmts.nqp src/QAST/Unquote.nqp src/QAST/VM.nqp src/QAST/Var.nqp src/QAST/VarWithFallback.nqp src/QAST/WVal.nqp src/QAST/Want.nqp src/QRegex/Cursor.nqp src/QRegex/NFA.nqp src/QRegex/P5Regex/Actions.nqp src/QRegex/P5Regex/Compiler.nqp src/QRegex/P5Regex/Grammar.nqp src/QRegex/P6Regex/Actions.nqp src/QRegex/P6Regex/Compiler.nqp src/QRegex/P6Regex/Grammar.nqp src/QRegex/P6Regex/Optimizer.nqp src/core/Hash.nqp src/core/IO.nqp src/core/NQPCapture.nqp src/core/NQPLock.nqp src/core/NQPMu.nqp src/core/NQPRoutine.nqp src/core/NativeTypes.nqp src/core/Regex.nqp src/core/YOUAREHERE.nqp src/core/testing.nqp src/how/Archetypes.nqp src/how/EXPORTHOW.nqp src/how/NQPAttribute.nqp src/how/NQPClassHOW.nqp src/how/NQPConcreteRoleHOW.nqp src/how/NQPCurriedRoleHOW.nqp src/how/NQPModuleHOW.nqp src/how/NQPNativeHOW.nqp src/how/NQPParametricRoleHOW.nqp src/how/RoleToClassApplier.nqp src/how/RoleToRoleApplier.nqp src/vm/js/HLL/Backend.nqp src/vm/js/ModuleLoader.nqp src/vm/js/QAST.nqp src/vm/js/QAST/Compiler.nqp src/vm/js/bin/cross-compile.nqp src/vm/js/bin/gen_sourcemap.js src/vm/js/bin/nqp-js.nqp src/vm/js/bin/run_tests.pl src/vm/js/bin/run_tests_bootstrapped.pl src/vm/js/nqp-loader/main.js src/vm/js/nqp-loader/package.json src/vm/js/nqp-runtime/array.js src/vm/js/nqp-runtime/bignum.js src/vm/js/nqp-runtime/bootstrap.js src/vm/js/nqp-runtime/cclass.js src/vm/js/nqp-runtime/code-ref.js src/vm/js/nqp-runtime/core.js src/vm/js/nqp-runtime/curlexpad.js src/vm/js/nqp-runtime/deserialization.js src/vm/js/nqp-runtime/hash.js src/vm/js/nqp-runtime/io.js src/vm/js/nqp-runtime/lexpad-hack.js src/vm/js/nqp-runtime/nfa.js src/vm/js/nqp-runtime/nqp-int.js src/vm/js/nqp-runtime/package.json src/vm/js/nqp-runtime/reprs.js src/vm/js/nqp-runtime/runtime.js src/vm/js/nqp-runtime/serialization-context.js src/vm/js/nqp-runtime/serialization.js src/vm/js/nqp-runtime/sixmodel.js src/vm/jvm/HLL/Backend.nqp src/vm/jvm/ModuleLoader.nqp src/vm/jvm/NQP/Ops.nqp src/vm/jvm/QAST/Compiler.nqp src/vm/jvm/QAST/JASTNodes.nqp src/vm/jvm/runners/nqp-j src/vm/jvm/runners/nqp-j.bat src/vm/jvm/runtime/org/perl6/nqp/io/AsyncFileHandle.java src/vm/jvm/runtime/org/perl6/nqp/io/AsyncServerSocketHandle.java src/vm/jvm/runtime/org/perl6/nqp/io/AsyncSocketHandle.java src/vm/jvm/runtime/org/perl6/nqp/io/FileHandle.java src/vm/jvm/runtime/org/perl6/nqp/io/IIOAsyncReadable.java src/vm/jvm/runtime/org/perl6/nqp/io/IIOAsyncWritable.java src/vm/jvm/runtime/org/perl6/nqp/io/IIOBindable.java src/vm/jvm/runtime/org/perl6/nqp/io/IIOCancelable.java src/vm/jvm/runtime/org/perl6/nqp/io/IIOClosable.java src/vm/jvm/runtime/org/perl6/nqp/io/IIOEncodable.java src/vm/jvm/runtime/org/perl6/nqp/io/IIOExitable.java src/vm/jvm/runtime/org/perl6/nqp/io/IIOInteractive.java src/vm/jvm/runtime/org/perl6/nqp/io/IIOLineSeparable.java src/vm/jvm/runtime/org/perl6/nqp/io/IIOSeekable.java src/vm/jvm/runtime/org/perl6/nqp/io/IIOSyncReadable.java src/vm/jvm/runtime/org/perl6/nqp/io/IIOSyncWritable.java src/vm/jvm/runtime/org/perl6/nqp/io/ProcessChannel.java src/vm/jvm/runtime/org/perl6/nqp/io/ProcessHandle.java src/vm/jvm/runtime/org/perl6/nqp/io/ServerSocketHandle.java src/vm/jvm/runtime/org/perl6/nqp/io/SocketHandle.java src/vm/jvm/runtime/org/perl6/nqp/io/StandardReadHandle.java src/vm/jvm/runtime/org/perl6/nqp/io/StandardWriteHandle.java src/vm/jvm/runtime/org/perl6/nqp/io/SyncHandle.java src/vm/jvm/runtime/org/perl6/nqp/jast2bc/AutosplitMethodWriter.java src/vm/jvm/runtime/org/perl6/nqp/jast2bc/JASTCompiler.java src/vm/jvm/runtime/org/perl6/nqp/jast2bc/JastClass.java src/vm/jvm/runtime/org/perl6/nqp/jast2bc/JastField.java src/vm/jvm/runtime/org/perl6/nqp/jast2bc/JastMethod.java src/vm/jvm/runtime/org/perl6/nqp/jast2bc/JavaClass.java src/vm/jvm/runtime/org/perl6/nqp/runtime/ArgsExpectation.java src/vm/jvm/runtime/org/perl6/nqp/runtime/Base64.java src/vm/jvm/runtime/org/perl6/nqp/runtime/BaseControlException.java src/vm/jvm/runtime/org/perl6/nqp/runtime/BootJavaInterop.java src/vm/jvm/runtime/org/perl6/nqp/runtime/Buffers.java src/vm/jvm/runtime/org/perl6/nqp/runtime/ByteClassLoader.java src/vm/jvm/runtime/org/perl6/nqp/runtime/CallFrame.java src/vm/jvm/runtime/org/perl6/nqp/runtime/CallSiteDescriptor.java src/vm/jvm/runtime/org/perl6/nqp/runtime/CodeRef.java src/vm/jvm/runtime/org/perl6/nqp/runtime/CodeRefAnnotation.java src/vm/jvm/runtime/org/perl6/nqp/runtime/CompilationUnit.java src/vm/jvm/runtime/org/perl6/nqp/runtime/ContextKey.java src/vm/jvm/runtime/org/perl6/nqp/runtime/ControlException.java src/vm/jvm/runtime/org/perl6/nqp/runtime/EvalResult.java src/vm/jvm/runtime/org/perl6/nqp/runtime/ExceptionHandling.java src/vm/jvm/runtime/org/perl6/nqp/runtime/GlobalContext.java src/vm/jvm/runtime/org/perl6/nqp/runtime/HLLConfig.java src/vm/jvm/runtime/org/perl6/nqp/runtime/HandlerInfo.java src/vm/jvm/runtime/org/perl6/nqp/runtime/IOExceptionMessages.java src/vm/jvm/runtime/org/perl6/nqp/runtime/IOOps.java src/vm/jvm/runtime/org/perl6/nqp/runtime/IndyBootstrap.java src/vm/jvm/runtime/org/perl6/nqp/runtime/JavaCallinException.java src/vm/jvm/runtime/org/perl6/nqp/runtime/LexoticException.java src/vm/jvm/runtime/org/perl6/nqp/runtime/LibraryLoader.java src/vm/jvm/runtime/org/perl6/nqp/runtime/NativeCallOps.java src/vm/jvm/runtime/org/perl6/nqp/runtime/NativeCallOps.java.orig src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java src/vm/jvm/runtime/org/perl6/nqp/runtime/ResumeException.java src/vm/jvm/runtime/org/perl6/nqp/runtime/ResumeStatus.java src/vm/jvm/runtime/org/perl6/nqp/runtime/SaveStackException.java src/vm/jvm/runtime/org/perl6/nqp/runtime/StaticCodeInfo.java src/vm/jvm/runtime/org/perl6/nqp/runtime/ThreadContext.java src/vm/jvm/runtime/org/perl6/nqp/runtime/UnwindException.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/AbstractParametricity.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/BoolificationSpec.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/CodePairContainerConfigurer.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/CodePairContainerSpec.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/ContainerConfigurer.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/ContainerSpec.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/InvocationSpec.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/KnowHOWBootstrapper.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/KnowHOWMethods.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/NativeRefContainerConfigurer.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/NativeRefContainerSpec.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/ParameterizedType.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/ParametricType.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/REPR.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/REPRRegistry.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/STable.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/SerializationContext.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/SerializationReader.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/SerializationWriter.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/SixModelObject.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/StorageSpec.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/TypeObject.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/AsyncTask.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/AsyncTaskInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CArray.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CArrayInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CArrayREPRData.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CPPStruct.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CPPStructInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CPPStructREPRData.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CPointer.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CPointerInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CStr.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CStrInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CStruct.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CStructInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CStructREPRData.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CUnion.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CUnionInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CUnionREPRData.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CallCapture.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CallCaptureInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/CodeRefREPR.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/ConcBlockingQueue.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/ConcBlockingQueueInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/ConditionVariable.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/ConditionVariableInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/ContextRef.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/ContextRefInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/Continuation.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/IOHandle.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/IOHandleInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/JavaObjectWrapper.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/JavaWrap.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/KnowHOWAttribute.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/KnowHOWAttributeInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/KnowHOWREPR.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/KnowHOWREPRInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/Lexotic.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/LexoticInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiCache.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiCacheInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiDimArray.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiDimArrayInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiDimArrayInstanceBase.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiDimArrayInstance_i.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiDimArrayInstance_i16.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiDimArrayInstance_i32.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiDimArrayInstance_i8.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiDimArrayInstance_n.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiDimArrayInstance_s.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiDimArrayInstance_u16.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiDimArrayInstance_u32.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiDimArrayInstance_u8.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/MultiDimArrayREPRData.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NFA.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NFAInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NFAStateInfo.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NativeCall.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NativeCallBody.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NativeCallInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NativeRef.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NativeRefInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NativeRefInstanceAttribute.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NativeRefInstanceIntLex.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NativeRefInstanceNumLex.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NativeRefInstancePositional.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NativeRefInstanceStrLex.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/NativeRefREPRData.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/P6Opaque.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/P6OpaqueBaseInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/P6OpaqueDelegateInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/P6OpaqueREPRData.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/P6bigint.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/P6bigintInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/P6int.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/P6intInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/P6num.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/P6numInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/P6str.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/P6strInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/ReentrantMutex.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/ReentrantMutexInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/Refreshable.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/SCRef.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/SCRefInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/Semaphore.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/SemaphoreInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/Uninstantiable.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArray.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArrayInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArrayInstanceBase.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArrayInstance_i.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArrayInstance_i16.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArrayInstance_i32.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArrayInstance_i8.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArrayInstance_n.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArrayInstance_s.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArrayInstance_u16.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArrayInstance_u32.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArrayInstance_u8.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMArrayREPRData.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMException.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMExceptionInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMHash.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMHashInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMIter.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMIterInstance.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMThread.java src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/VMThreadInstance.java src/vm/jvm/runtime/org/perl6/nqp/tools/EvalServer.java src/vm/jvm/stage0/JASTNodes.jar src/vm/jvm/stage0/ModuleLoader.jar src/vm/jvm/stage0/NQPCORE.setting.jar src/vm/jvm/stage0/NQPHLL.jar src/vm/jvm/stage0/NQPP6QRegex.jar src/vm/jvm/stage0/QAST.jar src/vm/jvm/stage0/QASTNode.jar src/vm/jvm/stage0/QRegex.jar src/vm/jvm/stage0/nqp.jar src/vm/jvm/stage0/nqpmo.jar src/vm/moar/HLL/Backend.nqp src/vm/moar/ModuleLoader.nqp src/vm/moar/NQP/Ops.nqp src/vm/moar/QAST/QASTCompilerMAST.nqp src/vm/moar/QAST/QASTOperationsMAST.nqp src/vm/moar/QAST/QASTRegexCompilerMAST.nqp src/vm/moar/profiler/template.html src/vm/moar/stage0/MASTNodes.moarvm src/vm/moar/stage0/MASTOps.moarvm src/vm/moar/stage0/ModuleLoader.moarvm src/vm/moar/stage0/NQPCORE.setting.moarvm src/vm/moar/stage0/NQPHLL.moarvm src/vm/moar/stage0/NQPP6QRegex.moarvm src/vm/moar/stage0/QAST.moarvm src/vm/moar/stage0/QASTNode.moarvm src/vm/moar/stage0/QRegex.moarvm src/vm/moar/stage0/nqp.moarvm src/vm/moar/stage0/nqpmo.moarvm src/vm/parrot/6model/base64.c src/vm/parrot/6model/base64.h src/vm/parrot/6model/containers.c src/vm/parrot/6model/containers.h src/vm/parrot/6model/knowhow_bootstrapper.c src/vm/parrot/6model/knowhow_bootstrapper.h src/vm/parrot/6model/repr_registry.c src/vm/parrot/6model/repr_registry.h src/vm/parrot/6model/reprs/CArray.c src/vm/parrot/6model/reprs/CArray.h src/vm/parrot/6model/reprs/CPointer.c src/vm/parrot/6model/reprs/CPointer.h src/vm/parrot/6model/reprs/CStr.c src/vm/parrot/6model/reprs/CStr.h src/vm/parrot/6model/reprs/CStruct.c src/vm/parrot/6model/reprs/CStruct.h src/vm/parrot/6model/reprs/HashAttrStore.c src/vm/parrot/6model/reprs/HashAttrStore.h src/vm/parrot/6model/reprs/KnowHOWREPR.c src/vm/parrot/6model/reprs/KnowHOWREPR.h src/vm/parrot/6model/reprs/NFA.c src/vm/parrot/6model/reprs/NFA.h src/vm/parrot/6model/reprs/NativeCall.c src/vm/parrot/6model/reprs/NativeCall.h src/vm/parrot/6model/reprs/P6bigint.c src/vm/parrot/6model/reprs/P6bigint.h src/vm/parrot/6model/reprs/P6int.c src/vm/parrot/6model/reprs/P6int.h src/vm/parrot/6model/reprs/P6num.c src/vm/parrot/6model/reprs/P6num.h src/vm/parrot/6model/reprs/P6opaque.c src/vm/parrot/6model/reprs/P6opaque.h src/vm/parrot/6model/reprs/P6str.c src/vm/parrot/6model/reprs/P6str.h src/vm/parrot/6model/reprs/Uninstantiable.c src/vm/parrot/6model/reprs/Uninstantiable.h src/vm/parrot/6model/reprs/VMArray.c src/vm/parrot/6model/reprs/VMArray.h src/vm/parrot/6model/reprs/VMHash.c src/vm/parrot/6model/reprs/VMHash.h src/vm/parrot/6model/reprs/VMIter.c src/vm/parrot/6model/reprs/VMIter.h src/vm/parrot/6model/reprs/dyncall_reprs.h src/vm/parrot/6model/serialization.c src/vm/parrot/6model/serialization.h src/vm/parrot/6model/serialization_context.c src/vm/parrot/6model/serialization_context.h src/vm/parrot/6model/sixmodelobject.c src/vm/parrot/6model/sixmodelobject.h src/vm/parrot/6model/storage_spec.h src/vm/parrot/HLL/Backend.nqp src/vm/parrot/ModuleLoader.nqp src/vm/parrot/NQP/Ops.nqp src/vm/parrot/QAST/Compiler.nqp src/vm/parrot/QAST/Operations.nqp src/vm/parrot/QAST/PIRT.nqp src/vm/parrot/guts/multi_dispatch.c src/vm/parrot/guts/multi_dispatch.h src/vm/parrot/nqp.bat src/vm/parrot/nqp.sh src/vm/parrot/ops/nqp.ops src/vm/parrot/ops/nqp_bigint.ops src/vm/parrot/ops/nqp_dyncall.ops src/vm/parrot/pmc/nqplexinfo.pmc src/vm/parrot/pmc/nqplexpad.pmc src/vm/parrot/pmc/ownedhash.pmc src/vm/parrot/pmc/ownedresizablepmcarray.pmc src/vm/parrot/pmc/qrpa.pmc src/vm/parrot/pmc/serializationcontext.pmc src/vm/parrot/pmc/sixmodelobject.pmc src/vm/parrot/pmc/stable.pmc src/vm/parrot/stage0/HLL-s0.pir src/vm/parrot/stage0/ModuleLoader-s0.pir src/vm/parrot/stage0/NQP-s0.pir src/vm/parrot/stage0/NQPCORE.setting-s0.pir src/vm/parrot/stage0/NQPMO-s0.pir src/vm/parrot/stage0/P6QRegex-s0.pir src/vm/parrot/stage0/QAST-s0.pir src/vm/parrot/stage0/QASTNode-s0.pir src/vm/parrot/stage0/QRegex-s0.pir t/concurrency/01-thread.t t/concurrency/02-lock.t t/concurrency/03-semaphore.t t/concurrency/TODO t/docs/opcodes.t t/docs/tests.t t/hll/01-language.t t/hll/02-modules.t t/hll/03-exports.t t/hll/04-import.t t/hll/05-commandline.t t/hll/06-sprintf.t t/js/getcomp-js.t t/js/varint.js t/jvm/01-continuations.t t/jvm/02-multidim.t t/moar/01-continuations.t t/moar/02-multidim.t t/moar/02-qast-references.t t/moar/03-line-seps.t t/nativecall/01-basic.t t/nqp/01-literals.t t/nqp/02-if.t t/nqp/03-if-else.t t/nqp/04-unless.t t/nqp/05-comments.t t/nqp/06-args-pos.t t/nqp/07-boolean.t t/nqp/08-blocks.t t/nqp/09-var.t t/nqp/10-cmp.t t/nqp/11-sub.t t/nqp/12-logical.t t/nqp/13-op.t t/nqp/14-while.t t/nqp/15-list.t t/nqp/16-ternary.t t/nqp/17-positional.t t/nqp/18-associative.t t/nqp/19-file-ops.t t/nqp/19-readline.txt t/nqp/19-setinputlinesep.txt t/nqp/20-return.t t/nqp/21-contextual.t t/nqp/22-optional-args.t t/nqp/23-named-args.t t/nqp/24-module.t t/nqp/25-class.t t/nqp/26-methodops.t t/nqp/27-self.t t/nqp/28-subclass.t t/nqp/29-make.t t/nqp/31-grammar.t t/nqp/32-protoregex.t t/nqp/33-init.t t/nqp/34-rxcodeblock.t t/nqp/35-prefix-sigil.t t/nqp/36-callable.t t/nqp/37-slurpy.t t/nqp/38-quotes.t t/nqp/39-pointy.t t/nqp/40-lists.t t/nqp/41-flat.t t/nqp/42-cond-loop.t t/nqp/43-package-var.t t/nqp/44-try-catch.t t/nqp/45-smartmatch.t t/nqp/46-charspec.t t/nqp/47-loop-control.t t/nqp/48-closure.t t/nqp/49-regex-interpolation.t t/nqp/50-regex.t t/nqp/51-multi.t t/nqp/53-knowhow.t t/nqp/55-multi-method.t t/nqp/56-role.t t/nqp/57-construction.t t/nqp/58-attrs.t t/nqp/59-nqpop.t t/nqp/60-bigint.t t/nqp/61-mixin.t t/nqp/62-subst.t t/nqp/63-slurp.t t/nqp/64-native.t t/nqp/65-how.t t/nqp/66-pararole.t t/nqp/67-container.t t/nqp/68-associative-for.t t/nqp/69-js-keywords-as-identifier.t t/nqp/70-invokespec.t t/nqp/71-setboolspec.t t/nqp/72-rolehow.t t/nqp/73-delegation.t t/nqp/74-nfa.t t/nqp/75-curcode.t t/nqp/76-capture.t t/nqp/77-curlexpad.t t/nqp/78-shell.t t/nqp/79-callercode.t t/nqp/80-matches.t t/nqp/81-radix.t t/nqp/82-decode.t t/nqp/83-log.t t/nqp/84-loop-labels.t t/nqp/85-type-tester.t t/nqp/86-pipes.t t/nqp/87-parametric-6model.t t/nqp/88-more-if-tests.t t/nqp/89-istype.t t/nqp/90-findmethod.t t/nqp/91-codename.t t/nqp/92-where.t t/nqp/93-oo-ops.t t/nqp/94-clone.t t/nqp/95-cclass.t t/nqp/96-array-methods.t t/p5regex/01-p5regex.t t/p5regex/rx_basic t/p5regex/rx_captures t/p5regex/rx_charclass t/p5regex/rx_metachars t/p5regex/rx_modifiers t/p5regex/rx_quantifiers t/parrot-pmc/qrpa.t t/parrot/01-pirt.t t/parrot/02-qast.t t/parrot/03-inline.t t/parrot/04-pirop.t t/parrot/05-vtable.t t/parrot/06-errno.t t/qast/01-qast.t t/qast/02-manipulation.t t/qregex/01-qregex.t t/qregex/rx_backtrack t/qregex/rx_basic t/qregex/rx_captures t/qregex/rx_charclass t/qregex/rx_goal t/qregex/rx_lookarounds t/qregex/rx_metachars t/qregex/rx_modifiers t/qregex/rx_qcaps t/qregex/rx_quantifiers t/qregex/rx_subrules t/qregex/rx_syntax t/serialization/01-basic.t t/serialization/02-types.t t/serialization/03-closures.t tools/analyze-parse tools/build/MOAR_REVISION tools/build/Makefile-JS.in tools/build/Makefile-JVM.in tools/build/Makefile-Moar.in tools/build/Makefile-Parrot.in tools/build/Makefile-common.in tools/build/PARROT_REVISION tools/build/gen-bootstrap.pl tools/build/gen-cat.pl tools/build/gen-js-makefile.nqp tools/build/gen-jvm-properties.pl tools/build/gen-moar-runner.pl tools/build/gen-version.pl tools/build/generate-constants.pl tools/build/install-jvm-runner.pl tools/build/install-moar-runner.pl tools/build/process-qregex-tests tools/jvm/eval-client.pl tools/lib/NQP/Configure.pm tools/missing-js-tests nqp-2015.11/.gitignore000644 000765 000024 00000001142 12576615053 016432 0ustar00williamcoledastaff000000 000000 Makefile /parrot /install .*.swp *.o *.so *.RES *.res *.ilk *.obj *.rc *.dll *.dll.a *.manifest *.exp *.lib *.pdb *.dump *.exe *.suo *.bundle *~ *.pbc src/vm/parrot/ops/*.h src/vm/parrot/ops/*.c src/vm/parrot/pmc/pmc_*.h src/vm/parrot/pmc/*.c /nqp nqp.c nqp_group.c nqp_group.h src/gen/*.pir src/gen/*.nqp src/gen/*.pm src/gen/*.setting src/stage1 src/stage2 config.status config.default 3rdparty/dyncall/ConfigVars 3rdparty/dyncall/*/*.a /nqp_const.pir node_modules nqp-runtime.jar *.class *.jar /nqp-j /nqp-p /nqp-m /nqp-j.bat /nqp-p.bat /nqp-m.bat /jvmconfig.properties *.moarvm MoarVM MANIFEST /nqp.bat nqp-2015.11/.travis.yml000644 000765 000024 00000000750 12610221733 016542 0ustar00williamcoledastaff000000 000000 language: "perl" perl: - "5.10" sudo: false install: "echo" script: "perl Configure.pl $NQP_OPTIONS; make test" branches: only: - master - /smoke-me/ notifications: irc: channels: - "irc.freenode.net#perl6" on_success: change on_failure: always template: - "NQP build %{result}. %{author} '%{commit_message}'" - "%{build_url} %{compare_url}" env: matrix: - NQP_OPTIONS="--gen-moar" - NQP_OPTIONS="--gen-moar=master" nqp-2015.11/3rdparty/asm/LICENSE.txt000644 000765 000024 00000003076 12534342602 020614 0ustar00williamcoledastaff000000 000000 ASM: a very small and fast Java bytecode manipulation framework Copyright (c) 2000-2011 INRIA, France Telecom All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. nqp-2015.11/3rdparty/asm/asm-4.1.jar000644 000765 000024 00000134377 12534342602 020560 0ustar00williamcoledastaff000000 000000 PKˈNA180+META-INF/MANIFEST.MF}QO0ߗ?4<Mlن 0 S3^ڵuNpA1>/so3J`Ki4E1 eFȹ˝n$\{B(zqnImV^c ti=(gM%JZx<ꕴFE814xŠ|;ȫyn ZKѭen  3s pSG"thW.e0Hol񗅫vumI)0@pKu/9FGT8O *1gED31i`h`DyLX!jXcE<2$ KdEdUȚȺƺ•>G`Ae5xH]ע?C prxj5onou }a_8I/Sl| ]^Q3%=d®Ve9+`߅l3pG,_pZ^/YC,N9~PKɈNAۖc$ e(org/objectweb/asm/AnnotationWriter.classVkSW~6ˆtUM(b5$_$ KjKi&AK*Z^M/tڙv֙vi?3~}ݍd ayϞ9{9g7spO]u~:su 7ƮL*5.{uPjLbɡsHBt1k fcMmJ G!SD{9҅ r(MJ:,O& zki} iM$p&Lq#H=jq "^B3g'0NCx&jְ`k#p5`357mz+xNc 9 9ؼ8x2h. 6v CC0Cԡdr4NG'(!i Z3A1L7 XfڢH*>N܈ goD:o([|8BuXwF) ^ P =ԮhwaMPi,7@߈qj2>1ZT*MNrɢFwM hbo$?D e!WHY(4$E_ϋ/054OK$kx/tH,uR$5|GYi]u@{=RT?w/riB)I~`VF*YtJ/]Ue\1-p=FN=tYe^pTN*'R *'.C.+ҰDJMJҨE*ߑiC4]V*6 /R)C]V*mv -Rg&-ze=Js8 |L,LgNp+"ٞ y'9ɤ ސpGQfp6+ 7 r;r1D=7cNq Ѯc t_-_ݭ?I| qRlvΣklǦUU&i=Sr' >)3e)4|䔜m锘B>^}ɲ!O%7)$^\1Wsx|=0SOih7잫l馣Y].vE>l^ 4|z",,=S)Ep\,d_Sd)W싨."zed/e/scnPKɈNA۠( !org/objectweb/asm/Attribute.classRQSQ. {6CjS22i&SƘf\t0gYcxC6CsQvν|;9}0$4pozl̆ 5c*^c=OZeX}$]?u= GIQ/y2slTxjyNzW dӉ-r?i~f2)3g~:$p|̳5}.*b0~A<s=QX5uur 3eKMS/6˴>kXY.劢{Rsh\ 7J gF8/]O|-0([Лi̓c'-LZMҢ`7ɏ$nrq帥6NW%/dW@p}6 Npᾀ.1せCܔX'nJH?2Pd z"ePI(;9اf7rp``%.r7g`O{T^AT}дA)A[TDVe҉V1XW1ʍ5/Q(z6:@GBDvi"iY|*^t vDyyYH0"o#I)$5*?҈8IQ.kx:I*GLabIkJbmicʮJ6`-2b[: x Uv1 njc'>r.]YɸjkTm\U?z̏0 !Mslg )|A'FK)|h"͗HD"E?7q"U7zTEBmhvҔǥToC6E^manҁl'=)W:6SӪA DsɡהJ)K/): ࠲W_?w&)h[v=q~@% N4@*NEWו^shѥ3RQV8.<ҺLH(YH}YӶ&VN1$RiO7+aj#mfʈVj]GC2SdgF}W"_fFhu ^/~EyVU|ZRWh?قl!DA1X1,x_ PKɈNAa"Ə]./?3~?qXUCb%>MuwuUuwuUu|zǁ#P Pzq8ry[ 1phfPU7UY]mڒ2mz\hO^2+޷s֒d<ӽ3ӻPYπ\LZպF*5Ih(h YBln.*P$Xg)8DC5ȺU*D,,]|vbg!$(byg#o7;?h6p+=-,6ަ3ܸbuc 6mvt4t'QQVeAO=E}&ʠ1_l#H>!7_1I;{f5wOBwmy)nTAJDudHmcoݚ [P Pݳ+p* bbb{i˩.B/4HG]d|ʿS`ugD)Slctw}L'13Tǻ; 8#bI?//F[wk9wF )?;M NK6Nd9J(T4)dCog2!OGTldb'?(Bb#06v#s;ob#qRmThuEBc,x_'Xma6dm9urFqV#v׍o5Eb8ɒ3[ "M$Ҟd_7KjyʅNBI[{;P= ߾d;>ՏmgS뺥-zdK]zɪ+Yr^ʗuwHlw{bMGӖ/ii[FeK뒵8Qԗ޼ja`6ww'zńHEtv'Vܒ]҅SWԕw/mF&b/DNnO$;qO{k}Găf_&:M8P+Qֵ0NvL4w_*z0̲1ed_qKW_DV$M˖-. :uǓ㪶DSbKe>EhKwBsV-rvok[WB֮YW[ռymM˚X{q3P6ln$-98ϣƌQqtx; UvJ⽽==Pxg\ۂپ=޻948@&FT Ͷ %KP<{Lt'ɖe"J*3!6z۩[6NTR[͕R-m[>Im;&mr0{PD%}2K&249 @|'dڞ]=q7)wAhͅBlڀ`B pYVhDۓ4>/[zDE'$)YMv3=}tL ,\Tm)SJf k/C0J;hzE#DeL}[l5=YUbXd̛o&e\]l %2Lcڿ3+@l}Vh4wuz{e,v)OseifݼgGiOw|g-EJ]ѿsWᐶ#S( S`$=;w]ݙl.0TKd Z'1%W N]vIy"i#niWO^Ȋ Mv l|Ҁ+ 7݀[ aN>e@}|ڀYy3 e`tx@:dt?G:ApR?tOu?:RuxB'uxJ_ T$PEJ\QkXO` ~@ ۠ۄT@=p P|HjI'' 0T &0\H@ .%p: $ HKn1vXaW` _&|r8 שuM& Iw$ߠ7V sL8H̓˄| &|1TGj? p|&O$MWلY&:NPiXg¯I"kMxjLxB&&m` M{XjhWH?A u&/20ۄh4` %lF>E& xp\`22ZMibS*\KK.6XC`'"@?=%@n$p3[J+F[@ m.e;E*n!pVh%%&l2# fSمn6-qWl:k$e7c fAB ,.v&yD7'z)i7z\v/> < 7kݨf+l $p8v [ l#@'+ "$ $p]&paL>? p?!0D1?&pҍGxgܸM.#& \N` 74 XH'p ~HGxCx#% N?bv/Q!pB'0XZ`sm; *TPz%UQb%G,+(ay60-  9BLJ)ۿb"IX)d! Z3Q{f %X!pb#5ՇA#zܱS\|HTc!}/{& nO 'WHcD4qEp3H,c\܈hi0ut:N76ȞBAjӞ" b~RI& VI bzP(ۤ<~*c X.&J܌EA?~~-*{UAQε2kAk{{ h0HСKbb JCqZ}ĉ'P#1`#׆u잂|n(>OHo(xٴ4.FWqY86ø wa -F*,3܌ҒfӲQ.I3oJFM;/,⨂p=yk Q> g*Biې dzLU{1\[6yw qDh aO`Rq)%gQVpbRqZ*w7 a0$^W;" :2ʤ 8A\ ܁/y= g()PFF1L"N<sf⬢-=TJNjqՃXDM9?PG @JƠ3סwG=GQRPWM$?K;e(唡 CKJ}oFYi¨;* sTU&gs&Gi@~ؐrV"-\nkb !dOyArj_ QeƐ2YPT1FOQz6jzU!OgVF(P^Jyܬr"ϣ&`K2jYnNd/K“e۲ua!A]dtF1rG)p!ZnԜey ʶ6:ɢ,ZƢ,qD*JGˢUҥQ9ّ ^VkU Jwx3ͮ TDimdc~v,(Lq~W/ŕgq=i ņ.IÇ^V3r ^VCھ'S 23ciZ4 _TZ1"AtG}H!|-V+0^Y"h؟}y77~U-$egci RfE}Y>jEN g|8PPZ4 *\;, h{̓`X'$dViFiN@i*-OFYq5 FP"h MD aEdѐR_䕂RUgUUu"ʭ* YU|Gïq~{Qr/ QXGQ.Lq#UM^;=&윂tc!%(59:$eIBeqj=X>>^IЂJV tNEu9"n霒W0eQ-;p*LV{rmn;",J툘H#R戔;"@E+/dmy)U^fW9,vH/؝Ѭq#!@!M 7w*Dޥ8 ixlAkzljͤ< LL^+fi[W {FʅF<9{*bodoܪʑ{+$굼,l~>E(=I{I:4`p>jW AJD10u'LM>Ҝq"I duAG0p׆2/TfU )7P4H+~n C7ZIW Cн mYCSUCJcd,1|?x{tA5=!C`JJ*Rx#aUD/0݋_ [At]1̤JWsr7QU8&I"%xgw+@q7h(D6{n50FJ`R>rɚY!K^a?,lY7b֙aܴ`n홤4C͡[ǩ1{rRt4 hr۱X@0GIp#RE |5@GblRc1bAgKCX) t0as6! ZC2lS\ef pv aS4gp-)p1+Zztpn}$`.w† 3Z uVI%f{_7QdwʇK7y lUڸ+*?eBKdB#7AT*~DD0u4wiZAEnTLoMƃmJ)B%5a̱1PqeLX5kd>\J,;<2SJ<a {:)[cy w)21c,x)^Ȑ6FAou+!0)BnS Re !pvI{qGBYHT/fyOu{57`9 B7 Mf0)D7uj?<h^A9OM$ޛ > >6qSAܼ cX2~C4Z 3{j[BܗQ6Qt,>On.pC|5xOs(W|o<)x* rKܑkii*?d+ib3F ac1մM(&ɑX'p C3M~H-Venh ]fJ3 S`3ʶ0P(b`5u^+[CIǡ 1دCr 4Ԗ4;IEUIs،Y` Q6M`b윌r ;ȰYF{%g F*/*k RcYrP^ A1BE b61XDkSE<xBc?P0!+`MĉfO *J(bB:Ug Ğ@(G%8z#p̐(#rWRvXhGhy☿j:[z6H9_PV/c76d`9H8gqC0jj[L`~Gzg!qh~fXK&1^A_A=՟n2h\G?ŘQeqS>ټ /bR5\}2&^ˑǘ;>WOorq3U˅gh~r3m)RC<vfpO-/Rzf-抣<,QcyROBP 0B_6s.> |&}A3VVU5v*"OϞvy* Wv\clFRo=[%Kq+=0~SgId| P[&j醆BKI0Ӆ=<[8/!7ŋ )q)])MK i0I>rXWr.\-ݿ9o:p W~ w]0wN/p& )l(p5a~ҵ/^J4`@~DHwW4MT!*SSDXIri!GٯWEvKgpLݴ>͸*o8 a18\چùfWby ˈOwpm{'̢qb[-J9P輦R+ܕÆGy~#6kEln3!Wa ˟, IeL<,֧61QrkĒ>rI 5vW|ᆻL,=9l39~_O^D/αk K2;o_母 j >DP&]fۅi ^gKJx:SN]KFB< 9kmC3a!ʩQkhxソn[砎Bdc37tpR5gsSzP @ݒ>X.C;;g>kقO>EfclFNgHq>ƦfOChRJql`v4hk9Da"kxT]Tc6v}buc7ϼxqvPKɈNA{|%4$org/objectweb/asm/ClassVisitor.classTmOP~֭ Q1 CB0iDTF3%[A)&(9}aS&.sn}vOחo4 k]Iټt}81* îWvܦe׫켹iױw`jqi+ܫslZ-uUF}p/Lo]fm4V+"q^r`JOkj_wkm;ZnCAFtޱk%,rѠm8IpG@v"0Oo4̺Xo֏MP38#F` ^ d|ۮO`0؉ 76}/m6}i'||y7kQc c #`C n@R0 ( rL)y$L_19)Lc6 n1ag %2"Ò4CXD $Nl~WV1rI 0A E:,:">"ӯq{I=CT>r$:C9N>clbN%rI"U*&)  J S~| uC5e2w:t=<<!$$XP@Nd"t]!h̄)IV"6E7^t[- MB/նF)TdLH8HPKɈNApy_1#org/objectweb/asm/ClassWriter.class[ |T?͒E."*jhD$(Af K$1٨XJڪ+;و.sɟ {9JX%qS:74)i>)v @hhuZ# 'HqK$(B9s N]mm]uv>v^xP[X QA*(&pb},V4+OJ^9 (&Q2 RÕ;IXVx0yn:tx6upe*Ki>Tm"plm4C_oCѬ<AlX@a/qg0Ê5k>Mf,$=8#+A\]ǀj2aLґ} 3[ޜ=ġNkVD )!fwi:v992تV>{bd8PduS_"(b;q8H$ tNm7lXЪXXSx#u, K2~& ȕd8 XUa;Y[-IbLe^)Sʺ+dF69axВA{W Ϊ\T^=V$T/f@F5Mht|S!J}J4)j*omhoGb24`E ~FXiԮnC'Xmu4ql5=Hbݑycʻ&fUF\sGB NT}f6ji:cqq7>>x}?HR A v HZ?#9rnK=d5*3fiW[c.Us 79J-+4\S1Zsa-Zkڗ̓fsǢhp0EtK r4.(tK<$JOVV/)@Vg{|~u/pr7tYnZnZtnMrnFwhtFwitFhԩѽݧ!֨K=ѓ=jOg4FjS~R (,TjuZFQVPN!j)LuZC@M:5K-:ma`4` `,`<``"d@512Ll@`.j "MuDGt)e02Xp]F 唯4p t@{CAK9:]I&{}x*0ru!Ut55ໆm:]K>~Dy:]Gct=@ɡBrT qqW"gP̳?<5jiJ|MTY#s..E_n9U bqXA,IKiIbZR_iJ*v=zfpn^e/[+9GEonjDS~!'XˋL|qr?FAֵu3rc M6V7dxl^ qSpRpCf'{\4zK}n4vf;ǽh3h+ڎ^2 UI!xrhy-$铹z߱wver{2mINdwgfd^{I7J]#l fL4`Gfh~r.wspYՐxo_Sstq[>p6n.܊XYdn xcSVZFF~%lQY 'd[RleIFCĈΚLb;1Ck򰒽]~ܯwxbɹƏ,ƀ']މ{*&]OK-o&h+FT~{?#f >9zOOͤJ9 ?Hn^tdf^*A|[w=brNϟyzXe0˿ O4+!^#p&-z\++87OW$g 4syB,ENk8/iO;`O䁝% I 9,1^0'$D88H7>uȬnt,7GTs7Kϻ955a]Q„-KU:h U;n~𳗟ˮA{Ƈ+'_/ n=*uyp*"8J^Ep붹*F.h).A8^n ySdŧlQ AOS;YTlIRLo"Ä+07 f&Bùe=xVV̌lmlỠqx~EJB9`MLʯ)'/-{w\B|`IޑY#8^~D !S1Ketz:l5-JqJHꕻoO-ۀy,mЋ3mӥ8F9~"u6A#/jcS:RORO^~o+2W+$JA[ ͎kf7Anq>rbef蔕Q. ;ūlV^\llk0ޚƯ$.F'8>1̆ *ق$xMؼ.xYp2:^/dK̄x)!~QS?Kv95/s <ޏVruêw܍:$ MMg]l&TR.ԒR}$">qX]̯FO2͔Lug߫MHW j\p]"g8:fu-s8V{39ɺJ [| .nǻ6#.Aij wMξξL9|ooטڭ4QYS Gv1O'ڀ`tsK~9!0cg|ę9sv7 j43doF^p!1xp,eaZp*`T #j6TˉSMݨ$$! ʖ()z>q2O{227_2+Or6v~a*fi٩nghlTvEab;R.W4S$SJ hvθ֚͵B`aɏ9gxfXfaa31O/Űp7@1|4c0( } 7SG8\E8E]\Ec"-*;J%w&B\>:^J<>w>r#>TbK|Wr@}e#fk\f#w)]ucto@-N?R[Hv6k?XbWSl d˷~>Kve!Kvj& DKk4G3evYc]سG"~MKNޡI[a.ͅX&<%dD. 3vRlrTMp2c8 e8N6/&"7br39G،9E'&jiM,G9R*=s|P$vV/PKɈNAnG qorg/objectweb/asm/Frame.classX}pT?o}o7 $F I4ҀP@k6%YLvfç QߕVQV ITԶtә3isټ [s~u;ͅ@%Qr KdC0] ,2B$p <^Y%7 24qI.E,(h*PEBa( Ҳ 敖;֦xR\/r-[IQJ[-b1tq5EhX|e"YhHmWz}}Gݒ,%w& jn`R^ۯ柿J6%=,>VRECOD\hl͓Ԍ< z3XV?kњԐSԀᚚ(>ih^e ɓHi9Vy}k[Zוђx"UۛHTWIG?+Ib,+Sٕh7q|/-%F d2#ѻH 'RA _S;dgO4꫋GZd|mlWOYlu$cDbx$#!L= %̞ СpADT'ڸ#*S88V\۝}X SX|[hժh+YG}3iaNZ `W\ \;j󿫼.5urRhU jPA4XF 6Vu*ܯz6T*@XG`N7$ g ~BS%^wC_,QH.+~e+g&Sę'B 8Z=mꞭA|q`5) ٠܈6/N1rk[oatlOREأ<'wp3n(|=p,_).Cy N@a)mi< r7؏ i6A{|Q~&NltaZ3 <`\j̊1`A%+f|ʽ%>j1W'ڇ?=}]ta+$incnb&+ yp :uň;tĞ/hhyىD6D0 JqɱT6Hsv ߍAPAA|GE0@gNL5S3pSK|4ϝ8\4 h6 \vrf*'õd(*yNZWGըXWm]qczQF}aaolX pi(3cPx`a42rPiiH]d@Ѕ욁l GPl~#*!+FrmԆ?g]$?*?h U)ѷP8Q:%|Y!uU@Z4$fMt5nAۉY uatmg.y{ T;-,] i+P6z@ФV\Sn}W,Fr?Rv!˿AiNMH#a}#}%k.R+Rn$ ]o}>mgOw >ƪS脜O:x\cx+wE8 ݅Nz3ךg!_٩6O[O;_7?i&x`LGLۋ>iUa dž u!ἅLسrV.䌭dm]]5X?b8|wC$RX߾zNeUyu͖,Wg8g×J* rǮ`^ 10owR2(vCP- 9(s j>4blKx9e4 }"ǣh"+ra eAeDe_wb²ܕb[ Y)&.yMQ u`2?7Ţ/PKɈNA_&&org/objectweb/asm/Handle.classRoP.-adC`:((NƇIԙhL4>XV&0Oƒ&MGϽE]56ss~ <6:U9ݸk6^mV!od7vv^zpK~)CNm= ouc~2}mPPWG~yq`w JvuϻoѸ0yۇӣ:rMʵ~S<ᷔ0=CkZ]x,gݱF ^mLEIUD 8UY98̨pZEC,*HAA9 fKX`Y151nx'PKɈNAx-org/objectweb/asm/Handler.class}QMKQ=/g1}YSMeYY(ͮEE6}-嘓(`R-h0 އ&;s0_6 z=P:s*PI덒[/T_pKw߫~cQ+?nNVn h{/ wUVrOrDsң*PS8B`7X$$$%&4 "1c0a041(LbfcgH0,D`a6 LEU0$/Of)C'Q 'ĺڋZ .Ӆ.l )ҋX%NojYF=E8.Z9n KZF זxĬeX=buԂ,p: agmoI[-9FJ,XRb9+VHñ%gQPKɈNA"] org/objectweb/asm/Item.classRKOQ.m("/ Q7-)ZB4QB7N"teb41,ƅ;5&&V #)9wn;Gds{9y'A\v=pԷtdya%t4ïU+648ZGt@N>u_~ buYVX]`u ^Dp ^4"IZ(lUH I&$+TإNt z:5 B_`>(w3xmqbTUJ",ǘ_+"/"8Z(cXcE3N1Q\ jVs' >`ͬaFOwQ4E1T1%)N.G"Pz0}UWD>ahCE6wHIaFH45 u+ {;#Ì]t YvԡpO>Lp±}rժ\!Z-u0XZo" bPdS?+ydvK~T'2/G#_DQ:|n[dkh|8b^cEDFPND"63^?PKɈNA˖& org/objectweb/asm/Label.classTKSSg~9$DL#DDimZ j5-VÉB0hLkYpRҶ.\Nut3]tх_P9\*2s~^?>ЍJ,Lrl}A!-iEx/OUQ$s];inyfgCΙ-lLLs9xOJO[SDk$8=EْiGRYQ,;:mh,Ykf&d/VBS2YL*3Eca'-Lpn,.Q,K3雡3K_|=,!y`.c윽t(9˹¬Ey qR5#a_Ϙ u` {|GJ@Eе(]IhawU-bsūv@Mzږӧ{5thХ[kxGÑ!3 P@+@Q@u \M` hc ; 5 Ipp1 1Xׇs 0|8~?zpʏ^28FT"èj_N3|0pD@4*h *(*m 䂾}&\Kh{H *>n="G+R86VC>#jȍL ёn]xMksceg* enX9NNܚq6$ki-R2Kd@m<>W`fӻ8(hPM?gGǻW#>Frt+3ݲ/̮SrS .{p{xęt"u'-cEW3I -.j~#v障9O:\wP̉|̴C )5Ry喴>7)N7r#^<] Frzzn'`oJ%WG +gXQ LU9 yyGXsd.$ՎUw0'aG kl`<|LT0h3LհVAư]EQX"^WQ^9:X:A7~?!()5 +Եh"=ZyYym7~04>F/;W*㏰*/PKɈNA{K6A %org/objectweb/asm/MethodVisitor.classRG h"a/!,;1r`@H0Y"=Kt""ͱyk^21Ǔj\;q$[XiRΠ%'[;zs5t:։k_)W2+JJ˸oy]Rߴ$ڮrjۧe6C67#F:YĄ. LC`C\en@X`!81(@XM 0*p |%1F>%;wc=˲{,X>cYayȲʲƲs,',_dY6X6Yyǎ N#uwR:!KO#=0?9j1L\ Lqܐr^_fZ?^/| ,< '=d٣ Gpٿ).!,>9652Yڬir/!˂)P>0 |4Q J m>Q'꟧%α&yoJ :5(O<||Ԡ|mfytEC]n=JNy^ :F=7 ,b~^˪8Nv<3_iEpB/ȕ ''fsTM]MAb,k*62~<'>uS\((01!UU٘f$FLZYZnq9]‰#pԥ/_ 0rA-+w*urkFvveC :k}"9vOD|;nhEtYǏT^YܴF5 S!={Vt]m)w5kQC 5b1Z6[mn!TL]R'q\ev]j\xŬ.z/{qB >znw:!p;6,!Ǐ$y‘yxMZK7b4gi<}\:NQϗ-_LYcVb9'"D씲*0jN_"h$aEwQMzr2PeBY\SWU겮&\R(S/Y+@φb2ZӪf7^F&w=W#/_:sEMcբ\U\RZ) f 9-l~M2JRjjX5qk#+ZVUcqM%6ʹ iM_ڦklZh"UfmZmnfaf~hz6XlFZ,dѣĢ=fZfQE,n=iю ͤ~ ,Ji6- ΥeAOBjo)I)UҵAZ@ RZPjDjt=]+Vn}  pP@lsBQc0` ({zi-Jk!r,~/}]G#j$߃tJ mAap1# xAEӃπ^xN s(uP Ci?ZNt!ǶB\1`_x0 p&f|/L%WT%& ~a VP~" +VE(( /@0RSN0t38 `P*R5,XpWp#o4|V=;.QXOEQ>W\5s}.L=@bz7E8(K(p <#8 psn9nLM/,( 0@1 `89|`<f\0JyIjwDP@B(\ vp^(!;u@~,[H|x˜W̷״wFσ,gtΛtO5a]_=Y|WպJ?2ht|W|nAfht%O>b`ķmxX 6.yBXME+%?^\30./oj?Æ, mX&~6;hTܵ1Xx}gMқ;~Z(/2ڡLSC{Hri6sc9vZggwϦ);;]/R?ݽP9M 9V9#ck,r}dŶy/Cw[=Q)MބXj(w{UG%AX Ogid?olBt/lVhorV}$˖5%ˎd(5~1U{7bs72ɑ}<Ii:S9uQ0>*lݑ4?Nt'ANWvgQ8&aھ8m*H#C#8\?D E.iUӫ:+Ms34BRy7I損PdIE[Q~d\5ocȅ*9,])j_`<.ZhΎ즡S[GQh$u-UrVH}*g&s'lzމKgꙪgaG!ߚlwQ.K#CѬld$c( c +oBQWt Kq8W/*g|T6)w(o}ԑd9N".4񒛸Ma_ـU4F;9zdcXᕍY|ϓ#Xk~o ~f>J\8<@6[ք,qLi98 >$,>, [fIcnv,suMaL)3[ o-r'F>^ae7k=zoG 5>jkT㜧9@uQBeHo*}xr0S)afIA]t 1S*hQ:]5x'O!Je<A/iZȘirVp\U܁0ߑL=", C (sU/5B߀Bjfi +W*4BN(^9\ӏ6Q!4fΕ[&w/-ݨ nlz`;\e9MzAsqwT{ q alU3+6ӓ4u\v5FS&mylS+gmo|0y B tXd a|@1`!@&CWi{M6.g8M̋I¥.\zm[1u0) 3PW.`C|N=L{ R)do%k%[+~zҺw&04E2ԛrH]ݩsEC7n"iHѝZoФwXĮC|JUڬb8_OFk Mjki;\z3c!s'.r7G<mQޠK7-s0[Z,QKs|E9a;9M>W|(۲V=CU3tK33EJ]¥wLiatBX.M^N/yFI.9ޢs2p;eJpFٳNNf& Sbޡ3**܁c8l+M<-an#`aޅ8s}%;ӄKS(?"1OI -C;L`=!P@h 'VYọ/}f@Q_PZ.w.p܅X֍#V9eTg9|M M̞{2w^wj}g^ T|meJCt->r5\vNg~'A [Pq!L.ȰS-(UJV.'2瘛r|bp&bQ 0{ [=A'$P lAօ)6WҝO;IuAOun kWR|lBZqK+Q(p FrL\9S"/878Aﬦ ǎ]DAhWLQ''Da㴡etD2آw8Hg1YK{"j]>LyT3YRwǨqƱ٢jhߜqZ5Gz~3@N / k[ \K#QV7kζ 6c| 8FhU7iv跽—Ic$)wh;抶` w?փPׅ}K(pg;a;Q&7ڌec <&p-%EV\QnSe&Mӝ cMv9^2oװ}dz9i)]fS( *79j'oSwt;= th>[,x>Tְ7avJo6oiH&xG3]h&nm8{*fWOf#Dzst*ϽgcLwW坨_QrgA y  ZҨiZ c&\Q/3Kft^ٌW024"`ӹ粽XFIհj<1Ick}j,̱(Art| У׹Ofh~^R`31r*a hƆF.Pj]9}NWh|$tME8U.SE(6^qq*LU,/ljyMv/ǥK)]Bmk!>{ef#~toN!MG}=;k #"0XOTL;ӹ%&>-ٿ[HD$CXw,J&}z:XEݠ{?f[dZf[fZtЅq~Q2oxO俳}d>Ag@jbJ%ӌ7_ף{8D|9ϿRݐ1z6 S Y:Kjo8@72ymKvoַ֏oeZՒ Kzo2Ɨ6`X}2UF5y#Ps zB*,ᐛ]|'ݓbfG#Y, )gB|x=51m7z;v{qY\|([ܒ-Qxj^wgL'Sڛ)ɔu lw3x&¹〕ˮn=$%UcN=9A{fz{oNgrl#14aJ%p?)rgѣcſj;%FX)C2]'r|ݿ.a=-EG8)cNfevmzjVLڍxȎ nYZ獬uxUd9XQ-aT556bi|DE M,"s)=^AIC7ɛiŝFabRL/>$sz1jy|L4;ֹD{ӕ}Dl$W2S*Uqp>^wӋXXt`3Őقw9|O5^Y##34)rt=%Nx m;󜻎mzʏ~țv1}hK{o4ʽYAO3+'ocZI,V*dVs^m$ijvsv9.b݅z0&Mn9 пD-(f2ԜPH T->ä)w Ƥ;3WeWA4Bm 펙(S(RTk[DS-s.rUs2Wbxe5Z/'dԋQt mi'eec2yYB&+R5pU6V}ΫlY^]붪J u)ﯧM1"|7>eg#I?[ SW? $F}*mDtE01 LX:>ffiKch߆>A<ӝ{'6^"wQ2-\B›(r|-)Z'̰W@w^7&i.43'3zٺNZR ;ۚLmuNSݰWʉp桤1HwbS}Viw~]|Lxj8W^e-hPcڋm)~_XD:W^hG[&io>\[3Gj.},}(rM,Kbv|+ЌOX$v,9kk~}ZiZ>FnW \Bn™;Υ$& 6.π{#eZ0~)Žs&Z,|Q*PKɈNA[d org/objectweb/asm/Opcodes.classew|gMfXc@dw&;2Yvg7%@'E) *Rb z{ͷ#<{Ξs|4m~ 1kN!bD""A}~DQO'A`Xbq@ %FHbD&cqxb1DL!<"CL#D윂Ň,.Yص"]xFJj #{YSdh4uR|÷=W9kZү)35ob+L7ߪk -5]glYňH?J&k0Di&fRf͎,IS镬y3kU&YϵgpR6U_H٦P0F%WZ9N0AE7 ҒfdF;/k˶qLOc\.siq sjC.|sf;ϡSu2-VLɩT׉M5Y"&O)NSaT5R*2 b]`{<՚Wf G&=kr0T)T.3|P*GMϨ @MjJ)ڊ|bX\R.V)7K6q -+I\F+HRŭ +feVdLWML{X8 "gGH[ n=t~JҸ0o)̀.16/VrM[Iy6"L^<sfŤbJRtqIvEvi\;ܩݻ3v ѽp,VtjeNS?,|U893(<7ՈUʢ1¸Ըhz-O cG;US]YIpluHpgq-|]{jwVUy}dcC#mG:nNPd$>nOg%9Q{悔wx=NNNNqK]tz7)o~I;t!Erx.:36OQ)9唜 %'H)!H)䨔ruh\5߹<vr.:3m񢏩{|ă(y{/X^1S-gr.WJxx|oJ|F_l<48v~:$Hu]K/*_`*XbK{YT λ6ײm(U@bLP qA1oO-/>ŽuޜEs{t{n%k:4v\-o:):C}^o@D5&}^SM!n$n"n&n!nw$Vtt: A>XzLk7 E O_-$5Oo~ |x+cᇅW_#?π ?$>A_ Ÿßomzo^ _W~U7 _)^[_z ̷dE; 2~Ƅv}k# q K^HU~Xo/KRrg"8=2"892S"64nFȺe#떫go]x?O@^=~ X/C?~ |V?UoU+["/ ?~~:|3#g&,F?,<FpEx#_)|$|Q›G#| )|W-|JDxIVO B_~1,| /&<Hgy-hOiho>KTph?A .C ,|'g S}xQx"# ~pOx;|JwY)|&<-||Kc_"?Vl1;9/>{?;M _;Jb—>Mxn_/Wrwxg _ ?Wxg _ ?[0k_-||+ࣄo7 >\U77m[˄o~5|k·/*:{¯Gwk^-|Kn/~#"7' ~[ _(6~U]o/>_~~LhOjjf4}G{쐾9nqJ3Vm kTx'Ä b80hTPKɈNAf [org/objectweb/asm/Type.classX |[UNMnmY3֥SHQck*iaiRl)*"(n V | T|7!>P)wIz&||;7rT^D f B`% !LXt#5I`aR$u&FLR;(L4Vc yʚ,. VDH0fP"h#]SIߺFH"7h3œiOtAIҵ֡`bH/5%]6EQ8Qwbp2&-0>.2ncl*ש>?3 cɹOy9cH#`rK9?\xh$CʜCQDX6pyFej+tYb+| =VB  V>n>U \GFQUc |\O(pTz>B- V"8Oa M A [ g` *|>6RtzrTR.TNv8C0 *l*.%m)p9x+Tp%^> R&p`/j10kvgȑs~`b& `Kҹ=2e;z=9x98sD'N@_9*rE"ɗGwb{ Š gXT(6X#,nJ'R|&VY%;elXT`+(z}Tbc0U3a8tBybKZԻc}(1S?Y"Ow, N~7,$oMuwܫ'i1vx*T>:|^,{ ʓ Skhaqz`nkZ/"oԹ)IeR]Z'LbִlnmX|A7$;T$(D6x~ꈶqelj $Qf죇!=`< *EucەnD? /N?mn,Nl{PSSS 6:US9:Z`NfCC;;z{J~2y^w՟Eb^,̃BɩW"Z*נql'\x)ﯸcc8\eG`Q9ѣ/LGOpf`[#67`[+ u`B#BŴ㖴KimiǭiiL=] [0 @Ԗqsewwb:* /ͲGs/iye{´ f-RͲXm,oŴLZ8Lqfч49¶ůy2mܾj?1?ğsg@[(bvkKV|ƬeŧUsTw2 g 2S~{]+*h՜1OgFv]y!3XΚZ~{#gzlN3]kg Ϣ[|-~iucצu"Mۊz?mZ2#lYϰMkGf?6 E~۴uXu^7x'|Wno26ꛊ뭫2*Y2;Ny?iƫuZrLG͸g#WŧF^V &`j7)O aA\W5./Eֶ\.} rnͺ +=g4!^Lx݅^-G`CY:{dj?$%nnQz2+=Q܉*M*i(w%j;Jn0*cFͭng. ⃠JO dg[IԖruԊJ+{jr)w[Lxf+-ԷE\O+3}X3s ZCUcξJ9ue<"hW8Qx PKɈNA^Jd1org/objectweb/asm/signature/SignatureReader.classUMoU=SgbwLR&iG= PSbא8 5$dA&u匣 VTM,$dfT b+$`͸1u}s߻Ό}<6$Dɢ rï뎻vf9RYk5(,II\)SM]1YM$ή;^5k^F,/ ;8b j^;Wa}K riI{;$WʷXUܻ+7%NB{Ra[RUש(kባs/ 杦c".ԝfs*A,rn"XY^?%ȥԙζOT\hѐ%MB"l$8ntcoYk~ϐ0.뵆ל1)4hhCaT 'j4F4D\ng*wtD({wâ_M"J0qq] E5$.kL3"bny& 8Rb,$n5y ! 3||H ОaܷLzxoQ5ɶeqS73H@' @69 3)WhC}z.bbк3W. }.lz2M xHS/? PKɈNA.iL2org/objectweb/asm/signature/SignatureVisitor.classn@Ҵ!In4 p]@J+EҪt\9hVpx(ۡE,s Zy2R^c_Lp!10y06w$y8Utf^ W ygxcX,PM_6tBс޺ 30r-\0O=!Pt^k'G E}Fk˰r$Zmd]j]Mhv5y x9-?糒HS#l5v$t}H<՘{Z9劏E(hZ:R jXKTJ̇:-Ea=tKVDPMj4 >W.x*(XA%i{xBd2 ܛ= h;`hR#J*QXםɯV"6\ ϾC T&Q,Ӹ-a2 v?=`2X#m4zohb7BjXưyePKɈNA N1org/objectweb/asm/signature/SignatureWriter.classSNQm -u)\ZP D~!%hb<-m[G?&\M|8st.JΙo.9 a(Эe6!˕Ym9aİerVϼcJfLmjxyf8+/ 9a({Krtl1]n=WQu0 ge׭=@2;3j{Q^M^o3c߱ cVS qH͎8Mw;zjkVO4#.$&(r/E^u t"ڲ+L7f.: O0!gEބɀl-}q^٪W] teWRM3`2BOzЧ$/ :L )C.2ЮB?@,dcdrd&yu>P *QrqB{-_A}y~k:x`owOa7z j^ nQM˫鄩@@G>":xQh zFtr;~:0}Q7E` Uv#9,R!z1" 7JSfķyEng8WK핽_PKˈNA180+META-INF/MANIFEST.MFPKȈNAXl)aorg/objectweb/asm/AnnotationVisitor.classPKɈNAۖc$ e(yorg/objectweb/asm/AnnotationWriter.classPKɈNA۠( ! org/objectweb/asm/Attribute.classPKɈNA#pY"M1" org/objectweb/asm/ByteVector.classPKɈNAaI` ƟL t1&9[0sq'v"$}1z7f @? 0=6q]z$`t;MQDkfjJ O@Kc;$b͔C/j\fi3)9F2EA+PKɈNA`L-org/objectweb/asm/tree/AbstractInsnNode.classS@7miI[~ X*m)ԟ( $i-  I >8#n:^{F$M!i#HIx?I$HAIŁ;8De{z~ZE®zB(V%f֎)pv%ʚԗ8={e| ܷrB6jvaE$US\ h,"XNUMҙ6ZU{ Ӱw)tp_D9-*m9A9xIRS0풚wq{A9CV* .-;Ց|~#GJޭUk sG?m~tt88ukr8g'8}c Vf}}0y< BzpH.a0 $i@C VH$U5?,I,Q%A;v!O3Fb؃f 9ư>1ۑo2#3Ga8g8ayNk w!O0܍'{JM9/'9ٚ`Rlp`l0rf g{֛PnB;<\ Oh9BW-t`7J(R+nP?4˳d^yF}~==(VB+/#FH?J } ͯ88 K**1 YBtUrcKc@'Yb$eҥ$nK$.ů+RDO*U7*ΆPKɈNA_ &org/objectweb/asm/tree/ClassNode.classVYsU:44$$D',m2a% d`.&4Lfp'@Bq_qAE-|*&1|*/>7sn,L(⡿sY9z7DP4tSp\M {iQYD {͔l~ˡb<xE6t&SXª1ޥkdNQCT3JTߥGw=|b%?^_W^}72s޶%IS5d"_6x='~VT@eU)J{\5@kJ]|/$MEOf+ɘ&A7eӸhT;aڊa7CxLR鴴բ)YL3_GԈ艄:FyDO S'Zd[|mzʪj|>yH_LC }&a'F*&)M+%ݢ+hE/[$TW?XONh9I k[BeCLNO0TT4ڥ5fOhn_La6 j]Rcv&T)d~hYSY ;TGEY|3HaɝKz -,v 222eel񔌍2g,Űà0T*C5U V`UPUxBj`-k !Lİa V&)hfaC+S`6<*Q往E "XX=(^ 2D4# Gtc  C I o0 := 0pMS =TK! >d8A/HۏW 2cH0{)~h e6 ՖlI^7r-7r-w|-m֖mr!itIU H@4?J&ƀo fo ogp.ͫyu<&njH2 _u 28:32uEuyݿi|[HQgN;lh5Nk 7mܼlϣqp/vݦbMO's +dmI?R2:t>$x8)Uk<=8I^wQɴ+OwQæ z.sq[#*:69knϦZ4niry]ArNI|6n5lcB8ɇ5btOC xI|%gqM/ E$#knPKɈNA*{F*org/objectweb/asm/tree/FieldInsnNode.classQJA}e1jܢqˢ&2w#B'&N3aU' FANTpAU꽪gkXbUXZ>fX/Uwmladn\-knWʻ~аZ;,;Lj?t2:e-G12Bbnj_AC80AT .3s'Pe د@E ␛0&fefF3H0 bLI3D>~\b*znpT>OGr~SSG{f\}[Ԁ'BbH5987p[T0&*H!i5$U0|dRYkFf C g"ѧc#Z-$ ܬ`AM,zfvfo`hX I񐴎bwXx% ?>:-1[bMD.)3F|xjOPKɈNA*T&org/objectweb/asm/tree/FrameNode.classS[OQNw@E omkrS,"oO۲biIwՠ$_}1h"J5}onBE̙ c 8CL 3|jJ;TԴ 3eegǃY͚褠*S=z?t2h"cs4L{[?Yּ_ik2t雓kTfK6,+:v9;7N9i9S; b.20쇩#֢>❉ +Pp@!QЩ W^ {j^^QC dvjhGA4kOGQA. A(;уA:">aQň8)N@="8Y:WOOsƋЉVOf: l"VJ:ymKm{M~z~de.WIIH2,[+X aXƘ|E4kJ#Iʍ4 k|セ%CW:]A2OyI.0˸L&Vcĥ"nפJL sÝ",U\y+3% z|B<-@2!_Ik%_K_nBr x$L(wZXq*a0!alۄwb?w_;pUBE/e_ICDB V^&"|}z?"1 Dn,zP9PKɈNA^YV4)org/objectweb/asm/tree/IincInsnNode.classMK@m~[D4[S$iԔdxxPh-(Qllagya?^M![.CB|6o;2;l{C[3i/ s[ {p+uCWAKH+Nh10Z#i; Z=..Ƥ ?)/E)ebkf"k*i$AI#4r2䡤P¦ [ (k(b]v(c`&d+8)rҭNB`q?ǶQjf<Q*/6)@ib EL61ʙcJSTQ[zhTHI,咜PKɈNAV7+org/objectweb/asm/tree/InnerClassNode.classN@@V(^PQb4݋qʄRiG|.V>egİ 1ng;g&ϯW8fȻ}k;3Ox8ev:*|vxGg1y2$ dU @2A0Ce@>G9 P=>XiRaO?t~Gk_fEOL5&6`,08JJJYDUɶ%6زQ.PTT=wj&dh]Mk^3Áwл̰U @Wg9jKO ONQ{oPKɈNA;B6org/objectweb/asm/tree/InsnList$InsnListIterator.classTYOQ.- AAEEv L]ҊZhB4QrC`\5ƒ&M'IQs,.&=|;=73?} `x"'OU\y,@ʮ7oA᭜5-T䬯1C)ܪC06Wٌ&4Ԑ"yZ໅*jDf.3 8zpL<gKcK<0&k{\NxM{7m`4}vJR0FTʋZ[(xTX-: J*5:Z(5N| ;Y?qy-U2H?@t)/&O%5䤗j_[ f&Kb2VV4tmgHaԞ$+2Ԭ>>nyǝu^=b ;rYCjEJ֐P#5^+}IwbAuݧ10C&$Cgf'Б[8Dǒ8I=s=F$|h'qxc3f2c06q7K!ejz?'=Hi5&L@^E{~&a n΅S0FHDE%.ϴB0ybDBaB rb] ;/:+#a=T7{1f۪>ӽgm乡06 @,sT]k/$>o)Nw$D%S3BEW#i"1=Bz.y qAEM5Ƥm!rD,SbV$1nva;E%&73H4B#x**d !>""%6e{L JDLE$ Kru\$XH Vc|aB~y^KSI2-Ƙ6e M~҇,KeORh4 )!.ec[yl#9BQƟ]~ qA-vM_q/YU?PKɈNA )%org/objectweb/asm/tree/InsnNode.classJ@MXmjAS$iԔ Z<(gcKAv柝oُwGfнvuc7 g+Ӡ a~ˌsl,d7ɓ 1þsy-F88Xsc`MEB!Ҩv0g8_z/a͔M8&VLT9X`6дQGæ=uSSӡ=̎[~80ސ;L;6Eȹy܋Dh;"6Îw~ؖ3Cs>:Fk(@":. s ?0sk_He".gkhc9d(XTQԠ !%AÂT*2ֲ(c%K*H7 H\u UVE<3Sl @\DT"S1y.n*BD~e12Q{Y3Py,R3ANbWT.͇'PKɈNAC`)2org/objectweb/asm/tree/InvokeDynamicInsnNode.classN@IB\#$.eBB&5$ȞtJIP3g2K CT)3vxu.Pš .'QQLBT]4.kuc>0Oc7UXwx+wAXw"ՄP,u1 -In2T[t/T0rnGg2=q& t;IjħD eSHޠ |WيKn"ia¨1YmяA|1e^1eV˜&$rFt  k"F{veCq>::Xt2~0DC٠YdqZ(9m&T?(>̨^/@1+TPKɈNAb0})org/objectweb/asm/tree/JumpInsnNode.class.AƿikQbѢnޫHUAr&TwĿx%LH{|̙zC*VLX NP䞸5Ǎ[2ÀU)0[?!E6tqnZK:¯;nXu"t=QiD eg(X=}..?ETw~o?6 eMo/y< 49x΅4JnC:L' T?eXsv {W1 N-H   !a`F308 Lc 2,Y]!cy,R:K+Z)KPRQ]1iO(<ʐ% 5iOXiUT*i#CsTF%+a?c[f$yyڅK(W4PKɈNA"BPV&org/objectweb/asm/tree/LabelNode.classRMO@}8q |4 J #BB"%pAHgvd/TO= hRTA*$3޼y?!e4 e θ#eG_^KrNv|3¶<XGj1Ol6 r9蟸+P2\{dJ\2c; >SNU04h33/eq6g01E y[wB*VTx#Tt, E:Aa5aCC*jʣMlQZ߈AG(S)'AUKgtfLK@rsE:7רMHI,HܖHɼB /`Ώd@G6XMVf5sf./(]w PKɈNA㸛`+org/objectweb/asm/tree/LineNumberNode.classN@`VA#QJ5^R/۲]1!>qxH F.:;;3?؆ɠ*C(ww,;lY5 CܨOꟐo ̋>tyݵK5CS<;lWTa;3!~ =QAدYG0=GK9ڮ;!66)GϹMOVy"Ciȍ1a/9l9뺻SؓoP Hu{ TtD:b("+;f^akv/ וy2ucU -߆<,6flͰ9k{$vEI KiGB]%t.J$JZw#6hjbĊ P'[Xҳase㛆6544liخ` _+c/@k[`:NL\0%0a*&.@ФkhV3 M^/f^fdؿ(MaxŇuH!D{c=6PKɈNA8 vZ1org/objectweb/asm/tree/LookupSwitchInsnNode.classT]O`~^VVU8DYΉ "St T\j]V x.Ba JaPf1Y|<}?m8h I;3ύ`DhR1@ Py=jlt%Q\$w&'cZa۲(a977=4 NlgctAN0JA eUg N^O;\!W.tRWV2gvf,wi*G+TXdWpU3A:a*I؏xN]==a7[n#P 2O-e :BLYbԙ9gRo9F 4l b}}E pMh ^'Ѵe8=h wىI?j(W̳J2Ze8%C2dUp C !3T(hFWp @0\cA> G_>D=x.3K  iD Kly}Jd~#F-|ȏE$BCMi!{QmqkCn0RFJa>) io SZ@:W:jxI~FOncW q-^+'WN.pg_3ʃOjm]ǽ|KG/B#,48W1:QD\-;46,^z)א܌dwS))i-n PKɈNAãЙ+org/objectweb/asm/tree/MethodInsnNode.classQJP=KbkVZm\nE .c^jJMJrU'Gso* 0gNfΙ$oO/6T Jz°YK^:jD~!܎owk=?hY~q["i"QBoCx3y↮Cr=Wlc`t{9$wC)M: z,x9%:jT +|_O]ҿ8MN\>:Fu7` e`X K6x Y$IiLc&M(NߏI1&'l$NOEĨLG,k= L;@9'H3b53C?Db7^Zm1\5Q(Q(P5D_^_rӯG,*PKɈNAT=!)org/objectweb/asm/tree/MethodNode$1.classAK0YjYv=OыP xq˨-EP~(x0{_/'CtLwx< r{/H1O YNWRO: p(XSr<'אan <ՈaqhU_14Ci4@e-m@XtAzš́ jlcF hK TmCq(4aPBKA; l[Bc5 .q~헂PKɈNA8TUx 'org/objectweb/asm/tree/MethodNode.classXy|:q(A\$c` IM9jڤJzGDRIJғ3} =--hAi$3{H+{6C۝ͼyfG$@.WɋSĊ'){;Mk-T ЦH\_-+GHdi!<-鴺d)TG$Rjb1zm,Rz^U%9c4SYcQ.i*0{B TQn='q]xŵD՘p!XOv 9lf6Nted +iKj|;p旛{{6[y9e[tZICKϞ5JMmݼfk<۹q|*CW?>vXԩ-Vf +]ky#TbCeilolO1yT2f/Nw'lofLRlJbW9u1{dDT#$?ɘ(42]`c.u AZ~UY1ڲlXUd-`7ÈY 5`F)[),k˽6uŪx32\m깆dT 8iԈ,J5kVRY[5Ӈ2Cպd4X%cwh&=2X+2ɸPddAe|@e|HE2T2:e)M2elqM22z 32 *  A !:30a6Bgd4E P(8 gTKX;^`e8QrD4+ |6ûJ(Qa6f^!jV[1G6p5ⓘӨTy^> 7'e~c]S_3 cxI3 a+_g_Ə ˏ,ۉ1c ?cxOKv#>.5ǔ9RcWHit)1m.09uy gHBB@oSI.hU"'< *TI&9 XNb:٤΄Lj$UJAoN,,JM5z)&k\~x./ 1jH(䝘SKcsN`}Qރd8:OߩOŔ!}''"91!JfR$ۙJI5}O~GyEbZsH1LB׉:MRmVC^Q1 q|ayz!:0~Zc̹$8f(OZF9Z0,G(..zxY1To'bN?k2S(ӣ@^ͱzJ яp}N(ь0\]NL3,Cst0t[oy% ^ '.Z2'mϹQ֩بL}(VMgzz)!^ԛbzAD)7={~}tds)|t`GE('jm/*Fǣhޢwmc0!j+QAwΉzSk!-<к;{"y6k0٩cr*j^&<6 z uطbN+|lwQn=y [qϟW=m%ݭL%1̓bNL a7Yx%dE):9YRޅpv1fGl55҂SYBRkң룫((@iA0Dj\KB7n?gPDbd8]`?/}B 7SJar KVt%DA)#䶨෽bJ d1~W^iR.,`Q:i%8ۢ27(*wH'?2Z(}~)?uWk@Z=_?N4zިnE^jj>5M{d-pxovo?(N0$+Q͇x8Rӆrf\KTE\,ʛx 6}l]?f^K1蟯`8l ª^Qu7˪0(4D4İ!% 6ٌb[QR4}\LPd EԉJ. T)vK)K)_F狍$bs1\ܤ6riB&?agc՟*$}`0NÙR!6PMZ-ҷjR!yoI[a]'#tDrz;j{zIfhHjfr-[+F{0 W }R%M}ipRz^xMmR-GD@DWD C QB$やs$tEEx%t#2%/U0 è;&99L A!iFqG>px0)8J!/oB]KӸpoo,ԐWf"h31Ds w1w'< ʗh\  V4K6e`0CO(Á#=}FeU1t&5LiHh6G8 `&TT0Q(XU#EsH2ST1'q8buLj'>rvs#zfh"B\,=b(Rp%PKɈNAw~qy)org/objectweb/asm/tree/TypeInsnNode.classQMO@(( "ĂŘO$ R6X-iWɃ&"&mxP̛y`^m0DF͐;92sN.}#2jzsKa׆87;LK49uΰ nqqv۶o 2C۱ sB} Je`Z!e}Aqqq7 ZG`aR|.fɑL*TT,kP%ACL"4 CyYXE! rqZB5COF"[E UV9Zarmo#4$ _(d`*!~Ń^&wkO(W|"LV$$eWd/ 6%>PKɈNAq`P(org/objectweb/asm/tree/VarInsnNode.class_K`Ɵg9L3seE\3JȺ 9_lbތSPCE]nyww猽ǦHVOBq:'uݱյv1߲eGmw;-a2~znr?l \~D'4'A5dqXig{R2~qv_Ȟ~C$<=)@RPPPTAFJ D)#CU,cME+*]kآZ?A_/hRYR@U[ )@l̰aS@$>PKΈNANKpMETA-INF/MANIFEST.MFPKɈNA`L-org/objectweb/asm/tree/AbstractInsnNode.classPKɈNAI:G+org/objectweb/asm/tree/AnnotationNode.classPKɈNA_ &corg/objectweb/asm/tree/ClassNode.classPKɈNA*{F*7org/objectweb/asm/tree/FieldInsnNode.classPKɈNA/Lh&org/objectweb/asm/tree/FieldNode.classPKɈNA*T&org/objectweb/asm/tree/FrameNode.classPKɈNA^YV4)Corg/objectweb/asm/tree/IincInsnNode.classPKɈNAV7+org/objectweb/asm/tree/InnerClassNode.classPKɈNA;B6`org/objectweb/asm/tree/InsnList$InsnListIterator.classPKɈNAd'7 %org/objectweb/asm/tree/InsnList.classPKɈNA )%"org/objectweb/asm/tree/InsnNode.classPKɈNAcaaT(1$org/objectweb/asm/tree/IntInsnNode.classPKɈNAC`)2%org/objectweb/asm/tree/InvokeDynamicInsnNode.classPKɈNAb0})'org/objectweb/asm/tree/JumpInsnNode.classPKɈNA"BPV&)org/objectweb/asm/tree/LabelNode.classPKɈNA!D,(+org/objectweb/asm/tree/LdcInsnNode.classPKɈNA㸛`+I-org/objectweb/asm/tree/LineNumberNode.classPKɈNA.-/org/objectweb/asm/tree/LocalVariableNode.classPKɈNA8 vZ11org/objectweb/asm/tree/LookupSwitchInsnNode.classPKɈNAãЙ+o4org/objectweb/asm/tree/MethodInsnNode.classPKɈNAT=!)Q6org/objectweb/asm/tree/MethodNode$1.classPKɈNA8TUx '7org/objectweb/asm/tree/MethodNode.classPKɈNA$oo3Borg/objectweb/asm/tree/MultiANewArrayInsnNode.classPKɈNA5_0Dorg/objectweb/asm/tree/TableSwitchInsnNode.classPKɈNA}}B.Gorg/objectweb/asm/tree/TryCatchBlockNode.classPKɈNAw~qy)~Iorg/objectweb/asm/tree/TypeInsnNode.classPKɈNAq`P(6Korg/objectweb/asm/tree/VarInsnNode.classPK Lnqp-2015.11/3rdparty/dyncall/.gitignore000644 000765 000024 00000000037 12534342602 021621 0ustar00williamcoledastaff000000 000000 ConfigVars *.o *.obj *.a *.lib nqp-2015.11/3rdparty/dyncall/AUTHORS000644 000765 000024 00000000201 12534342602 020672 0ustar00williamcoledastaff000000 000000 Daniel Adler Tassilo Philipp Olivier Chafik nqp-2015.11/3rdparty/dyncall/BUGS000644 000765 000024 00000000455 12534342602 020320 0ustar00williamcoledastaff000000 000000 - 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. nqp-2015.11/3rdparty/dyncall/CMakeLists.txt000644 000765 000024 00000005773 12534342602 022405 0ustar00williamcoledastaff000000 000000 # Package: dyncall # File: CMakeLists.txt # Description: DynCall Project cmake files # License: # # Copyright (c) 2010 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. # 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 " /c /Fo ") 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) nqp-2015.11/3rdparty/dyncall/ChangeLog000644 000765 000024 00000016331 12534342602 021407 0ustar00williamcoledastaff000000 000000 This file lists big/noteworthy changes, only... Version 0.8 (upcoming) 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 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=" Version 0.1: o initial release nqp-2015.11/3rdparty/dyncall/LICENSE000644 000765 000024 00000001500 12534342602 020632 0ustar00williamcoledastaff000000 000000 Copyright (c) 2007-2012 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. nqp-2015.11/3rdparty/dyncall/Makefile.M000644 000765 000024 00000001521 12534342602 021463 0ustar00williamcoledastaff000000 000000 #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) nqp-2015.11/3rdparty/dyncall/Makefile.embedded000644 000765 000024 00000004622 12534342602 023025 0ustar00williamcoledastaff000000 000000 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 .PHONY: all tests clean install bsd linux linux64 minix-gcc mingw32 osx osx-universal sun sun-64bit sun-gcc sun-gcc-64bit nqp-2015.11/3rdparty/dyncall/Makefile.generic000644 000765 000024 00000002130 12534342602 022700 0ustar00williamcoledastaff000000 000000 .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 nqp-2015.11/3rdparty/dyncall/Nmakefile000644 000765 000024 00000003013 12534342602 021444 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/README000644 000765 000024 00000004627 12534342602 020522 0ustar00williamcoledastaff000000 000000 dyncall - A Generic Dynamic FFI package ======================================= The dyncall software distribution comprises a low-level toolkit for the implementation of Foreign Function Interfaces. It comprises abstractions to the Application Binary Interface of a number of hard- and software platforms. The software package comprises three C libraries, namely: - Library dyncall for making function calls, - Library dyncallback or writing generic callback handlers, and - Library dynload for loading code. The dyncall library provides a portable interface for calling C functions from within dynamic execution environments, such as interpreters or application servers. The dyncallback library allows to implement a callback handler in C for handling arbitrary C callbacks from within dynamic execution environments. The dynload library provides a thin abstraction layer for loading of code and also allows to enumerate the contents of shared librarys or DLLs. Typical applications for dyncall are FFI (foreign function interface) packages for scripting languages to connect with the C/C++ world. The binary footprint of the whole package is approx. 20 kb. Building the library -------------------- Prequisites: - C compiler such as gcc,clang,sunpro or msvc. - Assembler such as gas (GNU/apple), fbe or masm. Supported Architectures and ABIs: --------------------------------- - x86 32/64-bit (cdecl, fastcall, stdcall, C++ this calls, Syscalls) - ARM AArch32 (ARM/Thumb mode, v4t-v7, oabi/eabi, soft/hardfloat ABIs) - MIPS 32/64-bit (o32, n64, eabi) - PowerPC 32-bit (Mac OS X, System V) - Sparc 32/64-bit (v7/8 and v9) 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 library -------------------- Using `homebrewed' configure shell script and GNU/BSD/Sun make system. $ ./configure $ make $ make install Testing: $ make tests $ make run-tests Out-of-source building: ---------------------- $ cd $ /configure --prefix= $ make $ sudo make install Building using CMake -------------------- $ cmake $ make $ sudo make install Please refer to http://www.dyncall.org, dyncall(3), the dyncall manual and platform-specific READMEs under doc/ for more information. nqp-2015.11/3rdparty/dyncall/ToDo000644 000765 000024 00000010216 12534342602 020421 0ustar00williamcoledastaff000000 000000 0.8: ---- - Platforms: * PSP - build it (Tassilo), test (Daniel) - mailing list announcements (html email?) - manual (Tas) - Website: * platform matrix (wie im Handbuch oder Daniels Disse) - 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 build-system: ------------- - cmake mac os x universal binary builds with *.S does not build multiple architectures portasm: -------- - add solaris support for x64 dyncall: -------- - port ppc64 - 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 - add dcArgF, so CallF without the call; this would allow to use sig for building stack, only and is more flexible; bindings would benefit if statically typed as it decouples call from convenient stack building 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 (thunks seem to be working, but maybe buggy) - finish PPC32 callbacks (see bugs section, below) urgent issues: -------------- - finish SPARC/SPARC64 calling conventions in doc's callconv-appendix !!! - finish dyncallback doc, finish dynload doc, add both to troff doc - 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 - consider moving bindings into dyncall/ such that releases include it in the future * or, alternatively, pack them separately and put them on the website, for releases - add note to documentation, that bindings are svn-only ATM - add pcc-support to doc - rename configure to configure.sh (so we would have .sh, .rc and .bat in the future) nice to have: ------------- - enhance manual with a couple of examples (e.g. calling MessageBoxA on windows, etc.) - update: microsoft visual c++ build files - integrate all test suites in solution file - maybe rename DC__Arch_PowerPC to ...PPC32 for coherency reasons (...PPC64)? - 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 apple (osx abi) - 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): ---------------------------------------------- - ppc64 - itanium - 68k, 88k, 6502, etc. - alpha - superh - cell - blackfin - z80 - hppa - vax - atmel avr - propeller - amd29k - arc - seaforth available hardware for outstanding ports: ----------------------------------------- - 68k: Tassilo's old Palm m100 (MC68EZ328 (16MHz)) - sh4: Tassilo's Dreamcast - mips R5900: Daniel's PS2 - mips (?): Daniel's router - sigmatel stmp3550b: Daniel's iPod Nano nqp-2015.11/3rdparty/dyncall/autovar/LICENSE.txt000644 000765 000024 00000001365 12534342602 023142 0ustar00williamcoledastaff000000 000000 Copyright (c) 2011 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. nqp-2015.11/3rdparty/dyncall/autovar/README.txt000644 000765 000024 00000001274 12534342602 023014 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/autovar/autovar_ABI.h000644 000765 000024 00000002454 12534342602 023624 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: autovar File: autovar/autovar_ABI.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/autovar/autovar_ARCH.h000644 000765 000024 00000004051 12534342602 023741 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: autovar File: autovar/autovar_ARCH.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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__) # define ARCH_PPC #elif defined(__ppc64__) || defined(_ARCH_PPC64) || defined(__power64__) # define ARCH_PPC64 #elif defined(__mips64__) || defined(__mips64) # define ARCH_MIPS64 #elif defined(_M_MRX000) || 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(__sparc) && defined(__arch64__) ) # define ARCH_SPARC64 #elif defined(__sparc) # define ARCH_SPARC #endif #endif /* AUTOVAR_ARCH_H */ nqp-2015.11/3rdparty/dyncall/autovar/autovar_CC.h000644 000765 000024 00000002611 12534342602 023511 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: autovar File: autovar/autovar_CC.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/autovar/autovar_OS.h000644 000765 000024 00000004525 12534342602 023553 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: autovar File: autovar/autovar_OS.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/autovar/autovar_OSFAMILY.h000644 000765 000024 00000002337 12534342602 024454 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: autovar File: autovar/autovar_OSFAMILY.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/buildsys/cmake/Modules/FindDynCall.cmake000644 000765 000024 00000003031 12534342602 027305 0ustar00williamcoledastaff000000 000000 # - 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 # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/buildsys/cmake/Modules/FindDynCallback.cmake000644 000765 000024 00000003152 12534342602 030132 0ustar00williamcoledastaff000000 000000 # - 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 # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/buildsys/cmake/Modules/FindDynLoad.cmake000644 000765 000024 00000003123 12534342602 027313 0ustar00williamcoledastaff000000 000000 # - 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 # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/buildsys/cmake/Modules/UseLATEX.cmake000644 000765 000024 00000101026 12534342602 026513 0ustar00williamcoledastaff000000 000000 # 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( # [BIBFILES ] # [INPUTS ] # [IMAGE_DIRS] # [IMAGES] # [CONFIGURE] # [DEPENDS] # [USE_INDEX] [USE_GLOSSARY] # [DEFAULT_PDF] [MANGLE_TARGET_NAMES]) # Adds targets that compile . 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 .dvi # pdf: Makes .pdf using pdflatex. # safepdf: Makes .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 .ps # html: Makes .html # auxclean: Deletes .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 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}(\n [BIBFILES ...]\n [INPUTS ...]\n [IMAGE_DIRS ...]\n [IMAGES \n [CONFIGURE ...]\n [DEPENDS ...]\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) nqp-2015.11/3rdparty/dyncall/buildsys/dynmake/Makefile.base.M000644 000765 000024 00000003624 12534342602 025670 0ustar00williamcoledastaff000000 000000 #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 nqp-2015.11/3rdparty/dyncall/buildsys/dynmake/dynmake.bat000644 000765 000024 00000000142 12534342602 025234 0ustar00williamcoledastaff000000 000000 cl /nologo /DMAKE_CMD_%~n2 /EP Makefile.M 1> Makefile.dynmake %2 /NOLOGO /f Makefile.dynmake %1 nqp-2015.11/3rdparty/dyncall/buildsys/dynmake/dynmake.sh000644 000765 000024 00000000271 12534342602 025103 0ustar00williamcoledastaff000000 000000 #!/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 nqp-2015.11/3rdparty/dyncall/buildsys/lua/README.txt000644 000765 000024 00000000131 12534342602 023741 0ustar00williamcoledastaff000000 000000 This helper folder is used to bootstrap lua on platforms where there is no lua at all. nqp-2015.11/3rdparty/dyncall/buildsys/lua/bootstrap.sh000755 000765 000024 00000000631 12534342602 024624 0ustar00williamcoledastaff000000 000000 #!/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}) nqp-2015.11/3rdparty/dyncall/buildsys/lua/cleanup.sh000755 000765 000024 00000000105 12534342602 024232 0ustar00williamcoledastaff000000 000000 #!/bin/sh if [ -d lua-5.1.4 ]; then (cd lua-5.1.4;make clean) fi nqp-2015.11/3rdparty/dyncall/buildsys/lua/mkfile000644 000765 000024 00000002263 12534342602 023445 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2013 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/buildsys/lua/setenv.sh000644 000765 000024 00000000055 12534342602 024110 0ustar00williamcoledastaff000000 000000 # PATH=$PWD/lua-5.1.4/src:$PATH export PATH nqp-2015.11/3rdparty/dyncall/buildsys/mk/app.mk000644 000765 000024 00000002333 12534342602 023210 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/buildsys/mk/dirs.mk000644 000765 000024 00000002211 12534342602 023364 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 } nqp-2015.11/3rdparty/dyncall/buildsys/mk/epilog.mk000644 000765 000024 00000002620 12534342602 023706 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/buildsys/mk/lib.mk000644 000765 000024 00000002130 12534342602 023171 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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'} nqp-2015.11/3rdparty/dyncall/buildsys/mk/pcc.mk000644 000765 000024 00000007045 12534342602 023202 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/buildsys/mk/prolog.mk000644 000765 000024 00000002406 12534342602 023733 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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: , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/buildsys/nmake/epilog.nmake000644 000765 000024 00000002241 12534342602 025055 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/buildsys/nmake/prolog.nmake000644 000765 000024 00000004176 12534342602 025111 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/buildsys/nmake/tool_gcc.nmake000644 000765 000024 00000005044 12534342602 025373 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 $< nqp-2015.11/3rdparty/dyncall/buildsys/nmake/tool_msvc.nmake000644 000765 000024 00000003600 12534342602 025603 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 $< nqp-2015.11/3rdparty/dyncall/buildsys/scripts/batch-build-linux.sh000644 000765 000024 00000000374 12534342602 027031 0ustar00williamcoledastaff000000 000000 # Build libraries. make -f Makefile.generc clean all # Build tests: dynload tests need '-ldl'. ( cd test ; make -f Makefile.generic clean ) ( cd test ; LDFLAGS=-ldl make -f Makefile.generic all-dynload ) ( cd test ; make -f Makefile.generic all ) nqp-2015.11/3rdparty/dyncall/buildsys/scripts/batch-build-minix.sh000644 000765 000024 00000000510 12534342602 027006 0ustar00williamcoledastaff000000 000000 #!/bin/sh # ---------------------------------------------------------- # # 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 nqp-2015.11/3rdparty/dyncall/buildsys/scripts/batch-build-psp.sh000644 000765 000024 00000000536 12534342602 026474 0ustar00williamcoledastaff000000 000000 #!/bin/sh # ------------------------------------------------------------- # # DynCall build script using Makefile.generic for PSP toolchain # # ------------------------------------------------------------- # # build libs and tests, but exclude dynload ./configure --target=PSP make libdyncall libdyncallback tests-libdyncallback tests-libdyncall nqp-2015.11/3rdparty/dyncall/buildsys/scripts/conf-nds.bat000644 000765 000024 00000003040 12534342602 025352 0ustar00williamcoledastaff000000 000000 @ECHO OFF REM /////////////////////////////////////////////////////////////////////////// REM REM Copyright (c) 2007-2009 Daniel Adler , REM Tassilo Philipp 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 nqp-2015.11/3rdparty/dyncall/buildsys/scripts/setenv-cross-ios.sh000644 000765 000024 00000000333 12534342602 026734 0ustar00williamcoledastaff000000 000000 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" nqp-2015.11/3rdparty/dyncall/buildsys/scripts/setenv-sdk-ios.sh000644 000765 000024 00000001332 12534342602 026364 0ustar00williamcoledastaff000000 000000 #!/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} nqp-2015.11/3rdparty/dyncall/buildsys/vs2005/dyncall/dyncall.vcproj000644 000765 000024 00000011623 12534342602 026732 0ustar00williamcoledastaff000000 000000 nqp-2015.11/3rdparty/dyncall/buildsys/vs2005/test_plain/test_plain.vcproj000644 000765 000024 00000010077 12534342602 030164 0ustar00williamcoledastaff000000 000000 nqp-2015.11/3rdparty/dyncall/buildsys/vs2005/vs2005.sln000644 000765 000024 00000002745 12534342602 024113 0ustar00williamcoledastaff000000 000000  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 nqp-2015.11/3rdparty/dyncall/configure000755 000765 000024 00000010101 12534342602 021531 0ustar00williamcoledastaff000000 000000 #!/bin/sh C=Makefile.config printf "# auto-generated by $0\n" >$C while [ $# -gt 0 ]; do X=$1 shift 1 # Shell common: case $X in --help|-h) cat < var1=name1.. --prefix= --target= MacOSX,iOS,iPhoneSimulator --sdk= 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-` ;; # 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 "LDFLAGS=-lm -ldl\n" >>$C ;; OpenBSD) printf "LDFLAGS=-lm\n" >>$C ;; DragonFly) if [ -z "${CFLAGS}" ]; then printf "CFLAGS=-fPIC\n" >>$C fi ;; NetBSD) if [ -z "${CFLAGS}" ]; then printf "CFLAGS=-fPIC\n" >>$C fi printf "LDFLAGS=-lm\n" >>$C ;; FreeBSD) if [ -z "${CFLAGS}" ]; then printf "CFLAGS=-fPIC\n" >>$C fi printf "LDFLAGS=-lm\n" >>$C printf "RM=rm -f\n" >>$C ;; MacOSX|Darwin) # MacPorts libtool cannot do -static, use the system libtool printf "AR=/usr/bin/libtool\n" >>$C printf "ARFLAGS=-static -o\n" >>$C 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.[78].*) ARCHS="-arch x86_64 -arch i386" ;; esac printf "ASFLAGS=${ARCHS}\n" >>$C printf "CFLAGS=${ARCHS}\n" >>$C printf "CXXFLAGS=${ARCHS}\n" >>$C else SDKROOT="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${SDK}.sdk" printf "CFLAGS=-isysroot ${SDKROOT}\n" >>$C printf "CXXFLAGS=-isysroot ${SDKROOT}\n" >>$C fi ;; iPhoneOS|iOS) SDKROOT="`xcode-select -print-path`/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDK}.sdk" case "${SDK}" in 4.3) ARCHS="-arch armv6" ;; 6.1) ARCHS="-arch armv7" ;; esac 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) SDKROOT="`xcode-select -print-path`/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDK}.sdk" 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) X=`type CC` if [ $? -eq 0 ]; then printf "CXX=CC\n" >>$C fi printf "LDLIBS=-lm\n" >>$C ;; Minix) printf "CC=gcc\n" >>$C printf "CXX=g++\n">>$C printf "AR=ar\n" >>$C ;; PSP) printf "CC=psp-gcc\n" >>$C printf "CXX=psp-g++\n">>$C printf "AR=psp-ar\n" >>$C ;; esac BLDTOP="$PWD" # get full path case $0 in /*) FULL=$0 ;; *) FULL=$PWD/$0 ;; esac 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 <$BLDDIR/Makefile VPATH = $SRCDIR include $BLDTOP/Makefile.config include \${VPATH}/Makefile.generic EOF done nqp-2015.11/3rdparty/dyncall/configure.bat000755 000765 000024 00000011771 12534342602 022314 0ustar00williamcoledastaff000000 000000 @ECHO OFF REM /////////////////////////////////////////////////////////////////////////// REM REM Copyright (c) 2007-2009 Daniel Adler , REM Tassilo Philipp 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 ) ) nqp-2015.11/3rdparty/dyncall/doc/Description.txt000644 000765 000024 00000002256 12534342602 023427 0ustar00williamcoledastaff000000 000000 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. nqp-2015.11/3rdparty/dyncall/doc/License.txt000644 000765 000024 00000001500 12534342602 022515 0ustar00williamcoledastaff000000 000000 Copyright (c) 2007-2012 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. nqp-2015.11/3rdparty/dyncall/doc/Makefile.generic000644 000765 000024 00000000060 12534342602 023445 0ustar00williamcoledastaff000000 000000 .PHONY: all all clean: cd manual && ${MAKE} $@ nqp-2015.11/3rdparty/dyncall/doc/README-Cross.txt000644 000765 000024 00000001061 12534342602 023161 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/doc/README.CMake000644 000765 000024 00000003662 12534342602 022244 0ustar00williamcoledastaff000000 000000 Notes on building DynCall with CMake ==================================== Build with CMake (in-source) ---------------------------- cd 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= 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 nqp-2015.11/3rdparty/dyncall/doc/README.Generic000644 000765 000024 00000011002 12534342602 022623 0ustar00williamcoledastaff000000 000000 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=] Embedded Mode ------------- Makefile.generic makefiles are taken "as-is" without the need for extra configuration. = ... bsdmake -f Makefile.generic = ... gmake -f Makefile.generic (Note that setting an env var as above (=) 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. $ LDFLAGS="-lm -ldl" make -f Makefile.generic Configure Mode -------------- Usage: cd # build-dir can be arbitrary ..//configure [--prefix=] make make install [DESTDIR=] 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, LDFLAGS 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 ; LDFLAGS="-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 ; LDFLAGS="-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 ; LDFLAGS="-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. LDFLAGS 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= -> Makefile DESTDIR=variable make -f Makefile.generic DESTDIR= Todo: ----- - sun's make: CXX does not exist.. no rule for *.cpp files but *.cc. nqp-2015.11/3rdparty/dyncall/doc/README.MacOSX000644 000765 000024 00000001070 12534342602 022345 0ustar00williamcoledastaff000000 000000 Building DynCall on Mac OS X ============================ The build system supports universal binaries (including static libraries). In addition, the desired SDK can be choosen. Configure switches related to Mac OS X: Operating System: --target=MacOSX (auto-detect) SDK: --sdk= (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 nqp-2015.11/3rdparty/dyncall/doc/README.Minix000644 000765 000024 00000001647 12534342602 022351 0ustar00williamcoledastaff000000 000000 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... nqp-2015.11/3rdparty/dyncall/doc/README.NDS000644 000765 000024 00000001251 12534342602 021700 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/doc/README.PSP000644 000765 000024 00000001351 12534342602 021717 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/doc/README.SunOS000644 000765 000024 00000004654 12534342602 022275 0ustar00williamcoledastaff000000 000000 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= 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! nqp-2015.11/3rdparty/dyncall/doc/README.Windows000644 000765 000024 00000002222 12534342602 022705 0ustar00williamcoledastaff000000 000000 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 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: -------------------------------------------------- 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. nqp-2015.11/3rdparty/dyncall/doc/README.embedded000644 000765 000024 00000005744 12534342602 023020 0ustar00williamcoledastaff000000 000000 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 Building the tests: ------------------- $ cd test ; make -f Makefile.embedded 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= VAR2= .. make -f Makefile.embedded 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. nqp-2015.11/3rdparty/dyncall/doc/README.iOS000644 000765 000024 00000002403 12534342602 021746 0ustar00williamcoledastaff000000 000000 Building DynCall for apple's iOS platforms (iPod touch, iPhone, iPad) ===================================================================== Environment Setup for Cross-Compilation using iPhone SDK: $ source ./buildsys/scripts/setenv-sdk-ios.sh Package Configuration $ ./configure --target=iOS --sdk=. Tested SDK Versions 2.0 .. 4.0 , 6.1 Building $ make Details: Useful configure switches: --target=[iOS|iPhoneSimulator] --sdk= (tested versions 2.0..4.0, 6.1) Supported Tool-chains gcc and llvm-gcc Building 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 Tested Mac OS X platforms: 10.[7,8] Tested Xcode toolchains: 4.6 Building 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 3.2 as default, can be changed in 'setenv-cross-ios.sh'. nqp-2015.11/3rdparty/dyncall/doc/manual/CMakeLists.txt000644 000765 000024 00000000575 12534342602 024422 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/doc/manual/Makefile.generic000644 000765 000024 00000000354 12534342602 024730 0ustar00williamcoledastaff000000 000000 all: manual.pdf manual.pdf: cd ${VPATH} && pdflatex -output-directory=${PWD} manual.tex cd ${VPATH} && pdflatex -output-directory=${PWD} manual.tex clean: for i in pdf aux lof log lol lot out toc; do rm -f manual.$$i || true; done nqp-2015.11/3rdparty/dyncall/doc/manual/Nmakefile000644 000765 000024 00000002277 12534342602 023501 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/doc/manual/callconvs/callconv_arm32.tex000644 000765 000024 00000035072 12534342602 027175 0ustar00williamcoledastaff000000 000000 % % Copyright (c) 2007,2010 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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-15:\\ \\ \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 nqp-2015.11/3rdparty/dyncall/doc/manual/callconvs/callconv_mips.tex000644 000765 000024 00000014434 12534342602 027220 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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,\$8,\$9} & Integer temporaries \\ {\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} nqp-2015.11/3rdparty/dyncall/doc/manual/callconvs/callconv_mips64.tex000644 000765 000024 00000002360 12534342603 027366 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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. nqp-2015.11/3rdparty/dyncall/doc/manual/callconvs/callconv_ppc32.tex000644 000765 000024 00000027206 12534342603 027201 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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". It uses Big Endian (MSB). \item Linux PPC 32-bit ABI is specified in "LSB for PPC 2.1" 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} supports PowerPC (32bit) Big Endian (MSB) on Darwin (tested on Apple Mac OS X) and System V ABI systems (Linux, NetBSD, etc.). \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 \product{dyncallback} is buggy. \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} nqp-2015.11/3rdparty/dyncall/doc/manual/callconvs/callconv_ppc64.tex000644 000765 000024 00000003071 12534342603 027200 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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} For in-depth details about the PowerPC (64bit) calling convention, take a look at Apple's official documentation \cite{ppcMacOSX}. @@@ \paragraph{\product{dyncall} support} @@@ \paragraph{Registers and register usage} 64bit PPC: only low 32 bits are saved and preserved \paragraph{Parameter passing} @@@ \paragraph{Return values} @@@ \paragraph{Stack layout} @@@ nqp-2015.11/3rdparty/dyncall/doc/manual/callconvs/callconv_sparc.tex000644 000765 000024 00000013123 12534342603 027353 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2012 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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} nqp-2015.11/3rdparty/dyncall/doc/manual/callconvs/callconv_sparc64.tex000644 000765 000024 00000003102 12534342603 027521 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2012 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/doc/manual/callconvs/callconv_x64.tex000644 000765 000024 00000026350 12534342603 026672 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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} nqp-2015.11/3rdparty/dyncall/doc/manual/callconvs/callconv_x86.tex000644 000765 000024 00000073311 12534342603 026675 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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} nqp-2015.11/3rdparty/dyncall/doc/manual/dyncall_logo.eps000644 000765 000024 00000053777 12534342603 025056 0ustar00williamcoledastaff000000 000000 %!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 nqp-2015.11/3rdparty/dyncall/doc/manual/dyncall_logo.pdf000644 000765 000024 00000047447 12534342603 025035 0ustar00williamcoledastaff000000 000000 %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 nqp-2015.11/3rdparty/dyncall/doc/manual/dyncall_logo.svg000644 000765 000024 00000052533 12534342603 025053 0ustar00williamcoledastaff000000 000000 image/svg+xml generated by pstoedit version:3.45 from dyncall_logo.eps nqp-2015.11/3rdparty/dyncall/doc/manual/dyncall_watermark.eps000644 000765 000024 00000073643 12534342603 026105 0ustar00williamcoledastaff000000 000000 %!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 nqp-2015.11/3rdparty/dyncall/doc/manual/dyncall_watermark.pdf000644 000765 000024 00000013431 12534342603 026054 0ustar00williamcoledastaff000000 000000 %PDF-1.4 % 3 0 obj << /Length 4 0 R /Filter /FlateDecode /Type /XObject /Subtype /Form /BBox [ 0 0 595.275574 841.889771 ] /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 2 0 R >> stream x͚&q~~j_\:Ƞ\Apf J^_EVY8 řk%22rgG=6\'׿L\9|<;zI{3U-2kL]Gz撜YICڼ΄;H^"KjϢu5|Tvcdݣk٥ iC[[{|k+=yDc?݊Yj:Q['Ec4yܻ?V4{#K52SiZl]d.UQ#ht%=.mf}K*?dtݾ͗tesa[$ȡ)K?: vgJ6Ǭ]/˶YCm<#;߽ΧȶR[[-J9p,6dTg(Y"@R:NKl{, 4pئOUⵗ'P~( ]t, 6VI(<)r-RЙ!fbuEXѵ!V8ahX1R[)N76\0MpRctp 12\/ I׋ISp) \fcRI~6YPp {2"U>eVݲ#R rmh.%]m!W_ HR$ F(Gui]YMIb1NBA&|5i!RP&-J-/5-=}r"F5Rg;g7D:D$e?ίM>\?jD h=֥#@ tt|BwaDl .{g{/qEb^5N| :MiC*It?E͙| ;S 6xf70Y۟pggmf=+#heW0d4PubrCGWg^bي%[QuCqo'{ kQA^}q^{ʌNRK'4_&*Y}fM%F5VhuqA"U$Ƹa)if[ᵀRiԀ9ش9D5cU)WԖLp PSjS-q{h 6tk$-GęEPЈl (^$KWU _I)6*HOnu B`SQmM(0./XP"m"W+T[*b8EFÁmP1Y W$N詤PO*#إSOb0ΦL8?YB4M妘TLJ qJ*QU۾+EVDDOv gSԫd|)B^ZbSuGt_^\PX](( FVǩ"Z%+DZ[98lȔ ?DIM[q0L٢$GthR76|>7jɀ,B:1qirÈϠ%)˙Y,QBkTf(g=\t%M{B o ZqKŧ*4z;(DהQ]V᧫mꡩD&pA=JEH_7ʊ~Sḧ\`j;dN`$:gPXxk1kc68yf{B@>e2fdǸʖ۲"ݧBQ+%ye(ns͕Kzq^0Tab ynn=CX2ƅ-L@яuV5.S"vEh)1rW1kOEAŀcsA+ 0M|cƽVs 1Kj.>ԛ BS+躳sR㈋Q5siYd p ) L4Y!Ƣ#@mYWWu1(3hJe@c*Mqtp HUdG_![MB1?tD]DIF*WW)ʆ'&)xr:)mL7ϹOb3%^rJ@9% Dfbpj\::WL8Xu18&|?2B֘BUv:)\ &g<gʦ^^]P-[-7pE'ǘ^&A}6`D}FNz<d+DJ¢0!ަ}iDq3 ;MNn5R]Q4.ĂC QLgY:?~ 9@u LbpތV1 y;)ꠍ48`s}'!^pTlJPFַ_p͆15'0SŀxB@f r@h}KDS9J9pD`;yj8iW;,2?K%lHܓKgq+Mc)Ih|JxwzY:v!lDbh@z櫨j 6u0Ahގv_2,C5"Tuz0Õn£TOF^B64&Wwv@C],'>ܡ,ᑼ;#xE@" 䒬۷>ٗ [Qɣ| ^:ncjh!ЊK+bxᴺTr&]bg.)'tBЀ/ hשx[ 9%`bI6:ݷS$e7 0ye՚v#lQ' ;7KVڧѽb ֆ>j搨~Ω( qӎJ 9I9$a*AC* FDyz0ϸy rdC*C) Lv$KЕ;b>f{#1c q &wy"|:_'y7%:6yB yrA'P>Q-CD`>[,c<!2Z1ivbyCnUqn&9VeKFs]^³\}P $B5iQ3ybv]/,7)bNs{1Rs1;UUJ~j Bp$ vx^٬VD7]s f# P(~ѷ[**@ȝ'b;U=utw/44n\tULq#}6Y5ԃʼvN‡2)1US3ɍlw@[[5M 9܇0[1c|2;IR09+̠;7f$~$):f-тbjN)# 7nJJ.aMWwJ"k(69)7[tLf=Znd}Έ6ݚ©wFx?#ȼG'MOyGZhǚ!({7_Q$:WZ4~=6t_uߢDHd\6Hgv]gT,#8=_Eۼ}X߻/Gୡoei3gkg-;"oKc[Xa]R^oH@7h*{m9Et$+T˲]^•fV*q7n}54Mp3 85$M;E6[Ae{:ә_p!g! &;0Rp}%8p/y=\񽁉 9=bazHyezRtt{Ve2Uh[MjѺާӈOmK)k[4#,ݪ O[0K2?kQ8i1[Cqف+qB;2.(ZcDȬ~+ZqL3\Ns鎑@\/cdȌeŗ <0Z>N3456D'{LPnjvUFRcKJF&`|OZm\p~H=>'jwWvGjk~!$u2i}RdZ?+ Uݼ endstream endobj 4 0 obj 4850 endobj 2 0 obj << /ExtGState << /a0 << /CA 1 /ca 1 >> >> >> endobj 5 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 595.275574 841.889771 ] /Contents 3 0 R /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 2 0 R >> endobj 1 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 6 0 obj << /Creator (cairo 1.5.15 (http://cairographics.org)) /Producer (cairo 1.5.15 (http://cairographics.org)) >> endobj 7 0 obj << /Type /Catalog /Pages 1 0 R >> endobj xref 0 8 0000000000 65535 f 0000005427 00000 n 0000005141 00000 n 0000000015 00000 n 0000005118 00000 n 0000005213 00000 n 0000005492 00000 n 0000005619 00000 n trailer << /Size 8 /Root 7 0 R /Info 6 0 R >> startxref 5671 %%EOF nqp-2015.11/3rdparty/dyncall/doc/manual/dyncall_watermark.svg000644 000765 000024 00000036465 12534342603 026116 0ustar00williamcoledastaff000000 000000 generated by pstoedit version:3.45 from dyncall_logo.eps nqp-2015.11/3rdparty/dyncall/doc/manual/manual.tex000644 000765 000024 00000011505 12534342603 023655 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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% } % Packages. \usepackage{a4wide} \usepackage{multirow} \usepackage{hhline} \usepackage{color} \usepackage{colortbl} \usepackage{bigdelim} \usepackage{rotating} \usepackage{graphicx} \usepackage{moreverb} \usepackage{listings} \usepackage{hyperref} \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. \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} % 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{\markimpl}{\cellcolor{green}} \newcommand{\marknimp}{\cellcolor{red}} \newcommand{\markunkn}{\cellcolor{yellow}} \newcommand{\marknotx}{\cellcolor{gray1}} % table of contents config \setcounter{tocdepth}{3} \begin{document} \input{manual_title} \newpage \tableofcontents \newpage \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} nqp-2015.11/3rdparty/dyncall/doc/manual/manual_bindings.tex000644 000765 000024 00000021365 12534342603 025537 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 Java\cite{Java}, Lua\cite{Lua}, Python\cite{Python}, R\cite{R}, Ruby\cite{Ruby} and the 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()} and \capi{dcCallFV()} 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{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} \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} nqp-2015.11/3rdparty/dyncall/doc/manual/manual_build.tex000644 000765 000024 00000015331 12534342603 025035 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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, SunPro or Microsoft C/C++ compiler) \item C++ compiler to build the optional test cases (GCC, 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 & 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,... \\ {\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= make \end{lstlisting} nqp-2015.11/3rdparty/dyncall/doc/manual/manual_cc.tex000644 000765 000024 00000003717 12534342603 024330 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_mips}\newpage \input{callconvs/callconv_sparc}\newpage \input{callconvs/callconv_sparc64} nqp-2015.11/3rdparty/dyncall/doc/manual/manual_design.tex000644 000765 000024 00000004304 12534342603 025205 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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). nqp-2015.11/3rdparty/dyncall/doc/manual/manual_devel.tex000644 000765 000024 00000011535 12534342603 025037 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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} nqp-2015.11/3rdparty/dyncall/doc/manual/manual_dyncall_api.tex000644 000765 000024 00000024745 12534342603 026226 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2010 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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{sourecode} \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{functioncalls} \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_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_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\\ \hline \end{tabular*} \caption{CallVM calling convention modes} \label{functioncalls} \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 calls (ANSI C ellipsis interface)} \paragraph{Functions} \begin{lstlisting}[language=c] 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. The return value will be stored in what \lstinline{result} points to.. For more information about the signature format, refer to \ref{sigchar}. nqp-2015.11/3rdparty/dyncall/doc/manual/manual_dyncallback_api.tex000644 000765 000024 00000010121 12534342603 027026 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2013 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 either 'i' or 'f' depending on whether the value stored in \capi{result} is of integral or floating point type. nqp-2015.11/3rdparty/dyncall/doc/manual/manual_dynload_api.tex000644 000765 000024 00000003722 12534342603 026222 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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. nqp-2015.11/3rdparty/dyncall/doc/manual/manual_epilog.tex000644 000765 000024 00000011020 12534342603 025204 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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}. nqp-2015.11/3rdparty/dyncall/doc/manual/manual_literature.tex000644 000765 000024 00000013465 12534342603 026124 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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{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{x86cdecl} cdecl calling conventio / 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://tinyurl.com/2rxb3a} \bibitem{AAPCS} Procedure Call Standard for the ARM Architecture\\ \url{http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C\_aapcs.pdf} \bibitem{armeabi} Debian ARM EABI Port Wiki\\ \url{http://wiki.debian.org/ArmEabiPort} \bibitem{x64Win} MSDN: x64 Software Conventions\\ \url{http://tinyurl.com/2k3tfw} \bibitem{x64SysV} System V Application Binary Interface - AMD64 Architecture Processor Supplement\\ \url{http://tinyurl.com/2j5tex} \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{http://tinyurl.com/s7f85} \bibitem{ppc32LSB} Linux Standard Base Core Specification for PPC32 3.2 - Chapter 8. Low Level System Information\\ \url{http://tinyurl.com/9ttwcy} \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{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} nqp-2015.11/3rdparty/dyncall/doc/manual/manual_motivation.tex000644 000765 000024 00000014157 12534342603 026134 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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} nqp-2015.11/3rdparty/dyncall/doc/manual/manual_overview.tex000644 000765 000024 00000032644 12534342603 025612 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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, 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 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] library(rdyncall) call.as.sqrt <- 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.\\ Please note that a green cell doesn't imply that all existing calling conventions/features/build tools are supported for that platform (but the most important). For details about the support consult the appendix. \begin{table}[h] \begin{tabular}{r|*{14}{c}} \marknull & & & & & & & & & & & & & & \\ & \ninetyb {\bf Alpha}\ninetye & \ninetyb {\bf ARM}\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 & \markunkn & \marknotx & \marknimp & \marknotx & \marknotx & \marknotx & \marknotx & \markimpl & \markimpl & \marknimp & \marknotx & \marknotx \\ {\bf Minix} & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \markimpl & \marknotx & \marknotx & \marknotx & \marknotx \\ {\bf Linux} & \marknimp & \markimpl & \marknotx & \marknotx & \marknotx & \markimpl & \marknimp & \marknotx & \marknotx & \markimpl & \markimpl & \marknotx & \markimpl & \markimpl \\ {\bf Mac OS X/iOS/Darwin} & \marknotx & \markimpl & \marknotx & \marknotx & \marknotx & \markimpl & \marknimp & \marknotx & \marknotx & \markimpl & \markimpl & \marknotx & \marknotx & \marknotx \\ {\bf FreeBSD} & \marknimp & \markimpl & \markunkn & \markunkn & \marknimp & \markimpl & \marknimp & \marknotx & \marknotx & \markimpl & \markimpl & \marknimp & \markunkn & \markunkn \\ {\bf NetBSD} & \marknimp & \markimpl & \markimpl & \markunkn & \marknimp & \markimpl & \marknimp & \marknimp & \marknimp & \markimpl & \markimpl & \marknimp & \markimpl & \markunkn \\ {\bf OpenBSD} & \marknimp & \markunkn & \markunkn & \markimpl & \marknimp & \markunkn & \marknimp & \marknimp & \marknimp & \markimpl & \markimpl & \marknimp & \markimpl & \markimpl \\ {\bf DragonFlyBSD} & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \markimpl & \markimpl & \marknotx & \marknotx & \marknotx \\ {\bf Solaris} & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \markimpl & \markimpl & \marknotx & \markimpl & \markimpl \\ {\bf Plan 9} & \marknimp & \marknimp & \marknimp & \marknotx & \marknotx & \marknimp & \marknotx & \marknotx & \marknotx & \markimpl & \marknimp & \marknotx & \marknimp & \marknotx \\ {\bf Haiku/BeOS} & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \markimpl & \marknotx & \marknotx & \marknotx & \marknotx \\ {\bf Playstation Portable} & \marknotx & \marknotx & \markimpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\ {\bf Nintendo DS} & \marknotx & \markimpl & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx & \marknotx \\ \end{tabular} \caption{Supported platforms} \end{table} nqp-2015.11/3rdparty/dyncall/doc/manual/manual_title.tex000644 000765 000024 00000004417 12534342603 025062 0ustar00williamcoledastaff000000 000000 %////////////////////////////////////////////////////////////////////////////// % % Copyright (c) 2007,2009 Daniel Adler , % Tassilo Philipp % % Permission to use, copy, modify, and distribute this software for any % purpose with or without fee is hereby granted, provided that the above % copyright notice and this permission notice appear in all copies. % % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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.7\\% \ \\% \ \\% \ \\% 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} nqp-2015.11/3rdparty/dyncall/dynMakefile000644 000765 000024 00000000310 12534342603 021777 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/dyncall/CMakeLists.txt000644 000765 000024 00000003020 12534342603 024013 0ustar00williamcoledastaff000000 000000 # Package: dyncall # File: dyncall/CMakeLists.txt # Description: DynCall library cmake files # License: # # Copyright (c) 2010 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. # 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 ) nqp-2015.11/3rdparty/dyncall/dyncall/DynCallConfig.cmake000644 000765 000024 00000000132 12534342603 024732 0ustar00williamcoledastaff000000 000000 set(DYNCALL_INCLUDE_DIRS ${DynCall_SOURCE_DIR}/dyncall) set(DYNCALL_LIBRARIES dyncall_s) nqp-2015.11/3rdparty/dyncall/dyncall/Makefile.M000644 000765 000024 00000000506 12534342603 023114 0ustar00williamcoledastaff000000 000000 #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) nqp-2015.11/3rdparty/dyncall/dyncall/Makefile.embedded000644 000765 000024 00000001627 12534342603 024456 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/dyncall/Makefile.generic000644 000765 000024 00000001152 12534342603 024332 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/dyncall/Nmakefile000644 000765 000024 00000003774 12534342603 023111 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncall/README-Developer.txt000644 000765 000024 00000002164 12534342603 024704 0ustar00williamcoledastaff000000 000000 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__.[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 nqp-2015.11/3rdparty/dyncall/dyncall/README.txt000644 000765 000024 00000002154 12534342603 022760 0ustar00williamcoledastaff000000 000000 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__.[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_.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 nqp-2015.11/3rdparty/dyncall/dyncall/TODO000644 000765 000024 00000001046 12534342603 021751 0ustar00williamcoledastaff000000 000000 - 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. nqp-2015.11/3rdparty/dyncall/dyncall/dynMakefile000644 000765 000024 00000000316 12534342603 023433 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/dyncall/dyncall.3000644 000765 000024 00000014030 12534342603 022770 0ustar00williamcoledastaff000000 000000 .\" Copyright (c) 2007-2013 Daniel Adler , .\" Tassilo Philipp .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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 dcCallF and .Fn dcVCallF can be used to issue a printf-style function call, using a signature string encoding the argument types and return type. 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall.h000644 000765 000024 00000012210 12534342603 023053 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall.h Description: public header for library dyncall License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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_SYS_DEFAULT 200 #define DC_CALL_SYS_X86_INT80H_LINUX 201 #define DC_CALL_SYS_X86_INT80H_BSD 202 /* 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_alloc.h000644 000765 000024 00000002302 12534342603 024226 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_alloc.h Description: heap memory management interface (header only) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #define dcAllocMem malloc #endif #ifndef dcFreeMem #define dcFreeMem free #endif #endif /* DYNCALL_ALLOC_H */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_api.c000644 000765 000024 00000007247 12534342603 023715 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_api.c Description: C interface to call vm License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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)"; } } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call.S000644 000765 000024 00000004554 12534342603 024035 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call.S Description: assembly call kernel, auto-selected by gcc / Plan9 build system License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_PowerPC) # include "dyncall_call_ppc32.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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_arm32_arm.S000644 000765 000024 00000006054 12534342603 025675 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_arm32_arm.S Description: Call Kernel for ARM 32-bit ARM Architecture License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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? */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_arm32_arm.h000644 000765 000024 00000002662 12534342603 025723 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_arm32_arm.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_arm32_arm_armhf.S000755 000765 000024 00000006422 12534342603 027054 0ustar00williamcoledastaff000000 000000 /* 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-2012 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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? */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_arm32_arm_armhf.h000755 000765 000024 00000002417 12534342603 027101 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_arm32_arm_armhf.h Description: License: Copyright (c) 2007-2012 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_arm32_thumb.h000644 000765 000024 00000003276 12534342603 026265 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_arm32_thumb.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_arm32_thumb_apple.s000644 000765 000024 00000005404 12534342603 027454 0ustar00williamcoledastaff000000 000000 /* 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 , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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. */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_arm32_thumb_armhf.S000755 000765 000024 00000007134 12534342603 027415 0ustar00williamcoledastaff000000 000000 /* 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-2012 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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} nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_arm32_thumb_gas.s000644 000765 000024 00000006435 12534342603 027132 0ustar00williamcoledastaff000000 000000 /* 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 , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_mips.h000644 000765 000024 00000002736 12534342603 025112 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_mips.h Description: mips call-kernel C interfaces. License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_mips_eabi.h000644 000765 000024 00000003205 12534342603 026062 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_mips_eabi.h Description: mips "eabi" abi call kernel C interface. License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_mips_eabi_gas.s000644 000765 000024 00000004475 12534342603 026741 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_mips_eabi_gas.s Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_mips_gas.S000644 000765 000024 00000002423 12534342603 025710 0ustar00williamcoledastaff000000 000000 /* 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-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_mips_n32.h000644 000765 000024 00000004076 12534342603 025573 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_mips_n32.h Description: mips "n32" ABI call-kernel C interface. License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_mips_n32_gas.s000644 000765 000024 00000007365 12534342603 026444 0ustar00williamcoledastaff000000 000000 /* 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 , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_mips_n64.h000644 000765 000024 00000004076 12534342603 025600 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_mips_n64.h Description: mips "n64" ABI call-kernel C interface. License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_mips_n64_gas.s000644 000765 000024 00000007376 12534342603 026453 0ustar00williamcoledastaff000000 000000 /* 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 , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_mips_o32.h000644 000765 000024 00000003502 12534342603 025565 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_mips_o32.h Description: mips "o32" abi call kernel C interface. License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_mips_o32_gas.s000644 000765 000024 00000005077 12534342603 026443 0ustar00williamcoledastaff000000 000000 /* 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 , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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" nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_ppc32.S000644 000765 000024 00000014542 12534342603 025042 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_ppc32.S Description: Call Kernel for PowerPC 32-bit Architecture License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ .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: 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_ppc32.h000644 000765 000024 00000003130 12534342603 025056 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_ppc32.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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]; }; /* ** 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_sparc.S000644 000765 000024 00000012431 12534342603 025216 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_sparc.S Description: Call kernel for sparc processor architecture. License: Copyright (c) 2011 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. */ /* --------------------------------------------------------------------------- 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_sparc.h000644 000765 000024 00000002202 12534342603 025236 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_sparc.h Description: License: Copyright (c) 2011 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. */ #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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_sparc64.S000644 000765 000024 00000020272 12534342603 025372 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_sparc64.S Description: Call kernel for sparc64 v9 ABI. License: Copyright (c) 2011 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. */ /* --------------------------------------------------------------------------- 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_sparc64.h000644 000765 000024 00000002214 12534342603 025413 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_sparc64.h Description: License: Copyright (c) 2011 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. */ #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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_sparc_v9.S000644 000765 000024 00000013167 12534342603 025643 0ustar00williamcoledastaff000000 000000 #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 */ /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_sparc64.S Description: Call kernel for sparc64 v9 ABI. License: Copyright (c) 2011-2013 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. */ #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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_sparc_v9.h000644 000765 000024 00000002201 12534342603 025653 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_sparc_v9.h Description: License: Copyright (c) 2011-2013 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. */ #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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_x64-att.S000644 000765 000024 00000011031 12534342603 025310 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_x64-att.S Description: All x64 abi call kernel implementation License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_x64.S000644 000765 000024 00000011102 12534342603 024521 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_x64.S Description: All x64 abi call kernel implementation License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_x64.h000644 000765 000024 00000002771 12534342603 024562 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_x64.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_x64_generic_masm.asm000644 000765 000024 00000002345 12534342603 027621 0ustar00williamcoledastaff000000 000000 ; 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_x86.S000644 000765 000024 00000015116 12534342603 024536 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_x86.S Description: All - except Plan9 - x86 abi call kernel implementation License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_x86.h000644 000765 000024 00000004032 12534342603 024556 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_call_x86.h Description: heap memory management interface (header only) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_x86_8a.s000644 000765 000024 00000011142 12534342603 025161 0ustar00williamcoledastaff000000 000000 /* 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 , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_x86_generic_masm.asm000644 000765 000024 00000004533 12534342603 027626 0ustar00williamcoledastaff000000 000000 ; 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_call_x86_nasm.asm000644 000765 000024 00000013650 12534342603 026133 0ustar00williamcoledastaff000000 000000 ;////////////////////////////////////////////////////////////////////////////// ; ; Copyright (c) 2007,2009 Daniel Adler , ; Tassilo Philipp ; ; Permission to use, copy, modify, and distribute this software for any ; purpose with or without fee is hereby granted, provided that the above ; copyright notice and this permission notice appear in all copies. ; ; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callf.c000644 000765 000024 00000010751 12534342603 024217 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callf.c Description: formatted call C interface (extension module) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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" void dcVCallF(DCCallVM* vm, DCValue* result, DCpointer funcptr, const DCsigchar* signature, va_list args) { const DCsigchar* ptr = signature; DCsigchar ch; dcReset(vm); while ( (ch=*ptr++) != '\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; } } 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); } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callf.h000644 000765 000024 00000002733 12534342603 024225 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callf.h Description: formatted call interface to dyncall License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm.c000644 000765 000024 00000004353 12534342603 024415 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm.c Description: auto-select default callvm (includes other C sources). License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_PowerPC) # 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_Sparc) # include "dyncall_callvm_sparc.c" #elif defined(DC__Arch_Sparcv9) # include "dyncall_callvm_sparc_v9.c" #else # error unsupported platform #endif nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm.h000644 000765 000024 00000007512 12534342603 024422 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm.h Description: Common call vm binary interface. License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_arm32_arm.c000644 000765 000024 00000016050 12534342603 026255 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_arm32_arm.c Description: ARM 32-bit "arm" ABI callvm implementation License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_arm32_arm.h000644 000765 000024 00000002715 12534342603 026265 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_arm32_arm.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.c000755 000765 000024 00000012434 12534342603 027437 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/arm_armhf.c Description: ARM 'armhf' ABI implementation License: Copyright (c) 2007-2012 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.h000755 000765 000024 00000003072 12534342603 027442 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_arm32_armhf.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_arm32_thumb.c000644 000765 000024 00000020247 12534342603 026620 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_arm32_thumb.c Description: ARM 32-bit "thumb" ABI callvm implementation License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_arm32_thumb.h000644 000765 000024 00000002740 12534342603 026623 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_arm32_thumb.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_base.c000644 000765 000024 00000002251 12534342603 025402 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_base.c Description: ARM 32-bit "thumb" ABI callvm implementation License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_mips.c000644 000765 000024 00000002434 12534342603 025443 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_mips.c Description: ARM 32-bit "thumb" ABI callvm implementation License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_mips.h000644 000765 000024 00000002270 12534342603 025446 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_mips.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_mips_eabi.c000644 000765 000024 00000012630 12534342603 026422 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_mips_eabi.c Description: Implementation of Call VM for mips "eabi" abi. License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_mips_eabi.h000644 000765 000024 00000002773 12534342603 026436 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_mips_eabi.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_mips_n32.c000644 000765 000024 00000017205 12534342603 026127 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_mips_n32.c Description: mips "n32" ABI callvm implementation License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_mips_n64.c000644 000765 000024 00000017205 12534342603 026134 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_mips_n64.c Description: mips "n64" ABI callvm implementation License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_mips_n64.h000644 000765 000024 00000002676 12534342603 026147 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_mips_n64.h Description: mips "n64" ABI callvm C interface. License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_mips_o32.c000644 000765 000024 00000015164 12534342603 026132 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_mips_o32.c Description: mips "o32" ABI callvm implementation License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_mips_o32.h000644 000765 000024 00000002623 12534342603 026133 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_mips_o32.h Description: mips "o32" ABI callvm C interface. License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_ppc32.c000644 000765 000024 00000024367 12534342603 025433 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_ppc32.c Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) REVISION 2007/12/11 initial support for Darwin ABI 2009/01/09 added System V ABI support */ #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_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 */ }; 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; 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; } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_ppc32.h000644 000765 000024 00000003043 12534342603 025424 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_ppc32.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_sparc.c000644 000765 000024 00000011574 12534342603 025610 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_sparc.c Description: Call VM for sparc processor architecture. License: Copyright (c) 2011 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. */ #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); } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_sparc.h000644 000765 000024 00000002576 12534342603 025617 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_sparc.h Description: Call VM for sparc processor architecture. License: Copyright (c) 2011 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. */ #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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_sparc64.c000644 000765 000024 00000017212 12534342603 025755 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_sparc64.c Description: Call VM for sparc64 64-bit processor architecture. License: Copyright (c) 2011 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. */ #include "dyncall_callvm_sparc64.h" #include "dyncall_call_sparc64.h" #include "dyncall_utils.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<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 nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_sparc64.h000644 000765 000024 00000002644 12534342603 025765 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_sparc64.h Description: Call VM for sparc64 processor architecture. License: Copyright (c) 2011 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. */ #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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_sparc_v9.c000644 000765 000024 00000012460 12534342603 026221 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_v9.c Description: Call VM for sparc-v9 ABI. License: Copyright (c) 2011 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. */ #include "dyncall_callvm_sparc_v9.h" #include "dyncall_call_sparc_v9.h" #include "dyncall_utils.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); } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_sparc_v9.h000644 000765 000024 00000002562 12534342603 026230 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_sparc_v9.h Description: Call VM for sparc-v9 ABI. License: Copyright (c) 2011 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. */ #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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_x64.c000644 000765 000024 00000013523 12534342603 025115 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_x64.c Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_x64.h000644 000765 000024 00000005037 12534342603 025123 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_x64.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_x86.c000644 000765 000024 00000046267 12534342603 025134 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_x86.c Description: Call VM for x86 architecture implementation License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_callvm_x86.h000644 000765 000024 00000004001 12534342603 025115 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_callvm_x86.h Description: Call virtual machine for x86 architecture header License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_config.h000644 000765 000024 00000002417 12534342603 024410 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_config.h Description: Macro configuration file for non-standard C types License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_macros.h000644 000765 000024 00000015272 12534342603 024432 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_macros.h Description: Platform detection macros License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 /* 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__) # define DC__Arch_PowerPC #elif defined(__ppc64__) || defined(_ARCH_PPC64) || defined(__power64__) # define DC__Arch_PPC64 #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(__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 quirks. */ #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 */ /* Internal macro/tag. */ #if !defined(DC_API) #define DC_API #endif #endif /* DYNCALL_MACROS_H */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_signature.h000644 000765 000024 00000004172 12534342603 025144 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_signature.h Description: Type and calling-convention signature character defines License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_struct.c000644 000765 000024 00000015072 12534342603 024463 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_struct.c Description: C interface to compute struct size License: Copyright (c) 2010-2011 Olivier Chafik Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include 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; } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_struct.h000644 000765 000024 00000003173 12534342603 024467 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_struct.h Description: C interface to compute struct size License: Copyright (c) 2010-2011 Olivier Chafik Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_types.h000644 000765 000024 00000003520 12534342603 024303 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_types.h Description: Typedefs License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_utils.h000644 000765 000024 00000002251 12534342603 024277 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_utils.h Description: Type and calling-convention signature character defines License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_value.h000644 000765 000024 00000003152 12534342603 024254 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_value.h Description: Value variant type License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; 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; DCstring Z; }; #ifdef __cplusplus } #endif #endif /* DYNCALL_VALUE_H */ nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_vector.c000644 000765 000024 00000003624 12534342603 024441 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_vector.c Description: Simple dynamic vector container type implementation License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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?*/ } nqp-2015.11/3rdparty/dyncall/dyncall/dyncall_vector.h000644 000765 000024 00000003347 12534342603 024450 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncall File: dyncall/dyncall_vector.h Description: Simple dynamic vector container type header License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 ) /* #include #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 */ nqp-2015.11/3rdparty/dyncall/dyncall/gen-masm.sh000644 000765 000024 00000000715 12534342603 023323 0ustar00williamcoledastaff000000 000000 #!/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 nqp-2015.11/3rdparty/dyncall/dyncall/mkfile000644 000765 000024 00000002305 12534342603 022452 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncallback/CMakeLists.txt000644 000765 000024 00000003163 12534342603 024644 0ustar00williamcoledastaff000000 000000 # Package: dyncall # File: dyncallback/CMakeLists.txt # Description: DynCallback library cmake files # License: # # Copyright (c) 2010 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. # 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 ) nqp-2015.11/3rdparty/dyncall/dyncallback/DynCallbackConfig.cmake000644 000765 000024 00000000151 12534342603 026375 0ustar00williamcoledastaff000000 000000 set(DYNCALLBACK_INCLUDE_DIRS ${DynCall_SOURCE_DIR}/dyncallback) set(DYNCALLBACK_LIBRARIES dyncallback_s) nqp-2015.11/3rdparty/dyncall/dyncallback/Makefile.M000644 000765 000024 00000000503 12534342603 023732 0ustar00williamcoledastaff000000 000000 #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) nqp-2015.11/3rdparty/dyncall/dyncallback/Makefile.embedded000644 000765 000024 00000000742 12534342603 025274 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/dyncallback/Makefile.generic000644 000765 000024 00000001252 12534342603 025154 0ustar00williamcoledastaff000000 000000 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_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 nqp-2015.11/3rdparty/dyncall/dyncallback/Nmakefile000644 000765 000024 00000004444 12534342603 023725 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncallback/README.txt000644 000765 000024 00000000133 12534342603 023574 0ustar00williamcoledastaff000000 000000 components: - alloc_wx - thunk BUGS call back failures for x64 apple: lppffldplfffddd)i nqp-2015.11/3rdparty/dyncall/dyncallback/TODO000644 000765 000024 00000000225 12534342603 022570 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/dyncallback/dynMakefile000644 000765 000024 00000000316 12534342603 024254 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_alloc_wx.c000644 000765 000024 00000002367 12534342603 025573 0ustar00williamcoledastaff000000 000000 /* 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-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_alloc_wx.h000644 000765 000024 00000002464 12534342603 025576 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_alloc_wx.h Description: Allocate write/executable memory - Interface License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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/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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_alloc_wx_malloc.c000644 000765 000024 00000002317 12534342603 027115 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_alloc_wx_malloc.c Description: Allocate write/executable memory - Fallback implementation based License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 int dcAllocWX(size_t size, void** pp) { *pp = malloc(size); return 0; } void dcFreeWX(void* p, size_t size) { free(p); } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_alloc_wx_mmap.c000644 000765 000024 00000002533 12534342603 026600 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_alloc_wx_mmap.c Description: Allocate write/executable memory - Implementation for posix License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include 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); } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_alloc_wx_win32.c000644 000765 000024 00000002557 12534342603 026616 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_alloc_wx_win32.c Description: Allocate write/executable memory - Implementation for win32 platform License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include 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); } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args.c000644 000765 000024 00000003104 12534342603 024705 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args.c Description: Callback's Arguments VM - Implementation back-end selector License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_PowerPC) #include "dyncall_args_ppc32.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" #endif nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args.h000644 000765 000024 00000003675 12534342603 024727 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args.h Description: Callback's Arguments VM - Interface License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_arm32_arm.c000644 000765 000024 00000006621 12534342603 026557 0ustar00williamcoledastaff000000 000000 /* 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-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_arm32_arm.h000644 000765 000024 00000002406 12534342603 026561 0ustar00williamcoledastaff000000 000000 /* 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-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_arm32_thumb.c000644 000765 000024 00000002210 12534342603 027105 0ustar00williamcoledastaff000000 000000 /* 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-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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. */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_arm32_thumb.h000644 000765 000024 00000002325 12534342603 027121 0ustar00williamcoledastaff000000 000000 /* 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-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_mips.c000644 000765 000024 00000005210 12534342603 025735 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_mips.c Description: Callback's Arguments VM - Implementation for MIPS License: Copyright (c) 2013 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_mips.h000644 000765 000024 00000002434 12534342603 025747 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_mips.h Description: Callback's Arguments VM - Header for MIPS License: Copyright (c) 2013 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_ppc32.c000644 000765 000024 00000005447 12534342603 025730 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_ppc32.c Description: Callback's Arguments VM - Implementation for ppc32 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_ppc32.h000644 000765 000024 00000002414 12534342603 025724 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_ppc32.h Description: Callback's Arguments VM - Header for ppc32 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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" struct DCArgs { int ireg_data[8]; double freg_data[13]; unsigned char* stackptr; int ireg_count; int freg_count; }; #endif /* DYNCALLBACK_ARGS_PPC32_H */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_sparc32.c000644 000765 000024 00000003762 12534342603 026254 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_sparc32.c Description: Callback's Arguments VM - Implementation for sparc32 - not yet License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_sparc32.h000644 000765 000024 00000002257 12534342603 026257 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_sparc32.h Description: Callback's Arguments VM - Header for sparc32 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_sparc64.c000644 000765 000024 00000003762 12534342603 026261 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_sparc64.c Description: Callback's Arguments VM - Implementation for sparc64 - not yet License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_sparc64.h000644 000765 000024 00000002271 12534342603 026260 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_sparc64.h Description: Callback's Arguments VM - Header for sparc32 - not yet License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_x64.c000644 000765 000024 00000005106 12534342603 025412 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_x64.c Description: Callback's Arguments VM - Implementation for x64 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_x64.h000644 000765 000024 00000002623 12534342603 025420 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_x64.h Description: Callback's Arguments VM - Header for x64 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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/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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_x86.c000644 000765 000024 00000007401 12534342603 025416 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_x86.c Description: Callback's Arguments VM - Implementation for x86 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 }; nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_args_x86.h000644 000765 000024 00000003051 12534342603 025420 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_x86.h Description: Callback's Arguments VM - Header for x86 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_ */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback.c000644 000765 000024 00000003131 12534342603 025505 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback.c Description: Callback - Implementation back-end selector License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_PowerPC) #include "dyncall_callback_ppc32.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" #endif nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback.h000644 000765 000024 00000003222 12534342603 025513 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback.h Description: Callback - Interface License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_arch.S000644 000765 000024 00000004554 12534342603 026474 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_arch.S Description: Callback Thunk - Implementation Back-end selector License: Copyright (c) 2007-2013 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_PowerPC) # 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" # 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_PowerPC) # include "dyncall_callback_ppc32.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" # endif #endif nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_arm32_arm.c000644 000765 000024 00000003502 12534342603 027352 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_arm32_arm.c Description: Callback - Implementation for ARM32 (ARM mode) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_arm32_arm.h000644 000765 000024 00000002571 12534342603 027364 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_arm32_arm.h Description: Callback - Header for ARM32 (ARM mode) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_ */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_arm32_arm_apple.s000644 000765 000024 00000005472 12534342603 030563 0ustar00williamcoledastaff000000 000000 /* 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 , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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? */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_arm32_arm_gas.s000644 000765 000024 00000005504 12534342603 030230 0ustar00williamcoledastaff000000 000000 /* 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 , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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? */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_arm32_thumb.c000644 000765 000024 00000002205 12534342603 027711 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_arm32_thumb.c Description: Callback - Implementation for ARM32 (THUMB mode) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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. */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_arm32_thumb.h000644 000765 000024 00000002322 12534342603 027716 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_arm32_thumb.h Description: Callback - Header for ARM32 (THUMB mode) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_ */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_arm32_thumb_apple.s000644 000765 000024 00000002601 12534342603 031112 0ustar00williamcoledastaff000000 000000 /* 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 , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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" nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_arm32_thumb_gas.s000644 000765 000024 00000002577 12534342603 030577 0ustar00williamcoledastaff000000 000000 /* 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 , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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" nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_mips.c000644 000765 000024 00000003367 12534342603 026550 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_mips.c Description: Callback - Implementation Header for MIPS License: Copyright (c) 2013 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_mips.h000644 000765 000024 00000002570 12534342603 026550 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_mips.h Description: Callback - Header for MIPS License: Copyright (c) 2013 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_ppc32.S000644 000765 000024 00000002265 12534342603 026503 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_ppc32.S Description: Callback Thunk - Implementation for PowerPC 32-bit on Darwin/Apple's as License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 GLOBAL_C(dcCallbackThunkEntry) ENTRY_C(dcCallbackThunkEntry) blr /* return */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_ppc32.c000644 000765 000024 00000003440 12534342603 026517 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_ppc32.c Description: Callback - Implementation Header for ppc32 (TODO: not implemented yet) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_ppc32.h000644 000765 000024 00000002705 12534342603 026527 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_ppc32.h Description: Callback - Header for ppc32 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 40 */ DCCallbackHandler* handler; /* offset 40, size 4 */ size_t stack_cleanup; /* offset 44, size 4 */ void* userdata; /* offset 48, size 4 */ }; #endif /* DYNCALL_CALLBACK_PPC32_H */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_ppc32_apple.s000644 000765 000024 00000011655 12534342603 027727 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_ppc32_apple.s Description: Callback Thunk - Implementation for PowerPC 32-bit on Darwin/Apple's as License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 Apple Mac OS X PowerPC 32-bit. */ /* Stack Frame Layout: 206 DCValue ( ) 56 DCArgs (32+104+4+8 = 150) 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_sparc32.c000644 000765 000024 00000003350 12534342603 027045 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_sparc32.c Description: Callback - Implementation for sparc32 (TODO: not implemented yet) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_sparc32.h000644 000765 000024 00000002721 12534342603 027053 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_sparc32.h Description: Callback - Header for sparc32 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_sparc32.s000644 000765 000024 00000002171 12534342603 027065 0ustar00williamcoledastaff000000 000000 /* 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 , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_sparc64.c000644 000765 000024 00000003350 12534342603 027052 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_sparc64.c Description: Callback - Implementation for sparc64 (TODO: not implemented yet) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_sparc64.s000644 000765 000024 00000002171 12534342603 027072 0ustar00williamcoledastaff000000 000000 /* 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 , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_x64.S000644 000765 000024 00000012243 12534342603 026172 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_x64.S Description: Callback Thunk entry for x64 (portasm version) License: Copyright (c) 2011 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. */ #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 */ /* distinguish two basic classes 'integer' and 'float' */ MOVB(AL,DL) MOV(QWORD(RBP,FRAME_DCValue_sysv),RAX) CMP(LIT(ASCII_f),DL) JE(LOCAL(return_f64)) CMP(LIT(ASCII_d),DL) JNE(LOCAL(return_i64)) LOCAL(return_f64): MOVD(RAX,XMM0) LOCAL(return_i64): 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)) MOV(QWORD(RBP,FRAME_DCValue_win64),RAX) MOVD(RAX,XMM0) MOV(RBP,RSP) POP(RBP) RET() END_PROC(dcCallback_x64_win64) END_ASM nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_x64.c000644 000765 000024 00000003627 12534342603 026220 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_x64.c Description: Callback - Implementation for x64 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_x64.h000644 000765 000024 00000002527 12534342603 026223 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_x64.h Description: Callback - Header for x64 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_ */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_x64_apple.s000644 000765 000024 00000006432 12534342603 027416 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_x64_apple.s Description: Callback Thunk - Implementation for x64 (Apple as assembly) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ .intel_syntax .text /* sizes */ .set DCThunk_size , 24 .set DCArgs_size , 128 .set DCValue_size , 8 /* frame local variable offsets relative to %rbp*/ .set FRAME_arg0 , 16 .set FRAME_return , 8 .set FRAME_parent , 0 .set FRAME_DCArgs ,-128 .set FRAME_DCValue ,-136 /* struct DCCallback */ .set CTX_thunk , 0 .set CTX_handler , 24 .set CTX_userdata , 32 .set DCCallback_size , 40 .globl _dcCallbackThunkEntry _dcCallbackThunkEntry: pushq %rbp movq %rbp, %rsp // initialize DCArgs // float parameters (8 registers spill to DCArgs) sub %rsp, 8*8 movq [%rsp+8*7], %xmm7 # struct offset 120: float parameter 7 movq [%rsp+8*6], %xmm6 # struct offset 112: float parameter 6 movq [%rsp+8*5], %xmm5 # struct offset 104: float parameter 5 movq [%rsp+8*4], %xmm4 # struct offset 96: float parameter 4 movq [%rsp+8*3], %xmm3 # struct offset 88: float parameter 3 movq [%rsp+8*2], %xmm2 # struct offset 80: float parameter 2 movq [%rsp+8*1], %xmm1 # struct offset 72: float parameter 1 movq [%rsp+8*0], %xmm0 # struct offset 64: float parameter 0 // integer parameters (6 registers spill to DCArgs) pushq %r9 # struct offset 56: parameter 5 pushq %r8 # struct offset 48: parameter 4 pushq %rcx # struct offset 40: parameter 3 pushq %rdx # struct offset 32: parameter 2 pushq %rsi # struct offset 24: parameter 1 pushq %rdi # struct offset 16: parameter 0 // register counts for integer/pointer and float regs # struct offset 12: fcount pushq 0 # struct offset 8: icount lea %rdx, [%rbp+FRAME_arg0] # struct offset 0: stack pointer pushq %rdx mov %rsi, %rsp # parameter 1 (RSI) = DCArgs* // initialize DCValue pushq 0 # structo offset 0: return value (max long long) // call handler( *ctx, *args, *value, *userdata) mov %rdi, %rax # parameter 0 (RDI) = DCCallback* (RAX) mov %rcx, [%rdi+CTX_userdata] # arg3 = userdata* mov %rdx, %rsp # arg2 (RDX) = DCValue* pushq 0 # align to 16 bytes call [%rax+CTX_handler] // pass return type via registers // distinguish two basic classes 'integer' and 'float' mov %dl, %al movq %rax, [%rbp+FRAME_DCValue] ASCII_f = 102 ASCII_d = 100 cmpb %dl, ASCII_f je .float cmpb %dl, ASCII_d jne .return .float: movd %xmm0, %rax .return: mov %rsp, %rbp pop %rbp ret nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_x64_gas.s000644 000765 000024 00000006466 12534342603 027076 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_x64_gas.s Description: Callback Thunk - Implementation for x64 (GNU as assembler) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ .intel_syntax .text .globl dcCallbackThunkEntry /* sizes */ .set DCThunk_size , 24 .set DCArgs_size , 128 .set DCValue_size , 8 /* frame local variable offsets relative to %rbp*/ .set FRAME_arg0 , 16 .set FRAME_return , 8 .set FRAME_parent , 0 .set FRAME_DCArgs ,-128 .set FRAME_DCValue ,-136 /* struct DCCallback */ .set CTX_thunk , 0 .set CTX_handler , 24 .set CTX_userdata , 32 .set DCCallback_size , 40 dcCallbackThunkEntry: pushq %rbp movq %rbp, %rsp // initialize DCArgs // float parameters (8 registers spill to DCArgs) sub %rsp, 8*8 movq [%rsp+8*7], %xmm7 # struct offset 120: float parameter 7 movq [%rsp+8*6], %xmm6 # struct offset 112: float parameter 6 movq [%rsp+8*5], %xmm5 # struct offset 104: float parameter 5 movq [%rsp+8*4], %xmm4 # struct offset 96: float parameter 4 movq [%rsp+8*3], %xmm3 # struct offset 88: float parameter 3 movq [%rsp+8*2], %xmm2 # struct offset 80: float parameter 2 movq [%rsp+8*1], %xmm1 # struct offset 72: float parameter 1 movq [%rsp+8*0], %xmm0 # struct offset 64: float parameter 0 // fill integer parameters (6 registers spill to DCArgs) pushq %r9 # struct offset 56: parameter 5 pushq %r8 # struct offset 48: parameter 4 pushq %rcx # struct offset 40: parameter 3 pushq %rdx # struct offset 32: parameter 2 pushq %rsi # struct offset 24: parameter 1 pushq %rdi # struct offset 16: parameter 0 // fill register counts for integer/pointer and float regs pushq 0 # struct offset 12: fcount # struct offset 8: icount // fill argument stack pointer lea %rdx, [%rbp+FRAME_arg0] pushq %rdx # struct offset 0: stack pointer mov %rsi, %rsp # arg1 (RSI) = DCArgs* // initialize DCValue: pushq 0 # structo offset 0: return value (max long long) // call handler( *ctx, *args, *value, *userdata) mov %rdi, %rax # arg0 (RDI) = DCCallback* (RAX) mov %rcx, [%rdi+CTX_userdata] # arg3 = userdata* mov %rdx, %rsp # arg2 (RDX) = DCValue* pushq 0 # align to 16 bytes call [%rax+CTX_handler] // pass return type via registers // distinguish two basic classes 'integer' and 'float' mov %dl, %al movq %rax, [%rbp+FRAME_DCValue] cmp %dl, 'f' je .float cmp %dl, 'd' je .float .int: jmp .return .float: movd %xmm0, %rax .return: mov %rsp, %rbp pop %rbp ret nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_x64_gas_w64.s000644 000765 000024 00000005661 12534342603 027572 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_x64_gas_w64.s Description: Callback Thunk - Implementation for x64 (GNU as assembler) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ .intel_syntax .text .globl dcCallbackThunkEntry /* sizes */ .set DCThunk_size , 24 .set DCArgs_size , 80 /* 128 */ .set DCValue_size , 8 /* frame local variable offsets relative to %rbp*/ .set FRAME_arg0 , 48 /* 16 */ .set FRAME_return , 8 .set FRAME_parent , 0 .set FRAME_DCArgs , -80 /* -128 */ .set FRAME_DCValue , -80 /* -136 */ /* struct DCCallback */ .set CTX_thunk , 0 .set CTX_handler , 24 .set CTX_userdata , 32 .set DCCallback_size , 40 dcCallbackThunkEntry: pushq %rbp movq %rbp, %rsp // initialize DCArgs // float parameters (4 registers spill to DCArgs) sub %rsp, 4*8 movq [%rsp+8*3], %xmm3 # struct offset 72: float parameter 3 movq [%rsp+8*2], %xmm2 # struct offset 64: float parameter 2 movq [%rsp+8*1], %xmm1 # struct offset 56: float parameter 1 movq [%rsp+8*0], %xmm0 # struct offset 48: float parameter 0 // fill integer parameters (4 registers spill to DCArgs) pushq %r9 # struct offset 40: int parameter 3 pushq %r8 # struct offset 32: int parameter 2 pushq %rdx # struct offset 24: int parameter 1 pushq %rcx # struct offset 16: int parameter 0 // fill register counts for integer/pointer and float regs pushq 0 # struct offset 8: register count // fill argument stack pointer lea %rdx, [%rbp+FRAME_arg0] pushq %rdx # struct offset 0: stack pointer mov %rdx, %rsp # arg1 (RDX) = DCArgs* // initialize DCValue: // pushq 0 # structo offset 0: return value (max long long) // call handler( *ctx, *args, *value, *userdata) mov %rcx, %rax # arg0 (RCX) = DCCallback* (RAX) mov %r9, [%rax+CTX_userdata] # arg3 (R9) = userdata* mov %r8, %rsp # arg2 (RDX) = DCValue* sub %rsp, 4*8 # make foom for spill area and call call [%rax+CTX_handler] // pass return type via registers // distinguish two basic classes 'integer' and 'float' movq %rax, [%rbp+FRAME_DCValue] movd %xmm0, %rax mov %rsp, %rbp pop %rbp ret nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_x64_masm.asm000644 000765 000024 00000003432 12534342603 027565 0ustar00williamcoledastaff000000 000000 ; 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 DL,AL mov RAX,qword ptr [RBP+FRAME_DCValue_sysv] cmp DL,102 je return_f64 cmp DL,100 jne return_i64 return_f64: movd XMM0,RAX return_i64: 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 nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_x86.S000644 000765 000024 00000006161 12534342603 026200 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_x86.S Description: Callback Thunk entry for x86 License: Copyright (c) 2011 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. */ #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_v),AL) JE(LOCAL(return_void)) CMP(LIT(ASCII_d),AL) JE(LOCAL(return_f64)) CMP(LIT(ASCII_f),AL) JE(LOCAL(return_f32)) CMP(LIT(ASCII_l),AL) JE(LOCAL(return_i64)) CMP(LIT(ASCII_L),AL) JE(LOCAL(return_i64)) /* All int cases <= 32 bits (+ pointer & string cases) fall in the 32 bits int case*/ LOCAL(return_i32): MOVL(DWORD(EDX,0),EAX) RET() 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 nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_x86.c000644 000765 000024 00000015463 12534342603 026225 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_x86.c Description: Callback - Implementation for x86 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_x86.h000644 000765 000024 00000003306 12534342603 026223 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_callback_x86.h Description: Callback - Header for x86 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_ */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_x86_8a.s000644 000765 000024 00000006263 12534342603 026633 0ustar00williamcoledastaff000000 000000 /* 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 Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_callback_x86_masm.asm000644 000765 000024 00000002412 12534342603 027566 0ustar00williamcoledastaff000000 000000 ; 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,118 je return_void cmp AL,100 je return_f64 cmp AL,102 je return_f32 cmp AL,108 je return_i64 cmp AL,76 je return_i64 return_i32: mov EAX,dword ptr [EDX+0] ret 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 nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk.c000644 000765 000024 00000003056 12534342603 025110 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk.c Description: Thunk - Implementation Back-end selection License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_PowerPC) # include "dyncall_thunk_ppc32.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" #endif nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk.h000644 000765 000024 00000004612 12534342603 025114 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk.h Description: Thunk - Interface License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 ** **/ #include "../dyncall/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_PowerPC) #include "dyncall_thunk_ppc32.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" #endif #ifdef __cplusplus } #endif #endif /* DYNCALL_THUNK_H */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_arm32_arm.c000644 000765 000024 00000003330 12534342603 026746 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_arm32_arm.c Description: Thunk - Implementation for ARM32 (ARM mode) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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*/; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_arm32_arm.h000644 000765 000024 00000002326 12534342603 026757 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_arm32_arm.h Description: Thunk - Header for ARM32 (ARM mode) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_arm32_thumb.c000644 000765 000024 00000002245 12534342603 027312 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_arm32_thumb.c Description: Thunk - Implementation for ARM32 (THUMB mode) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_arm32_thumb.h000644 000765 000024 00000002342 12534342603 027315 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_arm32_thumb.h Description: Thunk - Header for ARM32 (THUMB mode) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_mips.c000644 000765 000024 00000003400 12534342603 026131 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_mips.c Description: Thunk - Implementation for MIPS License: Copyright (c) 2013 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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)()) { /* mips thunk code: lui $t4, hi(p) lui $t5, hi(entry) ori $t5, $t5, lo(entry) jr $t5 ori $t4, $t4, lo(p) - branch delay slot */ p->data[0] = hi16(p); /* lui $t4, hi(p) */ p->data[1] = 0x3c0c; p->data[2] = hi16(entry); /* lui $t5, hi(entry) */ p->data[3] = 0x3c0d; p->data[4] = lo16(entry); /* ori $t5, $t5, lo(entry) */ p->data[5] = 0x35ad; p->jump = 0x01a00008; /* jr $t5 */ p->bddt[0] = lo16(p); /* ori $t4, $t4, lo(p) - branch delay slot */ p->bddt[1] = 0x358c; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_mips.h000644 000765 000024 00000002241 12534342603 026140 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_mips.h Description: Thunk - Header for MIPS License: Copyright (c) 2013 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_ppc32.c000644 000765 000024 00000003325 12534342603 026116 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_ppc32.c Description: Thunk - Implementation for ppc32 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_ppc32.h000644 000765 000024 00000002600 12534342603 026116 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_ppc32.h Description: Thunk - Header for ppc32 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ unsigned short code_load_lo, addr_self_lo; /* offset: 4 */ unsigned int code_jump[3]; /* offset: 8 */ void (*addr_entry)(); /* offset: 20 */ }; #define DCTHUNK_SIZE_PPC32 24 #endif /* DYNCALL_THUNK_PPC32_H */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_sparc32.c000644 000765 000024 00000002146 12534342603 026444 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_sparc32.c Description: Thunk - Implementation for sparc32 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_sparc32.h000644 000765 000024 00000002275 12534342603 026454 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_sparc32.h Description: Thunk - Header for sparc32 - not yet implemented License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_sparc64.c000644 000765 000024 00000002146 12534342603 026451 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_sparc64.c Description: Thunk - Implementation for sparc64 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_sparc64.h000644 000765 000024 00000002275 12534342603 026461 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_sparc64.h Description: Thunk - Header for sparc64 - not yet implemented License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_x64.c000644 000765 000024 00000002650 12534342603 025610 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_x64.c Description: Thunk - Implementation for x64 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_x64.h000644 000765 000024 00000002252 12534342603 025613 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_x64.h Description: Thunk - Header for x64 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_x86.c000644 000765 000024 00000002526 12534342603 025616 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_x86.c Description: Thunk - Implementation for x86 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/dyncallback/dyncall_thunk_x86.h000644 000765 000024 00000002344 12534342603 025621 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dyncallback File: dyncallback/dyncall_thunk_x86.h Description: Thunk - Header for x86 License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dyncallback/dyncallback.3000644 000765 000024 00000011611 12534342603 024434 0ustar00williamcoledastaff000000 000000 .\" Copyright (c) 2007-2014 Daniel Adler , .\" Tassilo Philipp .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 either 'i' or 'f' depending on whether the value stored in .Ar result is of integral or floating point type. .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 nqp-2015.11/3rdparty/dyncall/dyncallback/gen-masm.sh000644 000765 000024 00000000674 12534342603 024150 0ustar00williamcoledastaff000000 000000 #!/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 nqp-2015.11/3rdparty/dyncall/dyncallback/mkfile000644 000765 000024 00000002264 12534342603 023277 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2013 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dynload/CMakeLists.txt000644 000765 000024 00000002021 12534342603 024017 0ustar00williamcoledastaff000000 000000 # Package: dyncall # File: dynload/CMakeLists.txt # Description: DynLoad library cmake files # License: # # Copyright (c) 2010 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. # add_library(dynload_s STATIC dynload.c dynload_syms.c) install(TARGETS dynload_s ARCHIVE DESTINATION lib) install(FILES dynload.h DESTINATION include) nqp-2015.11/3rdparty/dyncall/dynload/DynLoadConfig.cmake000644 000765 000024 00000000132 12534342603 024742 0ustar00williamcoledastaff000000 000000 set(DYNLOAD_INCLUDE_DIRS ${DynCall_SOURCE_DIR}/dynload) set(DYNLOAD_LIBRARIES dynload_s) nqp-2015.11/3rdparty/dyncall/dynload/Makefile.M000644 000765 000024 00000000355 12534342603 023122 0ustar00williamcoledastaff000000 000000 #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) nqp-2015.11/3rdparty/dyncall/dynload/Makefile.embedded000644 000765 000024 00000001367 12534342603 024463 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/dynload/Makefile.generic000644 000765 000024 00000000533 12534342603 024340 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/dynload/Nmakefile000644 000765 000024 00000003247 12534342603 023110 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dynload/README.txt000644 000765 000024 00000005635 12534342603 022773 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/dynload/TODO000644 000765 000024 00000001747 12534342603 021765 0ustar00williamcoledastaff000000 000000 - 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 nqp-2015.11/3rdparty/dyncall/dynload/dynMakefile000644 000765 000024 00000000316 12534342603 023437 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/dynload/dynload.3000644 000765 000024 00000003772 12534342603 023013 0ustar00williamcoledastaff000000 000000 .\" Copyright (c) 2007-2014 Daniel Adler , .\" Tassilo Philipp .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dynload/dynload.c000644 000765 000024 00000002430 12534342603 023061 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dynload File: dynload/dynload.c Description: Auto-include delegate to windows/posix-based dynamic linker. License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dynload/dynload.h000644 000765 000024 00000003601 12534342603 023067 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dynload File: dynload/dynload.h Description: public header for library dynload License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/dynload/dynload_alloc.h000644 000765 000024 00000002263 12534342603 024244 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dynload File: dynload/dynload_alloc.h Description: heap memory management interface (header only) License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #define dlAllocMem malloc #endif #ifndef dlFreeMem #define dlFreeMem free #endif #endif /* DL_ALLOC_H */ nqp-2015.11/3rdparty/dyncall/dynload/dynload_darwin.c000644 000765 000024 00000004246 12534342603 024434 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dynload File: dynload/dynload_darwin.c Description: dynload module for .dylib (mach-o darwin/OS X) files License: Copyright (c) 2007-2011 Olivier Chafik 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 #include 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); } nqp-2015.11/3rdparty/dyncall/dynload/dynload_syms.c000644 000765 000024 00000002300 12534342603 024130 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dynload File: dynload/dynload_syms.c Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/dynload/dynload_syms_elf.c000644 000765 000024 00000012065 12534342603 024767 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dynload File: dynload/dynload_syms_elf.c Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp , Olivier Chafik Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 # include #elif defined(OS_SunOS) # include #elif defined(OS_BeOS) # include #else # include #endif #if defined(__GLIBC__) # define _GNU_SOURCE # define __USE_GNU #endif #include "dynload_alloc.h" #include #include #include #include #include #include #include #include #include /* 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; } nqp-2015.11/3rdparty/dyncall/dynload/dynload_syms_mach-o.c000644 000765 000024 00000007306 12534342603 025367 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dynload File: dynload/dynload_syms_mach-o.c Description: License: Copyright (c) 2007-2011 Olivier Chafik Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include #include #include #if defined(ARCH_X64) #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; } nqp-2015.11/3rdparty/dyncall/dynload/dynload_syms_pe.c000644 000765 000024 00000005567 12534342603 024636 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dynload File: dynload/dynload_syms_pe.c Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Olivier Chafik Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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, Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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) { dlclose((void*)libHandle); } nqp-2015.11/3rdparty/dyncall/dynload/dynload_windows.c000644 000765 000024 00000003010 12534342603 024626 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: dynload File: dynload/dynload_windows.c Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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 ); } nqp-2015.11/3rdparty/dyncall/mkfile000644 000765 000024 00000002301 12534342603 021020 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/portasm/README.txt000644 000765 000024 00000001471 12534342603 023020 0ustar00williamcoledastaff000000 000000 portasm - a toolkit for writing portable generic assembler sources ------------------------------------------------------------------ Copyright (C) 2011 Daniel Adler . 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-.S at front In order to generate MASM files for X86 and X64, run 'gen-masm.sh ' script which reads .S and outputs .masm file. Common Macros: -------------- BEGIN_ASM END_ASM BEGIN_PROC(name) END_PROC(name) GLOBAL(name) HEX(value) nqp-2015.11/3rdparty/dyncall/portasm/gen-masm.sh000644 000765 000024 00000000055 12534342603 023357 0ustar00williamcoledastaff000000 000000 #!/bin/sh gcc -E -P -DGEN_MASM $1.S >$1.asm nqp-2015.11/3rdparty/dyncall/portasm/portasm-arm.S000644 000765 000024 00000002211 12534342603 023701 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: portasm File: portasm/portasm-arm.S Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/portasm/portasm-ppc.S000644 000765 000024 00000003750 12534342603 023715 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: portasm File: portasm/portasm-ppc.S Description: Portable Assembler Macros for ppc License: Copyright (c) 2011 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. */ #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 nqp-2015.11/3rdparty/dyncall/portasm/portasm-x64-att.S000644 000765 000024 00000010006 12534342603 024332 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: portasm File: portasm/portasm-x64-att.S Description: Portable Assembler Macros for X64 License: Copyright (c) 2011 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. */ /* 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 nqp-2015.11/3rdparty/dyncall/portasm/portasm-x86.S000644 000765 000024 00000006576 12534342603 023571 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: portasm File: portasm/portasm-x86.S Description: Portable Assembler Macros for x86 License: Copyright (c) 2011 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. */ /* 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 nqp-2015.11/3rdparty/dyncall/test/CMakeLists.txt000644 000765 000024 00000001356 12534342603 023356 0ustar00williamcoledastaff000000 000000 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() nqp-2015.11/3rdparty/dyncall/test/Makefile.M000644 000765 000024 00000015172 12534342603 022452 0ustar00williamcoledastaff000000 000000 #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 nqp-2015.11/3rdparty/dyncall/test/Makefile.embedded000644 000765 000024 00000007145 12534342603 024010 0ustar00williamcoledastaff000000 000000 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: LDFLAGS="${LDFLAGS} -lm" ${MAKE_CMD} all linux: LDFLAGS="${LDFLAGS} -lm -ldl" ${MAKE_CMD} all linux64: CFLAGS="${CFLAGS} -m64" CXXFLAGS="${CXXFLAGS} -m64" CCFLAGS="${CXXFLAGS} -m64" LDFLAGS="${LDFLAGS} -m64 -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 LDFLAGS="${LDFLAGS} -lm" ${MAKE_CMD} all sun-64bit: CXX=CC CFLAGS="${CFLAGS} -m64" CXXFLAGS="${CXXFLAGS} -m64" CCFLAGS="${CXXFLAGS} -m64" LDFLAGS="${LDFLAGS} -m64 -lm" ${MAKE_CMD} all sun-gcc: CC=gcc CCC=g++ CXX=g++ LDFLAGS="${LDFLAGS} -lm" ${MAKE_CMD} all sun-gcc-64bit: CC=gcc CCC=g++ CXX=g++ CFLAGS="${CFLAGS} -m64" CXXFLAGS="${CXXFLAGS} -m64" CCFLAGS=-m64 LDFLAGS="${LDFLAGS} -m64 -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 nqp-2015.11/3rdparty/dyncall/test/Makefile.generic000644 000765 000024 00000003561 12534342603 023671 0ustar00williamcoledastaff000000 000000 .PHONY: all clean run-tests install all clean install: cd call_suite && ${MAKE} $@ cd callback_suite && ${MAKE} $@ cd plain && ${MAKE} $@ cd plain_c++ && ${MAKE} $@ cd suite && ${MAKE} $@ cd suite2 && ${MAKE} $@ cd suite3 && ${MAKE} $@ cd suite_floats && ${MAKE} $@ cd ellipsis && ${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} $@ run-tests: all sh ${VPATH}/runalltests.sh | 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} all-dyncallback: cd thunk && ${MAKE} cd malloc_wx && ${MAKE} cd callback_plain && ${MAKE} cd callback_suite && ${MAKE} linux: LDFLAGS="-lm -ldl" ${MAKE} all bsd: LDFLAGS="-lm" ${MAKE} all nqp-2015.11/3rdparty/dyncall/test/Nmakefile000644 000765 000024 00000003051 12534342603 022426 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007-2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/arm-thumb-interwork/Makefile-default.config000644 000765 000024 00000000152 12534342603 031053 0ustar00williamcoledastaff000000 000000 # auto-generated by ./configure PREFIX=/usr/local ASFLAGS= CFLAGS=-fPIC CXXFLAGS=-fPIC LDFLAGS=-lm -ldl nqp-2015.11/3rdparty/dyncall/test/arm-thumb-interwork/Makefile-thumb.config000644 000765 000024 00000000177 12534342603 030555 0ustar00williamcoledastaff000000 000000 # auto-generated by ./configure PREFIX=/usr/local ASFLAGS=-mthumb CFLAGS=-fPIC -mthumb CXXFLAGS=-fPIC -mthumb LDFLAGS=-lm -ldl nqp-2015.11/3rdparty/dyncall/test/arm-thumb-interwork/README.txt000644 000765 000024 00000000317 12534342603 026226 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/arm-thumb-interwork/build.sh000644 000765 000024 00000000262 12534342603 026162 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/call_suite/Makefile.M000644 000765 000024 00000000153 12534342603 024567 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/call_suite/Makefile.embedded000644 000765 000024 00000000744 12534342603 026132 0ustar00williamcoledastaff000000 000000 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 -ldyncall_s .PHONY: all clean config config-random all: ${TARGET} call_suite: ${OBJS} ${CC} ${OBJS} ${LDFLAGS} -o $@ config: ${LUA} mk-cases.lua cases.h config-random: ${LUA} rand-sig.lua >cases.txt ${LUA} mk-cases.lua cases.h cases.o: cases.h clean: rm -f ${TARGET} nqp-2015.11/3rdparty/dyncall/test/call_suite/Makefile.generic000644 000765 000024 00000001036 12534342603 026010 0ustar00williamcoledastaff000000 000000 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 .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 cases.h config-random: ${LUA} rand-sig.lua >cases.txt ${LUA} mk-cases.lua cases.h nqp-2015.11/3rdparty/dyncall/test/call_suite/Nmakefile000644 000765 000024 00000003734 12534342603 024562 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2011 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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.h !INCLUDE $(TOP)\buildsys\nmake\epilog.nmake nqp-2015.11/3rdparty/dyncall/test/call_suite/README.txt000644 000765 000024 00000000056 12534342603 024434 0ustar00williamcoledastaff000000 000000 call_suite for dyncall written in C and Lua. nqp-2015.11/3rdparty/dyncall/test/call_suite/cases.c000644 000765 000024 00000002726 12534342603 024206 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/call_suite/cases.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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]); nqp-2015.11/3rdparty/dyncall/test/call_suite/cases.h000644 000765 000024 00000105242 12534342603 024210 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/call_suite/cases.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; nqp-2015.11/3rdparty/dyncall/test/call_suite/cases.txt000644 000765 000024 00000003330 12534342603 024573 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/call_suite/config.lua000644 000765 000024 00000000142 12534342603 024702 0ustar00williamcoledastaff000000 000000 -- user config for rand-sig.lua: minargs = 0 maxargs = 32 ncases = 100 types = "csijlpfd" nqp-2015.11/3rdparty/dyncall/test/call_suite/design.txt000644 000765 000024 00000001636 12534342603 024755 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/call_suite/dynMakefile000644 000765 000024 00000000324 12534342603 025107 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/call_suite/globals.c000644 000765 000024 00000004116 12534342603 024526 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/call_suite/globals.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include "globals.h" #include #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, Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/call_suite/invoke.c000644 000765 000024 00000007465 12534342603 024410 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/call_suite/invoke.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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; } nqp-2015.11/3rdparty/dyncall/test/call_suite/main.c000644 000765 000024 00000003323 12534342603 024026 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/call_suite/main.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include #include "../common/platformInit.h" 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, # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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.h <$TOP/buildsys/mk/epilog.mk nqp-2015.11/3rdparty/dyncall/test/call_suite/rand-sig.lua000644 000765 000024 00000000553 12534342603 025147 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/callback_plain/CMakeLists.txt000644 000765 000024 00000000147 12534342603 026272 0ustar00williamcoledastaff000000 000000 # add_executable(callback_plain callback_plain.c) target_link_libraries(callback_plain dyncallback_s) nqp-2015.11/3rdparty/dyncall/test/callback_plain/Makefile.M000644 000765 000024 00000000153 12534342603 025362 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/callback_plain/Makefile.embedded000644 000765 000024 00000000437 12534342603 026724 0ustar00williamcoledastaff000000 000000 APP = callback_plain OBJS = callback_plain.o SRCTOP = ../.. BLDTOP = ${SRCTOP} CFLAGS += -I${SRCTOP}/dyncall LDFLAGS += -L${BLDTOP}/dyncallback -ldyncallback_s all: ${APP} .PHONY: all clean install ${APP}: ${OBJS} ${CC} ${OBJS} ${LDFLAGS} -o ${APP} clean: rm -f ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/callback_plain/Makefile.generic000644 000765 000024 00000000565 12534342603 026611 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/callback_plain/Nmakefile000644 000765 000024 00000003645 12534342603 025356 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/callback_plain/callback_plain.c000644 000765 000024 00000005112 12534342603 026612 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_plain/callback_plain.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_arm32_arm.h" #include "../../dyncallback/dyncall_callback.h" #include #include "../common/platformInit.h" 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 'i'; // @@@ support needed for 's', etc } 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, 9909ll); 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; } nqp-2015.11/3rdparty/dyncall/test/callback_plain/dynMakefile000644 000765 000024 00000000324 12534342603 025702 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/callback_plain/mkfile000644 000765 000024 00000002254 12534342603 024725 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2013 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/callback_suite/CMakeLists.txt000644 000765 000024 00000000247 12534342603 026321 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/callback_suite/Makefile.M000644 000765 000024 00000000153 12534342603 025410 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/callback_suite/Makefile.embedded000644 000765 000024 00000000632 12534342603 026747 0ustar00williamcoledastaff000000 000000 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 -ldyncall_s -L${BLDTOP}/dyncallback -ldyncallback_s all: ${APP} .PHONY: all clean install ${APP}: ${OBJS} ${CC} ${OBJS} ${LDFLAGS} -o ${APP} clean: rm -f ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/callback_suite/Makefile.generic000644 000765 000024 00000002637 12534342603 026641 0ustar00williamcoledastaff000000 000000 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-5.1 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 >$@ nqp-2015.11/3rdparty/dyncall/test/callback_suite/Nmakefile000644 000765 000024 00000004067 12534342603 025403 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/callback_suite/README.txt000644 000765 000024 00000003473 12534342603 025263 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/callback_suite/_auto_config.h000644 000765 000024 00000000107 12534342603 026361 0ustar00williamcoledastaff000000 000000 #define CONFIG_NSIGS 400 #define CONFIG_MAXARGS 29 #define CONFIG_API nqp-2015.11/3rdparty/dyncall/test/callback_suite/_auto_invoke_macros.h000644 000765 000024 00000021774 12534342603 027770 0ustar00williamcoledastaff000000 000000 #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);} nqp-2015.11/3rdparty/dyncall/test/callback_suite/_auto_invoke_table.h000644 000765 000024 00000005204 12534342603 027561 0ustar00williamcoledastaff000000 000000 &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, nqp-2015.11/3rdparty/dyncall/test/callback_suite/_auto_invokers.h000644 000765 000024 00000037512 12534342603 026766 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/callback_suite/_auto_signatures.txt000644 000765 000024 00000015554 12534342603 027704 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/callback_suite/_auto_sigstrings.h000644 000765 000024 00000020034 12534342603 027311 0ustar00williamcoledastaff000000 000000 "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", nqp-2015.11/3rdparty/dyncall/test/callback_suite/config-random.lua000644 000765 000024 00000002537 12534342603 027013 0ustar00williamcoledastaff000000 000000 -- 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)) nqp-2015.11/3rdparty/dyncall/test/callback_suite/config-stress1.lua000644 000765 000024 00000002647 12534342603 027141 0ustar00williamcoledastaff000000 000000 -- section 'main' -------------------------------------------------------------- nsigs = 6 -- number of test cases mode = "designed" -- generator mode: 'random', 'ordered' or 'designed' type sequences designfile= "stress1.cfg" -- design file minargs = 0 -- minimum num. of supported arguments (>= 0) maxargs = 10 -- 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)) nqp-2015.11/3rdparty/dyncall/test/callback_suite/config.lua000644 000765 000024 00000002652 12534342603 025533 0ustar00williamcoledastaff000000 000000 -- 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)) nqp-2015.11/3rdparty/dyncall/test/callback_suite/do_test.c000644 000765 000024 00000007050 12534342603 025365 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/do_test.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #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 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 ", pos); } 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; } nqp-2015.11/3rdparty/dyncall/test/callback_suite/dynMakefile000644 000765 000024 00000000324 12534342603 025730 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/callback_suite/dyncall_value_set.h000644 000765 000024 00000002377 12534342603 027435 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/dyncall_value_set.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; nqp-2015.11/3rdparty/dyncall/test/callback_suite/env.c000644 000765 000024 00000007763 12534342603 024527 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/env.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #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; nqp-2015.11/3rdparty/dyncall/test/callback_suite/env.h000644 000765 000024 00000002647 12534342603 024530 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/env.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; nqp-2015.11/3rdparty/dyncall/test/callback_suite/handler.c000644 000765 000024 00000006455 12534342603 025351 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/handler.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #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].l = dcbArgLong (input); break; case DC_SIGCHAR_ULONG: Args[pos].L = 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); switch(ch) { case DC_SIGCHAR_BOOL: return 'i'; case DC_SIGCHAR_CHAR: return 'i'; case DC_SIGCHAR_UCHAR: return 'i'; case DC_SIGCHAR_SHORT: return 'i'; case DC_SIGCHAR_USHORT: return 'i'; case DC_SIGCHAR_INT: return 'i'; case DC_SIGCHAR_UINT: return 'i'; case DC_SIGCHAR_LONG: return (sizeof(long) == 4) ? 'i' : 'l'; case DC_SIGCHAR_ULONG: return (sizeof(long) == 4) ? 'i' : 'l'; 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 (sizeof(void*) == 4) ? 'i' : 'l'; default: assert(0); return 'v'; } } nqp-2015.11/3rdparty/dyncall/test/callback_suite/invokers.c000644 000765 000024 00000003372 12534342603 025567 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/invokers.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #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); } nqp-2015.11/3rdparty/dyncall/test/callback_suite/invokers.h000644 000765 000024 00000001747 12534342603 025600 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/invokers.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); nqp-2015.11/3rdparty/dyncall/test/callback_suite/main.c000644 000765 000024 00000004767 12534342603 024664 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/main.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include #include #include "_auto_config.h" #include "env.h" #include "print.h" #include "../common/platformInit.h" 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; } nqp-2015.11/3rdparty/dyncall/test/callback_suite/make-config.lua000644 000765 000024 00000000717 12534342603 026446 0ustar00williamcoledastaff000000 000000 require "config" function fromConfig() local defs = { MAXARGS = maxargs, NSIGS = nsigs, API = api } return defs end function fromDesignFile() local defs = { MAXARGS = maxargs, NSIGS = 5, API = api } return defs end local defs if mode == "designed" then defs = fromDesignFile() else defs = fromConfig() end for k,v in pairs(defs) do io.write("#define CONFIG_" .. k .. " " .. v .. "\n" ) end io.flush() nqp-2015.11/3rdparty/dyncall/test/callback_suite/make-cstrings.lua000644 000765 000024 00000000153 12534342603 027027 0ustar00williamcoledastaff000000 000000 require "config" for line in io.lines() do io.write( '"' .. ccprefix .. line .. '",\n' ) end io.flush() nqp-2015.11/3rdparty/dyncall/test/callback_suite/make-invoke-macros.lua000644 000765 000024 00000001136 12534342603 027752 0ustar00williamcoledastaff000000 000000 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() nqp-2015.11/3rdparty/dyncall/test/callback_suite/make-invoke-table.lua000644 000765 000024 00000000140 12534342603 027547 0ustar00williamcoledastaff000000 000000 require "config" local i for i = 1, nsigs do line = "&f" .. i .. ",\n" io.write(line) end nqp-2015.11/3rdparty/dyncall/test/callback_suite/make-invokers.lua000644 000765 000024 00000000643 12534342603 027037 0ustar00williamcoledastaff000000 000000 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() nqp-2015.11/3rdparty/dyncall/test/callback_suite/make-signatures.lua000644 000765 000024 00000003005 12534342603 027356 0ustar00williamcoledastaff000000 000000 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() nqp-2015.11/3rdparty/dyncall/test/callback_suite/mkfile000644 000765 000024 00000002340 12534342603 024747 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2013 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/callback_suite/print.c000644 000765 000024 00000003142 12534342603 025056 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/print.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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); } nqp-2015.11/3rdparty/dyncall/test/callback_suite/print.h000644 000765 000024 00000002164 12534342603 025066 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/print.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); nqp-2015.11/3rdparty/dyncall/test/callback_suite/signature_utils.c000644 000765 000024 00000002203 12534342603 027140 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/signature_utils.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/test/callback_suite/signature_utils.h000644 000765 000024 00000002004 12534342603 027144 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/signature_utils.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); nqp-2015.11/3rdparty/dyncall/test/callback_suite/sigstrings.c000644 000765 000024 00000002157 12534342603 026123 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/sigstrings.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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]; } nqp-2015.11/3rdparty/dyncall/test/callback_suite/sigstrings.h000644 000765 000024 00000002001 12534342603 026114 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callback_suite/sigstrings.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/test/callback_suite/stress1.cfg000644 000765 000024 00000000132 12534342604 025640 0ustar00williamcoledastaff000000 000000 iiiiii)i ffffff)f dddddd)d idfdid)l fdfdid)i fdidid)f ffidid)d didddd)l dfdidd)i ddiddd)f nqp-2015.11/3rdparty/dyncall/test/callf/CMakeLists.txt000644 000765 000024 00000000105 12534342604 024427 0ustar00williamcoledastaff000000 000000 add_executable(callf main.c) target_link_libraries(callf dyncall_s) nqp-2015.11/3rdparty/dyncall/test/callf/Makefile.M000644 000765 000024 00000000153 12534342604 023525 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/callf/Makefile.embedded000644 000765 000024 00000000342 12534342604 025062 0ustar00williamcoledastaff000000 000000 APP = callf OBJS = main.o TOP = ../.. CFLAGS += -I${TOP}/dyncall LDFLAGS += -L${TOP}/dyncall -ldyncall_s all: ${APP} .PHONY: all clean ${APP}: ${OBJS} ${CC} ${OBJS} ${LDFLAGS} -o ${APP} clean: rm -f ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/callf/Makefile.generic000644 000765 000024 00000000533 12534342604 024747 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/callf/Nmakefile000644 000765 000024 00000003553 12534342604 023517 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/callf/dynMakefile000644 000765 000024 00000000324 12534342604 024045 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/callf/main.c000644 000765 000024 00000003070 12534342604 022763 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/callf/main.c Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include "../common/platformInit.h" /* sample void function */ int vf_iii(int x,int y,int z) { printf("%d %d %d\n", x, y, z); return (x == 1 && y == 2 && z == 3); } /* main */ int main(int argc, char* argv[]) { DCCallVM* vm; DCValue r; dcTest_initPlatform(); /* allocate call vm */ vm = dcNewCallVM(4096); dcReset(vm); /* call using 'formatted' API */ dcCallF(vm, &r, (void*) &vf_iii, "iii)i", 1, 2, 3); /* free vm */ dcFree(vm); printf("result: callf: %d\n", r.i); dcTest_deInitPlatform(); return 0; } nqp-2015.11/3rdparty/dyncall/test/callf/mkfile000644 000765 000024 00000002226 12534342604 023067 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/common/platformInit.h000644 000765 000024 00000005210 12534342604 024721 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/common/platformInit.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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__OS_NDS) #include #include 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) #include #include #include PSP_MODULE_INFO("dyncall_test",0,1,1); #define printf pspDebugScreenPrintf 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 void dcTest_initPlatform() { } void dcTest_deInitPlatform() { } #endif nqp-2015.11/3rdparty/dyncall/test/dynMakefile000644 000765 000024 00000000256 12534342604 022770 0ustar00williamcoledastaff000000 000000 all: ./../buildsys/dynmake/dynmake.bat $(?:/=\\) all && exit || sh $(?:bat=sh) all clean: ./../buildsys/dynmake/dynmake.bat $(?:/=\\) clean && exit || sh $(?:bat=sh) clean nqp-2015.11/3rdparty/dyncall/test/ellipsis/CMakeLists.txt000644 000765 000024 00000000130 12534342604 025170 0ustar00williamcoledastaff000000 000000 add_executable(ellipsis main.cc ellipsis.cc) target_link_libraries(ellipsis dyncall_s) nqp-2015.11/3rdparty/dyncall/test/ellipsis/Makefile.M000644 000765 000024 00000000153 12534342604 024270 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/ellipsis/Makefile.embedded000644 000765 000024 00000000377 12534342604 025635 0ustar00williamcoledastaff000000 000000 APP = ellipsis OBJS = ellipsis.o main.o TOP = ../.. CFLAGS += -I${TOP}/dyncall LDFLAGS += -L${TOP}/dyncall -ldyncall_s all: ${APP} .PHONY: all clean install ${APP}: ${OBJS} ${CXX} ${OBJS} ${LDFLAGS} -o ${APP} clean: rm -f ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/ellipsis/Makefile.generic000644 000765 000024 00000000571 12534342604 025514 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/ellipsis/Nmakefile000644 000765 000024 00000003774 12534342604 024267 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/ellipsis/README.txt000644 000765 000024 00000003167 12534342604 024143 0ustar00williamcoledastaff000000 000000 dyncall stress test suite: testing ellipsis C calls =================================================== Copyright (c) 2007-2009 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 - run test id ellipsis - run test id to id (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 nqp-2015.11/3rdparty/dyncall/test/ellipsis/case.h000644 000765 000024 00000010152 12534342604 023521 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/ellipsis/case.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/test/ellipsis/config.h000644 000765 000024 00000002006 12534342604 024052 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/ellipsis/config.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/ellipsis/dynMakefile000644 000765 000024 00000000324 12534342604 024610 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/ellipsis/ellipsis.cc000644 000765 000024 00000011000 12534342604 024561 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/ellipsis/ellipsis.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #else #include #endif DCValue mValue[NARGS]; void clearValues() { for(int i = 0;i 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,0);} #define VF2(id,A1,A2,S) void S (A1 a1, ...) {va_list l;va_start(l,a1);gID=id;g(a1,0);g(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,0);g(va_arg(l,A2),1);g(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,0);g(va_arg(l,A2),1);g(va_arg(l,A3),2);g(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,0);g(va_arg(l,A2),1);g(va_arg(l,A3),2);g(va_arg(l,A4),3);g(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,0);g(va_arg(l,A2),1);g(va_arg(l,A3),2);g(va_arg(l,A4),3);g(va_arg(l,A5),4);g(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,0);g(va_arg(l,A2),1);g(va_arg(l,A3),2);g(va_arg(l,A4),3);g(va_arg(l,A5),4);g(va_arg(l,A6),5);g(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,0);g(va_arg(l,A2),1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(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,0);g(va_arg(l,A2),1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(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,0);g(va_arg(l,A2),1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(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]; } nqp-2015.11/3rdparty/dyncall/test/ellipsis/main.cc000644 000765 000024 00000010001 12534342604 023661 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/ellipsis/main.cc Description: call (...) functions via dyncall library, targets are auto-generated License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include "../../dyncall/dyncall.h" #include "../../dyncall/dyncall_value.h" #include #include #include "../common/platformInit.h" 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( 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" nqp-2015.11/3rdparty/dyncall/test/ellipsis/mkcase.py000644 000765 000024 00000003671 12534342604 024262 0ustar00williamcoledastaff000000 000000 #!/usr/bin/python #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/gen-masm/call_x64.S000644 000765 000024 00000010722 12534342604 024060 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/gen-masm/call_x64.S Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/gen-masm/call_x64.masm000644 000765 000024 00000002300 12534342604 024604 0ustar00williamcoledastaff000000 000000 .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 nqp-2015.11/3rdparty/dyncall/test/gen-masm/call_x86.S000644 000765 000024 00000017512 12534342604 024070 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/gen-masm/call_x86.S Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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_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 , // Tassilo Philipp // // Permission to use, copy, modify, and distribute this software for any // purpose with or without fee is hereby granted, provided that the above // copyright notice and this permission notice appear in all copies. // // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/gen-masm/call_x86.masm000644 000765 000024 00000004266 12534342604 024625 0ustar00williamcoledastaff000000 000000 .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 nqp-2015.11/3rdparty/dyncall/test/gen-masm/dyncall_macros.h000644 000765 000024 00000013653 12534342604 025471 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/gen-masm/dyncall_macros.h Description: Platform detection macros License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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__) #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 #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 /* 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 /* 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__) # 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__) # define DC__Arch_PowerPC #elif defined(__ppc64__) || defined(_ARCH_PPC64) || defined(__power64__) # define DC__Arch_PPC64 #elif defined(__mips64__) # define DC__Arch_MIPS64 #elif defined(_M_MRX000) || defined(__mips__) # define DC__Arch_MIPS #elif defined(__arm__) && !defined(__thumb__) # define DC__Arch_ARM_ARM #elif defined(__arm__) && defined(__thumb__) # define DC__Arch_ARM_THUMB #elif defined(__sh__) # define DC__Arch_SuperH #endif /* Rough OS classification. */ #if defined(DC__OS_Win32) || defined(DC__OS_Win64) # define DC_WINDOWS #elif defined(DC__OS_NDS) || defined(DC__OS_PSP) # define DC_OTHER #else # define DC_UNIX #endif /* Misc machine-dependent quirks. */ #if defined(DC__Arch_ARM_ARM) || defined(DC__Arch_ARM_THUMB) # if defined(__ARM_EABI__) || defined(DC__OS_NDS) # define DC__ABI_ARM_EABI # elif defined(__APCS_32__) # define DC__ABI_ARM_APCS32 # endif #endif /* ARM */ #if defined(DC__Arch_MIPS) || defined(DC__Arch_MIPS64) # if defined(_ABIO32) # 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 */ #endif /* DYNCALL_MACROS_H */ nqp-2015.11/3rdparty/dyncall/test/gen-masm/gen_masm.sh000644 000765 000024 00000000137 12534342604 024441 0ustar00williamcoledastaff000000 000000 gcc -E -P -DGEN_MASM call_x86.S >call_x86.masm gcc -E -P -DGEN_MASM call_x64.S >call_x64.masm nqp-2015.11/3rdparty/dyncall/test/hacking-arm-thumb-interwork/Makefile.darwin000644 000765 000024 00000001151 12534342604 031053 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/hacking-arm-thumb-interwork/Makefile.linux000644 000765 000024 00000000316 12534342604 030730 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/hacking-arm-thumb-interwork/README.txt000644 000765 000024 00000000266 12534342604 027634 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/hacking-arm-thumb-interwork/arm.c000644 000765 000024 00000001731 12534342604 027057 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-arm-thumb-interwork/arm.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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() { } nqp-2015.11/3rdparty/dyncall/test/hacking-arm-thumb-interwork/diff-gcc-defs/diff-generic.sh000644 000765 000024 00000001264 12534342604 033374 0ustar00williamcoledastaff000000 000000 #!/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. nqp-2015.11/3rdparty/dyncall/test/hacking-arm-thumb-interwork/diff-gcc-defs/empty.S000644 000765 000024 00000001731 12534342604 031777 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-arm-thumb-interwork/diff-gcc-defs/empty.S Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ nqp-2015.11/3rdparty/dyncall/test/hacking-arm-thumb-interwork/diff-gcc-defs/empty.c000644 000765 000024 00000001731 12534342604 032017 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-arm-thumb-interwork/diff-gcc-defs/empty.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ nqp-2015.11/3rdparty/dyncall/test/hacking-arm-thumb-interwork/test.c000644 000765 000024 00000002260 12534342604 027255 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-arm-thumb-interwork/test.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include 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; } nqp-2015.11/3rdparty/dyncall/test/hacking-arm-thumb-interwork/thumb.c000644 000765 000024 00000001735 12534342604 027423 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-arm-thumb-interwork/thumb.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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() { } nqp-2015.11/3rdparty/dyncall/test/hacking-mips/README.txt000644 000765 000024 00000000101 12534342604 024652 0ustar00williamcoledastaff000000 000000 here are some snippets that helped when exploring the mips abis. nqp-2015.11/3rdparty/dyncall/test/hacking-mips/call.c000644 000765 000024 00000002045 12534342604 024244 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-mips/call.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); } nqp-2015.11/3rdparty/dyncall/test/hacking-mips/calls.c000644 000765 000024 00000004463 12534342604 024435 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-mips/calls.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 ); } nqp-2015.11/3rdparty/dyncall/test/hacking-mips/common.h000644 000765 000024 00000002526 12534342604 024632 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-mips/common.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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(); nqp-2015.11/3rdparty/dyncall/test/hacking-mips/dispatch.c000644 000765 000024 00000002225 12534342604 025130 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-mips/dispatch.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; */ } nqp-2015.11/3rdparty/dyncall/test/hacking-mips/f.c000644 000765 000024 00000002043 12534342604 023554 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-mips/f.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/test/hacking-mips/f0.c000644 000765 000024 00000001710 12534342604 023634 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-mips/f0.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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() { } nqp-2015.11/3rdparty/dyncall/test/hacking-mips/funs.c000644 000765 000024 00000002103 12534342604 024277 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-mips/funs.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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; } nqp-2015.11/3rdparty/dyncall/test/hacking-mips/main.c000644 000765 000024 00000002445 12534342604 024261 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-mips/main.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #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; } nqp-2015.11/3rdparty/dyncall/test/hacking-mips/node.c000644 000765 000024 00000002503 12534342604 024255 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-mips/node.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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(); } nqp-2015.11/3rdparty/dyncall/test/hacking-mips/prolog.c000644 000765 000024 00000003005 12534342604 024630 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-mips/prolog.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/test/hacking-mips/retn.c000644 000765 000024 00000002145 12534342604 024302 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/hacking-mips/retn.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/test/makepkg.sh000755 000765 000024 00000001225 12534342604 022570 0ustar00williamcoledastaff000000 000000 #!/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 nqp-2015.11/3rdparty/dyncall/test/malloc_wx/CMakeLists.txt000644 000765 000024 00000000124 12534342604 025334 0ustar00williamcoledastaff000000 000000 add_executable(malloc_wx test_wx.c) target_link_libraries(malloc_wx dyncallback_s) nqp-2015.11/3rdparty/dyncall/test/malloc_wx/Makefile.M000644 000765 000024 00000000153 12534342604 024431 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/malloc_wx/Makefile.embedded000644 000765 000024 00000000405 12534342604 025766 0ustar00williamcoledastaff000000 000000 APP = malloc_wx OBJS = test_wx.o TOP = ../.. CFLAGS += -I${TOP}/dyncallback -I${TOP}/dyncall LDFLAGS += -L${TOP}/dyncallback -ldyncallback_s all: ${APP} .PHONY: all clean ${APP}: ${OBJS} ${CC} ${OBJS} ${LDFLAGS} -o ${APP} clean: rm -f ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/malloc_wx/Makefile.generic000644 000765 000024 00000000603 12534342604 025651 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/malloc_wx/Nmakefile000644 000765 000024 00000003701 12534342604 024416 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/malloc_wx/dynMakefile000644 000765 000024 00000000324 12534342604 024751 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/malloc_wx/mkfile000644 000765 000024 00000002240 12534342604 023767 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2013 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/malloc_wx/test_wx.c000644 000765 000024 00000002423 12534342604 024441 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/malloc_wx/test_wx.c Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include "../common/platformInit.h" 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; } nqp-2015.11/3rdparty/dyncall/test/mkfile000644 000765 000024 00000002425 12534342604 022007 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/nm/CMakeLists.txt000644 000765 000024 00000000075 12534342604 023766 0ustar00williamcoledastaff000000 000000 add_executable(nm nm.c) target_link_libraries(nm dynload_s) nqp-2015.11/3rdparty/dyncall/test/nm/Makefile.M000644 000765 000024 00000000153 12534342604 023056 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/nm/Makefile.embedded000644 000765 000024 00000000421 12534342604 024411 0ustar00williamcoledastaff000000 000000 APP = nm OBJS = nm.o TOP = ../.. CFLAGS += -I${TOP}/dynload LDLIBS = -L${TOP}/dynload -ldynload_s ${LDFLAGS} # Works on: Darwin, NetBSD. # Linux: add '-ldl' all: ${APP} .PHONY: all clean ${APP}: ${OBJS} ${CC} ${OBJS} ${LDLIBS} -o $@ clean: rm -f ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/nm/Makefile.generic000644 000765 000024 00000000607 12534342604 024302 0ustar00williamcoledastaff000000 000000 APP = nm OBJS = nm.o SRCTOP = ${VPATH}/../.. BLDTOP = ../.. CFLAGS += -I${SRCTOP}/dynload LDLIBS += -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} -o ${APP} clean: rm -f ${APP} ${OBJS} install: mkdir -p ${PREFIX}/test cp ${APP} ${PREFIX}/test nqp-2015.11/3rdparty/dyncall/test/nm/Nmakefile000644 000765 000024 00000003656 12534342604 023054 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007-2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/nm/dynMakefile000644 000765 000024 00000000324 12534342604 023376 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/nm/nm.c000644 000765 000024 00000003415 12534342604 022005 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/nm/nm.c Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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 \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; } nqp-2015.11/3rdparty/dyncall/test/plain/CMakeLists.txt000644 000765 000024 00000000131 12534342604 024450 0ustar00williamcoledastaff000000 000000 add_executable(plain test_main.c test_structs.c) target_link_libraries(plain dyncall_s) nqp-2015.11/3rdparty/dyncall/test/plain/Makefile.M000644 000765 000024 00000000363 12534342604 023552 0ustar00williamcoledastaff000000 000000 #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 nqp-2015.11/3rdparty/dyncall/test/plain/Makefile.embedded000644 000765 000024 00000000374 12534342604 025111 0ustar00williamcoledastaff000000 000000 APP = plain OBJS = test_main.o test_structs.o TOP = ../.. CFLAGS += -I${TOP}/dyncall LDFLAGS += -L${TOP}/dyncall -ldyncall_s all: ${APP} .PHONY: all clean install ${APP}: ${OBJS} ${CC} ${OBJS} ${LDFLAGS} -o ${APP} clean: rm -f ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/plain/Makefile.generic000644 000765 000024 00000000560 12534342604 024771 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/plain/Nmakefile000644 000765 000024 00000003701 12534342604 023534 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/plain/dynMakefile000644 000765 000024 00000000324 12534342604 024067 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/plain/mkfile000644 000765 000024 00000002250 12534342604 023106 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/plain/test_framework.h000644 000765 000024 00000004421 12534342604 025123 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/plain/test_framework.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 # 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 #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; } nqp-2015.11/3rdparty/dyncall/test/plain/test_main.c000644 000765 000024 00000016275 12534342604 024057 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/plain/test_main.c Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include "../common/platformInit.h" /* ------------------------------------------------------------------------- * 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; } nqp-2015.11/3rdparty/dyncall/test/plain/test_structs.c000644 000765 000024 00000013451 12534342604 024633 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/plain/test_structs.c Description: License: Copyright (c) 2010-2011 Olivier Chafik Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 //#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 nqp-2015.11/3rdparty/dyncall/test/plain_c++/CMakeLists.txt000644 000765 000024 00000000124 12534342604 025102 0ustar00williamcoledastaff000000 000000 add_executable(plain_cxx test_main.cc) target_link_libraries(plain_cxx dyncall_s) nqp-2015.11/3rdparty/dyncall/test/plain_c++/Makefile.M000644 000765 000024 00000000153 12534342604 024177 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/plain_c++/Makefile.embedded000644 000765 000024 00000000365 12534342604 025541 0ustar00williamcoledastaff000000 000000 APP = plain_c++ OBJS = test_main.o TOP = ../.. CFLAGS += -I${TOP}/dyncall LDFLAGS += -L${TOP}/dyncall -ldyncall_s all: ${APP} .PHONY: all clean install ${APP}: ${OBJS} ${CXX} ${OBJS} ${LDFLAGS} -o ${APP} clean: rm -f ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/plain_c++/Makefile.generic000644 000765 000024 00000000564 12534342604 025425 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/plain_c++/Nmakefile000644 000765 000024 00000003503 12534342604 024164 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/plain_c++/dynMakefile000644 000765 000024 00000000324 12534342604 024517 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/plain_c++/mkfile000644 000765 000024 00000002172 12534342604 023541 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/plain_c++/test_framework.h000644 000765 000024 00000004443 12534342604 025557 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/plain_c++/test_framework.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 # 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 #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; } nqp-2015.11/3rdparty/dyncall/test/plain_c++/test_main.cc000644 000765 000024 00000020323 12534342604 024637 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/plain_c++/test_main.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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" /* needed by SunPro .. otherwise printf not included */ #if defined(__SUNPRO_CC) || defined(__ANDROID__) #include #else #include #endif #include "../common/platformInit.h" /* ------------------------------------------------------------------------- * 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 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(pc); dcFree(pc); DC_DEFINE_TEST_FUNC_END #endif DC_DEFINE_TEST_FUNC_BEGIN(testCallThisC) DCCallVM* pc = dcNewCallVM(4096); dcReset(pc); testCallValue(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" nqp-2015.11/3rdparty/dyncall/test/resolve_self/Makefile.M000644 000765 000024 00000000153 12534342604 025134 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/resolve_self/Makefile.embedded000644 000765 000024 00000000374 12534342604 026476 0ustar00williamcoledastaff000000 000000 APP = resolve_self OBJS = main.o TOP = ../.. CFLAGS += -I${TOP}/dynload LDLIBS = -L${TOP}/dynload -ldynload_s ${LDFLAGS} all: ${APP} .PHONY: all clean install ${APP}: ${OBJS} ${CC} ${OBJS} ${LDLIBS} -o ${APP} clean: rm -f ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/resolve_self/Makefile.generic000644 000765 000024 00000000544 12534342604 026360 0ustar00williamcoledastaff000000 000000 APP = resolve_self OBJS = main.o SRCTOP = ${VPATH}/../.. BLDTOP = ../.. CFLAGS += -I${SRCTOP}/dynload LDLIBS += -L${BLDTOP}/dynload -ldynload_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 nqp-2015.11/3rdparty/dyncall/test/resolve_self/Nmakefile000644 000765 000024 00000003261 12534342604 025122 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007-2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/resolve_self/README.txt000644 000765 000024 00000000722 12534342604 025001 0ustar00williamcoledastaff000000 000000 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. nqp-2015.11/3rdparty/dyncall/test/resolve_self/dynMakefile000644 000765 000024 00000000324 12534342604 025454 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/resolve_self/main.c000644 000765 000024 00000003133 12534342604 024372 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/resolve_self/main.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include #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; } nqp-2015.11/3rdparty/dyncall/test/runalltests.bat000644 000765 000024 00000001015 12534342604 023657 0ustar00williamcoledastaff000000 000000 @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 nqp-2015.11/3rdparty/dyncall/test/runalltests.sh000644 000765 000024 00000000226 12534342604 023526 0ustar00williamcoledastaff000000 000000 A="callf ellipsis malloc_wx plain plain_c++ suite suite2 suite3 suite_floats callback_plain call_suite callback_suite" for i in $A ; do $i/$i done nqp-2015.11/3rdparty/dyncall/test/samples/calls/d16.c000644 000765 000024 00000002163 12534342604 024114 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/samples/calls/d16.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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]); } nqp-2015.11/3rdparty/dyncall/test/samples/calls/d20.c000644 000765 000024 00000002225 12534342604 024106 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/samples/calls/d20.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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]); } nqp-2015.11/3rdparty/dyncall/test/samples/calls/d40.c000644 000765 000024 00000002305 12534342604 024107 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/samples/calls/d40.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 ); } nqp-2015.11/3rdparty/dyncall/test/samples/calls/f16.c000644 000765 000024 00000002162 12534342604 024115 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/samples/calls/f16.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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]); } nqp-2015.11/3rdparty/dyncall/test/samples/calls/f20.c000644 000765 000024 00000002125 12534342604 024107 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/samples/calls/f20.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); } nqp-2015.11/3rdparty/dyncall/test/samples/calls/f40.c000644 000765 000024 00000002304 12534342604 024110 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/samples/calls/f40.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 ); } nqp-2015.11/3rdparty/dyncall/test/samples/calls/fd40.c000644 000765 000024 00000002564 12534342604 024264 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/samples/calls/fd40.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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] ); } nqp-2015.11/3rdparty/dyncall/test/samples/calls/i3.c000644 000765 000024 00000001777 12534342604 024047 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/samples/calls/i3.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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]); } nqp-2015.11/3rdparty/dyncall/test/samples/calls/i7.c000644 000765 000024 00000002002 12534342604 024031 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/samples/calls/i7.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); } nqp-2015.11/3rdparty/dyncall/test/samples/calls/id40.c000644 000765 000024 00000002570 12534342604 024264 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/samples/calls/id40.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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] ); } nqp-2015.11/3rdparty/dyncall/test/samples/calls/l16.c000644 000765 000024 00000002167 12534342604 024130 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/samples/calls/l16.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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]); } nqp-2015.11/3rdparty/dyncall/test/samples/calls/many.c000644 000765 000024 00000003105 12534342604 024463 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/samples/calls/many.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); } nqp-2015.11/3rdparty/dyncall/test/samples/composite/args.asm000644 000765 000024 00000030352 12534342604 025721 0ustar00williamcoledastaff000000 000000 ; 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 nqp-2015.11/3rdparty/dyncall/test/samples/composite/args.c000644 000765 000024 00000011454 12534342604 025365 0ustar00williamcoledastaff000000 000000 // 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 #endif #if defined(__i386__) || defined(__x86_64__) && ( defined(__MMX__) || defined(__SSE__) ) #if defined(__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ > 2) #include #if defined(__AVX__) #define V256 1 typedef __m256 v256_t; #endif #else #include #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); } nqp-2015.11/3rdparty/dyncall/test/samples/composite/args.s000644 000765 000024 00000024253 12534342604 025406 0ustar00williamcoledastaff000000 000000 .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 nqp-2015.11/3rdparty/dyncall/test/samples/composite/build.bat000644 000765 000024 00000000036 12534342604 026046 0ustar00williamcoledastaff000000 000000 cl /c /O2 args.c /Faargs.asm nqp-2015.11/3rdparty/dyncall/test/samples/composite/makefile000644 000765 000024 00000000433 12534342604 025760 0ustar00williamcoledastaff000000 000000 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} nqp-2015.11/3rdparty/dyncall/test/sharedlib/CMakeLists.txt000644 000765 000024 00000000125 12534342604 025305 0ustar00williamcoledastaff000000 000000 add_library(sharedlib SHARED sharedlib.c) target_link_libraries(sharedlib dynload_s) nqp-2015.11/3rdparty/dyncall/test/sharedlib/Makefile.embedded000644 000765 000024 00000000526 12534342604 025742 0ustar00williamcoledastaff000000 000000 MAKEFILE = Makefile.embedded MAKE_CMD = ${MAKE} -f ${MAKEFILE} TARGET = libsharedlib.so OBJS = sharedlib.o CPPFLAGS += -I../../dynload LDFLAGS += -L../../dynload -ldynload_s ${TARGET}: ${OBJS} ${CC} -shared -o $@ $? ${LDFLAGS} all: ${TARGET} clean: rm -f ${TARGET} ${OBJS} sun-gcc: CC=gcc CFLAGS="${CFLAGS} -fPIC" ${MAKE_CMD} all nqp-2015.11/3rdparty/dyncall/test/sharedlib/sharedlib.c000644 000765 000024 00000002031 12534342604 024644 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/sharedlib/sharedlib.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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); } nqp-2015.11/3rdparty/dyncall/test/sign/sign.c000644 000765 000024 00000002423 12534342604 022657 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/sign/sign.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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); dcArgChar( vm, (char) 255 ); result = dcCallInt( vm, &add1 ); total = (result == 256); printf("result: sign: %d\n", total); return 0; } nqp-2015.11/3rdparty/dyncall/test/suite/CMakeLists.txt000644 000765 000024 00000000212 12534342604 024476 0ustar00williamcoledastaff000000 000000 add_executable(suite main.c case.c) if(WIN32) else() list(APPEND AUX_LIBS m) endif() target_link_libraries(suite dyncall_s ${AUX_LIBS}) nqp-2015.11/3rdparty/dyncall/test/suite/Makefile.M000644 000765 000024 00000000153 12534342604 023575 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/suite/Makefile.embedded000644 000765 000024 00000000476 12534342604 025142 0ustar00williamcoledastaff000000 000000 APP = suite OBJS = case.o main.o SRCTOP = ../.. BLDTOP = ../.. CFLAGS += -I${SRCTOP}/dyncall LDFLAGS += -L${BLDTOP}/dyncall -ldyncall_s .PHONY: all clean autogen all: ${APP} ${APP}: ${OBJS} ${CC} ${OBJS} ${LDFLAGS} -o ${APP} clean: rm -f ${APP} ${OBJS} autogen: python mkcase.py >case.h 2>config.h nqp-2015.11/3rdparty/dyncall/test/suite/Makefile.generic000644 000765 000024 00000000543 12534342604 025020 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/suite/Nmakefile000644 000765 000024 00000003756 12534342604 023574 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite/README.txt000644 000765 000024 00000003156 12534342604 023446 0ustar00williamcoledastaff000000 000000 dyncall stress test suite: testing standard C calls =================================================== Copyright (c) 2007-2009 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 - run test id suite - run test id to id (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 nqp-2015.11/3rdparty/dyncall/test/suite/case.c000644 000765 000024 00000013301 12534342604 023020 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite/case.c Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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, Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/test/suite/config.h000644 000765 000024 00000002003 12534342604 023354 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite/config.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite/dynMakefile000644 000765 000024 00000000324 12534342604 024115 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/suite/main.c000644 000765 000024 00000010457 12534342604 023042 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite/main.c Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include #include #include "../common/platformInit.h" 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; i0; ++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, # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite/mkfile000644 000765 000024 00000002417 12534342604 023141 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite2/CMakeLists.txt000644 000765 000024 00000000120 12534342604 024556 0ustar00williamcoledastaff000000 000000 add_executable(suite2 case.cc main.cc) target_link_libraries(suite2 dyncall_s) nqp-2015.11/3rdparty/dyncall/test/suite2/Makefile.M000644 000765 000024 00000000153 12534342604 023657 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/suite2/Makefile.embedded000644 000765 000024 00000000450 12534342604 025214 0ustar00williamcoledastaff000000 000000 APP = suite2 OBJS = case.o main.o TOP = ../.. CFLAGS += -I${TOP}/dyncall LDFLAGS += -L${TOP}/dyncall -ldyncall_s all: ${APP} .PHONY: all clean autogen ${APP}: ${OBJS} ${CXX} ${OBJS} ${LDFLAGS} -o ${APP} clean: rm -f ${APP} ${OBJS} autogen: python mkcase.py 1>case.h 2>config.h nqp-2015.11/3rdparty/dyncall/test/suite2/Makefile.generic000644 000765 000024 00000000656 12534342604 025107 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/suite2/Nmakefile000644 000765 000024 00000004103 12534342604 023641 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite2/case.cc000644 000765 000024 00000022374 12534342604 023257 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2/case.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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,0);} #define VF2(id,A1,A2,S) void f##id (A1 a1, A2 a2) {gID=id;g(a1,0);g(a2,1);} #define VF3(id,A1,A2,A3,S) void f##id (A1 a1, A2 a2,A3 a3) {gID=id;g(a1,0);g(a2,1);g(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,0);g(a2,1);g(a3,2);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(a16,15);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(a16,15);g(a17,16);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(a16,15);g(a17,16);g(a18,17);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(a16,15);g(a17,16);g(a18,17);g(a19,18);g(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" }; nqp-2015.11/3rdparty/dyncall/test/suite2/case.h000644 000765 000024 00000004764 12534342604 023124 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2/case.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/test/suite2/config.h000644 000765 000024 00000002007 12534342604 023442 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2/config.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite2/design.cfg000644 000765 000024 00000000274 12534342604 023762 0ustar00williamcoledastaff000000 000000 dddddddddd iiiiiiiiii iiiiiiiiffffff iiiiiiiidddddd ffffffffff llllllllll ifffffffff iddddddddd idfdidfdid fdfdididfd fdidididid ffidididid didddd dfdidd ilflfl ddiddd nqp-2015.11/3rdparty/dyncall/test/suite2/dynMakefile000644 000765 000024 00000000324 12534342604 024177 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/suite2/funcinfo.h000644 000765 000024 00000002265 12534342604 024012 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2/funcinfo.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/test/suite2/ints.cfg000644 000765 000024 00000000102 12534342604 023454 0ustar00williamcoledastaff000000 000000 i ii iii iiii iiiii iiiiii iiiiiii iiiiiiii iiiiiiiii iiiiiiiiii nqp-2015.11/3rdparty/dyncall/test/suite2/main.cc000644 000765 000024 00000011310 12534342604 023254 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2/main.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include #include "../common/platformInit.h" 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(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" nqp-2015.11/3rdparty/dyncall/test/suite2/mkcase.py000644 000765 000024 00000003753 12534342604 023652 0ustar00williamcoledastaff000000 000000 #!/usr/bin/python #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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"] ) ) nqp-2015.11/3rdparty/dyncall/test/suite2/rand.py000644 000765 000024 00000002752 12534342604 023331 0ustar00williamcoledastaff000000 000000 #!/usr/bin/python #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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" ) nqp-2015.11/3rdparty/dyncall/test/suite2/stress1.cfg000644 000765 000024 00000000274 12534342604 024115 0ustar00williamcoledastaff000000 000000 dddddddddd iiiiiiiiii iiiiiiiiffffff iiiiiiiidddddd ffffffffff llllllllll ifffffffff iddddddddd idfdidfdid fdfdididfd fdidididid ffidididid didddd dfdidd ilflfl ddiddd nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32fast/CMakeLists.txt000644 000765 000024 00000000152 12534342604 027031 0ustar00williamcoledastaff000000 000000 add_executable(suite2_x86win32fast case.cc main.cc) target_link_libraries(suite2_x86win32fast dyncall_s) nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32fast/Makefile.M000644 000765 000024 00000000153 12534342604 026125 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32fast/Makefile.generic000644 000765 000024 00000000536 12534342604 027352 0ustar00williamcoledastaff000000 000000 APP = suite2_x86win32fast OBJS = case.o main.o TOP = ../.. CFLAGS = -I${TOP}/dyncall LDFLAGS = -L${TOP}/dyncall -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} -o ${APP} ${TARGET_ARCH} clean: ${RM} ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32fast/Nmakefile000644 000765 000024 00000003760 12534342604 026117 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32fast/case.cc000644 000765 000024 00000022500 12534342604 025514 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2_x86win32fast/case.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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,0);} #define VF2(id,A1,A2,S) void API f##id (A1 a1, A2 a2) {gID=id;g(a1,0);g(a2,1);} #define VF3(id,A1,A2,A3,S) void API f##id (A1 a1, A2 a2,A3 a3) {gID=id;g(a1,0);g(a2,1);g(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,0);g(a2,1);g(a3,2);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(a16,15);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(a16,15);g(a17,16);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(a16,15);g(a17,16);g(a18,17);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(a16,15);g(a17,16);g(a18,17);g(a19,18);g(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" }; nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32fast/case.h000644 000765 000024 00000024507 12534342604 025367 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2_x86win32fast/case.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32fast/config.h000644 000765 000024 00000002024 12534342604 025707 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2_x86win32fast/config.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32fast/design.cfg000644 000765 000024 00000002133 12534342604 026224 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32fast/dynMakefile000644 000765 000024 00000000324 12534342604 026445 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32fast/funcinfo.h000644 000765 000024 00000002304 12534342604 026252 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2_x86win32fast/funcinfo.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32fast/main.cc000644 000765 000024 00000011402 12534342604 025524 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2_x86win32fast/main.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include #include "../common/platformInit.h" 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" nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32fast/mkcase.py000644 000765 000024 00000003753 12534342604 026120 0ustar00williamcoledastaff000000 000000 #!/usr/bin/python #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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"] ) ) nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32fast/rand.py000644 000765 000024 00000002674 12534342604 025602 0ustar00williamcoledastaff000000 000000 #!/usr/bin/python #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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" ) nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32std/CMakeLists.txt000644 000765 000024 00000000150 12534342604 026664 0ustar00williamcoledastaff000000 000000 add_executable(suite2_x86win32std case.cc main.cc) target_link_libraries(suite2_x86win32std dyncall_s) nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32std/Makefile.M000644 000765 000024 00000000153 12534342604 025762 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32std/Makefile.generic000644 000765 000024 00000000535 12534342604 027206 0ustar00williamcoledastaff000000 000000 APP = suite2_x86win32std OBJS = case.o main.o TOP = ../.. CFLAGS = -I${TOP}/dyncall LDFLAGS = -L${TOP}/dyncall -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} -o ${APP} ${TARGET_ARCH} clean: ${RM} ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32std/Nmakefile000644 000765 000024 00000003760 12534342604 025754 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32std/case.cc000644 000765 000024 00000022601 12534342604 025353 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2_x86win32std/case.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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,0);} #define VF2(id,A1,A2,S) void API f##id (A1 a1, A2 a2) {gID=id;g(a1,0);g(a2,1);} #define VF3(id,A1,A2,A3,S) void API f##id (A1 a1, A2 a2,A3 a3) {gID=id;g(a1,0);g(a2,1);g(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,0);g(a2,1);g(a3,2);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(a16,15);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(a16,15);g(a17,16);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(a16,15);g(a17,16);g(a18,17);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(a10,9);g(a11,10);g(a12,11);g(a13,12);g(a14,13);g(a15,14);g(a16,15);g(a17,16);g(a18,17);g(a19,18);g(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" }; nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32std/case.h000644 000765 000024 00000025436 12534342604 025226 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2_x86win32std/case.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32std/config.h000644 000765 000024 00000002023 12534342604 025543 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2_x86win32std/config.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32std/design.cfg000644 000765 000024 00000002216 12534342604 026063 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32std/dynMakefile000644 000765 000024 00000000324 12534342604 026302 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32std/funcinfo.h000644 000765 000024 00000002303 12534342604 026106 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2_x86win32std/funcinfo.h Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 */ nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32std/main.cc000644 000765 000024 00000011235 12534342604 025365 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite2_x86win32std/main.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include #include "../common/platformInit.h" 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" nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32std/mkcase.py000644 000765 000024 00000003752 12534342604 025754 0ustar00williamcoledastaff000000 000000 #!/usr/bin/python #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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"] ) ) nqp-2015.11/3rdparty/dyncall/test/suite2_x86win32std/rand.py000644 000765 000024 00000002674 12534342604 025437 0ustar00williamcoledastaff000000 000000 #!/usr/bin/python #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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" ) nqp-2015.11/3rdparty/dyncall/test/suite3/CMakeLists.txt000644 000765 000024 00000000120 12534342604 024557 0ustar00williamcoledastaff000000 000000 add_executable(suite3 case.cc main.cc) target_link_libraries(suite3 dyncall_s) nqp-2015.11/3rdparty/dyncall/test/suite3/Makefile.M000644 000765 000024 00000000153 12534342604 023660 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/suite3/Makefile.embedded000644 000765 000024 00000000441 12534342604 025215 0ustar00williamcoledastaff000000 000000 APP = suite3 OBJS = case.o main.o TOP = ../.. CFLAGS += -I${TOP}/dyncall LDFLAGS += -L${TOP}/dyncall -ldyncall_s .PHONY: all clean autogen all: ${APP} ${APP}: ${OBJS} ${CXX} ${OBJS} ${LDFLAGS} -o ${APP} clean: rm -f ${APP} ${OBJS} autogen: python mkcase.py 1>case.h 2>config.h nqp-2015.11/3rdparty/dyncall/test/suite3/Makefile.generic000644 000765 000024 00000000562 12534342604 025104 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/suite3/Nmakefile000644 000765 000024 00000003760 12534342604 023652 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite3/README.txt000644 000765 000024 00000003333 12534342604 023526 0ustar00williamcoledastaff000000 000000 dyncall stress test suite: testing standard C calls =================================================== Copyright (c) 2007-2009 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 - run test id suite - run test id to id (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. nqp-2015.11/3rdparty/dyncall/test/suite3/case.cc000644 000765 000024 00000010127 12534342604 023251 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite3/case.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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,0);} #define VF2(id,A1,A2,S) void S (A1 a1, A2 a2) {gID=id;g(a1,0);g(a2,1);} #define VF3(id,A1,A2,A3,S) void S (A1 a1, A2 a2,A3 a3) {gID=id;g(a1,0);g(a2,1);g(a3,2);} #define VF4(id,A1,A2,A3,A4,S) void S (A1 a1, A2 a2,A3 a3,A4 a4) {gID=id;g(a1,0);g(a2,1);g(a3,2);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(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(S), #define VF1(id,A1,S) reinterpret_cast(S), #define VF2(id,A1,A2,S) reinterpret_cast(S), #define VF3(id,A1,A2,A3,S) reinterpret_cast(S), #define VF4(id,A1,A2,A3,A4,S) reinterpret_cast(S), #define VF5(id,A1,A2,A3,A4,A5,S) reinterpret_cast(S), #define VF6(id,A1,A2,A3,A4,A5,A6,S) reinterpret_cast(S), #define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) reinterpret_cast(S), #define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) reinterpret_cast(S), #define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) reinterpret_cast(S), #define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) reinterpret_cast(S), typedef void (*fp)(); fp gFuncTable[] = { #include "case.h" }; DCpointer getFunc(int x) { return (DCpointer) gFuncTable[x]; } nqp-2015.11/3rdparty/dyncall/test/suite3/case.h000644 000765 000024 00000040747 12534342604 023126 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite3/case.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/test/suite3/config.h000644 000765 000024 00000002004 12534342604 023440 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite3/config.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite3/dynMakefile000644 000765 000024 00000000324 12534342604 024200 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/suite3/main.cc000644 000765 000024 00000007140 12534342604 023263 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite3/main.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include #include #include "../common/platformInit.h" 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( 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" nqp-2015.11/3rdparty/dyncall/test/suite3/mkcase.py000644 000765 000024 00000003761 12534342604 023652 0ustar00williamcoledastaff000000 000000 #!/usr/bin/python #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite_floats/CMakeLists.txt000644 000765 000024 00000000134 12534342604 026051 0ustar00williamcoledastaff000000 000000 add_executable(suite_floats case.cc main.cc) target_link_libraries(suite_floats dyncall_s) nqp-2015.11/3rdparty/dyncall/test/suite_floats/Makefile.M000644 000765 000024 00000000153 12534342604 025145 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/suite_floats/Makefile.embedded000644 000765 000024 00000000366 12534342604 026510 0ustar00williamcoledastaff000000 000000 APP = suite_floats OBJS = case.o main.o TOP = ../.. CFLAGS += -I${TOP}/dyncall LDFLAGS += -L${TOP}/dyncall -ldyncall_s all: ${APP} .PHONY: all clean ${APP}: ${OBJS} ${CXX} ${OBJS} ${LDFLAGS} -o ${APP} clean: rm -f ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/suite_floats/Makefile.generic000644 000765 000024 00000000570 12534342604 026370 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/suite_floats/Nmakefile000644 000765 000024 00000003532 12534342604 025134 0ustar00williamcoledastaff000000 000000 # # Copyright (c) 2007,2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite_floats/README.txt000644 000765 000024 00000003303 12534342604 025010 0ustar00williamcoledastaff000000 000000 dyncall stress test suite: testing standard C calls =================================================== Copyright (c) 2007-2010 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 - run test id suite_floats - run test id to id (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 nqp-2015.11/3rdparty/dyncall/test/suite_floats/case.cc000644 000765 000024 00000010465 12534342604 024543 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite_floats/case.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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,0);} #define VF2(id,A1,A2,S) void S (A1 a1, A2 a2) {gID=id;g(a1,0);g(a2,1);} #define VF3(id,A1,A2,A3,S) void S (A1 a1, A2 a2,A3 a3) {gID=id;g(a1,0);g(a2,1);g(a3,2);} #define VF4(id,A1,A2,A3,A4,S) void S (A1 a1, A2 a2,A3 a3,A4 a4) {gID=id;g(a1,0);g(a2,1);g(a3,2);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(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(S), #define VF1(id,A1,S) reinterpret_cast(S), #define VF2(id,A1,A2,S) reinterpret_cast(S), #define VF3(id,A1,A2,A3,S) reinterpret_cast(S), #define VF4(id,A1,A2,A3,A4,S) reinterpret_cast(S), #define VF5(id,A1,A2,A3,A4,A5,S) reinterpret_cast(S), #define VF6(id,A1,A2,A3,A4,A5,A6,S) reinterpret_cast(S), #define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) reinterpret_cast(S), #define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) reinterpret_cast(S), #define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) reinterpret_cast(S), #define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) reinterpret_cast(S), typedef void (*fp)(); fp gFuncTable[] = { #include "case.h" }; DCpointer getFunc(int x) { return (DCpointer) gFuncTable[x]; } nqp-2015.11/3rdparty/dyncall/test/suite_floats/case.h000644 000765 000024 00000613631 12534342604 024411 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite_floats/case.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/test/suite_floats/config.h000644 000765 000024 00000002013 12534342604 024725 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite_floats/config.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite_floats/dynMakefile000644 000765 000024 00000000324 12534342604 025465 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/suite_floats/main.cc000644 000765 000024 00000006333 12534342604 024553 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite_floats/main.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include #include #include "../common/platformInit.h" 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( 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" nqp-2015.11/3rdparty/dyncall/test/suite_floats/mkcase.py000644 000765 000024 00000003350 12534342604 025131 0ustar00williamcoledastaff000000 000000 #!/usr/bin/python # # Copyright (c) 2007,2010 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite_x86win32fast/CMakeLists.txt000644 000765 000024 00000000151 12534342604 026746 0ustar00williamcoledastaff000000 000000 add_executable(suite_x86win32fast main.cc case.cc) target_link_libraries(suite_x86win32fast dyncall_s) nqp-2015.11/3rdparty/dyncall/test/suite_x86win32fast/Makefile.M000644 000765 000024 00000000153 12534342604 026043 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/suite_x86win32fast/Makefile.generic000644 000765 000024 00000000570 12534342604 027266 0ustar00williamcoledastaff000000 000000 APP = suite_x86win32fast OBJS = case.o main.o SRCTOP = ../.. BLDTOP = ../../ CFLAGS += -I${SRCTOP}/dyncall LDFLAGS += -L${BLDTOP}/dyncall -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} -o ${APP} ${TARGET_ARCH} clean: ${RM} ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/suite_x86win32fast/Nmakefile000644 000765 000024 00000003756 12534342604 026042 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite_x86win32fast/README.txt000644 000765 000024 00000003157 12534342604 025715 0ustar00williamcoledastaff000000 000000 dyncall stress test suite: testing standard C calls =================================================== Copyright (c) 2007-2009 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 - run test id suite - run test id to id (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 nqp-2015.11/3rdparty/dyncall/test/suite_x86win32fast/case.cc000644 000765 000024 00000010765 12534342604 025444 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite_x86win32fast/case.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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,0);} #define VF2(id,A1,A2,S) void API S (A1 a1, A2 a2) {gID=id;g(a1,0);g(a2,1);} #define VF3(id,A1,A2,A3,S) void API S (A1 a1, A2 a2,A3 a3) {gID=id;g(a1,0);g(a2,1);g(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,0);g(a2,1);g(a3,2);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(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(S), #define VF1(id,A1,S) reinterpret_cast(S), #define VF2(id,A1,A2,S) reinterpret_cast(S), #define VF3(id,A1,A2,A3,S) reinterpret_cast(S), #define VF4(id,A1,A2,A3,A4,S) reinterpret_cast(S), #define VF5(id,A1,A2,A3,A4,A5,S) reinterpret_cast(S), #define VF6(id,A1,A2,A3,A4,A5,A6,S) reinterpret_cast(S), #define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) reinterpret_cast(S), #define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) reinterpret_cast(S), #define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) reinterpret_cast(S), #define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) reinterpret_cast(S), typedef void (*fp)(); fp gFuncTable[] = { #include "case.h" }; DCpointer getFunc(int x) { return (DCpointer) gFuncTable[x]; } nqp-2015.11/3rdparty/dyncall/test/suite_x86win32fast/case.h000644 000765 000024 00000025226 12534342604 025304 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite_x86win32fast/case.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/test/suite_x86win32fast/config.h000644 000765 000024 00000002020 12534342604 025621 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite_x86win32fast/config.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite_x86win32fast/dynMakefile000644 000765 000024 00000000324 12534342604 026363 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/suite_x86win32fast/main.cc000644 000765 000024 00000010326 12534342604 025446 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite_x86win32fast/main.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include "../common/platformInit.h" 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( pow((double)x,n)+powerfact(x,n-1) ); } #include #include 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" nqp-2015.11/3rdparty/dyncall/test/suite_x86win32fast/mkcase.py000644 000765 000024 00000003610 12534342604 026026 0ustar00williamcoledastaff000000 000000 #!/usr/bin/python #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite_x86win32std/CMakeLists.txt000644 000765 000024 00000000147 12534342604 026610 0ustar00williamcoledastaff000000 000000 add_executable(suite_x86win32std main.cc case.cc) target_link_libraries(suite_x86win32std dyncall_s) nqp-2015.11/3rdparty/dyncall/test/suite_x86win32std/Makefile.M000644 000765 000024 00000000153 12534342604 025700 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/suite_x86win32std/Makefile.generic000644 000765 000024 00000000567 12534342604 027131 0ustar00williamcoledastaff000000 000000 APP = suite_x86win32std OBJS = case.o main.o SRCTOP = ../.. BLDTOP = ../../ CFLAGS += -I${SRCTOP}/dyncall LDFLAGS += -L${BLDTOP}/dyncall -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} -o ${APP} ${TARGET_ARCH} clean: ${RM} ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/suite_x86win32std/Nmakefile000644 000765 000024 00000003756 12534342604 025677 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite_x86win32std/README.txt000644 000765 000024 00000003156 12534342604 025551 0ustar00williamcoledastaff000000 000000 dyncall stress test suite: testing standard C calls =================================================== Copyright (c) 2007-2009 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 - run test id suite - run test id to id (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 nqp-2015.11/3rdparty/dyncall/test/suite_x86win32std/case.cc000644 000765 000024 00000010656 12534342604 025300 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite_x86win32std/case.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 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,0);} #define VF2(id,A1,A2,S) void API S (A1 a1, A2 a2) {gID=id;g(a1,0);g(a2,1);} #define VF3(id,A1,A2,A3,S) void API S (A1 a1, A2 a2,A3 a3) {gID=id;g(a1,0);g(a2,1);g(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,0);g(a2,1);g(a3,2);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(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,0);g(a2,1);g(a3,2);g(a4,3);g(a5,4);g(a6,5);g(a7,6);g(a8,7);g(a9,8);g(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(S), #define VF1(id,A1,S) reinterpret_cast(S), #define VF2(id,A1,A2,S) reinterpret_cast(S), #define VF3(id,A1,A2,A3,S) reinterpret_cast(S), #define VF4(id,A1,A2,A3,A4,S) reinterpret_cast(S), #define VF5(id,A1,A2,A3,A4,A5,S) reinterpret_cast(S), #define VF6(id,A1,A2,A3,A4,A5,A6,S) reinterpret_cast(S), #define VF7(id,A1,A2,A3,A4,A5,A6,A7,S) reinterpret_cast(S), #define VF8(id,A1,A2,A3,A4,A5,A6,A7,A8,S) reinterpret_cast(S), #define VF9(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,S) reinterpret_cast(S), #define VF10(id,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,S) reinterpret_cast(S), typedef void (*fp)(); fp gFuncTable[] = { #include "case.h" }; DCpointer getFunc(int x) { return (DCpointer) gFuncTable[x]; } nqp-2015.11/3rdparty/dyncall/test/suite_x86win32std/case.h000644 000765 000024 00000025225 12534342604 025140 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite_x86win32std/case.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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) nqp-2015.11/3rdparty/dyncall/test/suite_x86win32std/config.h000644 000765 000024 00000002017 12534342604 025464 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite_x86win32std/config.h Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/suite_x86win32std/dynMakefile000644 000765 000024 00000000324 12534342604 026220 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/suite_x86win32std/main.cc000644 000765 000024 00000010130 12534342604 025274 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/suite_x86win32std/main.cc Description: License: Copyright (c) 2007-2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 #include "../common/platformInit.h" 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( pow((double)x,n)+powerfact(x,n-1) ); } #include #include 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" nqp-2015.11/3rdparty/dyncall/test/suite_x86win32std/mkcase.py000644 000765 000024 00000003610 12534342604 025663 0ustar00williamcoledastaff000000 000000 #!/usr/bin/python #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/syscall/CMakeLists.txt000644 000765 000024 00000000114 12534342604 025020 0ustar00williamcoledastaff000000 000000 add_executable(syscall syscall.c) target_link_libraries(syscall dyncall_s) nqp-2015.11/3rdparty/dyncall/test/syscall/Makefile.M000644 000765 000024 00000000153 12534342604 024116 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/syscall/Makefile.embedded000644 000765 000024 00000000420 12534342604 025450 0ustar00williamcoledastaff000000 000000 APP = syscall OBJS = syscall.o SRCTOP = ../.. BLDTOP = ../.. CFLAGS += -I${SRCTOP}/dyncall LDFLAGS += -L${BLDTOP}/dyncall -ldyncall_s LINK = ${CC} all: ${APP} .PHONY: all clean ${APP}: ${OBJS} ${CC} ${OBJS} ${LDFLAGS} -o ${APP} clean: rm -f ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/syscall/Makefile.generic000644 000765 000024 00000000555 12534342604 025344 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/syscall/dynMakefile000644 000765 000024 00000000324 12534342604 024436 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/syscall/syscall.c000644 000765 000024 00000002657 12534342604 024114 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/syscall/syscall.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 DCCallVM* callvm; void syscallvm_init() { callvm = dcNewCallVM(4096); dcMode(callvm, DC_CALL_SYS_DEFAULT); } 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; } nqp-2015.11/3rdparty/dyncall/test/thunk/CMakeLists.txt000644 000765 000024 00000000131 12534342604 024476 0ustar00williamcoledastaff000000 000000 add_executable(test_thunk test_thunk.c) target_link_libraries(test_thunk dyncallback_s) nqp-2015.11/3rdparty/dyncall/test/thunk/Makefile.M000644 000765 000024 00000000153 12534342604 023575 0ustar00williamcoledastaff000000 000000 #include "../../buildsys/dynmake/Makefile.base.M" all: echo not impl!!! clean: echo not impl!!! nqp-2015.11/3rdparty/dyncall/test/thunk/Makefile.embedded000644 000765 000024 00000000461 12534342604 025134 0ustar00williamcoledastaff000000 000000 APP = thunk OBJS = test_thunk.o SRCTOP = ../.. BLDTOP = ../.. CFLAGS += -I${SRCTOP}/dyncallback -I${SRCTOP}/dyncall LDFLAGS += -L${BLDTOP}/dyncallback -ldyncallback_s LINK = ${CC} all: ${APP} .PHONY: all clean ${APP}: ${OBJS} ${CC} ${OBJS} ${LDFLAGS} -o ${APP} clean: rm -f ${APP} ${OBJS} nqp-2015.11/3rdparty/dyncall/test/thunk/Makefile.generic000644 000765 000024 00000000602 12534342604 025014 0ustar00williamcoledastaff000000 000000 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 nqp-2015.11/3rdparty/dyncall/test/thunk/Nmakefile000644 000765 000024 00000003677 12534342604 023576 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2007,2009 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/thunk/dynMakefile000644 000765 000024 00000000324 12534342604 024115 0ustar00williamcoledastaff000000 000000 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) nqp-2015.11/3rdparty/dyncall/test/thunk/mkfile000644 000765 000024 00000002237 12534342604 023141 0ustar00williamcoledastaff000000 000000 #////////////////////////////////////////////////////////////////////////////// # # Copyright (c) 2013 Daniel Adler , # Tassilo Philipp # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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 nqp-2015.11/3rdparty/dyncall/test/thunk/test_thunk.c000644 000765 000024 00000004314 12534342604 024301 0ustar00williamcoledastaff000000 000000 /* Package: dyncall Library: test File: test/thunk/test_thunk.c Description: License: Copyright (c) 2011 Daniel Adler , Tassilo Philipp Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 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" /** ** test: thunks with several allocation modes ** such as on stack, on heap and explicit wx ** **/ #include #include #include 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 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; } nqp-2015.11/3rdparty/jline/LICENSE.txt000644 000765 000024 00000002721 12534342604 021133 0ustar00williamcoledastaff000000 000000 Copyright (c) 2002-2006, Marc Prud'hommeaux All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of JLine nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. nqp-2015.11/3rdparty/jline/jline-1.0.jar000644 000765 000024 00000262057 12534342604 021415 0ustar00williamcoledastaff000000 000000 PK > META-INF/PK  >~"META-INF/MANIFEST.MFRn0 ?,|j K[>ĉ4@^6H_ߥ*MC/p|c0NGqtmOd_J:7 zRɪ d$,GK BōN_Iq>#45-Gn< ϩ{f@\hkc1SaU2JGt<{*)J`wvj8Too3 z[t~gOG/_gjڳv/I?rFɎf}N[rw"h[8 6s@nǶQ4r!YYPeǵPK >jline/PK  >Bȶ> jline/ANSIBuffer$ANSICodes.classTSEY܄ 6&]H 5l.,"8,,fpvDͪxTiUVy՛7˯{Wcq_ |Ӌ^tខ/בӊp X7aa`<[|m_L!.OO 3G5k\Bٞ](MYYXғ)Ҝ=UcXRi\2mtC_HW LŲJ_d:eEJ_P#,n~*R`.h[pq8.sVFM \foDύոO3XuZ[+n8xAjNؐLD&k̗EH;S}74=ٔQjB2 57#ZnV<+ٛΎ39D5 :v8{d PtN"n1sx ]mW%׃(x@_; Jkm1!tv~DA(+q"RW1k|Rq2wTGd.ֳ#$º;ݐзk2'A6.ʠ9q{b#G![]~Gqج2SyuŬ 7"NzY گ#پm_i5YBVwWF=rCa/8bv _b"p _Q1*k1#q+1|F<o׉o[o;bry1I ~|ƟB(8xmZ6 o&:&26 ?]$S4va<M*w1AXU NC0^+8َ`VE@' OĢaO$y~Jf}1Ns jline/ANSIBuffer.class[wUM3IhH/(i PTKh VI2MS8 ~,|⃰4eZ>{O1/g9{߾}ׯHp-=`1bnvU %ST[ey͸Y%^{Te٪AIs*4{ږc*V%'(Ό1Lyou73ꍏI6zDbewCpk8F%Nl@$#iWs|H:H8]4!=cv qgc:m$P5 "H@ɠ㱿Au=,ȧQs}$ &v&;|| b*ȬJ:kP?Gt6.k|5qWZC>(3ڟ/":'9+G+G+Gʋht"zԱuR ^;0M/^ƹ5&M61*H3^/^t+Ö#L[(x5ܠxF\_<;E:\^Nnѽulk9_!?#%HHېJIR 霔4$!͵!HI$6R~ z)逄t GJ$%1@RAto #X_1v4-=}u B;.>]sxSol_cR|gw%۸,k)\;0OY*=7gCzPK  >_R 7jline/ArgumentCompletor$AbstractArgumentDelimiter.classUSUȒHI HhHC"Z(MB[v,a!$tq>g|m2 :0v|;X=w7lSp{w_ЎI/¸̇+ aR54c_x|XPஂ|EKO,kfAXL0륌ocwD13SFA*uΓ%*f4be0ejk̕55M5Y(f"J:I z`3Q\[V>c[7tgې{.E{Fr\-1wdt/eh;MhjyLIM2d%)W8FY*ҩ9"8-#?P鄡K6. "_(dTVTPM lߪ3Jv޲ ^䤆* )jbW ^СAT DZOaU: VS@0iS1*2Ȫб"eVT"`z0 g+XW0 U_:^3DV]oaBZPƗd|LũV߉Zj o /}4J$)䟗'C=0a9ou@D#z`ij1D5h԰QdJ'k@?Ԁ iƓV@Wl,&$ϋMnKM]l]Z]46Bwz@Uک qfҁJ1 m?BW8oz7C_kr{ߺPndy6&Cf#tV$"$I4p.kWG=H;Y C0gm}ұ@. C ߐ>AC/l1N'_/]4 K67KMs=4;?#c~A =Ac' chf~&N YX,9։ ;<!boBo 9:0L}֌qoQ3\S#٦WRU}ul#e/[_,۶\I!&QFH(B,nS=#.dM ցFHT . .ڸJ4;1a0ӯ:|9%eIPMHCj[Nmv;vmzYbBQym8ٸK6;d% 1^j䥚g{PK  >#W~/jline/ArgumentCompletor$ArgumentDelimiter.classP;n@}!@\"4\!tthwp)8BY'BL17ix:0xx"VN`@&]"Rk63Z˖&yO#,Z9#u/'I9+OŮ4:WLI;bCxȵ&tWly!{?ַjK`Hҭ /=^-BNA8Y ! PK  >kP**jline/ArgumentCompletor$ArgumentList.classSKkQdt>ҤVd;PB ҍI:SLĥ;BD\(tB?%s3M\̹{w;:Pµ4B6E6&$$,F{v@Quzj(6nR[U ZNx@ܴ@:LA^Tz۰ƪkmolUkRdխ;z!! h[q]/7V˦VJIeoI<xoAY5^!B48*BRŲ U8KU1;O^PTݎ 3k^ۯw9?2CȠdR1`HWGvz:G$նz $=j&Or5uTi;q=xSOs ͜"fB7sz=Y;9t) Y3-&F Y1!=IĤ|t:ɐ pVœ%Ge|/)! Jr}vP %0 P6sgBvC:qzGr1>iztίcgȜF8zto9qv_}w"c zxDNȮ"(Bd4TdAH<Ⱦ." \RPK  >?M9jline/ArgumentCompletor$WhitespaceArgumentDelimiter.classRAOA]J-RZĆN%&MKMIͮvvpQ2Y$rp޼f~y 7.VPqmlpW4it> xg]UG-@fLh_~͒wڡ`l |GxB^yGB:oߐ=$#ؽ :6(#,dKYSaֱc97PK  >//$jline/ArgumentCompletor.classWw\Uy޹sӆI&8M2H(Z(iS"2Ln̄;ЂU, U[vjp-q\\~wLBFKWz>ۏϹg߽`1#B&fe(q]s:BDrXGVԽ2db+:PaAG8"9*bx9&E!Y>Ʒt\K÷eGd'5<*3~a<aPQ-Ͳ=al.sY/k5пβB~l4K<0PH옮!~R>S_(vJCKVo1VȸH[gs,B Ěa 7XeޮЛpRW nO;%rb|i*_d2`kCvV#Ƒ?ViDjѽOvDToLSGn@isHtXe?b5,7R\rq,QĆ4j9iL eB\`)UpJ:c:஖ـ6@)Ok׊N9%- |ŗ < = >lhخV($+۾Xʃ M' c^-u ÃbMVjmUJrǝҒnPɵ<ݫyߒY.s';NyjCZLב(2̥jٕV\^5KrkvU2I^‚Y.( y顙#Oy_ӺeʵJk R1~fE)GdSgIwsF|tKFicojqJ~uwwaGnl'TƍɁ8R EkC:Y_K߃&Woho`;]]nșh!0k,uiBv!'Y?u* y`s0munj[\iE7}t d*J~~q}A<Ḿ >4Пm~i1p \x"w9 d>::{W0+c lM\l>a-H#7-Rn>+9^=Ɔzx-$6JUw:<]:ܤT9J}u(~t8ح| 1M*jҍ#^ao,!!Nީ4漉C) q"!ƵPK  >&x*+jline/CandidateCycleCompletionHandler.classR[kA&f6jSwL /A1Xh$o!N̄݉`}*=3iT>̹~; 9{*xE/#*f 7RKjDjq6*r5tM0_e:+]3q+?R%f2UJ?P\PMAmUFF3$c3+Uvz/4d 0D5rNM!( GwS1u~bx/R{qkæ露=Ĉ mʹtVdva6m<24x̓{h%$}K= CHT"Mے9^:8$+>DdmC<"MׄBP\/"ðg*SkPn3϶q PK  >0K s*jline/CandidateListCompletionHandler.classW |e;ͤGڄnIK)ml 4@DC m (2L-eg6x\QSZ$KQPE[7{$mo߼}<ꃏhVsøqaqCbWa|MY-a|Xf|$L2,rP'UDvб'#Y8w; O[ψR|6a^E'!<BNL yxPI<0N.H%c|^ "EqK:ʓb˂+!<%J&:OqK欛H6o;[ޤN2L#HY:_!OlDZ mIMةMQQמ4SmrJ+Rh=xZ"p[ &ZUAk{-ݙ2=Ir;츙jf\`j@VtxXr,w}r9䴧lUpP<hQr줵2{dZʺzF$pz r3Txۓ?یErps1F)mKIQlƱ3}}y5g[iq-bM96zD$h0S&mjI+.0yULx eoJS_pr; ^Y,tjji/>؋J)accƴNIxC'fRF^]8 ["]FrP*hJ6{ԥ"@`Cqq|arl D-#a{"E㘥-H`Aq [b-@~ЩyNCNDž8hW73unY]@*(.1^xm^qL#H=3 jDk4e]cǼT?聗c&Vǵ6jKŰ+ȗyQ\yKN8u$t7!4NrNlucXt/Wa 0e]XÊ͡crn,i (T0x(94m"aeɚ6l&ܭPvӖ1êaHfpݐ#ynC$N$Z4r(HNda,->FU^öD}2 = & _/fm,&I6gDpp\<DZOx/3 *U<\jqR%=yW&Sh2}I,/A,_!-"i>в&- S%}c-$, hD卸0'^.)'`4x!O? ѹwNugXZ4Ɂ@x _Xίc&5Nve@yf+9F酘PŨǙ5Pձ =ZG|*$o Ii(ձq}w66}A4W71.*]#xcObvqlg"HNm8>,Sfz5PK  >Y/jline/CandidateListCompletionHandler.propertiesK,.IMNKLI,I-Rp)$(T*g&edd+hT*)ir`խ&o/JRҺ\\PK  >, -jline/ClassNameCompletor.classW |Uf36i6M6-RZ(ibn =HI2i&lvZVNJP ZPp4-ڂhEOo}=Ǐox @\̒Q[%&v|XwhGxS*Gy1 Q%Dw3q G'eT^§K'~< 𐌹E>Wx8/1|YF#Xc<<^ èƘ퀌z\q`TO) iP! _-p#{%<'c)vK:?7o- /o3;3h[lHY/U:gZ~Jk*.r=\Q ͚OwWEj1$̞ꋄA,!rŜvJ.I4Xۀ3*PVE{BV?03 Cwh6qmn^ f|j6RgC - 9ڜLՅ2t/ςӍ8YIc ۳vZmG2I6 u fgr[sF9-\CbjfHi69H:-M-Tp:"wMH W -gnv1fùa =Z+Ƃ;N~;T`r,môB0a*x?Rp^2&&'xJPΌ+UL+X 9NŦUp#v*x?%= 2#: ~W$\/K Rk*5cSSWV09X ڙr])vbW=IE\o;g $z2׼Τ? o,| VUw?%KqL_*njO.PR?83Oخ)T*JES $H+DךFNtoEYBQ rE"*D"B3'àH;`e;i"Nգ0?T0hnŬHmJXU,e4Ebi - pG82fnWP Y@oda17ɤ۵j7NFTT8 EI}m٢zߦ 槟rumI= M)D*I__AsIKo/Bfͭ3'm+"zxSidBVx M!UMj;of;hv/0&JukE}ye$l"'V1H6L+ 9 ;G/ NS S&QUtVk SkNj$^߯fDJS--Ց֢k9rlIH4(B kE.r^lմf*з*"mk?APyf7cZIO*ԉQ40OZ).zznQ.ud]ZM8Ty~HQB%i9e|/pWgyv9 +Jm sw$O`PVÌgQ*ۏ0cQCa̪De9YlQx$;0HHۇ0O=ܑ.};cs ǼЉiD4Uq2CА45 i4¾CX qN#@7z^W5uc5V`IAD} hE߃(?~rϵ鍁p ģa 6<}w4rwcqg?@4Jai 2y(4gp0K%lFpIFƱP-kwtbZxu~!쯈Wr^tAE7r^h \($CldOZTW-}uGR8^:Y؎sDZ h,QB\oPB*zI hgbq֊f+qXNq)D.6a U܄^q{qxI^\%%G1$^5MlsB0=襸!>ʗaQcq!DAHD FP~#H`‚6%k8L򮆗s8Yi>xvq3JWihҢ7/;e~ceShe._oGGhnyþ#ЫA}U~JEgui8yRQg@!aQw=NI":|oS+PCcu-r@'PK  >Sjline/CompletionHandler.class]M @ _:g!z8R Awdؑvx(qZх t ajOgÎ Iۼ7\DIJ^62ѥ]R>;?z^oHywW*?.f0l 1*?>I[am( 4xm oPK  >+jline/Completor.class;o>}NvvvF܂ԒTF5 IJDļt̼tkOPiIfOfq'#Wp~iQr[fP3Ā"=RF̼T}0#X6FF&`dad`f`X$PK  >#9N jline/ConsoleOperations.classeo#E7) G;ʑPz`$ƛ]'s{ G ~A娢7 B !ɍ$Ro_ zljG&zLP vflaf (rZ2- [P],,X6#gV_2+Ur2Y~2JHQ&Aw"KI%lzRNh4h\UHOn*ue5iyzp3)v;Fp5]oExc2 =8B,$ݤ f|9Ö +uq?rn;tUO\9Fé I1~G2_&SAƱt7A Z)RqkiZ@_fF55:,:&ա*B ZMU;\[%-ޤ[.cauT/{f FA G1ԴK L5%}zᵋ|U[I=S3sZ*1B{ӘGyb@GtJ&ܬMkۂFݤ`VVެh[(F2r"FhW3-?A{_fUzWdV[iԋut>WȕaZ3F\!vR#K`Na:NJ؛KrWlqB |8|Q[ࣙ{U>8x~xDOOe> > L೙0 [IX2Cp<8#.1g>0(<<O2_|!|p| ew1 epy91"<|s ^`.Ë̻+azx7 773||;w᪙{y/"~ZsT,?ԿLV7ޯ}PK  >J4/mjline/ConsoleReader.classͼy|TE8^BN0IH0 " I ę ]]ADx"JETvovUoU7oL&'uWWWWUWU>&)c\|_+Dp~ ?9+| W'o^.Nuox T\;\Oq!?Nwcy!@F*N4g38 g;9.c>s8wqyFB*.r]0ـ\?R*.r ]j_k]PDş8h| us #%VƷ;M.(]Tp-T5wTw:NrNw{%v>O*:i*z#^*bRW4N=8@w!u xj]?L{=I4!xg9j>O |˄JkT{}joRoSRSRS*>T|Jgs*$_Q5 I=Nm<S/ڙS#?TH\]PBu]ASL9 gЩH@DM$Q#Y)L`,xS~/"C ðƻ]"SdQ3[uN4HM1J]b8c 8*ƻD@07 ʥ",6īm rALbT(@G(M̤wٚ(v1Cűԭ^ϥvQFqZ|MGPra!͒KL[D+G%Uԥ)Wq<M,D&N 4:@[&N$'XnV zڃK=^Za: R+z{&zڛ&-M:-Ͽq,GXiji[| xi k`0@liT : ޹퍭^D/*[VYxeUIeY-4[Z?mt`uލ[q"_]W{[[=[ 6O`5^[{^?ZRQvAΠk{;VDa6$Ar֖v:S^Zgav+~yKELoRy{GgK Y̷Js !?sRkljÈ2Ж$8=3W%+ O64,ajX@k H(c[\Lb0Xv[|Z[xcpy{wwC'8J}T)2qafG[\=،PR=u3Sj t'y{ۃW4 襵"Um:1_uBmrCLQhZ5^O\7CZX)]9Cj`1C*0 ''LE+ߺD㵰U@K:D=xȼzky4ݰwm3R1_ױTVnl݌yvBg-R,q.G=g6j[$dJ&oβ9[ - #EȉKr+Whz bZ $PH=!'u7 a`s)MQpR4ɐ`ҹb-MH{:,e{r4$|Ȼ73JNԂZ3<ZѮ53tt juf.@]J3Y^Z tD1Z}P&d@c<q|7 a4S{DlKD˃6vC[d WDy< WNيk5t%7:+F]~{7r\+e%5 A< p @ ,kxRš@ķև=nbyah8F˰+R1!a v4QR2U԰ǣ"IKٙYJsKjh~JC]ȟ AzXjA7%^jRmK-t *uHlwt5n% )VlkP, Z;ȱdzH 4|'p*)1Rc<BF6}b .Hir5[L5b{c)d1-!%% "YjsنlzġK 77di>2&y*{$AqOtƔ E20k᪱5U.C 5C8C+ߐ]@CEq>"FGEϒfjO:ҷNׅ{ rx(ZAzIQhU*#}MkgtI:< ޒV$jt ,>VChW|eH{zwLy>RslQM5,xb*Ռ r4F~84̉1jdݖV;?t.>9B|2y0"]|%F#$a mWhz ]:Jڷ:-IĚv<.|BL5e;)ſH~u)o?:O:pgw3寴Qq%`܍-v6GtHf S;EWTš,D8 )q;uERFr,BUi)H8‡܊?'[IDv-$0ZK*?mOĈ{$OVQhq t%q+l'+H%%BIٝDͩ U2t>Ef;oln2ue$7%HNX/eE+#Qɀ#q:kg;/J u¢F?ziʺsː-+#lyhה-]Yݪ*\Aܢ򊊕F]]\R[OfemiMYY6N[f6%\[WRSz~Ej.(ք+ "WVQVgVWrF䚲e%u+mٓxmLP%e&x'f+D%ya6tQA+!j̭+[ F`>c"Nd+&Y8;b0ڲ~5 7&]6 ncj^ukYZRkJ+S^vB9`ȏ)T%skte2r4iV.ghXAl&SE^WyŠxF"Ĕq>&J?dBWř 4[:dr#Y|3vo3e[lZ!Ian"<@D3(ۖO'9uyi~+eIٻȯFA bFGKp0S"+J23uu~֧Ss-W59,%~g#1 e8rVkVgA8D_:tkA3_zdVeɘ9Xw5t Ttr=%b17ѬbH{L$&E΄Z#:pJ N3=h53#wBYe#WNj/ꭴF|<''}_jB!E|ʴL(Ԇ*& \_]}V`sQ<mn,A/'ȗ?dc$ty'IF&rmfVSf eB5t+e XwcA@z/Fd3ۙ)P=c׏F\nE`(SIZk fTs- /at1,oq!}~ 4OԵD-uˆkox~#aa)C͠ 4 b@['-π"Vʵ.lLJ } - +p=@@˩ط2 9j\ hH-Q'ihl(HWqFIv3/WI1:3=a\`Xdu[/> ǝ8P=t`/)%t%QʶQqR*RiX)/,byk;|uE>eX1ږ ݌hdCTEZyߔ oϙj4Uc!ǺoBoc2ݔGHfMDd0ac%0 2J2V. 3"x|(?8ʏ3r_ٿs޲Szvl/c &G2%s%[O~}kp/[#5Y|eդMΣQč p"Na~,Z ׁc8e+qik#1l=8 l#0Y;%q4qwn>p- e [Iɩ)}zap/Bz7Iάٙ]#B~eη\c0$;lЬuhr6g8C~ 테I=r՚$ޚ$ޘDA\c:Nms02bdQ-pw>hdepqXr:=<4|'c{pP{;u{`;')p=pLaJ MK E=PW4C9=pfLmz:CAQ zʝ:=pK3A9RPP{`Ud=P:2{PG }P, Z쁺¸ݰ$#n/,إЕ:4S.,vC|zaYō0g'3ʱD,F GEhqp*L3`6P破 a4І8l@2@#9[q @!)xֳ</K k% {3|Tel|Z)![a$;3%M|Pq|ea85]0bq%vˣq%D.akZ&68暶M3*3nR+dŰ[ &Yf'F#c[ZSc,lk?6eUfS(6!Ilƶ`S(dMl9x9XsI=pr"x@WF_s-X͈H0b_,ZMH} Ffp:F,tw@=fdn5k&κ|hӥDHc'gFNJ#IНl)_6l-̫zST4dk4R.taK6j$aﻈ$T'h£23yMpzfY;@CZLlny'S;/ynK4L7|)y<*gQм@J>vњ#3 2؅(/t)u9LgW,vkb'8]^p>.ٍv\|նu[,maKipۃ*iE%L#FYs?;mҟbI/3:I r"QPj6f(iGIs$Vo0)'TuCvfHO>6q3b3ox`&G;mџX v/}A{a4{J>E쇓C=u1ؓdʁ;s>eqœe!hg>)ɈAįHۿe1l~ "mCx 8"F:=?ɓXx7yk{u#cm6$NWo:<HY!)Oy=NC2xJxjbX-@E0R(J8',tf8C:C/Cە 2 .M۩+kWng$rȍ܉d{*>OgSwëb*گ-D59'J3]z`:pH{`|qk+c⢖Bi;lI6byNz^8lY 馺VH8ca.4tHwx~N|*vq0-b@Ŀ#Tc4ſnPǿawo=lLLw@Z^|.7ݻ ÿ1F=cXMrci*n V.'n۸Re\Dr1Uޗcwi =p>*@ܼ. N@H[xJ/\Ana֎fUJ!2+WSeV)8YMY[wQ^3-7L붘nx*ɓab-W`SHα ~ auJ#Y`jQY94^|`߉.< oЍ ![Q*[̉{`[n.0HU2`|^[nq?=AEOeC0{tq> {WP̾{8x O~C6 s\5\WlEݨtTx|| 5τ_p,b6cxVsjZDv&E|:`xǰx;ٓ|{\!~ 9Uɫ-Fkq/O3|x(^+[|x7y'o_f-_'~gSP0TFNe ߠL<~2g+9q|,*EJ_+~_l)gʹB~r ߮\oR(7[/.~T󻔧n ~._*?>OA5WG1VG"z \]ϟPOԭyfz7I_Q>z﨏ԧґxu+9W9Egct]ΔתXj ;$*ƚj{\dU9Sof7Tpt.BPʿ8Ϥd6NN׮lÑ?vd? ο1po%x3^ɷ|3GX|bOvձ7DӠ]Kf( =>Z&2)YջT_p#  "5Qaե" '44Av!fPf# R%*ɐ(R Yp1FtCmnK)Em7f>n@+V)vQy̓нnPN߁[zgB%_vvnS*w-?;{nJu= CPH5jO݅ HbRԀvy0PPp2eVvV- a.a}Gd.LP {>^O(pqGa4D y![LbL _L1fb(sa(yb,ZTBb1pREb9#Vd`b5 XRqecJacϣ$`̄V"W˸w@ {WЛ!)Nx2Q7o8cEY7Ia ^JҔF%ߤ`Mݸ? :@ 0TakSa8 B)2d2=U4J2p{[:xdxZۉf>܈z K녽}| $\ RrW21'0:&Y͋ ]&Ëyb+N0/QM^' )@A@e>JnxD1֝ T q97Yb;7xߌJ_R'#Fq7{'v[~% f9Gɡ: ƤCAFه(ŴzGʃe:*218ꜨZČ?Aްpd ( u ^G(EQ19:4R5h`qMRHxLi0֙z@5/t_萡Z*Hnx r{ؤISnx2xxΫ-MKN.|CSq6av;m;ÙX3G%!hycS|&QJ>i0LK6p.t:VVmd4 ,})MBWRM4 8d`Pٯ7 n- -?y|#P0JqY+ZkuPf6գwH@g2)cYLD{CTzQIyR?QG1/Y<JNˇdiLgج^xfSmp)SAWf@r ~v7~bݭtw9E-D^ӭKS"WvSq?"7l{hq$OZr,PӔ06;M#r{E%V_&<of5giFBe/:tޢNs|P΅d$|R0XJ-B/Vre IСNSVJ\4ZF? M< J΁v^aq 2 1Ϥ>p!ha=ߊ:~PU0&ݠFHuiʋ LU^"u74 +oR*:C)Va'UB>^uHϦzLhC6rw|&c%70c.w?N|HZ~(8h8~DF8٪T'Slrk-8WF7r"FW$i++o3We(XYh i*JݦכxN~#(AOpZ;Y 7Ly&@ AH5ƪC Òi0R` kN ~uWG[G`7 1㇑g,Ƀ9|0ՏY)Xs+MS+i=[v5!v :9Z_>-ZWWC~.-LlRa&($uP.RQuRC[ԕpJͦb 'hl70p-?r sQfQ‘l{ (?5?\Nڈ RfHW[p|g "9ɲ(˲SH ZڤӅpqSAQ]e&)R8ݩŌr."g Dg5 5v^z,Q6Z!7lF7E;!wU|QotNSˠ%Vبs颞u&Taz2hy.cՋaz ,Q/eRիh )`a?;1j)bhFFe1RgZ-/Č:~ӉMNlV[:6Y1w7˯#pN5(Q_%!ol'LR6: b1ƢcIts_Wם#^lxaB:nTc~ή 42qGpC3XkFs'-㳈m~s?Y/#g9,6.𦷆O<+Zuʠz,xx-[lSމ > '1cOa,W?6+tAKirQv373HZhr{QHC_~9`P1!tBJI eU{$ ӵ6<)Rkhfbɰ)}dؿcU &)}eV3wCOC}8b~FT)I e? ZRD`cݑ!22coqg<(1G<$8`#2I0ΑTG;lG:dPg82LH81 69F1qv=pG.vsc o:c:Kr`Ɏ,QȆ;xG̅* z4znĬ"+Kaғp5,]~zt'f9V2G'c0xy֙ [ɏ =l*> >3*_c:*aG 3!DsƓ qHn'W-+ꃟo smVqԃXi6b)>IX:[f*7'#L1pc~tkaնTC? §fa@~GޝDC_ymWz;2YPERʖ8: 1LqбPXs]0ϱr1ħIη04jX}J r.qd _qo>̍(qIүGcb\Fĺ3ш dl4!#!W @Lg dl4!W$"dR4!{߽!s1Mȃ1SgP7jࣶ5?Ca!/;&0~pGcY ]p/S;!w *se3kx<)f;Ώ/76c ^L06!YQ8:Yh(&!YQ8bR+=i!*9C1tɚ0<ڠdPǗ/#790љ!Pjk5sZ*k3HːhՇh Lrkx:ߢj| /Jy1mk뻙0$b>-eVˊ%>w"Oܑōa@.̅ [7jline/ConsoleReaderInputStream$ConsoleEnumeration.classT]O`~޵[]l1NVa5j2ѐLLoKג~?;o$x?xNiiԛsX G QA*C qHާ>kr"]h{dmC g!'5TeG$Ec O!|J$^Gr$LxPK  >rBRZF;jline/ConsoleReaderInputStream$ConsoleLineInputStream.classTKoQ. L-ڇZ* hBԔ)\at_qią[[.ܜ|7or(r.fMMƀUWpMV5⁴2.]Ǔu|Wn}ιUԋ9^C@T.E;S麔 fC35/ /Sە몉~vkvp>(ja8|wC$=y2(v#Xk.U:Cr?tc7(ݠ.;Li$,+fb7MaDML`t2:&`]A&ϝP8^E-WߓFxtf'}k- -;XIt)S6X?^ F,EX2I5I8krzH=CYy %zXl461k'unNvО ԧԫb[8K"Q*bf)ZH#YG,rHA;,>tf*(WQ.jIC^Pk[!}$f2ψsxYv4Donp_T \ %{T31 PK  >^&5[$jline/ConsoleReaderInputStream.classTn@=cǡ%iiizoj Z)RA+p嬋/> xHE$>Bn4–<9gwFOk0i - 젡ᡁxSxO1Cx-3m!x0!C)k;r}ɝٟl Cl#Ow2M3n 'EgKP>ẓ"+iۧ<8ޱs*P:􀇑p%w 7zIr.}49^2~8+. ',jline/ConsoleRunner.classWy|%{̥@BM-Cl[PL*.MHje0i^IJ6mzM#q JNgj;V-[;of73[?'ЁiiGC 2xN8OCT_ H|QŽހ7M Sf pE[Uw߮~ xߡ*ŏְЄ; CKN?c"ly+=!FOj؉OOkxQ1Qc++Q×0J_'o⒂i:2+l*i[ݎuR))+f\'cޤ@9avL{cs7gޠYxf撳mtL޸%M5'V3k5}I;DZNZK#{IY щAM{QƓJP`N>r<fX^s͜L7O;,;yac @z;y,4VHe f<2ZIgRYKCŷՎ^[/I(e1^J`[JDU*Usa֥wى)Rs';ܸP]*e:.*kȟ~G*F}%u\:儎8FI^!f'CAA,X :+:,ɲGEP𤎫;.irt0tie)q'm:>eGJTzj}@@DKt<4/?#<xe U":F1x\`Et1U@z]ҡm:~sHZD/+j_|˥-[ݏ_ ~w:~?ʂFBij?1r֊{:?+o:Eheh!ye 63ϣJ愓LR҄njm|~A4,fL*7#wپ(+a$.E4ǵDMs˶.xRD=ʏ/K993Xš]Sd) N6{ i39`ĀZpnTzxo!vx8Hev(Xs$"U)_EF'(Uw_Z\_Spr)2$EY|SP~KB7+=rk@_t{/VKOt)zR~ӭMKWZ'M8E+`wahI(ׂ:«iPc;fQ_6C>jXê\y4 ]!hcM,v汞v7yNCiiMqs %c xMQa[ƪY$v[PGkqO$:H ÏG|E.C_d"v{t')TT`)"f"ڏij-.sL/t*f{)f`LR'DDUܗj!JD{a#BsE &3"v`&~G' ;F_5y6dיvm%䴆娝\$ ?YVmE7 ܬг4@mE֩)Ep>DDwph>:ÑGr4ƳVc='"k ; 06a*}Q!>;Ɖ? I Vtp.k!\<T1:)sf"5`E_(PK  >v&` jline/FileNameCompletor.classuU]sU~&-EAӆ X5C( R* dnf%27:t 1(3ÅxɭmK09{{~<{NpIz{5$tX|цbv@[8ˆqH,FUָ=&#bw쨆gpL 5MNN {bx_*Ψ8+AaW`DgBBr-Y:F5V-Xq5Mgl`%3l3gawX IHћ3ys1+SϮL DZ`; 0Ihl7KWB,ip*5wyHqhVJv ,ֹ2SϬ%oժУ8qze6*$;ې:Kڬ.4)Ѳ"j3r$Wwٮ y̭yEKA~Os 7&FL"r:JTuLa|vgiuCf%g.bTt8.=Lxox*j:cPGpsA:>:.I|/$}BwQܥfb@"c ŬV DSOVG*p] g[YSE&[`s55M3HdGbfm!MNBKAȞ:7EI)Wv؞q4\R#ClBlR\*62}-jl7I}-,V2~0"Ñ*5R2%Rgl䳹7Y>I~yC8n j%rMH?p҂9*ElGVRtXV!2d.4yِ q&]rʏP9֑#} [hݐu /!SD!&訣Sr15zb_!%Du.4bېWⳫA3:/>tW įhG +5lL:™F/<$OۅY׋N׏xxl>ױ?a'~n6$*(^BIa }~*`Ŀ'G;r:a+(5wY[N~79w ^BaBDńd߾3ƘL{WAnJFeiKrY.+GvG54#'Ew^{ i :Xma`2t}.T|pΞ>{c<9amgIPif}eR]%M("U|KqA&*O!"4 tF#3!NK8B$™1bc+3"DλPK  >Gίjline/History.classVklW=cؓ:~&y4wI08vtۓw4m>)PՂ%@$Y U$$$B_A|3V{wsz@~mf<P-ngd QqO09yRu|@\E|J/&|E>V|U 9۲qV /|ex5p 2̉2Pk:.hЧ\>>a)S;!N3:1.7֙aA[6/dRZr2NWCugQ 79PazvG4gV:LF$&Ogϒ.:}N)+CȄ 3Lfr:~ 9;?lIg% =wmkPd*54Vʈhhi:@,]]oҼdHIWžĄ))*83me&{LrO$34mӴRŘt.1#HrS}Wt=rL^~\Cm4SPPB\̐H@Zn8XHpMdi۪ήHzڻ$ !E̸i'[)3nOܐ"¨g} ?>UT5~"xk$.uv#o+Z0Ág:>ٔb g (&&t{\0q n5 M|]~c? &\w&E襱aKR.øBjM B)t嚑-L\”Moyo℉SX`,e4q 018&?kK~.)&ޖ}Ox/KӘ2QiBĄd1nIW[){<jj_VX(֩_Kq)%C^/Mb.[AYwJI8Aʅbyle.Z+X#8#^3ml:MCiTΦ x+TU x3{f;ߪ$'s{=&q'No<TΣ2" 2ˈ%8_ vy1mtՄz4_0WLl7-řKgU|n"jJ21 ƣVc5#b# RvaF : ?ã*pk(K8ijI-NZ%z.bAź|HjPĆYD.tҗ]`m1 +KBOP Q !"QE?KI9OW?,☿*^,#ZE"OƓ $*6/#y1A+>g_ XEM1TIpT dh(߂,+KL߰uG߆[)<-#z7>jline/jline32.dll[ pTow,EƊZV2d7 ,+b~)ƗK?q-mjug40tS5P+XfVT:ۥaFFN{]v!U8ܙs=9{}ȊAfE4¥ܫEzQkZ{qg_,.!JNKDsźg8fW25r%O!t _;ԣP !W' 7'*?adGЄ:Ò><_oĭ F:#h:$ lukk@(]υ4;q|[&*XH5ɺ]C^Pƕ}I.˥vɾ÷'[U*SLqW谶=*^ !.1aOyZgnsAI[?5ݩlbָ40),_E>8S?>ߎԔߑO+)2ȶLO~A(2ܞq`UiM,CL٠J %E@ <fئpPRB($#)Aii=d2ymhm>>qplEzh髄0J cҥ3r=/;RI_4`g\%m{.ϓT ; d?ՐdlɓcN'ߝ="\Pjt|'ƭ@if~xvg;v9*FL,];i«g#xn/>Wœ,! mHOisRS4.2`Pbtܿ7i|HؠcR_ԣ#vB}R'(H)&MOU|āόTɑJr<5OgZ|ff $w`2<*]&] 3 G~8X|hk6HZ^DZ=)F&ֽ8 R ;v<~%,O 7rV(53CQSÎ8BvbА8x{N%Jc@M[o?OPۨJm.bKGeeI+}5KW-i%+[W5/YzJ ~],^}w[R[^{y탵>Zgj}{nݡֽ_gK7KxC[%{'^8-i]eS8 [tVrM(JdN&aQ,Wupv\>Wq rx/4wv)ƚ%k?39xd:cCȣ3.1,ǢxPEoHa1ׄj&8}.VB0bF`-<_c1@˅ Wү >ê>9H"Zb9ݙS2.qt_VNB)hrER *z-D /,%{Ls<1-|g/)= YaJpsX]LdF0Sj9v(A1NΌ{F4Ǡ_Ϡg~AA0 ČЏ3tA0f~Ae{JΜu|Eu.[q T8> ) hgka/˜C><5ȴ[̑y#sRY>tĠe`{tnjK $A?Ơ3t׌ЧtAAodf~A`iF ~}/ϓmlYdce zlsl-쟅琍/,SPV.WȶoRvg/?g;Dh $}s#eEʿAؔrX~`Q)6Yt3JU߷hRJJY?X.(Y 5`id>%i;$ r(V%SFZ?0w"z}t` +r0jflf$veuSvYm4.7AG7|u9V== Y<_>s܀[s'vIXKh&hfKEj7“wwŻQ2@9_1KD5K0mm5~߶bo\WB`W2[>c+Z5kLA*⺁`'(@-|-c4xM+`XG|W4RaƎc[D6E1]qI [X<Pe1֐- AA2aEohPípwG:׮0+ }:W=bD+֭ ̀~G;8u{V@퉄ňdzCHdVH) >C0b*s]H PeՏHJK +impRЍN1!L * |oŬk}ڣ ghG#C>c|wHk Ob,"p6Vc1Z} !VxtP-'Xjline/jline64.dll `TE0\% ao0h#A h7m@أ$$ $veQЄNgufFgx" jB,܂F[-,-םګ9uԩSni :BU%d+avxz ދwpV٥e*OOrkqQEEh]z kY1}uye{LRR|*cw2^yfƂ=;] ni-w'uxf,+.z0Rr,~5`\'aM @k?3hk]chB, :燙@ѭ IANլ#dЧ^))wg\ ZP7=8f4v Qn1IwImyXzH0eO"4=Ja Fj$θL4% \gc+Ą`]}^(T4>TWgUx1e X`A6,a/Vֶ@^P>HJ9T^_FFpF pPb̌B94~JN drVGʼnx.dh j{D~rdKnr>HPݯZF/R|: tY0,dQ=:, IAamZU6/:{2hehr33dZ8~$d?[flL|OC7T}/F>'oȆQij쯶A&GWP(H#kHOK:^=L r8H^merZV%\e8 .v0@L>?_Zlc:Sgۑcsv}AWy FT7{Bc 0OT7&#?"uB% n6GP%f.##`> YD/YʆD[Me%T} Gi QgQcZjȭTg?} AiHa&J5* .TNˆ?DDZU@Ф޵$X:P5++{p ܝy9s<#(;$8=Տ')s19 Y2Ny;(6dhӉ2f2y?*m5bdu7P1tKf{2HUB U @.a0*3}uX-,yVHO%طj(cmM\ [S | o&?o2}*?ۿ `zChzc+W]ak QJF]8[̗k.;vqauUC+cF:Fζk/uTN< )>`DȻvՉbi6r:tѴa,67};&>A3Ld s2 S]U, 4ӛ};V-99{"+ш((S/]A5S8;#Bx05tv\'gS-M`+]t6\Rt-U,kGiԤL98 +n1 cp-v~~೎G ܸk;FўNKowʘɑ&[Q2yO2ݴY(if־rJO a!|I>0H9< } @0L %CN6 Wh fP4p!K^+..`Ș\ 3oZيne{_XSnA>CEwϊWP3-1!5:֘ #& fB"E G*RIya_d9&~BV~"qaXIg t"de)RKH2r_{17mLj5CR;oE2qƳ1] f]./=I /KoK%?]);h]_lt{rs}ʼn oB 3 <{; "Ê`_TR 8 ,qzW_Ǔ5{V~YoSFqlQo6;|Q:a4t,Uv N# oX !P\%;".etIۿ֜ƖO6ßAAMbjJwS=wRJ(MHV'=´Ia@Ff@廼pL/Qc!.'Mj/6X<\ OX[4t.jFH}3s?maЈ!\AIoڢC^?Y5md!WݲȄ9lu]`Uqң4* o@IWhUOb4wlM" oʇ}5Y#rR/ڿuo@؅ֽ! M5wjFd),}B{Cy&;@I hq}dn'Ϋ?"N1WSYGzsb :fxx%1L\IO@0yO"ʜi/tqod-zґ=Cx=iMӑ=܈C& tA"(R#Uz`w_a>ÄR؁S|Z@'v3[÷[;ÕR-W9tP<}cfߐ LG }ÿ|M6o\[ 7R-WOGydj1o`vE]*Fn`;R-UaL K.G Q .B(Gw-' tjӨ|Q-?MChbE,CtA(.2, mQ2U)/4$l i LQE=T3EM /j2؏F SAW0}`K&eZ+E)ʗWݰympMna9#CP.@'xu?^(3|?jV>[Q|arX|)_'e:G}vӠ.LtOHO9[RLp Z9~/xԃDYGS{yMC]ډۥ4گq(_x*{QqI~TwCWbd,24 Q ewa b NiP?T](L1ލ;{ G.$c^ȠH:MRƨxu]=,h0 ^J*RG mt:>i(2W=gC3 %>*o@j©VPPT|T+U-:`KW-xr3jJӜlٛ09TW1/kfp(\Y]&G7d$<. Aq'#.h:*CkQ|ӨBL5N `r*25tYy.uÁ Fl3j-N;e.*ȸx,77R2 Z\bqKaf݅|ړIt?n5;5YG ]h.ہ.P4jkjP!U֍`HSL[iHoeHۂH#6#L"'jytl%G$O:pM*bs0~:](~}Nn<'c 86ݼpQ獷RX>|8=\R76bclә۴1*~rWsFӺuTG:Ɗά=sS0Mjt8'a?~A{NC/9\ ,Z 4:?5\X !8CoӌRaffS&΃#2FpmP6"ҏ__I8 ʑXޯ5/[BGTdԎϻM񌉵vM|J=/W}bn>|ĥk^5\[lERaDWOl7vf `nJ9S 7EQ?Fuٚ{kTSnUPYd[j2T]C-DC$W h$7Q Le\nvGGGda_R fҮwv6`6S>Rޟ4Ԡygy:{@z<ۧ( &{ԋ.4w0CPytuo !!oAų?jZ'Ih0@ c^#h $d !}T D4I~ w |u(xP~{ ~=X/b@kīvg /jlx+xƠ :~HN1E.*҃@ҌagTƋjYqL?SmtBD!X(oҝęP }iYj8kp=;Lu.{N{ poS.N'#` EX$<66 Xbú-@Jv\$ōj<n4Y?II͙GMRk3iC !\S@Q0g<>-~KF9Prb^_&ȟnS%s \O ,f;B^/G34!@{XŒgCh&O!Ĺ^79:*4O}5hfJ9PiwKaGfaY_[v&% {&S)hJU~v :P1ݗ|ӫ@ [{Szӣ~{}k IikЉ:=m» Nd!2%Bu[҄%RJjpqpB&36N5jDYs\D撓a&^-A+WGaN !KR܂l ʻgٚ|s~w:&Gk{@aGKh by/|yHW1eհXt(J"}"}?`Au )ې\~Kmzx$|]7?;}@Mz֬Q 蕱Ќs;NQ ?n(AyG9g=nsSPYqkn-;_]jlz=Z22=:~P|/>NwfVͯz-YSOǑZS5cL[j-+GB *VU7rM48"&pt*Tz\=(ˆOU: `WE@,,e})MC׎t. OPsW` mx ;WnFkjMy}-R%0tGk1ʣcP0K@_5ؿYO'YV9jz(?G͔y4Y=;~֣ CТhYna3ae[8$c70 .ᆖ f);{Y"e y@À^*A/SnkP\t KK ˆ_.c{LBe)#Ȯ>W]\x^@>mۥ\u5܍Lhlb𴹲FP'7PZXb*`N3* Bϖ"qd ziTWVJڶh|4«k1|Џ4ж#W1Ә@WIbx)叐%p̫#UbO Ƣ([^6 {d.bDŽJ7nStsk(МMG%,^vY-3% efa[e)>G?|- |nMFqf!{}23}?2;~ІW[_m.e0Ϝ񙦺b2 7{QjU'\M7vP5M/Za2nI6+Z4LT#OlʐWnNm4;D=xj,O^.^k2 tUq4=i^GVN#eUc TbBM-~3l -kF(k;#voG=SZrp/v@sKᤇ"zG',eJ5")9 .zPbr[U;R5chO O, $xK2̓Daqx!&֕yp޷k*͝պZ{f6T â)گE1^L~$&{ D y H|0J ,q*¯S~/L}1M}FxDP_/ DB܍'e  f&  t%">HO۽TeAe;hJjћ~wx9| |=*01׾f[O/0 GoWi #]ݙuV肨{b5;VuJ+eTJhGO`j'}7n'}ԓ34-M:cX;P(~H:ݼ6Cl8֞A[;mq˞ ?Lڇk:BT`7Ueo!sV"yi'^Xӱ19Iz50Ќ Eu=E]Mu]M1>}Sݻ^#MhZ,CW.RW^LbQzϓ:: ѡA>^FOtzcq蔛A'8kOՓB<;f&೷|3Avwbl74- Ud} B`~ڑ̿̏Fs̏ꁲQcP60?zV0%̯-oc~TCq̏0%`mo%號mtSuH'?00?m({5Lap_VP ôT#Ȋ׮rytxkAȇLrN;EPgzFve|t*03L+vմ2> N)@Qc[ Ewn(%xU@o!~H51 wݸ+)!zχ򫖃(1-.9!Cuoq |D흝bNPݿhTU%P,A`r? ]J+()ȹq^ |uY j,yF!㠲0&2mMyr~+IvUmžBЁKUv#Onw_ku|Uf`U6*ICg&p1%a]Tp Tֵ7a(!#_dQZi7emԂ|#}O+t$&]ʗkRUC>.zs&=ΐ;b9FY$|yj!^*揭A/WM]U=_ 1:Luf>^<'}UiiC&uoA62i,q+7 b^3zR6xSЛ"YQOO ja_b0ȉCL`R9GT4 PIZ](.$iU B:zH$sq=&(un im.qnmp9ɐch\r lZf4ʇ\қ\i7Ս\yĴD|G=+ΎvӃ NE*p2.Cae@E+(3A(Q38IW6UfIq5x 7D3y"Eҗ-6GRB" k"k3tɬU.3 czmזءA _Z[k_B~ "A([cjo@YL+ !ü&E:Wyӓ!d@Sf:8ea?Gs l \o/SQjF W kRW?RmI5L[T /ߤւ./;Taѵ,-ЃliTGtʡ]O`.*2L@)Qe(ÜG_~ ϫ=II*D_2( oAۻ&5vܫ$SvS\ ms)_;Pa2)Oc <ЛkQhG3HU:<; v"p`[[BSX0 y_Z&wO|ҀGȰ"z[qE17cSw5.)kf#BT8.tY|P]IM!tijTz}5X2ʩAI:¼OaZ$:JPdĬ|vӖe@W##d"![38;{첁!dJ\V64Cܮ @I^*qdPbuUyEmάLA>G|!IW7S):<7ˬ7rS[r FsF/OoK˜Z2.ӻ6EÄ F\˓;޳jK.?q]V]Wq r+AY !um%,4Feث~h/?U3)URS %Ht[tR5yz!%ϙG3JNh7Pj[xK84s )ad|9^"(:;w> gsܻ9/XM5wPy!&giI騟|[~tۭ=.Є 0A'ɕOɊKX^9.vʲ̳:;ؔԹP]G_7o91%2!Ӛ+kH) K'6 sf4kW EGyI4DZd|>'le.iެ0MR$/75/ԻC JN~?7dt9ih!}@nm`e)` )CɅiaŶ^ըQ⮒4uhl,4k4"K5=8O~J(.;X%0FJLXQe .cfiflvߝh͓mP>CΗ\Yڻ7T'?9qJ` 詧i=@A=Ogb6iٺvtr? , t4k$ۮx-fe":K-W*KaI =@5 ={0+$o4Q{S1%E8[&n$edyGԅhsw עzR`"Mg*Ʉ:5(#btc;-t)WM[}Cn̥ WwD%7)Ũ1gVB!Rr 3ұ,wqilk&Bvt׾)214^hCLM Gk2?u .ї8Y2mX]@*Ŏ1(6{=_u :ьk@f츛F&IȘ}p@$Ҷ %&0 kGp6c>Ps]JYnC@]9"?G>hگHq9jgK;?iK  )p(hUUmPZVG\_ ?rtҲk CFN>*H$f|8:}NQ- ]v3ψbI7c^R՚g%+/~<h`ߣX%CYm?_pw"wK+r>>?sw wp_pwan wpݙ-nwWqwwSw)wM㮍pqqݝm܍#{wpw1w8wqS~3M2sw"wq}}s}'KM/࿛ӹol t9:ON'wU,vWWv))/gIbrTz$ųr]gb4js qLϳ;cf^1.)^a-*/+.*+EE%nkċ{yh+E%Vmͱ//[)򬶖U|wXzL|~m-EZ"+RUURE˭4Ϙ >_FRh= urqr94QVm-v/_TZ"y*X+nL,+*/VOArCI"i dJ SB" #:wT.Z+[˱14ryUYĚvuqJbҔYZH" 4Q^WTpG"JiIMU^ F,^Ww7뼙R=#tlkCÍpfbTQ@]Tj|_ϕe=.\K.QZ,W%VyD@ܙr]c8\.*`zdVUYEN%4 =rO,9gʕD ?홾h)T 鮢j^-J ų8VɃ'Ub%ʝƂV7zɽ2`CqY˯H=kf3OȚ}Í6GM甩ig̜5{y7r-,,ZT\^lU{EiUsڻ&?iib_F_o|jЄ?W3aW od(2g\|xD-_jjyw>~6<#}엏O淿{rz?W:;:}̏g:Ϛn?}Bx ˗O8*k|Y wuI,G= ֤T%i+aY*1`HՠMi}S@G^)C%-S\^䑸IU maX7։a]P~5օ`y,Cfs]*yC!BK*%ʫ$X2`:-׾c.C2Pb  nd'@ 0DD#>I|A~Zr5G3Id$H_?yIڝj*i jDiσH~;OD'}lAgwL>fY}uJYN\x,2 z*F ]^lg>YCBr*R@R]Lrd 2T^D&ZzFzrrWXMr(orm~vhPdnUh"l!)#`!Y ", "R|3)&ˁ,RJܤO* ޓ_ Y I9dzW,}8B#@λ @\CnXBP`F!;UYcyVC{}r=k?g44`љ>k|gwBxgO_zkww5gEQjO|5iyY{͟[,fLUɢI?6 G z<~LOOPUyx G,$@1Qq#K ɍ3=T= i00i, 1MJN12.ڻ\,L)<S;i7<a$Őq$if\clUL!τg⑬'b 158 aJ_,OHzC!ﱽ ēbP.ki.viN'}>cM7ܫ <#Y W I'=#~y"4}/wv, t;\ՑI|-t$2|2\L!Kd`gJ{VBx%R*B¶A Ё>Hk#IxøptK7hILmfh" C!}(3:v`{JkFO O43u> ۝Qr6$ =Y}IP_"1y߇'-fG/23sPVa 6~8ʛqF!fJx^)2~2G@_YƆjx6O:NG4/CM8ҿd;?{?n+BUgWq9ɫ3!q 8'|2vL qnd~겾OәnjMjL@=8.ȏtU,I$ @x!+x~7ow4f#1K&[U1cw6=vy-<\d4B*[ ;^"L?Z w@H29`cOqd ݁0vBk2|&!Fy? @lch+qg <`f4ot%yOA]|I2 1?W'Ƙ0>H͋ \&<;0=娸~FD{W1yd#r}ɠ>˽I^/wcZZC)|џZ }d>q^ ` 0C% )s\8FdBL!'˚D-I$SX@y n_'hTd&YG>CHԬ\; /ԙHy/=H'H6\  Я \pLUHy )I$Uw~:o$\=kaOZοHuCl Fjz70{14b;̫,q KruzQfV$-^qPĉ=IEUb$]!Φ'B&7WCs%7^ZwBNRh 7A30uS]VYN Sa.`C-&j1 %wH?yDMeV0'^x9!ZT&_!VX-.(|7geuQr,I,HfUXÉaUndGp;,$ {A rN șG~WV)-̮ÓI<\?T,(]Eΐܞn%tE1C!'e87EpI`բ{2jJ <]<$?/D7;x=M"TNUXǯCMVvIK=P)iEjU0VdUYTGj/z : Bφ"90=yςVJrh ;k(uf!mgWJMO[ӰK34Q16+'*q!arTu7̀]g3A~p!䬨D;KX.HNye;(Hj&6[0SO<6xfC]g kI<@a7hEB\N9/\-B/G.[R*@_*җK!mnzoa^<9N<}xSx8<Fl)ap{ [yx^?ëpp߿s pAE+8 収zNfN }/w>x֏E58r:`{Jy֋o(x3޿}+YǞOr]ا(B.Yz|ޫyk"w[Rrܵq7Mn_]#w%=0s=w;{ w۹]pt/s}s5ܭn)wK[]wӹ/ݘa޽1GsjM˟5+|ǿV~3k'r0A g|K w$CEVi,Dcr\K)=Exނ[xWÓO9oAWKs̢ffc{|8}K8.# dnLo_Fru%烻qfSti|Bܨ8Nhn۬]cbBWYf6jXmm mNQkz)AF@{ /[;yC=[[=T EUarEh7oL;Py ކ>`'CfwqlAq+39N"|a06s[C:>ʁ?rA1^#c2bn>G/@T/'mqu>`rY̘>0_%3>{ ~5paBh}J&qu'K"v\3B+ {iSb.Fs`/!&xXW&ؠxYS/iDu8 ?<+"^V},B2s".Nq`ݏw1!BUPiB/q- oh6mo`;Ya!>8<_ކL+[-bup*1Ya_c ~KЏ 5871yԷ_a|A?C:y}U$aK?U hq|(ϵ\8Xc F_1cc-U LC4c]1闢Mfp W=\z.!~JB Uff52~9`&qJǦ7x35l5wgE@q5>-c+{_Bm蛜{}أgF:dՙP5> iWs?c 1!wp8 ^{}1P14&б+bO|7"aA qHxv_ 1M^< [${\w}-ޡ |ǐxHɿ$WR+ƊzL ׋EDydDFe\dFfe^%ّ=& 5#h3L53l3L۰vۦ]eK;JBirN݉;Jqn=﮹wuwnBTXEJWqT)Veʩ2UArT[uTWT_;j] TӼ{q/饼 /=zCjGG?PK  >grQ jline/keybindings-mac.propertiesTn0}W\/Mvm)MIt*dV;MRs}9 v.d& VPn"!7HVܽ̂0;=<-*r)A\3+|*Hk@9XiJ͟ZHWLru cz7 ]mμ1񻍐=hrN`Hv ͮB{;:KFj}i U%3VsVxg}4t ӵ6mݔˬK;:`2euM 9'p>U_IMs>q%>hBg-Wo*$`Rb c*iTtJYuEiy$nǎf%fgw4 /e5Ha پei0\z eQ?MaS8$Dy+g^ YJoa^,PYp 5YxMSjiyG0p2&K lpfzCL4wJftb,n#梜+36|ΫXNQL,ׅ }R'RȄͷo7uOہ:a>>HőCbP.9PK  >yjline/keybindings.propertiesTn0}W\MAW()NULbjbG)wB B1{ιnBB gE>J]($ 񚻯9 ZO/|J3LD2P %= (+"̂_-˃ ot]z[vBm $kYb:&}}?zLjcF! XY]K0hcWq6X~=^ R?7#7ޞlt]dtb'[~NܠG4 JJ/,y1K80 4cl(#g ohHc:oH݊Ԁ+5F$QҨ TyᐕV,EYN Op]xOP>_p0: `LVA$ a8oԇ.i0\zmMR?Oґ+F'^vDʲը^<[ cb\x`5-XU 5O5CpºW&xx4֢PF8;ΩM3U>1 I%(>l _n23|x3u.0E[kzY#nM '6۽'u.>pTJ$R:Kr {x+ 0: EԂ-T27np lw᱅TVjZWJ;`: =j~4󾴠ݹ>.u- PK  >,sIjline/MultiCompletor.class}TKoUx|'v&/0 >q&.u!.KnRԪjbOI'W-+ ){Ć @!@+, 'Z{N={9;gWPU i ؏>UˇFB)EGY8F ~\Hc|f,T,\H֦@fMX}ȋ~ӏf;f5lxC5-ח֗r@Mչ4>Ǻ7Ajk#؎X71_)֦\3.V6W\,_>rTyݍuHG~ؤXRpxY:XlMU{XX{><ݪ{qt/s*%/F6>ŬpIGm cD`poګh>J"lL] mTqWއW'a!KVεZ\n߹2yN ;0&݃7jdnaAn1qb eP?(rJ.жT>b<p|&0F8-]d _ } ;Hj=Q:]T% <7W& Ve7kJ L4(|v/n-/^1}3DY:Rt6?7͚͑#K e)ͧR,e˱&Gۚ vY>h1&ieQƸ=qv*φvYN*V.i23k?PK  >`7jline/NullCompletor.classmPN@=SŊ *`a?~Z2f:ܸ2qQ)jD7yν' S%8vqP4W ^P%sd,&:& q-~3,{2t"?ɔ%%L hy VKjq1ʌT~ S3IO-Bhe:MhE<9744~d:%"QAx6\Ȑ)38&@:EM)W/`v]X6v( pD_&jline/SimpleCompletor$NoOpFilter.classKAǿ{]^fj^*"4{EC WleoOֳz X̗ٙϯw\dPqPs`ZFW zϐmwK-:` -(ʔpUi2=) k"a 7Z V|:T;NJzy=LhBs@Z$>O?rOq=zzjN18B@(™ @*+Kcl d(-Ftc1RӠW~e5,$lrg/`Iy$ߐ'[? (y+fOKGBՔo%l%L97nѩb,=; PK  >9i1jline/SimpleCompletor$SimpleCompletorFilter.classuNA @ hZ@D< /XK,[֭l|؊ TaLfCfm./2daRYe"Iq)J3aIsT4Xv2pغO[{NჍ1l#-˒KnsZΟ9.ASpꩃ ]uh<{PK  >$ jline/SimpleCompletor.classWUfgw;iBڴ]b݄`i-di"-ltκ3K  R(D4i HԷ ܝl6'{9{ǝ}zyJø;q_1|QǗH~_N_M _[pLe}1<"7 \ O&[NmO%w1<-IyFH+}YKY bZ$z;t':^Ґ Y`dEW9xYC5U*}]I&rżϹCùs*teN Y,u*S'ܲU@t܃?\fw-.h:〆H75u25jsSr%f=dяVP_nUu56wM Ń_Gew`hYiW[cfɵ" b&37`BVяskLfvI ԧz5lOENe`w|ەTHnE' *'\n Hl,QbsI]LycbTGטQ[[_昻SOCv:YMvߔ4liP>hCRIeoX8%NׯB3`MDG huՖKE ׉r40{{RKZxM>`UP +l\C}m.ՑA@jJC+ܥt^Wrh hBIܩ:͘v8ڞ4 6\d 3mUEpZ ;`{*"KU/g <-w&+);oovWgJ,Gpy50Ŗ߇zFb?B؁ \*V鲜WkcFOF™Y^F{9&N6n¸P͸zWRH6p#eu`:=ʈ/-YDҝє چ^;ë鮀o[0e%DA΢fg1&Μ@A 쭳:DZ\G8ߠ~+% %=f[H'X5Z?cd7lGH,Z{# ;NYaM{:;V㝧͡=Ļn_->}^K/7ҖVZԃQs^K\mw7fmena w+>]f+72gk[?H7~9$CmJ6| dth8Ymh֫'uq'p,6bhIXlջzfyqWxRlia=UC3OnȱƐz8"HXM,Np.*r叼mL˙9긘WBrOSȫ!'aZ1 Жb)hI%j!Μƅz/KԨ3aLzXZAQy1&3w)-=M n)c >;G[2I2#`/ ;Xa1qkâ[=xT>0=p i<y}94),**R01v1%EΰOΰBgQȉI>Ag#?OqF[[R#l\Kfzˀq]?%n.BLr2X\j-RHc#~:!ce?_׈:yW:jdTfj$ŀCsBjz8PK  >g jline/Terminal.classVw,kyrB ؆41"86qF3bf,-taRvZ_=JN}N'zTO73&899~}~{V,kV2HAV3AvqA vi (XAӶjF* c,<%W?l2W Բn6ЁظSHA8{9d12u*nA1Uswj35 D j@AJ:[:q0+x#Qw?#bE#R:iϵFHCC:eYhXnR_Wb!>"uVYt|OXɅP ܘsRQ} &@ثuMKg:>WAx/HT P`p/o NhۜE 5Xws8l@˺dQI!5`1Ư$O oqLo14\EQo5c,"{U=_eV/ v`e@`?ž.~,a&0A!n{8Tj?HIZ&zjline/UnixTerminal$1.classmRJ@=SƦh]EXwQAĉL\ pQP1ܹsrw@s6, LjQY7넅I S - Cٽ%B_Ju"q7&|y! K_/[B7y' <r->9]y B)U'F\G #{ox꼱}牫H~p=#MB˦A(Xv0 Cfɝyz~*m-?"-~{~)Oxpk<#1IigՆy2о5Įy9PĹǚeTD\Bp\.!WYTM4Q<&zBb+Q%Nfb +'2@X||PK  >2/a7jline/UnixTerminal$ReplayPrefixOneCharInputStream.classT[oEov6\JcHR٤5i.6i4!4/lq6k;/"E BK;g~EByB;ՄJڳ3ߞ;ߜٿw Qэ1a\'e8\x*ēIOxFóBhǨ?'yC0L~A4!MlTV"Vxjyu*Ev kЕb]v!rr>G9aey(L!k;H=;o9 NeSc'+q%/YȲi++]VB2Vr}5Dżum9{c5mH0R#d*? ]+̒(+p,: YL vCkޞȈb.8zchqazpux?{dV;_.4_1mɑV %3Ћpx@?ӟp f  5gBf" T%.vZy;S1C1gY˘a` o[lɐxbKUUl;{?xP>nwB4S\ߟ. (~?_?Fu=U^5-W$0Ϧ?2w@@_yI M-s "`njo05o!L?gBc{N ?6zaz]>!#LǸ@`>UcuMMd_HNSf||%հxrw6ljL)f Uߛwm/Pp aSÑ";cй03tїW1A2h)fYrc(&dVܬ[=[6WFMmqеTփ+}:GZ V:oCQ$7mH5۶ov? /-\M#.Q/PK  >3s0jline/UnixTerminal.classX X\u/0 $d+!Y%clKOfkQĩ&u*Mm%q֛n67MӦMܤM4Iɗ47a@#Ǖ{=r^P|8/pqR_֋A{/||I⟼EigN&hWuM7dw ?oӇJ|Qn|Wio!?>y}~ ҏd?OEkKAS*GS\TCeq MyJTA!_ҩ 5U$_b YPrM뽪BS4QJ)Jfڢ(Vof[|j;"NMhV^˫6LO5Fx(LZ}VM(Ѩo #{L_~էP&PEF.-Rh=mw0MuNKXoV3͛:#SsdڻZ4wF;ZO6"vom)}ݧ읇(FC",kc CPtf1c Bxl6)Y^vVam*'֝ /$&Caň7e: D(JH3 rq!y>bFQs߈OPd!Mq)X}ZȞF3jZGrw(c#BQ'ٞJN3b1C, Φ,>ac2cQvY&SE Ǘ č&#Eg3|@5CcEM– cV< k<6DW_ZWq#a i3n%Cƌlk١cFگ9e&䄑B<c6˲0^D_rr2$z)ƨw̰Zղ 5nySqqaq3$xEe˪7qchTVB:qPc("vM('sf+c̸i OPY!seC3Iks(ZIZ l$<5⢡MM菹'<,y,_H۰Q{8MdajX/2_Wkd7)B|H8)SBJ]b@xEA{%5#v:PÃ84vGetp::[O1ocAW]kwΪ~YKj]} Ƭ|'r'\ξ!wM"R.ˠ\OjxNQN6 ӥ.t~#誠[zϷQsO u~%HQqTZw:P7ASWQv\UBbCڍ}j/hVpRTΪFWMQLDQWaڹVh%缔qyeWU/+z{Ʋ?G,5\>r}>KiNTKw ^)>u.u2#N@C>axu%{$t0קYkjX&~[ fYnfKȧɗuY%PΠT-eida, %K,r,Ͽ!KNU==l7yzƤ{x8Cl93͟8j2PK  > q!jline/UnsupportedTerminal$1.class}T]S@=ۖƖX("VMCෂUbBY2a$_} ?oQPL=sw(щ| զ&38iL`Rm8xz[nc.Czqs;\1V6\!yIs(<ŐZ$DC'Fy!SpB\dP~naYzS_]jSHհi!Ea:wr8}Ȩjline/UnsupportedTerminal.classUSElrpq!Hk!b+*JKmTZP*t!rٻtFqFÌvor|wҐZ޾{}m?my\b XrƵ >|egpA7^-KƚuwjJ C~)=-ƶҗ*C8``8)}Y?jxBCr%&Cͧ/>fHTvK{!HɟE`h 2꺯WG)vȰXV0spWȣZDPn919@tu}Ańz93'Bj;R?굔k\ÈtjTPoDV8R 01094e$* ]vTԭP+: Lx n7UM.;_w*{< =Mr>h66M䞍]l⾋Ŗ- .baIwY0 SW'>w_ʘ0^gO󠚍#݆4I#$Si}eSJ~#-)m$'n'eDuPH볔kr ;@^H/pM.@@B?8Yt?ry`.l ~OJ#{ϑ;jaxҶ*=Gvw.O[ArN F™n% AJְz]p|g/e̡H%ܵT0#iH Ba߳}3E'Y_`2b<zPK  >j  jline/windowsbindings.propertiesTO@~_1==n_.U 1Ͳ6[9PZ<#/f3_78l)sw.yq,LX3 y2ω\Ă' sT2{qU/T" `fy:8-Vfm5 i3xIwǨbHXM!V:;2 ^*X SO  H&”YNߴQS璁4ؿvwCQ(MbnY s+& +C)h@TA;30Ai빁6$:7/2,)BfZB9R @/eDd:pc0 FOãf">0"~WKq g &dh5gpcM5ģ$i Wf5j8-8A8 q0T <7s#F ׌)d; \=!I)uɞ3Zf|N.!8dxV vix\%̸XXSRnˤTeq;݄]4e.Jc?rcMv`jline/WindowsTerminal$1.classuQ]K0=igdZG?e /Eڪ?ޔ"M͹$'o/@Y+ѳУſ2& 峴;ܤ>cn} !)Z>P9T]69$>#1<|FѢ@?xB1aPK  >c):jline/WindowsTerminal$ReplayPrefixOneCharInputStream.classTSUN~6B(Z5,[D%MCyqIn`;a7nxQ^!aQ}Rg7/:::qxM>~{;HrG0چ 2<+gØsaLx^ ^0FFu%0e+7U B[J婛eA)BxᬔWH:{V(reOXkU뚕d)Vu,A焕pnvV$91N M؎]dc=3#.T֖`-sVrUDłusyƌ#R"`GxU* \-0َU8`YiIB8Hh,BDr ndEl+0v..Lsrϟ`ۘ. ϻ/+m{R>@?^330xE'p f Anӧ]Zf: ={{4UG赝kV{\MR\:d7R10li k`F[Q6)#{2$ެXRzq=J? {pJ]y%-<>]=_ LuΪkGdU&I9>λi[ s ߻8C1+[)2 EO1l#Ej6s!yh2N8o )PK  > m7Sjline/WindowsTerminal.classX |[u[ғXc;rI 1CB!'"eMg%d$$[n-Ж++ i R62mǺ1(]ZO,+߻s9|sӿc ;|5gxރ |+52<#7݃%1S!ˍ^*O4%d3 {[ % 5R oP"M=h\h\Z.qGBt28(kuK&>=RnR5pK[.S$uԫŕ*Zd&k4YA\A@ydlF٤4٬xհ6J4lҨdۮn٩\)XkL§{ƈy*7`|b2ݗNqǍd[,J)AE30 {%t8>Mi@ۡPfZp =@__}aUգх%] V%,Cxz[zZZU_O-9t80HvPb`y@WOK5u:Zz{) 7xP6Y;DT{1 1}PW>(ݖD4{B=-C<#KBYGdבy/?%&+I#VL xX8>5AT8D Q.Jh#{l$ H'13nl?jƣ~#9nño |zpH 2gmEn]o>(MN+IQw:3fDڌͼD)$a#ٯW&"ؑpTp)|lNEPsLޢ6b:1j:rЫRyhGCPibjHM V,]9dciz^+#ie lWPds-pW: p|`8\mNp*2ch L(鉤9H2zjqd4G;d8y4, 8earkfX$whWXMF2E G a rTæ5$&iܾdneʪGdz2;lPj,H8KTD"VNu*7S-}A^u/ZaC&Ǎ .,?LTj 09APj\0=x -`iL-@> OҭjQuw. p$bر w̺1Eva'I b@<םHw$&Q{DyɈ"u$OF@&tٍk~S- km٤n.Mrj 7rvҬ:~ -I:>+,D^q&WOkr.xG±Kj/󩴴0>U .[NӦ~(?u| }V&M:t|wQ@KE_Vw .TgTSz =cZa-S?U~*hRt.Mu 1GXu*J l4 TG})Ch,K^2<ʬH5&FQy'/YFtzePgpLqy>=2c/)MtAš . Y^|\Qe1:JL9NϩNfl:M6ĄLT2_@]ej$J9*<¢ 뗼6Tڠ-JI֓dT9N{ l||7nh8o^U*{N@wpgQ;uG;b*ڍT$iNN 4K2A39`qʢIXF&ӌDD-X=,pr6-8>3ƍx:B|WY pĪmm OLqVխo+F27ttb͛^PGw8DCT8W*)dK_c .5mjmyɤlXk!* ȀW!ܦwFb3F(8eC+Ld >Ρ[:MO RX_G2 {7'ήO廢k;4+H}shU=wpت^9`,&}M&o?{y492XP* ZΠm.iC -ypze ":))⣽/,Jr'-|^ʱFX'*U: *jH/:|E61ل'e3%~|\l+xnJuj2#}k[y\#~ifEXƫ_)N j'cqxo(}G3o*/TizVߊ0yfw0`y3Y3?YkIB.ⴟҳ/0,[YR7/|K*&ϨTGշU>1iϭ +;򺦼˦N9S)>孛rMOQ3_dNf:Pv2S/S0* 5rn>Op/A|Xr=n!|B¸?A>_-w(*c_xHPLuU\~75(=(?Gi+gQr:u)N3YǖRSR۠|AY;2۳Nf|؈9' QH`n|0n[yyOYǣy8 6^/Ճ(^Ob@H_*ZG o7TAs݌jƯvyq>Jw&.LE$U!Zɱ۶, -Kq9xÊ e Z+X|,6v`cYefOL+h9>?аy9YLgC Mu^<蜃c9 jNpQg>R-i"5="}GN`WPK >META-INF/maven/PK >META-INF/maven/jline/PK >META-INF/maven/jline/jline/PK  >vp4"META-INF/maven/jline/jline/pom.xmlX_o6aHt {`t-ɬyOV&%)1d쎓)䐈R< GȞȢ9'.'lȖf![YrR1eDRLٹ}EHJڒ6EwF)d0b-[8pʔU.YJQ>:8=~1~9~r nAu֞8S1aD4 NkCr^< r3tߌ[4ؔiWskHfB!e)SI&.ߢq.*^ٯF 8G.S~s '^ȖЂi\TNf}NA%ytYxθ^'RXyZG=Ё 2LZobx1CvE.kc ËxC/BZD|Լpu2Ѝq44uvt:r N; Y=C Q2,ڶ_ N \)ΓV.Cٲ>eGLQq~N co ."Fm-={p|uq3ܜ0+7i \(Eua2Z11mgРsk?%+%x9uѭʠmTw QKmt 1O6F(%Cj pŐ @=KJw齙X6ڏu%UO,*t՜bI.TC "KԶْ΃SثVXm%逩])&9zvݑ 5Ox薅A [yQIe:egxXr{zer,msg,ݔ}@$>X}b#ԖMF=V[jO-Q gW ܎#6t~R6#יQ7>e(o $RObzT7vyB/g[֟CD&5 u]Psz(܏U> K/ցK%;+nTKlQG=n";x9ci#O"z_c;vw 3jSKV{mqJ-_^R%fxZ?/E y<۩N˶GߔiqzzHҙ4?G}=T@D?>cxƓX=w+Kx7PK  >GxX])META-INF/maven/jline/jline/pom.propertiesSvOK-J,IMQHTM,KR)MUp,(R04R00226Tpv Q0204*K-*ϳ53J//-LKJ,*LKL. PK > AMETA-INF/PK  >~"'META-INF/MANIFEST.MFPK >Ajline/PK  >Bȶ> Ajline/ANSIBuffer$ANSICodes.classPK  >f}1Ns djline/ANSIBuffer.classPK  >_R 7 jline/ArgumentCompletor$AbstractArgumentDelimiter.classPK  >#W~/Ijline/ArgumentCompletor$ArgumentDelimiter.classPK  >kP**pjline/ArgumentCompletor$ArgumentList.classPK  >?M9_jline/ArgumentCompletor$WhitespaceArgumentDelimiter.classPK  >//$[jline/ArgumentCompletor.classPK  >&x*+jline/CandidateCycleCompletionHandler.classPK  >0K s* jline/CandidateListCompletionHandler.classPK  >Y/*jline/CandidateListCompletionHandler.propertiesPK  >, -+jline/ClassNameCompletor.classPK  >S5jline/CompletionHandler.classPK  >+6jline/Completor.classPK  >#9N 7jline/ConsoleOperations.classPK  >J4/m<jline/ConsoleReader.classPK  > [7pjline/ConsoleReaderInputStream$ConsoleEnumeration.classPK  >rBRZF;sjline/ConsoleReaderInputStream$ConsoleLineInputStream.classPK  >^&5[$Nvjline/ConsoleReaderInputStream.classPK  >,xjline/ConsoleRunner.classPK  >,ǀjline/CursorBuffer.classPK  >v&` jline/FileNameCompletor.classPK  >Gίjline/History.classPK  >z7>jline/jline32.dllPK  >-'Xjline/jline64.dllPK  >grQ 1jline/keybindings-mac.propertiesPK  >yjline/keybindings.propertiesPK  >,sIjline/MultiCompletor.classPK  >`7jline/NullCompletor.classPK  >pD_&jline/SimpleCompletor$NoOpFilter.classPK  >9i1jline/SimpleCompletor$SimpleCompletorFilter.classPK  >$  jline/SimpleCompletor.classPK  >g @jline/Terminal.classPK  >&zjline/UnixTerminal$1.classPK  >2/a7jline/UnixTerminal$ReplayPrefixOneCharInputStream.classPK  >3s0jline/UnixTerminal.classPK  > q!-jline/UnsupportedTerminal$1.classPK  >8}Ȩ_0jline/UnsupportedTerminal.classPK  >j  /4jline/windowsbindings.propertiesPK  >v`A7jline/WindowsTerminal$1.classPK  >c):8jline/WindowsTerminal$ReplayPrefixOneCharInputStream.classPK  > m7S:=jline/WindowsTerminal.classPK >LMETA-INF/maven/PK >/LMETA-INF/maven/jline/PK >bLMETA-INF/maven/jline/jline/PK  >vp4"LMETA-INF/maven/jline/jline/pom.xmlPK  >GxX])TMETA-INF/maven/jline/jline/pom.propertiesPK11/Unqp-2015.11/3rdparty/jna/ASL2.0000644 000765 000024 00000026136 12534342604 017547 0ustar00williamcoledastaff000000 000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. nqp-2015.11/3rdparty/jna/LICENSE.ASL000644 000765 000024 00000000635 12534342604 020404 0ustar00williamcoledastaff000000 000000 This copy of JNA is licensed under the Apache (Software) License, version 2.0 ("the License"). See the License for details about distribution rights, and the specific rights regarding derivate works. You may obtain a copy of the License at: http://www.apache.org/licenses/ A copy is also included in the downloadable source code package containing JNA, in file "ASL2.0", under the same directory as this file. nqp-2015.11/3rdparty/jna/jna.jar000644 000765 000024 00003372317 12534342604 020243 0ustar00williamcoledastaff000000 000000 PK bB META-INF/PK bB4META-INF/MANIFEST.MFr0;hX'Hd2M&ێD-O+n~:k"339~bp)h`!*+ E+C//Q,5#9KջՏ xtEJ  5/SbQf+7A; 9#vvVv6FҢT̜TFIǜĜ̼tԼ<IJDF\Y%N7kڏUD? 1vQ;;39vpO:6 lx[[:>ֱP>W.Gב3-D`K"d(t^{i2 jd9QQd*.]ޗV즁,2a 1&{A}}`pt@Fۦ&F è#Yn%>\L$k0pG.9UFb|7.͙D HOڬ;Mw7DJV`ɼ̺C+Jǁ:B>G{pp_ak =RuZ1u{B**e_O:`+VtF )k£]s/?nE:E `*B5l%2tl}C$4j/PK bBn~i1com/sun/jna/CallbackProxy.classmn@ (I]*5NtB GR] ^@%ɇn/ZڄfkW#_Vӥ\$FvD.M)oLNr tjҥGiNɷulV4aT%)s(6p@jZP #8gOPK bBQ1com/sun/jna/CallbackReference$AttachOptions.classRn@=q65V(@x!EHU O. |4J.ss|u`hM-3QE65Ÿ́?TQS$n}7~ њ%YgŌ {͗ EDD/klыUPOxBBmp@=ŒbT>$+]Xxs3*p 8*m_` `h`8OpKړ\2Mu?PK bB#8com/sun/jna/CallbackReference$DefaultCallbackProxy.classX xTϛ&,010 ([@ !@I2y 8KvE؊ $D*EmѺnZ*K[[W =dL^H%o{?7{1մ#8@9oa1$G~|8PcR<ǃI GNܗ|<@)~S~t4?sOF/xs~ p~'^xIeW ?@5~('?"\7C)GF.VM@=v+pʁ<"R8|da5:a;dP\6C>rYQ>ȹBA Z(ԡ.]ǷG: Svh}ZUH wWEW%rf- 3X"\#UupQVvtE#=#3oHOeÁHg0M(05eۃyهץ\hѻ(oKep0@w|G{W_cM`tMޜУmZGHD8țhP~O ) @"謹<ƃ0bnJW]Z"qac4r.Ѻuݭ4Dƫ0e<--|J %Q= D!5.A0(X,DP)@L3ݭ dsL} ȥiL6t`8+"@$/gi3ᒅnPHBDg"9D-cL% #π&}ԦV0$%&3&ZTI${cL YZV( 2/wfܶ=)/q6= "X3P1b'2/`Ʉt$ؓm>-`Dg,$c~ʌazC9kQM%bږQ.(#sEKE=,[Y%#aJsr5,ecy\BCMV[U\K8T*AWANL*M!JSimx?'JgQ9e*͠ Φ*Cigz*'!JC UEQ+`X3-Uh1&OE|slgХbo# ԰\H7<\T0)/\R(͇TA94Wq*U<w`*U*&{*-%ėrծͩJT|>5f1bDxTԒeiL]@˳*[UiVgk AoSi5ի@kTZK* UjϮWY6 i}UHH£I^*m56BYiq:qe B8hJ8hJ[iJA.aS&|t NTF8teQޛw,NΕqC uSycDVFUԲe5) KB&ckh aB RfLwˁh?R0Mtyr҅#?3VVy]:ftnv(U_f\Yw4Mt$vy⪱7-f˙GӾžl\ KL6_[[5wNZ3dtZ{{|qH׉)\sD6b4.8uz!WK#]ppry g/OujN}dӽT Q n#LnSH/Lp?3QlU__Q]^mU!\85b;<ɴpgP#Űڶec=ƫS˨f$0^6thö́5u tuP7QX3~ȑm-s%Z(UOGVAs[l%GjZO{Lv:n +mɹ<&o_Y `li(7 3m[9E4+sQv>P,(?+ɯkI-~z v{A!(aX<.aX}i{\c@FN r]A8vAa(~} XdY(mur)e.)u(bPoL 0&)hJPaf}An9 !OVp b}^vm/(]V"nC}t;7QAwC{zh?@W4 ,Ca/]4i_z1:n޿C؆u؎ bvRqXB0F2L$4VLŽ" V`?H0(},+·ؚ>zozI\Q͟$戲g ̐K93 W:)#\x0 {fBeD|Nku+v5k b:c*fӚv]b0؅Rng3kl. 4z. ڏ5̵Y.dعcV4-CfYhwll^ <199ތ|9:>w-:ո0<wJ}oC3N` =(*ٴ@=vzߙN H?e* Qz;\M'q =kL Яq'^"x*j`%[v%brMG=>T+iҎ"V\gXv1,A!qx =D8M9^7^癎 z-bf|ϰ2Q?/:>WRt-E31nxySLg <#enLde># R?arBJ)T.п`! N7U`wf#Ҿ|KfD`sI.>Rϝ>{ULMC[WCQTo1qGyf Y|/CaJy1`Ϩ2W}rjxxSJM`i3ŲX}\Vzlty ϻ\ڱVZ%%C텣}P.Fka7grkl$CPA(L ł ;+9Xb͊!W(EZ)u7)eأLe W\8LqeV2?Rf'JVYxGmA lmC˓2( )%cMN wʊҕda|?$a> 3upC0n&{k3al4ąӈLN#bx2|ǁ2ȫa!^9{†ɣԛ F9 =4ɡ)GIkI& E)"Bk!yøȂv@Qy6d\*̃[j˔\Yeڔخ,E\ \WVI(kh@G>q%Ls2VQTn{Se/\%p'/딴Ԩ7[NaY؟_Ļ}'館;Ni2H^mޞ~Ժ|qszX֞簄γPK bB|? 9com/sun/jna/CallbackReference$NativeFunctionHandler.classVWW$0!E¢qiSE `L`- HQ$ya'nvѮ}sGszڞ7 dC^޻77vQI8"ߋp܋b~i>($ĹR ^@`IA^s^ɇ?*B|vSnϞIθ1N𨮄sF1g)%ʤN[>L^^UW}e=[ln5:Jǘ٧4:+9Q.R'EOh GtJ1R۽Ei1%>˒dzU9pDd)~Jí>lȄEpmpI2!U4ȑhpvwlŭ%%51kH4+REAau0Rk[;d#ˉ/"L490nP&s@ X(Дb;mT^mSq- zYx XY%ި6]ٯKN~^JQ-@‹2^kWfB@SyseԠVFvHxUY48׉J%89Y22|xKx٩B~8 ޕ >!jd|&JNNE`mqn^fMozrq ?tv+|'2}m1H*ԓ2HNô:Bk |MDw 6s(6t_HS4Vr+qnJ'MƒPva{B-j30$ݔ pw~<}n<dpyl'4]"!T8 ڑkZ\^1-"C^qC8M0%8#8+NxWi\'qS  *(VN)OlF{N=;yu6 ?*SICO9Pvv6 POdR|V?yȔ/0Y/eN?S)^/^AyH/|X{_=_҅ǕGtx |Y=GjW5nݦ|݇i n>ܮ>ܩs>ܥ|GoSkTM)?r)?TȔG*FU]h6JI%biՔLL&[kt%#H]ө]Sel$}]hn˚H`LlCeL%5)i)qes%O7ΰc%^ʟi&8?ˊwt&bEȻD,,%SL`ll Jye,6XCe,5Y2Cgh˥2V+*, I%3e Βc J'"TJg֯_k}ϽPŞ\-Wh8}Gpʉ**P4N;Y~8<%e]{atljnds#=:q\q&Xj}X~ud#)Fq/5b,(t ,m/D8} b(uAgcyu>q 6aN~o;ӑՙx&ZW$5)tm斧NY>V"xrY"q}[4P!5s{$6+nƬZiŊk/YlʍGQ ey}sM%2blfb)2Gnkcz#OƖ*ZhbɿjU~FxD*oOdžE?*3y 8AoIvxۡXְM}qXX*}WbJ_Yv_}n'j}kchm}>f/|P(i]dQ+\slދQ::s ڹOy<9<8a-6~ශ/"1K1p+ylT'I cz U&0q 3C'7w],k_ٍ0{=W)_C hZop>ps"47܋ҵ5X0>1vgvɛ٨&jWXF (C wO&l|l\zLlJ\w}_y5;APoYV2sLje[&y a!1r\_3\Sr5l=\Z 6%&~@=Ȩ%Kg}dѸ{10*[a‘G^x*דޏ@MN<Q4<&78%pbJ/ދaLk=`kIY螙݇9G}0]{*75|>4x:J{Zk*̀u >Nn- o bMKm-n%0}8řrP6 sq$ޏ7Mrͼjl!K$" e,ta'.4b7q9Evq5Q\KK?ٿDl꛸EqUCUMHs׏[@>@E)Kgg9OPx"f~<(b{9jgr/=e;10[j(bѕy+`^LjSp6 r!#pJ!%p !wW RG1F'C`n:nwl|Ga|pBZOmX}hhwbͽ7qZnx&nz4𼚲}:zG}z-էݏ;[qSFU݇)Gij|C܋>\KAiOfic{%)!x7\XE 6릫KHE;_>LSnÚDKΚ\C:S7y;rvrlfo!8w}W0JW.cHU4:%zŴ24/ӱIfl$dRO)7DJ"iP/;ɜÉX*h` y E.#cdlNLUV*匛QoHI-g`(1QbjAmF{+5s[!YN0[ApnTkuL2Y`: u2c߫"8fY)]GiUBt+wW2N * <;4`zq^Y׾ܔ vrz!m!ox 3 LӱPi:YDќE,F,NY3MV~YOqYdͷvZ1T7xYTo#.0ll1jsж*TxD*(?$=2JSN&Us1X8.m; Q8ZV$`R0 oagԃMD(JBR%b?voR/.8~]ud}+wd ɧY9 R xc ׋w:5`ق1֔Q! *!g 9A`aNqT+z^\ɝ4Sت0NSʎb6=qM'<8= ݊2" m*h &x*i÷ GP3t^ͤ if5O׋kɾ!we#isp ggӻ(`L͓P|nM0k~eא /aԖ5c]O*,1\v~2/פ4)pfa͌se +;F(t>|p3 Gxz܂[I: \K7Z&\1\O@5A ]Mt7c|y tٷKnrnp+S#`90|~0'.pXpNJe tx߂I[doAkvlchf 9i {pO76n8P[{m=Hrt{qtGѝ=h=]=8{{zpV.9AG =`:3g~ 5K4Mۓ\ov_RKY^Nѷ08}GṎ~džq\Ɲ(3dnL7mA)X/'ۦx,9 Obx1ti>z95GG]UB3MI=DC.'?8d0f)5^9#r'6Ǚ}{U^ ߻+w8(س|s>=zC8 KsCLC1)DOrNXF~. /Jc%j KMYD.gv?ve:׳3d9j~ 6ȝPK bB ּD+'com/sun/jna/CallbackResultContext.classN@ƿ-RAQѠxx!T8(ᾔMʖXhL<>qZ*lv3osXбc]{ Thpgb)x m ={Y킨K?ñ;2h,~2x F)57D0湨`8qhIg#]EN*yhzDiu%'~:ㄳ݆}E.pD}\W Nk&NϠit lbRԥqtԺ |33?? 2(XL qUe-$65ڞӑvC@d><Ք^:W/ u(:ʦM+VE/VTQm>Y<3_H֝ΑZYl\ZP̮ D_ 萑uM͎L9nw}yZǮpm %R`cE׳`T70-x]̱;X% 1&ScW,(!I SC|Wu3 QTf)2ڤEѥuθQ`SL#>Jۤ[Oޠ.g,jmp BՅrGMI'eY.; 2}sν܏ϷwǨ9a UmVm`H0;>^y0HJbPA4ArPog=RkGVRܤþP]| th%A̐0WR e=uhũ{⑧aҥih$ԮAQ]*_\:Swu`E9ll1{NlCZmZB6Ӳ1lԧևj:&c4~CBJT{v]vcs}{y:yqZH%8m`pVǨrq@ e~߀)E2_22[e "X%aqBIWbeH +YӑHPvy f^OJ&Z:s5gES~<'. ;/Y~ J[F4zq[C@ܱS3c7l%1+1byq΀*NbL4rӎ'TOXG㕓ߝi [3UXWKBFةejLJWA|;˘% ȓ`>&k[ECGSQ)YgsE9+ 5RHlV[n:OM12;]V/)řn2TS0/vU&V0{ ]W!G6T]:).T8!7쾸p8/ ;DvPnϳ%&Z1ц[dMؖcbs6}4)˳b:4z2oOTי\v/Z<ZBzݔj-/kq&>&`C8lM7q7Wp'c.:r&>=]QYRÆUb?2Ṷ5+JWh~) =uTf^irkX\@7nn)L > vqW'#7[9y9򴠉/vhxOnT2_)fY:REhOQ2_XZ=Pwr0*]2Vrj2<ԡG/D8pI`hB A VTh j*J*V+FV RA(4$hBSh ]+Z/h d]5\5\EýMxf /q ^04.^ #l<Ʀ0dݴӿzon5o͞ýZhdtNG Kbّeفw2,;Xڧڽ9t'MXi<_haB60J9Sʔw +}&K ،PK bB l9#com/sun/jna/FromNativeContext.class}QMK@}MzV0UR)ԃm\4dS_)(?J=Tda7oϯ8taSC ]z z ᒯdc KHugT:NoDL\dS>iiϤ[Vw2g8tE/Yp%b&J<(j[սfB)t431{Y$v,t}eTzQpڛM{de]Ubj5FƥؠZO.6jx&k+Dk G/~*o#WUPK bBMCU %com/sun/jna/FromNativeConverter.class;o>#nvNv.F\Ē̲TFW IJDļt}k\r:80u̳Q:͗OhZ,KֹSZٌ߮ HE}Z6_itI6E'L~ V%^ߠQ<]ToX.ԏx?O!!Us\$D\x^Cc 4a]@#%K.)K.y1E9"2AQvBR#3:a<`$ƈ;H1yi(*b+AWU5PK bB\'com/sun/jna/Function$PostCallRead.classm1 @Eh̚,q+V.B6pCIFb1 `T`,0!Qp:k*mB7Tw%ݤoX;_gCOJ~TUOv,i_\]f!0@7!h~[u0PK bB$W!Gcom/sun/jna/Function.class[ `T>L,/ I0 ,B2IX"0$,T&4 (Uۺu VP-ZDIBv_~ؿj{Qf2I^I޽s=ܳOu!?·6y'a-{ }xW_}>_zkL;F^)./O<&=`LC^lw?o ?MBÓ5)/?" >rO{yVA/}V>Wy`x%@;."3~:`T?? "05?M_<^~_ o񺏖VЄw>jwh ~:y>Z//GQy`/(&#?e_~Ȏ5?uv?#BGvTz)6l\Rϓepn+2(WU~ 2$S}Ve*O7aӭ*7pdžj&K_+n|i4#[sr)}Z4!?,JkMsbv6%b(ӄy B7CpZ"q1RXLg ) iq#nfHt}^W3-oO,@8[EW{kx1h djq:oз7 #G>>P}}W:~(ԅzRd',a:1=[G7hehnE7h%k7hO}.CNG!JE\k qv4|)pX[Ӻ^뺙owu_X'WȬULS7u33ӊI8"ZDΙ p~ &.p ,-Ȑذ ޥ gMWc0[tEZ ,EиBO<,mt6[aX.D1>EzYǑ=Ŏؔ\bu MBfg /֙?hh:yZeD:b-)O>GLf|mB39=nin$mG:DF@e$W`V~HNf +ѼBQA͏[j=^rnc!򐈦>]iL:iѕLZ.zy]=S%!6^e0U ⯣Hϱ!biPsLIuKmV[Lu,"~>q&+[ /&oPW|=ߚ[Q4k\͈~^tb5ĸxm .fYsM]4u]Oa,gr^&o2 &_>s} &W|S}I}T7wng.b#5-UfSe=&GW Ip{ik.ש^ ` NmZ#B+/YŽPX[39 ֭Tս[ug(Q8M+ qsP'(~5ZS={T;Czn_>loMޢ7q @u H/ ,l6D: #$oU+Q3  /t3$$і B4RolU[0 l6G6?.v [mͦzT=fo.&qt4}DM=vfo=zRZl"fl6Sj zi2>mk[&wpV?TԷzrq0nA b;䣟"3Aq!m\C.? UoJ%㤥VZE;@[mpEZϩBiNy@ ap P *U--vpHQab&]uwT Bj)vlI}WWoY V4[Z nxҽܖD7۷ GrHWB] )trrvkxQS=F_#ܯ`k/_5eX3MJŢ ciC #KJ:F˜%u9)1qC`*8AQ>DЍWnZH}*KRQEjo$);:J'%9h0ͽaYڱBjj0_(oP b@,@[>:,3$;UKfGU Ŷ!1s;&&IXy"8Lj8h(Ö2C(34veJ}4,t&oн2z)gJJ)o Eeao8@#zhdn b.;Ơ{IQAi)Ir0ef-{rQJ'.ݓr'Icc1K1Xò hk v sm jh&,sPx\`x8Ke(K1I5ͪ|{^((D(_2 w:8K!}ZbH-{ ǒZk˫a:[7fBG^fpΘoi.w&$e1Y )N)7@tj8AIh r,, H,%Vj?Pi>@93m58+{ҖFQ63SP .k9Лm'=Fur#4ꈸjfl2*aڐ!i-I04`++;i|md Fq#Z H Ϸ vRjhH؋[k].vG](`" l[X6,bIc~`=(PdAE5T4jCm-C]C P-TjMj8uLD]=};i5QܬP@ȣD4`uɣvgEԕ;fԙꦫIv l/\SLh.>~F v|;i|s5v-Nk"o}!]cE^'s?/}1 %tBd`}ʡ;ea k{ NSNN:hoͼ-5te̟#yk`3z/Ee o{vw|'?ws/F|/_}[Aw yHa` Q5Sq5PMWT wܫ+hj?j7R=6?^^]~ŕ?t?fXa 皋Gɞ=G]E㵝YCm)jPZp=HuO,YgϠtO\G,,SR>dNf<62G#U)S'"/&[,SaV&GhRGx  o[$HcE0@;o?A܂䖉 =tc_Bp7HK&Ʀӱr>Š<8v2p*E dTYj22#s]URPFx$>a`kYWADy:Y&0@wnn!a[~*=tbD"ގO(#h7 :»,h tgЇho](/K~l Qq8PޙA8v>d|]y42, Ƞ_,###{_Mg^[olJ7mnNXF!VYȷE 5I#}V]1w%O} WzjоLS⧇#q x'#cHT~ݚFgGlZN< >[z1">\oJ>\:V~ZY7}3ٙzASz"$&ye U_F/;|軷6_'#|SN.LLS{Dlp'e^9SɃ?=[}ޢ lP7yoQ1 O4EߧKIWIK7tH@@( =[%/(+7<ʠwWEl:rY|0FRUȳ)TMA_ėbRuV~'LrůuuU15WY**U:oT56TݭjN}3/Z^U+ԯJZSRbWUtuFWjvmUXFR6^ Yxi8sQkBc̤,AG<.jE4|, 24 T1$S;Ⱥd?WsGWU|UBO2IV=Q[|q]mԇbߢ)PvDWfҩŪoUCX3|]BV9Bx5j|ϧ1#Gڑb; / iAWCYIfkItR.:Beq)GTZۓB+u%ZmsJKS>TwgJW#Ssf`t籮\`1(d?t~2U3ҮO}6 ?o߰?=m~Ɣh±+7lSO:JTí1ЍP70u3 Wxu;RX쐢cZ*Df[#/JJnH$+ Ӭ0I}L%a#JxaZtF4eՇ? ߶^3ۓ\tpLY qӊ{}a^Ჿs˅ G}Hg#RkQͳQ@Txb۝La3S.&&[ar=Do-B?B~fToZWڥ0iAГT dr/.[񬣔 'c Ѧ>q6N:n:4Ҫ:;ENvs@F |/K,nzw-H#lv''@),/`1~y\?֋KB;]2n ^XbN:Y,-E+Y4aV}DV;\2 ,b)б7~ &UoѹJX*π>tqZ,Ms΀C!UT~] Y/Kx;9ac>R!`#YZz*J?1S:Xvb]I]I}I5i}4pl_7G) Taȅwֹ@ ]I$=t oҕa.<mRD&(rW3Sn=e3J7} GIHMY@ 4#Gx+ztMս++ѽЛ{WkɟZ#)"?_i{ ~u"m'eWθ~wZ\s$+Sima#2P7(OFom|Kw*} 'aM"|3DjUǀفh (^>PK bB> com/sun/jna/FunctionMapper.classU @7RЭ'K ] 'Xmݕmz=@!9 3z?}BذUZ%6unb,Vv"D%8*J^9؍Hukrʪ?^91oaÞ=# "0;$L{w}PK bB$5m>b*com/sun/jna/FunctionParameterContext.classRJ@=7GF(Jn\MӱNi'S\(X~%IKE9s9Ni$QD:l谙V =W U=wCAapr/mt)X!y* Z1 R`J%jnC׼!d{SC $ͳq}G="ej=dȓ:a8K7}E4: n\ۓ,tExŻ>!~ޏD žjRt8tS >5DkO^<RQz#q* ]tľBr[Ba0+^ 7`=KB3YҚi(!Ze%أ{{s=9w!}#Y$rPbU!ӑ/Pz :Zp1< 6kk'~ +::؝/8^G^A]cDix%Wk^ r] Bb"_hճ/Y aMNev*+h1/E) dz 5ES bbE۱4NqkèX sh `7oͲ-CO۞-yw׫83;Vv%cS󈘛8KAܳ 5#Y; +NE_cf)to_=]s'&gOٲ;3Y&֡˰ Abvoy^R#=okP(H%^Y6ojXdh]_5I('vVRt|E)JFDY4İ IX=N6H6t7k-Z$mc~v RҴMr5t3!1}KhmagQv˾{GWkyƣkF!=B3\.Tf-ǯr`Ss8%UJ%ҢůkӰ0شltߜ=[YS^:`:7Kf1=S{iK1gkF 0=~ڮn[T\kܰ!l;iXt/2%[bb@S,503 61ZP/ YiL^S!r]_!Nޣ_lG;{Ԛ[i$/Ć]R|k94;ŀUJC~a`vAנ""/h9㼁zlbm2Kopԥ^hC-m(p9~K?DF :>֡7"qUt(]qw ]F$٤z j6ت Cx_3-p@:UɪdPđTJyωqΥr-4e?@Խ_.P6+wi.Ȧڡ]&@/沷j-4-#к.Zu}։@K*QiN'RH1q&mm }Sk=ՃnX*;R o1K]N,,lM;8\oXXƷqb\r|6&[a+r\E.j  Iolv-c );al# S6_-&)|N5Й`5Qf| -qzGصݹ]žm1af9+2+zd߻nٍn9kQ:N|V,JyydSvQك.IշdYn1yt|O<5>a5|GS3 j8EçL}a"6{t-r?8m6P:N=`CO 9,kK/ڊҁJ`Ѣ*r:iGOPXJ*qyǞ_|E S8,<} pZR c ߪT#8*p߅\zۖ,X0nˉT{k5硖H!0(733Ǩ4۪^$2`mna3d=f9AĚoe+/CzWܵf[Ib㈎qV?Nh $fV  މA74 g sfoHc ò8O2, 91y4pvg 3R:˂]6x9U!;5L& ;/̐cdZrQ9湪fsW1mO\$4 w:P_o[ǨﶚuQY.dFEb^-PK bB*/com/sun/jna/Library$1.classmA 0Eh5Z Ľ ( OP[bI+x5CSt| B" bB|r4+_T͍ -0U*ϗ0VQ!@H/([cV&LeS}CvjS:PK bBgZ .com/sun/jna/Library$Handler$FunctionInfo.classRN@}BRRBZ T)pC*UB{(ʡ_S|TY*Umyg{;ϻ{OGxUZrvCp.31^ g4~ @_Kxm+f]Xޙfn*~OXp"-Oi1Ks.#C9X/U`[;Z~ HrG@OCjlcnABPsس~ 7o !*DYn^ycEO C=Ч>a 6#h(M2JrWPI<e9yj--x,WfcXE3s,bZ,ndLζ"Ldu{;~9jPK bB%n !com/sun/jna/Library$Handler.classX XT3)8:.8.12ҠQ#BD0B`j0:!m,]L&I+mƶ閠C\ FmڽM}OŚo`f~|lsߜJL+ʱW=Vao&pøO4d|DG^ |LZa~񐌇8`A>OxĊ MU7Tܲq ;>ī]%~ӫ%`li}iѕolh\W>W{$kpzJ!d4ߤ=;Uf(a8d_0ّP-٤r/ǣܪB8p 쌺3ytO\µq~UdKվMXѵPOoQ۽\5PwytP &Fݱ42qb]W{ )IVIڧi8o]f@""tTl΂C0f&RC8N E2CDk%5vSNlrmO&.H^|Hv=@ÐJ3l P8UEe2)ZۭEj-(LN3NO) ZGEj]..ApS VP8pBcz^Kԡb&VĐV<qf^O!0X;.OPՆ)hF 0f\ܰ6|_c/+D+^ev;DG1n]_Hd^!+ [eB/+7b E WO4_̟*](؆w(8&4 1YO]!|[MhTpSY~?(#^U'Yk W 2q)7# q7ɀ ۸_+$)ŭdeJfDA_$pm)] E7uڭ!+.O OPw5ѻ$9M-Njf {-~m HPm<@ JQ/c*%ڜ)J'PxtaS#roR>{%,Kemfv L#JaDq$ؓ}dI oQ;AUw1LYdʉZ5gjL 7%v 3&{s(14NXCZ,gxYU>WS 3XG_q)8dנ3eƀi'M.pN^P%"xS_kB1 dUHP3.qd467]tz|L[`ȯ%7$g|IW)LJ]ٞ`M&Ô"~Cm( #jo6z(Fѳ= ѷ iv78\8piC0 \4[zQaX2K2kepGMc!d,,Df`kEnq3!lZevaV"n3a1M͍npHyB `.BXtFNf{'̸؋;p<؇q?W~<l! a+#N-x`TEb$ܙfCMoԧquߤ:N]2e*ü 2"dL/< 3J j/z̥Qf`cq"#-q~sK#R9TqKU@Ĥe\!A. 0s e*]kGᰛ(FQ?a>E0\dX> 5SumiG_""8Vioa\3R-,[$" n>gQjlӖkjfZ.'nF]WEk7G&36= ,퇅\h /*vCbzֹ a}/RIJ.-b?} V<~E88JZ_07n# cHS $}~4 Eȧ9 $+^lx(-gC;˓A˨?3±+Qk1 1ä>j惙wcO ,ŴEyQ$Lc9]x%JKJ3Axމ"*MQF3X"UbZmaXp7V; 'rV`/~ħDq6qxfe/1Z݉gGVd8=PWʨ0\;ECvkpG}naZ1Q*Lϝ`Et@=3;ޭ[`:F8qZ=,Ҙ%a2Dz3\Y!z-]Yػ#7ʯL[岤U!n|T ǽ=ԡ& lPK bB-K%com/sun/jna/Memory$SharedMemory.classRmoP~.Kes8Rg)9Ì/#.AcY^F'4hGm?ps=ys??~4r2XAU =M&PM=H)lDOWV[]wh8uL==zi;úvUAY=bVZ?L}2;)ܮ982=[ѥ$$vQz8k LZB! I}Fe#'ׄlǝ8gS'C?cHسZVm_Lc`:'FxK2;泡z])㺂J bC* <{`qOA-PK bB]@mxf"com/sun/jna/Memory.classY xTd&e!d!l3AdDʢ, D&,A" Aŗ%Yش-hkE; X}i-ڪ]Zm+=7/q{}O8CԻ1o[ps.{?:98G1?g],N|A >uOυ9 ,K'r?.ׅv@q 䐝{"sqD "Tqae"EA, $sE1Kpen1T p#XdecQbNh8YXJwS\bi-H|@i){p ;,a8Cv5:"5 Z&bZLٔhmբʟB]V%P<{,VudDYAME6?ѤE/TB4}n0O%:V,iVChJx{6G:bpՊZ/HsjM@1ށ7iA$kQimiqlmaҊ@e8ڪ[ 5v9"HdĦ5q:lSWk0Ll :#1j9CJ EQJ2gNύմk̈́5:bml3釐njG6ZSVTBrU-'Aym5Y$vm[֠kHz.ٯ~ޟ$U`wަūp_Դ xh=#l ~@27n)jFfFz$CC)~eT˸N4i8{DVT%x<Vt~riH Ylђ ui8cIQTY9bxS݈ d̴$ 7a6g0' Jlݞ<0$=3ؚ>kL9&L6Xx\c+ҙ/A .7h%i-Ox$ST֮֨F$tPZw)&^"hVd#e4TTI :ZG654#ږYx0Brsq!u$bq_k,&#jطVFZLVsܧh~}"^ߪiV4!oZZZO5j8TX)l1WH׬gıJ5$=N}m qgn]0\M L cG !!|O^n5_T"Z HuNϪ*2c_E6-qE%;⤂@Xg+4`!~bj"It3f{ō,nbئUYUYUYUn RT`'W 1<=ثib*8Gb"Y1<TV 6)x)x/*x(TJf*x ;,7p7W;E"G/{_=*#f;E@K--`|l5NosA} c)*b/08Mb@"ߝ+SN-LoS5d$%tqYEӂgh g.i?ʣ,1_唣굤fu qͨ:,7?rꔲfǴĢ~ HfϞѰzQmt*mMjh3#BckHrEzWa9VZ(kA1+6N \N1&dB.BiCŨ}4JW ̑R;#4D'sU[vI 1m\.]NH)w j=(khOYb.OJEiA%O2aZM,jZ@L'x7= #;I !APy |wu}۰tFV}XvmtQh&;CjC,qp%RC+qĈlbǑ[HV1=>|mxE5p6R]Y؄:wiKFn6JYH^ QZN?ߐ6)&I[v"uFĔ _5v( +B5%#L3rzgqfR9MlLr4)Eoʷ\3כ` 0ЃrD3ml 3i},_O-pw;R` ܤ-w:Nfz #Ѫv[RӖ1IͦF'[9bG{Q4dĎ>-Wk;'5N& cX\8Pɇ)>z1 xKɔRq6qHq\sQ[9I:'-vl{ujV2UI>ARAYLC9? rH + RI^~~+/+,x7Ԥ/5KK(5KSoʈ+DAyqOF| -W?B/;J#[AkF?J? ~p[A-ݟi}9яʀ~+xDI'vD+}5>Ү;ôd_@J nR_NPugvgYCDAJ l+Z:0X7D ͣ#y4H^ $b+Ŷ?0VĝxqbRnY1BW><3ļDi0Sì20`Eos'X0# {,|bo`Q\GR@M|t,G7-y˚9Aw2’2GE!G-ٶc<I5¼}`~R7 >{zRֲ#[ M4&M.V:&nZ[;N#\x#z1R?l t(3GqP.1as*"N jtэETTGPK bBr(com/sun/jna/MethodParameterContext.classR[KAV7m[K˼=]7—uԕugA~Ttv(aΜ]Ι׷GJ@A.UTb# .C9ܰVXĒwpVjJn}iz#7!mtCiIq:½2cr]+8ϒ7 _ܧj4pkģvY!3QnsZfZ+&Р5bךPTWnv5Eayhy|mml7P[0D^(RH8EFi+{O`}Kybl`Y,xʀF$ VC)C5UN:SW< ra Df&TPK bB_6%com/sun/jna/MethodResultContext.classRJ@=S>oqg# n Zp56%M .?JQub;gν; `4BIGYG!3r_1[C~M{}3=Wl;XCj #z<<[:g]~tTYaК`m98F]KB˷P'dX$>v*ȕMߓF|0b 3L +!A)}qB_ پdՍo̝Q`#'8N\jidh0?:=G슢-ӄd)mv(iH)^.)(QF3 Oq @Ef^a^)r Un#u.Q`MƄDXVPK bBjcom/sun/jna/Native$1.class}SrA= dMz &QuxPhH2eZD?KHV~eP!>s 5,Fe`1z}M2F(6i2e`!+ɕC0DV*qܬEXbUؾCaJ,5W%GӝUjKUs_QϻY'U!^ U"fh+|Ň}"ŒWC73awI,oQ=Fs>#:M΢`q)fiA V}{l|h v=43UqP=<38l(j]eo6RBn&x*+)0!Z杔# ivE6L/\ڧ `b$ &e[6`ϜWT~x$ç_zgful[4RE_cPK bBucom/sun/jna/Native$3.class}T[S@I\Km)AT(3 |ai6& ?>{g|}Gg"j#={wsٳgxԉ2D3r11q!v.mzwZ;Mal軎Vq.즚a MĒX2|BHVM嘛4e,yn)ՠnQ`YN#V+BSӟTvM#(6 3ҳvp]?ܣc^11 ?!k+ކ8+>{cGyX7[g-ٝT ӒZ[NcA"J:ѥ=X1Sy2L׷N}7Lml2\0 kܴ]hϐcƱ^#'n5zt yFsY;w =SNcځX:-N=/Kd%i =BG(oC` By~5)@5BIWP d N>]TJXq!ۛEſO #>pWX2R!cx[14L,2 *dI88u , `7p*9"p.,1OnE*TLi`gX PK bB=JfEcom/sun/jna/Native$4.classuR[O@E. qU`!1)Hf4ˬݖLg<>_cId0~`Ĕ o?i)LQ\Ȅa#۵p3Y\ӤA$OPK bB,com/sun/jna/Native$5.classmRMo@}qpLjwj)!U !吪H6Ϊ`&_ "qv$Z{fgyow <^}lAmᑇ WRItܽ|,l$!T y#]/Ȃ {KyQD$b7r!_iO13 [/x,LEZ\C:w? [iYamhxyϖa>׉HJʮő˷*IpL':\P`OI  гi2o b>"!YV3E#Qxx8,\oe!Ը(̈́asڔMx:ѓGhJYL+;?~趰FyP5``o:%SC kpN)VN:i9|fg6mDAr^-zC[ME2^PK bBG com/sun/jna/Native$6.classmQN1}E\EQԣ^4^&&  OeiMvDxғ?2NWI;ә7^_qT]{4]g(]I-5C28x,ԢF"#EZ\ y"}tD `IW4ia7r./.q$LڈGhw)s_qyA%géQ8: 3.Zpa %[RU ?D< pd+Ed2z$g(P*&4<,w<]Ӧ%/gN6w,=4 gMlmֵ<60zjںe͌F0e{+kϴV>@J(2Mdh+|PK bBAcom/sun/jna/Native$AWT.class}TmSU~nܰٴi E&V[Vh%\M"?c%cg9;={{ss\ho9މᲁ(pk=~Z H#SauN1M-ґ5e蔻.#5-Yk6![e˓z~I* \Yb0GxS ?WpYUu]|Yq!^t4CpnêYYgCtbd03_DŗCIӔ[p|M$-! ~j m[Q vӴh+WJNn+R2: jb# &ncDuVXPU:vt=pҥ&C5Wfc~fW̜meOzjd9ՊJO YX"flc"u*vf'Lq,X]%Upħs& >39`;|ϑdO7/}Xuĩ@^N1y#_q@I_X#F1F7&Γ &%dgBДq&k} PK bBNCU com/sun/jna/Native$Buffers.classuPN@=#ւX6a1Q:2MCƍ&.?xb0gsνwLdcvuu3Τ9C2h=^0m G.e*pw}Nj>ȀAcWRJ=a; "eM!<@PK bB: HIcom/sun/jna/Native.class}y`Tۼ7 { T*$DC2@ɄEZuUqAEKERvq.jV.(9yLQ=sz}{I-^|/} "_M/ECkz2=^ǫ2o WNn [lg.=ޣ_>+=>(B/C| oj !i T|sz|'4WT37!5w8H0%3%,)C*Cz|Ґ&8Q.mHjRMF]fr)3MelS2ϐém)Gr! L9ʔM9XS3x%r"UNB"ɦ,t Qb*DŽJ 9ݔ $gpSa# 9 9ay=fӣ̐spI HGSKRxV^ⓗ(w9宠ҔW!jdXy):S^oH5y#Sn5M> ِV!o1~FMsJiʻ͔wSKSy;oL)w!|pv'5E#>쓏>zb?QS>f=|_')S5$3 'Ig~ )J2_yi^"3Ty)}ˆQkCLüJ-C[{LfߙuS@?"xoo#}| 6仦|ϐI& WSǦ@wCC|eS~jLQTcsS~Aϔ_+*ה{Ð`-;C4B@->ֈݰ SRz0M GHϨTS+MSjRTfʒϘ*;gyr dW W>|SniS2hc(ujةy& T5TM5TqOMQE(6U j*j:=3 \Ju8=#1q=f#U=;TsM5P>vxP>vUI*j^M*g֚jTj0"S5xS-6U݄r,T3=c)=zXa}~A N2>.) Ä*C2˚X@OOPm իXիC+[%u+*U6 n]`C`Z{sʹHwsΞH34ދ|UK[Y[ ͮXPT zֵZD% !|g Ot!|o{hUw;Q7TU/6j×tz׬Toj j8mnZzz; Lt7a8( 64W/^TV-j8)U/LdesUsKcʥj/H\TA4SG ΆDU]_~pUSX^ewu3:uբU낭0ZƺڊkjOPO$lsAV.N}=h++p V66">˫T.m^iIcU CY8P)CTyb$[VByeE:tU,^L5 j/.oTqPk#RTm$4&So"zTMh]._dj8e&^]hIEFB[^:pU!'PUey]]EyBKDž@ڥ+bpMQt"zK,EYN}4iȚ:9ԼbE +jWW6'Tbm]Ұ3 m6ڐgFU;kk乘nRFDN5HA{P)Kp[C3۱*XՎ5m`$hfL 3VjΙd.E6>NGz75kqyu""!PvJiг#|Um6zp%.ZV.'SB=J[{uHuwwe촇U%{M)X,X5ۙ|`cd];gTU.1%F# U;sA)DuFH]&+NK!89"Cc`+ r*ԌVoj!U12Zw [!&lPCe' IiF¶1E, WTLIfdŪ^t|E!bp2Ѥ/ w#;Uw۰Mlt*_; 0>XVtِ CL'j_i¬uu]1!)YaX@!k%F%C q75y/oBb$EZZ<&':lG-z\ݎ3@ňBn+5b!Z޹YL`h f(tc!nl }lfph.-'uuw*Z6ćR(EQ'sܐ]~gZ^~WpSoZ=_eds9.D@6eaZD{jlBw~5iL=P0ތᄺZ4{ؔiRN:0: ]G=Zok;XZف*>9Ò7rE7d4Y9BknibC4%&h;ʆkNmqPCVlI,mʉbz3'kي7%rЃ ޹^~RX7!UD[\+!t%286;)p }os*Pf醜iH$B4)CNO=/Գ )r`@k,{[v7.e:vt㠾L[isg$M_%Fx2 :Lz/ވґMAۈX 31FnBZgȳ ސ%&8K1hGmrmu}OoG.Yk;J?gsg0zr&&S1F{#!؄ |'پΠuvΖW6& V:b듀B}06ۥToA%5j1< <Ԏ)"(eM ɮ3&0@<8W-j'#oh;HP衽ay5p5mqq  SDV֡55`$em;POSԟo/`g$ra{+3 ǝZ\7F9 ϻ@ftqхI,%%;{K%hqԠvJp3Ѥɓa1~M!EquKP&s0P2 +67 \+iO/圤 ۊVnr0JvƗ5w0X@c mB"@~; yr~93pz"qw5rDC~ewesCT$!8rO ;p{ H|gIh"y0VGUQR ){(%=p2|ifZѺZf۸+" ĶQ$m?6yM썻CEЦnLqPatMogkTv#cYqyfuX{ i!b!P \5к6Sހ91 CHLƠEeYũYQb  꽠v? ";Av0 *Y{*.V]}h&$`wB2cAOj!HDoCEOr#Ȉ%BI(6}~]eW+-TvBz)7JD|u^zqSW%uU ֯I q5ЩH(B^(^C?hVzN̲[DUi[ABg{}b jW$aZ t0C[k4jj0,<5{vêp%.K2unc'lmu K5@pFKlM.&SyCpfld0e'݆ wc\|^(7:= isǪ0EX 1Qp"pAHP.XQQCE6ųlm< g$92W{bWT[6Mk1k,ahjk,Y`ujpUUQ[ܗ6:OYnڂDxc[e&%u^- Q;Jzɋv=F_{P%W)( {b$êh#XS{CE65 prbU UQzb]zI$Pr>p+mHyC2'T\$W"##5p;Z}v026S!n=I4&M 5|Vz&L>=^8 .G̠|~`H`7&C[6 ${"Ŷ/S %3{Y<CKExŞa{-'Xe:>Y|ڀO2/l$j,>ϳ9\sW &%CmfujM>XP_2NW?'C= ׹:RgUAPdcht(=ݲY9ٖZu.lF ugbx}SK].-PYbuj;,q8b©Ke\]a+-uRW' uU! n´eAMR׫-Emű0;U{fL92Wi=nBM!b 1͖wXVomQJ~ j#A~n8}` .UV>!ɵ4T !_ #2?гV#3JA;ث44BKA[|3?6U}>⺺3lСQQl}u }ӵԝ$§rhNCG,?a h0d1Q`/u◩A:ýzRgG28 #^V)g~.}%:Sm׍d!O=, L\zIYVKϡڶY_1☘G=L]TҝnR|)uzN''`TC5RҲM3j(R`R\^-!Z>%D-N6c0㟬]pG3Fp=`ѾlGZK}J}'?ܡ/,ma0^]lvA@M}E6h5r7OPJRϣk-F7&{\t^1?>Ԯ7%}˛|p=tVĩ uACH`\}*{9z;Ak1ਡ6g_-Ã$< Xh2:%5vw7vZWE%-P0zdZ0,GwƠV:Th0hK89ex:wH&ЙGyхD1JS" y:B%CJ7O]<9^[7u#nE}#ra='TuffO-h UUl=4vuFRp'?(@ػ*Pl!gtSȼjÿ3 3&?B=1v!-Z'XT4n;^W$ʵߤI;FOZTNcuXt–'B/I\XZL@OCn["U u. Nh%AJdx?c.ɀPn˓GN?Rq7ԩgE G q:o 8DLq< !|%y D.vrw4E}SO^.{HbPGN<=c myhv~S{]h ".Kw)\X@'GE2Dn˛z@ڑ6fBa폶o}pz~ F`z+0oKvpF¨I:u ``VrNxf,9 *㜶IIRH^GF(xlQtT QT@-AԖ.m{4ҽxLFSH)(G1=Jޠ~L{2aͲ{mSꙚQLwYncI^8_YCTu}Ns,}0?u9At6o{.*aow0Q p-jBxQ;@$,z gt4\fg|hSNcN#,M,v])qNĠ]s6].*wڟ4:BM+*죌U=Sڤ'2>rXp+Q[ p~ca. FFgpts#/j&=L!Cr@Tpʡ>H2E玼\_/eՇBCZH:o&W]/ZNJj&R*Ћ`J. 2zFGUH8UQHW>Q|2EĹgeFq푅f,L􆾡J[Gɤ >2 ipbQ&ҧԿ>IOڗۍqzZo;KtpԵpwPo:.DVP't`S*A1vo KKsrjh*tz#{abuޙOzUڞjitST@gY Ej X\ݴhؗ>IuJ9?#qB%nBzt)LnȆD?R8 K6cG6c@.&~bwB7 ҕH.1]@{O G>{a\*)CogPi% wPn}<]?ܑݱx޲E՛BtPCdvSl}[d/6{TV8270ֱ{463ghJ30z:8k;uҤcDJNz'ɫ[jڧ:rzmn}ӱDU M\f Y)zDĮ2_|pI*?jU+-F/񆺜V;`/ڽWR4E]_R(t'N MڥɌ9W{xn4$ b^kң_JcG}e")ip)?68A3CCKvC_GlwcT 94"688U ڨw-~jϐ55v#T 'gE#Ţxg$x[uhc3 u>a QӆS`hseAmW"ۢ5۷ǶsڄÇث¡) j;WQ\1[ZcJ undz66Ve(l֗/Pc@-&0C>{C;p" c}`K/ٳ:}N#J_i>q'}I췘:װ;Wu,U* yCN;{[m]~Džmϟ*\0C,,]eel`tX)X\T9'G^t4x ѯETϥ Q Lj^/<[@E`Rs&H|>/Tx>+8Q19Un0ғ$] GN臕D,s X"  H2dM//D0vX)i= ŞA?x0|]J?8`"i|z0`7a|0#03h7X;@rA u$94_h |N(v)m8BL7{V06HA8#،CM֣Ry!J@e"HXd|W8pli>paJ^5y/@FKQnV 5섬=ݲr2s 2`Dɳ0b$-Qn]_"`̱+__1@dT }x1* ͅl6f*ɪl>b-NVwR-F~^.gOk1a]/ "! u0׏r~$4LG9[WL:fU, pVu5E55C:[X # [ q\D3f\cT##£1Yp7pW&܍=&f3XQq?} ;5&nt[T&$u /n jj+ʃ=0d7Lj@V\&| [DqSi?L Ee$_CqgnE&ۡ\ 96Tg|IqH3 d?aG׮QY;E\= zq쨒'oKF `Z]PHpE=|In8Q8Rm=Om JT҄gga2sl G?Uo&S rE[KrrZ6K99~e";hL N8=KDd)l\Ğޘ"|h$F(B弍zͯk}4+2ZQ_0)U_5jҥw&%h)z;[(*޷m+y* 8Ǣ.ڑs6FcQYCT/^BP^IU~5$j?Y;PSB0渣{ Aؤ)iB?SyMזv zd*{:4H:T>A6$PuN1v@Jmn,-ٷ5gAͰp^&Q1ST&̺Yx}vfm.f;[JwCCCi"G^r0[٘bg̦˦,Xz4riq,Ȉ8 iRJHDD*a^:StÅ@WU:6 ׳Yl.,r9t=CD},dOAt+ٗ_D}-t{݋r:k|!s c*k}Gin<óp-dA8j"<%\rM.ZMйӵ܏b^HRk(g3vu:Jrb}-k|FB\Ʊg0[i#5 oxx]'^dte{Do<1*7mΐ~ }'I3Jlc~ӺA@# Y!}p.@ 0,a?q+}]9ZmN;iXHxʎCA.2*ri%mK;6 )|%ZVHqV"BQ@ZOd{SѤ'?pe}ɓ͆Q*J쇶8<L/," ᎧA o||9#Iu4/%.8L{ . p+Бf8RsP\ B^f+Lꇵеlm> 3;qQ{ ܂nn8QVC֋+!sc>ؼNݿNΈw&YINv{2z8_KPjlU}pH˼̓yQq)&,N|%U.H6?_!<1ӵZD_f^J9.]0r35+U l?\`̫h̫uWo?\ R-е:3ֲ=>Ѷ?1_x%z{5p8f~ڎo%|+oMp&n`63{^wo6>}9]L񇙗?2n9x{\8kO|/O >v%%?ö6,{ϳ' }2-<oq^̧2W-#MQs9jy1zR2@` LoM 8ovsNe=NX;[n[V6pkP&Iٜm0:4̭|G  _Lez}hc5ϷpPc1LBf ئ!f?۞hD4#9 O?)b̦w ~Hs Gi~N}+dV?G!66\~UUw9z=+V}Hf_ oGwcaOgdi'иy򸅄JgmeYndTE&2#xƸ{=Ӂ2omo :ſeh)A# <ے ϕ$h{ c\JOI6{ӎy*LOF{_JV{VK櫴:7%Oĭ0ڽ [gٜ( 1Nxh7u1{=_{}*.P2[nHqT^6c3 +)JIRcol0 Ime(5xd8gsΌ?B3HQ]u-Xf? oԗ'Qo테lGAEDf<(ש="Eaxƈ7ax oe'0M|sa4v}UtOF됫1mg5:1̿)dHm~OXYO(C@oWaWc6T Uƻο'>y\⼭ė_ YPrX(4J 'KHH/\ Sri2-ې4v (RF-S{bQhP;-yy~%yl$Sgo8tuA"3w}R/-tgAtV6˔vY;ΎGS8R;2}ֳuf 2 KCH/ Hr41"ئx8ZDmKZT;4Vi+Frτfpv1'Yh6m"4[țAUv_qb1ήEmP]瘂[ X ~bvč,>͂("tE쇯z7ؽ.~:(Ip2r<cxS9/B*&R+rHYȇe1ՓVm}r4K'cV9[ chc0I&_ʮo ,8hO8Ac v21|EY,.%c ,+*vًN棚]K,E]0"ͮH6Ȱe`C5}'Ɨ)d9;YVmaYQX^(۽Ylx|ѲXkPd5d B- `\e=蕋|6M\2xO'#9:LO"76)XM )AlqBuhiq8LDՈdu/amrV= \8@Zyl&;X,]Qz;hz']n41t.jN|_CnsHd#lӱG'`~6 zt=y8]8Q>` s< qC^u☂bË fρ[N}ITF H8bFlN9m-FFR嵸ATnA^݊䧨oA!#*&Eg8qjg(X\yB2i~Q Dw>"6ח+?iN&fXBd=l h7+~IhË[m}!y?p;/b+T)0ͿqK@`r#O~V:pGZ>: s buϦ/~ ^݀㞪 ::b~`Ml';O1<0D*שQ&j`|w| =wW??ke>J P;k;m::Ʋ3ln#jGb3wMY:{e=:;ΖQ6EgP٣)P6CgCbV2o$1gX#%(,)C8B~sǰ@O`# /\d"q|? % ғ]{ y k x|~1c %]zt?IL;Uo!ugnl0Cݞ۞=n0[̌4 .y2q ,,E ;mPz2B(PS(U 5U)RSKMap:W6uܮ5S#XWUϪJxUUR;SB֪jUBE,Y:lZReݠDv:mS+CZŞTik/}"]d8$jJa9'G~H:GMnV__\GE ΃U7rUƨ^!1I˜ Ý4n=9h@֓cQ57NXQ&L(W>GZ)eMh%S|U(kfxJ3=9|ϣl z 23cʼP$H J|e0ye|bfNNJ@''Aȹ~q,<$vVDOJ4|w?;ar(;SmeY:/v;;YY6(<0#Zܜ\eyQMB;/f(qa͡kwt|f9iҚ 7gHԸ #E6!X! *ս\Onڼhm?V˶}wQ┙ m-3rsQFeܜZCzn&?=ey*SdW g 6ٹV$a&&''?3?kY.+NG1e}š;7 \˫WmXncrgXlg=cT wߋ?urZbS#kDžgGBԓK;s +zZ_W/񿩗+«^^7w՟bXmqzG\,.W|C} ~#>o0uS YO+Y&%2`$QbcmPoYX+za\x5"_@_'͂ qt])cN|Yp^' W]ąb2Jq-Ơ(6 F&AQhbb :1 I/W܁8LMzpG( fM1!Ljs"мӵ(ň@?dPp(J0>4D!9k !-MchA69]@:g9u0P4*# %PLpvrh7wT^j^א; {:84rɁS8 F'{5r~z f#OgSRM} %$޾_ԏDV~$&;nDD7_K%u΢ŤȓS)ݗqg:#6בq#<F{0$cqTXIS<ΓXdYXn&qP"f"w:;@-f@$'1l ɇzӿҹϓ^(_G@0\J{LOطyMFc Q hkDy\1N)Eii&qb>Za*'Y.mb4mËt;ml`1\i:6=粠G8Ϡ?7c.~#_ݎ~vVw?;S h{Ns[0&L`yC &yh, PiYzNK='6J' BQEK]4݂" oFq<ϋ4Mt@=c1:C,At| >xv:eSXXP,'ouBӓ:])Ni@i~_$tuVIGr?ƴ/ܪ$1&\&טYF1Sc|7ǏӔ팋9}c|q )sޔZo7Zq(tI?7qNo?:Cܩӻmnm{5z}sqs򒳃wԍ[^}쒽R/1twGM[-=QeҸNӇF;HL#F/`&ePmꍳbTEP< D AC,w$,;C΍ß`f9BF9K5纸&Ud!LR>>4f/߾?/?[GVߑcB:-\ ?} 8G<.hS<ōovC۳:#y= tr%{UzFkD?v˖:NFIljl ںh_?ܽV屇Xܟ:ؘ9v7j%хbߨdy1rr?n~(fw,bZ8.VAVWF ΄Y lr/[/f,|vLL<]6\}nɅ gx 1S+c ^Y*pV<\`a `1L`8Oxaͽvu)dI_sW90D(-HKIp31}U'PK bB GSR&I!com/sun/jna/NativeLibrary$1.classSn@=85MM\$M[P/Q+JCH iRw]<"> 1 `a9sƳ|`O1YxbE ,Xlca*:B;a,xI opBC>Fʓf;Vp(f:{+>w}:A=<}t `ȷ0YJޯ饡&Бu(xGtϫoЯܡG }Q\ d`*JK1jq9 `7U_l{%Zջs[!Qphc5,<`Z[$-#1F#O㲡4 07ݎe?PtójIι+<'f Z'ǪA33QіRbHWkǭj=:66 V(辑'5\dK+V9sGJ!h$4a1`Yʙ2@j:n2MeܺFr_~2~EnxcHsKt79!-TE#qtPK bBmP!com/sun/jna/NativeLibrary$2.class}T[OA[eYVQ"hDc oHğ&bhMg\;̷geۯ_vz`c% Ҹe>i- fPp&L8&J y![鬩PeԒ0?{z!@Ebը z:wˈ CǣH2^q|g*Wr[Td5ܼ]W4d .3524eH )\3k-hІ9R^QAF?ld0|ͽjTgװH\ظ&nڸ%!p"tc=Q\.}CZJzNEFLFK N%m 3 HmNњ"$ct텬03;ю7t /0"=FD֤t=QcqF5_kf-;m#3Gkc8s890~uڅq^@2I/$=PK bB$#Fcom/sun/jna/NativeLibrary.classZ `>d3@\ Bؼ+@"aM߶>>V+ *jV[kVk߹3ل@-̝;w=q?',~O#x\2iOc!W=ksYX|__/M~OeWT$\ſZl:+f;߰M?(^VA&ߒ-~[>/_X7?.`]ߓo.[ eG2o?x1p>>|a~?iA急Rl**ʰT+\LXrɲߢ,m)R,5X>"sr\r\y;S#L5OI,\F*TYXY/dde\kMKMTQ~UMUWj;T[?]/D?]jk KʹTġN,K͆K,KN1U9l@ӭ"[SU:U. JV EBZNZc,HhUu:O?øW-K=tD8K-LX_n:R Z)/ULYw_Vg*GFI.,,jȵE$RQzKp\,T ϱTR &-a"saj6["b 2wX{Uw?пłbf 9@G<C4%"&&m8bPTssiI4VZm`AnzjMMvWD#qLW26iiœcvSG"۠YD6Mk+㰅scL8Q0_d~eaCh/ѱfMtxej $FsK$YDtC{kTs[^?$# ':=m┚lOT JT7bz#YT#Lu%hǎF[q/Uc7F10h4Ǡ5t&i4w,#HVbcL3${”)S MXZ]5hC?ѸYp 8q'd7L{۝xS@^"gB驿vD[lrA/6.rTI-'"~/xMlP.? ֊h VW@Relku6>F<Tn4ՍIuB(O8V[V7[[MypO 'VMy ,0Vwp~`;]b$wt$m=iB[u 2m\"i0εս<PSk,/:ηՏ-6}&RmcCmk 8v`L@M>(M 57 5[T=4ȰBqwOlN9L9c CX^A̸xD( k:%}r#Ddu^QrY[2axVLB@0S{.jßٶQ;m <.$*$ܐXG[yposqk$}D[=V6aO v$"1uK Ľߖ~K]ʥ!i `HIVOE2zV33+!c:ME-*sz^OG KXyljwPmnMzQLr Sã>[R$`Ic&4,0Σ^6կl5$\:5mWmgyhmuaUz5@~|Imd~c$CͰ@l69Ԛ5cbPAWk lihӶlߩ7=Ow8@rHnU^6Rۢ?LgSVzV}VB`ە)ҫf'$'.z *YaF OIs|0=+?ˇV>9b6AT}fX'|./Vp k~G;`j▶[}l1m4|OluP;7ooy+#&n6 ˡǸ NE7(Q Jw oZ1< \j>*HK5$eIn|m@)ԧIـ^tm{7K#bMw\~)V@G}=22_dW ?Wb`}:_xyq>ot*meάtHe^P*?[papdIM~2aYU%lxʗT,Qs}%y: ZL/WM;q*F1NV+-uj_j|Ccz1!DoqtKD٤Q@M{}{pWϟO߿z4!f|5 "հP7y^\FuO̭Gr] |c64+20)|ٌ_$$z:.Ž  {; mqiHIG)*}OR}OPvǘfr4,n\\'hvzF%xꡣ;>0 )Fw<ax獜6VA x y3y9cQ&Sx?A!K ]Zѵ[(pVEuV[v}i  M8fy AgQ<|"05RvKw>Am4mc];Ljco7 <EEXV\[C%<2o iB3MAoHqлSbrm1g`)2sObLm1AkAy7;i&臊{̚nI’*hzzht1`6:Nq7p+-+o|v.ݐZZO;h.~Ct&Azޡ =O,ϺxtUvu6*23h>Cɼg{,E[^+5;:DPn=ރ;R[e9[9: \#<Ȼn-=ZIYr_eRRa6R\)l^jV'f*̾<BAsؾz+ nLw |-߀mNknp“NL`#5s!+8|3o)(CWTfSd'~J~u5 ږš"uk' ysQ(1r7tS['d zr">5"#nCMQpJ"V(F^N6Ϡ\I ~̳TC5|2-4LBv+\dx켴O°iri.NZT>`xl z\ w<FP4U|?,p'B@]CE} u d#S'*㓰BPz/8OBIT^.J6;@b eN "ˋѦ=fMܴ8 : ^b4{^%).p>HgIte.̳67=; z7)vK ^Њ0C}<L vCfs6a<84/cR8ב/.0m:Ct-t7_KDZ'Fy6\ԋ:a+7S`XJ霠->@!L\O#qN@OEqsMD3.ttk> `gXϭC<+ݯxq -KAKk坫Bd(B9/~]?h:ZaYZ7%Np ]4M(=i7 Ҟ3O:TlibMR/q88lXJnZ"TLu@K9+ġPNAՁoy vA;bmp0[M.q>$C;A_um׼d2)ꏡB _hy!˿P .`A?3Cj8NS!_IK#}stk !ȵ>NG9txQ;@u}Oy&QėN&/QRTUE=١KAyPpKcK:ASTj(Z(a M%eX.HkU]WF~2'1K:Y (y3\ᗂ D>.#Jx]6WWt֚z'n;%VQ Ka]d`*J:L4ЖiiLvkZj>e. !R 72ui}9{Ϥ,&Cլ K縃 -07-)MJrNg<nϨNΐuAZMi |\2+  wk?!,$S- 3:DSG>X-.Ҭu-YT\سxmǠ)2 {vѭ ۘv N§v# T4Fm,u\ 斮o:g$QpQs9 8锏sZIe VQ:T֜]\g0h4qሲ8ҔI^ǽPr=% N@j)JG+teaL]PBI!Pp(P=tO(k;L^/byYv,ZM7}-Ҋh&*UkiZG3zZi@6:]LuEU<Er-/y.â! q+suyk0oy'[T-ۨ }oC61BO<櫓 դd[t|_e:)GKfyT//E8%H]FS{O9PNȨa;18}rFA3Cɳ_NnU8&G9ຌ.P}h+]k |bHڋ]#!hm̭, "줙Tlu} lKECt_}}Uѱz8 4K3 NԭԠnKQV~UnF8v8 uPeÑdsmFyxJsy!lbbP93b=V g :0jCҳ.!9B<~C*4LJP ^Uss k*믦lpj2qp{j {e[IGA8MǨ0h {V=Ԣz6<]~HשYEz u:Բ P8M2'T%^~<^:P`$0k9my6LN*hv3릞9{hSr;y.Soy3z,qH<ƪרP37^C`tP>bvq K:? &,!/EO!vz7 Mߌ}t-+@K4L]kp/)hrb0vWzwke M-3TA燜.J\G$($TEDO}sriAe&[࣓QfPL76 |cF.xAÍ4Rq4`ia X4ZhL:c a|-@ 17vp,-x9;HkU|TmZx#%1x~@X@ kN.g; 4ssѿȁo@Lz*d=X/!I{Ц: k."K8r of ^$|`6)Dt5ZJŰ:(qi1iʨQI7 j,+xq60njFh-F3߆Xyњ:m>nE:%zi9ŷko3g_ŧtz"tYGq|I%i&uP"Iffq9|A/sBU[_~l(zT~ ՙPK bB NF[com/sun/jna/NativeLong.classmN@ƿOۭUPP$1$&ƨ)i,hI|,@ӵQ^f} 5Y8%(0dz3)CqЧyp0,wxLn닉e&|p %ƭiFhuE+'щٙ"j`m{ \1,x83ac݀ -V{* T1wc(,~ iGbg#[ݫx%Ӿm14i e2&_I`P]*)֐4IB8Co.. m]B 2 $VF@Ui dK7CzDž"-iPK bBu\'com/sun/jna/NativeMapped.classm@ϭR$GIlVł5M4^x(1%]ܳ8=^36j6gp/#׏ -#hԖe;"⠽3%y0f,ˑڥAZ O0ٻOh~W  wQ1jPK bBARMy 'com/sun/jna/NativeMappedConverter.classViSW=z\hf'1JTJ\&4=tcO}|$BbU~F?$1 6λ=˯ (2\ \=rш`/ FR0`#a|1A9ՕQ&FYZd˜ cJ0nq[:59vto*xK bΤ=Oꉌoى}]ؿ5a l.غJtz:֤ͥ8-'i]''1&$7L\޵yUܖ5ww.:ݤ)Zٛ6~}ئ5t{@,3 OvI&I\6GL$ F 9@ce6 UuZ^*x[;c 8 :j14Gv0w4M^fO$ŀ}g9). n\o1뜹irҾɶ͔n4 3^t~g!Yi˰vY,߼ Wg5#\QE1 PR@a]ݹ~1PLf߭Laع5s0,º/hFwUj֐\@a]8ۗsG%Cc9ضVTZ'Y-/7?/e<+X-[6I_T| _+ kQTBVWsA7zZmԝ}fxh JsG41y捌iMURQmyE`OkmSfR5ӵ,K7-#^0 覴%rc,W-6AS~VO6.2yy9̹hܩl,_MY/ByeBF?\>^Vd:m^6] hm^T[Vr:n__J6ie5 /ͩ% }(FQ!/J0s# G~org Ǟ!3:"G';3(P,z[bwpu'* M'hpxOC%gq׆i#PGP7|D"ID*Q=yc,6Ul̠bz/htwQ9l;ybXWo毱BT`[Ylf$3yB" _i@$5殚A}Mw/AY{ENcY=R\{/ y"-=Rvr*q28Dm,:v8u|B~ϒ@F** 2]PpR(!{\mU<CC|/ 0qNB|eUʤ7XWqCD.n\+aڕOլC.`wmMo15h1P"Dc<94j|;KqҪ$m19荄<Qż;h  (n PTB@o?PK bBT com/sun/jna/NativeString.classVkSW~6IX@-jZKDZ[۪x! x mq ML6ٛ|;ԙNs.1099y޳o7lǏA%uNM/QrQڎPh_!:ɁCǦCBbZEӞd'+opn3ydE_ S:q꜎㈇Twwǖ˛xqoOVl:XVܳ29)xinN],yZuݫ< m@t! Jzs6u8>UkPYn-x!@\wNo(ڽ!u [~*۰߰s7DZֻ8 M4Bi 9kǙLf̀[[c oHS>ZU]c%Fu8TB˳Bt :|S!mߣ=WԟxA_И}je4]E3 vp.`NÝ.~*!1%a9p~q/} ǃ _p</9~UG-=8#ӂx։0ωb+ ;?8/9^xB18^/"79z8x;r> 8>S␓&Ř,brfΙC 'g\< 0'+v`7}M PM&-Yų1X[VZ0u0g?jh! ~ >_cI@P/hB;mz} ' ~il6C~))5,bA_d3꠩"44 5;0q514 : ->5IZbC]$%6,c(*6oC ]MvKþHhMh (dmk`k{W^K2'L[K\o^b =SmZg\1$Z| l2m4Ce KguZ]k\t'S=c=>=nѢQ#-E5 T2E))ligIMQ-;n%[^4`"IGq ؠSN!P4zFd֒қGdnJF-&2ׯGetc題ŝT2z^#p|i3LLO:SZjkXO'ޚһ&Ν7r/,1u^-*KKE7#t'_e͑yFq-&3l{3db,4fTሜOsLhqjI_Ņ \ v[b,2(BVde +g*WaD Tgb"]ZF٧ uXFp^٬_L/_l4FIIEȵ]_d Bpђz_RIl2nXI{[LJj#穨o$LGaոIaSpaPXKO*iިQT6MaӥޖXbA,ZѥID\%Dn*t  ҙ3Ub8IFWc?x_lXV ,A*KY%nd2wLI#[9Al"$slRDVaE"rA}#rWfdQNv氣f~^)+8 a z}lg4һT]\Q9G9ئ6o\y?_jq*H|" |:.g.W3Lk4*K:5^Sy|C}7úY'ύSHrج{GyǷk#KG+!2~8~وz1>/ڗ9οC ::Ec|7YcsBw;Gԗn ]ZqZjf3e_V=nvjoLqBΟ{< wE_Sklux_3~Y,0lP< x{农2i+T0v^a;%O7aҞ}ڏIX;Cu Fj#p%2W-݇2"vN-ϑU5GNV'uARPQ2jp+؋RFM'hahF&".T:pH캙eW4d&QlD)R#JANEi8{@rpM 3F63尟yQcFa)f|Fw'HcOCIpq2aPgҪGȥ?QjJ=e$p!:eaZ@:5UG98$ťN4@do:?7.NIA=C-܉Ɠ9~sL4-pv9;yd<c/`?cS~Dڂu9sr{a%^TfkC8VaPV؆P45jHX=>OͶ sh|%eTī}שS&Vm:oޡ3]P?1SE5u MSr7)S+dKdxԥfߜ%qBE=A]6x6( ^zw9%6zl/G=YqY勝u)鐌 =j!`8Qs^!ޣ6pʣ %>6aH2yԕ&%DϽtY`,C&*LuTrGYizN:(WnǔL]Jbc qk7PK bBqOcom/sun/jna/Pointer$1.classmA 0Eh5Z Ľ (Oc-uM\x%Nѥ3|o^ R 7uۼts](9g{W_EaDZӡa]ѿ|I;fWK KÙ> gk;]$EɍЗ=ҡ6PK bB_ com/sun/jna/Pointer$Opaque.classXmsU~6m6 -o $ (RBbKєb-ݒ(UEQEq 82Qݴn{'_v9{=f? (ǰ1lbІO:p?;rb>bׁ/e U_G@AhYt*o>= rJ5D.9AAtv6W`Z0mʄjjvfXU:3+e1USdh̽"۫ 55%xFl1,mb S)?%0V&O"Irjd(djIAG"7f)V54E1aRa=#2EFhjPvng9aaa!lϙTMSirkeL\2 WkFjDX318>;rg _6ꉛBG(=Ga~9`*QOިE6qC0D+35Rb&--qڣ"!b>EonժUZ4Vejk~nȪ|EC3Ŏ(~G+ضΧ`Cz FREj鴓LiWcYVw{S떽b lAD oHCn&j]h ?C:P@=t]ǃ;D/7`;HqW\dSt>ǚP#p_Bnϸ7Pe#n=Pe>*_>HM:DŽJ %~AQ'(p$:܄W*&\Ip u q ^o׉\'p)5d Nʕ꯳-WZZ꯴ToRkR5RRK|Kꯉ4ޒ8'}C}g%N﫫I`PI|Іq^]@Vm-%Ю`TMA1 yKxG:^wg4_yKTyӧ˘rѷ+xOvI}LI {vtp#~\(H n-I0nƌD|h,}'7nITSE0*;S\|{U̻ C#Ow}n/.}o݀kxɊ"KFPsn[%m1nCǿPK bBwJ%Tcom/sun/jna/Pointer.class{{`EUfyBB"FM4 `B$tI6 1((|?(n( N=Om<')NNsr,'q߸'EN^+yu|C7=os'tC㿘=wC1|5PC75q*| \)|n5_xWLCmn(o[sk:ȅt?@N\s[.F'.CIBKc8 sk"Ɖp2d"'b."J=`p6!;ք(\9q &܋)\<\ɹ k!_c4N(tT&iZXAȔԪfaEu5EYAb!5ٔz, -,6*WF˕V:Z5rU-OUrP*'Ń`K#=!'9/1ښCjKy֨)\Il̶H2κP[GCڰԃ\kiYLLTDpa1dj@ѣL_T?V#-Sm ,C'+ЊVdz!lhkvp;ZBI5:7/#|+F0m^yv\>N@ -.bh 9dƦ4b.huЊri VXKJkBV VTrդ6XbUL KU=$WbrKHM5UViNWt45qB i@sp|Tn"[5s?rk/HgfH-E]\}ɵr@CQ HF7٫U\S=!-gNiOQJrzhR Q]m9QoOμ MM9WҬw[63$}$$ڛRp8SjʑX8$ediLNYcy؝C:)D.i fz!4+a#Q.O_njuY͚1:ƗMa5(LP}gh o2bfڃ-qă@NE5q줔>Vhrj/G9ldFԲCQBfR+N;a9'̙5H`t$YI%XK^hWNJob{z`G[Z3OiscŴѓ(Z'N~6ք]!3Ifi]hDS9$Nr9P/M\ߛXE\E\E\D̸YLzYje"0<)b?Fd)6SAt"$6`l בmK: ڠDWt442R8+8aXaA3:@0TJ 7*S\-}5S ެߛZq)煽F`"n&q3B9`SAm=T%?!Lq [Mq]wbwf^Xх/ yFAn)Y#&Ugx6USKΩ9d$9MqkFyeX/6x9x^mx&5,4fD]d+,g`u"xN1O<|:ْԮ {p=gܸf mR1wx[ģ q~B6]{&2N|s8En0]:}SϞ: 24W.@;W::Qi=,ӬzndA=vKG2)ʄ0'o\fBM6Z)GYwBűӦMC'k߳ac[N狋k>÷.-59& JnZ(Myb5:mbH .k `?.nhp+OOJ;j^Xc5b*Kf^tғ2G!z(hiHq:5]lk~ItD& Rar5u)ҕU/p:ߊҝ/+ Fma&s V㿢=_f`+ ooaP(XX.U PhkOF%/sn/P`81(!ZS+(={@/&-ðT.a)5ec` ?@9; $15૱-f<=mcB㪸"ǃ|eO*?n<&!p$ j acٖw`cr-1'Hw滯0<|_'˚G8_.s9lJ9e[46j#H74ƸxbO\yQ`yn5zuMY? 0@m`8x,42] wcԝprюѨFT]]͝J /1߅&#ndDGRlITzX낔 "΍{)8fl~[iKlIuhKIbpT>h2N9MثD7ʛAe^TfUDw{Ae^TUD>{UIR>EཪLOT"|iTًʡ{U}Pl_QMԕ1ٮMt/Yez U'N,3v!ݫS 0Wbu\~l38>^.ϼBVF=j:xs0^'X@9$L[6G3g|54B9g|5A RG0vʡ &‡~!'Qe:]P> JTO* ~>*KH߅E7Qe9 IT9TH!>;:qbʭAlg@\ la,Bd wHk#qݵtmdv୽ȷS9 ɔL˄ [xmWʄ|"Oe0q "Puiaa&qxJ2h2512b)^Y[Fw&AyI_K:a'x"OI<bT"Z%`I>e~D.\.ɇuL։<"O)|D'Id4 RLe.k;LүLasd,ӭ'ni> K4TaqbLJٞ8VG:Ǒ%Ne˄Vsxwi04G!ERo.){ f9Pk :1l Ƙym-0>cV'~ܫr-p%ctL0!w9u$ 0SL*-iQY&UǕ}ƫG^63Hm6-\Eݫ;tu} :a}ɺY#k%버(Y x[,tK. " ¦;"ӝ;e:oevZET \Fkge='=ÑHD;0@dB/\8"G,Zt]puIt(#'1ykoۏMҼKpiG2:۽GnW ~:h  ޔJȾ$fdQYƴx;'Vz{ԽeKu-tS[ݧ3RoR)K'HI VԥԵV"u:T׆չbB)$@Qa&uC91uVgTR77˓N;4V#Jj]馼 KðFl3OdbjEp{%% 0(rcU' ) Prae0+CTɋ:{o@yLIZ I+dP+=к{2ta4B {hmKfQb\۔RF@(Δɡ2KPr%]/$ݔT~t%׿A(I"8̋{p0o%m<ʖIK޿#iI=>{Jֽ9QTOΉtcrIrnI|_W7v8&q}}D}=A+#0bv;U#?ˑe[CK{4]E*vh*k9սb2M)ĭDX6K)5U(q:;8z.7)s{5d8aq*\ۡ6lѶpTRamYw&dRdp+Ta )/m0C9UNrhPV@@9NQVBH9 WΆu հE@R+A Ŵܐsp5͍C&OpיW|řW.TIsG1 ΁:[ ;$r rfiF (˗ө\=lP:n Ђ  Ҧ"E+#` n'c Z9RaQ-E6[d+IT)3wE l'uq l&DWe0f6)rp ,l;ln%Gd<"p_O'm6b#@ay"YuU=`w,4UU¯UXXjapl{#7 8%*o0n!ULke~t&me>ĒayuIޓbQb+1o 3@#La(ck誓_EЕ+z؉=,V\ `\PX7)7zxJ ^QnϕSӕu8\9P#{VYs xr?.U V6jA\y*[-إ<)[q8>l÷' )ܭ<#ep);DW<+āT j2vCdZdX郈\"#9'boJHNd!3qx<$8'ءx͂O/ =֖RE+ޟ{C2 NX}ʁէ*&y?oy?oľB.LVӔ`oXaT>U'p)\|7*Z /S Q'oy[x]RW#R~B?_Pى%._q&ZmHWﵭ+:mˣ]2١Xkcѻez5q[^lq^$`ծ ^rvjB:kZ=#d?0qQ|Gm6ߙ|;$b \/e x|MK׻25i{Aiz)yyxL,Íنzx&|mx;ڄ}o]ݑN/VCY](nbTmߵyG? AnkO`2]AoB1޳5Śk*ܫi ў'B8,/M&ӄ4iʃOi>bxWSV䊼n*CI\Ѩ]PKG)M&l*^}{4b޿]ok Ym@ܟ {![bqKaY+ILH¨TǷʕgWrii޸г9;͐)?>?dk Kj_x. kٵصA>\.$ڇ{9w??`qA=cE-mU;2d|&sƺ7pW y q/BM1cK00e<jꆥ$ e^0RZsBWtC$㉼@,i{ZmCݮp'5j%tn.a7UE,*A1TK c DvW}*QNe*jNel# Պ-f:B*uf.;a,3&Y鮉"QTnϊZU,mFVV+׋E^:JVKT$a IK[WjVn{xG8ʳ V Bi0d&fݪF]g7-C%fVԖt2'=1'#D,-LDp.E0Q${侓Zh Rͨ+5@Fs<KϙVLŢZ)fmWI ÖͲbqҟ y)qUtH0}xێ;C^Axȝ<쇺gySC[DJw[;g}sd >0G1k4=9뼋D/`c% M>Z aE ̐*!9g?3 -wޓOE0r}M۝`˙ǥG۝v`ZԾ_Ԯek !\}g?.8o2\T0KbBQ/UXyI4e *A+b4)2EM!Ȕhe2fzfe 1&9"Fi\aɸ!!ԤaNI(nhI͜j\;.A65˸g$log-#gd,nRic0&f0(i7L:):2iX+5K(3L} ;;/iI]I%䰖6YYLl153n {YGP1MCP$,-q_qJuw+Lb#E{[=&ܺgTLP`0e{{,EӺ6)Rfm"B֭lP2^cX*#Mnr+Cl:1D6Evć.]8x]'Qś,qD**Qф'iꐺ<2Q.nxwT}1@ŇHWάV}DX;n&+:~_+fY#9U|e|K|%&_)0볩-w%,^?52 2VL^Jj( Yp>+QKLݧt[eVoO id&I*1SX h01@#]尒Uԥ[iUt;U墐 T&lXrJ W'#2yM=?M_qg[>b'_!a#JYe6)ےјwҏa [^ކlG+Gy3<=:`󲯊SrJAB% C*Zx/=B S 9T- ā8Cu,f4EmIK![WjA) ID92G?si (FFлM~铀M ۨ`{-[nV??[k}ՌU:[d6l@PK bB**com/sun/jna/Structure$2$StructureSet.classUkOe~βL((eZ[-PխՂc;u;MgDM%*QcbjJS/ˊayys.w|@:4a$fFc8'e3 'd)< ,1L`S89 kfќ3m%杹[Sl#JW.Cp)2wr{k8EAضY+k2Iif [%tǷD &cN$4f-ۜ,͚Sl--Y'oO%KQ=ʒ3YiVzkq,]ތF0_<#"H]M<#Ƅ1xThޱ=òw[<{d}.55{{C1Q(4.^߂}4c˲%ܒ9\uV27r c 8X6W2VopM\sb(k+IlnrY&Uo v; B@SFv x%Kmn1y-3+1C97J I܂-Z]KP0 .&Y3OET t'4vz->.qi/f7c\DH KV,) Hn@jg #̾#&p@Hr+'L5&ޅ.@U+47} x8FhۨW(F2ocOBgoNҔ8ûi"ɯu-&ZFWk(>>[wa Q'=:FwO:ة2b*7yZ_ƶ,߫u~0}FZq75M'_ b2" ӬZi'4 } tt!C^eJ:n7'U-LsR[B =[[Zwlt7HO8H?W=UE DG8݇h r⚯JVkhoL&8tC] -QʕtA G3߅aENrCOˠSn<nL*s$+L com/sun/jna/Structure$3.classuPN1}]aQA@A {Y,m5oѓ?26DMμ_*X{mNQ| Ŗtb>b$*& #;8$ Pyx4:%suBrSX_PK bB"'com/sun/jna/Structure$ByReference.class;o>#nv6vNFҢT̜TFҢTIJDv.F\#nv6vNFҢT̜TFҢTIJDv.F\Vs+|Nx^w/ _ < wyrg'׿!"5FadxXѯP>sgk9YS2r]F&dOedLF>2rCFFe*#'ddEFFddUF[$a-dE9>Z+7݀푸 J(S;Aܫ>yp?A<>K<U4'7&9ɉ-Nls7O 7)nV/q#g%=x ˊ+Tد%bě-$(KH?ܘ~|>ۏH|Ʃw3~>_ϗnT$Q<4'ܨaNr$B ura %y\84I.5$ep dJd) [}FPts\h3qr%IBPdmm].Յz:g⎡q n 8Յ" .BFF&Yw<*|ֵYҴ@uH8nƁN+iHgY;\1/kG>%əI`{SN=!'ԊH0ףR,J旬bzՑ );dG*4aZaR #hbAbalzE];$񈺲7lQjwcMGu1o)qaQO!=`E$pr`Yu@ˣ(+.ؠ>SʋԶSؘ$%#YPDZ80-Fn- G*gppm* }U v P6 cK.tsh:5:Oؑ-ݮ$4zsINj @(lKw]XUmx$UHH˦e)_s~LdVd`-fG{5|*FjkT]Ll|jqWj6?.X޲Af?KRQa`sJjĕt`y&ŊIzR )fwrtsn!&="k7ح6)Կ%acߺ#5ܼC\̩>1`䤚Li#]0!sN{pT쾃pw>F>Vt7}pvjn؁:_<{e[y|dz0A2 01`| y3eRV"|v)d+,@eE4.!&^%\&^ŕ5|i40a;S. q٘+qhl|o_,7q5`쾅oaawt>ŌgԮLzr{0ӆռal og e8y'{mecvC;k>u?=‘`7mǼ>T(lHc=dcA;^TũE}W}X܏{*D}$, 6B,7X/ƺX? jTiK/D@v@x$A0[c@ r46\$pke>ncq<"' Y$ryd1(}T!g UQ%K9gP;1vARJǯ9*v,織V6QfBP%S'+Õ3pZf=oL'n VT0EK$5i.&~,/(@q/pE]k~,g%*F>5Âl,X13,MV\Z,+`/V `L+؋ܮ8kg[nϱ75sw@ @_ B[ڒA9 [^t0;mp ,L㝵[[C7̆%L,h[۲[S hyK3tdrf)Z KKdv[ڪ#0sXzk(23-\]`PӖMqtqsyg1Ta(HdҰ\̦5'`XbqsUg 3vN3+*ºAk \C *Z.;@2d;2H$=d*02FU |2Aܢc|21n65{tN:4y}B;4**Kz%[=h)ig=]䔛ݒ]Y_C0?(*ΡGy\Pь*ΠIE+TQ#7`h]ڼSddU '.duCwbJ^p>Z=aӶia[tvz޶]]#.vr,Dv7K/#KBf^6wRY⹞z*0FQ& $}Dxp).s9ȶ~",BToj q he\DJjQ, V"|`૸<9,rI$2-!О/ܪ u00 :|Z)W&*8D7]GHPH?66)$?hR;`ʧO, {uT* A:?nDՉ'"1PK bB4br'com/sun/jna/Structure$StructField.classSNA-R* j[U<[DZCB BƋ,x,hI4|(?l|>Y$npʎg[-u%]"%[ھOpM˫ʪhΖ ^bH;qexښpz%Ѳ'T\2LT7#l"*Cy+ۂ:6!ɪ'vk9Q |af*{5<llqaonrL7CmVU%\,"9';Z=OP)gaN:Vzk*Ѯ&p9 0KMǭqi"3&P,h+x) &1D\ڡ6krAyuHO3w n1AL?li0bLY H p$ B18ex 1$_!idF-cOkx  #Oȓ CP 1"JǣtH8@W=-t!ir\x / V QPK bB/i^?\com/sun/jna/Structure.class} `T7۷ټ$$!;& `S@%YB mm!HGVZamkk[Zۊ@~7۷ߒyf}3X4`0%ߧ|m=6~D#NNLStqDiL֟Qb&,Bl6s\z*ba.X?3>.+~=b"[0Eqh8Yc6GBn X-b#ע$'o-MMnX(jE!B5-ѹ !Z#-u/jYSmP pF I7$ u(" KOQ``]ő˜[(s֛x{^5M~dwX@lvIܨ⨴& DxUQn F4#9 !G`PۚJ˜X)+=ZOyt i]% @nIEX)܅{ӣNg"M-)EH%nƚiUnBIdS)F9[Lǣ(` :"4_*N#kЭYDŖCS0Lˆ6,VDI.a1:r|rUu(:بOѪ 7E=xV%hZO4b7CK~&c>CF }G#֌A↑GqE5FI4bG u>ߨHBAH#u' CnECb6#-uD4F(Wյ56P(*)qpwr؆1^R!3DJ;,Fwjq)8y|cL0qSB.Йc(ީ%2;TKR;cʯ7aCK\_]T ƽ,I 1JmzP.?Uȩ%ߤJf\bc:iU$qTH-) g7ͮ1gx6Gii `a)x6UGQiU.ԀE<"q%YaǢq87c\V|X9pYt8tT ilQOQRqS~<-c|\a DBBSbB FKcj%)583u*P:Bͣf7[ƍTM]{3SdS3=cF)MB ^5\׀(R@~Yk:#>x?+56$<IHȺ8F8JmG^NE69]X #[(kpIT2Y1CPeEmdq[]CM!R D)Ժ>k57hBzlTf @ G/PȽ%TBOtȈrXuXQOɍ(A %ו M$= 22w!Jh:NxNRKmq 9mnqTMɘx{J]YiCbN6Q2#ihǮ6gQJ05 av\AC6`cWvv 7R_j`NWُ &~3`{4X]ŮFzv$ _l`ײ ѺtRpoSv#im68DIGQTJ7]nmgw bπrrK _kQ_sKd3z>sѷNE$B8N~3B%/äI_S[շ.ۀj_kC lT i J2 ~&{`ϲX2`{tː29<5vOBi%eo2o4dosPO$V=e7O 'I|}e?]z _ːPC !r @j#(=peb{ QBkY6& C3sŠP ٟ 9Xa;Yoȡu]3p9xh[s3!ʹT9.iE}j|`>4QߖP+M;h4q,ѝ^#ljnF|͸,nX׌,Xma2l }b!⃼f 1?W;ʾ3x!$ّv6\p(2jf)'~=9`fA&Y1Q RYfȑUh9Ɛc帤ǚȮG0vG~7xX{O1n$+H. C.K >O22$+-dR:$ԁ ) 1$,G#"HEb!WU<[69r -Z=$uWg }8*qbj#"B&Ƚo FաXlN6J`8,YA3.p() VSh H!e_d*E"K '8Lyօ13[Qx >#|zAJ&| =yEi]q䷍r åae6FC6ɰ]yE?ʇq*ZMȖaAl8F$_sۺPڏ@xDk҄ͅfy.wۦ&[2V}lG@VC,nP_!373R(63:4iЎT͊S[9-\gQh^^Ge3H,o![i1L Qi+ FҦI56y>|%ѕi P^S#82l3+]^lK_—b[97FЋ"͡!U#:rg./3U[L74;ݐWɫC^^N^o䍆I~ϐ7Nd\ y)JA m_ cvtj$j%SE"p7`b" p$R5aV{{Gދzb~ rE}uƓ`]]gH EE|@>-fˇhr'蠔(߱-ܦ50d&&NhM"I+O[ZBPOS6d@$ed`2d [hM6V> f~6ywtr0``ɣ1=q=z]s#/in] iNw9w\ȳ{НD1!h*`'\$cގc^UN^KNW;ONѧJbE ̩]=ky7Xx0=om $]0Sg'[.RT.AL}}"ZRT<'Î?L$?KBOq8uOd#@[cL//l 5L';,њ@.DqukfvU?,d٦ٛ)o jG?RٷF[M&-l,n=%SRcR o ~Iy:52/x^̡Ik7XEM([ O6wxLTOʃ%̥_BѶ5)Wb9sN5V\5Ve^&BXA$1ޛDTi*1vܡ BQȗa ɱ-jį2ڷ1%Zb]~(Ul"ATrlb xv0U} w<_:/ϗ@| }L*vʯv_kױU~|ߤzݢ[m*ݡ;.vʷtʫ{>5jt!1}D 4=%lž~9AiARu02=ý FJpFLAkMZ%,?h<tEN-`5a_#j?P|f;j&\Q7$"?D$H> IKnD45mהۃ^DtJ()N^%e!` #jzceޓ,B21}z 7n0q&0A%t{l*T.b&w~-EgN7bu- L_uEy46B{=ȃǦGS80찥6dI V@OC ;>菈s d/ SddFE.@?ְSyhnɌg칸#?IAd#%L:d!RZ`W')iSŠe(AAt"~p 8 ᐃLi)5CHtAo,NCA_:lp4z>!IgH؜!K<3l(O" 9Cö`$gݵ2Q| 6E0ҕPL E %&P*c;?C+-2k¨9ØCOaTJA+^} \H!0X`0a+h!Blx\ϾlKJcn͢ ^&%ڨ}ucRHjȓ_99mtςҜ08hJal;L(Y^R";`\\vwr(;ȉDI$ ot3EYlq.V .W!jJ_I(NDiX|,$ 9^;r[4⑃#K1:16 3~%{E!'NAk[V{d,1:hf9+;2;`UXFV)LW2-eN Ǡk84UƶnbZu>#e锢>'Ip"Y>'ZKpɹ}O^?8@uºp;=u6=:>j97nn:`"W)mB.4+kVOCRB|&dJYPB5 x/P$a;3 \/MGm=jJAjT t0Sgc`f_[!E/Dwv1af)onlPZR;ejhJ˪݌vDvЩ@YX^ 90|-Qa.yjy<C?8Q┅tXMy!1U}=Sby b.?osr?*1b\!C`<2ͅM80)fiSк2r| R\b<2K֎CWhep.N *t jE$W'߯.p9WMʼZ\T"yׅ.>:d{5K]j.O; KZ-.Η^nre7luY-h.^D⋹ctA[÷A/~> {/8_ ~=o 1^w'nY>ti@VQ=2tƘ=ZR 2@6.#l71p E(0N@!q3]g]'S\'t<X1<[c.Yg%%9*rc=y ?Avzƭ;?)s?1isU.\vT*A߃6I`w?,,*<凡MehBc[//sE0%0f/rhc1z..썄IMT ?AcNhL'Hri!8"I ;e'A ȿ?Dl?Bl~~W0ڱ/6x1L#$%}`. ]HFQN鶘"A4\W+TpQ@W;71Nr'2]k.Dm&]YߗX]O湶CAyT1I1*(Z nj$ךR0BW$W [;iwwʈ@ۡ x{ ,VF^݊鬊U>2% /C3p?B3_ /Q|S?`6B=1O \×" tV( vŪUV+rC{T>zCQ\\Gniȉ:EQxw[8=`i>Nű JKTtn~L),wLp`1 +}:u-˭yf0 Y]0:L]/K/Q>RG$xo]69r9(G8aNT8{-$ OҗVBtehojJ }>ί@Ao)i֫ē%Gt->iWh+O$di`Òb&0]̂b6Ǻ~RSG;Un k*Ar$fh'e \nOu9NRBy>cX< hGs,8"DAxejkJїRVu-[T^%ޕe`˛~QvQ ִw=1A 3aXb-@XtZ5,XukJh YmӬ*GEhBQ4Ui!D @eNAGS4 HAȞ'?`(# ȯe??ZQ"DB=BֲVaβ/#0<2 e{U 5Rq{@Sx9ʭ_FEXݏf`]쇧f(>gf8ci*{Lz*Xr!fޖ)fg=,)%Li2oMlCBy`%R\ wk`vqq#Z+qy0Htr_mW X#4 ;-:S).S?cG3 yd$ed#_t~w>㰐rkh h{{]̓pIؚ6#F=Mtg<ϮEY{j^jO,{+bL2 a'0=k#S C\zJ?YtJvҁG~x K}*x8+y$137iL@T|&:!"@Zt0G|'Db*M$԰hP[dOHN:Է~\HN#F*p{]Q ףP]~jޫHu*n\MW!崧;`3 wm9uЛua}ȥ{= QBe;09/|j?J*BO* š冚Ee%4+2@$}AՊ_ߠz*2sa~[O+2}p5{Vx}pq;EGCgt_: f\4̨Tvj h]і.)$H¦S!ۛ^hWJ`~ǬJ'|yWrl>D#Kf y"J/c%% r4 vX^-Ob_9/q(_ʯiWB \@̅Lzɾ_ҋ(% a˥Α` Mr(l9#VYwbxUhxO_˱9PVqr (r&%+9-sj9mU,,d &Bv<,bv\vʥi,\>+٧r;*WsCs_r/uZe! x K~lW~dGnm|a EH 2y//r1W^%jb^l7-b,;NqP- yW/Ps 'Z`7P~:HUހ@0X.R̽;^*X,VKUVip,t(fo S'">v.Br+(;D:L~Ց| CJCR(<t@0VhoڷP;:-l ; h@Wo``*t{y|ތoa.97s3(m$ ؃o>Q%%^t0Դ%e#5CI<-y6u?3ѡdD#hE0\>L@h܋Fz<`1ÑY"J ƫ3SrAvZlɱ_"\ gGaQZ[MXEJb̅٥R3,EAhccYSY#vτWJVORX0 PgQ+=}a _@m /A|fbP-_eu8[ ߲ϙhP CH8 %sR-mO67>mTdZ0oY*!g GUFk﯄BQ_'{Juku! @v~NɏQȡ-?DǶG?{~(T `tƾ@TkEֵdڽ~9>f1c &^Dص|u8zynhf74:ګ"'}Gk(ߖk ;a|.,0a/q̲s̓ˤxr1eYg~2\TDSE0P̞8l{u)5aSө~_y9tUVH:hU.KR.8Nhq$ZBO.{d'KT= 1dvHd; )i5*;YvY20X,}bc]!Kȕ W MU= :5/jMhn_iZ+rX-Mt%Z> XXkBo%q}pIJֵv_Hk+KQL6@k2ry#2rEަ߶x}%,tܤpoǮ2m !KR+GO,HA+w\֧ZZ(v~I;HдQvl,ihY*|2ܜ~ ']fP2y;Y[[Ybu_U UXcf0) ι%<=a:Tuڻ~:lP{'lSiZmvJvEZ7͊<A+qT#6N;*Smh{=褗X~hVN'f3Ӝ7]Q1͌6nU-d#=/0AM/!h!Q'q"gaX¬VJb>jy"E@+EˮVв [2ֽ%c,ld?tuݑ6^)IJLH<7<ތz1ʃܑw Uy^'7r*8.rPA]'N8WxPvo0)e㩣noۿQ;MC+ DM:6hYWc~6nѦtO JxIoiCm|E=> ekղvv&{T[j{Ruigq][U|v6_-iuQ?y6_iEI E$VjaѨE5ZHܤ+vjQvC6l!,>WF- }KO[|Xg#v/_J,O[0_eIX:[=TZ! zQ nZuM6cstNG[( >YX- 3~?.FF0`թC3KT ]0Rvh)X`Ê:^`a(ٟhrf5Iv W~/]G7rd1<]N-Pա W=2t v@XWD Y/Dƿ2Kv) ."r]p ThL:X]knFf8W`$|\T&s QF'h4zrqq WYNV~MlRpiȵ̵>c /Qcn Hh43]N?.Or+/$7&Kva ۏlhbvҢ]N+>הuvviDwUdE/R̋n"1]ۃ $B{:avc4z,,֞РaP{>Y W?Q6axb{.V8wزk1b4hS& WgSΩviM&0N{ 87>oaN%g9#Xi6ct9Z{:cQc֗kxd,Tc2KD\>Ġ+ˬXμVDeɠ>./p>BN%>(pC-,YӬ=q;qj@?kMhşQfUcdf=߃GLVc6Ih'hxPS~TT}%ғͥJ҆+ WF$*a*DdDz#"y'Ad[JDdDS _KֹKҜ.3YW.YIwHc L}ao^1p?=-zڛ=O3H񣍽V106y U ^W ta FphcGj^á/Ve} ?_nv kiqR=?E@U2i =4kX w5pÙԴwK=ϥf J!v%⭗٭B=F=K6Sv>-ݣ4|[lʗrv 4\s-%C1 EyP3`jrBu&еv>RxƵ ^p-#.km^YЋ_/GV!_W`i*]j\ yPeXwmQ~V0]DU^EF % d:LM!kt~Mίſt&_?B7lbBp>Թhu+GAGշڿ;H}5ZJSb鱵SoS*QqՁUk\sk#T6A fj37dXdTXKe&4u,kS ZCH,}uOJjoTҗ}/b[:- Pߵ6ȑ 7^Ů)O`A+qCWj p(l}j)Y%^EO†+U^K${qUC&!էv:2iO} gB^ Kٰ<۸/d V^oS@]Aw8 3OPce4vM,s5UI4:*ޱCB1%W?IT}|P3@8/0L_~,ї~ u⸱&걛#}!Nل [ k,P"!1CsXz :?(Er(O26 l(WpKWob«էGoH;Ol>%X}j#قHHm#m-dd3%ق&&HdkAElH6$f$[mB6IΡuI.~Iwg]Zth!wd8W;v r7mzͭOͳI~۝^Kͷl8?w{l%g;'qIV#:[]Tz 6gҏ,´l#6)Y㊴i/'mo\3WN""dOIPnbaۛ1?sGl[]i0 6WkTعF+o0PK bBٞC&com/sun/jna/StructureReadContext.classRN@= X.5nHXbع˨55_i#qQ;4;s眤o/<(u,Xfȅ2lԲFuqeȜ:2 ~-{gV N]aKZ9#v sŵax ꝈZu,0Mb(ANo^Whi!/Q尮U_ɺceVFv+k?{Yص FFʖZZԫ!vu[!ˆp'0NI,V5/G0̮2|1 pOq,37>b~PK bB҈#com/sun/jna/ToNativeConverter.class;o>#nvNv.F|Ē̲TFg IJDļt}k\#nvvvvNv.FҢT̜TFʂTԢ"IJDF\<. PK bB9Ujcom/sun/jna/Union.classWW~xA A\vؘД hъI\v,j4^ޛ{6Ĥ- 1m6mi~/===+<eP{<~}{>|~1X2de =a*Sgsy^{vF읕~(0~T\ŋ*^s2LxYA>lS^HkJg-KM&twBd־D] J4[AqC BݩCAu4njAX+u}a=qHO.&=y7i=o@LZFzxQ&U:XW9^խ`*MІVC NW:v+-}Q I5cXN}l1,{v&5H39fJ(͎%"<7IK϶ ;ƙ : L7h-U<%Sz"[ų)5rn HC^&_//A){f)A^o收߄QSM)cti2]r&UPRݡd Z/+ 3`2GMï Yq*4yUyѰ ;lXtӛHcz+=H6&-Fa]Y3aځT]h o oI.NwbH1^$yF(pHg5<(DAbK`w?j?i014<ӁA"g U>!CZIER-mt#Sfz;yzf8eJ TVm*On}d-i6f+g,6  (#_;v:wdC:UIa=3^ S|Zs1ńJ]qn˳fphT^5i~[|T$ 3ӕɰu7BH9gIsGߒHNpR{q#vq܉Wwʻ)]$ґ&)ׂ>OІrm5ұ6BcTZ1Ϙ]覴 *'ۖ{]w+2BPRhmlE9Z(3PLO2x)ogd}PP1r9A' vG(:4YT Um@N%a4H;q;|Pv>a| ч~;.`?U24cSC4TqPŽWXn2jC9)菺AA.#ױͣ>"dˈnG@ujEWN="j1Ӱaom'hcw"=ծGEf@í&B S74Ƈ܎P3acG8>Jdxk\2;a#0\?u:~ƖuMW\ĊhŦkFS4 %{#{'s_`ϰI1c6^A ; X{$9lčD W#@گC+YWm3U8k#H2(WL o<y;S͢ JbɿȻv--[pɗJ/ӭ^wzwe+6ND]܃#w;];U*b(tGaA%D` ,ZhG( yW!C!! (^‘Oeʁ1akMsɣ̜)I|xmdH.Y>PK bBI'com/sun/jna/Version.classU PTdQ^+ѮU n&Q p-z*R|9<_64f-rϡ)r.e*:#7BIxK0¢)cqLsA0#QVi!;2p",~[&⚠lmvT0jԖ?z_PK bB/com/sun/jna/WString.classuS[OAmVj["(xP."MJ0-],uU?ƒ&Z&LQXJ-9}sIMwBஂ{aZD4f/af c &@iEj{s}}|쟿~ ,PWIEX-CWai`8^T\0 9=.{Qg 9CI  BwS?XwwbC>$baەnðטN͐rJ*>-xBIyWr`K)]4Agj=T,g4S ʕF,Z>/\%y!C̦"Ӧ[ЕC Mউ2n0UNh'2C?Dh(l}tPtS`N7@Gg+\KFyqʼPc18ZdP|ErN\6 P6LNWAPT@K:5kmfY#K?S_טh&uPgwҹljL@4A~Y"$&'{ Q.~ U!+0/ʟ%<&, oPK bB@db;com/sun/jna/WeakIdentityHashMap$IdentityWeakReference.classT[OA=ºhAnRPv[Y!16)@t`KjwkBOQD`|7m&>̙ow_l7R8c,&Ltᜉ󸠱6H`]@RLL ڦ4|KgYɍC/ܺEp< \v.UcT)Wy<_nlU,Wj.ɺ-0 qk?Ԫ+U}U P4ID[+Z!]:UMlN'L=jȪVmfFӺZY AQ8Xk]u 89-e`"&-10e-tH-@@6e:%u5c6FNȕtnC5tgdwt+,Pm~s,Z*5 gs1Ƈ`tZ8G2;v!g.;H~(!S$񌗟c/Kd0r1 Z rH?-'g9iDr{2/#iТAu Œdb; Gķ4Ix oHjQXj_m'ygHWp:JX^"l4?qPK bBFH%com/sun/jna/WeakIdentityHashMap.classWkWTU~p8 )!0(#fb& Ra88XZv5/҇Z+!bS~E93 `}9{}w?׿ m 7ЂIS41)+8HhpZ$IHkĤL28'1YiΪxxJ<-gTPges゜{^ bL^%,WTᖬפ$eoxSMcҳMc9n&M;j*{mLvŌTL)錙JCߤqƈ {"4#CFtʲ'$WegV,rHpC`e[ aϲ|KM_MMy.^|tTg\t*ؼQ :İxH>h2D<6{ELL@ 9}R>t|/Y)_2NRg=KDPA+n |7ghg;]mdN rVXiW`cbVe5z'Pq)[ ÃI% μb{;g|ҡ><OxޑyBa*ûvPE3@Bpjޙ?^*C]@.ͣl a?*pWZe O "F­(_7yXvv:\H1q@>]U9TvPhU w, YP/TEt iU_6k,Z QpwqV5XM2n u# ylhXFϵP-xGtf0̂ц~r8cx''"=t ;pWܵى%?OH>zԥ.U|sqPⰊ?Hrc|DBش2ph;ߖmp8a :2JQMwچr:SL<ץȯyte"͡aI&GבQW",7 |B6W5˽ 0%Foz)1{.^HD/kgzVfĞ)p=|\z,`RO驒bsH{ .ʬt <  ]Эt]XNWbbI|M)"Zi"]NQ9ZA㹵xa|oy]l{yaUc-ӵ(zʨI2xDPEaMlE\~1-{LӞvi[1mudey PK bBC/!com/sun/jna/ptr/ByReference.class}PMK@}ƤjmԶ)׊X)xܦ+niA^,(Q$y̛yov h0ulPm`;:: ک drƠڽ" +OhJy$|Iɣ\/8 IY9[ "xP3)XiKYlZ'WIyV٭`DFz =3|K*#ɲд?TPm4d2*e}B|@^(A}%VAq%k#QVUդ*y1r]PK bBɴ?Τ%com/sun/jna/ptr/ByteByReference.classMO@߅Ba **g zxFCQý5ؚRLO^`2ΔZ#ٙλ `e SLs6á 19::;I\ %0\s\uܹm(n2Vvn\;mRVzջZNեT$5-V@zoSzM1?p7m %-bIDzX)Pg,oE_W3yfIÝx(_ opN&XnW_}V4lDhe@|x,ClRfT0Ld@E{FR"Bb0yBN\O8#EcJVвL@#d̓1oo`ِE1ƥFe6v UPK bB'com/sun/jna/ptr/DoubleByReference.classMO@ߕZ@/ďA(!ƨ^qlMiMU &(li {yϯ;(q$1ϡbAz9iXf9$Vmy 1dP0ٰlq?\ ʼPdNt-ywguPv6+[9> Vn}5Y!dv|j jWxQmG.uB9~nK[Pp|2uhHKS1#5XױM[0 Ɛ*ƩSe{e3 r0F ! R "r)<8q:!F(^NL!iLUHavIH"ĤV0V!6ं̐:2[Yқ*mCj*˛܃3>[zxo*yZ!AbyhL-3PK bB]r&com/sun/jna/ptr/FloatByReference.classMK@mӦom]?,7ŃBD)"*ǺjJM$Mू?JIB"Λg|{if8P<:{ik%0p\uڻR}աײ;MwxjXizۮ]\(_-KZGӣ_%몠msIJPM^x=,L 6m Q&8[AEǪ5؀)`AɯfԒ;7P@ɬ2ǑͰ/7O[`fT-,A$v /`Pc`C  1ሔ-Wj>ߘa)NHR*F5K4&d-Oh4BO&<&sۦ9@>}Npٰe>qY U/PK bB|9 $com/sun/jna/ptr/IntByReference.class}N@@ia[XH4.4`1jWZS $.|x4;w=枙ϯАˠaIeVdXհaA=l;ar<dݲU{/;CtiZr1M[j6Ϟ[ˍx∔FMcӧY!^c”ƠunS[4mmL tdd(aC&tlcay S]N\; !g LJ8j\VPPr %z8䧀 NqvP썲tV L0$ ڙ6BR"Cb09B}Tv,P2uSSxe%A 4<hi P_C7'\&BY_PK bBt%com/sun/jna/ptr/LongByReference.classMo@GB!Je8)ɭU%UU[qw]C.Dʡ??ʌq@ٙg7C$tJcʦ&/u4t~t=7<HۭvWOɕ 9Wcl3;8?ܩ@7'<3 :=U@v3M0*/0qiɯ,s۔6p#gX0Q`Ӵ>^xc-Yx[jkY;% wP6NtmIݍ@>FMhAIvNHd-y)Xd%@lyֲ 9igB!&\!qT@rf+^wS7e{$ffs*P[Ʉ'^:/yGN3-Ip(Q_i&2QUPK bB+com/sun/jna/ptr/NativeLongByReference.classQoA ǭGkKZmڃڞG5АD߮k9M~(q9 =3Ϗ_p"!)!ew_pfG!ycWKsWi^riB.eV~鶜8Njg'lvWc  ݁j^;uU]bMI':o8>ar=ƪ\'qVuqx# a|Kpha֜F2F*PK bBǯR(com/sun/jna/ptr/PointerByReference.classNPíX/ܼ&; &b*ZSo. qP9TP]߯3ӏϷwX#b*d:/Ebmy{ aXe8ׂabոyUɊS3Uӵd_F;ɰR9Rem๥SDz=? &v2FzɡxSx՞%~ȴ^ϝ[G2{PajFBRt2O04P&|y$2o%Ye@~ D@@P(F3XT9@Qd1FJ0 :%!Qzo` ]XjScr>v.nU\x/Io#]^su 9`tוPK bBwF&com/sun/jna/ptr/ShortByReference.classMO@߅/PPQAFC{UJ5xă?e)MUbb;ow.)I1"8,PJaE yh;$7uĽS5Qέn6dknj-}xM+VkjT[U}t=Z+O9 u@ZѯHw_nQJPMnkS̎vZVґU9ְ†Ml؆!`QɯfԒƻrmW@(2c͠/7.[`f\MA$1#F_!^(A(iHq  S!ጔ$^c&'Ls*?(Φ_r=1Y%+hb&FG+?x2Ɉ7ِGsL Ae&rT/PK bBpO£#com/sun/jna/win32/DLLCallback.classMA PE%8hҠ-`Pd4Hh/}΁z?BX`BpWIr]J5jӴʴf> xi]".uA؈֙ϋJatFVF{iA|19MVyK?X3Co F~PK bBBXucom/sun/jna/win32/StdCall.class;o>#Nv6vvvFҢT̜TFĜIJDF\rm84mPpR"E&P`@6نmݸUGp 3Epd#.ϷI5iu}{x揿~{` k”E p+W0 *>PATz]E>n`V>UoitJ̅P(KSe.;e9ùUy%:;:w.!0/ٵTi,=u״NnyBVV5mkZ '+bJfXnAw%Ţy}IOUuFv8' t%Wf^ɨ+#T+U 3X/7Yv)uQrSӆ{.gcZ&~1&n51oeyqqlYm3V2bj,ϡh/d]Nr`7{,\6JMKUME⎄)a)O@+MdL"q=װO`F<&^`UZ< 7&RKa] ׻~iVˆÂn-Z]+ay U f+D嘘D×@_X$*owmr 8?[G`׿-0ٌvzE$lV9/iG}8d65fR4ص޽;+tO UH؇9IJ,tE=bΦip87n[U۴<=NtAVӠ=>WuNs/'m!0>*>mH"mA~Փyq|7+-<AW' ڍFZN-|]{Sڔ}I~]8F9NØ*Aރt !fbS$r/]!c[<#n+Z/~LƂ;?Ăc- N?;G >:H1 r$^iaw1Țqƃ$db d£?e'2pmG`;Ic3!8(\YJ4')}yjY"TG\_,;D}ZUof4Q3[Ҭ8-1.qF⬐8G/0L?ܜ_U5UbcxUL'PK bB #6com/sun/jna/win32/StdCallLibrary$StdCallCallback.class;o>#~vvnvv^FҢT̜TFĜ̤ĢJIJDv>F\&com/sun/jna/win32/StdCallLibrary.classQJ@=jkkAA}1 B!bkIIEAI)3svϼEM\P}q'ߥ=k q?uXEʄڟ=CnB9e7|ӗn߻?;v0pFcS0 4C:Ύg05#uDWk|W32O>@5 f$(p. (rkOPK bBGJd:*,com/sun/jna/win32/W32APIFunctionMapper.classTRA=l2qYQ#/ W$ A$ ,x_PUGg6QAe%>Lg}B c߅N\1,.K\!qA WpM$BFĴ΄uS $r|!75wcZ`T]7ku\s-s|ZO^F 2YB _YfrW̢9 Yu+ZqrfZ.חlTUvdU,Q֦:5ĖJ;nz\LMmJ]! .V I;<uR|癝w<{̳+v7gmZ$ۑwk-;vL{^5҄p=8K:KyY^@,['zZJkioirXo@/@sT]S)۞(xb AB`Wo z-F;7fbG$7 lDn݉IvgTU,.`VKcW߱FmDŽj| ؏0|jܴqah*5sF6 F^!A$]}c'BҘyi0l (B?8NAGsqH8*+#S D xkx8 ~|X]#4t4`XzK^8vG"saz&虠M Ib<7,F0J<5;Fp)_8קC#! SL@H,O{E+~F#m{c>%*){:PK bBP-'com/sun/jna/win32/W32APIOptions$1.classRN@=]BZhhi)JAH A*ْKTC?(U^yg9;Gc@2\̺x^Bse8xe xൃ*DjkIr7e/!#N@$ʜA;Z&PddD#?͵??Qzn6>{q"|hߢ< *CSmQqWf% Si,ߏD%,{X[u`nW x+´ "tELXGGXbmv nM Ŋ)|BPY6v"eez,̏gŅys@@9 ؇ʃsL xW`R!/pV\4G)q1~MC0^PK bBUD'com/sun/jna/win32/W32APIOptions$2.classN@;-!"QWR*$)!H ޘ-Y[>HPc?iw?hV1L,ZX*b+&ޛ(>+=Q>#Z$tG/SYq:'3  meEKV:^0rTC-+wnc x$N4`AeW&Ī"J{(wF" edb5ࢯ[ٛE3<|Cq m1$4:ξ"ن JX#s!ێ}[ny XS`l,@At2}]@Qy/P` ߠ$[-Rm i@5E*?PK bBs*com/sun/jna/win32/W32APITypeMapper$1.classT[OA=va[RQ [VPn 44@eaʣ?QDO&(7ӵK^fg9gf@hCGNØS'ƅ)#KÄI DV ْZgx T#b`⟻`5n`P.g*_`);vy\ԲX+Ne'Ib[ڡ[#Q:kU=w…30QhB!\]grUĩ9T+:ByGBo.5:xMz Ɛ1ZQdEȚ_  =狜 tS+}WT N!1!7-ka@*a}HVfß 3ԛC|uESUj<y0|=*5-:Z1g\;l,n)p=EknCtuuj$X:-H7Z'Ț4b1 bi-1%:2腸L}!|$D9n S[(SO"e~v:+q /^#$oC ЈPqWX0٦LFr?atP,ε%D&Q""L!#<=EA~d-%S#`dTu%etHPK bBLw*com/sun/jna/win32/W32APITypeMapper$2.classSmOP~:֭0DDqƔWas$KbʸBuS_W$MQ]1Зsys?H#Aw('c$ -HHeLeonrg' pqH.2 gh-l,s/i/%\Cʠ 5oYɚzI3xx4Q U& zULZ^.;qfm_܉i{nVkt6&|D8PmsVɴˆ:5{ES-PYH myT<ǴQAV P/SnhOԁUa9F'8fl0p1Ēhu)5|p M TM3 \Py6,ww.),Ot\FEziQPS?N"`W! |o(ѷwд9mIup ׽.%YC%7ecT2oa"H,-D6B7Ց>)hFF6`6v@iH`.A\g@#N/J]PK bBIYr(com/sun/jna/win32/W32APITypeMapper.classmoA Chim+Zڳ3iPkZ_-p֫;r?_w&PJ,`"dwvfg77?~~ G*"H)H! b k ~K n fX 0A+ٶ-nmeT|apNvOlhjnabV,&LmEi0DʦmT;uu43eWFڞkEg R5Rր$Х!Fc ÎuDZ n$ ,IZ5KM@fbN?Ϟ?b!J6WL>ICPB  grcY0ǔn vHS $ b ˀ!eui]!m > b }>w^R=LΠ}AX~)^lL2*#EMـU'!uPK bBcom/sun/jna/win32-x86/PK FB6E;_9z%com/sun/jna/win32-x86/jnidispatch.dll9z;_}|T"n5QCjkRc6D%5|,/ Jah% .z(R`+m"n" DjڻMlҰ`Ⱦ3sν{#Q|>?6̜ܽ9sf̙3眲[ iAGC7|kc'65wΟhIK=ewx]wIw3iIT|I?~{.3ft&Q0'taaH03 ˌPf0,¿|6rvh Tv "sѰemKKH7 {s5 vU.wR##:2$Curew3[.0*wϒ 5vC˳ r˯̥&ַRr5=ߒM/IQ٬ܝg}%Ekg茡ʝeJ.s =PE)v,&¿3!_g +eʡܙU>`W9 V_k|O! r/">=-SFChD$!̹xgYリH nT9 WZ=_]EL4/Sd*o#z [FeG hG[b.ª`.܊BԴؐ+UeúBřmʔtaxÿWɩ e T^q,;;Eă/., tz~efFVZ2=l`Ö7Ws6cHRiVl\o`RFUtfI "qt ,{mV<X;ĜeHOo/(QÕiř~Dǭ";XcE`؄⫢(P'"u6Y `z@P.f0r4&~? NZ+4rQ^,;,YP 73^/(5.V( ̤9H.yP#n.H@ A $GB'u12KoRԧf(5}Qd" +((+>o{>ڕgA2ՙ=ҀhT #M1x$ #I3ZD|Rʾ"(۹wod7weӘm%bW>rn@uZ@ \w-sz"&[e ͑/tsU!} sI{#lM| K,Qp>⬃2={T`"W}mskK6Zr워膍F'r@[sbM_ R D`L$E"3&>< L$gek"SC[`I2F,:KDIy j5@qU쓜&ƚ sH= Ih,P7.kfmS(Qp4reMO&*eBA YfcH+ <qY Gu (#JO>?L1~͑ޟ-f!G~nbh N쬳s1LH0XxZ%'j#al{ ^r2Q55F) Xo3bgC08~Nd2V>=n; &#nm܈m ZƯn#Y70Pqve6h=*@["ZZt?tۓ]E }ѝ?J|Ńn3=0]hWImp0 OP t(9q]9k|0}a}?#Xb_tІ,n5`5ZGaٰv7?r$/Q&rHߐ)jӰ7`.D~#$#}k V7 >]K޽춯}np<HR2_d0†eQnȤQ;0ON*xy197"hй=;L&dw0Ux,FȆ!uVqqV^2o7[/6oCB' 'R-Q" CJJtI'c~C;ցe^fvTo7zM(6p{ty%wcFs6wAnU&%#zr n1=퀺Y>e;̏)ټJ e*kRì2 M9 %w=fQQ>c8D oFfgC $s| vNkVZ77^|wGTo\۹f=Or4n\b:oOM0A7-LΙ8ob Z"\a+Goq^7ܸLeI>O0qH!7Sو?hRͮ{dɦţ5Gt#j=IZ BtR4;#f4е&y5';:d(Uo!wz.$/RZ}GD[GHo_6 $hN%M'kvNR d"8 z ]YA)HKfѬ(n@ :YD_q™NG)ԛyP9P9:Ҿ<٢ Pݳ-xjYXmxFn"ᙀB?ā @W9Ea`F& m%ȡ8H*5ְ'4PsEH53Ui OLcTxK5 -W8nVO}Ic~>%}`Ì5H >j',:\W a(@t)UjFU1)bbu|C|te"l +^D 9-V|Opz2ʵA߆n hRkaY#06Gxei0xX|c na)#۱U~\mBӱRm*9*9saCy.51Oڈ .Ck\K\j#ŋ.4Uŧ*`HT#JYE X$<䏮 QHXZtpxV(nEVϦxF7Q(G %"qGp8:S☉8>PIapؓ?m:YIqQ:)q#hD&/eŲ|gy($@Ȅ!k݀  Ǫ!qI5npx6=\?a(s[$p#fƀ5ӕc;ѥ}m|Yuy$@?Vh#a|0?p5/>G~ ?[K /+">Uʼ@jŕcA!aEθx"k P"Q>i pR "fϟ㗵<(2p,a 7 f9$oMq$R(x`dnw=bx_L5^? ME@"Ŵ"MA$f챘(?#d%5sx1TIRT~ 7P hHT.8 ^o7~4Q r NNSK)I^NOj#&r&$"*YPR.qsv "'u~iMz=[gPL: D&h?Bkl~ ,*Jz>N]Ci07GTFu0w(_ߌiPSTSv~PAU_8jw4Wn(_?FL=ʢh6]%6*%:ٷW6tڠCL0}%َ- |#E$O_fefE&ɛߖ/{%W=8n܂@秅 }:W3 hr U87:d# 0rhdZW<04kdZ24H_2xhdZ ǒAh,}0u~K2S&\Ђ}F7*+kI š%%Ԅ e\{l-WI\i|!r50y#A:DD*)Kk{] ;A25,Fx.÷$1k w3[Km[8vоۏ#ni/DLOWG\W"jf}kpӪI %RЧ_̲mjk|\(H6@8_g8JN_֑֭iRjJ!HE9J{*AXW++V?/0lݳ-a\/y:A' `gm"+i/& lNN*,b꿱s¾r,mS8`2ed`P/тedR]s<9(Pf}A򙒣;!QOT-8Hyr$rS[0 > ~ jK~kZ-9<'.q=nb¦/~D(O>2 +K_:9.9ʕGcp-?: L/+QJ(K9:=' =Y +$O|nd,zV+z)q䄕f<>kEĔKQ81E.DƉscdA <'Y:dͪrh_L$ӧZrW8`0(?̠."3*8\5{ĵ&ZK  jҢܺ&LOFtC9ӽ7bl"xBB8u+0MyE^UlE3:ʬo&5xWlХ5$F :Te8DZda]u;c]WdFcLiOQGdGqs;9k @<3W ̛wt XtѕGdQ abO=<[ *aF/:}m \q :v`|mn/2fhI$K$r_/[=sJD%bk">͓nd@P6,o=|!Eoneq-ꜭh*JE{Sl+*S轟\&M BKn6ّ{ҳjb 5ʂObP` Yӷ R3TETp lVUf3ҘS%ԛ&e>^~JJǗVEG=LXZ4H)AZxR Ed+V@!(8٢Zbf !D)\5AdIrqwz0]g~9 Y.2嚖y?b @ݪ0 \R` 96%,B7'T4q*cglk=_m`;#|u,Ұ] ޣVGJf<*>swb [V84D7Ў_(4" )rggC}[2pM,[#Bֶn/*sui/g^㟉yDIx!Z*qVBWWr+$Й(`ĵ'j5$2j/ ΀pA*L{ Pw(;yB[Uka5_â0`2WҬ -8U1ɺ3xPG(z3~)Hx,zuǒ0[_p՗1+_a`\6tW̅#x;y׀s%8(UNbz0Ѷng@<)M1'XY_j0ew4ĝPjT(j-+UJV)<Ԋ*0w]z"QHg|񡖬Q vb!;{sjzv-m`YBL7~om8N c@U661ۀn :Le8&E6G\cz 1g̨<{yq7'@d=ؿG;pkN+yX=-ҳI&0ۙ0)0I۩w^4Slۛa?9O4/ӿv{sb2&ݟ_p(H]kOv|$O=m/M ?!ۡN(Z~s zo}M2 x_Ac]I *T 69:B&~ѷycUY===}kTvd CNu7{ =+QOAΓ+ LY|6=;Hj][uZtQr(g:O#؂ÇD/F$oiW;on8{_Mnپ@+_zӦ/Dӧox{{݀vr~6=V|O[|s枅guaX5CJl$P0y=ĚA41?!F/ո0BRF놅Z!uG?zZgؼsQZUUX [ ?e~PGyZ6@?b,f?C:Z4Of7`3Lۋ(:aDԆ7C4b86u08)d>TMO"gs$ls(J$uЮGUDžEzi bvn^kԞ﷫t\beQtR.Lo7C*Q[:Ε*UX¾0{ L60?Pf30q"U? f_pGHRʆ8C;6o]OӾe}+ `rΣDh?/oKk٘k-(߂k=+3o1Zdw֎V{V<3T ݂;—A^yxn:A#$=wBAZJow?B-莻`n0𻡗3V#_Gsu"lg /hÂ[1KnUcOl )7(;oeƓ::-i16BҀϹ#ۊX]3崆7:}}a0fU#ݷ q8B;SA{ OI4Q#j]{[ő5>Y:VVsy) g56ǹcK+CPSCB!= U*a RAddhRaHTR(SFP)'IȚJ^ z$L'k_R9Fk,gkM1;gooI qrP:V#Hv.nӘw{uó(~휺1z~}{=s˹qr٪R'CמߍCR]ϖ.LC w&xZ0\]l }(VSgW;RE1mGw"Itܩmuθ#t;yl?AqjX@w=ֻ nMa#QRWE NVBa`]FH^FFO!aU#Rj̞W(#)%ko"җ5wǑ^7Xy7'b"{8XnǺndd+x~1PWHEoc|O_$D/p /~_%Y߽; E)p(qta8"qt\8~'!|CWu((_[W}-yJs[G3TIl`FM:aD%mL'4V}a!_`% `B_ֺDUb͂ [Ul`{>.IտI4X3taaFاhIl^ڿE_~z UI458vSZG[_ {M. 6OC֛ [E}{SH] M}H"9Tz[`7i9{&ilcz;`5عC՛ {P]D?B؞T*I}*dzaMk`/=F`'j Uo2lD؛^\rLE2 "m``+4N~ R&ޫ*ی+R%`#aR*IifZ¼ aq 3 6W!M`Eݚެ$5,= H[ClC^JʡD[/˦ ͢ewNp4-5ٳÿo,fcf~Ҽ afQšÇ|e ^} yxeL*x"1lsVe%܊VX;x"[Baձa"sjiPMo 9[S F}% 0 ;QFrV VAu6:BQBn LSdŕ (g],KG2vohw0xĻBpHٯ~Wt7 z?%>˶grNOcI=w8s?[y39@iYc98q2=!Eʷ_`_(ĚOU:|<̌ h,` jYF#8[R~:w jّ)r)n# wi= ۟ 4zrYA(GR"Sd!6JCsl uP@xvH;35멷 [(yl( :ඣ[zG17)qV]TYjKSU`&AmR52U/Sv MdGVX/;gA9K=U{iGd\d^R%V^S-mE9pH*~:h<{ ug{~n균0*4ސ9&&wx9c/HŁ妗ma'(;X]A)lrYiK`H%Wq#/H~{I1] $:" s;X;+ۧL.Z%Ss;koKC=kGP_D5#\t$2G@~>цv%QT+,I%#);we.9زRQ*9;eIDp#C 4t^L[ ;0K',)EM=Ȳ{bWb&{{yv)2^x(v* юUq}Gpn$X'ٌ Køf~sJȲ9l Juv1_9RsBS,Mb<ֶ9E,~HO ݎfXy3K>)tSToAvq˚ Wᶷ6o-HPİb[O^\۷XֱG0{ycKBIsEB 6/`8{O].ZBU~Nwp$< ܻ*a`х_txQ'!w~ILLӚUĜɷ~KV:qiGq4F $@-nσ_ݞ-D;!1 B4hT)E32t_ʌrُ4}hd񅟉U''HGKAL`ս. NB}- ]~nՍ BfoGN1a]Z>@w15]NJlt {#6 9|Z<=N ҩ |fVtoeAl xN7tqT{Q9zEo1Fb?$z_׀kDFr[&byƽ sy͛ !*3G}ӤS^|-)6Gyz %z?NTCUG˟=! uLpc}^Ϭ)Mߥ|c2oJl"\:sB0>Q;+7Pt**I'bׯ4щً4uݹvfyW5IN\ڿˍM~y%`>(L3ؔLR8<#Qڌ}Yii{%_Ã;Uh8 Pt"pAMʪjUw;'?Lk~ R5AFqNϐȹj s;oҽsܠ9VʿwŅ_aƻbo֗×Kep۞IH3#telnmAu43q?`Ir5Ii)$zV́N? K'$z_`]F+֖e|9>zk5+)kWoL*aEcзzCbmu~"^Wmn?cyyˋ;gHd)hz0kX,_&齔60Z$"W(2ѭzG$v(,z^:0E/7p̪Pݦ"9_.xNuad[Lvx"6q L Tξ i9[$$`H\3F:1O.z" Jcgчy>?.Ε Щ-b߫P`>Eg4AVQ @pI\O:X"&}HU.[fGc7[sD1h4"v- ;*wṃhi@crf[GzB矂T`.aOoG^!Ivȕ+xדx:.$sq:!L` v:»"u?4iPMeI9*+m7 EۑadR,~<]uŰ$w{a0ڐݯ%u%Xe[V}7jl|2u%_R*$yP)FyF,5,RE!Fezu+/h!-EcTCLB?R]fsk\c %̊,:(حQ‹H19 NwUSax'SM~Is]H"TzŠ#ye{e~v :T3-NZ ӠbqS!^TeFstr#[~=&>g`t.Fx۟;w!/MV/(_}v4i"U_((Ω;FZj^S5v*mWs]gHB*v^6vA~!e)vk$vMHoO˅6l';lcQy%]s nt4>nc3a9ll]O`}QDt6ƈcfX{SsdQ edvRMK.x͠:1o'yi#/ݡ.ftir3--|)?:8 kcpY%]\ 3h>s Y!. ʎ @X0?*z_Alx%0QtFF >\8-=! vs OJQ\4uu 6Aߦdi g!&cV$s0OwŴf~à_݊|E ¾Ao_Jt;Uꞎe;aa-mokNHD S ?~65'gժښi>':@W |`RGuCnE8b]sWfC`a s5㠱yrEmcY3<іM#}6F@+D*ƪUN`[syc8+ԣ1؍ws]V*?r>h[iQڲԔ&`0L2lU /1ڋOGMΧ4<4ڎVֵhѱ.ۿ ˣvi ND}Mk3[wl+& ڭwϯca:-Atx+}rq*Ͷ{Z2Z$]ؒ *Lu6f6 "6&-$vÏ8'҇638Z\O>@6I}U(uilv;~?5S͹{Eaw_óTh-~׽͞Ҥ9gZ`i6IgIX2R>8cd:UۡNh*r~G^y[Miq_ ZgV_>qnMnߊo V OiKj7R (4{TQA0_r,]qt}jd6W`J!ItIR@ãwl΍;oww- (omѱNȶK-|܆t!PkTYP>"E@cX>uxN|,6ICoHa!YZe9jDaټqGa@s-#Rsլ}@ߚ軚" _&:WOdsR-(7'|hI'{d엡}>OQRE'.֤Ly fsѕ4w,WQݓ]e) A ;;k:!iFuLA#V)$aB\=Q'+|sB]m ˖&MR+vM! =e}iћ)Ko#7JpۨrC'GuE{?>Hnyq WXiUOV& o~y@z GhGGЙ 8֐D+VIq _G-bSn~6\x^A/:An3,oމx5f9ױI\yaЄq\)dR[uoە{3DZJGgnU陵ЭNQѠqυվ_ iڙ%I? AD#&*M6_k$LzeV! ,20)]H!I>g\A![HbOr w^ {6_bm_ 2l\OY[\MucbEfLZǎe8jm_+me,%4i*FkbQNV,=l _n kI&L@|SX24J4}=h0T{*['J_ʻwJ~hWsNpGur#8ZP8Gs?0[^*Ks-|"CEv)HL& ZfBViuF2IMfз}5)~ [Yk+A1cǶCRw8&~~4FN8U"; P )aUӁ`cb湸Qo{-Nݜ;;;eN؝1N͈7rS{Fbv9pǠ)&=㿃 [f ߃ƕ;'Tލo'NQ~/Ӥr*v'8x0 qHMe& A+aƝ~X⾌~t-Twۥ`fOi I,r4 !1P?#Wx_|k4PZu>%~6|>Eb^e `^lkOTg-fJ"1;*҆ ̈9ʝ>5/DŽZZ6/1hQ,OvA1aUY券;1SmN^GuF \ߌ?1;t|0:&r^q33ggnM!;,!Oa1k~6Jrܿ‘2k֪us1`},j3<,fAڄ53'7|,.)S5Di|gpY4=D6r?Y#y L\ˣ곩u8$W2vvH͋a嘆=z!sz*: ̽D. 2;r;uࣦOL_b B-,~,bW|~_  Ƭ1` "DR(`DEAn‚4jD7b#:5 Ɔt`10EgrP7%xR~FR^ZV*:źM]*S~$P򒪪+՛[*h:H\w*f{RTh'|q4mOŌi4ɳ5N";obOCp;ك&V}d+_3MRd|!&I}S+#% &H>wď})ƈt  {96g܋<4שjl4V tB;8I4) |M1^ڤ,kR& c *xGHeюaoWu>/C|LB Rʥ3.חjԫڈ`jU9?&g8MgO"t={cqȈԩLfiSr(F'QX'hvqP*7'gz>t:$A05m,;*Wť[qC~!̧(uz.c `뾋>tT7濙$vl}Mjah//1Zc1Fr[GM1!9ix:W/+g_[y6fқ3c)C8wUӲxɹ24ȝ#/~rËHv4i6 ǜ}$\hqoh?ר7yms4S(#;Ȗ(^}5-wλ}x|MUR((ͬ mb9=qCacb#+1on 1OdQMfjrՆ7AL`1o|F)M~iGoNČ̍Ȝ9VԽL.OE"4ޢ=q*; ?J _ fY>Od nn77.B9Rv{K+Dž uwrmD|A.ȏьo0Ke]ߜ/zZsS6WxVG6/Oļh/otO:MV;y*ӀOA˽nwFz +갞IٻZB ` a\#iވ ͏'$}C*g̤wvyZ< ]/&P>y.f|F(E Xrkr; 6Kc9qZS`z~[ʺC=9Bim5Xc,Ht 8<{y-{~]\1G򇻘r#='Ƭ\`K/y-3t&Je"=zD`:0,yN 5c hJQtzTju3DDz"Zo.l_֍6׳~ m^U_9;+ws+ ސKfTy`E,u]u)g]#>(z| :$;*< "_w1ϐvŧQ!}30QezӱLǘ%q[e'G)tn(ʭhndnѧI#uk+vZ][l v MV{eQ.{)U0aa~\aY\` |AD3//<3 (Mj@'AH}^;vFmVMooh{DB;zL2cM,hh0#s F(XkcMq%0mNP&SKУ=ee&~ve˻<'AMA ['`n1K#`aAn/Ah_/6<% iT04 h[ ,-c3]pVb*]*8uF CnB3Z 2\nj)fk)޻P*2R'4Ll) EQ5?Z|9?9EA]"ݒȤ>AI=_/66%ۧa*+sӿϖZf~Bّe4ok^**7FDo$mqY0b@11jݨ iMd~Y&3m2$., %1MbLą{{uoթSNU:^m䌙#m~6d?мdo,y<&d6?k'&)k.P]/Ay|%x"ޓ > r~_LFh81zt/0_gKB@!g( r :fvet3zrwNVfl> jLg{GJTI טdV,1Mc }!~<QNaE6 ;cQiTuu78G.% \#J,L^,uɞ亭8p؞u cZ%@q?) O "x@R#,+$xsKmvkM"q}\hkMF#DxF#KlVeA4>{89J@L4@? '6< `X BGb+~!mI6 m;mG 1g:N qڭ TH*6V~x@i0`&=!ab,O,;-,{Cew+(Y CDz(DQ]M?w[0aj1.J ĝĕS`?}`#/hSew0C?ņ+k:$jμ|A4%Ew~ʟxTV gBD:rќAi[VsK|Fu_{_m_ҩa)*L-JI:LF @8P8m 6D͍{ #NyvGa(9a_68)eHO?eZ ɚ$WP=ِ+ĦIIxI]{rNd+BBo2h~jƾ[1?\m9w1hD3j/ Z73)íg PWLw }wI̗03DXz.P/|Ns%I[ѠZ]{+mCEt_]1><ed؁!^,K^+l~XkqzGq:0AW6@h[(5#ҸʐʽGr'a b-|44I `8qm$cK:~a)<^&9x,wa?/HCD tY!(Tlt%8~mF Ӆ+y)-3".CT; {2:yd.[V:c:EX>`47Tb󙠡%RD!|!Vs{K<O*сk u9j?ɡrwd?-gCɪ4NVRb*%(!›QLPIͪmJ 6j=I/ t3!Vnzk,0.бX ٦z. 5$Jp3E6Pp-P[~z`햘ƶqY'jA,9DsCyxTirģz!@;Fub hUKpPh:L?f,k۝h ER1՝uzTy}fЧ`}zB68usq44SֶGi/YIaek9J6<-u~w.!]R!W3^%YΦaBh/J;* Uznv+n [ 8IumI rhj!fء#v)J}8;nMYr$KOP\mFX%k(+o:N?IkrޝƆIrUhC̉s0~r.߄,ǻ͸ Xv^._7m4dMd!- G.0t<1EtL1S][r1k>?6wO>!5_ij3k˗רC=dOo x"U r\3?х-h}JвVdpIM@H~5:{`z C߉XS Ps`!XԩAQF.m03KV'mSeoWNaj=/h[{2i6էhz$5 HBkQW BY!o h}ۜ ucNuƒBSS]/H$ kOr )[zی[5)ϑ{)xM,g$+~U2T@15WnG3s_y| 6Dr+v;Q=[m;mkSsn[R3 D!W  ¥N /'Ikq|'\ӹq/TVe}4A.+:0X.뚚mJ.K;.?][ց͸nu"AӨ^fue=$'@KxLo6 V1}ߕA RR#锒AᦁQa5$2}oJ/cY*cqIbr.wkqvxqdG +P26 zeaPc}T*5 n{FpmQSsڼ-طrۧ/ d}s1&a](xqBwR'q\}fl~](~2u;8OX$qc翼:.=osQ 6,jr4$0rv? KZjQ%ҁxN L 8Y L|06еt%?yP^c&VY .8Eǽ&dx/RV_. ?9 (ۖFb^Y ve(A`#Dkܻ32>r,с@j \%懯,sj|pXdb2޵ uMH@_i|kQ Jj8xz 4u xJsUV|T, *h $ P֗_9 j}{) aƮNmk45"|]"iAxu9AZ 5..0'h!a2tp:zzIA'ENI #Sb=BXHO9΃k­|⬐[ρԂ[YS6;Z>Q R7rnv-6@O^vJQ &eN]tQ+G=.5+4 hǙ-<֔X??8E_430x73j|i!S=4E( hLq1=5XP-9+GUR4U2ELJsNL$rFP>MhQ \ѹRs[܏S͵C"N& ;ѵdśC``4Oۓ31]yȼ9ZSß`[bc5#PlsmRh8=`%{ܶC]gW\0tyKP`Yާ~ĒJd|C{NʷZI`>]+qЄߜpg?᰸0e?:3JVa\y}ukz*, \f_Я.lʿ)r͏܃')]&Hs7~cħѧs9gUb wU'Z*ߖJP m}c\L';t LZ/J$)+>sDX z*lG1'rUn6ߏ =<_ }PqʊtQ/V0r_a*G9%dn[Wq~5V o} ~5p.mi%`yj3Wdj㱳o }<Pt0 ЏR@~E6 wB 7Zc E)g} OO٢EPkv Ĺ 4O3o!-9K+ +O {AX"D0&ߖqewG *g5zwZah}}?A9V Y;=IEOw(3+4T DnԞc:egW)8Td] u?rWW%޺M-kKpoHhE 6Aضyg=)ip 8T;_EA,rڎ߸U42eKYQ1IvsW,ʜm%)0uN͠ ㊣T_κDXؙ8::;Wqb- [sU* !6;E5*LPT!QW$)͟|r8Kd8Y%) ff)>k+]TCCfWK0kFy2s*Xͨ\hPY.tJXMxKgOCA+trt(g50ꍨxpU]ysqmkĠ~#GxLoA(WU:j9~̯B F<4CeXրA$&-!6&;[&"x yQ,t'kQ ahf 6TӉ-_2Ā#Ī1Cf -̻~3M4zbl +G[{dsxѴ !9=tϖ\?\g0viy=zLwU FU6qYä K2]\eȯ8sȯKn!Z֏v+&bЊMB"` Y I@?/!RYFT.'d gLT6_ZLG\IL* +cu̒uGo|pQ@0? e;˺5V /'9QծQ͗rqd`xke2m`UlLJi[qUH1oFPQ-r@Z=֢VE XR{ѣl? b_Nu/[}6,q,JI4H{o?$5[v52E=ypHmyoA-MW˨{=S$jSK hLM@ƴX?'@JX$'v=мg`gFߢ|;5ٌe>ܓpd>-Yc9tN%> ]UNm$uNk%m96Ŭ8){.s u,hAjM2r\7z`x$0 '-72#~/]]a{45^ KtZ J96܄3*4yT^:`8 *< ,oC櫸:U&ZQC I-AT"UvU;v!De*ZzqPDw_T>>z+ w&o"pJ. @X\Iy<>yQ_{22ތS4/Zn^hyVQ!שiAcxqrO}i\{?QFD;Y6DOdo\l0^YxEg:ad:y:[шk=.;Zԯs& ̠@(%x.As0Zg.$(g}:^$ :n-.JJ24Fvuot^*r*-gӬpDspކ.rIb .Z8p[pΦ 2w.< utA`$R3NLo92nƙ@=zkj2XOY(} ǤRJ[-cSwf6q.誛q&Obz^-ߌ2.z4C EZWmg?ĤnIgx0;7NHhT !Q05p\Mmm3%Zu`2I*"8KT\mɣ&"z7fڲw=p}4Pm"His+8R[#DLJ QQŵ!.[u1(24mCPFi<~ T o[!4l ߲{κn7 !MmK憊5PL)Uɪ8\QpR'HUۨ 4B[,{j^ :/B5EE֧XVJz:?%l˳3+}zG#?c )NGi\g=DtD%ekuAi`_w=gvi1W%tݫ#7V@b%nP~xZ(4.0[R5G^pDh?`"^dcdTXGPv/V?ܣa4k^Gmt}aH|ka(QYzHhaa);Zͧ"ܛw8Ʊ/kӻh,6L۔4E>CWW-ezC<9WBr}_q} R1H z@+(ެG?Ĺ&4_pM Ҿ: h(V-|X2a(MS)-G[%5:=C_~ GR^іe;ϣPhRJ2 <_(C)?O{?܍īf^OJ~g ²;ȹ@F?\@cy{[BS;Gm]ebYjG|ˌBZ5s2{2!K]0t@%[q5JPHi˦L V֯ -h%ПvW-`ހ D8Ȣ-2I\6d^f c d2޶d yn [(@Cf9#ז"4TQF|BjZĩt & 4]ZDоQ q@*5cշ^ kөi 7A6>xƝ5OȬ]'l@꓍֣=arKTɲBԣƒR*h#]w3GSB3df рχ ݉y~N:_q&Nҟw5c\zl]az҄2+~ك:AI$oY4~H]!8e^|I=dgC45F.Tb ,&Z]GڴVHoȳ eťa½] ~WW{0i=UoC\_'kj9(Փ)3PhS9EIL ^gVlTJ.3Fp=/7o`3i-֏lVn`lsfv|sI >#iQ v WabKTY|t,n-۵m-6o=W43o&/jxlcMz[Mmt;MVEϦCB`rXބ#8i2H%`AL -HeC^JK bYNȈk3TḐe> À!^gr=πT%  b 법[It9ݲ~o:X>c[A$,iU^U\#׮>;ؾv߂y6/5dY^dN/ x3H+z:lMWz~p0PS}_G' >4v6^PԆ@d(*ڶ#4ۂ@qDWtַzLg2?+B3 iAjrϼ@-RIy.Ry:y+Ao8v|2DutȠr gmi)z;0E^1!bdǠyi>YsqM1 S43xHӹwQwަPEVKLVQT2udFRzzǞl8G۲d᝾ul?PtS rwP`j ߧ" lKWسqP083% jpy!$K Pa<7w6_ŠMKt^Jc)(і. u8WtPz@Q}v$7&7c(GdQq[ԤyFvó32{ZNXf#Mp_?oucjòWCq d'׬fv~(a0GX}YO&l"y즍u$]Ȑ^N}ݡ}h?SϖEliŽ0-i*e Zal.;^z ?ҀF\P ɖ@ "!iuJ{BͶNn[|X3j*mƌLPM=G[{ܙ!GsNm #W-,!|_ӏa6&qrp5litM(EsTlrM?fq=%D]5@q4 T3/ٞcQ$}omB&|X|G< uoGXr)'6<'?[߆T83|_W7tJcYvB7݋~A | .ñawAz'``JS6wrU+6.4ϛ¸( raO|.n[ ` {`a/mogEU8bR;j8Pd>C Bz_d+0Ý2vm+XA(4UP>S=<&j*t-ZY=[F(P#|E&jrTxNОl g@ʏRvuvH(̃Rh_QA~$԰&n dqsWD/oT9E@菔bYLLC\7 Λ|(M+[ROI.c7];2w~Rxo\/$w {U J]'DpD]MM< ~UDp n %k傻Jp_g7Wp -}]p+JpE[-Bp_Mԥwxs-+fk`KC|px`1̯=`6nW>ٞHr~K|fC~fK?O?V>7 )rC1,^}r 6ӧ?~ ~8бe5%0çOm^DF>j0P;Lsخ/f v7pj[V| P3CӿnrB(#>Mzb>McX;vm3.k?-cT sc@IA:0~D9@O9EXŮNgL7J7]ga VD}s~/mH9KľOf}#+p0),sP*k1_47qR()@ ӫɂzX-~{[oB8)4@4>Ep hv׶W`"P\(T'=#/\ 6os%c?8.tD1`!w5GPK;Ż}4@~cFWK:忓(^x`^f@ ^x`^f@a|`^0H ݯ&p\ ͜55Fi,--.UKMEBcYY2cr|n y$<{JAvѲ))qJ9&cXd.4fSŹc_/aL-*.UJ9&sQk/7)C ~QiZ]boF9+Ԃ삩 "Sʪc $>s "UTj)^V03+ur9/XJS"bBcaqjevNd$emRlQ2?רLBKͦy4&"OO HH7 )O' $S2ԈHn2Y{13sXFd*ˌ&s ,.VfA~i)C W)@Qxe \RR\ E9`qG >_Fr 2+I4VLʥPA@T<bd{Y.-^ 4hBE_E0/7?.g@MeL82=^0>kb,^*eEe٥K'J;@w=@}<(S'>B\y*v{7t yمFBg5[sVN[2KWSn_4 \"@DKr @m2MBg#.tS\2a"#$/+(^ )5B7e,1ހI^iqC0FlZe@xEM.[*a=| h]r~iyq҃DoS}HߛL!$^së<}뇫n4P٠!&SPn_R!2c)l/5wk7!!OGe2RMm?&T$ԷV BЭmykYx&f&Fa\ ?Zm pfͦAҤxT]~%һFW& {jyQ nL#t/1sPWLJz]5v0l4'F3r}l_޷V6Bl_+)΂hHc(%*>cO#+Aӧ'o܁312׳u˯WY([Zl.w}ѝgěD[E> gD+OCכ9oK޼QKD۴伞rNuKTyys{:s&ZE+z'm ,A2}z*HtHyq~.+(6b#)(.Z&=)hSi9y L V ^^S򋧰`>띅KZ]śJ;bwO :;JśJ;bwOLCwLPxK_{3H4]G{#]lvIdUC?Qޥ~&YpP^WJEygLn^=< b-ӃB , 얊|PPB(. eE# `Xtc!CB}Y~p em’"c?wholqT,4k&4$xO1+btGd\$RJD//$ɂSh$#g2´")F*=Ǔ"2(Mv)Dj<켼2GQsBr.Ruvz*qk Pgp{x/'`'o'", BȦQ /$n16x < L o"Ok^><8 ޸yt/T_ {Lח{K ɒRc |fWbbg`H)GFs"wMEf_YKK|(^Q ~{D %^x(V>8=ds-sv AIAjF/isobàT\y-3 o?}n(Q4QX0FsʙVd4/s}œez{nLb}lS_}{-uca}𤡌гx9}Qz= z@^FMBy={=-Dq(,@ɷ 4QC\,5C -d iL Q*嗚sF\N`; 2GssKeeX2hEQ"eIќ[ Y+ˍe1>wr`?qčwV,DH()"f:7\PF2O9}qٳRfe.NN75s.9)(e v xP~DpCgE/., `Zpt_+<#oL1_"ipџҕ ы-MlP&$DP'aW&!;8'%c[S WV!cDrSs+#'=c_poR =@"!'^ Xq2zuԤQE}KU}y'>/[|frO~eC[osg[>K׸7_y~WO*~77tg?+!27q sHu+*'OEV~Zu7'g%?MZ+Q[XwO,!5 ;0kO >u*6qGC`+ 2T (b2,TcpyA *3*@ll]*s +Ԉ Յ E ^[`k%P : ZP>@, dP#@ E j u+cNmp.!v#FK0rL(xsҏ%G^32>Bv\ wG4@Ч 0S7QAZ/ 0s Qdx0FBbPJH@6:W\]x !vqu P;'wK=#!pz X`xK_ni| 0bT [kw퓐43KqQ:2w 1+0 "CaA5DF@r3IFA5%r+#Jr;ITd< |L $2L~LCIђHEI %GK$S4DI N-$4Nf$!$dyаCa,!d)ɁH2G OȢ+%er"cq,ud= B*l$O*“l"vHQ~n~YI)g܂.]V fcNxɢ>/9ŅE)^̦/,3-5}a7ecߡ}F¦GqVAN1qBZuHyF#j_t.ZCKqzcS>D_;wu>DFȦ>*=Q" U}jFjrcΊ2sh]4CB nbOt/F?!Z' <݀.yROx?찧ylm} cl-j 犛3/lJ;b_%]xiKYj'QeP /4loTy{OFLӃ?!a` HꟜg*c?Je@phtyྪzqƊOGLKMRbKK>bH,u RHl@ !6?bˠ ;Bq)ǔw1%~H$ӵW>=@ϸ1(e"B?շ~o@z#epcA H\,~WHȧoSVD`y`I|'L5L# 9o x|Fk`|F>k`|F~ o$dA 98,!w˯/K>yK\5^ P5iN& `@F^`?!m%$-@׌ n)xMpkcZA.70LXV1_dcdL]0Hؒ$;ddzqia6Y"^j4/-3ɽ`KKE3!RxOw20TuЇ٦峲  z朗mxΘT\X]{$gGw4,yZ40@NYEd?x+ADᒍU8 Yn.0#b1$# ^YP6N3Lie@-.WD?]c.PmҽG/o Iy>f[̵ccZb[bPdxAww\Rqǩ#_Do }/*M-VM>.bRwhgjjsڱ3EZ<굨D5*:$zuѻխӽ ߭_ZWؘ蘇cy9fg1cN]! 򸎸SM|?⿌*l %%JL!~TwqMǚ5Co /|Q%;ÇDDTG0k, H{ѦwD-ݣ=;ET'_?3<626%Wc=hc0T3|dm74nJ..3nQ\Yq]:J- '|peH xuPmWorM}Fy@N\<^n o o rDS?m6G{@{P7 {#gEfEGω2裐7u2VCWf x4bUDcDkQ}T']ّOG~ySTv#tN_@i%Ǥ, uJ;$v\lz Ol?D͌[9.4~R/OMp§ (%b;Uճkԝa8t͇45Kix}&"*bvڈW"ތ8T,<"\~MGxCmGEHx0"?beē@[#vF)=_M}@k>}Z^^E5H]ّFG>Tg"F~'@ȳQwEG%FeD-ZUB[QNF }O觢C[?ԼF_ եu% tm}^תׂX-vZńLHLy̕ulV}?L0CgY`qq-Bmk>RܵDPߑNk' _&Hp$5ZnuzzENC-p45) y^&/4G5g4'³s^VV]YGLH0FE<Z/##8q-bv6Z 5eڏ_kOk"oVy_HK䳑320jB2ò'3jWWwDkG/~4:OџG> H}N ]BEnhܯtVx>Moԛ=?^A34fṱ1bug<Sl1cjc+"ءNCo`Xslgcߊ AG툽;0IkR FCl7Cp03\3p{_Ց4CEE%'303 **jvDn[+&hL6&h/.&\5ɚ`n&MF}{MUͼHILWuuwuuuUu~9G9Ӝ<*gչǹu0q> #]7NQ233 3dT(ȸ8c_uKJ_dș2c22gffg.ɬ\9sG2gviЈ73?6w/cdX6/Y\fr/YX޴|a FY'Y󬋬+euNϭWZ;I֗i5$'LJHIJ[}Kބ'\p{С`N$$'NI&:'&>1ֶҶsӶwmƤ`I4e\]吏L{&xka1!cjF\-#-cf܌e~F=o\8͉%%FHI*iZrqrU|[ꔍ);G>򷔷R-ߧ5#킴1OM'woF6Xn|`1| P2X?%8&)<&&HvBОSHa {}}}۾mIsRKR;R>^WӒդN;JڨtXU  ǕOATv{'ted:`8 t92A왳2Kkg^y]槙8!_A?3-+yO%6e>S@_- a] !y+& #uBG%&>86ul0Y ?ǤW^K<)f~}QSzRJy*%fw~3+SoH} ɯ5 Ci|}f(闤">Ց 6w_8:+;O8O9vƁdgeXqk}0Ve6f^8K( F.+,C-Z| a|Rk&HHJXP 2{C9!6m!Xu lWںm&&MMJX<[nOmC Iqɩ SKu1܌3iOM711%1=1|<%YTX6qm4 8[-ae QB%ږ~f J < yI 掅" b,gRVR6̌I@oO%FI }//S_CaLH]<:9?%erpʊm)w@qc:!u!!Hx^ZYִk>lڛi_@nk ߋ&8G(q8:np<s3֙)w"C y"Մ7aVJq9:v9IɎ=2{)c{z~߰C4r,c)@;Ή5UB_AT#=7v~Vu,tvs\w"gy>'PZ֙֋ 4,"rj{}~!DWۯ8NQ7*H=R'ƥ&O qԟVA4m7HԛRoK7@\q7E3Odb1Y̖pK%e 6Y=2ߒo), _eԀMkA7[[vZZ.tYX\sF =mr8̈^Sg-[^ioX;sW𖭊dBJ{~##&H$`g&X8$qeĊĚ:X!rߜ=q'!8x%%3knsf@,o+|*XlM6۶úmb[̿kll7nݶlێYT^l;m;c{?}e#IrdJ2''E$E&EA$35iF%V%s O*bgOz1Igހ8󃤏avDd%ٔlNOHLJN lK'; |拙/g&J*`kucֽ֝֋]jzF-M>ZXH]IL۽)Cy ʔkRܘr ;R)a ~ٔS^53)oS>O*eb7p{=hX'̀xfa ^b_i_^kݾڝ]+ hc?nk,z.R#aF%x {#a~͝D{ #CF-=>3ô׉y)t[|p@i<&QZw9f@ ۀQyyӈ9O / S׹[*ݮJbݣr6? h9 ]K fsqȽA5O$m=E<4hG,ѣYY0kýtMUHNh N%bA{˛ݍɋ<q hVЮՐen@ #~N>Kflkj\AQu-5Uq?"8UɁNmCj[ƒ7`N[[lhVX۰ho ?z[n.)?sc]nozYUdgnN~6ys!BjYYUh R3LTH@r~9P<sdF᚝?+kvYE , Ա%J̄l"/wqْH IvS;]pqK^ً J9 CU8 ot ~TW0rW[Mn~#-A\؍ ׬ٮs d-)XHV_Cf^!ye*hr7I&iNmJ?N*Os;7Wߟ'kʚ # GsDT Հ~X@ zpUD.nna٫gh;SA&q+V׹ZokU[  V\ޑ@핂a|b Dax bOo}3m~{'~ILoT7:T2{0yO?r iWFAz\_F|0zt%QlqIq Ʒ4Ƿ4s{Zf_(61.k5 uu[žBdֆJ|YH_ ͏hs& ;dZFnWcKԈsU%}ԉii"HW1Qs.k$.ʪ[=6Cqh T8TZSHL]TOi&҅HeU.`K B~'BF=+٫yE9P0dY7InѰt 臿aEԆ&ͦ2 GZ£[7@ !y W2H6`‚ť"pI~>I E6";1Rb9YfChp\Nqa?p~ % ,[Hx|[3DH$P0Nb'a'9!0[CF`j~QvdDq쬢R2M#y%Es,̞C""9N$azV|y$Ꚋ*[**+9)!*xC*N3T:!˸:#LXp0,_3բ C:~.yr j9a$^kVpҞKv |꨷TS.#V&tI@vC_r'/oE_976|m a=j)邪͍skanj9RXԖCԬpb3v}\:@ĭICidO#}Y6޵ХX,Qn []K(f5- ~EuX}XI"#5\d ۥ:j#"Sy؂O渍pEhWhAZ1 ?c">"}ᴆT#=W iUPXܙ[PWzQvU#ՋNmMMݦ"DuGt+Py.9;Ugy/>һT灈WK?N0$vec,DxMtR񤩗b!`ֹk<97@I*ʔD<>~xJ?h d-huAAW;[ds1.GRyo F,?@ dIz>pU=pu aej7\g*!bVŚŃ *)yPE*p uu7A.5a܁W0v. øAwwl%Hno øG 0 w/ 0^DƋ佒!_4**0M2 Anjk+@Dԙ h6^ jPOuS ¾U[is;/՗UזCZd # >JCIJ?=%$|D:_䪭x( B[ ⸶WMH<%$BC z:r}[,}PladAFdpp/s"|/kPj# `s^NK#J/B{(>1#9.6#l8_ i8r5xU*UUގ==Eh6ȏY_E5^D/Ͼ!v(h.] ?'0qX =?ЛqBHFWgI@@0v&V@zUL.xu_GF6o6_C-** 4zr/4aZڔN _Wcر8^x8-nKve ŭ{~.wEmcv(߆/s.a;~;l! ܁8u1hKSyNt)<";w/M6Q,M];UK( U ( UY{*ܨ-M &]T~2gR|*_g؀8R 4zq :Ō󯪇9] 3© " 5+|y6릅Е%@ 8a`?1䗯^顾2Sh`Nޑ_R@B t*W/꧂ET*xhQsUWQAa|:"AEK`0@#pBPBz9)PShoݕ {j &T;/DJF*? A9+`bi'lzO e!p)WB?.)~]>G iwT%]Q{yGUB?M jFV\J+>=JGfrs=DixZP$l PCsD9 ⵌǻ}3Z8_s~ET0 }YsE<%:曡x_< ھsWGnpDv,YY-}&hyFRW$Ld#S+4[K(G![]%* d "#py2΅?r~xDvIsFwbJG-kAbFa8qHn'mZZj6V5aMJF'R z*@`~+EFmf&L"4# A:]Uj!ѺG{z:~kݮZ 4 ^19te bqu6% n2`H 0 Md#>B1 F21$3 $ /Tk9xHŧ XPCOIr#31G 0~bwo9]hI||^ b= g? j hRh#IN/?un|ղr wLASkj~-U?09wQr;>$b}(oyY⍅kFqVs}gmC3{킺cy+nXX߻F^> cz0M03 %~ LFIJ-ʆ*4$E{0'y>x o9f繈r;<KOC'&ehB0THbO9w$8Sb֣ju yr x*8dj y7L垝.b O"uXCEu5@IءہCP?;5?LD,B~'#O 2 /.Wa7pŕ"0\.flee5)k P)j[0SoDXCw UeN~1fm:mn9GsDWõ?RZc!}6p??fJ8R-5AVr_g92jZWeJ$wpN^ M=ǫ x/ | pFfi4 C/"syAG<TL LlFHe_2|DoW|5X*x>sh8Wx N=+>)O/!%&^1x NHCRo/*Ӂz51%a@Ӂ<$1ΣwƴEjLTQǠ~UVkk*UD'E%4TӈhU>+cTh$p"UIs D7ֵ"d>bO!Jx*L*46 9‚zwA0w|d!ԊӢQj9X}ڹbrЯrF%i2اSsdUY euxjgBdcC#4VLCgl@=R1fno½]z py]%^uu=&2RyNt+qjl^Q4V:Wҝcښ&GOc ǀ0,퐈'$4P P1@ _aBLy $V`)HĄS&: F@kǕ'KF#ZN#$y fnl@1FڌtJ9MKu(TxQ1i qCIzx (t|CHrr8(LA=Ãq7dO0 8s5{WBUr=yyb.* W9hm oebH.^B\⑸"@|ЄrH%!|k+]BGcC.( |D"m!j@ JT \OSY5F~3C[TބGlI0՞HQ|ڻQey ?B ڒipˡ7^r|*3+eKcd>{,>)U  pG퉍ʹ(TC(w/lŶbks 6pdCBKB:|~RN2E62)%.L ~?4P `8ӟo_y/eב ~}Z$a߅A6+?&? ] W 7ɒPaMU/ T"iZGjUx\&7J]9gB!Pa|@y CSi)I>*\վԮr!S(rѕȟ98_X0>5#?//]5\KCR1ѸJ8gS9(˚!Z/ Ix Ij0nHjq?. HZt$IPV*갊KsZ wB!o$vS`/Km>=ğ(<)/vXU5#ރxT1uBn &TwO%ťN1#EB>#Xõ$g%|,Fؘvsh1OISQ_ۂC͏7iu@?0Q 6fqè000n6@qMؼ{yߣdNB -+K]&X?NCK^8D7~Su7Q3~ jlРX!pkbH8Ho3tQQ1σH`}h}2}k0GtVU+֨hQZ& qtp@~^$0l6qt [`y ܇ƚ!|8߇HVר#{E%{N%{>tWmcP49P7R9)3yEA~s*@a-,4F<%(1`R[ p3Ag^AVV[6P#\Em&ֶtf#m[!*l!Q$>o/槁amUY6bڰ=td"B<܂ӵK j4տ^O?VQPꓑ![ ii"'Ea/Oc^*=yT'd鑰%RgpD@g x } qQ}MgO;E"k1KX5B^ %xjdl(ojWYG[AV&9Z֗i\r\@$UCi\K.hpj7)T*%15ժ}^UAor2JͷՋ̭Û*hpP;'F-^ ]ʘ$4Y5#W6j#P{Ip$sfJ!wktshV*`:]عF.|l:#8gh3Bl+NXZFPbRթ=^B/N^D1@\!3u>\y6 !VEuB dd?DVze K!τ P3J/xv=L'x"Ct(]1w %R\`^INdT'9w!xiA툀ޯ.1 B.;t!@) Fu5x3 &sz/?MХ[#MH8%u laS}9t>xdreP 37 }ZHFʰ=Mx@')M̫`*rջ10hG?O7oG*2<<CSM͵meLSǖoh̛ɢfY6%uAy>fUv i^U+1KxgK!$tL Lv YH^%7)I W|w ;5o.}羒] pGN "ҠW2 W2W2+xXYW2Aھź}"Ǽ:ĞĽ$cʤb}AQtEqB͝0 qmakՓ'cŀ͈j9`UJUUM|@Go= {g;B}YE38qN02a·`i`b&6ԼNmC׮-eaEc9awe'>4NRBC}4 (”tCaDŽa8b„12%0)~A)#< "Bt i &٧P$z06+8*bBfH]ygsL@왩 2a/)%NA11O6ir?#FMm{4WB>F4a)BXqEqҤ2w}i+h8B bU¾1}Gb&(_$=FH} +Fh!яC3w 'C ~bQM#;aԛS(0t\#zΛ lw^#.3t|Grg$ zx[rKaEt$I"m+o=O 8{tawfl^@_/<"Ϧb]d^Aw|v~ZkW4, ΰ$gL_mdÆᾊ8;M&=쥔wo߽+oֆa*__п[AZ?þG?$3x;)NH UiS&Hkpޚ<U*)qa#u@x;Ã8?zW&f[:q ({aGtGcvV#D8@JwvwL3Uh/s8t`T_0L7 F8cr#N|hj!K>&"A$9ړL؈$.3a1lG+nPs6ގwg $'kۯ`w*\IU 3au^Cj_> ׫pUZˆH_cJQ?4&RCL'@5]zL}I6zUi>٫bЧ j7zkikq@W$+*->8^A! j\|fy )[lzJ QT XOi&WqجqP"qUćkļ;Oo'Z剚ULf6g.Sa8MU|\@7pw dԴN +I AS`J j@|SsWõP?xD#_BGCn~+QUP^ZQ)*M'6{2[6676EQ-{:ßWd]j^_PQYi n5'[D桄}e;)m=/p2Snc](,)q^ݿM;[XbbA%Jm!Q8؈8vıa6Qr*Ɨ2AIɗc=Fd.yeI|3F|c!7)Fu=,gnvwh9 ,a{0j8.~u+\P,|s!k nbb5W 0J;0 |#V23ኅޛBغ^i¨ݟR>cZ9vPT앭7_P{sk7Γr[gKt n`k^f:B`kw4Q}YYtt.H蟴f>69L%lV/_Žl;#ARI~, ޷ Q!8|AoߖY^%t{OǟU8 Aj3JI 1׍\y.x^R{~%}WhPf3wfgag۔ذ8\,_ s]|ʴcNedlt.}<+3c Xʦ+UNzt%T]z [g!ݬWYjjF` S lSe Y5#[7OAhS^d?]Vml=LXQL %>Ns* f ,HxDbHOzIx'&bU~EgˁVx.3v_F,a?+a%w J0V^$ka㺙jY'xU*jQB{xYIbf w}[3&BI=@w){lPO`1טpDoP|cA}m @(ZVF5U$O6)Qdz,A,E J"bc/bGK/xo>UO!3qeB]`_c+YI^Wd)ӝ,WU ;A(8Ʌ%.[;[i$TzLfLf {M9okcAU*[iq-TueU+2x"Ȧb6/'Vd7-sܰٗ)#vBn8Y^ΥRm=Kayv6DZ8R}p u,ޮfXsqm8ŖKF쁅==Z UVs7K^Ϛ]w_wC٪pQT*(?(֍Xݟ vݶn6ʽwnޏJh}!߰%g)* `tW.C+,c:m,|enh Ja4'Br7]c&7~ΜNwˮݜ^c{snegLk6wC&ϝ lx(dwBnb/ma=P͹y9j:؟LDsPa^GdfZ7 lSDe})MRpS7>j 9i,Gy]K{ޭ},m(ߎE>f{JSrR+)9 lcӒe8_㊲g-; C5a֙ Yw {쳓!Om<6Cg ]Ga}y1}` J[;`LEVG`uУD[s 85+və'`mc.{[m9%rQu[tC )r<5c Fi v䥰\vr(~f 7UQu}NĽӬwvi)˃r0wI-]>\`' M]pz=cR-L`%4>tG͌Nђ+ bOIJ{qvC!ܙîֱEF+Vr7-tM(-r8;_36JܝW0kal̿3#jE*Uv`&*d5}}Ev6h'kd:B*`r6v[N8:z4|H>Qzi|,dxwu0,k9;j&M}cwAvL+; fz,Gt40÷R` R{6C{cz) sK%lSrft퀱RXDD5L ں{=̟*GѓCP=T`m%H-6WɅ?Х=&7R>pm=wX;\r%`_Y !MyxgkK+7LgNorTqz}C?"rYRR" )+˥09ߺ,ggrtgvl߹:qF) N(e9Du;٤S,0u7*/PB-q{"-ޣ*}^s}Des7;Q 6mTl&*9J:Vrߞd;?oC<řy͋W6Y%,rhpshrrfO5\ \|mc+giB:CO&a]w:Axmu-tWn13:cK-♹y;(V50yXz'Jg'>tjY.#jƙk`7c-kYc=|Z łU`>DZ,u(#`R6'ok/)G4ՖBt/Ymq *u[mkUFάQG? +=|_LObmݱ{c%NgR4e1+Bm}[49%# &Pê+G14zcYuż]JX< aG~dA;8+u[o[0}撢i{؆E(( <<[9=#򕞏:9BJ*NwvVr9lAN>5JijaJ)߃esg~ ԺYPDZ+c{άN{~|>?eyܴ{&"ȢKP^h-0x f̡~B"!n6Txox ܢtgغgB*KZF),'ƾR؃[8W]*M ѵ>p:W.ߠwcr}nlu]vh-NhjbKHW8XjR֜lX.R(o9U#u9#NJ%5<W4OJ^!}leOkƻޛ挍wvפ9VeJwKX{ ]?7[*6R֔"z `,\sKǍr|f:c7nVLeft2i#Yziva @, x*qفBف:1is Y dziB"j!NCn9{+2+PJoNtYպAtu-v˝ߚ6wDx`e*jiZU~X61- $y"? 5?xYW6S@NH0G6J-,YWoZ>_"A3K+NLU?:>Ht^A gDUC/Ro㴖98eC_|4 ^&B ;%J#8/}b^,MtJ*ɬՐ#ygoR,suhQ}tY@ 6 Pӊ-zb-^K}T5ZZ-Zo}g=sIBs{?_>kfccϞ3WCmLkɔχ?-Φew6_^gwtM*hty`&q9ǏZĹ8%N)%CA6]$R!˸=|a W^A#VFt8VtQԲ*ʸ9M ]6%h0Avq/c]|e!qMa5i gX]3)Ks~k?6?~zԡ禍[ͼ:#oZ}6s8sAgX#D'HOSy| F OH_32KC|j2DD.1rD>Nx :C|B{g^+ݪ+B:C%zL\@Es$)Ӆg~msBS[{t~p(TN[@xufLQ74&Ms!Ryz6M?V"13W\qe2.ECKi|.I u'uKifJüP}nS:_F"E<()&" u[hZ2J/!cU Wǚ[c5iڵEKjcU fSI*\mZb11%%-;wItIyъhɒ+ċݢ%b늒Y]S(9;hUmpu _hoA!֐Ψ[_@p?|y%ZҬ>ezC,  ˈ>ѰX~S/LHV(%X)::c*l)` W%!+p |Px`y3vK6.,ZTI-';4}EDHD~A"M׷ ]pIEPx)SH Yx&Dxۄ~s Rw=7Q}Khcb|;(NIW.TtKMZ-[E+:{=WHm]*RjX NP%*eF,^fQ6^*E?WjJ]fY*xSE0f%V1<,b:[c1M1߾Zs}t](:a`E[WJ[Ifݾzܶy{[!0 _L$"%jX|_R'LNpm!]V10;rETR݄A|7'!dپʳzk73ρ'zn{dypX-5sk;_,\G'!uU;bx$] :[&S2W%Dhw)(5b9sht3SHU X9~IIt樂;l-#-1`=xi|Ƅ= HqI2%ˤ$YDPL@Jҏ.7ND)n{$E#]NNJ731ͪM83 (xR`qgW`~fzs[rP0Mx`{=Mb#abRݨ&ZiY%)W+7]%ZժM&ׯ7n!|Z _Odz {Dq?|( I9y)$9ktk]4;"E$w)ŝY.X ,u)M+"e,V@< Up2<,# ,a8[FGdlr{!|B#Iu!wŽZ7&%VϢeu~׊yT9~(پBzi\"&-R0R`˥ a9[ၯ>5;{  kJ,ך$ڊUwKIqR¨1UjbՕII-.LS'3 r*wpws4(fh$Xmwҿk$l7tH$E:yy7EIIVܫ <0͔/!"lŃx'aX5!2.1lDŽUf̟-ßfr}J檬T*%*LIE*J@;7;HILu,n 4ϳxE+,,Er÷0.W)(\5AL#쀣Y2x`0t||eqeWſ9 fM΅;K ?$QU쀓X (d`QSI5l]JGIòU&JR[mr1lR&_KY-R{U;:%~>;ɴ28l#uan.R,S gufk;JI!"rcU.jwl.,g䰧pW縞R[ N`D duTZ#oCTY 8-ifO\@j\u |UZ.E,JBVG4<L4WeÏKqXr.p-,_C),r\,g ?C2u-4"֐ Gb JX xG$e$"\l(? ՑڑNRaV)pCI7200SE[ it* ND~"q.*#,gr.Q#,WM#{\rx9˹6,J%pMS*'8׀?qJw"]BmgB{€͙WrUQ8Ϟn^B UJ X]au=k7;mUN1,N!o.K)7I'GB dSX '+$x|Y%8"lT ~_{Vܧޫ>EZ[>';HajyVzX",ra|C?7\ pp‰|#xLs' 5ܭAjՒ.H9=eR}h߾7ͳFɶVPi4VmX1ڬ4*,R9R0R`yRKFHC3oDzr.p|:"pD,L"ޯ#P\1J/fHԡ}Ǐg l_bDBU&V[lU*Gs HOqszVJ=+za)V#RJ5>%{Jhrs 0G™*+bLŔb,v( (TT"Yͅ)pE7e7Hfy9_˾fJ&!+DBLі9* hㄸ[Rܭt(O? |l,_`9yƪt,.c9<\9,gY9V"S2F\1c!a )pX%NW銇IX;&Y𕣔X9A;Y!=Vk $.ܣQX TXv#'Qv+SX `pQj%YfnjS,ߔX8YUbp@%q J6)pъ4ٴ% av_b}J|YaKfX@+K, ,:f3 1R3!ypr NBDB5 ZBwX8X)6ӎx ,PW8]%ʘ\e&EjE۹QyjCKGEױZbqXXLt*u,$aNŧ|[ fY0;>"4Ox] T'.` ^aWs#Gjj*HBFWبM[WL}0*,Ske|WgC r.PޭUrK 'fy w~Ew{Z`̐ " ["vnyAxQ"$)%HDQ*r8\Xy̗W^OB*a[HQa`]@Ǝ`aYrB% K DžrH?M"! s8`D}2c.+[a0^.dќwNKƲQȶ<|m?W\gy{s'q`]|)x?/%5~\̓b!KVlm(j/rSrb* @) *cra\u ,ꋟ0r\ALOqZV\]|Ń$|/tݨ4la*nݷEP.ߡ&݁ᑺ7OT{x}' ݼ |*6#DQr1}a(/=kr((OAyrb<+;c@\2V.첺jYTNnMO}5t+aRMiFioDєN7}gŀ nԫuc/RǐPϪ=_6鈍 T ULUog5r@wZ~\q#Pʅ#{Esdj2~n tv&AI * Kݲ!6eC_@?6ph \;Z]mޖo28_z@ITh'jIhw>/~ -&H %jc$ر`z8] ]_-IxKsN׽$Ը`ܱvQڝE5 (kBeOԄ@ZzW5jUCYf3/ b?Xz%c4?N}[KKx3!g ?F@F4_Tkۗ~s8h0߾TO!H׷sTK+߬$%gxJo'K`) ysBX?ܛXEy#/|YWΠq:w]\n] '[pTO${xV{8,]IJvU5qgY.ϹxR#[S.HC7<0bgO*uw>](\_>[=5tT:@+6oZ%M6S+s xe*u7 _w|>~)錻:zIq*M-U\-)0e3:5Ks?.*OIg^3CHB#@GfsLj6 ަQa% UwcH7s#yl)1?#Zy6q~ x=;ߍtPT̕OZx\9rM&wߤ>R}UѲ 'G,${> pD.b ypyG%G@D%":"%"D$(+vJ$$>! T}WAx#7;EDc[{-v[MYܫ^+XO0 T6[?-JcR-$>!t2U'ɤ΂>U`zVOHML{L5ät"R|bNPB^dnUJ,89̞#sL(~E h+ìììØ>.7㽈nM'@Ϲ~n*̈ }LT"<1Cx"8YvFȎI n`>$ГT(;#geTNiqi3ZnrAR+Sq!3͂$x>㓙&ނdx3ڑe"+Mvj]IH‹;}n2,lHy䈋na6J)Z`9\A|RxSQmaJfH>MA\,[ex )n^rǣ~=oX9{sr@Y>CxLJ]^D %!7qRnm<lTbFau's~7%9={p#t%KG%b<ȍ#i?KEz {O ^ZC$!UNe(>(2`.,y,>!2yVEt|w"XóUk2XJ!*9*Td+;XA4tʣC$|/GȾIz$DJXNϛN4J i~1ZZ)J+O4qĔ֘]:Yb__1\ycS#۟R);wey06ݙ< jk%BJ;SY.qv6~Utms[svj4z>=$CܶKk-11k0x/-G`eF׹4JS8%ڠyΔ̎CI8Kfx[ f1Ӫ G|$ySoVX3%gt9RʑK7 %eAW W\(FSA0b9|\,g?5N`H4'!VW9]V0 _.tcj(#߃*0'i_ԇ)3) `(ǀX|(M"Kﰈ͟fR\ ı)-cOur 붙 iMA/G]*d9r.0r8<,?+&NXыJ@ d1%%%ذz"ρSf)p7͞wWw0Ko>c8w\R߀w'Ci8GiTgSռDQ[xҏY:A|ş$8K%;D ,AN\D98INf98͒axH"'" 2^#e]W- |K=$a oHe9N4Y\8R~Y΃'8Ki%~%s]ẙSjFbwKXW~U~S&D/v('𸊩yKŸG9U2|6f ACrfpŰD@$U%K- 6C.)7l]>,lb9DxVWigzgKD>-V.J貜]\b@8ǹҏsm|Zzp/BD!|MH:V|rv9x#˹.)1M,_Ȗo?3Y?g9˹MB0< sr$"C4QP9e+ɩV Y. nva*-ɗ9=…ZpƁ!ݗ//b˰}xS Dm#廒(7[ e 9ZaLệ$/^<33"l 3KY&B%Ӱ냐+mg us9xwx9۴% ~.%j ܭڰ8/d=_A3$>s$ߑ|WLb[xC)y]g^!g$e.F @nIYcʙt6>9nmmpG Æ6vj|݇TZ59)M?0O pДw=8'%;d!z3[V Xu0c(1i'ȥKKmRٗy-_2WQ=DoP X'쇔!<~$LM_u>mjrg CBRƵbjFB,* u+X3BBJBSv?{u5ÓGϼG3`Om}'?p'#xZR5s vܧP{f]/ cZ2|*p?'O 7+[Ery|$+=YȏVǪnؕbe69Mx”EZB˥ed Iw8S[1BRҵ<I$Pfx X,8E?a,9 jWCKyG~@OID7?CqH~g.& w#9-0ꆇ(g)C8gI?TGp*$GԮUM}|!~NƧ?Kt^Ƒϗʬ>MYؗv@^3Mv|xE>R[2?(ӿ<&B籽ZWW#H>ևj뫛gU;z]!/_}P0_ ν&|'WH<^*\P&0H%aSĩw.8J`GI0Ma tIS:&T4ݿDg [{vGśյK-x4޲F^\u 2:)t&fp,qGX{p,Z*d3bj?!̓l,;T~ouNOG ] {otKyauCmb bދN x9`x3<8{SIa3e6&X0Aa~JP0xan>O5 Oy# 𯎴NHi$N<=l ֩Gޜ3L;~ˉy61ۜS_:L 8 ~Na!f|Z:1;<鑈y)Mg911sl&Lݑv'^YJyNKL)6}ضZ^"+Lwb'y5g#f)c,$SfmNy}kb"g db:Sp0M>f&aSfN>Hse6i!l ϱ0%_n3A<s,5:ε%g3 Ya37ab1+m90F!͉/q!T n956HĉqCU6m;HyfN%&BwbzV׉90Oyͼ?e3yac/Q`:5Xc3wQfk|y f$w9}*֗6:%pF5Dl/a~@L13h<ՐÌ%a6_tZVNhtFs>[ ٷn_D_"r^oyݺ5~(ݏ%H');_#"ig6HAy36%]ocO%.O 7,w4HRmj5EֹEؾwT?Kc1l i~SJῡ|$_=jC,Rﹾ=t?izf:t!M㉖~I:Kl/1`;B7t*q~J>FIxx;Ӧ=z(5bZPأ iž iQ^7(Ua_0{y[_]!ex8/{UFf͞?k&?|9/1{0:?d[H3Z6~x{Z!~ti?/p V7{x1Z-Kk >ǎO[kigDeiu;۠ˍifF}뚬ǎC} uixPfrK-æƵ(_O5 `N_lccs B 8]O L}]F ~B_Ox!zBĬ'gohjkH>A}T}Cd1%ƿ#sJ 73iuЏg2ҍ^6^qgnLstw~'x;?NqZ;^OL-W1s觖foL-k3u-?V5IUZ\ z学?rϤMjYSXJ_ˣr-9klXHgcqG#ԯU0s͔i 6s91 8?m`^6sf^'a#MJlxb \b(yx(>#<|Tiox! ]M A+13w 5ǭoW[Ai/A+8RjN|O uk:.Ӭ$F4:"Hjʿs篖ٞkzӵZ; fhzJ@c9? i)O~z2_*4?צQ^{YR(G'uycXApϽwc}¯z[g>v! ?NMF?_s\H}?kl\K:'$XX*SFb9:',ɾ>֠~ |8iT?i?ġ sӖ!õn-~y{Ñ~3/ү5i^)3~O?,T'k?aƺxzǴooK:=< ?o30ia)GAvBD{:5=V{T{=~/ =rQzn1{GƣQo(xKsV:g^{?;|a\pBȚ#a3t8|xr|Zb8%Ãmf\> 5m:Eyfck:ѳvVNLD;d3{L'3f3f^ANZ1QZٙ|q[ܚsub c?wjj =_-Jwh3VtFo;S/ЭSc{ii{StY[ekL?ߙ.[^lZ}r7NڦG*߃ šV GЇգG:+udQ[joA.]4F-[z8gR-8Ŵ>p顔7vuaVD;N⾉x!a/ X?jk^8`}OzာXA֗~^< _ X-`&`}ՀOX-``"S^iz_3 ֳ^; k'OX{Ӏ/X7P^݁oDzA  c@g }ۀoX{a ŁwzG€;d0`p | X =?`À]^f ^wkY X}f g@ַ/X/ X_3 E^znӁr@#܀qo1{ދ{ѹxQ"\W=h[Tbh8 )F@Kym@֛g/X_怬 X?(ÁzWoW^,FbYnŻWؿWe/t>b';>^|[S^Œ~uN^|S^9(T>oH~(`ɀ֋Mx@ XX;Y2`}G8˵7 M[{y0 w';_X2 ;k;g[>o@w-Gֻֻ֯X/J~X7`@d{z@'`Y1`}W} Xfހ'ַ wXQ}[;֧_? {ַww ][ַv{ XY?td5o@{;w7no X_^_ze3nc ugJ޿qWO9а{Ni'A<39ެ`g4{|wJG+?|ff1;k8f 6̮|a' f'ݙ6|]CLSz>nݷH\9Gf19≜ÔLsr|EFn? /k_{m"3N})O4({!tZoXg$Gif\t-&1L$~ooI_9bMIz{ ]Lɩ '{ti\::+HgQ>_cfdI/ݓV^b^sl=903LWA'2F+hjITh>Maя)-uS:%6S_[WEP7f b8:3e1 G)Z3oO̩\Һ깍;~ vωS[]>󉩞9MTꝮ::jXrSέSSs51]$lY^WS_r-RTb65%bFʧw1?ϡ"~m6G<*P#}g꫺Yow$*eX==uִ~;]%D?Wt<3)w P?cXšdG}BBYJL[3[c>S3C)l ]?_Ukz' ؽ7f<0C p^y:0NƟ诼,DnVi||b;mbcn'3JJ}f4~sb=nG lubsySb'wVyRj۹ןב'P7''w|'+2:#z{'yTI{i},T8oϨ49'nL23E3SNLrφz{ 1ݼfja jbk[Ge-VAku໾kXh]kWu &Rѡ>JD1Ibgt]]s<m`sQT_nU] DKS9a4Y /)DM͍X5MhmUCM} }j MsD <5jXCR 3Eiď5Gb1aJ-ՉV#0c2Jf %=)\EEu͔3Z֭5/ihSc.Q@s}U<~ƥbqmUCR0g7V*E-k!J$RIIULu0qT!RY;;HØ! I}/@;Ta&PT(8ߦʺb򡺆ƟH&#hjF~ BZH!PXCTDt-36DbMk,/;s>ҶPi/uӵ}7m1ie DUCuϫVC3rUBTWD]kiڸ\5_Ec]Ys:(XT F 4|nSU0IZbMR#h8Zi}Fᰦ"ϸ%R7rɥ}nUSSS٘{v)h+?SC6"%6eJ&Ufl9/*YzhPhucCk9N#Ht]}z^Xn%~1`ݸQ } Z*XLҵ"5c5*&mي|ϺcsfK6 NMp\VhdWܨaYqC5xKC*/~Y8g^#P4/WП.{DȻ@ wjTJĤHΝ{JQ݇:9oC pXx(t9}TۢѳsXp΂#\|ĚEGyk.;bͳXM*H>K (WF4Q bh+FѧNt?<䚇>5g'VQBԏQbJxL1蔖zSU }Vi\V!Oɐ7ԏ}[TF*q]ADdUP_wNcI5GuXCK,+.I3j7-UӏeEeѳb ~ڬdoɄW*[F)fM.wWKg2ۊ}o,UcO?-UolT-hXXUc^|`ẽOL&z$FԳz[*[cZ.製f%*-u Q9*Ol`JMW+gBPL7bx+MTImmNzR]{HU^i<0Mg\zZw2xji~btIVuSzŒUK5f KJ<7EkTYGE͂7)/t@J 4m^V65̝acU\D/i Z<%㚋o5$JxZDlO46z~6)FdUuILWtLAdv~8i)jS/w`RzʐUSJRW؜B(VI.ooVM#M]\ź]=v_tYE˗KEwh6SiYdVRioRj2\D=9TpAiQyxM G[ub߇ #5sҼKko\[URBU3;B\5Ma-iTǥU:g4ntyJUMQ mME˖&ndXU+=KZ}վ+gG[T7k?nP[M }6ak]kh -2n_nNV!j6d:^uNacA:fs},Y벓;1hu[.7\uCƽYO)GƕR<ʩTq)mr- Yu8ɗP>^KkXiRjhiFgX`z'Mbs]k7X%IƖ_.欵hq)uS)yíxm:XI5uiycƷBFى&uƖyqԯꖍ55usXSתij*QYF*-U2V"(W`.T()?lٹKťKʋVDK,_8|YiY4EKY5(zUgqT6W󨊺lE.~li7βlg+>NU0Y~$uŋX\Ix^Y)jSi |[1J .ZE˃ G,Lue7Q)c8hHw>)QjO_GCh:PFtD4=5/1޲Vk!Szcxa]Rj 7єsԩe<))ci#KtICFjKXR/"^!`=yhwuEҎT, -͔ͦm,2Op3sS'5hx]_X]ZqI|g9S5s)74yT+7H6|R]ǻޛ|}Ijiʕuƪ,p*f=,ninjD]år:1PLvB (Z2R}M~5jR j]JHOc2m !F=97d5f\cjgGܩni 3V7$]\ Z6;meZ)]莿.:=Sq:2yӃCH~Ad\Pdz,{Xv4mgEZA30Di-q, 62 N\*?r?PK bBcom/sun/jna/darwin/PK UBd l$(com/sun/jna/darwin/libjnidispatch.jnilib} tTEL2Qf5E]B& "Ea ;\ګh*nTVAC !fAV.jd:cPb!$Uu;wA]ߜss{nwuWWWWWWWwm{wd3M&]^7s| s<]Mqmb߯߯߯߯?617%d|& '߸q#cFFB7w4J dZ-,-! 3݅SO S4J3da C3t~|dZ#F8߸q鳧N8n3bQka7pb@ɴ:xtOZ8YF2n&26шK4U;A$Hأ)\c{y0MOwy<8sf<x6a0GgL(w'ގFz#vxh {x[hM}tI+ńwGmygB\"N Pq fLT8S +Ʋ q<}ĩ3 ƻ' <m3[M7S}?cDYq\oIޔ7ߔbaGf4t7N־4 Zk*8|7' Xy6ċ+x{fŇuc Zؿ߯|ܚ?"1l٫߃jI Y8f"z!u+\ʿ㽔N)fge+x%9=? T *_F2/ժ=6rDzN1O3+jtB,6ite-O%eN+s}ݽYjgo?5jev(6(@Lwҕ^izLo'~%b<,(91V&BlqofV* 0O99 YݷZ*ikF.@l"ćgb2"K~n/+2ZLnd~]Ūb4yGhhX DC#um!B? |=C臢 :.F ^cvw='.8o_\7`LYT̻8Kg wR4F6mb*02VL)xc<1 hGwtk{\~?< Cy}Y07DbwQH2=@tt<~FGh/d$HID'P$H2/:IHƓIB០A(첲L}'DF91-Z k+iq_.foy^08rAҕʧRaHV)߈"1)8BFm$BP!~oJ 3٤!/,RAq+u很9xPo"qA +z혼Rba4 +bܓVGqšQE:1|+ umP)93 | i *vZߙ:OE׋v=ExQE͍j)vUCUBu-Zusk.OXam>V>#gyQ=\1U?c3 J.4mO xqǕ_r%Zy+.c7*~Xq_+x^r&R:FшⱳEb ~q$e)7Z]DoTWc5InZIzδ@19"+A%Ɂ>̺,\g"f)0<mb;o=O@o³WsP^ TcyҰKHE 3ji'D&2/ds. X4|i8.4ӱ%KS#>] Kzlד'o='dc  4QT%!CF7hyILc0":\$S&|+[m.:g"@Ny#w,bI 9;55(I)$ԋc/V`C-\Wės`q990mo|xO=yM1\$E\9Ȑ&/"}h|ǹPm| @SA `3 މC d^Lhե4υ0/jMh*(,yFm1K0)ɩdj5HPhD]sᙤn9衺dS&PT` t{ Csp6=I,\\HSPKx B~_ i3g;+A8N>ޫa@_r|$D::~UMR-޳G@qo(iG?>c~!_ !|nGOy`s+#AZn 5&UM~~\=L6|lW;UlűuCV ] p1Ҿ0%&0]RmuQP \5hV:&V(zWeofץsYj*z-`bıQYf0M?`p (8u֪wN~tWF*ԜBe<#T]+.!=vh@BzaĘ {Pt ύ1֎~,̖bP|O`bZ`tff,1pL]irWYrnNT!m ( Ɇ!=\^]^cM{=} &ʾޏ . 36cRa_#@㐦aoEB'HPV)ND93j>&{SraN~0 5jr]cJu^j ̓OM;kEh=aU-qY,&+љ'= 9䞍86 NV5ލPxWI=6*h*VL:o걪N-I3u@ϣH i(9'?Dt\TM/NaiebY>(sV-PHWCODW DzcM=3=1ŇȱY'O#`E%YT(Y|`.%:o? }:2 7o[o?ionOF~>`2n"9o\8Uw&].QGIPk$7 d]D/ŋ](Z-^9%*GyR9%v>j?LrzMa]h#=PrG@鐕J`m@W|r֛o`X;!_֦# x-"RD9fKiѕ"}-ShKm(qJpFMш`8ئW7`>0[a͘XP19 /;0m`#['p[YBt#xS{"ŜXZ#wck7 (Ec Ev|sg'7i'7iT~?l\<`Sw:X-Om$RQoS j'-: /Rt+pquڔdĖL (-%~(\kYYI?^Wx١9E;EGx@dL хP/tV!G&[ynm|u4Z&<-[#=$094Z&LSH%l +ї׎+ѷW P)RP`*S`*K<Ty JUy:֫TyTY6خxa@ ʻ)7Qx"_09?[)<«(\@RM)eĉ{OV@$cMa POsZ߂spx;(Db_؆kQIPGzreEv_p!Jv)CZSh.n0tGnj_ů9 QWU [M)Y]Q7Bv}ZWu|GPᐃm}kpd48n_h}CH ޅfPa*Z Mdq(!Ȃ"בd!|pyXuBνQ)ۼ~}ezKOm*9Xn_Ś@B Mܛ}5na.4,X%fHdؼ~?,hm' =هqVk#㰝x;YJ-ebUPeћdjlFv+LڰxPM#?|Y(Ѯ #OkYؒ,4KMNp<6~.Q! yY ၳ{=_pujEtsi^i}IdE5h&!s0{qn <+k9!XG8nAO!Y,+Ќ98=U2EHr.j"+x:fDʚN&3z4KĊ?Ѩ /Z8GU8oƒfHƢf 7văZy˻r2J YGgwn[^`3,%~LuaM]h?hOam z ¤{hx~HbvRWDH4:*LG[;?'GG RL 'ͮzL)s{~ʉ/Ԯʩ(^pIC=%_}Vg3~sF`~GSQlFO;c=X9Շ&VUTT%@M8pT=,0%Nij@,G*ZPCD÷cI5ƟMl"5zn`%=^H~<ʔ-Auw3R W/bK!ߕkMFߕ[_HGXvC,WJh=]Q2#&*~-e(#LW篏 09;j<Z?{o&8{c Lc$\AO tP#Z]fίP5>FW@h}QXqK.@Jɱ-WcHX5jFADK@޾bX_Ơӎ (hSlUc庎8 8ȘFt6MVSM;\_N5Z}qiXYˏ 6'ĸ2pT-TZ@Iθ/ԉY]cG5j.E$"1ď1gE[1"s|wDH1-!i8CO"αp"8p|Q!Q~Q8"11 #?UGlz _uMjd()7DgߌmKK8jv8ƕDELH G-Fcb;E slcH+D.kl1p"8WGX%R>!cU${E.uY֍xKE1 u8己p"; /pG08CwXp!x t.Q1oR'iZioFC"ȇK bYѐ" ľFb4^@* ?,h r& ,*r2A6țd" 0Av}C6%JޤiL$4~/ 'hZ\ rIhs:[Y1:r Mpyb,,bg1^s {7"Hv챊C2eUDƀ [@_ٹJCxy4P'/&`r2 ȣbGKK~E,~: ~ m`avtn#jnBv|:E vk62f.42l̜Il:O`WsbO5~5$?< jYd1Ԑiu:%;- tj:6y,"֊9.Y,/*dtSl(/6E'|]@Y`St/v}" l.e<" ߉U`KtqXyѡ75=)^0w|9y=oz/F$KX07,U}bs0WZfVemk#,6U`;^#`7 JK q쬉=?+=***̇7}y(aD,y|G]sЕaXƏ b}_GH]$c_SMhx! &P7R har*2苛pQ*rXJa [Ll-X)>sh+/,kn- xw9h߅A;gc' -%x~#K¯uOӘ`7apbot6 w )=CJ .1m/SU:k1xap81mtyQ终q/5pE8Ki6_Y`+h-6,0(|—QN|ZyR7(U#8ļV aw#~ H_SaȠCȈ*c?֏ ➴0{ݡ"3 EcOz8V+5Տ9+s%sd0WX򖹖2G*Y-"+еn[RnmSeryƜPv813U_WT*]_ƩkGQM )&))~>:9Fd=59I[KAO[L-LT MqMl2%?+uC_ɷeai0Cq(}ZFi\#]$:R'xQZsQB  F2G)iSq5~ȑ-J%g,;::DrD3\d:|hJҕ9yS@h"OgG,3K?fuJA:a LՖ6ęAP GubR$.  Cށn{hn=h1SZ|  Pg&8f}d}<[!3WO  N R`s%@r,.$j>MkKt tΜg߁ E iMn Σtf T\񍄵48۟ L8oc~"yYEC=Ӵv?y `B`(1FSnIvQ ^wzfN.T"t7:7{Mo*ҥcǸ\LKUSD긾4*<`C3yЭiCKh@(s$b?e i!E -?]ﴗBW@N=1(.깂#ù :kΙ6~)!EgȲ~V֛ƿmc`z#~hq #ev?5yE6өeϡk{/3v.jARߍ7VR{}n_.Gq q1Xޚzyob>;yyŕ cbgFfwP<,i]dI7}`TOt+{H' '.\C|II')+x7#bM":Dt}$ qq_SAY\MwBEⳚK#I~NBY$ kx}>EtG)OH:i'p;q* l~wƅ ;}+!8G=G̍?q@;SG*2ȱ,-v֟Niziqew劄6@b[сLw ңz%mvL~Ub"Y޴#k%ca[iƖ!Y9m[-YWDAEL3SXVkBC-h 5 M YERpt r%̲%>-h05b'0TчB|O%oD5{U^YSZe bߟq дBjjeQbf?H\,a%5Cؿ6+vwlI 3в]JlOlpAIV *E>}Zdn_(لV&7 y|/R "^4'y:+)?Lgo?9݃ϢjDA}` ֶ:5א \Uh|LaߵO-lVcD\z:5Yx'Zu]FA|UdyB84 ,g,ҒWc +?߭#̓3il@ײ~uxLDR{4)BhK2{{dé:S.;."eē=Zy($RHLAG18Hn9:J#T˩' {@уHrD_ȴ4G7RNkjr5f" Rt(1J͵1J†)\%רZWIytheXM!āJDIsUte~U[u' pRr\Й):$Z6}$Xf5)L =Fm)-Aղb" I%HYB#.839h, g;Qzڄ3K;$T+_BR:O~3JTHQN%!#tνm!%G1O10_6A!D.IOcH͐?/4񅐐=wQIXES%aA& $nnʙ[𰗋Eo>\@_Yܧ=~MTe?GSPJ`3%KWDdEIt qQiQn##:dA)a+„#8" 1ڃ'wJҡ IJs*!f 3 ;8/u%*N18C$iz* cܟ*?9E>%ŠGnҶ j:?$.~7n?XHy[`/q<^pMk'xA}pʊ-&̂/FNDAA"cYi?^pq9ɮUy&x@}lhIr+ǚ{cDA_:h"|+xxwWT?=#{iݪu"%`wmVu'M$A,)SMz޳㵥8"0ޟ0*!/RcА(SuTs s]]A[I!YU&zXj~g2:kTOx;XnP}藆|kDiMP䂘ILOb^o ׍%|nKf0,ߢۛ_n#L-aQn$K` D9,;|r{НpBͰBȭx NQ&Sł#sbܟ,/\Qd̺Ԥ]U0Qv}˪.z*kp_ Bx2~|\Z@OFTpki0{}N:EdO$E]O+lHJ&N-;KqP $΅DRce%azJ̌lVNi~{='d+vS'kQc@˦@>:eu ` %f^Kr`%~3$'P\<0%0Kڢ" }efXMN7rWD!7Nc;l_+( }zH,! @jMTQQ푛%oeIT,gY"~KA\eL+r3evҴ+PLsP66te D %iD9sX舓Cf6^9s%f4#2~]: "y+VsV7h߄ 3X.W*~bT¬PQ5F31u>T:N1O E Xf7%>f'-4۔ZbzN8m6TFu2(bƞ>M#Mxkg!9gKx#nDYV\: &S }[kZ*/БػDal!C4џ-z|PhV0;c]Kog3fO?|fa > 5)|B7rfrt/:e/l7_9Nf65nt3YoRrSϊ;u>$?$mdb$Yn_NӸ ʣEԗwOz}ZMN9IZ2-'C3'e&C_'τ\jq]MS⸳zN89紎Jaqu2jT& p8r 39 'lO肉 Zr"ea57^ޟ==V.H9߷bd1 u&I"zӝ{.&S<<(`o|: ;z^1agZCg^~P<(2srlL}_nL>\}F&wnWx30Ȣ4c@KR6fٖ]u$ԙ\[Ax2w8*>q,BUֆ89>ᩑMƞj\(p]<ϓ~ <0J5d=* 4/ߋg,u.g>`˽oc`>47I6:9 ,Ipp f9TANwm5jr_hHrWLOs$ONj澋G&%~3“BhsJ;6j,keXw +rdG72?g`9vfp![!nv5T~<ĩ,; ϑF3uQ'El 81O 1aevhQ#F%JK F{6T,!sgM hl,kװ9,Ł"72{7M}6 .9}\4g.P۳.rHl3$66Q1ю?]0"0t>$TS3Gؽz f3|W(HCfܦQ4BMI^.f>SNjGeQp6^G}j5wY\}8q#]6{Ǘ[ 98Bu= /}7YD Khv%^n ޾p~w6# C@i|ZFLltMLDu~3A Uyoݹ0*bc:Ҏ): TM~? 4Uξ[sqp8;o[Fi|V رO;οٱ닒Z/,y12M-_Ma 㳠s#=O?eQ;*^4nȇXxh<_ ]{ciJ[3,]j2vwk|ٖ`d[XBZ}=Ug;5ZؚHp|"JO.K })jfNvY]q5[w+(hDα(m~|=Ͷq?=R t_ 7rIX=Ow<-ҭz<7aѾދ7&ffB^;/fx8OӚaim<86^ߩlϬkI[ؙeX}Gwv65-gr]gwg򗝕+s5> ORF SVOK/,P>X]Ir&׎-Fzl[ 蹞PvPnmƵ-@a'.n?#'MQhGnVn\gb?8Ny|L ie&-a'|a`t灙3( OWA!ҀӤ*? _:aQ >7, V,aU*B׸ %XM\趋=_#Ml0zNKQ4>.\kvf7gY"Dn㥽@)lZ2Q>2]~ %v6r Gaw+yKcI2J'o< +M>o" Il-E'6X!ӅKoS2h%HbQ G@w L8nF!> <}^Ov%RR}:="ԗ:%`郬cmRZZӪ0wq0,e\&y/z:in=cOϣ9RYH0t#?k&lѿ?gl6[#[vԨC;#::0ҫe\9t,3XMhJw)sƩx'?]q_Bf"SJGi%2?CWe[״jVN`6eZhͶ?BadiJ$ GārK/iTۧu)Brke4j;9l/*u=Ce*Eu\HZS CeyZO]AuJ:nnVI"FML`jT^Q:2IȎ~(ʆY4>U!PYv2rC"lCuu\ z9˸0|Ct:T\Lׅ"jh\Sj@!Nk6^I$j8S%Ab5U V= RG[n^Jv2˦̲r{ ćÑvĂ?wg{ Zڡϵvi02 nw5 PukѤu0IBF.$GԮ8KQp~Cb5FɳZ ;m$FD'2-<m!ŗx7v=xDR`X@iFBygTG-@zLE(03i|0aF'9D׽XD?HYh:=@N>|(4_}B5t6ƞ2 &h ^ӣxK3?#s3JaY4o/̶*Veͫ͟;`ckdq c(M" w+Z[F؃3V5O괃O+5[V+''f`HYHhy`Io)\uj ZYQ5|0t^Lj. $UPN0lzpCUς˚u!?y5M{f\43AK?s=>8kr`sLvP*Q:v\ݳ& c2: %XiǻU.DPǾ'vzK,2},k1O%8i{i.SNxx>S6Q&Y}TrZ͊`D3\+7\mhZuyd$X?S 21vPH#:0?)ډp?cN\Sblyyi֘? '/D`_58 mMnkIzfQ]ܩnK F(t EMp]\ŬɾU<,WV+X{}prrȉqW-tïIݴ D1+9Pۏi+p9IxI5MtTV'.[wMi_s,TWa-GWwϚo#ckshU4nGj,JWS>-E}Teogu^ ML ~UZyKqƥG{ޢ8R{4UKvOY\Ũ uT[a ˰,^J% r$8-H*fbVU"oNLW}{bEd4{_£Ml!U*-ySDm\juR%B۔aI܎$WZBkx%IĂn͊TiW/КeQ:%MjעZc5un o!_n3r; ~7s,WͲA/s@ _r@"X";_篬0kXv>G9KyىIZN\)hDe&7 o6G@-iadSg.@CWpdO^U#moyyFk!t] 43߼hmחAC:Jx\N{FoE}(x_yRz&cWx|͒wiV3J<8p$y"-&H(K8iIw3m ]S:Wr_bVZF^@:~ k3a6iY}G%Uʫ>N/-هf2<1H&OK*L+MW\+v\ NF ڐ1y!Iڢyf'ѐ Jz6ӏY `V-$Z H%si5}jଅw"E@|-'Y)޼b)kA;4YT.z?#G=9_dƼ2A!Ȧ.MMVej ܯ&kvŹЫjx*cnI"hj 9#j< {!NOTn&sj38{XgveNXk%ghJ`F&VH(څCQFIAy֢7 ݧTkI=iY{|$ol j stYOA/EuX-sUI9u9iff3%o|lhkmJi,j$^ˀ,{Mg[@+y+*K+p߄\.;gP=}Y~Ҧ{x_9e4@*X ~1TF8 ('@%j5" &Fre*W QU 6/j.W+SZih E@$j3QibCk Y{SO!b;*:iV!u!BV6ΰ@Qi`CM6,]c$h0hlsMhJdv;ۯ$GЉ־K/p[.f$ZA!9;EUOycn]{hGXEV>% `~arìfmKJsyD[VJ( +Zl[^UE+I+W _^~?^>p1GJAB Oپc1y3Zd$TT* -i; 'Ăc{Z9a1$XZv+óiK{*]n$;Ģ>(Qoi<*kU\4݈IXa Jwj&q5V!)P0`/Hp[qF۔6P1G_Bt-e.7tU6n"{{ [\'->p ҝk%!iERmltrBi |ם>\E[ԕ2S}фH[jЍ \W"\!V$2 aI c_iAlMdj3g;4,l­|@PZ'p-pЗdADT2Sx@˛jѮȎ8%U _} /ޣA)J&UG8elk3)nc6Le ~nn#@6@F e)o<M@@r6r1R U'}>Pwgg'bo>@nQnQ>Zhl6zn5V"5EV5%DGd]"V)}^WPk2den_kH`$z _z,>tiR{rpnH_zK}Q١Q芦Yf?Iܮ8Q9<1ܞwEgrH!-җCڰ=$q -Psa5wїu;ǃ e$+1jC3!SDmhNُg5 uj:f6 ئЈY_}^LX+9q!P4TĢ( ꊟbW3>N'KwiGWnA5}5n]*Lcg@d2s.h 09v\@|Z9مws=M&UںKIlXTTiuP8,Nn6}h$iO!Iw-A<~KxN0+sONeza#㽜nFw49Nލr %ǮBXr*BCۆ#!cǀн<0Ϫm튣brǕJsЛ&nhe1W~]vhJ5:3s V(_},!p~`AGF?3uf`!*5쟊\t[6ĄȺjxlUG̞qIߪc$fnQ<@2] RKgύ`2PP7hK1^ 8ģK/ADz?L:<AIfL>u)Æ Oy3yL5iOQX86c ;%:3e wLOAB&ؐi&M?mPϣs&L*pO14xk)M1a{R©ӧ@{';'=:qݖ2yi{FʄI nO᤮Ξ:ѐ43)I^C{2 :}vȟx=~ Ϝ@7Ѝtd@5}xԙN7u#ѡ{@GUmwnu,A" d`5@IyɄFcAa%SE| (',3Ƃ>]έ3IZZ}D(gI+K逿y%C3=9QhͬpfrU SIyQI;W@fHRjш51G 5#SVVJ*4^9[\V^Ql}"#DT4:MӜ=|V (wUPR'I6בT&I:5BVVtV nR4gMBdž,큆Rje#u]jt7?V6Gx+*),&{[ΨX9F/2|gcb~sg&jݤ{uNkI️¢[YRHQ]u)^oa4Tw_C$bDc)õFxeM#H弶>dLMy1hu, E: Mxk KaCC.86BlǘfTWc!%O9(jh4&F3d ,)¹^9,p}\\RJ<9Kp]2S$JeUIeAьRoڒǁ$_'MVaBzNN-+<`&Z@o|eIU!J`,.8ЫAX?N)\e5䛠xa :_\Y5lV caUU!ͱ*j$9(%IX%ޚJX˛͑t1f7$C=9KD#;UTXu. Z]s?Ajʡeus&Tfqٓ'tp6f4zl1_&芢 з%M'$OIY(3SkWjX˅:/m# z쬼 Kq3AzyUWjmZUcq[:\J/6.)#dECf^Q6$-}XQɐLi蠴Aiz窴mi WyI#gT fg CFO/M=F6{T.1ؽ#s7ǒWxA0| kTE̒rs \>"5e/lAMAfT ;c7:@ 0BRG[,(9E@V(@@X CcsAQvhp]QQVYQ]#0~=:uZLW$oPDAZ1G2 ;"hHK5zhBaA2Hb?d F-|;YDZ7()BTzIe)b 9HsGi4AAKKaLhA {\NL-]`GI-lA# 11zdN~d VMf/ FQ(-SP0Ax"$&[-)i:UU;W* XU W)ʪiI6yr`9g10mD8:A8Hǐ-# >C44!#b cF@D@a12 Sfz][eF<i%b?ͬI%U=iJ_3VdxƖSS -%AIyªPX<%0'H2(}nXcWR=#L*/*6xυrǙ/䧳MExz4+2{p ' Jr<*R,@G e#K< t㥉"/H%yKcKTeIn&9lO%yp?~~.ISwI1$2FuH@Ivӄ*q{#w\bޭrO}%>2"cQ>"(LY _Ɲ Qq|q c`xpvF4eഗQe!u=QP7,!.~'!pg",/6p8OoGplG2$xpxԉp{X^'K e? ?TQ/mDG Cy7ǀY{>tY|8A1ipmvo!=rx~`pHxoMxV6 ܥ}L˄p e6Mm&}_[Dx!߈pPo",98\ IxE(WapBdڽtׂz@2_'P2᯼Bnݩ I۴&I^-~!4ZJR7^*IiQ&JŸv$o_y$]#ɀKTr =>@ Ÿ^odo⯔F 8X!C>ן#I7 4IZ W? oɕ-O=_*iP/ W .SŸٿS#I#?/T$ IR*įeTwF |fw_[ u-s!?_Wl =tXtA -_-I˅O&/YO~=ݒ4BkGHuZC_/K$)᯼ AB4 IzO?kO%)(%DO{URY/d<ŸS@EI+xf<%_7Iڢ WkKү}`7qx=?%g ?~[Nqx{}'W?C~ܛ=yޢ k$O8Qzyz.&-_e3]%_ o8^^S$iȰY:%co+I?^tAo{N|p~<*.6ޜ JiUI gMx1usFye7Ut$#1X j ;3zzI-5e|!w"0/S1\Թc,r#]ͷwɷvA7 ŨMQ}c|\Zt҂q:Bt q4!ytfNꚑ:nF.G\ V=O.l:K TFר,@=V5P!߳"S,JH#+)FG>bDj1b7UC.E jn YYYXЗ` ~kv5՜IL&,0}*ħZs?<1cf&|=ʈ  dn,0R&?=p"3_,/=4qp c5f"BnEX˰f)"f B̈xW70Ot'O, KT{qUZ4m3ZUMԯM IWx\6D*()xS2%P<'83Z2-+/Q6/)%ʹe SYYaQɗ"f=5df9[2G,ޭq[~[CfA˵"VTKWPEX|s` 9(γAY\VQ\KUaqŃg K1vĮ_ׯu~]_ׯOGKl4Rh' 'L 5VqawUP NfW/ |`-_:M?}5鄥gMbw)l4^ g7G$V4~vpݥ#lf`zJ㰆_DՔϞQ^\@ZVmX\R~lR*ea0m]3]Nl@ӷa7ϝYl/6Uz"%aجo)pAŽ% ~Z6m0‘zgu&3Z0qR+*QV8UoY(+Bo9l_)ܱ|7UW[V~F++(7V~şY_P's&D== Q2ID͜q3І[4}!Fb{Rgfk#mSeplj^ꐒUmtm~ά__HnCmюvHK6q;㦪ª`1AZ`aQ=8[ߩf)/=G=]S]5NjШAе̸Iu~]_ׯ'rO5ΞPpCrnO=&o \dOR1٣v+<ʧn{-=jl[O}8?ͭltWH@V |ղ[uϲm,qۼ)jwމʸ%e}zct70cRz#P9H A=( ;WpY8UOke38q(WnKH} {P r`#=+q5ZDԜt8(N%{ȁ5Zϲ๔3?cag;ٙεxA'Nb͍}CU7F]P*-e_e[sCê!" @迉x{ln2Ns$ YsS?.hXhQzfFBש/mhX!N.P*\:8uK4jԠPwe;Os9zq5D:vz`q5_r[t3GGآ8HVpCܟ0G_יUh.hcZ`1 'fY`2ÞdM 1U ) Hi :?Nc Ow/zWh}-g$2(\᠃Ϲ+wGrѕ8ur"gwbt+p$U [e)zF]O}VqI Jcڿ'X #jmC ϥ@d_h'+;|/Gdd_B¢V'larލH,H*dH("^{/ }z)c,O_'ς>)ǹj}ǥ/MynH}K_pXε=2q419sW1BGh9z@CڛLpЬ&Hi` c_x_(Xzj*&XG<|G/hòbwxqs(}K/Sr.Yh0ﲆʣ(mneGy?۹jgaRvBs_Cp67 S(Oy,ΥC&U~ Z{IS܁/ I<{(=] 1 pMstVcF >,C]?{3Vk?(&P=pHF}T~$S y/y±\_ƭ=4;WJvd7}{`s-se QZU=xe't < orzkO&0=5asN9cqo@kOk  Yv"_C'v_ ߎ+=\wo0v}'&E aoBf{2_xk//u෸_U{A-Khy:Py(I]+ٓΞ"ScjX15P8Ո[iu D*arf{[Ԙ<:17jNJ,LZ^,nuטSbg^vN$G=M[oJp3N2 Mnv9>gļ~7-V\0>a~D `5D24v-oȾ14X[BI`G?!#@kޛp:y DbJMفSp7X=_S(_ጐѱm96M2qw-ʞ T&ojUm]_ji/Gي}sw0wGPE3>z5nTzkZ#/4G_Nk6Wِlzd9}GͣPQ\!mTnoU]ϖi>= z7x0 oM[@7ο1W o:R]obel5Tq7}kW'Q)AU/ 607ss |G&5$8݁m meKirKkV{JޛP ECjNoT] T PHCpDIobSvcfۨ5!PH iZ|ˡ^nr6Rq}YxJ&IT*oR1 )`15K@I.উgH 4t^>O@'ۧ{rp\*h.ewz;zŴy؅\Vd-=(Zqֺ.1}ñ}?e=3$ƺvq* U/OtS8r2^T}?XuoelBwTC#^o|@}{>Jܻj7q <i{h9"VO?L{Mp[LZ\z_Q2RVbS42EFq@gA1)y(jR|QȘ:h0M o5F9)}Z%Zyrd[eQ|(8NH1S</(2Ǡ)޵!åfHu2S\*Q|k8U8]/oX:nl8i gvt> >qG3#:cl 'Kؔ&F'_گTpyxZgiGt&yy{a5Z^1k2%_#O Sc eqhZǡ|š)ZZΡzCzCs8t?\ཇ۟fzm&F=k 9tZ8T̡jkn3 NϡCϡxġy9ġJƐ,iY2AV kx3t*{M_"~p84J>1E.@FЍ zShF3hS}GP*Nx@ ԇAYLA83TPI/^[eY4 Ao1k]'@"19 4 ~v;JT==]ΠsgAi zAJdp3!@stg'F}ɠS^!OF#hbtJE ʡMFA A OT͠R$ځ)dō$qLd_ S:AxY";|>%A?&P P>>f,ae h2tG%LŸ@O=?Q7pAA;b}exso9+C2*ȽHp9$E!ռu;ig$,a&gWOw>Չ||kw uֽFKF2[iq+nxJ!$bH0tZ6e[0?Eڊ&}V~<з ޺ 1NH0 kq U8}Z (He J94ـfR(|5_(=k;MF I=$khK~]xiOX̮jgaɭ$BL-*'ΨۙgjV5+۲wxIԮ&*J.k_ꔦ`bزy M|SijŲ?ag#~VV+?0SS ckk Z`xk^P@HkO k Ŀbц'4k3Φ]!ݜqݺq.D܁~D=܁,xD,g݈gtpKPwQ(5oyk[jnx'- i6 {8jf+q/%<0%5{|R2);Kn Yɵ<<&ߌM)ܚ^h}Z `q-㶎5p{f9:ʒRDZbUtL8+~[\Ûۘ{8O0N!s ~!=i{T?ՑW5[O "eVP m~oU@$5Mp⸄5t}//GMˡy,I㍀?9^Ag =7[_IF'/<+(s6L^66Ru4Rk' >G'@D&q$ }(GD*D&S /0G뾊Hvf3Ւmp= *RIRP=斤P3I;K =X &< چZ,r 1Qy|C Qx}q4u]U$; ~<.ݑ?j0ߦ3Y3.IV9_yEq|(@DB 9]ƒi"Ә x_AnT ]rPߺt=lBsnty y_؇y\ $i֥Kie~9SԋգF_8nbE ݎ=0]# y.>?nߙ>d #~zAEVV BcTTavL ,KiWWR)mD+avm Ņo"ڶn ۑv[7" i(-)hA]C" =b軣vf ӹ)+R -inG;=8JfkO\EwN{-{6,v3 Lj;([uz4`ͩiK$cӒ%4v}5*{s[BكFI/ӻc?ljG7קK£Wjd$:cN܏=j5{?ite;hruߩaOS!hrd@x$}Wi}ZoĆ VEf$$3;Z Gn Ka;6):HEҤB?'ld,@/]h.$Ӯ;]S[a%4&v^Ⱦ̧ۚ\ Tl{i*1aߩ˼pF T!E!:[ p~rwG֌]]h#k]AuiB8r{J M 'مf}D^湄yx; l*-`t-?\ƠlQghoη(=*34(#Aq-v,_VkvINLrwF bo-+6í[< I%BxĸBPӅ˥:v[v`l4h"LF ;@"%@ %AP4gxTK>20j?J.րӍ\*[X]S4xRa!/ |.<>qF ^ԅl[jY gQ$54];i/1*!=yf9&doT!KW HCV!.4ҀB~U4хNE9mr`5D )kgB^l77k}B ăV!x.](Bi}u!*QLO -v!"xDS2<&ξ^Q|LoeBN ysS5D7ZV҅}Uȿ.dw ~V<@Bx*v!,xgj=u+ĪfJ;(a5 j"1(Ҙbb~AmXD1L8_#7`yLx0H$kVғpvńWh0 ?.d! &ʄ'1'„SСٛ}Bl5 B 1a?LM#kV0L+ak ӘA&h#ĄF֭tEO/FxdΏ0_g&F>>^g3F(jgn&|^^+L8Y# '1U=6L& l ,NFτi Wxpɓ۽R˄sQo%| ? L _ߗ~ aaDp#P?Q/3" HSP̄9ae-uVL&Lp>`za<T/W%L5d*,&0ΰ>DŽj# PY kB#5Xǥʄ/s0G#kh6ޘV.+58@8_PgFr+d\̜MdGLGxfwWbp-A-8ӝ"Im*2$_SSޢZ؀t7]6x@=&`i=NoE+R}}n3@\`0Fdi1`wZ_R ]ۂ2a4!Rwac?9ψ%A6> v]ll 08x7dDe=-o\K]W.<WX7z|lE8Si;]SyK%o/QuL3Eu%g+cb%# s%9Z"SEL"oq޽ލ}J ߽mҏ&]4,ɛGV=jNH#'ğ솘z)+f+'f.XǷ4Ec+sAlk.x5@t#G'-V%آ&t3ȼz-. )6~KP8 < ܆:楪^f#bu^mpPh ߅q\W*\l&e#ace;8 w`Yj VXYiR 9&9f6^jhz&ݔK_=ΏG4<%rO4.* OAo7RX|2# :P.b![ThrKME[׽M1ėޕX*h:_EhQ?\јmr=u ʿ`k4ǀ9} 0ȓV9h\HS 9;iWHX [<=g& C$I ,K {٤'{徎ε{2 |ƫM<na7%&;4;KMN;NĨvY|+;1k·'A1> _5¯,48mޫ9թ}B0{#On07}ɭ&mh}T?X?x= e5 E-a M$.HwE[OAH{=m;Q>(ϯ5.{ڝ$Fr  %:Q\0÷O}7 y?^:vB@kv.5W2dm[Ő\n =Jߡ]Dd0Apce/s8]'tҫ"e!od4߽X^bbNʐ:/>xoqs!Ù gmw .I&R.I$$LԿаֽ3kz`$~OaXE2꨽I[6 g;IcZ:lo;<ʇ.+ڼ|CkoHݮ==n.w̓-l;:`P섣P>μOdlr1^4 4up@'6$Re5zl/ >aNz|^^u ]>ݱ|<#\>~rqG-(h:?V9HZ!oFBy1S0qOyA:=NMAȆ@sQN$e \xZ% zy_h NqL'YLTx@Zw a5Qc@yL8o),묻7j0`sXIMˍ8R uDƺ3w^CTS{ԙWۗ~xo6ielKHДu~יt\p=z*\tumf栥3sֽMK1Sʁz0+Q.({_%Kw.ztK=E9~ Rݥx^W n'3Q)jNo KvJ\R)AË#?IEӶKWfi쬛0A4V#b;zoѐ4hOV;EbإL0 Y'?a=k[ʭjg8RoN85:imߡz(G~Nbܱ<+pgx獲hApW#NJ!ZNRpz"K+V`_%z4]b! 6-ۡw)'>;0FǹO%SwO%-"٫1Y{??Ҹ!6a)vY PCX7N/D~j; JӔ maSz Fҷ_Jc}4p 9Gf7|7({Lm@S{8=2 E&vA3j/^u 4E#4kD}42&xqi BDώvRڡ :H 0.>&7=FTLlqʌGV= ڇ+6O-{6VT<N}zU)JSVZ$)!}}=ן!%ßYY&ۭPB4gI:g&+F*E$ru gRƅ82֤-xx6]6wNk!앢z}$Ofj@^ 'Ü{0Wz5V/{%OH+x$ve6YvR2tFRݲBhuPq'&Zp5T[iqm,O}'ZC4RkN9Λl}@%ΤX- IHtXw^Wҷx#١ z ۭ 7{oWNCٕ+7ոOD J6a;(x0p}K,w`)®~IT?M8Fa|]Hh\p%EöJR;ܫ8]tV0C/Z ~O R0Q3}҄MoLﳜ6`15X$|-.8oX@pkK(u|~tީ>F%0]WZZj7Qr!|kj7rnbxN9}fAZW^e3$ 10QU"j8pRab,逖ud;R/:Ƣ1@ʿ%ѮRc(!<uՖG1s4_st** Q}2O@ Xo A,*cYОߨ57Mgo=וɎқ>)v8Kѷ?쬛A5ύS\ǡf Yɂs`Zr:`K'qtZ eN '֪NcXwi $y2qL69MM0 ~)DZ `5:tmD¤uL,!9W0Mo*r,1]'Ҕ:iE=]4ԾmKT5gyq oӘJn/2DNҖTzI 6-6j|8}t=xVƤ<|٣gԯ|Rrt#=&X79V?I %!Jh(hIY۟\xl: A]l) .lT4, TuQJfD-QQETO#j"1(y=*R*e0޷eM1Ȧnj2+NNe!M1&pLMno?ǝ iVp=%I, .CMwsެ?QKr|,\GŠ=DoS#e`ܱ<n+MlQ[S(~/JU| [(~Ͻx$NlYfvb|NvmqݾcgoDH.-9OM7m+e]p3b"σozu1lcY[k[Oqܬ sb4X.s 1ٝ(#ҐM ~yCToxsa綹HPE-kxh~;l;m)SCXoIϿU>m̱\!5ZnEeL;Pn Skx6 K(Ƶ"(e'+"9@ՒC༥PJߏG-v+5nl=GSdծ8cS8*UlD?5ec춱_?TIƕѼ偿ћ'=-0C#s;s݁p x q'o4h5X𫱖>]κ5.\⩏\h/od_{[l׵9_RQ %4tp!RoІGh |Y:Mksf5xa-sI>G&7 qo݁Z>?}(]NִsM6' Tn@:|ixA|؇ģ؃Mb0~|-  1(۷ :(RHiX:J2vSo"ͪ݁)7|++nQxG;H W lhrpVG}N=neRK\TԸS!η5z*Zk}G 1Z˷1llmVj`7)ޥb󔼄&i*eJ)yjI|zCWM4;Ԡ^B|( -nr%!/4'6>uWDOM Uz)볕fcꮃg.fmVZC,8jSLj 2ɏwgnVxҒ=vw=?>}Osz lq+Ssjp+rn&i~oQ< $ƕMw_nSI;pkZ=E ki]ݿ<$_gS6ss v>`FZb7blĮVL^g|ZE6j4W jAr##8,n_ B 0l@whN8U6~t#1sܙ_z{J$IoƵ?v~=d:W,6_a[ܥ Ӣ3pt|>s·%na9n"Rpq厚YڳFJld= (<#a*)=hI$wa T60) }8ӓݙM8t+s|'fn=.xExO䆆o`_͞hثK~fc;ByYN}S,Mq\ȑ5!G`FrYٴ&a\A"$bfohE{ِ ys[jvxJ̸@W0%=V!(=SY r 2t5綯-NN@%n;YlJVK(IŝG%H[C#eRa c'@>5uuB/9=MY}7e%][jؠ$YwY@.xB7GO l9BSä ~X`봋a[|nZ(ݰoIy;Q\%vlv=U)?oNvϿf;s&p-Wٜl>·5IXuБWXeF|Q tfR2֗wf,ԭ̑eNYmOuTi+EI#qJ̅$c'B'd'7BS;1^bTݎS urjlx278d!g NYZ;agrAM圅S'05X= Ӓ=( *ķ1;v.~\4aR\54(;0hPaQiM+!nT 6#RYY0((c/#RIk˖mVffeT֗-Hk"Cwνyq_>{=s='s"pVl5FR8us6Q`96w5hm6u8Yܞ>v[<ΐEռ}h =#'maCV'CŤh̘ӒOQW=ĵuԟP16\4l9mVVW?f&69 DKruG{xLĒ^Í?}8Ϸ~H:ޟ%t^&"ݽXSď TՈqbS#ҹ:LwϦV-sozvgJp#ʕ@y<:%cz{Zв?~wӍt/yq3yNlcWgw=z7.[Agm +wq X!t=yw#Xr%_ Q?mlDȍڌ{m^3H ߉yh,~؏!ScӅu h|^ d*Oָal\1ps4ǸkG @&;^<keDk6::lƋ9QA"Ky4*7*CP>*_k\rz1 ؆t\/2=gxSvgƜ^h0Pf$}~ ͖@'%")V"v?JyZ6C^:+ْ_-{ٳ|k y<}q𰣋#soj 7[$\~t`#~ !uYN\Y8f ¡i紇Y<Ш hlOe7꯱b.?J!fN)ϨےXlQ@˷p|;g[w8Tg{\ 9pD mì0ش&6ݘ 인űq%>٭nǸW+0NT_Wkt`*qUk'<$ C֋W@RƏzl2wH`}țqqѡkxo> 4f&XWSW|hYov[%Y0+v4tfXZ^;}FTOĸ# nL9΍qo0j蚊|Tl1+~iz`YZéܟ*J%DB߃c1X~giu6䙠o\5P5$ӷ<$N׷ӷ`hޯo,\ !(3[^m:&aG.Qo~ތށA#YvjdͽwM{+㺽*13Sx5qQ0jp:#4gf>Mv[b" Х, Dޗl?5Vz~e9f4NCWn\&@lw'Q?ݖ y" YB3 m{A_vπIM~6K뚀lևWuck/E۠|Qrh5wJU[Nϵ|D'Ҿ9vݷm/e+bu'le \(n@9z8Hڲ)TV2?1o#oQ=9h4? wJ44]4FU=qAd~zw-ϟ!؂? sk?/OMGċdXoll3z(֏qT</ĹN=| _y ֆ^Kv Ot-3ifLz_OR*7ԝ%/< .^> }A<@اB&Wo"\ 3YqJ(ƒɜtwhb|c8krs!1wE70 ?tسvX D 8;QDz~~6,Ɓs_׼nj{Q l_|*Ɔ_ bcT .-ÈY =MN={ 40@6[ŵ7c(j\{4\ޯ_W, hQw1Q+ +{^|mZ0 hr\\\׎o5'\1ݦ:+&wBYm נMt7\cIɈjv_!!І)^ȭ?rhndMsv!VK@hY_t5o_*~-k 0 [o\!?~?WcTC뺞fcK_t##7 J([B84 k+T4!wb![{LVO_!?`/lЁ|_*TI9oD!BOeDY= z1.Swф0v)G hJH|J)J+L1%Tx Фvs9D@2 |1JJs/z??E|=zTϯsu("=X{kğ򱈎X~u~G,@L>flxf8xĕ`.z'yg)Ze78?lqg;h̞@ _`ί@CH+wr_kkJbf(b}d}#k:o)3PFd:ؓɃGn X+{QOUy^ynx.q5 @Ǎ=6'C/ZqJJpŝXr(0oa Qk}4b@p9֛/.<ޟ%B:=c|VwES?4YJ\.^9Q9_Ӣ[̌> z>> (i:3g 5 t:ό?o5NZmן~aTF[=+č[Q f;eW2xX ߰ 5ðCܸٽh#O(|BSD#}zM:Q_1$}PG\NSoÌ OXqڡoƆpێ]guvKfӾu-]:;~>uv}6ww] \(nhT\)jc؎:7ƛ!,ϰ򇮾(O/)SZ ) b1丼aPd? q$.-Ή'~}&.o`ݓv/ձ{4y̯7=ΆF٩.5C/h)fw!}gi=w*{Hk{<',=oWm' {.{fwwVcfY;R jkSmWDN=~??6>7,ܛ%xO;b, 6^oR܎)1|=]h-fpp[0&pg>ST{4~*Гb5Xgxw=n-Y{,-=ƹ^tk=UGOڇx2sF3cww˲iìsb׫ ggkbv/s=ءn\4[qW}ƴse7!|ٞ{A=`8TS{2wq/z !SHo{tb닸_~{XɡۇY_oL9shWD|k-q{?uϊ2(JqA~߉K!ϊO;#4opcÍ8Kz /6"!OZ%s$, O~;s}%u_Mwݙ%6σm9^u8ٕ93Kc6b&j)9PWn|-36 6j'#/')@>iˡ57su h\$߷ؐ:mYO*X(Ω#$a%P<~r/z,}nX W4Sbqr h5X]qqk{5>SݛS7uԏd`δpNr`A q2 @ 砏ɿ0m\,>!ǔ~ֽb] c9 'W0+?DISߊ-F3\t%8ƪI< nũ;ކyi\16-Rn9NkYo0е}wra؉J>ю뗸 uˏx@轾_ahXXxW9b=+f 俭cHJ~ƒiރQ8g|.G㔝x=ןl.6U߂ ]os,~oʛcNF >qu\pSdR7[R,YHQsƌD"ȁㄜҠ:{$ ZT Dk}nmϏ5;{^GUΑ2Z:㿜C+A,V} /uWEYq{dj%vɆ!%n [K*}>3ꩆ0I7e{fh[&=xYa1[(Tn c~{']wX܎O< g=?%x-Wh"CgzMqp/lDA2^/KtI%Vʽ7{D3;̽,1 xiqGZs {zuY3iDw= B&zylϮ|qk?rgq$rHlq6wFoƇ-;NҸ>yN[7;?2<̤g.=ӳܒ&߶fu<8-t:eƗ/}\ u[Ir>Rb1Vyqb^/1g%¯-.~srw~\>U8.Oc&+=e3Z k3o߹w|[VjkKo}:J?@ϩ..\XQ`qiuiAmIIqɾ=P`ByA ՕՈ?⦢2c7 ̲SETS[UUYm/.f,xaAyZ̺*{YeVPqTP^^YX`/6M3ث*ʢΪ*.^\Y\b`̴Ir`^i*.Ƹ^[] }/*q) ]wӌreu`fgh lGYJedf晪 P<1| Ï(`.Õd+QOԼF En%h!arYSU . Z{M,51鶤[o[pKr$sIm'ޜ8⛋YRBbBQΘ)Y\]\R6d>FxTUNMRCQ(T+fPzBoWMǮ@/w.wdʰ++ˋ *>| < r%r2/92XЙoJ& ax!} Ƨ`(   A,E2;U2'(&+" t$a;A1\bJDsr 9j0(B ETUee0jh~ A"nKϏ䲰YYS&=|P <﬒ߠ)҃ v|:uUz3 ?z0j2 b@F i<ɇ<z% x"PVh+S*Su%mVFԯ w8kأcj jOPo*~c%޳w+1L|i~BO~N-,'~c!qWoMx.Kn{x$|)h6[w1?%q~|%_V2CHQiKps!NB: 24 , R4xgx7i _b:o>8)^fFWB/fFhS ? 1b}k Z[&~IZ?@0$Nfͣ~ 7 7_F?3q |7~w~7 yagD^H?o~z0^v~lIj뿌~d7F7?:3? 3~?K5 nel'~p-|t$; 7x͚\v-C*gWp"gI5Tݹ Sw5!aZ3^ɧx#iŋQxى7 ?u džUBd__. .m fz\n/7,t_ 3.]Ay)"E!̈́Q _1xG!^3ӶgfdoVǪwmk!NO~Fo]@x9f 0.=^4F7x|~Itj|V>n_zakx6>-PN փOSo_~HӚat|b8GM!,_n}Aě鋇azSsAOĉn@D tu܍n%]䶓{.rOkKn>֑@nFrcnG$$kn'8֑$wMn$m䶒I&>rȍ&7\&k&7\ 9#7ܝ䶑[En;vMn/}2Zuj k\/ߤ^D?<Áwq }}}?On"frSɵCV[G3? Hp3$&h<|猀.*sV`Lp7\ )wYcGSic؛FM(I >#P^L0mAndC0?C  nS n BpwhoD_za^__ƒEqӯ Rݚ1[k a 7%VkH@,]g6֠K?0"M&ίFZ̯*zCPnNZCVFHXC²5#$c-,4jӊ5iE@]3z`AI͠ fXBL!Ӏ(6~`UfPZk5|VhO ބh!?ڀȏ6`+ ،h#?oH _e'*IΎo;G{o ߲[CIy^E~X+0ڀGˣcg"u(A.e^@(^y~e8A].OU/&;all~<|z`)~P2/.F^%2vg3}L42ьJ]yØ\'5;' K> k WDR+Bj4+*ݢra,GIm/aR* yX.X|vŅU˹'-^7omwčpYsQrR_~Erŵ:Qo( rJB3RS!^]T[].j^2Y^\2\V`@uAQ nub-IokqCBADSĢ^=yyru&"聆G ?_$)WUVX' j & ꛅ):)/Fi+>p!=/G;/pVrÙh<_Y՛ /O;\ e6///#-7MkbVNe|DZEˋWU牲]F2+iQ^0Tӊ•,h("qV^ rXIx@\ b)Ne]  jj w$u`7sFJyygLNhW:V₅8_fT2HT-CZw%]J»^D>y8q5p^o䥃"dyR1_HgnSL↬:s5\lj>rE/$O /icz{y":vrytyP^(A/CY-~ ȧyvL꒡:"l/Pp B&|Udh|sl=ɜΒCLcb>;d0G\o+"r)~dp7 tpǃ;8p;\+17 R$Yw yo7pE׽ .RX2_epEn n:nx n~\n F* \n n.S]v\wn nn  |܍I*4pUpqu'Upjඩnq_&m*qAOUpfjvTJj?Z:.;۫SUw w }ϕt}QeyϾt{M=7NrQ9WW?^?HF2Wߡ)UV7&>\_?UgT/!(/Vv?CUGb߈vd-g K?Hu;A5xD*KΆ\զU_y}ƺruDJ {k؆2z;u?B`Wt6 _G/O}XV~^W` P`SI8HH/ /*6<2z$4#df<'躀:'rM"lrNlVsWo桝 %B21q_j36qL(-w q1v<|ߏzϨa,Hhwla Qǝ-7w\nHHvߌ9 Weƛ.[ypQ^Z.]мC:[.x@))*z5\w&;؇1w3h1_7JT7ZI<YhNj5S:12N:eϻ?𞐕c'9~s۔:>6}l\P϶ [ՎD}E4/2)pxx 8@vflƈyȢY%y oXI7CoU]y nc͐{pu "*|kXWw6z? {ޛK{G{9=p=W1p6?l6+|Cw;GGNSҚԜ˿Փ^7thC^Gi߇BG4%}&cR8Ґ\@_>M}՗b}%iauq4`cHO&kX.37ǻAKZW%lv?=xvD ?h|_cYOV|αTc"ʤd뽋ŚSLܰoM̂s`:G2=/@w==)MHiCݩYFqGjv`8t) WN3ps}m߼qLψ}?0Wʍ l (Wݬ K}a:7xfV]y:{!Xjl4J9^/ cq|m@6áOS]r|_0sNs3Y޷7':)>;}^i'4ǠHW@FZ`:of.u3;g˙"gÿ)m;m}5Pb}EO O3W;~;2\:B=s\Ե'}Y _пx~s]a:Ɲ`ܹ 5|Sq3pt !86a9]Lnu0HU<ʯj=DoÜ2dEa1ɋ.>%8ҙImf]}+|\QvoL=q 7 1?:얍<63* [h?K^EǯLZ {<|۳7>}'lP>[|93_|i϶Ag+sV>n5 IaƻBI*Է^?m{}J}60zk!;906աRsˡ,8mXþڏ9\k 0 ;A]B5 q$Ϟ>ڎqm{x|/5i^Ǐ^vi`*Km証 9_2jZY'u*Qx9&yt~J\C}/ oOA`yr!}6܂ᾴn~pmqI#n܏i娤3{[ :)Q>_k~Z@@kcpء9nჇΡY{hr H|]}E#z?>v IW}/jׄVIc?iIF^yÆx߀STdtGQ*Os"}*.of:xrKl o:,6,_L (@.vz<WmJXFs6[޶tS8y;.Ѭ TV Ɯ#VG _ۀb+GI{W|FD~0W@&EXWr[tt{, +5I_~u$ߟL]I9< ?7t=jHwt< H(KFZr{J!. !mi}mUs*ry G2|ct޴`1; 6|jݐ=r"Ztk@;>.Ǔ P->Rx*vtz>Ofy=!ԧ38$u:Џ;#|#G#_} *JYXx>țMСg˗*?`[TwB#Tn* naa}!_ޯIߘ[% >~,!au>緟@Yԇcԇ]ׇW@ S]^3my 쒃Y}py}δN[yO<8Ux2ycIYፑ|f䨃zvXس?[ loo}tUCێHtmmw0f[Yۺc7?#ЏU$GJyD8n5 D9s^cN=WK8S].#ڟ_lzGea r3雤y ƹ\y%"b1cn{4{~5ʑ} Α!ҘV9|_V@̛wJ4^|ܲ\HsY|tSu?dsy|gSuҫqm0VV$ŨӰ qI:5,~Gx5+Aְt] >o|E/{Q?_wp8ߟMmnc{dΗ7maۛa8g qkV|P֟MGm'ԓQ` GQ`>m~֌~Lel#mpk=A:o '9No'*/'R+"|KfqqCt9{roЃȷʫԏ0 8on>\ȫyDx5Xau0~[[㖪 n zmURmܠ=D ƭS݈:Tp7ImxQWh߳NcV3[Qc3VFfاb%2hO< w8GwYJ,)bM`3nld|l[ ~/s>{ vd{K7݅2`9!W t_ouKژZ` :\6n6}aO3ZwM N| 6eu7]87S4'!?9^c @9~ K 986m=.\? iY*8CgW{p1lNȣ帳^/;3gT g:Wx-i|<;ܷ@7v͓}kgnx퉵8qPo+~ K/Tߧ{tE|CvwŪ-|zØ1{ܲLb|ºt6?^(_82O ڮ,V}He3!ͬYOEՔ'5i4RN8-ѣKA+ -hkqL!K-|{eש?c9$}y a{Ϙ 9-5#|c;<@!k cQ~S3I-ސxh3mf@/_;Ze'85{SD>vD>~=.+V4)'[XV|Le%q ?LP?͍o&upjnx|i'fy[@٤?m}qklǜ@I[@/5(0.g4ܯt >i`\=vIx[y(pnCavWׁ2ՠ^۔h; eF%8~:)?owoJeߚtޣOk _}ȸ*>Mae2%t mQ~W~nni=c/iw qp߳"Gm:_ 7.@CSwF SágK;Q˯Vݗd=ݏegtΉ2pz$~v>Ϟ!?xγ=l<9_x6VM?sky@0iop]I'SwMFxzjswXv悩Iu~m;ip\`a-J?G+y>%1o=9f\OI¾Ww ʿ΃AP@W7a6A~|Iel%`nL_ߞCXżNR$ y`:*EȃqSVr]3A<>m3) Xm;̅8zNy\h6 iwԭT!,`8r_$[!OhE{^~g-l_.h~LǍ{ \SB|H1Pi_Jy=.8츉Bc\!ܖv%rj)|Qzߦ=+ph/ n&[/X }|oжnC>Ekܰ m;. >؈ Uom#!>:4|Zh C!̊Lg.'F}jaW1|][G?m[C}-W:ߧ/U|:7 JvNr.۽+N?QT. x{&3\sDҶ\5}WY:;1GRERw2m;ICN)BGUSxT> tSৈ9  ާ{^mw@'T.}8>(]=P&Od2QS)}/cqc̓f3x?mKAҐ{RcO&4|p?VIy߄6'}C#Ozҕ-s=Ѿr:1xA>/57Aˊ]֭(++d3d G%\_%hmzx?>"tHlum0j qDPCFi HHH2IG;4af;(jЈދ#":lq|;7\taraf~߈!U14Wq#^$2/ @SS;%U}3}JmP - N!O9J<#1<ɰ 0B(Çc>t(->D;|? 7ŇRzt:k;2YS3v`>S Dԡ_Wt9S˓ ig7yT@ɂ=jGΟ>;(a?r4>*#K? ~䐜k'8+cn\}KpD#wUNH?a?OO5쌃Gc<g$ZAੈgT3]q4KT|(:6A4p|iGp8rqGYТ3?wd%LKtv\/ܨsX/T{^t h59PgԿYkw9~E|+\N]X N@Ӏc8΀* ''>^9Fz;0Q*=:G9=AH&S;m}= V #Lp=.eZaAYJ9u2.a=曛XT\^1j{E _1Iq $ՑӒEasxD zg!(?}eV#ˬ3q #cl9r&- 8#=G2=g%s`2#h7G0t02>gN]N>::9ϰ H>uRN'eĀ}@r ѡdʛVi7ɹLKNS$- )߀j93^wyp5h*5+|Y0TgII^c"x|G3pؘZLx.Fô^91-d{-cp 2-hZ=$ Z xз&E$a"LpՀ~V`y8 8ОoE7 c??vߛ'ޙسj޳s~{y[\;6kp:ͤ9l n_d~,j/_hSû7.=K +POVz@xXU띷uTu TkR])6uZժR~ul|Gm8StO ?H6쎱bK? ?7~+'跤>LԢu&c65~{"Yq툇/}lt/>\bTqԙLjN羍Cg/aR>j1]q}[1j?nz~= |jko-My>q6pQhltYqIu(\ve,pի3WND[-{`=~J!\ݠp_ ^9G=1˷Bת}2{B ?#jʳ#uhݳ|/}9WQ[7EBjQ'x d \3X&,kE)dwZU{0u&;HF;.)}J#h]B[!߿hʀ;eBog w8j?=*,^f"r tjs̲z?Ѻ }rb{3}_"M͍rɦs5e?@)AY<9;,,)[wd m8mم;"a}alUℜNj  QʼQ8鬊-aF9nJ~M@Tk;+$_ އ/Bxצoμ,&wm6'ovY/d&ۘ~iS@^,L _OsN<4PGw#` ^]:Q -C{P>Qr |m}׀@ϴ7s!ܷUCkkȌhӟH&/B:, d?g ɂ$}VŘE{>A_O]RCI=ƴgJW6I^k;/2KmXqzRpw(Ng~ǎ~ˡdF#gͻ塾_OWg;ʢ<>wϣ%ڣ;բQrʥ=}Q7=^d#W{CrVyVW{ž@.ё%;tJ=#RM1͖=ltMw0,QGރw(Mߙܣ}rYOgN٧Zۤݵ+ISk$E>Gޢ7~'^>Zoih=88:'Q}-88&'/o8xG^ϧ Lx/io"D6+lHб+ xx%$^q"/%/W塧~"^3ꆱK<掃7}zГ:Rr9D:f3 ո%OS@ηǚ~(O&Ou")byA"2!}~9zȩ/1eے11&*o ﷦yy!n#F\* V}<Lg 6jɎ^?I,~1XUa難">[3Y\N19E+4.|wGSWkWx}xd?}ӈ_x%ގmN^fEhD{V?0#6Grn%vLrFRe_;S L0}󷊫wOF̵dk y0w@g> f!3h ɧ>[!HW!)B2L]h'4ė. e,DXtBVDz ٶ$cZ+$G'%W`̙=~؂_pS6][V>N4Oh2L=𑽍[~T2S?z>O|ΞZ>(Ur0rr]g:SD6v\s6wwj=, Ѣ||nU7zkynLUCySA(3~`Tpk.RI'1G'9a>Bq6}_| 5jc9{2eE. cZ ~ސ䝾K24%)a/VwҊ5 0_s>;3"~C6:|QR|mߧv|jW<%ϴ?2mH޼ tCB ߷`lLXraj&ڨ^Tp mZ#"m pD6DPk$׵vimNVsy(4EYep@x|8С6*[*ie>}x(~bd\+Ч]Ndn'dVZ ]Ew¥lȤtD, -/ٓI>To߽}{VT}^(Hх2=YC ;ԦHDŽ+uɀcA}GIʙW69w3|jM b?G'c ceuɆ1kӾbcJY\UTKL{G~aS.ޠqDEd%n +VF4q"¨IQ{J9Q]OCjPբ.\Tn}yբK {)Ky/>C6Dkns5FxQ+sLoo}mhFy37m"G*U aKQ4T$'ah@(D\ޞ:AR6;o]² (+ƥ~eS :k$ھoyHFYCDikp;dK3rp~^)^ |%cD_zLD1]!_ kW$_Ir /'ѹDE4wc7/Kl%mkl9K嘜 \} 6YS~yCyqp{ e9|ѳdc yw1!i_ 8ECMρ+d?= 9xr,urUd sW{OI0]A (i[I7%lHH8^퟿M&f+>,W(0*0*0-rCGH;vJBsDf;G$ ^)98fxN; Ƙo^(DКMa0GYj h ,1۬CVJS=]NНO>Z~'Gd&uQ޷ ro.E_ Y}/Eu&÷ EHG]7˴q Kߍn}ht\7*o-^As5+Z {Un]A>jpgaoE5Bs3!OxQ͛M+8 ˫*i%]W_ZZhtkd[[/%O}2퓏^kD?t'UxgC=ӟ((taIQ)m!7M[+nZ1t|INL#}47E:Awc('Jg S]wP9Cmơ icIhݧ'Č}1ILsNsv߯{B?+x>93۾QuO3v͖F}>ߐ޸eY~âQ6^5kɔ{?G͵m͍w٦?kSonĵqb\C.r/9?~l;NijѳyßVmdDy}]3Uyg3N?WIrHKn@Um0w*;zE_D- OX;+\Ms׆ϣyc7jW~NJgv<; Dѓ%h>}>p<  9K0f-I mpRCmF||_gN-od|xjyAhif;력%I<䳋!Z5GR> iK9q}>ڙ>_鴄B`YnqA k(k_+ž5\Fvg 26 $;!'ܳmTQ协؀:7cx*+'ɡ="ꝏ*{MB6B$+N'c׎ {jS]ՎB>^.ZJOs]Io3GoW(P{~ SݗЙOAQT< ӠBOĮEEj!-R6if:Ȯ &t^*GfҾ~Jr4 \M|y69l{ߓgEZ^ISȯjRr-KK!A5>F=ywSSvݬ%Zg0oo^Ⱦ֞ d>} J<3E:d .Qx`ړfre^EUwמ%t(0kBh릷uƮVЏ1Aq/&?{R(pV͜$` یK84yD? C:t'/44R0_>0Yt8-:Uܾr a4#}y9޸Mt?*iZ ֋t:d=j* d0 3q*TJu{T0άB=hhiòm6)iۨt c?η+աEEŢPZPT 9fS0~ZhEeKL?ɨ}:2 mQ Cص#-99^|q=dDcߍ[="wKw` " $W*^[gW ߥiҘ~wM>]EG P ͑ w["wkDX{Q]5`9SXQ Z%βށgml>Y&4fx߮*t~}M,m'9E@TWnZ 犖lyŔSDkG磝E(qVrNϾHCH,Ӈ$}Vv5"S@m-" hL B6fAwWww;͹=!Gx q@@xti+lߢ?;7o`af?*Dy)!H&T kGH!aVZȵvJe} OQd 'er:-egi/3tGQ~`YVRvjeWV־ xn4O?i}-5=D)1DܷlȤ@ :04ߴ@sƴ* /di?xnۃ; \lCeô@=<nz{ԫ_:HnէMal#U4lV^]HGsHuP|J﮿sp<:J0nL;+ u"W+U?*V{+W+3pXVi)kaÒ ޹诽WK]=iP {sWԣI>Aܗ7ϴ`ӂEƎw@quz= J>@P= z5R J9 eU'G+B#c[ZHc9.d { Y֟ khٱGx u}7dTcΟ<>OjZ]}WKG;x۲H\o+Y٪1\,Rނl|}K֚@ʘekdNszᶙt}$'z vj@W}dlIok7}/5@ҿdN*[8}^>oZ>/<'̧7ڸ~҇n6~c6n>_64^7kz~3^{ t^NJ/#}.a"Q(@ C}|/L}*踹 QLS<@:߱Guxmy{X+6wݦ"٨K/LpnTwZ-R߮/<F1yxOr&oi5y-gŊu5Zҙzda<%{V#9,,g9Cy\тeۥi̱JhJЎ&H Oy"oVɟo+~([/d/s!_Ve-3ȗyqz|#C7/HP[|Q%u+/=\g8}Cr:+,iEk0C!5.QUC?clo. } _lOH_x؞wO{ݾR{ik)o[xKQ1~_z4գ%'Oh%"4}'=JpFydΣ蝑!?ӋvβU'$Ħ/гu'VOi39gCw})Xujӱnܧ!$ݿ u;9c/SH@Rf#*m9.Cy`sw1ԆBH7x \zYϻla->I+ Z,i(iʖz >߯ھ⿶ ]|m1j=WQʖ/K?7/8Ceڀq>گn'{jŸ__bP{!ET(y2oa~2MŲ~iP2idU#hf.J^[䞝S*dx lw< y-}wn;n!=. V,4џ:=/w;0+,gTJr{o8} w:Z&ڑ ,f#>gHsg ? [Ns;Dg5"K}2leW0cqjG W4t9lq7H\  3[?ޱ 0+<5_u#/iޕ ?\6X%>)XZҾ7_ܷp_Eߋ>KaDFnX9-SŤ3LjhaiI>MAWFI#TZKߍ5$˜A6xaFuX>Y[ƪ^濴q<&C'Y>gE濂4u#vOOi?7~pmWtڋ{d+ʽ(kr$mE3 gڦt){_sUoNP?C|2Y sht4$u2JnH߲ʏ\KeKzS7"齁6?z-3d[ƙ*׶]pg]Hr'C!4>Tk;_ZBJ4A_1Z+tǢӕǮ_#bKBg|XɮAr܈:e:Xc:6۩Nx=pAj郼ev-EI͕8A~/r N/c|z} C6LhxGvc:`1t:gr3x8t<9j{@Y \pCf1K:+PhƎ塓Ccya]l̴,>hLXt(J{7WZKanZ+ /N-gH9d_d+rH "rU,ī]S5Җ0isʦΓ"EWcGzOmo];=hA^K*5V 2X?tCWВxsD`ΪrTؤ7t=]( =kгг{y 90=KYsϳmT~36$zIvvcϥ,v8os$Mg'K'XOެ~vaZN_Um59w[x/o'H~ݬt{oOkko,SoC bogDm3֩IǃoGo'{e9࡛<"{2hW4X9  mu蓼/;J ki)zj>u\ρYG!뮥~t پ3xg ;$WMd5;\s>c93|y;(?}ѿRC^?2_8*kD|mvn@X|܉zx}niz`noqГZ35>Ք?$.OM^f< G~iSޭZ  E~.m}$4q^´ =ػľ,Pɢxv~QaQK +bWD:h 7]Eک-o[v=Kp| P.պyWة7G:8EPp =O" ,f;*7ÝA"?A`(>##: 2i7MEK=Pr} >fy^7l[Yꇑ>mYd7a[6:\P,؎/=):uFX ݦSrOD-G"cvv(g$MǙŻM{ߦ@\PgE!CC51fzvIt>Ueij/s =l־uBڂe"IEl)t c3䆃t3vhiR3$we!u9:Mf&8<8?߭Nk^4="]٣Hd->|1r`Dڰ#}yOyiE{uh-{1t^ځokӅ<"J N\|v`2azCz_<)S]2E qx:F™n)tsηLv'И`vq-V,}rlt%ZiFg??3hE{0 }hVԋ|cLfߤ̵(C;.?B[Jdwiw!;[, 8K N磐tl,Chf@/ÏzH8>Q)/0֘0/uNai 6GycLF}CPk"+չH%~o30783VVV`.dsRV^?au xyMRsL:IeF gIgȝ茫?}ON eC̙6J{Pwlݱ?tnhӡ {}گoQ_D4y9L/P'2}"32d޲g"$ EEOPpT Pá'BG/}:J>, ~X:p8$ǚ(mo% 'osݺ7oe,zIbiI'=\;^(,Q_Bz':p"t~pp,#Yl2X'F}x}q316d'戓CCet gq,F tm?He 7Ҁ1bym6npܩ5̵k-V lzaџިeϣyt,KilG$GZlRxN>O_=Ƥ_\a||KΘgib7n9GAsf^[2'~tՓ|&;II;&>$M$Lrw߳LI$'^8woN}$'^;w$'~IgO=kMM|o{kj{ZkZ[kַ7vzjZZ-u-<]5Mֵ]Sh4mCFe:껛<oO1|Ykgm]kq6_ކ>:JT.G[4<}~EX\vbGmX@qy  Nt/&-5_ݶ𱶺-m^O(A?lQhZsqcE=HYK%OH#Q`*hMwݙEwUGy"gS]wxroϽtCt{hIS,_ b;v,Hs/%at}jgJu7CtY=,m]E{KxKۻ[=W 7ՕK(|ȫVO][!Su ^&U>)SoʌYf2 fƆQ@+ .wA qI''6t쯼 W"G*#eK[S"T?9'.~DcêyʾXJ-]lkh^ ]}wpjfHu 5Fip]b猋Bꚸ#a#)\G{W(2s¯u 9+&kxrY4GB2;#YO/#,"tž3еDV8Ҹwhߤ03=wa#T֪Ec.r]D=.o]&?CB}=JÏ~~]ZMMlm"9>؍G=¨tV@!u=Tgvg°X[YO5R9y讒2EX6n:$ Cqhh -mZ|۝\z\zsz&7\V֊͑5F*Wo>8^"dY Dwx.jf:4_/ѼMimX^vy;QBv sX_~#sW,W41(B丹Jl[d,gH 3 h)Ɖ8 g;hHge }P<h4 eR$Gg4u˖cSZ+N)_,e[Parh⾔}eiB,)ΰ®f_65Tɟ0L3 i7/ෲ߂T:03 ~!LmDȆI+6%ـPh%RHʗL/w' [./Do3!Di(i[$Z/$??-XKYl/^T/헥8Jr2g\*< ❖kSDbWöPhp8p0 Ҟޣ(ttKe}6M c萎JBo|͵*~Rs<#vnj/dpQ=&U^H"0lF@C窳Sg EQ$Kz4 ~!. \P:wwLERwrƦ9 RPN B3B$K \[//'+3. ¸FdfovX!(\z9i!^Y--#a%ǁ8:e Kf`67nW'mJn*Y KE0BP U׬nl'ggkN.0`p@>| . IeyC&dsdfY\Y\U9n.kՠjr54\FW#W#W#oW#_W#O_jѼA۵UMh?2)7rxG~OL醙ߏ*>EW]VfjvkmdVv;cWc7 nݝbwvd-v{ݣcwݏ=B; vO{a,=Zصή];f`7lv"v[n).v+حdnֲn3vcWc7 nݝbwvO"}Cf(e#v1cP|1$?3|ϫB=ϵs:?9=UA muKH2%)U}B؏ze$ꔿ(+JبP7wh5P\/VԆڕ>zӉ ӏQ#Q[Q'dz̷1mc^ _`:OQa-ߤI\&{*k/I/*АtTA$0ǩXl -ʿxMw#,`?&g*rI.RWrQf?)9qyi+?n4OkPېִ-?e;i~ '#n.sOO)\[5*\nLx)M GZ؏ޣoF~RP|Ayrtُʿ馮Qut=U4#/f>3;?2e%t.-m:տΟ)l>iOQiGi\gǴ|/miK,*ͭ?B=+[ҶrEn(4߂δ\F{徿_r;_؏rHI`?5ױ쯥>U:S~kO_f&*Oo@9\O忂`?`tx5r όB u=eUF~?٦Y^(>城qe)dqgzkPZKSQ3"_3Yաgr;Z3sw&˓gf[Q3Y~dp2 |?`ݿޞ>w0+_ 3G ?03o0; ?jl6/FK7cnUm/C-[|#;{]3gЭs/; x`2`t.*|~&Xoa09q2 802A 3]\&[8LN.!˛\FeFe~~C?7 ~~D?;όE"9gE.c^ٽݫ^b7q=v;bFvobfvٝ-gwBvsٽݯ{;ؽ;ٽ]'y[n!w{[n1%.f%.e>v]얱rv+ؽ}Jvbavfw+]Ů~i5jveְ[n6Ȯ&vײn Vv׳n;~Nv>v7]]?Q^v~'}J96ʿ),e$?d)+ 0H\.\`\5@YLlu\ ,7nЭ\mn,pݾ mb@)` `)>PX(T<xP x0`9 XX X<X< P   h<Xho:]/8 ~&@Y݌ < x 5M< * ;;<J'Έ^ v^ x*{P7ͲƖ.O[:D^ʿi֨]׸we5U5Үih__VX[]:[SsJ] n r >l"W?04Lg Mn# lS 7)Ζ='Mu(,[iXս~p҄D Ą;"v4& LDߘ(DY&EF9& |+E C*{6­jiMN e 7qHy`e%jN@VhLd% KM]ԮJe5w2"qi}& 6aEM؊"&lF`H0ِ1[K=eJFUJ^UP*SM_3RMuܰܺε]GjT̫hu75a%a6y0E v"/uϑ7l)_yq碘Nsw,Xݱ(cPHcR5dmnMV; w 76vz;6LY_ "ڗ1r i&2gcpWm|YzSdn;:pc1^_Cq&ѻ?²bE R|vEXȣyU5xɤUId&|+jFx> VEMކjj{7t44./;PCբ߬lTm^Jnr⁲.j[yGdrJilh6eUTuЛ?nkĭ'*J|ŚȰ!h[o}w[e*vux["/yzX&Fkzw{=>Gcޑigv2~2[4]¬V*ή._%(6DC} jJt5v/\xǝ-cPK bBcom/sun/jna/linux-x86/PK 2BzïD m'com/sun/jna/linux-x86/libjnidispatch.so mD̽ \T0>#L::hTVtެĨ4|BK 3>J ;Lq:NhYYQYQYQ>2J-D+-,ZݨLIZ{̜gz~F0o0$@o4KK0z7_H#z`$@n 1 1 <= Fqa ўAw+y&@AO~wNvemM{WK +y7o&n ï+$n4[7~/~=XV!1~U{~᷉K50 D|I{~VMus-?F2~`~ Mk[{[᷎̀_:>ޅ9U )G~3y~<|OOe<7~y|*Fo6/~K!ބNyW~s3VM9<_yþw2|jx oAGR4/"?_/~A0~廑5@|PNK_/dM0 7X_;uD<е~iy ~ 7/<,)6/~k޿~)~Wz f dN?(\-,~g*Ǚc?%ę%(qVx? &Ȕ v__;:iø Oe a#=cR, 0~n8|f;;FA}|߀tDR5a7Ir}5q1#EFGl(p#Oi>b=ϪoX&/o[{y?y\_x LGVܬ (iQ4_|< 31~ ȣ{pn$A|j7)Ǘ \+5:v|5+I}P4yxGU} jc>P?}a?{$d~gC*S隣v o4x|5Ěïї&^_+b"/;,R?!qazP p Y|983x:ݮhY_BXlcƏpY /3sl>?"6WaHЧO}?߂.d7oJ{-ggG֖S:Ok5]a/58փ1=@1_~q+_" G>7r{K;G7R雀z?97ojU?~cٻ vj|0#FA?ʘq Ľ*$?{G_~7znz1>/rR4kɼ2uj*[IlB z8?wez3? t.a{W< Nοx'GF?7_SLTNuy0 /pnf}U<+| )?˿'*T!,MSן'GT{^Ƭ~sasؘJ 5|aԃsb7 ﮻TBFk/B՟`}oe'&nOsO1 |i>Tx+5K`OGX9_8;1^7 24Qȿs*`| ~?x<D|9?*A~6jI0Ƿ|4 ?\OjǓ[ ﳪʀ bcp˿]l`~=70?w_ J,CVޜ9rl|̞;\CָYsg)]R[b[X0yE{~qEg5-..,6)fo϶ϙ;2'8_L;fʻ9$CVIQ*̙S0g؂Y%ss (&sr09T_B!Xk(srsgfϺOcxֽEEܢYs(2 `@Z0kn,+,0}$s`fDU$]7Tq}2 ߠ~~CpTLei0-̶ќB̹ͬ‚%@+dpW\8/Kcٹœ!:%{q;Y$IUI>ir~qnv qLMK.*1.gϲg'ΛUȐm maA}fμ7w0ȣ˜"srbJC[ *qd[d)_x_lSsgŇΤ+tЙRI١.O# j)LA2 4ke>TW( 88_Z<`.(s Kr! 2 gҢy3 B֒Ef$u]رkiJ9\kiwZ&]8>%̓R2)L$d %(%S(9)B ښE-g~vp͊WPHRC E%;N7t-rօuC+D0uNBC9钠٠HϝWX(T**9JNS TB/ -STB/9-σpV&=x }1IqwF!~IscSVAN1q ]xt (.C~^攀(GZq늆cOSk*ȌsgW‮Y ˛37ƽw*ZI9ss*hOf(K.DQ@/K&ϐ=7,d+Q&S@܂0̙T?͖`P]υEvCY8( t_0 ٜQFJ yf9px6+fT.]#&1iVRiΙ9뚒kn0dd۳%%l r ˽־r_ *vcܜk HW玅W/võނ9XatQYC:YybgS/ia7%0iB)Thi2ASV0jwt}yfoU \2\Q37^Q3 ދ+)<4fp2p:g0<"򰌇<\ ja򰚇xX (C8 P.OAC0a W@>C8s. ߅C%P!" @|> 1ư>`B}!ԑ"  v g0,p 5]cx 5]ck /0]c/k /p5W]cx5ׂ]cx5 `v0k o0Û1Ñ`]ch0 `p,5i`f]c8 C{;p*5w=b8,k g]b8  @_cz^^1,B ^1`>zp)~a(B@.cXp%ՠ nb,@>E?1| c?1\pÍ 1C?;AcXǰGWa.w=z_62L /cǐɞf㎧||驥8x<5՚XWQq{;3]O)1)!N< <# MX8f1aqgߠsj7"`YmY?P)= +%ﰀ(=0.3%a0_i ҅AH|ox=ZyE줶ҵ~'SB>ᴫ[ĩzYOo]UkT+2V̀۳V%sJj3_Sa?oQIdV| | 5 ucZ' ;ÿtxH_JsG'Vī_~˿Og}ܛ?PCӔ̒]Fwz]v"8\7kJ2"/kS1(PE*`,41cMq +K՗ooT<;28\g] 8LSBBÝbl|#q`Cp 5╶p?A|ƹ?щOGcp1VZb{Q!*'jhaCsZPqL1LE*?UbPʞ("&*)D}6lq?>|"s ކY2҈ۢ|+A`N#Z2IQ$8u#F1Ve|Rp.|kv[$ڣ 6A({6͌mڟKhkCl퐣e"m $jzQ؈:1qr.Hxߴqӟ ZN lq0F 8sS(Cqg2:v.ȗh4/%ubEW(.$ `WOPE /tnOcbތ8y?`8/+96ŝ(EE-YASC,V9&?ܨ^:?)}R^*l@ :a,@ ]Ozn@/ ]LZCI WcJZ@ʖ>׻r<UOĝ`}͸d`4|r %_O7iiyi#OxBtV[c`} -v&h<)St<΋:اך:ϡCFB\$m't\¡`ޞ`xpK4< ;)'Í w% ɔ5C'"jkEԧҚ76 _iˮ$ǭ(0^huΧwr-H.4ԭy^(S%1{ew #v3Hixf~up̦a p$Nϑ,tDW-s+*%BJ핛g2E'D kt #% o%j6?-0*'f7KdBqmeⵕfNj7wlЊoSX[%nTe{s(CUsY.C'~ˁFl"z2ꐨ T3Q/SP,q|#x/5h:2`*E3,4A oXB[TjBuJ-T%OZU;fW7/ N ]%HJ%E;l1+QՖp9(&%??ҏ-Ve2,0˹<%!0K4қg m˳se3UEIBeA/ljlmqxͩ,ǂ,X08kpxd˳VPkq\pOIHT)f/OJ (j8ƴ 0?8ekoڡr3f $BGl2=No@y=CtLN($TtoV'^_ޏ%"et6Rt]Jrelm@F*׳D =N4zָѓeLyN`kӵy .+CB pW2sKfDkD`D9 jI>+7emOu`qњؼd+PC$K魤hᔆp^eTthgRGXq H:^%*qhl|,UOb9BQTܸq!GҺSn|2K%v@-VfqlUvnc\-e6QPM-E+ZcM;|[f  {g:çyRf<)G3}ӬY tĔbxD[Mz]O55鍿g57_.d-O,tbn*m=?Y?,6hK}SBU`kga_D#e]&,pdF>& Ųe/\[}UZ<)$S@}x>O,>n b8s>8Z;,Jk,:BzjykwKҘ"Lo]6zKiϳu+j|=# 8qp:fPkL,`pgTUfKc`3$^IٻP⡽VhT"!̫5'ybO8^ZˋS9'he?\}IuOp*gҍHOMnu\WM tiLqf=?Sj[u`mKkN)UX-~?H/MWēWRpwr DyJe%5!' (W8{]C‰&uHMbgFJ)fiJk dgkzh8UfddYiF\ãoBJyMalaAe-$ @ $#zĿMևqHTCĻJڵ?7Tn؊MLC~ 0MC$3x1׃!PEAmR[Y 1 mJD F6~S a%~)U]lfnOf$tBytuFa`ˆo [e*%_j 5 I~NPH êvfHmFjs8D)+֓˘)<+O2{eQ p?s%Fm)yDܩ璔[ڱL۩$ tH /Ў UeBکՄԮ7׬7u ޴/ X]ojjHenYgMI#)Ilb[hobgpw`ff3'#T'3{\YAmD*#4I); i5h/٧WŠ$D,oO]wg!NӍIeR#NAYDEbL!>Ĉh)<<ĨMû%b%;V}=2o#DMcQswGnٔwȯg7tʋ9,V"y-3=۩דC!w(V1f"7(Yǿ15߳#RADcJ N~s&L#tho[9 ] Jf>BkBV(φ#dNge (d_vT T/mgҟS>cېZ ") /^ݻ>SxL0_bg'R` o#=?uZȇm#95J%͝ qi0C-$@_+TFlp:/KqukѨ k reG0ĖD$iY$= i|Gq iV?`6EI<^q`[=I݁yAoqHܸf9ٵY. zp֌DIyN+;R[t)\MOu!vk_jՍUT~;ӪUZ_ⳊYq֓Ll$%thV2aj$%ʟAH!c,)ơG4DcX5v>ĽJue?]鞻' 81~7@4B@\ae.gT3X2ߏߢ,|Ź܊0 [Lqef/8iCĆhQ}hh[8e+2a8z>KxM62 - 'Ilm"tљ1bf>PrJA`DgFu mAq5I]Qz+V?܊}Lr^ [@ ?|.bmAu8~42P!Eg S ׇk( lKlF?dJ>g}hx,r 7ϴ1βKx<\| ܤ 8_گNzK/H6ۡc#o[4ǻ|׹`ZU>4f&/ߝolD̫IF]،o8 뉜d! K)Hg -"$?Lڕ%::Y񵒋$>IA6>!AiPL#'wO-A/(Dva3x&Y"^׳_qoߴ́NUwgfV@b[wVQ|N|G;#TY#$۳`5=x-P<+.0WԓW$g.i+Yo̬Wd+|dFh=ʙne7 OLvdgz=tNX'מNWv^Qv}rf[f(寝_ -dKg.ӕPvv~Kz@Mzdв^}e7te+WQvpvԠ:uwJO~?WWoF}ivW/ ێ*SuvT)r]"@o< z_pP9|^ϟ/| m__ГO _=)&:ro(q ھLς(O?>x>>;}^gRPd ˧>;}^YЗO(y%|h\6l1Xe3 ŭWO.B]=.@ܵp+T~tRڍ|)=yڟ gճw-9Ғl3At&]yMO&JTNj8F'tړl%bFj`yF\Qgѓ-?`@4fݔ[&O)}U"ٵŷ';FyOgŪϧB+cfoMջN]{W&'QJٴ =ɤUJfʳ̻+C/ד̧5M'᜞Zc9U(ɛL&/דɰ2ɩ<+o6§6կ gCP@/e쉳'B h2=_ġ9O§ =qM?pYɧPc_:d'9+mY~JG$=5IjX`+ZL&KJA|P,1EGqbLCAG)y {#R+it*dpem`\͋np M2L"1|{r~S @nևdeVpB#Fs̿}cTLfu) /m@L␿D(+GLJ( ft{Ri$HL HLIgHxqAWHG3E#١_M gkbʹ$n.Is 3l@[+/P*Hy[o*%*pS/*:Us1anTX, y")e*EiU~kPnZL(zG|Т䢥UCrw1;YIE]PtGh9paJї[0^toYəU8sH>,<r{m`EE_]קh4tTfxz {Ko+sc(O4m;N|Uq;sK{OV ~ҳ\ۧ&,eR` c}ر’RnD(b." ݾ7ʼ%Iiy"?rO\Aw:2|Fk03AʇM'l؉.X|w'9#:rs O2QM"-s~/ZYi%$/v &,Xۀ.q <.</u e&Vɢ85Ac>Dq?mlăf_J&GQ3OE{xNAKz kYVz,ǍX = W̎皓ix~8_L2!7bUWm)쳐l븭eqoh}7 hاʴCq ?0VB:V^gtl:$}yb; 㗙t,'@TPbEf[#] 2~zGrCx ߝ^w*Ksù "ٱXn?P?OWsIހ||JC?)'֏73Q&%=p9zr _sܤ.'^zr/?xW\N/ s<.'.7˾7ˉsgazrQ 8|:1L\N^(+5ɟSTzԍW⒞BP i\ñӣQNh3r^g@c?8 thh@cOko;i,Xz('{2oFvbi>ׁgǹ*/ea8f٫!M!'ry2\fu q)Y(*9fֿ́]Y!rZ2k!^1!/< G151i'Ϛ/ie8V*}x ^|ld ?Z PzF;G9p^x9/-K`/p0}VмMYx 7r#;'j!Xz-IC01p1}[P62kE%zOc*>.q)=^5Me ^vweI8zq$-&K#qGgWxNX^$pkYl>ߜ6 BlՃgﵴI^󵮟-rKY˭k\3'cˎMס,8̀3˫5x/&S2|J`*MztH3n5qC+\qjA.1tIxSnG)jyϴ=$V45 25%Hdx0||ilv-OG4"yFa^] ,e')7#;S[PKw]2eh磈l9DUk%G$5MiOI8T)Nqy[m댵ZLgYְrC)n(E+ѶYtJUbz]Ų~vg &JY mXM fJq t =PMۚlOIm֕`fBz82AǛQ.BL3@ #JC< ݌Oy䤆1O9dayLBȋYP.3b-Xܤ̕3W7GrT??PC# p@%ҖCۧ)އV.uflaWfRi.,|)؊Kr}n6DzEJȗ u2N쿃짚,UM"Me[/8)KaVul䵷-G$Zt%RO)U9 SI.qcmY굄|==0n}@ceǠpd 4 uIb};@_vr%nWzu=^K,#`g˵&,Ƨ@WQc Vo$7'At^&=7a }nwCR0tꋿnPw'KiDlq Uk{x 3Q&~DlM;6|r*[g#ϡY/A޻On9X+3;-wsV܀ZGE*gm\\x؛4 7K㯙*/.ZbI IBm؅i;Q*} GtI?H-:J)»hp;.o kO H6j l=c:Il* G _$mhxQ4!ݴc\ENh8A$${}Fd~;RxD _Eex@1 T1܅tUN2brHG&DWϝ B 3A!>qgS.i U*e&ILi?Ae"bƏlxA$?;h_rl, Qa2 ?Vnګ)ya"r+H: P;1wQCrJ>{W=މ|uC[n3{M6l'=LYƞVUb@U5B "0r m?z彝8J0?$RgExF*~#|^Z962T@w܁ n+ )A^ugw`ݡmAw50I'edpaop4I&WaMtۨI GYCIQ4*_cL75Y&5@'؇w6:̟lM~xR1;294^F~5PF1̅Dә <CZe׻brX#y( |~(1xY^%0QG)FfJ <2)7ĺFSG𓐓VFa/H(`!pqrjE2ǯbљYĚpGgӻ47:I4ɾ #1QUPettE([0^fzoW&fX5J()}ĻtA_>Ҙ`k6 Vvپ\n:U[8;O*v]$`P Ppv5S $[a S=)C1u. |,]pyV/ SJwܞnMSܴjIo!q~WnV~Q7)thH2yJmҚz:'PbSq l־z" 3[=a*5%]U*Fx.m>1 E8}S4n14+M/=e:HF&w\seu]l­zB5C+wHc8, &q=p|v,pLˈ5x=4^g1uyvI(ǎrbBĕ\6`"Ʊ4k@Euk<&\O(\P`}ؐJې "RYRgs-Ԛ*%Orie'V> 'I:๛>k[^!zpCnWpa~ W_ͺ`tElnF^ʪzf.fx68!nSbS˳ [5r-L7 4|/hz "ț"[hh't}Y'.~aoݦNAQ8Ș#p+ٴ[ d¡wk:D6* Z`6]Np 1:6b|( 25ܬGfG%ڢ$Vg kM)rDsW%mg# LU{˧ciy= ns<3_&'ݍ&1: 3[%8 -~HKB(+Ӽ4s3|uz'#tlF HOј5N:uHum/FK]H} <M.VxYR<5t_rtw|Sg>lMK(f=}t.+SoX4{kg )%țqvw!`;5磼h*{ɝ* Q|BEr[?Jn+**9~a.)pMR(~1J'N^GQ nLyK<1$E mٖTP*e}?U() !xEc!5һ%&{V =l1x(mliH&q qgRο^a8|I=ƵfnǯnQ߾ `-{xrB lm+8Y] t_2G3piâx%>лOrh2RQl7ͯQ ?w,/XCE45߳ 2|i'őRtG"!?82V6E)_MA`a?cl'ܨZ_mbX#؊!FREBsq?KF5 &%TE0sx$͝UfJ/lHis_[};\+vLjS,hGRQUB.T_suABےGr' ; w^Zws'yl}q%qm^pYg{yz~ml3f֏PObx Bҏ#b#h4 m'F,њ;g +~58.DJeB-f:i:v7xh}@'=ɑFRWn^ 8E&MI>eHte- 5d@z##vۭ|J]񘸕DknIlF_FQmA'OԜiPR%*wDUg!gfc*3DO쮡}x+k_"I( H_]s6(quVN4~\kyϛ҅s08Ȕ^ZA8Z蕱DnG5MVB#@ {k؆uv\|HL1'_vMȥXd2JsoA#UWѶ ^m咭Jx{R󲌑[ˇSQ8l+ʡ}} {*2~][!xJK/ VVz^!w7Ƃ0ZdAK!v0Iȷ>Yɡ:4[IDdD:|mۄȕGėx<` .\ZN|$ԛrG$(14sM 9nbluk+6;%:qޟ|P{񈴊xO6 mݠ {#fܣ gOF*.RF2݌( 2EbOV1.lJRb{, Ѣ\B~XE6Ui7ѱfsh mp[UH7Ч,_iek.vsyx81E5}͏69Gt (fkӄZ6cecmG8%$4nD%:ZL!\ .:9J̈IڴU ij}t 2s4"tLFBG'չo]&䳀smAr 1H&3&aw8*6{@)S J,nx&`ous1I{0m=p'6;~}iu[KJ(`e2wXVE XG1?_5ŶNh g;yK0T&I;TJCʏ Vg pNH˥%X""'R&9@ڞ89NQ(E\돺@2W}o "IqzY]^=ڛc݈o? 02S奤 JT&(&$:ɄD8s&$AˀxCS*z~tH;jkԍNͽy!wG>b2}Ԋ/r[;^ XZ lvح {W4=h;5#lmz) s}Sܛjvw|5x 紷▔8텧h%\fÊ?̞8Yhsy g`Oќ)69SNo@?ihUt!'ѫiPciwiAHx"B[cv1ˍv¸8^jd : 5AQ=15\zz%8-yv0s;1r~"(rٝ<:Nt(FR$.B͘9C;ih}7 }UC-Bܞ9d9 ӥpk&2IĈz+Ȉff*%@>a »2)Y#ko/K 8Q+N'<~~O(n-R/E-Q$nq󏹭 BdC*1Zyb-6!o"POHːgP{ɧkFhwkwu>KڟAK(wa >A8G=(@:m(ٓDčw;$; [ZNj%{ɒv]ٱboe^:LBmdim=6 y1'؂ZFf"laM;uEY "WPОͱ$ MǾ5%Ns`qgP4}^:h֒2U5ݰ4yK^piAC4-i^VŇAm\#؇w{Ӷ8ji5iAC[ec Y*UeK&Kz8?F 7ʮ@8iLs-ҳ(n,Ky]Z H "+MG0+<ޝnM{=yǿ1)ScۑٯC`-wuh{(uPl0Fe) CG7ghkEYwE{_vh(wpGňpmj3$٢ nkijޙPaPft7i`̶#Ǔq9X'e]*KU3 AvCݴתY<&c/3bY =sK4۱{gјy_86u!S^cCYfqk7_~G. $k;ƇR5rV@@hE a2iv g/:͢P*Td쐈榥 =Lnw g)o&GV}yz[ m"6eISVF ﱉEQl5_9@FPy7e&< Ѽ찫¨yq1MPerK9n22 ߮75Bse؎ SqD{%4v{:(-bm.}<Ĩ2zSo^fI;c4~ڵkMFd^YcjHaFd#C_?-;  rE'ounBmì`>]g=ii.^j)p?qY=ձ!Ա2:g11rZ_˯0z#uƺ:BFxTC^eZR~fxMm>Dġ]Nk%-4w۶&gVk3jc&dHOqѮ\-dѽi]H G0!)XiJ;޹[%My'աyjHW9F msEjrݘU }kccm˿_ kd|]c?|-ՑќnސM&M/IlڅA*ރ26C- S\գ7҄A:i8Sm S)c2.,s阅־Q2Lj>.V~]Y6t{9Ƶ4NԺux~G&}™-3{gyB#6i˨(:æbУXٍOREv"Ls\I̿N{C 9-0M>5iejcC#ͱK_E=\bbv^vD_l^KiZQDu272u:i 9duS; a-9/KGp!&OBtp~u^4V 򷱖:6MAX?km?Ѣ:ajJjGEqWG;msu\wX-4fkjv8[=tHdgtkl$-޷fNR9uLj,^{Ds @y7'O=7=),ioNr,F+5ܝSzRҢۃJM>lJ,ﰐ:CLj]K8f &*" c,JA_6?D 褏ɥi֘8# 1 6¿hݨ ork2ho,;\R #Ҙn̄<ħ[OD"-֞'"QoNiM;b/^/K6O t0ż ̬18 &q:ԣ|rG2{,:i;&5ޅlћ_$n:_Wuͧ*/v_"Vr"ͮ~#d}|cVMꮏ4z 0T;Q::0C7%o㴬NZTX_2Z]k+zlσ)/{xWr*q!/{׿+λyW澱><[/Imzif9 OO K a:`/+ûa׶'KuHd^4ܖiU/?'ϤxnpǠpwښo{>5( Oſhv]GiM/oZ;Ɓ ډvډ^`Gu[2?\c'x($VaWDҿl8Rg ֐(H湎Z#E᣼4v>9C (oL(.#׎;kx3L|}hS;^H]{ZIF'SsAk9Zɱ :HW.LPLS(6vΈ8҈QTlmsfQ!C-|-;t:0:|$NdN2%uDҶLA`GKiez1 `xc"7z|w*Ԧe6v`~L QrD0OiJihi^v To7:@}ѵwv|:89j/³l]*˱=xAmᎡZ`-)Xg@;B;g(,t}ą퐜 jko=*n`v;WTpEsUf_=bbp- xxDL86r]3Dd~-aڳ_ tT; FҠ Ѳ1zIp%tN$Hڝ]wtZ@ p3@0)\' VK0ܒ:;[[϶vs<5#Ȯ qyodOgЩA|wvQ}בXL#ehdObmeAMS1%pw:4m]غg:n6f6~vE;Nr>2NK\aZD~ψe *ŪEU*GŪ3Nqחڎo z_qIȥ3(xh[gh^t:8zGlV|)JiG ߰b+2>8#W響*TVe}^Z)mzONǷ*ƻSSXE['he@\ Yj_5QdMyzoX,o d+s<,T/ެ`ܛUUgG4MQ/,U驮VPZyYZie`PlX[aYվJϯfqћÃgH%*`YbyYx,Vxյ̖wO iDC5JS˪K.[CU>npAA /C|!!Uzʫ1Jjs*uIrOBcyB֎͕YA+`}VU㌯&ݱ6SZ(6kߏ$YzS۞ENH޶6]#ތ8^JoAi/rgƖgեF|!& 4/I[a\ MhW=i{$.cA3WYY.On{oRqEETL(W_&Nag˗%Dma7BYC\I/>)U~D9ӝ GɖzMziWVwUSW]-)r{Tb~cyLkCI*GҀe6șńQu\fh O[<Jm4q} ,a3 +-M/3D܊1?a4$!6Cu*K8%!˚ KZ9]YG5Z&j= YkhidYAy+n62VF3zό0WW(`}*! !?Nc¦Lf ¦Me :9CI∔4Ƴ(E bb#JK`tJUY\m6FL9R[da2a+Y L'q 髩^yg y^)~lH{7H(ͪp0ˆNuNrNR9$dZf)aS$[+"-L|8ۻv .˳BYVnr5 nuAN 5Ղr+-h ?p' m@d&ȢeZq\7C,K5ZΉKʄ vc\wAťȤI&Hu~2+?w&>_ V3B*zTcSzMEDBsqsPq}$dyl { ]_ZG̀Fq}^l !hG^5Jp=H4:h' oh RmE䟺_ߧ!r?Bn?B3r?S,?mlS[YҒҹŋzO GSr*9ZE%.%ǫԪJN][ȧ_ r%'腙5(ZRSkFX >|9elzNpċѩsx~qo>ܛpt>8S\_V\&D?unXϸs}KEw(TF5Sնvbnmt~7Q'`XƔseߔ*h^ 7&tRZJF?CLkp*Bo''b %lILR6~)de_OSzM ފx93y5H lK/ m5%xMyʱMKiSH{& /#ےQ?DZ5.Vv:}bZ\nS ŀE2Mrm ;.rMx{Mihv@70 v8 n1Q@#a!@ IAVO.%vw@9\y>Fw[SeuŤ.K${qe:^QasD<^~jQ\߼D]V&Bw|8v\pfn< 8x `D8 |u p0̉'``!pS ? Xx`'}g3a,<x p>3\8r6eu6d{ fbpr5yOS߂{H+̙5a²)ΩiYV617"F+%d̠plTZeUyUqUs/䔻77u5P^qHWxTVy᮪⤝AT'.#2pڨ|Omu9OT$ ]D?h;`EG#Lكq*1EdzNv9]s$ kpuf}E$U%Ltd ~h3M@IG`&륿k?/,Б "tnY>%[Xf{nZx-t;L:E-t' F%vIGn 2']n$mХ0"'$lm] +{ TM-Ҭt[,tA7t$K^ߥ$nGxRc8~K𲅎AzҵY :KyF2υXޓ #-_wSzckMEp^:Lb6hS6 Y^*22pQ3H.P5mbL*pQ0dmb^]kbM$p1obN!sJ: p1'yWpSc|x0U u^ÿW#W[-# qhW>'EKg  8Dӏ x_Wħ_T$N5V<#,Ѽ/E~^8IGVI&/$?܎odZCPtĊslf ~0ԓ%} `6X;~'6*~TE)}[p~\- h]G$>Cg,ƃw4ߔ$OO {C^߃nx#sL(˛&v0 _M2SZS,~?VQ2[h4?ToWL_"!n{|{6}ȬykDB l7{"%7`."eŖAU\EXA{=a?|$ T/7TaKG PԗKdղ=|-\ǭ8I?9ZBQ`#e:} Vk0\`t.]<c ,}]>u.A^ey2|ON~a8F WdlPAkCZ|}>"_ JK7J> >Jҿ d?3SO>+N> K{PXɯ9,L_(e5~C#W~ N^D#$x=G.o@Y ]S?׀?%?9Ϧ'OmP2G4Aw}/dMo~ 2r]7U|[/Bc =?z.')YOd/yTEJ3<[}C|wF ?2V#>Eo`Lُ(ʥ A$}{ Gf:}PYQ-?KlIWZ3zl/EHH +e7o2k%*Ky;fde_OLo>b NKyRNa~woAiww?2tٞp)kw/ۯ(A//jW0ۗ`.a.!"o)$ZG|~ d< |&v?a͔ c|ģO~p/g/oZj໡/'X?=K73Axp ]CįS]ݳlCE}$Rޛ-L,1QIZ_!wXK|Pˀ H,WrVk*U5+'NvNqN&7zi))<)% .A5TYoC!:Z^BW56ᖶ)UrJnx֛A. ^9 ӧ^޻`[lpWa|@e}AEEkqɽ%a@ze.U׈z%[A5P^={ނ9IJ3@P5QKryE`8]Cũ>{Sa胊wL_XzUw'b=UAMޚZkOyot$&^k9t42nTE+J6y}q%UyjOkF AfI{oߓ3ݚqI/7 f==xTk`Lz%a1>ކE0zO@ h8EjߧG"$4,>wU}m.o/<aqZ ZF] sl`O+JZ0P(X(Pܝn_^,bz{bt.Yd,* $$V31 iCU_)c6vjnPK bBcom/sun/jna/linux-x86-64/PK ^BX+ȫ*com/sun/jna/linux-x86-64/libjnidispatch.soȫy@Te8>,hBeQY-BiE2:BQV.,3f˜-V&k+Z )w Ԝ9ylǏ=9ppEyo[\z!p=z> Wr5Xɇ^<+\o1p}jˁ\S ףpz^'p-p u*P#?Mu\p6AA8< R7zt oeHEw|k_x6n >m >PcFl/-\w`w- Eo28{20^9>W0u{K.V3o 33ڷM>'qC E2?}Xascc&ts;9o<i1XpsܟEܟj_5!CMLN1ҝW8 Vڳnjr^^9H? q}Z0|z^oY=|y@ּr#91^"\\rn8x9rgy-V-w9\C~4o/z*׳hՒdvQ]^~1ƢrYTOrw0o׳<ஏܟW\Ϣ ~o^oG2^R|忧5\A5>Q.jo}yg& .+o5][=zrո/#]_s=x bq\7?+<}>u\ރ>b?DYoa<~ y7a8pG}ݶ5ow9{zܟyRAuQղRf3U?vϓTzg>y-(~\a\uE"|3[vlcpO+G z܉4^?f9N_ar#par^ .?=^5zuz;̣.[2j?Ш3>=y!j2 ~xI:%]Cp^=qp;u\{]~:Noc?sQG 3nb~ģ\M(+#ۢHF?ד|s!R$73xLJ{>2Gv[r<+O[~vlNzp|67̣|jCuOrJ=we_0Xo:t쬡y֡C C3Fedjp>vԤtㇾ>rT5=yyyY#G1X3s'q醌QCsss yY9g[GOKKMCk-jpyFBNyV6*k$=7tႅC3r UYڍLcm~EZI@SeEj`fn4p(f=ٷo4<''=͐oj:T>.5g!W5k694{T0XQ3LsQiZR.a]g::kP&`訬c:4s,tw5M iTM@Y E"4!G %kMg֞ 3r=Y9#?plv^:P_J0q܈@7q_BChsCT7Dn Q h <\K_5+)WiDMyJ#jQQS~҈r5'Z<93C)!r¬z22{&{6L4dAfvn^M! 4:/ Is'6EdK{yM;=_oNϻ!9;. dgc1F Q#R~ahzppeD^*+-3{\z7ȠvQcӺeQ?6uYFanM~ }Gf)к/(k@-?:Pj^X=5`41%'W[tj@/K|mj_tߗ5#[Q-PUhd!8>#< 8>;{Wq|~=q|/|%[<;8>{q0 恟mcL|ygrl|z_쁯| Ǘz8ӟ_/| ys|~Ws|>=o!O#=8Gy83Gr0axgzyyx9>?y/"LW>GL{{WKʗŸw|?,?oLL_E~g{Зx9}<:|7 ~=e\g²Jtz_#Qu}w_/'/^|OQ!DaN(/+C"Q _ć >BxA' xESW xo>[7>eߝpY| x>E l/3W,_p_"GR/'R&|5~|++x('xC,C& o x.LCo xG' `&g Ls|/|?S/E~- b/X/%~/_ 2 R x]z/A' >LF->Ro𖂳!i#.g%!uoE"9g m0e["F2Ƨ%_0>%,&긳9 s@8ǹ.GrFVGa|FR1Ds^0fΆpO! ~ d?nG< d?FfBd?/ |+Op;F6'';wEGE.M=d?WO% ~#|?O;"܅'G#O$ ^Cd?K~'xkTGp4O[?B<G~'!Op.1d?N<~_BO $ d?~' " ~X?M|7ϐWE8& DO' '7GO-d?'prCD'/EY?G_G8'}' ~ ~#<'x~sN!  Hƒ~_@d?~'7/E6>Եb/j/RŶr3X_mOZ b6)i X$c`\ H,Zm*@TWdd) {Ave]Xέ-lHH*\' RL>,r[`utDnfhvi(7$Hq`bEnn.&H{]E%,ґD+9 rH(Ja Dy\c<E1?1 l!FС0 &WM 1QTcq q>l2b*.( #9%X!+&Y՟*2 13 Ǔ$2e1+ĞK. 8ݿKXtG$(i>O).Q 䓂a~jo(u AřS!C"殢H l5)Y/_ł'q?P_9KHD%[nW-RM& j2{a`_t-A@Y>: *jNQgX/Rx3!8i'|HMr"WaYtzgBDGD^s\<S:yüx!K ԃ#,eWES<&i$A@|Ņ xg$xA5!K ѵ'8lZuXpsEJHIU$i ?TXAͽU2HוTvJepe #eZ6 Ë*M.̢2_.t `Bݖ)U+usE AP,rhu롶B= Y ,,-<ŷ5pW#8H5q;*JSa'($niFCꥮ}y'> Xsokuk~ך$7khz,,zfQ S6Ƨj1\xjiJ5J?UZ(H6,h,INFwɅN~O=q_^JpE5ͺܺw%:#WN[ut"NO\^)^`s_ۡ n{ h xf@7`Uޟ @t߁ה:)ddךlNoywķRP`hiL 'eSZ:9dT<"H]E~pїL-r&eqmyva-Y'N|rRZR߳~MlCdc=A1Sic'ʉ 82Ť!NE#-擿\.FZzGuklJ1c߇2v@Ԑ?\.xVimd)1)Sb50{ƶG|FyH%us-v*acn)RY(z, (~I-Cq+ZD{x%B9]r )R9nI(;pYyl8 9`y@)PbXV##4j*Rcy*=w{yS-ΔE<6%mx Q?.NX{;G=q'vA+E(2-@;L_@0iG`5lnKNT2)%I 1lˌ-qۂ)8HE~"؞x%3Yg#Vo\n]w}'Uy7$ط51ͳl>|p:"mf &cP{{$!uk\e0 ržc]@;eYص̷݃(d} 3?ʙ:)YP )]вlTtIJ6^:gsQsbᝢA%b.8u}8^5H`V61{zɞ bȔ2K.҄bLS!sEʹQ(O!+90G2ggcJ9N,I|r,;(P˰:Gb!ޅM]|Q.\o)!iC4.NczAN#Qb(;Hi!9WU6QsI.~CYOm;O3NepmΈZ\=]-pEbF)`llj93iEzuKz@nEMl0bmOQ02އJ;@Y P8=5[;3 D:C d !$P;ȧ:Hb ϼ[+,Uۮ gt8F8_ry~7-|ZÙ=u\7_FE*E4n#eI˸p7e/a ҀK*`.k2@&-:x`~>A~X%ʦ &}o&v,]qpUD2CJGO@ o :N0*+ Y7J6{X[nULL7!勛c5~#}qӊgܵ^)M5E~ }q~=/ww_ܴ`ָ[VnM;5h8wkڕosGoL0@VQWZSڎ2tm;@Э<|SoN}|m~b qvqTY\v U"f `؀ha6fƑ|G~G5*ͥ,kΆX-VNM8ϏaeН8~a1SvZ4M"("_Pm}|ъȖF;,],e0_:L{,k'̝`{,XdϡlT45fnۧc<3Zq;dat8Aث!y; D,8G 3T/)/k-3}L9فl {F!(˕.Tx9|-6v,ff%P(8`?c17$e%ȋ;| xV"#CUXa Я-4WC8,4a.Cۑ.զbSC6Tbo@&;kaC|Ri2:3)C/q07O,N}冶gT_hljp½ "N0^nC\$)l``O(֐'7"TxZ,&mMer< i\EFSBm y&gP CTAI_ۺ3' H7pt&5?OhG P2U0+T`{e*,]j,A0GàAx'kTf(9cG誇aSKV^i}uw^_oS4)_u'*eV~?MڸxF Nu#]Z*wcsG9oߵ lJ/66{I#h\-ҬHJsU-VL)urVe>½Oq?,2`&j|0ᶘ3 *LaS&MqnIZg΅x?Ÿw*Bޘ6/hj5E:c{p/,4|DK;⑆mK: XZw4MnR.ގh;KCn,m{9?ߢ=ok-/K(Ll^r#$8Z jAKDG5Rkd/Z`Htv\^guԆRȖ!| L9ppuQ{lf)NhrMW& eO]o H#F,H G$>: S"dl"\ r6ՙdY0>M MSAz N0X_ +| V+bŀYvrFyi嬭 v\pݍ8(Ljk|}I*VoGk@K`-Aͨ6@z0Dw9hͦݣ#J7PI#}ӈk1'm/anG_RۅR C:hkrrT̉u]tƭ{h6Gͮ6NFi6;Q~gld0$WӖFQ7C«6mG?ѻ$@@:V? 3-H[4x7| V$Ni0CؼA$EYaVA_yƋA.2|=םl9bԪI];Xo[DEO B[_`nQENENt{6]JIv9(-aB[s}[^ rtsϘS8ӦPQTKzfF1IVF` Ɉ3 87/pIs4ygɿxdƶ0'-m=D]WГ0 4k3Չn?Aǡ> Þ:xH"ęn7mj?!n6!.2INBW]}EL{Il-6Zޛ@1zP-LՂUlЙD*~0r*WA-Zkq[ꨌA7po7s2|7GFx3n 9_ ě6?L *Vv/)0X[<`CuT|}Q4Q ,2n#Ti;0JȰu{!gMŜi``p DF(o>dqòY lֶJhCČz)~=$ SJ46D;hÛ\b*/bA[^3mv`U.MM% -%Jg3 [6ZPwZ-LJX_V]LJӌ8G@*H YnRZlxWSh2 򸲽/Gmd'|=_#+3r`[z܊0(Z~.f\"o1l\rM|^aT٠gS`5Br`Z&b|d=R`[B؍'`0XRTzW"4xl?q.#E\[zރm'"ciIVT4 MCj lND &τ3w9,R2 &_ս|J60AfWs力]LG"يe\u~P7S;=V5D``%s KJET5X&k>+ߋ0.?GJ?"~- J7F] CD+W^an򺖫ZNJ~",O 6lC%kEC*ӳBE'ߣGKWLxRb&Rs5pHh?f+;#2A&L9ӁQV&UR4nѠI"Ty%lڂ{WrnV؏xOoƶ*O*Τ0zYӏv^xf $ 5 5zVH{jUs L6P(|y,/j*IqzMX3tYx ^3Ѫ8>_Qm+;\@!QʘM֜N;(S/cC\ݿ*$;f *#LM)9XS?0ُޠ1 Q6_4?яur;d@VF%6=JKMr 6[[#U#0ZxbV!b,v>yeMRP~  bCR "5U[>!֭ \O2ȵip}I=3iTΟO`#Acu .O*;ZbR n~yW4yK_ߨ {s^V4z~9oTzz^_/kR=7J~W{/Ax*S"@`dfRJXT[}/_w[w\{{덳-Gs\~6j5[˒'\uia].x7R6; q+d:TqP%mt.ܳWضvDR̝NYgZ_`vD Ju8ó>P6vԳ1 c(#;DXx?m t_J*Qwѥ{:b&Olϴ` w\(𮅚g@֙e98#x|2^JZ' ꬹ s ,)+gh֜Y38kt#nYBSQ~Y+sփ4B@6@9${*V6gaP~ZfiiuI`_<:LMb'G <7YCUS^Od'|?*? C|3~uy9t"Tr?G|#Tį%l=ѵ!6NH7XJUA51TX@u$<>\)z`=<Љ{`䁉𣬁ғc' ֽ)3$̶J#.hkjme^K5`"ڿN5`hjfGԇߺٯ j f -. 3ԁqgIm%=ج` V O.Z@@G/ZbPOb_iVQ[?M{_rkь*aO|C'T{"+NGMMۿF%` %Q}f)˘?NalAnZD-wҭd/! D '՟iTL'pR?׫\BfW7>DkJ?}CROk^HI$x(/ 7vH522?je>Gke؉˘Gn%ۿٿ_Go,bQcGqA/eV`fvHSL`ff-%3V趷EC>v*0^>'mA{3i wrGyՌ̌fZ]@Mkgu.(Wtz9J5 +쵦¹ yuD"|L"H490S)4 a-!{ޯ{||+Jk21`fkV~H/_5_ `6/f2aߏb6b?}6JMX[CaHTZLoS ~p|0C.h`sm3žG%=Vce ?gzuB_W?__ ПېT!e ԓ`VzWOQ=+8H|)n0+>n?o2 .Q/ZD_>v"1^/D@cu2:~w6VSp"r'T,b~7?t^azGLb$G.-ofN%|$ظPO.-O؏a=UTD^wV_5Hܶr TF^A A:wK+|eZPjdtWwc"9 D/=~έ?:??Ev:m{T[dأrBA/nAg>4Ϩ4_gn_Zdun}$(Ȅ}Oŭ?J]_Z|[!dw| -DqAfJ'>4}l-|J2 =߂6MIm tW;O;K6^K-q^yoժkO{Vul.Ogfir|Q{ϔ1L{SJǴ͘|1wG8|~:-Tݗ>}WI}d+s}{}my]yx98>~c{hMlzyJr|l_?!o}'@Zp+ToS٥zb1o!]IpZ8y b26 ؿjaN8W4=h콤(}9dl  {hZY]aZkV n2ZMf=YwbVW;OܓJ1ևw}&RyNXſX@ў)Xſ;1-Mn<)ΧlwZ&C%0 Kl3o<ݾt>v 0Gchߧ5h߬7ba (_ VKn(C}??ƜۮZ73nvպ>Urxkn#EhhUZ2~[&HU.|J]I֍E7E6DtCq}d.ZNֽS.of]fOɺ?֥.ˏ%2&.dH̕@҆ؖ(#jǢvvx2p?óz~W""O|B&L[ ̐\O-?τFُܞB#p 9-:`"@7 ?C>j9o{3'E1uN$b0Xf[6C"\^2Ð k&gjm?!6ŒZmLӷ"j?EcGOU^MTwɟEgD.ݎ\/d ߾G>?OhiT*ŴV=?W gXP4:f<api0)@HTs k<HBڅ犽vKG/iG@RK|F^z>E}n7CCSáƘ 5W? c_GM%D^%qNN5i$Nm I7rL@Th__R9U͕Q;HB?QTb|AR5ȋoʿ@0]›xS縙qtdo;q|L5 f<ʡ4oD9,"Ps8ȫn7t]E:tq6H8ڰ݊ t{s 'E'U_c(Q񼷌Ds2: ]"5DW,JK;n2RL$ƻҷk2BY*v USgqgیc7GoXsgGox_wN8IѧhpXz1;^< }Uɓ+Q=jWvɦ?e6 ֲkFQBr$zgC]8gwNf^]،ʯ=GV]3||6ïc)=CW)ݿԳ yhѱS]f؀_L*"nc ')Aa*mK45\,:a^Eo6|79Q*N(j*%`vΚ(I!.S? B.h=>;,D;/{{.| kp\cvwb{'3ZʨŽ)C2/9ތVo>m*mxg6KxK_wiJ:\E2|*%`Ҕ| /%Gͻ>`zJdGe͗ע|+y[J9ڟ(}SkMɳ4VOSɌ>L |a|h V@4U~ JcJ|ݧ߮$:ԧ(qyO{)yͧL_d.b|GgތyȘ3T'{1veFveƸrw9`rq6s"Carx_Fbv?d~& Y4Oc x?ߏ׵b16s:үqїRpmұ8Rbf_d 09y~QnR{VsW,loXމØ qUvWjg.z&>7cw}ueMqxfa\oY؂f+q+ϩ:vXS2Pn%VLL1P bapf2RwEO^}AƬ,Ə^9.;m^R%ɝr`<89SpA{ř؞ {V;K'%NHFL_:Y\;<,:%+w8<[;wUZ\qӠcv [Xyvk /8: r U>R0%jX8Ҭd}Q>,޴v\r=žh]i^"sD'--NTut V5DžA>Ū6zp'R>¥? 3 Z5O_"d-芈RXjb&uy<ΆFMrY^ X"I2ԙ>+Sgtļ*~(6NڢG_{l?(]ޞ ODT``l,Jl6\ʢ$X@( 5Lᦇ+GYdR잕̱YP ߼*c_[EVoɡL.jnZ,8R3AH)a9R2)M8\\rbӁd"$kjմvzIvJҔ" H*FɏIR|1QrK xR(R7g ;N3< J(CajP0eC>p_tGPjqFkF/FdŶ߿bW#վ,Q"Ts9EE*^|h,  'J}”\Bs16c-,c13X1 {mﵭIDP69L0EH\ w+<{]K=ѵ}b)o$_ q@” Kiև29XG00A}>B,M*P%I4u|̃k}fN1UP#pQgF)H}UkMG Mkg8 .`4aYHnOۈi#2Nt{ڮV&~%U$:ݓq[gLj!;y.~"ж$(J w`V56Rdg 6}X^wG{S;tThGM7ci:=8# c1n,{fsX%W ӫ$qƖ|z[w߇Ȫr$aCc*(]M2^0,Q-O _oEO:q઴/T_ŏ:ӚC_fa28s(|[+rS9`StH3}G'_y.$e K`Ӧ!ʎXN xfP4ApK5[0*r,1V~bE/D`Yph*|cXGw Aaq/Y!= MY"Xƻ AKxKx@U6/GY?#)THr"\Z T,,_i[05'ZO1rcݑOHa ZQΊ|ʼ)z }oI"R=k_D~[GE`Dlg蝃pfXčm-kQwzu'Wq> ad3LuvlB8ӈ86t )};GW)aKUJC م%8pPw}u>~y;Ly H7}Y% 2+WE`DvC j HwnvCDnbD}J_wݮW}|N ߩ~u&>v~E/7Rma߬n8ʾȟ4HV>:)`x A]>CyǐLJsb-}AENjQvhU>.ո/&7%I xB"}'Sb?= $/T(?휛kPs7BG7m#-]e*=!.5_ 0) 7$3yVup5o=Sq{Y93j&]";Vp]+s(7r2϶ٺsLD6(_rJрlei6n`ݿt{VCꡜѾg[A8i2%uiޤfk/E,h̝:eXmHI54+=kvR\p(^MT6?R2Klucp\֏}BcEcX,X)aP-3Eĥaʺys!L3P;ߴT,+MR٥Ǡ{s͹q|؜6'_Ng5G/o [(iǂ2%=6/u9"@[%dy_r8/)At[ܠ{; "iki1tͻ"K}9iP\ǚh3Ҕ m/D?Y__Zy_o%|e.d/AփmsCZvE;T]~cwy @\[3wF(gG]QGk"-Tz+uhcuWHqBpfB;y pw11_`}T,C'Jw+IǮ +lo}E|=ZkE|{O??}(02 xUy2qG`qy#;N-b]b żc՟츲V!gWgOHcue6ovƉ+O|$y_ 4poq`#OAWI+ɼl{`(}FeWZV*yaf33.O3H ale< ^Ovv-~;Em 9 <-|R"_'{g󈏱9f%]'T>eUIj,-U3UR|RHi@6244nǓ>'}O3[O-3ޫf7їVDŽ~ kl"bh6W/vΫSq̺)x.)ig "Ȃ~7 @oan| ~́p'J%*@V;ހݚ/D_,tAV1?Ёk1Ra(Ym8[?lLJ(T2 9J`쁼x@~c4%`):oRBYsvܜ9{JsOËYoσq} u'?f0ST?ČxnYuD9XP)^Hx!g5~߈ӈ_̂A5k Y7-b.Vgo#Yi+T.:N{ _$GQm"|z{ǒb`?3CkYq?Yޛ+}v͏R9v_b_YF@V A?-<]bx\cPvCh^EKs筳+|CI|~ωK03Ma6{t=f? V4z|`å.ߧ??fc |bٵLv 1 /ƀdegsVzJ{*Upb0i< e_>țgu<<>حn$5n~cC9x_ 2]"?aƙZ}" [X$ڟu %X*b~.8eFFF *G QPW03yH)LF}eUQ2'D=nZ\ͅqv@wԥOZ}m?LjqBfO} 7/ݟN`8$h{ZaF l^qzv^ =xks 33Uu;& dA#ѿ,9dû柑s0|Ӭ៲ C?܆8Tq=ۏ %i=&[+MʄG烿PBݯ 8-O7啚0}hH Z<~J:|{^s 0VAcB- jV0/h`9 B{egޝ4 `620sϴC_&Ni>p,ַTgh\nS#>f¸ = .Q/%BecxZ)`p.O=@.y(fß[ *a:O%KQrb>yG\X)?&4|p%ecֿeG `,XԌVњCh}J ]E+50HT?oaeɟFGkUĨga/dh<0MPM~|e(4r 1p9Oht*:፭.ȖsA1Q#w;pZodaE%9yso;F|!nX> s !9ǜ @>5ڼ.= z%Oco_0Ć]ۥTTu Ou'{&R3k L)5:n~Y,ԿЯC2?FR v(ю /'b-Di샌j%UX9 vp Rߟ!>ˤv떹{K?e]WYWwH2إЈR5Yb=v;RV ` P{.MEaU˅1-\wJ€(OHRyhMҽ)Ey\lg{ wCϛqxAdCE $]i7MnJ9t5=m#  SA6Al j;^lM>MiPVyӽ:cV,^IqHSREn ZobaGfd79S2`_F$aß=ca#?`Jnؽ|u#^Wツ<"ʷ+|LV3MlŤ7.2*bF~Gta\ :> +FvC;)p4Jwm |,0|^vsf0e#ԍ1b M@h 3bثMYB[L(0-0~5U$[% Gy~` Tk{|狵}5PEXO 9 Pw8eWkUڿQI@ywkO[mͣ И#B9 Kf w\xb8޿ 7ZCx"\]w@w>1{F_-5__c`r]0-J2 /ȝ|3 KN4OYaфnХb5PhǦ05Ǡ.*Q pFqn^ymu>8ǺV7J5u9&${ f5.B' ;=MA À~Uq1X%"%YFJ?t7|D"ə;2 u|P߄22LaEcbq,qª <%)j^EzJ'PQ沢qOÈSb+ s+^.cڕ)ҎJ2󦡉S*Eh^EӀGC|d4K.Jh;Qb̒V/wƖ)+d)J΃RLZM{0WB]#o{o Vt>ЅmXש`C0#s'E7x)Ƙ։v[xJmٯ3kmUm3ةVnw浌f@I= )6~CP=+Y݉i,dml 5*l*Eݺnh2)ac^"Džβh()f = da\j^ 3X?[0:͡&Z>1B\qB}\(wb^;/cτְUT1{n?]ldÇ8h1Q+|h:6*o(13j,ppɜ>,2dt6ҲjC]XjdފTuX\s$#Gȉtk(>"&% 4cmz @^BݠXCwbⅬj.8tBřafޫfsBu7gl,$Vձ,d7/ uCXxh,K(l8̖ǿv?,?)-e; (vL ZZZcߑW$Ah[i6!Fe'Zf|3?0$3?`v^ `=Df{KSsn3Rg+cg^W6;xEٶSy?5CipZOGm:#?x#BAC?8:l B^cĀ|=<0Z lo;xXwtM ؆ ԳR4XJ1L^׭?'⟒kcVL̝}U]ڋO~f=贷-ؿ_ b!p{T4H8_)׋C5=lڟeSO+NAaC+\,a[3@wH؛ VO7 †ϩ e].cwe阏"!Wgeq c\ ,v~8[͜cD8{m׿CBvmXF¨#N|&4C~L#O7.?RGڹCi2e\qr81 /<0PS@1$w j~{0̷߃9unůx 08jk4{a"o8p ͬჳ0g{Q':.ރi$/H1crޱ8!7I_M<`u]`W.z|L}ȻGb._)6K;iN>+}o4f[a680OvvZ +do:;IkzG(I29ާ!l/v{: 8]4RN/ Zoeo ŒCbVG萾"`G V||l~]@:&ۛbۆHeCMV5P8L7XACgeC MMe 1,l3UB(+*lif24:ߢoԣl7o2;Є~}y^A)HuVIe}='͓LOgZRq!sGpBgܡⅇ~jEyax夰_I_!_>ޗey֌BݓveWcS[\xψďxPgoձ}ꟹ&$܂.f&n+.XK, d?WߥTA}BQD]tMW._KN t%ǬDv |Sbɉy[Xca[|=n;oAtM] 1B M_vo'43@7slP }`h+7r*ɚ+t/ D-n2-ЭgG~C_+=e*)̍?/?/9;S?ZIQJR>qޖؼ>CSXqC]jX:0S+U9YR~|y,O )y?{UjѠrbcȑo}`w]mj!fx*}Q^?_Po"Fvd/ 0e2A݋X}?{Cko6E{`ET$vuqy[HPO$])`P s rr޳v<\ML׳B؁,X#a1)Fd&xCKk QPO(]gUyI&5.~^;E_sH˚' 3$p*7ۂ gvxMc^2{4yp_%&~S r`(ʉ 0˄wH=.#P=vaGKY}T͛&K̭v$P2}{{H,YF菃 3߲e (^s~=lbSc09nyыnw4NUl3rvlE+MpKqJZM֜VYsZ܂V\n">_)Ơ.0IU+lLSvYjE~V!X‚-!O_0+CTϡ^aQo4sܲKeM 1r3xqCd\G5a]vg/ǴURDX &.I&7ˈZ9t$4\B"1<'ق&Dm 15@$V.Va⹘ڥn_gɯݟXϱMoAy͠U> J'-8_`^>\qaɐ_?ʟfAO5΅;\̆xs? 2HnQx%z9# 껻;bt.م:^eZB.0!2_9,J}pC)eV:'giEq-bV􅏰+MboG*J$7V ̢mIJd}1R?p ;(fBx'@(YH|z Axٖ-~3B }GX9FRa#2QjzÀPv7 ؒR#)H*Ҥ-INx।$&9$?[$͍wfV \;\N{ wexPoث9+K-%ΊEe*OyuĹ9YhµYa]jފW Lx.K,UNO2ųhv!Y32.qz\we)全ucTO%aZo9+\H/uJ?J k\N,U2c-UeՖjju㄂R-K#'L@Ax\j ]ѫѥqФ\h{heh .edI\_ίTVV^\ҳϪ[yT4i@wDU˪egIp[cɷΞZ ]RZ\꥽5VWMU'wiq鷥m Ǘe6֕:&5m\kLi|&N޵-^Xt|?w>NR\z^aVfKGh|^~N̔egI\ 9v=z X$KD奚x^OxÌjМU+5J (4! KAMHxJg lSe奆2PQ] jop;m И[Yƥ0h&`;O4DSb[{(ƥ5hRepz=Ӡُ3x.Q|=2 1tw c!rӥh<J[;6 >22$[*n,Sf1h_E%whd)%v?f\J 'b5'-RSSɍjzJjJ!RT 8.g.`Yo*M& )YLy$!倾0icRe坅v]Ey\NuuY@Ҁ;KNxhˈѲʭ)<׌݃ux x3y, }x|>oe;<-<Y>?i^* 3ʗ!!G38rבg9ħ6n]S\G 0l^=vN]kMzH%cÓfV8E7 =.\FuSY&uv&@ ߥ$?R郖[G0gVi7R U$*(D"JׂAQp\pL犁A/ t^{]KYz0A|5pw| yT?cϽq</[8؜8'p}-39y{-|O'=STh2&\"K/A_]޷GQ}.A7_QPdO3^1.u-^\i ]ѕBjY Նj Wa&Ի@m1(wϙ?_y Y[{%_D1̓A_&hIlf#4 ~. o5;>%'K)u+up]Yۺ! p0|GnoGp46Op^_ tā^>2Wr'DYO;>k_8'|olh8%po `Pn<pSC@.s,m<$/f4` 6O,x`E^\> 7#~ K_x >/SKn(<Y $n|:v}XgA<ey$@z(/M=n<A!n ƤaLcu డ~ '{ p~a) 8+B=1 p@o!_</\ A =G<Ov UR"߁<   \vr8DM3W$78~&7`ǐ60a}c2: 'w} "HGdQ@.gx@B;|X~6cS&s6ڀ< O#Ћr}} 7Lj}qK.4kM}fm6>KI> &3 =1/v|LPMͱjywN0i`~w/ۡ﬇b7f*7%h>&S aIR=k룶ϖAj~A|myXz U] *}O$>z*+Uޥdҗ!PҚX>~"_M}ͦzL_Gp!}Ѓ,;rLc5'<_O}T9(8ݭ@ GQ7($:Xt=?Q:;QJű&8TES$ynz + '2!+,)%@Lg5|Ӂp-Ia oāV_K2:w\?_'{0^'*]ߟL8Q'A ϢK!pK_kzRH-=?>@OҵIn>MN<ȻtvE @O ~6AkєQ~?Mo->E)קQg*Ї_ߞ=t_b>K1^O^􆱽5z?Kn@O÷Q3po@?al/g50"Za~|@<=ZtA3[p WhVV7|3}ӎG?}@?g}+ލ@_[0I 88/1lY>9:'~ vِz0ܨ;ms&_%ҎO< YZ}=@}pI'<7o5' gi:ʩ7M}x 6.*a0p"3.eV?&q# 9m~x,_e)C>C%z>?g/\h1Z>M{zH[ TT'N"?Ig~ Fm9ؼM&g kھZb\DL@gY%˷FqSgeZmz|>Y^[>sd٧EVRog~/O6_C`?NA?5l 5|} j@?փz u}B bIUH[z/DfW+>#cǏt>_h|Gǐo-=7,t}P_=<@OnPlfϒhY?`~TA ˙Wi[/9hǭ9DR\ Y.S竓ȞMٳ ,?guR[wYR:e|oY˝JUHUYvoGm:=?;l<Dz>LN|߸1G]*fa\,nj70.濵;Y2E G=w"gB`3 K82#w{ꕡFO*kn&4 Am`wpx= N%8`57| 6~Clʟ` O >MEo|G!Ep'Bp""fO|&ovCL!8T V\Cp3 H o7̥ Hp*!_$ ~D0_d9o0XמLQx%}cJ>7F"ɹ['O92&%=e%yBoCҼ,t'3Fd!s񜗐|{%;rX^lH)]Y,zj ))t.P ZWWMǐ ) 7-qR\ ť!9vC,)"F4!.+r<#B7)ݻ{_[(o(0 r ]Gxt0 WDS+F ܷP+ GB4ECFM?\1iS#*Qώ[ T3!ʥ~ yp^DĉzqlN4ˢz(~ќʈSwS|E~EO{Ϋ0"gu6D?JbkF"" 26"~;o"O8j7o{%/'W R#YIJqE+)"2?J;"D|ſɾonZ]Cwl1w&o67(_ڿU$< H/Jq_=b{NbǪoR=ެz|}UDžOz|վWvSW?@sz@~jT{ ˱!j㇪UJzj#GI]Q7táM'H|E]Q/G7E/=oF_PãAx.!} Ŀ;<}od%}. F񆆩d ZhDYO -~Έd Gy[~WJ?{ ?J\"EYUǛ{ַl3lVPә _EF77GG3Ŀ5B{^mJy8vAISN 1mc؇W%]<)YJ:/# ?BD3FzI;0Oel"6*v5N;#޵eE7'pNOqː+Jxߠ>L5? a4/W>|zyx{Ә.~'N@ ŒNo|D|GshL?ۉC4~ߦ~B:'iZ)hܓyXr;S_9>h1o1Is9W4Ҹ03}~!̌(;.iNs[<+~ȡ&(_]̀&{갺O-=د?,Ǹ{oFqM䢛vUgn}01Gnyw]seOSr`]VNn덛@JOΞ>c| ÷tF*OXϸ _xã҇~4ϔ[+ո}-w0C=vԘsٻ>Qrՙo};\4`gY̞+g?]1hz[%?Uis={:܏_~3>8pE8ꓻM$1ߛQ?,=7Q{?eh\|?{LnYO/Ro{mpeO 쳮W3pe } yes;UL~~˴Y u|Ek8ٺ/|w_>k Kiydt}j]Igu; 3>t, 3uĞ9[s'36?g4o}n|Yޢin4a_>ek2{O+72eLxWw~qژt>o=_:镳t^Kngϟc4DZbv):%jQnBu-XsLO%^l=]2]WzϔtaLMi,zր; oʗܤSS~=>J|i*#~?(C>,JRcxk>W"ʛ=_+A'A>oJU]}i-ޘ S1AEcSǎt}6'}joyB!Ƅ ҿ;]_̭4q7ʻ8~MSZGoyIׁbt]46}/N!=NjC,-a֨o#[jH[~\y"/'# UYaWK/o?_xsI߃Ι`|zڷ ?jط4Vk2~=,2W#?@~{RUˎ~Tu@vҕlGګy+t]Ae#QgoXhsodhjC LϠ4K IT7CחAqG(oC}Sz-\@fQoۿ1)ڳo_CB{F}Xg6my+:~dv]EK\-'i?l"k JJL,*˿>oQysgS]ϝsOѼYҌY4/"7/b1`òYr U|/%l=E9B$T"W+*-"K?F+O5s̝]sh®jj|chrL*v?/%njN7.!Qä4͸.;ZIq=dnAN!E3hyZ`Lӽ\<;1jd+kOs~Y=y zsSϚsܻ]F}t!D.4^3ct^$1{,Id:~YsG+jבϘWdNJ?p~D #dni8XYs 7{7;3n„愤2OHj IM8!OHjJ)XQcfhfhfhfw_YG rehJ2g̓͟1ޅOQ lsEUpˬB}FJFD8hyED4Qi TګK{3zitbތ^zBF GhE! JʊBFa aԴ͞?gv; } sJf͹ p(f6zXbYQ4瞞͞_VTN.OO?W V0e64f 3 7u ,δx4ϚM͙NbT`Ҟ5[Ŕ[ҏ=G,Dfc4;*:.%W0 9%fa,΁|Q^oZ))*rZ͙?uνp鿢YdִνR_TXPVi|AiABi@⹳..Y^~J / Q~#;"CeG }8n2h)?n<wHfB6LKў[ M`I' "S43v %p98Kl+p .D`e Y-oxx#^ _`nS.>"QYh'l8Q`I;N8ET .p.38[o65*Pn0VE߭a/c;=h<%|t lͨ'PO+$>fl#]}f^&Agބ3Hu>c t J`—g@ ?X _X=[@G؂Gm?t/?ףC#v#G"܏ӽO#ԋpG aM~Nx09DsC ?~N nsvs~N s°p-9at8 OF!@C8m8Dv G& H7|ڛp2ڛhg7} ?%|9s΄S΄C;>#/@?' ,/NEO"?ǣ ;G F'|'ڟsh7 cn!| ڟp=ڟ?qhW ߋ'\'FgkA^'|ڟp6ڟT?:?t?Ǣ _'<O?//Q!kvBoRW]LwkN'HE3n_Jn)%zDo (]#U]!e]"х'9-љ!i*$щ >d_Jn)%zDo (]#U]!e]"х'9-љ!i*$щ >zTDwJ/{%zDE7Inz*2.BΓΖLΐ4NdNDNhDY?9DG\qjclJ` > &Mv'zZo'C&5}t,x( jT;f}5oW<[Oڥ_Kesj<[ky>VnLL B7 7i*s;E$^_ҍ_YT+dX놰10!TgVVCJm̻tc@׊ǮO/?ҥx\#E::8N;~j0.P~ b7E]i*oQ牲S06*(3MrIDH3eOЗ?+J~"l)`Pln y&L'}nE}(}o  \ 6FW19oDˀ6Je}1W*}? .ͱ`GkK繠~N#1"/;7@& 8 ۇ־#ڐC6?9L00ҏ4uU/||">r|.'hIOsQX`[&XrVkYT.wObY_15m4*HGinKiG|*u1ĸ %Ju?Y/tA7#ݗP}t'!?629E`|$Lȼ Sؖت0Lͬ2[ ģL}{0:nkR)Nb KY Pګ$ZܚWt^{^O;}p. ug.)>ww8ƍ cYxg9\S}E=|1/Em1 ]-?CG}F-۝T.E~*,B8ͦ|8O P>  jP傉>$8(okziI \1]ߩ}MsH0i(QXY~?k}>>tSN#80v$:mڋATos0RD@~N4'MFYоblјl_k_Zǘe؝\ړAS Z=ܯtv8Ÿyַ 1FunT$bКQzuu*6mz+-/\駲d k(д#ܟ6yrrxSx1.7x{m;vxBQgɮxߕ6uVwe[U 9斟o&QJ5cx/srZ6_-7, 0vu=lisr*0^և|4ki+U:5 n3m>B_u"giʡO~4X݋r Z&\]I_lgAݱjo>kĜeDShr$@.WjeMA9Si?ah}+}mVgC~ܳVosHk /kֆub!7sw"k3N4UEYQ]op=gFmGչ&P 쏲|lըomRVo3>G8 }=Jhql'΀Ǵo!~0|sIOf9 I&+q&]ٽA5&=9ɍgIO^=xNv'9@֬oI_a/*PMzJz㍠gIOY/z#4驈Go6rMZ~>|%V|1[QC?__ mGz$yVKCavocLƘsG0. *u|GhCǔ^I&6\ޘ2rEzjIfpZS{&Sv=:,~| Iޗr)OMɭޞ5QhOit.bI|n#}Zq ĀoD5<ѤEv|Ga/}a/YX /Gyb$A6hr'浝=cm.X٤-[+i0Lm٠?LujP}fiX*N5NOO=صx9 VuJe 뢖e4!2%}PYlDB0'6F}m;cr@kT$Q,5ZZ3NGz+~_};k}ҡXb`l3IeGNM2LMZ:l!X)_J'qf?Rck!Wj*эj5^M*R|s֤&4,}އw+ʁF8(=}o{9V@ ~QGWk}~/n/gbmY~!^-ݛ"S먄]|L+_s:7X6S|E%$Us9t?*m- ]U(k۵~L{tK\r#y:v ˚7E:wtHK7^EDHtH[="3Hl|fֆ6KnGt'x(2~NuksZ+ў4go'WHڬҒ 7*ңO܊3ЃI!GMHG`nK.nԉ ָ>a5N"QuZu 8d|^: XEzZ/UYTo0mWSՅ5tnnQH6oV;&9d>iA\"$t.IY)]Z:}_%iOI-g #6- `KQkBC4;Q[,hbUBz =xz"}'˪wgHʖ2GJGc?/p]"L_VƜk4Hہc|<kz#7-tL\SߠGmm:]ͫcpo o}߇k*=&V9Aagddq/xO`-N>7 :T&߅%3qƉJcۉ[ EE~GPnjxo/;A9a%x6Q]~u`~X,ee_$l sfEs @p/N,] !S(LL<|Xon6{1>_uxTwF~H+$4vikvƿxslè&XW Al\W _ u=hŹ Pb'j m^ضN5m`A-Q2l=ka0TI]&& dbdd l4'@yLI&2OdL264h Z456J~La͍ یp`¿Wg5cʹ?F.,>XţHs-7h^kl. ! UX"òN,XENEilC ޤg?K;bg9to$Oc9$vALܓC]V~+\H,bKca#+vX5%>Ҹ ]3ڐ=}:UN.?'3okevb-n7- 3^q>=cE *?{,=q+|Q>o='9vFۜ#k{(*uuciI-hUjjwMV&ޑwg?AՏ"_[@b{2zyQ4N(OM2}Gs yƽX;c<ѾzG Q|\ism9˫N|Wj{⾞6\=fw|qD{[&Bqvnӽl﷛U#tm{gmUڤ{U#`bSKF9ooT}o_wy0hNLyDaD;ũ)##DhkߟG}dؓ_;IM3(NM-W؞}`=6Xd'ڱܰ7ۮ4Ǔ[XXw00p- p `j kU+Du9 pR%wc` bE"Zy|X|Mـdۍ8g~%a;sc@" 1Z3N`_WĆX0:#͓~:O2[9yߒ5N#nSBmU_(> yiǛ-1w9o91c?9?1û}wW^yX~+|8=ORĠ=ݚ?.nrߢOۻBsE=D=)s cUcS$d p.U^&@5xI_N> = 󏶟}}{&Oܗ=cLk;~oy8s|xhMʒx=1Yw\xyug\va,x^ !G{lY|}z=΅=fY/@2ӹ8Vd I֗?=;dTz-k053i_+~%rV-w/5~Q׶QvS+ _q^H#sbXk1hVa;>wS;Qcw8p?Eq1vz&;QR?Yώe7hݻ-λd59, =,YQ?ߨVӽ@0ԻV󻓴6՞Uhp+TYհ?mdۧIV'1wQ4:i> tMi?osc[_6Smt'ׯsNCCmkr&VFg!Iw;llS{|c)R;g~;ɔֿyiןz7|ժo}Sܯ>!.aCW5XoV5֛eLBL;g*"za4 0o;nwrr!;v(g 'qfms9qumqڶwipi}a{nVsO_d3w[Z8RtƲZRcfw1~ ٰ_e:p, 9D>ZZ 59Иژ"]C%& lצԿC 9mbݟQ>kc&=tcҒpumt(?L[VEmܦum@φi{vqߐX|_[ԦY"NPD9(pCk w~<#h,m %84 1ɆMf=_5g nZW1L܋yJk/Q18M)|b"ʔzPt;4WS:G˰&%tt?BU2;HߑIxfUj (:F29u]LQyBȜN7 `]>9]/W~ɟ@?koX]7́E~+pvUЫ'zs.lZosNPCr4gJ1kq8"?ٻ_GC3eH3q4رZaU)bv}n@1h7ɿ sbєl2=&ֱӞ烍F)M/{:}Qb?G!z \'\gDZCo׾ئ?3Y\Dz >$I iq\v{e؋bsjIw֎ ~L-%z?oŭuO?9нM*}զ}(DŽ,`\z.5貳Vjo#XQ9# vT4tPqZ]Mݨ+O}u=OV [b3?;FτQBGgolK`LhgY JGuJt9O@SB.Pש7Oju_Ɖw,,˴琬e^ v$Y[7v;crއr;[37@cL,$K- ] E0MҕzХȆzzJc- J'8I{aGv9=Ma>.=J 70 c 1{;ߡ=Cڟw[ȏG@/nzgZS;2W_41@sC |d>c >b_N>w7&/z$q轾1,6z1ۊ_Fc;w#lJ3=ի|Gc=:]ѾMGhsQݦ=tƟOvC}{R(W~<;K;H}Bsѽ+O_ 89&tHo߅=Jo71槓٭&Ml6$lv3ͮl6ͶSئmZ@G&$|迷ɟzɑCMH4M6 ۃ<ʿ"=y|p(&2l$l2,ds/6I=ԣUY%;+$n{6Yj&wM.&s$ՋM'`J`0 8- oЛ朼M5j&眄MEyM&)'`=`&J蜍4xj/Zryxݎ);oek-N-1k{GNl=|q?AאL!uP7pbNX2 ])X{8j{1w)ķ8}OAy l+b; { z2{ w}ᩎf*})C]\Em*?͌e6|TURY;~;~dGߺNn /5@;󫓏7ld Nf;"fb?`XЛfc"M6b/4lB$Dꞷ8sJ,+>y4j_6y$l2llD/6>Y/ d/f"y6yd{%䝄M&Mzl1<2_v8y\jh&M>2MJ69dM"Yt^aN&I&v=SUv.mn͡v6{@7F shϣIu"ʣ{j>?jZt{n#yLjDUavMk/ b]FiX>l޲f:t]yG{ԋ+~!efGbɎd[Sfedo"ے# _tUc"oM]7Eqv̲ϒC|} ;,3?ljoSª7%AqH: U>GvcmvzͰӳ7DҦ[q{tdgNC$6FS%ly!L܂:֘ߙsdU辪UwEU۸crQζwvߡ;hc0}2mHG;}LgҖEWg괶<άF``#c6&y9sbKi?(Oroe?(iK?@̓.sId0oצ=tu6c] m׿+ldoUf%-":?C柋cOgEYȟdm]ĎI"vzog4v:Eqރ bS2Ѯ ԮKbs< 'K%_DcD1-m/ZSv8;{8.S;dH0`pIJEu[ѻ8Z]8 NoziE`߭ {;pMDIkm&P6b2ؠ 6Hl@}0 (yzS5_) ZSX:`o.kŏmAvd<'$;`}uj侐:g< 2Mݷ lAF&[#ůz-n`"d0}/0 h]qaQl'>p8;&ጓjt;$Iv8dD}S(v@}S;g> ljx;M{va81;Ⱦ^?OށvHC}`@簖l]ca_/~lWL6d5'hObG%l=]`iIM 8@O9yll0$lpz/6ȕl05 h2𦓷 .lx6@t. 1 (εFA2x0oŽ>͘6L6l:a#)Ϳ߬gEϻ:+4>7>DFJq&Ta wa uKe|)n%*my1L^g_m5n] 6o.@!hPM>{[a=φgÖ;UҽOf/z{L{ma;yyB.3J)0yB6&5>ϐ]\0후tE(eM$JY;h=_V|0!eynPMN̥ݾ4#J͚Ysz*{hks.VOezS3'}FN}X݌x)4¿fq/O[ 39y r)ʜƦ8ks &ٌ'M PtL ެU8w5{$C%^|c#~ۘzY=ZkMaM *LD\bMSk=rL8Zh<D?x&;xvM" xkpuV(<:Ki?xM ]2>o3=+=G 3I>x5&^3xU;+7^-#xs6^o 3amAZsb=^9}sDo xV3Vw'kԤv U7}3G2 N~[l╂wx5x%]G+^xe&wA=yL[Mjm^7dZہlWl&Fc kǍ NXP ti40 8`! PT6ў ֚{vNT>`g[}g(nJmu=*kµ r k =g)8؍w~meVM%pڰ8 8 x#>9slZ_| Jq} 气1k:1^#޷IM xЙT4nw{t0[iX'3M2]cFkA:h6" M:N޿47 ="O]A|]y,gS~I,xWiRs3ND͠oLq_|r 0o̙pn^1}VINߋr;R?i3ʵ"ߏ[ߢAf#Ku3Bl68%&zO2&s%U92ޱߍ~<0 16ioc}a  Aӻhk1΀WqPNނtkMڽ[S=gG::!VF2;/KkO>taa\ڝMyQtwXg u#wecY+g1(v> e)*USizLJKm?O =CͨGoAvd#:i.bӞy;lҾŪx~?y|z1aCS\-ùݵ,Wy=kj>| ^k4MxS/5t]AGT3#TWEA)Kx={ImkeYpKR;t/Qe-S" ^?Er1 x,b/( ` x ^J塶͂*x"'GӬx_ ކ(:'GAC7׫ ĪXO5o6j~;7gr{IovNw {l}dC a;QL.hRCG2SY i'~] Q ЕDK&iP{H1C(e%\QVW lpVG% ^튲QB|-3"GS-C.&JCW*'><& o'g-Fi5{HmҦdmIB6!lddB1Z!(f ad-}Du 0 WȖ=;̓d˅lf٣-)ҞiC~g&Fގr*~ξ MzަԖ4^VѦ{z]J:FUԥ!$lg Y}Od K鎻 ӄ|C>;3k>4qaʓ<6T#c0ʀΒ/DwAs!)_ԹdDx4URVmB6/l"q:v6MBFe?S^JK$h0.-H9HlEYT͕B,45L\$!tAv|YL].e י Țu!w]Ф֎0ڱz9b.DF_Cpyo)l += y=vҀ-}O3P؇tvj dRu=4>i noblhe,c,1km=ʘ8&>i6Jaݏ띏}mk-c}f.V=2I+,r5(?p:\ŰcV3ؾBLF݀&=$@˴=#aMgnA7xw-d  PCi'"~\Ty @'h?`/`s3tHx(kr^l@ȻV!П̀HV@ tBJ2t7~O}a^nOy悟 poH euIjr*eˌ7VGG |+\H%44' D%4"ٜ0;iTB!#@0!! ad H;^>B!Ms>6 Ï+݁sӳ%ye=|@=eyij>b~.ݮ7rڵs./rm3c$9={†9>w`54軓=v8t_D!>g0~-y{pv3~7Y|_V>P0?i-F:3Bz4/ AAKt? h(A͂3C m͂ zw}aA {.At/lNә!VAo{ ޙlX}r޷wZzNAt=K+~Js9=& z1^  >! l/h/^г=l/B   h4Md{AkUl'=5dAA_IX/# :/QdA_D4:/IpsjM=/h_Чݟ/dA[V>v Ϡ>]߃k:\Nw K6Amt+W*h?ASП.A%Awй~Gл@ 3S:'VAW Uؤҽ,qOpӞIbۂczt?χ*ݳ#q1H&m]#QN V;j7V-oҾYݷ.ԧ7w{ &ZkX^FXȀLzQ67X+}S?< ]}W.Y-dCؘʑ7 o;h}d"JTyw1xi,'yj?IXY>󆹘@|ѷiH♙ݟ"tIN/R_AtVXCDci I0rC%Dpm}2q_IԷhf(_k4ZDiZi <]3:T>"?DL*b WQlgT^([\?5F;tcAB꽌٫\.y*[]lE^)3guZMb` iT>=OrDO'O}R&dluoVjߚxAM=_q}`{nw?*MsJvhlY80m9CC!9$2 bqs+@/30Mb=q/;}:γ3bVq|&@7oslZ{0 ֆ=C?|w'sתvUzW z(ccs BڰO(6>~/̹Nޏ :<.1bdKˀxT v:Z{)$KA<,=Kk)lhHxy@6j^HC4?|i@sq5?gbMd\[{lK6[: 1L_?kSŹ/t;~(x;1~m[]{ tԳf1vϷn22qYc/t=@1a}E;ǪyFmTGRQ\^M6ARne<>C90C9>|l>c?eڃ"ԯXVw Rݿ٠1,? K 9\vK<ޏ1L %y]ՠRzV ~v?cӵ<}%8֨yE VfBA=kQʶ{id.GYY_^x p3`* 3oL?qvq_0~V{2[zj߇8 GۖY%*cqOi]4ٗ.Eˣ3_]6z_9/ЧsEy]ieX~CcRkrT>ïX-N]c28v5/=ēGczX܁屘|QI9jR]>_4拍C?*˞~y`/)il!$, -l9ak${hwH$݆е@JQVw癙!xrDȖ5&B*E.Z$$DC2&Aur"mE(CknVAZn_ݝniK[T${yfIBG<9Ϲ~.\_ݣ"gy|c5^w!>kRm!41-翮~/gZNC)M~)kJ91bK1|͐ n]I[qzfij}+\ riv(| C [p ߘwkgـ 1 i9 &=x|EW}%UMFlɑ21p1ѣӾqtōSj'Qnh{{^50so?aa5:Eb}>د~CM_?rJfΦ/mE1m߹|?G}K׃C ܋#"Fkߛ>᪯*] l'gkWXi^\4ٲ?IXE\K{tuRdLsA3C#i~q mig#Isa3Yosms[y'$?@_|u{oё9^xB a\,r+M>s=<Ӥdm3U)\];{G8c{/OcF0u>=҇/OD<=γ֠+8KMsy=y 3?̉' >t>ۤ}0* _b({FDi8܀oM-~j=hXIo{4A?2p pl!ǏNzcm%?ڙ7'ǥ_*o|S.*ǯwި >eeQ{٧H?sݲ]zf/3 B݇|7YmYУ4ϩuF^_>,݀v1<{Me]vB< ޕ_4,܀PHC=_,FTooO^O@/N.qk5 W>sD#GΏX̧a̳$R}gzkJF0I:c;8m(#rJ{cc^~nrΘ@`"ߜBQ~*GړE_Zp0u'cS;5z.o y&nIszoD^E(O8QakuĿqH  H Xۜ7(m8p?rnX3v<5QfgwRh'ЏHTqzH1c\y~}PMQh7v1qm9 Л{ѶSvD~Xy^S:n;?E_V*@x9Sl5Ngk_SދV#|kg&g޽_¥KHx-MUiZm7h݈0:[Aݾ;amYڻAm1 Bfߦowjgnn1>pL Yyu9{YVt"9՘;9ۡ?=7;s~瞛>=7OwFs̶VW^b-c>0ۢUq/tIW 1tza]m[S]51ɓFυykA6hz}8uN=㜻ٟ6ﯥM}~_=dr'+t-NQ'񙛤1q q&lr%xݸO'7u]Ien9MC;>8}UϠwnHw}m6O$7gG' Йd>DpQ>lZɇ n%ez}+a[? }\7`XN^ae[\r?@cv~1޻ym帧kKN$Z@[1Cx]WR߅>l$O8xlOx)#^HxIoxK|'uk!1A}Uҗ=b[[y[;Dw[r}N*99Ϭ߱c?߰^7pL~=_!u.[7=+JX]!X̍R7Xcϭ8m;#؝*1#v~,oKSͺKλ Yy@}oY|z[T,!?x}HV n//+Vj~Ͻ-1PHwG9unѨ g ?r$ۗd)yLԫJoDݝY}fy_I]c-!l q 4O>"D{zq}fqWΧ㯪7Yv厂/r˒7;AHb?Qz^M}Uƫa|65rC$|c_h=S[xz)Oiu!+F" M'̐V\gAx?{Iɣ uo|k^|R|xu'+I/Oko]ŷOA_82jwq7kQ ^ AG&nkj5c6Rv/W*c/E; ?gz[o@!q8eȽ%n)kg{&waZ2[|.wPYEP'dw򦸷rOOT|4;+>"W%EBU[Ý 9oKSȋs1O%Wn\Lhs{Jypppw>bsC?D6yjZDoLm1˵JffGoAةNF蓷5ht{v8`j~Xg~kHMt.1lO+^:m#6} g;Crܿmp_@c?BC!| D quɗ9>oC&y91gIU$/>.YW~TS6>0[eڦWloěLvt.kSs{a:Ac>%XZ2oՃoU-WDOtKK 5/7T#ik+G~gǴn<kW} TYxNW/OW<˳29HU:Vd㙯y~J^8Wzeס$DZ{$zNof Ha|g;Rh՗+{$)دg_VgFƒkq?,e[FZ?[gy9;e_zzǂV촹C9C~V:lz!av%lk_D{Δ%: PtSs鬚d hh&[}E<?М&&![$? @BO<ƏD p·[_Jb>͒ ѩ@G%vHzo#E@O C.w&fEړ>xI=QrzptYCiJx@{ ݦy/WR?^ٺe&z{-o/s=57sow!>Czeg|^…I$'bтb^ /+iqcs?Zp!_t[y*wzy`8 kp2t=)9ֽ뷕&~%}r;yU)ҙv$.q> C$V9 35&wM;A;tⵞO J혺 I~2a5 ~Vh,Hlq䒘Ǽsл{VR/atK#='i tDZ?MpoV.d[MK_@&\ hXu-62/H3b`̠۰=X[@[@2`p!.:82"!֙S똦X].yU t`uÞ]tاf*z`xxU{tp/xiZ/'JP ԤHbSʡ'YdI!y3i{XGi͖y< t D߸.>L>:q:# V/Vjs^C5|lN9geUƗ?3_Nz/+@] |1%ėA/+t --i|yR/N)+%8q;4+_cK/yRZ@#"֑ OZe9W׊f7bBT|L? ׭H0>cl?`G{0) sBoM$k=q36'YdQo~3#mXw 9Mc͝v~d~~WlOǧٯ`ݝ8wwE[^ד3Y?Sx{x=PCZ_v7)H\V$Ý&٭Ogt8UGYGp_XqO#"m=@[=G3"hpwR^0vĹ_ ѝ̕g$GD[SM'B~~lKGF}k_ew`ا*!޺S1"2Qړ6*UbmKIr:rlyy5_}p yb2A\i|IY_q 6j!zXfKxUCu'+3B8KzT?"wP€>D?_^<Ɋ^ zQ:'ɽUKi$ 'S/$W"5\xJ&q0-XM,MxNЫ.VB2MsSoLӞƮ^H3~yvZ9Oo_X%|3l͊?_%xRo 8ZaH9ֈwt(k4K'&&A'ʅ`_Y;ߩ$ܽ-7K~vY#g.#҆ݻ2&7g#]l(ʼnC=HQgjArNGz%λ=^\ AuZ͖ޙT!|1+H;KU(]$J"Y D XiNl4 S6@`A6 V5i_uW1}?R~$Q ,e.$2 :8g:\o{WkE>m.n&NĻwYxs @]]?:ٮl`G_vHQK>:UV|P)>fj>?;iϸ\,yV 2ظ((yΰ eKWǙ1 {mz}?Tm\+ ﴋ1\qϯʌ)M\ B=eFOGvwwP~$+|egx:y<%cr}*6䂏["sGy3. w8@}1| %JsU K.yDyEOЅK Ƶ0֝D}vk12D)CBpwS±8QS7J' {O#6w|[U N igW$hG}bѿȢ%sɿ'軶vH8F_G0y뀺@G-}X%,ϧp+J+W{+?xfL؄?Cq4lyٰ9M6_y Iܾʼn+&A+ ;휪 ':r֣oiw>-RِsB˹x .4).YV8@gi[n#Hr tOk}=ۑ>Ů˔.y(i,\U* ' .2k )9X[81[ɸ6G }Ġ&e\Y2:\Uo02n :'n4??*}4 5@bSV<ђ/Q^J]s>+؞M^tQўL/'VM`Vאh}\e?\c] 552s)t'r%"Oҵ)W=˴Uv5ddCZy8+Nvj},Jr,!.gYC-yІ-~kW42.dYN4j YjoL\ x;ڤ)~H݀o3E')ao6ۖp+γR{;\XTX_*X噽Wv5gӡ屯I4IS={w_x/gAy\gz3ʚҖ\09Łfڮ vn#8 56[QyeE:SY.]ҏIK}|AO3a_>Sm>yce:0Vy<U$-ϐ瘩kި<#-fX9iaι$s (viox"*1l%/UxQͿ' 6Ȃ36 p @?B ͢FJm3[3%3m3)M!!bO @8#lE8+G(CX%}&_}:p,aD#΅Npͽ[^L6Gt>g0)_9gnH!;ٗ(H9Re[e&3mlu|Խ˳eu+My܇v:ΞL.KYɽL[mg3&*{[e^`g~Þn@rַg'>[Mg=|[>Z42iqTas ?s(9Z|GcЦ {»l/U!7l7'E:Aސqaяp{aw+ xvvyk/X @OA~ƙ5^|p\!LO_{=_z=}Ik;%讙:>a3 /C:}W1Jm._J<|枭|=1A}bb~b,p {y'$zLhs_:_WQ٦?alBKHU"R{Wr}5MY{6iR-~G"X+)xydw>Ar}VwnP/޽հ=>bi?чBކ*]$e2|̵M$wk?]u5uԸQ#7*y0Sr3uUh+O$D [VqmYʣ'\zGr񕪍PGW[hFs2QN+6&w* c7nK;!V&I!@ͅvY7jF>r:U'UY6&*Hq9^ quCRT$=UߊOЏрs?~1{ۓiyGSV{)FNiϡ>o9yFܞ6rP>sʹⵄ.K+ #|San8R`='}aKý gg3Ƚg N3kH7A@oQ`HXk Ka?AfQ 0}:˩;"]1XoQg n_1{3%e(dr}%^GHz}9"Kv{~O!cܖ,{1x`i tpL]e}OxD8044tqU+6.b٦BʌG/slGn1[c>54#GއX1o KGu{rK>Ku=sd]7iCGRoi 8x1Ѩ}i =FoTz|~"ctl:Fc%\ZՑ/a0_Wi8H[ `,nѰ05,tFj8˨@O_qt~<[kON8bϣC_6ysf=:m3b/@u.B\'}'<mPErJ]5LuiNx6HB=Hw^rPo l])ߥx6,GژKM5iuGXx! f=5RwY s\)RYL|cOGR2s=J6~6KiESLl)3S#kIK37os.iwzЏɖmҷ>gx^\ֿUbE;S>s)b3}Gnۼ2r>|^~xHq+=#۹^1oʷx 6s'xa^ُvۓ:k"%{ 1wG|x >gݐg˳z3]c) ʠחC;rO/pg))ލ_Ye!X ({d_ c|j& RgKVm2UE5#B |~gQU&uekW8{<@nǽ%>ݑӈ.LawN\ :Q݁~?8uu#֙.>U.Y: nM}Po~\Ϳ;@ZJ߽y7X{]|]yњ~ݦsB>@@x x'; b|zݍ"-y1]I2hG;ڕv:x|"iN}rFޜ+~G?`~L}d*A?EAJ`0}dUtx{ic5Uy ͬڔZ:xrou4qe/Oq'G^'5vڸg,cc c'=(K_/Ϯ=}w/쓻/<9}zddm+]R[ÞT~3gs}V<_c?a>}kM\}?YMɿ5('cOKwƀ렽^kҼ9ex٥:XVsd=Y&5ajR%sQߩ xCm Yѧg-uP7_(b;G6Ƨ#LȀFQޣ"`N[e¸+W,W3z'093֕C}DO<|?+0O5oXs9.쁹I#]|,ϔG/E$+S3',^32'9PozgQ>O+-3ٗ]6ק?sykJ9|^Zyw8eQ.O7hcmm*$vi[\q;c$O;4'\=َr[QONq:Vg,~m~=Pch ZA5SUo[=#; lOۦC oW ;# ٧I-rH|YnkܳB*pe-$qmB/HXw}8 }G͚PrE==^=~)=5ߌ(ҷ >OؒϢw̷˻xɓwͼo+9_q_SiuG=x鉏3|ᕣ]gx rkEZߠo?{/w_ {Vp<˵H6*\]Aw y~L#D~\+9%6_CyyO1MB0ߦ\y#o)CbYSƵM6(b''N|'{=-Q<ӿ[py;au%սʰ_/=ӚwN= 53FnB32RwngAɠ(w⍬3Ne f*Ӿk\('iG󁹺-;̴#~ySj$`v叾(;oV<ע<ũSqYG*Ǐ~ǽG{>oܾg7q<Gәq~.‘}[׮*/m߼k-܎+q!+}`G3rYWryw'nOPY2zEkg%6S* ڂ?XgxqxҋvϟesLa 챓796M/zMS Ok8.@й x1~ }ߤⷱӯF:V3v>y37u&>Ms5/#:␄w,L6zGu?79HoI~MB|)E<`7SpqG0ǶuO\!y*N+[{{J(H f],e/mz9Z(}QG.qϬ}ZGԫq7b``9nC̭ ڀ>=sʦ~=80uw2PUU6n}gYSUr:]Ck_9E[lO-_(a|] 륾<xxT{w1F^+sM'oXGOl{S(y3{ϑy }ZεZZPUFe\tOmcCU[WjmP565|1ToݲVk5kѶ!~˩G1 PS[Cs [nX7l UwhyC]>9rg(tYkjѱK/4pm]HM7;ʪ %kᆶ53skC: pz /g9Oޟ ,2˚M= V|}FF ۚZ7-[ájK0&@Qfىt/ڶt+%C6(SbZHʺZ 4o`/--h^V +!*%[xoQ'Pۆ@|p0%y MlMR /mpW؂VZ$*V$E톶%/7.[]<ZkEKC 8 Hx!y0 9=es[^۸"YuP_ו:T%,-Ք[ »ƾ)'wޡL갃OVCgX ˁ3 +4|σNnh:+{9d]6s6^wֆZrf罇|L4PU5A^l.;YPb6E@4E=p…\V[j!nqA<}7*URV0ilX}gmS[!-^PB%Vcs6-~tzLG46UN{YuC˚Z],w AJy^1N[YYik0U[f6SZe61505U^q^τf^=c\P`z8vTbTEi L|ږ:2Jt}ly08zA;, ,om*[UKo&˄SЦԱ4ɤɜuZߚ*( 5mͪ8͔˥GΣ  09i /:Ȍ9uz11T4@̓LFkִ2st> .]e5ɻ~pY=yݠ:PofX#qHAD=kl=p`He~vt@!\|+eD >d\5 IlnnpsSIZ~ >Ȧ1M-h6C&jSIzi?w{r:oURҿ{̛+ʣMeKw5o%z: 4MSR&;4I #CA:mͧӇowEnALR]iiOo6;ZۭjiZrCAlM, FQ r}$Dn A+*Z޹8vqvsM479ƕC649Eۆ5Y#F7;]yZZ u k2uF$f#y%&ZʫTOƧ_|2~ s(춦 ke5I1-4]nbH \+6 "mgYR閆=ty~Yf^z3!346UP79 #Vuh!fmhr/aM tt?Is.u4-Z:Ѕ5 ka:g:qx^Fe`e+"ҟ.=< ]ZhaݸVL2krJb-WCVV^bAKiqVj iwZ 9/'>FdGGw ~{|7dzqi``+-CCuHo 6ly-u7ohjTZjAjނ%sOm˴a>tϴuRͿfL x>f:ü.S-2F~ С+߽FWt "~,߅? Cx.Cn.E}U?Cnz,R{?Qb*=xYH߇gSxóyݯїE*~~θ'W<=Y+|T/_Y#t<򇏫x7}gxϿ#^WNFcEzT_ zeWBϭq3}#D7͝{U>/ɌWM~E匿n 7T^b6QԆjW7 9W#H#S+6%DoIO!'um-yih2uZ_Jg[wfE%|%&SBw񩹾VLHf굡~ZWvT˒ʧ-K:w֡!V!k7ԡ7mꓘULk^O+P5aS?UZd䇧t(s}'I#G#ebN!Q>ic C~qE*;vɗv=:&/;9fKx.Cy@yzW>ro+=~%7!|+Ó1'Va~pV+F"^9+Bч+"򙟎ϚtIݛ]O}O7{|+olϔ! Ż9Yәe߯"^ !z_??܉xkeQW=^A ~/MrW9k[qQ_[p:2*(;m&ܓo\ on|ݟ/Bt{wwHîO ٙۈwߜ?"~r J].95dSxWZ9ףdxo3C^!"qd祩@o/MPߋ+g\ *ޖ?oAhS>cƨFf'o>bXwBwoydv_A[^ͯzKxՀAR#M_lx# %GZO~]:~ˀ_@|+%ׂ{TCg\ y8Bw@GC%yE]#T|6ьA$:ޅn\/ shyfoߘv'6!*#gY cyqU}j@?`7:[i@}.Y2&D^3@]~G|Վ߸<#?~L^ Ѩ'-P߄ īukyw?dr!^ }Qg?pG3E ??ˌ4}5,C?u@q2q8CVOC="^| S~7dgď] {W C} 3!i^x̆=orėBO>׈ 3/=u_{{@O{q٘S'oi~:UK36od!){o3Aons?G;f(p;0ֶ kL ڶuxutхWniWu_׬i`zj-+iт9s:CV\NI1,LTҢ54~3nk^_ݺΦjå%-Ԣ.evG5P^j56wrz嚖PRY[CmrU/>oVSfМ:wWWm^$h]0зyrp8_ZVV]-j6!YmcsrEavՂBuwnX/iwlp<՝Bf^X{@^Tmm ;Wo[vL [B%Ԅ9!/?W깘1AG>JdN3N\?6\ 8g6kfjP1LM] õ&/}FWz#$ʍC@4 𹆦.Z6 U]sVj;3Loڍ4-QNyy]f,Q1 80d:~K|C--%4H2>K'mYݹjXWۺ9vNNvչ{a s;n 3Hȗ P݈Y ;j99!5tO|oYP}kӢ B ²iCmM6^o?x!s(MH k Joj6Y5oQ>3_ yi+tsQy7V(q$9 \z͍u@,N\ 4:]uxHҘ-/ @rOO R mlせju\ݨ[wA$OM =Ys e|-C. 0#sLx\6 Շ6޺1Gރ3eex5)ZJRwo(ҫoPelECs4 ovjjΚBAEўV uEY%V٦{IpyTɵZAF2`tG>cȊ9"j,!x.B- wF!DFnRqDFaXbkgUq!ӑ0+pp*Piy#ϠUWo %ȹ{Z4:F,J:<ȓY3|Rgn`oKP%Z#v0Txth}p0!_r&@[}uP g9jcY UYc,2mY:dp j\Tn3q4 .P}ֵ2./1ts-Z-T-jWlY:ĸAL@i 746sA^J~x~ՙ-b:t~t0 u\Be}5ԉfd!PK bBcom/sun/jna/sunos-x86/PK %BԦ'com/sun/jna/sunos-x86/libjnidispatch.so}{|SEMm@F+jպ.UTX+hZ Eyt!塀śh`TQQQQTA TZ\֭VzcVPywΙ$7~fΝ3gΜ9s;+b[~[[P襅7 ,KK d) <n?sr j\+ e.HGق 3^`??$'qZp nO+pd!Z"NQH0 \n⩠rAAς0 \{;!Yp=_!q1p MUVuPj],=Nv\{7ϱ{N7 d\  pe^+w㹛Uu NXgs9= ~b]¿%j2 68~ \w#ݿ&pws/~Ca[9\h ܝ L]+a+݆t {7 ~WY ?syȿ]W{݇0K{~2o)pws~+$*= {~/E%5 ^:7~Mc?wn! hm$^ ˸rC ˯/wA?f(7s7xfN}%?' QF~?CNJ#$`N?F}(?cn&?`4}Gu7'{~>!,| ͋Xp~dኰ/"\ ;Xj%g# p(o#|5~\p(G1꿑g iYu?ңMDo/^?ep3t9+7cvv\qptpͣz}N:#<|l 5,3ݞHpw/akXG`w.x0fPEx k^u;guI $Pnl IK\D>j}u~8m4n ݸ<Nf!|## \}Nf;Qo;~*,Oo0|.b3>~FJlV >,| ies32KPloO5͙̦Ax ,,N*f}%\m;_ " X?瀡z "WoQ']Cp]|pk -B!=ʫO`{<'A2ӛ p3ps՘~.\2T}'kA_@pfh{\Ʒ_zwΗ؀K6?pk^oٓ~nq%|BAE pc3<9V˞`63_\rA{(tE_]a~^ދc'«m܍@ƒC.3g^ u52 o80~ 1 Te=Bï2(C'|P.Yy}'XO|?1J<ų 'O/˟:cG4sƔBaAS&Ov)ࢢ%SgxRnGȚ9@>y)3.ό#&{)'t>l0p.U:S:*,ɟ2(hΚ)XCbĚ]IYz״B 6sJԈwz“5slϬi3Y%9fz x OSX*Χhif2&N6s6D̏]YwO)])Y zgP f͜?+:@c ?mlO>%gzIԴSg̙y*ِlvI!H){\1p!D%c dh)7H@TSf\D;z 00aԻgLRTB,KϜ]Μ] >ſ$}F6 lEw)ۣ} w6ݹl^<'N?BztW_!}Е.5ݿ}n:Al`d^CJc ]h^t B9 E݉AXbAX5 ]Zt3ݻa/a?قЄEԂtSѝn*?P= 0ݳ^={~G~{tܣ&=}Aѝrn%=A t@W@ntρ@wۃ`@zt>}PPB?E7ݵP> mlogBA}ݧ@NM9EZSto}n9E2St7@WW4;[}G!W3/K7B9/nb 4;41R`ܙV $W;ӊ1R`ܡYeb/PB0v(NCxiM!WqY ` *e^$ƨX`ܩY'EO 3˨#r*?O0.^I'w9IT~UV*?O0*;Ê#T~qcq3`̪X+pT~1N*qQ[P#@p-?5S#T& Q#\F~KnGx-TP#Fp?} nG8wR#,Ÿ+~ a,Zq`,Zq9^WP ƢЊWS ƢWS z*?ȊT~!\C'YS\O'8*?ȪT~q[q3`d]B'8 v*?N*Qj>@3b b'5#^OpI&Y_ !2*#\B0>(NCxX5hM@ ^picUG/^'!D0V]q1N \@p?GQS ^EO8Ov? Cw-.mβwK'bxJ/;Nĉ?YNvc"Q c4g}'(>5Y9Euq]ee]6}{<~bJVaB.=T;b %9G{7ɕlk]wL%JU ?4C3}'Hni13Y$[~r$FM+]wz;N ,&F/9X{)5:,,.b >+ly r2Fjuonǜ++0$ _ȕ+0JvsHZJ\! >pEnAPVU nFnvCN \HP+KC3Ε6~rD#5qg>g^8z%WF/" +ݪq,P=THJhAV*c<9,8_~%~ީ'4mq'8e +E?ss(uJ u{jXF |"lFg12oa^vsw?ƛwG<80ijrF`NtK@MiB_Riei:5ya|T+D"+B/]50-cLjm.gPcgvy-*5`f8$y ɊɽK׈eD >d(NGgAPUk:d5$'hWCd7^#jG љz%V]$.02 &fg僉~bA41""!+oP7Dѐ r&H!ֽTN Sl-zL?v0iЙ,}9 Xم:p3dI5i8Y-dyo5[> +ٍLqS8J\KHyM_[b&43A*σ2Dd6VX~r:9 IfۡR„k`k0؇OkVZOk4e4S\R; hџ7n)ILa~$բ(TOT8yԕ̔Ϸ?R>u?)|^LUP4P峖wT>6 hur]xE`4t=8(9x/&C i!>P {@^8:A@"_À85وSYG Bd\8Wp _:o}X+sO%9;̍65q:Ƞ'T\{-W+OfWl`N|jٸ[' &}ˑ@ʪsPSx, ;* =PB(9qDl 8⊕\j(޼h3f}rbIV$?8P8B"Gkq48{7[ڬ(nf.F{FjFgD|T2qw䡸H/:_ZO^hqaP]v*Wd*كjIڿ+E~~櫈NYH.d)vFZ҃GAqJ\yy9g.⯼U2 Y:g|V}7s@7(sݤMF)xKǃ@1Q4څte7f(vs"8Yyb/gtF㏔q۠ؕ}KbRHw?Li+bjluiM'Qm:KL2?E>ї-lDߛ:A;< 4*3OW>bmL?! [.䰀!e* \gk>L2ov1m7`oϩLB~$pwρTTZuի\er$VM9d|fG>dؒσ?G({y"xMߕ%HUZsp2;ٌh@3YO~pU`16I41-Pj II(v^9;5y9Sac} ~ÜjuH112h_2GYl eedbQV20DO\[Z6(;AwrTCq ұ4'x(dSib'1ʛWcm/w7tr-fXFS԰hQ,/)e@:?7t~:egwH ѧOOi`Ĵ{~gV'rԩϯ恿>kg߄s*mZA]%r&{#>r4"fP6/A"rA6m|ʐBvJK1?`iO}Xn-Nܷ2ޙW(v͑i;J^f@{:ma&j}*RvlG9ڏ 5ivr#sx~5mi=&G)A|xYps++@9 \]TG7갨 5H5Q IN0B>@͞5'b9 cK b^y6[Yf}MkwMl$ŹR,fI7 ͑Yt 9%H ħ; Xg!EO F>F R/8c.xӢ*}bjJ7; /0"C14jiqSFv( 5МݵHܟl߿h04>G %h6+|Y*lՀLvaO_@롎WCo?YEOY| g6" |}f3_k ޿c *UDs`+$*"d~qGK&b"v~1V~}i>c]tᔬ/=`#f^H­t5o@d"+)g?W1_ULG"H((cKHdJk#Zm;iJ*pFNlo4؜9h2)HAqC pyrp)'?VdQL9g^$6^jIE%ģj.Z [ auhbS/ 5ծVCqhIO5׉sMr^䷦I2C}b 0ПJ#~b`zgj^K5k,)0Sչ< 6شL͠R.,\Qxoys"DR/e5maņI^V4z2R.F$ύbWDв?جu<~E5X;U GD61eG%8q-.cq9a]n1ۦŵqeZ\7fe;8?<-)7"Ay.ĎQ5mH7N+NUFx6J"i$mi//W [E:ݴ,O/-pyY 2u.] KB-0;xvQ̨'Ҩ'ҨL2_)offZhMV-5a߼14Z9{_Дcs)\xs?`rp)@Zf_p9۞vjO*۵;f8ن'aWw^6i D/؏o˒:zSY/L꥘#LqxbZ/>rAɍMiZX?x^Rm?蹰pWs%XGBS᪲#àRj 0C+!j7Bޭ 20]Jliqt}-umۢ5۪[\E/&PCcq8K<ǣHT/srWy4v1zec !#)|,jm%hE =\hb5YUvBT4{X,cj=LʄAI џ֩?6sÒcDLM*wAA+b+GEκ͠WWb'&J51Rhq[VWjʥDb?X:7?gyWP)|ڕϹJU5 M<ʳRU_~W*.C: "]82s9))Up>W`[h44do:Qy%OvY$߃C<W4Rd+  _Ղ=ZSaXvS-(]&Ulu9zh0G.ZbI(M*f3S,ged&n諥yVߢ]*Ԩ^TdS[Qu o+gSsg3UmUȩ8 Bm|G'|0cjs_C0 tAW0:gH C![8;/K Y@iJNdO]B"^sAI-)e\Tj~p߮A#AA2(Mݙ(z+\GMU6/Gp&ر@@(Q_u_ W@a#e+VV4 "5vྷ$KfiPL-nY`#vn:| ǩEaM&%W0)Έuq>OjlB(IivmR$ƆM44=ڝ;odr4Or:z'(^6)({U5UiW1- #2,1FNVɷ㲶X p2Eρivj6caٜ=vR$&L>u4{稖ϩo2b}Y2D*{9fV=ewAyZ;yThgi'UǨT(#H .t, 9MISBt CDДΎ:DtM5Nk4:CFY=SON{Kbi ζ:DйǝC5鴇iFgK+"<ii sUl:t:ѩй*P>::ĦJ+!tp(Nq;u$P:OW;u"]<0^ -T^6E⣸_[y9-dȺM?o֡1?k)Hߴ*T.btrQ*R:=BSyӞ-8?SYgIdbuQ]料vΉKv;Vl6xsf+|cJ.dTC=Ltʪ-釻Bt{:𔷨#9 f6V!>-+pp9W(NyQѸϱ[4?؋E80=<9.њF e;#0*uZAaMBiթ6 J/7c)I t*]L| cqMk=9K6EQs͢HQ1"z"\־"΂(S_6 q` <q9d981t9A–KqR% -4eZqGU9EɆЁ#B2 Hn]ԖML y  o?.f|YGCa1kC_hʇ[yGwÞ}iqLzXof6ڕQpBN]9NHE >V+`[pm@ԡvHD=z4ƏSjgH# m11* 8֐z(\NT̙݁ns.xQĎ{@ulE.">nwg#;Qu;&yN-zuݢ qOQh;;( {:5|wDD>|).ԸN97-&x.xy!J]al͟_ ;<ّ)7<}ڈV? R1J6{4ߪhJ߁| ߴh.ǝ`x k]E>O9 H|MJS~iD$aؓ$nb3ri&:ߠ,L6a;!N`HR4V2mI._#gwĺ{1MT/KW"\`נ#Li3f^ɟO?ձ3ڌ? FFh ~9?O| b](e3\OSOm!?/gKi7$Pm^C{*Y7ۧ/g⋑s^0KT#[u9/Ɨ?'n݂.kGb@\dk5Λ"弖K`XٽC^J p3@K _p^Y^r Dbo^J- ꮗE+/qs~%2Tvq%ByLr_6=GZ0y=0pQ^ fy32_{>̵ϟ>}ތ>5jl2?Jư(9It?$P/ڴC*qpχNC?YmƟWGgllyv>{*6 uϚg#sɟgbg3fy?ğSOP|igsHiY|'T'?ozpggVŶ_2CzJ Cna!&S)3T$6=yrȥ1tShSf\J}$k|jql+1rai7|mkq> W_m_,0WI3l~2o>iʂ;c , 6y͘H}lN53-/}&-t/hUStxZjƀwKHzO Ꟶl`Qi/5[أFiW{ЍTc~h}F!0f͸~.L%R.1%zP3ymArcMh_-ֿCyH:%KLֿ|ot[y[%l. $OcdOdS>GN2#\^.RVwژӡh>z$7?r&.{dVLޗ\G^vW PT/DKc/|TnuV`")v*4Q)yitm|/i738Áûܔ__ɯr~8ou)Mއ0q!D|I/V|VIOk-6y&|m]_ܜBJ"ŶcdHݘfOdځ4ŤUK2g%'ݚ&oK!mo?D{?hgo6e4) Y__^"<2z.UT?~h@\}/LEmZ|Cx(S "BUAnW RԷ[fE3}1VRcbxe'8/mUNo4-h)WA"v_ ALuCj2%+dd,_,3ݼx/%QX ~kjhJyMK1ػ6X ^97=a>1jePn25 댹71e &Y@̥dC CJU`PMLy Q죜'9a((1&l %MhՓ;ؒrԄ-jUʒ;E&_ڧij#Vl'v1EWo6qbN0 @x.ngleȷQx~WRVSg?u_`2jLS`],_׭S(.y?), SRӇ(&J0ɘ ɇkoג /&F_B{ȿ// >_z3,[+J~h½Jg, 5*fw,ҵujdz~{#? ީK 6~8]Okބ8T9?H: /%,/_rx0 <뽈XՂ]qm `wfU؟]/{#%;/& UZsxx0,;q,&}˸80b4ŴըMjF-Dhkwz!SX~ѡ_+n㿥7&hY񋽠+n}/6/c7p?A9ؔWZv$ozjZA!o*~^HmVkCoy1a0W6 ">)yI޽+ѻi}%=mtr4^?;p݀9b cn5PLM6%5TG>|U,4r 0T[!^pBX/tx]!,4JuFvz XL~~ b o~I?ER)5a*⹇LHsWFZiT=3~qK B+{C:c8|?,3 #ʙ/D tx"x1_=!Bq6* G9 /NƔɮɁ[x66;(4u&<3WɽNytFql3%([K1|!l'*gcsgG">b%Qe 43tE1ql`[?_Ç@O%TՄ?؏e2>)[ٱ/>ZD/gSq\M^”7vҽD}h1J6iSyt#<)?i^$ K[U]9),N)_MOy1U}͞_07!je>(KÂSz&f=Y"S"wY`/hDy`Å (ib'NH\F/'f7F$R\ֈLKyIPxybXωHYj IiYv`p=?a.8} ׇR3τ)|/­41 wӦpk(晰{z0 ?'f>5ϻfwg~Aa=/7OK6% #<)ds GL)P4,pS?&“` Χ!"(lfvv,yiSJa <x';-%/jW)4gў;Q4 TMB'&P(45Ҍ4QOhR(?4hir(ͱnfmhhi(vJ+4hi)"Jehhiޛ|>F>̢)Q##vϹv=ι*e5Y3d2= "2W#|-oe!mNmT`OӃڄP%L![vi T℘{$Iًr;L+bJ:saf$N^Zc |∺֮]9FiSVQLսfEVB)B^_~h%$ƴͤ-WԵ9/“=Il>%QY&XI nf`'IXh+^Q/ǩiVSgd45uB3)I54ˤ4uLd_GH&h4{&xM3٨<ВGd+eIi&(9I{h&KeRCiRص4ZJ *;KK~I]HbLs$W$SH~IMӛ28_R4'h#L5M_J#$MC4(MH~IMӟ\k#%5M*鰰n.8i; AS5.]eM!^ҶM/>W {6ȼ {SU] a E.MXz 7u b9kwpJ#>n<.^zT-J|։A^ G LB7{y!yůȻ[-z_#o'zgK{#zwz琷wI]E Jަ5 N(LģKDz&לZEw+v;v|'}(w|'NJ̾Ib؁A"{I٫cGfwCyf>4+B Vqҽ.eSR_PWᙹ?0v= 2S\ݻ.s(KF%7Ks1+mȁ^h<({y oP.eku=rS^1Z^kGR?[Mv<~/*׋oS9yׅhu|^!KHIA>%;Weio퓷udKqFԳ2jR d#__^AwITK/ j.3eGMNz9/U7lg $FLsT*ZS+/vCv];qT&I$nܫ ,oGvl56k~r~F|xJDj)2?t U;)NAn,tѶ_Yg>ŸBG)B<}"b +tc12I HYp z漆q926U{mZK O [Sʱ4BK=⡌wml)7O=#njLU5s2fM+IYibz>qLynd[NQwTLco!u_4nw}X4)#WɹvzT>t|ᒡ=T7&SEJwi-A۫R~l,9-ūM˟6 >Zi<m_t :ͷ1ñײŗȥNpɶ)<7.Je^5K"N>WMEOre:^O]!cqi)ۓwɽwiSǍvQFB$Н4Kx x D g}.AA>O/g< +Yyj2O(% 핦הs&==jCFO"{6PL'X'+pysyϥ%c]Y4N>OD}b3:p fr}%?_'XXg ߆v>sI vf?1&U}$S \PP%zLe{H #> &MO |*A}oAe~`̴3K6yU‹XC[wʣX 2a&~b ?1uoߎ^`u+>%R] ?@5d6șV|.[FodfLpk>dh" ?b\b[G:6ت]1^Tf0ʑIwШ݌H::낿Noב{1f- {8/^/C+bynTPXhKB-}.r1h`أ4tyƇ1hFI"'sP'wq䬷5yhYчpԃS}'pQ DC9x>.|)g8jɈQ4WqxlDd '}88+ڇ=*@.3x(]VbQߺW-w4^tp459wM O7ӡ*a]}EbiJˣskܷ * y{$ -8zοQ!9\h%?|O[5qVe\nuf|i/,ħcdvZC}gM!FK YFNwXB >h@+"` $!j|Ό_g* > \"b1PDgYˈqx#>A_ሰBb\bƈ- 7vm"W Srj}QJ gڣ9lȂJJo.9ا=ۻFD92 ս][F!5-tJǜ^*Nʌd=b7*S^bMɷ6,2XT^)pT\PE1Tߏ,1IB n[nFHKmD۷@ u Kޣ|UYo $crk7qGHZ]Fu*F/=`PNX`fh@@z,]#.#=^Z&:rR?6"qo1>'^/f[Xu c%0LjCJ*cC%zP{Z h70#V"ٿ#n"KbiX8=.p CkBZ[G: C?6"M%[Kq #RJL*P4S3DeúVo%s؆0jhՆO`+ KL>.زgYh !4Ш*RPAsU}=DH n:ߪAuwd%cN*Ssea rUpܝ3(BQ<bQi{/=QDʏ('\:!+kmFb)(PK˙.ZԹq#7ϖ2<=ΞbFwcϘuY H/V^~0mگ4(03Eݯ#]T9ODCOj(('~#kahX-p:3P6*ΗE:kS4 =g'qMC bBԁЈ71qR0p+oE-̏e:;o&Q.`~G0jy]c0~x& v>_YoyB7~kyNw~/H96O|bsvKdm6zyHWXxxAdž]԰g~^C XWryylPhӦR{פ|;4:C<lpǀiܝa)y11~~ `:v}6+yWd[(8.ϳ"(. l l3A>ױ%*`K",;rcKhXkcXXg-ZiطP&[);zU/84 `XñytTo+T$C$ggQ?<(n!i5~Ε2S3 7-$|*d5A+h[Wʥ-u4H뛃¤BTa;aе m +huyqRa&}p u.R WKE\tglA2S"=rP*KZYֺnVp%W?^RN/֦omHFV/&B>% r M}(t~>:0ϏhSQ/hCƝ&ZiWOw|vLj3bzZ[t,f<}`73uotCZ }2z5x^y@*Crۨ =~:~Dyi|0s&!OI7 G1(+J[*x }&{42[~IĜt2)?8k*}}`jMڸVhE{03>y<hB*%нnG>gnЈAc TMY IL Z_%@4&D6 lXnVkiZomRA ԿR41T"zɞgfy9sO1ːmO/%sHAHn& i3bHm-;3͛ J9nfp#hH~T@cQNPqе!ޗVΏBz>OQmY_*lkCFRdF{wŭ..doI E2DfWQ,;#4'ʍ3e?6 uK{Dc`Ju~H9.$Q#%ѲCI(!v$P*nJg&?P`F1lARdز>$6IQwwS%!鸮"'OH*cԿB*e~+mܥ>m|o};K)V2mo4>+ y=Ĵoch]I0%,%jSLU3UDUplvpG tqGnm TNъ1ե 0k#M&3ڴg?rgс4L~hk&m&9&<\lq6rKqϺ>Jc +f'сӛ[Mɏӿ1G eACl64nQo=5/'v6i2`n;C:պuZ>+zH {QmsX9g C@ѺEd?hswLqSDہ,s`X%b%FvNd";$+vf?EC} -E'kSRg(W=twg5 Ė׶jK`ML`%0?Da^ NB^WwRG (|1bF7ݽLRE8t%~Koq;Zh΄TK]Md[Qә=gQkA 71F,Fi- m1mVnfRޡ4R8}g7uЀw! k-Ecq|5Rm5Yot]h햳F@zH!!Q wlo,>ß%it&v [^B(;Z+n bFAngFm fQLbݰS|]^s`w`-H߂TS0\&48{ e$8ˌ"!ձKO M>؍  dK0+y QcZa5;p(kzqkB9[7YD6u-A5-&Ί uŇƾߒߓ;I_X 2/V:}Ia'%a.=3q zw>i .\wuӟfQl KޏKuqh?h:J:r4ڴ`ل;-D;#4[w`;q&Z,F':WQɬ t5{@(}iRaHvP(gHcf5G8"h4UEB}Hjߊ1D }h461B݌~ì&ѐFQ*Dmm1\4Zc ZKb*IpuA A`Z%3DǬMeǚ`~@ v߾~tAe/Ӛj0Vֆg_Vgvka1 V6bkqvTG@ y=E ff$ya{HH93jaјg:г{oc $Z~K gk? EqqqGP2@ݙ .tTFIv[+G)arPsyL[,ݫun)tL=[dn4pz+:}8mڏQ@5 }TH1X1r+[vQocsi ` :X1ފ12 L6ӃZH90̽Gn5e1qּĂ6M%Ki)R ȭ tt16% o>;v!@1HC6Dh h9khzyW$F)),(Ƨ$ՄXћ4 ࣈ.UqM2R/ծ6EÿkZtO tZL[(ݟYУx7isCUWW^}/g ׁs﷑^?KNvfE)Y2zvj =cQj[a{;w雛gli?&cbWT4(PHAFq9ջ@ƕscϥGZZQ>Pۼ5p6x,7 F-T[vR-m? b ,i#{[Oc RyI-j 6qea`P7o%ό ̴P?T%0q'g z,jZ;Vhhn?]q:Zۜ6_H`O5uv: 1ŭ&QΈ?.Ϭ@^L q@>>mF1/AφzȱM跖aQ{w&m |c8s0fKsEfŬSS=+%%Bㇾlz$c&~1ڍI&ڪ $ND֍fl̍oH8mgDA3;GUQ%_CL@k}0Uo4$ϔr L >)Kv9E?D#.92wd\^#V|iݸqʺBf2gJlf Gl[)[ב桡Rz&>'oXq" γ1Ev ;!sOvv&-5!-Ÿ7KWE}?~oϊbƆ b29ʣYɼ1)T5 }zAW12}1Ϛd>_a7Q9S`MlZ7\ 8(j2HB@hf@)Juʫc;|"nOd;|N15#= "qWBF)XPUS@5{xr$q-;99}xM}x1#~ ?XT}` L 1xQ fvH}~L`5M`}tռf]. N7/_(ElBc 3E,M<3e!$kш dhXMe$y{p^i,ޢG,\/]eX²0MW!˟XXs²\3=Sj&f 4^eT=R/^2CĨ"6>ڛ8T+:$k i{yNgMu%@>c13_l`z$tpuoHcgUGucC?nk|oOd!u{iI?2Yrb,cQm5'(!D,Ccz8R+j_KZ_d9Fٍ&CC=/QLpqq,.kë>h^  6zzͣE"_ZG/'_obEֆ4p%N{WDӏ]·Hk,?>8O;m;ڗ%>}:rZЊkő*!ti@q(0Wӑ}\|̛RLpBW|˘=a}hguu:[0gI\+W f8Zlj!CNܐDi<`mldEX-4 Y&qіAGaV mmL_fQOc8JI.b}XoE Gw&MoyN[h" c!}MMwwH%׈w)-Ŗ@N9EzxnfC)K}C mVЛ& ޹|LL/D5. jkeCMG0WBR_QH[[5_@agQMS0``Fyo \Y s;L) s \eO.et?wD?{ZKgdK-: ?y5~>9?9:wWwrmsq{ts\|^a;Cfiw{!!wGѾfߕX(U^Ǧή;OB"¿jYj1ӭQ #P~XqrB(+)+)+CQ^;ė1t~Tyh;mQI>>{}c_K}=ssPXԞad~ \Hohۧ_ڀ'V3 dMOU=W~qdn&&lH=6 2mo=~5 4";ip]yFO`.yr{~Mdґ̞ޭ0L*g217"o&}qU-0y~>Lc(ǑW2?EX0tbyў/:g=a.w1v~S%078Lo`E*/ABCy*cq9p"!ϝ> K6ETeGޞ-o<->EZHKNH\fPQɻP} #1Q+ dѷëLiʽ* E" G(؋wUM [qtA_|[)Y*jl']]L%B{/6̐pMWW$+8OjP]ZMRRDį'kPsjJH8'#L.J ?S[$FLsk<F.= R`\#/w[ U/6Ÿ]C:"]u/H¼_䘦.< ɮafSN}|q s9.6.jBNNeYC@L迣LjlFZgU$$` PEszU}:ҟ6|⡱wE [!aXd J4w͇PY(֔>jZR~>huR O@zj+hнL+ҵ-C~C.?4ԡ"q2$V{$YM'c`BVQN*_ף\/ex,+\>hJ9IOIMI"EL׸˨Ӛ\([Z 卪rd9hb7M=•Э7QƑFˡ9G+һ6uE?(f< ANt}ŅA*^QvPL4S8*sPG ;YfJfKQY2av"&'FYÝ Oe :YF>:ОY䇒}<fkNz+oɷ-mWQ^#שF&OCH)z1Qt Oɡ?s:sWx5ZXOޔT1dJ *SXLAOa^UJR܋h^d7[*=*eQ*ZX~fD0ƒ}pۚ!0w5Y )a))q ɪ kP_}CROD(!8U*E!EZ%HOuhZ1n?Irɚ)8R"u.T"XpN _]9 ]4CUW׸%e}g) t4}gv[9fVjV=9ˢ"TjQB9T3 VO ҂0,+_Hi{NGҬ$IdHCHGh(h{/9 s I6z 0e0u0M0<$m`w)\_  ag`^sz 0e K0`œ934a\  ag`^s6&&f1LLLMq*m5 4Z)5lh'c̱zz^m%ƨk2l.1ʼ.19gdT7e%欑m0;~;=?kԐUoЧ~-L7HDܢ2;G{ߘ7ojJ n*'Sܖfmdf/5v "1t(}1w=Op9!6E7օDA՚|G ;2O@aSIK/AȺ.6=㣘[ɼ):*', Ql=GyeD2IE+_4"_(MF珬6`H* ]ȳFF K__?.Ē3$?~*?>QnA3R!|.[FrDcI#_:vtƫty}{g?vn25Ek/(mLҼ(mk~60;`v970m0aaNt9 @wL"ŁL0T*F^fiȝgNiZ]75dJ~]vJĭvIg(efY֚tگY˽^gn :ˀڒu',m,J0){BFv2 J&?wf?i<! y%O ~'͊DDណ9M}?>4#m ??8  1Wf,Qja| n(w0N1Ÿvpc/43W>C^ƝnQP9%=wa?5MӦ[ހNނ~%8՗:1d(x_K$DTxI~.>t&{4]Mpw.229fS sr\0⢈\^`T3So'1.enǖ@x?Yx7~k~CzƗ0n`l1W[VjecXOdla$8xƯ'2> %8?G`ȘZ;~F#edif?{>JjsvsFK<w6B𻌗v׌Gf0  1^na@c^~p7㟀b= 8c) fx{s83q?`i]O|ܥ̾+foxXL5x xc:Nhtd F)1̞NS?직3{$Þ&2~x _ ƥ w=̾|:p͌7x3?%-oH3?1_1'7^^p$ Lɇ_[i?e^ r 3$/߂elƔy/%FƂa?1\#Oxl烿d| Rpc'x2p Je}+x#8q\;x+㟒Vӯsko[X{}_/b HK"o`[әJ?/Mb?3X0< ُf2Lcm"x+cO6:|3(s<n^ky#yod[ǘ#טi^fO_+ƻic.8Q\oc|a 3iIu_>rp;YׂGN7gg0>qǸE ~r'd\ 3U^5'2?g8x>_2~a;=_UO<GC m/-n2kXam`~48q̸ PǘQǁ`|όw2NG}T_Y|S18;3 .g3[\^x%gqmA?㟀?c0_3 -j/S3~|;`GFL` P3> ~?GFzG,=Ww;_Nw"4ki4pYq.x,烿x1{Bmvx.Wfp ` 7~2`(x+'?bkp g2~ \xx`J5x%?}=IR_M3/`HO#c+=3No2p&$2NGl}nxf3[z^8q/1^ qKW|'2?YgZp71 νH!x+3͌1=R-AL\=B>j; [F~|90k8G_m6E}6M2O6 G: 1G뵩L_zfO뿳=nc{6fOqizo.cZbi=GGZ{VfO뽻/bg?d;!O-,\o3~2-Ǥ>GФ~LSt.=.q7GcoxSGmp^VhqcOiZQmj3ħ~Qw}טN&z}kMW)/~w+MGsux \_h7k'#|O֯5S%#,etyM\Ge|1r^\.f3/0.7xSn}J?c + ^ 07QxL_v?g ~: 9Iތ_ob|:W0nK݌σ1鳂GO_. O|Ax;~s_7 ޢiLxx3LWW ѾGZ68 ԗ4~t䛮u&yRLW|+xC~xFMN?^sM+#>pEx%!Ssp/ ć<ڮ> 4_N/ׁ۞ִk?/#&~!ߎ&#C"\y%qpG~aMt$^VpZ?9HϛeG:ބS_Դi+' HoFp4kwQM;xzKW"_ W~"%rUx#8 1et_a硰G3ҴኽWJKމW343h/Ng-#*~ܳx*Pŏ* M@( .:i+u rpQmO>4ۖ h<9-b NnVH0 ?f{la?:F|?o@~W?tm|'b|_buDe N_]_&hzi%V~&3Y"K-h۔5o&?.<[ qMۯHV̟"l^Oދ0<^y^96]OGM^tOrUTזWNNVy33&!Ujd% RR+Oj-n拉Ֆ霽hgAEN'hNe:s*vfe͛'nf8#>t8A#E}yFvO?#A]qEqK]n.͐CqJ ;Z\^!%8 /v^Fd@5Zq␶]fὌ:_-EI8SI G EU`=&CP(!jbYYCs(jlJءnKuE'/} dWefozTki'鏍L?–vП6Ulҽpf>l"& 6]򎰵p—]&D&\I_"3MOӄ4^ڊ0Dop.\ Mp3EfX"LnЦ"%e7Cn2D2D8S˩Ta;U)n2m+S)e-8DCtpRRe JʒHUNdQ2QL*#YH6Y>6*b,,,,,,K,tW8H~HaKa)ҍ,C4Uܟ*ʿ"LL))<)i+:{@U*JRTV=M1MUlG6Ymd%grzh..cR$eSUmE]...Sm%j%j%jWN8TkSM7Yvd)CkW1MY̻]J.efK٥@R v% ){jһlvYy~ӕw:vteOQD"+]6f]&[=C)lvپe n-ݮJ/2I6\LM&–t"ceڣ\0**kT^l6SlR2N.Vasz&EHJO)5M*3B6OTh6Y)CtmR6)H[ SE$JPVAOUmEES}r)Cq(HR' U޴٥XShn(-Lsio;EW(4Q>iMio;E_!4Qpi"4!4Qi"i Dy 9/7]lW(tQ]ӅI']htx@m4](t҅ H ](tEO>]'].].]:]1]1]1]1]15]hr pUR .y{Xxk owqLF"ȅ(Bm )TPB] 'BU E)& Be KP"|(LcGvc u+1rVqph8eo.f#'>* YEe5 ZiEemUZstjjw箬F1Kt )&55stqWաVȥZFNȂ4[JSTxS4_V*~~CT08׭L)0T)23E PuLv6ZсC:jVx5U%( P(>AЪ<5n&d³20fX#ƅ:QW|i:&Q. ~VEa7 _yZ5dQrߢlD?/9o**U.}&<;iyyFe;/DȑXf 3\Ba;X8by]Ucv8^qO|y٤ rOY;l4ZX5˖u\xY9kXu PF23NINL}jxge~咱! =v攗hwa CRGU@_K)k*Q[Uz1[ n/T`29ڞ|E/_Q|~-HXȉVkk9EUZAz!->3Hj`5Xܳ@Rw8H(bMܫ?9;4X ) ] S-r6Qnށ\Wv/Ċ" ^BDf6p=$Jιf8,^\4+ "]8DsRw2$,+왢^G*ݕ%ի/g!W44>zBR̟=xA oͳfe5+9Q[}^A_tkު (#zy:h,4oAGWwZySYKCLYwN3CG[p'eJu͞/,GUe1j)!e_ c g<0$?A 5ъ(@ҥ:bCB(0ak:t WW.Test#u73H 6%RP9xi9?70o1D tY;bQJNBŷ Q+([z!e]o2 M~-bF0|` 6h3M^X[5a[j\7f%ZWD{j*J%.Vj҅}`_)&Kibs-6RJWW*QgR+UZYZtyW K*݅+ȉ7TWѮRĤ(ESj,x/)kEpcuhG(N;+k ؏LPnKNì~i+'s|aoVTs2FJ&冎x#(^M盓ޕhOmz(<:2-<<z;:L)<}d3\]9dfReit2[2Y~`|m2; w귔w";5|i:D[>^:ȯaKMNÝI/1e{yxd~ѹf2$ 1wt\:?<3wt>Bvkw3IaMrG'晴Rs_wG5M2nk p,](^EK[Τ7"?a^""2iqPK bBcom/sun/jna/sunos-x86-64/PK B$F*com/sun/jna/sunos-x86-64/libjnidispatch.so}yX;(n *~L Ar!\*qCrKqGq\ZfČ;{; =gt{{ι{}ƙ FWQ5 Y ߥ%Z^7x o0{σ jxqP..zQ%80u6{Wx*>+zeUznV ߄E)_iFBvhƫmxYwp,'ueu wuƬ u^UnerOOJ[XD݊k}v-+r'??ÝO^?u Mn4@QzC b(BY ʄ4g,ӁD 2ge늲rСra :,X(e9(P@Yeh+tl ́2b("| PAY e% ,- /A>(3,&pP&~qX m@Y e!g53~ Pv2ʾPC9('A: )Ay,CA D2 Eɀ2w\ z"2t؀qh53섲35PZ^ _ʠWC邲r  efAEQa}+ e2AvP@i2g A(ˡL; h le) rx t24` + 0 peB<*( <eP^tP> eo2K//C@p\qeAyb('AY (k<eA07Fe ̄r9P܆sݠ@6J(b mlPށP55(切"EvHk:PwPf>jP* =r̄2ʢ J!a~,*]~Z`u+.+el aHAZ.MX^1CR{yq|X_F2/;HԭY6NP~($$^IN P7>^q"!ݫ5:REOlg #m]Ei@tu}cf 5~s92J B%5`!,ra6 !I؍ S9 ic3оO?;/hsM%Z>'5r'|ٟ1|y4эd A0htF\ߧ;ncM6Gm~̟~U1.E'k\ccѵR&ٝ[u?($%rIdث$_0Ҙ} {M>GCy; `AR~ec+0GG%U{ގyY! C}5|4'5s2g'j:c^6|`h{--.szsf*J\-@h3 &qlxK>f$~OU%d50/4]ʢ_[>91(?t2a:i~ ,_5bH,+m>pO6O4~*3@wĖ7 fO @7UGe${X46 =/2\| @sQO4sYE?n=#ZI~]г/BxdJT R(t=ϑ{G&hf4@sZO"X-΄`҃ m4o6㞸tv\ŨtY`/{\ ֧hiL`܇]T@WE`sGԜ핿Nkw-Ѕu$;/d>bUسO_ڰ;u."aXkaf`hmM ՋEl+h.FkY~>&omԻ- 9pI ћB\̶I^`/xZI;ۓ"M`l:%߱<cZֻE8Mdkc jϜ9jz ׿by9>Z'V^:.?G}XkousCo ya|gFx>$@c:3C?O9%7`_f ?y^0}JzR#_VKWx\[7|`{L =4O _:`yA4ܧB;Z1B@D1h;7'5O8he{D@\<'yo ~`H] mH Џ1B۞W{dz/+96"qp*;I`Iy7Ms蛝/%>Uvg+dg^/JG8߉gkp(ϗ]89>T-//x}miN/v,MZZ?o(Ⱥru~9yAޫ`ߣhw+sH'Ɲv70bßIls$Ew;*a3@ҥDop|Ak_h~tAY5%Bl8^v>%qA][a$9=i#;vAmñ_{ J,5APҎ%>2 yRZ4{?IJCS?-~+ ۮ$^)]b(11w@~\?Z*0o_GKtxTc|{n IxTIx&`יO)~gyhoϺ)<q5UakJ}E'J:+ĸ{x~9/2~^N_O~_!/tOu, lcآm{Cj[ bn)kූӮz_;'gV]/l#TW%~c[{p^vT|{B~|t=f^>C^< ?Ӈ$> ~xMW-7XW a>hm>o)|o^IyioMl͑E\˅؇uU7ѯ[-bĸfBxJ͕XO9x_Y:E@&.",^*֨8ླྀJV{S9^:}^T"[y@:nV̓_z1X])/|E 5F=__kv' 9|{}o?9n1SX]q*=yFq~ ᙝY'x!۹_9+|S4~\[s<|_i.ў=PJ͔<D=sÃxIИ^ֽ+=޸~9}Gb֛ 4O'Óx;G =Opx. ~w뵀g|1^9Irrb> O|'v:ݭ|9|a.'ld͇>"o:OO1O>O.?oK})|qO')fuqxlVݯsxjVXyË" D<뙣[s"DO8}8[9}fo=?BOsޮ;DO3|?EE~hd~H"4RzҢ~}_|'^s1S8žk/~г-Ão?tAg>s ez%ӗ^-<0]1>rurp9||3o6dg>'9eTn_~}n1vfu(m9yP|1s ^|п%$qx_d2F LmK4x` >,5M|LRjʐ!RR`I1iIك"ìS*SF$=,a)IϧLK"qIݓ Ktl#Sm#H`戴̤7"|1ؖFT]J0$'Š4[0vOmHuAJmĐaJzpo 4SUYi0r*C$o4 Ɵf{/,FܠRAG[t3̣_2in>}0{e aI$G 6"a8 I#Ҳ(g৴Ѷ))CP0 N2] ikR>dxMI:| @1}K2,6bj;uSW1Z뚑2B:4%HD|Re:)n\,(7>S=NKq&=g%ƚԳ[^IcXI"@M֤OՀFL(Cӆfm1v҆ D&&%س96Es51ϙ~ ؇L5x0+)& job9+klH}h| yirdjaWڰVDYR-"Nns.c`\v /wPi ]{wܐ 4a K(>!C<&4SXBYC/>ʒ2 !$/Ib7z&\GblO>2E>3p4d$>IƎb 9^g)ekȧ8CQ77 gݴ,?ѧa"Pa10w&>Mz'KTc3$got-)m`-!G ۷&rρC Uhx~6dA/>mct;# ħv!BKI:vW q >@߀ϵ1?>væ<4@W~aXP~OndoHm?#0ҏ 0zz#$׆KiI3ϻO'v>~\%:x ^'dz^V/9Rc:18ܥ8FZÕa7y] <9st"/px^tU^s9%:xz9\o:x D  Wi:x6A?Z/E>_rh >c/a ]'K, !] gI@ .?w$gK6|e$Sr2vLg܃$( FHP LI%xP >I[Jp3%x-K n]I" .mPKp n/$x-IJϔ$xc ^#s$xZ ~O]E_"݋%D\~\TJnJKpO5C ^+WJpeJp .YDKp]  |+[Hd )3$[.:]DQ` wargR'RN +:>6掦>p:>^&c(pQ}51)BeXǥ]s DS}&[TVd U~k*?쿡!5~ ߆ZwT;~Oz[oa.#~7Oױ~7`=XXzwz#$'ZAa=}XoOS?DSKk&5yd&duU^8OX d?կd?z'IS'?FS'~~d?wbI꛰OX2GT_g~d5_X&>1d?'` OޕǒTfލXXT8]ޝXAS#֭d?z9O۫,J,x],?{ ˏ1mh Seo>s'ƝeI (.|heOzMs83f.u7 PNUgZ %W @1ҥ$y`sM!xԀ@t+&VjZ__j7m+ZbgH_5p?L OKjP^Qa6c~i1>wg_Y>)Qa1A9P|e7`"&iVyB5Z>.\dCV$[xN ̶b@Y (J`M+/5\dnS~J^{Or?K?sȻ#^dW9"Bǟp+);^QpA~(ߎDUÎ)1XNr;4B1Z- z(Zq Eo`EF)Z$h13Z('3K~ &ey|?*:"6)!c8 HGn#:!#װy.@Kh _gWc2h\e=P&䁠tZD=dUe1\Ή_0G՘ 1'^kwC3nJ+Nȗ(OSkaX ƙ9^3~C+IWXҔke7z1?s?[(6a{& VGX)n<)gVG FqRBq`& yۗlwD=:> b r 5Ӈ ,wW8MBWsq cis;&=Qh}.9dSpmfƍ_ifrfF_GQVjm m:gjQ 9w爯tOwp.G"OZ{릴10Ff(|w4qYsZQt ֳzWx.f?jm^@Nٯ8H rh({f[7jRi?K睕y)EH="WX[۝'Dg~Фzp#73<̿d{<+,57 ?vNlB-$t?SP(pБ9{:rh}"P;3a+$ak>1L ~P  AZ/*`dlT Kt~z}z#WӾ=s8وB("'G;naRK{/=jQ-,N㠯qP m@![fm0vb~ S9oBdT1vY,V6*f`"l318OVSK2QU#xL&CF^Auqu[3e"]##8QFL𚞽Xߋ358J蛇cלu |1g6r'OƘ8MV eңUT۫:TGNrc?t3ĵT]]nm&mk~8![0i-O-'#ogeaW{:uZFtx}:|kwVu`·Q3x×ҍDxrrUttnx; l.[y.%!37tSh^AA NWYc;j,?y\ϡ]>osbqx~&"b3Xlyr %hj2P 3,#t˸6 [k j+v)V=~T{0'TCOq*ɤߨKuWNl--lmuc, ]_h_+ "u^K)-c^2)ᒁZ'xYL`y T"J!}uvZxp7х.򧘗b$ / $5 oYp\ª,OˡseLpF3b *y0}#Ra%1'~M#.Ekv2`N,X܅-X(Ȓ{ iɤдXsIP/}dP/K3Φ9hOLu/6?BB;(bf/x`1h%h`Sڼ)Z,$@uI:X`;~QjbnA/d}X[2`faAϘRe4C>4$~&u?z[~ 0J-ӹ~7dۻORG[K]K|z|gB!oy;Jtw'S@HkB!]G xqzG}b LR@~黑0bpY+0xj-&wW[r>Q5os fx9W,v {Lb߾hXlaVa~_ȧ9p&c 4Rz9#OQ37pچ+o KSHg_.zDD^;]y nmB{ob썅=|n.u۫V#O@9F@ Ny*/@zf#s|dvӽڠcji L<K/8 flD|Tf|+9w<~[A[,}ASk[f6-|os64"e8Br$Xk];GѢ~x;>5ol(Fj.]%לYFV 溍Q C <@S<ˌA7> Q6z -]Z4Vg~!;?"OSK? @NtKj%Ѐhy[r=AP; M{̊)rK v J=4ԞT)oAk'SR{_ z|ܯ*4s?Q:QQ@aat{Qw ӑXE7aƺ QAo\p݁Y@~*I-xh];5,eYv3  &kpea'My #Ί5 9+2ă|]U\W`~ gԫ0H6w[d`t-=xD>tNzNj6Evp2e=.g<¿c8nu<okvӿOK=L{A !|y5oiF_=T;c?q8K]osnčlL7xqKNC ~Hwt+vcӶY[G߀?O7STSQtTw2sLf3\I6v`s 32!gݎ^ 7U84i;[3~dzo|~1bL`_fMKJ"#O^d wk+bЉ|r^e~ܝ0tԓXdk^†fzS=HsLcT[s3YΫ Yh`oqX|ɲ㔿s>ˎT \d^}ku9m;Q2r9zܔ]c11wMGtc˯\ٔ;Jgd:Eي9 (\Pg##`:δ//XΧgn >V[Ly`lnm}{TqYq5qYf\a6DŽuw<]\*VCt 7zh+FND t.PW|s'M>nF܌\&jZu)R(&w!uʞPՈK;!Lc/6:q>Q.Oէ#(.56_\"PʒYuZqܧۃxm_uө.uUb!ur O jU;K-l8̼Xa꽊ɍpqiQK$KX*%=Ek9::_@1ɹ-My6e'Fx`s3`~0tɔOFr)FuvMC<`v1ߋìi>Vl”q10/Ax!WypP;:pO rc|c85fݸt){y'C,g a;DKӄ9n!@>X!RmmO,}]ݯs͌Xy m~ZM\kwG޿.[nj{cbǸr3Sk 1X hUSf`t"\ӝCKܷ1<~ 5bqss֕~t}*SHD, ׼toݳse! hLK:o32nJχk+̐Yʼnl9ްә߈"^wEW;y)|V/RB##8T_?tS=Wt?}k[rhv]EUu\` b G[ØVg|+{Zj`ߡA_7 :bƃnqW|'gȘt>:;{#=`{MD{9 S5>9 kN#}%KB)XX1^밶 { ᛥ~ԣ@GCZ1C5-2x{ n2?ƚbkb\īkHc_FU=<,Μ^~dvnbj6C?2rx{7hV~%Mn 2~#Ŷή j" ߷њx5_鳕,s t.C(z6=X+,\nUw[?X]M5܇ϭksض^^XG 㗘㔉o]vis~m4/S2!O(!vAuh{&!W7Lmd_{yc!|4 Mb#<"F#4{akۅuh>uH,oi"L|g}_}^E}>ߜDϑv1#]גIq).?n(\>>?kB/Ak?wyaaxd[da}K2r뺲Grti0d}5ཁA̖g< f~Y0'nN0k{ aJGW33ti%5ٿߗٿOf~}ٿafo߇bc#*d707}dfj>}TWk?ZhqBڏCt$bo@~]*_!ۿٿBG ??_iO bfjq}[ ̲L p }:mnrz.Pþy%^痎/[[[}/._:]3騭.)pD%zqpP~JR>\(1-gdV#VRnz4x?^O?wzzdO?w >w=xIXcY?`f}:<-c|AVxZcO&&gAmM<]%]j<=KX?KXz2sWoT_(ٿ _GТ:dW1W]2222/ke2ُEt/fcjN˘;U5~zA)dN)'A!fDzz2wu==C)jR/Wi;Pc{̿)~Jt^k ^3~0VXJJwK #^XŒN]olCЮz#@#r#q6|;-c)[!K,̔Aݎm7ٖUOOXʷkj_8i[ .Z+ `f:J$X n`K +H(\hIΖ%48j0Edp1-dt[ -*͏l79pq6FHw&0g|F8g k4g G$9Ʒ3tF%i[8>C?Z+]0u<٫۞g̵[FL} {+g߶ ';2'ߪٿ|o1gLwc/q [ p|,bY?I׷址On8]?xj C]&V$XX$E/$lVo!;0VlsF)=uf:Ne$@Oa^R]_)kbE OI'T*u_9f`޶z{p6X \Ux] c\ ` KH ײd LY8ow0pϹM^U=P7(}B+ҧ̺+uɊȯWj} 2]w0P> 6/֋[wm1n+{)wn|MºRi6}Ⱦt{ B80_ܯק6*N+`x9#/~!2 _6qK u-Ӷ5ȹ1½8neCV%{ {MJvpr~bwCe>[VC2C ] ,?撡en\zmǭY&B; Hf܇47_G  0>CW{0k\2aV\E kKL}ɔ嚉eb&VqL˱/L4esıɔ}t W0DW`U̩s녙ԻC2+ĵeº9dݹeuց)cs<{vܺ`fp['::сcש:aYlu²ųEz8Z\ƀ6//-I-W!RAΙY _V(\3ijvlk%;&;wQFf;^-, bVxZ' _pAf, L!i`j_PRgZv5[+s?i]E qd*aad/wq if^:_f-ֹuiMWZ@\ix|A%ʠpO*56KG~+Uj|Ctjs-5vePuF/8Ȟ`:vsx"6,҅C \23%o^\͟x5m<]?\R k'蒇cLv}Ixˋ_ ٨#ʒz5m]IīƿʆoR){=[wߺC?(aQ?=n|UσsX~ଝ=~1@K sG#K_=3>oAȃٷ+jzҼ5{nj/a :E"9?DSWhԭz CuܡO0t,FA}UmOgl"Z_>䝝-^/' jF'Qͦk a0 ?!*çc0{3l"v!i#~ac?IfS{ήdN+Uov-v|ǫ "Y`Z``# M@F!1g Wx Hyj g(ưߛa}fyz8>qV#ucV >˄Qٟ~5bKe?0ӓz9b?@+8pfc6è'$,]#a cK-4Sl+cۛZ.GC:ZFȇm d?B|#t3}gs;FqJuDj39dԘ67#jc#u}456BYo,K ֞a'mxKQhU[Gv_2W|Y? jc# N88[cPH]6jX-VeQ؍Y-Z%ZVj"ZV gXVj?>|1W=Y-ծZ_&}3j g΁0eGpe1.K',Sc ːrwZŕi% Ɉk}}ѸgCplPҞL3Fe~?' YK9퐍vFN$Ja7;C~ wVB·|q?Yޏ ڀϿ iGD;9T$}g`f ?_D|5s{LA8*?L5+GE: |Pe@Lʸn娳@ckj?2(UQňc# !Cdj,㨷՚c8* QŨvB8*Q3hՏ#j'Ca\p-ZP;8ωP*!M f_sj+0|aZCmP'j6G ArjMSG飯yHs c@% KӦwu AK V/11u; p6'Ȃ/twGՇzv@eu:0!?0kWW86γYSq*/ ;|+]ӟ~RnC԰UJp0[>[+5vw#c"ǫom-|}r DPg R,&.vbOdyݸu5$m]]oV>PgK#]xΐLNOH6}UQhb;U%gyD{ߧil,ڈgΐ{0\nToX}{%c\=}i}$}.5o6r}kGm;:= Ip^X:!.ϼ_=8u}G6ʻmm7qo(Z_dLJ p"zR# O~e=rBH8?$#Z:sh}7Q[Oֱ_K=Ceб@|o'tHǾ) Ee?ۡf/mRW؟ 5;I_繈^cOiWzclϞF_#t u{ɎcNSCxGq:"u'K{IN_SINOB(_ $T|[TLBZjc8/"T6Sŗ䋽3E!;;ɧU6Gک8H.§b]Tk5OfzABnᣍ8BBxbWboE[㙊}}X5Kof}SU4TKx_}Pq!&T1[.$d^sm9udЗqLVU4Kŕ$$WWbNф˗}T@JjC}mI_m G^t=U>H'V10꯳ f: /='/(?-@muT^UO W﫴;ݸ~ v}7^®xݕ]?׏g9؂׭~gxNmP-.Eή_5z ^/f';Clx׹7ŮG# vI Lw/Ԩq,,g!i'F:$mbד:]51ϳYx]Ůgv=u^oa׏ #/dtv)^:]kގz7^ʮu~f;]BaN|fou ݅ k<Ʈ=D|:cct8d6G,|܋Eb/̎?-?aF=5V(B8cʂ1!2~_8no#xv y?q=[D}:۝oF`q${KB}=nN@KA`A}h A`_@g7v=Tٿ8;~ Kb߿v'Nj 7R.sO_2+gk`--LKa[_a{QWLKȌ_8:}њ>=Lc.k}bt޻GQ㳹@@p jՐ MHfM$BrQPd`]LSmi (Ih ޵(P<ٓ.5;s̹<9y3gyM֭ 5ҫ  ``?QaoTi.o]mئvO:zl"pLo0Np B~Tˡ"@K6qN1p͛󷫍1PEu6=uHwLyf9j/ˊ^ؘۼmZI6OKN;ت#Ѵ49 bn8YF9Id !ksa0H~3uK|5 JI( j E&iرނsF+p&U ^AKIl~?[%][I(@Wo9 G{qn rq{lzp>h14(͇d9Uq/IzYL9EG@fi5PQ둤?]޶RCCO?vC6Ѿ-HWd/^Aa)n߶J2o싨D*;-zx94ǹq>u;~ 7{{޵ {ZOn}3\;-c?g}$ :|Am-'_"UZ*I [Ь ڨ)mQԑѼ%PzP 62~Zov=q0͉ L ˭%0(>$5/OX{i]E* t2 0;iH];{ș}+4!S;WF^G/ZHekF~0_o]Nl~ۀbbl5,eJ!wYC}]x^١Xow_lxV KOR^Md[=ԥݱ\XECҦ9T>*8jaT3W+ yk9^eW"w8Փ)=&/\$^&/Z!yO*G:#~Im߸74TG,c˥y# cc#Ed_G?X {)oMy}/*z5aW/<>4yy{MIF7({eLZޟsN2WN{wg"n<2>;/ 8ڿU:+ Jۤ TLސnZ7aM\Lf9q;]/eAdy/nSrx{[l0Sv-#6=;0"gT%Ŭj%yi& VA"t_D3`j3XwG]{+9ZX`Ճ8̻nե2Xim/Ħɞ5L5܄"%XN2PX-tTAc|Io. %|x:*U}n_6^Fv}N<N\<3J( ١߻}1u[ )FQq,qE7p:;FܤjHQϘ33u!nP QOl"TZHkv"A=;Ɔ ,H;t"/ K-4#qo=t=A6WmQ7\ڡ'q|vP'aQkOh>dXV`D4X @6 ,P !V& ,mX=__ ;w拽ec%51ϺEk49ٌfVQfg:页*q \wִ@lF=q2`\)#3ܔI":oYRUNKL7v3 e4'9&Xe".I|FbmftSI}vu)F+CsL 9Z5GW!{ Cq:Hܻr4'8fzi';gz!4^+4oE+ؒ^c-rͷb0AkcH1!ޟh$tU6[Svm\źTx̉^]}}%Kh,1HzEH7&N|WC$177Isx2sowח2yC{eJh#`{M/YQWI MQ7bv'y0B#Ά9nZkAkzU(}+i$ V `ҲjS"ގdC=q_}O<nah'Az7`Kd_4Rq s @)ko<徼bQ2^N!^^ },ڟ/z=, l{zP5E+G0D( Q _i9\|Դ{S?׵ٟm-AgT.i(v(Cjcp $$ plώ$ʱrr9޿ ȷDoq,ڶ ]τ.fc²H\UwzQ5ǚ =yJpnN7HOUF=OB_Ix~~ZXuS@wNcf<,v|cǸwԦX\7z=G,~YmIb m)ۼԻ_[rN=; d_ %%O?E=Bg&GzRB/BI޴ k<ڟ-PAyOs$#kYM׽'YaQg(3T8tw<qp"H|6OE(rnNpn(ܤmM'|X*~8-&- {F){0{D)z1? o9g9sNU$$CխUNX",Bȡ+N/`xl;+^9GLmDldp~(_r-_`]U:PGzB\#ֹʅ<{\ ~ߘƵ..~ҡ73,4T轮1ns| lu0+z/`]S!?B&?O_g=tKӉw_~q%}nOdX5 O6G'9X-pR,`.-\^vNPÉnX@{0]Nߵ Ϛ]Dw3ѵj!ݺYMPnQhf\wB6ʛ]=_MM\Jk#73#}0Hndz#1Uf0k.1H|Y=^t?#=Q_cߣ̥O{&ϧ$ ?lA@i(\yv ›1<>F/$ wb8!ǁPX>7|ܤ ݄ld7®i梑N.5`D=XfX<>kk_q7}t[w.1Ko?5o|?z8Xi7j܏c[GsFU5=6EJ\s#^ÎJφ6M_-6Z_2.[!`39SqU}wYt}9DTFw Wj×4ƩIf cR!T>UϽ*N}&Lݜ{`_fs8 ùǛG-%?jI&}yfϹZBMY[i`J[l%\a;bR)5e<~Uqj"87пr|SAAgӍuUUd{J|yl/oޣ{1@^o[#p p걋ᗺ y{1H>VbQ<2k Pkۇg}6om4?QM ؅UBZ@b>\)pVW y5u~bԓ4uGZ<ݱzl\noף'dz{{G0h߇kF[++DVKۖд<(^ X!gkxw,Ci)ZM_ZIm+,QR egxqWoB7vЁ\eةHn4颹sMuisZF.(3jc| s3;b}zRKq|m H` u7ڥw$׏߄P5*L%B&s9_bϔu {E)pLz//G4657C{YzwSÚ1Sr_OKHCOzBc:${s%ţuOfBy 8:ۨvQsBug}[Nk DzG <};jc)yG,.7f95^{3ZD\+3Q7S)KzD; ;c|9>rxPlr/8W9$ZjP;iC`̤Uz| 94r_㔟}+~.mu2=1o+y?A]><%qS'#]C '?wC @v|!G!!oVw@Sל?ܩ&^ m&v2;3|U>@ H&v=nF˹FE~:z+p,9`^:*B6`x?|6ᏞZ[:rW0wЫW߾}E|jo |A^*uQw{K)JP^|::֏h.%Gg \__rT<4urܷj &q\W@01[D;THăP੽]p~ȷ{ N{1_8,/k#4鈢cM0Z+:ZgfxJ8} \`}MeeF 0-kC*wAi݁CuGyƃq _td]á*kD>@Ar{m;ZơUמA~dG}1ynFk Ёma7qC4z4Qou.#ߣdt6 >jg?dx"9+"dhxDMoBty4)1'{S/8nzvktVf{'ic#JWooxg1eCJ xGQXN1>m}Ya'֡6!]=4"o߹C&$@;+:._Pbi t.-O@9۟Mܫ4uMP{<{<6}:$NNQ T\hn7M_A {G|'dHwmOß6Wj!A!<8߆uw/Nꦷ1L90AK}$'u=\wv4Zm>ً[!ۏu=/^u_ZtCܟNvfN{>b2×0Q ]ft/(*2WQxl BKxipϩh(c|u D֩ڟ@ro+d1jTpnP2ozkmq?rxlHlc2.*.8_]\&;]PnNtI{ u4BPW߭Y曝7CYOj8mjy`t;2^qrG!2]gW;-\Kk+#+ق]oGFYn0H;<-yzl)b铡ONpRן‘'7M̞%(2M#8[6vA}k񜱒YZVۏJZI6}tT$)[o-R m@zJ)䳓=]pkܰػj+ߠ%U^RN,]ӥbjh(optb)v|N;tfope$]\{b˭SsЃwL:CyoD@/vy Bg~dq_EmaߘR Xޠ(5D?|gB*hws s|>1ZzPZQMcЙshzd |zpGz;wrr?02T7' nBCD=q FQa{FO _錦O+rD""Ax+!Wju\`Pd?}5f`.ԑ9)f7L{v^-K ޹'38 wl|,g^ ޣQTe_OIsa]+.[c?oBeLcTge2BIRT4oU7l ϊD2P >i2}~18Xy2 },%/jC+׎سg{{?#LAw(8j!c&'yk}I`w;MRƤ \\YD,f46z7?3"w${ec[s+6-Qyn/gڟ7>Bk}2ofӶTlLl[ 8`g-Pb3ygu ;Np}KaӦ/Sф;9vb'n0sʱ<ԡcV@;tN(8YEtMՔέϿ{̳0bغe@Vbs3TvA \c`G;$1'#$gF A/˳ ÞUlh(b(jB̂6hIGQ9 O??5\ɘKς&A@'HCf=ѱw9_CcF?9V 7^0 u$C dp#Ntb[S7{.mf)Cu[qnSF+]ĉ x=|6uTޠ{=E3~klV7"*.,w<ؿ_ggpɳ`hc Iߔ16)Ocb"=fQG9" hA̰ Uܕ*\"Tt}j(fetz:-蝆4]4f-s4{ht@̅AQ2^jhy,п dI CyS%S&4*$Zj.w.-N9&ݓxn44$mĩN򽮤|oURFi߾df=.T(}|a|di`7j=ᗝ44N?qTcCNQ__y>\x~G N(:-jNpo hgN#8ONPlqӎKz$!xv*07\v0NRo{Μ䝡bKf 赽1w =[l4(l9U|n;39]N˝n7 1,@v "$IݚHw֤ M|H5;&|x.mȳIpoN6~fjP@i:5g+F+pѬ 4 Ԧ@oH,@g 4VME)w8;vu# Bgc`|_N(zs__Ko{|+OȟYt!dfp,1RAۢq2I4`6 6;Qx8u޽cmbh7<2ZM\6z be4;<-q >q޹/Wfj\1G9mޚ=q~+]o@,;f{;j\TS9A }\o_%6ء6CUGĕqO E^^7r1وuW%Jp5QNq& 9|;{0cRiio8#XXB,VDh\/'w˛IRٞ}@uOPs޻Wk.KAInyEZ֝$w; φS_2b8=A_~QF,xת B+`{2Z BƅM+`?_5u[VjTRߝ!m;vk(Qb f%F%l)=(ק'酽ZїO"}O_ADvɷn3h5t#7 VѵwV j#~!Wm B |9[wݶ\ZK'%]؅u?4b4:#.{E{zW|.] mW4pՃ^}3-=u]3Vuo&*.:sw>&J\-:H]mzZQ/;ELk+4Q~}K8DQ~i(`_`{`طz[G&sJckԿ~>νԳq`.P\ }*ȖԖX ~}^6{覷YD/ ,nG+؇ qK'~苙HOj`W;ճC?C^9sKN7&wγ{C&h`Tr͋2$|˻ٽOPp Tp,iV5r>Mg Eh+݃ku}'i>Wҗo[iP{!֋j bj/5}ʳکs wQ.߿^ŋ'b7{8I,:9I]``+i3)  WC$7oi X".qه!Ǎp܂q=|QG5&@O|~Js&5Vp&uy\SkZzk.WMJ_gRK*ߛ4~I"Ωw>,.O"f^$v58.]q EѸNٲ/&OJ#Rg}_Ñۻx,뉦pE?@-۴^#p/9ݛ 7;#z kFoo)صK{{)e.8bwVoo, \GC&xAU\ 8^B`?cy= G {{_3/ph|!9& #ޏ ?;GqPQs9x<8s[^^夿kЮutnm|Ydoe:W 6%v8>.y3e-vK*5ŮʕeVWE}YqUk1Z^[o-mpחY+kJ:YnZ]V][&]UUmI̊*ky}quCjiq ke%.ƺ~i2kImU(+ Vx]UjuYK(rWY}(Vae NQF7\guԬ,,%!e5EY^xlUqͲHrYqUv2w5ܵ.)4O]B^WT"5ۚ2ec u%e|xٰuCL-/*:(rF|qgPơ<c/1υ8]WW[7b1snw( [ eZ.z./5X .*kie=0Rl$a!Pp9rE]*a&Ԑ~~ D_2W3 PR[=]3vyMXgqˎa1Y}t j2G fczh(,+uV֬ (,\֒}u d5RP[Y*CW[#2L=WWU;r$ׇeUKAԗj'r2"9it~q@*K@$\j1]pFcLOy {I\yV)`oD.~8?]z9?ӂ BY+'}T;̅lu`+2*7d[yb$lR1JL6<R?^U_I}Ѝ?ܢâ{e0c9eܑ1MR6uHg7O F"E?}(Of:kEBiDz ZA_HAOsה g#/"9-C(a2GG<׺Ol(z:s'ڗUOXHUxz]\J&<g޹ ZI6s#}SYvEnQEҒMs`э312'ի%]g^0Hf} MZZ_ i,G<?tm\EY[s-lW6t:DmRO?aIO*Ϙ^:.6l\iGNZUm1zf"02.*nc#18~_:Ci/1_.wH(??AI%ͯ))v/Κ+x#*~WiU172']ը*H_GnESfT7F׋1(ku ɬk@ g53X1y!~\p{ 9 }@^C\0v.?6bQbKVMM;}&~,yXnb/uQƮ,몮SƖPQh8R`bvܮYTE'p[%%e dANnUe)Ͱ1Y<"W<)< SѬѥc|23T:e^-8`5kL8PmUѥKt ! j j)GlHA68kkMFy}rhq$Yxr&LlsiCT֎) U#c9elnW:!l26 Js(Fin*Vט(C23 aVBFMf"&1qQj|gn؝`nN],ߘ~C- G9;<\zt2HVET|}} ʁG`٤=Nu1~#16WPVDx9g Rj譍 */ ??"ipUSk]krR@֖M1EJ2*S@SLRϢj U&JVI`x$Hj[Vt|}p%D +,PeX 1+NQ )a<K 򪏲 k&W +H@R8C'8L15gC\ n)& gh"O1 8Rd]c0դd%&sJR5}Paqcƭ@O՗TX":=ݲLvט_zVt={wAoHҤ;X5tsN(fy20EJ}Щ3s$|>>P/s L>߲_ ?wA>?O{?|=|>&?S|=g>>o7 ?1\=L"/S|=g>>o|~{|{|bN)|3| k|A>?=|>|=|>fN)|3l"7~}f9?T1ʉxdE ]EC "᱊ $G*#q ůE+E")heR=F+CΩ} W8"Ô%J/ Ց%6>BI_L_dE>/|TD%nux.ģF(R~"/P<}y|?QQCŽHeF?~ ۷^[/w޷}sXSQ_F1θ1;%/?)7Ond<"^(wHdzڙ]ϸ/gY/cf Ob|3/3qE5lmoSxz ȧ?v.b|Nٞd|܏3"]wJ%jjgJA^37Kx*V Og\s#|Yso`|2w w0~Hg2e[ [Bm^Ƹ&+6VV1"ϒp tu_-xv QCRbFx 9~LI;x| YOG8#G%;_pyR2~B‡2_Y yf8~9G㣙^%*ۘ~D?%)Fx_!;(%9b_,3L—1B«wIx;$Nƛ$-e %kN8ko`s3>y^88fߙGoeI6?(%0$Ɲ~b ܨ/ ?xm=Kx4}&-%aJx"ǣ,5ӷKW3_[>>O%^ _xx1>8b|70 1?Hz~=Yx~Q_NI_=hKzaK:~'oK>x.铽Kx;A $owJz^$3ƻ$Q^$7_(^ƷJ<7Kg\wK]‡)VInS zI3^'3,9H$ӽNJw6y%^xҭfzDb:v"o`f^gH?%_3NA[%GBwJ&Kx;$U5 /k%S%(%'f  SJ@_DG0b|`I8~#%'KI>" $|[%<'$|Hb?G㕌YO~~Jx$gJ=J1X2,;_-3~?A?$5ߔwHOKǖIv)%?wK}* H xD$EW$ZƇKg" d J8-7F/`|/xxna_q<Ӥx~O%6F)_&_/w3,3?0W?'?!1[0~1 ?8 >K$]%<xO/Hx?.C/ %0~L¯dU)cSpY8>*)IvƧK$|.$KxJx-JJwI:e|%0%TQ q?b x`Kɮ8k6H? 1~xcK¿cm&R1k gO~oJ2wIh)kc_Y f|pe8 <_k0^K3Rƕ"|ӯaʸ17LW!|ulNYW| !o~yMަx@xq񝏈L p+d@ױ_Ռkx<3cV.‡1dBd>njt[d|'+v?~݈I"wY5EnEΫsdȗ1}Ix/ϋ.ty>y.Q>U2}C|~7WE+ExNxjofzq+k~&ovd_0ie&NM{%MaCg2z"ƋO-FhbyDj-{?x0.Ovm|fQ.{<~٭`|=~Hb9~Q5}"lUfa=iĹWD~e'Ƈ;c+?x6k?RjoT,Gο4r.fzQίzD8+oJ>dt2g|N6la~#O0c%2+XvƻXN~D>K49[yYd1}*;(t_3^vg/Y~D.[%\?x kC;' r{v6RE_-⹎rk$99x8ToVWaǦ8߰1sQx+ӷ=6VR>g]"l؇0^v0*id~4k'9?Ծ,Wp{(;?ac8xoa~d>,"r>kWD3C'N "5g\}haI`psy[a+EG3>/RvI Sy~OLWFOYfEYx~=eY!wwcVc+jƺVWU:EKݕUc@6kj]=iµƏk*K+]%&aI2A]XRP]^9f)t:+,PnXȮNo/jIP^~imͣU[PX^)UJSOJMWFaej MTh}RwuE, mp \V|- "U4`󒜸:p%EMს`!/5薀+Quِ&4)'=o^ÍJ b胚?N$(l^ 2MAM̐1 eJ[^ ̀)p0Ϫ"b煼rha Q!\څ |,NpY\0kP k]F-**-l([2+"K Ab_PYZ!zH.-2[ZZ+6i Q:VM3n`i""#kKsۤyi\j µkE곶mr[j0vr Aƺ|PZcOBSHX/Ą]$V kxf0X5ͼ5}͹&k6u뛖,Cd"[5M%> }WE{^9EXӸ0IL0f 7E I6=.쳾TkZr%lhS} ec,,3Ґ 1 qaQ``O CQ#AmZ[ O;(~b521!Q̋@МbEUd׉eaupoMqß?6Iǟ 3 2g"M_" z"6F1==o4!M t7IDF(qD9NJu o-,-v([C ajC\X{:"U1VCFoaeeˊd1lӁR'.hPJ5uJBUV])+)PW.\2~<(H4e5+*KX_ qҔʆ┴ |ߺq >_^J'ܙ%b̵u~o('c8#"cx Hk e Օ5e!DZ3si`JZ!2CCV%!zWM xHcj p9 /:ʶB E!oO7Q8Y V'T6k &=\W8.@WBvؚQGDNQUC(%N-!7U_UVׁ 6:w1T{L0?lC;lCtn``XBo+aȫ #ŘW `!PWSYTM/OkWF' P !Th4 s!+gr8眨F^[^;9+M$*Z*(i ( DI$$hi fΜwEV:==o~{}SK2ƐU\3s$ 3)h1 W~i^h#\trJNMP b.5q0a9HysDLQO UX)I/@ =1MXKXpScR-U0\G;#íW h r^âGk@W E)ehQwЮd4OI~-ToBIsh`ΦK "ib(ۻF)?5},d%Ÿ.7(n:X[{Tp(QE(5APllAQ͔g% `=s=1OB#d#fe}yXl@7PxRS *$['WgM=WAfyKɻV? QԓZ܅Z]H^ʞÚ3Nm7J dH @`.4 9'Ѫ\p-.@lxoۯly{!h}t E0[z_bQיP0u0n`%{~T͊_ƪ_dZ؆Y0H g~tOӅ+KaJB&HOGs gM}(WdE 00"f|B~\=2zK! sHa?^ʃǼ 2sm)?k*c ܵn3q}פ1>'?oMεˣ馾Tڙ;<0~K)ֱAQ^HO1#~.%s)g< |n?5f RUb} Ԥ;?~g42bb=H>d5="G??I߳?~}omg%sŢ v6;^gc0O,~>Y=n\w++,~C/YocUh&r{j~VlDe]m; {;|żg]wA_rk}oPK bBcom/sun/jna/sunos-sparc/PK BUɴ*)com/sun/jna/sunos-sparc/libjnidispatch.so xTյ>~#&hG ETi+F*L0@HB4r{#ڑRm UH[Minr{GmZwgNI@{yY眽^{w9ֹd!Îta1܆Әb2r-?۪_0 *31badH,cL*Rpyr8H7|42ۊqẙ/˕.A\/8f^m8>%G]gpi`|^{p܇cpx~p,b+iQJeV>Dݿ:>{ڦ/E~{W%ӡlxUǰLSu~a[yrQDH;6Uu96Ձ~ >0$b#C矦'3Z%oƯO-Ҷ]Q9wcy_=ч}aoRiO͏cEkʱ%;b)$ r1SQDrr~ɏ- GiɈCZοgخ~3GWKx@G>F@z{ C̈>mF4 lg w yپiI)_3f'@,z#03 _Ӵ"I{6 [o_ˉȟվR?>)ߊy?i OE~@{Jem^~?NGɁwDذo9$C=ǎ1mbG&a8 cQ^5lREaK#'>]xi덑n=ߍg`G?u^ SN?#ƣ}\!QoXɏw1g^>#ۼ'ƴ\Ba_-Y^YRTWfVTTՖvWWlQuuYqE+ںFe;V}fQ#’+ WYThEY!ܷj圢ҊFuMs :pM7Ͻ0Q+댅 AEu](*HN_Ҫeʒڊȭ`qY-ԟ_XY \^R(cEYT[WVsKEQmmYm\.*WT-Me%uE).D~yҚԖR^T~*Q ʿy…e5󪠟/UfɢȘJDBVQUTgV+H Ml43 ڄ>n} (oO$ͫBZ?u5eEU%e9j>jr - xiQIyiYQ8swrk=pw~OߪˢZ&-\SSUc@ت7E[J0i;obS* ͌,ķkeKV( gU++Jf.{ޢeF٪,\4 t@4Mm%e K@i9֔U..*YdOd:u֊t: ci >TU̇%ÚYQ(~޲EUT *-^nU0,(6X|v/%ѪG2yQs/\bj`iPɋ*)2[jJjJڝNkD.R:ɡ&P.u(*TX C%ZժZvG:L .Ad&|{"Bi9@ސrPd+H"#Bk/JܿՆ1:DKhJW'jҫA=D9MbH_ya[x.$d JlY]yUBGz[U5-\lvv5HU9(~Vݵuy@ߗԥ7dcϠ ,XT\(`jM0jJ+jW/MGgUFu†BKKU4Y DMZܴi{7'#:vK~ό{zuk7VW-+Ur@_^ZVQ]jz²ʄ4[J._j@#RUuYeEXTUp඼-A+_^yT_ Jz@ Uؽ'[{~4J-y@˾yD1Cӥ+b4=t.NφMͲs46Nj+֕UFG***n,*]$#*$^Y]8/ KhHL Qϖ-ߕ s) Y^[sMII5p2J]'?=Ots~>)tSB@6M@1ͩ*v2v *4].K rzB6f\=Eh0Mx=]=ChqL=K9=BgI/(=G]J3 zI.ZK \hBhZhNЫ>^>Y&u,4e"4u"4lۅ/iBK-4uGhʹϤ (B3}Ь!I?ļGfY]BӦB^BoDŽv4o{8)4e;%t3BS?ĝ]# !!!FX#k^{)Z#/l"]#/b^1eWC'kL//e࿄e K5OƂ.z> w:tG@tt"'h\7 t̻E itִ }࿄<%>g࿔uRWR5R5Rւ25D0`x#/g993rbFB/oY#_HOk!d[+XZ+_vVVV]+_VZ+_hk /_/ =/N ܠe,W_F2MkeZZBt!tVBMBg%ԡ%ԡܶ_{_A9}B _AWP?+XwKh#KX y %Կ y P\6= mh u(_B_rY1/-YbQ<۵hkKO&_D\ .:u%YsALO賠lBSlЭͺw uruB#&\'O9C?f_'N?: SWS?? +aSd@ >URBC.Ih&^~Z/t _?MCӅ?rΔhkgIz=Bϗ4,k\z\=OBHY $=b^3b7o?no~KyMO'%ߌ^MOkYDj?^[Ͱz|ɾ^?࿙|F:o Z~l?[@kZ/< 8MF͔瘤8b}Ph)eg3_eg3zل^634S4W?+ 3lFЂMC3o_6>BW ,l 4_ 9e:lk>#f@mA &%y_Dn M>W7_ɺ_Iyd}gm67 k)Oh_ 7N$ o Qjji %Ɇnoo'h\Z ͼn߶uok7S6`࿉eLZ Q+6J QOFCGW>[e8QlЖ5ۚC.}~1xף=&x q.0N數q|cg 5I~?u-/`,ݤiF_5͌&@M/Iinħ5IhM/ "+pަI3Mz,?$}& ؗ5Y悚/`~I=6 بI& .M/n}Ԥ&OBӛt_?ФMw7>IM/@kf yySt8l? njUUtu*YW?s,b2g2 & o@Ӑ: I:yE_GaMk}puQߝƿOhmfkmN>N 46ojOn.-+ (cѤ4)3ҍdUm%g;M~,7J-٘< <>\e/~mk4?gx9µ\}mHŵTҾ界i.ct+Lk3)/ځ4" FWʘ\6E9{\n|DeAEnG퐥uc@]&o&Һ`dvi3F|:+;wz"'1?<1 uig IEf_z(,ǽ֯fݐt˸,!|InmS<2Yj'sc|W:i^Nԧua򤌴 13F[\>Cg\`ZS^!A pS{y~6v m"5V:F|AiGj+}UyI w_}y vb{>h\3'&w)dmNui^!ZҞ:`״`tJېľGPn{.qmnͨ[qVnE|L2wK~8XCՂ)xҠz~-/OGinjާB9=2A-C}`j9.NŐaz}z|TP``%י^zJe65޿z;ϯ{'?g<~*ϟvr<^+Gr5mcō gOvl{L5#~๾5I{6{۲9re2xhK1XFXkLKYXz˂&uﱑ8募oƈہ:O0uW$TuDÈ\,uSvbΌ0v1[GLj /gm• XXo [@,486KOlj֬ װ >zXj??I,m>Ky'af \b?% ]qzN 9bwvc|U9GmsuLjL1{xY[(]H~tv':G_C)s*ڃ[s KlEtc=ɊlGyw5x: }tU5 GإM;'w}妧FG|妍}+W)Mn7RVi>1zq^/zgxl]oἝզ/yzdisS"zgW3ͩk8nj+w>$F~od9ԋg{LM->=Mi>u^{fބ}P߮uuN#}C(-=tȼcHt`Y{L:C̪ߠ|؜cVsaPvڒJySPF%+oSf="0DGVs畣HsZ4175rm&һΛ Xuc8B rL4ؠͲ{L ڕ <7frrEB>)Wl[hX4[CQd*xゃEX簼~Nٮe|3Xvs-wi3d?tE  l?y/@.@?_Ѧ\.Wm^|O]N{SwtN4^J {.bnuR]}yBfjmڍR~<ʋa$dΧۃߤs7\,~9Y])g 61vm1O8H\UgX3RdNhc$lC1c8xIgNB6e}с::tV۠t>o~;3#^M>u~c|y`>c<-T<$.Q%ΎUumsc3=ʉ3Rwc{j_ڌթr{XgYYw ]0v6W</ΌIsp5g|ECɃfEDcQhIη|YwhVYGZkփ9>@|ȷ;H#[_{Zl-TjG_v37~|? NuLPcQW?NƉjZL96fqs">dkО 9Wu8*_kt>a޶d/B#>ahrZc's7!,5'ag|]1n|hT7JT_^L*OMʻ=gj5w5c_KlkaYv9lqݏA^>>F}:d9>Ծ!_dOzP@Il3/E~Gᱵ;<mve}Z˞?}ێ{T]ͳTNH ϡL\M9qMg\ߤ-9Lo3\&uaڨdVRNxF4s'/)wnKWts6>й{s}ƨ; (T;l읨:Ʀ;:F :ݏx*1* hڽ:҃߹ʶD}G';8!✇Y#ݒ "}DŽB*BPj(@6ݎo\fY7eUB]}:^EzclzݒvmM ϵr=1ۢ;dYx^3͹[/n[6!j9~CG[>=Y~gw"罳CAӸoT \ kH޻CU8J7ל3q,JB{>`,׽Zb'KyϠL藝d~Eypmdu{9αy̏t-TC񗔁|ռ÷~ Foj(:QӜIԣY撲+ٛ ~4(%sM^C/Ac^wU9Uts" O8Vכw;YNQT9T9(Wù?jJFHsJ(y΂!3Y#sU~H>51;2o>{ YwG'w`ʀ<)=g)ϝ~I8GNPi^h7~Gw{"1XCCt {+m#ܡV1Oysqz '{\h3-0uۢqm\ϡ}KAvl ve^1=8ߣOqң:ieK,]S6 OPK1J!_.=u7R?pRNs,6LWr=fk`<ֹG h[ݥX 1>u;g|,|NY)!cr 1^)x_Vy{՜o)_jNȬ=j|1z43~4j֋ڋI:y8845zL^\s ?pz{_2_#8cu4ZQn5x"hg՗δ70BUAp y.ae~={F ϘJЮ]jbD<85/-d^Q_Ų OoX|6mݠɚ82-unآVc60DJ91Q6GxŴ㩗F w߷;V-~bVs96Ww9/߹ v"Vl=Nm2&e!cl܇8A"sMP>7+a 5 |9.50S98lFݛ3M7mF+/a ö_ߛ˹^7ϻo~X$(~yܣ/ٟzZ8#ؙ݀>;y@v&g  CוΞ]2юv#A_ga?={#=|qdm=NQc;vuuÂ86Ƶ}?"bOwYu~Aczco9=f}W#?Vcݎ;A;~j)2:2c65_=<ܳ%O,Sơ'{}ӭ.g@_,〬m_g-#]8Ǜ ; gbGzm6o &fɾkXg;y _:Ȃd,q)1} [~Wp;QވFhxG=|'oVu^2ዑ/H'#^K9ۡeQ^m7#v{Ǵ9p< mΕ}e O䛡p LMLgHy7|s?G N M|>؄{{2"q了qմ+pNٓ/zOB޿ٓ$WYe|V DK`瓉{m tMO{n> ^\79 =bˣw>n"LP]3G1F &s'.Pn֭6HkGM|K+D>3 yG949_=ctkt!Cz^NяA;XH볨E=n‡X炱OY˒k/NG<#Nr^VWtB:C;̴':&z\VlOjD>a^|؃,R>(1zCGq:s)١&yԞI>W< 柪hYʀ(O:1D^C׷y k;x"Axm31F4pS{/8 Z]em~uz>"K=e|tx2oc{5ԳH4<|Q|Ok2]W⯮dwjd5= I.ejՊڑ'͢r/c'ӯMQ]*6۠(~]5ƫGDໞZŗDߛexFH?O0B=(T7ce7ngKiu~oG'~kNJGWHZư6?5^c+jߊel޷RxлSpq(z/ۃl(tcʳ80>} ιq[`gL;90P7c\\;c^q[~[p_vՉNOAnl}!5xkj kY1֠{>x:tpCCsY^A{˴ߞ/ׇuڽKR8[Βv۲KfIVK6t.v';sq-nvVR8gɾֹ`5̏clsGK7e7hZS۪Il =f:5;ʈ F}c˿nug[X)|׭ӭ~Y@=kW{$Ql x i ;=cY,R^OCw߭|@[ JyQ^5uE|v>cU(f_TҌu5% g(?b?)/|@f=wow+i X>u5Oǟ_-C缅zJ ^%Ƥ{'Bu%CXHs^X>~ l~cix m OHϼw\_n koB;:^UuW"u q<4jv(4(۳'A7K pLon/bm[܊?IcQ2/܎|7pL;Bҝs@\×@wj])wf ΨgP\HrV>oRD#vu^{Y9eaLݦ0(mʈߦVE)ϥkS+υ?ݦV:x1foC x׊.R ._t]/A t쉡/R/3/P8u>)|/ExߋNچށ'K1t"u<u\G/W,:@1]\B'_u\~ D5бz5zcit\}:14mXį_φP),1އXLj=Ƿgݫ۳.@{{gWMHh~b@8:2:G~)΍>}({ Qc5&pedymЧzG߰]~}\t:0sW/Nz/J=!k8zCWGߏ_L_ CIӱ]'oy;KZڋ<9< |Ms˻wc m~[Cve+>GȱQބ8 NI[&ǰelYE2l>ߖ۲vmJ-ǖkYFz`}N9}Q:{>T{ ?#ȶ4>(\վ/F^w}WwM8}0kww5O*>@g_? +sw2].51R}q~0]9i7ACj I#]Q#nmC t;&nG q?65nJ D-s^ZUc X7}ٱ뾬oc f{XgI/v|?7ۯ~?݁ a>OE=7hk_*?IJo^mP\F;<n/w_L^,uc\`2㇖%1_<S)⇪[:Ns|^߿b~n~^;/8 ojІkS>&q{WXK]wyNzG?CO_\SGO'R7Hs/շ%8{[vLGbl?^9?~w=SGU9/Tvv̍羪Ljz|9Nl 3fuqǡrvcDgӱR3"feJf!Fm~IiY;3=un7D]{hFݦ]!m*6:3f֝ds§ݨu uNYg{bSX'y?*{e3ȓWEAxg tygFy_KՂν>׮2y昸*MFd |l{om`hJ-chD9-~YʞEPvJE93u,v}r-y`biOEs4~N#mj ` h| A;e0_T`o |-|+o |[^uU8|r< /A9R/>^{>`9^y)Rf}:1Gub:$Nv|@ٿr]b on7ϫP1)'罿Oo L>EȣU-e:o\lC(8!NvT`Atq墷<u/(:V̶:a ŮA/iC>Umšc,fxqҖu܃q-;(75kG֬9l?? 2^֒5a5 eL#x%x̝9; 9G݂:\1q&  0&Uty?s[vI.d 1%e9q7F. kϞnzc.mXva6{s~u5$uȯNz'ꪾ٬ڟqIZ&~c;y쀯vrN1^p.5]K[gEoiW5KL=7cӭ)(Sɺ|f2>-yv =15#yLgo>etS gp=]һ;Efz3s_sw>R<]7tCރd/tI1|O|άx4||8O/3=~wtfBv~\>v%X7nw<,vHw޶-ZbDa/F\;ϴԱuDoQ=̰Y$iN]483Ͳ\@;HC/$GQ>JlȉK1q=[(31x}Y%mH߅C<҆e3)ę1vg oc0wz|_wo,4'yfy/*HUh~+].yQy&Dų>}䛏|30UQ40 tp&Gs{1 _}F_Gw#n9ϡ3d[Mcw]8}[<|wQr~ouNuxk*C]> >2=KT )s&izF %-zy~XauGZ&"<[K|O >K mkȝdic{+>#q;9C8C?)gw}BC?->n)"w?fq2;9D76sAC&8 QFUsj,*7;?8DMw:O8G"\4y/_sQ8+75/CF t;N`uȺP;-u91H]Yr8?ɍSA#p>"ҝZ<0MXj]Z{}GSs ..~f@]]H\%RZpE֥%A]߱erNkMX$wyY˜uY|wuiȺԥuog\D{Iˮ8&`.p]Ґow,s.>C:9>Iԫ#R/Z&=QN;oF֓ӫ@Sj=YSs2e71yȣ#1xr&j#6"?;3܋ 6tL=ZuS9"Wg"~Z 0qsh8sc"43s@ϰ8%{P@{{[m$7yOo۝6qJd>S߇bڂ=|g`X%Ebv iGL)[$,"cD%ߵa~AqQ5Ũߡo''<85 π!f9Nǐ(>_yĊ1Shz7"d#(c|,Qmp[N ǴbKcC] zN"Ok݌Η}yyK,AdaL5)WoUʡld65,463OXgXˣd#U{Чu|>D~Ssw]wAD%fa~o<*}AA ~[¯ep~1w?}z\l>8?gls~!;߇S"qw/wqEh~*^:??;kW:~\nBj @P׫.{5\%OYEgs4s=θcd:UIjiߔDzvp?5T-i9vAvE7}Ws!CzY~Ԓ5~/-\\TkA~|iM=̱]OBzJK~O=bZyy~:0v_2 Yf*SwZ3ީq({ eo],<+1i\b1?1phkEw{}ƨ&Op~O?/jC3tc5Jop|g[wվ]XeuL#;C'y :k9y =zsr^}Ȝ3I3φi^]Dت?]aȜ ;2C}s4<_γx1rg3; qjl;PN 睡35Z6e$i1Gŭ{-:@`9Ž ~oo/C*DRwNnJ+ս'Gh݊ö: ^;\껕c<ֱ+/pϞ|@wy}H݃|7n~;0q|1<~|ggT0N{ޯ퍤;)Ft{ɫ<~] \Sc:;&{;\,*:n[u-'%,KI3꥿B8o~3ȼ8ýO_tmN_{^gcaq{S۝}d >g,g%{ƒ/H>#$@-:4mK]|.iަ֪>iq4YҘ3hIj~87%pw{E,z>&64E=^2䷄Q4 } =)}3'Z_nçu~'RgP=@Uv:(H@?^YZ x;>lWm>&Fƙs |vg k??l]}yz>^p\Q-o@s]Jo~ۣ0݋~ e﷣ߋ<40N;gϪ=zqq.j;ɰЩcf~s|մe/S`9)ȊBʫV{3y- ˳^c!xr49QJRo;RQ^߹{M;s$^Ųp}7M\d7xRї6\m{/6g2 1(Iy6͌ot:>O/,M ڑ^K{ 8=z6h;fiook}1ǹ?pO}QO+R^>'}:S|F]#'NB|Y(9ߋpk'A=Ǔ)io=d +iAC/~ksz mdc|8:ڶc' `moG0{шwv\3#eq\uIӷӓ L{3_s5oJ|qY3oIsƟ.O(84*#!SR:nl't^'3֣OSwYP'Kl&z4.ֽs1GIץ7F6*=;F9R{}]ɩn~l쓟?~MJv~V>V]s"M[;W6azsa'/XȌBec0-!.}F*ԝk\3o}kAgw!gٞ|[ڦq!UO*/vHuY_FB2B8ڝ;;.I9!slosU36 q Gw(tWчp;B,{;e-S Bsmoܟ۩pw9$-=7D_ڳ'pv<{I=ø½ҭflOŋu_S)3}J-W)FE2.u99^OlԼׅx-W}c~&|<ֹ >XljӖYlofׁ`B#V~cZ\a*#u|su%1ý^gox퍆7[xw*q=ٻ<&y4SW[!MLcOz1 FzOz.ÇώEjuA9#g&{ S6RhzN>t+=Wn t|,zl"e_c:X^XuN[|ĈW̷m}h>-ߢ}ߢ}ĜS߶ewm^o"? ם ӷ;gp|ߓ1gtBN`%EcE-i؊钁I+ a:wl)ȇ.,P6UB>){},لf YGf᱔%ψ\[ɽ{]&~RZC L_G#}lnwm$yB UpfIڻ՞GsEP[{\|&I qbό|ṁPlbj p4 ߍYN3[Ã#7zymHG:#~zNB7 #U,Xv)Z\?xdx[[]ٯ-d*?7ciIn'Yؾy-ˌ=P^J!~y.9(Œc|Q~7>x(FRo|9>$&q1& rioCOutkl\kQ[B46[]KfO&_a炌{ɜ+2נl2~2Vp0#E>+ ~YGe6~ _򿭞3+o}6M6z/ꕖ1KS3NOpl|.Vbd3NU=E6j#oOp;<sI2@&!V6!@Ґ)hK/:3$6I3 Z%^O) =5Ez9=詊=?ȟ1bψzPۊL&~|cxY^kk.{fѶ^si_k> xt+>S셖^+ګBLoxv8bc_J12$/Hȁv^Cm~וZ˶Ku-սSs"̱˽|>(tI )Bkp~Qq&ߎؗq0Fy T$BMzat=vޏ-1^ڷvT uԞj)nuGބ|Bl~e'=G@cj^P"[=o(e>Wq?{|(siZ%ogзKз eY^㖮<m;(7)Yp}[{@7}Yz8Yd;uŠ>P drޓ=t>YnÕ֞=t?9SWdNًԎ>KՆGCe;墘b“,9uK,jz97{eX„>sDڛڞrvvx;@w"ibxJ{јDg hѸN6(U; Kaְ/+Զ}Xq+iߝs{cu 曞Mkey_h3:Ϯ甍Ƃ&^ΟGzC%3z$ų\v_K#X4Dj sKy! 8V`Yc5gšq?>p=/OyLJ]G'_B_S[46hmLQmEԆӪxdO=JoƳn+LX5<=p<Їdo#r9=j )ewYoΝ3[`h9Kd-/u!swsm9nvպ| 7?e[N-MܬǗ?k[=ޫF龾aȖoA޼9dgDlaoOgn|)U V&=.R2Gkyjx ;טNԩSlf?vPgs^LN?{j/yum<wJn`֟oS{!Hn``N@^ ؛6BqZvzC^-8=(ZLPav`\r  CΣ!׫da(da(P`U\U\U\U\U푕u(A1}3c:<:Q!q~_ɝU‡܌bA} Bǥ\qE㗆#a>\a̧5IC(Lk^m[ag iA W>r>_H<<|}''xGi&ͷn'|fпYttz,]v}q>ξkLOYE=4 ZM3}@%OBKߢxdc|rArHoI2_Ekwʖ> қsxڥd*CSh ZQƏ6gV6?Dekßl~Z˕:_XG 4 K<'Ea6ˠCJչa yŠ~~Ӊ8juOðTcKMIب'jԥttrrB=c9u|H͙ ˻ouۊd^Ok`.6:;祽鐻*Ts[NuQJcxR6|`>yG}<K!}-Ugr9z4--Lkv_(OrL;7ĸh[f|iTE{]F \"j1N56d]te=πϢpȿ:;AKSHwi^H]OΦI9 }jZw2ag>hvO3ʶb|QzӾ33yoǝenj ]ǜgzzMM>ڛb]%Osy_UxI(F`p (yը?94_n'g.G qP_)')#{9db58:xzhMk -N=I]% t]q֑}~k弅pL,Tg憊 3nή^PtSVWWCk9/?z⒤ەs@K~KQW(qsCB}=?"Q1mse.،Ҥ/¡^FzaOx$%}_\mQ؂\;'}g[]}5!^O u" d;9aP't}K ^Wh2䷐>`$/Z_o~sG<8uT:z Ycf7ϝx>Z1z]pyTGUHi}<7X88_^mF@>lzն[m s*p#9@T_OjbɱR0Z]d#-_Wp l S>zƥP~!k<6~E>la !f.ʕQICQ2PIMeBaDҾ ^ zs4~}j^qF{_XGS7zAsho%g;9D ~3,zF'L΃~ߜ=_gʝ@K\;: }gԚ<1+3|<=~s'~[s%oFʗ}t_M{. 5l* M8I/^R|t&I 9Ӈ|ɔ'#=MS73_җ2D-b g}XU%{K; d(F2V$=𹈃C1𻘇mӀ8M : B?z}?~I@@cGwNyF3{*pvΌʤ{8ʤg(c{?yz~a]υ==NVzSOSkm;P7ѮG]7zf/,]AwN qy!khy zȿq 4J>:y7A7='r΂:#Yg%+%ے$Ɋ~Qw͢h~6zNzrFzd43˟|?v9CWǗPhN6 nd7~7_|<ǔ1 `wZ E㻀mt}d?.Rz)՟ϾxD蔤I|Ӓ+_o,{dZ?=bS)|hh>oz`\cs]N'8x=&C_Fqv\#1:|ܱJЀba뗝,CL_r'.U[xaӻ` WR,l%Kƒ~|l.E[KzE%/Xotk+(F[7~55EV;6=ܖ! ymۅⷱy uBʏVϾ"!3bK}s\j0A7֩ 3aXsRc@jzoXߜ|>Z2X<e|20"8Hh-_l^*ha|}lW[s}<_ҚF^ͽA=znp3QaS~l7ba#oqƟRwψQ]Is3Kr<'O ş 5'H}{y^S~#q9xb4_o|_ɤvs&c$LVS$S:>;;h_x-W^˖p;VLkX}Oqȧ?yN|իi?AJn" j *N~6þ }8sJťsMyP0|=vlܢ`]rp&)W+׸,xXfWv^_rV9NE3 YgC}_tj?hPln҇3Opfg.sNgYGǘm^znCnqg>c{}vqndhIv=u 0nAUW( Ya:^agvv֌>pUQԓk[h~BzgyTFЈۀh zZ;(s/t6 qRGq vYǠ;Euͤ5:?}P\MJ@ bCZSg ZO'IktѸ]x?˄o<^k(Gj=ٛZO$6q^h^KD YHR,H1£jzCoxcoWnOYu.0=s^+'xz",D[Ř>;;SB1ݫK(K5w9*b]y݆۫bm>e|5>V>G)_O>q='?@Wʞi^$!lx Ig9^clSߔs^|`RqI/>.o_Pe+z΍ e@h.î{aZףΐZGSk"% mϦM(6$WaA¶-_ѦupQ7t, mi|鴉&TkYh`цBP{=@WCz8q swl;ZO{~Lϫ- A[\ݓs/?wgV4r9 T9_'O c {t6ٴ㊶+{ g4/Q>O|YxaG|M#Op}(9Z[t::7HSY*z3qݧyғdw/Ca{*"?|Ӄ's`oSxվٓ/fkM)N[(h+w,8ncPۘBv.N\Kd?i ^f[Acy"=Ty_iŚkKTue:LObX0k;NݟGrw5םm7a&ET _ _)~ߵh܏xz,OB!z W yhMu`Y'JvйA3ނ2[`jӪ@*(2 |+Uaxw:[4{CiC!wjfAimitbESDd^{c?+m#o]VMI6`Z󫟢^[Ÿ~MMwf  Y2)7w#A|+{ڷ;~</힞$qp˳xSh5Wud.u5Eu1 Fm6TMNYΠE{Vt6m{YTT7 ~l疏Sgh`J(5;GGB/L!ؘ9kvQhux&㯫~y.uuNލ!8|XV9zQx@y=^ڗ"{ 9,|+#zMJރ^r$')5̧wL_:&"<ð]qm9"g7*Z/P]A}@:Z}|z] 7% fh݅gL‰ ?F ?s߶;_} GPu;Ly*;E,*O4ȆϾ_sv.ҏӫ;(^ ٻ템 tn4ʫnd."ntG=gΠw[r1ڬvvw)fwELﻄ9NAZ8qESzdЧElxjMirZhޗo>ȣwLo\[Outkz^UܨXi!ݡ>mraT1gJq؅񣿻rYwS Pg/j2k=^uU SXڤd:GWIs;Mᢶ΋y8YƩ}ɷ6d25//$7{8yq^ 5t=KObھv*'.q,0 +ø N^SD0VOk'ǑGy༾d' h]^M0>]Oͦ3ݯ~7gJ]FP7pкʻ'7|si䳑2C' ɡAw2yi*OƣN9v.ggRIυ9rWf{9_C}f{99_?4|! ^Es1/>*㫦'غm{Ue3I!쿤׹1B+o1F6IꞪ+HB%Ugy+ѽ$PnA&왞t횎yg iE/ Ż!t ?{ U @_;#*+,Ik]>UZȁ9s3z\4_5vd=F`:[o {wd?'HҧS79RsM>![$'5D߃W"0¤s0'P2L}^,:#6ic;>(ΆZeL@]f$ͥ&"D=J87KjX@tؿשMϷQzOz|aД#3EC~N}znchs5Ү&&QoWLppPZ92xco_FM/0ؠ:W7mmusk7 ͟׀$ʩ]Lk٤~/ i $)Υc@~MPNH{Cz*4Nj~r?fGh0t/Ѵօ]O zYлM.w񝰉[ M<&ZxDIߝ|sƚ{J=EJTɢ؟Z,:{vUxzwzW!Mi$}5+m̋_nn 4DGgC#b6FZ-XԬ-"fbG{HGGz ֖V!R-k6[Z#fռƋ ptkWF[نlokwS#m0P]Pݡ|Ϻĺ#m gMeᆆH<+ #FD~~OGK"c0V04LcLx{!b6:4:DD̼07jFg_{%Q=&4 ,f\"VHo̶p#gͪvs^+qEh=֑4kt630ᗛU{k9/n4; %SF4[M13KJ1j&HB?Vn6&@XgkےD-;ZZZlu@  ,fs5²v.~#Ԑj174f%a&UUc,XHo*x~Z`꜓TNɬHCGTy#вkmc葨5ܱ%)9{/lGIN 8[cq U;Q څ&fi [j6u`6Q-fx|AxSKqMK.aS_FR.RM$R?Z -e5m(ZթWoU_|z8ȩI:.n0- iG*Zk 2m{'&aY]迦XWJ|xNԵo _]ah)"<38lLK.k4m&vbLyI$Uhr̛8wr* gV*y4q&ϣwYD=v՟ĞYTm$satӅ =+U梑{VC КqSUWnƧ̃L6Ц-Ư,b4Rn()>>'ڦFvnd|Ė%dxTb"Wvt}=ZɎ4.Y}B[s5dkCU,eṌd:,{>E_;+͛+|q|ljj Zskz֟mȯ_L_7pժD*~[E ZSk,wcsK+n F -0}دa&xi雺G31}2Zrڲ=8{믾eSH_BF)3;äg0?SAvբ<-͓O8EoQQ3[ \gom,z/QFK\lS8|Kkj.]eHݲں˖Dj6D7.Mϫyus5/_⊾za3 v bQ+ iP^[ObF8N?-.fFӱtҊ7hKl.Z:G""l%ʍ}ʯlwd+*Rcggy 4v,U50* Ldy+H\felhxӭ!YꯈZ#}wdIK܌ڜos/b_<1Ba/mX /U,k VrQ66fSRSVfKѓU+2 ѿƔ梷Y[YNыKWYNӋ [/SyR=DvTAE3s.t; z}U<@q+[SWT#/&|+u?_WVTx]3I3nt Ӓ1Gq{tN;<5| e5|/+&_B_t_t=/pz=_H?fteEINC N{Y>g8-wqe?cH?$pw5| ҧN;H^?HotҝEc^t+7#F8^ }/!N?98݋->&NA>k9= >u~k8+te }H/t%K9M$5&$pI+9M?$qI9MIK9M_i"Ns?$.NcnYNCG4/i9 !!#oXq477{?V3./k9,y,-̒:Aރ՟slCj홠Y,Yf:l}9&yo0^_OGs3OTn|G?p䤚Ryo1fyMs/ü^Q$üv0+ Cvy=~üVQ\_,xh׮Im_&j[?(&/ 8Xki<ʟ7_x| {mtsC?=p h/e8R[-g ;9*nM N Xy@ZC"#Kz<_'e waBiMyBvIE{>yZEMkmMkB==_'MkmMO,%o zb~.XeF<.=X? X B=ϴ6w zcJsw>Ϙ,)g>mhBo}o}oۅ~߶ ߶ }ɇMK0mLみI𷱐oc] п|Ob,'y_؟|ēQ>}?*QT|?*|?*G% Ѻ!QEp>`;ŀ1W;D .,_e ܀$!g?[/зȫЇ`ylo7`A=:~|)ீ^>7K|w .}[n!w |B Xɻ|:A#6 O-݂_ [XCR[pa܎9j4? D"i:FF?Gd>#Pֆry|ZK?)z{p1zX̟Ca4=|1_+zplPy$Yd&a^,Wl' yIw)W&n0ɇפK@@~pWv?pפ ? |B/M ,*ऀ>\eÓsP_̯'|ɐE&_|<\&VM(7GϡXg7ev|dzM?,&E6\Fw񥆱~_ע>&&B%~*8MƷ"] X?ſ,S }e 0'ޕFÕ?(_$@yY#}:$`CŸy_ QXxОX/)GX)Yl|Mn/Y%(/7J> \{Q^?|%?DyaOK+7 8kN^BJɟ_zIBBJj\0E~alu|ݿ{?XƒOܟ|=!0?HL#"^N3$~ N_6_{ܟ|ax6hd?M=>#C~X?W?,+ETJ;a!ϥ<ȘcC?G/n  KH % qAoq!]k8 ^p#χ}K>0~O-c߇},M p&S>p_X pS.ȟ LjoICO"~`8fj|NP=?a8fmd#3I> ~S0N+F~Ey¦ǔ>e_X/+W߂l(DN_%h䥊*`"?)`o ᄀ1?$!O3(H_ go>j? 󉍪?·w1oM  k[~++ نJg}zq/g)Qaʿ=|mz*#SW#?5tN).4oMW7mm _;8ӌ:0#dXSZG4~(s(2C.?g] W~i ?򲨏3o0v?Q'~r>|_>&^?'al#Z(J/?#3$&>0:t[ 7Z[Gj8S|hHhFg LH-#dRrX@gBG>H!?3>τ>LG{a(+g ֣,~B:[~fMXE2;Yp#tA^#լES^OMeGG۟%O6nW5\_P⏋߃v{!EI-x?XqhV'xaد4!v?ixvWͯs {u6=gly {n 9ٟ3S2e>_3zΧlIyd+ѼB21_XKڇX_o9 ?oɐ9[#KT|:u< Xs2}9dasFQ79M}p>Ψ]81oEa<)+N~.(3f ߐ-)WwXgTi{hW=C}wSh=dU?;>T@vx!k{-Kܕj=otxi."Ȩ?"~oh}p9C5ʼ 6}+ol2zmTi>բX[dQpk`KgKk"eh,~Y=Ѱnы4J44ez 긾1~pubK<^QN?#EΦ&ك`c,o6&b`sR;vMH0 *$M6׬޸)T]s]pՆo&kW#}Bho$">e_zFW޸>8`{^׬Y_>_WZeN-W_~ů5X_ck,~ů,Xk,5beƲXcY,Xk,KRj,KRj,KƲDcY,Xh,K4%eƲDcY,Xj,K5ReƲTcY,Xj,4e2eƲLcY,Xi,4eKRi,uKRi,uKR,Xk,5reƲ\cY,X/*.SWSGJֽ.T¾O)(o7ҺnW;z0, Hk֭_ uꩺO+] k] ] ] +^ k^ ^ ^ +_42rVkRjFJc-X|>Joe#+ 4#8[aXe}>VZ[2D [[_ʮ1>˲YͲmqe,cX|A>V!됯2:cVX}>(-,x:2ˌU`P+Krl|l|l|l|l|l|K-ϭ]aePjQי˯p#lA}lB}lC}0Ji1"l|l|l|l|l|l|l|l|-7f1vd~L?k5ϚgfY3f;^#K?륟_kIFzg^Y/~K?uk5g YO9qgqˏ[+|9kg5g Y~@?4OIT~V!?U* )?n aSW76vD,NYi4~V?+ƿ qx$4 +хÿĊg{ \]%M?OK @Vj7wuhDb&HyHpq"{tuPVU7վޘThIIXmI҈W= 9n%VH.c6RSG9RkMZC9Z P`13PߩV [NR~+$PqYbGV~~=ʠLU622i}Ѯ-vuI͊Aj~H--&ͣxdaq!~؊NK=kq `< nI~L&Chkh Ʃ_6K.A_-j`[#Oihfjж#T-NiO[Qd{!@H Ů.FaRT1"NٮJ4[%2ĝq*(7VD>ȾJ.#J4JanF!EȬb-hO:I0HMF%ؐ+*pﹱ LJru0uh";]1 跉jXu-hV`x֎0A4vR2v&s:>oEֶh[=kX{"li법n> 6Äv#-hAzN^5n1G#D+4M֖ͥTQ/H?zV=FvdI&G HG?@dOhlħSkcR뇼@U>+CG"Z7d7nzæ 3AE'"Bi;[DGcg;UFI(D[0  [̮;q9S cʚ{W]A_dj #ڧB1+N&O4]$FE_hLpWOy*X-%k&^W?YF6 V^SӆkkVk%n&B=i tkW`VYxh% B!O8Ba[ 5|e?t?9&3Zk$,S(oEO.,fkիKS;ґɘж5Fa/KJ@/GMXnֿnp*= /7EQniji¬YƷ_)0]rڵ7]l.^lVa}Y<\8X{ٖpR< vR5% wDt07%ZZ}Geo wM(ZW\aW[Fuh :̓9oV]ni-Pf5 W&jT[ !ꭱ ugC n u-'[P߰+9 }o,=8}wi,%\Zug!-r'LC u9ߖ>E&up:"J u[}J?Us>2ڥw/. }O.}VI\MzEÒe׋r{wG[/=>5uG):9wuֽY}˹gz-o(g*.SrлJ֌r4 !?0 6q܃H=($rS㢜"O(Wrݱ,r;.uMՇF^fLZ\F_NrÖZNM]o,9H#5܋jRt|,PK bBcom/sun/jna/sunos-sparcv9/PK 1BJK=P0+com/sun/jna/sunos-sparcv9/libjnidispatch.so xT?| 7 h{(T׈xBՠH& PD@1pxajV i)Sj*og3|s89k^{~{/gK^v]hGgc}Ty!Z>2s=vU|9L.~'}yĒϝ̧"̞gO{ߓ=}[%ˣ3osw.?We ~f} -F~6o}}kU]_||BGg)'M;Ѽv(g~e-}Ce}h <:I?0oqZjf{0(q&"v]~,h), PK:SM-Gx&'X~?sB[:ȿ]o56>u)}]tMe|.]*kEh_)]etͦ9tnk]Y̧Z@Bo5tIǖ ]wk?^麏K]|_AJ*Vӵa,yӵtmk+]4|5IbQ)'Ag?I,2S_/y>Esosz`_)F]Td{=F9ǥ|b3!z 9H_XbMè^'SN}kg~`Ӊ#U6^J/c>'>GG}erbj)#d@AK҇Rzqo9OyEڑmMK2W[`"γ U%L'~|uhS/?*v;*1\_#Zv$A{[ϭ_]{@߁"?s<4>]ԎϤoC;1UorlIo~ˤR?;J"{(U&WG\Ϭ,zeJˤx(" pz1뻩{Y5)1PZze=?R%j_Y:K^r/=fZ4YT-zz&o;E_/3؂ɄANJ?.ܜ+,sD/NEDMs[)$;9>+n wR|^NfYپt/=ɼ{I?#R?ɕ{<)?}_Op e)yppεU|I_(E$yߐx#s'DEҟ~zYp$F )zu}}{]fiQ"퍽L'ޫOJB8I_#"{h~;DCR]h@mvI-,?O*.^c\b&" %~Ng>>?WS_qկEzal_>v*zuYp(M }Xʕ}?k/d?TSz2E yc[W-,ߴi/FNMK˸e{g[~9H~[,v|]Ԏ7SsK8߁qK=/tiC976szDjo4U,q˭~݄&Z7Z[YRgNb/9";ʾ^'O9:KkSi[v~ AWͱ/ yQk*>19MEoIm(mqNwoGJ?@Ձ>!#)2I^Ttvmw,XR2wEIR k.*)/7V9s,䎹M8R\Q2mԪڕKKʫn+Yx/-t%]ɕ%g]yvт;ݱB0^PQ]R>wΑY\A,,B8C[*]1 +]RuGټ *T/:FVͿE[hM_P|QlQyU %?rQQڜYPり[.\TEUbƿΒ*9JibH G P,U`AՂdy F߿ڑn(CMVWkJ5#%$zCc>)̵֔/uڔLk/事L$C gW,6 Vq[yZIPK L/{߽d\u{OOJ4qłs8JoMOW\Yב5d.hmcQB!p>w(fGTqz4..uZ\b¤bd)[/W lf"ZU3kSUikaurR| ]!%p]]a_ϮXTZ^ <_l*{],BnsTf9d䴵9sU\$2]%]fJku ˔=J @e@t> Sn`zi/]dܲn@ZɕKbBŠٷ%Tv٦.!uif%z̤k1Ia32@I J*ڎ/KE>t:ӑeu ;H)k\rvW ר#d_qqeE Wjq La܅hGTq$<;'~GC'we 4}M]v\=Ky wƒ X)]VEΩ:%Oj1$.e!|*ݬ -T;NZ"7t흷U8E!9P+JK_rɌk.SUݛfoIO [(:(?T.]TcѠBܢJ$t \HQJAU-Sdғ P%?X sjvnNJ/so{=~J^t8ӗ((Ӄ\קӣ!7]K2)~!^BdzBfBogz<vdzB| ]3~&]nuK0=7C>|r>T1 } ?d<^טn(ӋzzP+:jx{|Bg<<T+tn+q#xH3Wc?N0]]:ӣ ]ʯ.nG+J( e:VW_kBg=W_z[?ȸ]?vY+t?Znn kٿW+>й=W_b:3=LW_'Nʯ^ʯNYR)RB1]Ri_Uο^O ]QO< "WHS:?!p!]C j0]O'!?tϐ{+^W@ݿRVnw!%ieRVn`:=*TRJz&%='JoG~2CQ%[\*7tJ&:9! +woP_rnP_zz]me g?A F:G +AR΀Bg?AHyԃ$Bgߠ?gAK)o+o':  +o*o`'_mI4+oИ!t f=^Y}7+/tC3X l(t3 ؿ5+_&' 1n/c5+2YBY?7+oR8l2]C^ r*H$/3쟛/cmt_Q2n//cQO?ݨAFq}7*Hg.?}  2=?oTs٨AnG ]E^Uol )?tnT ycTG?R  +or&F{(WqΗ7)qIc c&]37)_vߤ9M >7 I /1]rBgIr%-oP*yU+_%RA+_zU!+_%qU'_)Q&+ &+LWRKJ_mVۗ\f+XͺBg97+_z۬GJfCLWqYJdm(tnwUsY˥ WH: WHy0˛C ǧ`nVqYRo4tk8>٬ԧ5RD:ݒSCk]l:p+_z,]5˿EfP^ `mQqE ]WqEjn[t]lQqEјRLWqEieE-另ӣ:#q+[::3[dJ$冕? ߚ`z>t]I QpBre %=p:+_ +_"5< +_z+_ +_~8T貾 H)_ +It=DV/*5+1>t5zS[ʯW8/% G!Ig?Q`(-w"'Q%" ." [CI`IOǿ%g$DJzORI!Qo$V#A%GVtk/ÈnQQBי?*{D >9Ή?RQ.wO0]?ߪUkBg9**U?aF׶*rGY[2=g?U [_ت?*r[ULW3]ol )e _q%]kQ^'J$+MRBnoU9~۪ݷi =t%8t%8t%_3]Wӕ| 0]ױ޶ ]ʩd6%yDPN):6%y$t%y-N?oO۔g?k=n )t۔ #۔oԃ2]ඨB2]?#ߦm*tz.񏬯g_'ylw?B/}PLgǸO wq?wn(َO(/dI;t~6ӕvw(do1w(xb'йOD1]i>P:QR3#A|ŏ9F?_< t:A|ΜJxST&㫝Bg;T(ӕxC٩zo8m:to},; N5ЙrN5~vgHsS7dlC!6t?҆w!:wu?!Y6t?ˆm萿چ!6tȿ;xߊP鐿؆Kl{)q!fh?ݯ$rLmDS׼Wvu멬QW[/<7r׿i19t9ߠ#]|/iY/Nh(ާ4CDˬaDSIޫy8K%n@G|=7G>B(P~UiR,NA?BW62XV= [P_e+'_1[b@=§ !Z=rʧ u#Qj/]sڐ5Ͻo7~>eDwSRQUiیcֿdh{ -Oy4|*yOtQvp}x?Ŵ-U6M@/*drSzW%BN<44A)r")4 ~<3!OOϣu<# b/.9_?]IX@bLY4Lg oc %o(=6#אi'qM 4wB^n Q~4~ɝH}r%G&Iy,KKҿNsed5ZiU}R{ ,VЮV Bw*z_ީwWv# 6DybVD>m9͢(sf)e6<œi¿lEϔ,B~Eڔl{s8/}%t5NK}S} _~}]_]M}(*og5{Q#kcPxV;PDr"CPyg0;腟 WVZ]nGG]^_6nG6V$RDfK),{yd-Vn-겿$ro=o`]:6p7ji]\zGc .jT*s-Q} kpSNBM zlu82>9x֌m~cVezZ"m * I(oE&Ӵ/8=a~덱~4z + i/ЁoFq!aaZJOp٢a^:\@u.LWWyWi`ڮ?Ot:)#l}U`4<#7֯#t6O?Ę<04q`lp.=#\[qWΌWfU?\zUzWS?sUQ WS̀+W:)oX18D1cSOs뮍uMXN8 c! >ƹ~Z€/5cqRtcy$?\ itCT~t#+A<տ]QFrSk-pdqmƟcZU:cY*_B#Ȣiv:b4ߙNiS!lh^!A dW_q1dUR9AE༉1Et{'{o^RcIG%>Mh+#%c&! ˫#g-s-0O^w7zuF)zסu+'#@0Jusuf_ >V=H>8Nw0V_=_~q|OugxUO=#u= 'z|U?W}ztB3UX/v=|`CѼ'F\dNqQ@mVgI 3Ͽ6=哯Z>y-( h_^ujw$CCȀ ɐKб9xLJ)o>\xM+2*X/\7rYvoMex~b#x  )ޗԇ&ѷ9a/m_*#6Qub:~eT@0§0OzҁQ þY&ָq?չPl$u=u݇u10H/Mk?^\(:A/n]66ԧ?|BM'`k1'&FG+ָSc.szT`ϧe"~iuUj0zN_씞1~zo'Y };#ca(`n!2귺zh$W{&oy}^$zS{w6:Mo^bY n a 9"f=T{O9 "@g5$zbE/kg >3\"n½{K"}$񺡽^ߌnMy9@Tϓ)!>`֧{:1Nk?aa,П끘O*/jŋ@GXNcҩpwٿ0Ҽp8]M^sf~/3䏕lO2K%L B8]|:ѦM`xWcfyb_(. f+aɗ &JAsiC^詃pAi߿$_%b% =EY.EJa(d8ݵghs,mm$Pҁnish^;~` 6M`xD%|0zwS諾~*~+́9q;qw!NcܦhHҟ'9'?$|E=! ~ zO2L:1ɤHۻQxZ;]p5Ic /mN)Ӛz/OX^Lb{5Zqbo9l``[)to(R8 ¼fum ٭َϦvjW>8Y&_ha,mח޾sAʈ-,7`d[BXj_"1DN-(\1?e@|W*pIAqFB#O(6} ֫X㦱GR_v;vçxZ=Ctw"ɣ|Q\#sׯ3wD,<|1D.%ewN9K[ z҉z~Cc@QO:>t*'4jwcHESSSLMF/i _`]SQ/_W{bkY8\1v zx-<{IO҉!i?Oֻ~FunX%Y1z>V }t''Y!׻Fܷo |YؽQUf^[5 S8}Ii弩ew,(η+Ɠ5ՊL&bɓk÷݆深';߄ uVINQ|:md #%7]|7I|h][)]=𤋮D(>Qf}!Y4co9ޛ9)SƑqd6 {.m,SƜPZ1|2=Em=dHϪiGRb,;"CgLM#cY[):O6XMv~*݃1"-x>D9c ?Sr\O7ѽ螃ga~`Τ;ZG~v'ީ?`KuTg/`!bl)Wk2\K{i ^٩ȿS`䬐{zoNWϕg1̹Ue͹KUV  {0eAmgڂ6kyZ঄W1Sk:HHV$%7bCo2k> -ڞYz}3v؍"NuCOVxYFA;!b=#~#S\zhyp1G:똇'ݜGO vûL1v94{0BN(1.XIa @C_T<ܾ8k{ܽH+ 爯S8 ׁuFlwc߈WKo[tUА]Cy!=+&%d>)ೋ?E>$^u]c V- m¥Xe5«kύz{cPju:]h)mׄrRVF8CH^w{G +JE\F߶Cٖy]mC%t؋~e}͍zIn$NVf{g] !a s(v[Ie,lތ83i>(B5~ʐK3_w_qK>_8:ONYwϑZ9pMkOrbu!Kے#׈,@1J}c)WJ?2=H2X˚skDIFy>sϺDz&1Xw"SZj-QsxLK/9Si<՘g؂is>˩Ia_5>I[t{_CEW 70Fg;Ҋ̹v/.%?ZqLͰ_S|_Sz^1ɴl)}g#\fC zE_p/#U^ q޷ɶCzM/žכ'I=Mm/|gں \L]b唅lkyV' mö5gO_ߢs?J0ưm{Js:ESA%Ļv6==a+tA6|bÆݦlDuOa46g"vVtb!^ _:fĝڸܯ 쏈ia9];SxǺ=ڮuu|<˻]Gw~r_"X/L}hXJؼy{i/Ҩ s`('g{=~^j(ighE  %OF4j09C,on'̳X$u-> {B&rZ[]om_nDTX]&-4}EyW(Mnq~q`ŁJ` \OHWۻ ۩/e #;~PvmR{B$7#}?60Лt,Zf`.S(vǍQOW ڸO܄[oҋŻs.Ez#}v>B;GV0LX7rKosjNo@6JZ_us߽f4Қru )+v;+_Mnk>}G<.Hk(Ŝ} չ#--ƻ^[y Nh'RK:; yo 8?t%K5!/zطi=#`poIlv'?=YoYG#O>F| yS{]&ܖ.yL}Kw]! e^>ٛ=`96==4Y+3?g;wNM{y7Gh֧^ K2d0ɞh #DoMp3tqv/1)P3۫ &6*iK+'POire?ݤ6d <" x b}Y͐'q"|P{ǹTzSr(K~\Y()9&Ru%%?&@||'t[*Muvcӹ <߈ޮ^I]Ћ)z$ޯrVWxf*h;ߧ~}'/Bw CPEfn_f.Nf!F;I^b\S, MKǠ|;(86uJC]8ay u-p=C|ӂ}e'SpAmv1Qu#,wO4՝8%^?bxdqa3];.;ᆏZZ3cv O*k?K>Px5ԣ[|l߆9{Cg =IIAQwvcwW} "ZʳvY,]#}աJ7:zvqYsZb٭>WD$ 7c=p q(顃pʫnj}k>ٱƫ}h`/+R#Th-}@O^8w^:Ix/_L(/;ʗ^PWO_^߳,y?N禧;^/Wy˸*00XX8y}>!dqft=lC^z qd>='h5Hމ4{1i>׿,ƫC  S, 9 ~ {Sw0w#{f?sOQ:׸1*geLn~9HOIaJCZ=l=_# z&Зv}kXyoښ_ːI{@_LJXppŴO3TS8;jdgT<]"ޫ-[eżLBi[(yOe;8sOvHb 6Aʏ8}gI[NX_6i%ݟ<P_uaN-Kڑ/4C'4{+ĻۋHy#-kokcXh)Z̴^sn w}5{Ʃ{x158q)ѫ8U] $(%T֟~3G̵ CNc |y(?iqyO!Dq0ed5 fSa˷$|Yt'*&<d\@mj|00kGVX<8:H;h54|ysW : qzi\{m!vw99FGIdʵ_˚nֲֲ&~`519Eݡv;}K6S>`ngL_6>6(mp jml`_D?NzA795\y<(|O9o&28w={l5\|kG`A琞-z>kw=s8yQAϷgsVϠi6z!G|}=O#1qOs֚_M=sGS5ľmC]6$?Y*|'Þːⱉ|羿0Ļ$3x>=?J[[,`akwz)Q&n_s*:Uޱi3gv}i3) m&Lԣk3LG+?ĕ=ul0& `״A׷y %Cpy8ϳY?k9r(A2Wȧ=Nz^AϷk8z>zƦt_ݖX"bv%~-=mts)sz+H|z<1Ouu_zc:shs^OlEsc R=p<6<p75fGD[HAvkk ~6<qW='x=JcEUd=f:4;C97LюaR;;wfgiWӕŲT7܏}39qOgGn$8 `x,y>dB;.zM7x SX'GvN+ISyO!O촀{i] 㑖y.#3|·8֡:[t2[sG,tXLy'֟:?=n;~S%u_ x݈EO-hd'2hϏFsфuфl4aV٭kluzm(d(ִQagE֥ly$eȣ)EKQѕ_FWe%6664Yl4FF4fT[l,6*u^7g|]wYu^^Ϡql]uWy :oǨs?v,:'^_TГN6ʰ_`_Уfd#azl#]|!`>]\6?N!d#v|vu;nǿõߢn)ݎnK)M-Fo؂{4;yUE1;n|:YE<^Xcuc?]#a\?J 6*_=$h_`~={ -n i[Bߡ;3Q+N21w6wLY.FYnQwJԓ&nK}{:U@el6C/Yʍ7٪зM=p/yrL|>ޅˤyƟM{}+Gg솁*\a~ w'i!ݦrkYd"N1yN7yn(?cnL Ox܇&!~k]Ls^WB7ȋS}L9!6KYgmUoz.Li9eQ./&ށ)gMTo"tY_ h<6惼 v[x-0c!sT (ne;"n)}*:}*OXu#ۦ4[RK m^˚$^ʗ8IؗiY~gͳ̬GA)79RhoWnE.4mbym8'l ̀=66WZWG;ԏQmto#}VHMVyŦЗဏ;(/B-Gh[*~_V~ȇpЁՔ¯=;;wZs@HX}{^ŷYZĿ"khm+.,ew.e-XdmqE(ω 1x=O%;(85u ܀<寣m#ΛGY}.Cxz~;t(:/ƹ4W=觧;[F-[\ Q;HQ̖n@ 8h'%ƥzD#Ks9gU^iE^ '79ڛd՘Ghi?K w4 D)f8훣M |W?hy(@z͋ 6̠с /ׄX'5Oo _wԄW޾&ܺ&57ޭ ~MԄGSYՄkք&N&xx&+W5Ӥ>NϠ*9fv5:s=5oQȋRYVaw~Wo>.}7&}K3_7)w̴PJ<_տ_Rci5k4~Gגp+;n b{uI=-u]9/Ʀ8~%T8~ڴ8#'܊3$W겍r|F >궤\~'ާs)o4i*ƕ +R3c3|M,ҒQ;(sLyt|w2->mxg:'yP||/Dwq闃/@/R9)~eε6ƸxM^;x _y4YwNO?ь 9.k^y^U]OCJJK\NsO_l9&V}lc\e ޯ&;*SwSYK?pyD;E iY{Js+ķT^َOf_r%>BwlC\v*?&qe#Ey:z tL d{s xAbҏ~_Ĭ<A_q\}E߁߸z ClmYo}S E<~+x4Oc7ə~sH'o)8ÇdY"α8"K,:"Y,lŸ́te=ߑM6|WbC6|=u~Ȇ1!"6|oX|mj `moZyq_%u&>)'0?O@gS/j/x?pA!W`b* _JQ_z.A=q~'kR>oR_e qɲ#CFi%^l,_ߩ{k`sXieu&}fyd'{H/ٽISUz \"܆ [dh 2^q&LQ ߴP,rqEybALJP֡`8Ȁ"2|/Ub~lC 'e(fUH/O"tM|.5.|o_Jm^vїp~z_Xs όF#PxQ/ŌB r)bch7_FxyإSw -r+ru,Uqr F /Ĉx5*2۹cLQ\Va+̫]ULMH' 'ApvSoV sNד}2&߱v52b3b# .;%6 mdi=ړȑ@DØ{^ݟM,/9o:A[0^<׼zm{*| sks<5P|{`K6>fMcܽc-PNS!m飛RM1?'tEZ` OlxҴϑۇki;u=s7; k ́;]d] k!/XukVu wí6BGS)|pwܟ,^E%+*YGE+Skܓ^ߴIDWxU;iL}IWb/u~,3716#ҳ,x|"~ k޷r!Nؘ1D|u^I7bHL'}:ѽ^OwVӺ7y[nZdo*QVJgs=/~ZRbs7.M-j"aj3ߤ636Qz$DIdbw2$0[6|[&h' Z;lsz b¾ x+8ƀ!o^fL_//iu!L'G;Ѓ$<r/֋O FnY>@MG]اOWr/Yu݀QND~;U_r(M51}O{%.9d?1>I<0%B*'~@ ɷ+#]S?)(cwT9ު)F7G#>@\O}ߡh#X:߭Fmמ^3R7H7zݚ/f0N=\ѶoF>S?Ҙ19ק|ԏ?Gq~pߩ~n=":*$|Ԧ"}!Nx\ֆҡ呶^#uu2{(FG?gt=5o{ϬP}>+|,{"tOei0 Fr m2pb/~#4Bgdu6LҠ=i駄|$J}VUҽ8>+P~Uڲ'qz⳦L%+#n{j[XQLMt;~֟f{9sk鹢??~6;?&\2/ޯ4b2m.ϻ}=v?qӶ܀q?J\qjo\ft ?aa+l}-T ֵ <-fHqj`.K8zo!?bs/L(Q ъ/[z}=ˤ_>}\uT} ="O?:C8cAQVGO@j)|oTvT h1yIS~]nCQ/ ·~Q7zNPy{ ˈPCE}̐Ez>.Cϧ݄j|?aާuC|ﷂT8Cyc3!q_wpw.' tfڤX}@oE]/!/Lxn*^A]3CsYՐ1{Z׮+>_.0 '#-/9cm A\cN#:TMu0q+4ԡ7sd)&AA bogteAF(|`n~ob fs_1g [=ﲝzbK!/}_^lW1[E5=sm(+7M;uݟ/ +FFh$/[[|H7$[eݷ!Kt˻C^sϢQ|9~,-Yٿ&✒o2yoש]U4]1CI|0&ReS'l$ <|ĝbonWwGE̠n>Ļ|9$maSi fM~y̯o =>Č>?J]x1M/qB:AwGWc,CtktAҽҽݐ-s3v%wON;];?{W=r|!ޯ﷝Tu<5Yqm95P ?I2.t<ۇ턾۠4 S9!@E_飶0Z$_@<g;Lʲϲvs9{tsXk~\~ syuvAIzs0^IzU'}αﮓއv}&{ża$[\ ۬Z*yoj#vB ]*Cކl1~A x{|{n}҂j/ߕˉ6|>'aۢ/w7zmc_5 ޱ*K}ǏzZfƴQ wgz 5eY_<:gpc1.E]y,1 EZDymmJZ06RLio;Eb{Uڏ9k&3n>?^{k?9x~^vF6qNu4ajnjSDkUvnW}҂GIp .Er/rx|đEàߔacL⍙ig8 l>u=Uc,̾p]7b< cz C9Z%0~O)EnCpZS338Ŝ K\+a6w6G!bjFƱ Xo=k|sς{q1=(1-8H\>Oľv]E2'Ư\c6#~*erYA@``fo&-Q[xE<؆} ow`GHCXxi )~w[)vbXq ~`@hߚ_2?mΞ)Jױρ?/='>(,c(dZAX1O=`X ogm>I*n` _ h>3g*h~!|w9E>zwOm;n;r. s[38 s )Ulpy'{wWM^8ڀaL8m<<|Lq #m&9y.QꖴifiSw|Uy2[4w@䤩7"r6]aoxP3ǔCFˑeQJ_ksoZx i6plp\sb{l֧5{ߩH ~!rk{}RõȚ{97jr>Ngk1pFeM8Laqkj<|L 1w~%mlN{Anm.8.5J&K߭8<U'Xp}ighv[R y7ޚGhݝ;ޗz<;Tv>{m@?b3: 5@m?xO矶*)r\pMc-۾4fCi:GS_ac%5)ʙy𛠿mco>8wb9Wc`~u SJ@@ep\m^3[?;#;blGTC[;z@Tw Nu9f5gZ"/?x^b0k)k{j={:mVo_(L-}/v>#G9aO)|Y WRh,l@ipb-&x 4}A@nVmӰ|h:]h;]^.h8:-h*iL*7-҃0 꿉}#`k_D< 9 ? tFPX_O.ʼc{e%„1.O<{5=l͟KsߛS5\uݿy%7:+6|RZ<~15MFߓGY/:fqۼd#ܮ5eQt'ูhN[Q1+hEW݉s_l _˝~p*M߆le;K{(frYF:?uY;"F|87F<)S-]YP?UuϞƟ{Jܣ]SLBavX^t~#ա~뚠vVRB#eV@V%1шI;av=?~sv} ׻N/1ԇk3rӤLwx6P0,g)g.ðeҡLg4Fdk #{pCwA2L5{@qYqHe=#MӶ#|}(J ϛYZ<L sB/VR? &h '+OB_5s󨙁GbM},Wp48NHn t DbUN.`0?wCLhk,U'o]@Q;MۨW2q;T%]0茒ep>|'\wv=K^3vZ]l]+A_fWxA6`@4V) .i Su?SXZ)C~~y=;݉m-)>0{̵5"nY Fatf[X}1~2Ƭ>/d= 2{G蟱.M̆wi\| 7 v@Un>t1|Tm-[YU|q"M~J~.[~f[6@;'`>2  \Ʌo6bya(^Y1rAM@?PY5<aY{* 6<"?ogBVL@c &ߊc|Wf!#'2ުi@#e3hG:;a6987 -}P0fPpiP 䶷TsOj9/kgˌ:Ѯ(V!,c9<pbDFG&]d}`dubX^jaa43L |Y1o}of腹u%ZYa6.c`;ZH7GLMu#;| mu``[{` ԇ1?pp <x|R &uC=xW5fwϤ>?ۃJΧ2ٞ v k. G?Vpeڞǜln.a]U߁ֳ }w}ϱ`fnw@/jƾ6 m#9'ك*}&:~8 V?ǥC'xpauSA*Əm w&(8*~@:7*~@Yn:C_n/3?."Gf<#?y=9*cCn6Epq{,"B6/+vg\m_R|G2<:pċ uЂDZ@2 dkyLhSئ=SK~!QQo? #O?a?~a<: 0bv HuE@> q ]Of̉ fJ.1X4Mі1gn]ĄT`.*߈va7`< =FăDv䄘nQ,{'ES-Pq} {:T7 pC19nUs@1޳*#LJ[ܳ-Ӏ6wiڜзtv('].B똌>r/d(þ󐠧DzrFz#) rAe=Z|\amcq 08[8̣;L/4t=5ա~ ڴh_wPjj }WRBz}OJh|YhYkمpn >Z?[+c裝 nt'937ԌpxNhU2:s˜G0G=Ӭd`\Ÿ r7 lds),&4uzDGwFzC9r=rm@_n܉.+<y/}ŢGtO)CMmDzp8]~t!=@vM;[yUx+ r7WFw&å \{5=&w}Uß߸`r櫹5%|;} @`,cѿ8(s*0NP#La e ? i(#=jaKtzWaȦ4\??yziG:ؚ&s o @}8Wjz0kyq^"NOsI^7Dxe:6k%A'a߃k zڕ oqMq(u<|cyVq9>8{4C|6y' 9 ak|k.=}nB]Ẇ]c]<1WyWb{PظB^U#zit`f⼄$/ h^!LKescJ71^\Hy<2ƥ.'DsO܂UO2댣r_?K9ZHF_ _ ?sACk_F@ @y\ĞU< y۰n7A>7_5mt^zk\#8,,6{o gl\#E ·/}A1b,繫Bj.7Y ɢk!o}Mge/>MIC턭ǁ;H;96U6q/F~FN03ttDsbMvdKy/u8۞/!l鸺C1Ho?gd 'dLi۟?NĶ gR^7x$]=Z>Ǻ!_kZ>\F[sx= {[v |u13S9ʜéS>RFI9Ϧ?X}Ic|/;j_^[ˉaqd`+([_ `99y@+&o, s ݬgw|Zs)n[f ݍ|jc{:A}a%hiQp6~@IG!850y>>0kg@߆_)b-p\u0vؾ5v5{÷c8?!.u5*r=xq_ OØgA޸?VQ7#(oh#̡] \ݥNERě~;b+Xיk`^80< c>!dc8Vo!9/ȒdӋ}lf7=tfP0􏱨XXuU hȋ*Ի5Jw^d~[CWoS>gW!A,.}a ]Ew0jFGtX3f<6w̗C9_0`ЯGZőj|p4xtI%+H y5G{_5o!^oWR *S^r8; mw(olwq?adJ׵B_`{ƵhaR&+mϣVY|L8G 1d}2=NO}"kE3X-!aۢ??П񦒺,c{qb-Ehދckfk`xό+1=U l#47ϪivYQ& i|X<5Q\#9ݨ[3ÜEK_utB&ҤM{K~|]!܉c 9u6ӱ@TN} us 'Acwn>tgfs?NFzeDkPw޵b ,&?W|~fЈh۞keױ| ᙃc0ޱkކiVŽT䍩wa~ ] {"m@_~1\l{'Qs)w!OU;dd, f4?UջCx1ۂhm>A.&_oDO2ߟvq\:I.XCy u8b002[s\c5a.sHq]{nb-l}o11jGy>p6\J_(9.s(U[ǡ{`4;q1YV̈́2)9eg3|x Yڧ:yJo>Yϧ qߓ(L⟰/l3`1}gO^Wv߱-{_=x&,7mzkX7? ̎>x/Sek|ڱT-U9޸( ~ɡ9?nC.<_mH]oi<:y\K3Al+ du"=!ծ/{ߍϝ;9mXB毤Y6G2 )?ᙀt< ~ټFIgf]Y =⟰Ϣ!~(6<;;C A[XswY&K[q?e'_F\1kd.> C3(v=׃oF>=w=ʋW:pxH\{'"ﳐgS3t?r4՟?O [^t=Sq{N; 8{0Wmcd0O"?|Gy]ݨ/9M&}+ޔ!ݛe.MB>zybG;ׁ38, @;oG,g?w!OX0>\11>=΋3Z`gmY,#[Qj[\o0mp(.PrVVc=baivV8( ߩ`F4Ȟi{\GP>OGW7 z@8/]g߽xc/o93)ؽ2AM{,/-߉uo|G>v:sɮ?ws<ʾd,>+bw:ʐ=ۄsdoBXh*?t7wds^ޏl? w(8\ҵ #g|^-oüM{E+oj(t=ZY4`r]R:jYIrK5/cI=?p&P wv+Y\AN0G+1=}gA>:y7}q(_"_'z vfw_7=x@(pdFށFF`ֽ@>3{ ^ʥ^CE:Ź<̯a.R ޱ|&dow6<߂sر׾:64Ǧϸv\Ş1 |gSHßr%(wxJ@+yGZw4M})0_ћS!c<3g(y@MA|)kIG}Z>e }a4 hss0 pa0NסLg9fv):pO{f>=~3{w%ƐQ6wAtA{ C= g;cLK~2Z{+`29> /t˱w}]+>V婮k yFwţ4yy|>onTJw}}]cVml4b+īU=UZќ_nwR_Ms^qF[XwuFmGsur o$ @sWVz~/w7^|7_+o.,Ej mS4֥7JIBJȑ\|׫5s!_VޭͩQ7>Q0~oTͩ[W* ͍w6wlHnVXvDͦDG\_0ywurQM:&&DoW']: L,> -ܴ^d9qt^ +k@-0w5(6e_#< E+QzwDfk~`Өո};5N^2X@UD> *ˇG`=> L\V!znpy5c (Wy5K| аcEķBW@:uG1Q[YA PGތܢ(E13"M;^ŏ{aӾ޻4J7]}@#[D4w=&o&kf-;2?Jл@JQjHmr^ Oi,J`b8PrdW@],="OFQR$ׇh:J)qy{Uٯ[ G!}txK҇bw']F#Ue.qII%~IfI]tnJZГ%UVex/$Q+Ve&a>"̫:]ٸF7u, i~uŨU֢}3kQ))\ukyG=UmB_\޶"~$çSLѤ5nNwk/"wnvBҰH܃+Vܭ: `2Z60û7IM47L?[l6j`mA,Q%:?Fq8=%%p..]x%ťeK/,(-,Z"MbGټ6|̸׮`Zz 3 (:X'+[Of1;o7>;䞗 xEHpVy~8A/ԏg4z8pV=|.ABz􁃿fnqE+X5B_RXwUqXn.~de}Ў1 U}bϖ0M_,з I8j8ӷiX ÉpU\y2 G('*/Rȟy#QV׋@9P(`B &*n*@mOW$f[wl]>u$֥C$2Ajv]O7TUyvG?;Ư_kdQ[LD)t -x;oot72^xhi~qvt["$ZZy %[@_mTG5$ubUQnnn[!KP;?:3_#6ĉ<wp{}In>4܈dڀ}uQ Yu]MS H'KrƊoB\r}}+|Y?2gq&ϐ- qϜ ) Q*VMQXɿ}e6l!la(Z>?}G~>}G,I>CP$}PZ0߼^aԳƩ!SWƟBf_!W_}zoDW34ů읪ZzNTo{t̾+ȕ_}~I;WHpz6lR8l,b?SM[ j1pqXg78~>.>Lkbl8Q{!.nMuE1p~6DmsxM3)uk5ﳿg x' x,*%SN=U;Oz~wn& xK/7Kj\QU5MQZB(e7_uC: ZM@M p"gڮ## w8sCE/×FhM'M}Ac)'v8:e~w}0"p_G~ 6"2'n('pWUN封Y߯6 pbG:i"}Z 'p>( A8sS=I'zk8At\%pJwS^&vjw'ex3I^d8أo:?E'yH.81 \W#Ro7ѷaR&pS8)# NeK$N^MB$v\#p'E:cKt>SI !p$#X*'#"ZKϤ|9uTA(T2|mj7}K 8$'(D(_}N0#}NG(azBQ:.Dt^ VghN}K#'?IO{I[L?i 𛶑ȁFG4'qI!pbi^ty#Ao#p$pi${ė49bGiO8^"/>̏>GFE ioFY&>KR@y^ˡ7_MN3t2_K~vD?H^a&EL譙gW~W~fɸ~'qLs?g3T>D? OCs?^L3YO;H'p }6yA%p*s$?8k3Y7;" Ic'vGDoIt'?G$O~W:ɓ 8ɓ#*t[7K'yJ'ɓP:I|ʍ(=$O~Q:ɓɏJ?@Lj#pbw_IJ'~܈ vN?@r:d^NCKӂ{#rG#iz$ouDΖ iY@^X>F-+ eW<~U!ZH}bGt譅r' N"봇~)_'C_Y>!׷tD?-$8DBa'AZ]XHqص(=$8;NB]0@?9H}2;D3C#yɓ3o!tNu*$z&稠~') P8ُ>E2~GӺ/~i&t |:$Ť>Y\Ef'tfu>R ?AAO#+_I5v}$vL[zZ&W&N9n3I\MFf#<00MI92^1.)ic/Y']8> B&p2?"FD0D"LXN'pb/}Ď&4~'.?DS =d`)}\;ͯl} d9~Ư' c?&HMR DO&ޠoED$ߘ!|M$?$~ob3CN HgO|"/}/d5Nm"Ϛf8uU+wA_If=N~KNEVb}d~M?N]ei>@uu~O9{Dr%8Eku wsJdVy'98Z89x!'H=Z='zHDkr#J'9C"Qz.:J!絎sqd  _og `_<9' ?4Q? 4UdzH]htJڝ 2t<7x2%_@dzTUHX0n@ Ĥ?xIUsҾ@S|Y"r{#z<)3yEq뱢~+y>h:>5Qޓ}7;>\ +C!~U\Ha8Wx%_GWm٣Oy:ך9U?A~p՟G:)ן2E*{rUCiw১l?"j#5@=tq̄xu*j 'OG_#]^}K|WI W~_/JP^O8"_$U*.sdzP7rw$Ӝ~GÄN3?[/T#C? q9ut>_yt_{2A9㟧k>dE:^3wyKGt6I9>佥oAw&^Ӯ6{o/ WA~Vɋsmt<"/pڧ>'8MJ:N">O%d7>;I8>S擐'/oCoxO'|^_d?@?i_+6|~xw^tsH POyQ /2C7~(>?M 9gIާߘßy?@O#Ya|1ҟX?,"U:|TC?ħsƷI^!y9xSG͌w ,:_ż2 H)2_P*B0N'C1KgB0^:WrzXe+*N~΁{OK? /xta7t?y9Nr>I⑴/ ~]ɟ rP'ʸAEQOxn}f?<.7&MDOmf%g $M#;fy:%o:Q-?.|PB4B'Y)^~~\!`Dž&ׯ '$ϧ]R0^!Ag/KP8᷏MϽ~ /]i$=g #%A0fk-,|=У ~4)\gU)}B%A?K?0uox¸#ֻ{f'6Y yI^K?3;A4ῗqNPnUg"kZog~]_> j> FWٲd>~J_?aRY/ʊ*w]SV_?\] c1N묩p;^n͋WaU {j x ӹ|ۜnt݊kn[askorQ?T xmJSq ]<0P?la h;|Ex~_K),E_e 9;bXcs,vα9;DzcY,Xp, 8eDzcYr,K)Rʱr,K)Rʱr,Be!DzcYȱ,Xr, 9Be!DzcYı,Xq,8E"eDzcYı,Xs,9be1DzcY̱,Xs,eKRƱq,eKRƱq,eKDzcY±,Xp,K8%e DzcYk+._Ge7y#U4I1m}5D:t!&7mbnۛC ʾmN]av%J+W"lD_ɒ( ȅ؄JQ l l lll*m,m X$@B^ڄڄڄڄڄ٥#'b^&܈Mp$6Il•"~MM6ۤsM7߄   Iw) 3 a*-HwXY@ ɿXKE؄C d.&|M8%"E//لc dn& *n<9Dd+Am…ڄe6;}U&M8$H6l'لS d["Øc" ˴ ˴ ˴ ˴ ˴ ˴ ˴ ˴K_Pg avavaR&javavavavavava2 |2G'ø2H.C6|`0]]]]L 7v:xynSK|9R"|څ؅؅؅؅؅Gp"ƾHFcFcم]؇}̘>avƐ r|2$ĴtyKӺ۷XuFy;.eom*;ݭ'SſNY h^!A#[w:'1^% 9̉|U)9'G_"d)?~Js3r2[_`ذ7 ]O"^PW*AcӺwnv=dIt*9bs.Qptc!U:dHBqiF!3HZ*SN'-i Y,oVYWi 8`O18
# should be 3 * 3 * 10 = 90 # will infinite loop if the clones are removed my $cont := nqp::continuationreset(nqp::null(), { 3 * nqp::continuationcontrol(0, nqp::null(), -> $k { $k }); }); my $val := nqp::continuationinvoke(nqp::continuationclone($cont), { nqp::continuationinvoke(nqp::continuationclone($cont), { 10 }) }); =back By way of example, here is Scheme's call/cc implemented using NQP delimited continuations: # for proper R5RS semantics, run this once wrapping your main function sub run_main($f) { nqp::continuationreset(nqp::null(), $f); } sub callcc($f) { # first get the current continuation nqp::continuationcontrol(1, nqp::null(), -> $dcont { my $scheme_cont := -> $val { # when the scheme continuation is invoked, we need to *replace* # the current continuation with this one nqp::continuationcontrol(1, nqp::null(), -> $c { nqp::continuationinvoke($dcont, { $val }) }); }; nqp::continuationinvoke($dcont, { $f($scheme_cont) }); }); } And here is something resembling gather/take: my $SENTINEL := []; sub yield($value) { nqp::continuationcontrol(0, nqp::null(), -> $dcont { [$value, { nqp::continuationinvoke($dcont, {0}) }] }); } sub start_iter($body) { my $state := { $body(); yield($SENTINEL) }; -> { my $pkt := nqp::continuationreset(nqp::null(), $state); $state := $pkt[1]; $pkt[0]; } } Complete examples may be found in t/jvm/01-continuations.t in the source distribution. =head1 Conjectures =head2 Lazy recursive reinstate optimization Consider the following (Perl 6): my $N = 10000; sub flatten($x) { multi go(@k) { go($_) for @k } multi go($k) { take $k } gather go($x); } my $list = [^$N]; $list = [$list] for ^$N; say flatten($list).perl; This takes O(N^2) time on the current implementation. Why? Because each time take is invoked, we are N frames deep, so each take does O(N) work, and there are N calls to take. We can improve this to O(N) by doing the continuation operations B. That is, when reinstating a continuation only reinstate the top frame(s) that will be executed, and skip the work of reinstating the non-top frames only to resave them later. The design of this is a bit handwavey at the moment. =head2 Multiple callers There are two sensible ways to define the caller of a call frame. Either the frame which caused this frame to exist (henceforth, the static caller) or the frame which caused this frame to be active (henceforth, the dynamic caller). They are the same for most frames, but differ in the case of the top frame of a gather. The static caller of such a frame is the frame containing C; the dynamic caller is the frame corresponding to C. We need both: contextuals use the static caller (TimToady has said so quite explicitly), while exceptions and control flow ought to use the dynamic caller (people expect lazy exceptions to show up and backtrace at the point where the list is used). So we might need to B. Niecza does precisely this, and I think parrot is doing something similar. =head2 Saner cloning C is bad because it exposes details of what the JVM implementation can do without warning and what requires warnings. It would be better to expliclty declare exactly what you intend to do with the continuation as a bit flag passed to control and/or invoke, and let the op set figure out itself when cloning is needed. Flags could include "I don't intend to call this at all" (control used as an escape operator), "I intend to call this exactly once" (coroutines), "I may use this more than once, but only on one thread", "I want to use this on several threads". nqp-2015.11/docs/jvminterop-goals.md000644 000765 000024 00000014763 12613727026 021225 0ustar00williamcoledastaff000000 000000 =head1 Introduction This infodump describes aspects of the most desirable interface for Java interop functionality in Rakudo, based on experience with CLR interop functionality in Niecza. No aspects of implementation I are discussed. =head1 Unsolved questions Mainly, "should wrapper types be invariant or covariant?". A wrapper of type C is not necessarily substitutable for a wrapper of type C, because the subclass may have added methods which cause an ambiguous overload (in the CLR we have the additional issue of shadowing, but that doesn't apply here). Invariant wrappers (all wrappers are assignable to C and C) are the safer option, but covariant wrappers (reflecting the Java type DAG) would be more convenient in some cases. I did covariant wrappers for Niecza and was not quite happy with the associated traps; I'd like to see if invariant wrappers can be made to work. =head1 General object features We'd probably like fields to be reflected as rw methods, returning C objects that handle get and set. (This works well in Niecza). Methods, including C aka C<< >>, should be bundled by short name and then turned into overload-resolving sets. This can be done either by creating a composite method that implements Java overload rules, or by building a Perl 6 multi-dispatcher that wraps a set of methods. Using a multi-dispatcher would probably require covariant wrappers. Java objects should be made to implement core Perl 6 roles whenever reasonable. Cs and single-method interfaces (including the new single-method interfaces being added to Java 1.8 for use with lambdas) should function as Callable with a C<< postcircumfix:<( )> >>. Arrays and objects assignable to C should present a C interface. Objects assignable to C should present an C interface. C things should probably be iterable, somehow. It may additionally be useful to provide semantics for C and C, but that's I overkill. It shall be possible to throw and catch Java exceptions as Perl 6 exceptions. (The current implementation is limited such that you can throw OR catch Java exceptions - a thrown Java exception is treated as a direct control operator to the innermost callback, and cannot be caught by Perl 6 exception handlers until it propagates to a callout point.) Since a C is effectively the root of a class namespace, it shall be possible to obtain a PsuedoStash-like object for a class loader which can be used to fetch type objects representing the classes defined in it. Each such PsuedoStash holds a class loader and a package prefix; fetches attempt a lookup and return a concatenated stash, along with either a type or some kind of C thing. =head1 Marshal-in (boxing) rules Most objects should box as Cs. In order for the interface to be most generally usable, it must be possible to get the exact same Java object out of the box - boxings that lose object identity are probably unacceptable. Primitive types have no such restriction and should be translated into Perl 6 types freely. C already translates all primitives that correspond to 6model types in the obvious way, additionally C is returned as a one-character C and C is mapped to an C of 0 or 1. The former is probably correct for Perl 6, but the latter should be overridden to be C or C. It is acceptable to map reference types in cases where the Perl 6 object wraps the corresponding type, so it can be recovered identically from the box. This is the case for C / C and C / C, and of course C. =head1 Marshal-out (unboxing / coercion) rules In all cases it is acceptable to pass a JavaObject wrapper to code which expects a reference type. The type of the wrapper is ignored, except possibly for overload resolution. Primitive types and naturally-boxed types, including C, are marshaled out in the obvious way. It may be useful to provide special handling for functions which take an argument of type C or C; note that C specially allows passing C in such cases with an interpretation of "current". Alternatively mechanisms can be provided in the library for retrieving the current context objects. Wherever an Iterator or Iterable is needed, it shall be acceptable to pass an iterable Perl 6 object; a wrapper Iterable shall be constructed which iterates the underlying Perl 6 object. Wherever a List is needed, it shall be acceptable to pass any Perl 6 object that does Positional. Note that implementing the List interface faithfully requires C and C in addition to C, while C and C are not used. Wherever a Map is needed, it shall be acceptable to pass any Perl 6 object that does Associative. Wherever any non-collection interface type is needed, it shall be acceptable to pass a hash mapping string method names to code references, which results in the creation of a proxy class (as per C). If the interface has a single method, passing a single code reference is acceptable. Collection interfaces must be proxied explicitly, to avoid ambiguity with the (presumably more common) case where the programmer wishes to treat a hash as a collection itself. =head1 Access It is inevitable that some general utilities not tied to a specific class will be needed. A setting module (C) is probably the sanest way to approach this. Access to the class hierarchy is bootstrapped through a special symbol in the setting which is bound to a psuedo stash representing the combination of the NQP class loader (the class loader through which C, C, and (through delegation) C are visible) and the empty package prefix. Since the NQP class loader itself cannot and should not be serialized, it will probably be necessary to represent this in a special way, for instance by allowing a null class loader to represent the NQP class loader. (Note that this is inconsistent with the usual behavior of Java core methods to treat a null class loader as a reference to the bootstrap class loader. That might be a problem.) C can be wired up to bind class and package symbols into the current scope. Additionally we can support adverbs which trigger dynamic loading of jars. nqp-2015.11/docs/jvminterop.pod000644 000765 000024 00000005431 12534342605 020272 0ustar00williamcoledastaff000000 000000 =head1 Basic principles We have some degree of interop with native Java objects provided through the C class. The name Boot is intended to suggest that it will not be used directly in most cases; instead it can either be subclassed to provide useful (and fast) HLL-specific marshaling, or it can be wrapped with NQP code to achieve a similar effect. =head1 Common data model All Java objects are wrapped in instances of the C REPR. The instances share a common methodless class by default, but a subclass of C can define an alternate class, or even dynamically create one class per Java type. Marshalling and unmarshalling is done automatically on calls in a statically type-directed way: a function which declares a return type of C will appear to return C, but a function with a declared type of C will wrap any return value even if it is a string. When dynamically creating classes, return values are wrapped in a wrapper type appropriate to their B type. To use methods that exist only on a specific run-time subclass, a cast must be used. This is a deliberate difference from the Niecza CLR interop system, intended to avoid several related semantic traps that exist in Niecza. For instance: $obj.method1.method2; If C is declared to return an object of type C with a single method C, and actually does so, this works in both NQP and Niecza. But if C is changed to return an object of type C which is a subclass of C but has additional methods that shadow or ambiguously overload C, it will B work in Niecza because the binding is effectively too late to reflect host-language subclass substitutability; but it will work on NQP, because the binding is forced to be done based on the static type. When handling these "pseudostatic types", no attempt is made to reflect Java's generic type system. That would just be crazy. =head1 Direct use my $interop := nqp::jvmbootinterop(); $interop.typeForName('java.lang.Thread').unbox( $interop.implementClass( [ ['extends','java.lang.Thread'], ['instance_method', 'run', '()V', method () { say("Hello thread") }] ], ).newInstance ).start; $interop.typeForName('java.lang.Thread')."constructor/new/(Ljava/lang/Runnable;Ljava/lang/String;)V"( $interop.proxy('java.lang.Runnable', nqp::hash( 'run', sub () { say("hello thread2") } )), "AnotherThread" ).start; =head1 Subclassing The C class has a large number of protected methods which can be overriden to support things like automatic creation of Cs to permit method calls against Java objects and types, or adding marshalling rules like C <-> C. =head1 Wrapping TBD nqp-2015.11/docs/nqp-overview.txt000644 000765 000024 00000002376 12534342605 020601 0ustar00williamcoledastaff000000 000000 Overview of nqp repository directory structure: 3rdparty/ - 3rd-party C libraries dyncall/ - dyncall library libtommath/ - bigint support sha1/ - sha hash library docs/ - documentation for NQP examples/ - NQP examples (some obsolete) src/ 6model - 6model C sources cheats - obsolete core - NQP core runtime types gen - work directory for build guts - multidispatch routines HLL - base classes for building HLL compilers NQP - NQP compiler sources ops - NQP-specific Parrot opcode sources pmc - NQP-specific Parrot object types PAST - obsolete (but not removable yet) QAST - code for QAST types, QAST to VM compiler QRegex - P6Regex to QAST compiler Regex - obsolete (but not removable yet) stage? - build directories t/ - tests hll/ - HLL library tests (?) nqp/ - NQP language tests qregex/ - QRegex tests qast/ - QAST tests p5regex/ - P5 regex tests pmc/ - Parrot PMC regression tests setting/ - ??? serialization/ - NQP serializer tests tools/ - scripts and Perl 5 libraries for configure+build NQP nqp-2015.11/docs/ops.markdown000755 000765 000024 00000145720 12534342605 017747 0ustar00williamcoledastaff000000 000000 # NQP Opcodes Opcodes (ops) are used both directly when writing NQP, and during code generation in QAST nodes. When invoking them directly, you'll need to prefix them with nqp::, e.g. nqp::mul_n(6,9); The ops are listed below by type. Each entry shows the name of the op, its variants, and their arguments and types, and may provide a short description. Some opcodes differ only by argument types - in that case, they are listed under their common name (e.g. `mul`), with each of their variants (e.g. `mul_i`, `mul_n`) together with a single description. Opcode variants may contain a type suffix, which usually indicates: * `_i` argument is native int * `_n` argument is native float * `_s` argument is native string * `_b` argument is code blocks * `_I` argument is Big Integer They may also have a numeric suffix, which typically indicates the number of arguments required. In opcode signatures below, we use the following types, which may not correspond directly to NQP types. * int - native int * num - native float * str - native string * Int - BigInt * Mu - any NQP or VM object * Mu:T - a type object, e.g. `Int` * Exception - an Exception object * Handle - an I/O Handle object * Iterable - something iterable * Context - a Context object * LexPad - a Context object * @ - this sigil indicates an array parameter * % - this sigil indicates a hash parameter * ... - indicates variable args are accepted VM-specific opcodes are denoted with a `jvm`, e.g. on the same line as the header. No annotation indicates this opcode should be supported on all nqp backends. Some individual opcodes may be marked with _Internal_ or _Deprecated_. Both of these indicate the opcodes are not intended to be used. Deprecated opcodes will eventually be removed from NQP. Internal opcodes are typically used at compile time to replace opcodes that take a variable number of arguments. The opcodes are grouped into the following categories: * [Arithmetic Opcodes](#arithmetic) * [Numeric Opcodes](#numeric) * [Trigonometric Opcodes](#trig) * [Relational / Logic Opcodes](#logic) * [Array Opcodes](#array) * [Hash Opcodes](#hash) * [String Opcodes](#string) * [Unicode Property Opcodes](#unicode) * [Conditional Opcodes](#conditional) * [Loop/Control Opcodes](#control) * [Exceptional Opcodes](#exceptions) * [Input/Output Opcodes](#io) * [External command Opcodes](#extern) * [File / Directory / Network Opcodes](#filedirnet) * [Type/Conversion Opcodes](#type) * [OO/SixModel Opcodes](#sixmodel) * [Bit Opcodes](#bit) * [Context Introspection Opcodes](#context) * [Variable Opcodes](#variable) * [Miscellaneous Opcodes](#misc) * [Native Call / Interoperability Opcodes](#nativecall) * [Asynchronous operations](#async) # Arithmetic Opcodes ## abs * `abs_i(int $i)` * `abs_n(num $n)` * `abs_I(Int $i, Mu:T $type)` Return the absolute value of a number. `_I` variant returns an object of the given type. ## add * `add_i(int $l, int $r)` * `add_n(num $l, num $r)` * `add_I(Int $l, Int $r, Mu:T $type)` Add two numbers together, returning the result. `_I` variant returns an object of the given type. ## div * `div_i(int $l, int $r)` * `div_n(num $l, num $r)` * `div_I(Int $l, Int $r, Mu:T $type)` * `div_In(Int $l, Int $r)` Divide $l by $r, returning the result. `_I` variant returns an object of the given type. The `_In` variant returns a native num, using a scale of 309, and a rounding mode equivalent to Java's `ROUND_HALF_UP`. ## gcd * `gcd_i(int $l, int $r)` * `gcd_I(Int $l, Int $r, Mu:T $type)` Return the greatest common multiple of two numbers. `_I` variant returns an object of the given type. ## lcm * `lcm_i(int $l, int $r)` * `lcm_I(Int $l, Int $r, Mu:T $type)` Return the lowest common multiple of two numbers. `_I` variant returns an object of the given type. ## mod * `mod_i(int $l, int $r)` * `mod_n(num $l, num $r)` * `mod_I(Int $l, Int $r, Mu:T $type)` Return the modulus of $l by $r. `_I` variant returns an object of the given type. ## mul * `mul_i(int $l, int $r)` * `mul_n(num $l, num $r)` * `mul_I(Int $l, Int $r, Mu:T $type)` Multiply two numbers, returning the result. `_I` variant returns an object of the given type. ## neg * `neg_i(int $i)` * `neg_n(num $n)` * `neg_I(Int $i, Mu:T $type)` Return the negative of a number. `_I` variant returns an object of the given type. ## sub * `sub_i(int $l, int $r)` * `sub_n(num $l, num $r)` * `sub_I(Int $l, Int $r, Mu:T $type)` Subtract $r from $l, returning the result. `_I` variant returns an object of the given type. # Numeric Opcodes ## base * `base_I(Int $i, int $radix)` Returns a string representing the integer `$i` in base `$radix` ## ceil * `ceil_n(num $n)` Return the ceiling of a number. ## exp * `exp_n(num $exponent)` Return the value of `e` raised to $exponent. ## floor * `floor_n(num $n)` Return the floor of a number. ## inf * `inf()` Return infinity. ## log * `log_n(num $n)` Return the log base 10 of a number. ## ln * `ln_n(num $n)` Return the natural logarithm of a number. ## expmod * `expmod_I(Int $base, Int $exponent, Int $modulus, Mu:T $type)` Return a bigint that is `$base` raised to `$exponent` modulus `$modulus`. `_I` variant returns an object of the given type. ## nan * `nan()` Return NaN. ## neginf * `neginf()` Return negative infinity. ## pow * `pow_n(num $base, num $exponent)` * `pow_I(Int $base, Int $exponent, Mu:T $type_num, Mu:T $type_bigint)` Return the value of $base raised to $exponent; `_I` variant returns an object of `$type_num` for negative exponents, and of type `$type_bigint` for positive exponents. ## rand * `rand_n(num $n)` * `rand_I(Int $i, Mu:T $type)` Returns a psuedo-random bigint up to the value of the given number. `_I` variant returns an object of the given type. ## sqrt * `sqrt_n(num $l, num $r)` # Trigonometric Opcodes Each opcode corresponds directly to the trigonometric function of the same name. `h` indicates a hyperbolic variant. ## asec * `asec_n(num $n)` ## asin * `asin_n(num $n)` ## acos * `acos_n(num $n)` ## atan * `atan_n(num $n)` ## atan2 * `atan2_n(num $l, num $r)` ## cos * `cos_n(num $n)` ## cosh * `cosh_n(num $n)` ## sin * `sin_n(num $n)` ## sinh * `sinh_n(num $n)` ## sec * `sec_n(num $n)` ## sech * `sech_n(num $n)` ## tan * `tan_n(num $n)` ## tanh * `tanh_n(num $n)` # Relational / Logic Opcodes ## cmp * `cmp_i(int $l, int $r)` * `cmp_n(num $l, num $r)` * `cmp_s(str $l, str $r)` * `cmp_I(Int $l, Int $r)` Compare two values, returns -1 if $l is greater than $r, 0 if they are equal, and 1 if $r is greater than $l. ## eqat * `eqat(str $haystack, str $needle, int $pos)` Return 1 if the string `$haystack` has the string `$needle` at position `$pos`, or 0 otherwise. ## iseq * `iseq_i(int $l, int $r)` * `iseq_n(num $l, num $r)` * `iseq_s(str $l, str $r)` * `iseq_I(Int $l, Int $r)` Return non-zero if the two parameters are equal. ## isgt * `isgt_i(int $l, int $r)` * `isgt_n(num $l, num $r)` * `isgt_s(str $l, str $r)` * `isgt_I(Int $l, Int $r)` Return non-zero if $l is greater than $r. ## isge * `isge_i(int $l, int $r)` * `isge_n(num $l, num $r)` * `isge_s(str $l, str $r)` * `isge_I(Int $l, Int $r)` Return non-zero if $l is greater than or equal to $r. ## islt * `islt_i(int $l, int $r)` * `islt_n(num $l, num $r)` * `islt_s(str $l, str $r)` * `islt_I(Int $l, Int $r)` Return non-zero if $l is less than $r. ## isle * `isle_i(int $l, int $r)` * `isle_n(num $l, num $r)` * `isle_s(str $l, str $r)` * `isle_I(Int $l, Int $r)` Return non-zero if $l is less than or equal to $r. ## isne * `isne_i(int $l, int $r)` * `isne_n(num $l, num $r)` * `isne_s(str $l, str $r)` * `isne_I(Int $l, Int $r)` Return non-zero if the two parameters are not equal. ## not * `not_i(int $val)` Return 1 if `$val` is 0, 0 otherwise. # Array Opcodes ## atpos * `atpos(@arr, int $i)` * `atpos_i(@arr, int $i)` * `atpos_n(@arr, int $i)` * `atpos_s(@arr, int $i)` Return whatever is bound to @arr at position $i. ## bindpos * `bindpos(@arr, int $i, Mu $v)` * `bindpos_i(@arr, int $i, int $v)` * `bindpos_n(@arr, int $i, num $v)` * `bindpos_s(@arr, int $i, str $v)` Bind $v to @arr at position $i and return $v. ## elems * `elems(@arr)` * `elems(%hash)` Return the number of elements in `@arr`, or the number of keys in `%hash`. ## existspos * `existspos(@arr, int $i)` Return 1 if anything is bound to `@arr` at position `$i`, 0 otherwise. ## list * `list(...)` * `list_i(...)` * `list_n(...)` * `list_s(...)` * `list_b(...)` Create a list of the given parameters. If no arguments are passed, an empty list is created. If a typed variant is used, the parameters are coerced to the appropriate type. ## push * `push(@arr, Mu $v)` * `push_i(Array int @arr, int $v)` * `push_n(Array num @arr, num $v)` * `push_s(Array str @arr, str $v)` "Push $v onto the end of @arr." Bind $v to @arr at the position at the end of @arr, i.e., the position that is just after the last position of @arr that has been bound to. Return value is not currently defined. ## pop * `pop(@arr)` * `pop_i(@arr)` * `pop_n(@arr)` * `pop_s(@arr)` "Pop the last value off the end of @arr." Return the value of @arr at its last bound position, and unbind @arr at that position. ## setelems * `setelems(@arr, int $i)` Set the size of `@arr` to `$i` elements. If less than the current size, any elements after the new last position are unbound. If greater, the empty elements at the end are bound with potentially VM specific null entries. ## shift * `shift(@arr)` * `shift_i(@arr)` * `shift_n(@arr)` * `shift_s(@arr)` "Shift the last value from the beginning of @arr." Return the value of @arr at index 0, unbind @arr at index 0, and move all other binding of @arr to the index one below what they were previously bound to. ## splice * `splice(@arr, @from, int $offset, int $count)` Remove the elements in `@arr` starting at `$offset`, for `$count` positions. Replace them with all the elements from `@from`. ## unshift * `unshift(@arr, Mu $v)` * `unshift_i(@arr, int $v)` * `unshift_n(@arr, num $v)` * `unshift_s(@arr, str $v)` "Shift $v into the beginning of @arr." Bind $v to @arr at index 0, move all other bindings of @arr to the index one above what they were previously bound to. Return the number of elements of @arr on Parrot, $v on JVM. ## iterator * `iterator()` Returns an iterator object to iterate over a list's items. For example: ```perl my $list := nqp::list('a', 'b', 'c'); my $iter := nqp::iterator($list); while $iter { say(nqp::shift($iter)); } ``` You can also use `nqp::iterator()` to iterate over a hash's key-value pairs. # Hash Opcodes ## atkey * `atkey(%hash, String $key)` * `atkey_i(%hash, String $key)` * `atkey_n(%hash, String $key)` * `atkey_s(%hash, String $key)` Return the value of %hash at key $key. ## bindkey * `bindkey(%hash, String $key, Mu $v)` * `bindkey_i(%hash, String $key, int $v)` * `bindkey_n(%hash, String $key, num $v)` * `bindkey_s(%hash, String $key, str $v)` Bind key $key of %hash to $v and return $v. ## existskey * `existskey(%hash, String $key)` Return non-zero if %hash has key $key bound to something. ## deletekey * `deletekey(%hash, String $key)` Delete the given key from %hash. ## iterkey * `iterkey_s($pair)` Returns the key associated with the given key-value pair. For example: ```perl for %hash { say(nqp::iterkey_s($_), ' => ', nqp::iterval($_)); } ``` ## iterval * `iterval($pair)` Returns the value associated with the given key-value pair. # String Opcodes ## chars * `chars(str $str)` Return the number of characters in the string. ## chr * `chr(int $codepoint)` Given a unicode codepoint, return a str containing its character. Will throw an exception on invalid codepoints. ## codepointfromname * `codepointfromname(str $name)` Returns the codepoint for the given unicode character name, or -1 if no match was found. ## concat * `concat(str $l, str $r)` Return a string that is the concatenation of the two passed in strings. ## decode * `decode($buffer, str $encoding)` Returns an (NFG) string resulting from decoding the specified buffer assuming the specified encoding. ## decodetocodes * `decodetocodes`($buffer, str $encoding, int $normalization, $codes) Decodes the bytes in the specified buffer using the provided encoding. Applies normalization as requested (must be one of the nqp::const::NORMALIZE_* values; use nqp::const::NORMALIZE_NONE to apply no normalization). Places the code points into $codes, which should be some VMArray holding 32-bit integers. ## encode * `encode(str $string, str $encoding, $buffer)` Encodes an (NFG) string into the specified encoding, writing into the buffer provided. The data written is normalized according to NFC. ## encodefromcodes * `encodefromcodes($codes, str $encoding, $buffer) Takes a 32-bit integer array of Unicode codepoints, encodes them using the chosen encoding, and writes them into the buffer. No normalization is applied. ## encodenorm * `encode(str $string, str $encoding, int $normalization, $buffer) Encodes an (NFG) string into the specified encoding, writing into the buffer provided. The data written is normalized according to the normalization value passed (which must be one of the nqp::const::NORMALIZE_* values). Specifying NORMALIZE_NONE is equivalent to NFC. ## escape * `escape(str $str)` Given a string, return an escaped version that replaces the following characters with their escaped equivalents: "\\", "\b", "\n", "\r", "\t", "\f", "\"", "\a", and "\e". ## findcclass * `findcclass(int $class, str $str, int $i, int $count)` Search the string starting at the `$i`th character, for `$count` characters. Return the position of the first character that is of the specified class (`nqp::const::CCLASS_*`). If no characters match, return the position of the first character after the given range, or the length of the string, whichever is smaller. ## findnotcclass * `findnotcclass(int $class, str $str, int $i, int $count)` Search the string starting at the `$i`th character, for `$count` characters. Return the position of the first character that is not of the specified class (`nqp::const::CCLASS_*`). If no characters match, return the position of the first character after the given range, or the length of the string, whichever is smaller. ## flip * `flip(str $str)` Return a string with the characters of `$string` in reverse order. ## hash * `hash(...)` Return a hash. The first argument is a key, the second its value, and so on. Be sure to pass an even number of arguments, a VM specific error may occur otherwise. ## index * `index(str $haystack, str $needle)` * `index(str $haystack, str $needle, int $pos)` Return the position in `$haystack` at which `$needle` appears, or -1 if `$needle` does not appear. Begin searching at position `$pos` if specified, or at 0, otherwise. * `indexfrom(str $haystack, str $needle, int $pos)` _Internal_ `index` is converted to this internal opcode by the compiler. ## iscclass * `iscclass(int $class, str $str, int $i)` Return 1 if the `$i`th character of $str is of the specified class, (`nqp::const::CCLASS_*`), 0 otherwise. ## join * `join(str $delim, @arr)` Joins the separate strings of `@arr` into a single string with fields separated by the value of EXPR, and returns that new string. ## lc * `lc(str $str)` Return lowercase copy of string. ## normalizecodes * `normalizecodes($codes-in, int $normalization, $codes-out) Takes the codepoints in $codes-in, applies the specified normalization, and places the result into the $codes-out array. Both arrays of codepoints must be 32-bit integer arrays. ## ord * `ord(str $str)` * `ord(str $str, int $i)` Return the unicode codepoint of the first character in `$str`, or at the `$i`th character, if it's specified. * `ordat(str $str, int $i)` _Internal_ * `ordfirst(str $str)` _Internal_ `ord` is converted to these internal opcodes by the compiler. ## radix * `radix(int $radix, String $str, int $pos, int $flags)` * `radix_I(int $radix, String $str, int $pos, int $flags, Mu:T $type)` Convert string $str into a number starting at offset $pos and using radix $radix. The result of the conversion returns an array with out[0] = converted value out[1] = radix ** (number of digits converted) out[2] = offset after consuming digits, -1 if no digits consumed The opcode skips single underscores between pairs of digits, per the Perl 6 specification. The $flags is a bitmask that modifies the parse and/or result: 0x01: negate the result (useful if you've already parsed a minus) 0x02: parse a leading +/- and negate the result on - 0x04: parse trailing zeroes but do not include in result (for parsing values after a decimal point) ## replace * `replace(str $str, int $offset, int $count, str $replacement)` Return a copy of `$str` where the characters starting at `$offset` for `$count` characters have been replaced with the `$replacement` string. ## rindex * `rindex(str $haystack, str $needle)` * `rindex(str $haystack, str $needle, int $pos)` Searching backwards through the `$haystack`, return the position at which `$needle` appears, or -1 if it does not. Begin searching at `$pos` if specified, otherwise start from the last position. * `rindexfrom(str $haystack, str $needle, int $pos)` _Internal_ * `rindexfromend(str $haystack, str $needle)` _Internal_ `rindex` is converted to these internal opcodes by the compiler. ## uc * `uc(str $str)` Return uppercase copy of string. ## split * `split(str $delimiter, str $string)` Splits the string `$string` into an array of elements; these elements are the substrings between delimiters in the original string. If the original string begins or ends with the delimiter, the resulting array will begin or end with an empty element. ## strfromcodes * `strfromcodes($codes)` Returns an (NFG) string built from the specified codepoints, which must be provided as a 32-bit integer array. ## strtocodes * `strtocodes(str $str, int $normalization, $codes) Takes an NFG string, and places the codepoints from it into the codes array, which must be a 32-bit integer array. Applies the specified normalization, specified as one of the nqp::const::NORMALIZE_* values; NORMALIZE_NONE is equivalent to NORMALIZE_NFC. ## substr * `substr(str $str, int $position)` * `substr(str $str, int $position, int $length)` Return the portion of the string starting at the given position. If `$length` is specified, only return that many characters. The numbered variants required the args specified - the unnumbered version may use either signature. * `substr2(str $str, int $position)` _Internal_ * `substr3(str $str, int $position, int $length)` _Internal_ `substr` is converted to these internal opcodes by the compiler. ## tc * `tc(str $str)` Return titlecase copy of string. ## x * `x(str $str, int $count)` Return a new string containing `$count` copies of `$str`. ## sprintf * `sprintf(str $pattern, @values)` Returns a string formatted by the printf conventions similar to Perl 5 / C. Machine sized numeric types, their limits and therefore overflows are not implemented though. ## sprintfdirectives * `sprintfdirectives(str $pattern)` This takes the same pattern as `sprintf` does, and computes the needed value-count that `sprintf` would have to provide. ## sprintfaddargumenthandler * `sprintfaddargumenthandler(Mu $handler)` Lets you register a handler-instance that supports the sprintf op when it has to numify custom types. This handler has to provide two methods, `mine` and `int`. `mine` gets the the value in question and returns true if this handler is in charge for this type, false otherwise. The method `int` does the conversion for patterns like %d. ```perl my class MyHandler { method mine($x) { $x ~~ MyType } method int($x) { $x.Int } } ``` # Unicode Property Opcodes ## getuniname * `getuniname(int $codepoint)` Translate a codepoint to its Unicode name. ## unipropcode * `unipropcode(str $propname)` Translates a property name to the property category it's in. ## unipvalcode * `unipvalcode(int $propcode, str $propname)` Looks up a property name in its property category, and returns which table within that category to use. ## getuniprop_int * `getuniprop_int(int $codepoint, int $propcode)` Uses the table found by unipropcode to look up an integer property value for a given codepoint. Note that many properties that are officially numeric are really stored as strings, and if you try to use this op on such a property, you'll get a meaningless position in an enum table instead of the value you want. ## getuniprop_str * `getuniprop_str(int $codepoint, int $propcode)` Same thing, but fetches a string property value. ## getuniprop_bool * `getuniprop_bool(int $codepoint, int $propcode)` Same thing, but fetches a boolean property value. ## matchuniprop * `matchuniprop(int $codepoint, int $propcode, int $pvalcode)` Looks up a codepoint property and return 1 if it matches the pval, 0 otherwise. The propcode and pvalcode may be looked up with the opcodes above. (Note that you can use the property value name (e.g. Nd) for both lookups.) # Conditional Opcodes ## if * `if(Block $condition, Block $then)` * `if(Block $condition, Block $then, Block $else)` If the `$condition` evaluates to a non-zero value, run the `$then` block. If not, and an `$else` block is present, run that instead. ## unless * `unless(Block $condition, Block $then)` * `unless(Block $condition, Block $then, Block $else)` If the `$condition` evaluates to 0, run the `$then` block. If not, and an `$else` block is present, run that instead. # Loop/Control Opcodes ## for * `for(Iterable $iter, Block $body)` Invoke the `$body` for every item available in `$iter`. ## ifnull * `ifnull(Block $cond, Block $body)` If the `$cond` evaluates to null, evaluate the `$body`, otherwise return the result of `$cond`. ## defor * `defor(Block $cond, Block $body)` If the `$cond` evaluates to defined value, return it, otherwise, evaluate the `$body`. ## repeat_until * `repeat_until(Block $condition, Block $body)` * `repeat_until(Block $condition, Block $body, Block $post)` First run the `$body`. Then, enter a loop, running the `$body` only if the condition returns 0. If a `$post` block is present, run that at the end, regardless of `$condition`. ## repeat_while * `repeat_while(Block $condition, Block $body)` * `repeat_while(Block $condition, Block $body, Block $post)` First run the `$body`. Then, enter a loop, running the `$body` only if the condition returns a non-0 value. If a `$post` block is present, run that at the end, regardless of `$condition`. ## until * `until(Block $condition, Block $body)` * `until(Block $condition, Block $body, Block $post)` Enter a loop, running the `$body` only if the condition returns 0. If a `$post` block is present, run that at the end, regardless of `$condition`. ## while * `while(Block $condition, Block $body)` * `while(Block $condition, Block $body, Block $post)` Enter a loop, running the `$body` only if the condition returns a non-0 value. If a `$post` block is present, run that at the end, regardless of `$condition`. ## control * `QAST::Op.new(:op, :name);` * `QAST::Op.new(:op, :name);` * `QAST::Op.new(:op, :name);` Not callable directly from NQP, but used in languages via QAST to perform loop control. The specific kind of loop control desired is specified via the `:name` attribute; either `next`, `last`, or `redo`. # Exceptional Opcodes ## backtrace * `backtrace(Exception $ex)` Return an array of hashes, describing the backtrace of the given exception. ## backtracestrings * `backtracestrings(Exception $ex)` Return an array of strings, describing the backtrace of the given exception. ## die * `die(str $message)` * `die_s(str $message)` Create and throw an exception using the given message. ## exception * `exception()` Return the current exception object. ## getextype * `getextype(Exception $ex)` Gets the exception category (`nqp::const::CONTROL_*`) ## getmessage * `getmessage(Exception $ex)` Gets the exception message. ## getpayload * `getpayload(Exception $ex)` Gets the exception payload. ## newexception * `newexception()` Return a new exception object. ## resume * `resume(Exception $ex)` Resume the exception, if possible. ## rethrow * `rethrow(Exception $ex)` Re-throw the exception. ## setextype * `setextype(Exception $ex, int $type)` Sets the exception category (`nqp::const::CONTROL_*`) ## setmessage * `setmessage(Exception $ex, str $message)` Sets the exception message. ## setpayload * `setpayload(Exception $ex, Mu $obj)` Sets the exception payload. ## throw * `throw(Exception $ex)` Throw the exception. # Input/Output Opcodes ## closefh * `closefh(Handle $fh)` Close the filehandle. ## eoffh * `eoffh(Handle $fh)` Return 1 if this filehandle is at the end of the file, otherwise 0. ## flushfh * `flushfh(Handle $fh)` Flushes the file handle, forcing it to write any buffered output. ## getcfh * `getcfh(Handle $in)` Reads a single character from the supplied filehandle. ## getstderr * `getstderr()` Return the filehandle for standard error. ## getstdin * `getstdin()` Return the filehandle for standard input. ## getstdout * `getstdout()` Return the filehandle for standard output. ## open * `open(str $filename, str $mode)` Open the specified file in the given mode. Valid modes include `r` for read, `w` for write, and `wa` for write with append. ## openasync `jvm` _Experimental_ * `openasync(str $filename, str $mode)` Open the specified file in the given mode for async IO. See `open` for valid modes. ## print * `print(str $str)` Output the given string to stdout. ## printfh * `printfh(Handle $fh, str $str)` Output the given string to the filehandle. ## readallfh * `readallfh(Handle $fh)` Return the contents of the open filehandle. ## readfh * `readfh(Handle $fh, @arr, long $count)` Given a readable `$fh`, and an array of `Buf[int8]` or a `Buf[uint8]`, read in the next `$count` bytes from the filehandle and store them in the array. ## readlinefh * `readlinefh(Handle $fh)` Return the next line of the open filehandle. ## readcharsfh * `nqp::readcharsfh(Handle $fh, $chars)` ## say * `say(str $str)` Output the given string to stdout, followed by a newline. ## sayfh * `sayfh(Handle $fh, str $str)` Output the given string to the filehandle, followed by a newline. ## setencoding * `setencoding(Handle $fh, str $encoding)` Set the encoding for the given handle. Valid encodings are: ascii, iso-8859-1, windows-1252, utf8, utf16, and binary. ## setinputlinesep * `setinputlinesep(Handle $fh, str $sep)` Set the input line separator on the given file handle. ## tellfh * `tellfh(Handle $fh)` Return current access position for an open handle. ## writefh * `writefh(Handle $fh, Mu $str)` Output the given object to the filehandle. # External command Opcodes ## shell * `shell(str $cmd, str $path, %env)` Using $path as the working directory, execute the given command using the specified environment variables. Returns a POSIX-style return value. Command is executed using an OS-appropriate shell (`sh -c` or `cmd /c`). Blocks until command is complete. * `shell(str $cmd)` _Deprecated: use the three argument version_ Same as the three argument version of `shell`, using the current directory and an empty environment. * `shell1(str $cmd)` _Internal, Deprecated_ * `shell3(str $cmd, str $path, %env)` _Internal_ `shell` is converted to these internal opcodes by the compiler. ## spawn * `spawn(@cmd, str $path, %env)` Using $path as the working directory, execute the given command using the specified environment variables. Returns a POSIX-style return value. No shell processing of args is done. The first value of `@args` is the command executed, further values are passed as arguments. Blocks until command is complete. # File / Directory / Network Opcodes ## chdir * `chdir(str $path)` Change the working directory to the given path. ## chmod * `chmod(str $path, int $mode)` Change the permissions of `$path` to the posix style permissions of `$mode`. Returns 0 on success, throws an exception on failure. ## closedir * `closedir(Handle $)` Close the given directory handle. ## copy * `copy(str $from, str $to)` Copy file `$from` to file `$to`. Return 0 on success, throw an exception on failure. ## cwd * `cwd()` Return a string containing the current working directory. ## fileexecutable * `fileexecutable(str $str)` If the specified filename refers to an executable file, returns 1. If not, returns 0. If an error occurs, return -1. ## fileislink * `fileislink(str $str)` If the specified filename refers to a symbolic link, returns 1. If not, returns 0. If an error occurs, return -1. ## filereadable * `filereadable(str $str)` If the specified filename refers to a readable file, returns 1. If not, returns 0. If an error occurs, return -1. ## filewritable * `filewritable(str $str)` If the specified filename refers to a writeable file, returns 1. If not, returns 0. If an error occurs, return -1. ## link * `link(str $before, str $after)` Create a link from `$after` to `$before` ## mkdir * `mkdir(str $name, int $mode)` Create a directory of the given name. Use posix-style mode on non-windows platforms. Returns 0, or throws an exception. ## nextfiledir * `nextfiledir(handle $iterator)` Given the result of an opendir, return the next path from that directory. When no more items are available, return a null string. (check with `null_s`) ## opendir * `opendir(str $path)` Return a directory handle on the given directory path. Throw an exception if `$path` is not a directory. ## rename * `rename(str $from, str $to)` Rename file `$from` to file `$to`. Return 0 on success, throw an exception on failure. ## rmdir * `rmdir(str $path)` Delete the given directory $path. Returns 0 on success, -2 if the directory didn't exist. May throw an exception. ## stat * `stat(str $path, int $code)` Given a path and a code, return an int describing that path using the OS's stat() function. Any of these variants may throw an exception if the platform does not support them. (JVM does not support `STAT_PLATFORM_BLOCKSIZE` or `STAT_PLATFORM_BLOCKS`). * `nqp::const::STAT_EXISTS` Returns 1 if the path exists, 0 otherwise. * `nqp::const::STAT_FILESIZE` Returns the size of the file in bytes. * `nqp::const::STAT_ISDIR` Returns 1 if the path is a directory, 0 otherwise, -1 if an exception occurred processing the request. * `nqp::const::STAT_ISREG` Returns 1 if the path is a regular file, 0 otherwise, -1 if an exception occurred processing the request. * `nqp::const::STAT_ISDEV` Returns 1 if the path is a special file, 0 otherwise, -1 if an exception occurred processing the request. * `nqp::const::STAT_ISLNK` Returns 1 if the path is a symbol link, 0 otherwise, -1 if an exception occurred processing the request. * `nqp::const::STAT_CREATETIME` * `nqp::const::STAT_ACCESSTIME` * `nqp::const::STAT_MODIFYTIME` * `nqp::const::STAT_CHANGETIME` Returns respective time attribute in seconds since epoch, or -1 if an exception occurred. * `nqp::const::STAT_BACKUPTIME` Returns -1. * `nqp::const::STAT_GID` * `nqp::const::STAT_UID` Returns the user id and group id of the path, respectively. Returns -1 if an exception occurred. * `nqp::const::STAT_PLATFORM_DEV` Returns the device number of filesystem associated with the path. Returns -1 if an exception occurred. * `nqp::const::STAT_PLATFORM_INODE` Returns the inode. Returns -1 if an exception occurred. * `nqp::const::STAT_PLATFORM_MODE` Returns unix style mode. Returns -1 if an exception occurred. * `nqp::const::STAT_PLATFORM_NLINKS` Returns number of hard links to the path. Returns -1 if an exception occurred. * `nqp::const::STAT_PLATFORM_DEV` Returns the device identifier. Returns -1 if an exception occurred. * `nqp::const::STAT_PLATFORM_BLOCKSIZE` Returns preferred I/O size in bytes for interacting with the file. * `nqp::const::STAT_PLATFORM_BLOCKS` Returns number of system-specific blocks allocated on disk. ## lstat * `lstat(str $path, int $code)` Same as stat, but internally uses the OS's lstat() function, which does *not* follow symlinks. ## symlink * `symlink(str $before, str $after)` Create a symbolic link from `$after` to `$before` ## unlink * `unlink(str $path)` Delete the given file $path. Returns 0 on success, -2 if the file didn't exist. May throw an exception. # Type/Conversion Opcodes ## bool * `bool_I(Int $val)` Returns 0 if `$val` is 0, otherwise 1. ## bootarray `jvm` `moar` * `bootarray()` Returns a VM specific type object for a native array. ## boothash `jvm` `moar` * `boothash()` Returns a VM specific type object for a native hash. ## bootint `jvm` `moar` * `bootint()` Returns a VM specific type object that can box a native int. ## bootintarray `jvm` `moar` * `bootintarray()` Returns a VM specific type object for a native array of int. ## bootnum `jvm` `moar` * `bootnum()` Returns a VM specific type object that can box a native num. ## bootnumarray `jvm` `moar` * `bootnumarray()` Returns a VM specific type object for a native array of num. ## bootstr `jvm` `moar` * `bootstr()` Returns a VM specific type object that can box a native str. ## bootstrarray `jvm` `moar` * `bootstrarray()` Returns a VM specific type object for a native array of str. ## box * `box_i(int $val, Mu:T $type)` * `box_n(num $val, Mu:T $type)` * `box_s(str $val, Mu:T $type)` Given a native value, return a perl 6 object of the given type with the same value. ## defined * `defined(Mu $obj)` Returns 1 if the object is not null and is not a Type object, 0 otherwise. ## fromnum * `fromnum_I(num $val, Mu:T $type)` Convert float value to a Big Integer of the given type, discarding any decimal portion. ## fromstr * `fromstr_I(str $val, Mu:T $type)` Convert string value to a Big Integer of the given type. ## isbig * `isbig_I(Mu $obj)` Returns a 1 if the object's numerical representation requires a big int, 0 otherwise. ## isconcrete * `isconcrete(Mu $obj)` Returns a 1 if the object is not a type object, 0 otherwise. ## iscont * `iscont(Mu $obj)` Returns a 1 if the object is a container type, 0 otherwise. ## isfalse * `isfalse(Mu $obj)` Returns a 0 if the object has a truthy value, 1 otherwise. ## ishash * `ishash(Mu $obj)` Returns a 1 if the object is a Hash, 0 otherwise. ## isint * `isint(Mu $obj)` Returns a 1 if the object is an int type, 0 otherwise. ## isinvokable * `isinvokable(Mu $obj)` Returns a 1 if the object represents something executable, 0 otherwise. ## islist * `islist(Mu $obj)` Returns a 1 if the object is an Array, 0 otherwise. ## isnanorinf * `isnanorinf(num $n)` Return truth value indicating if this number represents any of the special values, positive infinity, negative infinity, or NaN. ## isnull * `isnull(Mu $obj)` * `isnull_s(str $obj)` Returns a 1 if the object is a null, 0 otherwise. ## isnum * `isnum(Mu $obj)` Returns a 1 if the object is a float type, 0 otherwise. ## isprime * `isprime_I(Int $obj)` Returns a 1 if the integer value of the object is prime, 0 otherwise. ## isstr * `isstr(Mu $obj)` Returns a 1 if the object is a str type, 0 otherwise. ## istrue * `istrue(Mu $obj)` Returns a 1 if the object has a truthy value, 0 otherwise. ## istype * `istype(Mu $obj, Mu:T $obj)` Returns a 1 if the object is of the given type, 0 otherwise. ## null * `null()` * `null_s()` Generate a null value. `null_s` returns a null string value that can be stored in a native str. The value returned by `null_s` is VM dependant. Notably, it may stringify differently depending on the backend. ## jvmisnull `jvm` * `jvmisnull(Mu $obj)` Returns a 1 if the object is an NQP Type object *or* the underlying JVM object is null. Returns 0 otherwise. ## tostr * `tostr_I(Int $val)` Convert Big Integer value to a native string. ## tonum * `tonum_I(Int $val)` Convert Big Integer value to a native number. ## unbox * `unbox_i(Mu $val)` * `unbox_n(Mu $val)` * `unbox_s(Mu $val)` Given a Perl 6 object, return a native with the same value, of the type indicated by the opcode suffix. # OO/SixModel Opcodes ## bindattr * `bindattr(Mu $obj, Mu:T $type, str $attributename, Mu $new_value)` * `bindattr_i(Mu $obj, Mu:T $type, str $attributename, int $new_value)` * `bindattr_n(Mu $obj, Mu:T $type, str $attributename, num $new_value)` * `bindattr_s(Mu $obj, Mu:T $type, str $attributename, str $new_value)` Binds `$new_value` to the attribute of name `$attributename` of object `$obj`, where the attribute was declared in type `$type`. The notes in the `getattr` documentation also apply to `bindattr`. ## bindcomp * `bindcomp(Str $base-class, Mu $compiler)` Registers `$compiler` as the compiler for the language named `$base-class`, as in: my $lang = My::Lang::Compiler.new(); nqp::bindcomp('My::Lang', $lang); In general, though, `$lang` will inherit from `HLL::Compiler`, and the above will be achieved via: $lang.language('My::Lang'); ## callmethod * `callmethod(Mu $obj, str $methodname, *@pos, *%named)` Uses `findmethod` to locate method `$methodname` on object `$obj`, and `call` to invoke the method with positional arguments `*@pos` and named arguments `*%named`. Example: class A { method x($a, $b, :$c) { say("$a $b $c") } } nqp::callmethod(A, 'x', '4', '2', c => 'foo'); # same as: A.x(4, 2, c => 'foo') ## can * `can(Mu $obj, str $method)` If the object has a method of the given name, return 1. Otherwise, return 0. ## clone * `clone(Mu $obj)` Return a clone of the passed in object. ## create * `create(Mu:T $type)` Returns a newly allocated instance of type `$type`. ## eqaddr * `eqaddr(Mu $l, Mu $r)` Returns 1 if the objects are the same object in the underlying VM, 0 otherwise. ## findmethod * `findmethod(Mu $obj, str $method)` If the object has a method of the given name, return it. Otherwise, throw an exception. ## getattr * `getattr(Mu $obj, Mu:T $type, str $attributename)` * `getattr_i(Mu $obj, Mu:T $type, str $attributename)` * `getattr_n(Mu $obj, Mu:T $type, str $attributename)` * `getattr_s(Mu $obj, Mu:T $type, str $attributename)` Returns the attribute of name `$attributename` of object `$obj`, where the object was declared in class `$type`. The `_n`, `_i`, and `_s` variants are for natively typed attributes. The following example demonstrates why the type object needs to passed along, and cannot be inferred from the object: class A { has str $!x } class B is A { has str $!x } my $obj := nqp::create(B); nqp::bindattr_s($obj, A, '$!x', 'A.x'); nqp::bindattr_s($obj, B, '$!x', 'B.x'); nqp::say(nqp::getattr_s($obj, A, '$!x')); nqp::say(nqp::getattr_s($obj, B, '$!x')); Throws an exception if there is no such attribute in the class, the attribute is of the wrong type, or the object doesn't conform to the type. Note that in languages that support a full-blown container model, you might need to decontainerize `$obj` before passing it to `getattr`, unless you actually want to access an attribute of the container. ## getcomp * `getcomp(Str $base-class)` Returns the compiler class registered for that `$base-class`. See `bindcomp` for more information. ## how * `how(Mu $obj)` NQP equivalent for Perl 6's `$obj.HOW`. ## rebless * `rebless(Mu $obj, Mu:T $type)` Convert `$obj` to be an object of the new `$type`. ## reprname * `reprname(Mu $obj)` Return the name of the REPR for the given object. ## setwho * `setwho(Mu $obj, Mu $who)` Replace `$obj`'s WHO. Return `$obj`. ## who * `who(Mu $obj)` NQP equivalent for Perl 6's `$obj.WHO`. ## what * `what(Mu $obj)` NQP equivalent for Perl 6's `$obj.WHAT`. ## where * `where(Mu $obj)` Return a unique ID for this `$obj`. # Bit Opcodes ## bitand * `bitand_i(int $l, int $r)` * `bitand_s(str $l, str $r)` * `bitand_I(Mu $l, Mu $r, Mu:T $type)` AND the bits in `$l` and `$r`. `_I` variant returns an object of the given type. ## bitneg * `bitneg_i(int $bits)` * `bitneg_I(Mu $bits, Mu:T $type)` Negate the bits in `$bits`. `_I` variant returns an object of the given type. ## bitor * `bitor_i(int $l, int $r)` * `bitor_s(str $l, str $r)` * `bitor_I(Mu $l, Mu $r, Mu:T $type)` OR the bits in `$l` and `$r`. `_I` variant returns an object of the given type. ## bitshiftl * `bitshiftl_i(int $bits, int $count)` * `bitshiftl_I(Mu $bits, int $count, Mu:T $type)` Signed left shift of `$bits` by `$count`. `_I` variant returns an object of the given type. ## bitshiftr * `bitshiftr_i(int $bits, int $count)` * `bitshiftr_I(Mu $bits, int $count, Mu:T $type)` Signed right shift of `$bits` by `$count`. `_I` variant returns an object of the given type. ## bitxor * `bitxor_i(int $l, int $r)` * `bitxor_s(str $l, str $r)` * `bitxor_I(Mu $l, Mu $r, Mu:T $type)` XOR the bits in `$l` and `$r`. `_I` variant returns an object of the given type. # Context Introspection Opcodes ## ctx * `ctx()` Return the object representing the current context. ## ctxcaller * `ctxcaller(Context $ctx)` Given a context, return the caller context, or null. ## ctxlexpad * `ctxlexpad(Context $ctx)` Given a context, return its lexpad ## curlexpad * `curlexpad()` Return the current lexpad. ## ctxouter * `ctxouter(Context $ctx)` Given a context, return the outer context, or null. ## lexprimspec * `lexprimspec(LexPad $pad, str $name)` Given a lexpad and a name, return the name's primitive type. The primitive types are 1 for int, 2 for num and 3 for str. 0 is any object. ## savecapture * `savecapture()` Gets hold of the argument capture passed to the current block. Commits to doing enough copying that the list is valid any amount of time. See usecapture for a version of the op that doesn't promise that. Used by the multi-dispatcher. ## usecapture * `usecapture()` Gets hold of the argument capture passed to the current block. (a future usecapture may invalidate it) It's valid to implement this exactly the same way as savecapture if there's no performance benefit to be had in a split. Used by the multi-dispatcher. ## getlex * `getlex(str $name)` * `getlex_i(str $name)` * `getlex_n(str $name)` * `getlex_s(str $name)` Looks up the lexical with the specified name and the specified type. Searching in the outer frames, starting at the current. An error is thrown if it does not exist or if the type is incorrect. ## bindlex * `bindlex(str $name, Mu $value)` * `bindlex_i(str $name, int $value)` * `bindlex_n(str $name, num $value)` * `bindlex_s(str $name, str $value)` Binds $value to the lexical specified by name and type. Searching in the outer frames, starting at the current. An error is thrown if it does not exist or if the type is incorrect. ## getlexdyn * `getlexdyn(str $name)` Looks up the contextual with the specified name in the caller chain, starting at the calling frame. ## bindlexdyn * `bindlexdyn(str $name, Mu $value)` Binds $value to the contextual with the specified name, searching for it in the call-chain, starting at the calling frame. ## getlexouter * `getlexouter(str $name)` Looks up the lexical with the specified name and the specified type. Searching in the outer frames, starting at outer. ## getlexcaller * `getlexcaller(str $name)` Looks up the lexical with the specified name, starting at the calling frame. It checks all outer frames of the caller chain. ## getlexrel * `getlexrel(Mu $context, str $name)` Looks up the lexical with the specified name and the specified type. Searching in the outer frames, starting at the given $context. ## getlexreldyn * `getlexreldyn(Mu $context, str $name)` Looks up the contextual with the specified name in the caller chain, starting at the given $context. ## getlexrelcaller * `getlexrelcaller(Mu $context, str $name)` Looks up the lexical with the specified name, starting at the given $context. It checks all outer frames of the caller chain. # Variable Opcodes ## bind * `bind(Mu $variable, Mu $value)` Binds `$value` to the `$variable`. Dies if `$variable` isn't actually a variable. Same as the `:=` operator in NQP. # Miscellaneous Opcodes ## const * `const()` Not actually an opcode, but a collection of several constants. Each of the constants below can be used in nqp as (e.g.) `nqp::const::CCLASS_ANY`. * CCLASS_ANY * CCLASS_UPPERCASE * CCLASS_LOWERCASE * CCLASS_ALPHABETIC * CCLASS_NUMERIC * CCLASS_HEXADECIMAL * CCLASS_WHITESPACE * CCLASS_PRINTING * CCLASS_BLANK * CCLASS_CONTROL * CCLASS_PUNCTUATION * CCLASS_ALPHANUMERIC * CCLASS_NEWLINE * CCLASS_WORD * HLL_ROLE_NONE * HLL_ROLE_INT * HLL_ROLE_NUM * HLL_ROLE_STR * HLL_ROLE_ARRAY * HLL_ROLE_HASH * HLL_ROLE_CODE * CONTROL_TAKE * CONTROL_LAST * CONTROL_NEXT * CONTROL_REDO * CONTROL_SUCCEED * CONTROL_PROCEED * CONTROL_WARN * STAT_EXISTS * STAT_FILESIZE * STAT_ISDIR * STAT_ISREG * STAT_ISDEV * STAT_CREATETIME * STAT_ACCESSTIME * STAT_MODIFYTIME * STAT_CHANGETIME * STAT_BACKUPTIME * STAT_UID * STAT_GID * STAT_ISLNK * STAT_PLATFORM_DEV * STAT_PLATFORM_INODE * STAT_PLATFORM_MODE * STAT_PLATFORM_NLINKS * STAT_PLATFORM_DEVTYPE * STAT_PLATFORM_BLOCKSIZE * STAT_PLATFORM_BLOCKS * TYPE_CHECK_CACHE_DEFINITIVE * TYPE_CHECK_CACHE_THEN_METHOD * TYPE_CHECK_NEEDS_ACCEPTS ## debugnoop * `debugnoop(Mu $a)` Returns `$a`. Does nothing, exists only to provide a breakpoint location for debugging. ## exit * `exit(int $status)` Exit nqp, using the given status as the compiler's exit value. ## getenvhash * `getenvhash()` Returns a hash containing the environment variables. Changing the hash doesn't affect the environment variables ## backendconfig * `backendconfig()` Returns a hash containing backend-specific information, like backend-version, configure and build flags. ## getpid * `getpid()` Return the current process id, an int. ## jvmclasspaths `jvm` * `jvmclasspaths()` Converts the JVM property `java.class.path` into a list of paths, returns it. ## sha1 * `sha1(str $str)` Given a UTF-8 string, return the SHA-1 digest for that string. ## sleep * `sleep(num $seconds)` Sleep for the given number of seconds (no guarantee is made how exact the time sleeping is spent.) Returns the passed in number. ## takeclosure * `takeclosure(Block $innerblock)` Creates a lexical closure from the block's outer scope. ## time * `time_i()` * `time_n()` Return the time in seconds since January 1, 1970 UTC. `_i` variant returns an integral number of seconds, `_n` returns a fractional amount. # Native Call / Interoperability Opcodes ## x_posixerrno * `x_posixerrno()` Returns an int that corresponds to the value of POSIX's errno. # Asynchronous Operations The various asynchronous operations, such as timers and asynchronous I/O, take a concurrent queue to push a work item into at an appropriate time. This may be a code object to be invoked, or it may be an array of a code item and some arguments to supply to it. Asynchronous operations are represented by some object with the AsyncTask REPR, the exact details of which are highly specific to a given backend. The type to use for that is given as $handle_type. [As of 2014.04, these are very new and subject to revision and additions.] ## cancel * `cancel(AsyncTask $handle)` Takes something with the AsyncTask REPR and tries to cancel it, if it is possible to do so. If it is somehow not possible (for example, the operation already completed anyway), then nothing will happen. This is to avoid race conditions. ## timer * `timer($queue, $schedulee, int $timeout, int $repeat, $handle_type)` Starts a timer. If timeout is zero, the $schedulee is immediately pushed to the queue. Otherwise, it is pushed after the timeout period. If repeat is non-zero, after the initial timeout period it will then be pushed again at the repeat interval. Returns an object of type $handle_type, which has a AsyncTask REPR. Cancellation stops the timer ever repeating again. ## signal * `signal($queue, $schedulee, int [nqp::cosnt::SIG_], $handle_type)` Sets up a signal handler for the given signal. Whenever it occurs, an array is pushed to the queue containing the schedulee and the signal number. Cancel to stop handling it. ## watchfile * `watchfile($queue, $schedulee, str $filename, $handle_type)` Watches an individual file for changes. Pushes an array to the queue when a change is detected, consisting of the schedulee, the filename that changed if provided by the underlying watcher mechanism, a 0 if the file changed, and a 1 if it was renamed. Cancel to stop watching. ## asyncconnect * `asyncconnect($queue, $schedulee, str $host, int $port, $handle_type)` Creates an asynchronous client socket and commences a connection operation. Upon connection, the queue will be passed an array consisting of the schedulee, a handle if the connection was successful (a type object if not) and an error string (some type object if no error). Returns an AsyncTask representing the connection attempt. ## asynclisten * `asynclisten($queue, $schedulee, str $host, int $port, $handle_type)` Creates an asynchronous server socket listening on the specified host and port. Each time a connection arrives, the queue will be passed an array consisting of the schedulee and the newly created asynchronous socket, for communicating with the connecting client. Returns an AsyncTask that can be cancelled to stop listening, or throws an exception if there is an error starting to listen. ## asyncwritestr * `asyncwritestr($handle, $queue, $schedulee, str $to_write, $handle_type)` Writes a string to some handle capable of asynchronous operations. Once the write is complete, the queue will be passed an array consisting of the schedulee, an integer containing the number of bytes written or a type object if there was an error, and a string containing an error or some type object if none. ## asyncwritebytes * `asyncwritebytes($handle, $queue, $schedulee, $to_write, $handle_type)` Writes a byte array to some handle capable of asynchronous operations. Once the write is complete, the queue will be passed an array consisting of the schedulee, an integer containing the number of bytes written or a type object if there was an error, and a string containing an error or some type object if none. ## asyncreadchars * `asyncreadchars($handle, $queue, $schedulee, $handle_type)` Starts reading chars from the handle. When a packet is received and decoded, an array will be pushed to the queue containing the schedulee, a squence number that starts at 0, the string if anything was decoded (type object on error) and an error string (some type object if no error). If EOF is reached, a sequence number of -1 is sent. Cancel to stop reading. ## asyncreadbytes * `asyncreadbytes($handle, $queue, $schedulee, $buf_type, $handle_type)` Starts reading bytes from the handle. When a packet is received, a $buf_type will be constructed and point to the received memory. An array will be pushed to the queue containing the schedulee, a sequence number that starts at 0, the buffer or just its type object on error, and an error string (type object if no error). If EOF is reached, a sequence number of -1 is sent. Cancel to stop reading. ## spawnprocasync * `spawnprocasync($queue, $args, $cwd, %env, $callbacks)` ## killprocasync * `nqp::killprocasync($handle, $signal)` nqp-2015.11/docs/pir2nqp.todo000644 000765 000024 00000005571 12534342605 017660 0ustar00williamcoledastaff000000 000000 This file is basically a dump of all "pir::" occurrences in the nqp codebase, then looked at by pm and jnthn to determine what needs to be done with them (and to act as a sort of short / mid-term activity schedule for lizmat). Please update as necessary. stay pir for now, until we know how to do constants: pir::const::CCLASS_ALPHABETIC pir::const::CCLASS_ALPHANUMERIC pir::const::CCLASS_ANY pir::const::CCLASS_BLANK pir::const::CCLASS_CONTROL pir::const::CCLASS_HEXADECIMAL pir::const::CCLASS_LOWERCASE pir::const::CCLASS_NEWLINE pir::const::CCLASS_NUMERIC pir::const::CCLASS_PUNCTUATION pir::const::CCLASS_UPPERCASE pir::const::CCLASS_WHITESPACE pir::const::CCLASS_WORD pir::const::IGLOBALS_CONFIG_HASH pir::const::IGLOBALS_LIB_PATHS pir::const::INTERPINFO_ACTIVE_PMCS pir::const::INTERPINFO_CURRENT_RUNCORE pir::const::INTERPINFO_TOTAL_MEM_ALLOC pir::const::INTERPINFO_TOTAL_MEM_USED pir::const::INTERPINFO_TOTAL_PMCS after jnthn's toqast branch is merged pir::isa 2nd arg = ResizablePMCArray, then nqp::islist 2nd arg = hash then nqp::ishash to be eliminated / handled by jnthn nqp::defined -> nqp::isconcrete pir::is_dispatcher__IP pir::create_dispatch_and_add_candidates__PPP pir::push_dispatchee__0PP pir::getinterp__P pir::getattribute__PPs to become nqp::load pir::load_bytecode to be nqp::changetype pir::repr_change_type__0PP to be nqp::pubmethcache pir::publish_method_cache to be nqp::pubtypecache pir::publish_type_check_cache to be nqp::knowhow pir::get_knowhow__P to be nqp::knowhowattr pir::get_knowhow_attribute__P to be nqp::rxnfaalt pir::nqp_nfa_run_alternation__vPSIPP to be nqp::rxnfaproto pir::nqp_nfa_run_protoregex__PPSI to be nqp::setboolspec pir::set_boolification_spec__0PiP to be nqp::setmethcacheauthoritativeness pir::set_method_cache_authoritativeness__vPi unsure what to do with as yet: pir::compreg__0sP pir::compreg__Ps pir::copy__vPP pir::find_caller_lex__Ps pir::find_codepoint__Is pir::find_dynamic_lex__Ps pir::is_invokable__IP pir::typeof need to stay: pir::new__Ps pir::interpinfo__Ii pir::interpinfo__si pir::getstderr__P pir::getprop__PPs pir::box__Pi pir::find_encoding__Is pir::find_encoding__is pir::get_hll_global__Ps pir::get_root_namespace__PP pir::return__vPsiPPi pir::set_hll_global__vPsP pir::set_hll_global__vsP pir::set_runcore__vs pir::setprop__vPsP pir::sweep__vi pir::trace pir::trans_encoding__Ssi pir::trans_encoding__ssi to be decided on later on how to generalize: pir::assign__vPS pir::set_sub_code_object__vPP pir::nqp_add_code_ref_to_sc__vPiP pir::nqp_create_sc__PS pir::nqp_fresh_stub__PP pir::nqp_get_package_through_who__PPs pir::nqp_get_sc_for_object__PP pir::nqp_pop_compiling_sc__v pir::nqp_push_compiling_sc__vP pir::nqp_serialize_sc__SPP pir::nqp_set_sc_for_object__vPP pir::nqpdebflags__Ii pir::nqpevent__vs pir::nqpevent_fh__PP pir::repr_clone__PP pir::stable_publish_vtable_handler_mapping__vPP pir::stable_publish_vtable_mapping__vPP nqp-2015.11/docs/qast.markdown000644 000765 000024 00000037764 12567573107 020134 0ustar00williamcoledastaff000000 000000 # QAST Nodes The "Q" Abstract Syntax Tree is a set of nodes used to represent the runtime behavior of a program that is being compiled. Parsing a program with a grammar produces a parse tree. As the name suggests, this is strongly tied to the syntax of the language being parsed, and reflects the structure of the grammar. This parse tree is mapped by action methods into an abstract syntax tree - a tree of QAST nodes. Rather than talking about program syntax, they talk about what happens at runtime: loops, conditionals, variable lookups, etc. This document describes the available nodes and what they are for. ## QAST::CompUnit While it's not mandatory, most QAST trees that are produced should have a QAST::CompUnit at the top. It should have a single QAST::Block child. This child block represents the outermost scope of the compilation unit. QAST::CompUnit incorporates information that is relevant to the entire unit of code that is being compiled. This includes: * **hll** - the name of the high level language that this QAST tree was produced from, for example, "perl6", "tcl", "bf". * **load** - code to evaluate at the point that the compilation unit is loaded as a module (but not if it is invoked as a mainline program). Happens after any deserialization and deserialization related actions have executed. * **main** - like load, but instead this contains code to execute if the compilation unit is invoked as the mainline Example usage: QAST::CompUnit.new( # Set the HLL. :hll('perl6'), # This variable contains the outermost QAST::Block of the # program. $top_block, # If we run the program as the mainline, then call the top # block automatically. :main(QAST::Op.new( :op('call'), QAST::BVal.new( :value($top_block) ) )) ) Additional adverbs that can be set on a QAST:CompUnit relate to bounded serialization, which will be covered separately. ## QAST::Block A QAST::Block is both a unit of invocation and a unit of lexical scoping. To clarify, this means that if: * You want to create something that can be called, such as a subroutine, closure block or method * You want a fresh lexical environment Then you want to use a QAST::Block. A block can have as many children as you wish, and the final child should evaluate to the return value of the block. A simple example of a block is: QAST::Block.new( QAST::IVal.new( :value(42) ) ) This will compile to a block of code that, when invoked, returns 42. A block can be given a name and a compilation unit unique ID. The name is user facing, and will appear in any automatically generated backtraces. It does not need to be unique within the compilation unit. The compilation unit unique ID, as the name suggests, does need to be. You typically do not need to worry about it much, however; it will be generated for you the first time it is needed, if you do not specify it up front. Often, you will not need to worry about it at all. Here's a block with a name. QAST::Block.new( :name('answer'), QAST::IVal.new( :value(42) ) ) Note that giving a block a name does not imply *any* installation of the block under this name. It's not installed automatically for you as a method or subroutine. That's for you to do. Blocks can be placed within other blocks. This nesting represents the static chain that will be used for the lookup of lexically scoped variables. When you nest one block inside of another, you may wish for it to be invoked automatically when it is encountered, or you may wish that it be treated as an object (for example, which you can bind somewhere). You can configure this by setting the blocktype: QAST::Block.new( QAST::Op.new( :op('say'), QAST::SVal.new( :value('before') ) ), QAST::Block.new( :blocktype('immediate'), QAST::Op.new( :op('say'), QAST::SVal.new( :value('nested') ) ) ), QAST::Op.new( :op('say'), QAST::SVal.new( :value('after') ) ) ) Here, 'immediate' indicates that this block should be executed immediately, whenever it is reached during program execution. The default, 'declaration', does not have these semantics. You use it when you plan to bind the block, for example into a lexical variable, or you are installing it elsewhere (for example, as a method). Block has one more handy feature: it can be used to maintain a symbol table. It provides you with a hash per symbol (typically, these correspond to the variables you declare in the block, but you can put whatever you want in it). $my_block.symbol('$foo', :scope('lexical'), :readonly(1)); The named parameters you pass are stored in a hash for the symbol '$foo'. If you call it again: $my_block.symbol('$foo', :scope('local'), :optimized(1)); Then the updated value for 'scope' will be put in place, the new 'optimized' value will be stored and the existing 'readonly' value will be left intact. That is to say, you can safely add extra information over time. To get all the known facts about a symbol in a hash, simply do: my %sym := $my_block.symbol('$foo'); Two keys have special significance to the QAST to VM compiler: * **scope** is used to find a default scope for a variable, if none is set in a QAST::Var node that is doing a lookup * **type** is used to know the type of the variable. This matters if the variable is natively typed, since it influences the code generation ## QAST::Stmts and QAST::Stmt Often you will wish to execute a sequence of statements, one after the other. This is what QAST::Stmts is for. It simply contains a sequence of other QAST nodes that will be executed in order. The QAST::Stmts node as a whole will evaluate to the last statement. For example, you may have a program along the lines of: if pints < 4 { say "MORE BEER!"; pint = pint + 1; } There are two statements inside of the if node. This probably compiles to something like: QAST::Op.new( :op('if'), # Here comes the condition. QAST::Op.new( :op('lt_i'), QAST::Var.new( :name('pints') ), QAST::IVal.new( :value(4) ) ), # We want to do multiple statements if the condition is true, # so wrap them in a QAST::Stmts. QAST::Stmts.new( QAST::Op.new( :op('say'), QAST::SVal.new( :value('MORE BEER!') ) ), QAST::Op.new( :op('bind'), QAST::Var.new( :name('pints') ), QAST::Op.new( :op('add_i'), QAST::Var.new( :name('pints') ), QAST::IVal.new( :value(1) ) ) ) ) ) Occasionally, you may want the overall sequence of statements to evaluate to something other than the last child. In this case, use resultchild. QAST::Op.new( :op('say'), QAST::Stmts.new( :resultchild(0), QAST::SVal.new( :value('omg a kangaroo!!!') ), QAST::Op.new( :op('call'), :name('prepare_bbq') ) ) ) Here, the call to 'prepare_bbq' will be run, but the 'say' operation will be given the SVal, not the result of the call. Essentially, resultchild is the zero-based index of which child to use as the result of the QAST::Stmts node overall. There is a variant of QAST::Stmts, which is QAST::Stmt. While the first has no impact on the allocation of temporaries, QAST::Stmt marks a register allocation boundary; beyond it, any temporaries are free to be reused. You do not need to use QAST::Stmt, but it can lead to better code generation if used correct. Incorrect use can, of course, lead to incorrect code generation. Like QAST::Stmts, it also can have multiple children and supports resultchild. ## QAST::IVal, QAST::NVal and QAST::SVal Perhaps the simplest nodes in QAST, these represent literal, native values. All of them expect the literal to be specified by setting value. QAST::IVal represents an integer literal, QAST::NVal represents a numeric (floating point) literal, and QAST::SVal represents a string literal. QAST::IVal.new( :value(42) ) QAST::NVal.new( :value(3.14) ) QAST::SVal.new( :value('keming') ) And that's about all there is to say about them. Simples! ## QAST::Op This node captures the very general notion of "an operation". Operations range from addition to method calls to exception handling. The operations themselves are documented separately; the form of the node itself is pretty consistent, however. The children are the operands for the operation. For example: QAST::Op.new( :op('mul_i'), QAST::IVal.new( :value(2) ), QAST::IVal.new( :value(21) ) ) Represents an integer multiplication. Some operations also take a name, such as callmethod: QAST::Op.new( # Call the method 'can_haz'... :op('callmethod'), :name('can_haz'), # ...on the object in $i... QAST::Var.new( :name('$i') ), # ...and pass a string argument, kthxbai. QAST::SVal.new( :value('cheezburger') ) ) There are hundreds of operations, and QAST::Op nodes will be amongst the most common in your trees. By the way, the nqp::op(...) syntax in the NQP language is actually just sugar for a QAST::Op node. This means that any op you've used when writing NQP code is now available to you when writing your compiler, which is a nice bit of knowledge re-use. It's almost like we designed this thing! ## QAST::Var The QAST::Var node is used for declaring and lookup up variables. If you are using QAST's handling of parameters, then a QAST::Var node is also used to declare these. At its simplest, a QAST::Var node needs to specify the name of the variable to look up. QAST::Var.new( :name('$bar') ) In this case, the symbol table of the enclosing blocks must supply a scope. A variable can always be explicitly marked with its scope. QAST::Var.new( :name('$bar'), :scope('lexical') ) Variable declarations look similar: QAST::Var.new( :name('$bar'), :scope('lexical'), :decl('var') ) Note that the declaration for each variable should only show up once, and all subsequent usages should not set decl. A declaration evaluates to the variable itself, and can also be bound to. QAST::Op.new( :op('bind'), QAST::Var.new( :name('$x'), :scope('lexical'), :decl('var'), :returns(int) ), QAST::IVal.new( :value(0) ) ) Note also that returns can be used to specify the type of the variable. It is not needed in general, but is important for native types. Note that you should supply a 6model type object for the type, not a string type name! It is only used to determine the type of storage to allocate for the variable, and type constraints besides those implied by the nature of the storage will not be enforced. Aside from lexicals, it is also possible to declare locals. These are not visible from nested blocks. They are cheaper than lexicals as a result of this, but naturally more restricted. A compiler may start out with everything lexical and in an optimization phase turn some of those into locals if it can prove that this will not be problematic for the execution of the program. They look pretty much the same as lexicals otherwise. QAST::Op.new( :op('bind'), QAST::Var.new( :name('$nom'), :scope('local'), :decl('var'), :returns(str) ), QAST::SVal.new( :value('bacon') ) ) While you can rely on any object variables being initialized to null for you, there are no such promises for any of the native types. Thus if your language promises that a fresh integer variable will start with 0, you should set it (once again, possibly optimizing away that initialization if you can prove that a user assignment renders it useless). Parameters work in a similar way; just set decl to 'param' instead of 'var'. For example, the following block takes two positional parameters. QAST::Block.new( QAST::Var.new( :name('$x'), :scope('lexical'), :decl('param') ), QAST::Var.new( :name('$y'), :scope('lexical'), :decl('param') ), ... ) Parameter declarations can also be given: * :default(...) - a QAST tree that produces a default value for the parameter if it is not passed. This makes it optional. * :slurpy(1) - specifies that the parameter is slurpy. Use :named(1) also for a named slurpy parameter. Finally, there are a couple of other values of decl that work with lexicals. * static - means that the lexical should be given the value specified in the :value(...) argument. Useful for things that wish to install symbols in the lexical scope with the intention they'll not be mutated (for example, a type declaration may be installed using this). No attempt is made to ensure you do not re-bind such a symbol, but do not do this; runtimes are free to turn lookups of static lexical symbols into direct references to the symbol. * contvar - means that the lexical should be initialized to a clone of the :value(...) argument. Presumably, this represents some kind of container type. There are no restrictions on re-binding. * statevar - same as for contvar, except the container created will be used for all given closure clones. To be clear, cloning a code ref doesn't bring state variables along. On the initial call, containers are formed in the way that contvar forms them: by cloning the :value(...) argument. ## QAST::VarWithFallback In the context of a bind, or with native types, this is exactly the same as a QAST::Var. For fetches of object types, if a null is produced, the QAST tree in :fallback(...) will be run and the value that it evaluates to produced instead. ## QAST::BVal A QAST::Block can only appear once in the QAST tree. So what if you want to refer to a block from elsewhere? The answer is to use a QAST::BVal. QAST::BVal.new( :value($some_block) ) The $some_block should be a QAST::Block. Note that this only works if the block is in the same compilation unit as the one where the BVal is used (though it's hard to think of a typical situation where you'd end up trying to do anything else). ## QAST::WVal This node, known as a World Value, references an object that lives in a serialization context. It may be associated with the current compilation unit or some other compilation unit. QAST::WVal is typically used to talk about objects that you create to represent declarative elements of your program. For example, if the program declares a class, you would create an object describing that type as you compile the program, and then use a QAST::WVal to refer to the type from the compiled program code. Usage looks like: QAST::WVal.new( :value($the_object) ) While obscure at first, QAST::WVal is an extremely powerful tool. Much in NQP and even more in the Rakudo Perl 6 compiler hangs of the notion of bounded serialization and a World that builds up a model of the declarative aspects of a program. ## QAST::Want QAST::Want nodes will appear in the QAST tree whenever you emit a value, but don't yet know in what context it will be used, like 123. Each sub-node of the Want provides a value for one context out of int, str, num, object and void. When a context is known, the last of the matching sub-nodes will be used, or the first one if none match. In the case of 123, it may be a boxed integer or a native integer value This notion of context is very code-generation centric, so a want-value of 123 would not create a sub-node for string context, or else my str $x = 123; would work without complaining. ##QAST::ParamTypeCheck Used by rakudo to generate code to multidispatch or enforce signatures at runtime. For example C leads to the generation of the following code where C<$name> is the name of the checked variable. Probably the first because the binder does a check too. That would be redundant. $var.push(QAST::ParamTypeCheck.new(QAST::Op.new( :op('isconcrete'), QAST::Var.new( :name($name), :scope('local') ) ))); ## QAST::VM nqp-2015.11/docs/release_guide.pod000644 000765 000024 00000005477 12613727027 020707 0ustar00williamcoledastaff000000 000000 =head1 release_guide.pod - guide to NQP releases NQP's development release cycle is intimately tied to Rakudo's release cycle. There is no separate, independent release cycle for NQP. Parrot is scheduled to release the third Tuesday of each month; Rakudo will generally issue its own development release soon after the scheduled Parrot release (usually within a few days). To accomplish this, NQP must be tagged for release immediately prior to the Rakudo release. =head2 Steps to create an NQP release =over 4 =item 1. MoarVM tries to have a synchronised release schedule with NQP and rakudo, so there's most probably a release tag for MoarVM that you can bump F to. Release tags for MoarVM have the format C<2014.02>. Find all of the tags with C in an up-to-date MoarVM checkout. =item 2. Change the C file in nqp: $ echo '2012.12' > VERSION $ git commit -m 'bump VERSION to 2012.12' VERSION $ git push =item 3. Make sure everything compiles and runs from a known clean state. This step is especially important if C and/or C were changed in step 1 above. Don't forget to build the JVM backend, as well. $ make realclean $ perl Configure.pl --gen-parrot --gen-moar --backend=parrot,moar,jvm $ make $ make m-test $ make j-test Resolve any problems that may still exist. You may want to try building each backend separately if a problem occurs building all backends at the same time. =item 4. Create a release tarball (needed for the Rakudo Star release) by entering C, where YYYY.MM is the month for which the release is being made. This will create a tarball file named C. Note: for some reason, this functionality only exists in the parrot Makefile. =item 5. Unpack the tar file into another area, and test that it builds and runs properly using the same process in step 3 above. If there are any problems, fix them and go back to step 3. =item 6. Tag NQP by its release month ("YYYY.MM") $ git tag -u -s -a -m"tag release YYYY.MM" YYYY.MM # e.g., 2012.12 $ git push --tags The C<-s> tells git to sign the tag with your GPG key. Please see rakudo's release guide for links on how to create GPG keys, should it be necessary. =item 7. Sign the tarball: $ gpg -b --armor nqp-YYYY.MM.tar.gz =item 8 Upload the release tarball and signature to L: $ scp nqp-2013.12.tar.gz nqp-2013.12.tar.gz.asc \ rakudo@rakudo.org:public_html/downloads/nqp/ If you do not have permissions for that, ask one of (pmichaud, jnthn, FROGGS, masak, tadzik, moritz, PerlJam, [Coke], lizmat, timotimo, fsergot) on #perl6 to do it for you. =item 9. If creating the NQP release as part of a Rakudo release, continue with the Rakudo release process. =back nqp-2015.11/docs/serialization_format.markdown000644 000765 000024 00000043541 12534342605 023366 0ustar00williamcoledastaff000000 000000 # Serialization Format ## Header The header contains a version, followed by offsets (from the start of the data blob) where various tables can be located. +---------------------------------------------------------+ | Version | | 32-bit integer | +---------------------------------------------------------+ | Offset (from start of data) of the dependencies table | | 32-bit integer | +---------------------------------------------------------+ | Number of entries in the dependencies table | | 32-bit integer | +---------------------------------------------------------+ | Offset (from start of data) of the STables table | | 32-bit integer | +---------------------------------------------------------+ | Number of entries in the STables table | | 32-bit integer | +---------------------------------------------------------+ | Offset (from start of data) of the STables data | | 32-bit integer | +---------------------------------------------------------+ | Offset (from start of data) of the objects table | | 32-bit integer | +---------------------------------------------------------+ | Number of entries in the objects table | | 32-bit integer | +---------------------------------------------------------+ | Offset (from start of data) of the objects data | | 32-bit integer | +---------------------------------------------------------+ | Offset (from start of data) of the closures table | | 32-bit integer | +---------------------------------------------------------+ | Number of entries in the closures table | | 32-bit integer | +---------------------------------------------------------+ | Offset (from start of data) of the contexts table | | 32-bit integer | +---------------------------------------------------------+ | Number of entries in the contexts table | | 32-bit integer | +---------------------------------------------------------+ | Offset (from start of data) of the contexts data | | 32-bit integer | +---------------------------------------------------------+ | Offset (from start of data) of the repossessions table | | 32-bit integer | +---------------------------------------------------------+ | Number of entries in the repossessions table | | 32-bit integer | +---------------------------------------------------------+ | Offset (from start of data) of the parameterization | | interns data | | 32-bit integer | +---------------------------------------------------------+ | Number of entries in the parameterization intern data | | 32-bit integer | +---------------------------------------------------------+ ## Dependencies Table This table describes the Serialization Contexts (SC) that are required to already be loaded in order to load this one. The number of entries this table has, is supplied by the header. Each entry looks as follows. +---------------------------------------------------------+ | Index into the string heap of the SC unique ID | | 32-bit integer | +---------------------------------------------------------+ | Index into the string heap of the SC description | | 32-bit integer | +---------------------------------------------------------+ ## STables Table This table describes the 6model STables that have been serialized. Each entry contains the following items. +---------------------------------------------------------+ | Index into the string heap a string holding the name of | | the representation (REPR) that this STable points to. | | 32-bit integer | +---------------------------------------------------------+ | Offset from the start of the STable data chunk where | | the data for this STable has been serialized | | 32-bit integer | +---------------------------------------------------------+ | Offset from the start of the STable data chunk where | | the REPR data for this STable has been serialized (you | | can get there by reading everything from the previous | | offset, but it may not be efficient if you want to get | | an idea of the object size first) | | 32-bit integer | +---------------------------------------------------------+ ## STables Data The STable is serialized just by a sequence of primitives, in the following order. * HOW (object reference) * WHAT (object reference) * WHO (variant) * method_cache (VM hash) * vtable_length (native int) * \[each of the items\] (variant) * type_check_cache_length (native int) * \[each of the items in type_check_cache\] (object reference) * mode_flags (native int) * boolification_spec (native int flag for if it exists; if true, then a native int for the mode and a ref for the method slot) * container_spec (native int flag for if it exists; if true, then ref/string/int for the attribute and ref for the fetch method) * invocation_spec (native int flag for if it exists; if true, then ref for class handle, str for attr name, int for hint and ref for invocation handler) After this, the REPR data is serialized (which is specific to the REPR in question). ## Objects Table This table describes the objects that have been serialized. Each entry contains the following items. +---------------------------------------------------------+ | Base-1 index of the SC that contains the STable for the | | context, or 0 if it is in the current SC. | | 32-bit integer | +---------------------------------------------------------+ | Index in the SC where the STable can be located. | | 32-bit integer | +---------------------------------------------------------+ | Offset from the start of the object data chunk where | | the data for this object has been serialized | | 32-bit integer | +---------------------------------------------------------+ | Flags. Currently, just 1 if it's a normal object and 0 | | if it is a type object. | | 32-bit integer | +---------------------------------------------------------+ The exact data stored for an object is up to its representation. ## Closures Table This table describes the closures we have taken during compilation and that need to be re-instated during deserialization, along with references to their relevant outer contexts. +---------------------------------------------------------+ | Base-1 index of the SC that contains the static code | | reference that this closure is a clone of, or 0 if it | | is in the current SC. | | 32-bit integer | +---------------------------------------------------------+ | Index in that SC where the static code ref is located. | | 32-bit integer | +---------------------------------------------------------+ | 1-based index into the contexts table where the outer | | context for this closure can be found, or zero if there | | is none of interest | | 32-bit integer | +---------------------------------------------------------+ | Flag for if the closure has an associated code object. | | 32-bit integer | +---------------------------------------------------------+ | If it has one, this is the 1-based SC index of the code | | object, or 0 if in the current SC. | | 32-bit integer | +---------------------------------------------------------+ | If it has one, this is the index in that SC where the | | code object can be located. | | 32-bit integer | +---------------------------------------------------------+ ## Contexts Table This table describes the contexts that exist as outer scopes for closures taking during compilation. +---------------------------------------------------------+ | Base-1 index of the SC for the code ref the context is | | associated with, or 0 if it is in the current SC. | | 32-bit integer | +---------------------------------------------------------+ | Index in that SC where the code ref is located. | | 32-bit integer | +---------------------------------------------------------+ | Offset into the contexts data segment where the values | | for the various lexical entries may be found | | 32-bit integer | +---------------------------------------------------------+ | 1-based index into the contexts table where the next | | outer context in the chain can be found, or zero if | | there is none | | 32-bit integer | +---------------------------------------------------------+ ## Repossessions Table This table describes the objects serialized in this SC that were originally owned by another SC, but were taken over by this one due to being modified while it was being compiled. +---------------------------------------------------------+ | Repossessed entity type (0 = object, 1 = STable) | | 32-bit integer | +---------------------------------------------------------+ | Index in our object list where the repossessed object | | is located | | 32-bit integer | +---------------------------------------------------------+ | Base-1 index of the SC that used to own the object (0 | | is not legal here) | | 32-bit integer | +---------------------------------------------------------+ | Index in that SC where the original object is located. | | 32-bit integer | +---------------------------------------------------------+ ## Parameterization Interning Data Parameterized types are interned in a VM instance, meaning that if we deserialize two compilation units that have both serialized identical parameterizations, we will allow the first unit's parameterization to "win". The data in this section of the serialization blob identifies types whose STables and type objects are subject to this interning. This section exclusively contains entries meeting the following rules: * The parametric type must be from another SC * All the parameters must be objects from another SC Each entry starts as follows: +---------------------------------------------------------+ | Base-1 index of the SC that owns the parametric type | | (this is the type that was parameterized to get the one | | we're dealing with the interning of). A value of 0 is | | invalid, as that would imply the current SC. | | 32-bit integer | +---------------------------------------------------------+ | Index in that SC where the parametric type's type | | object can be found | | 32-bit integer | +---------------------------------------------------------+ | Index in our object list where the type object we may | | intern is located. | | 32-bit integer | +---------------------------------------------------------+ | Index in our STable list where the STable we may intern | | is located. | | 32-bit integer | +---------------------------------------------------------+ | The number of parameters in this parameterization | | 32-bit integer | +---------------------------------------------------------+ Following this, for each parameter an object reference is written. ## Primitives This section describes how the various primitive types known to the serializer are stored. ### Native Integers These are stored as 64-bit integers. ### Native Numbers These are stored as 64-bit floating point numbers (doubles). ### Strings These are stored as 32-bit indexes into the strings heap. ### Variant Reference Most times we have a pointer to serialize, we will use a variant reference to do so. The reason being that 1 = NULL 2 = Object reference 3 = VM NULL 4 = VM Boxed Integer 5 = VM Boxed Number 6 = VM Boxed String 7 = VM Array of Variant References 8 = VM Array of Strings 9 = VM Array of Integers 10 = VM Hash of Variant References with String Keys 11 = VM Static Code Reference 12 = VM Cloned Code Reference (a serialized closure) ### Object references These are stored as a 32-bit SC index (base 1 into the dependencies table, or 0 for current SC), followed by a 32-bit index into the selected SC. ### VM NULL We store no extra info for those. ### VM Array of Variants These are stored as an element count as a 32-bit integer, followed by the variants. ### VM Array of Strings These are stored as an element count, followed by the string heap indexes. ### VM Array of Integers These are stored as an element count, followed by the 64-bit integers. ### VM Hash of Variants with String Keys These are stored as an element count. This is followed by that number of string/variant pairs. ### Code References These are always serialized as the SC containing the code reference, plus the index where it can be located. ### VM Static Code Reference The simplest case of code referenced from objects is when the VM has never had to invoke the code during compilation. In this case, the thunk for the dynamic compilation will have been tagged with a STATIC_CODE_REF property and placed into the SC for the current compilation unit. When we encounter such a case, we simply serialize the SC that owns the code object and the code ref index that it is at. Deserialization relies on the deserializer being given a fixed up list of code objects, pointing to the compiled code refs. These are indexed just as the dynamic compilation stubs were, so references to them can be resolved. This also works out in the cross-context case. ### Dynamic Compilation When dynamic compilation is performed, the SC should be updated with the code ref to the now-compiled code. Additionally, this needs to be tagged as a static code reference (and will also be tagged with the SC in question). In the simplest case, we'll never end up referencing this execution of the code - but if closures are taken pointing to it, this will happen, and needs some special handling. ### Closures If we encounter a code object that is not marked as static, but already has been given an SC, then we can simply write the reference out in just the same way as we would for a static code object. This means something has already taken care of the hard work. They are deserializable in a similar way. The interesting part comes when we encounter a code ref that hasn't been tagged with an SC yet. First, we trace back from it to the correct static code ref (probably via the reference back to the static code ref that's held in the static lexical scope info). We make an entry in the closures table indicating the static code ref that needs to be cloned in order to start recreating the closure. Next, we consider the outer. There are two things involved here. One is the context, which represents the lexicals declared in that context. The second is the code object that is associated with the outer. There are some options for this. 1) The outer points to a dynamic compilation boundary (tagged DYN_COMP_BOUNDARY). This means that it is a "fake" frame that exists because the outer scopes beyond here were not done compiling at the point of invocation. We thus don't want to actually do any serialization of this context. 2) The outer points to no interesting outer whatsoever, and represents the point that we should stop doing any serialization. It will be tagged UNIT_BOUNDARY. 3) The outer points to a context with lexicals values that need to be serialized. In this case, it may be an invocation from the static code reference, or it may be an invocation from another closure. nqp-2015.11/dynext/IGNOREME000644 000765 000024 00000000021 12534342605 017072 0ustar00williamcoledastaff000000 000000 Ignoration FAIL. nqp-2015.11/examples/CallFromJava.java000644 000765 000024 00000002733 12534342605 021425 0ustar00williamcoledastaff000000 000000 // nqp$ javac -cp bin/ examples/CallFromJava.java // nqp$ java -cp nqp-runtime.jar:3rdparty/asm/asm-4.1.jar:3rdparty/asm/asm-tree-4.1.jar:. examples.CallFromJava nqp.jar nqp 'say(2+2)' // 4 // rakudo$ java -cp ../nqp-jvm:../nqp-jvm/3rdparty/asm/asm-4.1.jar:../nqp-jvm/3rdparty/asm/asm-tree-4.1.jar:../nqp-jvm/nqp-runtime.jar:rakudo-runtime.jar:. examples.CallFromJava perl6.jar perl6 'say 2 + 2' // 4 // Note: curently nqp only functions properly in the application class path. package examples; import org.perl6.nqp.runtime.*; import static org.perl6.nqp.runtime.CallSiteDescriptor.*; import org.perl6.nqp.sixmodel.*; public class CallFromJava { private GlobalContext g; private ThreadContext t; private SixModelObject nqpComp; private CallFromJava(String bytecode, String hll) { g = new GlobalContext(); t = g.getCurrentThreadContext(); Ops.loadbytecode(bytecode, t); nqpComp = Ops.getcomp(hll, t); } private SixModelObject eval(String nqp) { Ops.invokeDirect(t, Ops.findmethod(t, nqpComp, "compile"), new CallSiteDescriptor(new byte[] { ARG_OBJ, ARG_STR }, null), new Object[] { nqpComp, nqp }); Ops.invokeDirect(t, Ops.result_o(t.resultFrame()), Ops.emptyCallSite, Ops.emptyArgList); return Ops.result_o(t.resultFrame()); } public static void main(String[] args) { CallFromJava nqp = new CallFromJava(args[0], args[1]); nqp.eval(args[2]); } } nqp-2015.11/examples/fib.nqp000644 000765 000024 00000000340 12534342605 017531 0ustar00williamcoledastaff000000 000000 #! nqp sub fib($n) { $n < 2 ?? $n !! fib($n-1) + fib($n - 2); } my $N := 29; my $t0 := nqp::time_n(); my $z := fib($N); my $t1 := nqp::time_n(); nqp::say("fib($N) = " ~ fib($N)); nqp::say("time = " ~ ($t1-$t0)); nqp-2015.11/examples/hello_world.nqp000644 000765 000024 00000000066 12534342605 021310 0ustar00williamcoledastaff000000 000000 #!nqp say("Hello, awesome Not Quite Perl 6 World!"); nqp-2015.11/examples/json.nqp000644 000765 000024 00000005011 12534342605 017742 0ustar00williamcoledastaff000000 000000 #! nqp # A JSON compiler written in NQP. To use this compiler, first # precompile the code to PIR, then run that: # # $ nqp --target=pir json.nqp >json.pir # $ parrot json.pir # # It can then be turned into a .pbc to be available as load_language: # # $ parrot -o json.pbc json.pir # $ cp json.pbc /lib//languages # use NQPHLL; grammar JSON::Grammar is HLL::Grammar { rule TOP { } proto token value { <...> } token value:sym { } token value:sym { '-'? [ <[1..9]> <[0..9]>+ | <[0..9]> ] [ '.' <[0..9]>+ ]? [ <[Ee]> <[+\-]>? <[0..9]>+ ]? } rule value:sym { '[' [ + %',' ]? ']' } rule value:sym { '{' [ [ ':' ]+ %',' ]? '}' } token string { } } class JSON::Actions is HLL::Actions { method TOP($/) { make PAST::Block.new($.ast, :node($/)); }; method value:sym($/) { make $.ast; } method value:sym($/) { make +$/; } method value:sym($/) { my $past := PAST::Op.new(:pasttype, :node($/)); if $ { for $ { $past.push($_.ast); } } make $past; } method value:sym($/) { my $past := PAST::Stmts.new( :node($/) ); my $hashname := PAST::Compiler.unique('hash'); my $hash := PAST::Var.new( :scope, :name($hashname), :viviself('Hash'), :isdecl ); my $hashreg := PAST::Var.new( :scope, :name($hashname) ); $past.'push'($hash); # loop through all string/value pairs, add set opcodes for each pair. my $n := 0; while $n < +$ { $past.'push'(PAST::Op.new( :pirop, $hashreg, $[$n].ast, $[$n].ast ) ); $n++; } # return the Hash as the result of this node $past.'push'($hashreg); make $past; } method string($/) { make $.ast; } } class JSON::Compiler is HLL::Compiler { method autoprint($value) { _dumper($value, 'JSON') unless (pir::getinterp__P()).stdhandle(1).tell > $*AUTOPRINTPOS; } } sub MAIN(*@ARGS) { my $json := JSON::Compiler.new; $json.language('json'); $json.parsegrammar(JSON::Grammar); $json.parseactions(JSON::Actions); $json.command_line(@ARGS); } nqp-2015.11/examples/loops.nqp000644 000765 000024 00000000133 12534342605 020125 0ustar00williamcoledastaff000000 000000 #! nqp # Example of a while loop my $i := 0; while $i < 10 { say("i=$i"); $i++; } nqp-2015.11/examples/rubyish/README.md000644 000765 000024 00000007354 12534342605 021231 0ustar00williamcoledastaff000000 000000 nqp/examples/rubyish ==================== Ruby subset extended from the `rubyish-4` example, as introduced in the Edument [Rakudo and NQP internals course](https://github.com/edumentab/rakudo-and-nqp-internals-course). Example usage: ``` % nqp-p rubyish.nqp -e'puts "Hello World!"' % nqp-p rubyish.nqp examples-rubyish/template.rbi % nqp-p rubyish.nqp # repl mode > puts 37 + 5 ``` Implemented: - simple strings 'Hello World!' %q{...} - interpolating strings: "number #{37+5}" %Q{Hello #{planet}!} - quoted words: `%w[aa bb cc]` - basic scoping, including $globals and class @attribute variables - conditional blocks: `if ... then ... elsif ... else ... endif`, `unless..end` - nqp opcode calls: `nqp::sleep(5)` - a few built-ins: `abort`, `print`, `puts`, `sleep` - a couple of methods: `.call` and `.nil?` - infixish assignments: `+=` `-=` `*=` ... - simple classes and objects with attributes. - method inheritance (no mixins yet) - see [inheritance.t](t/inheritance.t) - `while` and `until` loops - statement modifiers `if` `unless`, `while`, `until` e.g.: `puts 42 if true` - basic arrays and hashes - for loops on arrays: `for val in [10, 20, 30] do puts val end` - for loops on hash pairs: `h = {'a'=>10, 'b'=>20}; for kv in h do puts value k end` - lambda blocks/closures: `def make_counter(n,incr) ; n-=incr; lambda { n += incr }; end` - lightweight eRuby like templating, see [template.rbi](examples-rubyish/template.rbi) - heredocs, literal `< puts 42 To run tests: ``` % prove -v -e'nqp-p rubyish.nqp' t ``` Strings and truth values are Perlish rather than Rubyish: - `+` always does addition (doesn't concatenate strings) - `~` has been introduced as the concatenation operator - `>`, `==`, `<=` ... only do arithmetic comparisons - `gt`, `eq`, `le` ... do string comparisons - 0, '0', '' are false in a boolean context. - hash dereferencing is via angle braces: `puts fruit` or curlies `puts fruit{'bananas'}` hash iteration is by pairs. The `key` and `value` built-ins are used for dereferencing ``` for item in {"apples" => 20, "bananas" => 35, "potatos" => 12} puts" #{key item} are #{value item} cents per Kg" end ``` nqp op-codes can be called like regular functions. E.g. ``` puts nqp::if(2+2 == 4, 'yup', 'nope' ) def sprintf(fmt, *args) ; nqp::sprintf(fmt, args) ; end puts sprintf("pid=%s time=%d", nqp::getpid, nqp::time_i) ``` this includes nqp control-flow functions: ``` n = 99 nqp::while n > 0, begin puts "#{n} green bottles standing on the wall" puts "#{n} green bottles standing on the wall" puts "and if one green bottle should accidently fall..." nqp::sleep 1 n -= 1 puts "there'd be #{n} green bottles standing on the wall" nqp::sleep 2 end ``` Rubyish does a limited amout of context sensitive parsing, E.g. ``` yy = 37 puts yy -5 # parsed as an expression; output is 32 def xx(n) ; 37 - n; end puts xx -5 # parsed as a function call; output is 42 ``` This only works only if the functions and methods have been previously declared. If in doubt, use parenthesis for function calls, `capitalize(name)` vs `capitalize name`; and make method calls explicit, `self.fibonacci(n - 1)` vs `fibonacci(n - 1)`. nqp-2015.11/examples/rubyish/examples-rubyish/closure.rbi000644 000765 000024 00000000431 12534342605 025412 0ustar00williamcoledastaff000000 000000 def gen_times(factor) lambda {|n| n*factor } end times3 = gen_times(3) # 'factor' is replaced with 3 times5 = gen_times(5) puts "3 X 12 = #{times3.call( 12 )}" puts "5 X 5 = #{times5.call( 5 )}" puts "3 X (5 X 4) = #{times3.call( times5.call(4) )}" nqp-2015.11/examples/rubyish/examples-rubyish/fractal-tree.rbi000644 000765 000024 00000002143 12534342605 026311 0ustar00williamcoledastaff000000 000000 <%# # Fractal tree rubyish example. Usage: # % nqp-p rubyish.nqp examples-rubyish/fractal-tree.rbi > fractal.svg # %> <%#---------- def cos(a); nqp::cos_n(a); end def sin(a); nqp::sin_n(a); end @scale = 0.66 @PI = 3.1415926535 @eps = 2.0 def tree(x1, y1, len, angle = 1.5 * @PI) x2 = x1 + len * cos(angle) y2 = y1 + len * sin(angle) sw = len > 20? len / 10 : 2; g = len < @eps*2? 210: 20; puts " " if (len *= @scale) >= @eps then tree(x2, y2, len, angle + 0.2*@PI); tree(x2, y2, len, angle - 0.2*@PI); end end width = 1000 height = 850 tree(x1=width/2, y1=height, length=300) #-----------%> nqp-2015.11/examples/rubyish/examples-rubyish/pi.rbi000644 000765 000024 00000000771 12534342605 024355 0ustar00williamcoledastaff000000 000000 # naive approximation: pi = 4 * (1 - /1/3 + 1/5 ...) LIMIT = 50000 def time() ; nqp::time_n() ; end def sprintf(fmt, *args) ; nqp::sprintf(fmt, args) ; end pi_over_4 = 0.0 print 'hang on a few moments...' start_time = time() # sum terms in reverse order to reduce accumulated error n = LIMIT; while n > 0 do m = 4.0*n - 1.0 pi_over_4 += 1/(m - 2) - 1/m n -= 1 end puts sprintf("(completed %d iterations in %.2f sec)", LIMIT, time() - start_time) pi = pi_over_4 * 4 puts pi nqp-2015.11/examples/rubyish/examples-rubyish/template.rbi000644 000765 000024 00000002104 12534342605 025550 0ustar00williamcoledastaff000000 000000 # eRubyish templating - see http://en.wikipedia.org/wiki/ERuby # There are only three directives: # - Header; remainder of the source file is the template body # <% ... %> - rubyish statements # #{ ... } - inserted content # Any arbritrary code can appear before the template. Output to stdout # is appended to the template, both before and within the template body puts %q{}

Green Bottles...

<%n = 10 %> <%while n > 0 %>
#{n} green bottles standing on the wall, #{n} green bottles standing on the wall
<%# -- gratuitous use of puts ------------------------------ %> <%puts %q{and if one green bottle should accidently fall...} %>
<%n -= 1 %> there'd be #{if n then n else 'no' end} green bottles standing on the wall
<%end%> nqp-2015.11/examples/rubyish/rubyish.nqp000644 000765 000024 00000074125 12534342605 022157 0ustar00williamcoledastaff000000 000000 use NQPHLL; # Ruby subset extended from the `rubyish` example, as introduced in the # Edument Rakudo and NQP internals course. my %CLASSES; class RubyishClassHOW { has $!name; has $!isa; has %!methods; method new_type(:$name!, :$isa?) { nqp::die("duplicate class definition: $name") if %CLASSES{ $name }; my $obj := self.new(:$name, :$isa); %CLASSES{ $name } := [$obj]; nqp::newtype($obj, 'HashAttrStore'); } method add_method($obj, $name, $code) { nqp::die("This class already has a method named " ~ $name) if nqp::existskey(%!methods, $name); %!methods{$name} := $code; } method find_method($obj, $name) { my $method; if nqp::substr($name, 0, 1) eq '^' { # '^' prefix indicates a superclass lookup $name := nqp::substr($name, 1); } else { $method := %!methods{$name}; } if !$method && $!isa { my $super := %CLASSES{ $!isa }; nqp::die("unresolved super-class: " ~ $!isa) unless $super; $method := $super[0].find_method( $obj, $name); } $method // nqp::null(); } } grammar Rubyish::Grammar is HLL::Grammar { token TOP { :my $*CUR_BLOCK := QAST::Block.new(QAST::Stmts.new()); :my $*TOP_BLOCK := $*CUR_BLOCK; :my $*CLASS_BLOCK := $*CUR_BLOCK; :my $*IN_TEMPLATE := 0; :my $*IN_PARENS := 0; :my %*SYM; # symbols in current scope :my %*SYM-GBL; # globals and package variables :my %*SYM-CLASS; # class-inherited methods ^ ~ $ || <.panic('Syntax error')> } rule separator { ';' | \n } token continuation { \\ \n } rule stmtlist { [ ? ] *%% [<.separator>|] } token stmtish {:s [ ]? } token modifier {if|unless|while|until} proto token stmt {*} token stmt:sym {:s :my %sym-save := nqp::clone(%*SYM); :my $*DEF; 'def' ~ 'end' { %sym-save{$*DEF} := %*SYM{$*DEF}; %*SYM := %sym-save; } } rule defbody { :my $*CUR_BLOCK := QAST::Block.new(QAST::Stmts.new()); { $*DEF := ~$; if $*IN_CLASS { %*SYM{$*DEF} := 'method'; %*SYM := 'var'; } else { %*SYM{$*DEF} := 'func'; } } ['(' ~ ')' ?]? ? } rule comma { [','|'=>'] } rule signature { :my $*IN_PARENS := 1; [ | '*' | '&' ] +% ',' } token param {:s [ $=':' ? | '=' ]? { %*SYM{~$} := 'var' } } token stmt:sym { :my $*IN_CLASS := 1; :my @*METHODS; :my %sym-save := nqp::clone(%*SYM); [ \h+] ~ [\h* 'end'] { %*SYM := %sym-save } } rule classbody { :my $*CUR_BLOCK := QAST::Block.new(QAST::Stmts.new()); :my $*CLASS_BLOCK := $*CUR_BLOCK; { $*CLASS_BLOCK.name(~$) } [ '<' { inherit-syms(~$) } ]? { %*SYM-CLASS{~$} := %*SYM; } } token stmt:sym { } token term:sym {:s '=' } token code-block {:s :my $*CUR_BLOCK := QAST::Block.new(QAST::Stmts.new()); } our %builtins; BEGIN { %builtins := nqp::hash( 'abort', 'die', 'exit', 'exit', 'key', 'iterkey_s', 'delete', 'deletekey', 'value', 'iterval', 'print', 'print', 'puts', 'say', 'sleep', 'sleep', ); } token term:sym { ['(' ~ ')' ? ? |:s )}> ? ] } token term:sym { 'super' ['(' ~ ')' ? ? |:s ? ] [ || <.panic("'super' call outside of method")> ] } token term:sym { 'nqp::' ['(' ~ ')' ? | ? ] } token term:sym { \%w } token call-args {:s [ ] +% ',' } proto token arg {*} token arg:sym {:s '|':']> } token arg:sym { '&' } token arg:sym { ':' } token arg:sym {:s [ '=>' ]+ % ',' } token paren-args {:my $*IN_PARENS := 1; } token operation {[\!|\?]?} token term:sym { ['new' \h+ | '.' 'new'] ['(' ~ ')' ?]? } token var { :my $*MAYBE_DECL := 0; \+? $=[ $=[ \$ | \@ ] | [ ? '::' ]? > || \( ]> ] [ { $*MAYBE_DECL := 1 }> || ) || ~$ eq '@' }> || ) }> <.panic("unknown variable or method: $")> ] } token term:sym { } token term:sym { \+? } proto token value {*} token value:sym {} token strings {:s ? } token string { | | \%[ q | Q ] } token value:sym {'<<'} proto token heredoc {*} token heredoc:sym {[$=<.ident> | \' $=<- [\' \n]>+? \' ]\n $=.*? \n$$$ } token heredoc-line {\n? [ \N]+ | \n } token heredoc:sym {\" $=<- [\" \n]>+? \"\n [ | ]*? \n$$$ } token paren-list { :my $*IN_PARENS := 1; *%% } token value:sym { \d+ } token value:sym { \d* '.' \d+ } token value:sym {'[' ~ ']' } token value:sym {'{' ~ '}' } token value:sym { } token value:sym { } token value:sym { } # Interpolation token interp { '#{' ~ '}' [ [:s ] || ] } token quote_escape:sym<#{ }> { } # Reserved words. token keyword { [ BEGIN | class | ensure | nil | new | when | END | def | false | not | super | while | alias | defined | for | or | then | yield | and | do | if | redo | true | begin | else | in | rescue | undef | break | elsif | module | retry | unless | case | end | next | return | until | eq | ne | lt | gt | le | ge | cmp ] } INIT { # Operator precedence levels # see http://www.tutorialspoint.com/ruby/ruby_operators.htm # y: ** Rubyish::Grammar.O(':prec, :assoc', '%exponentiation'); # x: ! ~ + - (unary) Rubyish::Grammar.O(':prec, :assoc', '%unary'); # w: * / % Rubyish::Grammar.O(':prec, :assoc', '%multiplicative'); # u: + - Rubyish::Grammar.O(':prec, :assoc', '%additive'); # t: >> << Rubyish::Grammar.O(':prec, :assoc', '%bitshift'); # s: & Rubyish::Grammar.O(':prec, :assoc', '%bitand'); # r: ^ | Rubyish::Grammar.O(':prec, :assoc', '%bitor'); # q: <= < > >= le lt gt ge Rubyish::Grammar.O(':prec, :assoc', '%comparison'); # n: <=> == === != =~ !~ eq ne cmp Rubyish::Grammar.O(':prec, :assoc', '%equality'); # l: && Rubyish::Grammar.O(':prec, :assoc', '%logical_and'); # k: || Rubyish::Grammar.O(':prec, :assoc', '%logical_or'); # q: ?: Rubyish::Grammar.O(':prec, :assoc', '%conditional'); # f: = %= { /= -= += |= &= >>= <<= *= &&= ||= **= Rubyish::Grammar.O(':prec, :assoc', '%assignment'); # e: not (unary) Rubyish::Grammar.O(':prec, :assoc', '%loose_not'); # c: or and Rubyish::Grammar.O(':prec, :assoc', '%loose_logical'); } # Operators - mostly stolen from NQP token infix:sym<**> { ')> } token prefix:sym<-> { ]> ')> } token prefix:sym { ')> } token infix:sym<*> { ')> } token infix:sym { ')> } token infix:sym<%> { ]> ')> } token infix:sym<+> { ')> } token infix:sym<-> { ')> } token infix:sym<~> { ')> } token infix:sym«<<» { ')> } token infix:sym«>>» { ')> } token infix:sym<&> { ')> } token infix:sym<|> { ')> } token infix:sym<^> { ')> } token infix:sym«<=» { ]> ')> } token infix:sym«>=» { ')> } token infix:sym«<» { ')> } token infix:sym«>» { ')> } token infix:sym«le» { ')> } token infix:sym«ge» { ')> } token infix:sym«lt» { ')> } token infix:sym«gt» { ')> } token infix:sym«==» { ')> } token infix:sym«!=» { ')> } token infix:sym«<=>» { ')> } token infix:sym«eq» { ')> } token infix:sym«ne» { ')> } token infix:sym«cmp» { ')> } token infix:sym<&&> { ')> } token infix:sym<||> { ')> } token infix:sym {:s '?' ':' , :op')> } token bind-op {'=']>} token infix:sym<=> { <.bind-op> ')> } token prefix:sym { ')> } token infix:sym { ')> } token infix:sym { ')> } # Parenthesis token circumfix:sym<( )> { :my $*IN_PARENS := 1; '(' ~ ')' } # Method call token postfix:sym<.> { '.' [ '(' ~ ')' ? ]? } # Array and hash indices token postcircumfix:sym<[ ]> { '[' ~ ']' [ ] } token postcircumfix:sym<{ }> { '{' ~ '}' [ ] } token postcircumfix:sym { } # Statement control rule xblock {:s [ 'then'? | 'then' | >] } token stmt:sym {:s $=[if|unless] ~ 'end' [ [|]? ] } token elsif {:s 'elsif' ~ [|]? } token else {:s 'else' } token stmt:sym {:s $=[while|until] } token stmt:sym {:s 'in' { %*SYM{~$} := 'var' } } token do-block { ~ 'end' } token do {:s 'do'? | 'do' | > } token term:sym { 'begin' ~ 'end' } token closure {:s ['{' ['|' ~ '|' ?]? ] ~ '}' |:s ['do' ['|' ~ '|' ?]? ] ~ 'end' } token closure2 {:s ['(' ~ ')' ? ]? '{' ~ '}' } token term:sym {:s :my $*CUR_BLOCK := QAST::Block.new(QAST::Stmts.new()); ['lambda' | '->' ] } # Comments and whitespace proto token comment {*} token comment:sym { '#' [ \N* || [>\N]*] } token comment:sym {[^^'=begin'\n] [ .*? [^^'=end'[\n|$]] || <.panic('missing ^^=end at eof')>] } token ws { [\h | <.continuation> | <.comment> | \n]* } token hs { [\h | <.continuation> ]* } # Templates token template-chunk { [|] ~ [|$] * } proto token template-nibble {*} token template-nibble:sym { } token template-nibble:sym { [<.tmpl-unesc>|<.tmpl-hdr>] <.panic("Stray tag, e.g. '%>' or ''")> } token template-nibble:sym { [|'#{'|$]> .]+ } token tmpl-hdr {'' \h* \n? {$*IN_TEMPLATE := 1} } token tmpl-esc {\h* '<%' [ || <.panic('Template directive precedes ""')>] } token tmpl-unesc { '%>' \h* \n? [ || <.panic('Template directive precedes ""')>] } # Functions sub callable($op) { my $type := %*SYM{$op} // (%builtins{$op} && 'func'); $type && ($type eq 'func' || $type eq 'method'); } sub variable($op) { my $type := %*SYM{$op} // %*SYM-GBL{$op}; $type && ($type eq 'var'); } sub inherit-syms($class) { if my %syms := %*SYM-CLASS{$class} { %*SYM{$_} := %syms{$_} for %syms; } } } class Rubyish::Actions is HLL::Actions { method TOP($/) { $*CUR_BLOCK.push($.ast); make QAST::CompUnit.new( $*CUR_BLOCK ); } method stmtlist($/) { my $stmts := QAST::Stmts.new( :node($/) ); $stmts.push($_.ast) for @; make $stmts; } method stmtish($/) { make $ ?? QAST::Op.new( $.ast, $.ast, :op(~$), :node($/) ) !! $.ast; } method term:sym($/) { make $.ast; } method code-block($/) { make $.ast } method term:sym($/) { my $name := ~$; my $op := %Rubyish::Grammar::builtins{$name}; my $call; if $op { $call := QAST::Op.new( :op($op) ) } elsif %*SYM{$name} eq 'method' && $*DEF { $call := QAST::Op.new( :op('callmethod'), QAST::Var.new( :name('self'), :scope('lexical')), QAST::SVal.new( :value($name) ), ); } else { $call := QAST::Op.new( :op('call'), :name($name) ); } if $ { $call.push($_) for $.ast; } $call.push( $.ast ) if $; make $call; } method term:sym($/) { my $name := ~$*DEF; my $call := QAST::Op.new( :op('callmethod'), QAST::Var.new( :name('self'), :scope('lexical')), QAST::SVal.new( :value('^' ~ $name) ), ); if $ { $call.push($_) for $.ast; } $call.push( $.ast ) if $; make $call; } method term:sym($/) { my $op := ~$; my $call := QAST::Op.new( :op($op) ); if $ { $call.push($_) for $.ast; } make $call; } method call-args($/) { my @args; @args.push($_.ast) for $; make @args; } method arg:sym($/) { make $.ast } method arg:sym($/) { make $.ast } method arg:sym($/) { my $arg := $.ast; $arg.named( ~$ ); make $arg; } method arg:sym($/) { my $args := QAST::Op.new( :op ); $args.push( $_.ast ) for $; make $args; } method paren-args($/) { make $.ast; } method term:sym($/) { my $tmp-obj := '$new-obj$'; my $init-call := QAST::Op.new( :op, :name, QAST::Var.new( :name($tmp-obj), :scope ) ); if $ { $init-call.push($_) for $.ast; } my $init-block := QAST::Block.new( QAST::Stmts.new( # pseudo-code: # # def new(*call-args) # $new-obj$ = Class.new; # if call-args then # # always try to call initialize, when new has arguments # $new-obj$.initialize(call-args) # else # $new-obj$.initialize() \ # if $new-obj$.can('initialize') # end # return $new-obj$ # end # create the new object QAST::Op.new( :op('bind'), QAST::Var.new( :name($tmp-obj), :scope, :decl), QAST::Op.new( :op('create'), QAST::Var.new( :name('::' ~ ~$), :scope('lexical') ) ), ), # call initialize method, if available ($ ?? $init-call !! QAST::Op.new( :op, QAST::Op.new( :op, QAST::Var.new( :name($tmp-obj), :scope ), QAST::SVal.new( :value )), $init-call, ) ), # return the new object QAST::Var.new( :name($tmp-obj), :scope ), )); $init-block.blocktype('immediate'); make $init-block; } method var($/) { my $sigil := ~$ // ''; my $name := ~$; if $sigil eq '@' && $*IN_CLASS && $*DEF { # instance variable, bound to self my $package-name := $*CLASS_BLOCK.name; make QAST::Var.new( :name($name), :scope('attribute'), QAST::Var.new( :name('self'), :scope('lexical')), QAST::SVal.new( :value($package-name) ) ); } else { if $ { my $ns := $ ?? ~$ !! $*CLASS_BLOCK.name; $name := $ns ~ '::' ~ $; } if $*MAYBE_DECL { my $block; my $decl := 'var'; if $sigil eq '$' || $ { $block := $*TOP_BLOCK; %*SYM-GBL{$name} := 'var'; %*SYM{~$} := 'var' if $; } elsif $sigil eq '@' { $block := $*CLASS_BLOCK; } else { $block := $*CUR_BLOCK; } my %sym := $block.symbol($name); if !%sym { %*SYM{$name} := 'var'; $block.symbol($name, :declared(1), :scope('lexical') ); my $var := QAST::Var.new( :name($name), :scope('lexical'), :decl($decl) ); $block[0].push($var); } } make QAST::Var.new( :name($name), :scope('lexical') ); } } method term:sym($/) { make $.ast } method stmt:sym($/) { my $install := $.ast; $*CUR_BLOCK[0].push(QAST::Op.new( :op('bind'), QAST::Var.new( :name($install.name), :scope('lexical'), :decl('var') ), $install )); if $*IN_CLASS { @*METHODS.push($install); } make QAST::Op.new( :op('null') ); } method defbody($/) { $*CUR_BLOCK.name(~$); $*CUR_BLOCK.push($.ast); if $*IN_CLASS { # it's a method, self will be automatically passed $*CUR_BLOCK[0].unshift(QAST::Var.new( :name('self'), :scope('lexical'), :decl('param') )); $*CUR_BLOCK.symbol('self', :declared(1)); } make $*CUR_BLOCK; } method param($/) { my $var := QAST::Var.new( :name(~$), :scope('lexical'), :decl('param') ); $var.named(~$) if $; $*CUR_BLOCK.symbol('self', :declared(1)); $var.default( $.ast ) if $; make $var; } method signature($/) { my @params; @params.push($_.ast) for @; if $ { @params.push($[0].ast); @params[-1].slurpy(1); } if $ { @params.push($[0].ast); @params[-1].default(QAST::Op.new( :op )); } for @params { $*CUR_BLOCK[0].push($_) unless $_.named; $*CUR_BLOCK.symbol($_.name, :declared(1)); } # nqp #179 named arguments need to follow positional parameters for @params { $*CUR_BLOCK[0].push($_) if $_.named; } } method stmt:sym($/) { my $body_block := $.ast; # Generate code to create the class. my $class_stmts := QAST::Stmts.new( $body_block ); my $ins_name := '::' ~ $; my $new_type := QAST::Op.new( :op('callmethod'), :name('new_type'), QAST::WVal.new( :value(RubyishClassHOW) ), QAST::SVal.new( :value(~$), :named('name') ), ); $new_type.push( QAST::SVal.new( :value(~$), :named('isa') ) ) if $; $class_stmts.push(QAST::Op.new( :op('bind'), QAST::Var.new( :name($ins_name), :scope('lexical'), :decl('var') ), $new_type, )); # Add methods. my $class_var := QAST::Var.new( :name($ins_name), :scope('lexical') ); for @*METHODS { my $name := $_.name; $class_stmts.push(QAST::Op.new( :op('callmethod'), :name('add_method'), QAST::Op.new( :op('how'), $class_var ), $class_var, QAST::SVal.new( :value($name) ), QAST::BVal.new( :value($_) )) ); } make $class_stmts; } method classbody($/) { $*CUR_BLOCK.push($.ast); $*CUR_BLOCK.blocktype('immediate'); make $*CUR_BLOCK; } method stmt:sym($/) { make $.ast; } method term:sym($/) { my $op := $; make QAST::Op.new( :op('bind'), $.ast, QAST::Op.new( :op($op), $.ast, $.ast )); } method value:sym($/) { make $.ast; } method strings($/) { make $ ?? QAST::Op.new( :op('concat'), $.ast, $.ast) !! $.ast; } method string($/) { make $.ast; } method value:sym($/) { make $.ast } method heredoc:sym($/) { make QAST::SVal.new( :value( ~$ ) ); } method heredoc-line($/) { make QAST::SVal.new( :value(~$/) ) } method heredoc:sym($/) { my $value := QAST::SVal.new( :value('') ); $value := QAST::Op.new( :op, $value, $_.ast) for $; make $value; } method value:sym($/) { make QAST::IVal.new( :value(+$/.Str) ) } method value:sym($/) { make QAST::NVal.new( :value(+$/.Str) ) } method paren-list($/) { my @list; if $ { @list.push($_.ast) for $ } make @list; } method value:sym($/) { my $array := QAST::Op.new( :op ); $array.push($_) for $.ast; make $array; } method term:sym($/) { make $.ast; } method value:sym($/) { my $hash := QAST::Op.new( :op ); $hash.push($_) for $.ast; make $hash; } method value:sym($/) { make QAST::Op.new( :op ); } method value:sym($/) { make QAST::IVal.new( :value<1> ); } method value:sym($/) { make QAST::IVal.new( :value<0> ); } method interp($/) { make $.ast } method quote_escape:sym<#{ }>($/) { make $.ast } method circumfix:sym<( )>($/) { make $.ast } # todo: proper type objects our %call-tab; BEGIN { %call-tab := nqp::hash( 'call', 'call', 'nil?', 'isnull' ) } method postfix:sym<.>($/) { my $op := %call-tab{ ~$ }; my $meth_call := $op ?? QAST::Op.new( :op($op) ) !! QAST::Op.new( :op('callmethod'), :name(~$) ); if $ { $meth_call.push($_) for $.ast; } make $meth_call; } method postcircumfix:sym<[ ]>($/) { make QAST::Var.new( :scope('positional'), $.ast ); } method postcircumfix:sym<{ }>($/) { make QAST::Var.new( :scope('associative'), $.ast ); } method postcircumfix:sym($/) { make QAST::Var.new( :scope('associative'), $.ast ); } method xblock($/) { make QAST::Op.new( $.ast, $.ast, :node($/) ); } method stmt:sym($/) { my $ast := $.ast; $ast.op( ~$ ); $ast.push( $.ast ) if $; make $ast; } method elsif($/) { my $ast := $.ast; $ast.op( 'if' ); $ast.push( $.ast ) if $; make $ast; } method else($/) { make $.ast } method stmt:sym($/) { make QAST::Op.new( $.ast, $.ast, :op(~$), :node($/) ); } method stmt:sym($/) { my $block := QAST::Block.new( QAST::Var.new( :name(~$), :scope('lexical'), :decl('param')), $.ast, ); make QAST::Op.new( $.ast, $block, :op('for'), :node($/) ); } method do-block($/) { make $.ast } method term:sym($/) { make $.ast; } method closure($/) { $*CUR_BLOCK.push($.ast); make QAST::Op.new(:op, $*CUR_BLOCK ); } method closure2($/) { self.closure($/) } method term:sym($/) { make $.ast } method template-chunk($/) { my $text := QAST::Stmts.new( :node($/) ); $text.push( QAST::Op.new( :op, $_.ast ) ) for $; make $text; } method template-nibble:sym($/) { make $.ast } method template-nibble:sym($/) { make QAST::SVal.new( :value(~$/) ); } } class Rubyish::Compiler is HLL::Compiler { method eval($code, *@_args, *%adverbs) { my $output := self.compile($code, :compunit_ok(1), |%adverbs); if %adverbs eq '' { my $outer_ctx := %adverbs; $output := self.backend.compunit_mainline($output); if nqp::defined($outer_ctx) { nqp::forceouterctx($output, $outer_ctx); } $output := $output(); } $output; } } sub MAIN(*@ARGS) { my $comp := Rubyish::Compiler.new(); $comp.language('rubyish'); $comp.parsegrammar(Rubyish::Grammar); $comp.parseactions(Rubyish::Actions); $comp.command_line(@ARGS, :encoding('utf8')); } nqp-2015.11/examples/rubyish/t/00hello-worldish.t000644 000765 000024 00000000756 12534342605 023475 0ustar00williamcoledastaff000000 000000 puts "1..5" def capitalize(s) nqp::uc(nqp::substr(s, 0, 1)) ~ nqp::lc(nqp::substr(s, 1)); end class HelloWorld puts "ok 1 - class immediate code" def initialize(name) puts "ok 2 - initialize called" @name = capitalize name end def sayHi puts "ok 5 - Hello #{@name}!" end end hello = HelloWorld.new("worldish") puts "#{nqp::can(hello, 'sayHi')? 'ok' : 'nok'} 3 - can say Hi" puts "#{nqp::can(hello, 'sayBye')? 'nok' : 'ok'} 4 - can't say Bye" hello.sayHi nqp-2015.11/examples/rubyish/t/arrays.t000644 000765 000024 00000001133 12534342605 021670 0ustar00williamcoledastaff000000 000000 puts "1..13" a=[10,18+2 , 30] a[3] = 40 puts "#{a[0] == 10? 'ok' : 'nok'} 1 - a[0]" puts "#{a[1] == 20? 'ok' : 'nok'} 2 - a[1]" puts "#{a['2'] == 30? 'ok' : 'nok'} 3 - a['2']" puts "#{a[1+2] == 40? 'ok' : 'nok'} 4 - a[1+2]" n=0 for val in a do idx = val / 10 + 4 n += 1 puts "ok #{idx} - array iteration #{n}" end puts "#{%w{nok ok nok}[1]} 9 - quote words" puts "#{['nok',['nok','nok','ok']][1][2]} 10 - 2d array" def test_array_args(x, *arg_arr) puts "ok #{x} - fixed arg" for t in arg_arr do puts "ok #{t} - array slurpy arg" end end test_array_args(11, 12, 13) nqp-2015.11/examples/rubyish/t/bitwise.t000644 000765 000024 00000001013 12534342605 022032 0ustar00williamcoledastaff000000 000000 puts "1..8" puts "#{(not true)? 'nok' : 'ok'} 1 - loose unary 'not'" puts "#{(!true)? 'nok' : 'ok'} 2 - tight unary not '!'" puts "#{37&41 == 33? 'ok' : 'nok'} 3 - infix bit-and '&'" puts "#{138 << 2 == 552? 'ok' : 'nok'} 4 - infix bitshift left '<<'" puts "#{138 >> 2 == 34? 'ok' : 'nok'} 5 - infix bitshift right '>>'" puts "#{138 ^ 107 == 225? 'ok' : 'nok'} 6 - infix xor '^'" puts "#{138 | 107 == 235? 'ok' : 'nok'} 7 - infix or '|'" puts "#{(!2==false and not 2==1+3 and 3==2+1)? 'ok': 'nok'} 8 - precedence" nqp-2015.11/examples/rubyish/t/contextual.t000644 000765 000024 00000001236 12534342605 022561 0ustar00williamcoledastaff000000 000000 puts"1..9" # These tests explore context sensitive parsing of variables vs methods def xx(n=-7) ; 2 - n; end def three ; 3; end def zz(m) three = 3 xx = 1 puts "ok #{xx + m +3} - nested symbols" puts "ok #{three +m +2} - nested symbols" 8 end # in particular, `xx +1` is parsed as a method call, `yy -1` as an expression puts "ok #{xx +1} - method parse" yy = 3 puts "ok #{yy -1} - arithmetic parse" puts "ok #{three} - parameterless method" puts "ok #{three + 1} - parameterless method arithmetic" puts "ok #{three() +2} - parameterless method + paren arithmetic" puts "ok #{zz 2} - method with args" puts "ok #{xx} - parameter defaulting" nqp-2015.11/examples/rubyish/t/functional.t000644 000765 000024 00000005247 12534342605 022543 0ustar00williamcoledastaff000000 000000 # implement and test functional primitives: map, grep and sort. puts '1..9' test_counter = 0 def is(result, expected, description) test_num = (test_counter += 1) passed = result eq expected puts "#{passed ? 'ok' : 'nok'} #{test_num} - #{description}" puts "# expected:'#{expected}' got:'#{result}'" \ unless passed passed end def dump(arr, idx = 1) arr[idx-1] ~ (idx < arr ? ',' ~ dump(arr, idx+1) : '') end # ------------ def grep(array_inp, &selector) array_out = [] n = -1 selector = lambda {|elem| !elem.nil? && elem} \ if selector.nil? for elem in array_inp ; array_out[ n+=1 ] = elem \ if selector.call(elem) end array_out end arr = [0, 2, 10, 1, 13, 27, 5, 4, 18] is dump(arr), '0,2,10,1,13,27,5,4,18', 'array dump sanity' even = grep(arr) {|n| n % 2 == 0} is dump(even), '0,2,10,4,18', 'grep [even]' arr1 = nqp::clone(arr) nqp::push(arr1, nil) is dump( grep(arr1) ), '2,10,1,13,27,5,4,18', 'grep [default]' # ------------ def map(array_inp, &mapper) array_out = [] n = -1 for elem in array_inp do mapping = mapper.call(elem) if nqp::islist(mapping) then # flatten sublists for sub_elem in mapping ; array_out[ n+=1 ] = sub_elem end else array_out[ n+=1 ] = mapping end end array_out end squares = map(arr) {|n| n * n} is dump(squares), '0,4,100,1,169,729,25,16,324', 'map [squares]' # ------------ def sort(list, &func) ; list = nqp::clone list # take a copy func = lambda {|a,b| a cmp b} \ if func.nil? _quicksort(list, 0, nqp::elems(list)-1, &func); end def _quicksort(list, p, r, &func) if p < r then q = _partition(list, p, r, &func) _quicksort(list, p, q-1, &func) _quicksort(list, q+1, r, &func) end list end def _partition(list, p, r, &func) pivot = list[r] i = j = p - 1 while (j += 1) < r _swap(list, i += 1, j) \ if 0 <= func.call(pivot, list[j]) end _swap(list, i += 1, r) i end def _swap(list, i, j) tmp = list[i] list[i] = list[j] list[j] = tmp end str_sort = sort(arr) is dump(str_sort), '0,1,10,13,18,2,27,4,5', 'sort [default]' num_sort = sort(arr) {|a,b| a <=> b} is dump(num_sort), '0,1,2,4,5,10,13,18,27', 'sort [numeric]' # ------------ # put it all together odd = lambda {|n| n % 2 == 1} combined = map(sort grep(arr,&odd)) {|str| nqp::flip(str)} is dump(combined), '1,31,72,5', 'combined map sort grep' splitter = lambda {|n| nqp::split('',n)} is dump( map(combined, &splitter) ), '1,3,1,7,2,5', 'map [flattening]' is dump(arr), '0,2,10,1,13,27,5,4,18', 'array readonly' nqp-2015.11/examples/rubyish/t/hashs.t000644 000765 000024 00000001164 12534342605 021501 0ustar00williamcoledastaff000000 000000 puts "1..11" h = {'a' =>10,'b' => 18+2 , 'c' => 30} h{'d'} = 100 puts "#{h{'a'} == 10? 'ok' : 'nok'} 1 - h{'a'}" puts "#{h == 20? 'ok' : 'nok'} 2 - h" h_idx = 'c' puts "#{h{h_idx} == 30? 'ok' : 'nok'} 3 - h{c_idx}" puts "#{h{'d'} == 100? 'ok' : 'nok'} 4 - h{'d'}" delete(h, 'd') for kv in h do puts "ok #{value(kv) / 10 + 4 } - hash key iteration (#{key kv})" end h = ['nok','ok'] puts "#{ h[1] } 8 - HoA" def test_hash_args(x, h_args) puts "ok #{ x } - fixed arg" for kv in h_args do puts "ok #{ value kv } - hash slurpy arg (#{key kv})" end end test_hash_args 9, 'z' => 10, 'y' => 11 nqp-2015.11/examples/rubyish/t/if-then-else.t000644 000765 000024 00000002313 12534342605 022650 0ustar00williamcoledastaff000000 000000 puts "1..17" if 1+1==3 then puts "nok 1" puts "nok 2" else puts "ok 1" puts "ok 2" end if 2+2==4 then puts "ok 3" puts "ok 4" else puts "nok 3" puts "nok 4" end if "a" eq "a" && 3+3 == 6; puts "ok 5"; else puts "nok 6"; end if "a"~"a" eq "a""a" && 3+3 == 5; puts "nok 6"; else puts "ok 6"; end if "a" eq "b" || 1+1==3; puts "nok 7"; puts "nok 8" else puts "ok 7"; puts "ok 8"; end if "a" eq "b" || 1+1==2; puts "ok 9" else puts puts "nok 9"; end if "a" eq "b" || 1+1==3; puts "nok 10" else puts "ok 10"; end if 2 >= 1 && 1 <= 2 && "b" gt "a" && "a" lt "b" && (2 != 1) ; puts "ok 11" else puts "nok 11"; end def one_liner(i) if i == 42 then 'nok' elsif i == 12 then 'ok' else 'nok' end end puts "#{one_liner(12)} 12 - single line statement" def iffy(n) if n == 10 13 elsif n == 20 14 elsif n == 30 m = 15 m else 16 end end puts "ok #{iffy 10} - [if] elsif elsif else" puts "ok #{iffy 20} - if [elsif] elsif else" puts "ok #{iffy 30} - if elsif [elsif] else" puts "ok #{iffy 42} - if elsif elsif [else]" x=10 unless x > 2 puts "nok 17 - unless" elsif x == 20 puts "nok 17 - unless (elsif)" else puts "ok 17 - unless" end nqp-2015.11/examples/rubyish/t/infix.t000644 000765 000024 00000002257 12534342605 021514 0ustar00williamcoledastaff000000 000000 puts "1..25" x=1 puts "ok #{x} - assignment" puts "ok #{4/2} - division" puts "ok #{5-2} - subtraction" puts "ok #{2*2} - multiplication" puts "ok #{2+3} - addition" x *= 6 puts "ok #{x} - '*=' assignment" x += 1+1 y = x y -= 1 puts "ok #{y} - '-=' assignment" puts "ok #{x} - '+=' assignment" z = 27 z /= 3 puts "ok #{z} - '/=' assignment" puts "#{1+1==2? 'ok' : 'nok'} 10 - ternary (true)" puts "#{1+1==3? 'nok' : 'ok'} 11 - ternary (false)" puts "#{(false && 2)? 'nok' : 'ok'} 12 - infix &&" xx = nil yy = 42 puts "#{(false || 2) == 2? 'ok' : 'nok'} 13 - infix ||" puts "#{(xx.nil? == true)? 'ok' : 'nok'} 14 - .nil? when true" puts "#{(yy.nil? == false)? 'ok' : 'nok'} 15 - .nil? when false" puts "ok #{2 ** 4} - exponentiation **" puts "ok #{37 % 20} - modulus %" puts "#{1&&false or 1? 'ok' : 'nok'} 18 - loose 'or'" puts "#{1||false and false||1? 'ok' : 'nok'} 19 - loose 'and'" n = 22 for tst in [[20, -1, 'less than'], [22, 0, 'equal'], [24, 1, 'greater than'] ] do puts "#{ (tst[0] <=> n) == tst[1]? 'ok' :'nok'} #{tst[0]} - <=> #{tst[2]}" puts "#{ ('x'~tst[0] cmp 'x'~n) == tst[1]? 'ok' :'nok'} #{tst[0]+1} - cmp #{tst[2]}" end nqp-2015.11/examples/rubyish/t/inheritance.t000644 000765 000024 00000001747 12534342605 022673 0ustar00williamcoledastaff000000 000000 puts "1..10" $tst = -1 class Point def initialize(x, y) puts "ok #{ $tst = $tst + 2 } - Point.initialize called" @x = x @y = y end def x; @x ; end def y; @y ; end def radius; (x * @x + y * @y) ** 0.5; end end class Point3D < Point def initialize(x, y, z) puts "ok 2 - Point3D.initialize called" super(x, y) @z = z end def z; @z ; end def radius; (x * @x + y * @y + z * @z) ** 0.5; end end obj_2d = Point.new(10, 20) obj_3d = Point3D.new(15, 25, 35) puts "#{obj_2d.x == 10 ? 'ok' : 'nok'} 4 - 2d obj x" puts "#{obj_2d.y == 20 ? 'ok' : 'nok'} 5 - 2d obj y" t2 = obj_2d.radius puts "#{t2 > 22 && t2 < 23 ? 'ok' : 'nok'} 6 - radius 2d (approx)" puts "#{obj_3d.x == 15 ? 'ok' : 'nok'} 7 - 3d obj x" puts "#{obj_3d.y == 25 ? 'ok' : 'nok'} 8 - 3d obj y" puts "#{obj_3d.z == 35 ? 'ok' : 'nok'} 9 - 3d obj z" t3 = obj_3d.radius puts "#{t3 > 45 && t3 < 46 ? 'ok' : 'nok'} 10 - radius 3d (approx)" nqp-2015.11/examples/rubyish/t/interpolation.t000644 000765 000024 00000001010 12534342605 023250 0ustar00williamcoledastaff000000 000000 puts "1..10" a = 2 puts "ok #{1} - num" puts "ok #{a} - variable" puts "ok #{a+1} - expression" b = 'ok' puts "#{b} #{3*(a - 1) + 1} - expression" tst=5 puts %q " #{tst}" ' - adjacent' ' strings' puts %Q{ok #{a*=3} - expression - side affect} puts %Q{ok #{(a+=2)-1} - expression - side affect} puts "#{if a==8 then 'ok' else 'nok' end} #{a} - nested statement" puts "#{'#{tst}' == '#' '{' 'tst}'? 'ok' : 'nok'} 9 - nested starters / stoppers" puts "ok #{ x = 4; x+= 1 x+5 } - multiline interpolation" nqp-2015.11/examples/rubyish/t/lambda.t000644 000765 000024 00000000645 12534342605 021616 0ustar00williamcoledastaff000000 000000 puts "1..7" def make_iterator(n) lambda { |incr,desc| n += incr; puts "ok #{n} - #{desc}"} end it1 = make_iterator(-1) it2 = make_iterator(3) it1.call(2,"iterator 1") it1.call(1,"iterator 1") it2.call(0,"iterator 2") it2.call(1,"iterator 2") it1.call(3,"iterator 1") # Ruby 1.9+ style lambda syntax m = 5 test = ->(desc) {puts "ok #{m+=1} - #{desc}"} test.call("new lamba syntax"); test.call("new lamba syntax"); nqp-2015.11/examples/rubyish/t/line-spanning.t000644 000765 000024 00000002054 12534342605 023134 0ustar00williamcoledastaff000000 000000 puts "1..13" a=[10, 20] puts "#{a[1]? 'ok' : 'nok'} 1 - array spanning lines" =begin This is a multi-line comment and can span as many lines as you like. But =begin and =end should appear at the start of line only. #{exit 42} =end b = [30 # some comments , 40 ] puts "#{b[1]? 'ok' : 'nok'} 2 - array spanning lines" h = {"a" => 10, "b" , 20 , "c" => 30 } puts "#{h == 30? 'ok' : 'nok'} 3 - hash spanning lines" def tricky(k, n, desc) puts "#{k} #{n} - multi-line signatures #{desc}" end tricky('ok',4,"simple call") tricky( "ok", 5, "multi-line call" ) puts \ "ok 6 - \\ line continuation" heredoc = < 5 do puts "ok #{n} - until loop" n += 1 end puts "ok #{n} - postloop" nqp-2015.11/examples/rubyish/t/modifiers.t000644 000765 000024 00000000605 12534342605 022353 0ustar00williamcoledastaff000000 000000 puts "1..10" n=0 puts "ok #{n+=1} - if modifier" if true puts "nok #{n+=1} - if modifier" if false puts "ok #{n+=1} - unless modifier" unless false puts "nok #{n+=1} - unless modifier" unless true puts "ok #{n+=1} - until modifier" until n >= 6 puts "ok #{n+=1} - while modifier" while n < 8 begin puts "ok #{n+=1} - while modifier - begin .. end block" while n < 10 end until n >= 10 nqp-2015.11/examples/rubyish/t/nqp-ops.t000644 000765 000024 00000001271 12534342605 021767 0ustar00williamcoledastaff000000 000000 puts "1..12" nqp::say("ok 1 - nqp::say") nqp::print("ok 2 - nqp::print with new-line\n") puts nqp::concat("ok ", '3 - nqp::concat') puts nqp::substr("nok 4 - nqp::substr", 1) puts nqp::lc(nqp::flip("KO") ~ " 5 - nQp::fLIp and nqp::lC") nqp::print nqp::chr(nqp::ord('o')); puts 'k 6 - nqp::ord and nqp::chr' def ok(i,msg) nqp::say("ok #{i} - #{msg}"); end def nok(i,msg) nqp::say("nok #{i} - #{msg}"); end nqp::if(2+2 == 4, ok(7, "nqp::if (true)"), nok(7, "nqp::if (true)")) nqp::if(2+2 == 5, nok(8, "nqp::if (true)"), ok(8, "nqp::if (false)")) n = 9 nqp::while n <= 11, begin ok(n, "nqp::while (#{n})") n += 1 end puts nqp::sprintf("%s %d - %s", ['ok', 12, 'nqp::sprintf']) nqp-2015.11/examples/rubyish/t/params.t000644 000765 000024 00000000456 12534342605 021661 0ustar00williamcoledastaff000000 000000 puts "1..5" def foo(offset:0,desc:,test=1) puts "ok #{test+offset} - #{desc}" end foo(desc:"postional default") foo(2, desc:"positional - named last") foo(desc:"positional - named first", 3) foo(2, desc:"positional + two named params",offset:2) foo(offset:3, 2, desc:"named + positional (middle)") nqp-2015.11/examples/rubyish/t/recursion.t000644 000765 000024 00000001104 12534342605 022376 0ustar00williamcoledastaff000000 000000 puts "1..2" def fact!(n) if n <= 1 then 1 else n * fact!(n - 1) end end result = fact!(6) expected = 6*5*4*3*2 puts "#{result == expected ? 'ok' : 'nok'} 1 - sub recursion" # ---------- class MethodRecursion def fibonacci(n) n <= 1 \ ? n \ : self.fibonacci( n - 1 ) + fibonacci(n - 2 ) ## 2 styles: ^^ explicit method call ^^ implied method call end end fib = MethodRecursion.new.fibonacci(9) expected2 = 34 puts "#{fib == expected2 ? 'ok' : 'nok'} 2 - method recursion" nqp-2015.11/examples/rubyish/t/rubyish-3-tests.t000644 000765 000024 00000000260 12534342605 023354 0ustar00williamcoledastaff000000 000000 puts "1..4" a = "ok 1" puts a b = "nok 1" b = "ok 2" puts b def pass_a_test puts "ok 3" end pass_a_test() def pass_another(test) puts test end pass_another("ok 4") nqp-2015.11/examples/rubyish/t/rubyish-4-tests.t000644 000765 000024 00000000413 12534342605 023355 0ustar00williamcoledastaff000000 000000 puts "1..5" a = "ok 1" puts a ifb = "nok 1" ifb = "ok 2" puts ifb def pass_a_test puts "ok 3" end pass_a_test() def pass_another(test) puts test end pass_another("ok 4") class Tester def test puts "ok 5" end end t = new Tester() t.test() nqp-2015.11/examples/rubyish/t/scoping.t000644 000765 000024 00000004234 12534342605 022036 0ustar00williamcoledastaff000000 000000 puts "1..19" class BaseClass Y = 16; def set_inst1(v); @i1 = v; end def set_inst2(v); @i2 = v; end def get_inst1; @i1; end def get_inst2; @i2; end def tickle_f(f); @f = f ; end def const_tests puts "ok #{BaseClass::Y} - package constant qualified" puts "ok #{Y + 1} - package constant unqualified" end end class DerivedClass < BaseClass def set_inst1_child(v); @i1 = v; end def get_inst1_child; @i1; end end class DisjointClass Y = 42; def set_inst1(v); @i1 = v; end def set_inst2(v); @i2 = v; end def get_inst1; @i1; end def get_inst2; @i2; end def more_const_tests puts "ok #{BaseClass::Y + 2} - package constant cross reference" puts "ok #{Y} - package constant internal reference" end end a = "ok 1" b = "ok 2" $a = "ok 3" $c = "nok 4" base_obj = BaseClass.new; sibling_obj = BaseClass.new; disjoint_obj = DisjointClass.new; child_obj = DerivedClass.new; def some_sub b = "nok 2" $c = "ok 4" $d = "ok 5" end some_sub() puts "#{a} - local: main" puts "#{b} - local: main, function" puts "#{$a} - $global: main" puts "#{$c} - $global: main, function" puts "#{$d} - $global: function" @e=6 @f='ok' base_obj.tickle_f('nok') puts "ok #{@e} - @instance: main" puts "#{@f} 7 - @instance: main, object" t = 7 base_obj.set_inst1(t+=1) base_obj.set_inst2(t+=1) sibling_obj.set_inst1(t+=1) sibling_obj.set_inst2(t+=1) disjoint_obj.set_inst1(t+=1) disjoint_obj.set_inst2(t+=1) child_obj.set_inst1(t+=1) puts "ok #{base_obj.get_inst1} - @instance access (base)" puts "ok #{base_obj.get_inst2} - @instance access (base)" puts "ok #{sibling_obj.get_inst1} - @instance access (sibling)" puts "ok #{sibling_obj.get_inst2} - @instance access (sibling)" puts "ok #{disjoint_obj.get_inst1} - @instance access (disjoint)" puts "ok #{disjoint_obj.get_inst2} - @instance access (disjoint)" puts "ok #{child_obj.get_inst1} - @instance access (child)" puts "ok #{child_obj.get_inst1_child+1} - @instance access (child)" base_obj.const_tests DisjointClass::Y = t+5 disjoint_obj.more_const_tests nqp-2015.11/examples/rubyish/t/template.t000644 000765 000024 00000001175 12534342605 022210 0ustar00williamcoledastaff000000 000000 # eRubyish style templates puts '1..10' puts "ok 1 - statements before template" ok 2 - initial template text <%n = 2 %> <%while (n+=1) < 5 %>ok #{n} - while loop test <%end%> ok 5 - text between statements <%if n == 5 %>ok 6 - if block (true) <%else %>nok 6 - else block (true) <%end%> <%if n == 1234 %>nok 7 - if block (false) <%elsif n == 20 %>nok 7 - elsif block (false) <%else %>ok 7 - else block (false) <% end %> <%for test in [8, 9] do %>ok #{test} - for loop test <%end%> <%n = 9 %> <%#puts "nok #{n += 1} - commented out directive" %> ok #{n += 1} - final template text nqp-2015.11/examples/webpacked/README000644 000765 000024 00000000763 12576615053 021075 0ustar00williamcoledastaff000000 000000 You need to install webpack. And then using npm install src/vm/js/nqp-loader and src/vm/js/nqp-runtime. For increased awesomeness we use webpack-dev-server and webpack-reload-plugin so you need to install those. Afterwards $ webpack Should bundle up example.nqp into bundle.js, which is loaded by index.html. If you run: $ webpack-dev-server --progress --colors -d A webserver will startup at localhost:8080 and example.nqp will be automatically reloaded and recompiled when you change it. nqp-2015.11/examples/webpacked/example.nqp000644 000765 000024 00000001554 12576615053 022367 0ustar00williamcoledastaff000000 000000 my &js := nqp::getcomp("JavaScript"); my &set-draw := js('(function($CTX, $NAMED, cb) {draw = cb})'); my &set-setup := js('(function($CTX, $NAMED, cb) {setup = cb})'); my &fill := js('(function($CTX, $NAMED, color) {fill(color)})'); my &ellipse := js('(function($CTX, $NAMED, a, b, c, d) {ellipse(a, b, c, d)})'); my &createCanvas := js('(function($CTX, $NAMED, width, height) {createCanvas(width, height)})'); my &mouseX := js('(function($CTX, $NAMED) {return mouseX})'); my &mouseY := js('(function($CTX, $NAMED) {return mouseY})'); my &mouseIsPressed := js('(function($CTX, $NAMED) {return mouseIsPressed ? 1 : 0})'); sub setup() { createCanvas(640, 480); } sub draw() { if mouseIsPressed() { fill(0); } else { fill(255); } ellipse(mouseX(), mouseY(), 80, 80); } set-setup(&setup); set-draw(&draw); nqp::say("Hello Fancy Browser World"); nqp-2015.11/examples/webpacked/index.html000644 000765 000024 00000000374 12576615053 022210 0ustar00williamcoledastaff000000 000000 nqp-2015.11/examples/webpacked/webpack.config.js000644 000765 000024 00000000623 12576615053 023426 0ustar00williamcoledastaff000000 000000 //var ReloadPlugin = require("webpack-reload-plugin"); module.exports = { entry: "./example.nqp", nqpRepo: "../..", // Edit this to specify where the nqp-js repo is // plugins: [new ReloadPlugin("localhost")], output: { path: __dirname, filename: "bundle.js", sourceMapFilename: "bundle.js.map" }, module: { loaders: [ {test: /\.nqp$/, loader: "nqp-loader"} ] } } nqp-2015.11/gen/js/.gitignore000644 000765 000024 00000000002 12576615053 017611 0ustar00williamcoledastaff000000 000000 * nqp-2015.11/gen/jvm/.gitignore000644 000765 000024 00000000002 12534342605 017763 0ustar00williamcoledastaff000000 000000 * nqp-2015.11/gen/moar/.gitignore000644 000765 000024 00000000002 12534342605 020125 0ustar00williamcoledastaff000000 000000 * nqp-2015.11/gen/parrot/.gitignore000644 000765 000024 00000000002 12534342605 020476 0ustar00williamcoledastaff000000 000000 * nqp-2015.11/nqp-js000755 000765 000024 00000000115 12576615053 015577 0ustar00williamcoledastaff000000 000000 #!/bin/sh ./nqp-m --module-path gen/js/stage1/ src/vm/js/bin/nqp-js.nqp "$@" nqp-2015.11/ports/macports/Portfile000644 000765 000024 00000003071 12534371461 021147 0ustar00williamcoledastaff000000 000000 # $Id$ PortSystem 1.0 name nqp version 2015.05 categories lang devel platforms darwin license Artistic-2 maintainers coleda.com:will description A lightweight Perl-6 like language for virtual machines. long_description Unlike a full-fledged implementation of Perl 6, NQP \ strives to have as small a runtime footprint as it can, \ while still providing a Perl 6 object model and regular \ expression engine for the virtual machine. homepage https://github.com/perl6/nqp master_sites http://rakudo.org/downloads/nqp/ # To find the correct checksums for the given release, use: # openssl dgst -rmd160 # openssl dgst -sha256 checksums rmd160 8fc571c56d222b0d57984199643918e54af259c2 \ sha256 790bfc3fa1af7f88f039d170875d69e6e17a9b03cd2119887e5df20834374316 # FIXME: may need ExtUtil::Command if by chance our default perl5 binary # does not match what Apple ships. depends_build port:perl5 # Unsupported by configure.pl. configure.universal_args-delete --disable-dependency-tracking universal_variant yes subport nqp { depends_lib port:MoarVM depends_build port:MoarVM depends_run port:MoarVM configure.cmd ${prefix}/bin/perl Configure.pl --backends=moar --with-moar=${prefix}/bin/moar } subport nqp-jvm { distfiles nqp-${version}.tar.gz configure.cmd ${prefix}/bin/perl Configure.pl --backends=jvm } nqp-2015.11/ports/macports/README000644 000765 000024 00000002501 12534342605 020313 0ustar00williamcoledastaff000000 000000 When updating the Portfile to reflect the new release: First, update the portfile 1) update the version 2) remove the revision, if any is currently specified. 3) Recalculate the checksums (commands given in the file for this.) Keep the trailing \ on the first line. Then, test out the portfile locally. 4) Setup a local portfile directory. Edit /opt/local/etc/macports/sources.conf, adding a reference to a local directory, like: file:///Users/bob/sandbox/macports/ 5) In that folder, create a subdir lang/nqp 6) copy the updated Portfile to that folder. 7) Reindex to pick up the new portfile: `portindex` 8) From the top level of that folder, verify that we still build with our declared dependencies with, e.g. `port -t build nqp@2015.04` 9) Install the port, e.g. `sudo port install nqp@2015.04` Finally, open a ticket to update the portfile 10) Create a unified diff from https://trac.macports.org/browser/trunk/dports/lang/nqp/Portfile?format=txt to our most recent copy. 11) create an "update" ticket in http://trac.macports.org/ - you'll need a trac account to open the ticket. Be sure to attach the diff, and list "nqp" as the port. Additionally, set keywords to "haspatch", and if you're listed as a maintainer, "maintainer" 12) git push the updated Portfile 13) hang out in #macports on freenode and mention the ticket. nqp-2015.11/src/HLL/Actions.nqp000644 000765 000024 00000017056 12610221733 017766 0ustar00williamcoledastaff000000 000000 class HLL::Actions { method perl() { self.HOW.name(self) ~ '.new() #`[' ~ nqp::where(self) ~ ']' } method string_to_int($src, $base) { my $res := nqp::radix($base, $src, 0, 2); $src.CURSOR.panic("'$src' is not a valid number") unless nqp::atpos($res, 2) == nqp::chars($src); nqp::atpos($res, 0); } method ints_to_string($ints) { if nqp::islist($ints) { my $result := ''; for $ints { $result := $result ~ nqp::chr($_.made); } $result; } else { nqp::chr($ints.made); } } method CTXSAVE() { QAST::Stmts.new( QAST::Op.new( :op('bind'), QAST::Var.new( :name('ctxsave'), :scope('local'), :decl('var') ), QAST::Var.new( :name('$*CTXSAVE'), :scope('contextual') ) ), QAST::Op.new( :op('unless'), QAST::Op.new( :op('isnull'), QAST::Var.new( :name('ctxsave'), :scope('local') ) ), QAST::Op.new( :op('if'), QAST::Op.new( :op('can'), QAST::Var.new( :name('ctxsave'), :scope('local') ), QAST::SVal.new( :value('ctxsave') ) ), QAST::Op.new( :op('callmethod'), :name('ctxsave'), QAST::Var.new( :name('ctxsave'), :scope('local') ))))) } method SET_BLOCK_OUTER_CTX($block) { my $outer_ctx := %*COMPILING<%?OPTIONS>; if nqp::defined($outer_ctx) { until nqp::isnull($outer_ctx) { my $pad := nqp::ctxlexpad($outer_ctx); unless nqp::isnull($pad) { for $pad { my str $key := ~$_; unless $block.symbol($key) { my $lextype := nqp::lexprimspec($pad, $key); if $lextype == 0 { $block.symbol($key, :scope, :lazy_value_from($pad)); } elsif $lextype == 1 { $block.symbol($key, :scope, :value(nqp::atkey_i($pad, $key)), :type(int)); } elsif $lextype == 2 { $block.symbol($key, :scope, :value(nqp::atkey_n($pad, $key)), :type(num)); } elsif $lextype == 3 { $block.symbol($key, :scope, :value(nqp::atkey_s($pad, $key)), :type(str)); } } } } $outer_ctx := nqp::ctxouter($outer_ctx); } } } method EXPR($/, $key?) { unless $key { return 0; } my $ast := $/.ast // $.ast; unless $ast { $ast := QAST::Op.new( :node($/) ); if $ { $ast.op( ~$ ); } if $key eq 'LIST' { $key := 'infix'; } my $name := nqp::lc($key) ~ ':' ~ ($ ~~ /<[ < > ]>/ ?? '«' ~ $ ~ '»' !! '<' ~ $ ~ '>'); $ast.name('&' ~ $name); unless $ast.op { $ast.op('call'); } } if $key eq 'POSTFIX' { $ast.unshift($/[0].ast); } else { for $/.list { if nqp::defined($_.ast) { $ast.push($_.ast); } } } make $ast; } method term:sym($/) { make $.made } method termish($/) { make $.made; } method nullterm($/) { make NQPMu; } method nullterm_alt($/) { make $.made; } method integer($/) { make $.made; } method dec_number($/) { make +$/; } method decint($/) { make self.string_to_int( $/, 10); } method hexint($/) { make self.string_to_int( $/, 16); } method octint($/) { make self.string_to_int( $/, 8 ); } method binint($/) { make self.string_to_int( $/, 2 ); } method quote_EXPR($/) { my $ast := $.ast; if %*QUOTEMOD { if nqp::istype($ast, QAST::SVal) { my @words := HLL::Grammar::split_words($/, $ast.value); if +@words != 1 { $ast := QAST::Op.new( :op('list'), :node($/) ); for @words { $ast.push(QAST::SVal.new( :value($_) )); } } else { $ast := QAST::SVal.new( :value(~@words[0]) ); } } else { $/.CURSOR.panic("Can't form :w list from non-constant strings (yet)"); } } make $ast; } method quote_delimited($/) { my @parts; my $lastlit := ''; for $ { my $ast := $_.ast; if !nqp::istype($ast, QAST::Node) { $lastlit := $lastlit ~ $ast; } elsif nqp::istype($ast, QAST::SVal) { $lastlit := $lastlit ~ $ast.value; } else { if $lastlit gt '' { @parts.push(QAST::SVal.new( :value($lastlit) )); } @parts.push(nqp::istype($ast, QAST::Node) ?? $ast !! QAST::SVal.new( :value($ast) )); $lastlit := ''; } } if $lastlit gt '' { @parts.push(QAST::SVal.new( :value($lastlit) )); } my $ast := @parts ?? @parts.shift !! QAST::SVal.new( :value('') ); while @parts { $ast := QAST::Op.new( $ast, @parts.shift, :op('concat') ); } make $ast; } method quote_atom($/) { make $ ?? $.made !! ~$/; } method quote_escape:sym($/) { make "\\"; } method quote_escape:sym($/) { make ~$ } method quote_escape:sym($/) { make "\b"; } method quote_escape:sym($/) { make "\n"; } method quote_escape:sym($/) { make "\r"; } method quote_escape:sym($/) { make "\t"; } method quote_escape:sym($/) { make "\c[12]"; } method quote_escape:sym($/) { make "\c[27]"; } method quote_escape:sym($/) { make self.ints_to_string( $ ?? $ !! $ ); } method quote_escape:sym($/) { make self.ints_to_string( $ ?? $ !! $ ); } method quote_escape:sym($/) { make $.made; } method quote_escape:sym<0>($/) { make "\c[0]"; } method quote_escape:sym($/) { make $ ?? '\\' ~ $.Str !! $.Str; } method charname($/) { my $codepoint := $ ?? $.made !! nqp::codepointfromname(~$/); $/.CURSOR.panic("Unrecognized character name $/") if $codepoint < 0; make nqp::chr($codepoint); } method charnames($/) { my $str := ''; for $ { $str := $str ~ $_.made; } make $str; } method charspec($/) { make $ ?? $.made !! nqp::chr($ ?? nqp::ord($) +^ 64 !! self.string_to_int( $/, 10 ) ); } } nqp-2015.11/src/HLL/CommandLine.nqp000644 000765 000024 00000021117 12534342605 020554 0ustar00williamcoledastaff000000 000000 =begin =head1 NAME HLL::CommandLine - command line parsing tools =head1 SYNOPSIS my $parser := HLL::CommandLine::Parser.new([ 'verbose', 'target=s', 'e=s' ]); # treat the first non-option argument as the program name, # and everything after that as arguments to the program $parser.stop-after-first-arg; # -e "program" also treats everything after it as arguments # to the program: $paser.add-stopper('-e'); my $results := $parser.parse(@*ARGS); my %options := $parser.options; my @args := $pasre.arguments; # remaining arguments from @*ARGS =head1 DESCRIPTION HLL::CommandLine::Parser stores a specification of command line options and other behavior, and uses that to parse an array of command line directives. It classifies the directives as I (usually of the form C<-f> or C<--foo>) and I (ie. non-options). The result of a C<.parse(RPA)> call is an C object (or an exception thrown), which makes the options and arguments available via the methods C and C. =head1 HLL::CommandLine::Parser =head2 new(Array) The C<.new> method and constructor expects an array with option specifications. Such a specification is the name of an option, optionally followed by the C<=> equals sign and a single character describing the kind of value it expects. Missing value specification or C stand for C, ie the option does not expect a value. C stands for a string value. Optional values are only supported for string values so far. For the value specified with C the value will default to ''. =head2 add-stopper(String) Adds a stopper. A stopper is a special value that, when encountered in the command line arguments, terminates the processing, and classifies the rest of the strings as arguments, independently of their form. C<--> is a pre-defined stopper. If an option is used a stopper, that option itself is still processed. Examples: yourprogram -a --bar b -- c --foo # options: a = 1, bar = 1 # arguments: b, c, --foo # with stopper -e, and -e expecting a value: yourprogram -a -e foo --bar baz # options: -a = 1, -e = foo # arguments: --bar, baz =head2 parse(Array) Parses the array as command line strings, and returns a C object (or thrown an exception on error). =head1 HLL::CommandLine::Result An object of this type holds the options and arguments from a successful command line parse. =head2 options Returns a hash of options =head2 arguments Return an array of arguments. =end class HLL::CommandLine::Result { has @!arguments; has %!options; method init() { @!arguments := []; %!options := nqp::hash(); } method arguments() { @!arguments } method options() { %!options } method add-argument($x) { nqp::push(@!arguments, $x); } method add-option($name, $value) { # how I miss p6's Hash.push if nqp::existskey(%!options, $name) { if nqp::islist(%!options{$name}) { nqp::push(%!options{$name}, $value); } else { %!options{$name} := [ %!options{$name}, $value ]; } } else { %!options{$name} := $value; } } } class HLL::CommandLine::Parser { has @!specs; has %!options; has %!stopper; has $!stop-after-first-arg; method new(@specs) { my $obj := self.CREATE; $obj.BUILD(specs => @specs); $obj; } method stop-after-first-arg() { $!stop-after-first-arg := 1; } method BUILD(:@specs) { @!specs := nqp::list(); %!options := nqp::hash(); %!stopper := nqp::hash(); %!stopper{'--'} := 1; $!stop-after-first-arg := 0; for @specs { self.add-spec($_); } } method add-stopper($x) { %!stopper{$x} := 1; } method split-option-aliases($s) { nqp::split('|', $s); } method add-spec($s) { my $i := nqp::index($s, '='); my $type; my @options; if $i < 0 { $type := 'b'; @options := self.split-option-aliases($s); } else { $type := nqp::substr($s, $i + 1); @options := self.split-option-aliases(nqp::substr($s, 0, $i)); } for @options { %!options{$_} := $type; } } method is-option($x) { return 0 if $x eq '-' || $x eq '--'; return 1 if nqp::substr($x, 0, 1) eq '-'; 0; } method wants-value($x) { my $spec := %!options{$x}; nqp::substr($spec, 0, 1) eq 's'; } method optional-value($x) { my $spec := %!options{$x}; $spec eq 's?'; } method parse(@args) { my int $i := 0; my int $arg-count := nqp::elems(@args); my $result := HLL::CommandLine::Result.new(); $result.init(); # called when an option expects a value after it sub get-value($opt) { if $i == $arg-count - 1 { nqp::die("Option $opt needs a value"); } else { $i++; @args[$i]; } } # called after a terminator that declares the rest # as not containing any options sub slurp-rest() { $i++; while $i < $arg-count { $result.add-argument(@args[$i]); $i++; } } while $i < $arg-count { my $cur := @args[$i]; if self.is-option($cur) { if nqp::substr($cur, 0, 2) eq '--' { # long option my $opt := nqp::substr(@args[$i], 2); my $idx := nqp::index($opt, '='); my $value := 1; my $has-value := 0; if $idx >= 0 { $value := nqp::substr($opt, $idx + 1); $opt := nqp::substr($opt, 0, $idx); $has-value := 1; } elsif self.optional-value($opt) { $value := ''; $has-value := 1; } nqp::die("Illegal option --$opt") unless nqp::existskey(%!options, $opt); nqp::die("Option --$opt does not allow a value") if !self.wants-value($opt) && $has-value; if !$has-value && self.wants-value($opt) { $value := get-value("--$opt"); } $result.add-option($opt, $value); slurp-rest if %!stopper{"--$opt"}; } else { my $opt := nqp::substr($cur, 1); my $len := nqp::chars($opt); if $len == 1 { # not grouped, so it might have a value nqp::die("No such option -$opt") unless %!options{$opt}; if self.wants-value($opt) { $result.add-option($opt, get-value("-$opt")); } else { $result.add-option($opt, 1); } slurp-rest() if %!stopper{"-$opt"}; } else { my $i := 0; while $i < $len { my $o := nqp::substr($opt, $i, 1); if %!options{$o} { if self.wants-value($o) { if $i + 1 == $len { $result.add-option($o, get-value("-$o")); } else { $result.add-option($o, nqp::substr($opt, $i + 1)); } last; } else { $result.add-option($o, 1); } } else { nqp::die("Grouped options '-$opt' contain '$o', which is not a valid option") } $i++; } } } } elsif %!stopper{$cur} { slurp-rest(); } else { $result.add-argument($cur); slurp-rest() if $!stop-after-first-arg; } $i++; } return $result; } } nqp-2015.11/src/HLL/Compiler.nqp000644 000765 000024 00000047374 12623372164 020157 0ustar00williamcoledastaff000000 000000 # Provides base functionality for a compiler object. class HLL::Compiler does HLL::Backend::Default { has @!stages; has $!parsegrammar; has $!parseactions; has @!cmdoptions; has $!compiler_progname; has $!language; has %!config; has $!user_progname; has @!cli-arguments; has %!cli-options; has $!backend; has $!save_ctx; method BUILD() { # Backend is set to the default one, by default. $!backend := self.default_backend(); # Default stages. @!stages := nqp::split(' ', 'start parse ast ' ~ $!backend.stages()); # Command options and usage. @!cmdoptions := nqp::split(' ', 'e=s help|h target=s trace|t=s encoding=s output|o=s combine version|v show-config verbose-config|V stagestats=s? ll-exception rxtrace nqpevent=s profile profile-compile profile-filename=s'); %!config := nqp::hash(); } method backend(*@value) { if @value { $!backend := @value[0]; @!stages := nqp::split(' ', 'start parse ast ' ~ $!backend.stages()); } $!backend } method language($name?) { if $name { $!language := $name; nqp::bindcomp($name, self); } $!language; } method compiler($name) { nqp::getcomp($name); } method config() { %!config }; method autoprint($value) { self.interactive_result($value) unless nqp::tellfh(nqp::getstdout()) > $*AUTOPRINTPOS; } method readline($stdin, $stdout, $prompt) { nqp::printfh(nqp::getstdout(), $prompt); return nqp::readlinefh($stdin); } method context() { $!save_ctx # XXX starting value? } method interactive(*%adverbs) { nqp::printfh(nqp::getstderr(), self.interactive_banner); my $stdin := nqp::getstdin(); my $stdout := nqp::getstdout(); my $encoding := ~%adverbs; if $encoding && $encoding ne 'fixed_8' { nqp::setencoding($stdin, $encoding); } my $target := nqp::lc(%adverbs); my $prompt := self.interactive_prompt // '> '; my $code; while 1 { last if nqp::eoffh($stdin); my str $newcode := self.readline($stdin, $stdout, ~$prompt); if nqp::isnull_s($newcode) || !nqp::defined($newcode) { nqp::print("\n"); last; } if $newcode { $code := $code ~ $newcode; } if $newcode && nqp::substr($newcode, nqp::chars($newcode) - 1) eq "\\" { # Need to get more code before we execute $code := nqp::substr($code, 0, nqp::chars($code) - 1); # strip the \ if $code { $prompt := '* '; } next; } # Set the current position of stdout for autoprinting control my $*AUTOPRINTPOS := nqp::tellfh(nqp::getstdout()); my $*CTXSAVE := self; my $*MAIN_CTX; if $code { $code := $code ~ "\n"; my $output; { $output := self.eval($code, :outer_ctx($!save_ctx), |%adverbs); CATCH { self.interactive_exception($!); } }; if nqp::defined($*MAIN_CTX) { $!save_ctx := $*MAIN_CTX; } $code := ""; $prompt := self.interactive_prompt // '> '; next unless nqp::defined($output); next if nqp::isnull($output); if !$target { self.autoprint($output); } elsif $!backend.is_textual_stage($target) { nqp::say($output); } else { self.dumper($output, $target, |%adverbs); } } } } method interactive_result($value) { nqp::say(~$value) } method interactive_exception($ex) { nqp::print(~$ex ~ "\n") } method eval($code, *@args, *%adverbs) { my $output; if (%adverbs) { $output := $!backend.run_profiled({ self.compile($code, :compunit_ok(1), |%adverbs); }, %adverbs); } else { $output := self.compile($code, :compunit_ok(1), |%adverbs); } if $!backend.is_compunit($output) && %adverbs eq '' { my $outer_ctx := %adverbs; $output := $!backend.compunit_mainline($output); if nqp::defined($outer_ctx) { nqp::forceouterctx($output, $outer_ctx); } if (%adverbs) { $output := $!backend.run_profiled({ $output(|@args) }, %adverbs); } elsif %adverbs { $output := $!backend.run_traced(%adverbs, { $output(|@args) }); } else { $output := $output(|@args); } } $output; } method ctxsave() { $*MAIN_CTX := nqp::ctxcaller(nqp::ctx()); $*CTXSAVE := 0; } method panic(*@args) { nqp::die(join('', @args)) } method stages(@value?) { if +@value { @!stages := @value; } @!stages; } method parsegrammar(*@value) { if +@value { $!parsegrammar := @value[0]; } $!parsegrammar; } method parseactions(*@value) { if +@value { $!parseactions := @value[0]; } $!parseactions; } method interactive_banner() { '' } method interactive_prompt() { '> ' } method compiler_progname($value?) { if nqp::defined($value) { $!compiler_progname := $value; } $!compiler_progname; } method commandline_options(@value?) { if +@value { @!cmdoptions := @value; } @!cmdoptions; } method command_line(@args, *%adverbs) { my $program-name := @args[0]; my $res := self.process_args(@args); my %opts := $res.options; my @a := $res.arguments; for %opts { %adverbs{$_.key} := $_.value; } self.usage($program-name) if %adverbs || %adverbs; if $!backend.is_precomp_stage(%adverbs) { %adverbs := 1; } self.command_eval(|@a, |%adverbs); } method command_eval(*@a, *%adverbs) { self.version if %adverbs || %adverbs; self.verbose-config if %adverbs || %adverbs || %adverbs; self.nqpevent(%adverbs) if %adverbs; my $result; my $error; my $has_error := 0; my $target := nqp::lc(%adverbs); try { { if nqp::defined(%adverbs) { $!user_progname := '-e'; my $?FILES := '-e'; $result := self.eval(%adverbs, '-e', |@a, |%adverbs); unless $target eq '' || $!backend.is_textual_stage($target) || %adverbs { self.dumper($result, $target, |%adverbs); } } elsif !@a { $result := self.interactive(|%adverbs) } elsif %adverbs { $result := self.evalfiles(@a, |%adverbs) } else { $result := self.evalfiles(@a[0], |@a, |%adverbs) } if !nqp::isnull($result) && ($!backend.is_textual_stage($target) || %adverbs) { my $output := %adverbs; my $fh := ($output eq '' || $output eq '-') ?? nqp::getstdout() !! nqp::open($output, 'w'); self.panic("Cannot write to $output") unless $fh; nqp::printfh($fh, $result); nqp::flushfh($fh); nqp::closefh($fh) unless ($output eq '' || $output eq '-'); } CONTROL { if nqp::can(self, 'handle-control') { self.handle-control($_); } else { nqp::rethrow($_); } } } CATCH { $has_error := 1; $error := $_; } } if ($has_error) { if %adverbs || !nqp::can(self, 'handle-exception') { my $err := nqp::getstderr(); nqp::printfh($err, nqp::getmessage($error)); nqp::printfh($err, "\n"); nqp::printfh($err, nqp::join("\n", nqp::backtracestrings($error))); nqp::printfh($err, "\n"); nqp::exit(1); } else { self.handle-exception($error); } } $result; } method process_args(@args) { # First argument is the program name. self.compiler_progname(@args.shift); my $p := HLL::CommandLine::Parser.new(@!cmdoptions); $p.add-stopper('-e'); $p.stop-after-first-arg; my $res; try { $res := $p.parse(@args); CATCH { nqp::say($_); self.usage; nqp::exit(1); } } if $res { %!cli-options := $res.options(); @!cli-arguments := $res.arguments(); } else { %!cli-options := nqp::hash(); @!cli-arguments := []; } $res; } method evalfiles($files, *@args, *%adverbs) { my $target := nqp::lc(%adverbs); my $encoding := %adverbs; my @files := nqp::islist($files) ?? $files !! [$files]; $!user_progname := join(',', @files); my @codes; for @files -> $filename { my $err := 0; my $in-handle; try { if $filename eq '-' { $in-handle := nqp::getstdin(); } elsif nqp::stat($filename, nqp::const::STAT_ISDIR) { nqp::sayfh(nqp::getstderr(), "Can not run directory $filename."); $err := 1; } else { $in-handle := nqp::open($filename, 'r'); } CATCH { nqp::sayfh(nqp::getstderr(), "Could not open $filename. $_"); $err := 1; } } nqp::exit(1) if $err; try { nqp::setencoding($in-handle, $encoding); nqp::push(@codes, nqp::readallfh($in-handle)); nqp::closefh($in-handle); CATCH { nqp::sayfh(nqp::getstderr(), "Error while reading from file: $_"); $err := 1; } } nqp::exit(1) if $err; } my $code := join('', @codes); my $?FILES := join(' ', @files); my $r := self.eval($code, |@args, |%adverbs); if $target eq '' || $!backend.is_textual_stage($target) || %adverbs { return $r; } else { return self.dumper($r, $target, |%adverbs); } } method exists_stage($stage) { my $found := 0; for self.stages() { if $_ eq $stage { return 1; } } return 0; } method compile($source, :$from, :$lineposcache, *%adverbs) { my %*COMPILING<%?OPTIONS> := %adverbs; my $*LINEPOSCACHE := $lineposcache; my $target := nqp::lc(%adverbs); my $result := $source; my $stderr := nqp::getstderr(); my $stdin := nqp::getstdin(); my $stagestats := %adverbs; unless $from eq '' || self.exists_stage($from) { nqp::die("Unknown compilation input '$from'"); } unless $target eq '' || self.exists_stage($target) { nqp::die("Unknown compilation target '$target'"); } for self.stages() { if $from ne '' { if $_ eq $from { $from := ''; } next; } nqp::printfh($stderr, nqp::sprintf("Stage %-11s: ", [$_])) if nqp::defined($stagestats); my $timestamp := nqp::time_n(); if nqp::can(self, $_) { $result := self."$_"($result, |%adverbs); } elsif nqp::can($!backend, $_) { $result := $!backend."$_"($result, |%adverbs); } else { nqp::die("Unknown compilation stage '$_'"); } my $diff := nqp::time_n() - $timestamp; if nqp::defined($stagestats) { nqp::printfh($stderr, nqp::sprintf("%7.3f", [$diff])); $!backend.force_gc() if nqp::bitand_i($stagestats, 0x4); nqp::printfh($stderr, $!backend.vmstat()) if nqp::bitand_i($stagestats, 0x2); nqp::printfh($stderr, "\n"); if nqp::bitand_i($stagestats, 0x8) { nqp::printfh($stderr, "continue> "); nqp::readlinefh($stdin); } } last if $_ eq $target; } if %adverbs { return $result } else { return $!backend.compunit_mainline($result); } } method start($source, *%adverbs) { $source; } method parse($source, *%adverbs) { my $s := $source; if %adverbs { $s := $!backend.apply_transcodings($s, %adverbs); } my $grammar := self.parsegrammar; my $actions; $actions := self.parseactions; $grammar.HOW.trace-on($grammar) if %adverbs; my $match := $grammar.parse($s, p => 0, actions => $actions); $grammar.HOW.trace-off($grammar) if %adverbs; self.panic('Unable to parse source') unless $match; return $match; } method ast($source, *%adverbs) { my $ast := $source.ast(); self.panic("Unable to obtain AST from " ~ $source.HOW.name($source)) unless $ast ~~ QAST::Node; $ast; } method dumper($obj, $name, *%options) { if nqp::can($obj, 'dump') { my $out := nqp::getstdout(); nqp::printfh($out, $obj.dump()); nqp::flushfh($out); } else { nqp::die("Cannot dump this object; no dump method"); } } method usage($name?) { if $name { say($name); } my $usage := "This compiler is based on HLL::Compiler.\n\nOptions:\n"; for @!cmdoptions { $usage := $usage ~ " $_\n"; } nqp::say($usage); nqp::exit(0); } method version() { my $version := %!config; my $backver := $!backend.version_string(); nqp::say("This is $!language version $version built on $backver"); nqp::exit(0); } method show-config() { self.verbose-config(); } method verbose-config() { my $bname := $!backend.name; for $!backend.config { nqp::say($bname ~ '::' ~ $_.key ~ '=' ~ $_.value); } for %!config { nqp::say($!language ~ '::' ~ $_.key ~ '=' ~ $_.value); } nqp::exit(0); } method nqpevent(*@pos) { $!backend.nqpevent(|@pos) } method removestage($stagename) { my @new_stages := nqp::list(); for @!stages { if $_ ne $stagename { nqp::push(@new_stages, $_); } } @!stages := @new_stages; } method addstage($stagename, *%adverbs) { my $position; my $where; if %adverbs { $where := %adverbs; $position := 'before'; } elsif %adverbs { $where := %adverbs; $position := 'after'; } else { my @new-stages := nqp::clone(self.stages); nqp::push(@new-stages, $stagename); self.stages(@new-stages); return 1; } my @new-stages := nqp::list(); for self.stages { if $_ eq $where { if $position eq 'before' { nqp::push(@new-stages, $stagename); nqp::push(@new-stages, $_); } else { nqp::push(@new-stages, $_); nqp::push(@new-stages, $stagename); } } else { nqp::push(@new-stages, $_) } } self.stages(@new-stages); } method parse_name($name) { my @ns := nqp::split('::', $name); my $sigil := nqp::substr(@ns[0], 0, 1); # move any leading sigil to the last item my $idx := nqp::index('$@%&', $sigil); if $idx >= 0 { @ns[0] := nqp::substr(@ns[0], 1); @ns[-1] := $sigil ~ @ns[-1]; } # remove any empty items from the list # maybe replace with a grep() once we have the setting for sure my @actual_ns; for @ns { nqp::push(@actual_ns, $_) unless $_ eq ''; } @actual_ns; } method lineof($target, int $pos, int :$cache = 0) { my $linepos; if $cache { # if we've previously cached c for target, we use it. $linepos := $*LINEPOSCACHE; } unless nqp::defined($linepos) { # calculate a new linepos array. $linepos := nqp::list_i(); if $cache { $*LINEPOSCACHE := $linepos; } my str $s := ~$target; my int $eos := nqp::chars($s); my int $jpos := 0; my int $ord; # search for all of the newline markers in c. when we # find one, mark the ending offset of the line in c. while nqp::islt_i($jpos := nqp::findcclass(nqp::const::CCLASS_NEWLINE, $s, $jpos, $eos), $eos) { $ord := nqp::ord($s, $jpos); $jpos := nqp::add_i($jpos, 1); nqp::push_i($linepos, $jpos); # Treat \r\n as a single logical newline. Note that NFG # implementations, we should check it really is a lone \r, # not the first bit of a \r\n grapheme. if nqp::iseq_i($ord, 13) && nqp::substr($s, $jpos - 1, 1) eq "\r" && $jpos < $eos && nqp::iseq_i(nqp::ord($s, $jpos), 10) { $jpos := nqp::add_i($jpos, 1); } } } # We have c, so now we (binary) search the array # for the largest element that is not greater than c. my int $lo := 0; my int $hi := nqp::elems($linepos); my int $line; while nqp::islt_i($lo, $hi) { $line := nqp::div_i(nqp::add_i($lo, $hi), 2); if nqp::isgt_i(nqp::atpos_i($linepos, $line), $pos) { $hi := $line; } else { $lo := nqp::add_i($line, 1); } } nqp::add_i($lo, 1); } # the name of the file(s) that are executed, or -e or 'interactive' method user-progname() { $!user_progname // 'interactive' } # command line options and arguments as provided by the user method cli-options() { %!cli-options } method cli-arguments() { @!cli-arguments } # set a recursion limit, if the backend supports it method recursion_limit($limit) { if nqp::can($!backend, 'recursion_limit') { $!backend.recursion_limit($limit); 1; } else { 0; } } } my $compiler := HLL::Compiler.new(); $compiler.language($compiler.backend.name); nqp-2015.11/src/HLL/Grammar.nqp000644 000765 000024 00000063743 12613727026 017771 0ustar00williamcoledastaff000000 000000 use QRegex; grammar HLL::Grammar { my $brackets := "<>[]()\{}\x[0028]\x[0029]\x[003C]\x[003E]\x[005B]\x[005D]\x[007B]\x[007D]\x[00AB]\x[00BB]\x[0F3A]\x[0F3B]\x[0F3C]\x[0F3D]\x[169B]\x[169C]\x[2018]\x[2019]\x[201A]\x[2019]\x[201B]\x[2019]\x[201C]\x[201D]\x[201E]\x[201D]\x[201F]\x[201D]\x[2039]\x[203A]\x[2045]\x[2046]\x[207D]\x[207E]\x[208D]\x[208E]\x[2208]\x[220B]\x[2209]\x[220C]\x[220A]\x[220D]\x[2215]\x[29F5]\x[223C]\x[223D]\x[2243]\x[22CD]\x[2252]\x[2253]\x[2254]\x[2255]\x[2264]\x[2265]\x[2266]\x[2267]\x[2268]\x[2269]\x[226A]\x[226B]\x[226E]\x[226F]\x[2270]\x[2271]\x[2272]\x[2273]\x[2274]\x[2275]\x[2276]\x[2277]\x[2278]\x[2279]\x[227A]\x[227B]\x[227C]\x[227D]\x[227E]\x[227F]\x[2280]\x[2281]\x[2282]\x[2283]\x[2284]\x[2285]\x[2286]\x[2287]\x[2288]\x[2289]\x[228A]\x[228B]\x[228F]\x[2290]\x[2291]\x[2292]\x[2298]\x[29B8]\x[22A2]\x[22A3]\x[22A6]\x[2ADE]\x[22A8]\x[2AE4]\x[22A9]\x[2AE3]\x[22AB]\x[2AE5]\x[22B0]\x[22B1]\x[22B2]\x[22B3]\x[22B4]\x[22B5]\x[22B6]\x[22B7]\x[22C9]\x[22CA]\x[22CB]\x[22CC]\x[22D0]\x[22D1]\x[22D6]\x[22D7]\x[22D8]\x[22D9]\x[22DA]\x[22DB]\x[22DC]\x[22DD]\x[22DE]\x[22DF]\x[22E0]\x[22E1]\x[22E2]\x[22E3]\x[22E4]\x[22E5]\x[22E6]\x[22E7]\x[22E8]\x[22E9]\x[22EA]\x[22EB]\x[22EC]\x[22ED]\x[22F0]\x[22F1]\x[22F2]\x[22FA]\x[22F3]\x[22FB]\x[22F4]\x[22FC]\x[22F6]\x[22FD]\x[22F7]\x[22FE]\x[2308]\x[2309]\x[230A]\x[230B]\x[2329]\x[232A]\x[23B4]\x[23B5]\x[2768]\x[2769]\x[276A]\x[276B]\x[276C]\x[276D]\x[276E]\x[276F]\x[2770]\x[2771]\x[2772]\x[2773]\x[2774]\x[2775]\x[27C3]\x[27C4]\x[27C5]\x[27C6]\x[27D5]\x[27D6]\x[27DD]\x[27DE]\x[27E2]\x[27E3]\x[27E4]\x[27E5]\x[27E6]\x[27E7]\x[27E8]\x[27E9]\x[27EA]\x[27EB]\x[2983]\x[2984]\x[2985]\x[2986]\x[2987]\x[2988]\x[2989]\x[298A]\x[298B]\x[298C]\x[298D]\x[298E]\x[298F]\x[2990]\x[2991]\x[2992]\x[2993]\x[2994]\x[2995]\x[2996]\x[2997]\x[2998]\x[29C0]\x[29C1]\x[29C4]\x[29C5]\x[29CF]\x[29D0]\x[29D1]\x[29D2]\x[29D4]\x[29D5]\x[29D8]\x[29D9]\x[29DA]\x[29DB]\x[29F8]\x[29F9]\x[29FC]\x[29FD]\x[2A2B]\x[2A2C]\x[2A2D]\x[2A2E]\x[2A34]\x[2A35]\x[2A3C]\x[2A3D]\x[2A64]\x[2A65]\x[2A79]\x[2A7A]\x[2A7D]\x[2A7E]\x[2A7F]\x[2A80]\x[2A81]\x[2A82]\x[2A83]\x[2A84]\x[2A8B]\x[2A8C]\x[2A91]\x[2A92]\x[2A93]\x[2A94]\x[2A95]\x[2A96]\x[2A97]\x[2A98]\x[2A99]\x[2A9A]\x[2A9B]\x[2A9C]\x[2AA1]\x[2AA2]\x[2AA6]\x[2AA7]\x[2AA8]\x[2AA9]\x[2AAA]\x[2AAB]\x[2AAC]\x[2AAD]\x[2AAF]\x[2AB0]\x[2AB3]\x[2AB4]\x[2ABB]\x[2ABC]\x[2ABD]\x[2ABE]\x[2ABF]\x[2AC0]\x[2AC1]\x[2AC2]\x[2AC3]\x[2AC4]\x[2AC5]\x[2AC6]\x[2ACD]\x[2ACE]\x[2ACF]\x[2AD0]\x[2AD1]\x[2AD2]\x[2AD3]\x[2AD4]\x[2AD5]\x[2AD6]\x[2AEC]\x[2AED]\x[2AF7]\x[2AF8]\x[2AF9]\x[2AFA]\x[2E02]\x[2E03]\x[2E04]\x[2E05]\x[2E09]\x[2E0A]\x[2E0C]\x[2E0D]\x[2E1C]\x[2E1D]\x[2E20]\x[2E21]\x[3008]\x[3009]\x[300A]\x[300B]\x[300C]\x[300D]\x[300E]\x[300F]\x[3010]\x[3011]\x[3014]\x[3015]\x[3016]\x[3017]\x[3018]\x[3019]\x[301A]\x[301B]\x[301D]\x[301E]\x[FD3E]\x[FD3F]\x[FE17]\x[FE18]\x[FE35]\x[FE36]\x[FE37]\x[FE38]\x[FE39]\x[FE3A]\x[FE3B]\x[FE3C]\x[FE3D]\x[FE3E]\x[FE3F]\x[FE40]\x[FE41]\x[FE42]\x[FE43]\x[FE44]\x[FE47]\x[FE48]\x[FE59]\x[FE5A]\x[FE5B]\x[FE5C]\x[FE5D]\x[FE5E]\x[FF08]\x[FF09]\x[FF1C]\x[FF1E]\x[FF3B]\x[FF3D]\x[FF5B]\x[FF5D]\x[FF5F]\x[FF60]\x[FF62]\x[FF63]"; my $cursor_class := NQPCursor; method perl() { self.HOW.name(self) ~ '.new() #`[' ~ nqp::where(self) ~ ']' } method throw_unrecog_backslash_seq ($sequence) { self.panic("Unrecognized backslash sequence: '\\" ~ $sequence ~ "'"); } token termish { * * } proto token term { <...> } proto token infix { <...> } proto token prefix { <...> } proto token postfix { <...> } proto token circumfix { <...> } proto token postcircumfix { <...> } token term:sym { } token infixish { } token prefixish { <.ws> } token postfixish { | | } token nullterm { } token nullterm_alt { } # Return if it matches, otherwise. method nulltermish() { !self.terminator && self.termish || self.nullterm_alt } token quote_delimited { * } token quote_atom { [ | | [ <-quote_escape - stopper - starter> ]+ | * ] } token decint { [\d+]+ % '_' } token decints { [<.ws><.ws>]+ % ',' } token hexint { [[\d|<[ a..f A..F a..f A..F ]>]+]+ % '_' } token hexints { [<.ws><.ws>]+ % ',' } token octint { [\d+]+ % '_' } token octints { [<.ws><.ws>]+ % ',' } token binint { [\d+]+ % '_' } token binints { [<.ws><.ws>]+ % ',' } token integer { [ | 0 [ b | o | x | d ] | ] } token dec_number { | $=[ '.' \d+ ] ? | $=[ \d+ '.' \d+ ] ? | $=[ \d+ ] } token escale { <[Ee]> <[+\-]>? \d+ } proto token quote_escape { <...> } token quote_escape:sym { \\ \\ } token quote_escape:sym { \\ } token quote_escape:sym { \\ b } token quote_escape:sym { \\ n } token quote_escape:sym { \\ r } token quote_escape:sym { \\ t } token quote_escape:sym { \\ f } token quote_escape:sym { \\ e } token quote_escape:sym { \\ x [ | '[' ']' ] } token quote_escape:sym { \\ o [ | '[' ']' ] } token quote_escape:sym { \\ c } token quote_escape:sym<0> { \\ } token quote_escape:sym { \\ {} [ || [ | $=(\W) | (\w) { self.throw_unrecog_backslash_seq: $/[0].Str } ] || $=[.] ] } token charname { || || <.alpha> .*? > } token charnames { [<.ws><.ws>]+ % ',' } token charspec { [ | '[' ']' | \d+ [ _ \d+]* | | <.panic: 'Unrecognized \\c character'> ] } =begin =item O(spec [, save]) This subrule attaches operator precedence information to a match object (such as an operator token). A typical invocation for the subrule might be: token infix:sym<+> { } )> } This says to add all of the attribute of the C<%additive> hash (described below) and a C entry into the match object returned by the C<< infix:sym<+> >> token (as the C named capture). Note that this is a alphabetic "O", not a digit zero. Currently the C subrule accepts a string argument describing the hash to be stored. (Note the C< q{ ... } > above. Eventually it may be possible to omit the 'q' such that an actual (constant) hash constructor is passed as an argument to C. The hash built via the string argument to C is cached, so that subsequent parses of the same token re-use the hash built from previous parses of the token, rather than building a new hash on each invocation. The C argument is used to build "hash" aggregates that can be referred to by subsequent calls to C. For example, NQP::Grammar.O(':prec, :assoc', '%additive' ); specifies the values to be associated with later references to "%additive". Eventually it will likely be possible to use true hashes from a package namespace, but this works for now. Currently the only pairs recognized have the form C< :pair >, C< :!pair >, and C<< :pair >>. =end # This lexical holds the hash cache. Right now we have one # cache for all grammars; eventually we may need a way to # separate them out by cursor type. my %ohash; method O(str $spec, $save?) { # See if we've already created a Hash for the current # specification string -- if so, use that. my %hash := %ohash{$spec}; unless %hash { # Otherwise, we need to build a new one. %hash := nqp::hash(); my int $eos := nqp::chars($spec); my int $pos := 0; while ($pos := nqp::findnotcclass(nqp::const::CCLASS_WHITESPACE, $spec, $pos, $eos)) < $eos { my int $lpos; my str $s := nqp::substr($spec, $pos, 1); if $s eq ',' { # Ignore commas between elements for now. $pos++; } elsif $s eq ':' { # Parse whatever comes next like a pair. $pos++; # If the pair is of the form :!name, then reverse the value # and skip the exclamation mark. my $value := 1; if nqp::substr($spec, $pos, 1) eq '!' { $pos++; $value := 0; } # Get the name of the pair. $lpos := nqp::findnotcclass(nqp::const::CCLASS_WORD, $spec, $pos, $eos); my $name := nqp::substr($spec, $pos, $lpos - $pos); $pos := $lpos; # Look for a <...> that follows. if nqp::substr($spec, $pos, 1) eq '<' { $pos := $pos + 1; $lpos := nqp::index($spec, '>', $pos); $value := nqp::substr($spec, $pos, $lpos - $pos); $pos := $lpos + 1; } # Done processing the pair, store it in the hash. %hash{$name} := $value; } else { # If whatever we found doesn't start with a colon, treat it # as a lookup of a previously saved hash to be merged in. # Find the first whitespace or comma $lpos := nqp::findcclass(nqp::const::CCLASS_WHITESPACE, $spec, $pos, $eos); my $index := nqp::index($spec, ',', $pos); $lpos := $index unless $index < 0 || $index >= $lpos; my $lookup := nqp::substr($spec, $pos, $lpos - $pos); my %lhash := %ohash{$lookup}; self.'panic'('Unknown operator precedence specification "', $lookup, '"') unless %lhash; my $lhash_it := nqp::iterator(%lhash); while $lhash_it { $s := nqp::shift($lhash_it); %hash{$s} := %lhash{$s}; } $pos := $lpos; } } # Done processing the spec string, cache the hash for later. %ohash{$spec} := %hash; } if $save { %ohash{$save} := %hash; self; } else { # If we've been called as a subrule, then build a pass-cursor # to indicate success and set the hash as the subrule's match object. my $cur := self.'!cursor_start_cur'(); $cur.'!cursor_pass'(nqp::getattr_i($cur, $cursor_class, '$!from')); nqp::bindattr($cur, $cursor_class, '$!match', %hash); $cur; } } =begin =item panic([args :slurpy]) Throw an exception at the current cursor location. If the message doesn't end with a newline, also output the line number and offset of the match. =end method panic(*@args) { my $pos := self.pos(); my $target := self.target(); @args.push(' at line '); @args.push(HLL::Compiler.lineof($target, $pos) + 1); @args.push(', near "'); @args.push(nqp::escape(nqp::substr($target, $pos, 10))); @args.push('"'); nqp::die(join('', @args)) } method FAILGOAL($goal, $dba?) { unless $dba { $dba := nqp::getcodename(nqp::callercode()); } self.panic("Unable to parse expression in $dba; couldn't find final $goal"); } =begin =item peek_delimiters(target, pos) Return the start/stop delimiter pair based on peeking at C position C. =end method peek_delimiters(str $target, int $pos) { # peek at the next character my str $start := nqp::substr($target, $pos, 1); # colon, word and whitespace characters aren't valid delimiters if $start eq ':' { self.panic('Colons may not be used to delimit quoting constructs'); } if nqp::iscclass(nqp::const::CCLASS_WORD, $start, 0) { self.panic('Alphanumeric character is not allowed as a delimiter'); } if nqp::iscclass(nqp::const::CCLASS_WHITESPACE, $start, 0) { my $code := nqp::sprintf('%X', [nqp::ord($start)]); self.panic('Whitespace character (0x' ~ $code ~ ') is not allowed as a delimiter'); } # assume stop delim is same as start, for the moment my str $stop := $start; my int $brac := nqp::index($brackets, $start); if $brac >= 0 { # if it's a closing bracket, that's an error also if $brac % 2 { self.panic('Use of a closing delimiter for an opener is reserved'); } # it's an opener, so get the closing bracket $stop := nqp::substr($brackets, $brac + 1, 1); # see if the opening bracket is repeated my int $len := 1; while nqp::substr($target, ++$pos, 1) eq $start { $len++; } if $len > 1 { $start := nqp::x($start, $len); $stop := nqp::x($stop, $len); } } [$start, $stop] } my $TRUE := 1; token quote_EXPR(*@args) { :my %*QUOTEMOD; :my $*QUOTE_START; :my $*QUOTE_STOP; { for @args -> $mod { $mod := nqp::substr($mod, 1); %*QUOTEMOD{$mod} := $TRUE; if $mod eq 'qq' { %*QUOTEMOD{'s'} := $TRUE; %*QUOTEMOD{'a'} := $TRUE; %*QUOTEMOD{'h'} := $TRUE; %*QUOTEMOD{'f'} := $TRUE; %*QUOTEMOD{'c'} := $TRUE; %*QUOTEMOD{'b'} := $TRUE; } elsif $mod eq 'b' { %*QUOTEMOD{'q'} := $TRUE; } } my @delims := self.peek_delimiters(self.target, self.pos); $*QUOTE_START := @delims[0]; $*QUOTE_STOP := @delims[1]; } } token quotemod_check(str $mod) { } method starter() { my $start := $*QUOTE_START; nqp::isconcrete($start) ?? self.'!LITERAL'($start) !! self.'!cursor_start_fail'() } method stopper() { my $stop := $*QUOTE_STOP; nqp::isconcrete($stop) ?? self.'!LITERAL'($stop) !! self.'!cursor_start_fail'() } my %nbsp := nqp::hash( "\x00A0", 1, "\x2007", 1, "\x202F", 1, "\xFEFF", 1, ); our method split_words(str $words) { my @result; my int $pos := 0; my int $eos := nqp::chars($words); my int $ws; while ($pos := nqp::findnotcclass(nqp::const::CCLASS_WHITESPACE, $words, $pos, $eos)) < $eos { # Search for another white space character as long as we hit non-breakable spaces. $ws := $pos; while %nbsp{nqp::substr($words, $ws := nqp::findcclass(nqp::const::CCLASS_WHITESPACE, $words, $ws, $eos), 1)} { $ws := $ws + 1 } nqp::push(@result, nqp::substr($words, $pos, $ws - $pos)); $pos := $ws; } @result } =begin =item EXPR(...) An operator precedence parser. =end method EXPR(str $preclim = '', int :$noinfix = 0) { my $here := self.'!cursor_start_cur'(); my int $pos := nqp::getattr_i($here, $cursor_class, '$!from'); my str $termishrx := 'termish'; my @opstack; my @termstack; my $termcur; my $termish; my %termOPER; my @prefixish; my @postfixish; my $wscur; my $infixcur; my $infix; my %inO; my str $inprec; my str $opprec; my str $inassoc; my int $more_infix; my int $term_done; while 1 { nqp::bindattr_i($here, $cursor_class, '$!pos', $pos); $termcur := $here."$termishrx"(); $pos := nqp::getattr_i($termcur, $cursor_class, '$!pos'); nqp::bindattr_i($here, $cursor_class, '$!pos', $pos); if $pos < 0 { $here.panic('Missing required term after infix') if @opstack; return $here; } $termish := $termcur.MATCH(); # Interleave any prefix/postfix we might have found. %termOPER := $termish; %termOPER := nqp::atkey(%termOPER, 'OPER') while nqp::existskey(%termOPER, 'OPER'); @prefixish := nqp::atkey(%termOPER, 'prefixish'); @postfixish := nqp::atkey(%termOPER, 'postfixish'); unless nqp::isnull(@prefixish) || nqp::isnull(@postfixish) { while @prefixish && @postfixish { my %preO := @prefixish[0]; my %postO := @postfixish[nqp::elems(@postfixish)-1]; my $preprec := nqp::ifnull(nqp::atkey(%preO, 'sub'), nqp::ifnull(nqp::atkey(%preO, 'prec'), '')); my $postprec := nqp::ifnull(nqp::atkey(%postO, 'sub'), nqp::ifnull(nqp::atkey(%postO, 'prec'), '')); if $postprec gt $preprec { nqp::push(@opstack, nqp::shift(@prefixish)); } elsif $postprec lt $preprec { nqp::push(@opstack, nqp::pop(@postfixish)); } elsif %postO eq 'right' { nqp::push(@opstack, nqp::shift(@prefixish)); } elsif %postO eq 'left' { nqp::push(@opstack, nqp::pop(@postfixish)); } else { self.EXPR_nonassoc($here, ~@prefixish[0], ~@postfixish[0]); } } nqp::push(@opstack, nqp::shift(@prefixish)) while @prefixish; nqp::push(@opstack, nqp::pop(@postfixish)) while @postfixish; } nqp::deletekey($termish, 'prefixish'); nqp::deletekey($termish, 'postfixish'); nqp::push(@termstack, nqp::atkey($termish, 'term')); last if $noinfix; $more_infix := 1; $term_done := 0; while $more_infix { # Now see if we can fetch an infix operator # First, we need ws to match. nqp::bindattr_i($here, $cursor_class, '$!pos', $pos); $wscur := $here.ws(); $pos := nqp::getattr_i($wscur, $cursor_class, '$!pos'); if $pos < 0 { $term_done := 1; last; } # Next, try the infix itself. nqp::bindattr_i($here, $cursor_class, '$!pos', $pos); $infixcur := $here.infixish(); $pos := nqp::getattr_i($infixcur, $cursor_class, '$!pos'); if $pos < 0 { $term_done := 1; last; } $infix := $infixcur.MATCH(); # We got an infix. %inO := $infix; $termishrx := nqp::ifnull(nqp::atkey(%inO, 'nextterm'), 'termish'); $inprec := ~%inO; $infixcur.panic('Missing infixish operator precedence') unless $inprec; if $inprec le $preclim { $term_done := 1; last; } while @opstack { my %opO := @opstack[+@opstack-1]; $opprec := nqp::ifnull(nqp::atkey(%opO, 'sub'), nqp::atkey(%opO, 'prec')); last unless $opprec gt $inprec; self.EXPR_reduce(@termstack, @opstack); } if nqp::isnull(nqp::atkey(%inO, 'fake')) { $more_infix := 0; } else { nqp::push(@opstack, $infix); self.EXPR_reduce(@termstack, @opstack); } } last if $term_done; # if equal precedence, use associativity to decide if $opprec eq $inprec { $inassoc := nqp::atkey(%inO, 'assoc'); if $inassoc eq 'non' { self.EXPR_nonassoc($infixcur, @opstack[nqp::elems(@opstack)-1].Str, $infix.Str()); } elsif $inassoc eq 'left' { # left associative, reduce immediately self.EXPR_reduce(@termstack, @opstack); } elsif $inassoc eq 'list' { my $op1 := @opstack[nqp::elems(@opstack)-1].Str; my $op2 := $infix.Str(); self.EXPR_nonassoc($infixcur, $op1, $op2) if $op1 ne $op2 && $op1 ne ':'; } } nqp::push(@opstack, $infix); # The Shift nqp::bindattr_i($here, $cursor_class, '$!pos', $pos); $wscur := $here.ws(); $pos := nqp::getattr_i($wscur, $cursor_class, '$!pos'); nqp::bindattr_i($here, $cursor_class, '$!pos', $pos); return $here if $pos < 0; } self.EXPR_reduce(@termstack, @opstack) while @opstack; $pos := nqp::getattr_i($here, $cursor_class, '$!pos'); $here := self.'!cursor_start_cur'(); $here.'!cursor_pass'($pos); nqp::bindattr_i($here, $cursor_class, '$!pos', $pos); nqp::bindattr($here, $cursor_class, '$!match', nqp::pop(@termstack)); $here.'!reduce'('EXPR'); $here; } method EXPR_reduce(@termstack, @opstack) { my $op := nqp::pop(@opstack); # Give it a fresh capture list, since we'll have assumed it has # no positional captures and not taken them. nqp::bindattr($op, NQPCapture, '@!array', nqp::list()); my %opOPER := nqp::atkey($op, 'OPER'); my %opO := nqp::atkey(%opOPER, 'O'); my str $opassoc := ~nqp::atkey(%opO, 'assoc'); my str $key; my str $sym; my $reducecheck; my $arg; if $opassoc eq 'unary' { $arg := nqp::pop(@termstack); $op[0] := $arg; $key := $arg.from() < $op.from() ?? 'POSTFIX' !! 'PREFIX'; } elsif $opassoc eq 'list' { $sym := nqp::ifnull(nqp::atkey(%opOPER, 'sym'), ''); nqp::unshift($op, nqp::pop(@termstack)); while @opstack { last if $sym ne nqp::ifnull( nqp::atkey(nqp::atkey(nqp::atpos(@opstack, nqp::elems(@opstack) - 1), 'OPER'), 'sym'), ''); nqp::unshift($op, nqp::pop(@termstack)); nqp::pop(@opstack); } nqp::unshift($op, nqp::pop(@termstack)); $key := 'LIST'; } else { # infix op assoc: left|right|ternary|... $op[1] := nqp::pop(@termstack); # right $op[0] := nqp::pop(@termstack); # left $reducecheck := nqp::atkey(%opO, 'reducecheck'); self."$reducecheck"($op) unless nqp::isnull($reducecheck); $key := 'INFIX'; } self.'!reduce_with_match'('EXPR', $key, $op); nqp::push(@termstack, $op); } method EXPR_nonassoc($cur, $op1, $op2) { $cur.panic('"' ~ $op1 ~ '" and "' ~ $op2 ~ '" are non-associative and require parens'); } method ternary($match) { $match[2] := $match[1]; $match[1] := $match{'infix'}{'EXPR'}; } method MARKER(str $markname) { my %markhash := nqp::getattr( nqp::getattr(self, $cursor_class, '$!shared'), ParseShared, '%!marks'); my $cur := nqp::atkey(%markhash, $markname); if nqp::isnull($cur) { $cur := self."!cursor_start_cur"(); $cur."!cursor_pass"(self.pos()); nqp::bindkey(%markhash, $markname, $cur); } else { nqp::bindattr_i($cur, $cursor_class, '$!from', self.from); $cur."!cursor_pos"(self.pos()); $cur } } method MARKED(str $markname) { my %markhash := nqp::getattr( nqp::getattr(self, $cursor_class, '$!shared'), ParseShared, '%!marks'); my $cur := nqp::atkey(%markhash, $markname); unless nqp::istype($cur, NQPCursor) && $cur.pos() == self.pos() { $cur := self.'!cursor_start_fail'(); } $cur } method LANG($lang, $regex, *@args) { my $lang_cursor := %*LANG{$lang}.'!cursor_init'(self.orig(), :p(self.pos()), :shared(self.'!shared'())); if self.HOW.traced(self) { $lang_cursor.HOW.trace-on($lang_cursor, self.HOW.trace_depth(self)); } my $*ACTIONS := %*LANG{$lang ~ '-actions'}; $lang_cursor."$regex"(|@args); } } nqp-2015.11/src/HLL/World.nqp000644 000765 000024 00000010402 12602534643 017451 0ustar00williamcoledastaff000000 000000 # While the grammar represents the syntactic elements of our language and # the actions take care of building up an AST to represent the semantics # of it, the world is about the declarative aspects of a language. This # includes: # # * Symbol table management # * Creating meta-object instances # * Parts of library loading (most likely it delegates to an actual loader) # * Resolving references to objects, within or between compilation units # # Just as there is one AST produced per compilation unit, there is also a # world produce per compilation unit. # # A world includes a serialization context. This contains a bunch of # objects - often meta-objects - that we want to persist across the # compile time / run time boundary. If we're doing pre-compilation # rather than "immediate run" then we serialize the contents of the # serialization context. class HLL::World { # The serialization context that we're building. has $!sc; # The handle for the context. has $!handle; # Whether we're in pre-compilation mode. has $!precomp_mode; # The number of code refs we've added to the code refs root so far. has int $!num_code_refs; # List of QAST blocks that map to the code refs table, for use in # building deserialization code. has $!code_ref_blocks; # List of QAST nodes specifying dependency loading related tasks. These # are done before the deserialization of the current context, or if in # immediate run mode before any of the other fixup tasks. has @!load_dependency_tasks; # List of QAST nodes specifying fixup tasks, either after deserialization # or between compile time and run time. has @!fixup_tasks; method BUILD(:$handle!, :$description = '') { # Initialize attributes. $!sc := nqp::createsc($handle); $!handle := $handle; @!fixup_tasks := nqp::list(); @!load_dependency_tasks := nqp::list(); $!precomp_mode := %*COMPILING<%?OPTIONS>; $!num_code_refs := 0; $!code_ref_blocks := []; nqp::scsetdesc($!sc, $description); # Add to currently compiling SC stack. nqp::pushcompsc($!sc); } # Adds an object to the root set, along with a mapping. method add_object($obj) { nqp::setobjsc($obj, $!sc); my int $idx := nqp::scobjcount($!sc); nqp::scsetobj($!sc, $idx, $obj); $idx } # Adds a code reference to the root set of code refs. method add_root_code_ref($code_ref, $ast_block) { my int $code_ref_idx := $!num_code_refs; $!num_code_refs := $!num_code_refs + 1; $!code_ref_blocks.push($ast_block); nqp::scsetcode($!sc, $code_ref_idx, $code_ref); $code_ref_idx } # Updates a code reference in the root set. method update_root_code_ref($idx, $new_code_ref) { nqp::scsetcode($!sc, $idx, $new_code_ref); } # Checks if we are in pre-compilation mode. method is_precompilation_mode() { $!precomp_mode } # Add an event that we want to run before deserialization or before any # other fixup. method add_load_dependency_task(:$deserialize_ast, :$fixup_ast) { if $!precomp_mode { @!load_dependency_tasks.push($deserialize_ast) if $deserialize_ast; } else { @!load_dependency_tasks.push($fixup_ast) if $fixup_ast; } } # Add an event that we need to run at fixup time (after deserialization of # between compilation and runtime). method add_fixup_task(:$deserialize_ast, :$fixup_ast) { if $!precomp_mode { @!fixup_tasks.push($deserialize_ast) if $deserialize_ast; } else { @!fixup_tasks.push($fixup_ast) if $fixup_ast; } } # Gets the built serialization context. method sc() { $!sc } # Gets the SC handle. method handle() { $!handle } method code_ref_blocks() { $!code_ref_blocks } # Gets the list of load dependency tasks to do. method load_dependency_tasks() { @!load_dependency_tasks } # Gets the list of tasks to do at fixup time. method fixup_tasks() { @!fixup_tasks } } nqp-2015.11/src/HLL/sprintf.nqp000644 000765 000024 00000041453 12623372164 020062 0ustar00williamcoledastaff000000 000000 my module sprintf { my @handlers; my $assert_used_args; grammar Syntax { token TOP { :my $*ARGS_USED := 0; ^ * $ } method panic($msg) { nqp::die($msg) } token statement { [ | [ [ | ] || <.panic("'" ~ nqp::substr(self.orig,1) ~ "' is not valid in sprintf format sequence '" ~ self.orig ~ "'")> ] | ] } proto token directive { <...> } token directive:sym { '%' ? * ? [ '.' ]? $=<[bB]> } token directive:sym { '%' ? * ? } token directive:sym { '%' ? * ? [ '.' ]? $=<[di]> } token directive:sym { '%' ? * ? [ '.' ]? $=<[eE]> } token directive:sym { '%' ? * ? [ '.' ]? $=<[fF]> } token directive:sym { '%' ? * ? [ '.' ]? $=<[gG]> } token directive:sym { '%' ? * ? [ '.' ]? } token directive:sym { '%' ? * ? [ '.' ]? } token directive:sym { '%' ? * ? } token directive:sym { '%' ? * ? [ '.' ]? $=<[xX]> } proto token escape { <...> } token escape:sym<%> { '%' * ? } token literal { <-[%]>+ } token idx { $=[\d+] '$' } token flags { | $ = ' ' | $ = '+' | $ = '-' | $ = '0' | $ = '#' } token size { \d* | $='*' } } class Actions { my $knowhow := nqp::knowhow().new_type(:repr("P6bigint")); my $zero := nqp::box_i(0, $knowhow); method TOP($/) { my @statements; @statements.push( $_.made ) for $; if ($assert_used_args && $*ARGS_USED < +@*ARGS_HAVE) || ($*ARGS_USED > +@*ARGS_HAVE) { nqp::die("Directives specify " ~ ($*ARGS_USED == 1 ?? "1 argument, but " !! "$*ARGS_USED arguments, but ") ~ (+@*ARGS_HAVE < 1 ?? "no argument was" !! +@*ARGS_HAVE == 1 ?? "1 argument was" !! +@*ARGS_HAVE ~ " arguments were") ~ " supplied") } make nqp::join('', @statements); } sub infix_x($s, $n) { my @strings; my int $i := 0; @strings.push($s) while $i++ < $n; nqp::join('', @strings); } sub next_argument($/) { if $ { $assert_used_args := 0; @*ARGS_HAVE[$.made] } else { @*ARGS_HAVE[$*ARGS_USED++] } } sub intify($number_representation) { if $number_representation =:= NQPMu { return $zero; ## missing argument is handled in method TOP } for @handlers -> $handler { if $handler.mine($number_representation) { return $handler.int($number_representation); } } if nqp::isint($number_representation) { nqp::box_i($number_representation, $knowhow); } else { if nqp::isnum($number_representation) || nqp::isstr($number_representation) { if $number_representation > 0 { nqp::fromnum_I(nqp::floor_n($number_representation), $knowhow); } else { nqp::fromnum_I(nqp::ceil_n($number_representation), $knowhow); } } else { $number_representation; } } } sub padding_char($st) { my $padding_char := ' '; if (!$st && !has_flag($st, 'minus')) || $st ~~ /<[eEfFgG]>/ { $padding_char := '0' if $_ for $st; } $padding_char } sub has_flag($st, $key) { my $ok := 0; if $st { $ok := 1 if $_{$key} for $st } $ok } method statement($/){ my $st; if $ { $st := $ } elsif $ { $st := $ } else { $st := $ } my @pieces; @pieces.push: infix_x(padding_char($st), $st.made - nqp::chars($st.made)) if $st; has_flag($st, 'minus') ?? @pieces.unshift: $st.made !! @pieces.push: $st.made; make join('', @pieces) } method directive:sym($/) { my $int := intify(next_argument($/)); $int := nqp::base_I($int, 2); my $pre := ($ eq 'b' ?? '0b' !! '0B') if $int ne '0' && has_flag($/, 'hash'); if nqp::chars($) { $int := '' if $.made == 0 && $int == 0; $int := $pre ~ infix_x('0', $.made - nqp::chars($int)) ~ $int; } else { $int := $pre ~ $int } make $int; } method directive:sym($/) { make nqp::chr(next_argument($/)) } method directive:sym($/) { my $int := intify(next_argument($/)); my $pad := padding_char($/); my $sign := nqp::islt_I($int, $zero) ?? '-' !! has_flag($/, 'plus') ?? '+' !! has_flag($/, 'space') ?? ' ' !! ''; $int := nqp::tostr_I(nqp::abs_I($int, $knowhow)); $int := nqp::substr($int, 0, $.made) if nqp::chars($); if $pad ne ' ' && $ { $int := $sign ~ infix_x($pad, $.made - nqp::chars($int) - 1) ~ $int; } else { $int := $sign ~ $int; } make $int } sub pad-with-sign($sign, $num, $size, $pad) { if $pad ne ' ' && $size { $sign ~ infix_x($pad, $size - nqp::chars($num) - 1) ~ $num; } else { $sign ~ $num; } } sub normalize($float) { my @parts := nqp::split('e', nqp::lc($float)); my $sign := ''; if nqp::substr(@parts[0],0,1) eq '-' { $sign := '-'; @parts[0] := nqp::substr(@parts[0], 1); } my @num := nqp::split('.', @parts[0]); my $radix-point := nqp::chars(@num[0]); my $new-radix-point := $radix-point + @parts[1]; my $num := @num[0] ~ @num[1]; my $n := nqp::chars($num); if $new-radix-point > $n { $num := $num ~ infix_x('0', $new-radix-point - $n); } elsif $new-radix-point < 0 { $num := "0." ~ infix_x('0', nqp::abs_n($new-radix-point)) ~ $num; } else { $num := nqp::substr($num,0,$new-radix-point) ~ '.' ~ nqp::substr($num,$new-radix-point); } $sign ~ $num; } sub stringify-to-precision($float, $precision) { $float := normalize($float) if nqp::index($float, "e") || nqp::index($float, "E"); my @number := nqp::split('.', $float); my $lhs_s := @number[0]; my $rhs_s := @number[1]; my $d := nqp::chars($rhs_s); # digits after decimal my $zeroes := infix_x("0", 1 + ($precision > $d ?? $precision - $d !! 0)); $lhs_s := nqp::substr($lhs_s, 1) if nqp::substr($lhs_s, 0, 1) eq '-'; my $lhs_I := nqp::fromstr_I($lhs_s, $knowhow); my $rhs_I := nqp::fromstr_I("1" ~ $rhs_s ~ $zeroes, $knowhow); # The leading 1 is to preserve leading zeroes my $cc := nqp::chars(nqp::tostr_I($rhs_I)); my $e := nqp::fromnum_I($d > $precision ?? $d - $precision !! 0, $knowhow); my $pot := nqp::pow_I(nqp::fromnum_I(10, $knowhow), $e, $knowhow, $knowhow); # power of ten my $rounder := nqp::mul_I(nqp::fromnum_I(5, $knowhow), $pot, $knowhow); $rhs_I := nqp::add_I($rhs_I, $rounder, $knowhow); $rhs_s := nqp::tostr_I($rhs_I); $lhs_I := nqp::add_I($lhs_I, nqp::fromnum_I(1,$knowhow), $knowhow) if nqp::substr($rhs_s,0,1) ne '1'; # we had a carry $lhs_s := nqp::tostr_I($lhs_I); $rhs_s := nqp::substr($rhs_s,1,$precision); # skip the leading char we added. my $return := $lhs_s; $return := $return ~ "." ~ $rhs_s if $rhs_s ne ""; $return; } sub stringify-to-precision2($float, $precision) { my $exp := $float == 0.0 ?? 0 !! nqp::floor_n(nqp::log_n($float) / nqp::log_n(10)); $float := nqp::abs_n($float) * nqp::pow_n(10, $precision - ($exp + 1)) + 0.5; $float := nqp::floor_n($float); $float := $float / nqp::pow_n(10, $precision - ($exp + 1)); #?if jvm if $exp == -4 { $float := stringify-to-precision($float, $precision + 3); $float := nqp::substr($float, 0, nqp::chars($float) - 1) if nqp::chars($float) > 1 && $float ~~ /\.\d**4 0+$/; $float := nqp::substr($float, 0, nqp::chars($float) - 1) if nqp::chars($float) > 1 && $float ~~ /\.\d**4 0+$/; } $float #?endif } sub fixed-point($float, $precision, $size, $pad, $/) { my $sign := $float < 0 ?? '-' !! has_flag($/, 'plus') ?? '+' !! has_flag($/, 'space') ?? ' ' !! ''; $float := nqp::abs_n($float); $float := stringify-to-precision($float, $precision) unless nqp::isnanorinf($float); pad-with-sign($sign, $float, $size, $pad); } sub scientific($float, $e, $precision, $size, $pad, $/) { my $sign := $float < 0 ?? '-' !! has_flag($/, 'plus') ?? '+' !! has_flag($/, 'space') ?? ' ' !! ''; $float := nqp::abs_n($float); unless nqp::isnanorinf($float) { my $exp := $float == 0.0 ?? 0 !! nqp::floor_n(nqp::log_n($float) / nqp::log_n(10)); $float := $float / nqp::pow_n(10, $exp); $float := stringify-to-precision($float, $precision); if $exp < 0 { $exp := -$exp; $float := $float ~ $e ~ '-' ~ ($exp < 10 ?? '0' !! '') ~ $exp; } else { $float := $float ~ $e ~ '+' ~ ($exp < 10 ?? '0' !! '') ~ $exp; } } pad-with-sign($sign, $float, $size, $pad); } sub shortest($float, $e, $precision, $size, $pad, $/) { my $sign := $float < 0 ?? '-' !! has_flag($/, 'plus') ?? '+' !! has_flag($/, 'space') ?? ' ' !! ''; $float := nqp::abs_n($float); return pad-with-sign($sign, $float, $size, $pad) if nqp::isnanorinf($float); my $exp := $float == 0.0 ?? 0 !! nqp::floor_n(nqp::log_n($float) / nqp::log_n(10)); if -2 - $precision < $exp && $exp < $precision { my $fixed-precision := $precision - ($exp + 1); my $fixed := stringify-to-precision2($float, $precision); pad-with-sign($sign, $fixed, $size, $pad); } else { $float := $float / nqp::pow_n(10, $exp); $float := stringify-to-precision2($float, $precision); my $sci; if $exp < 0 { $exp := -$exp; $sci := $float ~ $e ~ '-' ~ ($exp < 10 ?? '0' !! '') ~ $exp; } else { $sci := $float ~ $e ~ '+' ~ ($exp < 10 ?? '0' !! '') ~ $exp; } pad-with-sign($sign, $sci, $size, $pad); } } method directive:sym($/) { my $float := next_argument($/); my $precision := $ ?? $.made !! 6; my $pad := padding_char($/); my $size := $ ?? $.made !! 0; make scientific($float, $, $precision, $size, $pad, $/); } method directive:sym($/) { my $int := next_argument($/); my $precision := $ ?? $.made !! 6; my $pad := padding_char($/); my $size := $ ?? $.made !! 0; make fixed-point($int, $precision, $size, $pad, $/); } method directive:sym($/) { my $float := next_argument($/); my $precision := $ ?? $.made !! 6; my $pad := padding_char($/); my $size := $ ?? $.made !! 0; make shortest($float, $ eq 'G' ?? 'E' !! 'e', $precision, $size, $pad, $/); } method directive:sym($/) { my $int := intify(next_argument($/)); $int := nqp::base_I($int, 8); my $pre := '0' if $int ne '0' && has_flag($/, 'hash'); if nqp::chars($) { $int := '' if $.made == 0 && $int == 0; $int := $pre ~ infix_x('0', intify($.made) - nqp::chars($int)) ~ $int; } else { $int := $pre ~ $int } make $int } method directive:sym($/) { my $string := next_argument($/); if nqp::chars($) && nqp::chars($string) > $.made { $string := nqp::substr($string, 0, $.made); } make $string } # XXX: Should we emulate an upper limit, like 2**64? # XXX: Should we emulate p5 behaviour for negative values passed to %u ? method directive:sym($/) { my $int := intify(next_argument($/)); if nqp::islt_I($int, $zero) { my $err := nqp::getstderr(); nqp::printfh($err, "negative value '" ~ $int ~ "' for %u in sprintf"); $int := 0; } # Go through tostr_I to avoid scientific notation. make nqp::tostr_I($int) } method directive:sym($/) { my $int := intify(next_argument($/)); $int := nqp::base_I($int, 16); my $pre := '0X' if $int ne '0' && has_flag($/, 'hash'); if nqp::chars($) { $int := '' if $.made == 0 && $int == 0; $int := $pre ~ infix_x('0', $.made - nqp::chars($int)) ~ $int; } else { $int := $pre ~ $int } make $ eq 'x' ?? nqp::lc($int) !! $int } method escape:sym<%>($/) { make '%' } method literal($/) { make ~$/ } method idx($/) { my $index := $ - 1; nqp::die("Parameter index starts to count at 1 but 0 was passed") if $index < 0; make $index } method size($/) { make $ ?? next_argument({}) !! ~$/ } } my $actions := Actions.new(); sub sprintf($format, @arguments) { my @*ARGS_HAVE := @arguments; $assert_used_args := 1; return Syntax.parse( $format, :actions($actions) ).made; } nqp::bindcurhllsym('sprintf', &sprintf); class Directives { method TOP($/) { my $count := 0; $count := nqp::add_i($count, $_.made) for $; make $count } method statement($/) { make $ && !$ ?? 1 !! 0 } } my $directives := Directives.new(); sub sprintfdirectives($format) { return Syntax.parse( $format, :actions($directives) ).made; } nqp::bindcurhllsym('sprintfdirectives', &sprintfdirectives); sub sprintfaddargumenthandler($interface) { @handlers.push($interface); "Added!"; # return meaningless string } nqp::bindcurhllsym('sprintfaddargumenthandler', &sprintfaddargumenthandler); } nqp-2015.11/src/NQP/Actions.nqp000644 000765 000024 00000207505 12610221733 020005 0ustar00williamcoledastaff000000 000000 class NQP::Actions is HLL::Actions { sub xblock_immediate($xblock) { $xblock[1] := block_immediate($xblock[1]); $xblock; } sub block_immediate($block) { $block.blocktype('immediate'); unless $block.symtable() { my $stmts := QAST::Stmts.new( :node($block.node) ); for $block.list { $stmts.push($_); } $block := $stmts; } $block; } sub default_for($sigil) { if $sigil eq '@' { QAST::Op.new( :op('list') ) } elsif $sigil eq '%' { QAST::Op.new( :op('hash') ) } else { my $default; try { $default := QAST::WVal.new( :value($*W.find_sym(['NQPMu'])) ); CATCH { $default := QAST::Op.new( :op('null') ) } } $default } } sub default_value_for_prim($prim) { $prim == 1 ?? QAST::IVal.new( :value(0) ) !! $prim == 2 ?? QAST::NVal.new( :value(0.0) ) !! QAST::SVal.new( :value('') ) } method TOP($/) { make $.made; } method deflongname($/) { make $ ?? ~$ ~ ':' ~ $.made.named ~ colonpair_str($.made) !! ~$/; } sub colonpair_str($ast) { my $s; if nqp::istype($ast, QAST::Op) { my @parts; for $ast.list { @parts.push($_.value) } $s := join(' ', @parts) } else { $s := $ast.value } $s ~~ /<[ < > ]>/ ?? '«' ~ $s ~ '»' !! '<' ~ $s ~ '>'; } method comp_unit($/) { my $mainline := $.ast; my $unit := $*W.pop_lexpad(); $unit.name(''); # If our caller wants to know the mainline ctx, provide it here. # (CTXSAVE is inherited from HLL::Actions.) Don't do this when # there was an explicit {YOU_ARE_HERE}. unless $*HAS_YOU_ARE_HERE { $unit.push( self.CTXSAVE() ); } # Detect if we're the main unit by if we were given any args. If so, # register the mainline as a module (so trying to use ourself in the # program will not explode). If we have a MAIN sub, call it at end of # mainline. $unit.unshift(QAST::Var.new( :scope('lexical'), :name('@ARGS'), :decl('param'), :slurpy(1) )); if $*MAIN_SUB { $mainline.push(QAST::Op.new( :op('if'), QAST::Var.new( :scope('lexical'), :name('@ARGS') ), QAST::Op.new( :op('call'), :name('&' ~ $*MAIN_SUB.name), QAST::Var.new( :scope('lexical'), :name('@ARGS'), :flat(1) ) ) )); } # Push mainline statements into UNIT. $unit.push($mainline); # Load the needed libraries. $unit.push($*W.libs()); # Wrap everything in a QAST::CompUnit. my $compunit := QAST::CompUnit.new( :hll('nqp'), # Serialization related bits. :sc($*W.sc()), :code_ref_blocks($*W.code_ref_blocks()), :compilation_mode($*W.is_precompilation_mode()), :pre_deserialize($*W.load_dependency_tasks()), :post_deserialize($*W.fixup_tasks()), # If this unit is loaded as a module, we want it to automatically # execute the mainline code above after all other initializations # have occurred. :load(QAST::Op.new( :op('call'), QAST::BVal.new( :value($unit) ) )), # If we're executed as the mainline, get the command line args # and pass them along. :main(QAST::Stmts.new( QAST::Op.new( :op('call'), QAST::BVal.new( :value($unit) ), QAST::Var.new( :name('ARGS'), :scope('local'), :decl('param'), :slurpy(1), :flat(1) ) ) )), # Finally, UNIT, which in turn contains all of the other program # elements. $unit ); $*W.cleanup(); make $compunit; } method statementlist($/) { my $ast_list := QAST::Stmts.new( :node($/) ); if $ { for $ { my $ast := $_.ast; my $sunk := $ast.ann('sink'); $ast := $sunk if nqp::defined($sunk); if $ast.ann('bareblock') { $ast := block_immediate($ast[0]); } $ast := QAST::Stmts.new($ast) if nqp::istype($ast, QAST::Node); $ast_list.push( $ast ); } } else { $ast_list.push(default_for('$')); } make $ast_list; } method statement($/, $key?) { my $ast; if $ { my $mc := $; my $ml := $; $ast := $.ast; if $mc { $ast := QAST::Op.new($mc.ast, $ast, :op(~$mc), :node($/) ); } if $ml { if ~$ml eq 'for' { $ast := QAST::Block.new( :blocktype('immediate'), QAST::Var.new( :name('$_'), :scope('lexical'), :decl('param') ), $ast); $ast.symbol('$_', :scope('lexical') ); $ast.arity(1); $ast := QAST::Op.new($ml.ast, $ast, :op(~$ml), :node($/) ); } else { $ast := QAST::Op.new($ml.ast, $ast, :op(~$ml), :node($/) ); } } if $ast.ann('var_initialized') { # Variable declared and unconditionally initialized; can strip # the added just-to-be-safe initialization of the lexical and # just have the var decl. my $decls := $*W.cur_lexpad()[0]; $decls.push($decls.pop()[0]); # First child of bind node is var decl } } elsif $ { $ast := $.ast; } elsif $ { $ast := $.ast; } else { $ast := 0; } make $ast; } method xblock($/) { make QAST::Op.new( $.ast, $.ast, :op('if'), :node($/) ); } method pblock($/) { make $.ast; } method block($/) { make $.ast; } method blockoid($/) { my $BLOCK := $*W.pop_lexpad(); if $ { my $ast := $.ast; if %*HANDLERS { $ast := QAST::Op.new( :op('handle'), $ast ); for %*HANDLERS { $ast.push($_.key); $ast.push($_.value); } } $BLOCK.push($ast); $BLOCK.node($/); $BLOCK.annotate('handlers', %*HANDLERS) if %*HANDLERS; make $BLOCK; } else { if $*HAS_YOU_ARE_HERE { $/.CURSOR.panic('{YOU_ARE_HERE} may only appear once in a setting'); } $*HAS_YOU_ARE_HERE := 1; make $.ast; } } method newpad($/) { $*W.push_lexpad($/) } method outerctx($/) { unless nqp::defined(%*COMPILING<%?OPTIONS>) { # We haven't got a specified outer context already, so load a # setting. my $SETTING := $*W.load_setting(%*COMPILING<%?OPTIONS> // 'NQPCORE'); # If it exports HOWs, grab them. Also, if we're loading the # setting, also by default load Regex library (we can't load # this in the setting as Regex depends on the setting). unless %*COMPILING<%?OPTIONS> eq 'NULL' { import_HOW_exports($SETTING); unless %*COMPILING<%?OPTIONS> { if %*COMPILING<%?OPTIONS> -> $lib { $*W.load_module($lib, $*GLOBALish); } else { $*W.load_module('NQPP6QRegex', $*GLOBALish); } } } } self.SET_BLOCK_OUTER_CTX($*W.cur_lexpad()); } sub import_HOW_exports($UNIT) { # See if we've exported any HOWs. if nqp::existskey($UNIT, 'EXPORTHOW') { for $UNIT.WHO { %*HOW{$_.key} := $_.value; } } } method you_are_here($/) { make self.CTXSAVE(); } ## Statement control method statement_control:sym($/) { my $module := $*W.load_module(~$, $*GLOBALish); if nqp::defined($module) { $*W.import($module.WHO.WHO) if nqp::existskey($module, 'EXPORT') && nqp::existskey($module.WHO, 'DEFAULT'); import_HOW_exports($module); } make QAST::Stmts.new(); } method statement_control:sym($/) { my $count := +$ - 1; my $ast := xblock_immediate( $[$count].ast ); if $ { $ast.push( block_immediate( $.ast ) ); } # build if/then/elsif structure while $count > 0 { $count--; my $else := $ast; $ast := xblock_immediate( $[$count].ast ); $ast.push($else); } make $ast; } method statement_control:sym($/) { my $ast := xblock_immediate( $.ast ); $ast.op('unless'); $/.prune(); make $ast; } method statement_control:sym($/) { my $ast := xblock_immediate( $.ast ); $ast.op(~$); if $*LABEL { $ast.push(QAST::WVal.new( :value($*W.find_sym([$*LABEL])), :named('label') )); } elsif !$*CONTROL_USED { $ast.push(QAST::IVal.new( :value(1), :named('nohandler') )); } $/.prune(); make $ast; } method statement_control:sym($/) { my $op := 'repeat_' ~ ~$; my $ast; if $ { $ast := xblock_immediate( $.ast ); $ast.op($op); } else { $ast := QAST::Op.new( $.ast, block_immediate( $.ast ), :op($op), :node($/) ); } if $*LABEL { $ast.push(QAST::WVal.new( :value($*W.find_sym([$*LABEL])), :named('label') )); } elsif !$*CONTROL_USED { $ast.push(QAST::IVal.new( :value(1), :named('nohandler') )); } $/.prune(); make $ast; } method statement_control:sym($/) { my $ast := $.ast; $ast.op('for'); my $block := $ast[1]; unless $block.arity { $block[0].push( QAST::Var.new( :name('$_'), :scope('lexical'), :decl('param') ) ); $block.symbol('$_', :scope('lexical') ); $block.arity(1); } $block.blocktype('immediate'); if $*LABEL { $ast.push(QAST::WVal.new( :value($*W.find_sym([$*LABEL])), :named('label') )); } elsif !$*CONTROL_USED { $ast.push(QAST::IVal.new( :value(1), :named('nohandler') )); } $/.prune(); make $ast; } method statement_control:sym($/) { my $block := $.ast; set_block_handler($/, $block, 'CATCH'); $/.prune(); make default_for('$'); } method statement_control:sym($/) { my $block := $.ast; set_block_handler($/, $block, 'CONTROL'); $/.prune(); make default_for('$'); } sub set_block_handler($/, $block, $type) { if nqp::existskey(%*HANDLERS, $type) { nqp::die("Duplicate $type handler in block"); } unless $block.arity { $block.unshift( QAST::Op.new( :op('bind'), QAST::Var.new( :scope('lexical'), :name('$!'), :decl('var') ), QAST::Var.new( :scope('lexical'), :name('$_')), ), ); $block.unshift(QAST::Var.new( :name('$_'), :scope('lexical'), :decl('param') )); $block.symbol('$_', :scope('lexical') ); $block.symbol('$!', :scope('lexical') ); $block.arity(1); } $block.blocktype('declaration'); %*HANDLERS{$type} := QAST::Stmts.new( QAST::Op.new( :op('call'), $block, QAST::Op.new( :op('exception') ), ), QAST::VM.new( :parrot(QAST::Op.new( :op('bindkey_i'), QAST::Op.new( :op('exception') ), QAST::SVal.new( :value('handled') ), QAST::IVal.new( :value(1) ) )), :jvm(QAST::Op.new( :op('null') )), :moar(QAST::Op.new( :op('null') )) ), default_for('$')); } method statement_prefix:sym($/) { make $*W.run_begin_block($.ast); $/.prune(); } method statement_prefix:sym($/) { $*W.cur_lexpad().push($.ast); make QAST::Stmts.new(); $/.prune(); } method statement_prefix:sym($/) { my $ast := $.ast; if nqp::istype($ast, QAST::Block) { my $handlers := $ast.ann('handlers'); if $handlers && nqp::existskey($handlers, 'CATCH') { make $ast; return 1; } else { $ast.blocktype('immediate'); } } make QAST::Op.new( :op('handle'), $ast, 'CATCH', QAST::Stmts.new( QAST::VM.new( :parrot(QAST::Op.new( :op('bindkey_i'), QAST::Op.new( :op('exception') ), QAST::SVal.new( :value('handled') ), QAST::IVal.new( :value(1) ) )), :jvm(QAST::Op.new( :op('null') )), :moar(QAST::Op.new( :op('null') )) ), default_for('$') )); $/.prune(); } method blorst($/) { make $ ?? block_immediate($.ast) !! $.ast; $/.prune(); } # Statement modifiers method statement_mod_cond:sym($/) { make $.ast; } method statement_mod_cond:sym($/) { make $.ast; } method statement_mod_loop:sym($/) { make $.ast; } method statement_mod_loop:sym($/) { make $.ast; } ## Terms method term:sym($/) { make $.ast; } method term:sym($/) { make $.ast; } method term:sym($/) { make $.ast; } method term:sym($/) { make $.ast; } method term:sym($/) { make $.ast; } method term:sym($/) { make $.ast; } method term:sym($/) { make $.ast; } method term:sym($/) { make $.ast; } method term:sym($/) { make QAST::Op.new( :op('takeclosure'), $.ast ); } method fatarrow($/) { my $ast := $.ast; $ast.named( $.Str ); make $ast; $/.prune; } method colonpair($/) { if $ { $.ast.named(~$); make $.ast; } else { my $ast := $ ?? $.ast !! QAST::IVal.new( :value( !$ ) ); $ast.named( ~$ ); make $ast; } $/.prune; } method variable($/) { my $ast; if $ { $ast := $.ast; $ast.unshift(QAST::VarWithFallback.new( :name('$/'), :scope('lexical'), :fallback(default_for('$')) )); } else { my @name := NQP::Compiler.parse_name(~$/); if +@name > 1 { if $ { $/.CURSOR.panic("Twigil not allowed on multi-part name"); } $ast := lexical_package_lookup(@name, $/); } elsif $ eq '*' { my $global_fallback := QAST::Op.new( :op('ifnull'), lexical_package_lookup(['GLOBAL', ~$ ~ $], $/), QAST::Op.new( :op('die_s'), QAST::SVal.new( :value('Contextual ' ~ ~$/ ~ ' not found') ) )); $ast := QAST::VarWithFallback.new( :name(~@name.pop), :scope('contextual'), :fallback($global_fallback) ); } elsif $ eq '!' { my $name := ~@name.pop; my $ch; if $*PKGDECL eq 'role' { $ch := QAST::Var.new( :name('$?CLASS'), :scope('typevar') ); $ch.set_compile_time_value($*PACKAGE); } else { $ch := QAST::WVal.new( :value($*PACKAGE) ); } $ast := QAST::Var.new( :name($name), :scope('attribute'), QAST::Op.new( :op('decont'), QAST::Var.new( :name('self'), :scope('lexical') ) ), $ch ); # Make sure the attribute exists and add type info. unless $*IN_DECL { my $attr; for $*PACKAGE.HOW.attributes($*PACKAGE, :local(1)) { if $_.name eq $name { $attr := $_; last; } } if nqp::defined($attr) { if nqp::can($attr, 'type') { $ast.returns($attr.type); } } else { $/.CURSOR.panic("Attribute '$name' not declared"); } } } elsif $ { my $name := ~$ eq '@' ?? 'list' !! ~$ eq '%' ?? 'hash' !! 'item'; $ast := QAST::Op.new( :op('callmethod'), :name($name), $.ast ); } elsif $*W.is_package(~@name[0]) { $ast := lexical_package_lookup(@name, $/); $ast.fallback( default_for( $ ) ); } else { my $name := ~@name.pop; my int $is_lex := 0; if $*IN_DECL eq 'variable' || $name eq '$_' || $name eq '$/' || $name eq '$¢' || $name eq '$!' || $ eq '?' || ($is_lex := $*W.is_lexical($name)) { $ast := QAST::Var.new( :name($name), :scope($name eq '$?CLASS' ?? 'typevar' !! 'lexical') ); $ast.returns($*W.lexical_type($name)) if $is_lex; } else { $/.CURSOR.panic("Use of undeclared variable '$name'"); } } } make $ast; } method package_declarator:sym($/) { make $.ast } method package_declarator:sym($/) { make $.ast } method package_declarator:sym($/) { make $.ast } method package_declarator:sym($/) { make $.ast } method package_declarator:sym($/) { make $.ast } method package_declarator:sym($/) { make $.ast } method package_declarator:sym($/) { # Construct meta-object with specified metaclass, adding it to the # serialization context for this compilation unit. my $HOW := $*W.find_sym($); my $PACKAGE := $*W.pkg_create_mo($HOW, :name(~$)); # Install it in the current package or current lexpad as needed. if $*SCOPE eq 'our' || $*SCOPE eq '' { $*W.install_package_symbol($*OUTERPACKAGE, $, $PACKAGE); if +$ == 1 { $*W.install_lexical_symbol($*W.cur_lexpad(), $[0], $PACKAGE); } } elsif $*SCOPE eq 'my' { if +$ != 1 { $.CURSOR.panic("A my scoped package cannot have a multi-part name yet"); } $*W.install_lexical_symbol($*W.cur_lexpad(), $[0], $PACKAGE); } else { $/.CURSOR.panic("$*SCOPE scoped packages are not supported"); } make QAST::Stmts.new(); $/.prune; } method package_def($/) { # Get name and meta-object. my @ns := nqp::clone($); my $name := ~@ns.pop; my $how := %*HOW{$*PKGDECL}; # Get the body code. my $ast; if $ { $ast := $.ast; } else { $ast := $*W.pop_lexpad(); $ast.push($.ast); } # Evaluate everything in the package in-line unless this is a generic # type in which case it needs delayed evaluation. Normally, $?CLASS is # a fixed lexical, but for generic types it becomes a parameter. Also # for parametric types, pass along the role body block. if nqp::can($how, 'parametric') && $how.parametric($how) { $ast.blocktype('declaration_static'); my $params := QAST::Stmts.new( QAST::Var.new( :name('$?CLASS'), :scope('lexical'), :decl('param') ) ); if $ { for $ { $params.push($_.ast); } } $ast.unshift($params); $ast.push(QAST::Op.new( :op('curlexpad') )); $ast.symbol('$?CLASS', :scope('lexical')); $*W.pkg_set_body_block($*PACKAGE, $ast); } else { $ast.blocktype('immediate'); } # Add parent, if we have one; otherwise set default. if $ { my $parent; my $parent_found; try { $parent := $*W.find_sym(nqp::clone($)); $parent_found := 1; } if $parent_found { $*W.pkg_add_parent_or_role($*PACKAGE, "add_parent", $parent); } else { $/.CURSOR.panic("Could not find parent class '" ~ ~$ ~ "'"); } } elsif nqp::can($how, 'set_default_parent') { my $default := $*PKGDECL eq 'grammar' ?? ['NQPCursor'] !! ['NQPMu']; $*W.pkg_add_parent_or_role($*PACKAGE, "set_default_parent", $*W.find_sym($default)); } # Add any done roles. if $ { for $ { my $role; my $role_found; try { $role := $*W.find_sym(nqp::clone($_)); $role_found := 1; } if $role_found { $*W.pkg_add_parent_or_role($*PACKAGE, "add_role", $role); } else { $/.CURSOR.panic("Could not find role '" ~ ~$_ ~ "'"); } } } # Finally, compose. $*W.pkg_compose($*PACKAGE); # If it's a grammar, pre-compute the NFAs. if $*PKGDECL eq 'grammar' && nqp::can($*PACKAGE, '!precompute_nfas') { $*PACKAGE.'!precompute_nfas'(); } # Export if needed. if $ { $*EXPORT.WHO.WHO{$name} := $*PACKAGE; } make $ast; $/.prune; } method role_params($/) { for $ { my $var := $_.ast; $var.scope('lexical'); $var.decl('param'); $*W.cur_lexpad().symbol($var.name, :scope('lexical')); } } method scope_declarator:sym($/) { make $.ast; $/.prune } method scope_declarator:sym($/) { make $.ast; $/.prune } method scope_declarator:sym($/) { make $.ast; $/.prune } method scoped($/) { make $ ?? $.ast !! $ ?? $.ast !! $.ast; $/.prune; } method declarator($/) { make $ ?? $.ast !! $.ast; } method multi_declarator:sym($/) { make $ ?? $.ast !! $.ast; $/.prune } method multi_declarator:sym($/) { make $ ?? $.ast !! $.ast; $/.prune } method multi_declarator:sym($/) { make $.ast; $/.prune } method variable_declarator($/) { my $ast := $.ast; my $sigil := $; my $name := $ast.name; my $BLOCK := $*W.cur_lexpad(); my $*DECLARAND_ATTR; if $name && $BLOCK.symbol($name) { $/.CURSOR.panic("Redeclaration of symbol ", $name); } if $*SCOPE eq 'has' { # Initializer not allowed. if $ { $/.CURSOR.panic('Initiailizers not supported on has-scoped variables'); } # Locate the type of meta-attribute we need. unless nqp::existskey(%*HOW, $*PKGDECL ~ '-attr') { $/.CURSOR.panic("$*PKGDECL packages do not support attributes"); } # Set up arguments for meta-attribute instantiation. my %lit_args; my %obj_args; %lit_args := $name; if $ { %obj_args := $*W.find_sym([~$]); } if $sigil eq '$' || $sigil eq '&' { if $ { %obj_args := %obj_args; } else { try %obj_args := $*W.find_sym(['NQPMu']); } } # Add it. $*DECLARAND_ATTR := $*W.pkg_add_attribute($*PACKAGE, %*HOW{$*PKGDECL ~ '-attr'}, %lit_args, %obj_args); $ast := QAST::Stmts.new(); } elsif $*SCOPE eq 'our' { # Depending on if this was already considered our scoped, # we may or may not have got a node in $var that's set up # right already. We build it here just to be sure. if $ { $/.CURSOR.panic("Cannot put types on our-scoped variables"); } $name := ~$; $ast := lexical_package_lookup([$name], $/); $BLOCK.symbol($name, :scope('package') ); if $ { $ast := QAST::Op.new( :op('bind'), $ast, $.ast ); } } else { my $type; my $default; if $ { unless $sigil eq '$' { $/.CURSOR.panic("Only typed scalars are currently supported in NQP"); } $type := $*W.find_sym([~$]); if nqp::objprimspec($type) -> $prim_spec { $default := default_value_for_prim($prim_spec); } else { $/.CURSOR.panic("Only native types are currently supported/checked"); } } else { $default := default_for($sigil); } $BLOCK[0].push(QAST::Op.new( :op('bind'), :node($/), QAST::Var.new( :name($name), :scope('lexical'), :decl('var'), :returns($type) ), $default )); if $ { $ast := QAST::Op.new( :op('bind'), :node($/), $ast, $.ast ); $ast.annotate('var_initialized', 1); } $BLOCK.symbol($name, :scope('lexical'), :type($type) ); } # Apply traits. if $ { for $ { $_.ast()($/); } } make $ast; $/.prune; $/.prune; } method initializer($/) { make $.ast; $/.prune; } method routine_declarator:sym($/) { make $.ast; $/.prune } method routine_declarator:sym($/) { make $.ast; $/.prune } method routine_def($/) { # If it's just got * as a body, make a multi-dispatch enterer. # Otherwise, need to build a sub. my $ast; if $ { $ast := only_star_block(); } else { $ast := $.ast; if $*RETURN_USED { $ast[1] := wrap_return_handler($ast[1]); } } $ast.blocktype('declaration'); my $block := $ast; if $ { my $name := ~$ ~ $.ast; $ast.name($name); if $*SCOPE eq '' || $*SCOPE eq 'my' || $*SCOPE eq 'our' { if $*MULTINESS eq 'multi' { # Does the current block have a proto? if $*SCOPE eq 'our' { nqp::die('a multi can not be our-scoped') } my $proto; my %sym := $*W.cur_lexpad().symbol('&' ~ $name); if %sym { $proto := %sym; } # Otherwise, no candidate holder, so add one. else { # Check we have a proto in scope. my $found_proto; for $*W.get_legacy_block_list() { my %sym := $_.symbol('&' ~ $name); if %sym { $proto := %sym; $found_proto := 1; } elsif %sym { $/.CURSOR.panic("Cannot declare a multi when an only is already in scope."); } } # If we didn't find a proto, error for now. unless $found_proto { $/.CURSOR.panic("Sorry, no proto sub in scope, and auto-generation of protos is not yet implemented."); } # Set up dispatch routine in this scope. nqp::die("Dispatcher derivation NYI"); } # Create a code object and attach the signature. my $code := $*W.create_code($ast, $name, 0); attach_multi_signature($code, $ast); # Add this candidate to the proto. $proto.add_dispatchee($code); # Ensure we emit the code block. # XXX We'll mark it static so the code object inside the # proto is captured correctly. Technically this is wrong, # as the multi may be nested in another sub. $ast.blocktype('declaration_static'); my $BLOCK := $*W.cur_lexpad(); $BLOCK[0].push($ast); } elsif $*MULTINESS eq 'proto' { # Create a candidate list holder for the dispatchees # this proto will work over, and install them along # with the proto. if $*SCOPE eq 'our' { nqp::die('our-scoped protos not yet implemented') } my $code := $*W.create_code($ast, $name, 1); my $BLOCK := $*W.cur_lexpad(); $BLOCK[0].push(QAST::Op.new( :op('bind'), QAST::Var.new( :name('&' ~ $name), :scope('lexical'), :decl('var') ), $ast )); $BLOCK.symbol('&' ~ $name, :scope('lexical'), :proto(1), :value($code), :declared(1) ); # Also stash the current lexical dispatcher and capture, for the {*} # to resolve. $block[0].push(QAST::Op.new( :op('bind'), QAST::Var.new( :name('CURRENT_DISPATCH_CAPTURE'), :scope('lexical'), :decl('var') ), QAST::Op.new( :op('savecapture') ) )); $block[0].push(QAST::Op.new( :op('bind'), QAST::Var.new( :name('&*CURRENT_DISPATCHER'), :scope('lexical'), :decl('var') ), QAST::Op.new( :op('getcodeobj'), QAST::Op.new( :op('curcode') ) ) )); } else { my $BLOCK := $*W.cur_lexpad(); $BLOCK[0].push(QAST::Op.new( :op('bind'), QAST::Var.new( :name('&' ~ $name), :scope('lexical'), :decl('var') ), $ast )); $BLOCK.symbol('&' ~ $name, :scope('lexical'), :declared(1)); if $*SCOPE eq 'our' { # Need to install it at loadinit time but also re-bind # it per invocation. $*W.install_package_routine($*PACKAGE, $name, $ast); $BLOCK[0].push(QAST::Op.new( :op('bind'), lexical_package_lookup([$name], $/), QAST::Var.new( :name('&' ~ $name), :scope('lexical') ) )); # Static code object needs re-capturing also, as it's # our-scoped. $ast.blocktype('declaration_static'); # Also need to make sure it gets a code object so it's # in the SC. $*W.create_code($ast, $name, 0); } } $ast := QAST::Var.new( :name('&' ~ $name), :scope('lexical') ); } else { $/.CURSOR.panic("$*SCOPE scoped routines are not supported yet"); } # Is it the MAIN sub? if $name eq 'MAIN' && $*MULTINESS ne 'multi' { $*MAIN_SUB := $block; } } else { if $*W.is_precompilation_mode() { $*W.create_code($ast, '', 0) } } my $lex_ast := QAST::Op.new( :op('takeclosure'), $ast ); $lex_ast.annotate('sink', $ast); $lex_ast.annotate('block_ast', $block); make $lex_ast; # Apply traits. if $ { for $ { $_.ast()($/); } } $/.prune; } method method_def($/) { # If it's just got * as a body, make a multi-dispatch enterer. # Otherwise, build method block QAST. my $ast; if $ { $ast := only_star_block(); } else { $ast := $.ast; if $*RETURN_USED { $ast[1] := wrap_return_handler($ast[1]); } } $ast.blocktype('declaration_static'); # Always need an invocant. unless $ast.ann('signature_has_invocant') { $ast[0].unshift(QAST::Var.new( :name('self'), :scope('lexical'), :decl('param'), :returns($*PACKAGE) )); } $ast.symbol('self', :scope('lexical') ); # Install it where it should go (methods table / namespace). my $name := ""; if $ { $name := ~$ ~ ~$.ast; } elsif $ { if $*PKGDECL ne 'role' { $/.CURSOR.panic("Late-bound method name only valid in role"); } $name := "!!LATENAME!!" ~ ~$; } if $name ne "" { # Set name. $ast.name($name); # Insert it into the method table. my $meta_meth := $*MULTINESS eq 'multi' ?? 'add_multi_method' !! 'add_method'; my $is_dispatcher := $*MULTINESS eq 'proto'; my $code := $*W.create_code($ast, $name, $is_dispatcher); if $*MULTINESS eq 'multi' { attach_multi_signature($code, $ast); } $*W.pkg_add_method($*PACKAGE, $meta_meth, $name, $code); $ast.annotate('code_obj', $code); # Install it in the package also if needed. if $*SCOPE eq 'our' { $*W.install_package_routine($*PACKAGE, $name, $ast); } # If it's a proto, also stash the current lexical dispatcher, for the {*} # to resolve. if $is_dispatcher { $ast[0].push(QAST::Op.new( :op('bind'), QAST::Var.new( :name('CURRENT_DISPATCH_CAPTURE'), :scope('lexical'), :decl('var') ), QAST::Op.new( :op('savecapture') ) )); $ast[0].push(QAST::Op.new( :op('bind'), QAST::Var.new( :name('&*CURRENT_DISPATCHER'), :scope('lexical'), :decl('var') ), QAST::Op.new( :op('getcodeobj'), QAST::Op.new( :op('curcode') ) ) )); } } # Install AST node in match object, then apply traits. my $lex_ast := QAST::Op.new( :op('takeclosure'), $ast ); $lex_ast.annotate('sink', $ast); $lex_ast.annotate('block_ast', $ast); $lex_ast.annotate('code_obj', $ast.ann('code_obj')); make $lex_ast; if $ { for $ { $_.ast()($/); } } $/.prune; } sub only_star_block() { my $ast := $*W.pop_lexpad(); $ast.push(QAST::Op.new( :op('invokewithcapture'), QAST::Op.new( :op('ifnull'), QAST::Op.new( :op('multicachefind'), QAST::Var.new( :name('$!dispatch_cache'), :scope('attribute'), QAST::Op.new( :op('getcodeobj'), QAST::Op.new( :op('curcode') ) ), QAST::WVal.new( :value($*W.find_sym(['NQPRoutine'])) ), ), QAST::Op.new( :op('usecapture') ) ), QAST::Op.new( :op('callmethod'), :name('dispatch'), QAST::Op.new( :op('getcodeobj'), QAST::Op.new( :op('curcode') ) ), QAST::Op.new( :op('savecapture') ) ) ), QAST::Op.new( :op('usecapture') ) )); $ast } sub attach_multi_signature($code_obj, $routine) { my $types := nqp::list(); my $definednesses := nqp::list(); for @($routine[0]) { if nqp::istype($_, QAST::Var) && $_.decl eq 'param' && !$_.named { $types.push($_.returns =:= NQPMu ?? nqp::null() !! $_.returns); my $defann := $_.ann('definedness'); $definednesses.push($defann eq 'D' ?? 1 !! $defann eq 'U' ?? 2 !! 0); } } $*W.set_routine_signature($code_obj, $types, $definednesses); } sub wrap_return_handler($ast) { QAST::Op.new( :op, :name, $ast ) } method signature($/) { my $BLOCK := $*W.cur_lexpad(); my $BLOCKINIT := $BLOCK[0]; if $ { my $inv := $.ast; $BLOCKINIT.push($inv); $BLOCKINIT.push(QAST::Op.new( :op('bind'), QAST::Var.new( :name('self'), :scope('lexical'), :decl('var') ), QAST::Var.new( :scope('lexical'), :name($inv.name) ) )); $BLOCK.annotate('signature_has_invocant', 1); } if $ { for $ { $BLOCKINIT.push($_.ast); } } $/.prune; } method parameter($/) { my $quant := $; my $ast; if $ { $ast := $.ast; if $quant ne '!' { $ast.default( default_for($) ); } } else { $ast := $.ast; if $quant eq '*' { $ast.slurpy(1); $ast.named( $ eq '%' ); } elsif $quant eq '?' { $ast.default( default_for($) ); } } if $ { if $quant eq '*' { $/.CURSOR.panic("Can't put default on slurpy parameter"); } if $quant eq '!' { $/.CURSOR.panic("Can't put default on required parameter"); } $ast.default( $[0].ast ); } unless $ast.default { $*W.cur_lexpad().arity( +$*W.cur_lexpad().arity + 1 ); } # Set the type of the parameter. if $ { my $type := $[0].ast.value; $ast.returns($type); if nqp::objprimspec($type) -> $prim { $*W.cur_lexpad().symbol($ast.name, :type($type)); if $ast.default && !$ { $ast.default(default_value_for_prim($prim)); } } } # Set definedness flag (XXX want a better way to do this). if $ { $ast.annotate('definedness', ~$[0]); } make $ast; $/.prune(); } method param_var($/) { my $name := ~$/; my $ast := QAST::Var.new( :name($name), :scope('lexical'), :decl('param'), :node($/) ); $*W.cur_lexpad().symbol($name, :scope('lexical') ); make $ast; } method named_param($/) { my $ast := $.ast; $ast.named( ~$ ); make $ast; } method typename($/) { # Try to locate the symbol. We'll emit a lookup via the SC so # the scope we emit code to do the symbol lookup in won't matter, # and so we can complain about non-existent type names. my @name := HLL::Compiler.parse_name(~$/); my $found := 0; try { my $sym := $*W.find_sym(@name); make QAST::WVal.new( :value($sym) ); $found := 1; } unless $found { $/.CURSOR.panic("Use of undeclared type '" ~ ~$/ ~ "'"); } $/.prune; } method trait($/) { make $.ast; $/.prune; } method trait_mod:sym($/) { if $ eq 'parrot_vtable' { # XXX This should be in Parrot-specific module and need a pragma. my $c_ast := $[0].ast; $/.CURSOR.panic("Trait 'parrot_vtable' requires constant scalar argument") unless $c_ast ~~ QAST::SVal; my $name := $c_ast.value; my $package := $*PACKAGE; my $is_dispatcher := $*SCOPE eq 'proto'; make -> $match { $*W.pkg_add_method($package, 'add_parrot_vtable_mapping', $name, $match.ast.ann('code_obj') // $*W.create_code($match.ast.ann('block_ast'), $name, $is_dispatcher)); }; } elsif $ eq 'parrot_vtable_handler' { # XXX This should be in Parrot-specific module and need a pragma. my $c_ast := $[0].ast; $/.CURSOR.panic("Trait 'parrot_vtable_handler' requires constant scalar argument") unless $c_ast ~~ QAST::SVal; my $name := $c_ast.value; my $package := $*PACKAGE; make -> $match { $*W.pkg_add_parrot_vtable_handler_mapping($package, $name, ~$match); }; } elsif $ eq 'positional_delegate' { make -> $m { $*DECLARAND_ATTR.set_positional_delegate(1) }; } elsif $ eq 'associative_delegate' { make -> $m { $*DECLARAND_ATTR.set_associative_delegate(1) }; } elsif $ eq 'export' { make -> $match { my $ast := $match.ast; my $name := $ast.ann('block_ast').name; $*EXPORT.WHO.WHO{'&' ~ $name} := $ast.ann('code_obj') // $*W.create_code($ast.ann('block_ast'), $name, 0); }; } else { $/.CURSOR.panic("Trait '$' not implemented"); } $/.prune; } method regex_declarator($/, $key?) { my $name; if $ { $name := ~$.ast; } else { if $*PKGDECL ne 'role' { $/.CURSOR.panic("Late-bound method name only valid in role"); } $name := "!!LATENAME!!" ~ ~$; } my $ast; if $ { $ast := QAST::Block.new( :name($name), QAST::Op.new( QAST::Var.new( :name('self'), :scope('local'), :decl('param') ), QAST::SVal.new( :value($name) ), :name('!protoregex'), :op('callmethod') ), :blocktype('declaration_static'), :node($/) ); $*W.pkg_add_method($*PACKAGE, 'add_method', $name, $*W.create_code($ast, $name, 0, :code_type_name)); } else { my $block := $*W.pop_lexpad(); $block[0].unshift(QAST::Var.new(:name, :scope, :decl)); $block[0].push(QAST::Op.new( :op('bind'), QAST::Var.new(:name, :scope, :decl ), QAST::Var.new( :name, :scope('lexical') ))); $block[0].push(QAST::Var.new(:name<$¢>, :scope, :decl)); $block[0].push(QAST::Var.new(:name<$/>, :scope, :decl)); $block.symbol('$¢', :scope); $block.symbol('$/', :scope); my $code := %*RX; my $regex := %*LANG.qbuildsub($.ast, $block, code_obj => $code, cursor_type => $*W.find_sym(['NQPCursor'])); $regex.name($name); if $*PKGDECL && nqp::can($*PACKAGE.HOW, 'add_method') { # Add the actual method, marking it as a static declaration # since it's reachable through the method table. $block.blocktype('declaration_static'); $*W.pkg_add_method($*PACKAGE, 'add_method', $name, $code); } # If this appears in a role, its NFA may depend on generic args. # If it does, we store the generic version of it. if $*PKGDECL eq 'role' { my $gen_nfa := QRegex::NFA.new(); $gen_nfa.addnode($.ast, :vars_as_generic); if $gen_nfa.generic { $code.SET_GENERIC_NFA($gen_nfa); } } # In sink context, we don't need the Regex::Regex object. $ast := QAST::Op.new( :op, :name, lexical_package_lookup(['NQPRegexMethod'], $/), $regex); $ast.annotate('sink', $regex); } make $ast; } method dotty($/) { my $ast := $ ?? $[0].ast !! QAST::Op.new( :node($/) ); if $ { $ast.unshift($.ast); $ast.op('callmethod'); } elsif $ eq 'HOW' { $ast.op('how'); } elsif $ eq 'WHAT' { $ast.op('what'); } elsif $ eq 'WHO' { $ast.op('who'); } elsif $ eq 'REPR' { $ast.op('reprname'); } else { $ast.name(~$); $ast.op('callmethod'); } make $ast; $/.prune; } ## Terms method term:sym($/) { make QAST::Op.new( :op('decont'), QAST::Var.new( :name('self'), :scope('lexical') ) ); } method term:sym($/) { my $ast := $.ast; $ast.name('&' ~ ~$); make $ast; $/.prune; } method term:sym($/) { # See if it's a lexical symbol (known in any outer scope). my $var; if $*W.is_lexical(~$) { unless $ { try { my $sym := $*W.find_sym([~$]); unless nqp::isnull(nqp::getobjsc($sym)) { $var := QAST::WVal.new( :value($sym) ); } } } unless $var { $var := QAST::Var.new( :name(~$), :scope('lexical') ); } } else { my @ns := nqp::clone($); unless $ { try { my $sym := $*W.find_sym(@ns); unless nqp::isnull(nqp::getobjsc($sym)) { $var := QAST::WVal.new( :value($sym) ); } } } unless $var { $var := lexical_package_lookup(@ns, $/); } } # If it's a call, add the arguments. my $ast := $var; if $ { $ast := $[0].ast; $ast.unshift($var); } make $ast; $/.prune; } method term:sym($/) { my @args := $ ?? $[0].ast.list !! []; my $pirop := ~$; $pirop := join(' ', nqp::split('__', $pirop)); make QAST::VM.new( :pirop($pirop), :node($/), |@args ); $/.prune; } method term:sym($/) { make QAST::VM.new( :pirconst(~$) ); $/.prune; } method term:sym($/) { my $op := ~$; my @args := $ ?? $[0].ast.list !! []; my $ast := QAST::Op.new( :op($op), |@args, :node($/) ); make $ast; $/.prune; } method term:sym($/) { make QAST::Op.new( :op('const'), :name(~$) ); $/.prune; } method term:sym($/) { my $dc_name := QAST::Node.unique('dispatch_cap'); my $stmts := QAST::Stmts.new( QAST::Op.new( :op('bind'), QAST::Var.new( :name($dc_name), :scope('local'), :decl('var') ), QAST::Var.new( :name('CURRENT_DISPATCH_CAPTURE'), :scope('lexical') ) ), QAST::Op.new( :op('invokewithcapture'), QAST::Op.new( :op('ifnull'), QAST::Op.new( :op('multicachefind'), QAST::Var.new( :name('$!dispatch_cache'), :scope('attribute'), QAST::Var.new( :name('&*CURRENT_DISPATCHER'), :scope('lexical') ), QAST::WVal.new( :value($*W.find_sym(['NQPRoutine'])) ), ), QAST::Var.new( :name($dc_name), :scope('local') ) ), QAST::Op.new( :op('callmethod'), :name('dispatch'), QAST::Var.new( :name('&*CURRENT_DISPATCHER'), :scope('lexical') ), QAST::Var.new( :name($dc_name), :scope('local') ) ) ), QAST::Var.new( :name($dc_name), :scope('local') ) )); make QAST::Op.new( :op('locallifetime'), $stmts, $dc_name ); $/.prune; } method args($/) { make $.ast; } method arglist($/) { my $ast := QAST::Op.new( :op('call'), :node($/) ); if $ { my $expr := $.ast; if nqp::istype($expr, QAST::Op) && $expr.name eq '&infix:<,>' && !$expr.named { for $expr.list { $ast.push($_); } } else { $ast.push($expr); } } my $i := 0; my $n := +$ast.list; while $i < $n { if nqp::istype($ast[$i], QAST::Op) && $ast[$i].name eq '&prefix:<|>' { $ast[$i] := $ast[$i][0]; $ast[$i].flat(1); $ast[$i].named(1) if nqp::istype($ast[$i], QAST::Var) && nqp::substr($ast[$i].name, 0, 1) eq '%'; } $i++; } make $ast; } method term:sym($/) { make $.ast; $/.prune; } method term:sym($/) { make $.ast; $/.prune; } method circumfix:sym<( )>($/) { make $ ?? $[0].ast !! QAST::Op.new( :op('list'), :node($/) ); $/.prune; } method circumfix:sym<[ ]>($/) { my $ast; if $ { $ast := $[0].ast; unless nqp::istype($ast, QAST::Op) && $ast.name eq '&infix:<,>' { $ast := QAST::Op.new( $ast, :op('list') ); } } else { $ast := QAST::Op.new( :op('list') ); } $ast.name('&circumfix:<[ ]>'); make $ast; $/.prune; } method circumfix:sym($/) { make $.ast; $/.prune } method circumfix:sym<« »>($/) { make $.ast; $/.prune } method circumfix:sym<{ }>($/) { if +$ > 0 { my $ast := QAST::Op.new( :op('takeclosure'), $.ast ); $ast.annotate('bareblock', 1); make $ast; } elsif $ { make $.ast; } else { make default_for('%'); } $/.prune; } method coloncircumfix($/) { make $.ast } method semilist($/) { make $.ast; $/.prune; } method postcircumfix:sym<[ ]>($/) { make QAST::VarWithFallback.new( :scope('positional'), $.ast, :fallback(default_for('$')) ); } method postcircumfix:sym<{ }>($/) { make QAST::VarWithFallback.new( :scope('associative'), $.ast, :fallback(default_for('$')) ); } method postcircumfix:sym($/) { make QAST::VarWithFallback.new( :scope('associative'), $.ast, :fallback(default_for('$')) ); } method postcircumfix:sym<( )>($/) { make $.ast; } method value($/) { make $ ?? $.ast !! $.ast; $/.prune; } method number($/) { my $value := $ ?? $.ast !! $.ast; if ~$ eq '-' { $value := -$value; } make $ ?? QAST::NVal.new( :value($value) ) !! QAST::IVal.new( :value($value) ); $/.prune; } method quote:sym($/) { make $.ast; } method quote:sym($/) { make $.ast; } method quote:sym($/) { make $.ast; } method quote:sym($/) { make $.ast; } method quote:sym($/) { make $.ast; } method quote:sym($/) { make QAST::VM.new( :pir( $.ast.value ), :node($/) ); } method quote:sym($/) { my $block := $*W.pop_lexpad(); $block[0].push(QAST::Var.new(:name, :scope, :decl)); $block[0].push(QAST::Op.new( :op('bind'), QAST::Var.new(:name, :scope, :decl('var') ), QAST::Var.new( :name, :scope('lexical') ))); $block[0].push(QAST::Var.new(:name<$¢>, :scope, :decl('var'))); $block[0].push(QAST::Var.new(:name<$/>, :scope, :decl('var'))); $block.symbol('$¢', :scope); $block.symbol('$/', :scope); my $regex := %*LANG.qbuildsub($.ast, $block); my $ast := QAST::Op.new( :op, :name, lexical_package_lookup(['NQPRegex'], $/), $regex); # In sink context, we don't need the Regex::Regex object. $ast.annotate('sink', $regex); make $ast; } method quote_escape:sym<$>($/) { make $.ast; } method quote_escape:sym<{ }>($/) { make QAST::Op.new( :op('stringify'), block_immediate($.ast), :node($/) ); } method quote_escape:sym($/) { make "\c[27]"; } ## Operators method postfix:sym<.>($/) { make $.ast; } method term:sym($/) { make QAST::Op.new( :op('call'), :name('RETURN'), $ ?? $.ast !! QAST::WVal.new( :value($*W.find_sym(['NQPMu'])) )); } method prefix:sym($/) { make QAST::Op.new( QAST::Var.new( :name('$/'), :scope('lexical') ), :op('callmethod'), :name('make'), :node($/) ); } method term:sym($/) { my $ast := QAST::Op.new( :op('control'), :name('next') ); if $ { $ast.push(QAST::WVal.new( :value($*W.find_sym([$])), :named('label') )); } make $ast } method term:sym($/) { my $ast := QAST::Op.new( :op('control'), :name('last') ); if $ { $ast.push(QAST::WVal.new( :value($*W.find_sym([$])), :named('label') )); } make $ast } method term:sym($/) { my $ast := QAST::Op.new( :op('control'), :name('redo') ); if $ { $ast.push(QAST::WVal.new( :value($*W.find_sym([$])), :named('label') )); } make $ast } method infix:sym<~~>($/) { make QAST::Op.new( :op, :name, :node($/) ); } # Takes a multi-part name that we know is in a package and generates # QAST to look it up using NQP package semantics. sub lexical_package_lookup(@name, $/) { # Catch empty names and die helpfully. if +@name == 0 { $/.CURSOR.panic("Cannot compile empty name"); } # The final lookup will always be just a keyed access to a # symbol table. my $final_name := @name.pop(); my $lookup := QAST::VarWithFallback.new( :scope('associative'), QAST::SVal.new( :value(~$final_name) ) ); # If there's no explicit qualification, then look it up in the # current package, and fall back to looking in GLOBAL. if +@name == 0 { $lookup.unshift(QAST::Op.new( :op('who'), QAST::Var.new( :name('$?PACKAGE'), :scope('lexical') ) )); $lookup.fallback(QAST::Op.new( :op('ifnull'), QAST::Op.new( :op('atkey'), QAST::Op.new( :op('who'), QAST::WVal.new( :value($*GLOBALish) ) ), QAST::SVal.new( :value(~$final_name) ) ), default_for(nqp::substr(~$final_name, 0, 1)))); } # Otherwise, see if the first part of the name is lexically # known. If not, it's in GLOBAL. Also, if first part is GLOBAL # then strip it off. else { my $path; if $*W.is_lexical(@name[0]) { try { my $first := @name.shift(); $path := QAST::WVal.new( :value($*W.find_sym([$first])) ); CATCH { $path := QAST::Var.new( :name($first), :scope('lexical') ); } } } else { $path := QAST::WVal.new( :value($*GLOBALish) ); } if @name[0] eq 'GLOBAL' { @name.shift(); } for @name { my $path_temp := QAST::Node.unique('pkg_lookup_tmp'); $path := QAST::Stmts.new( QAST::Op.new( :op('bind'), QAST::Var.new( :name($path_temp), :scope('local'), :decl('var') ), $path ), QAST::Op.new( :op('if'), QAST::Op.new( :op('existskey'), QAST::Op.new( :op('who'), QAST::Var.new( :name($path_temp), :scope('local') ) ), QAST::SVal.new( :value(~$_) ) ), QAST::Op.new( :op('atkey'), QAST::Op.new( :op('who'), QAST::Var.new( :name($path_temp), :scope('local') ) ), QAST::SVal.new( :value(~$_) ) ), default_for('$') )); $path := QAST::Op.new( :op('locallifetime'), $path, $path_temp ); } $lookup.unshift(QAST::Op.new(:op('who'), $path)); my $sigil := nqp::substr(~$final_name, 0, 1); if $sigil eq '@' || $sigil eq '%' { my $viv_temp := QAST::Node.unique('pkg_viv_tmp'); $lookup[0] := QAST::Op.new( :op('bind'), QAST::Var.new( :name($viv_temp), :scope('local'), :decl('var') ), $lookup[0]); $lookup.fallback(QAST::Op.new( :op('bindkey'), QAST::Var.new( :name($viv_temp), :scope('local') ), $lookup[1], default_for($sigil) )); } else { $lookup.fallback(default_for($sigil)); } } return $lookup; } } class NQP::RegexActions is QRegex::P6Regex::Actions { method metachar:sym<:my>($/) { my $ast := $.ast; make QAST::Regex.new( $ast, :rxtype('qastnode'), :subtype('declarative'), :node($/) ); } method metachar:sym<{ }>($/) { make QAST::Regex.new( $.ast, :rxtype, :node($/) ); } method metachar:sym($/) { make QAST::Regex.new( QAST::NodeList.new( QAST::SVal.new( :value('!INTERPOLATE') ), $.ast, QAST::IVal.new( :value($*SEQ ?? 1 !! 0) ) ), :rxtype, :subtype, :node($/)); } method assertion:sym<{ }>($/) { make QAST::Regex.new( QAST::NodeList.new( QAST::SVal.new( :value('!INTERPOLATE_REGEX') ), $.ast), :rxtype, :subtype, :node($/)); } method assertion:sym($/) { make QAST::Regex.new( $.ast, :subtype, :negate( $ eq '!' ), :rxtype, :node($/) ); } method assertion:sym($/) { make QAST::Regex.new( QAST::NodeList.new( QAST::SVal.new( :value('!INTERPOLATE_REGEX') ), $.ast), :rxtype, :subtype, :node($/)); } method codeblock($/) { my $block := $.ast; $block.blocktype('immediate'); my $ast := QAST::Stmts.new( QAST::Op.new( :op('bind'), QAST::Var.new( :name('$/'), :scope('lexical') ), QAST::Op.new( QAST::Var.new( :name('$¢'), :scope('lexical') ), :name('MATCH'), :op('callmethod') ) ), $block ); make $ast; } method assertion:sym($/) { my $name := ~$; my $qast; if $ { $qast := $.ast; if $qast.rxtype eq 'subrule' { self.subrule_alias($qast, $name); } else { $qast := QAST::Regex.new( $qast, :name($name), :rxtype, :node($/) ); } } elsif $name eq 'sym' { my str $fullrxname := %*RX; my str $rxname := ""; my int $loc := nqp::index($fullrxname, ':sym'); if $loc >= 0 { $rxname := nqp::substr($fullrxname, $loc + 5 ); $rxname := nqp::substr( $rxname, 0, nqp::chars($rxname) - 1); } else { $loc := nqp::index($fullrxname, ':'); my $angleloc := nqp::index($fullrxname, '<', $loc); $angleloc := nqp::index($fullrxname, '«', $loc) if $angleloc < 0; $rxname := nqp::substr($fullrxname, $loc + 1, $angleloc - $loc - 1) unless $loc < 0; } if $loc >= 0 { $qast := QAST::Regex.new(:name('sym'), :rxtype, :node($/), QAST::Regex.new(:rxtype, $rxname, :node($/))); } else { self.panic(" only valid in multiregexes"); } } else { $qast := QAST::Regex.new(:rxtype, :subtype, :node($/), :name($name), QAST::NodeList.new( QAST::SVal.new( :value($name) ) ) ); if $ { for $.ast.list { $qast[0].push( $_ ) } } elsif $ { if $name eq 'after' { my int $litlen := self.offset_ast($.ast); if $litlen >= 0 { $qast[0][0].value('before'); $qast[0].push(self.qbuildsub($.ast, :anon(1), :addself(1))); $qast[0].push(QAST::IVal.new( :value($litlen) )); # optional offset to before } else { $qast[0].push(self.qbuildsub(self.flip_ast($.ast), :anon(1), :addself(1))); } } else { $qast[0].push(self.qbuildsub($.ast, :anon(1), :addself(1))); } } } make $qast; } method arglist($/) { make $.ast } method arg($/) { make $.ast; } method create_regex_code_object($block) { my $code := $*W.create_code($block, '', 0, :code_type_name); if nqp::existskey(%*RX, 'code') { %*RX.ADD_NESTED_CODE($code); } $code } method store_regex_nfa($code_obj, $block, $nfa) { $code_obj.SET_NFA($nfa.save); } method store_regex_caps($code_obj, $block, %caps) { $code_obj.SET_CAPS(%caps); } method store_regex_alt_nfa($code_obj, $block, $key, @alternatives) { my @saved; for @alternatives { @saved.push($_.save(:non_empty)); } $code_obj.SET_ALT_NFA($key, @saved); } } nqp-2015.11/src/NQP/Compiler.nqp000644 000765 000024 00000002775 12623372164 020172 0ustar00williamcoledastaff000000 000000 use QRegex; class NQP::Compiler is HLL::Compiler { method optimize($ast, *%adverbs) { %adverbs eq 'off' ?? $ast !! NQP::Optimizer.new.optimize($ast, |%adverbs) } } # Create and configure compiler object. my $nqpcomp := NQP::Compiler.new(); $nqpcomp.language('nqp'); $nqpcomp.parsegrammar(NQP::Grammar); $nqpcomp.parseactions(NQP::Actions); hll-config($nqpcomp.config); $nqpcomp.addstage('optimize', :after); # Add extra command line options. my @clo := $nqpcomp.commandline_options(); @clo.push('parsetrace'); @clo.push('setting=s'); @clo.push('setting-path=s'); @clo.push('custom-regex-lib=s'); @clo.push('module-path=s'); @clo.push('no-regex-lib'); @clo.push('stable-sc'); @clo.push('optimize=s'); #?if parrot @clo.push('vmlibs=s'); @clo.push('dynext=s'); #?endif #?if jvm @clo.push('javaclass=s'); @clo.push('bootstrap'); $nqpcomp.addstage('classname', :after); #?endif #?if moar @clo.push('vmlibs=s'); @clo.push('bootstrap'); #?endif #?if parrot # XXX FIX ME sub MAIN(@ARGS) { #?endif #?if moar # XXX FIX ME sub MAIN(@ARGS) { #?endif #?if jvm sub MAIN(*@ARGS) { #?endif #?if js sub MAIN(*@ARGS) { #?endif # Enter the compiler. $nqpcomp.command_line(@ARGS, :encoding('utf8'), :transcode('ascii iso-8859-1')); # Uncomment below to dump cursor usage logging (also need to uncomment two lines # in src/QRegex/Cursor.nqp, in !cursor_start_cur and !cursor_start_all). #ParseShared.log_dump(); # Close event logging $nqpcomp.nqpevent(); } nqp-2015.11/src/NQP/Grammar.nqp000644 000765 000024 00000063176 12567573107 020017 0ustar00williamcoledastaff000000 000000 grammar NQP::Grammar is HLL::Grammar { method TOP() { # Language braids. my %*LANG; %*LANG := NQP::Regex; %*LANG := NQP::RegexActions; %*LANG
:= NQP::Grammar; %*LANG := NQP::Actions; # Package declarator to meta-package mapping. Note that there is # one universal KnowHOW from the 6model core, and an attribute # meta-object to go with it. my %*HOW; %*HOW := nqp::knowhow(); %*HOW := nqp::knowhowattr(); # Serialization context builder - keeps track of objects that # cross the compile-time/run-time boundary that are associated # with this compilation unit. my $file := nqp::getlexdyn('$?FILES'); my $source_id := nqp::sha1(self.target()) ~ (%*COMPILING<%?OPTIONS> ?? '' !! '-' ~ ~nqp::time_n()); my $*W := nqp::isnull($file) ?? NQP::World.new(:handle($source_id)) !! NQP::World.new(:handle($source_id), :description($file)); my $*SCOPE := ''; my $*MULTINESS := ''; my $*PKGDECL := ''; my $*INVOCANT_OK := 0; my $*RETURN_USED := 0; my $*CONTROL_USED := 0; my $*IN_REGEX_ASSERTION := 0; my %*HANDLERS; self.comp_unit; } ## Lexer stuff token identifier { <.ident> [ <[\-']> <.ident> ]* } token name { ['::']* } token deflongname { ? } token ENDSTMT { [ <.unv>? $$ <.ws> ]? } token ws { || || [ \v+ | '#' \N* | ^^ <.pod_comment> | \h+ ]* } token unv { # :dba('horizontal whitespace') [ | ^^ <.pod_comment> | \h* '#' \N* | \h+ ] } token pod_comment { ^^ \h* '=' [ | 'begin' \h+ 'END' >> [ .*? \n \h* '=' 'end' \h+ 'END' » \N* || .* ] | 'begin' \h+ [ || .*? \n \h* '=' 'end' \h+ $ » \N* || <.panic: '=begin without matching =end'> ] | 'begin' » \h* [ $$ || '#' || <.panic: 'Unrecognized token after =begin'> ] [ || .*? \n \h* '=' 'end' » \N* || <.panic: '=begin without matching =end'> ] | {} .*? \n ]? | \n ]> | {} [ \s || <.panic: 'Illegal pod directive'> ] \N* ] } ## Top-level rules token comp_unit { :my $*IN_DECL := ''; :my $*HAS_YOU_ARE_HERE := 0; :my $*MAIN_SUB; :my $*UNIT := $*W.push_lexpad($/); # Create GLOBALish - the current GLOBAL view, created fresh # for each compilation unit so we get separate compilation. :my $*GLOBALish := $*W.pkg_create_mo(%*HOW, :name('GLOBALish')); { $*GLOBALish.HOW.compose($*GLOBALish); $*W.install_lexical_symbol($*UNIT, 'GLOBALish', $*GLOBALish); } # This is also the starting package. :my $*PACKAGE := $*GLOBALish; { $*W.install_lexical_symbol($*UNIT, '$?PACKAGE', $*PACKAGE); } # Create EXPORT::DEFAULT. :my $*EXPORT; { unless %*COMPILING<%?OPTIONS> eq 'NULL' { $*EXPORT := $*W.pkg_create_mo(%*HOW, :name('EXPORT')); $*EXPORT.HOW.compose($*EXPORT); $*W.install_lexical_symbol($*UNIT, 'EXPORT', $*EXPORT); my $DEFAULT := $*W.pkg_create_mo(%*HOW, :name('DEFAULT')); $DEFAULT.HOW.compose($DEFAULT); ($*EXPORT.WHO) := $DEFAULT; } } { $*W.add_initializations(); } <.outerctx> [ $ || <.panic: 'Confused'> ] } rule statementlist { '' [ | $ | > | [ <.eat_terminator> ]* ] } token label { ':' <.ws> { $*LABEL := ~$; my $label := $*W.find_sym(['NQPLabel']).new(); $*W.add_object($label); $*W.install_lexical_symbol($*W.cur_lexpad(), $*LABEL, $label); } } token statement($*LABEL = '') { | $ > [ |

-joՖ{[<> 6xqV 'HWG%%8K$p64'81?)>$@.:(!ɺs].ݰvNPezS%je&X>ս0٭IlA~{&Es |2z>t6Rs% #fv8fܸqV@̭lJPRm4i% s76}{Q#UmEe n(YUVx~mVbQV/_~Vj KhE0ݺﭷJnX,aXY{=@&wvG?B j}}^ύ큺zy P^0VV܍ bB]Q4{jE>T[SkZV]twB@E_ wqS}@)fSb6+fA,t ?JX_vVx",z>,p  VU?<*/&cjWL!ms(A|-`z{ܲ}8ʾ=f(lljS=iS E~M^sЯ m6y7%-=7y5;D8Wz8sQ?J˺l+/B1ߡ|$|ɜICqϳ򹶄㵜ӓϥRm3P~_T]2cL(ƷǶo/F{Ԛ/N|oVӾOS?qڋ|w-ar/ڋsU<7ppߏkUO_Gx%GiϔJQ&JM)y ++yIO7SฒgC5!d(pP$rѫ歔S6^:%NN ?K "hfc%O,Ukk[V~2p p[_s@%K*Y_//cl, = lwgww$?6G"5a.dc-8ho1?7o/_ dׄMV_ |C|n6`~[5cԗe{oϯ ={Ws 8ßl+5B=+l\3I,sʯ{ M\>w/C1o[ wgA~3bk.|gxϟ˷4pwXa|qZ6~!?[B%[Qq ߢ:wV]6Bg|{_ȵ< wdOuy#P~ ǁal&7fM{$dO? a> "̾|N>&1WǪ 'OO}%0 FC>]6s&0 ׭ \'>/8_^}}?Ǡ~1S< Gٜ@_PcI_0/j/7/awBu lf~ |x5so29 Ÿ\|`j_ WH!*|k7O+s /F>+A-|Ioke4/!m8?PiR2|Sja6<.. Fw7aV>/@^xC:,ԇ4+cjH^@`6g[f6PɂP ; a/Ex4?Dp th+ho9 {~]X[Uc䏄s"S&1b=ԟCڧ4޻G獽P:&ѹdg̵J+WJK̙?'T=TٲUҊKẀQ5߿fr}}yfj ʺ3 uuU]宻'f.++\u).wzj*e/w!SfUM `az&ϚsהOǛw;Q LcP^.]]bv]\srM<#|ikn-cBں)U8&] \\AʭPp*|E͌.}[S :TSlrbbʌfL5gL+UPBMq=.Q-)RT \Udvuː2wmHȅɵeTOF>n(㪛mJ\C78Ȃ 9TRE2kFU|ֻVO\@ 5rŖbCh Vl,@da@ȅ|"X S@rQI +/]pF-e5<-? kfԗK%jzٸQs HV_ZzWo2ǎ=; *뼠 jyAu^Pb@Sp`?TXRbJ%)(TXrRb ̹-oiJ$z *]Qq 1{6Hz_AOrF]LUe A W>mFX1UT՟[Az^[z^^B})1kO`FEh,FO(:gg>OrȰ͘3y: #c:ޤ9u3\KU=J_ZAi9M9Ux(~10h;+˧`ؠZfb6 (OL{r)\Q^7P"u__[w{|.w[3O)=/+)wF(K-8*{0{:ݬ[s sӃEN{f_5fxgO ՂK>} R= ֫q+ =<[gR4{4,/ a9h*-^ƂFZ3S Om>ӿ>0_z<0 a`Ĵ!#gCӛ>0 ~ L瀞1}vӵFC.1 i"ӟ^|c +_L_L>1z/LG?fӑ`c r蟇i?Lar44 49 OLǂ1bzS| `:1-tĭZ O (P9 ǍA#1h0_K$ʣT`AT;0Ay4̏|:'a>hJQwWUb@y49?*Nq*pwOopz6\C㕛Ti= '|˄ʙmwgs- =**˃y'ǡgL \?ۡ x6 +<Ro:M ?@444`igWIzz. AsHO22E|3 ˎ@m*r]["7j@1.X 5q {,0DvRwT7 u8 DlV04`+^ F{OQEW]ԧhﱾ?A P΋SPJ R;{7,p{)S`q |yI (wB,pAzugxl&c`R+(`zqDŦl&MR%8`Q@{rtpnIp B`qTN'X!8- Аn@ѣ(!E z5஢|j>B$7~S<<BsdGdZU?ib?]K!}$?o$};HvIis mAߪ&^mN.&FQ+v-!ĩ@MP 味L(hjR/ J^6`}M𮞆`8 ;h*)!U!`T?P_PNӌBlNB⿀@L=P4o/ Jm>P֭Wx7g%[6wA`8ڠ[ $*=eggRE {`LN;<0&1(-Hmzeh O/Ǻ9tYC G?27R ]uXERQh@u 9U)YZ$ ַZ] 4gfDxmd܌(s8)~C;8W2ipZdhWk~r┎! (vD Tvdi UXP~2 HA)kURi%4VRrÕaR9J&Rx&J9S {G͕;RJ1 ʀ qkĦJJMF"ّw\6Ffhr[q)V_gi JbHcfGq$&dȋ{ / p}D KLa?A{`"Le#x0!s8=31 uǂ/@kWd )rw@a"T(7dIb|܉|sMsԂ`_ሶ]-6'Nt-h8擭^Q Zڱ̔a#F2P)0˗N%8*,3QYIq3q"jֵշپ>w;&P;Qmd mm"5&U۔4{gMO(|WB\EzT 5~ϾPĻlW x~NO^#H a0٧Of#»fw/_Gmk A(–{vF#F(j >E= KwOmx0o@"2s! |ERZoY/#I{q(c?͵ jM$Fߞ!^\22_ |s$DuC<hRq&7  cr!EGV'U!tC cH8Ȫ.'j^&Ƒ21lm[+&Lk@Qs<.*㕊ﳾq3Km Ўs/頛#u%ThOK%LjtnwE,=Z ] 7@1FqV4rk (7Z=2xB>heJ ߁j L ++U˔E2 .?q'Q mf6xv`*Dͫ.܄'Ssiҗno5ptx2Yس [}"O׀6!r[muP޷MMBnW vZS;"ߴI/!F@4! °{-` C{q!@8['1N( #t RKu)GԒpHSzF/|͆.3W W"sn2dJd1 Pop<PZS7TPkINʈ .첤D*?d#pչ<͊Tl+T.]j$VZLT]a*b'I5m>j!9Fk%Ng [N=I}mhpO5wn lz^5ūpMr=ߓEh!"J%@VE")No3P b\ܴnж$e͙)qW|o)M_E=287(‰R+< |QoS+9[+T;=>ɰ:ZA>ZPg <Fx^T,VJ7j IiF=e|nR.}< l[hhkY3N屖!Y8 #!!W`]v(.gXO4| G%حYȩqR-Sd kQz;~gi^+$O40ײwT:Hʁ!#MGx4)?M8Ԋ*2e#[BCP{ML@9yУpN@+<ښPBi/xp1۱uSZ=RfJ7Wx+D r#S{Y0c50-Tr'>B/zK ' ~Isy …&!G 3ًJ2BY'Oy-0/G0G1衲A1Cap=y:8) V\vE 3p=ap0+X-jc@w(~c_M)s 貤t&;N&p0 _w⢪1g q?dSu?z*Gu7 F< QcY7d W} ,ޅ -j%oA->O9LJfE ༝o.CBH8'%Zr$E[!䖌L<nnEJ:b }]o`{YïXJ RJ33X./`O:&APX6puB@n1ӌnT-*Xk4ςhsV(DEQS?0XWrFbsQ&blwj-Y-FlaluQ=HYBy~ [$7Kɩ"ם(7K[_Kp 'eb!t|Ymi8Kp1kŽPϯء;}̞AkG]P̺Wwxf~(:mxG؜1/L}j\pgk&5{UY8陋j ǹDs`^K^KA֍Uar)CKzD#~GX0Uy60 ةDr#"RN,6m# zBAQ*XA!%}3+ R >I \TWYx)8zhH"ـ0&`G::gY}hNS &qJ'+,ؤW; gq_X-~؏vc jM%_D1h`qڑOJ\/Y}x f҈NmJ+ncRㇺڀ}[OXDW&gy5:"'7ǜ_>Ԩ}(O\i=&n`;-zjz,geN",~]dA8L۱F at|c^g)+Pr6a̴ZYP`\Ei%T/;(Hb*mԥSC:lt:H{? +8 Hv7~UCu@N}StvLrBАͤVkZw e*> z)iHe徧xfXlv3vE^+*""X]ώFCv0Le=pLR[%Ј6MM0@7bwy[198.AM|fxO17qE4xZYCMJ+th}i! SHX lGݺ4ܒߣ;ԳjcsZ6`R3,lUAz qYftSm,Fv^Ć?u0 ݰu\FZ#*+G͎pw=GC*[d6#[XIO :| M,@T1vSؗgf<2ٺ6\Q6?%g8"eqy{P~$pU[E{QuԭP>= L̟ Cb›8EP Zrz$_KcYD/U7!C0P}%P䄽3:Q{q v~ fWIH R&2Y%K7y-'~ $7̪13NG6/MabDFwgX?-oZQ(y5{=20p:(6΃,`l!pBbZ?7&ք+"R얭S lVF SI%- e\l#PRDb c@U"Q1P"P=}2Q 1|hCUQ۸Y_O\ěyF6S\_T-ppڨK U(#֕RG?"R;9ĺ:Xu*C~40zjvs^a;6aU1_́C6ў qD vށ\`y .FG.My\םOςÔ"?,,1U|)q}?<lsJxu$]bakC\i' -J%\[8GS;CaQy#=R瓸w[Хia`Mv'J?CB冕BPT9 wVL7l}15 Nr]/8mo;N dJ=O'@ PS=0lF? ~?\!+ /{(PK]A2O&,$\70;kO;{NI,̡D{w27.n4ۮMsat0Gz33ކ #ӭ)>u3t ?_ohUt\c-C;˔,܂={1V y>|m!A"rK)~.5c  r6N^4YS}oh[ucMcvZy)vӔk,?YLUqULr6i!$XlW^NLyMZ%0%0eغW,ZBqCZMZ-rٵ9|=fhSMoQS4U~ m36O۴jPQw&n>a0Np{{zLH&ɪz4lɾM?E&e%כ nFo-aE mëMϫ1&uf=-#y=Sxq>|xMެͱx}x]ܤuߦH^?ב3[·Qtް)O6kp׮Sx~|xݨx$)cvtԗۿkH.^6{&V3^﹪=+Xw{8FYlt[avAo^n/fIϮբ+°t@ptU-z5Dɽ>* ;& :~,YQGze"l_Sl))7^k:="y=ky[k:ukYH^{~ f?o#kM=oFjIϯ;^7$t. ew&PD0b*'J'W)_9:U4;=b?t "9*wb^zԷFlhRS$_*yV$t<5'|5oSya<eS:"z߈?7t<:" D !l &n eno( 3MbXi:#|G^gy՘)伮O D8ϾXq1eÚ ODmz{h~M EWb'E;?5c_`}şloD%Υa6j? o׶sNy]| aƘytL8U D.ͫ 6q Y P!؏;m6+z~%/乲6zEs9d~w^`笗y99EϼqIzξy9bq'ηGdd/| (tTǁ՝c^劈%u<|c34q2H%=~I+o˺?6ʑgXXBoLaR|1lcckbI 9rˍW5oO ϱS3 ~YOOE?%_clKs#K Wb3רgb$iC_5yYMxqxq8k5QcGE5{ v~x0![_:/=:_.&Sѣk_c^"Elt^+g\k΃?kݾ'yk+>|^q$;ϭϝ{I[8]k94 yH^>sq$ ]t_DQX_+kCF3A.f'4Y}Xi  Ig=/x^/z:,C*Yއh^^m)q(Hy5=s>+ey' e #`0sܵp7sp+c ]SqS\)~Ͽ5Rҹ /DҔIZZy 7O!RjgEr?}\WЋ>icw21KR}g7v {~ HeנPj0w7-IF!PE/lM&$#Y H\b^;TF7v'=^^SZ! wC"gpHjQ>_t_ئL&_>@9nr5EsxFcK{F_)΋ TbN #HT-w$"uSً4 JAW6>v[N+0D zRnTS%q$5IjeI(Ek3gIRf| '?fBEV4A)Nȑb(S LR~nĚUX/}2Tg#wj|<M4TA(g,*O9s]NY!o !gѪ5x/u}6 "F_r<ߢ<%(D5ƶF\/?[nGQ ˼zZQߑdfQR)Z +NJAx}IZ4_WF)؃9̐8W ꉭU @)~)XJUՋJO83RxkX%ngPI-/=vY:Ѫc] qvcsPN`uG``I rINkWpBhV%7QC? -)hQFB~aMg4 Q; aFztv??Pސ&'Re[blB<@jtńv ԈސzJLMxFh7K`~GIEfC^[T|r"|Q~+z[$֥ԐU*ݕc~Fr̆@ҩ6yW,ݵq34e³'eb]N^>d`^B2Vc {-!Z2ߜnev*q'J#yw~K+B=zՋ/kw1*Z/Ymľz;E Zu~5e>rh ɐ+, > o_=Y_XZ_3r qS;E| Kls@663O5Q6} dߌ'7ǮM'M*?{tjgdFhP@;  ѭ@9T]7K1~Yw_>Tuf|1<^Ϸi."b ?Mt/-oޅ' a!αpA{<}XƳA&j^zɗ~L,>9F6: h{ߓШG.̉:E/o͉6̔9~O\l?!˚9h|c7?Ѡ =` .Kb1utH:A{ke~ad'/`K3_n J C գ-V5Ж=E;Hw>|Qbȯ }~7;XlYr!0Ac8 PzcOTԳW{zAt<}(9Xkr: )9E }q 3"qpGQqO.q1# 9qx6:9!c*G?8pqLǂ@^ ⸡Ǒ8s|8p#q<%!h8f#Ꮒ#X8~d_|o6٫N0>a~T0Zs_' (@: y+wV=A#!'AQJ}NE'(56AQ/ABBP:'(TA JBPFe@$AY ʊMPVr%('D45$~ʍMPn41 AiHК&0 A%T"h^&p A 4!6A4_&Z2NkHDtbT~ 'yg{"jL/vgnWlE /͟"{(: |z|N>5D}E?n 3?% |Y<_/'/8&^"R5D,> U" Ri2̍TՀOY߁j7);z ]Gп#w S>S'X;BbOCb$9? @k<)׆OI^I2{̩$ '(: AR +?3,Spvꊘ/^$ T 8F-`PٽOvw`mk'x h YD}5ſڪO$:_{$9rAz ¼RD|s$d2A 6  ~aA#cK"GIF92 /:.|Q?4#! v0#eGFLT Wn/&2o&BYK~{E)@H E)Tn2 :Ѕ+i>BP'D@$;b,~7~0`k&t]=\5yn~u`Ӄ*_݇Iv,t P[Q({x?rx;u ( ~gaGk"!Q|Eg"O0/=nnFRċ}{ܮ݃ ٞg*z#^/hwO6k/}@ 0[gjC4 J-q#WaGXY#(j~5$#d'A-`?RhϧmD+ŕ)$L4ʚsm<%ճsDžb_= #ot>?W~3Sw9@(nS9i}a1i'g]ń_vm >`[ٟ Ţ\_ՇQf(AJ{%QxQ*JǽB)g~!Y`Re*%$,0cpW4-i(y䡿?N b^"I67QԽtG5Zi\Zp5?c۟'&ҏkSewRmtH7h)V}i+F;Չ?Ai&_x+:i')ք|KI-}N .c`!m6E[GaKvM,l3Gg.Re#_~j@iQ).'1?6&Q.\yĦpwܝkn_F0ԤsȬdfNNf9(^*ɕBti3qT@W3y[|YǶ}5W{mM<1OxRz w\Q$9g3=7+:H0M‘=toDao*㱒Zko`9؄F]\*H\ 7V+=#<p]XR ,tkdG6m^,%(_#~VͷA]5+'ʳҁPtCóBG6GM~@AShE"$xr)*g:aߍim&[=;~ !ڿUii6e4;]Gs(cK9TYR!2l!`wݜ sv4~gcjˣ~F;AóVB+Pms80msL]$tžO~ie{k8rNYԆb{?=SWm~ϊU|=-TB/}m0/0O4.'G65}D2)N7g[iN+Ybq\~߃ojlHmiEiE؁gj KS ]uH {\$UY0ٽv((.j*wu6ÿ4(*ʾ1@b!NAsȀ)M-w i &*'49'qІ$sL)2~ ϲ.DS ?q|@,9 _,?J t,0ȏ=M?.(H]& =TOhdjvѹ$$oTD;gv6wr 6"e }S-9 'pgm6sޙ_YX-! s"A2gk֢?6(Z,M(f9Ē?g&"vʺ)$,'ЩODy>Δ$|EclC8 NOzw7~0 pPVQItML?ɬ03d&dA'kMB%}91e)Bj&B"r7MOS~߇E߉@hPL& MI`_( 1d2l6}:]2E:TF9u#]g*q"<G' u ?Yf P IEkR`R`PAz?')9a}hy\QWbTn _#Jbm"<-o_UR\Rk`hX&+IYdM6kn {$>KLRf;Z+e/؅-'r!8sh7ʠYp{,5ۏOO {P='IqcG$Dqų^@%kh3͎%~"ѽS4-׺R7(aO8a2Z}~*0 l\@bt#{kh?vaup;ǜo/. OJwMg4bwz`(fGO1U;)"L>6Mlp ^ϰ%xo 0߆}A-7A}7>#%y.̚4l G}@=˺ho|eGt"^TG݈֮{\Y^iwVgO>+}Qmf+ُ 3 p-MH+G}77c iw8[B߀S |ް6 m|7PlcAՍB ,4I$h թ0u1T/.E |{(MwF{lk"3v D10t'^fݐaʹkЎL21~ 3Lb">NhƘ@UA:B4Z-}Hw׷? w1 ;# ~Gs>DC@=[ ]6CHpKǣ/؂]9mrL=g^=_fJ%/ҹs |͓A6@g4)K 4n^07c0w?֠y~>obU3e_t6㣄B&}8y7K"6ܫ0W %' DQ <٘!|4K2oǶ <]onsF8Q MdH`cjɔVCGKgʞWa:Je-%4/`*XC~Rg'6^蚊5ET;e\n G¾}'c̝x?4@_xGg%8,J1E{P{FP8`2DOn+&oD q3 {Ѡ\̰iA :gSB}Y}\mوzs4qhIr + R"'ҐVC|7LDQwɮQ&9aLb֣f& <}b)ܘsmlCnXXn9;},FA]g=Mj}ȍӼ Wpj@NA$ļ =IPh:BGa~dna={E&OHeV(D`ƛ'8vÓ!jң'kU?M)}|cgt`&m] uVK7 Z=5>9yozqϿ">F:N:=jwBj"a~S*n~[CqSSt.&xa>%86Ժ%x`|7C:LhTLi61b{ҊOMKV7 6(" A`D;гx摭GwSg7|qa27[=fNw<\eS^s*yX ̽"D\3\ Apvˡo`RojkdtL[Nmu=}lW8p.1ouGBJ'Y'Ԯ+߬* )p^`;y‘v-=!Fݳ;z!&t|!5(ʴ9Y96ѹR|d-h H.RnVrAB~W`.}`~$8_GB@o ܃e|@5[j$ ړ;dDqU;pO+ip:nmG5 Cpn  5KW.0juvćMS=h h]~72CGݟ@6чG'>f`R8G^ܫBz"Hp)'WxyT}xϹZx&lP*1#d&[74 a 5h_呆;SPQmbtD!d[ĢDl-4pw"8<@-:wPkK;,' ~Iq xg?gXdI;bnn d #Q@/Y(f|~´&U< 7M{O]H^''D4<.ǺmyW"nIj'1 v 4@oɵ1Bwۂ E0"|䛬Y["'l`P[jhҷxͷSz@^Tm@82`!-b9퀸^wP̴u]X7LIm`5G&k@V(!-#»6oGE Aa=4/E#]/,w?9_lDVOM\څ2xay-9j?tZP,HR2A%m_ 1q /lI\_H;3-FЅgNsA7وiX-{ϩ񰚈:C>k3ɀmb-hReBe_%$B=dp~9s&Q$q˭h޾*U>j*U_R4Qy! 2gΙI2>ʜڿ^{{Lg*u#bM`4 -6's0ytQŨ|c%rn2ߴu&fV|lk+R!嬩k; dҔVRk.𷥵lExN|iܙdzcfo%}vɦS_8%5JT1* *yy1}@N+E1RCPiFThӪ=L1H$4F, >Cs}}n`.}ܟ4'>0҇bG`ҢE3҅$M*{Ńu_,Q%F֬R?Jm;ҔWX׎0 g` ,1(VvPVd?q]BM]מmŴtB-;վ>Qp#o `mI3##Էq_68?OHRҘG >J]bݘhBZWI7KbsML+bBIUr$UlA}t왭M'{i|#|zeX}8ZstWOev ;goh7A@/ܒʅ}D{hmH M8GKg*I o=̦Sc}_*[7i$5{WdcC6/YD_bP oj m٪oˣڱu)"%x$. YR]$Lb*YʃG+xSklVeCwM3ReFل4f FNu~EbAEY0jwbc]ұc>ڸSݑA3~vW}3LeU@]3~Ԟ-H Y 6+] Nr ilձ9Q^|49r;gk./#:)Ĺ nrB{5T,,ɯQʇꢰvS$CPGʦ,le]RE-9I~2m1## I䪲 Dg4g'J}Noɇt245Upj}JMNcJuR7l4 2>Չ I=MIHlRhS S}h1wFf_,:eBhGQ6k7+f꣒m'2-6\(21SFFx>Cy([yk#f","<:4?HNC(~,{k)󳹾P\_2((h(afr ΁R'hXl̺#rNP , d$,h%^h źMزL*TG=lvΦ=fmj {lٴw16k%ZV(ɮ5u,#ն?x׽qvyCsC0PuFxIA+nVR ]Q[SNseC$Ϥ5O֍H7] `9J$b8tQ~9c{'^ɫWrU''}Y9GܠHVR=Ki[l'\3LwAnR;F3 lWP!u>b †]BҎi@)O:F%XAyLڧL].<.2Eֱ FS<i>(< b=T rU=Ff\+ue7D\"_.,d^H.98G/:P@ :?ư 62m^TTj0NVBV /ӹNά^01!?i>I4dO]7ՖkK++:nfe}V9;&6ץ?aF;Ӿ)T2m€Ă7,:?Z;D/n.~&uB xByԞ"'bެXgr/⋣hwΜ¢؏ԜmٌqٕvH[S"PZߛX!;-=;"4uDSOx~eRX8KhkbOʕďDˊL +~Ӓ/~mZMll ֠e,5AК2WkJ%k[vdi8cbb[QVS 'ܠ|cfM@m{1PlUVmҶ)/C8]OZ!^nW}\IˑT:Ҟu0IBt5 LagzO`گ<32iD(淋/lc}ҋa cI-~6Xٽ+-E[vʕeO .XUr݇cs/oߤ"wOoeͰtA^\ ا&|,/ec1KV:أ bFG8߿Mr0=(ɔ8P:)D~68|<{-ޔ *h/[:UΥJ\9iVI@x#UJKL& ;ȥeRa%s|.E_;GkSb 8K5tOa]efwgs;K+_'戽l v-Oo,:v+Ğ#ڽQK>}I]z[w+Lg(mJ[V i?\m^,2Tg#}ߎW+֓V~(h =<88$<=ta!s31þ+ea%6&:0gGdu?]72x[.$/[2рH*:vrclcOcʩ)hx!s8q~]u1b:h4\XڡtCLM"x^B&~ǟ)Ԩ!r_Or ۪mztj?=P͢BwS_ErYJg ,FF6X +_:26<$:QERc oc%&/]҄gy9k yi#ьȈA.d| + "GKssTx851 #}\Nz&QC\LXX!EG+Ҩ."x07̉YCۖ);#9L1c zO!f(<ژ-7|Ny挎Ar,\3|(YʄI)j{3T 59<Әs!@b@X18]0?c!*Gkg7:Xdeo<,7H~ptJR:pvU< E<U>Ez(!u0uY3O4#ȉB=Gu&S~J?юWh;EZSP~q{1:ga6E:fH9, {~5FwP P' B4Lݙ63R2s=KL W||UX]]g^vA)}mva:& Iev 9;ͭYvCr%eAԧvlGL9$ݾvC]EjnC^1r8 5f݇:[^OsG~؃ADCC`o됚ނPWg/}s+Ϯ"OqM0}r0,N)/.Z2%^ v_37I_uH$I,lN&'\2p`18N*IP"k~fClq;ZI6r_'auC ^7>r֭8l^nt%hn#]45 Dlon5̂6]z!J6MM#:Qfd蟦ZޡjRD^a}clijv~69u!43؃I&mvS 4 P3VqYN?$qݮS|F!XWb\ i Z E]8}p47irZVG/^EuLP). vMZVi՛H^5E*S1HUdI-/:dL·iɦLI=WNVCҏNCkQ;iTЧ(u2'2SuNC3ܒSGWl=YԬ*?la;Jycs8> OMI|*ffiØS>ʠ?H:&?&Aկ9]3yҏ{Jijh"|6eMl$x7rC'6o$._1l ׮UcxmDFDijY5[Xy0'b1+5ؒBn^E7/*r߼9%΅]/<rVimwOT,mv$ Ʃ_˩4j}j'lJ!ߕ(/Oǃ44U%=_c^w}"|p%ŀG~$c,݋v*aKpO{tOmp { ţaOCXw_\X0-\oOCVm>u 1*srVӘt7$iLctƵiT?{QK/(8Y%]Zj7$}a kKE9<</D艙Md7PI^eMTa\'&u<]pzWDu4)~2x|.@n60/ߊǛKK6ߎǟt& <2^H7\ggY8# :le:iKs,3Gkꞧ5RA=X {RVjJUuVVs0)#;v{|b/I/ Ҍs4 K^f K>WtAZX   x }@7``/PX4n <@l< lz'o Tyݗ:=9Wadx lqfILj򬮌Sʷb*#}0;>"2(2Z,9 # @g5Y}][g1S=1HDW5to >4bܒQipY ri:yvh{~WgYk1r~ $Qbɡ<M2^NG0Su 6Qe1gx-R5 ZǞx|x,^"msM_@; ;suՂ-K]vED9ăX; (oxxhB.]vz%gs%#񉮥x^f,f}⿣f#yz!W/q/睈# ⶟H-@# l7NT6sDieu"{$1Qb3tb2p5x=$]_,bx_"M::3ǐ?8 L͗*M is#À_Bz% @hl<xui0`*UK& x49Ӏaԛp=` p[O<8xp0 :*M is#}N_eYRs^|B"lEo^PO"YB}=~ mUZV %3xdB.";7/BaH:[m|w {͒^ ȷŏC@^rZLf7v X9U+>u [E⺃Iz$WА^daDGOK3rI,ё^"%.ѕIߑ>$BNqXZۛad:j<;ίNGG {r{0'玦K1;NM]y5ZyE(.Sj:Ƽ@5F;:ttSG7 41G tz];t|yLdLy _h:Y7F:Z2)= 3:T%8/ 9hLp 2>yF{8 SqsUj'parp!Y8tu>dVs_Qn`V 2'p>b8~e2Ϥ)gSn>_'+?e)x(0WRIwK_OOM~dڟJ?Up`I"IVu{VJWnKIN_rJ)8Ke~}vtJHZ _g#?O,U"ƌx_LIW`~[J{R૾&IsEytM_ =Ga+;QE"Z]§d&7# |Atc| xϿb~B_Jۀ;^]x $IHp)%_~$gow>*t߽8J݂?w|?{xX+k%+Iwv/kdw (SLK "hLko~@W'nյx7y5O/o)kDlLQ2*W?059GJCtoڮƕ #ZJɿOS4eV!}X_I _ K_xo]$c?Ds# =E ߷Ko>Kg1^Y7/IHJ#c䛡}$IE`Jc)wvj,u&Ȝ}DboFn[^v'Zߦ;@+OZfOKoǫ7LKn)xsץk &;s>E?n)<#th; yl*stNC-%-YI}f?^ ~x~S\JyFh.}1zCZwnHvr~Qd-~/\{0o?I5s{0UۍFM>-߮_K&O$KF<(c*~rVw p7н}6[fI>Zik7#f7jsqkA)"1C i#sVH aҜ>rqC Zucxm4!ǪrY)~  +wcђW\r4v8UU`SF0C °h > -@6Y}Jۀ\pzHP2n쵭mmD;xhThSj0n(b]?%{SS텒NpXi Y%/kl}^{@߶Lyd@ (kڛC/}5iص5Klc6aWtlHbe%ѩ׹pz&VbKr0BmuU~CBtS6[F1k4`< @ƶzTL!6MJH$4@ӱXBI,+{h :OɅ>Nty}fbbKrMXƆ"ItugwT5mf4o.Qc\[5sAH'}l4L~!sLmȻkBG~[!7؉4$:tƆߐ# tӃL}GWt㗁ѳvwߓVUxdCP̣.J;~_B 4UUd:Ʀ*YB+H!w "#ym\P5!D{,0e|tce/t$v'-i+IzW=L9w[6V8UDBR&_TT٤z.i^e0ڃrnJ%4=-ə%e{CaozOB M2#S?/23(M-DŽhdiR;7MCj6Xv%+EcBd,,XCe:Ri5mgIgs_PK bBcom/sun/jna/freebsd-x86-64/PK 1Bqމ,com/sun/jna/freebsd-x86-64/libjnidispatch.so}{\T&EiEeeu+ڃel(,3TD fJ1O.YJ͌*ORRՙ0%-$_[k}yqZgw3͘4 8( {LMqAjpkt=(l.:Ue<~Sz}{<䂹\g\gyѨa\z\upw*ϳ5p% wQ&õ^ pq W-?Cn#Q=p̓VހNµ z/׫pgp}7 N 2D&u KgsFEp,k\\˽W\(\ ?p}W 8pU{ Z'pk߄+Tq7pW|A^k \c9m+99pg zk4\8}\z/5*GJ~%\S} ֋ *%~=78?Lip\F'yv#\7pl..#\pMΟ@ez9]5K[7>$<φk>gUק~:v \CȨ5Su}:w`ڇ+Ӡt67.?~'T0]_rmZ;?\k=]uY)~LnP_öÅ>AJ1:s?>wsAoxу8sz;3MK}W0}чտ9nft2'sG7ݟ. FXQ ܓ@ cvR' *N?7jӥgF3x:tT9ܟѯ3ߜ,?;uՅi}8 's4W;Cq<>_:h6/O۸Rawr?1/3wΟz{nSa8F\J!ᄎ&jhpW^8^\yd0&ۙWv o:xP,\+Y>yPD^K}@Ƿ]3h5gsxW"qy:W߸=^a\h|C?'8?w?zc$ 0h?=g'y>7![}n屉wckJߢ+Y2Fu>鷾/JoZoԱ޾+9^N =gK =uO2ҫ]Ir/|WSg:6KPFݩԫ<\i\'ɿ'@9)<ï jk5?iJ&Fs|('y;2T/2}8x:>[7:w0o](&x>v5%\OO~g"uhrq#g~K44>;u%9|cnB䁣&ٟqR 諆ydD$#ObpC^.sr^%C G6+:m\oAID:7JHpi: gy(yГ&s"4Q,|Mh=>@O0)#/?{%T яQE@k!E5BK6!Yy 1\ 0-^ɣrs3`M=.#Ё},.c%oT%m.; :Dj4L=F{G0rM@A4 5/)fkj?\"K o? %B$AD@A!]- cR :pf^(.-81j1/q,?1?B߀dO3CWr\60~feY/+Ԁ eP/+vB2<  +-P{)-P{'-P{n+9ͬQoZmOIbv@U?kf%¶_`n[` kb^ :?`0h3r&^v(Iʿ/ _'[z3۩P-|w[Nޅ $žXLl5K/RT.#S&Z <^k\2 &* pc=Asgdz9v7u bRA洧&$MƦ֔~Fޝ!S' ;&;?:AScXx^ X-S0^bY'3|dF3Ȝ gO^ƄI넜Q-t'9Dq(ϞGRj:dA4 ee#0֤eL%Fu߅:ҋ|ު܋^wx8֋_2p~17y9_Wp~m^Z%x9?̋/#a7p~/~$G{8{9)^x7qH/~ gyq~$Ogq~?gzp~K39̋ {K9‹/~zy8;?p8_˟|B8̋_Λ{xyz?M§x#؟O[]a?R[}?WSSPg D/b?] |q_vG;l_+z@7 o~+_%\ |qo;VQ_/ ".%[~o&o>;L[A .)%GG W(^?(M?E?" |qkH ?W(LPL?@|/{"e?Y/~Ow!Vy(zI(_|Em=g 0- ~}-s~_o & Hg |3?K L/S"J~/ / ?O;"_+?o_ &/~V nZ` |]5_##F |#+~}F/wLFSv77!1J犽:uk$_[䂿["Cg=SNow~8ˉnEw8ˈ>4,!%q}i4ՙKnKIvq3jqk3uHwF:Hgˑƭ5NыO-ΖH6?3N~?ѓAt': ?/"} 'z(ґAH_KuǐI~^{}7~o@F髑"DwE&OtGo&D_[?ѭH&D@VO1o#D@vOn~#}'; ?됾~#}7'z~?A^hOH~g }'u'DOBOc ?љH?H~~"ݗ=?~ҏ~DQO=H~oC1O H?NQ#Ot'#??'DO cH D@ OnMH ?H$DCIOJ?ˑN&D/Bz'"g)N!DӄH?C~IH!@cEZw-LjZ6CIM,3ME0Z WIܘd`=2i$d2+ C+TWˮX2c!{aȞ`:rHSx LP U'ZSڂ@ۤ*" BJ?.Wfff cF(IRFY:$Ae;f'W n4!Mҁ$7WJ0IUX73IݕM2(3Z䜶$9KpGuU,~ lh1M?nƦlXby6\t6>3sToGLgc.*opxz"Wh3}qbLAzkW }nGڿT*=&G\ 8Xpwxw a.:n s[86hFrDAZ찄^1Et :s 4KC )"tK<$wA6ON_\jO{5H=oT1yFY!$i`$7hǂ@81.;3K}*w?% 2:cN6mJ@Ba ' ;{牥sz%MJ D]g@Ʊ=>y=&{41$3 sVT h5B&)$%&IFt,x\قŤ/"ߥw"SN`gZ_/ { W0X( +$u8BZScN\\&9*dr3YTa2'IѦ*sPM?ƈ`h8#.4AiE5V/ sNοt[{eY[aftf wSx֦kjSt\18"Q m1qqI7nҵٮhyJ 'bG[Gl?b6gxklb|`N^ӮI&5ydv&ݧ]\ Ňo.k},l[<,9莼;*է CS '=?&YT(%IMm7(Mrj q~>LD ᾷZHsё}A$cs>*F\И^k#|+)ZdU_#Q1SAJB0IFE6 jG@yJ>fڇr`G ;A~].9F `43Z'Ud=u!ͻ /?9"kIvW:ЍC] P;{"Ƶ@JOҪ,'5@Mw^F9)&%jRlz[KJ{ho I!x1ֵT*ȔMEzRISo4==ꎨ8qЇi0[xZAʡ%ݵj+w7Gu*<yUԴiwZUwDnV_ +V1wgi[HԴ*l!FN75&xZ$Siz!bXmЁQXUeO0ʪ!zCv@bqc}j SKp%K-үXCu$I-Z;Iې$[zGRQ  lu, LD6b7IF$1ۻ`2U% tVh4/:ja_D/LnncC Cҏ,TUJC[;SɆ+Y&| !1\"h|OԯČ5\TЇN&q%8$CidML@mWCG:Jt!ʞX-=L¶^Vr牥 *Xꠅ(iF۪NĖOI (=̟4sQ~4inMk@a~i&@n Jo'Mk.'MAtđ0m+eُ]PthUQe*^մlTP cxkh'j\=.s&\byx6ahB*ki3.Wѡ5ƭԍV$m7Jϱv&1$ٲ>~ىV9PpL,^PN{ljx}!$^\t xSF3-#Mo-K|F #'ShwI^ UuŵpL-* 9sGq& M9x1OO4_ `$l4l/[5*Q3m1#{jDNgRMH({OW*oqpJ 刨P>?S*Do[ցHlLEӆf̒p0g<&1AoVWl"??dr;`2ٯ_Q?\B&9CТ:˭P:]%a*A*uYw쿡ɃI Hru ]~g >̟$7 d & k v 4mz-v0mF[+|!C|+r::j,1YLY2l|>%*V˵UH:S[ 8Oci{\ (OWcȓ`&Ui:bYhü+^c6rH:Y.3\DظÜRF=7ٓE{߃c.m.)T"9Ј9dfm2\cGvu]aTWufi}n*Eݡ=XQ0:aԥ_wm# R>@ U<bhFDA`Jn X(t/JCvJ~GLM.,_a|Cg2x5.!{=3 {\Xo -~ݓ[F;9tt&8ҾʭuvrF:'iǒd-TV#X13ןH1am5Mutj~2K;R%YIˣ f#AX]/.WaOO],\Z`vWw6{tGzqP۾ނmkq u$!rzcZjg]<0⎝T}ymq 5E#iNbVT(g,4T2e !ԑ o JApf/`V],崴u#(TzoYQKUɷ\d[2X&Zm1߮=u41=t*?.-^[9IC1~6K0U=Zpr>0!'zVoNV\pms Sjްx@Kren-yx tRu`?hT\w$7bJ+7^递M `Sub6rU;N@%Z$O7ou/XHDkJq6r)V ܙZMX˔-~ TD.l^ u-jY-U붸+շPJďIDdUo+՟XvP^j,j&.8ZKNq  MZsfK6"se"Qr6PeVR5dJ#QjTBG9ʊ%d/},/+ӦGqX>uX(Mz0z+cA+Er*14bλ.hY$*ȡnJ ln,r R\jY`06*`5hiy$!wTBVw,paZ)=@=/m aXQN/$u'J=,J=R͵z_G 9=R%[;!ɞܦCEM_/nH(<1ȿktv@ta7-y`HXnN߽j|xQx_wKߣ?86qܯw_Tÿ3Xfi3$pG:*F¨D9H)Ր$59oZ.i/kisDݼo~uhEi;)SWcM1Ƒl;bk]Pm O+_R_}Z7!{f@́imCeIHVѱE|Kt3렫yx>Y:ϏH>{wYg0? x e=N=/!b-*Azv%]z w _z`K} '6oAejCcy>=m\s(ռTMOZ6JVq\$J#Rr 5vv>~Ihl~_)muql{vmw@[h ZD_ڌ驝6uTGG4Xk6iY)~w"HE&? g N'+?\?XrDn|%~ҽ"d[!e/G.c^[Qޅ".= UR‹Q{@m9**V/kx_?,;FDxIYxGg }_C# ؛U=WFԇ |}F?3  =%ÿG=%cxW O{4+=ˡ{|Z_Pwc_nV7П}I#YYc=,pi;Z_nr;{jﺟZmGٯE݈KM!䁷û]0ᛕwOG~R~GxoI;r Ɩ ɿF<-)MJ9Q2=p`;]4ȡ䱊.Y_L)5}RKߒgt{zȏď#y!d^#zGKQ/kGvQToSmTOS-Bʣ=|ǀZ W.a.V#kW.w]2g_p.=Ka:Kgh N¯߹v?nN#Yhj@k?_7xcGy[lo ?B&ک _U[Nu#+?nNB<Y_ODK"^L@|mB5(%P{NN-_iSw+=gո=᯿$R#=޷=Vߡ_=Znpk/gk򿜕#kD_?YX˱]ChzrV5!;o˵K vldv#?=xKXݳY/cZ/jI"o3hm~ngSX-},>Gxҽ[꩏*r{xq%Sr,={z~k2=jY6#im*;D7qliuÓTBGn@<-B[d960Q~8.W~]VʶWUX{l+mf#ާxݪ} sƌn?mB{k+kl.cԷq"lDGyKlCRR(_xXJxNW.?| ᕐu m&:Q[T×^@b%hf3k-;?%!n蕃蕽++)ܬ=˷6< ~ \ QЀ_D@ږlW_C@ Kjb[ר|m3FEͬ1@beJ5h7wG]hߠq|gKT ojqMՄ{dxoAQ5 o❢}Z+/$SUm:?@ yUDݘ0f]U}b7nd/p=к XDaD59(ZCA;Cf1 >潝9ł.0E؜*u+'[[7‘FKߤ XIk{Mm7>vs}侎װ|q6V!gzoBݰSCRТ.@ot7xtDž(FlT1>;0&nT1/U|R2T6z6n+|Ԗr|>,G YHm[Fֶ1V6G68T*6`g? OO SOXyPYNx*l4U%*_!ԚMYlp6V8}81k>#G1Cx+ǭ$uc0a<_0@Cߢο6TzvYݎ%~]9p?2vڵɥaL}SF^#ÿGVY5 Ï|sm#F[3%N6P06C:Eg+ 򰢳,NJXJX7k~T^ͱ54WON?O;:ݯt%*q`[n B # 4Zcγl̻ '>E(Sod ʄO#WIXjr/0طP.VkJ&7W_Ln]8g={7uùZSQU={jZ"[}īC /Eo+FB5~F{5O OS2^c.hmhGv\v%|*UhT` \Ϳ9+(aX|ܓNI1[>vnXE+h65x*ў_I(/Uص,Z<~=%(^I:"'I3BR[˨sDMaTQB=ng v =m)cep{.n Mdj^jJBW}MTg:vY17 ɨ(FgTFcgNgT g(}a9)QDK/H kC@rPn诐F_X!}<{Tj/zt>e餾%&[d==:S l" Ѻ*\,{Ha<}*0ԪJeK胩sdB;p"yܩ4XCop<!E|{;fyp dO#k}: H$:>+ h0{'/hcPec[oa8BQd'va^ ,}ڋ2zgb%\ޙhg67H %,uGf 0{<Չײ^y1 ++5GhZ ~K!3_n7ϡy iѡLS 6ƯZPKCE*WUEOT˯!*:*CvOo*9e\ů* *AxYPWe9;*TQUQ*n*|ULBoUTUDU"x¯ "WKxTOTˠ7O \$cb%[wf(>׸H5Ǹ ո:x{.qM 㦏1%ĿqqgYKF6 `\`CyǸwu..v%~[̍Ϝw2αmܓ̸'|8qbƽ,kqϣq%0~`F,c\x ߸#s1nܸy-q>w׍k\gr}WKG2Z8Kd\nq0"m^6l]č; Ϝߟ `ܬEn#veȸ Y|M5.8Bq35n.o\B͸c:.KHMga+Uy3a_'7$&h;6dr\&7er_5%SHnߪ\Ker|~`r/ܻL.Lq{^{2g|3[HfMn(1X_\(*g"9|W.4F7L.u亐ܫ\W&gerW]r4cI.)c}g$w&Xf_onk8$mHn\hrLn6Wn0{Fkr>#}brܝܧLgyl"NR.0}"՚\4&go/䆳t7]Kr5^$ &wo|L-kr L_Ln'SKd](#;rW1$7O{W0Y8Ir29 ݧuf`r2|'K"-L.7L^>$?%AH-M_\o|ɒ(&wbr$w&Wv C'U2HV&77t&7jr'$7]=&͐7Z֘͝\UEnP@hͨQ*rU\ed'tg!@|R qVBK4:}n.uF?f.#A^8\ /E$<}rS$mo/Kr/p\%xc̑t5%6&>> ?@%A-/EuHj:" >de 1 46AmX{C!§E50)X5BHsk&0H.I` Y$+ٷ{ONpȓN^J|K4`~E2Cz&9dIJg/P6Ę!, 9,AT Pbl=Ꜻ G |\߼ag[T#֚݊<FLaK£)@gx b< :K4%sd<9HQe ^Ju b"890],6-v`N[gle3h<="đj_k,NfQg ~yQZ WɞZuV95:Ux֯ES!oX^55èĿ(UiK-ƳGPsilQ(_WlT$e,Z*ӬTcO>߇3vzUǣx6iGRשLoʤ#fkh5SzBC[&sؼt$˃:90 ߠ|2e㧇lbEe'Xq qL{7|3`#mA锏->G<R(diV;$xL H?b@kHܣ7.ճ}z)2f3 Lvs953Wz92 .]^ؚMɭfmx fjM>1ʫ.<X b/F*幽ED?A M͟)Aoy̧EN?n Og &*ƶXRk}~쵨)hm9޽c?MA_~òu+bk)gK6Z-hT5`@|ԮE=L8J雔V!"^GuF,䂮5+6Z# Ȣy* ~y01L;@iHS$wl{䁢Go}H9vlAn>In )ácgrQݏ3LNA\Mp->mYQ\cw?үǧ T q3%nM2:beSu<]ʰ&rpZ?!Kim \C_\ij ~Q.{]Q[GWY/Uv؀IƓ)5}t." 1Uj'Ր|2{rhm6АB$vƥn҆8A]AZ@6G9T5P)p%-:FCt*g``vY.U&P)-2s@F:X =+)f{A_Bd,AG:NMwƱdtPi*0$c k FYM:حck0wAp?nT<=MӱCt.ti8g;vHwtÐnu;Oط~=rUc=r) gHomFotЧ:m ͗su^) .#6L\/5(b0Qv׊D Uga s~8!C{PkauiuZ{EBGYWXW 3f)1BKRUڵ:KXk:D/2CFB['j S 2 29y{Uʸ,] +]]t(H_\cOuVQ;TP̦[du詔|NZ1jw`l]+ /$yM1{Nq_/č-(Vs7L{(:?uQ]ҷ;, :*<.8Ձ5ڝ*|8x@@!e'٬a96*35q〪s ciL5lV@a[K{__0>aWX 2kZyqŢ_Dg]]R&Wi㣪'L2woGԫUL||[.QlOT^و=, ab?^t`[@ "h(Sv) C?4εn!/£;lX2Kҧ@].M a PX(PƦ]HNx{ WεΡ)O]L.fVd9кl!=^| %F)D[Ćܟ%֥VP(@XJPӅЄC>!<5-2o1f*t#Lm/ьUClW}Wwiȅ(^~#.?:V`6Jc Ёk*3r/'+^T:f`'|!U;nW|y?ڧ3S %Vx!xH`, S2`aG(vn()֥)4 0!1 M4={<4;O`CABv4Yev1r`߈?P7 ]w_.;hc K!+nvU|Զuvʦ!Vxf8 |".SF9aDCe3T{3![ ԁ7#``PBfC+ 3/Ew;A֭`D.0o/ya?n8R>eM0y:Y|;wO ]3Ȟ4S @1,̣RN!<*ͲEt~8b L&ff,`:,K{D%ʠ#՘r0 [ajFGn,>\&N֔d7' tgg[58[a~0$uX>2Gc"v:1|^Ub!`5lW챇IȨ ܺ9jo35:g)*.w{ϸx6Le wEO-E?+gb>֣=)v>f7z#i[ H]BhA$XLm X=۶`DB a="kSBʍ'3p ,Gi89=yM;=[^dи!+֏8a(|lz*C5Ӎ f-h~)Vfc' $ށ !C~P[SΙ'b+|~·@jj<CϽ4m=w/x Tp$K8d"0_ qXz}Ob @В\4kf ZYxd 1Xf[Go:w};R6W;d{J:TŽw0+^J|ӉC[i\(9,/ӰO i[ۜ#pB(8,6eB@Yiڶ G4 ȸv {?QVd_rXvaUMm33ϏBu$qX3`c,F0|&+,8q!SR/\{a\ ^Ѵ0y(vkL˲l=|%zέ>dOT|ރocѹ ƈH  =քm_hy U< 51\|PىJ?Q i:3D?ųŸ}Wн0K u*+tiIdŮ IT8z#Sp8h Vxы4jN[{PF0Lh 0mz`?yy r>æ6Ry ߟpUi$녝la:P2w>hRs+\t!?ǻspҸp845.YU.~g 9XLJKS{L̜@鸄^TB7^ÏZ;xF4]%fX,Z=dMbvr0l?[E7Ei-VGJˈ pih-p 6m{F|]S fd;Bs P۶^ ~i*'v#pRQ+h,8.pAPTtV1|++EU0b {>2m({X?+*@V"i2@p#[Q7i Ghz]hnO_;~`oxdY[:׳Myeo0:o=-< ]q v63 B{2yT([aZ (I=B|Iۍ-/BF!~bfjۿӁ:^myQ>`YՌ#LȍF&'=m =a'~n. j _@?+?P"Xz%3ڄ K=o$,G;S/pdÈrrA~FDJWDdcVD"2EdE2d6H H 4f`>3.2IRV3g"+І[/4ѻ6p 4<@>v(a0DGt} '~s9e9Rn{o\مxP.?*{Js$eK^ V [+ϣ"j}4wO"S\ OV8q}v? '?Uxpg.CoN܏=C|!$B4no^.%9>/ _瘝"ԮQh|#J \@m;;#1_jf6 $׊"Wg6VuKNW똫i.ƭNݱA럹~iƟ^qB׃%ꢇ7 w<)bhW '!}4O‹KאZ!^tk6M)Y'orAcOS4w?e;l6{#a4dml&A{ Cmf#zJ Xgggk@a}Xɵ"\ƗQ?2/iĕZ+CscLyu5 z<;^)SC8RwVT! p0~ l=}}+c޸و_?@G,4C?D(bˁBѸ(QCÉFQht2hWF=ΪllDlґu36n;C*˞ge}6q>XJu+uX gۘo.@@dEgk F l %ҍ4"ƌ<)oq+ueRGЎ~uIvE=28=t"t{_OpÓ_Xe.duThuYMFycShh;";xY<)#r˝Uu-F 10tL8>&EGeF!6,(\fHn]MRߪAmaYkM,\؏f˸_3a8)S }h]uSYZzFS0w=a2sex̆gr)ڲ\!U*_H[ mj60TԴv d8p̳O gM{r\,+-/1u O I+=YEXWW B1f3RۍR/עK~s.y&mtx‰A& ]"$K[|{2VՌzʸn~IR`=xCK~,E lA{J9nYvhlL'a4GذmvvE2>PhM+55ŷ8E.RD_3o)JæmuigPV{KU(0qxJ,f&b3x3mf/ *^i s&U 2 Qjƍqki oMIlco͞p_@[b0}ۈѳч~vrE# ixoIskEw9f!/ƽ3Yߚ7@.AR˝뗣PSaѽ:0E-w[q+O֣be3/ =L'B$F'IG/g'e;*j,'A>6}K<˚ 2?oqt!YFlB{. ^f*e7珠BdO&Ûˠ]3ԮMg4t.Sި|~Fotp -쌟fi2}:"/lgsbVIy}KhqWkG@p79MVh"xGb:Fӧ=!_}nz~ӶףS5'Y|eKNKj #P{DJq''2"ٶQejZ:7{QZYX%k;CwZ^_m?l?$dwGMYmI  Nvu !|VS;wC=n4Bifv'T1~-vFZ`%_Y"a߃ajOA/[˰/\yK"ZI_Ow/l3BO:n<]!% N{'\4k MOCcz-o)['v3+Ϝ}urs(t?He sCI.iLLm@NLв*ʟ \Lf0zѣSGv?͘ kѱR+ caXqO@˜r#8LŮCip7 C`p`ZTpIhӉVC;嵓I?QFtNoDٍFw?Ow7e7҆}H[h# Y.OY /sr=d3}.4`zފkin=B(;Ԕs1! a><5X6qYr?=fݷP޴M; WX, ͯۏlV.͐@K*咽ws_7a eLC&dB}&d Fpz-TC:/d?Bv Ovm} h8t"d{IΤdgᝳNv "K |2q Hpnl޹7dupJS:vC{#31Bȶ.B:kR!Vmw{lxvO.A7/b1k -j!4?Kd;S>u bQɶ#dn0c +wP1y{$Ji̭AJ?czE;lAy[Ė[![6˙;]ax=_3 #r!I LFR\U @tكF{}r|)O1=_2Km;,{ G~¶OMwڃ`n*}EI/:p &ζ[#e? ?9B=C pAHƭR)͛v.Hσl;bj>u3S}j$dlmN:?U+ "jy/1JE^0 k{mv';8{t}l;5T1^f:-L`3m @}C*KQyQQUMx4Ƌ̳GH9jG ,G2gh)'g8hh|8 )Nvwit@r),LԒq@(T^sTY!m<`B1į,Sxu+7aڃ*ES۱4nxZ;2&5 YcOxف'{QuWuK?&ǛX;Ź1\Un!~n! "} 2e4JiOI֧ z;!k!W&x(+R͈„m?ŋNt=t= Bp+0s*])7.JG0Q55aGxzJj>LU:Q 17<^x<,xf#=M0<'rE+ >5eY n8GND-9aG7_Lg>QoTS9%q|"giO\N?q~"!NdVHv:/.]T~Z;fR/0\7mVcט 'LT0eBsA]S,w[~wٶŜ3׻u܉uy]k\\ՓlV]]]i|(kؿŭ{ָfoz\[V\juBa>UyNmm)8u6zV6֩}n߸{fغ:}f:&hV'*f=s+ uZo$_3~k|oi߭kqVo3Â5`Zխ[#S91Cq{|~֭sޅl ^"K:':UrJ/q5U)ԸjH\wcPO~WUT1 ssχo&gu7P "߅XMb`lT{|WWi]z %WgŁVZgZ]j̲BM.܈15 @UG@ )ʚ\> Vw}tu*BBj(UIFRm8Uq1:F cteV`nQOd ptZrē]S?YڬryG1+9\2.XN#υU-͍ r4|~s tm#4ri57 K\ll6/*>*׹fW=j;gmNGgid9Iϖ8yG p&Z:dlM#r^f=>hc^jQmBG]igS1򋵳C`ݭ#UL =ޥJv\VBF@5TYu|JLdmp9D<D<_ey=,޴KU3Tl/.%Ӥ_Vs$Yд2'xɯz>8#AM|=aourlJnƉe1M˘2)yYy]*j_ ea ɲXU0r[H(Wf\TjH!Օ-V0W2AR@^AChMWOQrŦ/P0^ZTy$FeM/#^K\+rv3wdopr<0-]}54|!U蟸/PAzSGBhҨM9hį~#ptE׫ e)aS/.MS,/JRGNd_M2>|YmW:L-K6+dMe3@ [dkĉj}(AS4Lx ] N:mz͝wEw NuOh~,ǖ'H KS%< >Cjxށ璕kТj5{=*XL(Q.\AsSӫ^t Ԇ;A!Ka*O+!(5OP%M0#_}'s} 0 ^9ܾP7iuE7νfY'st`ְ!W$ 7ѽ*I?sݯͣS 'ayhڴa%]r 7/adOS8@aJp{)Ga'QxBF (̦La.QXB@| Q [(\Gf Sx(”Re0:$|KUH ښZ).^=:` x}A mF ;AÜp*fjSүti<{ iA=Y)i@ہS4t%=rJcPӅ ;җ<f>`;_J9(7s<&u-ה𽀿AJ)X؍ҏ r7Ѵ^ ~2K+tCxS-Ƕf7_*U@J}oK0{4Lu-E^S75z6T_+'!n; yI7Ad-I?ȱ!J:p/$ ߖDFK ^x;Hjb <?rx>2t˦KQw?s~V>Y?\cwWW~ _63%1i7~=D 70U ޒ!]!~)4ʒX>[;'|T۴퇩/huߒo~- ~GoJR~|Z~Tc*$K+x]9_x39~{? s7??/yw|ߢo*4~4wAb}!+~u}Cg/zF=@y/mׅ?get.q{>7]n6R+Y/]S·J#]ֺ~C-)j:U\ ~. A]o9ـU_z]u-j܋ca8?.hX#0H7sĮcKgS{/(R3yI.J`@\ I8>jgE$_J0>~F k#Y>oZ%JM98KxU{4 zIX zNU3t£5U 7'h/O_'i;8\~B~<("?|W= ޮm?ji/4ۣzEqsP6X]:Hɧ"ay9c^/B?bN7oMZ::x0 m@wwWt`L_Tc/dl 8(~"-a؞to'xIuPY2kmM7S8R RXCa+[(|g(|n Px³SLd K)\Ha nq Y )n?wA*PaBWsc.7 ΃k!^H^h׾fv&ݐ=M:ndlصJZhe\k iqg)F FZ19㵽 >. A0^wfм$$dX Td$7'K&$I}Ad(哒2~_Zx\^JZZs K $ɿ$ |v*'`fze{&x;<~#wft)I}>J?Cr+\ucy:~ŤboJKmDo>^6D?<%x#[<P; $/+|x\ ^B8KǏEt.&ʧ-Կ }v=E4.dndN˹.N?LI%_]a@`d܏w|75ǟ&.oƗI/}_.ϯn{w~Dٜ.?lḢcD_@,YNzC1sZo%<|y_?o㲽[hx\Ijzqwg7@sq zk{ ~'%ƌ S/9`8G rb$*Lt< (1&@G$.eH|} کC;N^L$W)oDns_o$./Sn#ܱ<7_뫣-<.럧Ex7_7q>B|;Kg9G}|7;LZY_J\oj_ x,0y!?MQķ8$e|>I=SGS=C<.?w?]N|[Z#+}9,G >8b~$?Jn&;RI y ^G GZN>n|ۻ9)OzF>@;ISɎL2v58-3&~=0sN 9E~-2$,4A^ӱ"Fgc x=T?D5н@5<. ޱw0 㲼]gn#x㲞#yfJ̷'Gt^/yNL/WYDz,?+1=JTJg|%o"d}=~LOQ&|o\vn̚@cF: Cd,}-.m'|{(s> g}}㴩r f$ZHNesXPbM4$tڦ@O7c~Wj`!wܢ3j_S Tn7]M-^uO?q<*ۏIq<[2.myI ;u-7&:ˊQ.{y 性բ.gi/]/Wx(Y[[kr{nU|TNʹj`[ulcW[)1:-W׹-Ye HMثy^Wյ\ơZFwt'` Ra_U)P5 ^IҧkRxCνn^=^aAW,T a:T}{ʻvaEPU7hFɮk-uP2.U+tNC_>4 }؍0]_`jqY5 ӱ C $J!hy5u~_:]?;uW7POI j'>R@=s0RjvWè I)-Ck;eZۤRn]CWB{-^?84b4\8dIN+S;դCK"3p:_jС\c2Pi(H{]됀/(ݬdxҧ(;d?#U?fykm-k!lAual,vns'kaQeWev]Uׄ|ֺ@Q}mS]]ur FMNCSg:':^}hWW@?!"߽oB0k&P>;8UF&4U=:yCj!TtyQPO\W^_;lFR|8CA ^vc0\9d]oqu6x9-Ti.Z}uL/׳Av 'g;Z**W/:l@.{`s'bh_yˮ!Q&jf> fyMr]+Ca|Jmw4DVCzX]I]u$gwr''^]Ƚ^RVɧ^CS+P?ޖW~.nj"uPK bBcom/sun/jna/openbsd-x86/PK B j|)com/sun/jna/openbsd-x86/libjnidispatch.soԽ\0,nJ-K*nY nH,aAZjhbݫ>E"eeeeeeE3CC%ѲBҢ.ճnQRsfj/|fg93gΜ9,"=} !`ϻ SBfo!s z OD4 !<~E45KHD>1k#$=R>*! /p+7#,ByB"'seCx6 v¿b#w5ۿ<`20πhLۥ%`^ۅ&03&h|h 3`.#-0u<00M!= *0YeL 0y?`eq0 f0 ̫`x`VyLL6?< aoY&0Ls`ܾאn̛`frb03Sҙ.0[|C=`f aq#0{iHH_} C,\ *0Wd 9@2cɷ!&b*`9NH f,v9Cscȷ>/ `ns7E`3 x0&&fHi0%`2ng>0}!En3|K Ioo.,5|LaKރq?UW%~6P ]iD*4?Ke 淑<(%2O?[ɏc0΀5/ VLNM~9O/+OggZ#*zjE$QEx "=) 5'3E ?h!y_ IWuwS{ *ϢZHѐ~9s0JacJ)<Om_z^Ӄ?U/">?~6& )>w~i鷝kJy8imWEֆUV&_`wY_:3гoП'GAs9?O|o7CO_[ɘw7?sx->pc9z-dB]b::Q OwWH}Bz[5O} jMNRAW ;-1̏rj2 Γxz8}Jv1}Bc  ء?Nr-;A؞;ebRnf20z;-ĿOoLσI_w \C%1Nh ; C~s6k+菇e?ōl?0rz i/>?:3y|g[H@wOB~>!䛙mPݗLv 1D?Ϲ4+栽a|y9yϩ_xE8eB:W7VOoį*KIGx ,7eǪso37|1~~װ9 I85O+lOKYDŸ`8n=998QR> t=12 yq@6&s 8Z? y{@DCz(ɗ/6J?zЧ&#Cwb;?W۱8 ㊯`s*/?U\Ӽo3>xnhυH8&8~(q-+OAzA&ƃ!1o< VoU_ l.Peu;=ͽ~M,c44;oیy͏?:L,!I쟎«=YoxL/]v= ޮԓH>:}V|5[!\O77%&u0 ۫Py-r ޘskư[F e s'N6cR &4pdiY7N*//.%fɸIӋsn4{Ri3 aRi靓&-L-v德pʬ LV>;&Ϝ1xV3 N߆CrSgCѓJ=œYţܳ<ݞYv$x? _4sg`JIn[W \gϜVa6PJO/,(kƤB!ʜ6 q83e `)nabL ;kCL+/,< 7Y4d{Jv˰"G@2LU\\2tf9~B 1G 8sNt~.,, ӋC?aX# mrϜuP>m*k>5,bYœ o*}RyIaɤEQV# 'AXe9ݮYf΢  apӧBǧRQ3.t挩} >|Ft)qncECj y`YeE΃S,u zJ3~<!r,B0g]<GQrljqbd=N&2z[P=:@!;Q7x[gdם\v0eZikE8#N"CaѴBQ)P14s$8*h 1Б͜M9f@F;ΙQNJ1ӊT&JQ%3gE4hTN]較}t)hQn(5h SCѩ0xTz\*tv<:L=r:uϚ4]8D)KuRo42;a"KuNC19lj{܎`$s:ޛȇy 6gr9b|PR?@!$}$wNSa 6x`鄉-f ɏgJ𣿁xڮuǕ\j ?:K菿xxǠܾO"1j UO1 :ǝO$?&U;ɏ;%xT/.#+cǝ *?1**?dYI5u2*?4O *?UT~㉊:*?T~iɒ*?ՒT~pTL'?^O~!-ܙB,"+y}|khshCQkL*_%?M\!W/J$e#buwmSw~.WM??DOyNYĦ( .җ{!#,uj#A-ϷI.9NJK eg.;8$k`dA Nɝdŀ$[ /3 o 󻥎 ۱"|) P#^.+^@cYsm@}It\OSrMYCyebc8,'v ]`J3D-{0"4$I YlQ|8e,,CberYK't*GvٔG^3EkmOmvlH޿t邥 'Mu%DAFsă9 O3a#>ac2ELy$t3po?s!%x$ Fulc<(K!I+6ᖲ<ԬWt[M{1f}bؾGe7Cf=7a@bx3V I0Fzs͡ߎ1褈͡R8{9Щ=k9tZDtshd:ѣ :3"\be! 0d^X&<]n_3(3IePa C0$;)Jۏ_ig~~0!HO)"h/vĮKg B|dNM=XÂ˾'tIģTGˣ\ģ, ϣXyԛG9W#;q|&dqEP`) |0G/9FS:m4O0XrH0v/0>.;DF&F:r<#ˬ|>Jo#|cx>tȏ)^T.i*X` RIsV RI$Gr_(r,xzM.öt~A)WgxGiBk" PPy"Zv6K $>) ܛUMf_Plp/I;>+)q5@2=Ip)È|:g)>. BXZ^^Hc%x؞Xu)ٔyU"YD fUn 2yKqw9d722 ͱe'1ˮy|E_tStȂ2:b\zYp&w,!TKPh$~`H|}1.*?ϤђkፁЂ+(N_4Ռ?~rƞqv5Ec~1)f y.,=4Aކ'c.ˠRZ{ ?#5>lh~OҤft\Dw ;x1:SBh}TQ+CeQAhcX ̵1!`zZb!NbPq0E>g0v9I17/dܞfP6u5KN LӤlȸ"8ъ8#j~uhËi(Z~,o>EB*gųRK5Ts̟!E|Ǽ8Vs1 sNdJ=N+wsw pFG5 KݻKM}Z"QʺѪ=Dǧ%l6㢗aFuڨ#~󈆔}0~)YոI!OtΟE|42ķ1[:\G8bU;Sv+gR/BF5TIL llj1%S)g5 k0S JKhGX`z ˘р L?7^E)B05>IxlW0iDq<> \Tm)%ߘ 4zl J9G7fufvH! c*1 Ɍp,PzT/97r棳'-IO.EtuX靶7f(,;`\E;\duRK& q {$~A @EVj ]E`AOi>_[E@3DaK/^JU|%I4@> ]n tune,5-M?-U ]'a H4aMRGh+ +S 8?dd(+Ep3]OTSCibX|.zAIa>~HlLMVYXDpJO' ﱝԯ[zN,xUˡЁӟE!(N-e,G \AU3-G=ōZO1HjR! 7W 1eCD`'*ƕcmi<кb'Aeil5C#g9999kv+eAKn>n+/D:-#CV\iO#"j[]cā~ @9f/Xc@6׎xa]lL`ux0{Ҙi@5l!ti֍ØT#}G%q_'ᤱɚoM*eeIkUoպ?]Ŏ޴ ՛Pm>2|Y/>Iyh At݃dJgNVVמ Z[\? K'ɼsoS2}|gYIѧ5:}쟛<}rD9Sͱ6B%}0ϘEtt7ϧMsԊp<}r)3C&$vggfY }O>/>-?ugf9pwR??5ϣgӧοL?5ϑO3xIѧY}fbB4 3II;ߴe\nj> N>Fb }<}"}/f35O>{gfY }<}Z[>y#3Q8}.}RimNygG&I=yA,Tfi0>=>8)]}>4OI+<ٌ(MrJ} RJ}mjxh^I8Wl뼸їtMEL*hsTe0ކNiLZS$qe/\*Ay3ٲ).ɹPvO]@mP5Vrŝ-=vZ]@;T`F6Z9y_!b)k>0㔧>;# &3niEЇQq1n'—AAV))ɢ}lA{g~ UGT@L U(߿GGþcQ&"GL?~qw-P":o.2 d}Pj'!sdID>e d wDf"2~A0ȴk' I??d:g/ OYoMV~ V +aSiv Exemk!+8޾$oa^C^tU}.Ir7Hnܝ&!(5KɡݼF{ XЁ6d[ăo"-y&xvQ9T:2ªQԭjMb C T 6gO dJ' `4Ƴ֒\A? JV.DyG;Lƺ@:J rA"ZcO>09`>JFhGNvK_܋]FRr&܀zPK#wI`G$W%;g&a,ɵHrTek)?{Z&SQWl"Īom*"0e܉|o[fs&9;sF4VF`:;B@9ZG~9nW(omƤjIZYTd7EU1/iJjuQZЈbnwL:vyNؽI+;pO WR؅b >d ˉW :'3 #$~tH"ts),E'];qVx69qKjP|D :Y29` ?Ȧ16b+`/LRhS5$_ь}۟fhfoٍ ҁ 6n[GjC=v7>hl;x s1r?1]jTbxtyY(wAR`ss#Wqԏ|ٚX)R*okC^|M,_(zK.vH%'+z*^,ݮH%WGI7tg.'bWP;ip{J~ k 3^.je#).FG-}_CәrXV~{0}U&Ac Z@Ph\ S[l,А$:iaKjKPel&CI)8wqut#׮&gu5/p˽@ 2iw# }`¼n-\oUxUGGlVه!L q/>p-X8)QX/,1r$ TeZBnjʉ@b}yt@;u蟏;NڮC >t":'Dt諃Uv"ЂNa=drt=\Hs|.\a,-c)~-I?} 72'&0a87x*a^u|4|JĘ/hVawn ~q_Vcj/l;<t ѦxbTmĕ{fu2߁B/DAq;\*>rB7 G7J%2|~2t߻ͬSZL2m6eëRe,cZ63AB?^\fmC<'cf*s& ?CtHKP=Z}vTG5yw Gs(7^)'L+!(ʦxlg?ݐ 'Fco (.eÐNfXBx[{E6k P~ LhgB+ch 8d{I]_ڪiaijHgZ5/&;uVeWR(—VjLJM/գEOd7yխ#~Byy²ɻ\,zVVj,_Zv^Fč?c!) c(=qD]Qd,=_=QsP:]g* ms= *]O'7V}>ǔ)BYPժ}VoƩ/fI|2B^3DmwCn>MUHV,u+.UK^a.7KdNxjI RZͿ U.~`'L߆vOԼ@:v_u˞s%x; @oD4@M`O^2/'#W0~"|3VO_{3'viW.6y:]<]x ߪFp瑲7!/h1 wk1֊g©պ@>z+яdžCS$MQ.?P "l0%›OɧÉٓP+!i3"FO?)R 2\UvU\}מ2cO`'NAOѠSFĞRg7۫], *|__nROXQK ZnZ=,z$óOB~2MN=T<4E'r{`"O#=qz=@fXD8%6?vR\1{ytJ{Œh 3A\aXUpxq3T<NGO'XZy˱kXk"-ǖ2=r˵2_4#?匐t2&]t<-fFOyb /j4s* {6FqkYJ߇~x1vVCzk F$7$M:!%'! Qw(KĤV)<I\@:C\ WLFS˳^f /E^CaRPQ>"P>%V41=UNP:8Sj1YJ⊀2alv׽ͮz0)Q9I6e7>ׇDŽ2]T$\ 4k@3!Iyܵ„ :|;7MFΰlaFUps(Qy%v=h!.xШB**W `wvՐZ9tHGWc.LGF5x!O$ml3ۉGtb6ϒm"ԧR2Rx褦>e}JL1@Y+LńwC NS$cB]5AF$><=>RWQ**R'^ĺ/hC@s-rEz[$(+#I']P6xoGG zs0N{Ys6>z2=6虔ub5YA{`gpU$ MqAkCJb]򙭿'TOȨ=3N%pU/kkb.=ō[j ےɴ)_;b g@.]@ID07_Kʹ(^ժmwl8"v$^ %#ӭtFAΟ뉕8v=iYLA$P+;j8Bw\6l{ yFw)oOyQ;^Ty^}k򞧱Cħe8U!Ut}Tҙ6fh]H<侗+e8ڂy!:YV*\%DO@ǵ;'Zc~;x=9{^Ѧho!-}5 HXBxzl]Z,?+=vvcouER6ǦHRSOHCX!G.9>{ԩ\\i*wßSn׬Cg/rˑ}Z\7`/n{s'6o*T(%S ;G[A >OqZ=a!ogE3vC>X>zKh]M)Vsp3&}>spX}&y6sp2ϧ7g6 X)8 כg>bl6g+8&)dK9L(F98 L-%fc2]pd-crC(Ŧv&8RH8 "!8Q*_f# l8tQc Ok8IG4<ԏzTT)l3_MF B He 1̡K!|@ ] Cvsȝ9 /!0ϳ߻ r7A~GMt9C6Yd1\>E`7S/46Fpnփg81b8@>'-vͦd AE{f#iQ KB2 yyp%3`NЏl3˰4$O[b2,a&K ( ۂR]hҝB_M'WG;]mՄt8D{ʸdnF myRBUx?襱Lu٫gLz5ZLN9m OE,r[jؘ#usvJ&f;$%2}=2h'14jQoj/KљH4tAt$DtpƍC'rt~E:t% ;Hu$}-Ml CjrCs:er rvcrw t=t ww :lBL\|yװm󶸇 WhCw|mg^SE:LWoWSRVY(ern/sELn(jK퇩nkp3CAΑW^ vëBr;?K5-[AUͫý=Lw9&RAGJlrMBm\%u+h?j#j)ݑp,ob7 2."MlLAYİ̼ C0U9@L@ () 38l+ CQw'8% SIs9>?iͤfٚrT:!73\/;Oh MYo`k0C0p?L  a|WP z`@ d10),c6^ugH(gZh&(ulaz[4hNT䄵Z+lPgmX"XZ6X.c_yxvOLJ@@txxʷl| o'Y *ޏ4JWoI.!8*SɁ0t_ 5}g8~iDPv({G"ҡe~g2҉*|AоفDLػg3́9ԟsʴ+@^^w/31@C{B?U= .Y?RDf=a*:Q?$?A*0`QA9oEPtqJ<|"=sya3u/avH; }0.]OyWzWpwށG#ta \W1iZ\z!#^t41?. bCz$6Ϙ)1}y9\:!M4ҏwhmMH-= ,T ;q)aٙ_:δjx3큖9|u("ޏ7Vrʲqdء+aTbqոlqཇDvyx&͹Ayꈁ .K?ʇanLxLdMX& Dʭ\Z~*啗ɳtIKfsׯ , MH f5Ha2'=q`xi';ɲ?Z\֦o:eδ.o:x_n'A'ulagb Y:cyDHYgK}?tLg(r:c(+pAM2d\7Gt>n$$˹LA=C$*ob ]Tea+ KL0yXgMihIm>oGik`SF6e.Oi ! Ү=#J|eOLzT0v~tl&FʹͲw)Mv˹!^!*4}r^l}[n>~˦: l=ʲ p5zЁ_ID ZX{z utQ}79 )'5k؉cbSc7mͥP$)/J{&fP; z8eWbC [l_~ -"ރ51={sOE*l?I\`}a1#R+J#y71N6Ɩz|jdXB:όfbj4 Jk|a!P^+PJO6|挻hމx2/ |ެG wmvէI=Iad(~$pk7]ɥ-&t:䂵rFa'`sʹNىT] շL8?;Se]J pmzW;SZPe%ӠFwtk.rXwDf >f6.ha} lߠ8R#oɄ:An_g~1XJ 5ĥd&A9 &GiD݁~?YmYr,}d_L pdre"j?J>I:3Rq? NJrrN|vz*b > ֔yyj%/3 U\j4eK>S@s_* [[},~@{:H}6;FYeێb?^dls(o3UPqCw|N v);$ _-t_HiܱM5Qh) eqU&}HsH|LDR ^wS˦2ºAS תN u-jG)RGy~Qfɕu~Ȳ[h),{s' GB(kaeHl+C =r6SB iRHK˨n/,v`l;ǔg%5oIpV |B7Fd${c L闪jM[1.x l)4w>$?%؎opGf=H7k6H`B? mPFWəŞc):pܞ!2ts=>`YDlH2( x"g):c櫩 aZEeQl/UiJ|uMRZtw,_--xWc^ƒXAp!THRMe”i4'Ƽ; Ed; 7D%Lc T^5h%̇0CATw3bGQ2|Yt)+f=t7DZa94h 73}D&k >"^)7cހ!,dwߟ.~Ku;Q>M*0)Wخ}Q&`m2#[a N -H TJo9bujY)[b,ewRMnrm=~:i >+Qy:*hso8*f v_|a;*DpUP8*IܨakBk"@Fx>maduC줏x;`FE7̃8+N=Q'?H:*d2ўԋeÏ?12rzfst?TV2.=fqJ`PX =Lj3ǯQ!w%|oA#7,zjXG͛D ŐzSO2e{p|EZ 77*6c=ebJ%L6&pͰ̦alVWݤ)VxBȆ^3ңY;84u[q^l6MNbXo4V$Rмui|AYFAS.+ ЪڢE-4N$G_ox-bWc;Q@𾲈6*ՎEcb bCZG)6$]H~ujnpOܷJ` QoB*k?:wuq?EzWVh>7Rݝ6왑 ~2rܽ\Sxvʹ.[aSwNB i*|e?t-t610 00`"'6jp2#C!; ҔQBP1狖{3!G 7߿6~oֿmԿyԐoqc|E}QM;KQ^:g09R~R]mg?ʎݨNǎ=,T{.`3b"b<+- [,d.ԃT9I_wrRNq]"0)6EȳOD5rf2 Rx|nJ3i uw ʗŴc;nt,p=00o E0qwg6$C:6V #u_@ sn5&ތE񇍇+ aX6' SS<1 -ΩHPA*s`_G{vV7'-F]M4C3~?6l>,5W _& wFX a CÁHǚ\֡Yge[k\*C:g d7( pNV7:[{g:f9+<:߃6K73 Hw /EO_WNcr";=sayRmGۚk} <Tcz9{svn5 u !'qÍ!F| ݉1UVzKY\ZmEoPW6.ͪ-vdbLT떘Q70HPzQz򄘘)0xK#1nNĠ ד^ :C^OݧnYZ~:!5`:NV"'~#el``X1qP 7I_ޭYX_$`,)!T?<:wmIŇ8Cͻ CJSEYtJfog7,BH7I ȵ!_G aaXʒT}}w~_zZ99(t9 {t{:g$p@0F˟F6=NZÎ ud3 /y7p)j56&╂tSiI $X]Ku\c ^Ka{pX 5H'JN(^-_-jwdمT>|O-qTNp*/ӀQUjMxÁB} n[}v)`b04Uϵ4Xm@03 F/zPhcڴOè_w >CFk1]ɹ)_ uslFa#,t=׉W\GQ0 qm&ѭRA ߍFl49Ǝ/MiJҮh|}o=MtlHf|4N#ndžSl66 <>,ؿ)=2.iUkl(hq_ 6Y8BS-P~8?הNOKVlmRvY]_Ѿ#D0tW;|%,[87V ڮ>IW NE6SgG!0S|'ۆ#:YqrQۉN#voR+%#hv$ŹOvJ>Ng`&\,Hc0im=f]vcMqi58' VI(s !v"co"z"6Z'lo&@.e,ervK\EϹ򄮔~ &7u\  IB;@1M v18 ’?[r+:u"cs{Q]h6ү,vwiqdib%4qZmC wΙWyz?3_̙3g93so`9`Y!:x%` "GG1mNeƆrwv{~kotQxrd6WnuB|f#+9 ry+ξow^hX vA}wR2j,y;xCRԗN^J7oϺY8=q~ʼn1μeI$KG.1?K¸w0 ~p~\r4Pi8͒#@O}~4iP{ѤYϢTjRRlMm Mi>vDJj̲/E.5n8V(R|o\̧7&/z? m+vhqA: h^~Ո> =Te{m7z? 9MAIR)lGqpV]@/5 Lr }ۂ(mx8o<94 OE-㘼M+<]c D`wzVٗ&Oכj7YR:GdIzډBm|v"R~R]5A^I|T>1RgZ#vyr4G?=2DX>g4.R%CYfK+8%^A[>!C II/H27,@_:Xc8 Rui+榺dZsy߇yнj "mM?m [ym-&xT5JM*\'˪\\"m=F$ΦTHv(i&RpWl-q=~ Ls%+epr ן]p1NbhߨۮpҦl<G_}4T8D$6ɗCm '>-\IA :rg Lq`FCtfS/A[LMU,x$ÂN@|_BEEw-[;]؛feDǝ4:=5M#DgRԦpf }s'=ysgQy(F*]M1gM{=Zu<K wQGB<[y`qȅ&|q9|Uc2:ε~O?Щ%aPޖ@3IK?Z *EaS7g>mvdem idžDͤ`1[`x` I^]c.-a;yc 0iz^'"I(ͥY4ӈzc̖R,vfw>q1Uܦ -R:Sk PQO~\'H=b9 ,\CKϠVvGyϢv{<'Zoo}%Q;y.oAӋLY |7=7<EEw47`IE4]fop9d)9곆{ܶQFL#HƚytH^ca;A/Z K<JPP 󸍌7&5yuJFZ򀂏Moq 6}2;`peލgmF{j`>̫ndǩ7h\+Ep\ru ]0,VkL gf|[B[N&0—_GebhOVrґ8·Fs6Gʰ쯄,ZQ(;ye$m/38D&4%=OOsy+"y+Jcq|Qo"u\t6,x}R+@q^uAob+$>$_D6:N  ~`O- F+9&v'vx?ǜ &ɥLGbaB0:Բ.$x]NdG\TL&u1*fnn!se5V.6kQ(f޼P}7dʀuMg bhz {ۣwSC'#Ir]>F/ARq.ʁ駴ڮ4w3>] g; d/ނp w>0*ϒ&B~< M+ gDn;.gnuJN"~ 40\OZw@#hC/T*rn(NFR R b/Hv($`$aR6DOplUs G%cr:?ĤKNj@s3r Z /v!I8&2ڏb`v(a7<{  %WHQ~G>"J8Kޅ8.[hwa-`Fޔ&NC6×O 6;fTLSVʹlF/ܧAGRiP(0MJcVű:cͮEDqӳ|(LhfѼWPɌnѩr軘R~Zk(<t;atUOr>误{WzB)tssLa~"I:w륒;ZVth74_r?NPhqVl, &7 bǒoF ,YÞ.~ 0{'Є)5y a36eE8 J `!3d;'[Zg(|M-Wr1-0U O藍 ;n/^'pca?+bH~оU?/8\I8Q~5.q !O6~fLݙ;<(zōqō&{%W]@\U}m>XPoP&t}m%ꌹUٍ_:F XWrJTM3Ksͅ7<ov=КT8-?>K3x{A'^ vlo>eiy ?@#P% HJI8G3ET4%~)q=sUc,\MN]n1nb|Yܢ"/_3AM 41౦f2E.Q6>Q=vO1&E# I-':W\>e<0#:t!Kī1ۓז$6kr\Y&y;d\X2.d^S r]C@zzU PP WhHVV], pnD uSn1gkUClЬ[0 O]Ֆ |9lEZ|-ć}3'Rràl{Ww\OGs2NkeUTCtF僉F8>Bl(2-iN|c\ a.jG bLLۀo-H <X3pu6}x acXo; cWW$֊2q^s{*@NF5!aT;KvQtoB"-,/^a5+L7Y1 atB;M_*F{"/$ 9yͲ2>xt:}c`0_._<7_`%&*i` oUQj~9*B+,;;eɂ:C =6j(`'%f)A.~Zfܟ7]Ƭ2 'Կm a?Q.k b-l d?A'- %[pNC\;7u 潗@3Մ"(jAovP)Jـ" GƵ+#Q9 oO:Ը]s㦹\6!8>[X]T_{iz{j{XOڽأ13s E. o*`6`b?HuҗCm&)]):7`7[IP sؠLL NlɛZv\NY vjuZ6(A!b }{n:6g{EuQ<^Q=Y~i\t.!K VDXvF#}]0\r5rľ7KJ&$~λS7og ͓ M?w`5ϊGz&vL\C5M3)qt2oQNN#nt+"Vf@odny ]>/$x5AgEZOYއ q5c%Nv54;h?g4t"r fw5aU}X̋"ϫӷW$Kn/8$t E+iiz(W n_crx0R<r4J- 6%xyywOG_KOCxB5 !< aHA-4rHZW;V_6ѷߗ>o.|[n nw>3\!o -]臘0Ba])n% %O8:'td$7j@<0~e%\EmUb:G{E3'åǕ[m^@^g ٤OcsH8nҧf;l8S5;Hʅ,K/Y~{mKwg.ZR^ݸ '7׏[ ^Ĉj & zG \y(uI7?$.> *1/AZI檂~*G,{HMU~5#TdkjCF,u{ذ:O3PQ.VV@K6|9jPMI3Q)YW}49<֎t^PDnF8;6C8QRh˫WF)ȆL9?S'b _n{萪<|z&:;?oj0z S>+ǖ<[5?(Z0Kx p> qNH14cܓZݗ˫*`>uQ OSXlɺt?= ad}.T8]$O{z4C 56w}PƢ⼂laӷPe ]z]Dm:6< 8l^P<xH\}S3 m^ V"|j:Z Cp[ofaƞG?`pov5m4\biYOxyT3z* /X1W 'ڞ. ᓩc{63I!~Y@Ȅ2!a5^pB9.@p |F&),R!A a b l.!>3KL:Xy-G>q&URvg w _cr$0~͐XZޔ䜖F*_ @z[,}Ք`r% aW ?~iäGfa>-$ciA$j,~do' oeqk$^PJxR|}oXx8]J(ƷXxN<ɏ4gHoK)؋gXW xnlI· ?&H$8رv^?v,ѨaҰilh1} P琞46vWC!=5 Sy?jO,3 _Ų},0imVG$W (h860 +H Xڽ̊,8>@l fl: P^.fl6\_#NA8 "0v+@ȇP BfAxK@8,χBX!B)ru!<E/A8.BC a |!Ah!SBaP\K C(PB3 %G pE3<@ȇP BfAxKC|<0sKD>>+NX Yq.̗y';ze]}!jwl|_ORa,7Y!4hTI@``i/h\Vj`~!)6c_RW~˪k|3 #| ߮F_;%ڍ$i:MG+Fy a7L0kf|ˉ y-moHL'0r '쟭œ:0h869m+PaNi]OTQrx8N81z0?csAIbFÜ0b-[ F>mLKߞψ7#x0%-+'?NJX>4F:{tvMot@v :\{2{JS oA cR>!}~`K c)I <3} . :7ly Z%6A> ܛPG E{ނ'k]Rw ~/snXH_ ksyOc5I`.[Ufƾ#d+61ȟ [@H U~ʈ<pj~p+QߛwჄ&% ~o3vߘ 'FL,c,(x ;e?#>C3A(9E}!"9"H(񚼶@,-A{w? EWWvܘɛX x[t|5u |;Zi0Eh֞`נ|님^u{ | |TTblgfAx|VP6,[+? p IwaL90g@ǘHϿeϥoA-3 .mk}Nl;pki ,݀d[Gb[7cu _l$-`t=+FXaQ>R;pmDOv7y{A)$olv?8YCgo/_Mמ E}/'<_C_Zτb I-]}O>l8A2w5yq V>w9!4Pi[A'sxglDFx_){a "qHķ;u}J<lt)E}>o paK>oSV=c܏I+}U`+ h00ZAX\dK\p%ЏZ{ɬ'O^_7Շƿc?o˄9"=-!}5dCBfg ҏnlkl@FYlAn3p ~L`x[^^Vzk z(EK|1qauVH_-ܶlrۍN SVpuzHr*e ė'Z^歩qz\VWy[UҽU5#o@gպ#=n9.{XG,-a1\ťWv?v&F߁ZnyUYS냬#?X[^vda,Z xj̑ڜaV~lց{G<^-u8*q!ܞ:V_v{FoK=Ep%\8c'pwT;;G go[=:]|*erown~캬v;="[Ѯ γtu8ʶ9q |։?#f9E7+rs#F&˽m]9<<7:US!]~g.t*ΣM q3(pU:i.@l%ؒǤ!_y\"=8'Kڦ:  8#}Sw&o,0Rmsc"ܿXQ q~4Q6|,f yk/ֈ6t Hu]h)GFv9C"IfYbQ+鸑ͯΉ*V|*@mL Fڱd1 Iw'Gk=kt!IRƨ;WȮ[J"Yڸ1|tqGVoQ+Q0Vnh ]ոd|([Tc YKpc҉ t:(\S\]?P3z܀{C&~8X5ɽ́GA+-5;Lj<ՑړC#8-oq+; 2!S<oYFF뎩ClcVDʒ^[C'D Xͅ6lP|fH<`|bͥՌ.j:'IӠԚDրN:ܴ "Ǫ5rs8ootl]cw0RG.?b_,1 dqCnn@f&q4hx:V 'I*(U ;XHQrR%2GacT:6(/cMQZ>I>wZ36ePK bBcom/sun/jna/openbsd-x86-64/PK (BNNsѝ,com/sun/jna/openbsd-x86-64/libjnidispatch.so̽ |E7 añ4jDTDI0] Q4.Uq5@DQ͂E U%Vs5A"~Wk$& <#t :/ZKVUI[ZVUJN gi`>epdAgp\52\czәS[ ; AϓpõUW zp} W \pUpy C]|p WoN*] ;} @ؠ i'%KyJQN?'uO!p7և ׃p ? p k 獂+9 \}]s[*/%s;g ?/w!$z'Z0M ~!k ~!g ~aѝ %7P׼m ڸKYv8Û^Gxq7! hy,?Zy;wo^A] M+ WڶQG|HC-w(Y#Xǐի}Rxx`IC`m~"~P$㗾o[3=Wv4-!ok$cjAgRxw{zGp򁘑^MZ1~~F?xr6/x^.){4OJ_q5eX_.7C-VX߷1%8?|o3,0^hm`~m99>Pi9z1\q{j3z_x9x9\?8Q\`܅?q!VX{xNA=/>Wy8 1/ ?u/Ap`i8^j?{}ڽ<~0FNϟ%;z'j{e gnp~WpUzN^x}l8[^.y?۫mJ^_ >6Ip~O}좶?Wǒ9 OV ;/s񤺮׻?r? @ΏW??_qRx;S yۿۯexҽoy\Xt7/s;Ka:p;NLSq;#Ax^/ g1zx},j?Jxi boeoPPewR5؏|n{|g6?|]Zu {s\|WmrGM7Hd<֕%2:ossӝB2Hq0_W A\;ڟN {|1=!~*tևX3H̡)iɣ2ƌ5vsc81cl;(`˟P0ߔAN8jcC |`رO~0:זmJanfބqyyc2t]0~b13Ǝ< ;a(DytX{a҄1! l} e31w(WҿoJUXGIə[T 0x*L3~4",xl0BTo2 yh ;нScl:YcrChM Ӱ eg>=~T&?bMf&) c' >ΘB&1h%\ۨ!Q6@6(%3 yrs3;!gbHPY 6Wߒ8plYߐGNn;@l~6aVM y;`CјP xz\arGdf=btr9_NˉԯHcN~( JYj)X-e\c z,)dU?j|V.+bYG&L(@y2s Z(16Kjބ-?ڷSEmE  ;yl>dSTXPk%b?ӊuX1h &>ǃ@Aax)2.Ȑ)*hxlL:i!֐ s~KTDc[[v"mRG \}\r.T.d.R00CdۄQٶ̉4Mz[&r'TRX\^.i8bllj} ^'2.CCr m]/eg+6uxMrZzɊmW;v>F`Cigc\[~A!w|!3㩢"hP|T o~_W8?އ}|3ed7K9/,~9Ї_}?݇x~$Gs~?c99܇߇}ɜ_7s~07q&~>7 972Gs~c| />|}MLJo߇f~4p0~,ە-.9|װ>y }y|%H&"V ceᆱ.CW >^~?lO foB?U`G ~U|=X?[x_*/~/f/ß]X/_C |U>_|8Y_+)ŕ_|yYf/ m% ; /(⫩s~o_*~_"wX}Z' Z/>9{ ?M+o^f?Pv h~X?DC~T~!?S0/Y➘|/ 8?Y~!%#~ E_3DOeE_.~w Z/ z/ WL$_Gd(>H?OG ~X _$W_,7, _܏6LY~/?]o3ϖj?GRE/%Gq$R̎M'; r܄44ik~i|K]N@m;!oKi.!NqNHBo@,Fw i|ÝLt[!Ot(ր; @k1h#i!#."ф=Hw$D!݉΄Hw!DBD+?_ }%'z1= ?ѯ!} 'e~C'z~F:駐%DGzO#H@􍄟~H~A&OHw'Dߊ̈́A[?ѝ?ѡH$D'8ҷ~BxO?uHIނtoOF"DB:w~@?H!Dt_OL!D藑I HO~sTH'~#B~~H?@t*'?w"ݟ}+?7 m&D_ 遄H?HEJ>{鄟H"DC,?҃ ?{~]#-H!@g)CnOf9V+" +h i`#ُHYSav$!|+#ܭ†,UC̎Z]9fyy%lrD3Xbvۮ6<fGE$VDMrD.C!NH_OUĴmW;ЦfWMAQJT]>ߝ:- Է3gCW,Q~:xUmHҸf@k[iwoSJҟ,UuU3P2(sf<5)j1@Sf Y!QtB `#S MAIMByM`?MY{7t> :-R9U:hX8(Ůq)+1KWM(DŽM@ 9^lغ [ m.!!†+JcBgYg؀Քa5)~RO?U>n0zJ 1?RZV!T^)OI9D,._%,Axe/̕ WX=,{[{]k/oZ5/+ y44}I=A{sQnTl.nФQVԡI/ *=/4iA ISZLڴB@V~ۛ 'FrW \a=܇]#|2ۼ3Bo*Q.`|e[h.Zc[kG6cB|Vy>jAf۾]t|CX 3Rff>ޙ B7j|;Rxfyp 0S'6d:Omۮ4ГzblSBX4qhew`8ڃ\:LMyzJߘ 6n{ZkU13]3zvXfVfW%{ފ[1_caP@yA}~̧YXȤ@QS.թX!;3p+eS-)2[Mih5ؼazTrgXߊ(Z:SJ|@C T@SRrDj&i{`:th?Kq9f̪[q@)-J?[GrG$@0+Sߚ<"mܧ>3TRJVYY%8zKv5Dyhظhlah\wtc9to$^/֩+1 sZ_8zAZܙ).b!CVHghٕ&H!.jy =Nfz/d{d{Yʨ5KN M@,c4lGQ(;Y-b4"AZ0@<7- ruQjBU:JK#``+f t|TcZu̎iqj T-zě+!a<[h~`H C[; m5kFuDCK[B4gn t_PH=tu;[a5_CQ7u77n lպ[+;fo4wE޵7;_wg\ {m㹭k_f+-Tk Xlt.ȽQbjoku%n"2088Cpp/";x^׃F,nŋ,Dy/]ͤ75iI ItbI+RECϯαolkrof9,_ 5a/:Ÿ ܰXmx }5bc8BiQ@)ЪDqxcj}KڄXSdL[<71L"_" -ra]*&2HIq5,ݴ85Yp4i:Hh%lN);!'=)[ @ANENpLٮ}r:f͸pjK M0]~G0_q[gF%Lh#N\ t%|A*QJT2<=#½{_~x5*j2׵4׉wuA*GPE !Sqbag?uw+iM&w9 C#,gS'a"pqs#y{ \eL?5)Ջ ; !6߈ TSQc\W_4pY§}(NQ>ܴOưccO8m<ui4(H(w$ $Y]-V6׀7Uqf\> Kz$mV~P̊rGS#kݎ#1 :u YWS}ض:4rAS&*gyx5Iތ&D*Js`Tx3uwre;Vu&̷!~ssg|3a0'F"fS*b>E!'}jzhF38tMBBrqSR1+'%9 V@V7"M iPS҄;@z (??-jÓS0:QKg[4T9b`  H;jǧ,{Sj8g_D@b0k3 O! GYߑwƿ7 ~S]GRw s*~LWÿWÿdGrBOK}{ />aGGozGB"\11)&?>'5t{je{ O"_~#Ï{ V+O ou'42'4olm m/߁GV_w :AA\ÿ?r4*٥i  MAc%4rPӚiXrb\qO{-1J99 4:q_l:E `Ts]{ܣN%FZzE-=Tn;Q҉twgzg lQX%МL5TSGy |=ܣ>{5j~!Bۮ@C%~ɶv:[=VޫTCqY8ګZJ] ֤fx_Z?v@U=nQs $|C9( .1vm?B9x r`kw9cevz8fUS >`Ԯ [YGvzoKzb+/?~ra [|?:jfj?߶sww3.Q0G^߆Wx[%?em.}gFmW75Mobow1 ?y$73τ?2H .W0-dGN5Ï۽&ob+n'35u  jGJ)G j{-E5 $tp ue<]\Zj%`XU`H;8whh2߲ʉ3ZҝҥsPkMN ]R9<)ww_-e@i;]aRNPyK= }+=QKiӊɥ'oYth_j)İ7{'L ZUhzToX]Gpz"AHIG7\p'D7l`=7 \6G$TZ˷,N7|6z,/@CIdVJ ~P͖"qk~1:[Q9VS(PP/d˩dzJPν/Ăs$xNW@ZG~Q-< Lea+Gg_rjJ7gHL:ã Gj# !"F שu-9ßpO(wb9Cv(:0ta.n_N%q=hi ժ3GǨ: ?"/pV)ǃ7&@{R&ABAdTwmwZ7TBC[J<)h{^XG4g[}}{ l('gy[=*ٛWi^:E5 {T/G>LǴV>54`,h9G/UB)o<+ *;2ǎQOQq hpaJ4cQ*N?SO?r3k+~ORB1:H\`0/%ڒ&]-&JlSD8Z$#-rH(g55QR+B>ۙ16ZIbGk=ę5$qj_7UB>0*&D3%2h&pweLbDIoIؘ2&q`o+-τ0΃eB ]Wp|筀 0|??鈪ZE%{g}lR4IMOnu ~Jmѓ\<&M.n^ܾ$\+T~,?Go8gq|4?(݉W?wAzr7nSHUfW CoS9iX1uI>ϨdFdQ3j0f0FYŨ~gԽ*d]̨^DM[ ]\F0느crŅf eTՎQ )51zF53ӋdzFE3 bQXr:q ٕV etIE* ײ0S2_ʕ ֛+8E*{0͇Z )]MGey3JHoaq\2:'W@mqVהU4qw86sހt]L].< . O"sof8?ߌ?o{"y,}yPg >cJbla ,hĂBxF j˂ֱ*2J'wHbk'Uj}.Y%Xb{jH0X߃Uhi5"Fd+q&rSr7 {gZ*X6_9HgpR O;~k2߲]8MfW* F{3a,M3Ks Yd1QEH[a4iACL*9S4% {bN$(~Y ")#ZKGU i"-MpmLw-e*U: xXD<7:3̀:x6qw 3Z(^X7y5;V׺ h: ^&gqob%2C"rnXcSgH4jvTĤmxqO✱HYN /PuZo윎n';,d:!+|&2Z",%Z7&n\*1Ao| x&_R྽@k>qBD78jjPva~LվݝV(0h׋,B0̌fi QW PP(pS;BĝЂP}!>!@ɺZj A3[ OnqPy!Ov7NhLjU8p(`u7)N课VP?ooVDx^ Os c@U{xfH0Xv]Snˢ Wjϯk*v<4^U?ƿ/k Gs .BCeby+GuaUr?ӓG-Ŕ k1y2*bv=Q aկqݵG 7UiNx5ݖےz㖡.-*s^ܯ`X&-Szw`[Ę4 Ne%Xc* "L`Mh00>hNWR_(UxK< B 4Gyd7Yg>Ⱥz|Ը]. U鼺d% R]Rv-NƷlEI?¦r|3-߰JS`j|zsV_íמUNB睼t$+ɨz8>C UR;~Y) ?yL[ c)yؔM4ǓUyG/ |oM]3˩+6ǔ~K) JMF7 *`v⾴ i|"Kr=j1$p?O@Jr|󔱸^3$DzYk\IwBJB_\̡E, Y޵芦HUJѹVbbNiJ\]T5߷xQ@Ԗԕ~,=|oQ0o 9 '?rOAlm{! =V /h_c>CELWz⯵"ҩ@<_oS@b"ǔTqXߪo1^l}P,4k<w;ٮepV4*oz` 7#,ʊE;@F? N+SAq\Ȯb(gxqwSK]z?74Ji'_vj9X0Hk,B&Q4/bNr|?i>?+}@_o>u{gW8R>\k([Ǧxeqhv($Atm6ˉY%SӒc%hkiMi"OJ?&N5eWb9`|I/JO k"__ ˼GkϾDs) ㊴'/3v1i8H*k*c$_u|f)F÷9[[ߵf%%|uja/۳ _9=U}U]&h[W^ *{׫n]ߓ{u|zwZw3wiAI{]Ⱥ ^; -S>Gx) ̘[L TpO~F֯S=EGw1?"f-tOfSBxB?^^p»(<(p д kUS?%֪4LNzTl/ܿ*x‘8_4Ы0|! de|,//"ćfQ(،$v419h0T9jm= (h SY: rVz?+)p!prx=ZO {` C ?Jg{w=-ڻ i!+Ųh1kT_BXֹqEf:d0Nhо{BGjFI>b>^HD;gDsѮG)1L;mZ?s-?hM7X* U|,9CkWN~y\~NH<{d.>۫vIP_%!?OR{,tY S XBܷ ޿Ju7D]zYU]2 S^@07ì_ 4D%EB"+-D~`~ ?K I,>} cJF0.<)">^X\+S7Q O4?֤#dh0ޕ;'}Gֱ"_v ;3׳&+_+Txo ^j)Ĝgd#&3k?t4ENNE ?J7g괝j ߒo܀uh'/j޼sD7p.sIkבUZ7֫yu(yVk^ mׇUh/<n\IW!phT}ڨ[kOtD|&U~KdCp{j Rܟ0KïP?D?D/NUŨtfRsFz:+_mjR#||6R-[7^)=V M&1t,wz:JlYtT#>0M5Y?*/Ĭgt ic19-\̦d)UT۪ :Vuω4s Ua݂mՖ-Ԛ _WZUө%~^g?ŬI٤ׇ'a7~-74M4FI 6x<@T囧mJ9H3.DͰ_9=c䨝54jK9谞kC=FobP9:rt0o;)G_%w-G`:cC,GkbmOVii <5RBٲ HyUZY4SV؈6 _í1/7IX4Ɵ3g ȉTk;Rsʭ[Rsk; _ S0[(lVax_UOi?\- y*MKpG7aRS#hV28ve56f(i0aamsYw7=r {G=qEmS:m.3b g` %#eD[w S8pv(!>c&qO^svQh´],=Eq$fzцU4']dJ 9a`>:$ Z|ygT:3dM LBwx2{&KHwoPMdR`E5 [5r_&Y1i[kx2@9Tu;O  eXa)7Ħ>3 =y Cu/R/2s%MCS8 o|=x v~ Qa >6 ڍx4x-o`.?,Pw> lĽ:Ct:0NaPR`]Gr~Ptt![ $_GŹ5fg[]GO(tSx]GMG|*3/]G:SS6cn{AtK8 ާhM+ ^8  ]pi( z8Z)|fDTK8ċ ḃ6ʉaӸj:jס)Q.:y/o8=9F4(@FK:4jF72<PGh:L_hҵt\HvЌg8C0#) MGTddx`# ddGґ0k0Тyh窠FQ(^ #34RZȩcYT@#3)p@CF>@q*)ܬٝjj@#O`䟫QGx`#P5#L3k}0#ߠٚFf21$`xndw#8yfN3שddܲ*kIǂv,@@[YLq2* Oԍ3㟶lG;۪ nMYH=wvLehIe&s~Lp ޣ a}``C! 6W3)$XTd?c F1'IM]#|  J Lࣺ`LpLz g#1P<(c}^A n 6$.؝ >S,aIp.70)f2SP.s `ogIР b? ^6NR1YH &X/ ~AoLpr/|3tLp&(`W]m&c =O0 N!ߵVL1~,gS43$.˜#?+$.hePL A*MmI.x9gL/ *Q a3A`1,'J]%b,?&A.R g P]R= !,F<5gO,g!4W0S| ^E,x&dLBB]6g) {1$]K n'xl1-& $8 ~L-ܬ Nb*"o3$. sa$8Ddm~LZaW1AD?7ɉ(x0D/&X- OI&XEtl bH@\`S~Hn]p:e HAcg1$IL2k0Va,^5M!}8C]Q2Ϥ~P'KTizIUtلr`xJسnk0[6[DKarWh$^Hh^S1@Nu!NN/M_/:~#}c8Q $#Ξ(ɂ=i>쬳H8 Oe A#ͻNf;W<;HԲxKKG<<}@d)#QZ6gWg/+a猉}TW x22O6fSXC͎ѸIUi*)lʳ2g>vJ>hYtc0h6@ ?0:ynzŽ9YX=M8—sKBډ+K錋4!cG!\M}߆6FJgӤf0} >Ρ8VW]ƁrxLVcqw8Θ&QÙnᯚCmϧa jፅL(pck%xiHi6\p qNʻt9' t J}J䗣VcmQZ,]㺦Cɳxs$./,ѧR𶕹o( dm.Z6H݌9J vfY\_Z`qT泳XVcH*,LknS ^Cy%t2/s,٩N5Dk0.µ[/q p]rc=:7nrJ&Wsi.)4])"X7+N<̝@OXdҺJ(K}Z;Bza:4Ơ,\lbr$ _%d9;#ځ7şEM8@; 9FR N_ϫ F熶_XI qbp6%nzlMivl#(&ZElm[L3N̦}sؾ?^F糺indA;KV7rjd ys㞆 4CWs܌G\ij]"2 QJVQ>PI"P]"}ҷ3(yG9U=J;~)GCY < `4N`Y j/ .z8'LZv$siCbH&IF$s5DӁƸ8zZ8*Mv p.U zFR!Z{imRC8ՏbbEU΂9ZaUΟS7靲+q]@yi}j9_PiM揰+L.UrxfŔe2q,gtSp/]8H'^)dVn~ŧ7Cw ^c' L!({ rmR>QRvd%Q7$p>&{4Ka16IӔG{+/ QRK;Jw.D y3G")ţ#w`ybDj ;v^ށ֕r-Lq=I4J\dW_kJMҚ5@j"!YIg:9jR!F.9IhRm#k^ZH6[iu#s 1do\x}q}x{[Б1l+9sF%p{% 8KOvU]ɱ3cXl ;_Kv6s,Ҧ;67X]f)cײp ˜A3n-荦7٨%mٱA`wǨlVX9#o#h( 38R5 uA8J (A 6ɤ/^@?+Yl0+L{K2+c "rc/gyO@?󴖊SbE['[YpO/9OܘZ]lz#sSV>)@fQ >{ P5$47΁{\^2Wf|nqMӸ_d#ga,!a?% Z%ƿ߮~>c!2WTR{ً>s&]nޟK[e'9EaSZnYŇFV]9q*ŒHb|O00?w&gH>Iƽ$mcWp(fZQs%*d(zv֍߭5`?=;v|1bx4=I1K#ؖL/jk҆ɬFoa }:|kjJlqФ၃VUӏBG?G ,GŽM t^1@ܸ2P}k"sG95XT:a/wXʾ{R ]UGPX ĄT=ɚWIヒY_):TUb=2 9q0W k-O +>7ow@aEc`lma! rFEy?VmlP3]emO1M>(z< `%/a.Xz X9Ըhő]ԸaJ M' J؋juRjJ!)}GuR̕d)BT ǎd̘9|]ڄ[#cĚc3O%PЊ=H,^^5=@x%|qÓ^0{.&auaSƍ d86Hb0eee{rJB{: SOF5LcqʤxN)3^)%KA48G0U&+3pJO媜9A%ueVa0t˃HЋ&]oEdƙ%Y'!:K0xDGE5q]HepZB|cj0!N!II x'l,dv(Q!<+1W4e, !bvVWEʳ0scmhݷxAM2dYd0;)Xjuch6c{E5GDJЮD}Nrp6xm1!aoli6`mN,Sբ6%)7%%h)mJ+}$<!ml㷱g99-ia>cQ|LqR|@JɽiRy|{hzFz-Qg!: # Ⱦj+ib?כp}EE:CK5o#dQ qb%s'[PfٛhBᜫZx>bK#Q?o8`X\aMvK(5"Z"ZDbKut{4 rH`%g a'fg3L4Z ba:/>cJa:.hY}Yw{?xO['b"LXs"eOe㧰1N{0LHHk8MC4lHSER$`g7̑⌹ahg4ғMy[<5#LDrB}kkKl*e_JށoqSN/Ub/=CPRPx t6ohՈqvDԠ6"J wCoԨ.D}Aߨ!\O62$;w:d:phfv fêŖ u i⟢amז3~ވw? N,|hi(=xx ܀dO_PDWߵ*相1CA؈w6@Ӗo-nq~ fu b/ Yבs?n@o 0&G;0.8fv_ 6͢>pw6x#d2_ކ10[OlSzg/6˯p^vk N 94Jjl Y.XB/[fCcq0m`Ɇo-Ax:v~N;lgBoV5fMJt~aNef4g`%07Av=XJ) KVzŖ멝7ҥ NjX=Z"?? QC˖!f!/7zt:L/Fouy~?6kNB,x7no`g= L>IxDe.g`! _}.K =-`a2: Ngy#`{: {<3SF5Lk%xK޾VEVK)I:&3K߰4Bo$4߀`Vl`9JW!r~q{wE7z$6?iezP9ss*Q~C}(1yw2>֓Ѥ1GNeЕG[ggca~/05%tJ)9t <3GoUz%Z58F]ɟ7"yJ'MEE0A1F#ч:X|QU+JhDM2&唁Ͳס3DnN]~m(u#Bulgev]1T <)F]5 [[] VP, JCh=B r@0![7?9 %~kpl FLҷ"$t5x:ɡJě 4gc8tD^:nKw(HIx}kՉb>TdjU#={$8[zP 3)' FI[A]ױOLꕒ^Ve1[_q2ي;hB5k%=wGZ6FRQ(㨸/d6?⟝lnɝ܁E:hmzLt؆c>oߧw]Ɩޡ^8/?'fS bt²;BfY4i4v A7KSKNwiNyE15s`/4!"-r(b|#_؂ܿ[d| )(j$ #:)2X]yNB*On{>GuIS's$b,Ɍa:>"+ YlD/BЯB~CPRk k!M0s:40Z8u굘I7IҨ@^~d.u\[ ǃ; gQLB4<@XYMB%{8 vxpqd RpFiUBad>- @/S-bsmBS7: Ębt゠l'PC%VG6T(i}TȊ%At"K2w{`9}Zb"ߛQ\;)׉;tMlajB/sv}+1k˲=gTZh t8X|A@gA0| ɪXZrȝ4#G\`t VH59!߅S5`n^HȑkV*2W$oת͑[ĖcЀA]a* Es `_ncg ֡P4Ǿ,(C}QfTu$.xa!\+; rHwty j3o_7@]rP/['/MQ:pW}Yi8E'?GG9 Si;'xwa}x9y/oY#yҮA 6iǺߤ_dHb6Ehh*J7 r tsa:qZe#7s,-$+ә*ڳ/&9Gq z2 )(R.ȡ')Ç0_Y4YY.* eJ.nh4Vrb^_4a&s2_1 |ЄgTք}Ԅ(N>5a H&;&LaM(F ѹ0~!ے )E|itF GNv =}3>F 0t{IGN:'(Axũґ.0.pX V(SJ6,[kذ{V*a;FM `xBU(4| Dre~ kSFC_6-δqhHCۃRrJFwvzN2ҳ`2!T'0"~bdlG=!N|j?GnC˼HrC7ԅr薣q唿Ds+_mt= Z`v+a1Hv}Ł Ԡ夕g0 ЧfWQV^;AQ7 kf",C=Nɜ{ qBT@!PJ@\'(eDu2jR 4sC,x00~nr?'S:'8,ə8cr[EN3i9ΦAvyx2#@{KK2X@A JCL2 @N -6xɝ_Efaճ\ϦX 3б%TXв;W}h*'R^k#M)>>{Û|t̲v9:Z55:^w_$)o:7vwdpaUeȧir6S A&5x{5PJ\54[wRQJ9 z!)>=A~p6ڣQYCYT!Zy Y!rFL9;0ߞ#>0c>;9̙Uo:}->@c2kˇ^7Jc5~LgMF![n *;a{cSl<zoSM4'չq@9ƿN';srv`ί@lK2g'&ym iL]Z3>K4l I@ ܊ L| f<1 F(- +4jlԟ9C#y0>͜C A6@/gе逝°Bҫr^u,ߤJMB=ʳ_ï_( <=?"xxfyQ>ZОT`:Ք:nz)[#SG$ݿU%\@t2[b$Z;w5ȣw7)=޷#2P,|iG;,7tym|!_wPl5c{3,([{on`,VGF; =А; XnA)>ϽQNk:tJ rcR,ǽ'0c>`D28КCoS` i8xwaOgRHEoVbvʯ)#-x <1&a&Zvu9V9I1NUYi3 H;䓖BgigK2cj78$r~ъ{'#xp7N'6_)8ko#ϱ᳒⻟IkhMiM!}N aWK& 㟴2X^ˑl[BW=: ,@~:CN\e;vT뚧`o@YΔhkd2R`^%u&[sug 7Q]\`n!{_zj#+ f68-4k@&(sJ6a5Zg`xzfn^K!TW b~ 4F ܛ'~!!@܈TI/(\CQyOڤ,}Og73/!qe?wn'-$d! T#:ua޿Lt"go2 =w̑h_߱Ezw勧vC{KC >ףV`"hnuȼ vQ$}TII8e$E5jԑ|)s |Ȏ:܊sYCUL+0S`Un}p+GޗNh9>i0ѿ*b= űʝ#'?qGNs l1GUzk <H ZH\#Cn 2`( ]L| AKˇ=G1 ޳Ȏ7agob$N=6 WmOA.P8`==~4FnsB cBvdJNyHh H(\ 4vW%WR=v2ڦ$XhÄ &h8J>*#6)+qJl[%"s"MY^=#Yx*V>1H+UvU0vLGO~ÿ+xi@{Ċ5[j4OȒ6,ES K~A&ҥ9v` ̔Kl I{Iocaås p-c 3IKrF؂lЬlCm?G1s1iwr^E}޶c8Ihg(6|qbƿ%v\ g.]ff=нE,}c㾯-9 -t /}/a j6ZAJ˱zA9?z@憼6*%CYyL/Ã|F3 Lzo+&;IPcUhpe~rC/茤$7Ϛҹct*4{t`b&;CQd4?'d:o{MvyAȨ/Rx⺜N\ψuye"6Y $<B@E87sW`Rm\l9Hv&GEys"ͼÕBxvX3=gWBtӹC:1Lo:Ê륁6^GG7xה"ZeM}m6HplAJ oG?5`p1; f}8:p?~2zW|L8cK~ͶlnSH@_\^;]ߛ_83uh|_d V)0P !>/j"42zA/lyt~(GؑgaĎ\i`G&{`U{#vɔp`NU}H>t$+|pPՑ##ЫW3Ldui [8b!1Bsͧ-̱6Ǐ\/d&Mls/g( Qd +)[))mM;,,傯9RJ79d!~~,Dң^0;1Hv f\1qͅf޽vnEᶌk~$n+rNdJV.sNAMt"^+UBW :r,`F"dd:ZCtß R{5T%{yy极A +&._ )o WG}}xcUp`ߕ^SUUWܪy  &:nfIA7LpGl|O08e6(H{!{[Ǫ-x|;ʷve7e}|k1m_w/u>IA]"C~~j>*;^Ykmymyg{>I>)@$~| ӣVW[iK[l1rPoB_'y]H[Vz zj-]yn5&..z | Z=ci/- !w:=&՞q"{_D顳 زQI4~sKC(pҚ ɭbK5 {Xv w>߅dyue©=U7z^$ MT1)>KG"$a_w6U=f|'ω؞f{2CpphBJ3t)~Y?H|'lrʟ8z4q=oK#[Cojg:brje/tUɳ[t~Vwմyλf0OQ{BC2%ǎ[a~X}]'צ/ j9n_8"$WH~TI>4϶Я+:SZdk kKM } }+#0È6oێ/;;21euIk H]g/1s$|T^P{tP#>6K呃/ :SAH--&ɼћ נ;:fbUAkl(\ӾSw_Vsgl J.}AȖN=',C29БNDD Ŝ?eEy_d[A-:RuSҪ: (SE-t\M)tݵmU*yJľ:Ľq+sSg#3FGT.rlqiAAl:-YdL*~Oa{Q|kJ}- _N[/˶mCƼ6m+R61öge:zbQTӠ(!?Q*^R{~ ͯ jUTT8s=x_clp-qq=Zsa4ou@5Wd h<es#r G. 7T4z_+0C`/A,>ޗ4;:B *d/߷gۊuͶmbˏqgۂgA *XKWarSŏ.I vI;0s/C¶ ߎLKu>,ԱMoY~oZ$GIJS.`*gg^cO4 \N }} gbQC϶{rD.J S8IH L[;\vfJVJ U И!E᥇VTvD2}Y鉋Pg>Bif0zgс/wI2%|$U|)b ˗,%>ݜkҭ뱣Wdȩ{~\k~~S07>xֽ<{%e_@W(,V qX .i~n+ں좭B%ÓwDa1Ǹ'{,bCa.[\,].n k/:J:{ ْ~zGvCf#>zzR`WNKMٸ>; >^\ow7YJý^| 4׏P@N9<^h/B\ *IվJ\k΅oiv 0{[>Mne/ep-?rLwM]^5M%5*MMUU&geKx|Y%clMM M=چr44/QśLrV$e5:™+*\n7hyS RQ]T^q5)&Wyel5+Ƹc/SPS)55FD]TdǚjnloUUMPHwDX*HHQXVQSŅ8m*8҆S]y=zo6ԕ0 56 FVgkk?P3 [斖Mqy h˫l*_ 0MU Q(ȫ(j^^STgAaUW?MM+j?:wt*rpbq< Bl2D}MØBR00 ?7E9@VbqE(EH+ KbW:Ħ64ԺR7+ `UUA**Hшrq%9ͮQ58e4NPP%0fpڽ5S4N`W&Raؐ Xt(mjA@sac:Z S=-0h%8 RFdan2РU(Ȕ!y oԂ(sqݏen&(z[4bI\ LG76kpo4UUb<4e.o"BStg&Hckp ݀zM˒hhVNrMtcvv.pз1Iߢ]q K֔omoUKȣkvxAk4<.Qz/yfqyvS.mE6Ŗ<>k`T-U=\@c#Mv"&Ss{=flIkC)G!?@\hwڥR`:,1Uԍbf'Gۜ`,Htonrv53wBl'ĜSgxq=dBl;D6!/o=n^DK␷vyD!Wrj@te8vO9%:Çu栤Y3˕ n"PtWtߙWw-kv+\;rpQi+xqv Y%M k]unJL4n.|ITOoHp$xn0^˛ܴJ?d` 24e0hʘ+!tvDBg!#OEe揻Pݹ5 %^ȍ۸҃nqCSߧ X}ٳ+ʽK{,R$MEKsp8he7 w_GT<%y[1͍b ,_s/ծR}+2fh>y+]+"Ӑ&X5Q▫R}$G]J݊SSIj6>gv mn cG JI7V:zR9[@E8ƦzHcc(^$M9۫j|]*Rɨ]_#K.Azң#Pzk,spUyGBj)YV4S(t-㮮N*=l zŝx1X:%Vw]t\Y=`».a? 7B,< , `)mpw؇^H?'ԟ+6 = i!}R ܂]b|_̸p RGzfO|"~> XykzN7!r:,¡ï!O?Epᕐ = H0###̂C^ zX zHi" p/r:<\zz:<\3ti1P.'@:H< ~" `>-=wa>eAz~*v>V"Zl> kh'> .hw !@k/nMh'-]W@yAПC=Kg7տ;ha9p np;;8n8䰋^F9a㰀Cqj9\:qxVp(4ra&FP3 datu '+1nET#^CowD#XO<$eO)1t"|n󑁀zanXWH_y@7ǡgoV}:igHV~]/?A9#|}zFGo%Mlb*})ѧiVNN7EEX>s"{5}@utm9}[O t@'~nI3{R4Kz@6|)7'yy m=s"<͠0lJYK}<%k;{"Ӫo'"ΟF-oZ<2R/]}׼|]/=+RCCw%x @+8==Bi(];&YӯDžz=@Ǔ}Rx}'C@_z nЃ|l2lN)3~s"\7UO<3ɛS},!>:vrzH@?mBwB.~ 61(%u'K/JNLπ@>1=&Cw]|z)S` 5q@]h3&(X7xC?/;ܭngؤ$Snҭ3Ogh([8=Z&u<{ϥ!mJGyx>aSj~L@7]Pa@? tg>E@zT=!ASЧ uB!#x 7wDwnuJP0ݢ]t{Kj^λMy@I@>+oN@@VGT; c@?ȓ>N)ǓmI0m~QcB:eM1:?HgnNd?3v#q9Ы~ nS+y(KW;|܂V71m@;ucN@;nny\w ~o~'Qa\-2'?/1B~o>X݅O_?X>MbxY|/Wz-Ʈޛ􍓻f5ݦkGG3˵u'`-tM{?Cv\z7y>b}`ܨǡj^J FV٣34tGQ]] @*C[O_cS Wf 3.VM5z гdHyBywUę'Pa5?Up;ֶ)Ŋv!s@qq0@cL_T30&pnzzkt|>u9p1nj]7軗uQU/ q? "v ^u^/ ~z xO_b~ku<`T0xA Vfu 'OLKJ,Y=EXN3ۀ}*ωCSϳocj{O8zur ) @h?з}";~1鵘^:Ѓ@J[4z?WZ85x`>Iw.V׻;:?2aqGY Z8DG槢mvu5Cc7x;z+ߧopoqs&kO>з6-x;^cy' N*LK5O:b>{;<| N 5&(]Le|ǖnp#U9]ȠR,#uyГW/UNQʿ]ϺAܴ5ESHya! v/.<~#r_8"pX2s$p<9|Ï8N8a8\>-?,)x~;9,pU.p=Or s÷8ó{as8p9|g8|G0^>N8a8\>-?0/v/ibZy.wW +WC=M&Wm9ScGy oS.oF%5z.[DeՕBl*lcؿJ<*B@Xi,̥a4vC-O{g}sS+zU( WEaU ~RW(NS+Bg뢤W[_)BLze>Q2 =5Nz2)coĞĤ>^ KbM)|W-<ψI TaI7ŤGWKsY1co9cxwcĦWc\+ecoņI?ӏeIӘgͽC~{6~l7EUbo^ЕJ?>7rxyO~[F`,BYsĤ/i㐥wƤ_/o 76~y*5[c=bSU)uղ)g߁-B7(A%Jd#N咱qs&ʼ#oy->%Ԉ^}Q-~pDOjWDkZF/Fw ҥ-8JψK->32޴#H&2>YB_~8%pMM O?)6o?Qem |V!B·q|{Tp 7$+Z_xi:o9<7A>ry>Ym 0g"`2B6Yg<&'5~hk, =Y-sO_%SX&ߤ—®v$I*O)<µR.oS܎_<vN2oX'r|k Zߘ]B) OW8>}+ 7RYNWin 8>JXx5_pq_߮z%9,y?|FQxy1A$w$m;l. o4vI,l\]~Vs7J;"Kf0W8~-,xiC|>?9>S6|.R>)`{\=<)Y<~<VFex-}yV> +zo9㷿8Oǣ~c*X㭩3/!_|>:x|b/|Voxqy\N=cb=&O ;߮g<=_ɟ Rz#ko[L{$ȿ%~_r?y;w~o+8P̓+*|rWM?Ƿ}񧃏J_by:(>*Vhuu|? Zsϙpcbϧm|S#+gϧ˹ǡo|O_sb!$]噷7s7+>u6j_;ds<~ 9gWp<~xvMP<~,̏xck%~9 +fJZ--~N%"m4n?Ĕ(RET)Wo~ += {i9Cy"o0wrpN^x>CX{O:m Q/Lf6$>5$x-ϧvr9|VhyCi/ 'y(,[2[8 %^*Qg_43F~y._X_rP>~ |=u/y;!t+U7a ,?'O&)xށo+ ?!+"ãO)m|3:rHG +15!wSŘ^=KV!Oyp1| @hbEC]]y}m55j&5&6rq**X&Ak9vy0_tÀ+X} z7P|62w6T&&.+,_#o uF:iu7(9/+[)sW"[\˄ZWT[PVw]:ex [V[p51 &WƦF24Dҕ!â&CQ0!]Ff]lV6қ KH**+[vsq;q6~iPY H>U .C]Z @$Ey=eMrĬRF#Pii|clUCW/"%vT 8$*@^"P0.CXAF\2ؗ̈ +e4bՎ2i̽Dr.leYqV5 T0LR(s7ʦ8ZeӋfJJ-[@cRR)kHV>vwv6k=y5 0|K0z-fu8D{ [dx5zj$h ;+b9̐ʊJ]x Ubs$/M8juz9F ,}tYrDg*PK bBcom/sun/jna/win32-x86-64/PK BB( M0(com/sun/jna/win32-x86-64/jnidispatch.dllM0{|SE?~&5A(TbԢ)4VQ,P!ŪJkmeWW]EE{b\xw癙3䤭gx~.sgf4k9/ִuA#ϫ#[WG]hzK]xK,/Ŀf̳W,yy} 9;~oi6]6m|cso38Z K5ziw~mrj[͵Mm=?qrHY_&gm~3WөM9@ ;XQjuVVg㣗Fr'1a.0z(&4v=L8`Zy-ʾ릌p) dnCoe =ꤒGz.|) LWZ/c 7-&HSIaAB_)R >- K CG CFxuvaޗ,?[YעDC0?V/ vO+\MxpS}aV { KOxѼ#zsF#U!p?S),`p} VG2ߍ؏cߨ~M}/NL[ WTJ**D9^{/uhջ@7fZa> *(LD +g?NX\| X@H#qx gZkS 0>DSK`T8A@ TX@ )rUb tPt H< ͒S ކT^SjpBcv*Fdli5ⵠ=53N7]c:=5un,lXFVJqz}o p^rr¹g,x!}TmhZҞkPkBk,E!5EOT\1~Ћ@nr C Nrض}BD ^,ɥPsk^KTUIEBGuTG |wFH_E!EHtZVF? cEs6ŬB1&B 0{ק\0"!PLdQbZ?t:u T?[%? <]W,`aMR;+ufj,3)B C3D٤r^+EMYrcmZB,'5o 4ߒ3 8f'qҷNSوm%''[`'${MH-0to7n ܻ́eds;VJȴ=[g 0ymr]1nbS ^53UN0ׯnٙlTkW薳h9.#[C:4 hh-GQQ[~1~w~Kد4@ىz%,%%`UIpkM6e_R%PGT–* 9̆گzB)P*2̤=^PWP#sybCu2Q|ёIuP=ZKm# l +y/_3Y"Ym-1?ai&ʷF65mEJ?"sQld sLA7&(εkYX/O,5yRc'hFeE,SB9G D_lplt$͐9S u%T#P|.RX(1ida#ig %S8hPӑ€ f0ǚ1*JՖP!06VBCH4>0ޔh%ThQe L4q6P*m^`&=!"M lL$*Q̃%ZLV*6 @uٲ*AD~C&,f*r?סeo4Q-nϲZCH k -`"ozGx1[]1wՁJ|t2LK1da>L%ua{DztrwIw"΢-h}hAgV8n~ n]pwk"w>蠼Sļ"$8o!l6_G}ݷJv,g72vS7B@hlD}1ZT[ؚ(c('1NcUeo1~7:Os8r "w{{W|O ~*zWo3)#B%7@vFfhE1<.\7.3>9Qgor\~ drepX /FQ6vKDKCdGvѷ8QtR@^WM [۶R, !֙~Rj+ ب]^jXBy4ϹY9Ucde}ov "wXmBKsX7|Ϋ[7ܯ_:EuP2".]E񦈥bzySpi+yTxi%KqTҠ7qmĪ*/5aOr\e, ՎZ0* 1)ɵW pTllD(o|.7MbT;mPzuw_KLaGS)%CΞ9Gp[]qf*g KLqV6u4o0v;5va3rqyL5L+bbz>115xL22i[P& {4/CTZ\X9] SlB$nJf1G;6Z?6bf옞1ho c+&e.O[l} :FEfuz" t l5҇Y#]6 L-+@|* AV! dw|:76]9$^d5j 3k,Qdڥd`bzq(Y x/ S5Hg{|WDW‹[ "&w~ }4 a s0\T徖ny`]H9j8ұgKǂ~B}@[ 54srvo!HSf0/tf-Yu@ݮ4v &]҆8a_ ]jz۩!՚8ImwtC= )OݑBʗA;R* wRYH3H)= Tjztga-hLFj[҉ZD1˜=;‹_ge[j7g| /Oԩf2ٻuRJ+Lkjx&բ:4hSͤx׫{8zKq<S&+ʩg.i uYL,\#7 ܫY]fLܝ?hIH$pq,z,45lԍmfc;l7C p `Z8ƤBRC^&It.5tKw$4P[B=\RGP%KÏ cK^&~U%;;Ml?n41FUB{;E{wtѠ&+{^.Ʒwq6.:Ӆ8e,et1rwv]tv}){ee2;!Ԡܥ^aȆe8 q$|c7~?YQ¢ Q:]rT6DI͟=lC,|0Gy: Dsjb)#ޮCeq!_5<0qḽh) j^ s;#4SAs01 L7`h(J>ARe~0ku;_ }NM𳒹 H"A@@eY5-+H:ԩ5b| |y~7K>ƁпfYoov|-uj:g}&T9 ɇ r+Pt_wM[)V:H:8o47a]?A (dw=>}A Thv&p4>dO4 |.ci1C>CDa"(nA&ֈ0º(P$*hvoHwIvQKμr)ՙq{k"ů5jk4JO! E|F>4q7caSny6D]PaW`ەq;#~϶rB/hiU|QAe0 -ʩ0Uu]R?ܤzW,#Ki]?9TjVyLO\Z~}YH5S[z m>1a](K}D`6eablD&:HJ!19;J+cJY9Rn&jבZ"&V>x?Y> [. |;{eVUT,"/XŰ0{55ac ohc !ls|JULxe5G`b(oVR~PEp"cTлBxmVRcrCa-hq ,.FWGqMjoY+BukѠ202 qIȲ׏dւq="kE f<VZ,CU4|C GH/j/<vظX \I(c"=\g2.@1LVƃzX؉o/o?غ2 (L;>L9S;f* b?%۷_Mr ZC9{WPu5(u٬#dBK6 &W JHor%_H{;ӈ${s{W%E~ ^{^x?x޵o\"_8S$H{Amh]yk&bFeWN:/-;?lȃZB6x`Ǖd7E $[`nC'. m?Jv]~vQ.*@+gAw}Wv.~Ӌybc]t.mŢ;ғKsWb+&{rUbWm؈Y "hyxȓ\$DpݏQBEA:mo 0FG{>xoDemx^\f7NxW'o#xEKP~NPF$3Nt_Y.&m="VZ|c 7,Rs:BX'z -v cF8Y L's%ƒKKoi瞰1–n6 {n 7 X L0$8c<%sFF5p_vggu8;BnL͕[<ۻam+R_~|}̴]+bجYer4S$Z!P1X_)?* o$D-6 lgv D0+KtIe~P+6V>,YBM*3xZ62f0(jHpr]rA5J]Aup\lsSw \{7aѼ, šssJ.`Ne^F_^*x0;l ?Q"PpgM_F@%= 'bW%~-t FFXR _^9y ry("KNwË~U-a?Ml>sn>~`i0NÆM4*(GC]Ntpj(&ԙR S)%|@i+ݵ?g\(9w\*t_:M[)C\ۡEgCwc\V䣊xopt؛ مOp[}ao:_?M= 4^O]ka"b^!.7@e]D$:Y9ϕ*[~ ި=#P.Y6*$U6*lNl 0wAss/q뽂ĽFdRaRq`60;L_ImAH~^ÉA{?G%׌K[!w?Mo m*_!XO#k$kA7%  9ؚ]K0]#Uq]+[Uz5,f2#z]ɳgj]xv 􏤱wTa"ߪ>!&^wOV'T݌G}V6> 6"m Cw }FV wA~jmlFf!巿&)뤔uuRbl{lyB;6Iٓ\ٍFFF;P٘lg)IE{ؔ-8nbYѬ,Fl|;q|d_*88Q1IIacd>bmăoup.DmKW%s,z]6:DĊ[L=.h [x3f)LNiL3!_n!t;_} j+Gf?@:׎"/nϣ\;2/{[mOʹS*-"?F-}鈌ېZ6596:$$0 u59y%''''N:erDjQ5vF&&U?fdHAL9dg`!UwHHHHHcI٪HH/&3)\DZy्ֳEFbNJO7l=1̦>8U24{R[U~pTi[m40߈s*]{+ s_xm" #EzroJ-鿗UCqIÑ&xsb-Vŷ#Rf ${Lu[5۞Q߀oP5[AƟEbI"T> pf\~)Rt*R.m|*vf/FsHYfgl FRAEAHbcF:ƍ.+-m΂Y뉍"FFdPbt9.O0_!T?NZ(w1p#3U/ZG!n(ŊHc@$tU짋QƠhviB rrE咍-FReせuZ5bfYs%?KI\^av?"!ݏ~45ݏrFz÷ӿp3csVx+wV{BhmA[i!P4EYx$RnmQ`_+ٛʮ};L>xi_'SVͬF[T/@jR*AGъt)Hs p0|N_4^^&X߄NMPNIײ@rxev"CA:2GoћPo̙sq: ƃ0wp_J[DEr !ISw-L"6+ ;OhsZY[:T:Q={JoDc0Sl@Q~%}|*ET"Oa_`)yTKX5p2d=KsB?e_aX^(J6-$kUusl\1M.MaF(LK!BB!6MW]ԄGL HO`> P[\Ó+ˬ\"쌉rlɥɘTxx>M|qcai6:-r^ح<3v@ jUܑU$qH݈E6paSۂ&_wÿmC{Eg~&U;Bոy˜ V%m<mZ2rr ۃO'K~m$x*1ɏ=QOg@ ' tL*3yJ57N>|m4MLFHfNk!诱mRS(cdƾbxk̔#t˱&gB}KW0o爦So߱+5`Bj zBBo$*qq^Ʃ)J>eqtieO'߀ w 1z 6~׀T>oq$4v+kNd X;X g`hahnhP!~,0z0VFg0Gn܎0VT3VHF}IďpEF>1'{N2@ ! F$Xc6OT1VIFD(Η\VҞP`p+!\-M`vچ'W^  91aVFle)^vݣ˾wv ~g]oT"vQDޣ\n;cd??Phe?/!Uݫ%~s?a:$RIe:bgg,_U؟uEV$2OYeZ#bѷ7&phvJ`3fI^3(7mb[C}[;[-*rp[8[9[%ό_!TYt "*]eUNc#ίb4&$1ieqVgNSٟl# $bJFߧᯜxL_p LIO`}%oW"'VJ,7aZ"܈[4*Ɠ`rBzf};>Ζco}4[}q%u_B_Zj,TQi~U {naԾIVKNMR5=]k߯Eb{=vξ9yR'#˯RvD}dW Q}YD}RWDYE-ࢊHĢd"TrXF}2j\o^Zk,?p 75F~5~9lGRG^ӭz]ccZRJ^YDFz"҈^zI-ZE-Ai!LC8jQCM5T'W۰ثWS&*O]M9a~fcRZzu\mc5ݯV-ukyQgډz`DPEEVpQ˹RۂRZj{j D,ZZ2 6YR52z5~g_ٯfAC5ZK ;*RVgk;Q;Io Mժ\ArQk\jisfJX-U~RFQRQ/Dm_GĚ*ˢ/oqYhgǣD'jc)0TݜE,uoDߤ:[ju,-8fVK}3j\Rdo,쿹܆#&yo`hgRwkXirzjˌ>RQ\f#"6Ɉnr<`[2KݖoڱVK|%"R,˳u24چ#7ռٷu2cR_AK]PݭTX=oW}џ"CWڈhD79.·`#PZj¤Pj ;ﳳKؗK?gRRG6.R˖X/$&CYDNF"VgD79-≲k'8TۑRlyב(G%eK%·d WdG+j źQd`XGpz$GH9?$< s %)gJ)s)}ҧ@$7 C! %6%W ++xKBf ?\b'jj)e5/! _BV+ W䝗@rlq q/' ! d@Bu^+H6,F?,[L]'G09! Ȗ>iܖ]CAVȭ ?vB_& s/#Ȑ )! YE /Q9JB!2@%ybKvR&[%7+62 d r"ܵH@>$dY!!?V4F@A>B}@*NMrIB] ÒG!BS@GR) s)7K f ozwE a;)"^KxQBnQ HR0r:Iy*A6^ly%y%UBnU JG3z[!<!v2pq1JEB>f@n4;|UJK*![V y1@z2 $9g;)?!)?RK.!v  7BLR ȱv/@ȣdP ;$K ȉ"d(ܶ$]OBS Ik1r(\E/ IF)!;N )/G6\]$ ?w3%@ r ϑv$Ba%՗$r_Bd@~KeE6$eT. y@< !g9V=2ƤX8 K% e u!/|B~|B޿#!ˈ&rZ!Q~A>r S|ٿ_JȠ gjVȿdp6[!;+HB)x_p~^p=<uiq܋ˉNN;up!.@6iiP|A=, ҠJ=aiPKv4DžC=, mn ė}2Uq䏛 /v4__Gx$:<0_G'| _Gg#Gq#zD[@x`?=>i37H3y"zx=<xZNcx z,䏕EUŷZ`qe)alleXdf-h0WZ=٩_iZr U/|.Bҭ_hUcCdW0+ҢG`g4hFiJ=L~"_'aΰMtx8wIhq ?ʕ>0)n?淤 }vU_{vwA%Uxe5qX[n?6~tt\ְ{ `x:jWyVkҟ,TDBw`<;?LCxzV ̙{~/jPuUlUE݌E\nT&( %6&EYwƁNVxo%y D),z!M Ke-fSp.XAHJ$\>gYB6(QDž7l vءzDz!xE LVI(R;\VM!ǎbЖbخP.D&р>NCPvp67CjjSY wLڍ4}(q Ĕ($dViXb谼݀o=pm*jzֳHyS3soWwq+jфBK3i&NN­jzlX (fS#Up*©T rob(Y@Q&)Mw\{1(ZߡqhѪiqW]khMi61e-V GlEWV4ZBg#ZUABPuih{鈲Z[š^3vv:nzW+cq(d ˛3Ȗ/|X[K>RV YRxwZ3mZާC}c#Re]zF /uf]sj '>:1ׯΞrv;&h>}}ЂNޤAaQC7@*5ݠ㪙3:2p*ާse&C-nf9QT; 3Zާb؎F'"r˦f=M%rmBMn`/#MYa_>5\nxtG=^l1Cf?|7;b~"-̨͢`FEL%@ ]բ6&d 4,<M_a :8f#piXBj,[B7,LQNFy(3P[5*]&9V>RRc51a4W(N;uFh!ݸ7A;rspy'5ek/vdd*M >g/Ot'6bv +Qsi v$QR<Ϫ? R *SKB~<;BK6Mdbv2f~i߱-hڸ=7Uk2-/)EM;3teF{'^8~|RleaV0F8gڟ9M3%EcHTɣP0q84:l%  \:Eyb%<-Y>(~@ާQ-*;Ur+M'ߌJԇkA&;4ʿg*)RQN(L!h!/*+gF[=9)t*"d>4<ri.<.*sS6(7~ D$q mÃ*8FQE%R"Pxt׉b%vfEnkqp(:ΒŠvz$M7b{r0!Quǫ_+|T\3dǩ D ~1` (!LPel ~ $KHE5/3aFO!SE| "տŬY?:43VR&;HpvM7o–ΪazqD|"^\; );[T#bCDUv>|053FÎoP ZS87L+E JB$&vؽ7g8M$Iq?&ïO /2mVLZb8i~;~&b®(#Q@ Zt{#qU,slH38!*Y(ʺ_߇5碓Z]8c}Xp^\yEKmy ߺMn6S+PHk,FX}6)/L& wR8^f1Rc* PDEwV-Q7!j.9j_R^dOS=8*IΊq;pdXk?<#D%F6mRH;Zܷp 6a0qf@3M834n nCzӱƌ7n,M¦=xOIM|c2dII{6lgU?f* $꒦/a&:ݒ$6R%j L!!h?wwp.`Iar&b> Ha ;^%%JLz`Cc(pajs}ъ?l PۨP{\R;٥(*&W=ˏBoZ9~S"J886Kmq4VfrgZ:Pc_dHGiYpl.1}Kإ5D^P&FҾOxNscrMF|a("*#B]Gh]Gؖas3"t!5c͡}].LlgLux2mG$#Q2+xBz^\[I%<è.l61[u&VQ0e}D8ХCu(ppE^3ʍ}Q :NJ(4k8ϑ#Sa:Xh^X臚H_W29ȇo>V\aƕ3嬀 lc?/ܰ}7 tTk{̈][E3B0 )aP~.DWvzO^ȑgU+{pe'*}uLTkPZӗjb#6nr [5 ԛqNdޚǟp_ _Ov}Q7˭cKNt\t!kZ#Zlo:'&ޅ78ay)GP3JGƐԼV2#[a%X0>y ש7TP#b>-ZGF0i.+ (OI4 Cn,>8O2DZY}*TCX 8PK.!pȸz~588d omD@oi6T^©\^r'on_=?@{^: $Pn CćKQ8, L!E#2K .9d[Sx#$hLSmOrSܛ⮲xOE)xtZɆo Bߐ g0vk!1V(?b <4ᾑi1柨y ej8q :[Q]˯NZ/wGyoԟm=NݳxRߟDգUel6QAp}Ud`GXG 25&\1v7]ףwD#'k_xiSLO.-ƞCO. ;EiEiUk8/oqv|;&(pKv"(9 в(gU)13|OH.*Yx %HWV7^Ȉ! xIQY Y㕢K UHj0`n ŽK <;z|kVJ{BwNZ0'nb룇U˹"[, ߱bkVO7yQYj{"Yay5˹@~ ^'G}f6LQ֘X)k2)n(j oT)iC22ZV9e!6΋a^lJ>X> Anvh QLM[Y,p0*@ ge ǁF@iw,$;1â \dF?x<R>h+ٕ\P-Aˮ[A?i  [ƎN- n2@fH%b2cČV0aU\jv7*&61fX֒Hz2 w0ŹnG(Ny"v =J*#sg_hVqux,Dzr\df詄)PQKB:J" E?c4~EMQ,/>#/r \ x0h% Kjaa/5mcQ_iڰ{߽_h/ jڝ9=ib%y0!3tz!>oDMýk WDOo}?%\$ ~_Uz75%5؍ЍfĢB{0ix\}~ GƦ^/h9\tAܡ| %Jv 6Cw-o# [g߳9ϵxA 54Ɔ5'l_Ŋٖ7)7.Tx#V'`k, X謤e[Ȑu8 $(=b/fu;vU}yɈJ}yuNUژ Hj)<4* 't'"${J4>B&X.#V=GMS =ӂԡ⩯/b@Nt>d;&@0'6P[wF= HtXm C<0ICޜpɥi"7лNo-X;*Kw9xMʽ/~=S{+cI WCP?\6\. A[SDA{S\3'Oݕh]Nֽ^mi$!Ŕ]ZNvU~GԙV(U[t{KF8䬱Xbp j~~K%X3Va-kT!X>ZͨU`5x!|9s_*k}I@ʂ ޺(^h~wF>SB0Wh9Gt>`VJ!{Eh$Ge+.|ųo]ko}'/|gL}"cp3lUYgGTyrFW\EA(:rj-PL P D)S&ėLlޞ VL[BT̗987sPd+Sbv3-*t B*!ϖO%p BPP-X 44HXBd+ᓍRv ^ҊrLV'x2Ws娇>dh3^^ WY:z,%kYӯ$bـ8; Dve_Շ%ؠ?ObX;`M'n_EN *+B‚xW@_UWiɌز)[ai.oS7. 5>L`P$?=cS7`Ф&y~O^˃0y< `/zm V ͚Q|?x3x<ڏ% t(p+Mp w9*0>wü:_2)֙ci&}7vY$hWuH"o_^o :Qoy. U pzn75_'eƳu:="ZA2+3_٫t@?V~< 0p<Պdw*LF)yN`g"-+DwIӳnKLkh/%1||rbk#z&3DS/牾B&r5WD_>Aq oujoQBUn%q%,iZ E2o}._7sub((h8]mh(ů|K>-mwbɊY#ط~:#5 s_+8W`& lre-Z+yجo]mUm6_\5gu~ߗE466 I뉼QsN¹sE QqS ;OGY ĩq?9xafLJ㾢qP? 1GZw폨+$uv T5)5;"CB*K,T$TN Md-qw!Ỉ沯ƅ|cx.h"e  Mӹ,߾kSGdzƓ@ w@5 A֌jszk4`+ O!cS5I侟=L%~{8wĻ%jJ F-cu/e ]xp wɾ//Q̹BW2=13x=܅cJf- |}* a-n 'r5M%\ e?jh ߟ>V5k/5h?+Vv>[*"{bV %_AdM)AaFc d~Z[(מs"`O0(q0S=q[۽`jmoq\,5\g+r_Xێyy@nW^~H |hT\^p]3K#$·QbDg{ȷZ~wsq9B9 mX]C̦LyLyw/~Xc<=$1hbU@bȫƪJtǣHUir4TC(4*45Bx#dnxф/3Y|9U0P2/h@k*ec^16.yVP[pMGGʈQhmBt/" HD%#_%BI793=@ '4ה5sxc կTlkV_Y4f ,P]qAS汑{R˙&<+_F:Kuzjbwִ"Gy aS%|`W^1bp4 1N`5%Mw.6Zi}Uj3Id%'{:Sj3=:@/9/ D%#m%,;nmN%c_N)k;}d25j.LCӐXfIOiZlHk܏R&VLF3"q/`$52lwf]TGy$kȫ`tUsѽ/iT~FiE" XyR6hҝ+k-~r8}Ա< Y1`2-Ь11usY'qݝvPsZ e >.Ϫr vx[_ lS6wvc-PV XdE$j|Fq](h Vo38WOc0/a~֑ݩع,nݐ΂,N/nm\}8I 9-ۓ -h5 fy/ ;1d p _ 3uD~GG6W6X^7n3%&S7`/',XHm&Xu;v(L9 M5 ^=0 йj{Cِ:+ܫ3^U¹kXe* s2, &M̷=b=]=_{zwvaXQ, f' VioBg'4>sa yӓ=jOrws`6%賆 -gPCz4A ߂N<ؐ[}]w[P~) GUN A >sQ D*_qL'{rd$<"[n=P+x *DχwɉL+NW,7]K ˍ͠~;cR` Kϫ6Uwx[}zy\(X wx,'h8KqR[C-${YcZd-jeGIP6g>,\%7BïthNNnOMvd  ?C?ًa\:Q1i`dgii{9L$cO]q9ktY&@i yzlN_ ׏h:h{?fj:Z|`ezFB ~fM)jxKk3hԵhS"Q= NJJXe:*5YUGlyE ԙ|˵]MMm nN_CcxlTͰv IGQ moJYfuԵͨ i3:c Mj3mFݢͰV+ƴO#dh3N`ڌеւЧ6Y0e5.cp!*CeD9M[F)sHٗ^-~-y%[y61ٗ0 ِ,%iCsO(VV >xy6181Fmc3D:\meyGt9'T'=#Y/}f_RJ+źEOdeİY{2E>?8}]2a&bnlI;Ẅ́:?Ùv}/(ħ&$(rgvUS7^NLlᝍ9fB;㣩'qv,une0޹ qƙ8wfd8tZg04jqN`!BrvZ> z 3f͜ag ?ƙ*1ד,3Ey|{bi7!KdE`,b2܇yj؈e>,3o*ٶV31-=/1m>4&2%MY1TOΠcgB':#-%0^pf# E<ʙyfTU3'j-i6"3~O%.s>o.0OkMր_4O(%Z`O3G̞=ʛd2V2~K{t.`${&-?ižɶ-[>ytۮ2cZ3j v5g uW/ B*knf'=}M+J?`n3ڈg@= -zegEs{V_mC+;FD|53$OvcmWzRmxJ̳ZxT٨K\am6؉̼1T[oTsȜIj04'Ĺ,.b-7`$|/ayBrIR eS[P{(;Ş0TwQ`t˾}C[ sV33<~ODFxæxml]-ȪjN ˱J-^HhU͎l&ח}̂\%Ws^i͏@lGftnd+jұ+'uN3` }oosiϣ3G0m8PqoY@f6U;~6`ç1v"yynr4N/]p5zx~Sʷ;\E W#-N/enyC^OlcĄ}*{ƻJ6lWL"g`gGVPgs1n3mh92O<(¬32m@I۝o̶ x|ITo̺?8pc ub&,u)YHa|ewLxn31—Y_ZA=ޱm* ֒:+8a;nZz: sFYДĖc%~hK4:Wk yKv#ך[bIЬ'8'&jN4HЭ{*R w-\{3Zb Co3,Gau1GV-uxBc5cND5!4-t%TRWG;8S0q݈ǹW}?ax!UUo{b2f/Z2L/Ȧ7ʋXYC EO-a`gP(n/.H|vC£oɧόn2<5䅿6t|~k9vsI$!y/Cw͝=4OC:]J+yAң)b?w{=A3+`rA~ޜsO<&a/'xywA3~w?Szcש(M .7T]f\t39^ P<{A3vy |q㪹<|Z9'GNN9qz|oGOyP'z++cVxs߉C/w{$0BXgKN3Nt`GwVP0V4/CCƠs#FFPHpZ*rR_fXѭ٭t-+=zޣɹ5g ӿɹK#zߘ>y 6d.4.xt M)N".f葶>H[_$(~~ՁDy,9u<ѻ6 YGaiG*KQΉA=Lz;"t8ڡ$7\jx*DW25<,3mCT\eJO28ʴb)Y"*S|1TwlCTEQ9]GRZ䭱3h>8-#EGR̳ѹ:)q'`Lr)pb,:{ O _,~LT&p[؇-6](.%$p6bT͔ 񜚿!'rb2B g$l6rMn0,?kL/PXTb<1@nOg5k4úFM[ 亵[T,Ct*oɤAty>춊[@d [ll(换[7OO&d٭llD|ՌjnPuJc[׎:ǞJlaa;p^<8c\oJ֌Bui^QI692YVg 2:Ы#VP*xJ0Ɵ$ BnMP?@rs CfQDdhS )pӎܧMD*Iu9 I_ѣ>7HbHz wڪTNx 19Z4()eC92_B{8q+IfBSBY,u /T= ZA.=hͅ4B>Hgғp1$!S;,'Cg(DIEtڪMyެ:SLy'l䠲W#º,,O :J{(c%nWLa ::6>-ˡxA^>U#bz1BU0Ȋ -4ZjiqWhZ(pԲ+yF׾{p:ȹ97%˔hA@л#tlJ nTv,:0C0agP!8 ;iQۯKeSkhnʉFEA6 d=>xAnQӂ4ђ`tAnE@P%;%e]EP(#')G CM`ȖN " fz$B6gt`e^X[ī{gFv0rzە~_H"Uv¶&qΏk?$-7?ہ40$YO@%^"*Zd ~oͽbQ|z՝ݭy. F*Sv"AaV@*mH`Doccum (mabp Vqg1DQBsӈs >7n{wD&fmץg ɮ}8(}k'؇هvvKA/T#n ĺ)$oƮ *cQM΀ TJ{p-5cpz4lu3?ǥT$ }Jb4G>yxL>w-HRKGwW;$uЄ͌GՅ^`}6,RtNV>2vGp[}:;T5WBU>w,6<#H- Ȧ@oCΎ B- 59TTw>#&1@ VKSaE%Ѹu>P_O#=d.Žo'wlۇqr넵_@x~/j΂.~DN-9:`3 gZb)b /ytUURd4€-U^ 4ZZZGUa$LmIƏ̅ޘ .Ï 2ZG$Ѕ(:{2smy0o?\p£KޖT29*d$n@@XMB_KRoKł)$% e'9䃬KzXJ+A`*O<_0à2/y Z'tzS=A7IVKGQT:9B?'շ!Dau>LV^PhM b`r5ư `zax7*u`hOF叁zKJZ?@~ou1x$m>F4@R8d$ K6Irs1)uT6@6K8>~lqL#A 7#–<:& mP{i|z4m):0iOۏۃa* T ư. zuc8Ռ 蓍QEĚ\꧍y$QWH#Y?ŷ7,cgcx:goJnMaoϲco+ uuf]}y |+܇v.;-$rb5rP?Wg#tU&lG9SP>TqѴNV C:J?JTވ-iī$niѳOUv]N_Cy>67ђۥ(kkٿ}:\jv/;"yA15,Im15O isy.L_BJ;MFC}mB'c9;_XNYD{"Q~M>)^hQԕ0_ Sޢv>7+шtZѕn܈^ߺӒm-Ĥ Yps5Y ұUuv}c= / -]u~X>K, Pi`e[˭je2ШWݚ#U<@>6 Ҝ A9->9K0zjN5Mܔ UBLa-ik}-1)_I7g si)ȸnH lg8F;lq\.ײwc?JbUrvPl{+"UE"q;%alɴ,9/w-=?W.Zv=(^=%-{{9eJIj w^=3qoc.=Q9͚}FW_t! >7` H]DÜ(ֹ`4޻FeyM怣3?˨iҔuxfŏ#DVIQ$2 VPx2Wn^K߹ęiĉFXyI#'nXQ^I!7isH(w1H 0i@HJ;b<fV15:7:_cP,A<PM-++]rH e)NR[I=:,ܟtXXa}˃"mD16jZL@W|<HpAn7rO:mO,nVILp8kJgC+-s)2צ4̣RwB/Mm=Eۆlx?qTM zKr|0/\< Ph-1J.硐rr": b@ Dgems8pܛ!J+Z:SO'AfyD L;Nՙ'FnuGn.IE&:oŢ }b#iC)q.z"̼AX1/=M^:Kx}GN."lnmRtl|Z%Z&CY wT' M.p??(8ܿPx|9RuIȜBӇK2/.̛A:p|#zYАMoB?bR2"JmVWYXR;򹢰 ami?EcWNKF5ܼ,&N 8/` rBO2ʭRoT`f*;z֒I›/mC2S K5,q &,HLj+K͏oM$`)9΂|u[=bxBt*tz F_L~*/kpw/^C|g5)ICLDziUrϥ#gGI=O:Ee`/w+ $M( q=6|PE6n@ɟ[N\(->#~RV ɥJi?gy7? ua\,tʸQ4<_z RM $nQ-zpB޲پ/JstVAxCt79$mG1f!nB5UZ4W>)V-2h;4(5QwD^b^A~o^~}VLUGi"C2d';h*0J_+ivmޚWDRe '$#VU\-qGC'IȩO7j6vXm eg` ͼzV7+E<'(\$mV;`5.Mwq%l;]cM1MvH$k6aAKH\2C{ۭ0A4H·Ywi fJ]^3u@(ܱ ;=ae*ѪW֭_%ۓ((v-|^H_ +1|! $<B; ZA_Rw4m}]_s+gJmTH־i 05$; V@ˡN/UB, џ SboI4s-n,u/_Bz‰"09}]qfühfNƒzdN/9w<9,WLYR؃=vmj J::?T|m`{Q7ifJseC |%L$a8wV/təR{nܼ5[,V%)IM@3-q6u1j4G:~%•e6m+ xkjřuxuޟ{[xnuv+^>#^oKxv ^o;E#噞؜'~^c0^_U)ٌ}횴j}Cvp;"v#j{ g}ݩbcM:v& voX0w}GdѡWqj()O X )'+mj!仏}ק5MA*CAy-0 7h,J1c+NWM, .mHNg(8? ~"v(D{L\~-{r+>RP g5aP߇e2`y_`YzPS{+7RSidkD~zYnNjx*6˟(hBPڼ.9@>6 #݂߰f2#h-_ |񆟑y>`?_C)W0NꞀ&ƿ׽OҭKZ.d x dUZm8{u#eDf= 1](@#N*&:d|pwEjWwYAD+_!2Zʢ9Um.y6zY7f;2]ϥBP-3H~)Z J% d]z6){rFL"Tp>B)0+ v6ݞ7рS'&g̫]> kh : ׺Sw ـ6hYL3rLK<q= Exԁ;/ײ{7YL? K}h߄Svl#Y[3(Ϝǭ"4gDL!tA po\~C T~ kXwqڌHiY_贪%; [Ji_\^6eUss5͇[w+0GʾE^6l~5Ѡ- ;Rfjv|i^wGXbmPi9 BԻi)o (҄R4m_n:3m}gXff0jy2;g/2LqyLs46J;Ne0:=0]*m8Tg$Gc؀KDRqn[!3e 'k<*`[\ _ɋ|[j˷ xenʏ0^-N1Ѥ/s۔ W&<Cr2Uq7qֶ\{l٣ {%һWCIw@N㪋h+qՋ@F3:ZcB~ vi)fm+J)R(m'07_< 4'ãKu=t-J2ni"+;m$V%CڋGf2Qm@P ʔ" L݇WjԠ'Wdt)z[|6]js;RhGoײ,U7n MQ/8K|&4֡g&M#jh V "3b'1a PNRm/%%F~Ǧ[x_P위EE_Pt*+ZfC̓5#֡X <;ר8nPEحe? ◼wa-C-_^ZXH3S@WGosF;1swsMxzM.Fs²[?Ekr."bdN} 1al%K_p6?LX?Ns ʆ9+bv؁\>,C+܍=v~:< [PJr'"%9T2jMJёD.0SUPߋ86TZ8b;M0x@>- ++_~ĆۿPC& M3{n!Y:^ &}2V#QXR?4Dj1 8S8x, >d%%F=2ڱBfÄ|* I#C;DgX6Wo]&E3m04_!L>~5Q#7KGa/UK@8w RЃi~,h,X9&)WJ ={حy3Rv= .Ȥ~&yᕘd|]oh6SYz\Ʇx簦E5QmB7| bk/; #Yi?Q 7ad? fB0. sB %f޸;YpOïB0ܳG_΃VTyxU'JBUŨ4Z):=saB_}Wf|ԸOvy Mv74mp&"9+a=i-@e-5M,HC!.4iz3fDf/C'm遏`T[ zzW iZxu6 S]-igJWS$Zhs ]?Hdgd|$҆xe^օg[!| wYK4* Fk;rkB$Fh0ux۹Km.vVBVT!)N]̰? |i~ lPV-VG;Sv_ x$Z#RT(U*Ԕ(n4X}`S1,\  5ӥ1/cj>>߆&i&Q*z.\nN z j|/n1pϤ?bP k$G_AQO3*mߨiJ(`gզVj!TJmKy]>a,{S?{9a6]O 5-q@?GW :vz@.EEwR4ГS$1 u{?an?RDw:Srt1wrlJEYc{drd᲋uo?S=#g0c/Mh%"4$UJL/+5 @5=疋Mm~wq?*Sv;PuDoOؒ#Plp13`k RbXJ&I -ul'z:Y Oϝ*U@hoKdcxEɶ_nudqUW5 V5ĊdA\)ԮN)^GjJ!(C%} ҔV^U(yUl?H !FM&$ 2@x^c喽}+/667>N@Ʒ?6sԉۆ./w禽PLb>٣nmrݺgnz U6y҄ꎔ|]7:?sѠMv1qJlMV/TpsڑנQKI8[=@D~'~t1Cw5oh-ïuS-˼ޭ\l55&|#8װ7@W[ЀGϳ3h,ി4[PT$) K*Da;r.~3Fʹ)&bFZ_kD$:#S`Ѫ)ZoZ䤳mJyʴ1Fx? mǩO&6[% gho:(/ S9/cOZqa=ckZdVnec$Htf1 #X."{\uOӷ bP&yXLhA0sgI"4<8yv٦f@5D }˺p2efn $0hWE.Э,K RO|UQ PSGK Ky+2\b #W5}DqW~e)-U} ŷ$*ut#3R+M/D]l`? Z_^߀/Qx5{B))LmO؍Ih*н6†O jU>}haUynVM7~H*nVSMwԉ`_[l+H8}wAQ&f.I+c39>O*y,K$7q<3~ZͪO0.QeUO֬:IK8@a'Ȱ-s;,& 䆉4!BDt@=lƿUÛtU7V*\OY5"1n=#ahvhdeǭ! Sl:e:>xN [%3 z3 ImJaؕIt.9. _{&cFkGzO`?l帑.*̟9 F ]SʛjG{zbA<&)gc#ZޞwJ1Q%)a$P[R Vv.\2^X̪XK5Ox#ዟoa-er9XULVUY{YBTIdnLl2t6^6Kvp@3CdKOxИD'#vŽV<} e>{U]jlѪ+Bc+.C}T)|YpUqРwG~~|Cb>TDE=j)4|-4;#8_]JqeQ+a]Ӣv5iDM#uh9D6˱mX]S'3.!ڑׅa/&faĺ<!r|6DOeϷ5t[x+~d6z<5JddJx&sl!CqL*FET5V`kfv"]վq˨ $\/UZ<^Oo0f[l?ꓵHmE]|춟m M ϸy6jOGDC)v vf#hg^m$mʁ'lid O3İfFz|;@LMҲ K8k!ea0b;D/R#.i>ŧztTV߇?V=tTa ,5(m=fIhJ+"a RQ&lYk3e0O~g)Z?10[.9S_E < Ӳo0.UEHZSuE%MCOYC2дv8frc0TU9ί* b;i0I(e`>7avGZHQ?GF V?-j Cs=n C)iia, /S~O$+JC}8@;>Nol4gNd}ۘCtoޛS(^*?t QիHXha!dr];@~xjq\t8\sɻܬʆXa l= ^eoPА:>OrYP|!:]30UğPX`t3Y2m~mQ·os7[<>@,VdoJ йFMx]hI!L07> 2}mX*j |NDħt1ZP^1<.|,C>,g^T^'[m=4ƯIKxNJ,qؽGY<-.pr;Y>F/pٴc^rC~/GsJ]loh&\UBYt,w*;vBC#TWPޕTPߓ-6UD\Fn>B\WC6ٕ8OEB. vslM6((U!n@h@ZH?X;yV{f>&B4Ág0:c9IZ;',p߷.T Al6ܲz?HW. siʖ&|y폏SsR(o)G/P{"<7R=+;[264&fTݓQ_ ?-JJS;]9H>Tv{FD^JAy @G^bI(=h>V^X/"_Rs؂$b4Q]^-G*ܧ w7jk8shS]uB;(xs:PJS3c?Df,V"d šV-{c,g!@4W$w D]ViBR4 R} 9y~Wf+s$]Nmhޛ6QX&/q|)&Qpt6nHXL hsmD$!&tn(KMsmuѧl:#sdQ  aQP 7v۝N 7} T׭SUNmNJӋBlS AUE{ÒͪnWI`Q=" WzBUL$<[-Q]fyzθt.(̰}tH5Ui$XƩM< 0TjA!=`vl< } L,?X (r3 Q\u]jLLs@͡`.HglM;5*l6\ WuǸkP+nOoJ Z ud q;$v Twx%L ?W BSt5[͞.肴Shwcn3O< .7jAP &a mc5xKIf)A)N!T/؄ "DVO\RsuC%%*(n=nPcpsoo޳SmOE^br17|lXtEeEEO˄G=xiϥ7-:Qs;A~fiu4%ȣUz饺:|Iyepߏ/.H.{{E*&3o_C%09jsR:B|0 oODFխ(lr+mdNLFǾgM 8׳^n <}ϢO5_WMi8,K,E'' g VSHyt ÀWVe3jc'wJ'wfT\,b߆SD #L)#ܻ!A,uiRޱjgwMPt@RP; )ܙܑH IA{ԯ36OGGOI6A&|ZzA`PPxa35Co>* eWA}3X9ky΃ʁ}P`2>fQDn&įG+ay1%| )v,r`o`cC뀣/~oQu{L;aY /#9ٳǮpB+ k y-Lޣ#[9&btT 6iJe_y#VW:ɮHʝ*w Z' i- orrd{;Bb\%.puGYL@Y@k//*W;5jd-c!L4{ P*Lc%pp;X<<j/{Ww3>M0G_=.xϠ[_eeEZXwrA0Q}OFI|Q_<՝r(h*f?\lmUQUy.U;#QufVW{6Եje_n&Sy,y<2ǐ{Z AxZ6gmroB`LyQ!{J^P>m 7PTf,w.D ƴTL1B#0c(7`P[yңcAh? Rk|O5hŘn{@_t65qzNH]=[W󦳮n=xBܓsjޝ .+g$+^9W=~UNOZԯƮWH 04lJ'<;է TsV;ԢkWw 7UR+2}3}z++HWH0 Y6#E2tLȱnD5Mn/7%Z/ӿ. {ˁ0/DѬ<}N(MC?c͸`U魞zn Of5.E-F 7٢iFYD9=d_(1XP-\07p &q Xa@I:Y/OfAi'j;"cr2}t>lb Soì BSS_dZٿ7@B&otO,Tq[H &Wv :y:fw [Iƒ0J/׋1 imPQ2yb &[) !AvJꛮ/gpF ?(c/t[3z&-?@`X(*|ؤad.fTc܋1_c,`Ͷx2> cr24ج^ JxOWOA٢<ܼB:qVY?ϴIҪ۵JUZՌm&iAO leziXU9]ސjyѼsm>^O 19 jԽu?lН¯Xz5 @z'xVsZc:|&' Aޗxr'TS!.~ǺK woI(Iۛp yn} ݧDuGpE>x^=9ײ$K*Er1 JN!cC_]w8pb>.{*TaoY7%z][6Lک_|/ׄ4`( @qʷ#>$Ox8x=JaDJe%3.#?*U|//,M'KSyN5Rd(&ZϷ)6 K4Kru6S r(Oq dGNFgbÌ-a[l5%w/yGW(Q'ӭkRE:M~jN[U9zgGn-\ ֵtBG;O/Wƣ^>zJHѫ : wة`TXwLL7D8 Ϟ D|7U A _uޏՆϯBGkq 7OY&&?f'*!t_"s8|=pWEYm`FhNY8@'~t 2,sB{ m>uW* ʗS!#5V=x6 S0|z"SP^iQ1ekp_{K݊bDDQhW}WgDf[z俨GXki9E]N;(6EL&< O< ŋ!4=|Nk@3 \ v.ρpP3QŔȎF3*-ALz(WoA9C R;*{zJ==oŃohEJY Zn%8j؉i,{س9H"|=P˨msCR"?PK\ۄ2}H5(@Ea cNmS?;M-&30-Wvw|m.%it'!Kjr.I2-qOHi;@*,9Trt TxzB+iQtvf9RCԼՄ9xW@l0JmRxn=jbt6 x=UoBfX%bZ *('dmmjI㽼5bxNiq>m Um@An{6O>05cz28;tLjW~A"$SnmZ#n]pJTf\Cz5z^PF0"ޮ`Bޮŭa^P-8|"m!);zyHŭBkz8Dvo,^B"ġo)9j-/YQ`8Ifjih*JLIORվIX%J1CI2֎I${YVO5Jt:WCco@H_VѴpm_Ezv}pioĭ5XkH[,@nK/Cf/anE;L}Np#! ;*O]$fZ%wBL/v 97F;ElχI[U: [hk^`ʽHjr.W2ns{C vp(3x yYL ɪv@š`gTX7ɥ(M;=-%SkhNvJ(QW;F +;p^ˆl?kegT4"Y-^\^t^b7E9,:@[/apq~Cq]N{2#3*Aҩ@䥹W+Ra XmJ8 Tc T7>!  cox&Ei<{,\R`*CgBKQLnaBur}aɲ"w 2{`W|n. sGRa jEO < > :%e]vn"Ga<^I' f$~xgwojeNB0ڲ'0!~ YLxh,پ@F&LIaq-A,CDw~p@xw%la>Avc/)L:y0m&eX[oL@= MgWx= zrWUyt@gE)2dNX!|Lv؁9KotwKm9#D5pϱx[Y uOɵ5RقhV0O3^3,оNfCWLGSm>]<}Gτ351,/xG׫H_0Q Czz7Uo=1RS0_9v[Ql1֪aγ;K ?7W >J9{5yv6^V0j Ԩ}^_xkI:-tG[$ iOwi:Ƨ7KڐۧARƛڸi&'xxT >KY:tPi[Hm+BNNQ fJ/#,Q1m< {6"XX. B_`3BF6V@K4C=ȱ0Y R9_ m޿M7ʭypI;[ߣi`:9[/mUt jyi\4Q=þKQxic6_SjWL'lnv Mj _`lƯL{Vo4WγBmYr->Mu.aǶe0I0qV HV* ?>;ܢVx: M)rs PYx1V37MǬkHVY@-Ty FyMP+ VN8r(Yl%/ $1 YOږtľ нl0/Œ<.,">1$=g[wtfrx  /!զo=~N= ;4SGJN=Li-]56Pr\[9=Tc2 k86wv(nӑخhֱ 1T}dGy "g_,Q$?>_ly-pʫRy)Z -o,\Ⱦ}# *CdTCh:ENa8$aKYw ~̾qO[nfm}}#?'ƾ-yM%g(r'׳oǓ.D鼫]}<}Os Oc u2zʿ D=hz|.b-|3B)6:ͤgQs#y #$7O63e'|g>ϙϩYŻӌ6ShZĵI13aLi?PuQDEVKq>ϝH;$ S{uS[ix Wޚh& p~  >p8=(P{Jd4w?|s>bDVk !Zxm{8l?7yRߪqᓦ,<@0GH-屘CU z > ip ) 3ZY=-iJ&ӡh!x6R|kpaawz%|UR{%`YXuAAfBa)PgwNu vP<'b}A)["~uU*ge"KYdD9Ln*~yKL;í.k}j ϷWέPT"MzPWf5N W>OՇ},L7Ć[f㷦a>C}*omz mQl^m6H֫-`=B@amf=,4˿kֱmFߦu; 㾌fl%*h}=qN„Ohe4|/d(4 K2!v4j9u=ISSoPŭ{F#mܦtcԄHc[EP0@Jq&;i/콡Cn\֒8`E_B,s+CdW~If%}"hy&#`nIcMMbGR ! 6@1APP?CǭCeCOR >!Tľ?b(9L|Ns7u3$Tco %6X!ݗP_SǘnF]&K[Q< p4M8eh@ 6~j{ӏLq}b%1j],8 ]׎@t[b>V>Nfʬ9=xY_3ݼ5j 0pUsuqϤ0W77"KU[\Cn"Y.nO5'G՜sފrXqO(O/\.b0 G1$}=V+>|_x[[(#PHbg&u6nK#b~!C+$| `G7_.a(5LLD)kkӑ.tcy2lMAj3IKx^k(]Rd qǬPO4&>f3^K]|V^^VoKT""!I4m{A~GN{E:G퉶BK ςAW%5*ӰɛvyLClPwkѣA1n@O^5zw cfci0n&-uhJA49nÁ)A4]0?5 ڥ#5U^|RWuQ6@ȭ 't ;sPW{Z/ѵ~{'Bo?`:.}v+ӹͰ6B`ܓ!01ڭ ^c'k7QV.x>]Ljc _aYC%s5xD[gVC޶ߚK H]~Yo%,ڍ"G/bỘ9PI_ڂƒy}~竭8n+jßZ .$|#LUUI6,<^ VzzsY0i+ۂa0uɣV I61boŎí? !;8p邯r%(ş2Gjy&%5Hq>_ ܿ$-m}nRT,f1(]k]`CI"Aqv; ~G^gR^اYN[`.!ͷ*4it>kժO|  /\`q-5f͇}Q0R?X=a:Z-~Z姯`@3[ONʰBI1HG+'d,Wash6idY\=hv[@eEt% 08c \"C-i$ H֌CPE45^2oXLGG":?p5Zجq>ϳ;h''yกK.`uO BӅR+䚷2I{j.F">yYE|OY&^NDbp1f焸 D½!5Q9?uNΎ7: :.3&N[2Lvee֜MW߈5Kp ?DiwQ;Ǡh1hX}G;i <{uC:PH$ax/dgCZj10ط`0ӫ _\tYTs ^4%3Nc`sXH4g=^slkQ􈚂 Ff pkj%r3X8?+ ԕ_NKf|{ڻЛBIA:kћj{K } <+RT\Ua^0y\exυXp]{Od,=k-&,^ѕ W~6/G#ah7 -(.0(=7o*t@*`cDgs &&Ry!e^ ~ uJ>sYV<)yn\$+?:%+$$%l~uH)!wǽs:N ED)W8 }w0k~eL><@+Fe::*ۘ"Hcz͑^|EΝO^PS{ónR죊bSmTъ=I LSz~LUMޮ؇bؗ;yf(vb[^ŮP않A*vbz.;S'(M)R~@W+SQK"{+@Ş؅]bM}\TlKJ=P+vbߡw+~T_VMbmM^fA=ZŞ۩ء'h~GvuS;UW gD(أ;[؂bߡ=Cg+<.SJ>v]Qa; }m؎?>lu߅.Ww?;ڡ>nS졤IFÇV+*G4MRfYc3I>`Ο'dfZ5}QY@\ zJzDYOCG)@,ٔK%NeVK|WUE*ՎN])/.WHHR̗zX$<:g͙YcbJcYQ^R,WUˊKbE"hUťFn5(*v-3WT\b {qXRU)4FD7TNg Bŋ(*ҀEfd<_VB#ߎ+ @ZYWU,3]󍕐b;*,ˋ+"|ye)dy6.r"qiF]TU-BY!u,^UcIqEfBFT-rWKCo*p 3:ܕ%v*ED(TTcGc+D=X,.SrUTAIQ.U޴BFo ,zzD擉`jc{& 1]Y<PFRB[)Nu.Unr.h$M pcLnUzM@,"1q]Ww}qy=!<"B'R'h9H>"hbZ85}HbqBy 5΃K34MP8ZTm#Jw5uIC's\WBMVU.WJy>Kb|7WK9`C;+0z uW^⪪r崴aؠp=rH2骚"VraeՒ_@J3V ltgdf#gF;3xNG;X';UjVO{JJ'%oK3^?pP!7 vc#o5:k؛o74_ܖO̓nXl˛25ig̜u̞sܢy%v +UV9݋,]vW\EnΙ0U-)i#Bvy X[ j/9vKA ӲFl6g.gέWbu?U&*owyTC PS_p~/ E"îJ;ԭYS[޵CyW<'ݳ=‹/?|o߰ql޲߸mvg{78x9G>'|v_Kd૯SϜ=wKkpjB.w3][bhx\ɳRñ?#~,?ꟗwSiM̑G{ iP)U; v "!w+hzwm*ǽbWI}˭:!_ Ǵ1MLӂ0-LcRP,]4Ir勐2:"dQfJYVbɨAwNS&f .;u 6$iA2-'%@yXP:($ %G\şGHP5魒e*b\")k"=&*p/*=ፄZMM)8 VEI4u~8¯ Q_ɞr|gY 6{&; &s]e!d>'!uw1LMF_?; &sڝs:{y.!;I7*rYhwY.; t8&s]Cz0N[ FuvN!2[ VDгܻ̻ nx)`v}2E`~,:]l%`ކ`2VS+B8B ` p"F'`QL=jjwhp0O8p*m6u^rBi8Jo= &s]}iq\[y7X I{L|Ba!7GMƁ!l'mZxyc 5ITQ7t :R7v@ViUbfh\nOC[$|9ǫI1QsK?dz`ANzx 0mvqEe.#ƈr)|KYO3:t '/vr" nZT;0k*LV(?v/#uZw7ufp 44߂D1!; ߠv|*E@+i U90/(eJȴ^-'6ȰUdgpOH`ޒ!щ 5ج" h*ēb"vPR7'7" PQ ZHu qNqR#e{ JՑ㡔X{(1d@}tΩ-GH=IڦmS,)$Kmp"'X%;:Ud74#-D8^py`=XD|k,4(@ ڂ4g}0H,ˌ@Rc!uYKO =}bՖ5'4ą/Ud+Y nbI?~cHi}ڒ[z5'6paZU/`D>&y/5T͕hliW4!35=,}󟤧jQ];o/:\^))#EҠߍ1KʃƑ#x=DP&<Cy = E])Z4|G3 S`6+iw.74<[~sKzޮ- θ"d4 9ch  MH"ibBp&:AM"Oa"=L% cHQNpQMtc}$cMz t11,3ܷ`q& pIz Vdq1wahcjixj4 oRG$$h㽠$r{ۦoj6#x#G"k 8gꨄ`LO-%Y?xArzIѱX5LiM0< K<3c_;|lFD] \znfj)FMzZz47:c Nc)LZ0XOPO`fDi7Պ̩I0$ŵ4+~fnJ9TxͲ>BKMto%N:ݑ+e+݋QRw>J%T)T֭ jʸMr^;Ԟ[V*CD;C5 q(3c,/Kqei}*9cRTAYK/˦/)*($*vaÁjE/-uQ̉ŠjQ\]+*JMڂ I(˪E"D!3r\wxNb/v2g5ĊK+KKiDE+U. T ڳf/^l2R0k)!jR0Uqmvش+(!ӚT^!1 -D2WynStUR!ikZ-Ϸy*Da~n$ERE > Ev Zb)k,~0+JU(KvBAS$P`]UȏؖYUn@|)c˜v2[ pb`=`v0`6 s'``&7f! ̛`sWd2*0 8d(``g`tQt0< :09&j"YF*`~se` 0ujr#+ 00ڿA!/t$ ohKH;$dқ!)$%H2\G҈\OA$ &C #7 2 #M.EF,2%7[`M3'&2J~An#9'I. 3DTW;Œ2b;szeu/.[RhnrS-sGͷB9ޛ`Eh6`:_-W\K`|(A0wtٝZ*KeUu·^%%KVuƸӮM &rϫ6I(v;݅0"W ˻;0ehP(f.Ⱦtc;&vS.ZQj۷`ЋnP`am1&93@?721z~fTw=tW(ҋ0],*[ s0 C1d Ő15htx'-lNk^surOGh]Rp,uV}:ӟ\"sC7;r 3a1^{iBzʏr$B:b<_ֆ+F1W\gxCM &<#|Å|ń~q=לaAġruW^57oPkmuu\r\syT]~¹<Pp.Or |?\^=\\~E+ X-7֛w,f:3FѺkق=xc=/߻Gkk2]/3;uCwg[\nnwP)Ο}\ӻOY'^=wOZ&4˂I|. +2ǟHvj.@<yAG??qaD!1Gv_J6Vudo*A\դO .uޕ$NɠQLש;7-V%Ӕ;הIXM>>;An! KԚT"KM:PRl3=vcw/N7y9s1tzNu.'~={e<5_=4Z_cɉhD#\πv5{=j>*NnMd =$nNCt=vжhoEo;@cXew= W[vI6֜뷴}vG@nN4?\UY:*ww'm+u9>iEkI ~<_#*#۬xO ]DY'`0;Lfvi)?6{oNM)z?v+*U|HtF/nxBl @[;J߮s)|=h '÷;Nץ"Kůx|]Ok3=59>j_#kmW}k5ltaȹږ?3o؈ˏVE72sW y,?DnʵGu?"V_gh~颟D_[4QX]yc=uaKw-i@Պy/Tw#{p ъ]r: dxF ;MqQ ؄[7XwOtt53]֟D^B v^H#~M^4YE+9ʑÜ0u3,Os;,[D,Yc1'cf$͡g$qyo?S,6,߮"moHCXb(鹦#?7Ô滿ާ#O|6u,?~}߳G WS7/:Dd)v_\{Q"LDF]u͵si6*:cW#GD&<"}*6+>R>1׆\3LʩzlKڬLM>p{j={.Trcgqp 6*W4wbYmzԫy Y=LEwjwpբn.p.$yAՈ@ To52l#e`̓6<|13]ٍrAgdgb 5y>s ϻdg2~3?ɚN$G^;Cs|l7XDJ3EO8CEm@P4)_(m^,qT^_&I (,_?CNe秷 R\p'/IPߓ/]6bpI]`:oD.~OE+ |_ҁſ4J|>@1_eeR:ֿhn}S؜}+^-?26lP`\%5)A:yY$?~"n\*tB>RUj{Y+Ku W$Jlx@b& %J,Nbe %.X 1O]EbtgIL((1J`/$x Lb$6K+AbR{zַZ_^kl{SۓiI5#DôL!]Lkr*څoDO~Ku|&J<.!y]Tot OA.D_.~wUU^ܾ;(7|ݸ'&'_U̮?ff Zj=ת'?n/zqՋٸ}>>W3^kYE>T1f۽Ob- nC7n|oÇ.[|y!vwh?[}5gm.p|ܙ //Ƕn~h䨫I?}٣Vߑ>IXc^}oy71Mg_Л-5^C1#6_yر=e7V I;_^c:*?s_~&̭FEϾ.fe}mawƘݲcѳS˜1ti/q1bbW|yOŕ1woк-}Ḧݐvi%_z|t݀;bo}D/:vQBm;xߦ^[v_x,׍c໗ 3Gn^f)Ob CJZշX+wm{'^4sƚ^2ǖ9mZ|Ԟwz~ڞ=A+ ?(y^aP?tHdP(uL;z=зԗ ;4 dh*PzV |vM!+ofos|0_?sD B Sρ `wЍ" BYS=ϡ B2@=d ǂ AK}/e, 2N~xa, Joѷܑ ?o^t|$pU(Jt#Q>dP5ay=vP xX-d'Z|=!2 <8 eCOg+[AKz%h$L(. P"xe7L(.p(<}۾l ʄd ہA+)]X/< %j$` c_ ]߸dOߺΆO߼ }la {A[߃77<<. =>L;oO7H>xiйR Cs ,tx:`+A!Ȍ6#XEs ~ f|7@Y錂@$ tv@,O 8@m鼁LlIh@soCwO8|]t&{ftA=Z%h-(CtXP2x:@Ɂ~t¥KQ&/5(| pΜJOgOWzfxtP!x:P`Q?JI'p( R8p(@!Ʈ >h57).v@QCA\>P` Pc!;{ :fztK_ %S8cձ, FcvFPR` dgXDb tlѱHPt:VAu o6X=o5P8pA5Qށ@dDu#AǾ2бu칵N½'!@.7C{{@S)!3948LSȰ*JS$o>C!H+~%j[(j ZByK0 Tp\X[l5@O: w]x Pw91mk_N:Qˀ,mdWou glL!6Wo+/%a/ؑ=|D4o|!Bp+:WѮfcQ-1ց4!YoN߼);`H#+Nn%oy,~(DR9ͨv̡4(1 x>$tOsO~ l{$_G_r_| xۧHSɷ[ZMaL-6k?M <R8 fW}2_ <8($Em7F_P9C~NGGXt9k <&ڤ{Y1Π͌.>.t.)Vw:y! 빝{^n) 񡗞: u GƂJLg@n B=[v$Wt :C8*_ * MIB{1~|;0))bvzPH:k1")hڋ׃RCShy` AAC"i/ >*oUr Zd FZ ROQ-k].`t}.IG)AD띜}9]ժo+eloIޭkuXmOzR]ǟLAX2:[HRn(,.7/O,O.O-*olشecF֮=TWDVGW K+۪TՄjk$dՔTГdBYAYaYQYqYIYiYEYmY]Y#!ɕʂʢʊʺʦʖʶ# v8v㝉dg3iw8 EbgYu9 &glwqઐ******^UPUXUTU\URUQUdoZ')wʝr?PK bBcom/sun/jna/w32ce-arm/PK BJ|}<%com/sun/jna/w32ce-arm/jnidispatch.dll|Uř?>7&\ izX#zTͶWC.k m[J[vB"H\[گ۵mlY؍Je FK*p̜{O.5sgygy晙g\wK !| "{j5 =_0UfxWa.]|Eybse73XQQ5Btzrŭ?#=n13U4 hӿFY###e?#cG"ZU<4_#f}xA/iXjXW__SX56⽁ Ygq Dau^R^d媕.j)^[\g'n߿OyĜd8x۞`4.jP4^~`b~R7[?WD?P]&4ޝ xg)8/Ό3+XuRǁx*u,< ^X-ќMcbV;`|*q"J7|wq,˚3b_i"M c]ws ~7ۢs l@ }f%Ąqx'ޠ)qTNծl=V49R4wKZ-کh=~ bIP\7wj4>!_KfI"l&ݟG_+6&oIgϤՐhM"dA#xG^H̾'~-C-a9 |4>s0M?4CRz0 zDNzV Igh p'Y;4X pc4܆!4\p.8D'Tǘ uDtpL+FӤ^Gp!0`| v2$ W/Lr,46c,lIQ?Ah0Ux0 v8 UA=֓^O% iWw KFV/yTy$#ڈ~}nz]o<7לُ!CE#*1u*wxUlg}֫Ɩ1r*qiiOs9נL@e\?*\ ծYi4D_`~ib,1 ̷w_bSݖ?b~t~vҐ}c|.;:6_@7-Yߨ| ųOѩxb8V>V'lcQ1 !C؍!F"AmfMMI9!g.F:ϲ)xIga@{(r<,c;9F6ۣoG_2ʇ 7upUÄ&5L U`:\@Ē"K㷁߁,K[7ׅr:uȝxX{Īdd͵qe{!Iʵkm^ 1/nZc91&7 GS>eLjg7dŁu | 3 `p 7{patrgs>l3pyA\4&F}Oxj-q w8i)%8}w91,qLA1P&A~f~N?{o? Y?J}{նtCqGB K<љ6c^3>79.O= 9ck>Cz/O̥]qAs@S80l=KdzO?MxL`\]GMJ:u 9 OՀF%?9w\v<~T#Ys gw%}ϩK"kB C6c2oo~T ꄙ[K9'wi_%QznRjz8l5^8 Mʔci3ە;Kt7AK$;42+ =Odn;{Pm7E~onFz95@WU♭ӿM^|@}N럱PS9.' : )Plhhi~{'0ݘ,>NK٣qy'{qAI1a-m\rTXݹv,W#1yW%H$^J%H)~'cBq׸Dy}x=3N'O+}ЧVT7pY_~~nf|9uCei{Z?P[hg zu]ʅZpЖo|(aIحv6j.6[_&]v >kp;إy3a|O͙ r3tv֯T3i`Ɍ%۽ SmC;HSS3}+Gmx`76aeNuJ 6/v'/*^::ya{&/cggxy /e N.+q REC{Wg$r&O_̍}B O6)G.`l5i~Gl5YgyM}| u>%nH~q1H?ͼ=-G>0,n?`@*/rAFW fwJ ^_C*U^lWRUؿx񙴽1o6&Ny]M;iv!m1Wc;9?q(z;?D=SX[MIó.MX̓X~P-㘟=6}/y6*,g_e84uGjz>T t~4;dz06nyaX,IE*{3{/,k &R|(cYeqBm\G0ʚ<};'W<3!\߿zoixƟ}/|.;#@8\WܿFs 8@g衟Hi Qǃ [szXUS4W3-$שּׂ)A_ܓi9c$תDmϋ〃܏j~q_(=35wq F8n!x5$^<%ȿ)GGWRij.sXWAC5;#Zy/KH4%0Exq͂bDzfShpVITmog%l?/u0v !iۨI >k r+9uiMc̗O>;"nNoMȩSPr^ox_74^p^o>⸟5{=:\R[Jz|kqyé3 q̑auC!HRt%>Lp_Xྋ1^e-O*Tמ.ugm9gЬϸ?AqZL'Z7? ٬ʺͺ r-֩].r:kB{ѳv &,A?j$ӟ=ϵ"5<m1v#9P9>˴YϣG3:,M|e9/ r~~11ߝqS]tٟǎXן~^=vÅ9;Dj\!-cN]DNѿ{\{Y\ǕoL{T [*V|q_qD;{.X|k"Z爢۽~82'X~u{5F|u6R{k \9];1H?.<'"v tO n%@QnaK~5/[8496$-5:gp?0&9Kӑ&g\t]kSVoN[7ԁ~јe"[A srF'҇m?ދ36Z:2R(l"䜁HP"OJr* k8&9z,poKV^Fd2slsk\hc>yɜo]$37> OON}w9j߽?w^ՖV\̏?0 Ùk@jhӻ-7>3w|OsvJxC#P~Xt "zJл~X+vTwS=#v]AFl.`쩆7s:8y6[*WOL ЇHiAg{u%Uh\w zЯfwNXm/w^.^)2BU@DygBВS Ē΅΂+ȹwd?ugOIq0OzހǍ~F~%'M9˅x}:2gǫy1%'lH1GRvu1N1tz;y֮qtG>u~Ȇ;hhUkzɷ]‰>Bx4M]KA3$SԵh4}jCT5}۶'?`re\dWPN ^~|L<~c}c"ߥ-vU1<YQrrA!68˨q.-O9\_!z2|1Yg\:|a~xLЛ, |7i%ki/A7P)Ǔ\!XJCO4r窔Q}>>xm+sLcWB0 ?HnY (K 'lB:o*!*ParUB yW}z1|5j͵“ы*J8I/iz!m+a+i+,m%kkD4+J˃hs Xc/~]K8'covpls.]8:~h_3( ƅ\{ɁySSuήSij%uZhw!,$vȽّK?->Hm_TX^};r}v gw*u.(ݱtҏd>:>C=_yM|2vg"g}w=3񀽳,t|/Bwimgt/+}]Ew t߂OI}}?8v}/Wkk.dt/n_'B$UCwe??idtޗ-}?ZJΤ;ݗIi({/dtYt9?}v?]}>+{'n[_2?B)HN{iߡ2^s;x]ҟx0  >|vSURW~5_ ?[\l /ܯo\']h\)CA;6%F<^kqـ<ې.)cu:W<5ȳyff30+OЕg*#烮r*t9''fe}9rNqwz{"ٗȔsd*͕+O'܄<;y05<swgX+UēpO^ ^͹*:i'D f!5Mxwىwes}6^ON*;ǻs x~ #l|=<ӇO#xV"|!_gܯs;&7Z!X\g=OE=]xr<'7cY@9B|!<eby yT^XUqU3zAƨsnF`r̹? p p[ǔp"}~ٖ94яQtx7y)}JyZQ  6~ ooj]ƒMBPçGbP.p{d/T~pmx|VKO q`Dfݨ%KZrozY`W Jgãaī;/Gw*ϙRbckok\+ pp7:Ks]"0&`g>1/n/pVE='lApsדKbN9y /ڿ3%!˄³aW-RaB o0V#_B<!,{9L=.~!q~4;bnq%D[s/6Ѹ Va=VO)"ϤRML܂zOy s"ɽ:7O8dm8Fh" O&~`;>h;-C yfcø>kv|;&Kolb}sM룹;1mҾqUqj9~xgpEGPF||{b]Y,v!ʺsqx>0/ىgzUq#J+п!r$_=jd5O<7aWT#JcMKzFr\xuaFxvxa݄gڌ>.yީ WO=l7?d9J<>J"ɛ&wx;z~!b<\)Z;FܔG\ɲVK5Wl[]n>.׹Mwu~ߟN6N2,ϸG+a^u!0yfcq::aߟ2尌7 r?[g܈3}]ΟOg4yfY<{p(ڬAHYl"~x-K7e6܊2_e2O Pjo.H)~  7s@U>ʥiwy^7쇟G? g v)(Cop+4ִviNS}cmSR?FQfe&Py28ۦ+k| z}ޣ$˩eߣ̀η^wn[zj팑N;CEϔӼg1I바1alVC-ܼ{}dkj ѭ=leҩrb򍻬]!g*C$3q8HhS)N8+g"P=s]=UǣOR>V5.@v? ς%eyjVx~Wt}tp[=*~)˛S_'RiΒ15zHЯO9<nWYjmORV0rOoݗRa1OMi3'$lа;t?'~-G:B_H""g{x֮E;Iyɘpuyʿ7'%s 'U>3Z`h}IO³G>c$}F1o |*Mh\T1}so{p}CKQ7ko?KUe|}zgsEη ?ޣ/x6% ;_yBsQP,~2,ƵDW }sm>qo@pq_W3$Qo,4+QUu;EFBr_W*xTz[1)}o< 97ۑ{P]Y_w+C(HB_5O@;a~0292y4ed1sDhsYί Ld3I 5!zs5}\9_,К=uBbmR\k]W=EnQu'G7J/㾘n/K/r=:U>7^ont_AtVvLtJ cZ1Vu4W9v7)q݃mZ\iX }![|zl׼xA~VsqOte泬C~xmWv6yGs0q?mm"yfz[e$LofiKZޯZ񻅱ɰA` mdKxSl3-F](}Ɠ+y%}Pл@<6^ 8 KbT<ۮw[-2ڀه=a&{ttk:[7R8wMye&0ŀyf4L `vsT&3Ĝ1#5?IZ~^u'~/~vΘ`qO{V?X y3]aga uَ}nNu).9x\sͧRA}5|'ϿQRdB~Y Yy+N1辱[˯/00O M8:_tU`M8qkԱʪ>t^Y3wΛɻ78Msy.) %._QE|BL߭>:,]sU,#la~ `G'gη=M *#q5&Q\ grOF&)>#J4}ڙ 7GjXV{^h:xƱpt4YoSMnG&`|Szl+ϦsHVic\#£_  0v<ꑾ:碞B)4C b6OGd9V-_:i8ٿG\j\{DQN~;y|&3|% 򌑘ij9n)1zk!$w8Rܣ a\4xAWd =~CcFȹR׺,GLgZZxO~Ϸ[1ۊ=)Pk@o5qOF Qo㙖 `Z» [^ő;ᙟk/}?5 #Mxq;l߇v[;2sW?\evԇUf%< uNec5 _;y"Mg&f _0 n`]ib)ٹ~f:wc=w_yεWa/ Vq-+oe~5Xm?<ƮFr?};aZ2::t.'B?#-|)3yznӄ>4tsGO}Q<ɵh ٶ\;ˊM#poWX׉O2[6;`CK'+1~*l:*'NﰕZhW>CS2ݚZ[xPT}-Xg.=G}Z&ڼ/~xNeBf7|3ـ5MvBj>Ŀi5JovfTWJ}m}g4ym)>B^~pן\@a{_Wt]aW{tZ؋h60pVW)|'Z@6w5.|?y%7B_-\}Q zW06O̕`ΝlI'׫'C/ޏ~`^Ȃdv9.9ȴ'-lӼὋ'.<3}H{] {師޿/P\?iEcPui a'C0*܅ow [F Q ȱg9Z,Ӷ,`̹cNK󓟕MyDŽw2mK}%1X?@Vk7:.X}#[GV}mڈ&B@08`yO}@^^ЮTbaB=;O:]80ԷK6ێͺ[q(W^~sGN{o3xYwUs'O{L;e>NkN.㜯vݮ5%5X }tZ΋XFw!& l@C]uxTI#Pbq7sx?ոkmF #Ƀ6s1W%x+m oF=S^8aTbмl@Y/}fnצ o3EX_I\pY<ށt;:0f8:<Ôqq̑53 O[}~UߒdJGW?w{oPX_N¶*s1ViO#gg_񛤮}a^f~4jO:d}oqWu\/as޿ӿJU]t~z]4GiN[lԟ<$ûyJ4]+6ҡ雎1%%Y(|q?|}GB!✑tq-sHSQa 7[0wOn:DiF5{Dʹ9hnmKGHE/jYꂿ{߄No&_ ;ׄ(c 1L5}fFUjajx-m w3dMxnB7*wAbld#U˹f(7+B&aFkw$N17sW~[mJC0W>Yyro>![d/0ԚE2V{'v~3pY=Kɯ̋_±Rw,GUBϹ/͵1і.b7?[1'"jncce{2z!ۈwoTͲOC{UnX퀦-qk.wq]c'}\Wz!O'!gŮ1-#ɱ6`#xUzc%ǐ=oqceYc;ؘV6zrLAEُ~ ::['Ӧ/M^ Yror-ߙ4k`ߥY@?)7<Z=X?@K9nLLf2_cп4N;ϻw?%ԵZd;1P>3>  jC qzPҹu!Wy)|Zz`Z=~N/v_z;%ЃMСohD.ۉg+}5ZJ`l:=R!﫼Oòn.˩3V 4QQotW}q-C\=Nʳ$7>Bag,i1s;8ѹ+5'{\zX#SgLmۼXo"e)V>#F9ݢ|l u}Sm6,1[e{͝B8SOM43ngR$!?Tꠃקw,Oeڷ~N{S,{e8m&Mwf9s5톋-\d%3sQ|^L9q\PfҶWGr){(ڮp8;8b >}:6t-k)ᝰUAhM/ c鏄QLCiq}7Z)xOI#~Nᄄ'OLIm9[ -܏pym4[b"r1/1Mg'@Oӿ/7&r'Ol׊;a{[0O˽1]Ȝy˅m}ȉ ΏJFA룠1_0?r4mb4gs"e:x_D1~/~*|bsք+z,O 9SNJ9W%C/#zrD^1>E/:t΃c. <ڬpDynCk/T?O9km>Lgy[OR9.|%i ʞ9{m٢CY¸KԐ:/"^09s N4û͎x-3:OUM)]4a,%oguѤgw=)3~ܷ8}ġco:Ⱛ9\76.fZ%h#7"e$sWKv]kʜ[Gk=2RC0 +2'cbsWV?}St ɪMwqtsϘsFپ{;<"9Xo]uGmSG9v>G)S8DK>rԁ#Pl 9՘#6k-! T{Zng_*6)r9e_? }34_  4]'YVDfu,]C)7'hQ}J۳:#r1yz~a1VsgNi3@{pmr0g!GOo/߀I'D!Cm駭+~-7'۞[0{ud"h;Q9~<~N #dOmܲԏ9`5yEhHh~Znn_gaH緂oA9?xNyEayoh$<-\C)}vjp"׺-l,WԷ=֫]jV K;vAnL_N'?8= y jل9F:uĜdZvgvP*=f'ϣsao>Lεu?6kiXSlni%=Z_f͘kP ȯWz>{#ේ~:~Toccƨ#']7%Z$/<-%~)I|лsjyg>߮N?XL}]9?%Ŗc',VR)qxqS/ =| SZnM#7=гGz~un|Oy>K~w]$ϧ5'.k5/" 3Nvev t6A%hUzl_^圲&q>37vN`&rďϨXԃ1 s6{ِ倘'Cd:"ʒ#"&H ?.b:~xڐvG=kS(|\Y:#<}ցqLt>3#k;"eeG/(u9b3\*qK|KׄrB=J{ve_EݥyCceym }EHmdQL~=dSW50HDff+ exi{xe^/8pt-=\$J} Z,#(O'tzLYIKH/Ub﮾\ێy^^+dٯYl4|~/t`ݒU Ԯ*Xjl~c3|~MH91^z) sN@pgg2r\"0VǪ~tCh;x']+)\|k\pM?2GbR&ۖP{0^}j]Mcj,#Ľ.k貞0LHV@p?<Ov@6oyqNi ?:͎щ1јhHO3o Ի~6}YZLwz6`4,}^-=ԣGK'\=10L?L,7GzQ.a)n'K߰#9@9%aGIS>ush[wN(+,ɳ`3{WxNv逦>jNو{Bݟ=7b~l$^?öwWƎo9&7|:k._κΖ/6&P_\~ټ}{Ucm lI>^®Ƨ[B/^F#6Ii>ZF/=563L! 7&6c9F=^mS h#֍~"ǭ\{)9ЕWw#yoeV]@k#o*[< >yezqhz{GIs[GaTPqN]~ O=io;9G:̶&/8f|()kpOxYՁl Xvm85)wCוAkLO[>5++Hiz8oz=7dNvI}}{SwrcъĄ)Mb3r?s^8iwo%Ϋџs>y=b&gUbK7'> yfons}֗4,jψC~og#y&Mr8,vԋ>gȅ}`з6Gྐྵ:|*]ewz/v\~'\U.r.:>ypo˘so0a#ҙV\EZ].k^[cW/ZnXbׯX~qݲ5\dJs*ss՝ xn%-co^r劕(v fm}E 檆˖ߞ:W"+%י +E+ w.js4FPha]͆n\b~*2._2_%4*&>%+kXE_7W5rdi*ŋ׮`"0%CߢwI-4jj4i2ԝUw.kk/ X.߸|jjɲu-z>vrTv*|%@s \˖/k^tioraLm@<_QL0A*}͌d彽~m`Ő- Xr{ 3]7EݜU9 }/rѰtE)FL KEgĜQf Qn ,]:ew-Fg]/WΈ.!ʦKi6F͠lːקs|mnPqrKV¡%4K.\ѯfYkЩj!ĵ}KMg_][a\)}JE4\L +59|DJ ?dzp+4J:F$| l6OoT[ǑK2Y3uҠPxW g:%}^ivgaKץݟTҷ8ۮbRUgL_s">=JU_-!hB?|HRTqj4 j}k|iӜ9yo2G+_^Pe69}ynu@vu[}+0gTWJ#eܠJAӟm;Zܠ";[U[|^Ӧ˗,YUF^[͂>r׊Ziqvp0.}KאE{H1a!BBa5BaB v(cGO w0w5fU{Ϡc٪Uj2G9~Ueu*tSLm^r+M'դ"ZD;qӳ@L^bYb΋.B>gYqAE8.Z$נk#|1a  b~6>+*y 89o5o{ 7 3kxCOWcpw.&u0 Ze+UfBgo&]o:%k(伳ċklkd01 X v؏`f23PLr;:X]Ra/*Z(9*9ܝRH(N*9{fRQ}zᑇ\34hnPycʏ?"< 2]Y+Mk1a#8nU0Kx%DY$P1J*yg(nU:J%b)3łcMÑLd0A< 291?ܿc|)Z gQbZ&^&n8 mMD nn ʝ'Z'ӂ\ӼйY2&3Dۏ'ӿ>MAh/2n-ɚ¢Z L-ٺm9GXGZ jblv_bIsؙIc]j1ބI~*됂ȒYLsmc<=5|EXst(.߫}-1U[VbGoea4(i@2b O? $ ;"{ݩFő>!{6=!#7A\OtGPca󻂳.bv1 L<go?;i}YNiXc<5G}Bx{fk6" Qh("t5V>I݊suq#ѡa[(p]{F$>E*=u%a /ki,rhh#b3GB%o7:k̏*zowGwt,vt^Խy`]'s['=v5p"6q2z-<c]R7 v (, 6aɬkb+ N:k [w}NUu 爈Yzeth{pƇCrLw.*iC !B _4/ g!=m!\͇!4 -x65ď0xAݠVUG Y3 moT᧝:B>H MAkQ>]OAh.#'@gA?Z/#ρ>z tP2r tE7@?x@ˠ~*)#ς@@oVA?=d AoAOtt2RzM~(]{rG+ϡ=JQr?QI JhD'!&qJh#go.ģl:n&F #/m)B9O(>G_Xg4Eb_eyrm {1D793W)Y椛ND]W"CҊz$P';ϝ \Ύ&M"tyYlDQ^>m/|0`bX^xeNE+LUfaBoa{5NrDSWZ'#a^4O簎.,}9Dry0(Z\g*89Bq>'K3ʱI f}@9z:A}6hǠAՃ@P<J9iuwA7?@k9:A|\&:&(;$#lUBbND>[q(N/d_JEG1>AUF3y|]MΌ@0#ѐ:`|*/ңЦC׃xcݱL2>]KcBxB.w't L %rrsM|\@. jK\ Srk9|N(=VGAk &FÄ|` _hnLbSzCWǛ́d627π.#'#d9 w^OO>EO[xh_Ej"p-c"_5n9A/ݩ{ u$ë׋?iٝ'$JK`iLK{}n ް­p{#{}hx8ùXx<< O3kTq\Qװ+Jr1׸kµ~OwSB o6R`ag}sy߂ow۷[V}_)JҮt(Jң*}JTVJZ)cʸ2L*Sʴ2\S+7-eVSeQ,)ʊrGYU*k=徲l(ʖO> ~Ky]Ly[ UC5P]>j BސBP{#zC}hh8C9!چI!שp+ܕ*w]s׻܍nVݚzz;ͫwך5o^ohljn~мL o7vP4! x<|L@71u\P') zKUhP꒺wUS;*iQ[ZZZ\I7lڴvl%UCݡN:Wk5\>OiV_uz|>_7KҾo7;n ?mc/M5uRrJ˝Ֆ-k-Zll"-ZvZHՀԊ>{<`&[a]Qbvx)^ ZS=5]Y?[BʰgM@0A96%#:MC=xuIм|!!4b\yڒ7@"Buڑ?+"FS(!?UG6 yȲ<}Riп'!! U"dCB2@u |H#xK 5 y>/%!Gc"GW<%}14IH3E r_B~HE| H1MBG%ȘH'JU yvǥ7 5RBiH@vH"biI }r HGDP "?,Jsm3'D% O# B\϶|H]n 9~LKH;% dSB^RT_@Z%jlG!$HE*!Y 9 [;@Vl2L{DogKB6L6Ox"!h 䚄I+"2*8 r ]Dd⼈|Ȝ-5 yq[B@z>#"~VDR@@"G}'"d\BȢ<#!x/Im ȔYk%i})P Q  դlِ.XH["R$>BzFD7%"@*ib~sl;_l;' B5mɃ9 ]@?_J ˔v"i@~5?)Fd+k?ȗ~dSBH۵ްyP_.^G~zRWȎGU;aDQ $ 9o) rȰJ% /aF$kf\ 4}sC)ywxR#놅 !5l<6bFEP7~iuZv |"5Y#" )oxrO{步N\dY٢ aUT9\IsygKT4.e\ uRؗ> Y9rr2,OKi°-!wEeGSN;ζ6DWK^QkW2XDה=~e_S.?Ҿ:iwvH [k-AlӹpNY`1SDk_ ex1 Gc]A$] c#1>_ϊB-٢O2_'1T&+!&240EF4퇋7:G-儅Yv0:qO1۴3%jr6ұxё\ /}S /F9p`Ȕ, +%Ra T"JfD4R4-A Gzs-<3PT0|$uyߧ]; V;RФb E)&e tA4ky |lf#@2$~k2h얠2K,Z$N]!]nK 2gB#"#f[5f[P$.0a8S:fE˿LU+}nϑa*J әz#8`3H|Ċ<w~q,d XCPK bB AMETA-INF/PK bB4+META-INF/MANIFEST.MFPK :SBA com/PK :SBA,com/sun/PK ;SB ARcom/sun/jna/PK ;SBA|com/sun/jna/ptr/PK ;SBAcom/sun/jna/win32/PK bBYm&com/sun/jna/AltCallingConvention.classPK bBB( '3com/sun/jna/Callback$UncaughtExceptionHandler.classPK bBz#acom/sun/jna/Callback.classPK bBz*rcom/sun/jna/CallbackParameterContext.classPK bBn~i1 com/sun/jna/CallbackProxy.classPK bBQ1 com/sun/jna/CallbackReference$AttachOptions.classPK bB#8 com/sun/jna/CallbackReference$DefaultCallbackProxy.classPK bB|? 96com/sun/jna/CallbackReference$NativeFunctionHandler.classPK bBy4#}!com/sun/jna/CallbackReference.classPK bB ּD+'Z;com/sun/jna/CallbackResultContext.classPK bBI'+<com/sun/jna/CallbackThreadInitializer.classPK bBYR5)?com/sun/jna/DefaultTypeMapper$Entry.classPK bBde #GAcom/sun/jna/DefaultTypeMapper.classPK bB l9#Gcom/sun/jna/FromNativeContext.classPK bBMCU %Hcom/sun/jna/FromNativeConverter.classPK bB ,Icom/sun/jna/Function$NativeMappedArray.classPK bBrn'Kcom/sun/jna/Function$PointerArray.classPK bB\'9Ncom/sun/jna/Function$PostCallRead.classPK bB$W!G!Ocom/sun/jna/Function.classPK bB> pcom/sun/jna/FunctionMapper.classPK bB$5m>b*qcom/sun/jna/FunctionParameterContext.classPK bB‘'scom/sun/jna/FunctionResultContext.classPK bBn x`ucom/sun/jna/IntegerType.classPK bBՠ"|com/sun/jna/InvocationMapper.classPK bB[XE~$}com/sun/jna/LastErrorException.classPK bB*/Kcom/sun/jna/Library$1.classPK bBgZ .!com/sun/jna/Library$Handler$FunctionInfo.classPK bB%n !com/sun/jna/Library$Handler.classPK bB"com/sun/jna/Library.classPK bB-K%ڏcom/sun/jna/Memory$SharedMemory.classPK bB]@mxf"hcom/sun/jna/Memory.classPK bBr(com/sun/jna/MethodParameterContext.classPK bB_6%{com/sun/jna/MethodResultContext.classPK bBjDcom/sun/jna/Native$1.classPK bBC&2com/sun/jna/Native$2.classPK bBuPcom/sun/jna/Native$3.classPK bB=JfEcom/sun/jna/Native$4.classPK bB,com/sun/jna/Native$5.classPK bBG com/sun/jna/Native$6.classPK bBsq*com/sun/jna/Native$7.classPK bBoWJ!com/sun/jna/Native$8.classPK bBAصcom/sun/jna/Native$AWT.classPK bBNCU com/sun/jna/Native$Buffers.classPK bB0%%com/sun/jna/Native$ffi_callback.classPK bB: HIcom/sun/jna/Native.classPK bB GSR&I!*com/sun/jna/NativeLibrary$1.classPK bBmP!com/sun/jna/NativeLibrary$2.classPK bB$#F; com/sun/jna/NativeLibrary.classPK bB NF[u/com/sun/jna/NativeLong.classPK bBu\' 1com/sun/jna/NativeMapped.classPK bBARMy '1com/sun/jna/NativeMappedConverter.classPK bBT 48com/sun/jna/NativeString.classPK bB, *>com/sun/jna/Platform.classPK bBqOJcom/sun/jna/Pointer$1.classPK bB_ Kcom/sun/jna/Pointer$Opaque.classPK bBwJ%TQcom/sun/jna/Pointer.classPK bBF/  wcom/sun/jna/PointerType.classPK bB-«l {com/sun/jna/StringArray.classPK bB}fJcom/sun/jna/Structure$1.classPK bB**com/sun/jna/Structure$2$StructureSet.classPK bBͺ#bKcom/sun/jna/Structure$2.classPK bB4k >L Acom/sun/jna/Structure$3.classPK bBk)ȋcom/sun/jna/Structure$AutoAllocated.classPK bB"'com/sun/jna/Structure$ByReference.classPK bBT\#com/sun/jna/Structure$ByValue.classPK bBlBX=,acom/sun/jna/Structure$FFIType$FFITypes.classPK bBDnV*com/sun/jna/Structure$FFIType$size_t.classPK bBzZF #com/sun/jna/Structure$FFIType.classPK bBGgdh &%com/sun/jna/Structure$LayoutInfo.classPK bB4br'ͤcom/sun/jna/Structure$StructField.classPK bB/i^?\com/sun/jna/Structure.classPK bBٞC&Ccom/sun/jna/StructureReadContext.classPK bBdq'%com/sun/jna/StructureWriteContext.classPK bB-*!com/sun/jna/ToNativeContext.classPK bB҈#com/sun/jna/ToNativeConverter.classPK bBSncom/sun/jna/TypeConverter.classPK bB/Hhcom/sun/jna/TypeMapper.classPK bB9Ujcom/sun/jna/Union.classPK bBI''com/sun/jna/Version.classPK bB/com/sun/jna/WString.classPK bBSp@'\com/sun/jna/WeakIdentityHashMap$1.classPK bB@db;com/sun/jna/WeakIdentityHashMap$IdentityWeakReference.classPK bBFH%wcom/sun/jna/WeakIdentityHashMap.classPK bBC/!Zcom/sun/jna/ptr/ByReference.classPK bBɴ?Τ%com/sun/jna/ptr/ByteByReference.classPK bB' com/sun/jna/ptr/DoubleByReference.classPK bB]r& com/sun/jna/ptr/FloatByReference.classPK bB|9 $com/sun/jna/ptr/IntByReference.classPK bBt%acom/sun/jna/ptr/LongByReference.classPK bB+Ncom/sun/jna/ptr/NativeLongByReference.classPK bBǯR(xcom/sun/jna/ptr/PointerByReference.classPK bBwF&mcom/sun/jna/ptr/ShortByReference.classPK bBpO£#Ucom/sun/jna/win32/DLLCallback.classPK bBBXu9com/sun/jna/win32/StdCall.classPK bBܒ) -com/sun/jna/win32/StdCallFunctionMapper.classPK bB #6?com/sun/jna/win32/StdCallLibrary$StdCallCallback.classPK bBOi>&C com/sun/jna/win32/StdCallLibrary.classPK bBGJd:*,!com/sun/jna/win32/W32APIFunctionMapper.classPK bBP-'t%com/sun/jna/win32/W32APIOptions$1.classPK bBUD'_'com/sun/jna/win32/W32APIOptions$2.classPK bB#w_Q%G)com/sun/jna/win32/W32APIOptions.classPK bBs*Q+com/sun/jna/win32/W32APITypeMapper$1.classPK bBLw*9.com/sun/jna/win32/W32APITypeMapper$2.classPK bBIYr(D1com/sun/jna/win32/W32APITypeMapper.classPK bBA3com/sun/jna/win32-x86/PK FB6E;_9z%4com/sun/jna/win32-x86/jnidispatch.dll9z;_PK bBAcom/sun/jna/darwin/PK UBd l$(ړcom/sun/jna/darwin/libjnidispatch.jnilibPK bBA,com/sun/jna/linux-x86/PK 2BzïD m'`com/sun/jna/linux-x86/libjnidispatch.so mDPK bBAcom/sun/jna/linux-x86-64/PK ^BX+ȫ*4com/sun/jna/linux-x86-64/libjnidispatch.soȫPK bBAX9com/sun/jna/linux-arm/PK 7B]3G'9com/sun/jna/linux-arm/libjnidispatch.soPK bBAcom/sun/jna/sunos-x86/PK %BԦ'com/sun/jna/sunos-x86/libjnidispatch.soPK bBAcom/sun/jna/sunos-x86-64/PK B$F*Jcom/sun/jna/sunos-x86-64/libjnidispatch.soPK bBALcom/sun/jna/sunos-sparc/PK BUɴ*)LLcom/sun/jna/sunos-sparc/libjnidispatch.soPK bBAcom/sun/jna/sunos-sparcv9/PK 1BJK=P0+com/sun/jna/sunos-sparcv9/libjnidispatch.soPK bBAF com/sun/jna/freebsd-x86/PK BzFK)| com/sun/jna/freebsd-x86/libjnidispatch.soPK bBA=< com/sun/jna/freebsd-x86-64/PK 1Bqމ,v< com/sun/jna/freebsd-x86-64/libjnidispatch.soPK bBA1 com/sun/jna/openbsd-x86/PK B j|)g com/sun/jna/openbsd-x86/libjnidispatch.soPK bBAn com/sun/jna/openbsd-x86-64/PK (BNNsѝ,n com/sun/jna/openbsd-x86-64/libjnidispatch.soPK bBA com/sun/jna/win32-x86-64/PK BB( M0( com/sun/jna/win32-x86-64/jnidispatch.dllM0PK bBAJ com/sun/jna/w32ce-arm/PK BJ|}<%J com/sun/jna/w32ce-arm/jnidispatch.dllPK, nqp-2015.11/3rdparty/libtommath/LICENSE000644 000765 000024 00000001315 12534342604 021352 0ustar00williamcoledastaff000000 000000 LibTomMath is licensed under DUAL licensing terms. Choose and use the license of your needs. [LICENSE #1] LibTomMath is public domain. As should all quality software be. Tom St Denis [/LICENSE #1] [LICENSE #2] DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 Copyright (C) 2004 Sam Hocevar Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO. [/LICENSE #2] nqp-2015.11/3rdparty/libtommath/bn_error.c000644 000765 000024 00000002174 12534342604 022325 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_ERROR_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ static const struct { int code; const char *msg; } msgs[] = { { MP_OKAY, "Successful" }, { MP_MEM, "Out of heap" }, { MP_VAL, "Value out of range" } }; /* return a char * string for a given code */ char *mp_error_to_string(int code) { int x; /* scan the lookup table for the given message */ for (x = 0; x < (int)(sizeof(msgs) / sizeof(msgs[0])); x++) { if (msgs[x].code == code) { return msgs[x].msg; } } /* generic reply for invalid code */ return "Invalid error code"; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_fast_mp_invmod.c000644 000765 000024 00000006420 12534342604 024177 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_FAST_MP_INVMOD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* computes the modular inverse via binary extended euclidean algorithm, * that is c = 1/a mod b * * Based on slow invmod except this is optimized for the case where b is * odd as per HAC Note 14.64 on pp. 610 */ int fast_mp_invmod (mp_int * a, mp_int * b, mp_int * c) { mp_int x, y, u, v, B, D; int res, neg; /* 2. [modified] b must be odd */ if (mp_iseven (b) == 1) { return MP_VAL; } /* init all our temps */ if ((res = mp_init_multi(&x, &y, &u, &v, &B, &D, NULL)) != MP_OKAY) { return res; } /* x == modulus, y == value to invert */ if ((res = mp_copy (b, &x)) != MP_OKAY) { goto LBL_ERR; } /* we need y = |a| */ if ((res = mp_mod (a, b, &y)) != MP_OKAY) { goto LBL_ERR; } /* 3. u=x, v=y, A=1, B=0, C=0,D=1 */ if ((res = mp_copy (&x, &u)) != MP_OKAY) { goto LBL_ERR; } if ((res = mp_copy (&y, &v)) != MP_OKAY) { goto LBL_ERR; } mp_set (&D, 1); top: /* 4. while u is even do */ while (mp_iseven (&u) == 1) { /* 4.1 u = u/2 */ if ((res = mp_div_2 (&u, &u)) != MP_OKAY) { goto LBL_ERR; } /* 4.2 if B is odd then */ if (mp_isodd (&B) == 1) { if ((res = mp_sub (&B, &x, &B)) != MP_OKAY) { goto LBL_ERR; } } /* B = B/2 */ if ((res = mp_div_2 (&B, &B)) != MP_OKAY) { goto LBL_ERR; } } /* 5. while v is even do */ while (mp_iseven (&v) == 1) { /* 5.1 v = v/2 */ if ((res = mp_div_2 (&v, &v)) != MP_OKAY) { goto LBL_ERR; } /* 5.2 if D is odd then */ if (mp_isodd (&D) == 1) { /* D = (D-x)/2 */ if ((res = mp_sub (&D, &x, &D)) != MP_OKAY) { goto LBL_ERR; } } /* D = D/2 */ if ((res = mp_div_2 (&D, &D)) != MP_OKAY) { goto LBL_ERR; } } /* 6. if u >= v then */ if (mp_cmp (&u, &v) != MP_LT) { /* u = u - v, B = B - D */ if ((res = mp_sub (&u, &v, &u)) != MP_OKAY) { goto LBL_ERR; } if ((res = mp_sub (&B, &D, &B)) != MP_OKAY) { goto LBL_ERR; } } else { /* v - v - u, D = D - B */ if ((res = mp_sub (&v, &u, &v)) != MP_OKAY) { goto LBL_ERR; } if ((res = mp_sub (&D, &B, &D)) != MP_OKAY) { goto LBL_ERR; } } /* if not zero goto step 4 */ if (mp_iszero (&u) == 0) { goto top; } /* now a = C, b = D, gcd == g*v */ /* if v != 1 then there is no inverse */ if (mp_cmp_d (&v, 1) != MP_EQ) { res = MP_VAL; goto LBL_ERR; } /* b is now the inverse */ neg = a->sign; while (D.sign == MP_NEG) { if ((res = mp_add (&D, b, &D)) != MP_OKAY) { goto LBL_ERR; } } mp_exch (&D, c); c->sign = neg; res = MP_OKAY; LBL_ERR:mp_clear_multi (&x, &y, &u, &v, &B, &D, NULL); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_fast_mp_montgomery_reduce.c000644 000765 000024 00000010736 12534342604 026437 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_FAST_MP_MONTGOMERY_REDUCE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* computes xR**-1 == x (mod N) via Montgomery Reduction * * This is an optimized implementation of montgomery_reduce * which uses the comba method to quickly calculate the columns of the * reduction. * * Based on Algorithm 14.32 on pp.601 of HAC. */ int fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) { int ix, res, olduse; mp_word W[MP_WARRAY]; /* get old used count */ olduse = x->used; /* grow a as required */ if (x->alloc < n->used + 1) { if ((res = mp_grow (x, n->used + 1)) != MP_OKAY) { return res; } } /* first we have to get the digits of the input into * an array of double precision words W[...] */ { register mp_word *_W; register mp_digit *tmpx; /* alias for the W[] array */ _W = W; /* alias for the digits of x*/ tmpx = x->dp; /* copy the digits of a into W[0..a->used-1] */ for (ix = 0; ix < x->used; ix++) { *_W++ = *tmpx++; } /* zero the high words of W[a->used..m->used*2] */ for (; ix < n->used * 2 + 1; ix++) { *_W++ = 0; } } /* now we proceed to zero successive digits * from the least significant upwards */ for (ix = 0; ix < n->used; ix++) { /* mu = ai * m' mod b * * We avoid a double precision multiplication (which isn't required) * by casting the value down to a mp_digit. Note this requires * that W[ix-1] have the carry cleared (see after the inner loop) */ register mp_digit mu; mu = (mp_digit) (((W[ix] & MP_MASK) * rho) & MP_MASK); /* a = a + mu * m * b**i * * This is computed in place and on the fly. The multiplication * by b**i is handled by offseting which columns the results * are added to. * * Note the comba method normally doesn't handle carries in the * inner loop In this case we fix the carry from the previous * column since the Montgomery reduction requires digits of the * result (so far) [see above] to work. This is * handled by fixing up one carry after the inner loop. The * carry fixups are done in order so after these loops the * first m->used words of W[] have the carries fixed */ { register int iy; register mp_digit *tmpn; register mp_word *_W; /* alias for the digits of the modulus */ tmpn = n->dp; /* Alias for the columns set by an offset of ix */ _W = W + ix; /* inner loop */ for (iy = 0; iy < n->used; iy++) { *_W++ += ((mp_word)mu) * ((mp_word)*tmpn++); } } /* now fix carry for next digit, W[ix+1] */ W[ix + 1] += W[ix] >> ((mp_word) DIGIT_BIT); } /* now we have to propagate the carries and * shift the words downward [all those least * significant digits we zeroed]. */ { register mp_digit *tmpx; register mp_word *_W, *_W1; /* nox fix rest of carries */ /* alias for current word */ _W1 = W + ix; /* alias for next word, where the carry goes */ _W = W + ++ix; for (; ix <= n->used * 2 + 1; ix++) { *_W++ += *_W1++ >> ((mp_word) DIGIT_BIT); } /* copy out, A = A/b**n * * The result is A/b**n but instead of converting from an * array of mp_word to mp_digit than calling mp_rshd * we just copy them in the right order */ /* alias for destination word */ tmpx = x->dp; /* alias for shifted double precision result */ _W = W + n->used; for (ix = 0; ix < n->used + 1; ix++) { *tmpx++ = (mp_digit)(*_W++ & ((mp_word) MP_MASK)); } /* zero oldused digits, if the input a was larger than * m->used+1 we'll have to clear the digits */ for (; ix < olduse; ix++) { *tmpx++ = 0; } } /* set the max used and clamp */ x->used = n->used + 1; mp_clamp (x); /* if A >= m then A = A - m */ if (mp_cmp_mag (x, n) != MP_LT) { return s_mp_sub (x, n, x); } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_fast_s_mp_mul_digs.c000644 000765 000024 00000005270 12534342604 025032 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_FAST_S_MP_MUL_DIGS_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Fast (comba) multiplier * * This is the fast column-array [comba] multiplier. It is * designed to compute the columns of the product first * then handle the carries afterwards. This has the effect * of making the nested loops that compute the columns very * simple and schedulable on super-scalar processors. * * This has been modified to produce a variable number of * digits of output so if say only a half-product is required * you don't have to compute the upper half (a feature * required for fast Barrett reduction). * * Based on Algorithm 14.12 on pp.595 of HAC. * */ int fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) { int olduse, res, pa, ix, iz; mp_digit W[MP_WARRAY]; register mp_word _W; /* grow the destination as required */ if (c->alloc < digs) { if ((res = mp_grow (c, digs)) != MP_OKAY) { return res; } } /* number of output digits to produce */ pa = MIN(digs, a->used + b->used); /* clear the carry */ _W = 0; for (ix = 0; ix < pa; ix++) { int tx, ty; int iy; mp_digit *tmpx, *tmpy; /* get offsets into the two bignums */ ty = MIN(b->used-1, ix); tx = ix - ty; /* setup temp aliases */ tmpx = a->dp + tx; tmpy = b->dp + ty; /* this is the number of times the loop will iterrate, essentially while (tx++ < a->used && ty-- >= 0) { ... } */ iy = MIN(a->used-tx, ty+1); /* execute loop */ for (iz = 0; iz < iy; ++iz) { _W += ((mp_word)*tmpx++)*((mp_word)*tmpy--); } /* store term */ W[ix] = ((mp_digit)_W) & MP_MASK; /* make next carry */ _W = _W >> ((mp_word)DIGIT_BIT); } /* setup dest */ olduse = c->used; c->used = pa; { register mp_digit *tmpc; tmpc = c->dp; for (ix = 0; ix < pa+1; ix++) { /* now extract the previous digit [below the carry] */ *tmpc++ = W[ix]; } /* clear unused digits [that existed in the old copy of c] */ for (; ix < olduse; ix++) { *tmpc++ = 0; } } mp_clamp (c); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_fast_s_mp_mul_high_digs.c000644 000765 000024 00000004706 12534342604 026034 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_FAST_S_MP_MUL_HIGH_DIGS_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* this is a modified version of fast_s_mul_digs that only produces * output digits *above* digs. See the comments for fast_s_mul_digs * to see how it works. * * This is used in the Barrett reduction since for one of the multiplications * only the higher digits were needed. This essentially halves the work. * * Based on Algorithm 14.12 on pp.595 of HAC. */ int fast_s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) { int olduse, res, pa, ix, iz; mp_digit W[MP_WARRAY]; mp_word _W; /* grow the destination as required */ pa = a->used + b->used; if (c->alloc < pa) { if ((res = mp_grow (c, pa)) != MP_OKAY) { return res; } } /* number of output digits to produce */ pa = a->used + b->used; _W = 0; for (ix = digs; ix < pa; ix++) { int tx, ty, iy; mp_digit *tmpx, *tmpy; /* get offsets into the two bignums */ ty = MIN(b->used-1, ix); tx = ix - ty; /* setup temp aliases */ tmpx = a->dp + tx; tmpy = b->dp + ty; /* this is the number of times the loop will iterrate, essentially its while (tx++ < a->used && ty-- >= 0) { ... } */ iy = MIN(a->used-tx, ty+1); /* execute loop */ for (iz = 0; iz < iy; iz++) { _W += ((mp_word)*tmpx++)*((mp_word)*tmpy--); } /* store term */ W[ix] = ((mp_digit)_W) & MP_MASK; /* make next carry */ _W = _W >> ((mp_word)DIGIT_BIT); } /* setup dest */ olduse = c->used; c->used = pa; { register mp_digit *tmpc; tmpc = c->dp + digs; for (ix = digs; ix < pa; ix++) { /* now extract the previous digit [below the carry] */ *tmpc++ = W[ix]; } /* clear unused digits [that existed in the old copy of c] */ for (; ix < olduse; ix++) { *tmpc++ = 0; } } mp_clamp (c); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_fast_s_mp_sqr.c000644 000765 000024 00000005473 12534342604 024041 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_FAST_S_MP_SQR_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* the jist of squaring... * you do like mult except the offset of the tmpx [one that * starts closer to zero] can't equal the offset of tmpy. * So basically you set up iy like before then you min it with * (ty-tx) so that it never happens. You double all those * you add in the inner loop After that loop you do the squares and add them in. */ int fast_s_mp_sqr (mp_int * a, mp_int * b) { int olduse, res, pa, ix, iz; mp_digit W[MP_WARRAY], *tmpx; mp_word W1; /* grow the destination as required */ pa = a->used + a->used; if (b->alloc < pa) { if ((res = mp_grow (b, pa)) != MP_OKAY) { return res; } } /* number of output digits to produce */ W1 = 0; for (ix = 0; ix < pa; ix++) { int tx, ty, iy; mp_word _W; mp_digit *tmpy; /* clear counter */ _W = 0; /* get offsets into the two bignums */ ty = MIN(a->used-1, ix); tx = ix - ty; /* setup temp aliases */ tmpx = a->dp + tx; tmpy = a->dp + ty; /* this is the number of times the loop will iterrate, essentially while (tx++ < a->used && ty-- >= 0) { ... } */ iy = MIN(a->used-tx, ty+1); /* now for squaring tx can never equal ty * we halve the distance since they approach at a rate of 2x * and we have to round because odd cases need to be executed */ iy = MIN(iy, (ty-tx+1)>>1); /* execute loop */ for (iz = 0; iz < iy; iz++) { _W += ((mp_word)*tmpx++)*((mp_word)*tmpy--); } /* double the inner product and add carry */ _W = _W + _W + W1; /* even columns have the square term in them */ if ((ix&1) == 0) { _W += ((mp_word)a->dp[ix>>1])*((mp_word)a->dp[ix>>1]); } /* store it */ W[ix] = (mp_digit)(_W & MP_MASK); /* make next carry */ W1 = _W >> ((mp_word)DIGIT_BIT); } /* setup dest */ olduse = b->used; b->used = a->used+a->used; { mp_digit *tmpb; tmpb = b->dp; for (ix = 0; ix < pa; ix++) { *tmpb++ = W[ix] & MP_MASK; } /* clear unused digits [that existed in the old copy of c] */ for (; ix < olduse; ix++) { *tmpb++ = 0; } } mp_clamp (b); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_2expt.c000644 000765 000024 00000002174 12534342604 022732 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_2EXPT_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* computes a = 2**b * * Simple algorithm which zeroes the int, grows it then just sets one bit * as required. */ int mp_2expt (mp_int * a, int b) { int res; /* zero a as per default */ mp_zero (a); /* grow a to accomodate the single bit */ if ((res = mp_grow (a, b / DIGIT_BIT + 1)) != MP_OKAY) { return res; } /* set the used count of where the bit will go */ a->used = b / DIGIT_BIT + 1; /* put the single bit in its place */ a->dp[b / DIGIT_BIT] = ((mp_digit)1) << (b % DIGIT_BIT); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_abs.c000644 000765 000024 00000001651 12534342604 022434 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_ABS_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* b = |a| * * Simple function copies the input and fixes the sign to positive */ int mp_abs (mp_int * a, mp_int * b) { int res; /* copy a to b */ if (a != b) { if ((res = mp_copy (a, b)) != MP_OKAY) { return res; } } /* force the sign of b to positive */ b->sign = MP_ZPOS; return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_add.c000644 000765 000024 00000002550 12534342604 022416 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_ADD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* high level addition (handles signs) */ int mp_add (mp_int * a, mp_int * b, mp_int * c) { int sa, sb, res; /* get sign of both inputs */ sa = a->sign; sb = b->sign; /* handle two cases, not four */ if (sa == sb) { /* both positive or both negative */ /* add their magnitudes, copy the sign */ c->sign = sa; res = s_mp_add (a, b, c); } else { /* one positive, the other negative */ /* subtract the one with the greater magnitude from */ /* the one of the lesser magnitude. The result gets */ /* the sign of the one with the greater magnitude. */ if (mp_cmp_mag (a, b) == MP_LT) { c->sign = sb; res = s_mp_sub (b, a, c); } else { c->sign = sa; res = s_mp_sub (a, b, c); } } return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_add_d.c000644 000765 000024 00000004524 12534342604 022724 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_ADD_D_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* single digit addition */ int mp_add_d (mp_int * a, mp_digit b, mp_int * c) { int res, ix, oldused; mp_digit *tmpa, *tmpc, mu; /* grow c as required */ if (c->alloc < a->used + 1) { if ((res = mp_grow(c, a->used + 1)) != MP_OKAY) { return res; } } /* if a is negative and |a| >= b, call c = |a| - b */ if (a->sign == MP_NEG && (a->used > 1 || a->dp[0] >= b)) { /* temporarily fix sign of a */ a->sign = MP_ZPOS; /* c = |a| - b */ res = mp_sub_d(a, b, c); /* fix sign */ a->sign = c->sign = MP_NEG; /* clamp */ mp_clamp(c); return res; } /* old number of used digits in c */ oldused = c->used; /* sign always positive */ c->sign = MP_ZPOS; /* source alias */ tmpa = a->dp; /* destination alias */ tmpc = c->dp; /* if a is positive */ if (a->sign == MP_ZPOS) { /* add digit, after this we're propagating * the carry. */ *tmpc = *tmpa++ + b; mu = *tmpc >> DIGIT_BIT; *tmpc++ &= MP_MASK; /* now handle rest of the digits */ for (ix = 1; ix < a->used; ix++) { *tmpc = *tmpa++ + mu; mu = *tmpc >> DIGIT_BIT; *tmpc++ &= MP_MASK; } /* set final carry */ ix++; *tmpc++ = mu; /* setup size */ c->used = a->used + 1; } else { /* a was negative and |a| < b */ c->used = 1; /* the result is a single digit */ if (a->used == 1) { *tmpc++ = b - a->dp[0]; } else { *tmpc++ = b; } /* setup count so the clearing of oldused * can fall through correctly */ ix = 1; } /* now zero to oldused */ while (ix++ < oldused) { *tmpc++ = 0; } mp_clamp(c); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_addmod.c000644 000765 000024 00000001642 12534342604 023117 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_ADDMOD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* d = a + b (mod c) */ int mp_addmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) { int res; mp_int t; if ((res = mp_init (&t)) != MP_OKAY) { return res; } if ((res = mp_add (a, b, &t)) != MP_OKAY) { mp_clear (&t); return res; } res = mp_mod (&t, c, d); mp_clear (&t); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_and.c000644 000765 000024 00000002306 12534342604 022427 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_AND_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* AND two ints together */ int mp_and (mp_int * a, mp_int * b, mp_int * c) { int res, ix, px; mp_int t, *x; if (a->used > b->used) { if ((res = mp_init_copy (&t, a)) != MP_OKAY) { return res; } px = b->used; x = b; } else { if ((res = mp_init_copy (&t, b)) != MP_OKAY) { return res; } px = a->used; x = a; } for (ix = 0; ix < px; ix++) { t.dp[ix] &= x->dp[ix]; } /* zero digits above the last from the smallest mp_int */ for (; ix < t.used; ix++) { t.dp[ix] = 0; } mp_clamp (&t); mp_exch (c, &t); mp_clear (&t); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_clamp.c000644 000765 000024 00000002107 12534342604 022760 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_CLAMP_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* trim unused digits * * This is used to ensure that leading zero digits are * trimed and the leading "used" digit will be non-zero * Typically very fast. Also fixes the sign if there * are no more leading digits */ void mp_clamp (mp_int * a) { /* decrease used while the most significant digit is * zero. */ while (a->used > 0 && a->dp[a->used - 1] == 0) { --(a->used); } /* reset the sign flag if used == 0 */ if (a->used == 0) { a->sign = MP_ZPOS; } } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_clear.c000644 000765 000024 00000001765 12534342604 022763 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_CLEAR_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* clear one (frees) */ void mp_clear (mp_int * a) { int i; /* only do anything if a hasn't been freed previously */ if (a->dp != NULL) { /* first zero the digits */ for (i = 0; i < a->used; i++) { a->dp[i] = 0; } /* free ram */ XFREE(a->dp); /* reset members to make debugging easier */ a->dp = NULL; a->alloc = a->used = 0; a->sign = MP_ZPOS; } } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_clear_multi.c000644 000765 000024 00000001536 12534342604 024171 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_CLEAR_MULTI_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include void mp_clear_multi(mp_int *mp, ...) { mp_int* next_mp = mp; va_list args; va_start(args, mp); while (next_mp != NULL) { mp_clear(next_mp); next_mp = va_arg(args, mp_int*); } va_end(args); } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_cmp.c000644 000765 000024 00000001760 12534342604 022447 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_CMP_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* compare two ints (signed)*/ int mp_cmp (mp_int * a, mp_int * b) { /* compare based on sign */ if (a->sign != b->sign) { if (a->sign == MP_NEG) { return MP_LT; } else { return MP_GT; } } /* compare digits */ if (a->sign == MP_NEG) { /* if negative compare opposite direction */ return mp_cmp_mag(b, a); } else { return mp_cmp_mag(a, b); } } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_cmp_d.c000644 000765 000024 00000001733 12534342604 022752 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_CMP_D_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* compare a digit */ int mp_cmp_d(mp_int * a, mp_digit b) { /* compare based on sign */ if (a->sign == MP_NEG) { return MP_LT; } /* compare based on magnitude */ if (a->used > 1) { return MP_GT; } /* compare the only digit of a to b */ if (a->dp[0] > b) { return MP_GT; } else if (a->dp[0] < b) { return MP_LT; } else { return MP_EQ; } } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_cmp_mag.c000644 000765 000024 00000002255 12534342604 023273 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_CMP_MAG_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* compare maginitude of two ints (unsigned) */ int mp_cmp_mag (mp_int * a, mp_int * b) { int n; mp_digit *tmpa, *tmpb; /* compare based on # of non-zero digits */ if (a->used > b->used) { return MP_GT; } if (a->used < b->used) { return MP_LT; } /* alias for a */ tmpa = a->dp + (a->used - 1); /* alias for b */ tmpb = b->dp + (a->used - 1); /* compare based on digits */ for (n = 0; n < a->used; ++n, --tmpa, --tmpb) { if (*tmpa > *tmpb) { return MP_GT; } if (*tmpa < *tmpb) { return MP_LT; } } return MP_EQ; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_cnt_lsb.c000644 000765 000024 00000002274 12534342604 023315 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_CNT_LSB_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ static const int lnz[16] = { 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 }; /* Counts the number of lsbs which are zero before the first zero bit */ int mp_cnt_lsb(mp_int *a) { int x; mp_digit q, qq; /* easy out */ if (mp_iszero(a) == 1) { return 0; } /* scan lower digits until non-zero */ for (x = 0; x < a->used && a->dp[x] == 0; x++); q = a->dp[x]; x *= DIGIT_BIT; /* now scan this digit until a 1 is found */ if ((q & 1) == 0) { do { qq = q & 15; x += lnz[qq]; q >>= 4; } while (qq == 0); } return x; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_copy.c000644 000765 000024 00000002512 12534342604 022636 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_COPY_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* copy, b = a */ int mp_copy (mp_int * a, mp_int * b) { int res, n; /* if dst == src do nothing */ if (a == b) { return MP_OKAY; } /* grow dest */ if (b->alloc < a->used) { if ((res = mp_grow (b, a->used)) != MP_OKAY) { return res; } } /* zero b and copy the parameters over */ { register mp_digit *tmpa, *tmpb; /* pointer aliases */ /* source */ tmpa = a->dp; /* destination */ tmpb = b->dp; /* copy all the digits */ for (n = 0; n < a->used; n++) { *tmpb++ = *tmpa++; } /* clear high digits */ for (; n < b->used; n++) { *tmpb++ = 0; } } /* copy used count and sign */ b->used = a->used; b->sign = a->sign; return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_count_bits.c000644 000765 000024 00000001764 12534342604 024045 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_COUNT_BITS_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* returns the number of bits in an int */ int mp_count_bits (mp_int * a) { int r; mp_digit q; /* shortcut */ if (a->used == 0) { return 0; } /* get number of digits and add that */ r = (a->used - 1) * DIGIT_BIT; /* take the last digit and count the bits in it */ q = a->dp[a->used - 1]; while (q > ((mp_digit) 0)) { ++r; q >>= ((mp_digit) 1); } return r; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_div.c000644 000765 000024 00000015505 12534342604 022454 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_DIV_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #ifdef BN_MP_DIV_SMALL /* slower bit-bang division... also smaller */ int mp_div(mp_int * a, mp_int * b, mp_int * c, mp_int * d) { mp_int ta, tb, tq, q; int res, n, n2; /* is divisor zero ? */ if (mp_iszero (b) == 1) { return MP_VAL; } /* if a < b then q=0, r = a */ if (mp_cmp_mag (a, b) == MP_LT) { if (d != NULL) { res = mp_copy (a, d); } else { res = MP_OKAY; } if (c != NULL) { mp_zero (c); } return res; } /* init our temps */ if ((res = mp_init_multi(&ta, &tb, &tq, &q, NULL) != MP_OKAY)) { return res; } mp_set(&tq, 1); n = mp_count_bits(a) - mp_count_bits(b); if (((res = mp_abs(a, &ta)) != MP_OKAY) || ((res = mp_abs(b, &tb)) != MP_OKAY) || ((res = mp_mul_2d(&tb, n, &tb)) != MP_OKAY) || ((res = mp_mul_2d(&tq, n, &tq)) != MP_OKAY)) { goto LBL_ERR; } while (n-- >= 0) { if (mp_cmp(&tb, &ta) != MP_GT) { if (((res = mp_sub(&ta, &tb, &ta)) != MP_OKAY) || ((res = mp_add(&q, &tq, &q)) != MP_OKAY)) { goto LBL_ERR; } } if (((res = mp_div_2d(&tb, 1, &tb, NULL)) != MP_OKAY) || ((res = mp_div_2d(&tq, 1, &tq, NULL)) != MP_OKAY)) { goto LBL_ERR; } } /* now q == quotient and ta == remainder */ n = a->sign; n2 = (a->sign == b->sign ? MP_ZPOS : MP_NEG); if (c != NULL) { mp_exch(c, &q); c->sign = (mp_iszero(c) == MP_YES) ? MP_ZPOS : n2; } if (d != NULL) { mp_exch(d, &ta); d->sign = (mp_iszero(d) == MP_YES) ? MP_ZPOS : n; } LBL_ERR: mp_clear_multi(&ta, &tb, &tq, &q, NULL); return res; } #else /* integer signed division. * c*b + d == a [e.g. a/b, c=quotient, d=remainder] * HAC pp.598 Algorithm 14.20 * * Note that the description in HAC is horribly * incomplete. For example, it doesn't consider * the case where digits are removed from 'x' in * the inner loop. It also doesn't consider the * case that y has fewer than three digits, etc.. * * The overall algorithm is as described as * 14.20 from HAC but fixed to treat these cases. */ int mp_div (mp_int * a, mp_int * b, mp_int * c, mp_int * d) { mp_int q, x, y, t1, t2; int res, n, t, i, norm, neg; /* is divisor zero ? */ if (mp_iszero (b) == 1) { return MP_VAL; } /* if a < b then q=0, r = a */ if (mp_cmp_mag (a, b) == MP_LT) { if (d != NULL) { res = mp_copy (a, d); } else { res = MP_OKAY; } if (c != NULL) { mp_zero (c); } return res; } if ((res = mp_init_size (&q, a->used + 2)) != MP_OKAY) { return res; } q.used = a->used + 2; if ((res = mp_init (&t1)) != MP_OKAY) { goto LBL_Q; } if ((res = mp_init (&t2)) != MP_OKAY) { goto LBL_T1; } if ((res = mp_init_copy (&x, a)) != MP_OKAY) { goto LBL_T2; } if ((res = mp_init_copy (&y, b)) != MP_OKAY) { goto LBL_X; } /* fix the sign */ neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG; x.sign = y.sign = MP_ZPOS; /* normalize both x and y, ensure that y >= b/2, [b == 2**DIGIT_BIT] */ norm = mp_count_bits(&y) % DIGIT_BIT; if (norm < (int)(DIGIT_BIT-1)) { norm = (DIGIT_BIT-1) - norm; if ((res = mp_mul_2d (&x, norm, &x)) != MP_OKAY) { goto LBL_Y; } if ((res = mp_mul_2d (&y, norm, &y)) != MP_OKAY) { goto LBL_Y; } } else { norm = 0; } /* note hac does 0 based, so if used==5 then its 0,1,2,3,4, e.g. use 4 */ n = x.used - 1; t = y.used - 1; /* while (x >= y*b**n-t) do { q[n-t] += 1; x -= y*b**{n-t} } */ if ((res = mp_lshd (&y, n - t)) != MP_OKAY) { /* y = y*b**{n-t} */ goto LBL_Y; } while (mp_cmp (&x, &y) != MP_LT) { ++(q.dp[n - t]); if ((res = mp_sub (&x, &y, &x)) != MP_OKAY) { goto LBL_Y; } } /* reset y by shifting it back down */ mp_rshd (&y, n - t); /* step 3. for i from n down to (t + 1) */ for (i = n; i >= (t + 1); i--) { if (i > x.used) { continue; } /* step 3.1 if xi == yt then set q{i-t-1} to b-1, * otherwise set q{i-t-1} to (xi*b + x{i-1})/yt */ if (x.dp[i] == y.dp[t]) { q.dp[i - t - 1] = ((((mp_digit)1) << DIGIT_BIT) - 1); } else { mp_word tmp; tmp = ((mp_word) x.dp[i]) << ((mp_word) DIGIT_BIT); tmp |= ((mp_word) x.dp[i - 1]); tmp /= ((mp_word) y.dp[t]); if (tmp > (mp_word) MP_MASK) tmp = MP_MASK; q.dp[i - t - 1] = (mp_digit) (tmp & (mp_word) (MP_MASK)); } /* while (q{i-t-1} * (yt * b + y{t-1})) > xi * b**2 + xi-1 * b + xi-2 do q{i-t-1} -= 1; */ q.dp[i - t - 1] = (q.dp[i - t - 1] + 1) & MP_MASK; do { q.dp[i - t - 1] = (q.dp[i - t - 1] - 1) & MP_MASK; /* find left hand */ mp_zero (&t1); t1.dp[0] = (t - 1 < 0) ? 0 : y.dp[t - 1]; t1.dp[1] = y.dp[t]; t1.used = 2; if ((res = mp_mul_d (&t1, q.dp[i - t - 1], &t1)) != MP_OKAY) { goto LBL_Y; } /* find right hand */ t2.dp[0] = (i - 2 < 0) ? 0 : x.dp[i - 2]; t2.dp[1] = (i - 1 < 0) ? 0 : x.dp[i - 1]; t2.dp[2] = x.dp[i]; t2.used = 3; } while (mp_cmp_mag(&t1, &t2) == MP_GT); /* step 3.3 x = x - q{i-t-1} * y * b**{i-t-1} */ if ((res = mp_mul_d (&y, q.dp[i - t - 1], &t1)) != MP_OKAY) { goto LBL_Y; } if ((res = mp_lshd (&t1, i - t - 1)) != MP_OKAY) { goto LBL_Y; } if ((res = mp_sub (&x, &t1, &x)) != MP_OKAY) { goto LBL_Y; } /* if x < 0 then { x = x + y*b**{i-t-1}; q{i-t-1} -= 1; } */ if (x.sign == MP_NEG) { if ((res = mp_copy (&y, &t1)) != MP_OKAY) { goto LBL_Y; } if ((res = mp_lshd (&t1, i - t - 1)) != MP_OKAY) { goto LBL_Y; } if ((res = mp_add (&x, &t1, &x)) != MP_OKAY) { goto LBL_Y; } q.dp[i - t - 1] = (q.dp[i - t - 1] - 1UL) & MP_MASK; } } /* now q is the quotient and x is the remainder * [which we have to normalize] */ /* get sign before writing to c */ x.sign = x.used == 0 ? MP_ZPOS : a->sign; if (c != NULL) { mp_clamp (&q); mp_exch (&q, c); c->sign = neg; } if (d != NULL) { mp_div_2d (&x, norm, &x, NULL); mp_exch (&x, d); } res = MP_OKAY; LBL_Y:mp_clear (&y); LBL_X:mp_clear (&x); LBL_T2:mp_clear (&t2); LBL_T1:mp_clear (&t1); LBL_Q:mp_clear (&q); return res; } #endif #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_div_2.c000644 000765 000024 00000002752 12534342604 022675 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_DIV_2_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* b = a/2 */ int mp_div_2(mp_int * a, mp_int * b) { int x, res, oldused; /* copy */ if (b->alloc < a->used) { if ((res = mp_grow (b, a->used)) != MP_OKAY) { return res; } } oldused = b->used; b->used = a->used; { register mp_digit r, rr, *tmpa, *tmpb; /* source alias */ tmpa = a->dp + b->used - 1; /* dest alias */ tmpb = b->dp + b->used - 1; /* carry */ r = 0; for (x = b->used - 1; x >= 0; x--) { /* get the carry for the next iteration */ rr = *tmpa & 1; /* shift the current digit, add in carry and store */ *tmpb-- = (*tmpa-- >> 1) | (r << (DIGIT_BIT - 1)); /* forward carry to next iteration */ r = rr; } /* zero excess digits */ tmpb = b->dp + b->used; for (x = b->used; x < oldused; x++) { *tmpb++ = 0; } } b->sign = a->sign; mp_clamp (b); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_div_2d.c000644 000765 000024 00000004166 12534342604 023042 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_DIV_2D_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* shift right by a certain bit count (store quotient in c, optional remainder in d) */ int mp_div_2d (mp_int * a, int b, mp_int * c, mp_int * d) { mp_digit D, r, rr; int x, res; mp_int t; /* if the shift count is <= 0 then we do no work */ if (b <= 0) { res = mp_copy (a, c); if (d != NULL) { mp_zero (d); } return res; } if ((res = mp_init (&t)) != MP_OKAY) { return res; } /* get the remainder */ if (d != NULL) { if ((res = mp_mod_2d (a, b, &t)) != MP_OKAY) { mp_clear (&t); return res; } } /* copy */ if ((res = mp_copy (a, c)) != MP_OKAY) { mp_clear (&t); return res; } /* shift by as many digits in the bit count */ if (b >= (int)DIGIT_BIT) { mp_rshd (c, b / DIGIT_BIT); } /* shift any bit count < DIGIT_BIT */ D = (mp_digit) (b % DIGIT_BIT); if (D != 0) { register mp_digit *tmpc, mask, shift; /* mask */ mask = (((mp_digit)1) << D) - 1; /* shift for lsb */ shift = DIGIT_BIT - D; /* alias */ tmpc = c->dp + (c->used - 1); /* carry */ r = 0; for (x = c->used - 1; x >= 0; x--) { /* get the lower bits of this word in a temp */ rr = *tmpc & mask; /* shift the current word and mix in the carry bits from the previous word */ *tmpc = (*tmpc >> D) | (r << shift); --tmpc; /* set the carry to the carry bits of the current word found above */ r = rr; } } mp_clamp (c); if (d != NULL) { mp_exch (&t, d); } mp_clear (&t); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_div_3.c000644 000765 000024 00000003371 12534342604 022674 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_DIV_3_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* divide by three (based on routine from MPI and the GMP manual) */ int mp_div_3 (mp_int * a, mp_int *c, mp_digit * d) { mp_int q; mp_word w, t; mp_digit b; int res, ix; /* b = 2**DIGIT_BIT / 3 */ b = (((mp_word)1) << ((mp_word)DIGIT_BIT)) / ((mp_word)3); if ((res = mp_init_size(&q, a->used)) != MP_OKAY) { return res; } q.used = a->used; q.sign = a->sign; w = 0; for (ix = a->used - 1; ix >= 0; ix--) { w = (w << ((mp_word)DIGIT_BIT)) | ((mp_word)a->dp[ix]); if (w >= 3) { /* multiply w by [1/3] */ t = (w * ((mp_word)b)) >> ((mp_word)DIGIT_BIT); /* now subtract 3 * [w/3] from w, to get the remainder */ w -= t+t+t; /* fixup the remainder as required since * the optimization is not exact. */ while (w >= 3) { t += 1; w -= 3; } } else { t = 0; } q.dp[ix] = (mp_digit)t; } /* [optional] store the remainder */ if (d != NULL) { *d = (mp_digit)w; } /* [optional] store the quotient */ if (c != NULL) { mp_clamp(&q); mp_exch(&q, c); } mp_clear(&q); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_div_d.c000644 000765 000024 00000004346 12534342604 022760 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_DIV_D_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ static int s_is_power_of_two(mp_digit b, int *p) { int x; /* fast return if no power of two */ if ((b==0) || (b & (b-1))) { return 0; } for (x = 0; x < DIGIT_BIT; x++) { if (b == (((mp_digit)1)<dp[0] & ((((mp_digit)1)<used)) != MP_OKAY) { return res; } q.used = a->used; q.sign = a->sign; w = 0; for (ix = a->used - 1; ix >= 0; ix--) { w = (w << ((mp_word)DIGIT_BIT)) | ((mp_word)a->dp[ix]); if (w >= b) { t = (mp_digit)(w / b); w -= ((mp_word)t) * ((mp_word)b); } else { t = 0; } q.dp[ix] = (mp_digit)t; } if (d != NULL) { *d = (mp_digit)w; } if (c != NULL) { mp_clamp(&q); mp_exch(&q, c); } mp_clear(&q); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_dr_is_modulus.c000644 000765 000024 00000002002 12534342604 024526 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_DR_IS_MODULUS_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* determines if a number is a valid DR modulus */ int mp_dr_is_modulus(mp_int *a) { int ix; /* must be at least two digits */ if (a->used < 2) { return 0; } /* must be of the form b**k - a [a <= b] so all * but the first digit must be equal to -1 (mod b). */ for (ix = 1; ix < a->used; ix++) { if (a->dp[ix] != MP_MASK) { return 0; } } return 1; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_dr_reduce.c000644 000765 000024 00000004447 12534342604 023631 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_DR_REDUCE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* reduce "x" in place modulo "n" using the Diminished Radix algorithm. * * Based on algorithm from the paper * * "Generating Efficient Primes for Discrete Log Cryptosystems" * Chae Hoon Lim, Pil Joong Lee, * POSTECH Information Research Laboratories * * The modulus must be of a special format [see manual] * * Has been modified to use algorithm 7.10 from the LTM book instead * * Input x must be in the range 0 <= x <= (n-1)**2 */ int mp_dr_reduce (mp_int * x, mp_int * n, mp_digit k) { int err, i, m; mp_word r; mp_digit mu, *tmpx1, *tmpx2; /* m = digits in modulus */ m = n->used; /* ensure that "x" has at least 2m digits */ if (x->alloc < m + m) { if ((err = mp_grow (x, m + m)) != MP_OKAY) { return err; } } /* top of loop, this is where the code resumes if * another reduction pass is required. */ top: /* aliases for digits */ /* alias for lower half of x */ tmpx1 = x->dp; /* alias for upper half of x, or x/B**m */ tmpx2 = x->dp + m; /* set carry to zero */ mu = 0; /* compute (x mod B**m) + k * [x/B**m] inline and inplace */ for (i = 0; i < m; i++) { r = ((mp_word)*tmpx2++) * ((mp_word)k) + *tmpx1 + mu; *tmpx1++ = (mp_digit)(r & MP_MASK); mu = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); } /* set final carry */ *tmpx1++ = mu; /* zero words above m */ for (i = m + 1; i < x->used; i++) { *tmpx1++ = 0; } /* clamp, sub and return */ mp_clamp (x); /* if x >= n then subtract and reduce again * Each successive "recursion" makes the input smaller and smaller. */ if (mp_cmp_mag (x, n) != MP_LT) { s_mp_sub(x, n, x); goto top; } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_dr_setup.c000644 000765 000024 00000001607 12534342604 023515 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_DR_SETUP_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* determines the setup value */ void mp_dr_setup(mp_int *a, mp_digit *d) { /* the casts are required if DIGIT_BIT is one less than * the number of bits in a mp_digit [e.g. DIGIT_BIT==31] */ *d = (mp_digit)((((mp_word)1) << ((mp_word)DIGIT_BIT)) - ((mp_word)a->dp[0])); } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_exch.c000644 000765 000024 00000001442 12534342604 022614 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_EXCH_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* swap the elements of two integers, for cases where you can't simply swap the * mp_int pointers around */ void mp_exch (mp_int * a, mp_int * b) { mp_int t; t = *a; *a = *b; *b = t; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_expt_d.c000644 000765 000024 00000002333 12534342604 023150 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_EXPT_D_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* calculate c = a**b using a square-multiply algorithm */ int mp_expt_d (mp_int * a, mp_digit b, mp_int * c) { int res; mp_int g; if ((res = mp_init_copy (&g, a)) != MP_OKAY) { return res; } /* set initial result */ mp_set (c, 1); while (b > 0) { /* if the bit is set multiply */ if (b & 1) { if ((res = mp_mul (c, &g, c)) != MP_OKAY) { mp_clear (&g); return res; } } /* square */ if (b > 1 && (res = mp_sqr (&g, &g)) != MP_OKAY) { mp_clear (&g); return res; } /* shift to next bit */ b >>= 1; } mp_clear (&g); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_exptmod.c000644 000765 000024 00000005407 12534342604 023352 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_EXPTMOD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* this is a shell function that calls either the normal or Montgomery * exptmod functions. Originally the call to the montgomery code was * embedded in the normal function but that wasted alot of stack space * for nothing (since 99% of the time the Montgomery code would be called) */ int mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) { int dr; /* modulus P must be positive */ if (P->sign == MP_NEG) { return MP_VAL; } /* if exponent X is negative we have to recurse */ if (X->sign == MP_NEG) { #ifdef BN_MP_INVMOD_C mp_int tmpG, tmpX; int err; /* first compute 1/G mod P */ if ((err = mp_init(&tmpG)) != MP_OKAY) { return err; } if ((err = mp_invmod(G, P, &tmpG)) != MP_OKAY) { mp_clear(&tmpG); return err; } /* now get |X| */ if ((err = mp_init(&tmpX)) != MP_OKAY) { mp_clear(&tmpG); return err; } if ((err = mp_abs(X, &tmpX)) != MP_OKAY) { mp_clear_multi(&tmpG, &tmpX, NULL); return err; } /* and now compute (1/G)**|X| instead of G**X [X < 0] */ err = mp_exptmod(&tmpG, &tmpX, P, Y); mp_clear_multi(&tmpG, &tmpX, NULL); return err; #else /* no invmod */ return MP_VAL; #endif } /* modified diminished radix reduction */ #if defined(BN_MP_REDUCE_IS_2K_L_C) && defined(BN_MP_REDUCE_2K_L_C) && defined(BN_S_MP_EXPTMOD_C) if (mp_reduce_is_2k_l(P) == MP_YES) { return s_mp_exptmod(G, X, P, Y, 1); } #endif #ifdef BN_MP_DR_IS_MODULUS_C /* is it a DR modulus? */ dr = mp_dr_is_modulus(P); #else /* default to no */ dr = 0; #endif #ifdef BN_MP_REDUCE_IS_2K_C /* if not, is it a unrestricted DR modulus? */ if (dr == 0) { dr = mp_reduce_is_2k(P) << 1; } #endif /* if the modulus is odd or dr != 0 use the montgomery method */ #ifdef BN_MP_EXPTMOD_FAST_C if (mp_isodd (P) == 1 || dr != 0) { return mp_exptmod_fast (G, X, P, Y, dr); } else { #endif #ifdef BN_S_MP_EXPTMOD_C /* otherwise use the generic Barrett reduction technique */ return s_mp_exptmod (G, X, P, Y, 0); #else /* no exptmod for evens */ return MP_VAL; #endif #ifdef BN_MP_EXPTMOD_FAST_C } #endif } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_exptmod_fast.c000644 000765 000024 00000017533 12534342604 024372 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_EXPTMOD_FAST_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* computes Y == G**X mod P, HAC pp.616, Algorithm 14.85 * * Uses a left-to-right k-ary sliding window to compute the modular exponentiation. * The value of k changes based on the size of the exponent. * * Uses Montgomery or Diminished Radix reduction [whichever appropriate] */ #ifdef MP_LOW_MEM #define TAB_SIZE 32 #else #define TAB_SIZE 256 #endif int mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode) { mp_int M[TAB_SIZE], res; mp_digit buf, mp; int err, bitbuf, bitcpy, bitcnt, mode, digidx, x, y, winsize; /* use a pointer to the reduction algorithm. This allows us to use * one of many reduction algorithms without modding the guts of * the code with if statements everywhere. */ int (*redux)(mp_int*,mp_int*,mp_digit); /* find window size */ x = mp_count_bits (X); if (x <= 7) { winsize = 2; } else if (x <= 36) { winsize = 3; } else if (x <= 140) { winsize = 4; } else if (x <= 450) { winsize = 5; } else if (x <= 1303) { winsize = 6; } else if (x <= 3529) { winsize = 7; } else { winsize = 8; } #ifdef MP_LOW_MEM if (winsize > 5) { winsize = 5; } #endif /* init M array */ /* init first cell */ if ((err = mp_init(&M[1])) != MP_OKAY) { return err; } /* now init the second half of the array */ for (x = 1<<(winsize-1); x < (1 << winsize); x++) { if ((err = mp_init(&M[x])) != MP_OKAY) { for (y = 1<<(winsize-1); y < x; y++) { mp_clear (&M[y]); } mp_clear(&M[1]); return err; } } /* determine and setup reduction code */ if (redmode == 0) { #ifdef BN_MP_MONTGOMERY_SETUP_C /* now setup montgomery */ if ((err = mp_montgomery_setup (P, &mp)) != MP_OKAY) { goto LBL_M; } #else err = MP_VAL; goto LBL_M; #endif /* automatically pick the comba one if available (saves quite a few calls/ifs) */ #ifdef BN_FAST_MP_MONTGOMERY_REDUCE_C if (((P->used * 2 + 1) < MP_WARRAY) && P->used < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { redux = fast_mp_montgomery_reduce; } else #endif { #ifdef BN_MP_MONTGOMERY_REDUCE_C /* use slower baseline Montgomery method */ redux = mp_montgomery_reduce; #else err = MP_VAL; goto LBL_M; #endif } } else if (redmode == 1) { #if defined(BN_MP_DR_SETUP_C) && defined(BN_MP_DR_REDUCE_C) /* setup DR reduction for moduli of the form B**k - b */ mp_dr_setup(P, &mp); redux = mp_dr_reduce; #else err = MP_VAL; goto LBL_M; #endif } else { #if defined(BN_MP_REDUCE_2K_SETUP_C) && defined(BN_MP_REDUCE_2K_C) /* setup DR reduction for moduli of the form 2**k - b */ if ((err = mp_reduce_2k_setup(P, &mp)) != MP_OKAY) { goto LBL_M; } redux = mp_reduce_2k; #else err = MP_VAL; goto LBL_M; #endif } /* setup result */ if ((err = mp_init (&res)) != MP_OKAY) { goto LBL_M; } /* create M table * * * The first half of the table is not computed though accept for M[0] and M[1] */ if (redmode == 0) { #ifdef BN_MP_MONTGOMERY_CALC_NORMALIZATION_C /* now we need R mod m */ if ((err = mp_montgomery_calc_normalization (&res, P)) != MP_OKAY) { goto LBL_RES; } #else err = MP_VAL; goto LBL_RES; #endif /* now set M[1] to G * R mod m */ if ((err = mp_mulmod (G, &res, P, &M[1])) != MP_OKAY) { goto LBL_RES; } } else { mp_set(&res, 1); if ((err = mp_mod(G, P, &M[1])) != MP_OKAY) { goto LBL_RES; } } /* compute the value at M[1<<(winsize-1)] by squaring M[1] (winsize-1) times */ if ((err = mp_copy (&M[1], &M[1 << (winsize - 1)])) != MP_OKAY) { goto LBL_RES; } for (x = 0; x < (winsize - 1); x++) { if ((err = mp_sqr (&M[1 << (winsize - 1)], &M[1 << (winsize - 1)])) != MP_OKAY) { goto LBL_RES; } if ((err = redux (&M[1 << (winsize - 1)], P, mp)) != MP_OKAY) { goto LBL_RES; } } /* create upper table */ for (x = (1 << (winsize - 1)) + 1; x < (1 << winsize); x++) { if ((err = mp_mul (&M[x - 1], &M[1], &M[x])) != MP_OKAY) { goto LBL_RES; } if ((err = redux (&M[x], P, mp)) != MP_OKAY) { goto LBL_RES; } } /* set initial mode and bit cnt */ mode = 0; bitcnt = 1; buf = 0; digidx = X->used - 1; bitcpy = 0; bitbuf = 0; for (;;) { /* grab next digit as required */ if (--bitcnt == 0) { /* if digidx == -1 we are out of digits so break */ if (digidx == -1) { break; } /* read next digit and reset bitcnt */ buf = X->dp[digidx--]; bitcnt = (int)DIGIT_BIT; } /* grab the next msb from the exponent */ y = (mp_digit)(buf >> (DIGIT_BIT - 1)) & 1; buf <<= (mp_digit)1; /* if the bit is zero and mode == 0 then we ignore it * These represent the leading zero bits before the first 1 bit * in the exponent. Technically this opt is not required but it * does lower the # of trivial squaring/reductions used */ if (mode == 0 && y == 0) { continue; } /* if the bit is zero and mode == 1 then we square */ if (mode == 1 && y == 0) { if ((err = mp_sqr (&res, &res)) != MP_OKAY) { goto LBL_RES; } if ((err = redux (&res, P, mp)) != MP_OKAY) { goto LBL_RES; } continue; } /* else we add it to the window */ bitbuf |= (y << (winsize - ++bitcpy)); mode = 2; if (bitcpy == winsize) { /* ok window is filled so square as required and multiply */ /* square first */ for (x = 0; x < winsize; x++) { if ((err = mp_sqr (&res, &res)) != MP_OKAY) { goto LBL_RES; } if ((err = redux (&res, P, mp)) != MP_OKAY) { goto LBL_RES; } } /* then multiply */ if ((err = mp_mul (&res, &M[bitbuf], &res)) != MP_OKAY) { goto LBL_RES; } if ((err = redux (&res, P, mp)) != MP_OKAY) { goto LBL_RES; } /* empty window and reset */ bitcpy = 0; bitbuf = 0; mode = 1; } } /* if bits remain then square/multiply */ if (mode == 2 && bitcpy > 0) { /* square then multiply if the bit is set */ for (x = 0; x < bitcpy; x++) { if ((err = mp_sqr (&res, &res)) != MP_OKAY) { goto LBL_RES; } if ((err = redux (&res, P, mp)) != MP_OKAY) { goto LBL_RES; } /* get next bit of the window */ bitbuf <<= 1; if ((bitbuf & (1 << winsize)) != 0) { /* then multiply */ if ((err = mp_mul (&res, &M[1], &res)) != MP_OKAY) { goto LBL_RES; } if ((err = redux (&res, P, mp)) != MP_OKAY) { goto LBL_RES; } } } } if (redmode == 0) { /* fixup result if Montgomery reduction is used * recall that any value in a Montgomery system is * actually multiplied by R mod n. So we have * to reduce one more time to cancel out the factor * of R. */ if ((err = redux(&res, P, mp)) != MP_OKAY) { goto LBL_RES; } } /* swap res with Y */ mp_exch (&res, Y); err = MP_OKAY; LBL_RES:mp_clear (&res); LBL_M: mp_clear(&M[1]); for (x = 1<<(winsize-1); x < (1 << winsize); x++) { mp_clear (&M[x]); } return err; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_exteuclid.c000644 000765 000024 00000006113 12534342604 023653 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_EXTEUCLID_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Extended euclidean algorithm of (a, b) produces a*u1 + b*u2 = u3 */ int mp_exteuclid(mp_int *a, mp_int *b, mp_int *U1, mp_int *U2, mp_int *U3) { mp_int u1,u2,u3,v1,v2,v3,t1,t2,t3,q,tmp; int err; if ((err = mp_init_multi(&u1, &u2, &u3, &v1, &v2, &v3, &t1, &t2, &t3, &q, &tmp, NULL)) != MP_OKAY) { return err; } /* initialize, (u1,u2,u3) = (1,0,a) */ mp_set(&u1, 1); if ((err = mp_copy(a, &u3)) != MP_OKAY) { goto _ERR; } /* initialize, (v1,v2,v3) = (0,1,b) */ mp_set(&v2, 1); if ((err = mp_copy(b, &v3)) != MP_OKAY) { goto _ERR; } /* loop while v3 != 0 */ while (mp_iszero(&v3) == MP_NO) { /* q = u3/v3 */ if ((err = mp_div(&u3, &v3, &q, NULL)) != MP_OKAY) { goto _ERR; } /* (t1,t2,t3) = (u1,u2,u3) - (v1,v2,v3)q */ if ((err = mp_mul(&v1, &q, &tmp)) != MP_OKAY) { goto _ERR; } if ((err = mp_sub(&u1, &tmp, &t1)) != MP_OKAY) { goto _ERR; } if ((err = mp_mul(&v2, &q, &tmp)) != MP_OKAY) { goto _ERR; } if ((err = mp_sub(&u2, &tmp, &t2)) != MP_OKAY) { goto _ERR; } if ((err = mp_mul(&v3, &q, &tmp)) != MP_OKAY) { goto _ERR; } if ((err = mp_sub(&u3, &tmp, &t3)) != MP_OKAY) { goto _ERR; } /* (u1,u2,u3) = (v1,v2,v3) */ if ((err = mp_copy(&v1, &u1)) != MP_OKAY) { goto _ERR; } if ((err = mp_copy(&v2, &u2)) != MP_OKAY) { goto _ERR; } if ((err = mp_copy(&v3, &u3)) != MP_OKAY) { goto _ERR; } /* (v1,v2,v3) = (t1,t2,t3) */ if ((err = mp_copy(&t1, &v1)) != MP_OKAY) { goto _ERR; } if ((err = mp_copy(&t2, &v2)) != MP_OKAY) { goto _ERR; } if ((err = mp_copy(&t3, &v3)) != MP_OKAY) { goto _ERR; } } /* make sure U3 >= 0 */ if (u3.sign == MP_NEG) { mp_neg(&u1, &u1); mp_neg(&u2, &u2); mp_neg(&u3, &u3); } /* copy result out */ if (U1 != NULL) { mp_exch(U1, &u1); } if (U2 != NULL) { mp_exch(U2, &u2); } if (U3 != NULL) { mp_exch(U3, &u3); } err = MP_OKAY; _ERR: mp_clear_multi(&u1, &u2, &u3, &v1, &v2, &v3, &t1, &t2, &t3, &q, &tmp, NULL); return err; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_fread.c000644 000765 000024 00000002705 12534342604 022751 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_FREAD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* read a bigint from a file stream in ASCII */ int mp_fread(mp_int *a, int radix, FILE *stream) { int err, ch, neg, y; /* clear a */ mp_zero(a); /* if first digit is - then set negative */ ch = fgetc(stream); if (ch == '-') { neg = MP_NEG; ch = fgetc(stream); } else { neg = MP_ZPOS; } for (;;) { /* find y in the radix map */ for (y = 0; y < radix; y++) { if (mp_s_rmap[y] == ch) { break; } } if (y == radix) { break; } /* shift up and add */ if ((err = mp_mul_d(a, radix, a)) != MP_OKAY) { return err; } if ((err = mp_add_d(a, y, a)) != MP_OKAY) { return err; } ch = fgetc(stream); } if (mp_cmp_d(a, 0) != MP_EQ) { a->sign = neg; } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_fwrite.c000644 000765 000024 00000002174 12534342604 023170 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_FWRITE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ int mp_fwrite(mp_int *a, int radix, FILE *stream) { char *buf; int err, len, x; if ((err = mp_radix_size(a, radix, &len)) != MP_OKAY) { return err; } buf = OPT_CAST(char) XMALLOC (len); if (buf == NULL) { return MP_MEM; } if ((err = mp_toradix(a, buf, radix)) != MP_OKAY) { XFREE (buf); return err; } for (x = 0; x < len; x++) { if (fputc(buf[x], stream) == EOF) { XFREE (buf); return MP_VAL; } } XFREE (buf); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_gcd.c000644 000765 000024 00000004765 12534342604 022435 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_GCD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Greatest Common Divisor using the binary method */ int mp_gcd (mp_int * a, mp_int * b, mp_int * c) { mp_int u, v; int k, u_lsb, v_lsb, res; /* either zero than gcd is the largest */ if (mp_iszero (a) == MP_YES) { return mp_abs (b, c); } if (mp_iszero (b) == MP_YES) { return mp_abs (a, c); } /* get copies of a and b we can modify */ if ((res = mp_init_copy (&u, a)) != MP_OKAY) { return res; } if ((res = mp_init_copy (&v, b)) != MP_OKAY) { goto LBL_U; } /* must be positive for the remainder of the algorithm */ u.sign = v.sign = MP_ZPOS; /* B1. Find the common power of two for u and v */ u_lsb = mp_cnt_lsb(&u); v_lsb = mp_cnt_lsb(&v); k = MIN(u_lsb, v_lsb); if (k > 0) { /* divide the power of two out */ if ((res = mp_div_2d(&u, k, &u, NULL)) != MP_OKAY) { goto LBL_V; } if ((res = mp_div_2d(&v, k, &v, NULL)) != MP_OKAY) { goto LBL_V; } } /* divide any remaining factors of two out */ if (u_lsb != k) { if ((res = mp_div_2d(&u, u_lsb - k, &u, NULL)) != MP_OKAY) { goto LBL_V; } } if (v_lsb != k) { if ((res = mp_div_2d(&v, v_lsb - k, &v, NULL)) != MP_OKAY) { goto LBL_V; } } while (mp_iszero(&v) == 0) { /* make sure v is the largest */ if (mp_cmp_mag(&u, &v) == MP_GT) { /* swap u and v to make sure v is >= u */ mp_exch(&u, &v); } /* subtract smallest from largest */ if ((res = s_mp_sub(&v, &u, &v)) != MP_OKAY) { goto LBL_V; } /* Divide out all factors of two */ if ((res = mp_div_2d(&v, mp_cnt_lsb(&v), &v, NULL)) != MP_OKAY) { goto LBL_V; } } /* multiply by 2**k which we divided out at the beginning */ if ((res = mp_mul_2d (&u, k, c)) != MP_OKAY) { goto LBL_V; } c->sign = MP_ZPOS; res = MP_OKAY; LBL_V:mp_clear (&u); LBL_U:mp_clear (&v); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_get_int.c000644 000765 000024 00000002201 12534342604 023310 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_GET_INT_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* get the lower 32-bits of an mp_int */ unsigned long mp_get_int(mp_int * a) { int i; unsigned long res; if (a->used == 0) { return 0; } /* get number of digits of the lsb we have to read */ i = MIN(a->used,(int)((sizeof(unsigned long)*CHAR_BIT+DIGIT_BIT-1)/DIGIT_BIT))-1; /* get most significant digit of result */ res = DIGIT(a,i); while (--i >= 0) { res = (res << DIGIT_BIT) | DIGIT(a,i); } /* force result to 32-bits always so it is consistent on non 32-bit platforms */ return res & 0xFFFFFFFFUL; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_get_long.c000644 000765 000024 00000002012 12534342604 023455 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_GET_INT_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* get the lower unsigned long of an mp_int, platform dependent */ unsigned long mp_get_long(mp_int * a) { int i; unsigned long res; if (a->used == 0) { return 0; } /* get number of digits of the lsb we have to read */ i = MIN(a->used,(int)((sizeof(unsigned long)*CHAR_BIT+DIGIT_BIT-1)/DIGIT_BIT))-1; /* get most significant digit of result */ res = DIGIT(a,i); while (--i >= 0) { res = (res << DIGIT_BIT) | DIGIT(a,i); } return res; } #endif nqp-2015.11/3rdparty/libtommath/bn_mp_grow.c000644 000765 000024 00000002726 12534342604 022651 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_GROW_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* grow as required */ int mp_grow (mp_int * a, int size) { int i; mp_digit *tmp; /* if the alloc size is smaller alloc more ram */ if (a->alloc < size) { /* ensure there are always at least MP_PREC digits extra on top */ size += (MP_PREC * 2) - (size % MP_PREC); /* reallocate the array a->dp * * We store the return in a temporary variable * in case the operation failed we don't want * to overwrite the dp member of a. */ tmp = OPT_CAST(mp_digit) XREALLOC (a->dp, sizeof (mp_digit) * size); if (tmp == NULL) { /* reallocation failed but "a" is still valid [can be freed] */ return MP_MEM; } /* reallocation succeeded so set a->dp */ a->dp = tmp; /* zero excess digits */ i = a->alloc; a->alloc = size; for (; i < a->alloc; i++) { a->dp[i] = 0; } } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_init.c000644 000765 000024 00000002106 12534342604 022626 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_INIT_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* init a new mp_int */ int mp_init (mp_int * a) { int i; /* allocate memory required and clear it */ a->dp = OPT_CAST(mp_digit) XMALLOC (sizeof (mp_digit) * MP_PREC); if (a->dp == NULL) { return MP_MEM; } /* set the digits to zero */ for (i = 0; i < MP_PREC; i++) { a->dp[i] = 0; } /* set the used to zero, allocated digits to the default precision * and sign to positive */ a->used = 0; a->alloc = MP_PREC; a->sign = MP_ZPOS; return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_init_copy.c000644 000765 000024 00000001433 12534342604 023662 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_INIT_COPY_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* creates "a" then copies b into it */ int mp_init_copy (mp_int * a, mp_int * b) { int res; if ((res = mp_init (a)) != MP_OKAY) { return res; } return mp_copy (b, a); } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_init_multi.c000644 000765 000024 00000003312 12534342604 024040 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_INIT_MULTI_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include int mp_init_multi(mp_int *mp, ...) { mp_err res = MP_OKAY; /* Assume ok until proven otherwise */ int n = 0; /* Number of ok inits */ mp_int* cur_arg = mp; va_list args; va_start(args, mp); /* init args to next argument from caller */ while (cur_arg != NULL) { if (mp_init(cur_arg) != MP_OKAY) { /* Oops - error! Back-track and mp_clear what we already succeeded in init-ing, then return error. */ va_list clean_args; /* end the current list */ va_end(args); /* now start cleaning up */ cur_arg = mp; va_start(clean_args, mp); while (n--) { mp_clear(cur_arg); cur_arg = va_arg(clean_args, mp_int*); } va_end(clean_args); res = MP_MEM; break; } n++; cur_arg = va_arg(args, mp_int*); } va_end(args); return res; /* Assumed ok, if error flagged above. */ } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_init_set.c000644 000765 000024 00000001422 12534342604 023501 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_INIT_SET_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* initialize and set a digit */ int mp_init_set (mp_int * a, mp_digit b) { int err; if ((err = mp_init(a)) != MP_OKAY) { return err; } mp_set(a, b); return err; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_init_set_int.c000644 000765 000024 00000001434 12534342604 024356 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_INIT_SET_INT_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* initialize and set a digit */ int mp_init_set_int (mp_int * a, unsigned long b) { int err; if ((err = mp_init(a)) != MP_OKAY) { return err; } return mp_set_int(a, b); } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_init_size.c000644 000765 000024 00000002125 12534342604 023661 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_INIT_SIZE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* init an mp_init for a given size */ int mp_init_size (mp_int * a, int size) { int x; /* pad size so there are always extra digits */ size += (MP_PREC * 2) - (size % MP_PREC); /* alloc mem */ a->dp = OPT_CAST(mp_digit) XMALLOC (sizeof (mp_digit) * size); if (a->dp == NULL) { return MP_MEM; } /* set the members */ a->used = 0; a->alloc = size; a->sign = MP_ZPOS; /* zero the digits */ for (x = 0; x < size; x++) { a->dp[x] = 0; } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_invmod.c000644 000765 000024 00000002017 12534342604 023160 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_INVMOD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* hac 14.61, pp608 */ int mp_invmod (mp_int * a, mp_int * b, mp_int * c) { /* b cannot be negative */ if (b->sign == MP_NEG || mp_iszero(b) == 1) { return MP_VAL; } #ifdef BN_FAST_MP_INVMOD_C /* if the modulus is odd we can use a faster routine instead */ if (mp_isodd (b) == 1) { return fast_mp_invmod (a, b, c); } #endif #ifdef BN_MP_INVMOD_SLOW_C return mp_invmod_slow(a, b, c); #endif return MP_VAL; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_invmod_slow.c000644 000765 000024 00000007760 12534342604 024236 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_INVMOD_SLOW_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* hac 14.61, pp608 */ int mp_invmod_slow (mp_int * a, mp_int * b, mp_int * c) { mp_int x, y, u, v, A, B, C, D; int res; /* b cannot be negative */ if (b->sign == MP_NEG || mp_iszero(b) == 1) { return MP_VAL; } /* init temps */ if ((res = mp_init_multi(&x, &y, &u, &v, &A, &B, &C, &D, NULL)) != MP_OKAY) { return res; } /* x = a, y = b */ if ((res = mp_mod(a, b, &x)) != MP_OKAY) { goto LBL_ERR; } if ((res = mp_copy (b, &y)) != MP_OKAY) { goto LBL_ERR; } /* 2. [modified] if x,y are both even then return an error! */ if (mp_iseven (&x) == 1 && mp_iseven (&y) == 1) { res = MP_VAL; goto LBL_ERR; } /* 3. u=x, v=y, A=1, B=0, C=0,D=1 */ if ((res = mp_copy (&x, &u)) != MP_OKAY) { goto LBL_ERR; } if ((res = mp_copy (&y, &v)) != MP_OKAY) { goto LBL_ERR; } mp_set (&A, 1); mp_set (&D, 1); top: /* 4. while u is even do */ while (mp_iseven (&u) == 1) { /* 4.1 u = u/2 */ if ((res = mp_div_2 (&u, &u)) != MP_OKAY) { goto LBL_ERR; } /* 4.2 if A or B is odd then */ if (mp_isodd (&A) == 1 || mp_isodd (&B) == 1) { /* A = (A+y)/2, B = (B-x)/2 */ if ((res = mp_add (&A, &y, &A)) != MP_OKAY) { goto LBL_ERR; } if ((res = mp_sub (&B, &x, &B)) != MP_OKAY) { goto LBL_ERR; } } /* A = A/2, B = B/2 */ if ((res = mp_div_2 (&A, &A)) != MP_OKAY) { goto LBL_ERR; } if ((res = mp_div_2 (&B, &B)) != MP_OKAY) { goto LBL_ERR; } } /* 5. while v is even do */ while (mp_iseven (&v) == 1) { /* 5.1 v = v/2 */ if ((res = mp_div_2 (&v, &v)) != MP_OKAY) { goto LBL_ERR; } /* 5.2 if C or D is odd then */ if (mp_isodd (&C) == 1 || mp_isodd (&D) == 1) { /* C = (C+y)/2, D = (D-x)/2 */ if ((res = mp_add (&C, &y, &C)) != MP_OKAY) { goto LBL_ERR; } if ((res = mp_sub (&D, &x, &D)) != MP_OKAY) { goto LBL_ERR; } } /* C = C/2, D = D/2 */ if ((res = mp_div_2 (&C, &C)) != MP_OKAY) { goto LBL_ERR; } if ((res = mp_div_2 (&D, &D)) != MP_OKAY) { goto LBL_ERR; } } /* 6. if u >= v then */ if (mp_cmp (&u, &v) != MP_LT) { /* u = u - v, A = A - C, B = B - D */ if ((res = mp_sub (&u, &v, &u)) != MP_OKAY) { goto LBL_ERR; } if ((res = mp_sub (&A, &C, &A)) != MP_OKAY) { goto LBL_ERR; } if ((res = mp_sub (&B, &D, &B)) != MP_OKAY) { goto LBL_ERR; } } else { /* v - v - u, C = C - A, D = D - B */ if ((res = mp_sub (&v, &u, &v)) != MP_OKAY) { goto LBL_ERR; } if ((res = mp_sub (&C, &A, &C)) != MP_OKAY) { goto LBL_ERR; } if ((res = mp_sub (&D, &B, &D)) != MP_OKAY) { goto LBL_ERR; } } /* if not zero goto step 4 */ if (mp_iszero (&u) == 0) goto top; /* now a = C, b = D, gcd == g*v */ /* if v != 1 then there is no inverse */ if (mp_cmp_d (&v, 1) != MP_EQ) { res = MP_VAL; goto LBL_ERR; } /* if its too low */ while (mp_cmp_d(&C, 0) == MP_LT) { if ((res = mp_add(&C, b, &C)) != MP_OKAY) { goto LBL_ERR; } } /* too big */ while (mp_cmp_mag(&C, b) != MP_LT) { if ((res = mp_sub(&C, b, &C)) != MP_OKAY) { goto LBL_ERR; } } /* C is now the inverse */ mp_exch (&C, c); res = MP_OKAY; LBL_ERR:mp_clear_multi (&x, &y, &u, &v, &A, &B, &C, &D, NULL); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_is_square.c000644 000765 000024 00000006116 12534342604 023663 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_IS_SQUARE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Check if remainders are possible squares - fast exclude non-squares */ static const char rem_128[128] = { 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 }; static const char rem_105[105] = { 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1 }; /* Store non-zero to ret if arg is square, and zero if not */ int mp_is_square(mp_int *arg,int *ret) { int res; mp_digit c; mp_int t; unsigned long r; /* Default to Non-square :) */ *ret = MP_NO; if (arg->sign == MP_NEG) { return MP_VAL; } /* digits used? (TSD) */ if (arg->used == 0) { return MP_OKAY; } /* First check mod 128 (suppose that DIGIT_BIT is at least 7) */ if (rem_128[127 & DIGIT(arg,0)] == 1) { return MP_OKAY; } /* Next check mod 105 (3*5*7) */ if ((res = mp_mod_d(arg,105,&c)) != MP_OKAY) { return res; } if (rem_105[c] == 1) { return MP_OKAY; } if ((res = mp_init_set_int(&t,11L*13L*17L*19L*23L*29L*31L)) != MP_OKAY) { return res; } if ((res = mp_mod(arg,&t,&t)) != MP_OKAY) { goto ERR; } r = mp_get_int(&t); /* Check for other prime modules, note it's not an ERROR but we must * free "t" so the easiest way is to goto ERR. We know that res * is already equal to MP_OKAY from the mp_mod call */ if ( (1L<<(r%11)) & 0x5C4L ) goto ERR; if ( (1L<<(r%13)) & 0x9E4L ) goto ERR; if ( (1L<<(r%17)) & 0x5CE8L ) goto ERR; if ( (1L<<(r%19)) & 0x4F50CL ) goto ERR; if ( (1L<<(r%23)) & 0x7ACCA0L ) goto ERR; if ( (1L<<(r%29)) & 0xC2EDD0CL ) goto ERR; if ( (1L<<(r%31)) & 0x6DE2B848L ) goto ERR; /* Final check - is sqr(sqrt(arg)) == arg ? */ if ((res = mp_sqrt(arg,&t)) != MP_OKAY) { goto ERR; } if ((res = mp_sqr(&t,&t)) != MP_OKAY) { goto ERR; } *ret = (mp_cmp_mag(&t,arg) == MP_EQ) ? MP_YES : MP_NO; ERR:mp_clear(&t); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_jacobi.c000644 000765 000024 00000004355 12534342604 023122 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_JACOBI_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* computes the jacobi c = (a | n) (or Legendre if n is prime) * HAC pp. 73 Algorithm 2.149 */ int mp_jacobi (mp_int * a, mp_int * p, int *c) { mp_int a1, p1; int k, s, r, res; mp_digit residue; /* if p <= 0 return MP_VAL */ if (mp_cmp_d(p, 0) != MP_GT) { return MP_VAL; } /* step 1. if a == 0, return 0 */ if (mp_iszero (a) == 1) { *c = 0; return MP_OKAY; } /* step 2. if a == 1, return 1 */ if (mp_cmp_d (a, 1) == MP_EQ) { *c = 1; return MP_OKAY; } /* default */ s = 0; /* step 3. write a = a1 * 2**k */ if ((res = mp_init_copy (&a1, a)) != MP_OKAY) { return res; } if ((res = mp_init (&p1)) != MP_OKAY) { goto LBL_A1; } /* divide out larger power of two */ k = mp_cnt_lsb(&a1); if ((res = mp_div_2d(&a1, k, &a1, NULL)) != MP_OKAY) { goto LBL_P1; } /* step 4. if e is even set s=1 */ if ((k & 1) == 0) { s = 1; } else { /* else set s=1 if p = 1/7 (mod 8) or s=-1 if p = 3/5 (mod 8) */ residue = p->dp[0] & 7; if (residue == 1 || residue == 7) { s = 1; } else if (residue == 3 || residue == 5) { s = -1; } } /* step 5. if p == 3 (mod 4) *and* a1 == 3 (mod 4) then s = -s */ if ( ((p->dp[0] & 3) == 3) && ((a1.dp[0] & 3) == 3)) { s = -s; } /* if a1 == 1 we're done */ if (mp_cmp_d (&a1, 1) == MP_EQ) { *c = s; } else { /* n1 = n mod a1 */ if ((res = mp_mod (p, &a1, &p1)) != MP_OKAY) { goto LBL_P1; } if ((res = mp_jacobi (&p1, &a1, &r)) != MP_OKAY) { goto LBL_P1; } *c = s * r; } /* done */ res = MP_OKAY; LBL_P1:mp_clear (&p1); LBL_A1:mp_clear (&a1); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_karatsuba_mul.c000644 000765 000024 00000011301 12534342604 024512 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_KARATSUBA_MUL_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* c = |a| * |b| using Karatsuba Multiplication using * three half size multiplications * * Let B represent the radix [e.g. 2**DIGIT_BIT] and * let n represent half of the number of digits in * the min(a,b) * * a = a1 * B**n + a0 * b = b1 * B**n + b0 * * Then, a * b => a1b1 * B**2n + ((a1 + a0)(b1 + b0) - (a0b0 + a1b1)) * B + a0b0 * * Note that a1b1 and a0b0 are used twice and only need to be * computed once. So in total three half size (half # of * digit) multiplications are performed, a0b0, a1b1 and * (a1+b1)(a0+b0) * * Note that a multiplication of half the digits requires * 1/4th the number of single precision multiplications so in * total after one call 25% of the single precision multiplications * are saved. Note also that the call to mp_mul can end up back * in this function if the a0, a1, b0, or b1 are above the threshold. * This is known as divide-and-conquer and leads to the famous * O(N**lg(3)) or O(N**1.584) work which is asymptopically lower than * the standard O(N**2) that the baseline/comba methods use. * Generally though the overhead of this method doesn't pay off * until a certain size (N ~ 80) is reached. */ int mp_karatsuba_mul (mp_int * a, mp_int * b, mp_int * c) { mp_int x0, x1, y0, y1, t1, x0y0, x1y1; int B, err; /* default the return code to an error */ err = MP_MEM; /* min # of digits */ B = MIN (a->used, b->used); /* now divide in two */ B = B >> 1; /* init copy all the temps */ if (mp_init_size (&x0, B) != MP_OKAY) goto ERR; if (mp_init_size (&x1, a->used - B) != MP_OKAY) goto X0; if (mp_init_size (&y0, B) != MP_OKAY) goto X1; if (mp_init_size (&y1, b->used - B) != MP_OKAY) goto Y0; /* init temps */ if (mp_init_size (&t1, B * 2) != MP_OKAY) goto Y1; if (mp_init_size (&x0y0, B * 2) != MP_OKAY) goto T1; if (mp_init_size (&x1y1, B * 2) != MP_OKAY) goto X0Y0; /* now shift the digits */ x0.used = y0.used = B; x1.used = a->used - B; y1.used = b->used - B; { register int x; register mp_digit *tmpa, *tmpb, *tmpx, *tmpy; /* we copy the digits directly instead of using higher level functions * since we also need to shift the digits */ tmpa = a->dp; tmpb = b->dp; tmpx = x0.dp; tmpy = y0.dp; for (x = 0; x < B; x++) { *tmpx++ = *tmpa++; *tmpy++ = *tmpb++; } tmpx = x1.dp; for (x = B; x < a->used; x++) { *tmpx++ = *tmpa++; } tmpy = y1.dp; for (x = B; x < b->used; x++) { *tmpy++ = *tmpb++; } } /* only need to clamp the lower words since by definition the * upper words x1/y1 must have a known number of digits */ mp_clamp (&x0); mp_clamp (&y0); /* now calc the products x0y0 and x1y1 */ /* after this x0 is no longer required, free temp [x0==t2]! */ if (mp_mul (&x0, &y0, &x0y0) != MP_OKAY) goto X1Y1; /* x0y0 = x0*y0 */ if (mp_mul (&x1, &y1, &x1y1) != MP_OKAY) goto X1Y1; /* x1y1 = x1*y1 */ /* now calc x1+x0 and y1+y0 */ if (s_mp_add (&x1, &x0, &t1) != MP_OKAY) goto X1Y1; /* t1 = x1 - x0 */ if (s_mp_add (&y1, &y0, &x0) != MP_OKAY) goto X1Y1; /* t2 = y1 - y0 */ if (mp_mul (&t1, &x0, &t1) != MP_OKAY) goto X1Y1; /* t1 = (x1 + x0) * (y1 + y0) */ /* add x0y0 */ if (mp_add (&x0y0, &x1y1, &x0) != MP_OKAY) goto X1Y1; /* t2 = x0y0 + x1y1 */ if (s_mp_sub (&t1, &x0, &t1) != MP_OKAY) goto X1Y1; /* t1 = (x1+x0)*(y1+y0) - (x1y1 + x0y0) */ /* shift by B */ if (mp_lshd (&t1, B) != MP_OKAY) goto X1Y1; /* t1 = (x0y0 + x1y1 - (x1-x0)*(y1-y0))< #ifdef BN_MP_KARATSUBA_SQR_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Karatsuba squaring, computes b = a*a using three * half size squarings * * See comments of karatsuba_mul for details. It * is essentially the same algorithm but merely * tuned to perform recursive squarings. */ int mp_karatsuba_sqr (mp_int * a, mp_int * b) { mp_int x0, x1, t1, t2, x0x0, x1x1; int B, err; err = MP_MEM; /* min # of digits */ B = a->used; /* now divide in two */ B = B >> 1; /* init copy all the temps */ if (mp_init_size (&x0, B) != MP_OKAY) goto ERR; if (mp_init_size (&x1, a->used - B) != MP_OKAY) goto X0; /* init temps */ if (mp_init_size (&t1, a->used * 2) != MP_OKAY) goto X1; if (mp_init_size (&t2, a->used * 2) != MP_OKAY) goto T1; if (mp_init_size (&x0x0, B * 2) != MP_OKAY) goto T2; if (mp_init_size (&x1x1, (a->used - B) * 2) != MP_OKAY) goto X0X0; { register int x; register mp_digit *dst, *src; src = a->dp; /* now shift the digits */ dst = x0.dp; for (x = 0; x < B; x++) { *dst++ = *src++; } dst = x1.dp; for (x = B; x < a->used; x++) { *dst++ = *src++; } } x0.used = B; x1.used = a->used - B; mp_clamp (&x0); /* now calc the products x0*x0 and x1*x1 */ if (mp_sqr (&x0, &x0x0) != MP_OKAY) goto X1X1; /* x0x0 = x0*x0 */ if (mp_sqr (&x1, &x1x1) != MP_OKAY) goto X1X1; /* x1x1 = x1*x1 */ /* now calc (x1+x0)**2 */ if (s_mp_add (&x1, &x0, &t1) != MP_OKAY) goto X1X1; /* t1 = x1 - x0 */ if (mp_sqr (&t1, &t1) != MP_OKAY) goto X1X1; /* t1 = (x1 - x0) * (x1 - x0) */ /* add x0y0 */ if (s_mp_add (&x0x0, &x1x1, &t2) != MP_OKAY) goto X1X1; /* t2 = x0x0 + x1x1 */ if (s_mp_sub (&t1, &t2, &t1) != MP_OKAY) goto X1X1; /* t1 = (x1+x0)**2 - (x0x0 + x1x1) */ /* shift by B */ if (mp_lshd (&t1, B) != MP_OKAY) goto X1X1; /* t1 = (x0x0 + x1x1 - (x1-x0)*(x1-x0))< #ifdef BN_MP_LCM_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* computes least common multiple as |a*b|/(a, b) */ int mp_lcm (mp_int * a, mp_int * b, mp_int * c) { int res; mp_int t1, t2; if ((res = mp_init_multi (&t1, &t2, NULL)) != MP_OKAY) { return res; } /* t1 = get the GCD of the two inputs */ if ((res = mp_gcd (a, b, &t1)) != MP_OKAY) { goto LBL_T; } /* divide the smallest by the GCD */ if (mp_cmp_mag(a, b) == MP_LT) { /* store quotient in t2 such that t2 * b is the LCM */ if ((res = mp_div(a, &t1, &t2, NULL)) != MP_OKAY) { goto LBL_T; } res = mp_mul(b, &t2, c); } else { /* store quotient in t2 such that t2 * a is the LCM */ if ((res = mp_div(b, &t1, &t2, NULL)) != MP_OKAY) { goto LBL_T; } res = mp_mul(a, &t2, c); } /* fix the sign to positive */ c->sign = MP_ZPOS; LBL_T: mp_clear_multi (&t1, &t2, NULL); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_lshd.c000644 000765 000024 00000003035 12534342604 022617 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_LSHD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* shift left a certain amount of digits */ int mp_lshd (mp_int * a, int b) { int x, res; /* if its less than zero return */ if (b <= 0) { return MP_OKAY; } /* grow to fit the new digits */ if (a->alloc < a->used + b) { if ((res = mp_grow (a, a->used + b)) != MP_OKAY) { return res; } } { register mp_digit *top, *bottom; /* increment the used by the shift amount then copy upwards */ a->used += b; /* top */ top = a->dp + a->used - 1; /* base */ bottom = a->dp + a->used - 1 - b; /* much like mp_rshd this is implemented using a sliding window * except the window goes the otherway around. Copying from * the bottom to the top. see bn_mp_rshd.c for more info. */ for (x = a->used - 1; x >= b; x--) { *top-- = *bottom--; } /* zero the lower digits */ top = a->dp; for (x = 0; x < b; x++) { *top++ = 0; } } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_mod.c000644 000765 000024 00000002003 12534342604 022436 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_MOD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* c = a mod b, 0 <= c < b */ int mp_mod (mp_int * a, mp_int * b, mp_int * c) { mp_int t; int res; if ((res = mp_init (&t)) != MP_OKAY) { return res; } if ((res = mp_div (a, b, NULL, &t)) != MP_OKAY) { mp_clear (&t); return res; } if (mp_iszero(&t) || t.sign == b->sign) { res = MP_OKAY; mp_exch (&t, c); } else { res = mp_add (b, &t, c); } mp_clear (&t); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_mod_2d.c000644 000765 000024 00000002572 12534342604 023036 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_MOD_2D_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* calc a value mod 2**b */ int mp_mod_2d (mp_int * a, int b, mp_int * c) { int x, res; /* if b is <= 0 then zero the int */ if (b <= 0) { mp_zero (c); return MP_OKAY; } /* if the modulus is larger than the value than return */ if (b >= (int) (a->used * DIGIT_BIT)) { res = mp_copy (a, c); return res; } /* copy */ if ((res = mp_copy (a, c)) != MP_OKAY) { return res; } /* zero digits above the last digit of the modulus */ for (x = (b / DIGIT_BIT) + ((b % DIGIT_BIT) == 0 ? 0 : 1); x < c->used; x++) { c->dp[x] = 0; } /* clear the digit that is not completely outside/inside the modulus */ c->dp[b / DIGIT_BIT] &= (mp_digit) ((((mp_digit) 1) << (((mp_digit) b) % DIGIT_BIT)) - ((mp_digit) 1)); mp_clamp (c); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_mod_d.c000644 000765 000024 00000001266 12534342604 022753 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_MOD_D_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ int mp_mod_d (mp_int * a, mp_digit b, mp_digit * c) { return mp_div_d(a, b, NULL, c); } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_montgomery_calc_normalization.c000644 000765 000024 00000002751 12534342604 030021 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_MONTGOMERY_CALC_NORMALIZATION_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* * shifts with subtractions when the result is greater than b. * * The method is slightly modified to shift B unconditionally upto just under * the leading bit of b. This saves alot of multiple precision shifting. */ int mp_montgomery_calc_normalization (mp_int * a, mp_int * b) { int x, bits, res; /* how many bits of last digit does b use */ bits = mp_count_bits (b) % DIGIT_BIT; if (b->used > 1) { if ((res = mp_2expt (a, (b->used - 1) * DIGIT_BIT + bits - 1)) != MP_OKAY) { return res; } } else { mp_set(a, 1); bits = 1; } /* now compute C = A * B mod b */ for (x = bits - 1; x < (int)DIGIT_BIT; x++) { if ((res = mp_mul_2 (a, a)) != MP_OKAY) { return res; } if (mp_cmp_mag (a, b) != MP_LT) { if ((res = s_mp_sub (a, b, a)) != MP_OKAY) { return res; } } } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_montgomery_reduce.c000644 000765 000024 00000005741 12534342604 025422 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_MONTGOMERY_REDUCE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* computes xR**-1 == x (mod N) via Montgomery Reduction */ int mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) { int ix, res, digs; mp_digit mu; /* can the fast reduction [comba] method be used? * * Note that unlike in mul you're safely allowed *less* * than the available columns [255 per default] since carries * are fixed up in the inner loop. */ digs = n->used * 2 + 1; if ((digs < MP_WARRAY) && n->used < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { return fast_mp_montgomery_reduce (x, n, rho); } /* grow the input as required */ if (x->alloc < digs) { if ((res = mp_grow (x, digs)) != MP_OKAY) { return res; } } x->used = digs; for (ix = 0; ix < n->used; ix++) { /* mu = ai * rho mod b * * The value of rho must be precalculated via * montgomery_setup() such that * it equals -1/n0 mod b this allows the * following inner loop to reduce the * input one digit at a time */ mu = (mp_digit) (((mp_word)x->dp[ix]) * ((mp_word)rho) & MP_MASK); /* a = a + mu * m * b**i */ { register int iy; register mp_digit *tmpn, *tmpx, u; register mp_word r; /* alias for digits of the modulus */ tmpn = n->dp; /* alias for the digits of x [the input] */ tmpx = x->dp + ix; /* set the carry to zero */ u = 0; /* Multiply and add in place */ for (iy = 0; iy < n->used; iy++) { /* compute product and sum */ r = ((mp_word)mu) * ((mp_word)*tmpn++) + ((mp_word) u) + ((mp_word) * tmpx); /* get carry */ u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); /* fix digit */ *tmpx++ = (mp_digit)(r & ((mp_word) MP_MASK)); } /* At this point the ix'th digit of x should be zero */ /* propagate carries upwards as required*/ while (u) { *tmpx += u; u = *tmpx >> DIGIT_BIT; *tmpx++ &= MP_MASK; } } } /* at this point the n.used'th least * significant digits of x are all zero * which means we can shift x to the * right by n.used digits and the * residue is unchanged. */ /* x = x/b**n.used */ mp_clamp(x); mp_rshd (x, n->used); /* if x >= n then x = x - n */ if (mp_cmp_mag (x, n) != MP_LT) { return s_mp_sub (x, n, x); } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_montgomery_setup.c000644 000765 000024 00000003021 12534342604 025300 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_MONTGOMERY_SETUP_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* setups the montgomery reduction stuff */ int mp_montgomery_setup (mp_int * n, mp_digit * rho) { mp_digit x, b; /* fast inversion mod 2**k * * Based on the fact that * * XA = 1 (mod 2**n) => (X(2-XA)) A = 1 (mod 2**2n) * => 2*X*A - X*X*A*A = 1 * => 2*(1) - (1) = 1 */ b = n->dp[0]; if ((b & 1) == 0) { return MP_VAL; } x = (((b + 2) & 4) << 1) + b; /* here x*a==1 mod 2**4 */ x *= 2 - b * x; /* here x*a==1 mod 2**8 */ #if !defined(MP_8BIT) x *= 2 - b * x; /* here x*a==1 mod 2**16 */ #endif #if defined(MP_64BIT) || !(defined(MP_8BIT) || defined(MP_16BIT)) x *= 2 - b * x; /* here x*a==1 mod 2**32 */ #endif #ifdef MP_64BIT x *= 2 - b * x; /* here x*a==1 mod 2**64 */ #endif /* rho = -1/m mod b */ *rho = (unsigned long)(((mp_word)1 << ((mp_word) DIGIT_BIT)) - x) & MP_MASK; return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_mul.c000644 000765 000024 00000003330 12534342605 022461 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_MUL_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* high level multiplication (handles sign) */ int mp_mul (mp_int * a, mp_int * b, mp_int * c) { int res, neg; neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG; /* use Toom-Cook? */ #ifdef BN_MP_TOOM_MUL_C if (MIN (a->used, b->used) >= TOOM_MUL_CUTOFF) { res = mp_toom_mul(a, b, c); } else #endif #ifdef BN_MP_KARATSUBA_MUL_C /* use Karatsuba? */ if (MIN (a->used, b->used) >= KARATSUBA_MUL_CUTOFF) { res = mp_karatsuba_mul (a, b, c); } else #endif { /* can we use the fast multiplier? * * The fast multiplier can be used if the output will * have less than MP_WARRAY digits and the number of * digits won't affect carry propagation */ int digs = a->used + b->used + 1; #ifdef BN_FAST_S_MP_MUL_DIGS_C if ((digs < MP_WARRAY) && MIN(a->used, b->used) <= (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { res = fast_s_mp_mul_digs (a, b, c, digs); } else #endif #ifdef BN_S_MP_MUL_DIGS_C res = s_mp_mul (a, b, c); /* uses s_mp_mul_digs */ #else res = MP_VAL; #endif } c->sign = (c->used > 0) ? neg : MP_ZPOS; return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_mul_2.c000644 000765 000024 00000003543 12534342605 022710 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_MUL_2_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* b = a*2 */ int mp_mul_2(mp_int * a, mp_int * b) { int x, res, oldused; /* grow to accomodate result */ if (b->alloc < a->used + 1) { if ((res = mp_grow (b, a->used + 1)) != MP_OKAY) { return res; } } oldused = b->used; b->used = a->used; { register mp_digit r, rr, *tmpa, *tmpb; /* alias for source */ tmpa = a->dp; /* alias for dest */ tmpb = b->dp; /* carry */ r = 0; for (x = 0; x < a->used; x++) { /* get what will be the *next* carry bit from the * MSB of the current digit */ rr = *tmpa >> ((mp_digit)(DIGIT_BIT - 1)); /* now shift up this digit, add in the carry [from the previous] */ *tmpb++ = ((*tmpa++ << ((mp_digit)1)) | r) & MP_MASK; /* copy the carry that would be from the source * digit into the next iteration */ r = rr; } /* new leading digit? */ if (r != 0) { /* add a MSB which is always 1 at this point */ *tmpb = 1; ++(b->used); } /* now zero any excess digits on the destination * that we didn't write to */ tmpb = b->dp + b->used; for (x = b->used; x < oldused; x++) { *tmpb++ = 0; } } b->sign = a->sign; return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_mul_2d.c000644 000765 000024 00000003631 12534342605 023052 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_MUL_2D_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* shift left by a certain bit count */ int mp_mul_2d (mp_int * a, int b, mp_int * c) { mp_digit d; int res; /* copy */ if (a != c) { if ((res = mp_copy (a, c)) != MP_OKAY) { return res; } } if (c->alloc < (int)(c->used + b/DIGIT_BIT + 1)) { if ((res = mp_grow (c, c->used + b / DIGIT_BIT + 1)) != MP_OKAY) { return res; } } /* shift by as many digits in the bit count */ if (b >= (int)DIGIT_BIT) { if ((res = mp_lshd (c, b / DIGIT_BIT)) != MP_OKAY) { return res; } } /* shift any bit count < DIGIT_BIT */ d = (mp_digit) (b % DIGIT_BIT); if (d != 0) { register mp_digit *tmpc, shift, mask, r, rr; register int x; /* bitmask for carries */ mask = (((mp_digit)1) << d) - 1; /* shift for msbs */ shift = DIGIT_BIT - d; /* alias */ tmpc = c->dp; /* carry */ r = 0; for (x = 0; x < c->used; x++) { /* get the higher bits of the current word */ rr = (*tmpc >> shift) & mask; /* shift the current word and OR in the carry */ *tmpc = ((*tmpc << d) | r) & MP_MASK; ++tmpc; /* set the carry to the carry bits of the current word */ r = rr; } /* set final carry */ if (r != 0) { c->dp[(c->used)++] = r; } } mp_clamp (c); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_mul_d.c000644 000765 000024 00000003406 12534342605 022770 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_MUL_D_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* multiply by a digit */ int mp_mul_d (mp_int * a, mp_digit b, mp_int * c) { mp_digit u, *tmpa, *tmpc; mp_word r; int ix, res, olduse; /* make sure c is big enough to hold a*b */ if (c->alloc < a->used + 1) { if ((res = mp_grow (c, a->used + 1)) != MP_OKAY) { return res; } } /* get the original destinations used count */ olduse = c->used; /* set the sign */ c->sign = a->sign; /* alias for a->dp [source] */ tmpa = a->dp; /* alias for c->dp [dest] */ tmpc = c->dp; /* zero carry */ u = 0; /* compute columns */ for (ix = 0; ix < a->used; ix++) { /* compute product and carry sum for this term */ r = ((mp_word) u) + ((mp_word)*tmpa++) * ((mp_word)b); /* mask off higher bits to get a single digit */ *tmpc++ = (mp_digit) (r & ((mp_word) MP_MASK)); /* send carry into next iteration */ u = (mp_digit) (r >> ((mp_word) DIGIT_BIT)); } /* store final carry [if any] and increment ix offset */ *tmpc++ = u; ++ix; /* now zero digits above the top */ while (ix++ < olduse) { *tmpc++ = 0; } /* set used count */ c->used = a->used + 1; mp_clamp(c); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_mulmod.c000644 000765 000024 00000001642 12534342605 023165 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_MULMOD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* d = a * b (mod c) */ int mp_mulmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) { int res; mp_int t; if ((res = mp_init (&t)) != MP_OKAY) { return res; } if ((res = mp_mul (a, b, &t)) != MP_OKAY) { mp_clear (&t); return res; } res = mp_mod (&t, c, d); mp_clear (&t); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_n_root.c000644 000765 000024 00000005526 12534342605 023175 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_N_ROOT_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* find the n'th root of an integer * * Result found such that (c)**b <= a and (c+1)**b > a * * This algorithm uses Newton's approximation * x[i+1] = x[i] - f(x[i])/f'(x[i]) * which will find the root in log(N) time where * each step involves a fair bit. This is not meant to * find huge roots [square and cube, etc]. */ int mp_n_root (mp_int * a, mp_digit b, mp_int * c) { mp_int t1, t2, t3; int res, neg; /* input must be positive if b is even */ if ((b & 1) == 0 && a->sign == MP_NEG) { return MP_VAL; } if ((res = mp_init (&t1)) != MP_OKAY) { return res; } if ((res = mp_init (&t2)) != MP_OKAY) { goto LBL_T1; } if ((res = mp_init (&t3)) != MP_OKAY) { goto LBL_T2; } /* if a is negative fudge the sign but keep track */ neg = a->sign; a->sign = MP_ZPOS; /* t2 = 2 */ mp_set (&t2, 2); do { /* t1 = t2 */ if ((res = mp_copy (&t2, &t1)) != MP_OKAY) { goto LBL_T3; } /* t2 = t1 - ((t1**b - a) / (b * t1**(b-1))) */ /* t3 = t1**(b-1) */ if ((res = mp_expt_d (&t1, b - 1, &t3)) != MP_OKAY) { goto LBL_T3; } /* numerator */ /* t2 = t1**b */ if ((res = mp_mul (&t3, &t1, &t2)) != MP_OKAY) { goto LBL_T3; } /* t2 = t1**b - a */ if ((res = mp_sub (&t2, a, &t2)) != MP_OKAY) { goto LBL_T3; } /* denominator */ /* t3 = t1**(b-1) * b */ if ((res = mp_mul_d (&t3, b, &t3)) != MP_OKAY) { goto LBL_T3; } /* t3 = (t1**b - a)/(b * t1**(b-1)) */ if ((res = mp_div (&t2, &t3, &t3, NULL)) != MP_OKAY) { goto LBL_T3; } if ((res = mp_sub (&t1, &t3, &t2)) != MP_OKAY) { goto LBL_T3; } } while (mp_cmp (&t1, &t2) != MP_EQ); /* result can be off by a few so check */ for (;;) { if ((res = mp_expt_d (&t1, b, &t2)) != MP_OKAY) { goto LBL_T3; } if (mp_cmp (&t2, a) == MP_GT) { if ((res = mp_sub_d (&t1, 1, &t1)) != MP_OKAY) { goto LBL_T3; } } else { break; } } /* reset the sign of a first */ a->sign = neg; /* set the result */ mp_exch (&t1, c); /* set the sign of the result */ c->sign = neg; res = MP_OKAY; LBL_T3:mp_clear (&t3); LBL_T2:mp_clear (&t2); LBL_T1:mp_clear (&t1); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_neg.c000644 000765 000024 00000001616 12534342605 022442 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_NEG_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* b = -a */ int mp_neg (mp_int * a, mp_int * b) { int res; if (a != b) { if ((res = mp_copy (a, b)) != MP_OKAY) { return res; } } if (mp_iszero(b) != MP_YES) { b->sign = (a->sign == MP_ZPOS) ? MP_NEG : MP_ZPOS; } else { b->sign = MP_ZPOS; } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_or.c000644 000765 000024 00000002121 12534342605 022301 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_OR_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* OR two ints together */ int mp_or (mp_int * a, mp_int * b, mp_int * c) { int res, ix, px; mp_int t, *x; if (a->used > b->used) { if ((res = mp_init_copy (&t, a)) != MP_OKAY) { return res; } px = b->used; x = b; } else { if ((res = mp_init_copy (&t, b)) != MP_OKAY) { return res; } px = a->used; x = a; } for (ix = 0; ix < px; ix++) { t.dp[ix] |= x->dp[ix]; } mp_clamp (&t); mp_exch (c, &t); mp_clear (&t); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_prime_fermat.c000644 000765 000024 00000002653 12534342605 024345 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_PRIME_FERMAT_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* performs one Fermat test. * * If "a" were prime then b**a == b (mod a) since the order of * the multiplicative sub-group would be phi(a) = a-1. That means * it would be the same as b**(a mod (a-1)) == b**1 == b (mod a). * * Sets result to 1 if the congruence holds, or zero otherwise. */ int mp_prime_fermat (mp_int * a, mp_int * b, int *result) { mp_int t; int err; /* default to composite */ *result = MP_NO; /* ensure b > 1 */ if (mp_cmp_d(b, 1) != MP_GT) { return MP_VAL; } /* init t */ if ((err = mp_init (&t)) != MP_OKAY) { return err; } /* compute t = b**a mod a */ if ((err = mp_exptmod (b, a, a, &t)) != MP_OKAY) { goto LBL_T; } /* is it equal to b? */ if (mp_cmp (&t, b) == MP_EQ) { *result = MP_YES; } err = MP_OKAY; LBL_T:mp_clear (&t); return err; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_prime_is_divisible.c000644 000765 000024 00000002244 12534342605 025530 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_PRIME_IS_DIVISIBLE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* determines if an integers is divisible by one * of the first PRIME_SIZE primes or not * * sets result to 0 if not, 1 if yes */ int mp_prime_is_divisible (mp_int * a, int *result) { int err, ix; mp_digit res; /* default to not */ *result = MP_NO; for (ix = 0; ix < PRIME_SIZE; ix++) { /* what is a mod LBL_prime_tab[ix] */ if ((err = mp_mod_d (a, ltm_prime_tab[ix], &res)) != MP_OKAY) { return err; } /* is the residue zero? */ if (res == 0) { *result = MP_YES; return MP_OKAY; } } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_prime_is_prime.c000644 000765 000024 00000003500 12534342605 024666 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_PRIME_IS_PRIME_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* performs a variable number of rounds of Miller-Rabin * * Probability of error after t rounds is no more than * * Sets result to 1 if probably prime, 0 otherwise */ int mp_prime_is_prime (mp_int * a, int t, int *result) { mp_int b; int ix, err, res; /* default to no */ *result = MP_NO; /* valid value of t? */ if (t <= 0 || t > PRIME_SIZE) { return MP_VAL; } /* is the input equal to one of the primes in the table? */ for (ix = 0; ix < PRIME_SIZE; ix++) { if (mp_cmp_d(a, ltm_prime_tab[ix]) == MP_EQ) { *result = 1; return MP_OKAY; } } /* first perform trial division */ if ((err = mp_prime_is_divisible (a, &res)) != MP_OKAY) { return err; } /* return if it was trivially divisible */ if (res == MP_YES) { return MP_OKAY; } /* now perform the miller-rabin rounds */ if ((err = mp_init (&b)) != MP_OKAY) { return err; } for (ix = 0; ix < t; ix++) { /* set the prime */ mp_set (&b, ltm_prime_tab[ix]); if ((err = mp_prime_miller_rabin (a, &b, &res)) != MP_OKAY) { goto LBL_B; } if (res == MP_NO) { goto LBL_B; } } /* passed the test */ *result = MP_YES; LBL_B:mp_clear (&b); return err; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_prime_miller_rabin.c000644 000765 000024 00000004511 12534342605 025521 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_PRIME_MILLER_RABIN_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Miller-Rabin test of "a" to the base of "b" as described in * HAC pp. 139 Algorithm 4.24 * * Sets result to 0 if definitely composite or 1 if probably prime. * Randomly the chance of error is no more than 1/4 and often * very much lower. */ int mp_prime_miller_rabin (mp_int * a, mp_int * b, int *result) { mp_int n1, y, r; int s, j, err; /* default */ *result = MP_NO; /* ensure b > 1 */ if (mp_cmp_d(b, 1) != MP_GT) { return MP_VAL; } /* get n1 = a - 1 */ if ((err = mp_init_copy (&n1, a)) != MP_OKAY) { return err; } if ((err = mp_sub_d (&n1, 1, &n1)) != MP_OKAY) { goto LBL_N1; } /* set 2**s * r = n1 */ if ((err = mp_init_copy (&r, &n1)) != MP_OKAY) { goto LBL_N1; } /* count the number of least significant bits * which are zero */ s = mp_cnt_lsb(&r); /* now divide n - 1 by 2**s */ if ((err = mp_div_2d (&r, s, &r, NULL)) != MP_OKAY) { goto LBL_R; } /* compute y = b**r mod a */ if ((err = mp_init (&y)) != MP_OKAY) { goto LBL_R; } if ((err = mp_exptmod (b, &r, a, &y)) != MP_OKAY) { goto LBL_Y; } /* if y != 1 and y != n1 do */ if (mp_cmp_d (&y, 1) != MP_EQ && mp_cmp (&y, &n1) != MP_EQ) { j = 1; /* while j <= s-1 and y != n1 */ while ((j <= (s - 1)) && mp_cmp (&y, &n1) != MP_EQ) { if ((err = mp_sqrmod (&y, a, &y)) != MP_OKAY) { goto LBL_Y; } /* if y == 1 then composite */ if (mp_cmp_d (&y, 1) == MP_EQ) { goto LBL_Y; } ++j; } /* if y != n1 then composite */ if (mp_cmp (&y, &n1) != MP_EQ) { goto LBL_Y; } } /* probably prime now */ *result = MP_YES; LBL_Y:mp_clear (&y); LBL_R:mp_clear (&r); LBL_N1:mp_clear (&n1); return err; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_prime_next_prime.c000644 000765 000024 00000011144 12534342605 025234 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_PRIME_NEXT_PRIME_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* finds the next prime after the number "a" using "t" trials * of Miller-Rabin. * * bbs_style = 1 means the prime must be congruent to 3 mod 4 */ int mp_prime_next_prime(mp_int *a, int t, int bbs_style) { int err, res, x, y; mp_digit res_tab[PRIME_SIZE], step, kstep; mp_int b; /* ensure t is valid */ if (t <= 0 || t > PRIME_SIZE) { return MP_VAL; } /* force positive */ a->sign = MP_ZPOS; /* simple algo if a is less than the largest prime in the table */ if (mp_cmp_d(a, ltm_prime_tab[PRIME_SIZE-1]) == MP_LT) { /* find which prime it is bigger than */ for (x = PRIME_SIZE - 2; x >= 0; x--) { if (mp_cmp_d(a, ltm_prime_tab[x]) != MP_LT) { if (bbs_style == 1) { /* ok we found a prime smaller or * equal [so the next is larger] * * however, the prime must be * congruent to 3 mod 4 */ if ((ltm_prime_tab[x + 1] & 3) != 3) { /* scan upwards for a prime congruent to 3 mod 4 */ for (y = x + 1; y < PRIME_SIZE; y++) { if ((ltm_prime_tab[y] & 3) == 3) { mp_set(a, ltm_prime_tab[y]); return MP_OKAY; } } } } else { mp_set(a, ltm_prime_tab[x + 1]); return MP_OKAY; } } } /* at this point a maybe 1 */ if (mp_cmp_d(a, 1) == MP_EQ) { mp_set(a, 2); return MP_OKAY; } /* fall through to the sieve */ } /* generate a prime congruent to 3 mod 4 or 1/3 mod 4? */ if (bbs_style == 1) { kstep = 4; } else { kstep = 2; } /* at this point we will use a combination of a sieve and Miller-Rabin */ if (bbs_style == 1) { /* if a mod 4 != 3 subtract the correct value to make it so */ if ((a->dp[0] & 3) != 3) { if ((err = mp_sub_d(a, (a->dp[0] & 3) + 1, a)) != MP_OKAY) { return err; }; } } else { if (mp_iseven(a) == 1) { /* force odd */ if ((err = mp_sub_d(a, 1, a)) != MP_OKAY) { return err; } } } /* generate the restable */ for (x = 1; x < PRIME_SIZE; x++) { if ((err = mp_mod_d(a, ltm_prime_tab[x], res_tab + x)) != MP_OKAY) { return err; } } /* init temp used for Miller-Rabin Testing */ if ((err = mp_init(&b)) != MP_OKAY) { return err; } for (;;) { /* skip to the next non-trivially divisible candidate */ step = 0; do { /* y == 1 if any residue was zero [e.g. cannot be prime] */ y = 0; /* increase step to next candidate */ step += kstep; /* compute the new residue without using division */ for (x = 1; x < PRIME_SIZE; x++) { /* add the step to each residue */ res_tab[x] += kstep; /* subtract the modulus [instead of using division] */ if (res_tab[x] >= ltm_prime_tab[x]) { res_tab[x] -= ltm_prime_tab[x]; } /* set flag if zero */ if (res_tab[x] == 0) { y = 1; } } } while (y == 1 && step < ((((mp_digit)1)<= ((((mp_digit)1)< #ifdef BN_MP_PRIME_RABIN_MILLER_TRIALS_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ static const struct { int k, t; } sizes[] = { { 128, 28 }, { 256, 16 }, { 384, 10 }, { 512, 7 }, { 640, 6 }, { 768, 5 }, { 896, 4 }, { 1024, 4 } }; /* returns # of RM trials required for a given bit size */ int mp_prime_rabin_miller_trials(int size) { int x; for (x = 0; x < (int)(sizeof(sizes)/(sizeof(sizes[0]))); x++) { if (sizes[x].k == size) { return sizes[x].t; } else if (sizes[x].k > size) { return (x == 0) ? sizes[0].t : sizes[x - 1].t; } } return sizes[x-1].t + 1; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_prime_random_ex.c000644 000765 000024 00000007034 12534342605 025041 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_PRIME_RANDOM_EX_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* makes a truly random prime of a given size (bits), * * Flags are as follows: * * LTM_PRIME_BBS - make prime congruent to 3 mod 4 * LTM_PRIME_SAFE - make sure (p-1)/2 is prime as well (implies LTM_PRIME_BBS) * LTM_PRIME_2MSB_ON - make the 2nd highest bit one * * You have to supply a callback which fills in a buffer with random bytes. "dat" is a parameter you can * have passed to the callback (e.g. a state or something). This function doesn't use "dat" itself * so it can be NULL * */ /* This is possibly the mother of all prime generation functions, muahahahahaha! */ int mp_prime_random_ex(mp_int *a, int t, int size, int flags, ltm_prime_callback cb, void *dat) { unsigned char *tmp, maskAND, maskOR_msb, maskOR_lsb; int res, err, bsize, maskOR_msb_offset; /* sanity check the input */ if (size <= 1 || t <= 0) { return MP_VAL; } /* LTM_PRIME_SAFE implies LTM_PRIME_BBS */ if (flags & LTM_PRIME_SAFE) { flags |= LTM_PRIME_BBS; } /* calc the byte size */ bsize = (size>>3) + ((size&7)?1:0); /* we need a buffer of bsize bytes */ tmp = OPT_CAST(unsigned char) XMALLOC(bsize); if (tmp == NULL) { return MP_MEM; } /* calc the maskAND value for the MSbyte*/ maskAND = ((size&7) == 0) ? 0xFF : (0xFF >> (8 - (size & 7))); /* calc the maskOR_msb */ maskOR_msb = 0; maskOR_msb_offset = ((size & 7) == 1) ? 1 : 0; if (flags & LTM_PRIME_2MSB_ON) { maskOR_msb |= 0x80 >> ((9 - size) & 7); } /* get the maskOR_lsb */ maskOR_lsb = 1; if (flags & LTM_PRIME_BBS) { maskOR_lsb |= 3; } do { /* read the bytes */ if (cb(tmp, bsize, dat) != bsize) { err = MP_VAL; goto error; } /* work over the MSbyte */ tmp[0] &= maskAND; tmp[0] |= 1 << ((size - 1) & 7); /* mix in the maskORs */ tmp[maskOR_msb_offset] |= maskOR_msb; tmp[bsize-1] |= maskOR_lsb; /* read it in */ if ((err = mp_read_unsigned_bin(a, tmp, bsize)) != MP_OKAY) { goto error; } /* is it prime? */ if ((err = mp_prime_is_prime(a, t, &res)) != MP_OKAY) { goto error; } if (res == MP_NO) { continue; } if (flags & LTM_PRIME_SAFE) { /* see if (a-1)/2 is prime */ if ((err = mp_sub_d(a, 1, a)) != MP_OKAY) { goto error; } if ((err = mp_div_2(a, a)) != MP_OKAY) { goto error; } /* is it prime? */ if ((err = mp_prime_is_prime(a, t, &res)) != MP_OKAY) { goto error; } } } while (res == MP_NO); if (flags & LTM_PRIME_SAFE) { /* restore a to the original value */ if ((err = mp_mul_2(a, a)) != MP_OKAY) { goto error; } if ((err = mp_add_d(a, 1, a)) != MP_OKAY) { goto error; } } err = MP_OKAY; error: XFREE(tmp); return err; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_radix_size.c000644 000765 000024 00000003257 12534342605 024035 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_RADIX_SIZE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* returns size of ASCII reprensentation */ int mp_radix_size (mp_int * a, int radix, int *size) { int res, digs; mp_int t; mp_digit d; *size = 0; /* make sure the radix is in range */ if (radix < 2 || radix > 64) { return MP_VAL; } if (mp_iszero(a) == MP_YES) { *size = 2; return MP_OKAY; } /* special case for binary */ if (radix == 2) { *size = mp_count_bits (a) + (a->sign == MP_NEG ? 1 : 0) + 1; return MP_OKAY; } /* digs is the digit count */ digs = 0; /* if it's negative add one for the sign */ if (a->sign == MP_NEG) { ++digs; } /* init a copy of the input */ if ((res = mp_init_copy (&t, a)) != MP_OKAY) { return res; } /* force temp to positive */ t.sign = MP_ZPOS; /* fetch out all of the digits */ while (mp_iszero (&t) == MP_NO) { if ((res = mp_div_d (&t, (mp_digit) radix, &t, &d)) != MP_OKAY) { mp_clear (&t); return res; } ++digs; } mp_clear (&t); /* return digs + 1, the 1 is for the NULL byte that would be required. */ *size = digs + 1; return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_radix_smap.c000644 000765 000024 00000001343 12534342605 024015 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_RADIX_SMAP_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* chars used in radix conversions */ const char *mp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_rand.c000644 000765 000024 00000002261 12534342605 022612 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_RAND_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* makes a pseudo-random int of a given size */ int mp_rand (mp_int * a, int digits) { int res; mp_digit d; mp_zero (a); if (digits <= 0) { return MP_OKAY; } /* first place a random non-zero digit */ do { d = ((mp_digit) abs (MP_GEN_RANDOM())) & MP_MASK; } while (d == 0); if ((res = mp_add_d (a, d, a)) != MP_OKAY) { return res; } while (--digits > 0) { if ((res = mp_lshd (a, 1)) != MP_OKAY) { return res; } if ((res = mp_add_d (a, ((mp_digit) abs (MP_GEN_RANDOM())), a)) != MP_OKAY) { return res; } } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_read_radix.c000644 000765 000024 00000003716 12534342605 023776 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_READ_RADIX_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* read a string [ASCII] in a given radix */ int mp_read_radix (mp_int * a, const char *str, int radix) { int y, res, neg; char ch; /* zero the digit bignum */ mp_zero(a); /* make sure the radix is ok */ if (radix < 2 || radix > 64) { return MP_VAL; } /* if the leading digit is a * minus set the sign to negative. */ if (*str == '-') { ++str; neg = MP_NEG; } else { neg = MP_ZPOS; } /* set the integer to the default of zero */ mp_zero (a); /* process each digit of the string */ while (*str) { /* if the radix < 36 the conversion is case insensitive * this allows numbers like 1AB and 1ab to represent the same value * [e.g. in hex] */ ch = (char) ((radix < 36) ? toupper ((int)*str) : *str); for (y = 0; y < 64; y++) { if (ch == mp_s_rmap[y]) { break; } } /* if the char was found in the map * and is less than the given radix add it * to the number, otherwise exit the loop. */ if (y < radix) { if ((res = mp_mul_d (a, (mp_digit) radix, a)) != MP_OKAY) { return res; } if ((res = mp_add_d (a, (mp_digit) y, a)) != MP_OKAY) { return res; } } else { break; } ++str; } /* set the sign only if a != 0 */ if (mp_iszero(a) != 1) { a->sign = neg; } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_read_signed_bin.c000644 000765 000024 00000002030 12534342605 024754 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_READ_SIGNED_BIN_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* read signed bin, big endian, first byte is 0==positive or 1==negative */ int mp_read_signed_bin (mp_int * a, const unsigned char *b, int c) { int res; /* read magnitude */ if ((res = mp_read_unsigned_bin (a, b + 1, c - 1)) != MP_OKAY) { return res; } /* first byte is 0 for positive, non-zero for negative */ if (b[0] == 0) { a->sign = MP_ZPOS; } else { a->sign = MP_NEG; } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_read_unsigned_bin.c000644 000765 000024 00000002414 12534342605 025325 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_READ_UNSIGNED_BIN_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* reads a unsigned char array, assumes the msb is stored first [big endian] */ int mp_read_unsigned_bin (mp_int * a, const unsigned char *b, int c) { int res; /* make sure there are at least two digits */ if (a->alloc < 2) { if ((res = mp_grow(a, 2)) != MP_OKAY) { return res; } } /* zero the int */ mp_zero (a); /* read the bytes in */ while (c-- > 0) { if ((res = mp_mul_2d (a, 8, a)) != MP_OKAY) { return res; } #ifndef MP_8BIT a->dp[0] |= *b++; a->used += 1; #else a->dp[0] = (*b & MP_MASK); a->dp[1] |= ((*b++ >> 7U) & 1); a->used += 2; #endif } mp_clamp (a); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_reduce.c000644 000765 000024 00000004465 12534342605 023145 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_REDUCE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* reduces x mod m, assumes 0 < x < m**2, mu is * precomputed via mp_reduce_setup. * From HAC pp.604 Algorithm 14.42 */ int mp_reduce (mp_int * x, mp_int * m, mp_int * mu) { mp_int q; int res, um = m->used; /* q = x */ if ((res = mp_init_copy (&q, x)) != MP_OKAY) { return res; } /* q1 = x / b**(k-1) */ mp_rshd (&q, um - 1); /* according to HAC this optimization is ok */ if (((unsigned long) um) > (((mp_digit)1) << (DIGIT_BIT - 1))) { if ((res = mp_mul (&q, mu, &q)) != MP_OKAY) { goto CLEANUP; } } else { #ifdef BN_S_MP_MUL_HIGH_DIGS_C if ((res = s_mp_mul_high_digs (&q, mu, &q, um)) != MP_OKAY) { goto CLEANUP; } #elif defined(BN_FAST_S_MP_MUL_HIGH_DIGS_C) if ((res = fast_s_mp_mul_high_digs (&q, mu, &q, um)) != MP_OKAY) { goto CLEANUP; } #else { res = MP_VAL; goto CLEANUP; } #endif } /* q3 = q2 / b**(k+1) */ mp_rshd (&q, um + 1); /* x = x mod b**(k+1), quick (no division) */ if ((res = mp_mod_2d (x, DIGIT_BIT * (um + 1), x)) != MP_OKAY) { goto CLEANUP; } /* q = q * m mod b**(k+1), quick (no division) */ if ((res = s_mp_mul_digs (&q, m, &q, um + 1)) != MP_OKAY) { goto CLEANUP; } /* x = x - q */ if ((res = mp_sub (x, &q, x)) != MP_OKAY) { goto CLEANUP; } /* If x < 0, add b**(k+1) to it */ if (mp_cmp_d (x, 0) == MP_LT) { mp_set (&q, 1); if ((res = mp_lshd (&q, um + 1)) != MP_OKAY) goto CLEANUP; if ((res = mp_add (x, &q, x)) != MP_OKAY) goto CLEANUP; } /* Back off if it's too big */ while (mp_cmp (x, m) != MP_LT) { if ((res = s_mp_sub (x, m, x)) != MP_OKAY) { goto CLEANUP; } } CLEANUP: mp_clear (&q); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_reduce_2k.c000644 000765 000024 00000002442 12534342605 023532 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_REDUCE_2K_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* reduces a modulo n where n is of the form 2**p - d */ int mp_reduce_2k(mp_int *a, mp_int *n, mp_digit d) { mp_int q; int p, res; if ((res = mp_init(&q)) != MP_OKAY) { return res; } p = mp_count_bits(n); top: /* q = a/2**p, a = a mod 2**p */ if ((res = mp_div_2d(a, p, &q, a)) != MP_OKAY) { goto ERR; } if (d != 1) { /* q = q * d */ if ((res = mp_mul_d(&q, d, &q)) != MP_OKAY) { goto ERR; } } /* a = a + q */ if ((res = s_mp_add(a, &q, a)) != MP_OKAY) { goto ERR; } if (mp_cmp_mag(a, n) != MP_LT) { s_mp_sub(a, n, a); goto top; } ERR: mp_clear(&q); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_reduce_2k_l.c000644 000765 000024 00000002521 12534342605 024043 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_REDUCE_2K_L_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* reduces a modulo n where n is of the form 2**p - d This differs from reduce_2k since "d" can be larger than a single digit. */ int mp_reduce_2k_l(mp_int *a, mp_int *n, mp_int *d) { mp_int q; int p, res; if ((res = mp_init(&q)) != MP_OKAY) { return res; } p = mp_count_bits(n); top: /* q = a/2**p, a = a mod 2**p */ if ((res = mp_div_2d(a, p, &q, a)) != MP_OKAY) { goto ERR; } /* q = q * d */ if ((res = mp_mul(&q, d, &q)) != MP_OKAY) { goto ERR; } /* a = a + q */ if ((res = s_mp_add(a, &q, a)) != MP_OKAY) { goto ERR; } if (mp_cmp_mag(a, n) != MP_LT) { s_mp_sub(a, n, a); goto top; } ERR: mp_clear(&q); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_reduce_2k_setup.c000644 000765 000024 00000002072 12534342605 024751 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_REDUCE_2K_SETUP_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* determines the setup value */ int mp_reduce_2k_setup(mp_int *a, mp_digit *d) { int res, p; mp_int tmp; if ((res = mp_init(&tmp)) != MP_OKAY) { return res; } p = mp_count_bits(a); if ((res = mp_2expt(&tmp, p)) != MP_OKAY) { mp_clear(&tmp); return res; } if ((res = s_mp_sub(&tmp, a, &tmp)) != MP_OKAY) { mp_clear(&tmp); return res; } *d = tmp.dp[0]; mp_clear(&tmp); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_reduce_2k_setup_l.c000644 000765 000024 00000001755 12534342605 025273 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_REDUCE_2K_SETUP_L_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* determines the setup value */ int mp_reduce_2k_setup_l(mp_int *a, mp_int *d) { int res; mp_int tmp; if ((res = mp_init(&tmp)) != MP_OKAY) { return res; } if ((res = mp_2expt(&tmp, mp_count_bits(a))) != MP_OKAY) { goto ERR; } if ((res = s_mp_sub(&tmp, a, d)) != MP_OKAY) { goto ERR; } ERR: mp_clear(&tmp); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_reduce_is_2k.c000644 000765 000024 00000002334 12534342605 024225 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_REDUCE_IS_2K_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* determines if mp_reduce_2k can be used */ int mp_reduce_is_2k(mp_int *a) { int ix, iy, iw; mp_digit iz; if (a->used == 0) { return MP_NO; } else if (a->used == 1) { return MP_YES; } else if (a->used > 1) { iy = mp_count_bits(a); iz = 1; iw = 1; /* Test every bit from the second digit up, must be 1 */ for (ix = DIGIT_BIT; ix < iy; ix++) { if ((a->dp[iw] & iz) == 0) { return MP_NO; } iz <<= 1; if (iz > (mp_digit)MP_MASK) { ++iw; iz = 1; } } } return MP_YES; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_reduce_is_2k_l.c000644 000765 000024 00000002117 12534342605 024537 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_REDUCE_IS_2K_L_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* determines if reduce_2k_l can be used */ int mp_reduce_is_2k_l(mp_int *a) { int ix, iy; if (a->used == 0) { return MP_NO; } else if (a->used == 1) { return MP_YES; } else if (a->used > 1) { /* if more than half of the digits are -1 we're sold */ for (iy = ix = 0; ix < a->used; ix++) { if (a->dp[ix] == MP_MASK) { ++iy; } } return (iy >= (a->used/2)) ? MP_YES : MP_NO; } return MP_NO; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_reduce_setup.c000644 000765 000024 00000001635 12534342605 024361 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_REDUCE_SETUP_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* pre-calculate the value required for Barrett reduction * For a given modulus "b" it calulates the value required in "a" */ int mp_reduce_setup (mp_int * a, mp_int * b) { int res; if ((res = mp_2expt (a, b->used * 2 * DIGIT_BIT)) != MP_OKAY) { return res; } return mp_div (a, b, a, NULL); } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_rshd.c000644 000765 000024 00000003076 12534342605 022633 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_RSHD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* shift right a certain amount of digits */ void mp_rshd (mp_int * a, int b) { int x; /* if b <= 0 then ignore it */ if (b <= 0) { return; } /* if b > used then simply zero it and return */ if (a->used <= b) { mp_zero (a); return; } { register mp_digit *bottom, *top; /* shift the digits down */ /* bottom */ bottom = a->dp; /* top [offset into digits] */ top = a->dp + b; /* this is implemented as a sliding window where * the window is b-digits long and digits from * the top of the window are copied to the bottom * * e.g. b-2 | b-1 | b0 | b1 | b2 | ... | bb | ----> /\ | ----> \-------------------/ ----> */ for (x = 0; x < (a->used - b); x++) { *bottom++ = *top++; } /* zero the top digits */ for (; x < a->used; x++) { *bottom++ = 0; } } /* remove excess digits */ a->used -= b; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_set.c000644 000765 000024 00000001347 12534342605 022465 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_SET_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* set to a digit */ void mp_set (mp_int * a, mp_digit b) { mp_zero (a); a->dp[0] = b & MP_MASK; a->used = (a->dp[0] != 0) ? 1 : 0; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_set_int.c000644 000765 000024 00000002170 12534342605 023332 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_SET_INT_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* set a 32-bit const */ int mp_set_int (mp_int * a, unsigned long b) { int x, res; mp_zero (a); /* set four bits at a time */ for (x = 0; x < 8; x++) { /* shift the number up four bits */ if ((res = mp_mul_2d (a, 4, a)) != MP_OKAY) { return res; } /* OR in the top four bits of the source */ a->dp[0] |= (b >> 28) & 15; /* shift the source up to the next four bits */ b <<= 4; /* ensure that digits are not clamped off */ a->used += 1; } mp_clamp (a); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_set_long.c000644 000765 000024 00000002310 12534342605 023473 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_SET_INT_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* set a platform dependent unsigned long int */ int mp_set_long (mp_int * a, unsigned long b) { int x, res; mp_zero (a); /* set four bits at a time */ for (x = 0; x < sizeof(unsigned long) * 2; x++) { /* shift the number up four bits */ if ((res = mp_mul_2d (a, 4, a)) != MP_OKAY) { return res; } /* OR in the top four bits of the source */ a->dp[0] |= (b >> ((sizeof(unsigned long)) * 8 - 4)) & 15; /* shift the source up to the next four bits */ b <<= 4; /* ensure that digits are not clamped off */ a->used += 1; } mp_clamp (a); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_shrink.c000644 000765 000024 00000001654 12534342605 023171 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_SHRINK_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* shrink a bignum */ int mp_shrink (mp_int * a) { mp_digit *tmp; int used = 1; if(a->used > 0) used = a->used; if (a->alloc != used) { if ((tmp = OPT_CAST(mp_digit) XREALLOC (a->dp, sizeof (mp_digit) * used)) == NULL) { return MP_MEM; } a->dp = tmp; a->alloc = used; } return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_signed_bin_size.c000644 000765 000024 00000001341 12534342605 025017 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_SIGNED_BIN_SIZE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* get the size for an signed equivalent */ int mp_signed_bin_size (mp_int * a) { return 1 + mp_unsigned_bin_size (a); } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_sqr.c000644 000765 000024 00000002461 12534342605 022475 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_SQR_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* computes b = a*a */ int mp_sqr (mp_int * a, mp_int * b) { int res; #ifdef BN_MP_TOOM_SQR_C /* use Toom-Cook? */ if (a->used >= TOOM_SQR_CUTOFF) { res = mp_toom_sqr(a, b); /* Karatsuba? */ } else #endif #ifdef BN_MP_KARATSUBA_SQR_C if (a->used >= KARATSUBA_SQR_CUTOFF) { res = mp_karatsuba_sqr (a, b); } else #endif { #ifdef BN_FAST_S_MP_SQR_C /* can we use the fast comba multiplier? */ if ((a->used * 2 + 1) < MP_WARRAY && a->used < (1 << (sizeof(mp_word) * CHAR_BIT - 2*DIGIT_BIT - 1))) { res = fast_s_mp_sqr (a, b); } else #endif #ifdef BN_S_MP_SQR_C res = s_mp_sqr (a, b); #else res = MP_VAL; #endif } b->sign = MP_ZPOS; return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_sqrmod.c000644 000765 000024 00000001623 12534342605 023174 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_SQRMOD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* c = a * a (mod b) */ int mp_sqrmod (mp_int * a, mp_int * b, mp_int * c) { int res; mp_int t; if ((res = mp_init (&t)) != MP_OKAY) { return res; } if ((res = mp_sqr (a, &t)) != MP_OKAY) { mp_clear (&t); return res; } res = mp_mod (&t, b, c); mp_clear (&t); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_sqrt.c000644 000765 000024 00000003340 12534342605 022656 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_SQRT_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* this function is less generic than mp_n_root, simpler and faster */ int mp_sqrt(mp_int *arg, mp_int *ret) { int res; mp_int t1,t2; /* must be positive */ if (arg->sign == MP_NEG) { return MP_VAL; } /* easy out */ if (mp_iszero(arg) == MP_YES) { mp_zero(ret); return MP_OKAY; } if ((res = mp_init_copy(&t1, arg)) != MP_OKAY) { return res; } if ((res = mp_init(&t2)) != MP_OKAY) { goto E2; } /* First approx. (not very bad for large arg) */ mp_rshd (&t1,t1.used/2); /* t1 > 0 */ if ((res = mp_div(arg,&t1,&t2,NULL)) != MP_OKAY) { goto E1; } if ((res = mp_add(&t1,&t2,&t1)) != MP_OKAY) { goto E1; } if ((res = mp_div_2(&t1,&t1)) != MP_OKAY) { goto E1; } /* And now t1 > sqrt(arg) */ do { if ((res = mp_div(arg,&t1,&t2,NULL)) != MP_OKAY) { goto E1; } if ((res = mp_add(&t1,&t2,&t1)) != MP_OKAY) { goto E1; } if ((res = mp_div_2(&t1,&t1)) != MP_OKAY) { goto E1; } /* t1 >= sqrt(arg) >= t2 at this point */ } while (mp_cmp_mag(&t1,&t2) == MP_GT); mp_exch(&t1,ret); E1: mp_clear(&t2); E2: mp_clear(&t1); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_sub.c000644 000765 000024 00000003147 12534342605 022463 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_SUB_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* high level subtraction (handles signs) */ int mp_sub (mp_int * a, mp_int * b, mp_int * c) { int sa, sb, res; sa = a->sign; sb = b->sign; if (sa != sb) { /* subtract a negative from a positive, OR */ /* subtract a positive from a negative. */ /* In either case, ADD their magnitudes, */ /* and use the sign of the first number. */ c->sign = sa; res = s_mp_add (a, b, c); } else { /* subtract a positive from a positive, OR */ /* subtract a negative from a negative. */ /* First, take the difference between their */ /* magnitudes, then... */ if (mp_cmp_mag (a, b) != MP_LT) { /* Copy the sign from the first */ c->sign = sa; /* The first has a larger or equal magnitude */ res = s_mp_sub (a, b, c); } else { /* The result has the *opposite* sign from */ /* the first number. */ c->sign = (sa == MP_ZPOS) ? MP_NEG : MP_ZPOS; /* The second has a larger magnitude */ res = s_mp_sub (b, a, c); } } return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_sub_d.c000644 000765 000024 00000004032 12534342605 022760 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_SUB_D_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* single digit subtraction */ int mp_sub_d (mp_int * a, mp_digit b, mp_int * c) { mp_digit *tmpa, *tmpc, mu; int res, ix, oldused; /* grow c as required */ if (c->alloc < a->used + 1) { if ((res = mp_grow(c, a->used + 1)) != MP_OKAY) { return res; } } /* if a is negative just do an unsigned * addition [with fudged signs] */ if (a->sign == MP_NEG) { a->sign = MP_ZPOS; res = mp_add_d(a, b, c); a->sign = c->sign = MP_NEG; /* clamp */ mp_clamp(c); return res; } /* setup regs */ oldused = c->used; tmpa = a->dp; tmpc = c->dp; /* if a <= b simply fix the single digit */ if ((a->used == 1 && a->dp[0] <= b) || a->used == 0) { if (a->used == 1) { *tmpc++ = b - *tmpa; } else { *tmpc++ = b; } ix = 1; /* negative/1digit */ c->sign = MP_NEG; c->used = 1; } else { /* positive/size */ c->sign = MP_ZPOS; c->used = a->used; /* subtract first digit */ *tmpc = *tmpa++ - b; mu = *tmpc >> (sizeof(mp_digit) * CHAR_BIT - 1); *tmpc++ &= MP_MASK; /* handle rest of the digits */ for (ix = 1; ix < a->used; ix++) { *tmpc = *tmpa++ - mu; mu = *tmpc >> (sizeof(mp_digit) * CHAR_BIT - 1); *tmpc++ &= MP_MASK; } } /* zero excess digits */ while (ix++ < oldused) { *tmpc++ = 0; } mp_clamp(c); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_submod.c000644 000765 000024 00000001643 12534342605 023162 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_SUBMOD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* d = a - b (mod c) */ int mp_submod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) { int res; mp_int t; if ((res = mp_init (&t)) != MP_OKAY) { return res; } if ((res = mp_sub (a, b, &t)) != MP_OKAY) { mp_clear (&t); return res; } res = mp_mod (&t, c, d); mp_clear (&t); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_to_signed_bin.c000644 000765 000024 00000001557 12534342605 024500 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_TO_SIGNED_BIN_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* store in signed [big endian] format */ int mp_to_signed_bin (mp_int * a, unsigned char *b) { int res; if ((res = mp_to_unsigned_bin (a, b + 1)) != MP_OKAY) { return res; } b[0] = (unsigned char) ((a->sign == MP_ZPOS) ? 0 : 1); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_to_signed_bin_n.c000644 000765 000024 00000001572 12534342605 025012 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_TO_SIGNED_BIN_N_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* store in signed [big endian] format */ int mp_to_signed_bin_n (mp_int * a, unsigned char *b, unsigned long *outlen) { if (*outlen < (unsigned long)mp_signed_bin_size(a)) { return MP_VAL; } *outlen = mp_signed_bin_size(a); return mp_to_signed_bin(a, b); } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_to_unsigned_bin.c000644 000765 000024 00000002217 12534342605 025035 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_TO_UNSIGNED_BIN_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* store in unsigned [big endian] format */ int mp_to_unsigned_bin (mp_int * a, unsigned char *b) { int x, res; mp_int t; if ((res = mp_init_copy (&t, a)) != MP_OKAY) { return res; } x = 0; while (mp_iszero (&t) == 0) { #ifndef MP_8BIT b[x++] = (unsigned char) (t.dp[0] & 255); #else b[x++] = (unsigned char) (t.dp[0] | ((t.dp[1] & 0x01) << 7)); #endif if ((res = mp_div_2d (&t, 8, &t, NULL)) != MP_OKAY) { mp_clear (&t); return res; } } bn_reverse (b, x); mp_clear (&t); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_to_unsigned_bin_n.c000644 000765 000024 00000001606 12534342605 025353 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_TO_UNSIGNED_BIN_N_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* store in unsigned [big endian] format */ int mp_to_unsigned_bin_n (mp_int * a, unsigned char *b, unsigned long *outlen) { if (*outlen < (unsigned long)mp_unsigned_bin_size(a)) { return MP_VAL; } *outlen = mp_unsigned_bin_size(a); return mp_to_unsigned_bin(a, b); } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_toom_mul.c000644 000765 000024 00000015622 12534342605 023526 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_TOOM_MUL_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* multiplication using the Toom-Cook 3-way algorithm * * Much more complicated than Karatsuba but has a lower * asymptotic running time of O(N**1.464). This algorithm is * only particularly useful on VERY large inputs * (we're talking 1000s of digits here...). */ int mp_toom_mul(mp_int *a, mp_int *b, mp_int *c) { mp_int w0, w1, w2, w3, w4, tmp1, tmp2, a0, a1, a2, b0, b1, b2; int res, B; /* init temps */ if ((res = mp_init_multi(&w0, &w1, &w2, &w3, &w4, &a0, &a1, &a2, &b0, &b1, &b2, &tmp1, &tmp2, NULL)) != MP_OKAY) { return res; } /* B */ B = MIN(a->used, b->used) / 3; /* a = a2 * B**2 + a1 * B + a0 */ if ((res = mp_mod_2d(a, DIGIT_BIT * B, &a0)) != MP_OKAY) { goto ERR; } if ((res = mp_copy(a, &a1)) != MP_OKAY) { goto ERR; } mp_rshd(&a1, B); mp_mod_2d(&a1, DIGIT_BIT * B, &a1); if ((res = mp_copy(a, &a2)) != MP_OKAY) { goto ERR; } mp_rshd(&a2, B*2); /* b = b2 * B**2 + b1 * B + b0 */ if ((res = mp_mod_2d(b, DIGIT_BIT * B, &b0)) != MP_OKAY) { goto ERR; } if ((res = mp_copy(b, &b1)) != MP_OKAY) { goto ERR; } mp_rshd(&b1, B); mp_mod_2d(&b1, DIGIT_BIT * B, &b1); if ((res = mp_copy(b, &b2)) != MP_OKAY) { goto ERR; } mp_rshd(&b2, B*2); /* w0 = a0*b0 */ if ((res = mp_mul(&a0, &b0, &w0)) != MP_OKAY) { goto ERR; } /* w4 = a2 * b2 */ if ((res = mp_mul(&a2, &b2, &w4)) != MP_OKAY) { goto ERR; } /* w1 = (a2 + 2(a1 + 2a0))(b2 + 2(b1 + 2b0)) */ if ((res = mp_mul_2(&a0, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp1, &a1, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_mul_2(&tmp1, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp1, &a2, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_mul_2(&b0, &tmp2)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp2, &b1, &tmp2)) != MP_OKAY) { goto ERR; } if ((res = mp_mul_2(&tmp2, &tmp2)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp2, &b2, &tmp2)) != MP_OKAY) { goto ERR; } if ((res = mp_mul(&tmp1, &tmp2, &w1)) != MP_OKAY) { goto ERR; } /* w3 = (a0 + 2(a1 + 2a2))(b0 + 2(b1 + 2b2)) */ if ((res = mp_mul_2(&a2, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp1, &a1, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_mul_2(&tmp1, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp1, &a0, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_mul_2(&b2, &tmp2)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp2, &b1, &tmp2)) != MP_OKAY) { goto ERR; } if ((res = mp_mul_2(&tmp2, &tmp2)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp2, &b0, &tmp2)) != MP_OKAY) { goto ERR; } if ((res = mp_mul(&tmp1, &tmp2, &w3)) != MP_OKAY) { goto ERR; } /* w2 = (a2 + a1 + a0)(b2 + b1 + b0) */ if ((res = mp_add(&a2, &a1, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp1, &a0, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&b2, &b1, &tmp2)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp2, &b0, &tmp2)) != MP_OKAY) { goto ERR; } if ((res = mp_mul(&tmp1, &tmp2, &w2)) != MP_OKAY) { goto ERR; } /* now solve the matrix 0 0 0 0 1 1 2 4 8 16 1 1 1 1 1 16 8 4 2 1 1 0 0 0 0 using 12 subtractions, 4 shifts, 2 small divisions and 1 small multiplication */ /* r1 - r4 */ if ((res = mp_sub(&w1, &w4, &w1)) != MP_OKAY) { goto ERR; } /* r3 - r0 */ if ((res = mp_sub(&w3, &w0, &w3)) != MP_OKAY) { goto ERR; } /* r1/2 */ if ((res = mp_div_2(&w1, &w1)) != MP_OKAY) { goto ERR; } /* r3/2 */ if ((res = mp_div_2(&w3, &w3)) != MP_OKAY) { goto ERR; } /* r2 - r0 - r4 */ if ((res = mp_sub(&w2, &w0, &w2)) != MP_OKAY) { goto ERR; } if ((res = mp_sub(&w2, &w4, &w2)) != MP_OKAY) { goto ERR; } /* r1 - r2 */ if ((res = mp_sub(&w1, &w2, &w1)) != MP_OKAY) { goto ERR; } /* r3 - r2 */ if ((res = mp_sub(&w3, &w2, &w3)) != MP_OKAY) { goto ERR; } /* r1 - 8r0 */ if ((res = mp_mul_2d(&w0, 3, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_sub(&w1, &tmp1, &w1)) != MP_OKAY) { goto ERR; } /* r3 - 8r4 */ if ((res = mp_mul_2d(&w4, 3, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_sub(&w3, &tmp1, &w3)) != MP_OKAY) { goto ERR; } /* 3r2 - r1 - r3 */ if ((res = mp_mul_d(&w2, 3, &w2)) != MP_OKAY) { goto ERR; } if ((res = mp_sub(&w2, &w1, &w2)) != MP_OKAY) { goto ERR; } if ((res = mp_sub(&w2, &w3, &w2)) != MP_OKAY) { goto ERR; } /* r1 - r2 */ if ((res = mp_sub(&w1, &w2, &w1)) != MP_OKAY) { goto ERR; } /* r3 - r2 */ if ((res = mp_sub(&w3, &w2, &w3)) != MP_OKAY) { goto ERR; } /* r1/3 */ if ((res = mp_div_3(&w1, &w1, NULL)) != MP_OKAY) { goto ERR; } /* r3/3 */ if ((res = mp_div_3(&w3, &w3, NULL)) != MP_OKAY) { goto ERR; } /* at this point shift W[n] by B*n */ if ((res = mp_lshd(&w1, 1*B)) != MP_OKAY) { goto ERR; } if ((res = mp_lshd(&w2, 2*B)) != MP_OKAY) { goto ERR; } if ((res = mp_lshd(&w3, 3*B)) != MP_OKAY) { goto ERR; } if ((res = mp_lshd(&w4, 4*B)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&w0, &w1, c)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&w2, &w3, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&w4, &tmp1, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp1, c, c)) != MP_OKAY) { goto ERR; } ERR: mp_clear_multi(&w0, &w1, &w2, &w3, &w4, &a0, &a1, &a2, &b0, &b1, &b2, &tmp1, &tmp2, NULL); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_toom_sqr.c000644 000765 000024 00000012307 12534342605 023533 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_TOOM_SQR_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* squaring using Toom-Cook 3-way algorithm */ int mp_toom_sqr(mp_int *a, mp_int *b) { mp_int w0, w1, w2, w3, w4, tmp1, a0, a1, a2; int res, B; /* init temps */ if ((res = mp_init_multi(&w0, &w1, &w2, &w3, &w4, &a0, &a1, &a2, &tmp1, NULL)) != MP_OKAY) { return res; } /* B */ B = a->used / 3; /* a = a2 * B**2 + a1 * B + a0 */ if ((res = mp_mod_2d(a, DIGIT_BIT * B, &a0)) != MP_OKAY) { goto ERR; } if ((res = mp_copy(a, &a1)) != MP_OKAY) { goto ERR; } mp_rshd(&a1, B); mp_mod_2d(&a1, DIGIT_BIT * B, &a1); if ((res = mp_copy(a, &a2)) != MP_OKAY) { goto ERR; } mp_rshd(&a2, B*2); /* w0 = a0*a0 */ if ((res = mp_sqr(&a0, &w0)) != MP_OKAY) { goto ERR; } /* w4 = a2 * a2 */ if ((res = mp_sqr(&a2, &w4)) != MP_OKAY) { goto ERR; } /* w1 = (a2 + 2(a1 + 2a0))**2 */ if ((res = mp_mul_2(&a0, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp1, &a1, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_mul_2(&tmp1, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp1, &a2, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_sqr(&tmp1, &w1)) != MP_OKAY) { goto ERR; } /* w3 = (a0 + 2(a1 + 2a2))**2 */ if ((res = mp_mul_2(&a2, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp1, &a1, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_mul_2(&tmp1, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp1, &a0, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_sqr(&tmp1, &w3)) != MP_OKAY) { goto ERR; } /* w2 = (a2 + a1 + a0)**2 */ if ((res = mp_add(&a2, &a1, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp1, &a0, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_sqr(&tmp1, &w2)) != MP_OKAY) { goto ERR; } /* now solve the matrix 0 0 0 0 1 1 2 4 8 16 1 1 1 1 1 16 8 4 2 1 1 0 0 0 0 using 12 subtractions, 4 shifts, 2 small divisions and 1 small multiplication. */ /* r1 - r4 */ if ((res = mp_sub(&w1, &w4, &w1)) != MP_OKAY) { goto ERR; } /* r3 - r0 */ if ((res = mp_sub(&w3, &w0, &w3)) != MP_OKAY) { goto ERR; } /* r1/2 */ if ((res = mp_div_2(&w1, &w1)) != MP_OKAY) { goto ERR; } /* r3/2 */ if ((res = mp_div_2(&w3, &w3)) != MP_OKAY) { goto ERR; } /* r2 - r0 - r4 */ if ((res = mp_sub(&w2, &w0, &w2)) != MP_OKAY) { goto ERR; } if ((res = mp_sub(&w2, &w4, &w2)) != MP_OKAY) { goto ERR; } /* r1 - r2 */ if ((res = mp_sub(&w1, &w2, &w1)) != MP_OKAY) { goto ERR; } /* r3 - r2 */ if ((res = mp_sub(&w3, &w2, &w3)) != MP_OKAY) { goto ERR; } /* r1 - 8r0 */ if ((res = mp_mul_2d(&w0, 3, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_sub(&w1, &tmp1, &w1)) != MP_OKAY) { goto ERR; } /* r3 - 8r4 */ if ((res = mp_mul_2d(&w4, 3, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_sub(&w3, &tmp1, &w3)) != MP_OKAY) { goto ERR; } /* 3r2 - r1 - r3 */ if ((res = mp_mul_d(&w2, 3, &w2)) != MP_OKAY) { goto ERR; } if ((res = mp_sub(&w2, &w1, &w2)) != MP_OKAY) { goto ERR; } if ((res = mp_sub(&w2, &w3, &w2)) != MP_OKAY) { goto ERR; } /* r1 - r2 */ if ((res = mp_sub(&w1, &w2, &w1)) != MP_OKAY) { goto ERR; } /* r3 - r2 */ if ((res = mp_sub(&w3, &w2, &w3)) != MP_OKAY) { goto ERR; } /* r1/3 */ if ((res = mp_div_3(&w1, &w1, NULL)) != MP_OKAY) { goto ERR; } /* r3/3 */ if ((res = mp_div_3(&w3, &w3, NULL)) != MP_OKAY) { goto ERR; } /* at this point shift W[n] by B*n */ if ((res = mp_lshd(&w1, 1*B)) != MP_OKAY) { goto ERR; } if ((res = mp_lshd(&w2, 2*B)) != MP_OKAY) { goto ERR; } if ((res = mp_lshd(&w3, 3*B)) != MP_OKAY) { goto ERR; } if ((res = mp_lshd(&w4, 4*B)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&w0, &w1, b)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&w2, &w3, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&w4, &tmp1, &tmp1)) != MP_OKAY) { goto ERR; } if ((res = mp_add(&tmp1, b, b)) != MP_OKAY) { goto ERR; } ERR: mp_clear_multi(&w0, &w1, &w2, &w3, &w4, &a0, &a1, &a2, &tmp1, NULL); return res; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_toradix.c000644 000765 000024 00000003215 12534342605 023340 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_TORADIX_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* stores a bignum as a ASCII string in a given radix (2..64) */ int mp_toradix (mp_int * a, char *str, int radix) { int res, digs; mp_int t; mp_digit d; char *_s = str; /* check range of the radix */ if (radix < 2 || radix > 64) { return MP_VAL; } /* quick out if its zero */ if (mp_iszero(a) == 1) { *str++ = '0'; *str = '\0'; return MP_OKAY; } if ((res = mp_init_copy (&t, a)) != MP_OKAY) { return res; } /* if it is negative output a - */ if (t.sign == MP_NEG) { ++_s; *str++ = '-'; t.sign = MP_ZPOS; } digs = 0; while (mp_iszero (&t) == 0) { if ((res = mp_div_d (&t, (mp_digit) radix, &t, &d)) != MP_OKAY) { mp_clear (&t); return res; } *str++ = mp_s_rmap[d]; ++digs; } /* reverse the digits of the string. In this case _s points * to the first digit [exluding the sign] of the number] */ bn_reverse ((unsigned char *)_s, digs); /* append a NULL so the string is properly terminated */ *str = '\0'; mp_clear (&t); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_toradix_n.c000644 000765 000024 00000003741 12534342605 023661 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_TORADIX_N_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* stores a bignum as a ASCII string in a given radix (2..64) * * Stores upto maxlen-1 chars and always a NULL byte */ int mp_toradix_n(mp_int * a, char *str, int radix, int maxlen) { int res, digs; mp_int t; mp_digit d; char *_s = str; /* check range of the maxlen, radix */ if (maxlen < 2 || radix < 2 || radix > 64) { return MP_VAL; } /* quick out if its zero */ if (mp_iszero(a) == MP_YES) { *str++ = '0'; *str = '\0'; return MP_OKAY; } if ((res = mp_init_copy (&t, a)) != MP_OKAY) { return res; } /* if it is negative output a - */ if (t.sign == MP_NEG) { /* we have to reverse our digits later... but not the - sign!! */ ++_s; /* store the flag and mark the number as positive */ *str++ = '-'; t.sign = MP_ZPOS; /* subtract a char */ --maxlen; } digs = 0; while (mp_iszero (&t) == 0) { if (--maxlen < 1) { /* no more room */ break; } if ((res = mp_div_d (&t, (mp_digit) radix, &t, &d)) != MP_OKAY) { mp_clear (&t); return res; } *str++ = mp_s_rmap[d]; ++digs; } /* reverse the digits of the string. In this case _s points * to the first digit [exluding the sign] of the number */ bn_reverse ((unsigned char *)_s, digs); /* append a NULL so the string is properly terminated */ *str = '\0'; mp_clear (&t); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_unsigned_bin_size.c000644 000765 000024 00000001425 12534342605 025365 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_UNSIGNED_BIN_SIZE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* get the size for an unsigned equivalent */ int mp_unsigned_bin_size (mp_int * a) { int size = mp_count_bits (a); return (size / 8 + ((size & 7) != 0 ? 1 : 0)); } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_xor.c000644 000765 000024 00000002125 12534342605 022475 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_XOR_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* XOR two ints together */ int mp_xor (mp_int * a, mp_int * b, mp_int * c) { int res, ix, px; mp_int t, *x; if (a->used > b->used) { if ((res = mp_init_copy (&t, a)) != MP_OKAY) { return res; } px = b->used; x = b; } else { if ((res = mp_init_copy (&t, b)) != MP_OKAY) { return res; } px = a->used; x = a; } for (ix = 0; ix < px; ix++) { t.dp[ix] ^= x->dp[ix]; } mp_clamp (&t); mp_exch (c, &t); mp_clear (&t); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_mp_zero.c000644 000765 000024 00000001430 12534342605 022642 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_MP_ZERO_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* set to zero */ void mp_zero (mp_int * a) { int n; mp_digit *tmp; a->sign = MP_ZPOS; a->used = 0; tmp = a->dp; for (n = 0; n < a->alloc; n++) { *tmp++ = 0; } } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_prime_tab.c000644 000765 000024 00000005335 12534342605 023141 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_PRIME_TAB_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ const mp_digit ltm_prime_tab[] = { 0x0002, 0x0003, 0x0005, 0x0007, 0x000B, 0x000D, 0x0011, 0x0013, 0x0017, 0x001D, 0x001F, 0x0025, 0x0029, 0x002B, 0x002F, 0x0035, 0x003B, 0x003D, 0x0043, 0x0047, 0x0049, 0x004F, 0x0053, 0x0059, 0x0061, 0x0065, 0x0067, 0x006B, 0x006D, 0x0071, 0x007F, #ifndef MP_8BIT 0x0083, 0x0089, 0x008B, 0x0095, 0x0097, 0x009D, 0x00A3, 0x00A7, 0x00AD, 0x00B3, 0x00B5, 0x00BF, 0x00C1, 0x00C5, 0x00C7, 0x00D3, 0x00DF, 0x00E3, 0x00E5, 0x00E9, 0x00EF, 0x00F1, 0x00FB, 0x0101, 0x0107, 0x010D, 0x010F, 0x0115, 0x0119, 0x011B, 0x0125, 0x0133, 0x0137, 0x0139, 0x013D, 0x014B, 0x0151, 0x015B, 0x015D, 0x0161, 0x0167, 0x016F, 0x0175, 0x017B, 0x017F, 0x0185, 0x018D, 0x0191, 0x0199, 0x01A3, 0x01A5, 0x01AF, 0x01B1, 0x01B7, 0x01BB, 0x01C1, 0x01C9, 0x01CD, 0x01CF, 0x01D3, 0x01DF, 0x01E7, 0x01EB, 0x01F3, 0x01F7, 0x01FD, 0x0209, 0x020B, 0x021D, 0x0223, 0x022D, 0x0233, 0x0239, 0x023B, 0x0241, 0x024B, 0x0251, 0x0257, 0x0259, 0x025F, 0x0265, 0x0269, 0x026B, 0x0277, 0x0281, 0x0283, 0x0287, 0x028D, 0x0293, 0x0295, 0x02A1, 0x02A5, 0x02AB, 0x02B3, 0x02BD, 0x02C5, 0x02CF, 0x02D7, 0x02DD, 0x02E3, 0x02E7, 0x02EF, 0x02F5, 0x02F9, 0x0301, 0x0305, 0x0313, 0x031D, 0x0329, 0x032B, 0x0335, 0x0337, 0x033B, 0x033D, 0x0347, 0x0355, 0x0359, 0x035B, 0x035F, 0x036D, 0x0371, 0x0373, 0x0377, 0x038B, 0x038F, 0x0397, 0x03A1, 0x03A9, 0x03AD, 0x03B3, 0x03B9, 0x03C7, 0x03CB, 0x03D1, 0x03D7, 0x03DF, 0x03E5, 0x03F1, 0x03F5, 0x03FB, 0x03FD, 0x0407, 0x0409, 0x040F, 0x0419, 0x041B, 0x0425, 0x0427, 0x042D, 0x043F, 0x0443, 0x0445, 0x0449, 0x044F, 0x0455, 0x045D, 0x0463, 0x0469, 0x047F, 0x0481, 0x048B, 0x0493, 0x049D, 0x04A3, 0x04A9, 0x04B1, 0x04BD, 0x04C1, 0x04C7, 0x04CD, 0x04CF, 0x04D5, 0x04E1, 0x04EB, 0x04FD, 0x04FF, 0x0503, 0x0509, 0x050B, 0x0511, 0x0515, 0x0517, 0x051B, 0x0527, 0x0529, 0x052F, 0x0551, 0x0557, 0x055D, 0x0565, 0x0577, 0x0581, 0x058F, 0x0593, 0x0595, 0x0599, 0x059F, 0x05A7, 0x05AB, 0x05AD, 0x05B3, 0x05BF, 0x05C9, 0x05CB, 0x05CF, 0x05D1, 0x05D5, 0x05DB, 0x05E7, 0x05F3, 0x05FB, 0x0607, 0x060D, 0x0611, 0x0617, 0x061F, 0x0623, 0x062B, 0x062F, 0x063D, 0x0641, 0x0647, 0x0649, 0x064D, 0x0653 #endif }; #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_reverse.c000644 000765 000024 00000001530 12534342605 022643 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_REVERSE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* reverse an array, used for radix code */ void bn_reverse (unsigned char *s, int len) { int ix, iy; unsigned char t; ix = 0; iy = len - 1; while (ix < iy) { t = s[ix]; s[ix] = s[iy]; s[iy] = t; ++ix; --iy; } } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_s_mp_add.c000644 000765 000024 00000004513 12534342605 022742 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_S_MP_ADD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* low level addition, based on HAC pp.594, Algorithm 14.7 */ int s_mp_add (mp_int * a, mp_int * b, mp_int * c) { mp_int *x; int olduse, res, min, max; /* find sizes, we let |a| <= |b| which means we have to sort * them. "x" will point to the input with the most digits */ if (a->used > b->used) { min = b->used; max = a->used; x = a; } else { min = a->used; max = b->used; x = b; } /* init result */ if (c->alloc < max + 1) { if ((res = mp_grow (c, max + 1)) != MP_OKAY) { return res; } } /* get old used digit count and set new one */ olduse = c->used; c->used = max + 1; { register mp_digit u, *tmpa, *tmpb, *tmpc; register int i; /* alias for digit pointers */ /* first input */ tmpa = a->dp; /* second input */ tmpb = b->dp; /* destination */ tmpc = c->dp; /* zero the carry */ u = 0; for (i = 0; i < min; i++) { /* Compute the sum at one digit, T[i] = A[i] + B[i] + U */ *tmpc = *tmpa++ + *tmpb++ + u; /* U = carry bit of T[i] */ u = *tmpc >> ((mp_digit)DIGIT_BIT); /* take away carry bit from T[i] */ *tmpc++ &= MP_MASK; } /* now copy higher words if any, that is in A+B * if A or B has more digits add those in */ if (min != max) { for (; i < max; i++) { /* T[i] = X[i] + U */ *tmpc = x->dp[i] + u; /* U = carry bit of T[i] */ u = *tmpc >> ((mp_digit)DIGIT_BIT); /* take away carry bit from T[i] */ *tmpc++ &= MP_MASK; } } /* add carry */ *tmpc++ = u; /* clear digits above oldused */ for (i = c->used; i < olduse; i++) { *tmpc++ = 0; } } mp_clamp (c); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_s_mp_exptmod.c000644 000765 000024 00000013645 12534342605 023700 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_S_MP_EXPTMOD_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #ifdef MP_LOW_MEM #define TAB_SIZE 32 #else #define TAB_SIZE 256 #endif int s_mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode) { mp_int M[TAB_SIZE], res, mu; mp_digit buf; int err, bitbuf, bitcpy, bitcnt, mode, digidx, x, y, winsize; int (*redux)(mp_int*,mp_int*,mp_int*); /* find window size */ x = mp_count_bits (X); if (x <= 7) { winsize = 2; } else if (x <= 36) { winsize = 3; } else if (x <= 140) { winsize = 4; } else if (x <= 450) { winsize = 5; } else if (x <= 1303) { winsize = 6; } else if (x <= 3529) { winsize = 7; } else { winsize = 8; } #ifdef MP_LOW_MEM if (winsize > 5) { winsize = 5; } #endif /* init M array */ /* init first cell */ if ((err = mp_init(&M[1])) != MP_OKAY) { return err; } /* now init the second half of the array */ for (x = 1<<(winsize-1); x < (1 << winsize); x++) { if ((err = mp_init(&M[x])) != MP_OKAY) { for (y = 1<<(winsize-1); y < x; y++) { mp_clear (&M[y]); } mp_clear(&M[1]); return err; } } /* create mu, used for Barrett reduction */ if ((err = mp_init (&mu)) != MP_OKAY) { goto LBL_M; } if (redmode == 0) { if ((err = mp_reduce_setup (&mu, P)) != MP_OKAY) { goto LBL_MU; } redux = mp_reduce; } else { if ((err = mp_reduce_2k_setup_l (P, &mu)) != MP_OKAY) { goto LBL_MU; } redux = mp_reduce_2k_l; } /* create M table * * The M table contains powers of the base, * e.g. M[x] = G**x mod P * * The first half of the table is not * computed though accept for M[0] and M[1] */ if ((err = mp_mod (G, P, &M[1])) != MP_OKAY) { goto LBL_MU; } /* compute the value at M[1<<(winsize-1)] by squaring * M[1] (winsize-1) times */ if ((err = mp_copy (&M[1], &M[1 << (winsize - 1)])) != MP_OKAY) { goto LBL_MU; } for (x = 0; x < (winsize - 1); x++) { /* square it */ if ((err = mp_sqr (&M[1 << (winsize - 1)], &M[1 << (winsize - 1)])) != MP_OKAY) { goto LBL_MU; } /* reduce modulo P */ if ((err = redux (&M[1 << (winsize - 1)], P, &mu)) != MP_OKAY) { goto LBL_MU; } } /* create upper table, that is M[x] = M[x-1] * M[1] (mod P) * for x = (2**(winsize - 1) + 1) to (2**winsize - 1) */ for (x = (1 << (winsize - 1)) + 1; x < (1 << winsize); x++) { if ((err = mp_mul (&M[x - 1], &M[1], &M[x])) != MP_OKAY) { goto LBL_MU; } if ((err = redux (&M[x], P, &mu)) != MP_OKAY) { goto LBL_MU; } } /* setup result */ if ((err = mp_init (&res)) != MP_OKAY) { goto LBL_MU; } mp_set (&res, 1); /* set initial mode and bit cnt */ mode = 0; bitcnt = 1; buf = 0; digidx = X->used - 1; bitcpy = 0; bitbuf = 0; for (;;) { /* grab next digit as required */ if (--bitcnt == 0) { /* if digidx == -1 we are out of digits */ if (digidx == -1) { break; } /* read next digit and reset the bitcnt */ buf = X->dp[digidx--]; bitcnt = (int) DIGIT_BIT; } /* grab the next msb from the exponent */ y = (buf >> (mp_digit)(DIGIT_BIT - 1)) & 1; buf <<= (mp_digit)1; /* if the bit is zero and mode == 0 then we ignore it * These represent the leading zero bits before the first 1 bit * in the exponent. Technically this opt is not required but it * does lower the # of trivial squaring/reductions used */ if (mode == 0 && y == 0) { continue; } /* if the bit is zero and mode == 1 then we square */ if (mode == 1 && y == 0) { if ((err = mp_sqr (&res, &res)) != MP_OKAY) { goto LBL_RES; } if ((err = redux (&res, P, &mu)) != MP_OKAY) { goto LBL_RES; } continue; } /* else we add it to the window */ bitbuf |= (y << (winsize - ++bitcpy)); mode = 2; if (bitcpy == winsize) { /* ok window is filled so square as required and multiply */ /* square first */ for (x = 0; x < winsize; x++) { if ((err = mp_sqr (&res, &res)) != MP_OKAY) { goto LBL_RES; } if ((err = redux (&res, P, &mu)) != MP_OKAY) { goto LBL_RES; } } /* then multiply */ if ((err = mp_mul (&res, &M[bitbuf], &res)) != MP_OKAY) { goto LBL_RES; } if ((err = redux (&res, P, &mu)) != MP_OKAY) { goto LBL_RES; } /* empty window and reset */ bitcpy = 0; bitbuf = 0; mode = 1; } } /* if bits remain then square/multiply */ if (mode == 2 && bitcpy > 0) { /* square then multiply if the bit is set */ for (x = 0; x < bitcpy; x++) { if ((err = mp_sqr (&res, &res)) != MP_OKAY) { goto LBL_RES; } if ((err = redux (&res, P, &mu)) != MP_OKAY) { goto LBL_RES; } bitbuf <<= 1; if ((bitbuf & (1 << winsize)) != 0) { /* then multiply */ if ((err = mp_mul (&res, &M[1], &res)) != MP_OKAY) { goto LBL_RES; } if ((err = redux (&res, P, &mu)) != MP_OKAY) { goto LBL_RES; } } } } mp_exch (&res, Y); err = MP_OKAY; LBL_RES:mp_clear (&res); LBL_MU:mp_clear (&mu); LBL_M: mp_clear(&M[1]); for (x = 1<<(winsize-1); x < (1 << winsize); x++) { mp_clear (&M[x]); } return err; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_s_mp_mul_digs.c000644 000765 000024 00000004603 12534342605 024015 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_S_MP_MUL_DIGS_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* multiplies |a| * |b| and only computes upto digs digits of result * HAC pp. 595, Algorithm 14.12 Modified so you can control how * many digits of output are created. */ int s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) { mp_int t; int res, pa, pb, ix, iy; mp_digit u; mp_word r; mp_digit tmpx, *tmpt, *tmpy; /* can we use the fast multiplier? */ if (((digs) < MP_WARRAY) && MIN (a->used, b->used) < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { return fast_s_mp_mul_digs (a, b, c, digs); } if ((res = mp_init_size (&t, digs)) != MP_OKAY) { return res; } t.used = digs; /* compute the digits of the product directly */ pa = a->used; for (ix = 0; ix < pa; ix++) { /* set the carry to zero */ u = 0; /* limit ourselves to making digs digits of output */ pb = MIN (b->used, digs - ix); /* setup some aliases */ /* copy of the digit from a used within the nested loop */ tmpx = a->dp[ix]; /* an alias for the destination shifted ix places */ tmpt = t.dp + ix; /* an alias for the digits of b */ tmpy = b->dp; /* compute the columns of the output and propagate the carry */ for (iy = 0; iy < pb; iy++) { /* compute the column as a mp_word */ r = ((mp_word)*tmpt) + ((mp_word)tmpx) * ((mp_word)*tmpy++) + ((mp_word) u); /* the new column is the lower part of the result */ *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); /* get the carry word from the result */ u = (mp_digit) (r >> ((mp_word) DIGIT_BIT)); } /* set carry if it is placed below digs */ if (ix + iy < digs) { *tmpt = u; } } mp_clamp (&t); mp_exch (&t, c); mp_clear (&t); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_s_mp_mul_high_digs.c000644 000765 000024 00000004142 12534342605 025012 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_S_MP_MUL_HIGH_DIGS_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* multiplies |a| * |b| and does not compute the lower digs digits * [meant to get the higher part of the product] */ int s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) { mp_int t; int res, pa, pb, ix, iy; mp_digit u; mp_word r; mp_digit tmpx, *tmpt, *tmpy; /* can we use the fast multiplier? */ #ifdef BN_FAST_S_MP_MUL_HIGH_DIGS_C if (((a->used + b->used + 1) < MP_WARRAY) && MIN (a->used, b->used) < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { return fast_s_mp_mul_high_digs (a, b, c, digs); } #endif if ((res = mp_init_size (&t, a->used + b->used + 1)) != MP_OKAY) { return res; } t.used = a->used + b->used + 1; pa = a->used; pb = b->used; for (ix = 0; ix < pa; ix++) { /* clear the carry */ u = 0; /* left hand side of A[ix] * B[iy] */ tmpx = a->dp[ix]; /* alias to the address of where the digits will be stored */ tmpt = &(t.dp[digs]); /* alias for where to read the right hand side from */ tmpy = b->dp + (digs - ix); for (iy = digs - ix; iy < pb; iy++) { /* calculate the double precision result */ r = ((mp_word)*tmpt) + ((mp_word)tmpx) * ((mp_word)*tmpy++) + ((mp_word) u); /* get the lower part */ *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); /* carry the carry */ u = (mp_digit) (r >> ((mp_word) DIGIT_BIT)); } *tmpt = u; } mp_clamp (&t); mp_exch (&t, c); mp_clear (&t); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_s_mp_sqr.c000644 000765 000024 00000004377 12534342605 023027 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_S_MP_SQR_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* low level squaring, b = a*a, HAC pp.596-597, Algorithm 14.16 */ int s_mp_sqr (mp_int * a, mp_int * b) { mp_int t; int res, ix, iy, pa; mp_word r; mp_digit u, tmpx, *tmpt; pa = a->used; if ((res = mp_init_size (&t, 2*pa + 1)) != MP_OKAY) { return res; } /* default used is maximum possible size */ t.used = 2*pa + 1; for (ix = 0; ix < pa; ix++) { /* first calculate the digit at 2*ix */ /* calculate double precision result */ r = ((mp_word) t.dp[2*ix]) + ((mp_word)a->dp[ix])*((mp_word)a->dp[ix]); /* store lower part in result */ t.dp[ix+ix] = (mp_digit) (r & ((mp_word) MP_MASK)); /* get the carry */ u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); /* left hand side of A[ix] * A[iy] */ tmpx = a->dp[ix]; /* alias for where to store the results */ tmpt = t.dp + (2*ix + 1); for (iy = ix + 1; iy < pa; iy++) { /* first calculate the product */ r = ((mp_word)tmpx) * ((mp_word)a->dp[iy]); /* now calculate the double precision result, note we use * addition instead of *2 since it's easier to optimize */ r = ((mp_word) *tmpt) + r + r + ((mp_word) u); /* store lower part */ *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); /* get carry */ u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); } /* propagate upwards */ while (u != ((mp_digit) 0)) { r = ((mp_word) *tmpt) + ((mp_word) u); *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); } } mp_clamp (&t); mp_exch (&t, b); mp_clear (&t); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bn_s_mp_sub.c000644 000765 000024 00000004164 12534342605 023005 0ustar00williamcoledastaff000000 000000 #include #ifdef BN_S_MP_SUB_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* low level subtraction (assumes |a| > |b|), HAC pp.595 Algorithm 14.9 */ int s_mp_sub (mp_int * a, mp_int * b, mp_int * c) { int olduse, res, min, max; /* find sizes */ min = b->used; max = a->used; /* init result */ if (c->alloc < max) { if ((res = mp_grow (c, max)) != MP_OKAY) { return res; } } olduse = c->used; c->used = max; { register mp_digit u, *tmpa, *tmpb, *tmpc; register int i; /* alias for digit pointers */ tmpa = a->dp; tmpb = b->dp; tmpc = c->dp; /* set carry to zero */ u = 0; for (i = 0; i < min; i++) { /* T[i] = A[i] - B[i] - U */ *tmpc = *tmpa++ - *tmpb++ - u; /* U = carry bit of T[i] * Note this saves performing an AND operation since * if a carry does occur it will propagate all the way to the * MSB. As a result a single shift is enough to get the carry */ u = *tmpc >> ((mp_digit)(CHAR_BIT * sizeof (mp_digit) - 1)); /* Clear carry from T[i] */ *tmpc++ &= MP_MASK; } /* now copy higher words if any, e.g. if A has more digits than B */ for (; i < max; i++) { /* T[i] = A[i] - U */ *tmpc = *tmpa++ - u; /* U = carry bit of T[i] */ u = *tmpc >> ((mp_digit)(CHAR_BIT * sizeof (mp_digit) - 1)); /* Clear carry from T[i] */ *tmpc++ &= MP_MASK; } /* clear digits above used (since we may not have grown result above) */ for (i = c->used; i < olduse; i++) { *tmpc++ = 0; } } mp_clamp (c); return MP_OKAY; } #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/bncore.c000644 000765 000024 00000002362 12534342605 021765 0ustar00williamcoledastaff000000 000000 #include #ifdef BNCORE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Known optimal configurations CPU /Compiler /MUL CUTOFF/SQR CUTOFF ------------------------------------------------------------- Intel P4 Northwood /GCC v3.4.1 / 88/ 128/LTM 0.32 ;-) AMD Athlon64 /GCC v3.4.4 / 80/ 120/LTM 0.35 */ int KARATSUBA_MUL_CUTOFF = 80, /* Min. number of digits before Karatsuba multiplication is used. */ KARATSUBA_SQR_CUTOFF = 120, /* Min. number of digits before Karatsuba squaring is used. */ TOOM_MUL_CUTOFF = 350, /* no optimal values of these are known yet so set em high */ TOOM_SQR_CUTOFF = 400; #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/changes.txt000644 000765 000024 00000060243 12534342605 022524 0ustar00williamcoledastaff000000 000000 July 23rd, 2010 v0.42.0 -- Fix for mp_prime_next_prime() bug when checking generated prime -- allow mp_shrink to shrink initialized, but empty MPI's -- Added project and solution files for Visual Studio 2005 and Visual Studio 2008. March 10th, 2007 v0.41 -- Wolfgang Ehrhardt suggested a quick fix to mp_div_d() which makes the detection of powers of two quicker. -- [CRI] Added libtommath.dsp for Visual C++ users. December 24th, 2006 v0.40 -- Updated makefile to properly support LIBNAME -- Fixed bug in fast_s_mp_mul_high_digs() which overflowed (line 83), thanks Valgrind! April 4th, 2006 v0.39 -- Jim Wigginton pointed out my Montgomery examples in figures 6.4 and 6.6 were off by one, k should be 9 not 8 -- Bruce Guenter suggested I use --tag=CC for libtool builds where the compiler may think it's C++. -- "mm" from sci.crypt pointed out that my mp_gcd was sub-optimal (I also updated and corrected the book) -- updated some of the @@ tags in tommath.src to reflect source changes. -- updated email and url info in all source files Jan 26th, 2006 v0.38 -- broken makefile.shared fixed -- removed some carry stores that were not required [updated text] November 18th, 2005 v0.37 -- [Don Porter] reported on a TCL list [HEY SEND ME BUGREPORTS ALREADY!!!] that mp_add_d() would compute -0 with some inputs. Fixed. -- [rinick@gmail.com] reported the makefile.bcc was messed up. Fixed. -- [Kevin Kenny] reported some issues with mp_toradix_n(). Now it doesn't require a min of 3 chars of output. -- Made the make command renamable. Wee August 1st, 2005 v0.36 -- LTM_PRIME_2MSB_ON was fixed and the "OFF" flag was removed. -- [Peter LaDow] found a typo in the XREALLOC macro -- [Peter LaDow] pointed out that mp_read_(un)signed_bin should have "const" on the input -- Ported LTC patch to fix the prime_random_ex() function to get the bitsize correct [and the maskOR flags] -- Kevin Kenny pointed out a stray // -- David Hulton pointed out a typo in the textbook [mp_montgomery_setup() pseudo-code] -- Neal Hamilton (Elliptic Semiconductor) pointed out that my Karatsuba notation was backwards and that I could use unsigned operations in the routine. -- Paul Schmidt pointed out a linking error in mp_exptmod() when BN_S_MP_EXPTMOD_C is undefined (and another for read_radix) -- Updated makefiles to be way more flexible March 12th, 2005 v0.35 -- Stupid XOR function missing line again... oops. -- Fixed bug in invmod not handling negative inputs correctly [Wolfgang Ehrhardt] -- Made exteuclid always give positive u3 output...[ Wolfgang Ehrhardt ] -- [Wolfgang Ehrhardt] Suggested a fix for mp_reduce() which avoided underruns. ;-) -- mp_rand() would emit one too many digits and it was possible to get a 0 out of it ... oops -- Added montgomery to the testing to make sure it handles 1..10 digit moduli correctly -- Fixed bug in comba that would lead to possible erroneous outputs when "pa < digs" -- Fixed bug in mp_toradix_size for "0" [Kevin Kenny] -- Updated chapters 1-5 of the textbook ;-) It now talks about the new comba code! February 12th, 2005 v0.34 -- Fixed two more small errors in mp_prime_random_ex() -- Fixed overflow in mp_mul_d() [Kevin Kenny] -- Added mp_to_(un)signed_bin_n() functions which do bounds checking for ya [and report the size] -- Added "large" diminished radix support. Speeds up things like DSA where the moduli is of the form 2^k - P for some P < 2^(k/2) or so Actually is faster than Montgomery on my AMD64 (and probably much faster on a P4) -- Updated the manual a bit -- Ok so I haven't done the textbook work yet... My current freelance gig has landed me in France till the end of Feb/05. Once I get back I'll have tons of free time and I plan to go to town on the book. As of this release the API will freeze. At least until the book catches up with all the changes. I welcome bug reports but new algorithms will have to wait. December 23rd, 2004 v0.33 -- Fixed "small" variant for mp_div() which would munge with negative dividends... -- Fixed bug in mp_prime_random_ex() which would set the most significant byte to zero when no special flags were set -- Fixed overflow [minor] bug in fast_s_mp_sqr() -- Made the makefiles easier to configure the group/user that ltm will install as -- Fixed "final carry" bug in comba multipliers. (Volkan Ceylan) -- Matt Johnston pointed out a missing semi-colon in mp_exptmod October 29th, 2004 v0.32 -- Added "makefile.shared" for shared object support -- Added more to the build options/configs in the manual -- Started the Depends framework, wrote dep.pl to scan deps and produce "callgraph.txt" ;-) -- Wrote SC_RSA_1 which will enable close to the minimum required to perform RSA on 32-bit [or 64-bit] platforms with LibTomCrypt -- Merged in the small/slower mp_div replacement. You can now toggle which you want to use as your mp_div() at build time. Saves roughly 8KB or so. -- Renamed a few files and changed some comments to make depends system work better. (No changes to function names) -- Merged in new Combas that perform 2 reads per inner loop instead of the older 3reads/2writes per inner loop of the old code. Really though if you want speed learn to use TomsFastMath ;-) August 9th, 2004 v0.31 -- "profiled" builds now :-) new timings for Intel Northwoods -- Added "pretty" build target -- Update mp_init() to actually assign 0's instead of relying on calloc() -- "Wolfgang Ehrhardt" found a bug in mp_mul() where if you multiply a negative by zero you get negative zero as the result. Oops. -- J Harper from PeerSec let me toy with his AMD64 and I got 60-bit digits working properly [this also means that I fixed a bug where if sizeof(int) < sizeof(mp_digit) it would bug] April 11th, 2004 v0.30 -- Added "mp_toradix_n" which stores upto "n-1" least significant digits of an mp_int -- Johan Lindh sent a patch so MSVC wouldn't whine about redefining malloc [in weird dll modes] -- Henrik Goldman spotted a missing OPT_CAST in mp_fwrite() -- Tuned tommath.h so that when MP_LOW_MEM is defined MP_PREC shall be reduced. [I also allow MP_PREC to be externally defined now] -- Sped up mp_cnt_lsb() by using a 4x4 table [e.g. 4x speedup] -- Added mp_prime_random_ex() which is a more versatile prime generator accurate to exact bit lengths (unlike the deprecated but still available mp_prime_random() which is only accurate to byte lengths). See the new LTM_PRIME_* flags ;-) -- Alex Polushin contributed an optimized mp_sqrt() as well as mp_get_int() and mp_is_square(). I've cleaned them all up to be a little more consistent [along with one bug fix] for this release. -- Added mp_init_set and mp_init_set_int to initialize and set small constants with one function call. -- Removed /etclib directory [um LibTomPoly deprecates this]. -- Fixed mp_mod() so the sign of the result agrees with the sign of the modulus. ++ N.B. My semester is almost up so expect updates to the textbook to be posted to the libtomcrypt.org website. Jan 25th, 2004 v0.29 ++ Note: "Henrik" from the v0.28 changelog refers to Henrik Goldman ;-) -- Added fix to mp_shrink to prevent a realloc when used == 0 [e.g. realloc zero bytes???] -- Made the mp_prime_rabin_miller_trials() function internal table smaller and also set the minimum number of tests to two (sounds a bit safer). -- Added a mp_exteuclid() which computes the extended euclidean algorithm. -- Fixed a memory leak in s_mp_exptmod() [called when Barrett reduction is to be used] which would arise if a multiplication or subsequent reduction failed [would not free the temp result]. -- Made an API change to mp_radix_size(). It now returns an error code and stores the required size through an "int star" passed to it. Dec 24th, 2003 v0.28 -- Henrik Goldman suggested I add casts to the montomgery code [stores into mu...] so compilers wouldn't spew [erroneous] diagnostics... fixed. -- Henrik Goldman also spotted two typos. One in mp_radix_size() and another in mp_toradix(). -- Added fix to mp_shrink() to avoid a memory leak. -- Added mp_prime_random() which requires a callback to make truly random primes of a given nature (idea from chat with Niels Ferguson at Crypto'03) -- Picked up a second wind. I'm filled with Gooo. Mission Gooo! -- Removed divisions from mp_reduce_is_2k() -- Sped up mp_div_d() [general case] to use only one division per digit instead of two. -- Added the heap macros from LTC to LTM. Now you can easily [by editing four lines of tommath.h] change the name of the heap functions used in LTM [also compatible with LTC via MPI mode] -- Added bn_prime_rabin_miller_trials() which gives the number of Rabin-Miller trials to achieve a failure rate of less than 2^-96 -- fixed bug in fast_mp_invmod(). The initial testing logic was wrong. An invalid input is not when "a" and "b" are even it's when "b" is even [the algo is for odd moduli only]. -- Started a new manual [finally]. It is incomplete and will be finished as time goes on. I had to stop adding full demos around half way in chapter three so I could at least get a good portion of the manual done. If you really need help using the library you can always email me! -- My Textbook is now included as part of the package [all Public Domain] Sept 19th, 2003 v0.27 -- Removed changes.txt~ which was made by accident since "kate" decided it was a good time to re-enable backups... [kde is fun!] -- In mp_grow() "a->dp" is not overwritten by realloc call [re: memory leak] Now if mp_grow() fails the mp_int is still valid and can be cleared via mp_clear() to reclaim the memory. -- Henrik Goldman found a buffer overflow bug in mp_add_d(). Fixed. -- Cleaned up mp_mul_d() to be much easier to read and follow. Aug 29th, 2003 v0.26 -- Fixed typo that caused warning with GCC 3.2 -- Martin Marcel noticed a bug in mp_neg() that allowed negative zeroes. Also, Martin is the fellow who noted the bugs in mp_gcd() of 0.24/0.25. -- Martin Marcel noticed an optimization [and slight bug] in mp_lcm(). -- Added fix to mp_read_unsigned_bin to prevent a buffer overflow. -- Beefed up the comments in the baseline multipliers [and montgomery] -- Added "mont" demo to the makefile.msvc in etc/ -- Optimized sign compares in mp_cmp from 4 to 2 cases. Aug 4th, 2003 v0.25 -- Fix to mp_gcd again... oops (0,-a) == (-a, 0) == a -- Fix to mp_clear which didn't reset the sign [Greg Rose] -- Added mp_error_to_string() to convert return codes to strings. [Greg Rose] -- Optimized fast_mp_invmod() to do the test for invalid inputs [both even] first so temps don't have to be initialized if it's going to fail. -- Optimized mp_gcd() by removing mp_div_2d calls for when one of the inputs is odd. -- Tons of new comments, some indentation fixups, etc. -- mp_jacobi() returns MP_VAL if the modulus is less than or equal to zero. -- fixed two typos in the header of each file :-) -- LibTomMath is officially Public Domain [see LICENSE] July 15th, 2003 v0.24 -- Optimized mp_add_d and mp_sub_d to not allocate temporary variables -- Fixed mp_gcd() so the gcd of 0,0 is 0. Allows the gcd operation to be chained e.g. (0,0,a) == a [instead of 1] -- Should be one of the last release for a while. Working on LibTomMath book now. -- optimized the pprime demo [/etc/pprime.c] to first make a huge table of single digit primes then it reads them randomly instead of randomly choosing/testing single digit primes. July 12th, 2003 v0.23 -- Optimized mp_prime_next_prime() to not use mp_mod [via is_divisible()] in each iteration. Instead now a smaller table is kept of the residues which can be updated without division. -- Fixed a bug in next_prime() where an input of zero would be treated as odd and have two added to it [to move to the next odd]. -- fixed a bug in prime_fermat() and prime_miller_rabin() which allowed the base to be negative, zero or one. Normally the test is only valid if the base is greater than one. -- changed the next_prime() prototype to accept a new parameter "bbs_style" which will find the next prime congruent to 3 mod 4. The default [bbs_style==0] will make primes which are either congruent to 1 or 3 mod 4. -- fixed mp_read_unsigned_bin() so that it doesn't include both code for the case DIGIT_BIT < 8 and >= 8 -- optimized div_d() to easy out on division by 1 [or if a == 0] and use logical shifts if the divisor is a power of two. -- the default DIGIT_BIT type was not int for non-default builds. Fixed. July 2nd, 2003 v0.22 -- Fixed up mp_invmod so the result is properly in range now [was always congruent to the inverse...] -- Fixed up s_mp_exptmod and mp_exptmod_fast so the lower half of the pre-computed table isn't allocated which makes the algorithm use half as much ram. -- Fixed the install script not to make the book :-) [which isn't included anyways] -- added mp_cnt_lsb() which counts how many of the lsbs are zero -- optimized mp_gcd() to use the new mp_cnt_lsb() to replace multiple divisions by two by a single division. -- applied similar optimization to mp_prime_miller_rabin(). -- Fixed a bug in both mp_invmod() and fast_mp_invmod() which tested for odd via "mp_iseven() == 0" which is not valid [since zero is not even either]. June 19th, 2003 v0.21 -- Fixed bug in mp_mul_d which would not handle sign correctly [would not always forward it] -- Removed the #line lines from gen.pl [was in violation of ISO C] June 8th, 2003 v0.20 -- Removed the book from the package. Added the TDCAL license document. -- This release is officially pure-bred TDCAL again [last officially TDCAL based release was v0.16] June 6th, 2003 v0.19 -- Fixed a bug in mp_montgomery_reduce() which was introduced when I tweaked mp_rshd() in the previous release. Essentially the digits were not trimmed before the compare which cause a subtraction to occur all the time. -- Fixed up etc/tune.c a bit to stop testing new cutoffs after 16 failures [to find more optimal points]. Brute force ho! May 29th, 2003 v0.18 -- Fixed a bug in s_mp_sqr which would handle carries properly just not very elegantly. (e.g. correct result, just bad looking code) -- Fixed bug in mp_sqr which still had a 512 constant instead of MP_WARRAY -- Added Toom-Cook multipliers [needs tuning!] -- Added efficient divide by 3 algorithm mp_div_3 -- Re-wrote mp_div_d to be faster than calling mp_div -- Added in a donated BCC makefile and a single page LTM poster (ahalhabsi@sbcglobal.net) -- Added mp_reduce_2k which reduces an input modulo n = 2**p - k for any single digit k -- Made the exptmod system be aware of the 2k reduction algorithms. -- Rewrote mp_dr_reduce to be smaller, simpler and easier to understand. May 17th, 2003 v0.17 -- Benjamin Goldberg submitted optimized mp_add and mp_sub routines. A new gen.pl as well as several smaller suggestions. Thanks! -- removed call to mp_cmp in inner loop of mp_div and put mp_cmp_mag in its place :-) -- Fixed bug in mp_exptmod that would cause it to fail for odd moduli when DIGIT_BIT != 28 -- mp_exptmod now also returns errors if the modulus is negative and will handle negative exponents -- mp_prime_is_prime will now return true if the input is one of the primes in the prime table -- Damian M Gryski (dgryski@uwaterloo.ca) found a index out of bounds error in the mp_fast_s_mp_mul_high_digs function which didn't come up before. (fixed) -- Refactored the DR reduction code so there is only one function per file. -- Fixed bug in the mp_mul() which would erroneously avoid the faster multiplier [comba] when it was allowed. The bug would not cause the incorrect value to be produced just less efficient (fixed) -- Fixed similar bug in the Montgomery reduction code. -- Added tons of (mp_digit) casts so the 7/15/28/31 bit digit code will work flawlessly out of the box. Also added limited support for 64-bit machines with a 60-bit digit. Both thanks to Tom Wu (tom@arcot.com) -- Added new comments here and there, cleaned up some code [style stuff] -- Fixed a lingering typo in mp_exptmod* that would set bitcnt to zero then one. Very silly stuff :-) -- Fixed up mp_exptmod_fast so it would set "redux" to the comba Montgomery reduction if allowed. This saves quite a few calls and if statements. -- Added etc/mont.c a test of the Montgomery reduction [assuming all else works :-| ] -- Fixed up etc/tune.c to use a wider test range [more appropriate] also added a x86 based addition which uses RDTSC for high precision timing. -- Updated demo/demo.c to remove MPI stuff [won't work anyways], made the tests run for 2 seconds each so its not so insanely slow. Also made the output space delimited [and fixed up various errors] -- Added logs directory, logs/graph.dem which will use gnuplot to make a series of PNG files that go with the pre-made index.html. You have to build [via make timing] and run ltmtest first in the root of the package. -- Fixed a bug in mp_sub and mp_add where "-a - -a" or "-a + a" would produce -0 as the result [obviously invalid]. -- Fixed a bug in mp_rshd. If the count == a.used it should zero/return [instead of shifting] -- Fixed a "off-by-one" bug in mp_mul2d. The initial size check on alloc would be off by one if the residue shifting caused a carry. -- Fixed a bug where s_mp_mul_digs() would not call the Comba based routine if allowed. This made Barrett reduction slower than it had to be. Mar 29th, 2003 v0.16 -- Sped up mp_div by making normalization one shift call -- Sped up mp_mul_2d/mp_div_2d by aliasing pointers :-) -- Cleaned up mp_gcd to use the macros for odd/even detection -- Added comments here and there, mostly there but occasionally here too. Mar 22nd, 2003 v0.15 -- Added series of prime testing routines to lib -- Fixed up etc/tune.c -- Added DR reduction algorithm -- Beefed up the manual more. -- Fixed up demo/demo.c so it doesn't have so many warnings and it does the full series of tests -- Added "pre-gen" directory which will hold a "gen.pl"'ed copy of the entire lib [done at zipup time so its always the latest] -- Added conditional casts for C++ users [boo!] Mar 15th, 2003 v0.14 -- Tons of manual updates -- cleaned up the directory -- added MSVC makefiles -- source changes [that I don't recall] -- Fixed up the lshd/rshd code to use pointer aliasing -- Fixed up the mul_2d and div_2d to not call rshd/lshd unless needed -- Fixed up etc/tune.c a tad -- fixed up demo/demo.c to output comma-delimited results of timing also fixed up timing demo to use a finer granularity for various functions -- fixed up demo/demo.c testing to pause during testing so my Duron won't catch on fire [stays around 31-35C during testing :-)] Feb 13th, 2003 v0.13 -- tons of minor speed-ups in low level add, sub, mul_2 and div_2 which propagate to other functions like mp_invmod, mp_div, etc... -- Sped up mp_exptmod_fast by using new code to find R mod m [e.g. B^n mod m] -- minor fixes Jan 17th, 2003 v0.12 -- re-wrote the majority of the makefile so its more portable and will install via "make install" on most *nix platforms -- Re-packaged all the source as seperate files. Means the library a single file packagage any more. Instead of just adding "bn.c" you have to add libtommath.a -- Renamed "bn.h" to "tommath.h" -- Changes to the manual to reflect all of this -- Used GNU Indent to clean up the source Jan 15th, 2003 v0.11 -- More subtle fixes -- Moved to gentoo linux [hurrah!] so made *nix specific fixes to the make process -- Sped up the montgomery reduction code quite a bit -- fixed up demo so when building timing for the x86 it assumes ELF format now Jan 9th, 2003 v0.10 -- Pekka Riikonen suggested fixes to the radix conversion code. -- Added baseline montgomery and comba montgomery reductions, sped up exptmods [to a point, see bn.h for MONTGOMERY_EXPT_CUTOFF] Jan 6th, 2003 v0.09 -- Updated the manual to reflect recent changes. :-) -- Added Jacobi function (mp_jacobi) to supplement the number theory side of the lib -- Added a Mersenne prime finder demo in ./etc/mersenne.c Jan 2nd, 2003 v0.08 -- Sped up the multipliers by moving the inner loop variables into a smaller scope -- Corrected a bunch of small "warnings" -- Added more comments -- Made "mtest" be able to use /dev/random, /dev/urandom or stdin for RNG data -- Corrected some bugs where error messages were potentially ignored -- add etc/pprime.c program which makes numbers which are provably prime. Jan 1st, 2003 v0.07 -- Removed alot of heap operations from core functions to speed them up -- Added a root finding function [and mp_sqrt macro like from MPI] -- Added more to manual Dec 31st, 2002 v0.06 -- Sped up the s_mp_add, s_mp_sub which inturn sped up mp_invmod, mp_exptmod, etc... -- Cleaned up the header a bit more Dec 30th, 2002 v0.05 -- Builds with MSVC out of the box -- Fixed a bug in mp_invmod w.r.t. even moduli -- Made mp_toradix and mp_read_radix use char instead of unsigned char arrays -- Fixed up exptmod to use fewer multiplications -- Fixed up mp_init_size to use only one heap operation -- Note there is a slight "off-by-one" bug in the library somewhere without the padding (see the source for comment) the library crashes in libtomcrypt. Anyways a reasonable workaround is to pad the numbers which will always correct it since as the numbers grow the padding will still be beyond the end of the number -- Added more to the manual Dec 29th, 2002 v0.04 -- Fixed a memory leak in mp_to_unsigned_bin -- optimized invmod code -- Fixed bug in mp_div -- use exchange instead of copy for results -- added a bit more to the manual Dec 27th, 2002 v0.03 -- Sped up s_mp_mul_high_digs by not computing the carries of the lower digits -- Fixed a bug where mp_set_int wouldn't zero the value first and set the used member. -- fixed a bug in s_mp_mul_high_digs where the limit placed on the result digits was not calculated properly -- fixed bugs in add/sub/mul/sqr_mod functions where if the modulus and dest were the same it wouldn't work -- fixed a bug in mp_mod and mp_mod_d concerning negative inputs -- mp_mul_d didn't preserve sign -- Many many many many fixes -- Works in LibTomCrypt now :-) -- Added iterations to the timing demos... more accurate. -- Tom needs a job. Dec 26th, 2002 v0.02 -- Fixed a few "slips" in the manual. This is "LibTomMath" afterall :-) -- Added mp_cmp_mag, mp_neg, mp_abs and mp_radix_size that were missing. -- Sped up the fast [comba] multipliers more [yahoo!] Dec 25th,2002 v0.01 -- Initial release. Gimme a break. -- Todo list, add details to manual [e.g. algorithms] more comments in code example programs nqp-2015.11/3rdparty/libtommath/tommath.h000644 000765 000024 00000042403 12534342605 022173 0ustar00williamcoledastaff000000 000000 /* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@gmail.com, http://math.libtomcrypt.com */ #ifndef BN_H_ #define BN_H_ #include #include #include #include #include #include #ifndef MIN #define MIN(x,y) ((x)<(y)?(x):(y)) #endif #ifndef MAX #define MAX(x,y) ((x)>(y)?(x):(y)) #endif #ifdef __cplusplus extern "C" { /* C++ compilers don't like assigning void * to mp_digit * */ #define OPT_CAST(x) (x *) #else /* C on the other hand doesn't care */ #define OPT_CAST(x) #endif /* detect 64-bit mode if possible */ #if defined(__x86_64__) #if !(defined(MP_64BIT) && defined(MP_16BIT) && defined(MP_8BIT)) #define MP_64BIT #endif #endif /* some default configurations. * * A "mp_digit" must be able to hold DIGIT_BIT + 1 bits * A "mp_word" must be able to hold 2*DIGIT_BIT + 1 bits * * At the very least a mp_digit must be able to hold 7 bits * [any size beyond that is ok provided it doesn't overflow the data type] */ #ifdef MP_8BIT typedef unsigned char mp_digit; typedef unsigned short mp_word; #elif defined(MP_16BIT) typedef unsigned short mp_digit; typedef unsigned long mp_word; #elif defined(MP_64BIT) /* for GCC only on supported platforms */ #ifndef CRYPT typedef unsigned long long ulong64; typedef signed long long long64; #endif typedef unsigned long mp_digit; typedef unsigned long mp_word __attribute__ ((mode(TI))); #define DIGIT_BIT 60 #else /* this is the default case, 28-bit digits */ /* this is to make porting into LibTomCrypt easier :-) */ #ifndef CRYPT #if defined(_MSC_VER) || defined(__BORLANDC__) typedef unsigned __int64 ulong64; typedef signed __int64 long64; #else typedef unsigned long long ulong64; typedef signed long long long64; #endif #endif typedef unsigned long mp_digit; typedef ulong64 mp_word; #ifdef MP_31BIT /* this is an extension that uses 31-bit digits */ #define DIGIT_BIT 31 #else /* default case is 28-bit digits, defines MP_28BIT as a handy macro to test */ #define DIGIT_BIT 28 #define MP_28BIT #endif #endif /* define heap macros */ #ifndef CRYPT /* default to libc stuff */ #ifndef XMALLOC #define XMALLOC malloc #define XFREE free #define XREALLOC realloc #define XCALLOC calloc #else /* prototypes for our heap functions */ extern void *XMALLOC(size_t n); extern void *XREALLOC(void *p, size_t n); extern void *XCALLOC(size_t n, size_t s); extern void XFREE(void *p); #endif #endif /* otherwise the bits per digit is calculated automatically from the size of a mp_digit */ #ifndef DIGIT_BIT #define DIGIT_BIT ((int)((CHAR_BIT * sizeof(mp_digit) - 1))) /* bits per digit */ #endif /* platforms that can use a better rand function */ #if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__) #define MP_USE_ALT_RAND 1 #endif /* use arc4random on platforms that support it */ #ifdef MP_USE_ALT_RAND #define MP_GEN_RANDOM() arc4random() #else #define MP_GEN_RANDOM() rand() #endif #define MP_DIGIT_BIT DIGIT_BIT #define MP_MASK ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1)) #define MP_DIGIT_MAX MP_MASK /* equalities */ #define MP_LT -1 /* less than */ #define MP_EQ 0 /* equal to */ #define MP_GT 1 /* greater than */ #define MP_ZPOS 0 /* positive integer */ #define MP_NEG 1 /* negative */ #define MP_OKAY 0 /* ok result */ #define MP_MEM -2 /* out of mem */ #define MP_VAL -3 /* invalid input */ #define MP_RANGE MP_VAL #define MP_YES 1 /* yes response */ #define MP_NO 0 /* no response */ /* Primality generation flags */ #define LTM_PRIME_BBS 0x0001 /* BBS style prime */ #define LTM_PRIME_SAFE 0x0002 /* Safe prime (p-1)/2 == prime */ #define LTM_PRIME_2MSB_ON 0x0008 /* force 2nd MSB to 1 */ typedef int mp_err; /* you'll have to tune these... */ extern int KARATSUBA_MUL_CUTOFF, KARATSUBA_SQR_CUTOFF, TOOM_MUL_CUTOFF, TOOM_SQR_CUTOFF; /* define this to use lower memory usage routines (exptmods mostly) */ /* #define MP_LOW_MEM */ /* default precision */ #ifndef MP_PREC #ifndef MP_LOW_MEM #define MP_PREC 32 /* default digits of precision */ #else #define MP_PREC 8 /* default digits of precision */ #endif #endif /* size of comba arrays, should be at least 2 * 2**(BITS_PER_WORD - BITS_PER_DIGIT*2) */ #define MP_WARRAY (1 << (sizeof(mp_word) * CHAR_BIT - 2 * DIGIT_BIT + 1)) /* the infamous mp_int structure */ typedef struct { int used, alloc, sign; mp_digit *dp; } mp_int; /* callback for mp_prime_random, should fill dst with random bytes and return how many read [upto len] */ typedef int ltm_prime_callback(unsigned char *dst, int len, void *dat); #define USED(m) ((m)->used) #define DIGIT(m,k) ((m)->dp[(k)]) #define SIGN(m) ((m)->sign) /* error code to char* string */ char *mp_error_to_string(int code); /* ---> init and deinit bignum functions <--- */ /* init a bignum */ int mp_init(mp_int *a); /* free a bignum */ void mp_clear(mp_int *a); /* init a null terminated series of arguments */ int mp_init_multi(mp_int *mp, ...); /* clear a null terminated series of arguments */ void mp_clear_multi(mp_int *mp, ...); /* exchange two ints */ void mp_exch(mp_int *a, mp_int *b); /* shrink ram required for a bignum */ int mp_shrink(mp_int *a); /* grow an int to a given size */ int mp_grow(mp_int *a, int size); /* init to a given number of digits */ int mp_init_size(mp_int *a, int size); /* ---> Basic Manipulations <--- */ #define mp_iszero(a) (((a)->used == 0) ? MP_YES : MP_NO) #define mp_iseven(a) (((a)->used > 0 && (((a)->dp[0] & 1) == 0)) ? MP_YES : MP_NO) #define mp_isodd(a) (((a)->used > 0 && (((a)->dp[0] & 1) == 1)) ? MP_YES : MP_NO) /* set to zero */ void mp_zero(mp_int *a); /* set to a digit */ void mp_set(mp_int *a, mp_digit b); /* set a 32-bit const */ int mp_set_int(mp_int *a, unsigned long b); /* set a platform dependent unsigned long value */ int mp_set_long(mp_int *a, unsigned long b); /* get a 32-bit value */ unsigned long mp_get_int(mp_int * a); /* get a platform dependent unsigned long value */ unsigned long mp_get_long(mp_int * a); /* initialize and set a digit */ int mp_init_set (mp_int * a, mp_digit b); /* initialize and set 32-bit value */ int mp_init_set_int (mp_int * a, unsigned long b); /* copy, b = a */ int mp_copy(mp_int *a, mp_int *b); /* inits and copies, a = b */ int mp_init_copy(mp_int *a, mp_int *b); /* trim unused digits */ void mp_clamp(mp_int *a); /* ---> digit manipulation <--- */ /* right shift by "b" digits */ void mp_rshd(mp_int *a, int b); /* left shift by "b" digits */ int mp_lshd(mp_int *a, int b); /* c = a / 2**b */ int mp_div_2d(mp_int *a, int b, mp_int *c, mp_int *d); /* b = a/2 */ int mp_div_2(mp_int *a, mp_int *b); /* c = a * 2**b */ int mp_mul_2d(mp_int *a, int b, mp_int *c); /* b = a*2 */ int mp_mul_2(mp_int *a, mp_int *b); /* c = a mod 2**d */ int mp_mod_2d(mp_int *a, int b, mp_int *c); /* computes a = 2**b */ int mp_2expt(mp_int *a, int b); /* Counts the number of lsbs which are zero before the first zero bit */ int mp_cnt_lsb(mp_int *a); /* I Love Earth! */ /* makes a pseudo-random int of a given size */ int mp_rand(mp_int *a, int digits); /* ---> binary operations <--- */ /* c = a XOR b */ int mp_xor(mp_int *a, mp_int *b, mp_int *c); /* c = a OR b */ int mp_or(mp_int *a, mp_int *b, mp_int *c); /* c = a AND b */ int mp_and(mp_int *a, mp_int *b, mp_int *c); /* ---> Basic arithmetic <--- */ /* b = -a */ int mp_neg(mp_int *a, mp_int *b); /* b = |a| */ int mp_abs(mp_int *a, mp_int *b); /* compare a to b */ int mp_cmp(mp_int *a, mp_int *b); /* compare |a| to |b| */ int mp_cmp_mag(mp_int *a, mp_int *b); /* c = a + b */ int mp_add(mp_int *a, mp_int *b, mp_int *c); /* c = a - b */ int mp_sub(mp_int *a, mp_int *b, mp_int *c); /* c = a * b */ int mp_mul(mp_int *a, mp_int *b, mp_int *c); /* b = a*a */ int mp_sqr(mp_int *a, mp_int *b); /* a/b => cb + d == a */ int mp_div(mp_int *a, mp_int *b, mp_int *c, mp_int *d); /* c = a mod b, 0 <= c < b */ int mp_mod(mp_int *a, mp_int *b, mp_int *c); /* ---> single digit functions <--- */ /* compare against a single digit */ int mp_cmp_d(mp_int *a, mp_digit b); /* c = a + b */ int mp_add_d(mp_int *a, mp_digit b, mp_int *c); /* c = a - b */ int mp_sub_d(mp_int *a, mp_digit b, mp_int *c); /* c = a * b */ int mp_mul_d(mp_int *a, mp_digit b, mp_int *c); /* a/b => cb + d == a */ int mp_div_d(mp_int *a, mp_digit b, mp_int *c, mp_digit *d); /* a/3 => 3c + d == a */ int mp_div_3(mp_int *a, mp_int *c, mp_digit *d); /* c = a**b */ int mp_expt_d(mp_int *a, mp_digit b, mp_int *c); /* c = a mod b, 0 <= c < b */ int mp_mod_d(mp_int *a, mp_digit b, mp_digit *c); /* ---> number theory <--- */ /* d = a + b (mod c) */ int mp_addmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d); /* d = a - b (mod c) */ int mp_submod(mp_int *a, mp_int *b, mp_int *c, mp_int *d); /* d = a * b (mod c) */ int mp_mulmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d); /* c = a * a (mod b) */ int mp_sqrmod(mp_int *a, mp_int *b, mp_int *c); /* c = 1/a (mod b) */ int mp_invmod(mp_int *a, mp_int *b, mp_int *c); /* c = (a, b) */ int mp_gcd(mp_int *a, mp_int *b, mp_int *c); /* produces value such that U1*a + U2*b = U3 */ int mp_exteuclid(mp_int *a, mp_int *b, mp_int *U1, mp_int *U2, mp_int *U3); /* c = [a, b] or (a*b)/(a, b) */ int mp_lcm(mp_int *a, mp_int *b, mp_int *c); /* finds one of the b'th root of a, such that |c|**b <= |a| * * returns error if a < 0 and b is even */ int mp_n_root(mp_int *a, mp_digit b, mp_int *c); /* special sqrt algo */ int mp_sqrt(mp_int *arg, mp_int *ret); /* is number a square? */ int mp_is_square(mp_int *arg, int *ret); /* computes the jacobi c = (a | n) (or Legendre if b is prime) */ int mp_jacobi(mp_int *a, mp_int *n, int *c); /* used to setup the Barrett reduction for a given modulus b */ int mp_reduce_setup(mp_int *a, mp_int *b); /* Barrett Reduction, computes a (mod b) with a precomputed value c * * Assumes that 0 < a <= b*b, note if 0 > a > -(b*b) then you can merely * compute the reduction as -1 * mp_reduce(mp_abs(a)) [pseudo code]. */ int mp_reduce(mp_int *a, mp_int *b, mp_int *c); /* setups the montgomery reduction */ int mp_montgomery_setup(mp_int *a, mp_digit *mp); /* computes a = B**n mod b without division or multiplication useful for * normalizing numbers in a Montgomery system. */ int mp_montgomery_calc_normalization(mp_int *a, mp_int *b); /* computes x/R == x (mod N) via Montgomery Reduction */ int mp_montgomery_reduce(mp_int *a, mp_int *m, mp_digit mp); /* returns 1 if a is a valid DR modulus */ int mp_dr_is_modulus(mp_int *a); /* sets the value of "d" required for mp_dr_reduce */ void mp_dr_setup(mp_int *a, mp_digit *d); /* reduces a modulo b using the Diminished Radix method */ int mp_dr_reduce(mp_int *a, mp_int *b, mp_digit mp); /* returns true if a can be reduced with mp_reduce_2k */ int mp_reduce_is_2k(mp_int *a); /* determines k value for 2k reduction */ int mp_reduce_2k_setup(mp_int *a, mp_digit *d); /* reduces a modulo b where b is of the form 2**p - k [0 <= a] */ int mp_reduce_2k(mp_int *a, mp_int *n, mp_digit d); /* returns true if a can be reduced with mp_reduce_2k_l */ int mp_reduce_is_2k_l(mp_int *a); /* determines k value for 2k reduction */ int mp_reduce_2k_setup_l(mp_int *a, mp_int *d); /* reduces a modulo b where b is of the form 2**p - k [0 <= a] */ int mp_reduce_2k_l(mp_int *a, mp_int *n, mp_int *d); /* d = a**b (mod c) */ int mp_exptmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d); /* ---> Primes <--- */ /* number of primes */ #ifdef MP_8BIT #define PRIME_SIZE 31 #else #define PRIME_SIZE 256 #endif /* table of first PRIME_SIZE primes */ extern const mp_digit ltm_prime_tab[]; /* result=1 if a is divisible by one of the first PRIME_SIZE primes */ int mp_prime_is_divisible(mp_int *a, int *result); /* performs one Fermat test of "a" using base "b". * Sets result to 0 if composite or 1 if probable prime */ int mp_prime_fermat(mp_int *a, mp_int *b, int *result); /* performs one Miller-Rabin test of "a" using base "b". * Sets result to 0 if composite or 1 if probable prime */ int mp_prime_miller_rabin(mp_int *a, mp_int *b, int *result); /* This gives [for a given bit size] the number of trials required * such that Miller-Rabin gives a prob of failure lower than 2^-96 */ int mp_prime_rabin_miller_trials(int size); /* performs t rounds of Miller-Rabin on "a" using the first * t prime bases. Also performs an initial sieve of trial * division. Determines if "a" is prime with probability * of error no more than (1/4)**t. * * Sets result to 1 if probably prime, 0 otherwise */ int mp_prime_is_prime(mp_int *a, int t, int *result); /* finds the next prime after the number "a" using "t" trials * of Miller-Rabin. * * bbs_style = 1 means the prime must be congruent to 3 mod 4 */ int mp_prime_next_prime(mp_int *a, int t, int bbs_style); /* makes a truly random prime of a given size (bytes), * call with bbs = 1 if you want it to be congruent to 3 mod 4 * * You have to supply a callback which fills in a buffer with random bytes. "dat" is a parameter you can * have passed to the callback (e.g. a state or something). This function doesn't use "dat" itself * so it can be NULL * * The prime generated will be larger than 2^(8*size). */ #define mp_prime_random(a, t, size, bbs, cb, dat) mp_prime_random_ex(a, t, ((size) * 8) + 1, (bbs==1)?LTM_PRIME_BBS:0, cb, dat) /* makes a truly random prime of a given size (bits), * * Flags are as follows: * * LTM_PRIME_BBS - make prime congruent to 3 mod 4 * LTM_PRIME_SAFE - make sure (p-1)/2 is prime as well (implies LTM_PRIME_BBS) * LTM_PRIME_2MSB_ON - make the 2nd highest bit one * * You have to supply a callback which fills in a buffer with random bytes. "dat" is a parameter you can * have passed to the callback (e.g. a state or something). This function doesn't use "dat" itself * so it can be NULL * */ int mp_prime_random_ex(mp_int *a, int t, int size, int flags, ltm_prime_callback cb, void *dat); /* ---> radix conversion <--- */ int mp_count_bits(mp_int *a); int mp_unsigned_bin_size(mp_int *a); int mp_read_unsigned_bin(mp_int *a, const unsigned char *b, int c); int mp_to_unsigned_bin(mp_int *a, unsigned char *b); int mp_to_unsigned_bin_n (mp_int * a, unsigned char *b, unsigned long *outlen); int mp_signed_bin_size(mp_int *a); int mp_read_signed_bin(mp_int *a, const unsigned char *b, int c); int mp_to_signed_bin(mp_int *a, unsigned char *b); int mp_to_signed_bin_n (mp_int * a, unsigned char *b, unsigned long *outlen); int mp_read_radix(mp_int *a, const char *str, int radix); int mp_toradix(mp_int *a, char *str, int radix); int mp_toradix_n(mp_int * a, char *str, int radix, int maxlen); int mp_radix_size(mp_int *a, int radix, int *size); int mp_fread(mp_int *a, int radix, FILE *stream); int mp_fwrite(mp_int *a, int radix, FILE *stream); #define mp_read_raw(mp, str, len) mp_read_signed_bin((mp), (str), (len)) #define mp_raw_size(mp) mp_signed_bin_size(mp) #define mp_toraw(mp, str) mp_to_signed_bin((mp), (str)) #define mp_read_mag(mp, str, len) mp_read_unsigned_bin((mp), (str), (len)) #define mp_mag_size(mp) mp_unsigned_bin_size(mp) #define mp_tomag(mp, str) mp_to_unsigned_bin((mp), (str)) #define mp_tobinary(M, S) mp_toradix((M), (S), 2) #define mp_tooctal(M, S) mp_toradix((M), (S), 8) #define mp_todecimal(M, S) mp_toradix((M), (S), 10) #define mp_tohex(M, S) mp_toradix((M), (S), 16) /* lowlevel functions, do not call! */ int s_mp_add(mp_int *a, mp_int *b, mp_int *c); int s_mp_sub(mp_int *a, mp_int *b, mp_int *c); #define s_mp_mul(a, b, c) s_mp_mul_digs(a, b, c, (a)->used + (b)->used + 1) int fast_s_mp_mul_digs(mp_int *a, mp_int *b, mp_int *c, int digs); int s_mp_mul_digs(mp_int *a, mp_int *b, mp_int *c, int digs); int fast_s_mp_mul_high_digs(mp_int *a, mp_int *b, mp_int *c, int digs); int s_mp_mul_high_digs(mp_int *a, mp_int *b, mp_int *c, int digs); int fast_s_mp_sqr(mp_int *a, mp_int *b); int s_mp_sqr(mp_int *a, mp_int *b); int mp_karatsuba_mul(mp_int *a, mp_int *b, mp_int *c); int mp_toom_mul(mp_int *a, mp_int *b, mp_int *c); int mp_karatsuba_sqr(mp_int *a, mp_int *b); int mp_toom_sqr(mp_int *a, mp_int *b); int fast_mp_invmod(mp_int *a, mp_int *b, mp_int *c); int mp_invmod_slow (mp_int * a, mp_int * b, mp_int * c); int fast_mp_montgomery_reduce(mp_int *a, mp_int *m, mp_digit mp); int mp_exptmod_fast(mp_int *G, mp_int *X, mp_int *P, mp_int *Y, int mode); int s_mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int mode); void bn_reverse(unsigned char *s, int len); extern const char *mp_s_rmap; #ifdef __cplusplus } #endif #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/tommath_class.h000644 000765 000024 00000050734 12534342605 023366 0ustar00williamcoledastaff000000 000000 #if !(defined(LTM1) && defined(LTM2) && defined(LTM3)) #if defined(LTM2) #define LTM3 #endif #if defined(LTM1) #define LTM2 #endif #define LTM1 #if defined(LTM_ALL) #define BN_ERROR_C #define BN_FAST_MP_INVMOD_C #define BN_FAST_MP_MONTGOMERY_REDUCE_C #define BN_FAST_S_MP_MUL_DIGS_C #define BN_FAST_S_MP_MUL_HIGH_DIGS_C #define BN_FAST_S_MP_SQR_C #define BN_MP_2EXPT_C #define BN_MP_ABS_C #define BN_MP_ADD_C #define BN_MP_ADD_D_C #define BN_MP_ADDMOD_C #define BN_MP_AND_C #define BN_MP_CLAMP_C #define BN_MP_CLEAR_C #define BN_MP_CLEAR_MULTI_C #define BN_MP_CMP_C #define BN_MP_CMP_D_C #define BN_MP_CMP_MAG_C #define BN_MP_CNT_LSB_C #define BN_MP_COPY_C #define BN_MP_COUNT_BITS_C #define BN_MP_DIV_C #define BN_MP_DIV_2_C #define BN_MP_DIV_2D_C #define BN_MP_DIV_3_C #define BN_MP_DIV_D_C #define BN_MP_DR_IS_MODULUS_C #define BN_MP_DR_REDUCE_C #define BN_MP_DR_SETUP_C #define BN_MP_EXCH_C #define BN_MP_EXPT_D_C #define BN_MP_EXPTMOD_C #define BN_MP_EXPTMOD_FAST_C #define BN_MP_EXTEUCLID_C #define BN_MP_FREAD_C #define BN_MP_FWRITE_C #define BN_MP_GCD_C #define BN_MP_GET_INT_C #define BN_MP_GROW_C #define BN_MP_INIT_C #define BN_MP_INIT_COPY_C #define BN_MP_INIT_MULTI_C #define BN_MP_INIT_SET_C #define BN_MP_INIT_SET_INT_C #define BN_MP_INIT_SIZE_C #define BN_MP_INVMOD_C #define BN_MP_INVMOD_SLOW_C #define BN_MP_IS_SQUARE_C #define BN_MP_JACOBI_C #define BN_MP_KARATSUBA_MUL_C #define BN_MP_KARATSUBA_SQR_C #define BN_MP_LCM_C #define BN_MP_LSHD_C #define BN_MP_MOD_C #define BN_MP_MOD_2D_C #define BN_MP_MOD_D_C #define BN_MP_MONTGOMERY_CALC_NORMALIZATION_C #define BN_MP_MONTGOMERY_REDUCE_C #define BN_MP_MONTGOMERY_SETUP_C #define BN_MP_MUL_C #define BN_MP_MUL_2_C #define BN_MP_MUL_2D_C #define BN_MP_MUL_D_C #define BN_MP_MULMOD_C #define BN_MP_N_ROOT_C #define BN_MP_NEG_C #define BN_MP_OR_C #define BN_MP_PRIME_FERMAT_C #define BN_MP_PRIME_IS_DIVISIBLE_C #define BN_MP_PRIME_IS_PRIME_C #define BN_MP_PRIME_MILLER_RABIN_C #define BN_MP_PRIME_NEXT_PRIME_C #define BN_MP_PRIME_RABIN_MILLER_TRIALS_C #define BN_MP_PRIME_RANDOM_EX_C #define BN_MP_RADIX_SIZE_C #define BN_MP_RADIX_SMAP_C #define BN_MP_RAND_C #define BN_MP_READ_RADIX_C #define BN_MP_READ_SIGNED_BIN_C #define BN_MP_READ_UNSIGNED_BIN_C #define BN_MP_REDUCE_C #define BN_MP_REDUCE_2K_C #define BN_MP_REDUCE_2K_L_C #define BN_MP_REDUCE_2K_SETUP_C #define BN_MP_REDUCE_2K_SETUP_L_C #define BN_MP_REDUCE_IS_2K_C #define BN_MP_REDUCE_IS_2K_L_C #define BN_MP_REDUCE_SETUP_C #define BN_MP_RSHD_C #define BN_MP_SET_C #define BN_MP_SET_INT_C #define BN_MP_SHRINK_C #define BN_MP_SIGNED_BIN_SIZE_C #define BN_MP_SQR_C #define BN_MP_SQRMOD_C #define BN_MP_SQRT_C #define BN_MP_SUB_C #define BN_MP_SUB_D_C #define BN_MP_SUBMOD_C #define BN_MP_TO_SIGNED_BIN_C #define BN_MP_TO_SIGNED_BIN_N_C #define BN_MP_TO_UNSIGNED_BIN_C #define BN_MP_TO_UNSIGNED_BIN_N_C #define BN_MP_TOOM_MUL_C #define BN_MP_TOOM_SQR_C #define BN_MP_TORADIX_C #define BN_MP_TORADIX_N_C #define BN_MP_UNSIGNED_BIN_SIZE_C #define BN_MP_XOR_C #define BN_MP_ZERO_C #define BN_PRIME_TAB_C #define BN_REVERSE_C #define BN_S_MP_ADD_C #define BN_S_MP_EXPTMOD_C #define BN_S_MP_MUL_DIGS_C #define BN_S_MP_MUL_HIGH_DIGS_C #define BN_S_MP_SQR_C #define BN_S_MP_SUB_C #define BNCORE_C #endif #if defined(BN_ERROR_C) #define BN_MP_ERROR_TO_STRING_C #endif #if defined(BN_FAST_MP_INVMOD_C) #define BN_MP_ISEVEN_C #define BN_MP_INIT_MULTI_C #define BN_MP_COPY_C #define BN_MP_MOD_C #define BN_MP_SET_C #define BN_MP_DIV_2_C #define BN_MP_ISODD_C #define BN_MP_SUB_C #define BN_MP_CMP_C #define BN_MP_ISZERO_C #define BN_MP_CMP_D_C #define BN_MP_ADD_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_MULTI_C #endif #if defined(BN_FAST_MP_MONTGOMERY_REDUCE_C) #define BN_MP_GROW_C #define BN_MP_RSHD_C #define BN_MP_CLAMP_C #define BN_MP_CMP_MAG_C #define BN_S_MP_SUB_C #endif #if defined(BN_FAST_S_MP_MUL_DIGS_C) #define BN_MP_GROW_C #define BN_MP_CLAMP_C #endif #if defined(BN_FAST_S_MP_MUL_HIGH_DIGS_C) #define BN_MP_GROW_C #define BN_MP_CLAMP_C #endif #if defined(BN_FAST_S_MP_SQR_C) #define BN_MP_GROW_C #define BN_MP_CLAMP_C #endif #if defined(BN_MP_2EXPT_C) #define BN_MP_ZERO_C #define BN_MP_GROW_C #endif #if defined(BN_MP_ABS_C) #define BN_MP_COPY_C #endif #if defined(BN_MP_ADD_C) #define BN_S_MP_ADD_C #define BN_MP_CMP_MAG_C #define BN_S_MP_SUB_C #endif #if defined(BN_MP_ADD_D_C) #define BN_MP_GROW_C #define BN_MP_SUB_D_C #define BN_MP_CLAMP_C #endif #if defined(BN_MP_ADDMOD_C) #define BN_MP_INIT_C #define BN_MP_ADD_C #define BN_MP_CLEAR_C #define BN_MP_MOD_C #endif #if defined(BN_MP_AND_C) #define BN_MP_INIT_COPY_C #define BN_MP_CLAMP_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_CLAMP_C) #endif #if defined(BN_MP_CLEAR_C) #endif #if defined(BN_MP_CLEAR_MULTI_C) #define BN_MP_CLEAR_C #endif #if defined(BN_MP_CMP_C) #define BN_MP_CMP_MAG_C #endif #if defined(BN_MP_CMP_D_C) #endif #if defined(BN_MP_CMP_MAG_C) #endif #if defined(BN_MP_CNT_LSB_C) #define BN_MP_ISZERO_C #endif #if defined(BN_MP_COPY_C) #define BN_MP_GROW_C #endif #if defined(BN_MP_COUNT_BITS_C) #endif #if defined(BN_MP_DIV_C) #define BN_MP_ISZERO_C #define BN_MP_CMP_MAG_C #define BN_MP_COPY_C #define BN_MP_ZERO_C #define BN_MP_INIT_MULTI_C #define BN_MP_SET_C #define BN_MP_COUNT_BITS_C #define BN_MP_ABS_C #define BN_MP_MUL_2D_C #define BN_MP_CMP_C #define BN_MP_SUB_C #define BN_MP_ADD_C #define BN_MP_DIV_2D_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_MULTI_C #define BN_MP_INIT_SIZE_C #define BN_MP_INIT_C #define BN_MP_INIT_COPY_C #define BN_MP_LSHD_C #define BN_MP_RSHD_C #define BN_MP_MUL_D_C #define BN_MP_CLAMP_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_DIV_2_C) #define BN_MP_GROW_C #define BN_MP_CLAMP_C #endif #if defined(BN_MP_DIV_2D_C) #define BN_MP_COPY_C #define BN_MP_ZERO_C #define BN_MP_INIT_C #define BN_MP_MOD_2D_C #define BN_MP_CLEAR_C #define BN_MP_RSHD_C #define BN_MP_CLAMP_C #define BN_MP_EXCH_C #endif #if defined(BN_MP_DIV_3_C) #define BN_MP_INIT_SIZE_C #define BN_MP_CLAMP_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_DIV_D_C) #define BN_MP_ISZERO_C #define BN_MP_COPY_C #define BN_MP_DIV_2D_C #define BN_MP_DIV_3_C #define BN_MP_INIT_SIZE_C #define BN_MP_CLAMP_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_DR_IS_MODULUS_C) #endif #if defined(BN_MP_DR_REDUCE_C) #define BN_MP_GROW_C #define BN_MP_CLAMP_C #define BN_MP_CMP_MAG_C #define BN_S_MP_SUB_C #endif #if defined(BN_MP_DR_SETUP_C) #endif #if defined(BN_MP_EXCH_C) #endif #if defined(BN_MP_EXPT_D_C) #define BN_MP_INIT_COPY_C #define BN_MP_SET_C #define BN_MP_SQR_C #define BN_MP_CLEAR_C #define BN_MP_MUL_C #endif #if defined(BN_MP_EXPTMOD_C) #define BN_MP_INIT_C #define BN_MP_INVMOD_C #define BN_MP_CLEAR_C #define BN_MP_ABS_C #define BN_MP_CLEAR_MULTI_C #define BN_MP_REDUCE_IS_2K_L_C #define BN_S_MP_EXPTMOD_C #define BN_MP_DR_IS_MODULUS_C #define BN_MP_REDUCE_IS_2K_C #define BN_MP_ISODD_C #define BN_MP_EXPTMOD_FAST_C #endif #if defined(BN_MP_EXPTMOD_FAST_C) #define BN_MP_COUNT_BITS_C #define BN_MP_INIT_C #define BN_MP_CLEAR_C #define BN_MP_MONTGOMERY_SETUP_C #define BN_FAST_MP_MONTGOMERY_REDUCE_C #define BN_MP_MONTGOMERY_REDUCE_C #define BN_MP_DR_SETUP_C #define BN_MP_DR_REDUCE_C #define BN_MP_REDUCE_2K_SETUP_C #define BN_MP_REDUCE_2K_C #define BN_MP_MONTGOMERY_CALC_NORMALIZATION_C #define BN_MP_MULMOD_C #define BN_MP_SET_C #define BN_MP_MOD_C #define BN_MP_COPY_C #define BN_MP_SQR_C #define BN_MP_MUL_C #define BN_MP_EXCH_C #endif #if defined(BN_MP_EXTEUCLID_C) #define BN_MP_INIT_MULTI_C #define BN_MP_SET_C #define BN_MP_COPY_C #define BN_MP_ISZERO_C #define BN_MP_DIV_C #define BN_MP_MUL_C #define BN_MP_SUB_C #define BN_MP_NEG_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_MULTI_C #endif #if defined(BN_MP_FREAD_C) #define BN_MP_ZERO_C #define BN_MP_S_RMAP_C #define BN_MP_MUL_D_C #define BN_MP_ADD_D_C #define BN_MP_CMP_D_C #endif #if defined(BN_MP_FWRITE_C) #define BN_MP_RADIX_SIZE_C #define BN_MP_TORADIX_C #endif #if defined(BN_MP_GCD_C) #define BN_MP_ISZERO_C #define BN_MP_ABS_C #define BN_MP_ZERO_C #define BN_MP_INIT_COPY_C #define BN_MP_CNT_LSB_C #define BN_MP_DIV_2D_C #define BN_MP_CMP_MAG_C #define BN_MP_EXCH_C #define BN_S_MP_SUB_C #define BN_MP_MUL_2D_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_GET_INT_C) #endif #if defined(BN_MP_GROW_C) #endif #if defined(BN_MP_INIT_C) #endif #if defined(BN_MP_INIT_COPY_C) #define BN_MP_COPY_C #endif #if defined(BN_MP_INIT_MULTI_C) #define BN_MP_ERR_C #define BN_MP_INIT_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_INIT_SET_C) #define BN_MP_INIT_C #define BN_MP_SET_C #endif #if defined(BN_MP_INIT_SET_INT_C) #define BN_MP_INIT_C #define BN_MP_SET_INT_C #endif #if defined(BN_MP_INIT_SIZE_C) #define BN_MP_INIT_C #endif #if defined(BN_MP_INVMOD_C) #define BN_MP_ISZERO_C #define BN_MP_ISODD_C #define BN_FAST_MP_INVMOD_C #define BN_MP_INVMOD_SLOW_C #endif #if defined(BN_MP_INVMOD_SLOW_C) #define BN_MP_ISZERO_C #define BN_MP_INIT_MULTI_C #define BN_MP_MOD_C #define BN_MP_COPY_C #define BN_MP_ISEVEN_C #define BN_MP_SET_C #define BN_MP_DIV_2_C #define BN_MP_ISODD_C #define BN_MP_ADD_C #define BN_MP_SUB_C #define BN_MP_CMP_C #define BN_MP_CMP_D_C #define BN_MP_CMP_MAG_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_MULTI_C #endif #if defined(BN_MP_IS_SQUARE_C) #define BN_MP_MOD_D_C #define BN_MP_INIT_SET_INT_C #define BN_MP_MOD_C #define BN_MP_GET_INT_C #define BN_MP_SQRT_C #define BN_MP_SQR_C #define BN_MP_CMP_MAG_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_JACOBI_C) #define BN_MP_CMP_D_C #define BN_MP_ISZERO_C #define BN_MP_INIT_COPY_C #define BN_MP_CNT_LSB_C #define BN_MP_DIV_2D_C #define BN_MP_MOD_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_KARATSUBA_MUL_C) #define BN_MP_MUL_C #define BN_MP_INIT_SIZE_C #define BN_MP_CLAMP_C #define BN_MP_SUB_C #define BN_MP_ADD_C #define BN_MP_LSHD_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_KARATSUBA_SQR_C) #define BN_MP_INIT_SIZE_C #define BN_MP_CLAMP_C #define BN_MP_SQR_C #define BN_MP_SUB_C #define BN_S_MP_ADD_C #define BN_MP_LSHD_C #define BN_MP_ADD_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_LCM_C) #define BN_MP_INIT_MULTI_C #define BN_MP_GCD_C #define BN_MP_CMP_MAG_C #define BN_MP_DIV_C #define BN_MP_MUL_C #define BN_MP_CLEAR_MULTI_C #endif #if defined(BN_MP_LSHD_C) #define BN_MP_GROW_C #define BN_MP_RSHD_C #endif #if defined(BN_MP_MOD_C) #define BN_MP_INIT_C #define BN_MP_DIV_C #define BN_MP_CLEAR_C #define BN_MP_ADD_C #define BN_MP_EXCH_C #endif #if defined(BN_MP_MOD_2D_C) #define BN_MP_ZERO_C #define BN_MP_COPY_C #define BN_MP_CLAMP_C #endif #if defined(BN_MP_MOD_D_C) #define BN_MP_DIV_D_C #endif #if defined(BN_MP_MONTGOMERY_CALC_NORMALIZATION_C) #define BN_MP_COUNT_BITS_C #define BN_MP_2EXPT_C #define BN_MP_SET_C #define BN_MP_MUL_2_C #define BN_MP_CMP_MAG_C #define BN_S_MP_SUB_C #endif #if defined(BN_MP_MONTGOMERY_REDUCE_C) #define BN_FAST_MP_MONTGOMERY_REDUCE_C #define BN_MP_GROW_C #define BN_MP_CLAMP_C #define BN_MP_RSHD_C #define BN_MP_CMP_MAG_C #define BN_S_MP_SUB_C #endif #if defined(BN_MP_MONTGOMERY_SETUP_C) #endif #if defined(BN_MP_MUL_C) #define BN_MP_TOOM_MUL_C #define BN_MP_KARATSUBA_MUL_C #define BN_FAST_S_MP_MUL_DIGS_C #define BN_S_MP_MUL_C #define BN_S_MP_MUL_DIGS_C #endif #if defined(BN_MP_MUL_2_C) #define BN_MP_GROW_C #endif #if defined(BN_MP_MUL_2D_C) #define BN_MP_COPY_C #define BN_MP_GROW_C #define BN_MP_LSHD_C #define BN_MP_CLAMP_C #endif #if defined(BN_MP_MUL_D_C) #define BN_MP_GROW_C #define BN_MP_CLAMP_C #endif #if defined(BN_MP_MULMOD_C) #define BN_MP_INIT_C #define BN_MP_MUL_C #define BN_MP_CLEAR_C #define BN_MP_MOD_C #endif #if defined(BN_MP_N_ROOT_C) #define BN_MP_INIT_C #define BN_MP_SET_C #define BN_MP_COPY_C #define BN_MP_EXPT_D_C #define BN_MP_MUL_C #define BN_MP_SUB_C #define BN_MP_MUL_D_C #define BN_MP_DIV_C #define BN_MP_CMP_C #define BN_MP_SUB_D_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_NEG_C) #define BN_MP_COPY_C #define BN_MP_ISZERO_C #endif #if defined(BN_MP_OR_C) #define BN_MP_INIT_COPY_C #define BN_MP_CLAMP_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_PRIME_FERMAT_C) #define BN_MP_CMP_D_C #define BN_MP_INIT_C #define BN_MP_EXPTMOD_C #define BN_MP_CMP_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_PRIME_IS_DIVISIBLE_C) #define BN_MP_MOD_D_C #endif #if defined(BN_MP_PRIME_IS_PRIME_C) #define BN_MP_CMP_D_C #define BN_MP_PRIME_IS_DIVISIBLE_C #define BN_MP_INIT_C #define BN_MP_SET_C #define BN_MP_PRIME_MILLER_RABIN_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_PRIME_MILLER_RABIN_C) #define BN_MP_CMP_D_C #define BN_MP_INIT_COPY_C #define BN_MP_SUB_D_C #define BN_MP_CNT_LSB_C #define BN_MP_DIV_2D_C #define BN_MP_EXPTMOD_C #define BN_MP_CMP_C #define BN_MP_SQRMOD_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_PRIME_NEXT_PRIME_C) #define BN_MP_CMP_D_C #define BN_MP_SET_C #define BN_MP_SUB_D_C #define BN_MP_ISEVEN_C #define BN_MP_MOD_D_C #define BN_MP_INIT_C #define BN_MP_ADD_D_C #define BN_MP_PRIME_MILLER_RABIN_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_PRIME_RABIN_MILLER_TRIALS_C) #endif #if defined(BN_MP_PRIME_RANDOM_EX_C) #define BN_MP_READ_UNSIGNED_BIN_C #define BN_MP_PRIME_IS_PRIME_C #define BN_MP_SUB_D_C #define BN_MP_DIV_2_C #define BN_MP_MUL_2_C #define BN_MP_ADD_D_C #endif #if defined(BN_MP_RADIX_SIZE_C) #define BN_MP_COUNT_BITS_C #define BN_MP_INIT_COPY_C #define BN_MP_ISZERO_C #define BN_MP_DIV_D_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_RADIX_SMAP_C) #define BN_MP_S_RMAP_C #endif #if defined(BN_MP_RAND_C) #define BN_MP_ZERO_C #define BN_MP_ADD_D_C #define BN_MP_LSHD_C #endif #if defined(BN_MP_READ_RADIX_C) #define BN_MP_ZERO_C #define BN_MP_S_RMAP_C #define BN_MP_RADIX_SMAP_C #define BN_MP_MUL_D_C #define BN_MP_ADD_D_C #define BN_MP_ISZERO_C #endif #if defined(BN_MP_READ_SIGNED_BIN_C) #define BN_MP_READ_UNSIGNED_BIN_C #endif #if defined(BN_MP_READ_UNSIGNED_BIN_C) #define BN_MP_GROW_C #define BN_MP_ZERO_C #define BN_MP_MUL_2D_C #define BN_MP_CLAMP_C #endif #if defined(BN_MP_REDUCE_C) #define BN_MP_REDUCE_SETUP_C #define BN_MP_INIT_COPY_C #define BN_MP_RSHD_C #define BN_MP_MUL_C #define BN_S_MP_MUL_HIGH_DIGS_C #define BN_FAST_S_MP_MUL_HIGH_DIGS_C #define BN_MP_MOD_2D_C #define BN_S_MP_MUL_DIGS_C #define BN_MP_SUB_C #define BN_MP_CMP_D_C #define BN_MP_SET_C #define BN_MP_LSHD_C #define BN_MP_ADD_C #define BN_MP_CMP_C #define BN_S_MP_SUB_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_REDUCE_2K_C) #define BN_MP_INIT_C #define BN_MP_COUNT_BITS_C #define BN_MP_DIV_2D_C #define BN_MP_MUL_D_C #define BN_S_MP_ADD_C #define BN_MP_CMP_MAG_C #define BN_S_MP_SUB_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_REDUCE_2K_L_C) #define BN_MP_INIT_C #define BN_MP_COUNT_BITS_C #define BN_MP_DIV_2D_C #define BN_MP_MUL_C #define BN_S_MP_ADD_C #define BN_MP_CMP_MAG_C #define BN_S_MP_SUB_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_REDUCE_2K_SETUP_C) #define BN_MP_INIT_C #define BN_MP_COUNT_BITS_C #define BN_MP_2EXPT_C #define BN_MP_CLEAR_C #define BN_S_MP_SUB_C #endif #if defined(BN_MP_REDUCE_2K_SETUP_L_C) #define BN_MP_INIT_C #define BN_MP_2EXPT_C #define BN_MP_COUNT_BITS_C #define BN_S_MP_SUB_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_REDUCE_IS_2K_C) #define BN_MP_REDUCE_2K_C #define BN_MP_COUNT_BITS_C #endif #if defined(BN_MP_REDUCE_IS_2K_L_C) #endif #if defined(BN_MP_REDUCE_SETUP_C) #define BN_MP_2EXPT_C #define BN_MP_DIV_C #endif #if defined(BN_MP_RSHD_C) #define BN_MP_ZERO_C #endif #if defined(BN_MP_SET_C) #define BN_MP_ZERO_C #endif #if defined(BN_MP_SET_INT_C) #define BN_MP_ZERO_C #define BN_MP_MUL_2D_C #define BN_MP_CLAMP_C #endif #if defined(BN_MP_SHRINK_C) #endif #if defined(BN_MP_SIGNED_BIN_SIZE_C) #define BN_MP_UNSIGNED_BIN_SIZE_C #endif #if defined(BN_MP_SQR_C) #define BN_MP_TOOM_SQR_C #define BN_MP_KARATSUBA_SQR_C #define BN_FAST_S_MP_SQR_C #define BN_S_MP_SQR_C #endif #if defined(BN_MP_SQRMOD_C) #define BN_MP_INIT_C #define BN_MP_SQR_C #define BN_MP_CLEAR_C #define BN_MP_MOD_C #endif #if defined(BN_MP_SQRT_C) #define BN_MP_N_ROOT_C #define BN_MP_ISZERO_C #define BN_MP_ZERO_C #define BN_MP_INIT_COPY_C #define BN_MP_RSHD_C #define BN_MP_DIV_C #define BN_MP_ADD_C #define BN_MP_DIV_2_C #define BN_MP_CMP_MAG_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_SUB_C) #define BN_S_MP_ADD_C #define BN_MP_CMP_MAG_C #define BN_S_MP_SUB_C #endif #if defined(BN_MP_SUB_D_C) #define BN_MP_GROW_C #define BN_MP_ADD_D_C #define BN_MP_CLAMP_C #endif #if defined(BN_MP_SUBMOD_C) #define BN_MP_INIT_C #define BN_MP_SUB_C #define BN_MP_CLEAR_C #define BN_MP_MOD_C #endif #if defined(BN_MP_TO_SIGNED_BIN_C) #define BN_MP_TO_UNSIGNED_BIN_C #endif #if defined(BN_MP_TO_SIGNED_BIN_N_C) #define BN_MP_SIGNED_BIN_SIZE_C #define BN_MP_TO_SIGNED_BIN_C #endif #if defined(BN_MP_TO_UNSIGNED_BIN_C) #define BN_MP_INIT_COPY_C #define BN_MP_ISZERO_C #define BN_MP_DIV_2D_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_TO_UNSIGNED_BIN_N_C) #define BN_MP_UNSIGNED_BIN_SIZE_C #define BN_MP_TO_UNSIGNED_BIN_C #endif #if defined(BN_MP_TOOM_MUL_C) #define BN_MP_INIT_MULTI_C #define BN_MP_MOD_2D_C #define BN_MP_COPY_C #define BN_MP_RSHD_C #define BN_MP_MUL_C #define BN_MP_MUL_2_C #define BN_MP_ADD_C #define BN_MP_SUB_C #define BN_MP_DIV_2_C #define BN_MP_MUL_2D_C #define BN_MP_MUL_D_C #define BN_MP_DIV_3_C #define BN_MP_LSHD_C #define BN_MP_CLEAR_MULTI_C #endif #if defined(BN_MP_TOOM_SQR_C) #define BN_MP_INIT_MULTI_C #define BN_MP_MOD_2D_C #define BN_MP_COPY_C #define BN_MP_RSHD_C #define BN_MP_SQR_C #define BN_MP_MUL_2_C #define BN_MP_ADD_C #define BN_MP_SUB_C #define BN_MP_DIV_2_C #define BN_MP_MUL_2D_C #define BN_MP_MUL_D_C #define BN_MP_DIV_3_C #define BN_MP_LSHD_C #define BN_MP_CLEAR_MULTI_C #endif #if defined(BN_MP_TORADIX_C) #define BN_MP_ISZERO_C #define BN_MP_INIT_COPY_C #define BN_MP_DIV_D_C #define BN_MP_CLEAR_C #define BN_MP_S_RMAP_C #endif #if defined(BN_MP_TORADIX_N_C) #define BN_MP_ISZERO_C #define BN_MP_INIT_COPY_C #define BN_MP_DIV_D_C #define BN_MP_CLEAR_C #define BN_MP_S_RMAP_C #endif #if defined(BN_MP_UNSIGNED_BIN_SIZE_C) #define BN_MP_COUNT_BITS_C #endif #if defined(BN_MP_XOR_C) #define BN_MP_INIT_COPY_C #define BN_MP_CLAMP_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_C #endif #if defined(BN_MP_ZERO_C) #endif #if defined(BN_PRIME_TAB_C) #endif #if defined(BN_REVERSE_C) #endif #if defined(BN_S_MP_ADD_C) #define BN_MP_GROW_C #define BN_MP_CLAMP_C #endif #if defined(BN_S_MP_EXPTMOD_C) #define BN_MP_COUNT_BITS_C #define BN_MP_INIT_C #define BN_MP_CLEAR_C #define BN_MP_REDUCE_SETUP_C #define BN_MP_REDUCE_C #define BN_MP_REDUCE_2K_SETUP_L_C #define BN_MP_REDUCE_2K_L_C #define BN_MP_MOD_C #define BN_MP_COPY_C #define BN_MP_SQR_C #define BN_MP_MUL_C #define BN_MP_SET_C #define BN_MP_EXCH_C #endif #if defined(BN_S_MP_MUL_DIGS_C) #define BN_FAST_S_MP_MUL_DIGS_C #define BN_MP_INIT_SIZE_C #define BN_MP_CLAMP_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_C #endif #if defined(BN_S_MP_MUL_HIGH_DIGS_C) #define BN_FAST_S_MP_MUL_HIGH_DIGS_C #define BN_MP_INIT_SIZE_C #define BN_MP_CLAMP_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_C #endif #if defined(BN_S_MP_SQR_C) #define BN_MP_INIT_SIZE_C #define BN_MP_CLAMP_C #define BN_MP_EXCH_C #define BN_MP_CLEAR_C #endif #if defined(BN_S_MP_SUB_C) #define BN_MP_GROW_C #define BN_MP_CLAMP_C #endif #if defined(BNCORE_C) #endif #ifdef LTM3 #define LTM_LAST #endif #include #include #else #define LTM_LAST #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/libtommath/tommath_superclass.h000644 000765 000024 00000004272 12534342605 024441 0ustar00williamcoledastaff000000 000000 /* super class file for PK algos */ /* default ... include all MPI */ #define LTM_ALL /* RSA only (does not support DH/DSA/ECC) */ /* #define SC_RSA_1 */ /* For reference.... On an Athlon64 optimizing for speed... LTM's mpi.o with all functions [striped] is 142KiB in size. */ /* Works for RSA only, mpi.o is 68KiB */ #ifdef SC_RSA_1 #define BN_MP_SHRINK_C #define BN_MP_LCM_C #define BN_MP_PRIME_RANDOM_EX_C #define BN_MP_INVMOD_C #define BN_MP_GCD_C #define BN_MP_MOD_C #define BN_MP_MULMOD_C #define BN_MP_ADDMOD_C #define BN_MP_EXPTMOD_C #define BN_MP_SET_INT_C #define BN_MP_INIT_MULTI_C #define BN_MP_CLEAR_MULTI_C #define BN_MP_UNSIGNED_BIN_SIZE_C #define BN_MP_TO_UNSIGNED_BIN_C #define BN_MP_MOD_D_C #define BN_MP_PRIME_RABIN_MILLER_TRIALS_C #define BN_REVERSE_C #define BN_PRIME_TAB_C /* other modifiers */ #define BN_MP_DIV_SMALL /* Slower division, not critical */ /* here we are on the last pass so we turn things off. The functions classes are still there * but we remove them specifically from the build. This also invokes tweaks in functions * like removing support for even moduli, etc... */ #ifdef LTM_LAST #undef BN_MP_TOOM_MUL_C #undef BN_MP_TOOM_SQR_C #undef BN_MP_KARATSUBA_MUL_C #undef BN_MP_KARATSUBA_SQR_C #undef BN_MP_REDUCE_C #undef BN_MP_REDUCE_SETUP_C #undef BN_MP_DR_IS_MODULUS_C #undef BN_MP_DR_SETUP_C #undef BN_MP_DR_REDUCE_C #undef BN_MP_REDUCE_IS_2K_C #undef BN_MP_REDUCE_2K_SETUP_C #undef BN_MP_REDUCE_2K_C #undef BN_S_MP_EXPTMOD_C #undef BN_MP_DIV_3_C #undef BN_S_MP_MUL_HIGH_DIGS_C #undef BN_FAST_S_MP_MUL_HIGH_DIGS_C #undef BN_FAST_MP_INVMOD_C /* To safely undefine these you have to make sure your RSA key won't exceed the Comba threshold * which is roughly 255 digits [7140 bits for 32-bit machines, 15300 bits for 64-bit machines] * which means roughly speaking you can handle upto 2536-bit RSA keys with these defined without * trouble. */ #undef BN_S_MP_MUL_DIGS_C #undef BN_S_MP_SQR_C #undef BN_MP_MONTGOMERY_REDUCE_C #endif #endif /* $Source$ */ /* $Revision$ */ /* $Date$ */ nqp-2015.11/3rdparty/sha1/sha1.c000644 000765 000024 00000017665 12534342605 020061 0ustar00williamcoledastaff000000 000000 /* SHA-1 in C By Steve Reid 100% Public Domain ----------------- Modified 7/98 By James H. Brown Still 100% Public Domain Corrected a problem which generated improper hash values on 16 bit machines Routine SHA1Update changed from void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned int len) to void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned long len) The 'len' parameter was declared an int which works fine on 32 bit machines. However, on 16 bit machines an int is too small for the shifts being done against it. This caused the hash function to generate incorrect values if len was greater than 8191 (8K - 1) due to the 'len << 3' on line 3 of SHA1Update(). Since the file IO in main() reads 16K at a time, any file 8K or larger would be guaranteed to generate the wrong hash (e.g. Test Vector #3, a million "a"s). I also changed the declaration of variables i & j in SHA1Update to unsigned long from unsigned int for the same reason. These changes should make no difference to any 32 bit implementations since an int and a long are the same size in those environments. -- I also corrected a few compiler warnings generated by Borland C. 1. Added #include for exit() prototype 2. Removed unused variable 'j' in SHA1Final 3. Changed exit(0) to return(0) at end of main. ALL changes I made can be located by searching for comments containing 'JHB' ----------------- Modified 8/98 By Steve Reid Still 100% public domain 1- Removed #include and used return() instead of exit() 2- Fixed overwriting of finalcount in SHA1Final() (discovered by Chris Hall) 3- Changed email address from steve@edmweb.com to sreid@sea-to-sky.net ----------------- Modified 4/01 By Saul Kravitz Still 100% PD Modified to run on Compaq Alpha hardware. ----------------- Modified 07/2002 By Ralph Giles Still 100% public domain modified for use with stdint types, autoconf code cleanup, removed attribution comments switched SHA1Final() argument order for consistency use SHA1_ prefix for public api move public api to sha1.h ----------------- Modified 07/2002 By Ralph Giles Still 100% public domain ----------------- Modified 12/2011 By Jonathan Worthington Still 100% public domain Strip out various test code, twiddle digest to ASCII code a bit. */ #include #include #include "sha1.h" void SHA1_Transform(unsigned int state[5], const unsigned char buffer[64]); #define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) /* blk0() and blk() perform the initial expand. */ /* I got the idea of expanding during the round function from SSLeay */ /* FIXME: can we do this in an endian-proof way? */ #ifdef WORDS_BIGENDIAN #define blk0(i) block->l[i] #else #define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ |(rol(block->l[i],8)&0x00FF00FF)) #endif #define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ ^block->l[(i+2)&15]^block->l[i&15],1)) /* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ #define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); #define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); #define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); #define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); #define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); /* Hash a single 512-bit block. This is the core of the algorithm. */ void SHA1_Transform(unsigned int state[5], const unsigned char buffer[64]) { unsigned int a, b, c, d, e; typedef union { unsigned char c[64]; unsigned int l[16]; } CHAR64LONG16; CHAR64LONG16* block; block = (CHAR64LONG16*)buffer; /* Copy context->state[] to working vars */ a = state[0]; b = state[1]; c = state[2]; d = state[3]; e = state[4]; /* 4 rounds of 20 operations each. Loop unrolled. */ R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); /* Add the working vars back into context.state[] */ state[0] += a; state[1] += b; state[2] += c; state[3] += d; state[4] += e; /* Wipe variables */ a = b = c = d = e = 0; } /* SHA1Init - Initialize new context */ void SHA1_Init(SHA1_CTX* context) { /* SHA1 initialization constants */ context->state[0] = 0x67452301; context->state[1] = 0xEFCDAB89; context->state[2] = 0x98BADCFE; context->state[3] = 0x10325476; context->state[4] = 0xC3D2E1F0; context->count[0] = context->count[1] = 0; } /* Run your data through this. */ void SHA1_Update(SHA1_CTX* context, const unsigned char* data, const size_t len) { size_t i, j; j = (context->count[0] >> 3) & 63; if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++; context->count[1] += (len >> 29); if ((j + len) > 63) { memcpy(&context->buffer[j], data, (i = 64-j)); SHA1_Transform(context->state, context->buffer); for ( ; i + 63 < len; i += 64) { SHA1_Transform(context->state, data + i); } j = 0; } else i = 0; memcpy(&context->buffer[j], &data[i], len - i); } /* Add padding and return the message digest. */ void SHA1_Final(SHA1_CTX* context, unsigned char digest[SHA1_DIGEST_SIZE]) { unsigned int i; unsigned char finalcount[8]; for (i = 0; i < 8; i++) { finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)] >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ } SHA1_Update(context, (unsigned char *)"\200", 1); while ((context->count[0] & 504) != 448) { SHA1_Update(context, (unsigned char *)"\0", 1); } SHA1_Update(context, finalcount, 8); /* Should cause a SHA1_Transform() */ for (i = 0; i < SHA1_DIGEST_SIZE; i++) { digest[i] = (unsigned char) ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); } /* Wipe variables */ i = 0; memset(context->buffer, 0, 64); memset(context->state, 0, 20); memset(context->count, 0, 8); memset(finalcount, 0, 8); /* SWR */ } /* Produces a hex output of the digest. */ void SHA1_DigestToHex(const unsigned char digest[SHA1_DIGEST_SIZE], char *output) { int i,j; char *c = output; for (i = 0; i < SHA1_DIGEST_SIZE/4; i++) { for (j = 0; j < 4; j++) { sprintf(c,"%02X", digest[i*4+j]); c += 2; } } } nqp-2015.11/3rdparty/sha1/sha1.h000644 000765 000024 00000001222 12534342605 020044 0ustar00williamcoledastaff000000 000000 /* public api for steve reid's public domain SHA-1 implementation */ /* this file is in the public domain */ #ifndef __SHA1_H #define __SHA1_H #ifdef __cplusplus extern "C" { #endif typedef struct { unsigned int state[5]; unsigned int count[2]; unsigned char buffer[64]; } SHA1_CTX; #define SHA1_DIGEST_SIZE 20 void SHA1_Init(SHA1_CTX* context); void SHA1_Update(SHA1_CTX* context, const unsigned char* data, const size_t len); void SHA1_Final(SHA1_CTX* context, unsigned char digest[SHA1_DIGEST_SIZE]); void SHA1_DigestToHex(const unsigned char digest[SHA1_DIGEST_SIZE], char *output); #ifdef __cplusplus } #endif #endif /* __SHA1_H */ nqp-2015.11/CREDITS000644 000765 000024 00000002735 12534342605 015465 0ustar00williamcoledastaff000000 000000 =pod Following in the steps of other open source projects that eventually take over the world, here is the partial list of people who have contributed to Rakudo and its supporting works. It is sorted by name and formatted to allow easy grepping and beautification by scripts. The fields are: name (N), email (E), web-address (W), description (D), GitHub username (U) and snail-mail address (S). Thanks, The NQP Team PS: Yes, this looks remarkably like the Linux CREDITS format PPS: This file is encoded in UTF-8 ---------- N: Daniel Arbelo Arrocha U: darbelo E: arbelo@gmail.com D: Minor code contributions (plumage) N: Geoff Broadwell U: japhb E: geoff@broadwell.org D: Initial design and implementation of Plumage. N: Jonathan "Duke" Leto U: leto D: Perl 6 (Rakudo Perl) developer E: jonathan@leto.net N: Jonathan Scott Duff U: perlpilot D: Perl 6 (Rakudo Perl) developer E: duff@pobox.com N: Jonathan Worthington U: jnthn D: Replacing object model with 6model, new multi-dispatcher E: jnthn@jnthn.net N: Patrick R. Michaud U: pmichaud D: Perl 6 (Rakudo Perl) lead developer, pumpking E: pmichaud@pobox.com N: Stefan O'Rear U: sorear D: Lexical persistance, POD, and other miscellaneous contributions E: stefanor@cox.net N: Stephen Weeks U: tene E: tene@allalone.org D: Assorted contributions (plumage) N: Vasily Chekalkin U: bacek D: Work on bringing Settings to NQP based on Plumage's NQPUtils. E: bacek@bacek.com =cut nqp-2015.11/Configure.pl000755 000765 000024 00000031777 12623372164 016740 0ustar00williamcoledastaff000000 000000 #! perl # Copyright (C) 2009 The Perl Foundation use 5.008; use strict; use warnings; use Text::ParseWords; use Getopt::Long; use Cwd qw/abs_path cwd/; use lib "tools/lib"; use NQP::Configure qw(cmp_rev read_parrot_config gen_moar fill_template_file fill_template_text probe_node slurp system_or_die verify_install sorry gen_parrot); my @known_backends = qw/moar jvm parrot js/; my %known_backends = map { $_, 1; } @known_backends; my %prefixes = ( moar => 'm', jvm => 'j', parrot => 'p', js => 'js' ); MAIN: { if (-r "config.default") { unshift @ARGV, shellwords(slurp('config.default')); } my $slash = $^O eq 'MSWin32' ? '\\' : '/'; my %config = (perl => $^X); $config{'nqp_config_status'} = join(' ', map { "\"$_\""} @ARGV); my $exe = $NQP::Configure::exe; my %options; GetOptions(\%options, 'help!', 'prefix=s', 'sysroot=s', 'sdkroot=s', 'backends=s', 'no-clean', 'with-parrot=s', 'gen-parrot:s', 'parrot-config=s', 'parrot-option=s@', 'with-moar=s', 'gen-moar:s', 'moar-option=s@', 'make-install!', 'makefile-timing!', 'git-protocol=s', 'git-depth=s', 'git-reference=s',); # Print help if it's requested if ($options{'help'}) { print_help(); exit(0); } # Deprecated --parrot-config option if ($options{'parrot-config'}) { sorry "The --parrot-config option has been removed.", "Use --prefix to specify a directory in which parrot is installed."; } my $default_backend; my @backends; my %backends; if ($options{backends}) { $options{backends} = join ',', @known_backends if lc($options{backends}) eq 'all'; for my $be (split /,/, $options{backends}) { $be = lc $be; unless ($known_backends{$be}) { die "Unknown backend: '$be'; Known backends: " . join(', ', sort keys %known_backends) . "\n"; } $default_backend ||= $be; push @backends, $be unless $backends{$be}; $backends{$be} = 1; } } if (defined $options{'gen-moar'}) { push @backends, 'moar' unless $backends{moar}; $backends{moar} = 1; $default_backend ||= 'moar'; } if (defined $options{'gen-parrot'}) { push @backends, 'parrot' unless $backends{parrot}; $backends{parrot} = 1; $default_backend ||= 'parrot'; } unless (%backends) { # TODO: come up with more sensible defaults $backends{moar} = 1; push @backends, 'moar'; $default_backend = 'moar'; } # XXX mkpath instead? mkdir($options{'prefix'}) if $options{'prefix'} && $^O =~ /Win32/ && !-d $options{'prefix'}; my $prefix = $options{'prefix'} ? abs_path($options{'prefix'}) : ($options{sysroot} ? '/usr' : File::Spec->catdir(cwd, 'install')); $config{prefix} = $prefix; $config{sysroot} = $options{sysroot}; $config{sdkroot} = $options{sdkroot}; # Save options in config.status unlink('config.status'); if (open(my $CONFIG_STATUS, '>', 'config.status')) { print $CONFIG_STATUS "$^X Configure.pl $config{'nqp_config_status'} \$*\n"; close($CONFIG_STATUS); } $config{'makefile-timing'} = $options{'makefile-timing'}; $config{'stagestats'} = '--stagestats' if $options{'makefile-timing'}; $config{'shell'} = $^O eq 'MSWin32' ? 'cmd' : 'sh'; $config{'bat'} = $^O eq 'MSWin32' ? '.bat' : ''; $config{'cpsep'} = $^O eq 'MSWin32' ? ';' : ':'; $config{'slash'} = $slash; open my $MAKEFILE, '>', 'Makefile' or die "Cannot open 'Makefile' for writing: $!"; my @prefixes = map { $prefixes{$_} } @backends; print $MAKEFILE "\n# Makefile code generated by Configure.pl:\n"; my $launcher = $prefixes{$default_backend} . '-runner-default'; print $MAKEFILE "all: ", join(' ', map("$_-all", @prefixes), $launcher), "\n"; print $MAKEFILE "install: ", join(' ', map("$_-install", @prefixes), $launcher . '-install'), "\n"; for my $t (qw/clean test qregex-test/) { print $MAKEFILE "$t: ", join(' ', map "$_-$t", @prefixes), "\n"; } fill_template_file( 'tools/build/Makefile-common.in', $MAKEFILE, %config, ); if ($backends{parrot}) { my $with_parrot = $options{'with-parrot'}; my $gen_parrot = $options{'gen-parrot'}; my ($par_want) = split(' ', slurp('tools/build/PARROT_REVISION')); if (defined $gen_parrot) { $with_parrot = gen_parrot($par_want, %options, prefix => $prefix); } my @errors; my %par_config; if ($with_parrot) { %par_config = read_parrot_config($with_parrot) or push @errors, "Unable to read configuration from $with_parrot."; } else { %par_config = read_parrot_config("$prefix/bin/parrot$exe", "parrot$exe") or push @errors, "Unable to find parrot."; $with_parrot = fill_template_text('@bindir@/parrot@exe@', %par_config); } %config = (%config, %par_config); my $par_have = $config{'parrot::git_describe'} || ''; if ($par_have && cmp_rev($par_have, $par_want) < 0) { push @errors, "Parrot revision $par_want required (currently $par_have)."; } if (!@errors) { push @errors, verify_install([@NQP::Configure::required_parrot_files], %config); push @errors, "(Perhaps you need to 'make install', 'make install-dev',", "or install the 'devel' package for Parrot?)" if @errors; } if (@errors && !defined $gen_parrot) { push @errors, "\nTo automatically clone (git) and build a copy of Parrot $par_want,", "try re-running Configure.pl with the '--gen-parrot' option.", "Or, use '--with-parrot=' to explicitly specify the Parrot", "executable to use to build NQP."; } sorry(@errors) if @errors; print "Using $with_parrot (version $config{'parrot::git_describe'}).\n"; if ($^O eq 'MSWin32' or $^O eq 'cygwin') { $config{'dll'} = '$(PARROT_BIN_DIR)/$(PARROT_LIB_SHARED)'; $config{'dllcopy'} = '$(PARROT_LIB_SHARED)'; $config{'make_dllcopy'} = '$(PARROT_DLL_COPY) : $(PARROT_DLL)'."\n\t".'$(CP) $(PARROT_DLL) .'; } my $make = fill_template_text('@make@', %config); if ($make eq 'nmake') { system_or_die('cd 3rdparty\dyncall && Configure.bat'); $config{'dyncall_build'} = 'cd 3rdparty\dyncall && nmake Nmakefile'; } else { if ($^O eq 'MSWin32') { my $configure_args = $config{'parrot::cc'} eq 'gcc' ? ' /tool-gcc' : ''; system_or_die('cd 3rdparty\dyncall && Configure.bat' . $configure_args); $config{'dyncall_build'} = "cd 3rdparty/dyncall && $make BUILD_DIR=. -f Makefile.embedded mingw32"; } else { system_or_die('cd 3rdparty/dyncall && sh configure'); if ($^O eq 'netbsd') { $config{'dyncall_build'} = "cd 3rdparty/dyncall && BUILD_DIR=. $make -f BSDmakefile"; } else { $config{'dyncall_build'} = "cd 3rdparty/dyncall && BUILD_DIR=. $make"; } } } fill_template_file( 'tools/build/Makefile-Parrot.in', $MAKEFILE, %config, ); if ($^O eq 'MSWin32') { fill_template_file('src/vm/parrot/nqp.bat', 'gen/parrot/nqp_launcher', %config); } else { fill_template_file('src/vm/parrot/nqp.sh', 'gen/parrot/nqp_launcher', %config); } chmod 0755, 'gen/parrot/nqp_launcher'; } if ($backends{moar}) { my @errors; my ($moar_want) = split(' ', slurp('tools/build/MOAR_REVISION')); my $moar_path = gen_moar($moar_want, %config, %options); if (!$moar_path) { push @errors, "No suitable MoarVM (moar executable) found using the --prefix\n" . "(You can get a MoarVM built automatically with --gen-moar.)"; } sorry(@errors) if @errors; $config{'make'} = `$moar_path --libpath="src/vm/moar/stage0" "src/vm/moar/stage0/nqp.moarvm" -e "print(nqp::backendconfig())"` || 'make'; $config{moar} = $moar_path; fill_template_file( 'tools/build/Makefile-Moar.in', $MAKEFILE, %config, ); } if ($backends{js}) { $config{'make'} = $^O eq 'MSWin32' ? 'nmake' : 'make'; my $node = probe_node(); if ($node eq 'nodejs') { sorry('You have a broken node.js. Please install node.js as node instead of nodejs.') } elsif (!$node) { sorry("You don't have node.js. Please install node.js."); } fill_template_file( 'tools/build/Makefile-JS.in', $MAKEFILE, %config, ); } if ($backends{jvm}) { my @errors; my $got; if (!@errors) { my @jvm_info = `java -showversion 2>&1`; my $jvm_found = 0; my $jvm_ok = 0; for (@jvm_info) { if (/(?:java|jdk) version "(\d+)\.(\d+)/) { $jvm_found = 1; if ($1 > 1 || $1 == 1 && $2 >= 7) { $jvm_ok = 1; } $got = $_; last; } } if (!$jvm_found) { push @errors, "No JVM (java executable) in path; cannot continue"; } elsif (!$jvm_ok) { push @errors, "Need at least JVM 1.7 (got $got)"; } } sorry(@errors) if @errors; print "Using $got\n"; $config{'make'} = $^O eq 'MSWin32' ? 'nmake' : 'make'; $config{'runner'} = $^O eq 'MSWin32' ? 'nqp.bat' : 'nqp'; fill_template_file( 'tools/build/Makefile-JVM.in', $MAKEFILE, %config, ); } my $ext = ''; if ($^O eq 'MSWin32') { $ext = $default_backend eq 'parrot' ? '.exe' : '.bat'; } print $MAKEFILE qq[t/*/*.t: all\n\tprove -r -v --exec ./nqp$ext \$\@\n]; close $MAKEFILE or die "Error while writing to 'Makefile': $!"; my $make = fill_template_text('@make@', %config); unless ($options{'no-clean'}) { no warnings; print "Cleaning up ...\n"; if (open my $CLEAN, '-|', "$make clean") { my @slurp = <$CLEAN>; close($CLEAN); } } if ($options{'make-install'}) { system_or_die($make); system_or_die($make, 'install'); print "\nNQP has been built and installed.\n"; } else { print "You can now use '$make' to build NQP.\n"; print "After that, '$make test' will run some tests and\n"; print "'$make install' will install NQP.\n"; } exit 0; } # Print some help text. sub print_help { my $backends = join ',',keys %known_backends; print <<"END"; Configure.pl - NQP Configure General Options: --help Show this text --prefix=dir Install files in dir --sdkroot=dir When given, use for searching build tools here, e.g. nqp, java etc. --sysroot=dir When given, use for searching runtime components here --backends=list Backends to use: $backends --with-parrot=path/to/bin/parrot Parrot executable to use to build NQP --gen-parrot[=branch] Download and build a copy of Parrot to use --parrot-option='--option=value' Options to pass to parrot configuration for --gen-parrot --gen-moar Download and build a copy of MoarVM to use --moar-option='--option=value' Options to pass to MoarVM configuration for --gen-moar --git-protocol={ssh,https,git} Protocol to use for git clone. Default: https --make-install Immediately run `MAKE install` after configuring --git-depth= Use the --git-depth option for git clone with parameter number --git-reference= Use --git-reference option to identify local path where git repositories are stored For example: --git-reference=/home/user/repo/for_perl6 Folders 'nqp', 'MoarVM', 'parrot' with corresponding git repos should be in for_perl6 folder Configure.pl also reads options from 'config.default' in the current directory. END return; } # Local Variables: # mode: cperl # cperl-indent-level: 4 # fill-column: 100 # End: # vim: expandtab shiftwidth=4: nqp-2015.11/LICENSE000644 000765 000024 00000021300 12534342605 015437 0ustar00williamcoledastaff000000 000000 The Artistic License 2.0 Copyright (c) 2000-2006, The Perl Foundation. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble This license establishes the terms under which a given free software Package may be copied, modified, distributed, and/or redistributed. The intent is that the Copyright Holder maintains some artistic control over the development of that Package while still keeping the Package available as open source and free software. You are always permitted to make arrangements wholly outside of this license directly with the Copyright Holder of a given Package. If the terms of this license do not permit the full use that you propose to make of the Package, you should contact the Copyright Holder and seek a different licensing arrangement. Definitions "Copyright Holder" means the individual(s) or organization(s) named in the copyright notice for the entire Package. "Contributor" means any party that has contributed code or other material to the Package, in accordance with the Copyright Holder's procedures. "You" and "your" means any person who would like to copy, distribute, or modify the Package. "Package" means the collection of files distributed by the Copyright Holder, and derivatives of that collection and/or of those files. A given Package may consist of either the Standard Version, or a Modified Version. "Distribute" means providing a copy of the Package or making it accessible to anyone else, or in the case of a company or organization, to others outside of your company or organization. "Distributor Fee" means any fee that you charge for Distributing this Package or providing support for this Package to another party. It does not mean licensing fees. "Standard Version" refers to the Package if it has not been modified, or has been modified only in ways explicitly requested by the Copyright Holder. "Modified Version" means the Package, if it has been changed, and such changes were not explicitly requested by the Copyright Holder. "Original License" means this Artistic License as Distributed with the Standard Version of the Package, in its current version or as it may be modified by The Perl Foundation in the future. "Source" form means the source code, documentation source, and configuration files for the Package. "Compiled" form means the compiled bytecode, object code, binary, or any other form resulting from mechanical transformation or translation of the Source form. Permission for Use and Modification Without Distribution (1) You are permitted to use the Standard Version and create and use Modified Versions for any purpose without restriction, provided that you do not Distribute the Modified Version. Permissions for Redistribution of the Standard Version (2) You may Distribute verbatim copies of the Source form of the Standard Version of this Package in any medium without restriction, either gratis or for a Distributor Fee, provided that you duplicate all of the original copyright notices and associated disclaimers. At your discretion, such verbatim copies may or may not include a Compiled form of the Package. (3) You may apply any bug fixes, portability changes, and other modifications made available from the Copyright Holder. The resulting Package will still be considered the Standard Version, and as such will be subject to the Original License. Distribution of Modified Versions of the Package as Source (4) You may Distribute your Modified Version as Source (either gratis or for a Distributor Fee, and with or without a Compiled form of the Modified Version) provided that you clearly document how it differs from the Standard Version, including, but not limited to, documenting any non-standard features, executables, or modules, and provided that you do at least ONE of the following: (a) make the Modified Version available to the Copyright Holder of the Standard Version, under the Original License, so that the Copyright Holder may include your modifications in the Standard Version. (b) ensure that installation of your Modified Version does not prevent the user installing or running the Standard Version. In addition, the Modified Version must bear a name that is different from the name of the Standard Version. (c) allow anyone who receives a copy of the Modified Version to make the Source form of the Modified Version available to others under (i) the Original License or (ii) a license that permits the licensee to freely copy, modify and redistribute the Modified Version using the same licensing terms that apply to the copy that the licensee received, and requires that the Source form of the Modified Version, and of any works derived from it, be made freely available in that license fees are prohibited but Distributor Fees are allowed. Distribution of Compiled Forms of the Standard Version or Modified Versions without the Source (5) You may Distribute Compiled forms of the Standard Version without the Source, provided that you include complete instructions on how to get the Source of the Standard Version. Such instructions must be valid at the time of your distribution. If these instructions, at any time while you are carrying out such distribution, become invalid, you must provide new instructions on demand or cease further distribution. If you provide valid instructions or cease distribution within thirty days after you become aware that the instructions are invalid, then you do not forfeit any of your rights under this license. (6) You may Distribute a Modified Version in Compiled form without the Source, provided that you comply with Section 4 with respect to the Source of the Modified Version. Aggregating or Linking the Package (7) You may aggregate the Package (either the Standard Version or Modified Version) with other packages and Distribute the resulting aggregation provided that you do not charge a licensing fee for the Package. Distributor Fees are permitted, and licensing fees for other components in the aggregation are permitted. The terms of this license apply to the use and Distribution of the Standard or Modified Versions as included in the aggregation. (8) You are permitted to link Modified and Standard Versions with other works, to embed the Package in a larger work of your own, or to build stand-alone binary or bytecode versions of applications that include the Package, and Distribute the result without restriction, provided the result does not expose a direct interface to the Package. Items That are Not Considered Part of a Modified Version (9) Works (including, but not limited to, modules and scripts) that merely extend or make use of the Package, do not, by themselves, cause the Package to be a Modified Version. In addition, such works are not considered parts of the Package itself, and are not subject to the terms of this license. General Provisions (10) Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license. (11) If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license. (12) This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder. (13) This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed. (14) Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. nqp-2015.11/README.pod000644 000765 000024 00000011236 12576615053 016110 0ustar00williamcoledastaff000000 000000 =head1 NQP - Not Quite Perl (6) NQP is Copyright (C) 2009-2015 by The Perl Foundation. See F for licensing details. This is "Not Quite Perl" -- a lightweight Perl 6-like environment for virtual machines. The key feature of NQP is that it's designed to be a very small environment (as compared with, say, perl6 or Rakudo) and is focused on being a high-level way to create compilers and libraries for virtual machines (such as the Parrot Virtual Machine [1], the JVM, and MoarVM [2]). Unlike a full-fledged implementation of Perl 6, NQP strives to have as small a runtime footprint as it can, while still providing a Perl 6 object model and regular expression engine for the virtual machine. [1] http://parrot.org/ [2] https://github.com/MoarVM/MoarVM =head2 Building from source =for HTML To build NQP from source, you'll just need a C utility and Perl 5.8 or newer. To automatically obtain and build Parrot you may also need a git client. To obtain NQP directly from its repository: $ git clone git://github.com/perl6/nqp.git If you don't have git installed, you can get a tarball or zip of NQP from github by visiting http://github.com/perl6/nqp/tree/master and clicking "Download". Then unpack the tarball or zip. NQP can run on three different backends: Parrot, MoarVM and the Java Virtual Machine (JVM). Decide on which backends you want it to run, and configure and build it as follows: Once you have a copy of NQP, build it as follows: $ cd nqp $ perl Configure.pl --backends=moar,parrot,jvm $ make If you don't have parrot installed, you can have Configure.pl generate one for you by passing the C<--gen-parrot> option to it as well. If you don't have MoarVM installed, you can have Configure.pl generate one for you by passing the C<--gen-moar> option to it as well. The C step will create a "nqp" or "nqp.exe" executable in the current directory. Programs can then be run from the build directory using a command like: $ ./nqp hello.nqp By default, NQP searches for the parrot executable and installs to the directory C<./install>. You can change that with the C<--prefix> option to Configure.pl. Once built, NQP's C target will install NQP and its libraries into the Parrot installation that was used to create it. Until this step is performed, the "nqp" executable created by C above can only be reliably run from the root of NQP's build directory. After C is performed the executable can be run from any directory (as long as the Parrot installation that was used to create it remains intact). If the NQP compiler is invoked without an explicit script to run, it enters a small interactive mode that allows statements to be executed from the command line. Each line entered is treated as a separate compilation unit, however (which means that subroutines are preserved after they are defined, but variables are not). =head2 Troubleshooting =head3 OS X On OS X, it appears that configuration fails in some configurations: 3rdparty/libuv/include/uv-darwin.h:26:11: fatal error: 'mach/mach.h' file not found Should this happen to you, then a solution might be the following: $ cd MoarVM/3rdparty/libuv/include $ ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/mach $ cd ../../../.. $ # run the Configure again Note that the 10.9 in the above, represents the major version of OS X being used. On Mavericks use 10.9 (like above), on Yosemite use 10.10. =head2 Differences from nqp-rx NQP is the successor implementation of "nqp-rx" [2]. Unlike nqp-rx, which aimed to have almost no runtime component whatsoever, this new version of NQP accepts that a minimal Perl 6 object metamodel, multidispatcher, and regular expression engine are needed on top of the underlying virtual machine. Also, nqp-rx only ran on Parrot, whereas NQP also runs on the JVM and MoarVM and is designed to be portable to more. [2] http://github.com/perl6/nqp-rx =head2 JavaScript backend The JavaScript backend is currently undergoing a refactor/rewrite of parts to generate decently performing javascript, add source maps and remove some old hack as well as clean up the code. As a result of that it's in a really rough state so the best thing before playing with it/hacking on it is to contact pmurias via irc at #perl6 on irc.freenode.org. Building the JavaScript backend currently requires building the moar backend. perl Configure.pl --backends=moar,js make Currently it needs to be run like: ./nqp-js file.nqp To run the tests make js-test nqp-2015.11/TODO000644 000765 000024 00000002316 12576615053 015136 0ustar00williamcoledastaff000000 000000 - port from using bigint to bignum (it's more mantained, builds on current node.js etc.) the tricky part about that is getting binary and/or working on negative bignums under bigint Portability - Check if Function.name works on IE. If it doesn't instead checking for _ in callercode check for a custom property. General stuff that helps all backends Write tests (to avoid implementing stuff in crazy ways) - nfarunalt - nqp::eoffh - EASY - nqp::isstr - nqp::getmessage - nqp::printfh in combination with nqp::getstdout(),nqp::getstderr() - add a test for nqp::index with three arguments to t/nqp/59-nqpop.t - EASY - a test for if cond() -> $value-of-cond {...} - EASY - nqp::ifnull Improving the code quality (which is a bit less atrocious then before ) - Write a nqptidy (or a p6tidy) to make sure the nqp code has a consistent style - Tricky and/or confusing bits of code should be identified so that they get commented Build system - make install should install a nqp-js runner. Portability - Get the build system to work on windows (haven't tried that yet) Expand the HACKING file. (Asking question that pmurias will glady answer is the best way to do this) nqp-2015.11/VERSION000644 000765 000024 00000000010 12623372214 015473 0ustar00williamcoledastaff000000 000000 2015.11 nqp-2015.11/docs/6model/faq.markdown000644 000765 000024 00000003660 12534342605 021074 0ustar00williamcoledastaff000000 000000 # FAQ This document tries to collect various frequently asked questions about 6model and provides answers to them. ## My language has objects but no methods; is 6model a bad fit? Not really. You are not forced to implement methods in the meta-object to handle add_method or find_method, and of course your meta-object would thus have no storage allocated for a method table. The only wastage is that you have no usage for the method cache and v-table slots in the s-table. That means that per type (not per object instance) you'd have a couple of wasted slots, each a pointer in size. Thus on a 32-bit machine, 100 classes/types later, you've still yet to "waste" a kilobyte. ## What is a type object, and how should I use it? When you pair a meta-class and a representation together, an s-table is created along with a type object. The type-object becomes your "handle" to that pairing, and can be used to create instances of the object. In some languages (Perl 6), you would also install the type object into the namespace (package or lexpad), as the user's view of the type. However, that is not at all needed. For a prototype-based language, you probably only ever make one type object. You can just stash it somewhere and use it whenever you need to create a new instance. If new instances are always just clones anyway, then you needn't even keep hold of it, just install the initial instance you create wherever it should go and then it can be cloned from there on in. For a class based language, you'll always need to have *some* way of identifying a class to make an instance of. The type object is your handle for creating an instance. You may make a lookup table of the type objects and map instantiations of types through that table. If you install a "class object" of some kind and it is what manages the instantiation then you could have it holding the handle. How you handle it is really very dependent on how your language exposes object creation. nqp-2015.11/docs/6model/overview.markdown000644 000765 000024 00000023367 12534342605 022201 0ustar00williamcoledastaff000000 000000 # Overview ## What is 6model? 6model is a framework for building implementations of object oriented features. It does not contain an implementation of classes, interfaces, roles, prototype objects and so forth. Instead, it provides you with a set of building blocks that enable you to build these kinds of features as your language needs them. To make an analogy with another part of the compiler toolkit, we don't provide a full grammar for your language, but do provide a grammar engine, quote parser, operator precedence parser and other helpful building blocks to get you started. ## 6model Workflow In general, when you want to implement the object system for your language using 6model, you will go through the following workflow. 1. Identify the kinds of object oriented types your language has and that you will need to implement. For example, in Perl 6 we have - amongst other things - classes, roles and enumerations. In Java, you'd have classes and interfaces. In JavaScript, you have prototype objects. 2. For each of them, pick a suitable in-memory representation. 6model provides some of these out of the box. In a language where you know all of the attributes an object will have "up-front", you can pick a representation that will just allocate a single piece of memory for an object and map each attribute to a slot. In a language where you can get attributes coming to exist at any point and an object is just like a hash table or dictionary, you can pick a representation where your object works just like a hash. 3. Having picked a representation - which will control how your objects are allocated and store/fetch attributes - you now implement meta-objects for each kind of object oriented type in your language. A meta-object is simply an object that responds to different events that occur in the life of a type. For example, at declaration time we create a new type, add methods, add a parent type (e.g. inheritance), add attributes and so forth. Later on we may locate methods, do dynamic type checks (e.g. is-a). Implementing a meta-object just involves writing a method for to handle each of these "events". 4. Compile the language's type declarations to calls on the meta-object. Thus it's the meta-object that decides how most aspects of a type work: whether it can accept having more than one parent (if it does at all), how it dispatches methods (if it does at all) and so forth. However, certain aspects are handled by the representation: allocation of an object, storage of attributes and boxing/unboxing. In some VMs the representation also needs to interact with the GC. Essentially, meta-object + representation = full implementation of some kind of object oriented type (e.g. a class). Usually, you will just pick an existing representation and implement the meta-object yourself. Notice this means that you can factor your implementation of OO features using OO principles. ## Representations Representations are low-level things that are closely tied to the underlying VM. They do expose a common API over all of them, however. The following operations are available on representations. * **type_object_for** takes a meta-object and creates a type object that represents the association of the provided meta-object and this representation. What you do with the type object depends on your language. You could see it as an "instantiation handle" - you use it in order to create an instance of an object with the given meta-object/representation pairing. * **instance_of** does exactly what it says - creates a new instance. You can supply it with the type object OR with any existing instance, it doesn't matter. Note that this really does just allocate space in memory for the object; it's not any kind of "high level" instantiation where attributes get pre-populated with empty containers. * **defined** basically tells you if the thing you have is a type object or an actual instance. For many languages you'll not need this. It may come in useful in some languages to distinguish static and instance method dispatch. * **get_attribute** looks up an attribute. It expects to give back an object of some kind. There are variants for native types: **get_attribute_int**, **get_attribute_num** and **get_attribute_str**. All of them expect the object to access the attribute of. You may also pass one or all of an attribute name, a class handle (for when attributes are not keyed just one name) and an index for when it's possible to access an attribute by an offset rather than just by name. What's needed varies by representation. * **bind_attribute** and its native friends are basically what you'd expect, and look largely like get_attribute apart from they take something to store in the attribute rather than doing a lookup. * **hint_for** takes an attribute name and optional a class handle and will hand back - if available - an offset that can also be used to look up the attribute. Interesting in gradual or static typing scenarios. * 6model representations may provide direct support for boxing and unboxing native types. This is exposed through [set|get]_[int|num|str] operations. Details vary by representation. ## Meta-objects A meta-object is simply an object that says how another object works. Critically, it's __just an object__. It may have attributes and it will certainly have methods. Like any other object, it also has a meta-object that says how it works. You may be tempted to start categorising objects into "normal objects" versus "meta-objects", but it's important to understand that 6model makes no distinction. A meta-object isn't any kind of special object, it's just an object that happens to be serving a particular role. Meta-objects contain methods that relate to certain events in the lifetime of a type. Let's imagine we have a really simple language where we can declare some kind of type that has methods, make instances of it and call the methods (granted, the instances are a bit useless until we add attributes). We could write (in NQP) the following. class SimpleMetaObject { has %!methods; method new_type() { my $meta-object := self.new(); return nqp::newtype($meta-object, 'HashAttrStore'); } method add_method($type, $name, $code) { %!methods{$name} := $code; } method find_method($type, $name) { %!methods{$name} } } Notice how this meta-object is just written as a normal class. Of course, the class itself has a meta-object saying how it works - it's meta-objects all the way down. The next thing to note is that we just used a hash in order to implement our method store. Creating a new type and adding a method are just methods that we include. Here's how we can use the meta-object to define a new type, and add a method. # Create a new type. my $type := SimpleMetaObject.new(); # Add a method. $type.HOW.add_method($type, 'drink', -> $self { say("mmmm...Starobrno!") }); The .HOW macro in NQP maps to the PIR get_how opcode and it is used to get hold of the meta-object. We just pass a simple lambda expression in to add_method in order to specify what happens when the method is called. Finally, we can make an instance and call the method. # Make an instance. my $obj := nqp::create($type); # Call the method. $obj.drink(); Notice that we didn't ever call our find_method method ourselves. In fact, this is the only place so far where 6model has actually given us any kind of restriction on how our meta-object should look; the names of add_method and new_type are conventions. Under the hood, 6model has gone and used the find_method method on the meta-object when we did a method call on the object. A question you may be left with is why the convention to take the type object as the first parameter in all of the methods of the meta-object. This isn't needed when doing something more "class based", but is important in a more prototype-OO-ish setting. ## Performance So far we have seen that one would tend to implement things like method dispatch and type checking by writing methods in the meta-object. This may feel a little heavyweight for an operation that is very common, and indeed it is. 6model thus provides you with the possibility to publish some "caches" that expose views of certain aspects of the meta-object in a more low-level way to the VM. Thus it is able to perform some frequent opertaions much more quickly. Of note, it is possible to publish: * A name to method cache, which is useful for dispatching methods by name. This is useful in most dynamic languages, and means that method dispatch can just be looking in a hash table. Generally this presents a flat view, with the methods from any parent types included so there is no walking required at runtime. * A v-table, which you can also thing of as an index to method cache. This is useful in static or gradually typed languages, where a method call can be mapped to looking for the method in a certain slot. Since this boils down to a (machine-level) array lookup, it's fast. * A type check cache. This is useful for doing fast type checks. It contains references to other types that the current one could be considered as "doing"/"being". Thus it is useful for is-a and does-a operations. The current 6model implementation has it being scanned linearly. This is a low-level loop over a low-level array, so it should be pretty fast, however. The word "cache" is chosen very deliberately. It's important that the meta-object knows that it is responsible for the updaing of any of the extra views of itself that it chooses to publish. Put another way, in 6model the meta-object itself is always the authoritative source. nqp-2015.11/docs/6model/repr-compose-protocol.markdown000644 000765 000024 00000011237 12547774055 024612 0ustar00williamcoledastaff000000 000000 # REPR Compose Protocol In 6model, representations take responsibility for memory layout, while a meta-object is responsible for other aspects of type-ness (dispatch, type checking, etc.) Typically, meta-objects are at some point "composed" - that is, they reach a point where the definition of the type they represent is either closed or complete in some sense. Certain representations need to be (or in some cases, may be) configured. For example, a representation that does efficient storage of an object's attributes needs configuring with information about the things it should store. This configuration happens through the REPR composition protocol. The meta-object uses the nqp::composetype primitive in order to do this. The protocol is defined entirely in terms of arrays and hashes. Why? So we don't have to define a particularly complex object system in order to define an object system. :-) At the top level, a hash is always passed. Its keys indicate the configuration for a specific part of the protocol, the the values are a data structure providing the appropriate information. The rest of this documentation describes these protocols; each heading is a key that can appear in the top level hash, and what's below it indicates what should fall beneath those keys. ## attribute The value is an array with one element for each entry in the MRO, from most derived to least derived. Each element is in turn an array, consisting of 3 elements: * The type object of the type at this point in the MRO * An array of hashes, each hash describing an attribute * The immediate parents, if any, of the type object in question The hash describing an individual attribute must have the following keys: * name - provides the name of the attribute It may optionally have these keys: * type - type object specifying the type of the attribute. Note that this is used purely for the purpose of allocation. It is NOT up to the REPR to do type checks. Anything without this is assumed to be a reference type. In fact, anything that's a reference type is uninteresting in terms of this key since it just gets a reference to another object. It's native types or other compact things that can be flattened into the object body that are interesting. * box_target - if this key is present, then this type is a target for boxing or unboxing. * auto_viv_container - if this key is present then an access to an attribute that is uninitialized will cause that attribute to be set to a clone of the value under this key. If the value is a type object, the clone will not take place, since cloning a type object is meaningless. * positional_delegate - if this key is present, the given (reference type) attribute will be delegated to if the positional part of the REPR API is used with the object. This is primarily to support languages that need to reasonably efficiently provide positional things that can also be mixed in to in arbitrary ways. * associative_delegate - the same as positional_delegate, for the associative part of the REPR API. ## integer A hash that may have the following keys: * bits - the number of bits. Which sizes are supported are up to the REPR. * unsigned - if this key exists, then the stored value is unsigned. ## float A hash that may have the following keys: * bits - the number of bits. Which sizes are supported are up to the REPR. ## array A hash that may have the following keys: * type - the type of the array attributes. While all reference types are equivalent, native types will be inlined, leading to a compact array. A REPR is free to decide what types it supports, and just because it is asked to be an array of 1-bit ints in no way obligates it to use a bit of storage for each element. Again, this is just about layout and lookup, not about type checking. * dimensions - the number of dimensions an array of this type supports. A given REPR may be restricted to only support a single dimensions. ## hash A hash that may have the following keys: * valuetype - the type of the hash value. As with arrays, it's up to the REPR how or if it handles native types. Just about layout. * keytype - the type of the hash key. REPRs are likely to be restrictive here, since they need to understand the representation of the provided key well enough to hash it. This will probably mean strings and whatever REPR ObjAt in Perl 6 (or some other language's variant) has. ## nativeref A hash that must have the following two keys: * type - the native type that is being referenced. Must have a storage spec that claims to be a native int/num/str. * refkind - the kind of reference, specified as a string. Must be one of 'attribute', 'positional', or 'lexical'. nqp-2015.11/docs/HACKING-js000644 000765 000024 00000005000 12612231504 016752 0ustar00williamcoledastaff000000 000000 # Hacking tips for the JS backend of NQP # Source layout. src/vm/js/QAST/Compiler.nqp - turns QAST into JavaScript code src/vm/js/nqp-runtime - a node module the code we generate uses src/vm/js/bin/run_tests.pl - a list of tests we use # Overview The bulk of the compilation is done by QAST::CompilerJS.as_js($node, :$want). It takes a QAST::Node and produces a Chunk. A chunk is created by Chunk.new($type, $expr, @setup, :$node). $expr represents a sideffect free JavaScript expression. $type describes what the expression evaluates to. $type can be one of $T_OBJ, $T_INT, $T_STR, $T_BOOL, $T_VOID, $T_NONVAL. @setup is the JavaScript code that needs to be run for $expr to be valid. @setup is an array containing either string literals with JavaScript code or other Chunks. $node is a QAST::Node we get line positions from when emitting source maps. Simple chunk examples: Chunk.new($T_STR, "'Hello World'", []); my $foo := Chunk.new($T_STR, "foo", ["var foo = 'Hello World';\n"]); Chunk.new($T_VOID, "", [$foo, "alert({$foo.expr});\n"]); # We don't ever use the $expr of $T_VOID chunks When compiling a QAST::Block we need to keep a bunch of information about it. We store it in a dynamic $*BLOCK variable (which contains a BlockInfo). my $tmp := $*BLOCK.add_tmp(); # that creates a temporary variable in js function we are emitting. my $foo := Chunk.new($T_STR, $tmp, ["$tmp = 'Hello World';\n"]); # NQP op codes QAST::OperationsJS.compile_op(QAST::CompilerJS $compiler, QAST::Node $node, :$want) handles the compilation of QAST::Op nodes The more complex ops are defined using add_op. add_op($op, sub ($comp, $node, :$want) { # this should return a chunk }); The simpler ones are defined using add_simple_op($op, $return_type, @argument_types, $cb, :$sideffects). $cb gets a bunch of .expr parts from the Chunks the op arguments are compiled to. $cb should return a string containing a JavaScript expression. If the op has sideffects the :$sideffects flag needs to be true. Example: add_simple_op('lc', $T_STR, [$T_STR], sub ($string) {"$string.toLowerCase()"}); Sometimes old code can be scavanged for ways to implement things on node from src/vm/old-runtime-code (warning: crap code lives there). Looking at src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java and src/vm/jvm/QAST/Compiler.nqp can provide insight on how the various ops should work. # Reading generated code ./nqp-js --target=js --beautify -e 'say("Hello World")' # t/js JS backend specific tests should placed here nqp-2015.11/docs/bootstrapping.pod000644 000765 000024 00000002100 12534342605 020756 0ustar00williamcoledastaff000000 000000 =head1 Bootstrapping procedure for nqp-rx NPQ-rx is a bootstrapped compiler, which means that it uses itself to compile itself. To make the first compilation possible, a compiled version of the compiler is stored in F and included in the source code repository. Also the parrot virtual machine ships the same C files. When you make changes to the compiler, eventually you need to update these I files. Here is how you proceed to update the bootstrapping files nqp-rx and parrot. At any stage, if C fails, don't go ahead with the following steps, but fix the problem first. =over =item * Make your changes, run C =item * Run C and C =item * Commit the non-bootstrap files that you modified yourself =item * Commit the bootstrap files =item * Copy the I files over to parrot: cp src/stage0/*.pir $PARROT_SRC/ext/nqp-rx/src/stage0 =item * In the parrot source, run C and commit =back References: L nqp-2015.11/docs/continuations.pod000644 000765 000024 00000015410 12534342605 020770 0ustar00williamcoledastaff000000 000000 =head1 Continuations in NQP This document describes a somewhat experimental and JVM-only NQP feature: the ability to freeze and thaw stack frames for implementing unusual control flow. =head2 Interface I think that the best abstraction to what I'm trying to build here is the B (L). =over 4 =item nqp::continuationreset($tag, { ... }) Executes the argument, marking the stack for a subsequent C operation within the dynamic scope. The C<$tag> is an object which can be used later by C to find a specific reset frame. =item nqp::continuationcontrol($protect, $tag, -> $cont { ... }) Slices off the part of the evaluation stack between the current call frame and the innermost enclosing C. If C<$tag> is not null, only resets with the same tag are considered; otherwise the innermost reset will be taken regardless of tag. If there is no such reset, or if there is a non-saveable frame (aka continuation barrier) between the current position and the matching reset, an error occurs. The sliced-off part of the stack is wrapped in an NQP object and passed to the callback function; it is removed from the stack, so B to return immediately with the returned value>. C<$protect> is an integer. If it is 1, the reset will be retained on the stack while the handler is being executed; if it is 0, the reset will be removed. Other values are undefined. In no case will the matched reset be included in the captured continuation object (although an unmatched reset which is skipped over would be). Thus, C corresponds to the standard C operator, while C corresponds to the standard C operator. To simulate C and C, manually add the reset before invoking the continuation. =item nqp::continuationinvoke($cont, $inject) Pastes the saved call frames onto the current stack, such that C calls C<$inject> within the restored dynamic scope and returns its return value. Control returns to the caller when the callback to C returns, with the same value. This can be used multiple times on the same continuation. (Actually, delimited continuations are traditionally represented as functions, so this operator is implicit and unnamed. But sixmodel makes that slightly tricky.) =item nqp::continuationclone($cont) Produces a shallow clone of the passed continuation. This is presently necessary in situations where a continuation must be active twice at the same time. At present, lexical variables will remain shared but locals will not. B